From cd8e5a8ce019b00181c3612ed3b6e19d87dc072b Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Tue, 29 Nov 2022 16:19:58 +0100 Subject: [PATCH 001/208] Update dialogs --- tutorials/in-app/flingGame.json | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index f025e94..19422c7 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -61,12 +61,23 @@ "content": [ { "messageByLocale": { - "en": "## Congratulations!" + "en": "# You've finished your Fling Game!" } }, { "messageByLocale": { - "en": "You just finished the first part of the fling game tutorial." + "en": "Share it with your friends and see who gets the highest score!" + } + }, + { + "messageByLocale": { + "en": "Ready to make a new game? Click to discover what GDevelop can do!" + } + }, + { + "image": { + "imageSource": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzkiIGhlaWdodD0iMTM2IiB2aWV3Qm94PSIwIDAgNzkgMTM2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMjI4Xzc2OCkiPgo8cGF0aCBkPSJNMzkuODE2MiA4OC43MDM0TDcyLjEyNTQgMTA3LjQzMkwzNS4zNzUyIDEyOC42MTlMMy4wNjU5OSAxMDkuODkxTDM5LjgxNjIgODguNzAzNFoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMjhfNzY4KSIvPgo8bWFzayBpZD0ibWFzazBfMjI4Xzc2OCIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMTgiIHk9IjY3IiB3aWR0aD0iNDgiIGhlaWdodD0iNjIiPgo8cGF0aCBkPSJNMzYuNDc1IDEyNy44NzFMNjEuNDI4MyAxMTMuNTg4TDY1LjgxODggODIuNzcxOEw0OS45MzcxIDY3LjIxNDRMMTguMjgyIDc2LjcyMTdMMjAuNDk3NSAxMTkuOTExTDI2LjA2ODkgMTIzLjExTDM1LjI1ODYgMTI4LjQzTDM2LjQ3NSAxMjcuODcxWiIgZmlsbD0iI0M0QzRDNCIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMjI4Xzc2OCkiPgo8cmVjdCB3aWR0aD0iNy4wMTA4NiIgaGVpZ2h0PSI1Ni44Nzk3IiByeD0iMC41IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSA1MC42MzkgNzQuMzUxOCkiIGZpbGw9IiM1NjM4MzkiLz4KPGNpcmNsZSByPSIyLjg4NTAyIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC44NjYwNDQgMC40OTk5NjcgMC44NjYwNDQgMC40OTk5NjcgNDcuMTU1MyA3NC43MzYxKSIgZmlsbD0iI0M0ODI3MCIvPgo8cGF0aCBkPSJNNDMuNTY2NyA4NS4xNTI2QzQ0LjM3MTUgODQuNjg3OCA0NS42NDYzIDg0LjYzNjEgNDYuNTU1NiA4NS4wMzE1QzQ3LjY2NCA4NS41MTM0IDQ3Ljc3NzggODYuNDQ5OSA0Ni43OTY5IDg3LjAxNjRMMzEuMDM4NCA5Ni4xMTgxQzMwLjE3NTIgOTYuNjE2NyAyOC44MDc3IDk2LjY3MjEgMjcuODMyMyA5Ni4yNDhMMjYuOTc0NiA5NS44NzUxQzI2LjM4MDEgOTUuNjE2NyAyNi4zMTkgOTUuMTE0NCAyNi44NDUyIDk0LjgxMDVMNDMuNTY2NyA4NS4xNTI2WiIgZmlsbD0iI0M0ODI3MCIvPgo8cGF0aCBkPSJNNDYuMDQgODYuMzkzNUM0Ni44MTEyIDg1Ljk0NzIgNDguMTMyMSA4Ni4yNjI1IDQ4LjEzMTkgODYuODkyOUw0OC4xMzA5IDkwLjcyNUM0OC4xMzA5IDkwLjkxMjIgNDguMDAyMyA5MS4wOTE3IDQ3Ljc3MzMgOTEuMjI0M0wyNS4wNTUgMTA0LjM3MkMyNC42Njk0IDEwNC41OTYgMjQuMDA4OSAxMDQuNDM4IDI0LjAwOSAxMDQuMTIzTDI0LjAxMDMgOTkuMjg5M0MyNC4wMTAzIDk5LjE5NTcgMjQuMDc0NiA5OS4xMDU5IDI0LjE4OTEgOTkuMDM5Nkw0Ni4wNCA4Ni4zOTM1WiIgZmlsbD0iIzcxNEY0RiIvPgo8cGF0aCBkPSJNNDMuNTY3MyAxMDIuMDQzQzQ0LjM3MiAxMDEuNTc5IDQ1LjY0NjggMTAxLjUyNyA0Ni41NTYxIDEwMS45MjJDNDcuNjY0NSAxMDIuNDA0IDQ3Ljc3ODQgMTAzLjM0MSA0Ni43OTc0IDEwMy45MDdMMzEuMDM4OSAxMTMuMDA5QzMwLjE3NTcgMTEzLjUwOCAyOC44MDgyIDExMy41NjMgMjcuODMyOCAxMTMuMTM5TDI2Ljk3NTEgMTEyLjc2NkMyNi4zODA2IDExMi41MDcgMjYuMzE5NiAxMTIuMDA1IDI2Ljg0NTcgMTExLjcwMUw0My41NjczIDEwMi4wNDNaIiBmaWxsPSIjQzQ4MjcwIi8+CjxwYXRoIGQ9Ik00Ni4wNDA1IDEwMy40MTdDNDYuODExNyAxMDIuOTcxIDQ4LjEzMjUgMTAzLjI4NiA0OC4xMzI0IDEwMy45MTZMNDguMTMxNCAxMDcuNzQ5QzQ4LjEzMTQgMTA3LjkzNiA0OC4wMDI3IDEwOC4xMTUgNDcuNzczOCAxMDguMjQ4TDI1LjA1NTQgMTIxLjM5NkMyNC42Njk4IDEyMS42MTkgMjQuMDA5NCAxMjEuNDYxIDI0LjAwOTUgMTIxLjE0NkwyNC4wMTA3IDExNi4zMTNDMjQuMDEwOCAxMTYuMjE5IDI0LjA3NTEgMTE2LjEyOSAyNC4xODk2IDExNi4wNjNMNDYuMDQwNSAxMDMuNDE3WiIgZmlsbD0iIzcxNEY0RiIvPgo8cGF0aCBkPSJNNDMuNTY3OSAxMTguODkyQzQ0LjM3MjYgMTE4LjQyNyA0NS42NDc0IDExOC4zNzUgNDYuNTU2NyAxMTguNzcxQzQ3LjY2NTEgMTE5LjI1MyA0Ny43NzkgMTIwLjE4OSA0Ni43OTggMTIwLjc1NkwzMS4wMzk1IDEyOS44NTdDMzAuMTc2MyAxMzAuMzU2IDI4LjgwODggMTMwLjQxMSAyNy44MzM0IDEyOS45ODdMMjYuOTc1NyAxMjkuNjE0QzI2LjM4MTIgMTI5LjM1NiAyNi4zMjAyIDEyOC44NTQgMjYuODQ2MyAxMjguNTVMNDMuNTY3OSAxMTguODkyWiIgZmlsbD0iI0M0ODI3MCIvPgo8cGF0aCBkPSJNNDYuMDA2OCAxMjAuMjk4QzQ2Ljc3OCAxMTkuODUyIDQ4LjA5ODkgMTIwLjE2NyA0OC4wOTg3IDEyMC43OThMNDguMDk3NyAxMjQuNjNDNDguMDk3NyAxMjQuODE3IDQ3Ljk2OTEgMTI0Ljk5NiA0Ny43NDAxIDEyNS4xMjlMMjUuMDIxOCAxMzguMjc3QzI0LjYzNjIgMTM4LjUgMjMuOTc1NyAxMzguMzQzIDIzLjk3NTggMTM4LjAyN0wyMy45NzcxIDEzMy4xOTRDMjMuOTc3MSAxMzMuMSAyNC4wNDE0IDEzMy4wMTEgMjQuMTU1OSAxMzIuOTQ0TDQ2LjAwNjggMTIwLjI5OFoiIGZpbGw9IiM3MTRGNEYiLz4KPHJlY3Qgd2lkdGg9IjcuMDEwODYiIGhlaWdodD0iNTYuODc5NyIgcng9IjAuNSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjkuODUxNiA4Ni4zODA5KSIgZmlsbD0iIzU2MzgzOSIvPgo8Y2lyY2xlIHI9IjIuODg1MDIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg2NjA0NCAwLjQ5OTk2NyAwLjg2NjA0NCAwLjQ5OTk2NyAyNi4zNjc1IDg2Ljc2NDkpIiBmaWxsPSIjQzQ4MjcwIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC42NSI+CjxwYXRoIGQ9Ik0xNS44NTQ5IDYzLjY4MTVDMTYuMDM3MSA2My42ODE1IDE2LjE4NDcgNjMuNDU5NSAxNi4xODQ3IDYzLjE4NTZDMTYuMTg0NyA2Mi45MTE3IDE2LjAzNzEgNjIuNjg5NyAxNS44NTQ5IDYyLjY4OTdDMTUuNjcyOCA2Mi42ODk3IDE1LjUyNTEgNjIuOTExNyAxNS41MjUxIDYzLjE4NTZDMTUuNTI1MSA2My40NTk1IDE1LjY3MjggNjMuNjgxNSAxNS44NTQ5IDYzLjY4MTVaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik0xNS41NjUzIDUzLjE5MTJDMTUuOTA3MyA1My4xOTEyIDE2LjE4NDcgNTIuNzc0MyAxNi4xODQ3IDUyLjI1OTlDMTYuMTg0NyA1MS43NDU2IDE1LjkwNzMgNTEuMzI4NiAxNS41NjUzIDUxLjMyODZDMTUuMjIzMiA1MS4zMjg2IDE0Ljk0NTkgNTEuNzQ1NiAxNC45NDU5IDUyLjI1OTlDMTQuOTQ1OSA1Mi43NzQzIDE1LjIyMzIgNTMuMTkxMiAxNS41NjUzIDUzLjE5MTJaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik0xNi44NzY0IDU3LjAwNzVDMTcuMTI5NiA1Ny4wMDc1IDE3LjMzNDkgNTYuNjk4OCAxNy4zMzQ5IDU2LjMxODFDMTcuMzM0OSA1NS45MzczIDE3LjEyOTYgNTUuNjI4NyAxNi44NzY0IDU1LjYyODdDMTYuNjIzMiA1NS42Mjg3IDE2LjQxNzkgNTUuOTM3MyAxNi40MTc5IDU2LjMxODFDMTYuNDE3OSA1Ni42OTg4IDE2LjYyMzIgNTcuMDA3NSAxNi44NzY0IDU3LjAwNzVaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik0xMi4wMTUxIDUxLjU4NDdDMTIuMTQ2MSA1MS41ODQ3IDEyLjI1MjQgNTEuNDI0OSAxMi4yNTI0IDUxLjIyNzlDMTIuMjUyNCA1MS4wMzA4IDEyLjE0NjEgNTAuODcxMSAxMi4wMTUxIDUwLjg3MTFDMTEuODg0IDUwLjg3MTEgMTEuNzc3OCA1MS4wMzA4IDExLjc3NzggNTEuMjI3OUMxMS43Nzc4IDUxLjQyNDkgMTEuODg0IDUxLjU4NDcgMTIuMDE1MSA1MS41ODQ3WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMTIuODA4OCA0NC4zODc4QzEyLjkxNzYgNDQuMzg3OCAxMy4wMDU5IDQ0LjI1NTIgMTMuMDA1OSA0NC4wOTE1QzEzLjAwNTkgNDMuOTI3OCAxMi45MTc2IDQzLjc5NTIgMTIuODA4OCA0My43OTUyQzEyLjcgNDMuNzk1MiAxMi42MTE3IDQzLjkyNzggMTIuNjExNyA0NC4wOTE1QzEyLjYxMTcgNDQuMjU1MiAxMi43IDQ0LjM4NzggMTIuODA4OCA0NC4zODc4WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMjQuMzYxMyA0Ny4zNzhDMjQuNzM1MiA0Ny4zNzggMjUuMDM4NCA0Ni45MjIyIDI1LjAzODQgNDYuMzZDMjUuMDM4NCA0NS43OTc4IDI0LjczNTIgNDUuMzQyIDI0LjM2MTMgNDUuMzQyQzIzLjk4NzQgNDUuMzQyIDIzLjY4NDMgNDUuNzk3OCAyMy42ODQzIDQ2LjM2QzIzLjY4NDMgNDYuOTIyMiAyMy45ODc0IDQ3LjM3OCAyNC4zNjEzIDQ3LjM3OFoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTIyLjkwMzggNTAuNTczMUMyMy4wODQ1IDUwLjU3MzEgMjMuMjMxIDUwLjM1MjkgMjMuMjMxIDUwLjA4MTJDMjMuMjMxIDQ5LjgwOTYgMjMuMDg0NSA0OS41ODk0IDIyLjkwMzggNDkuNTg5NEMyMi43MjMxIDQ5LjU4OTQgMjIuNTc2NyA0OS44MDk2IDIyLjU3NjcgNTAuMDgxMkMyMi41NzY3IDUwLjM1MjkgMjIuNzIzMSA1MC41NzMxIDIyLjkwMzggNTAuNTczMVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTI1LjI2MzggNDQuNDcwOEMyNS4zODgyIDQ0LjQ3MDggMjUuNDg5MSA0NC4zMTkyIDI1LjQ4OTEgNDQuMTMyMUMyNS40ODkxIDQzLjk0NTEgMjUuMzg4MiA0My43OTM1IDI1LjI2MzggNDMuNzkzNUMyNS4xMzk0IDQzLjc5MzUgMjUuMDM4NiA0My45NDUxIDI1LjAzODYgNDQuMTMyMUMyNS4wMzg2IDQ0LjMxOTIgMjUuMTM5NCA0NC40NzA4IDI1LjI2MzggNDQuNDcwOFoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTIyLjk2MzIgNjMuMDFDMjMuNDYwNyA2My4wMSAyMy44NjQxIDYyLjQwMzYgMjMuODY0MSA2MS42NTU0QzIzLjg2NDEgNjAuOTA3MyAyMy40NjA3IDYwLjMwMDggMjIuOTYzMiA2MC4zMDA4QzIyLjQ2NTYgNjAuMzAwOCAyMi4wNjIyIDYwLjkwNzMgMjIuMDYyMiA2MS42NTU0QzIyLjA2MjIgNjIuNDAzNiAyMi40NjU2IDYzLjAxIDIyLjk2MzIgNjMuMDFaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00Ni40NDI2IDk3LjQxMDJDNDYuNjQ0NyA5Ny40MTAyIDQ2LjgwODYgOTcuMTYzOCA0Ni44MDg2IDk2Ljg1OTlDNDYuODA4NiA5Ni41NTU5IDQ2LjY0NDcgOTYuMzA5NiA0Ni40NDI2IDk2LjMwOTZDNDYuMjQwNCA5Ni4zMDk2IDQ2LjA3NjYgOTYuNTU1OSA0Ni4wNzY2IDk2Ljg1OTlDNDYuMDc2NiA5Ny4xNjM4IDQ2LjI0MDQgOTcuNDEwMiA0Ni40NDI2IDk3LjQxMDJaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik01MC40OTk2IDgxLjExNDZDNTAuNzIxIDgxLjExNDYgNTAuOTAwNSA4MC44NDQ4IDUwLjkwMDUgODAuNTExOUM1MC45MDA1IDgwLjE3OSA1MC43MjEgNzkuOTA5MiA1MC40OTk2IDc5LjkwOTJDNTAuMjc4MiA3OS45MDkyIDUwLjA5ODggODAuMTc5IDUwLjA5ODggODAuNTExOUM1MC4wOTg4IDgwLjg0NDggNTAuMjc4MiA4MS4xMTQ2IDUwLjQ5OTYgODEuMTE0NloiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTQ5LjM2MDQgNzcuMzI1MkM0OS42NTg4IDc3LjMyNTIgNDkuOTAwNyA3Ni45NjE1IDQ5LjkwMDcgNzYuNTEyOEM0OS45MDA3IDc2LjA2NDEgNDkuNjU4OCA3NS43MDA0IDQ5LjM2MDQgNzUuNzAwNEM0OS4wNjIgNzUuNzAwNCA0OC44MjAxIDc2LjA2NDEgNDguODIwMSA3Ni41MTI4QzQ4LjgyMDEgNzYuOTYxNSA0OS4wNjIgNzcuMzI1MiA0OS4zNjA0IDc3LjMyNTJaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik01Mi4xODA5IDY4LjYwMjRDNTIuMzE1NyA2OC42MDI0IDUyLjQyNDkgNjguNDM4MSA1Mi40MjQ5IDY4LjIzNTVDNTIuNDI0OSA2OC4wMzI5IDUyLjMxNTcgNjcuODY4NyA1Mi4xODA5IDY3Ljg2ODdDNTIuMDQ2MSA2Ny44Njg3IDUxLjkzNjkgNjguMDMyOSA1MS45MzY5IDY4LjIzNTVDNTEuOTM2OSA2OC40MzgxIDUyLjA0NjEgNjguNjAyNCA1Mi4xODA5IDY4LjYwMjRaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik01Ni41ODI3IDYwLjA0MzJDNTcuMDEzNiA2MC4wNDMyIDU3LjM2MjkgNTkuNTE3OSA1Ny4zNjI5IDU4Ljg3QzU3LjM2MjkgNTguMjIyIDU3LjAxMzYgNTcuNjk2OCA1Ni41ODI3IDU3LjY5NjhDNTYuMTUxNyA1Ny42OTY4IDU1LjgwMjMgNTguMjIyIDU1LjgwMjMgNTguODdDNTUuODAyMyA1OS41MTc5IDU2LjE1MTcgNjAuMDQzMiA1Ni41ODI3IDYwLjA0MzJaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik01NS41MTIzIDU2LjQ2OTNDNTUuNjU2NyA1Ni40NjkzIDU1Ljc3MzcgNTYuMjkzMyA1NS43NzM3IDU2LjA3NjJDNTUuNzczNyA1NS44NTkxIDU1LjY1NjcgNTUuNjgzMSA1NS41MTIzIDU1LjY4MzFDNTUuMzY3OSA1NS42ODMxIDU1LjI1MDkgNTUuODU5MSA1NS4yNTA5IDU2LjA3NjJDNTUuMjUwOSA1Ni4yOTMzIDU1LjM2NzkgNTYuNDY5MyA1NS41MTIzIDU2LjQ2OTNaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00Ni40ODU1IDY5LjAyOTdDNDYuNzExMyA2OS4wMjk3IDQ2Ljg5NDQgNjguNzU0NCA0Ni44OTQ0IDY4LjQxNDlDNDYuODk0NCA2OC4wNzUzIDQ2LjcxMTMgNjcuOCA0Ni40ODU1IDY3LjhDNDYuMjU5NiA2Ny44IDQ2LjA3NjYgNjguMDc1MyA0Ni4wNzY2IDY4LjQxNDlDNDYuMDc2NiA2OC43NTQ0IDQ2LjI1OTYgNjkuMDI5NyA0Ni40ODU1IDY5LjAyOTdaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00NC40NTA4IDkwLjA0MDFDNDQuNTEwMyA5MC4wNDAxIDQ0LjU1ODUgODkuOTY3NSA0NC41NTg1IDg5Ljg3ODFDNDQuNTU4NSA4OS43ODg2IDQ0LjUxMDMgODkuNzE2MSA0NC40NTA4IDg5LjcxNjFDNDQuMzkxMyA4OS43MTYxIDQ0LjM0MzEgODkuNzg4NiA0NC4zNDMxIDg5Ljg3ODFDNDQuMzQzMSA4OS45Njc1IDQ0LjM5MTMgOTAuMDQwMSA0NC40NTA4IDkwLjA0MDFaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00NC4wMTM0IDk4LjE3NDJDNDQuMjU0OCA5OC4xNzQyIDQ0LjQ1MDUgOTcuODggNDQuNDUwNSA5Ny41MTdDNDQuNDUwNSA5Ny4xNTQxIDQ0LjI1NDggOTYuODU5OSA0NC4wMTM0IDk2Ljg1OTlDNDMuNzcyMSA5Ni44NTk5IDQzLjU3NjQgOTcuMTU0MSA0My41NzY0IDk3LjUxN0M0My41NzY0IDk3Ljg4IDQzLjc3MjEgOTguMTc0MiA0NC4wMTM0IDk4LjE3NDJaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00Ny40MTQ4IDg5LjcxODNDNDcuNzQ5NSA4OS43MTgzIDQ4LjAyMDggODkuMzEwNCA0OC4wMjA4IDg4LjgwNzFDNDguMDIwOCA4OC4zMDM5IDQ3Ljc0OTUgODcuODk2IDQ3LjQxNDggODcuODk2QzQ3LjA4MDEgODcuODk2IDQ2LjgwODggODguMzAzOSA0Ni44MDg4IDg4LjgwNzFDNDYuODA4OCA4OS4zMTA0IDQ3LjA4MDEgODkuNzE4MyA0Ny40MTQ4IDg5LjcxODNaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00Ni42MjY3IDgzLjM2MDFDNDYuNzI3NCA4My4zNjAxIDQ2LjgwOSA4My4yMzczIDQ2LjgwOSA4My4wODU5QzQ2LjgwOSA4Mi45MzQ1IDQ2LjcyNzQgODIuODExOCA0Ni42MjY3IDgyLjgxMThDNDYuNTI2IDgyLjgxMTggNDYuNDQ0NCA4Mi45MzQ1IDQ2LjQ0NDQgODMuMDg1OUM0Ni40NDQ0IDgzLjIzNzMgNDYuNTI2IDgzLjM2MDEgNDYuNjI2NyA4My4zNjAxWiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMjUuNDM1NCA5MS4zOTczQzI1Ljc0NDIgOTEuMzk3MyAyNS45OTQ1IDkxLjAyMDkgMjUuOTk0NSA5MC41NTY3QzI1Ljk5NDUgOTAuMDkyNCAyNS43NDQyIDg5LjcxNjEgMjUuNDM1NCA4OS43MTYxQzI1LjEyNjcgODkuNzE2MSAyNC44NzY0IDkwLjA5MjQgMjQuODc2NCA5MC41NTY3QzI0Ljg3NjQgOTEuMDIwOSAyNS4xMjY3IDkxLjM5NzMgMjUuNDM1NCA5MS4zOTczWiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMjcuMzA1OCA4My44MjU5QzI3LjQ0MTMgODMuODI1OSAyNy41NTExIDgzLjY2MDggMjcuNTUxMSA4My40NTdDMjcuNTUxMSA4My4yNTMzIDI3LjQ0MTMgODMuMDg4MSAyNy4zMDU4IDgzLjA4ODFDMjcuMTcwMyA4My4wODgxIDI3LjA2MDQgODMuMjUzMyAyNy4wNjA0IDgzLjQ1N0MyNy4wNjA0IDgzLjY2MDggMjcuMTcwMyA4My44MjU5IDI3LjMwNTggODMuODI1OVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTE5LjQ1NyA4Mi45ODkyQzE5LjgwMTMgODIuOTg5MiAyMC4wODA0IDgyLjU2OTYgMjAuMDgwNCA4Mi4wNTE5QzIwLjA4MDQgODEuNTM0MiAxOS44MDEzIDgxLjExNDUgMTkuNDU3IDgxLjExNDVDMTkuMTEyNyA4MS4xMTQ1IDE4LjgzMzYgODEuNTM0MiAxOC44MzM2IDgyLjA1MTlDMTguODMzNiA4Mi41Njk2IDE5LjExMjcgODIuOTg5MiAxOS40NTcgODIuOTg5MloiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTIzLjE2OTUgOTcuOTYyNEMyMy41NTMgOTcuOTYyNCAyMy44NjQgOTcuNDk0OSAyMy44NjQgOTYuOTE4MkMyMy44NjQgOTYuMzQxNSAyMy41NTMgOTUuODc0IDIzLjE2OTUgOTUuODc0QzIyLjc4NTkgOTUuODc0IDIyLjQ3NSA5Ni4zNDE1IDIyLjQ3NSA5Ni45MTgyQzIyLjQ3NSA5Ny40OTQ5IDIyLjc4NTkgOTcuOTYyNCAyMy4xNjk1IDk3Ljk2MjRaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik0xNy44OTY3IDc5LjQxMzNDMTguMDMzNyA3OS40MTMzIDE4LjE0NDcgNzkuMjQ2NCAxOC4xNDQ3IDc5LjA0MDRDMTguMTQ0NyA3OC44MzQ1IDE4LjAzMzcgNzguNjY3NSAxNy44OTY3IDc4LjY2NzVDMTcuNzU5NyA3OC42Njc1IDE3LjY0ODcgNzguODM0NSAxNy42NDg3IDc5LjA0MDRDMTcuNjQ4NyA3OS4yNDY0IDE3Ljc1OTcgNzkuNDEzMyAxNy44OTY3IDc5LjQxMzNaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik01Ny44MTA4IDgzLjk0NjZDNTguMTU4OCA4My45NDY2IDU4LjQ0MDkgODMuNTIyNCA1OC40NDA5IDgyLjk5OTJDNTguNDQwOSA4Mi40NzU5IDU4LjE1ODggODIuMDUxOCA1Ny44MTA4IDgyLjA1MThDNTcuNDYyNyA4Mi4wNTE4IDU3LjE4MDYgODIuNDc1OSA1Ny4xODA2IDgyLjk5OTJDNTcuMTgwNiA4My41MjI0IDU3LjQ2MjcgODMuOTQ2NiA1Ny44MTA4IDgzLjk0NjZaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00My41NzU0IDExLjI5NDhDNDQuMDY2MyAxMS4yOTQ4IDQ0LjQ2NDMgMTAuNjk2NCA0NC40NjQzIDkuOTU4MzFDNDQuNDY0MyA5LjIyMDE5IDQ0LjA2NjMgOC42MjE4MyA0My41NzU0IDguNjIxODNDNDMuMDg0NSA4LjYyMTgzIDQyLjY4NjUgOS4yMjAxOSA0Mi42ODY1IDkuOTU4MzFDNDIuNjg2NSAxMC42OTY0IDQzLjA4NDUgMTEuMjk0OCA0My41NzU0IDExLjI5NDhaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik01Ny41MTU1IDcyLjcyNjZDNTcuNjc4NCA3Mi43MjY2IDU3LjgxMDQgNzIuNTI4IDU3LjgxMDQgNzIuMjgzMUM1Ny44MTA0IDcyLjAzODIgNTcuNjc4NCA3MS44Mzk2IDU3LjUxNTUgNzEuODM5NkM1Ny4zNTI2IDcxLjgzOTYgNTcuMjIwNiA3Mi4wMzgyIDU3LjIyMDYgNzIuMjgzMUM1Ny4yMjA2IDcyLjUyOCA1Ny4zNTI2IDcyLjcyNjYgNTcuNTE1NSA3Mi43MjY2WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNNTYuNDM5MiA4NC43ODExQzU2LjU5MjUgODQuNzgxMSA1Ni43MTY4IDg0LjU5NDMgNTYuNzE2OCA4NC4zNjM4QzU2LjcxNjggODQuMTMzNCA1Ni41OTI1IDgzLjk0NjUgNTYuNDM5MiA4My45NDY1QzU2LjI4NiA4My45NDY1IDU2LjE2MTcgODQuMTMzNCA1Ni4xNjE3IDg0LjM2MzhDNTYuMTYxNyA4NC41OTQzIDU2LjI4NiA4NC43ODExIDU2LjQzOTIgODQuNzgxMVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTU2LjE3MjUgNzYuNDU4N0M1Ni4zMTkxIDc2LjQ1ODcgNTYuNDM3OSA3Ni4yOCA1Ni40Mzc5IDc2LjA1OTVDNTYuNDM3OSA3NS44MzkxIDU2LjMxOTEgNzUuNjYwNCA1Ni4xNzI1IDc1LjY2MDRDNTYuMDI1OSA3NS42NjA0IDU1LjkwNyA3NS44MzkxIDU1LjkwNyA3Ni4wNTk1QzU1LjkwNyA3Ni4yOCA1Ni4wMjU5IDc2LjQ1ODcgNTYuMTcyNSA3Ni40NTg3WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNNTQuMTE2IDkwLjAzODlDNTQuMzQyNSA5MC4wMzg5IDU0LjUyNjIgODkuNzYyNyA1NC41MjYyIDg5LjQyMkM1NC41MjYyIDg5LjA4MTMgNTQuMzQyNSA4OC44MDUyIDU0LjExNiA4OC44MDUyQzUzLjg4OTQgODguODA1MiA1My43MDU3IDg5LjA4MTMgNTMuNzA1NyA4OS40MjJDNTMuNzA1NyA4OS43NjI3IDUzLjg4OTQgOTAuMDM4OSA1NC4xMTYgOTAuMDM4OVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTU2LjY4MDQgMzUuODU3N0M1Ni45NTczIDM1Ljg1NzcgNTcuMTgxOCAzNS41MjAxIDU3LjE4MTggMzUuMTAzOEM1Ny4xODE4IDM0LjY4NzQgNTYuOTU3MyAzNC4zNDk5IDU2LjY4MDQgMzQuMzQ5OUM1Ni40MDM1IDM0LjM0OTkgNTYuMTc5IDM0LjY4NzQgNTYuMTc5IDM1LjEwMzhDNTYuMTc5IDM1LjUyMDEgNTYuNDAzNSAzNS44NTc3IDU2LjY4MDQgMzUuODU3N1oiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTU2LjQyMDUgMjguNjAwMUM1Ni41NjM0IDI4LjYwMDEgNTYuNjc5MiAyOC40MjU5IDU2LjY3OTIgMjguMjExMUM1Ni42NzkyIDI3Ljk5NjIgNTYuNTYzNCAyNy44MjIgNTYuNDIwNSAyNy44MjJDNTYuMjc3NiAyNy44MjIgNTYuMTYxNyAyNy45OTYyIDU2LjE2MTcgMjguMjExMUM1Ni4xNjE3IDI4LjQyNTkgNTYuMjc3NiAyOC42MDAxIDU2LjQyMDUgMjguNjAwMVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTUyLjcyNzkgMjAuNDgyN0M1Mi44OTUzIDIwLjQ4MjcgNTMuMDMwOSAyMC4yNzg3IDUzLjAzMDkgMjAuMDI3MUM1My4wMzA5IDE5Ljc3NTUgNTIuODk1MyAxOS41NzE1IDUyLjcyNzkgMTkuNTcxNUM1Mi41NjA2IDE5LjU3MTUgNTIuNDI0OSAxOS43NzU1IDUyLjQyNDkgMjAuMDI3MUM1Mi40MjQ5IDIwLjI3ODcgNTIuNTYwNiAyMC40ODI3IDUyLjcyNzkgMjAuNDgyN1oiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTUyLjc4MjkgMzIuNTE1M0M1Mi45ODE0IDMyLjUxNTMgNTMuMTQyMiAzMi4yNzM0IDUzLjE0MjIgMzEuOTc1MUM1My4xNDIyIDMxLjY3NjcgNTIuOTgxNCAzMS40MzQ4IDUyLjc4MjkgMzEuNDM0OEM1Mi41ODQ1IDMxLjQzNDggNTIuNDIzNyAzMS42NzY3IDUyLjQyMzcgMzEuOTc1MUM1Mi40MjM3IDMyLjI3MzQgNTIuNTg0NSAzMi41MTUzIDUyLjc4MjkgMzIuNTE1M1oiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTUxLjIzNDIgNDIuMzQwNUM1MS40MTg1IDQyLjM0MDUgNTEuNTY4IDQyLjExNTggNTEuNTY4IDQxLjgzODZDNTEuNTY4IDQxLjU2MTQgNTEuNDE4NSA0MS4zMzY3IDUxLjIzNDIgNDEuMzM2N0M1MS4wNDk4IDQxLjMzNjcgNTAuOTAwNCA0MS41NjE0IDUwLjkwMDQgNDEuODM4NkM1MC45MDA0IDQyLjExNTggNTEuMDQ5OCA0Mi4zNDA1IDUxLjIzNDIgNDIuMzQwNVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTIxLjg3MzQgMTcuMjM3MkMyMS45Nzc4IDE3LjIzNzIgMjIuMDYyNCAxNy4xMDk5IDIyLjA2MjQgMTYuOTUyOUMyMi4wNjI0IDE2Ljc5NiAyMS45Nzc4IDE2LjY2ODcgMjEuODczNCAxNi42Njg3QzIxLjc2OSAxNi42Njg3IDIxLjY4NDMgMTYuNzk2IDIxLjY4NDMgMTYuOTUyOUMyMS42ODQzIDE3LjEwOTkgMjEuNzY5IDE3LjIzNzIgMjEuODczNCAxNy4yMzcyWiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMjQuMDUwNiAzMC4yNDU1QzI0LjM1MjcgMzAuMjQ1NSAyNC41OTc2IDI5Ljg3NzMgMjQuNTk3NiAyOS40MjNDMjQuNTk3NiAyOC45Njg4IDI0LjM1MjcgMjguNjAwNiAyNC4wNTA2IDI4LjYwMDZDMjMuNzQ4NSAyOC42MDA2IDIzLjUwMzUgMjguOTY4OCAyMy41MDM1IDI5LjQyM0MyMy41MDM1IDI5Ljg3NzMgMjMuNzQ4NSAzMC4yNDU1IDI0LjA1MDYgMzAuMjQ1NVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTIwLjQ2NTMgMzUuODU3N0MyMC43NDIyIDM1Ljg1NzcgMjAuOTY2NyAzNS41MjAxIDIwLjk2NjcgMzUuMTAzOEMyMC45NjY3IDM0LjY4NzQgMjAuNzQyMiAzNC4zNDk5IDIwLjQ2NTMgMzQuMzQ5OUMyMC4xODg0IDM0LjM0OTkgMTkuOTYzOSAzNC42ODc0IDE5Ljk2MzkgMzUuMTAzOEMxOS45NjM5IDM1LjUyMDEgMjAuMTg4NCAzNS44NTc3IDIwLjQ2NTMgMzUuODU3N1oiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTE4Ljc2MTUgMzAuNjA1NkMxOC44Njg4IDMwLjYwNTYgMTguOTU1OSAzMC40NzQ3IDE4Ljk1NTkgMzAuMzEzM0MxOC45NTU5IDMwLjE1MTkgMTguODY4OCAzMC4wMjEgMTguNzYxNSAzMC4wMjFDMTguNjU0MSAzMC4wMjEgMTguNTY3MSAzMC4xNTE5IDE4LjU2NzEgMzAuMzEzM0MxOC41NjcxIDMwLjQ3NDcgMTguNjU0MSAzMC42MDU2IDE4Ljc2MTUgMzAuNjA1NloiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTE0LjYyMjggMzMuNjkyNkMxNC44MzkgMzMuNjkyNiAxNS4wMTQzIDMzLjQyOTEgMTUuMDE0MyAzMy4xMDRDMTUuMDE0MyAzMi43Nzg5IDE0LjgzOSAzMi41MTU0IDE0LjYyMjggMzIuNTE1NEMxNC40MDY2IDMyLjUxNTQgMTQuMjMxMyAzMi43Nzg5IDE0LjIzMTMgMzMuMTA0QzE0LjIzMTMgMzMuNDI5MSAxNC40MDY2IDMzLjY5MjYgMTQuNjIyOCAzMy42OTI2WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMTcuNTk5MSA0Mi4xMzY5QzE3Ljk5ODIgNDIuMTM2OSAxOC4zMjE3IDQxLjY1MDUgMTguMzIxNyA0MS4wNTA0QzE4LjMyMTcgNDAuNDUwMyAxNy45OTgyIDM5Ljk2MzkgMTcuNTk5MSAzOS45NjM5QzE3LjIgMzkuOTYzOSAxNi44NzY1IDQwLjQ1MDMgMTYuODc2NSA0MS4wNTA0QzE2Ljg3NjUgNDEuNjUwNSAxNy4yIDQyLjEzNjkgMTcuNTk5MSA0Mi4xMzY5WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNNDEuMjQyIDE2LjI1M0M0MS40MjcxIDE2LjI1MyA0MS41NzcyIDE2LjAyNzQgNDEuNTc3MiAxNS43NDkxQzQxLjU3NzIgMTUuNDcwNyA0MS40MjcxIDE1LjI0NTEgNDEuMjQyIDE1LjI0NTFDNDEuMDU2OSAxNS4yNDUxIDQwLjkwNjggMTUuNDcwNyA0MC45MDY4IDE1Ljc0OTFDNDAuOTA2OCAxNi4wMjc0IDQxLjA1NjkgMTYuMjUzIDQxLjI0MiAxNi4yNTNaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik0yNy43OTM3IDkuNDQ0NTlDMjguMDk2NiA5LjQ0NDU5IDI4LjM0MjEgOS4wNzU0NyAyOC4zNDIxIDguNjIwMTJDMjguMzQyMSA4LjE2NDc4IDI4LjA5NjYgNy43OTU2NSAyNy43OTM3IDcuNzk1NjVDMjcuNDkwOSA3Ljc5NTY1IDI3LjI0NTQgOC4xNjQ3OCAyNy4yNDU0IDguNjIwMTJDMjcuMjQ1NCA5LjA3NTQ3IDI3LjQ5MDkgOS40NDQ1OSAyNy43OTM3IDkuNDQ0NTlaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00My4xNjg4IDMuMjIxNTFDNDMuMzkzMiAzLjIyMTUxIDQzLjU3NTEgMi45NDgwNSA0My41NzUxIDIuNjEwNzJDNDMuNTc1MSAyLjI3MzM4IDQzLjM5MzIgMS45OTk5MiA0My4xNjg4IDEuOTk5OTJDNDIuOTQ0NSAxLjk5OTkyIDQyLjc2MjYgMi4yNzMzOCA0Mi43NjI2IDIuNjEwNzJDNDIuNzYyNiAyLjk0ODA1IDQyLjk0NDUgMy4yMjE1MSA0My4xNjg4IDMuMjIxNTFaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik0zNC40MzQgMTkuMzAxNUMzNC44MTMyIDE5LjMwMTUgMzUuMTIwNSAxOC44Mzk0IDM1LjEyMDUgMTguMjY5NEMzNS4xMjA1IDE3LjY5OTQgMzQuODEzMiAxNy4yMzczIDM0LjQzNCAxNy4yMzczQzM0LjA1NDkgMTcuMjM3MyAzMy43NDc2IDE3LjY5OTQgMzMuNzQ3NiAxOC4yNjk0QzMzLjc0NzYgMTguODM5NCAzNC4wNTQ5IDE5LjMwMTUgMzQuNDM0IDE5LjMwMTVaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00MC42NDA2IDMzLjY5MjFDNDAuOTU2MSAzMy42OTIxIDQxLjIxMTggMzMuMzA3NiA0MS4yMTE4IDMyLjgzMzNDNDEuMjExOCAzMi4zNTkxIDQwLjk1NjEgMzEuOTc0NiA0MC42NDA2IDMxLjk3NDZDNDAuMzI1MiAzMS45NzQ2IDQwLjA2OTUgMzIuMzU5MSA0MC4wNjk1IDMyLjgzMzNDNDAuMDY5NSAzMy4zMDc2IDQwLjMyNTIgMzMuNjkyMSA0MC42NDA2IDMzLjY5MjFaIiBmaWxsPSIjRDFGRUY5Ii8+CjxwYXRoIGQ9Ik00My43ODQzIDM0Ljk3ODhDNDMuODk5OCAzNC45Nzg4IDQzLjk5MzQgMzQuODM4IDQzLjk5MzQgMzQuNjY0M0M0My45OTM0IDM0LjQ5MDYgNDMuODk5OCAzNC4zNDk5IDQzLjc4NDMgMzQuMzQ5OUM0My42Njg4IDM0LjM0OTkgNDMuNTc1MSAzNC40OTA2IDQzLjU3NTEgMzQuNjY0M0M0My41NzUxIDM0LjgzOCA0My42Njg4IDM0Ljk3ODggNDMuNzg0MyAzNC45Nzg4WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMzEuNzIzNiAzNC42NjRDMzEuOTAyIDM0LjY2NCAzMi4wNDY3IDM0LjQ0NjUgMzIuMDQ2NyAzNC4xNzgyQzMyLjA0NjcgMzMuOTA5OSAzMS45MDIgMzMuNjkyNCAzMS43MjM2IDMzLjY5MjRDMzEuNTQ1MSAzMy42OTI0IDMxLjQwMDQgMzMuOTA5OSAzMS40MDA0IDM0LjE3ODJDMzEuNDAwNCAzNC40NDY1IDMxLjU0NTEgMzQuNjY0IDMxLjcyMzYgMzQuNjY0WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNMzAuMzc3MSAyNy43MDk1QzMwLjU3NzcgMjcuNzA5NSAzMC43NDA0IDI3LjQ2NDkgMzAuNzQwNCAyNy4xNjMyQzMwLjc0MDQgMjYuODYxNSAzMC41Nzc3IDI2LjYxNjkgMzAuMzc3MSAyNi42MTY5QzMwLjE3NjQgMjYuNjE2OSAzMC4wMTM3IDI2Ljg2MTUgMzAuMDEzNyAyNy4xNjMyQzMwLjAxMzcgMjcuNDY0OSAzMC4xNzY0IDI3LjcwOTUgMzAuMzc3MSAyNy43MDk1WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNNDEuODIwMiAyMC4wMjdDNDEuOTUzNSAyMC4wMjcgNDIuMDYxNiAxOS44NjQ1IDQyLjA2MTYgMTkuNjY0MUM0Mi4wNjE2IDE5LjQ2MzcgNDEuOTUzNSAxOS4zMDEzIDQxLjgyMDIgMTkuMzAxM0M0MS42ODcgMTkuMzAxMyA0MS41Nzg5IDE5LjQ2MzcgNDEuNTc4OSAxOS42NjQxQzQxLjU3ODkgMTkuODY0NSA0MS42ODcgMjAuMDI3IDQxLjgyMDIgMjAuMDI3WiIgZmlsbD0iI0QxRkVGOSIvPgo8cGF0aCBkPSJNNDAuMDEyOSAxMy4zNDI2QzQwLjE3NTEgMTMuMzQyNiA0MC4zMDY2IDEzLjE0NSA0MC4zMDY2IDEyLjkwMTJDNDAuMzA2NiAxMi42NTc0IDQwLjE3NTEgMTIuNDU5NyA0MC4wMTI5IDEyLjQ1OTdDMzkuODUwOCAxMi40NTk3IDM5LjcxOTQgMTIuNjU3NCAzOS43MTk0IDEyLjkwMTJDMzkuNzE5NCAxMy4xNDUgMzkuODUwOCAxMy4zNDI2IDQwLjAxMjkgMTMuMzQyNloiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTkuNDU1NTUgNTkuNDYyN0M5LjYwMTQxIDU5LjQ2MjcgOS43MTk2NiA1OS4yODQ5IDkuNzE5NjYgNTkuMDY1NkM5LjcxOTY2IDU4Ljg0NjMgOS42MDE0MSA1OC42Njg1IDkuNDU1NTUgNTguNjY4NUM5LjMwOTY5IDU4LjY2ODUgOS4xOTE0MyA1OC44NDYzIDkuMTkxNDMgNTkuMDY1NkM5LjE5MTQzIDU5LjI4NDkgOS4zMDk2OSA1OS40NjI3IDkuNDU1NTUgNTkuNDYyN1oiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTI3Ljg2NjEgMTcuNTIzOUMyOC4wOTk0IDE3LjUyMzkgMjguMjg4NCAxNy4yMzk2IDI4LjI4ODQgMTYuODg4OUMyOC4yODg0IDE2LjUzODIgMjguMDk5NCAxNi4yNTM5IDI3Ljg2NjEgMTYuMjUzOUMyNy42MzI5IDE2LjI1MzkgMjcuNDQzOCAxNi41MzgyIDI3LjQ0MzggMTYuODg4OUMyNy40NDM4IDE3LjIzOTYgMjcuNjMyOSAxNy41MjM5IDI3Ljg2NjEgMTcuNTIzOVoiIGZpbGw9IiNEMUZFRjkiLz4KPHBhdGggZD0iTTExLjEwNiA2MS4yMDFDMTEuNDI1MSA2MS4yMDEgMTEuNjgzOCA2MC44MTIgMTEuNjgzOCA2MC4zMzIyQzExLjY4MzggNTkuODUyNCAxMS40MjUxIDU5LjQ2MzQgMTEuMTA2IDU5LjQ2MzRDMTAuNzg2OCA1OS40NjM0IDEwLjUyODEgNTkuODUyNCAxMC41MjgxIDYwLjMzMjJDMTAuNTI4MSA2MC44MTIgMTAuNzg2OCA2MS4yMDEgMTEuMTA2IDYxLjIwMVoiIGZpbGw9IiNEMUZFRjkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjIiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfMjI4Xzc2OCkiPgo8cGF0aCBkPSJNMzIuMzYzIDcxLjQ2M0wyNy4yMjU0IDY3LjY0MTRDMjUuMTk2MSA2Ni4xMzE5IDI0LjAwMDEgNjMuNzUxNyAyNC4wMDAxIDYxLjIyMjVMMjQgNDguMjA0MUMyNCA0NS43MjkgMjUuMTQ1NyA0My4zOTMyIDI3LjEwMyA0MS44NzhMMzIuNDc5NCAzNy43MTYxQzM1LjMxNzQgMzUuNTE5MiAzOS4yNzExIDM1LjQ4MTEgNDIuMTUwOSAzNy42MjNMNDcuMjA4OSA0MS4zODUxQzQ5LjIzODQgNDIuODk0NiA1MC40MzQ1IDQ1LjI3NDkgNTAuNDM0NSA0Ny44MDQyVjYwLjg2NjlDNTAuNDM0NSA2My4zMTY4IDQ5LjMxMiA2NS42MzE2IDQ3LjM4ODMgNjcuMTQ4Nkw0Mi4wOTE1IDcxLjMyNThDMzkuMjUyMyA3My41NjQ4IDM1LjI2NDIgNzMuNjIxIDMyLjM2MyA3MS40NjNaIiBmaWxsPSIjNUNGOUJFIi8+CjwvZz4KPHBhdGggZD0iTTM3LjIyNDYgNDAuMzkzN0w0Ny45NzE1IDU0LjE2MTdMMzcuMjI0NiA2MC41NTU0VjQwLjM5MzdaIiBmaWxsPSIjQjVGRkUzIi8+CjxwYXRoIGQ9Ik0zNy4yMjQ2IDY4Ljc4MTZMMjYuNDc3NyA1NC4xNjE4TDM3LjIyNDYgNjAuNTU1OEwzNy4yMjQ2IDY4Ljc4MTZaIiBmaWxsPSIjMUFEMjhEIi8+CjxwYXRoIGQ9Ik0zNy4yMjQ0IDQwLjM5NVY2MC41NTY0TDI2LjQ3NzUgNTQuMTYyN0wzNy4yMjQ0IDQwLjM5NVoiIGZpbGw9IiM1Q0Y5QkUiLz4KPHBhdGggZD0iTTM3LjIyNDQgNjguNzgwOEwzNy4yMjQ0IDYwLjU1NTJMNDcuOTcxMiA1NC4xNjEyTDM3LjIyNDQgNjguNzgwOFoiIGZpbGw9IiM1Q0Y5QkUiLz4KPHBhdGggZD0iTTIwLjcxMzkgMTE1LjA2NEMyMC41MzEgMTE3LjI1OSAxOC40NjM5IDEyMS41OTUgMTEuNjU4NyAxMjEuMzc1QzEyLjI5OSAxMTguOTk3IDE1LjAwNjQgMTE0LjQwNSAyMC43MTM5IDExNS4wNjRaIiBmaWxsPSIjMDA5RTYyIi8+CjxwYXRoIGQ9Ik0zLjA0ODI2IDExNy4wNTlDNC43NTUxOSAxMTYuNTk5IDguNTkxMTggMTE2Ljk3OSAxMC4yNzk3IDEyMi4xNzVDOC4zMTAwNyAxMjIuMzQgNC4xMDYzIDEyMS41NDcgMy4wNDgyNiAxMTcuMDU5WiIgZmlsbD0iIzAwOUU2MiIvPgo8cGF0aCBkPSJNNjUuMDExNyAxMDkuMjYyQzY1LjUzNTkgMTExLjM5OCA2Ny43MDczIDExNS40MDMgNzIuMTk4OSAxMTQuMzQyQzcxLjMzNjYgMTEyLjA4NCA2OC42OTIgMTA3LjkwNiA2NS4wMTE3IDEwOS4yNjJaIiBmaWxsPSIjMDA5RTYyIi8+CjxwYXRoIGQ9Ik03Ny4xNDIxIDEwOS4wMzFDNzUuOTIxIDEwOC43OSA3My40MzU5IDEwOS42MzkgNzMuMjY0IDExNC45NThDNzQuNjA1OCAxMTQuODc1IDc3LjI2MDEgMTEzLjU3NCA3Ny4xNDIxIDEwOS4wMzFaIiBmaWxsPSIjMDA5RTYyIi8+CjxwYXRoIGQ9Ik01Ny44NTQ5IDExNC4wMzdDNTcuNjYyOSAxMTUuMzIgNTguMjYxOSAxMTguMDg3IDYyLjE5NDcgMTE4Ljg4MkM2Mi4xNDkyIDExNy40MzEgNjEuMjE3NiAxMTQuNDMxIDU3Ljg1NDkgMTE0LjAzN1oiIGZpbGw9IiMwMDlFNjIiLz4KPHBhdGggZD0iTTUzLjcxNDggMTI4LjgyQzUzLjgxOTcgMTMwLjExNSA1My4wMzQxIDEzMi44MzcgNDkuMDUyNyAxMzMuMzY1QzQ5LjE5NjQgMTMxLjkxOSA1MC4zMjk5IDEyOC45ODYgNTMuNzE0OCAxMjguODJaIiBmaWxsPSIjMDA5RTYyIi8+CjxwYXRoIGQ9Ik00NC4yMDcgMTMyLjcwMUM0NC42MjU2IDEzMy40NjMgNDYuMDY3MyAxMzQuNjk0IDQ4LjQ4NTcgMTMzLjUyMkM0Ny44NzI4IDEzMi43NjcgNDYuMTU5MSAxMzEuNTQ2IDQ0LjIwNyAxMzIuNzAxWiIgZmlsbD0iIzAwOUU2MiIvPgo8L2c+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2ZfMjI4Xzc2OCIgeD0iOC4wMDAwMiIgeT0iMjAuMDQyMSIgd2lkdGg9IjU4LjQzNDUiIGhlaWdodD0iNjkuMDAyIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjgiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yMjhfNzY4Ii8+CjwvZmlsdGVyPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjI4Xzc2OCIgeDE9IjM3Ljc2IiB5MT0iMTQxLjU3MyIgeDI9IjYuOTM1NDYiIHkyPSIxMDYuNTA0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiM2NDRBQ0YiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjQ0QUNGIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjhfNzY4Ij4KPHJlY3Qgd2lkdGg9Ijc5IiBoZWlnaHQ9IjEzNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K", + "linkHref": "https://www.youtube.com/@GDevelopApp/shorts" } } ] @@ -1162,12 +1173,12 @@ }, { "messageByLocale": { - "en": "Now you've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" + "en": "You've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" } }, { "messageByLocale": { - "en": "You can take a break, or continue with the next chapter." + "en": "Now you can take a break from the tutorial, or continue to the next chapter." } } ] @@ -2435,17 +2446,12 @@ }, { "messageByLocale": { - "en": "Use your recent discoveries to tweak your game:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" - } - }, - { - "messageByLocale": { - "en": "You can use the “Publish” button to update your game on Liluo.io once you're done!" + "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { "messageByLocale": { - "en": "Now take a break to work on your game, or add leaderboards on the next chapter." + "en": "Now you can take a break from the tutorial, or add leaderboards on the next chapter." } } ] From c2aa730e2f5a5a2a5166b8e176c11d28b7de2c2c Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Tue, 29 Nov 2022 16:56:36 +0100 Subject: [PATCH 002/208] fine tune tutorial --- tutorials/in-app/flingGame.json | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 19422c7..1b009b8 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1130,19 +1130,6 @@ } } }, - { - "elementToHighlightId": "#object-editor-dialog #apply-button", - "nextStepTrigger": { - "absenceOfElement": "#object-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "That's it!" - } - } - } - }, { "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { @@ -3612,7 +3599,15 @@ "en": "Add a condition." } } - } + }, + "shortcuts": [ + { + "stepId": "SwitchToEvents5", + "trigger": { + "absenceOfElement": "[data-active=\"true\"] #add-condition-button-empty" + } + } + ] }, { "elementToHighlightId": "#instruction-editor-dialog #search-bar", From a160cd630b1dd5d0214919d21e293995688d222e Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Wed, 30 Nov 2022 19:32:29 +0100 Subject: [PATCH 003/208] Translate the first part of the tutorial --- tutorials/in-app/flingGame.json | 901 +++++++++++++++++++++----------- 1 file changed, 608 insertions(+), 293 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 1b009b8..66a2f5c 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -61,17 +61,20 @@ "content": [ { "messageByLocale": { - "en": "# You've finished your Fling Game!" + "en": "# You've finished your Fling Game!", + "fr-fr": "# Votre jeu est terminé !" } }, { "messageByLocale": { - "en": "Share it with your friends and see who gets the highest score!" + "en": "Share it with your friends and see who gets the highest score!", + "fr-fr": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !" } }, { "messageByLocale": { - "en": "Ready to make a new game? Click to discover what GDevelop can do!" + "en": "Ready to make a new game? Click to discover what GDevelop can do!", + "fr-fr": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !" } }, { @@ -92,7 +95,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Head over to the **Build section**" + "en": "Head over to the **Build section**.", + "fr-fr": "Commençons par aller dans l'onglet **Créer**." } }, "placement": "right" @@ -106,7 +110,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create a new **project** for this tutorial!" + "en": "Let's create a new **project** for this tutorial!", + "fr-fr": "Créons un nouveau **projet** pour ce tutoriel." } } } @@ -119,7 +124,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's go!" + "en": "Let's go!", + "fr-fr": "C'est parti !" } } }, @@ -137,7 +143,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the **Project Manager**" + "en": "Open the **Project Manager**.", + "fr-fr": "Ouvrez le **Gestionnaire de projet**." } }, "placement": "right" @@ -151,7 +158,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the **Game Settings** tab." + "en": "Open the **Game Settings** tab.", + "fr-fr": "Ouvrez les **Paramètres du jeu**." } } }, @@ -165,7 +173,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the game **properties**." + "en": "Open the game **properties**.", + "fr-fr": "Ouvrez les **Propriétés** du jeu." } } }, @@ -179,7 +188,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the width to **1280** pixels." + "en": "Change the width to **1280** pixels.", + "fr-fr": "Définissez une largeur de **1280** pixels." } } }, @@ -193,7 +203,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the height to **720** pixels." + "en": "Change the height to **720** pixels.", + "fr-fr": "Et une hauteur de **720** pixels." } } }, @@ -207,7 +218,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Set this to **no changes to the game size**." + "en": "Set this to **no changes to the game size**.", + "fr-fr": "Choisissez l'option **Aucune modification de la taille du jeu**." } } }, @@ -221,7 +233,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "On a terminé." } } } @@ -236,7 +249,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "First, let's find a border for our **scene**." + "en": "First, let's find a border for our **scene**.", + "fr-fr": "Commençons par trouver une bordure à notre **scène**." } } } @@ -249,7 +263,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose an **object** from the asset store" + "en": "Let's choose an **object** from the asset store", + "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -265,12 +280,14 @@ "tooltip": { "title": { "messageByLocale": { - "en": "We're looking for a tiled sprite that we can resize easily" + "en": "We're looking for a tiled sprite that we can resize easily", + "fr-fr": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner" } }, "description": { "messageByLocale": { - "en": "Tip: search for “**tiled sprite**”." + "en": "Tip: search for “**tiled sprite**”.", + "fr-fr": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”." } } }, @@ -293,7 +310,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add this asset to your project." + "en": "Add this asset to your project.", + "fr-fr": "Ajoutez cette ressource à votre projet." } } }, @@ -311,7 +329,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add the $(border) to our game!" + "en": "Let's add the $(border) to our game!", + "fr-fr": "Ajoutons $(border) à notre projet !" } } } @@ -324,7 +343,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(border) from the menu to the canvas." + "en": "Drag $(border) from the menu to the canvas.", + "fr-fr": "Faites glisser $(border) du menu au canvas." } }, "placement": "left" @@ -334,7 +354,8 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, @@ -342,7 +363,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Place and resize at least 4 instances of $(border) to create a closed frame around your screen ($(instancesCount:border)/4)." + "en": "Place and resize at least 4 instances of $(border) to create a closed frame around the screen ($(instancesCount:border)/4).", + "fr-fr": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4)." } }, "placement": "top", @@ -361,7 +383,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now let's find an **object** that we can throw." + "en": "Now let's find an **object** that we can throw.", + "fr-fr": "Maintenant, trouvons un **objet** que nous allons lancer." } } } @@ -374,7 +397,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose an object from the asset store." + "en": "Let's choose an object from the **asset store**.", + "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -390,7 +414,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select a rounded object that you'd like to throw (try **ball**)." + "en": "Select a rounded object that you'd like to throw (try **ball**).", + "fr-fr": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**)." } } }, @@ -431,7 +456,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect, let's see how to throw it easily." + "en": "Perfect, let's see how to throw it easily.", + "fr-fr": "Parfait, voyons maintenant comment le lancer." } } } @@ -444,7 +470,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add 3 **instances** of the **object** *$(projectile)* inside the frame." + "en": "Add 3 **instances** of the **object** *$(projectile)* inside the frame.", + "fr-fr": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre." } } } @@ -459,7 +486,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now let's find a target to aim." + "en": "Now let's find a target to aim.", + "fr-fr": "Maintenant trouvons une cible à atteindre." } } } @@ -472,7 +500,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose a new **object** from the asset store." + "en": "Let's choose a new **object** from the asset store.", + "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -488,7 +517,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select an object that you would like to use as a target to throw $(projectile) at." + "en": "Select an object that you would like to use as a target to throw $(projectile) at.", + "fr-fr": "Cherchez une cible qui vous plaît (essayez **target**)." } } }, @@ -529,7 +559,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect, let's add it to the **scene**." + "en": "Perfect, let's add it to the **scene**.", + "fr-fr": "Ajoutez cet objet à votre **scène**." } } } @@ -542,7 +573,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add $(target) inside the frame." + "en": "Add $(target) inside the frame.", + "fr-fr": "Ajoutez $(target) dans le cadre." } } } @@ -557,7 +589,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Finally let's find something to protect $(target)." + "en": "Finally let's find something to protect $(target).", + "fr-fr": "Finalement, trouvons quelque chose pour protéger $(target)." } } } @@ -570,7 +603,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose a new object from the asset store." + "en": "Let's choose a new object from the asset store.", + "fr-fr": "Nous allons choisir un objet dans le **Magasin de ressources**." } }, "placement": "bottom" @@ -586,7 +620,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select a **block** object you would like to use as an obstacle for your $(projectile)." + "en": "Select a **block** object you would like to use as an obstacle for your $(projectile).", + "fr-fr": "Cherchez un objet qui servira d'obstacle aux $(projectile)." } } }, @@ -627,7 +662,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect, let's add it to the **scene**." + "en": "Perfect, let's add it to the **scene**.", + "fr-fr": "Parfait, ajoutez le à la **scène**." } } } @@ -640,7 +676,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add multiple $(block)s inside the frame." + "en": "Add multiple $(block)s inside the frame.", + "fr-fr": "Ajoutez plusieurs instances de $(block) dans le cadre." } } } @@ -653,13 +690,15 @@ "tooltip": { "title": { "messageByLocale": { - "en": "Now, let's add some physics to our **objects**." + "en": "Now, let's add some physics to our **objects**.", + "fr-fr": "Maintenant, ajoutons un moteur physique à nos **objets**." } }, "placement": "left", "description": { "messageByLocale": { - "en": "Right click on $(border) and select “Edit behaviors”." + "en": "Right click on $(border) and select “Edit behaviors”.", + "fr-fr": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”." } } } @@ -672,7 +711,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "See the **behaviors** of the object here." + "en": "See the **behaviors** of the **object** here.", + "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -687,7 +727,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Add a new behavior." + "messageByLocale": { + "en": "Add a new behavior.", + "fr-fr": "Ajoutez un nouveau comportement." + } } }, "isOnClosableDialog": true @@ -699,7 +742,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Select the **Physics behavior**." + "messageByLocale": { + "en": "Select the **Physics behavior**.", + "fr-fr": "Sélectionnez le comportement **Moteur physique**." + } } }, "isOnClosableDialog": true @@ -712,7 +758,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **static**." + "en": "Select **static**.", + "fr-fr": "Choisissez l'option **Fixe**." } }, "placement": "top" @@ -727,7 +774,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We'll see later how to use the other parameters. We're good now." + "en": "We'll see later how to use the other parameters. We're good now.", + "fr-fr": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment." } } } @@ -741,7 +789,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now right click on $(projectile) and select “Edit behaviors”." + "en": "Now right click on $(projectile) and select “Edit behaviors”.", + "fr-fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." } } } @@ -754,7 +803,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "See the **behaviors** of the **object** here." + "en": "See the **behaviors** of the **object** here.", + "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -769,7 +819,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Add a new behavior." + "messageByLocale": { + "en": "Add a new behavior.", + "fr-fr": "Ajoutez un nouveau comportement." + } } }, "isOnClosableDialog": true @@ -781,7 +834,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Select the Physics behavior." + "messageByLocale": { + "en": "Select the Physics behavior.", + "fr-fr": "Sélectionnez le comportement Moteur physique." + } } }, "isOnClosableDialog": true @@ -794,7 +850,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select Circle." + "en": "Select **Circle**.", + "fr-fr": "Choisissez l'option **Cercle**." } }, "placement": "top" @@ -809,7 +866,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the density to 5." + "en": "Change the density to 5.", + "fr-fr": "Utilisez une densité de 5." } }, "placement": "top" @@ -824,7 +882,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the angular damping to 15." + "en": "Change the angular damping to 15.", + "fr-fr": "Utilisez un amortissement angulaire de 15." } }, "placement": "top" @@ -839,7 +898,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're good." + "en": "We're good.", + "fr-fr": "C'est bon." } } } @@ -853,7 +913,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now right click on $(target) and select “Edit behaviors”." + "en": "Now right click on $(target) and select “Edit behaviors”.", + "fr-fr": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”." } } } @@ -866,7 +927,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "See the **behaviors** of the **object** here." + "en": "See the **behaviors** of the **object** here.", + "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -888,7 +950,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Select the Physics behavior." + "messageByLocale": { + "en": "Select the Physics behavior.", + "fr-fr": "Sélectionnez le comportement Moteur physique." + } } }, "isOnClosableDialog": true @@ -900,7 +965,10 @@ }, "tooltip": { "description": { - "messageByLocale": "No need to change anything." + "messageByLocale": { + "en": "No need to change anything.", + "fr-fr": "La configuration de base suffit. Continuons." + } } } }, @@ -913,7 +981,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now right click on $(block) and select “Edit behaviors”." + "en": "Now right click on $(block) and select “Edit behaviors”.", + "fr-fr": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”." } } } @@ -926,7 +995,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "See the **behaviors** of the **object** here." + "en": "See the **behaviors** of the **object** here.", + "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -948,7 +1018,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Select the Physics behavior." + "messageByLocale": { + "en": "Select the Physics behavior.", + "fr-fr": "Sélectionnez le comportement Moteur physique." + } } }, "isOnClosableDialog": true @@ -968,12 +1041,14 @@ "tooltip": { "title": { "messageByLocale": { - "en": "Now we'll make it possible to drag the $(projectile)." + "en": "Now we'll make it possible for the player to drag the $(projectile).", + "fr-fr": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris." } }, "description": { "messageByLocale": { - "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**" + "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", + "fr-fr": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**." } }, "placement": "right" @@ -987,7 +1062,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the **Extensions** tab." + "en": "Open the **Extensions** tab.", + "fr-fr": "Ouvrez l'onglet **Extensions**." } } }, @@ -1001,7 +1077,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the extension store" + "en": "Open the extension store", + "fr-fr": "Ouvrez le **Magasin d'extension**." } } }, @@ -1015,7 +1092,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for the **draggable** extension (for physics objects)." + "en": "Search for the **draggable** extension (for physics objects).", + "fr-fr": "Cherchez l'extension **draggable**." } } }, @@ -1030,7 +1108,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the extension." + "en": "Click on the extension.", + "fr-fr": "Cliquez sur l'extension." } } }, @@ -1044,7 +1123,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Install the extension." + "en": "Install the extension in your project.", + "fr-fr": "Installez l'extension dans votre projet." } } }, @@ -1058,7 +1138,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Close the store." + "en": "Close the store.", + "fr-fr": "Fermez le magasin." } } } @@ -1072,7 +1153,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now right click on $(projectile) and select “Edit behaviors”." + "en": "Now right click on $(projectile) and select “Edit behaviors”.", + "fr-fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." } } } @@ -1085,7 +1167,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "See the **behaviors** of the **object** here." + "en": "See the **behaviors** of the **object** here.", + "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -1100,7 +1183,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Add a new behavior." + "messageByLocale": { + "en": "Add a new behavior.", + "fr-fr": "Ajoutez un nouveau comportement." + } } }, "isOnClosableDialog": true @@ -1112,7 +1198,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Select the Draggable behavior." + "messageByLocale": { + "en": "Select the Draggable behavior.", + "fr-fr": "Sélectionnez le comportement Draggable." + } } }, "isOnClosableDialog": true @@ -1125,7 +1214,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "That's it!" + "en": "That's it!", + "fr-fr": "C'est tout !" } } } @@ -1138,7 +1228,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the **Preview** button to see how you can click and drag your $(projectile) around the scene!" + "en": "Click on the **Preview** button to see how you can click and drag your $(projectile) around the scene!", + "fr-fr": "Cliquez sur **Aperçu** pour voitre votre jeu. Cliquez et faites glisser $(projectile) dans la scène!" } }, "placement": "bottom" @@ -1150,22 +1241,26 @@ "content": [ { "messageByLocale": { - "en": "## Congratulations!" + "en": "## Congratulations!", + "fr-fr": "## Félicitations !" } }, { "messageByLocale": { - "en": "You have finished the first part of your Fling Game." + "en": "You have finished the first part of your Fling Game.", + "fr-fr": "Vous avez terminé la première partie de votre jeu." } }, { "messageByLocale": { - "en": "You've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" + "en": "You've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", + "fr-fr": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" } }, { "messageByLocale": { - "en": "Now you can take a break from the tutorial, or continue to the next chapter." + "en": "Now you can take a break from the tutorial, or continue to the next chapter.", + "fr-fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre." } } ] @@ -1181,7 +1276,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Let's find a background for our game." + "en": "Let's find a background for our game.", + "fr-fr": "Cherchons un arrière-plan pour notre jeu." } } } @@ -1194,7 +1290,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose an **object** from the asset store." + "en": "Let's choose an **object** from the asset store.", + "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -1210,7 +1307,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “**background**”." + "en": "Type “**background**”.", + "fr-fr": "Cherchez “**background**”." } } }, @@ -1251,7 +1349,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect, let's use it in our **scene**." + "en": "Perfect, let's use it in our **scene**.", + "fr-fr": "Parfait, ajoutez le à la **scène**." } } } @@ -1264,7 +1363,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(background) from the menu to the canvas." + "en": "Drag $(background) from the menu to the canvas.", + "fr-fr": "Faites glisser $(background) du menu au canvas." } }, "placement": "left" @@ -1274,7 +1374,8 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, @@ -1282,7 +1383,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Drag to expand the size of $(background) until it stretches over your entire game area." + "en": "Drag to expand the size of $(background) until it stretches over your entire game area.", + "fr-fr": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu." } }, "image": { @@ -1299,7 +1401,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Select the instance of $(background) on the scene" + "en": "Select the instance of $(background) on the scene.", + "fr-fr": "Sélectionnez l'instance de $(background) sur la scène." } } } @@ -1312,7 +1415,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the z order of $(background) to **-1** so that it is behind all other **instances** on the **scene**." + "en": "Change the z order of $(background) to **-1** so that it is behind all other **instances** on the **scene**.", + "fr-fr": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène." } }, "placement": "right" @@ -1328,7 +1432,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Let's add some protection for $(target)." + "en": "Let's add some protection for $(target).", + "fr-fr": "Ajoutons un objet pour protéger $(target)." } } } @@ -1341,7 +1446,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose an **object** from the asset store." + "en": "Let's choose an **object** from the asset store.", + "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -1357,7 +1463,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for **block**." + "en": "Search for **block**.", + "fr-fr": "Cherchez “**block**”." } } }, @@ -1398,7 +1505,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect, let's add them to the **scene**." + "en": "Perfect, let's add it to the **scene**.", + "fr-fr": "Parfait, ajoutez le à la **scène**." } } } @@ -1412,12 +1520,14 @@ "placement": "left", "title": { "messageByLocale": { - "en": "Let's make them static so that they act as a wall." + "en": "Let's make them static so that they act as a wall.", + "fr-fr": "Faisons en sorte qu'il reste fixe comme un mur." } }, "description": { "messageByLocale": { - "en": "Right click on $(obstacle) and select “Edit behaviors”." + "en": "Right click on $(obstacle) and select “Edit behaviors”.", + "fr-fr": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”." } } } @@ -1430,7 +1540,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "See the **behaviors** of the **object** here." + "en": "See the **behaviors** of the **object** here.", + "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -1445,7 +1556,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Add a new behavior." + "messageByLocale": { + "en": "Add a new behavior.", + "fr-fr": "Ajoutez un nouveau comportement." + } } }, "isOnClosableDialog": true @@ -1457,7 +1571,10 @@ }, "tooltip": { "description": { - "messageByLocale": "Select the Physics behavior." + "messageByLocale": { + "en": "Select the Physics behavior.", + "fr-fr": "Sélectionnez le comportement Moteur physique." + } } }, "isOnClosableDialog": true @@ -1470,7 +1587,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **static**." + "en": "Select **static**.", + "fr-fr": "Choisissez l'option **Fixe**." } }, "placement": "top" @@ -1485,7 +1603,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're good." + "en": "We're good.", + "fr-fr": "C'est bon." } } } @@ -1498,7 +1617,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a few $(obstacle) to the **scene** to protect $(target)." + "en": "Add a few $(obstacle) to the **scene** to protect $(target).", + "fr-fr": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target)." } } } @@ -1513,7 +1633,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now let's create a winning message!" + "en": "Now let's create a winning message!", + "fr-fr": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible." } } } @@ -1526,7 +1647,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This time, we'll create a text from scratch." + "en": "This time, we'll create a text from scratch.", + "fr-fr": "Cette fois-ci, nous allons créer un texte de zéro." } }, "placement": "bottom" @@ -1541,7 +1663,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **Text** object" + "en": "Select **Text** object", + "fr-fr": "Sélectionnez l'object **Texte**" } }, "placement": "bottom" @@ -1556,7 +1679,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the object name to “**YouWin**”." + "en": "Change the object name to “**YouWin**”.", + "fr-fr": "Utilisez “**Victoire**” comme nom d'objet." } }, "placement": "bottom" @@ -1571,7 +1695,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the font size to **200**." + "en": "Change the font size to **200**.", + "fr-fr": "Utilisez une taille de **200**." } }, "placement": "bottom" @@ -1586,7 +1711,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the text to “**You Win!**”" + "en": "Change the text to “**You Win!**”", + "fr-fr": "Cet objet texte devra afficher “**Vous avez gagné !**”" } }, "placement": "bottom" @@ -1601,7 +1727,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } } }, @@ -1617,7 +1744,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(youWinText) into the **scene**, and center it as well as possible." + "en": "Drag $(youWinText) into the **scene**, and center it as well as possible.", + "fr-fr": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène." } }, "placement": "left" @@ -1631,7 +1759,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the **Layers** panel." + "en": "Open the **Layers** panel.", + "fr-fr": "Ouvrez le panneau des **calques*." } }, "placement": "bottom" @@ -1646,7 +1775,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a new layer." + "en": "Add a new layer.", + "fr-fr": "Créez un nouveau calque." } }, "placement": "top" @@ -1660,7 +1790,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the name to **WinLayer**." + "en": "Change the name to **WinLayer**.", + "fr-fr": "Utlisez le nom **CalqueVictoire**." } }, "placement": "top" @@ -1674,7 +1805,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Hide the **layer**." + "en": "Hide the **layer**.", + "fr-fr": "Cachez le **calque**." } }, "placement": "top" @@ -1684,14 +1816,16 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, "tooltip": { "description": { "messageByLocale": { - "en": "Now select the $(youWinText) **instance** on the **scene** and change its **layer** using the **properties panel**.\n\nIt should have disappeared!" + "en": "Now select the $(youWinText) **instance** on the **scene** and change its **layer** using the **properties panel**.\n\nIt should have disappeared!", + "fr-fr": "Sélectionnez **l'instance** de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché." } }, "standalone": true @@ -1705,7 +1839,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We are now going to add some logic to our game." + "en": "We are now going to add some logic to our game.", + "fr-fr": "Nous allons maintenant ajouter de la logique à notre jeu." } } } @@ -1719,7 +1854,8 @@ "tooltip": { "title": { "messageByLocale": { - "en": "Let's add our first **Event**!" + "en": "Let's add our first **Event**!", + "fr-fr": "Créons notre premier **évènement** !" } } } @@ -1732,7 +1868,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a **condition**." + "en": "Add a **condition**.", + "fr-fr": "" } } } @@ -1745,7 +1882,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(projectile)." + "en": "Select $(projectile).", + "fr-fr": "" } } }, @@ -1759,7 +1897,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the collision condition." + "en": "Select the collision condition.", + "fr-fr": "" } } }, @@ -1773,7 +1912,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(target)." + "en": "Select $(target).", + "fr-fr": "" } }, "placement": "top" @@ -1788,7 +1928,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **condition** is all set." + "en": "Alright, the **condition** is all set.", + "fr-fr": "" } }, "placement": "top" @@ -1802,7 +1943,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add an **action** now." + "en": "Let's add an **action** now.", + "fr-fr": "" } } } @@ -1815,7 +1957,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(target)." + "en": "Select $(target).", + "fr-fr": "" } } }, @@ -1829,7 +1972,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will make $(target) disappear on collision." + "en": "We will make $(target) disappear on collision.", + "fr-fr": "" } } }, @@ -1843,7 +1987,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, $(target) will now disappear when $(projectile) hits it." + "en": "Alright, $(target) will now disappear when $(projectile) hits it.", + "fr-fr": "" } }, "placement": "top" @@ -1857,7 +2002,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add another **action** that will be executed for the same **condition**." + "en": "Let's add another **action** that will be executed for the same **condition**.", + "fr-fr": "" } } } @@ -1870,7 +2016,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “layer”." + "en": "Search for “layer”.", + "fr-fr": "" } } }, @@ -1884,7 +2031,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **Show a layer** action." + "en": "Select the **Show a layer** action.", + "fr-fr": "" } } }, @@ -1898,7 +2046,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **layer** you created." + "en": "Select the **layer** you created.", + "fr-fr": "" } }, "placement": "top" @@ -1913,7 +2062,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now the title should appear when the player hits $(target) with $(projectile)." + "en": "Alright, now the title should appear when the player hits $(target) with $(projectile).", + "fr-fr": "" } }, "placement": "top" @@ -1927,7 +2077,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's get back to the **scene** to create some constraints for the player." + "en": "Let's get back to the **scene** to create some constraints for the player.", + "fr-fr": "" } } } @@ -1942,7 +2093,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "We'll define an area where the player can grab $(projectile). Outside of this area, the $(projectile)s will be free." + "en": "We'll define an area where the player can grab $(projectile). Outside of this area, the $(projectile)s will be free.", + "fr-fr": "" } } } @@ -1955,7 +2107,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose an **object** from the asset store" + "en": "Let's choose an object from the asset store", + "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -1971,7 +2124,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “**background**”." + "en": "Type “**background**”.", + "fr-fr": "" } } }, @@ -2012,7 +2166,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's use it now!" + "en": "Let's use it now!", + "fr-fr": "" } } } @@ -2025,7 +2180,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(grabArea) from the menu to the canvas." + "en": "Drag $(grabArea) from the menu to the canvas.", + "fr-fr": "" } }, "placement": "left" @@ -2035,7 +2191,8 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, @@ -2043,7 +2200,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Drag and resize $(grabArea) until it covers the lower left side of the game screen." + "en": "Drag and resize $(grabArea) until it covers the lower left side of the game screen.", + "fr-fr": "" } }, "image": { @@ -2059,7 +2217,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Make sure that $(background) is selected and change this value to **0**." + "en": "Make sure that $(background) is selected and change this value to **0**.", + "fr-fr": "" } }, "placement": "right" @@ -2073,7 +2232,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's deactivate the draggable **behavior** when outside of the $(grabArea)." + "en": "Let's deactivate the draggable **behavior** when outside of the $(grabArea).", + "fr-fr": "" } } } @@ -2088,7 +2248,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create a new event!" + "en": "Let's create a new event!", + "fr-fr": "" } } } @@ -2101,7 +2262,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a **condition**." + "en": "Add a **condition**.", + "fr-fr": "" } } } @@ -2114,7 +2276,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(projectile)." + "en": "Select $(projectile).", + "fr-fr": "" } } }, @@ -2128,7 +2291,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the collision condition." + "en": "Select the collision condition.", + "fr-fr": "" } } }, @@ -2142,7 +2306,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(grabArea)." + "en": "Select $(grabArea).", + "fr-fr": "" } }, "placement": "top" @@ -2157,7 +2322,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **condition** is all set." + "en": "Alright, the **condition** is all set.", + "fr-fr": "" } }, "placement": "top" @@ -2171,7 +2337,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right click on this newly created **condition** and select “Invert condition”." + "en": "Right click on this newly created **condition** and select “Invert condition”.", + "fr-fr": "" } }, "placement": "right" @@ -2185,7 +2352,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add an action" + "en": "Add an action", + "fr-fr": "" } } } @@ -2198,7 +2366,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(projectile)." + "en": "Select $(projectile).", + "fr-fr": "" } } }, @@ -2212,7 +2381,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **action** that releases the $(projectile) from the player drag." + "en": "Select the **action** that releases the $(projectile) from the player drag.", + "fr-fr": "" } } }, @@ -2226,7 +2396,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're good." + "en": "We're good.", + "fr-fr": "C'est bon." } }, "placement": "top" @@ -2240,7 +2411,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's get back to the **scene** to place the $(projectile)s correctly." + "en": "Let's get back to the **scene** to place the $(projectile)s correctly.", + "fr-fr": "" } } } @@ -2250,7 +2422,8 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, @@ -2259,12 +2432,14 @@ "placement": "top", "title": { "messageByLocale": { - "en": "Rearrange $(projectile)s." + "en": "Rearrange $(projectile)s.", + "fr-fr": "" } }, "description": { "messageByLocale": { - "en": "Drag all **instances** of $(projectile) within the boundaries of $(background)." + "en": "Drag all **instances** of $(projectile) within the boundaries of $(background).", + "fr-fr": "" } } } @@ -2273,7 +2448,8 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, @@ -2282,12 +2458,14 @@ "placement": "top", "title": { "messageByLocale": { - "en": "Set up $(target) protection." + "en": "Set up $(target) protection.", + "fr-fr": "" } }, "description": { "messageByLocale": { - "en": "Arrange both $(block) and $(obstacle) in a way to protect $(target)." + "en": "Arrange both $(block) and $(obstacle) in a way to protect $(target).", + "fr-fr": "" } } } @@ -2300,7 +2478,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "**Preview** the game and make sure it's winnable." + "en": "**Preview** the game and make sure it's winnable.", + "fr-fr": "" } }, "placement": "bottom" @@ -2314,7 +2493,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Once you're ready, we'll generate a link to share it." + "en": "Once you're ready, we'll generate a link to share it.", + "fr-fr": "" } }, "placement": "bottom" @@ -2328,7 +2508,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "First, you need to create an account." + "en": "First, you need to create an account.", + "fr-fr": "" } }, "placement": "bottom" @@ -2357,7 +2538,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Fill in the form and then click here." + "en": "Fill in the form and then click here.", + "fr-fr": "" } }, "placement": "bottom" @@ -2373,7 +2555,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "After filling your info, click here." + "en": "After filling your info, click here.", + "fr-fr": "" } }, "placement": "bottom" @@ -2389,7 +2572,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click here to **publish** your game." + "en": "Click here to **publish** your game.", + "fr-fr": "" } }, "placement": "bottom" @@ -2410,7 +2594,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click here to open your game in your browser. Remember to share the link so that others can play your game!\n\nOnce you're done, close this dialog." + "en": "Click here to open your game in your browser. Remember to share the link so that others can play your game!\n\nOnce you're done, close this dialog.", + "fr-fr": "" } }, "placement": "top" @@ -2423,22 +2608,26 @@ "content": [ { "messageByLocale": { - "en": "## Congratulations!" + "en": "## Congratulations!", + "fr-fr": "## Félicitations !" } }, { "messageByLocale": { - "en": "You have finished the second part of your Fling Game." + "en": "You have finished the second part of your Fling Game.", + "fr-fr": "" } }, { "messageByLocale": { - "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" + "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", + "fr-fr": "" } }, { "messageByLocale": { - "en": "Now you can take a break from the tutorial, or add leaderboards on the next chapter." + "en": "Now you can take a break from the tutorial, or add leaderboards on the next chapter.", + "fr-fr": "" } } ] @@ -2452,7 +2641,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right click on your $(background), and click “set as **global object**”." + "en": "Right click on your $(background), and click “set as **global object**”.", + "fr-fr": "" } }, "placement": "left" @@ -2466,7 +2656,8 @@ "tooltip": { "title": { "messageByLocale": { - "en": "Now let's create a new **scene** for our start screen." + "en": "Now let's create a new **scene** for our start screen.", + "fr-fr": "" } }, "placement": "right" @@ -2480,7 +2671,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click here." + "en": "Click here.", + "fr-fr": "" } }, "placement": "right" @@ -2497,7 +2689,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right click on the new scene and change its name to “**StartScreen**”.\n\nOnce you're done, click on the item to open the new scene." + "en": "Right click on the new scene and change its name to “**StartScreen**”.\n\nOnce you're done, click on the item to open the new scene.", + "fr-fr": "" } }, "placement": "right" @@ -2512,7 +2705,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(background) into the scene." + "en": "Drag $(background) into the scene.", + "fr-fr": "" } }, "placement": "left" @@ -2522,7 +2716,8 @@ "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { - "en": "I'm done" + "en": "I'm done", + "fr-fr": "J'ai terminé" } } }, @@ -2530,7 +2725,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Drag to expand the size $(background) until it stretches over your entire game area." + "en": "Drag to expand the size $(background) until it stretches over your entire game area.", + "fr-fr": "" } }, "image": { @@ -2548,7 +2744,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now let's create a title!" + "en": "Now let's create a title!", + "fr-fr": "" } } } @@ -2561,7 +2758,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This time, we'll create a text from scratch." + "en": "Let's create a text from scratch.", + "fr-fr": "" } }, "placement": "bottom" @@ -2576,7 +2774,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **Text** object" + "en": "Select **Text** object", + "fr-fr": "" } }, "placement": "bottom" @@ -2591,7 +2790,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the object name to “Title”." + "en": "Change the object name to “Title”.", + "fr-fr": "" } }, "placement": "bottom" @@ -2606,7 +2806,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the font size to **200**." + "en": "Change the font size to **200**.", + "fr-fr": "" } }, "placement": "bottom" @@ -2621,7 +2822,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the initial text to display whatever you want the title of your game to be." + "en": "Change the initial text to display whatever you want the title of your game to be.", + "fr-fr": "" } }, "placement": "bottom" @@ -2636,7 +2838,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } } }, @@ -2652,7 +2855,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(title) into the **scene** where you'd like your title to be." + "en": "Drag $(title) into the **scene** where you'd like your title to be.", + "fr-fr": "" } }, "placement": "left" @@ -2666,7 +2870,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right-click on $(title) and select “Duplicate”." + "en": "Right-click on $(title) and select “Duplicate”.", + "fr-fr": "" } }, "placement": "left" @@ -2683,7 +2888,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Double click on $(startText)." + "en": "Double click on $(startText).", + "fr-fr": "" } }, "placement": "left" @@ -2697,7 +2903,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the **object** name to “**Start**”." + "en": "Change the **object** name to “**Start**”.", + "fr-fr": "" } }, "placement": "bottom" @@ -2712,7 +2919,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the font size to **50**." + "en": "Change the font size to **50**.", + "fr-fr": "" } }, "placement": "bottom" @@ -2727,7 +2935,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the initial text to “Start Game”." + "en": "Change the initial text to “Start Game”.", + "fr-fr": "" } }, "placement": "bottom" @@ -2742,7 +2951,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } } }, @@ -2758,7 +2968,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(startText) into the **scene** where you'd like the start button to be." + "en": "Drag $(startText) into the **scene** where you'd like the start button to be.", + "fr-fr": "" } }, "placement": "left" @@ -2772,7 +2983,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's interact with those titles." + "en": "Now let's interact with those titles.", + "fr-fr": "" } } } @@ -2786,7 +2998,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create a new **event**!" + "en": "Let's create a new **event**!", + "fr-fr": "" } } } @@ -2799,7 +3012,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a **condition**." + "en": "Add a **condition**.", + "fr-fr": "" } } } @@ -2812,7 +3026,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(startText)." + "en": "Select $(startText).", + "fr-fr": "" } } }, @@ -2826,7 +3041,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the cursor condition." + "en": "Select the cursor condition.", + "fr-fr": "" } } }, @@ -2840,7 +3056,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **condition** is all set." + "en": "Alright, the **condition** is all set.", + "fr-fr": "" } }, "placement": "top" @@ -2854,7 +3071,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add another **condition**." + "en": "Add another **condition**.", + "fr-fr": "" } } } @@ -2867,7 +3085,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “**Mouse**”." + "en": "Type “**Mouse**”.", + "fr-fr": "" } } }, @@ -2881,7 +3100,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “Mouse button released”." + "en": "Select “Mouse button released”.", + "fr-fr": "" } } }, @@ -2895,7 +3115,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “left (primary)”." + "en": "Select “left (primary)”.", + "fr-fr": "" } }, "placement": "top" @@ -2910,7 +3131,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **condition** is all set." + "en": "Alright, the **condition** is all set.", + "fr-fr": "" } }, "placement": "top" @@ -2924,7 +3146,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add an **action** now." + "en": "Let's add an **action** now.", + "fr-fr": "" } } } @@ -2937,7 +3160,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “**Scene**”." + "en": "Type “**Scene**”.", + "fr-fr": "" } } }, @@ -2951,7 +3175,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “**Change the scene**”." + "en": "Select “**Change the scene**”.", + "fr-fr": "" } } }, @@ -2965,7 +3190,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “$(playScene)”." + "en": "Select “$(playScene)”.", + "fr-fr": "" } }, "placement": "top" @@ -2980,7 +3206,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **action** is all set." + "en": "Alright, the **action** is all set.", + "fr-fr": "" } }, "placement": "top" @@ -2994,7 +3221,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's get back to the **scene** to add a score." + "en": "Let's get back to the **scene** to add a score.", + "fr-fr": "" } } } @@ -3009,7 +3237,8 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Let's create a text that will display the player score." + "en": "Let's create a text that will display the player score.", + "fr-fr": "" } } } @@ -3022,7 +3251,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create a text from scratch." + "en": "Let's create a text from scratch.", + "fr-fr": "" } }, "placement": "bottom" @@ -3037,7 +3267,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **Text** object" + "en": "Select **Text** object", + "fr-fr": "" } }, "placement": "bottom" @@ -3052,7 +3283,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the object name to “**Score**”." + "en": "Change the object name to “**Score**”.", + "fr-fr": "" } }, "placement": "bottom" @@ -3067,7 +3299,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the font size to **50**." + "en": "Change the font size to **50**.", + "fr-fr": "" } }, "placement": "bottom" @@ -3082,7 +3315,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the initial text to display “Milliseconds: 0”." + "en": "Change the initial text to display “Milliseconds: 0”.", + "fr-fr": "" } }, "placement": "bottom" @@ -3097,7 +3331,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } } }, @@ -3113,7 +3348,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag $(scoreText) into the top left corner of the screen." + "en": "Drag $(scoreText) into the top left corner of the screen.", + "fr-fr": "" } }, "placement": "left" @@ -3127,7 +3363,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's change the score dynamically." + "en": "Let's change the score dynamically.", + "fr-fr": "" } } } @@ -3141,7 +3378,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will create a timer that will start when the **scene** starts." + "en": "We will create a timer that will start when the **scene** starts.", + "fr-fr": "" } } }, @@ -3155,7 +3393,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a **condition**." + "en": "Add a **condition**.", + "fr-fr": "" } } } @@ -3168,7 +3407,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Scene**”." + "en": "Search for “**Scene**”.", + "fr-fr": "" } } }, @@ -3182,7 +3422,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the *At the beginning of the scene** condition.*" + "en": "Select the *At the beginning of the scene** condition.*", + "fr-fr": "" } } }, @@ -3196,7 +3437,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create the timer now." + "en": "Let's create the timer now.", + "fr-fr": "" } }, "placement": "top" @@ -3210,7 +3452,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Create an **action**." + "en": "Create an **action**.", + "fr-fr": "" } } } @@ -3223,7 +3466,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “Scene timer”." + "en": "Search for “Scene timer”.", + "fr-fr": "" } } }, @@ -3237,7 +3481,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the *Start (or reset) a scene timer* action." + "en": "Select the *Start (or reset) a scene timer* action.", + "fr-fr": "" } } }, @@ -3251,7 +3496,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type **\"Score\"** (in quotations)." + "en": "Type **\"Score\"** (in quotations).", + "fr-fr": "" } } }, @@ -3266,7 +3512,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } }, "placement": "top" @@ -3280,7 +3527,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's display the score." + "en": "Now let's display the score.", + "fr-fr": "" } } }, @@ -3294,7 +3542,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make the score dynamic." + "en": "Let's make the score dynamic.", + "fr-fr": "" } } } @@ -3307,7 +3556,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select $(scoreText)." + "en": "Select $(scoreText).", + "fr-fr": "" } } }, @@ -3321,7 +3571,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will change the text." + "en": "We will change the text.", + "fr-fr": "" } } }, @@ -3335,7 +3586,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “= (set to)”." + "en": "Select “= (set to)”.", + "fr-fr": "" } } }, @@ -3350,7 +3602,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Copy this line and paste it here: `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`." + "en": "Copy this line and paste it here: `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`.", + "fr-fr": "" } } }, @@ -3365,7 +3618,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're all set." + "en": "We're all set.", + "fr-fr": "" } }, "placement": "top" @@ -3379,12 +3633,14 @@ "standalone": true, "title": { "messageByLocale": { - "en": "Now we will display the other players scores." + "en": "Now we will display the other players scores.", + "fr-fr": "" } }, "description": { "messageByLocale": { - "en": "In the **event** where $(target) gets deleted, click on “Add action”." + "en": "In the **event** where $(target) gets deleted, click on “Add action”.", + "fr-fr": "" } } } @@ -3397,7 +3653,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**leaderboard**”." + "en": "Search for “**leaderboard**”.", + "fr-fr": "" } } }, @@ -3411,7 +3668,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the *Display leaderboard* action." + "en": "Select the *Display leaderboard* action.", + "fr-fr": "" } } }, @@ -3425,7 +3683,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the **Leaderboard admin**." + "en": "Open the **Leaderboard admin**.", + "fr-fr": "" } } }, @@ -3439,7 +3698,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Create a leaderboard." + "en": "Create a leaderboard.", + "fr-fr": "" } } }, @@ -3453,7 +3713,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's change its name." + "en": "Let's change its name.", + "fr-fr": "" } } }, @@ -3467,7 +3728,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “*Score*”." + "en": "Type “*Score*”.", + "fr-fr": "" } } }, @@ -3481,7 +3743,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Save changes when you're done." + "en": "Save changes when you're done.", + "fr-fr": "" } } }, @@ -3495,7 +3758,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Our leaderboard is ready." + "en": "Our leaderboard is ready.", + "fr-fr": "" } } }, @@ -3509,7 +3773,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the option *Select the leaderboard from a list*." + "en": "Select the option *Select the leaderboard from a list*.", + "fr-fr": "" } }, "placement": "top" @@ -3525,7 +3790,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the leaderboard named “Score”." + "en": "Select the leaderboard named “Score”.", + "fr-fr": "" } } }, @@ -3539,7 +3805,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We'll use the built-in loader." + "en": "We'll use the built-in loader.", + "fr-fr": "" } } }, @@ -3554,7 +3821,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target)." + "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", + "fr-fr": "" } }, "placement": "top" @@ -3568,7 +3836,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now we will ask the player to authenticate at game opening." + "en": "Now we will ask the player to authenticate at game opening.", + "fr-fr": "" } } } @@ -3583,7 +3852,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create an **event**!" + "en": "Let's create an **event**!", + "fr-fr": "" } } } @@ -3596,7 +3866,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add a condition." + "en": "Add a condition.", + "fr-fr": "" } } }, @@ -3617,7 +3888,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Scene**”." + "en": "Search for “**Scene**”.", + "fr-fr": "" } } }, @@ -3631,7 +3903,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **At the beginning of the scene** condition." + "en": "Select the **At the beginning of the scene** condition.", + "fr-fr": "" } } }, @@ -3645,7 +3918,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } }, "placement": "top" @@ -3659,7 +3933,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's choose an **action**." + "en": "Let's choose an **action**.", + "fr-fr": "" } } } @@ -3672,7 +3947,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Authentication**”." + "en": "Search for “**Authentication**”.", + "fr-fr": "" } } }, @@ -3686,7 +3962,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select *Display authentication banner*." + "en": "Select *Display authentication banner*.", + "fr-fr": "" } } }, @@ -3700,7 +3977,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now players will be asked to login." + "en": "Alright, now players will be asked to login.", + "fr-fr": "" } }, "placement": "top" @@ -3714,7 +3992,8 @@ "tooltip": { "title": { "messageByLocale": { - "en": "Now let's create a new **scene** that will be used to display the **leaderboard**." + "en": "Now let's create a new **scene** that will be used to display the **leaderboard**.", + "fr-fr": "" } }, "placement": "right" @@ -3728,7 +4007,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click here." + "en": "Click here.", + "fr-fr": "" } }, "placement": "right" @@ -3745,7 +4025,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right click on the new **scene** and change its name to “Leaderboard”.\n\nOnce you're done, click on the item to open the new scene." + "en": "Right click on the new **scene** and change its name to “Leaderboard”.\n\nOnce you're done, click on the item to open the new scene.", + "fr-fr": "" } }, "placement": "right" @@ -3760,7 +4041,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Go to the **events**." + "en": "Go to the **events**.", + "fr-fr": "" } } } @@ -3774,7 +4056,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add an **event** that makes sure the player comes back to the start screen after closing the **leaderboard**." + "en": "Let's add an **event** that makes sure the player comes back to the start screen after closing the **leaderboard**.", + "fr-fr": "" } } } @@ -3787,7 +4070,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click here." + "en": "Click here.", + "fr-fr": "" } } } @@ -3800,7 +4084,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Leaderboard**”." + "en": "Search for “**Leaderboard**”.", + "fr-fr": "" } } }, @@ -3814,7 +4099,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the *Leaderboard display has loaded* condition." + "en": "Select the *Leaderboard display has loaded* condition.", + "fr-fr": "" } } }, @@ -3828,7 +4114,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done." + "en": "We're done.", + "fr-fr": "Nous avons terminé." } }, "placement": "top" @@ -3842,7 +4129,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right-click on the condition and select *Invert Condition*." + "en": "Right-click on the condition and select *Invert Condition*.", + "fr-fr": "" } }, "placement": "bottom" @@ -3856,7 +4144,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add the **action** to come back to the start screen." + "en": "Let's add the **action** to come back to the start screen.", + "fr-fr": "" } } } @@ -3869,7 +4158,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “*Scene*”." + "en": "Type “*Scene*”.", + "fr-fr": "" } } }, @@ -3883,7 +4173,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “Change the scene”." + "en": "Select “Change the scene”.", + "fr-fr": "" } } }, @@ -3897,7 +4188,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “$(startScene)”." + "en": "Select “$(startScene)”.", + "fr-fr": "" } }, "placement": "top" @@ -3913,7 +4205,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the action is all set." + "en": "Alright, the action is all set.", + "fr-fr": "" } }, "placement": "top" @@ -3927,7 +4220,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's save the score of the player." + "en": "Now let's save the score of the player.", + "fr-fr": "" } } } @@ -3941,7 +4235,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "In the event where $(target) gets deleted, click on “Add action”." + "en": "In the event where $(target) gets deleted, click on “Add action”.", + "fr-fr": "" } } } @@ -3954,7 +4249,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “leaderboard”." + "en": "Search for “leaderboard”.", + "fr-fr": "" } } }, @@ -3968,7 +4264,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **Save player score** action." + "en": "Select the **Save player score** action.", + "fr-fr": "" } } }, @@ -3982,7 +4279,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the leaderboard named “Score”." + "en": "Select the leaderboard named “Score”.", + "fr-fr": "" } } }, @@ -3996,7 +4294,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the **expression** builder." + "en": "Click on the **expression** builder.", + "fr-fr": "" } } }, @@ -4010,7 +4309,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “*Timer*”." + "en": "Search for “*Timer*”.", + "fr-fr": "" } } }, @@ -4024,7 +4324,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **Scene timer value**." + "en": "Select **Scene timer value**.", + "fr-fr": "" } } }, @@ -4038,7 +4339,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select timer “Score”." + "en": "Select timer “Score”.", + "fr-fr": "" } }, "placement": "top" @@ -4053,7 +4355,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This parameter is all set." + "en": "This parameter is all set.", + "fr-fr": "" } }, "placement": "top" @@ -4068,7 +4371,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the **expression** builder." + "en": "Click on the **expression** builder.", + "fr-fr": "" } } }, @@ -4082,7 +4386,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Username**”." + "en": "Search for “**Username**”.", + "fr-fr": "" } } }, @@ -4096,7 +4401,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **Username**." + "en": "Select **Username**.", + "fr-fr": "" } } }, @@ -4110,7 +4416,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "The action is ready." + "en": "The action is ready.", + "fr-fr": "" } }, "placement": "top" @@ -4124,7 +4431,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Let's change the **scene** to the **leaderboard** one (so that the play scene is closed).\n\nIn the **event** where $(target) gets deleted, click on “Add action”." + "en": "Let's change the **scene** to the **leaderboard** one (so that the play scene is closed).\n\nIn the **event** where $(target) gets deleted, click on “Add action”.", + "fr-fr": "" } } } @@ -4137,7 +4445,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “**Scene**”." + "en": "Type “**Scene**”.", + "fr-fr": "" } } }, @@ -4151,7 +4460,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “Change the scene”." + "en": "Select “Change the scene”.", + "fr-fr": "" } } }, @@ -4165,7 +4475,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “$(leaderboardScene)”." + "en": "Select “$(leaderboardScene)”.", + "fr-fr": "" } }, "placement": "top" @@ -4180,7 +4491,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **action** is all set." + "en": "Alright, the **action** is all set.", + "fr-fr": "" } }, "placement": "top" @@ -4194,7 +4506,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the **Project Manager**." + "en": "Open the **Project Manager**.", + "fr-fr": "" } }, "placement": "right" @@ -4208,7 +4521,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right-click on the start **scene** and select **Set as start scene**." + "en": "Right-click on the start **scene** and select **Set as start scene**.", + "fr-fr": "" } }, "placement": "right" @@ -4223,7 +4537,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the **Preview** button." + "en": "Click on the **Preview** button.", + "fr-fr": "" } }, "placement": "bottom" From bd371dd0788513ae451c10434bd4cd36a0af1b70 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 09:43:56 +0100 Subject: [PATCH 004/208] Add checks in tutorials on translations and project data placeholders --- __tests__/post-build.spec.js | 103 ++++++++++++++++++++++++++++++++++- __tests__/utils.js | 52 +++++++++++++++++- scripts/types.d.ts | 72 ++++++++++++++++++++++++ 3 files changed, 225 insertions(+), 2 deletions(-) diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index 81e1e6e..074ffb0 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -1,11 +1,19 @@ // @ts-check const fs = require('fs'); +const dree = require('dree'); -const { inAppTutorialShortHeadersPath } = require('./utils'); +const { + inAppTutorialShortHeadersPath, + inAppTutorialsFolderPath, + getAllMessagesByLocale, + getAllPlaceholdersInMessage, +} = require('./utils'); /** * @typedef {import('../scripts/types').InAppTutorialShortHeader} InAppTutorialShortHeader + * @typedef {import('../scripts/types').InAppTutorial} InAppTutorial + * @typedef {import('./utils').InAppTutorialGenericType} InAppTutorialGenericType */ describe('In app tutorials control figures', () => { @@ -29,3 +37,96 @@ describe('In app tutorials control figures', () => { expect(Object.values(idCount).every((count) => count === 1)).toBe(true); }); }); + +describe('In app tutorials content checks', () => { + const allInAppTutorialFolder = dree.scan(inAppTutorialsFolderPath, { + stat: false, + normalize: true, + followLinks: true, + size: false, + hash: false, + exclude: [], + extensions: ['json'], + }); + const { children: allInAppTutorialFiles } = allInAppTutorialFolder; + if (!allInAppTutorialFiles) throw new Error('No tutorial file found.'); + /** @type {InAppTutorial[]} */ + const allInAppTutorials = allInAppTutorialFiles.map((file) => { + return JSON.parse(fs.readFileSync(file.path, 'utf-8')); + }); + + test('there is no empty translation', () => { + /** @type {Record>>} */ + const translationsWithEmptyFieldsByTutorial = {}; + allInAppTutorials.forEach((tutorial) => { + const allMessagesByLocale = getAllMessagesByLocale(tutorial); + /** @type {Array>} */ + const translationsWithEmptyFieldsForTutorial = []; + allMessagesByLocale.forEach((messageByLocale) => { + if (Object.values(messageByLocale).some((message) => !message)) { + translationsWithEmptyFieldsForTutorial.push(messageByLocale); + } + }); + if (translationsWithEmptyFieldsForTutorial.length > 0) { + translationsWithEmptyFieldsByTutorial[tutorial.id] = + translationsWithEmptyFieldsForTutorial; + } + }); + if (Object.keys(translationsWithEmptyFieldsByTutorial).length > 0) { + console.error(translationsWithEmptyFieldsByTutorial); + throw new Error( + 'There are missing translations in the following tutorials' + ); + } + }); + + test('references to project data are not corrupt', () => { + /** @type {Record>} */ + const messagesWithCorruptProjectDataByTutorial = {}; + + allInAppTutorials.forEach((tutorial) => { + const { flow } = tutorial; + const projectData = flow.reduce( + /** + * @param {string[]} acc + * @param {{mapProjectData?: Record}} step + */ + (acc, step) => { + if (step.mapProjectData) { + acc.push(Object.keys(step.mapProjectData)[0]); + } + return acc; + }, + /** @type {string[]} */ + [] + ); + + const allMessagesByLocale = getAllMessagesByLocale(tutorial); + + /** @type {string[]} */ + const messagesWithCorruptProjectData = []; + allMessagesByLocale.forEach((messageByLocale) => { + Object.values(messageByLocale).forEach((value) => { + const allPlaceholders = getAllPlaceholdersInMessage(value); + if ( + allPlaceholders.some( + (placeholder) => !projectData.includes(placeholder) + ) + ) { + messagesWithCorruptProjectData.push(value); + } + }); + }); + if (messagesWithCorruptProjectData.length > 0) { + messagesWithCorruptProjectDataByTutorial[tutorial.id] = + messagesWithCorruptProjectData; + } + }); + if (Object.keys(messagesWithCorruptProjectDataByTutorial).length > 0) { + console.error(messagesWithCorruptProjectDataByTutorial); + throw new Error( + 'There are corrupt project data keys in the following tutorials' + ); + } + }); +}); diff --git a/__tests__/utils.js b/__tests__/utils.js index e7d90ea..b569ec5 100644 --- a/__tests__/utils.js +++ b/__tests__/utils.js @@ -6,5 +6,55 @@ const inAppTutorialShortHeadersPath = path.join( 'database', 'inAppTutorialShortHeaders.json' ); +const inAppTutorialsFolderPath = path.join(distPath, 'tutorials', 'in-app'); -module.exports = { distPath, inAppTutorialShortHeadersPath }; +/** + * @typedef {{[key:string] : string} | {messageByLocale?: Record}} InAppTutorialGenericType + * @typedef {import('../scripts/types').InAppTutorial} InAppTutorial + * @typedef {import('../scripts/types').MessageByLocale} MessageByLocale + */ + +/** + * Recursively browses a tutorial to return all messageByLocale object. + * @param {InAppTutorial | InAppTutorialGenericType} tutorial + * @returns {Array} + */ +const getAllMessagesByLocale = (tutorial) => { + if (Array.isArray(tutorial)) { + return Object.values(tutorial).map(getAllMessagesByLocale).flat(); + } + /** @type {Array>} */ + const localMessagesByLocale = []; + Object.entries(tutorial).forEach(([key, value]) => { + if (key === 'messageByLocale') { + // @ts-ignore + localMessagesByLocale.push(value); + return; + } + if (typeof value === 'object') { + localMessagesByLocale.push(...getAllMessagesByLocale(value)); + return; + } + }); + return localMessagesByLocale; +}; + +const placeholderReplacingRegex = /\$\((\w+)\)/g; + +/** + * + * @param {string} message + * @returns {string[]} + */ +const getAllPlaceholdersInMessage = (message) => { + const match = message.matchAll(placeholderReplacingRegex); + return [...match].map((match) => match[1]); +}; + +module.exports = { + distPath, + inAppTutorialShortHeadersPath, + inAppTutorialsFolderPath, + getAllMessagesByLocale, + getAllPlaceholdersInMessage, +}; diff --git a/scripts/types.d.ts b/scripts/types.d.ts index 4e76b10..bbaaa2e 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -2,3 +2,75 @@ export interface InAppTutorialShortHeader { id: string; contentUrl: string; } + +export type MessageByLocale = Record; + +export type TranslatedText = { + messageByLocale: MessageByLocale; +}; + +export type InAppTutorialTooltip = { + placement?: 'bottom' | 'left' | 'right' | 'top'; + title?: TranslatedText; + description?: TranslatedText; +}; + +type InAppTutorialFlowStepDOMChangeTrigger = + | { + presenceOfElement: string; + } + | { + absenceOfElement: string; + }; + +export type InAppTutorialFlowStepTrigger = + | InAppTutorialFlowStepDOMChangeTrigger + | { + valueHasChanged: true; + } + | { + instanceAddedOnScene: string; + } + | { + previewLaunched: true; + } + | { + clickOnTooltipButton: string; + }; + +export type InAppTutorialFlowStep = { + elementToHighlightId?: string; + id?: string; + isTriggerFlickering?: true; + nextStepTrigger?: InAppTutorialFlowStepTrigger; + shortcuts?: Array<{ + stepId: string; + // TODO: Adapt provider to make it possible to use other triggers as shortcuts + trigger: InAppTutorialFlowStepDOMChangeTrigger; + }>; + mapProjectData?: Record; + tooltip?: InAppTutorialTooltip; + skippable?: true; + isOnClosableDialog?: true; +}; + +export type EditorIdentifier = 'Scene' | 'EventsSheet' | 'Home'; + +export type InAppTutorialEndDialog = { + content: Array< + | TranslatedText + | { + image: { + imageSource: string; + linkHref?: string; + }; + } + >; +}; + +export type InAppTutorial = { + id: string; + flow: Array; + editorSwitches: Record; + endDialog: InAppTutorialEndDialog; +}; From 7f656059bb6ecd1d8df506d2b0a1bf77bd19ebb0 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:05:30 +0100 Subject: [PATCH 005/208] Translate part 2 --- tutorials/in-app/flingGame.json | 130 ++++++++++++++++---------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 66a2f5c..d0729d8 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1869,7 +1869,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "" + "fr-fr": "Créez une **condition**." } } } @@ -1883,7 +1883,7 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(projectile)." } } }, @@ -1898,7 +1898,7 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-fr": "" + "fr-fr": "Cliquez sur la condition collision." } } }, @@ -1913,7 +1913,7 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(target)." } }, "placement": "top" @@ -1929,7 +1929,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "" + "fr-fr": "La condition est maintenant configurée." } }, "placement": "top" @@ -1944,7 +1944,7 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-fr": "" + "fr-fr": "Créez une **action** maintenant." } } } @@ -1958,7 +1958,7 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(target)." } } }, @@ -1973,7 +1973,7 @@ "description": { "messageByLocale": { "en": "We will make $(target) disappear on collision.", - "fr-fr": "" + "fr-fr": "Nous allons faire disparaître $(target) au moment de la collision." } } }, @@ -1988,7 +1988,7 @@ "description": { "messageByLocale": { "en": "Alright, $(target) will now disappear when $(projectile) hits it.", - "fr-fr": "" + "fr-fr": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra." } }, "placement": "top" @@ -2003,7 +2003,7 @@ "description": { "messageByLocale": { "en": "Let's add another **action** that will be executed for the same **condition**.", - "fr-fr": "" + "fr-fr": "Créons une autre **action** qui sera exécutée pour la même **condition**." } } } @@ -2017,7 +2017,7 @@ "description": { "messageByLocale": { "en": "Search for “layer”.", - "fr-fr": "" + "fr-fr": "Cherchez “calque”." } } }, @@ -2032,7 +2032,7 @@ "description": { "messageByLocale": { "en": "Select the **Show a layer** action.", - "fr-fr": "" + "fr-fr": "Cliquez sur l'action **Afficher un calque**." } } }, @@ -2047,7 +2047,7 @@ "description": { "messageByLocale": { "en": "Select the **layer** you created.", - "fr-fr": "" + "fr-fr": "Sélectionnez le **calque** que vous avez créé." } }, "placement": "top" @@ -2063,7 +2063,7 @@ "description": { "messageByLocale": { "en": "Alright, now the title should appear when the player hits $(target) with $(projectile).", - "fr-fr": "" + "fr-fr": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile)." } }, "placement": "top" @@ -2078,7 +2078,7 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to create some constraints for the player.", - "fr-fr": "" + "fr-fr": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse." } } } @@ -2094,7 +2094,7 @@ "description": { "messageByLocale": { "en": "We'll define an area where the player can grab $(projectile). Outside of this area, the $(projectile)s will be free.", - "fr-fr": "" + "fr-fr": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre." } } } @@ -2125,7 +2125,7 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**background**”." } } }, @@ -2167,7 +2167,7 @@ "description": { "messageByLocale": { "en": "Let's use it now!", - "fr-fr": "" + "fr-fr": "Mettons la zone en place." } } } @@ -2181,7 +2181,7 @@ "description": { "messageByLocale": { "en": "Drag $(grabArea) from the menu to the canvas.", - "fr-fr": "" + "fr-fr": "Faites glisser $(grabArea) du menu à au canvas." } }, "placement": "left" @@ -2201,7 +2201,7 @@ "description": { "messageByLocale": { "en": "Drag and resize $(grabArea) until it covers the lower left side of the game screen.", - "fr-fr": "" + "fr-fr": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu." } }, "image": { @@ -2217,8 +2217,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Make sure that $(background) is selected and change this value to **0**.", - "fr-fr": "" + "en": "Make sure that $(grabArea) is selected and change this value to **0**.", + "fr-fr": "Sélectionnez l'instance de $(grabArea) et définissez son ordre sur l'axe z à **0**." } }, "placement": "right" @@ -2232,8 +2232,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's deactivate the draggable **behavior** when outside of the $(grabArea).", - "fr-fr": "" + "en": "Let's deactivate the draggable **behavior** of $(projectile) when outside of the $(grabArea).", + "fr-fr": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea)." } } } @@ -2249,7 +2249,7 @@ "description": { "messageByLocale": { "en": "Let's create a new event!", - "fr-fr": "" + "fr-fr": "Créez un nouvel évènement." } } } @@ -2263,7 +2263,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "" + "fr-fr": "Ajoutez une **condition**." } } } @@ -2277,7 +2277,7 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(projectile)." } } }, @@ -2292,7 +2292,7 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-fr": "" + "fr-fr": "Cliquez sur la condition collision." } } }, @@ -2307,7 +2307,7 @@ "description": { "messageByLocale": { "en": "Select $(grabArea).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(grabArea)." } }, "placement": "top" @@ -2323,7 +2323,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "" + "fr-fr": "La **condition** est maintenant sécurisée." } }, "placement": "top" @@ -2338,7 +2338,7 @@ "description": { "messageByLocale": { "en": "Right click on this newly created **condition** and select “Invert condition”.", - "fr-fr": "" + "fr-fr": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”." } }, "placement": "right" @@ -2352,8 +2352,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Add an action", - "fr-fr": "" + "en": "Add an action.", + "fr-fr": "Ajoutez une action." } } } @@ -2367,7 +2367,7 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(projectile)." } } }, @@ -2382,7 +2382,7 @@ "description": { "messageByLocale": { "en": "Select the **action** that releases the $(projectile) from the player drag.", - "fr-fr": "" + "fr-fr": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse." } } }, @@ -2412,7 +2412,7 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to place the $(projectile)s correctly.", - "fr-fr": "" + "fr-fr": "Revenons à la **scène** pour placer les $(projectile)s correctement." } } } @@ -2432,14 +2432,14 @@ "placement": "top", "title": { "messageByLocale": { - "en": "Rearrange $(projectile)s.", - "fr-fr": "" + "en": "Rearrange the $(projectile)s.", + "fr-fr": "Repositionnez les $(projectile)s." } }, "description": { "messageByLocale": { "en": "Drag all **instances** of $(projectile) within the boundaries of $(background).", - "fr-fr": "" + "fr-fr": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background)." } } } @@ -2459,13 +2459,13 @@ "title": { "messageByLocale": { "en": "Set up $(target) protection.", - "fr-fr": "" + "fr-fr": "Créez une protection pour $(target)." } }, "description": { "messageByLocale": { "en": "Arrange both $(block) and $(obstacle) in a way to protect $(target).", - "fr-fr": "" + "fr-fr": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target)." } } } @@ -2479,7 +2479,7 @@ "description": { "messageByLocale": { "en": "**Preview** the game and make sure it's winnable.", - "fr-fr": "" + "fr-fr": "Lancer un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target)." } }, "placement": "bottom" @@ -2493,8 +2493,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Once you're ready, we'll generate a link to share it.", - "fr-fr": "" + "en": "Once you're ready, we'll generate a link to share your game.", + "fr-fr": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu." } }, "placement": "bottom" @@ -2509,7 +2509,7 @@ "description": { "messageByLocale": { "en": "First, you need to create an account.", - "fr-fr": "" + "fr-fr": "Tout d'abord, vous devez vous créer un compte." } }, "placement": "bottom" @@ -2539,7 +2539,7 @@ "description": { "messageByLocale": { "en": "Fill in the form and then click here.", - "fr-fr": "" + "fr-fr": "Remplissez le formulaire et cliquez ici." } }, "placement": "bottom" @@ -2556,7 +2556,7 @@ "description": { "messageByLocale": { "en": "After filling your info, click here.", - "fr-fr": "" + "fr-fr": "Après avoir rempli le formulaire, cliquez ici." } }, "placement": "bottom" @@ -2573,7 +2573,7 @@ "description": { "messageByLocale": { "en": "Click here to **publish** your game.", - "fr-fr": "" + "fr-fr": "Cliquez ici pour **publier** votre jeu." } }, "placement": "bottom" @@ -2595,7 +2595,7 @@ "description": { "messageByLocale": { "en": "Click here to open your game in your browser. Remember to share the link so that others can play your game!\n\nOnce you're done, close this dialog.", - "fr-fr": "" + "fr-fr": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre." } }, "placement": "top" @@ -2615,19 +2615,19 @@ { "messageByLocale": { "en": "You have finished the second part of your Fling Game.", - "fr-fr": "" + "fr-fr": "Vous avez terminé la seconde partie de votre jeu." } }, { "messageByLocale": { "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", - "fr-fr": "" + "fr-fr": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { "messageByLocale": { - "en": "Now you can take a break from the tutorial, or add leaderboards on the next chapter.", - "fr-fr": "" + "en": "Now you can take a break from the tutorial, or add a leaderboard on the next chapter.", + "fr-fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score." } } ] @@ -3027,7 +3027,7 @@ "description": { "messageByLocale": { "en": "Select $(startText).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(startText)." } } }, @@ -3408,7 +3408,7 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Scene**”" } } }, @@ -3467,7 +3467,7 @@ "description": { "messageByLocale": { "en": "Search for “Scene timer”.", - "fr-fr": "" + "fr-fr": "Cherchez “Scene timer”" } } }, @@ -3557,7 +3557,7 @@ "description": { "messageByLocale": { "en": "Select $(scoreText).", - "fr-fr": "" + "fr-fr": "Cliquez sur $(scoreText)." } } }, @@ -3654,7 +3654,7 @@ "description": { "messageByLocale": { "en": "Search for “**leaderboard**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**leaderboard**”" } } }, @@ -3889,7 +3889,7 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Scene**”" } } }, @@ -3948,7 +3948,7 @@ "description": { "messageByLocale": { "en": "Search for “**Authentication**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Authentication**”" } } }, @@ -4085,7 +4085,7 @@ "description": { "messageByLocale": { "en": "Search for “**Leaderboard**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Leaderboard**”" } } }, @@ -4130,7 +4130,7 @@ "description": { "messageByLocale": { "en": "Right-click on the condition and select *Invert Condition*.", - "fr-fr": "" + "fr-fr": "Faites un clic droit sur la **condition** et sélectionnez “Inverser une condition”." } }, "placement": "bottom" @@ -4250,7 +4250,7 @@ "description": { "messageByLocale": { "en": "Search for “leaderboard”.", - "fr-fr": "" + "fr-fr": "Cherchez “leaderboard”" } } }, @@ -4310,7 +4310,7 @@ "description": { "messageByLocale": { "en": "Search for “*Timer*”.", - "fr-fr": "" + "fr-fr": "Cherchez “*Timer*”" } } }, @@ -4387,7 +4387,7 @@ "description": { "messageByLocale": { "en": "Search for “**Username**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Username**”" } } }, From cf5e522831c92d309ac6ccdb479fa4b32b734c0e Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:05:44 +0100 Subject: [PATCH 006/208] Add new field to display available languages --- scripts/types.d.ts | 1 + tutorials/in-app/flingGame.json | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/scripts/types.d.ts b/scripts/types.d.ts index bbaaa2e..2c78375 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -73,4 +73,5 @@ export type InAppTutorial = { flow: Array; editorSwitches: Record; endDialog: InAppTutorialEndDialog; + availableLocales: Array; }; diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index d0729d8..da10989 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -57,6 +57,10 @@ "scene": "playScene" } }, + "availableLocales": [ + "en", + "fr-fr" + ], "endDialog": { "content": [ { From 9ee0b883084a6cbdb0ea927571f52de62af84cdc Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 12:08:16 +0100 Subject: [PATCH 007/208] Add available locales in short headers --- scripts/lib/InAppTutorial.js | 4 ++++ scripts/types.d.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/scripts/lib/InAppTutorial.js b/scripts/lib/InAppTutorial.js index c0124ac..68082f6 100644 --- a/scripts/lib/InAppTutorial.js +++ b/scripts/lib/InAppTutorial.js @@ -11,6 +11,8 @@ class InAppTutorial { sourcePath; /** @type {string} */ id; + /** @type {Array} */ + availableLocales; /** * @param {string} sourcePath @@ -26,6 +28,7 @@ class InAppTutorial { ); } this.id = tutorialContent.id; + this.availableLocales = tutorialContent.availableLocales; } catch (error) { console.error( `An error occurred when reading tutorial file with path ${sourcePath}. The file might be corrupt.`, @@ -42,6 +45,7 @@ class InAppTutorial { return { id: this.id, contentUrl: `https://resources.gdevelop-app.com/in-app-tutorials/${this.id}.json`, + availableLocales: this.availableLocales, }; } } diff --git a/scripts/types.d.ts b/scripts/types.d.ts index 2c78375..4bf99c5 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -1,6 +1,7 @@ export interface InAppTutorialShortHeader { id: string; contentUrl: string; + availableLocales: Array; } export type MessageByLocale = Record; From 3d337e95408ddc172b2eaea9e376aff4cc95c8ef Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 12:19:58 +0100 Subject: [PATCH 008/208] Translate part 3 --- tutorials/in-app/flingGame.json | 248 ++++++++++++++++---------------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index da10989..926f114 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1668,7 +1668,7 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-fr": "Sélectionnez l'object **Texte**" + "fr-fr": "Sélectionnez l'objet **Texte**" } }, "placement": "bottom" @@ -2483,7 +2483,7 @@ "description": { "messageByLocale": { "en": "**Preview** the game and make sure it's winnable.", - "fr-fr": "Lancer un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target)." + "fr-fr": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target)." } }, "placement": "bottom" @@ -2645,8 +2645,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right click on your $(background), and click “set as **global object**”.", - "fr-fr": "" + "en": "Right click on your $(background) and click “set as **global object**”.", + "fr-fr": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”." } }, "placement": "left" @@ -2661,7 +2661,7 @@ "title": { "messageByLocale": { "en": "Now let's create a new **scene** for our start screen.", - "fr-fr": "" + "fr-fr": "Créons une scène qui servira d'écran d'ouverture du jeu." } }, "placement": "right" @@ -2676,7 +2676,7 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-fr": "" + "fr-fr": "Cliquez ici." } }, "placement": "right" @@ -2694,7 +2694,7 @@ "description": { "messageByLocale": { "en": "Right click on the new scene and change its name to “**StartScreen**”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-fr": "" + "fr-fr": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." } }, "placement": "right" @@ -2710,7 +2710,7 @@ "description": { "messageByLocale": { "en": "Drag $(background) into the scene.", - "fr-fr": "" + "fr-fr": "Faites glisser $(background) du menu au canvas." } }, "placement": "left" @@ -2730,7 +2730,7 @@ "description": { "messageByLocale": { "en": "Drag to expand the size $(background) until it stretches over your entire game area.", - "fr-fr": "" + "fr-fr": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu." } }, "image": { @@ -2749,7 +2749,7 @@ "description": { "messageByLocale": { "en": "Now let's create a title!", - "fr-fr": "" + "fr-fr": "Maintenant, créons un titre!" } } } @@ -2763,7 +2763,7 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-fr": "" + "fr-fr": "Nous allons créer un objet texte de zéro." } }, "placement": "bottom" @@ -2779,7 +2779,7 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-fr": "" + "fr-fr": "Sélectionnez l'objet **Texte**" } }, "placement": "bottom" @@ -2795,7 +2795,7 @@ "description": { "messageByLocale": { "en": "Change the object name to “Title”.", - "fr-fr": "" + "fr-fr": "Changez le nom de l'objet pour “Titre”." } }, "placement": "bottom" @@ -2811,7 +2811,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-fr": "" + "fr-fr": "Utilisez une taille de **200**." } }, "placement": "bottom" @@ -2827,7 +2827,7 @@ "description": { "messageByLocale": { "en": "Change the initial text to display whatever you want the title of your game to be.", - "fr-fr": "" + "fr-fr": "Entrez le nom que vous avez choisi pour votre jeu." } }, "placement": "bottom" @@ -2860,7 +2860,7 @@ "description": { "messageByLocale": { "en": "Drag $(title) into the **scene** where you'd like your title to be.", - "fr-fr": "" + "fr-fr": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu.." } }, "placement": "left" @@ -2875,7 +2875,7 @@ "description": { "messageByLocale": { "en": "Right-click on $(title) and select “Duplicate”.", - "fr-fr": "" + "fr-fr": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”." } }, "placement": "left" @@ -2893,7 +2893,7 @@ "description": { "messageByLocale": { "en": "Double click on $(startText).", - "fr-fr": "" + "fr-fr": "Double-cliquez sur $(startText)." } }, "placement": "left" @@ -2908,7 +2908,7 @@ "description": { "messageByLocale": { "en": "Change the **object** name to “**Start**”.", - "fr-fr": "" + "fr-fr": "Changez le nom de **l'objet** pour “**Jouer**”." } }, "placement": "bottom" @@ -2924,7 +2924,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-fr": "" + "fr-fr": "Utilisez une taille de **50**." } }, "placement": "bottom" @@ -2940,7 +2940,7 @@ "description": { "messageByLocale": { "en": "Change the initial text to “Start Game”.", - "fr-fr": "" + "fr-fr": "Définissez le texte de l'objet à “Jouer”." } }, "placement": "bottom" @@ -2973,7 +2973,7 @@ "description": { "messageByLocale": { "en": "Drag $(startText) into the **scene** where you'd like the start button to be.", - "fr-fr": "" + "fr-fr": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez." } }, "placement": "left" @@ -2988,7 +2988,7 @@ "description": { "messageByLocale": { "en": "Now let's interact with those titles.", - "fr-fr": "" + "fr-fr": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte." } } } @@ -3002,8 +3002,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create a new **event**!", - "fr-fr": "" + "en": "Let's create a new **event**.", + "fr-fr": "Créez un nouvel **évènement**." } } } @@ -3017,7 +3017,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "" + "fr-fr": "Ajoutez une **condition**." } } } @@ -3046,7 +3046,7 @@ "description": { "messageByLocale": { "en": "Select the cursor condition.", - "fr-fr": "" + "fr-fr": "Cliquez sur cette condition de position du curseur." } } }, @@ -3061,7 +3061,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "" + "fr-fr": "Rien de plus à configurer." } }, "placement": "top" @@ -3076,7 +3076,7 @@ "description": { "messageByLocale": { "en": "Add another **condition**.", - "fr-fr": "" + "fr-fr": "Ajoutez une autre **condition**." } } } @@ -3090,7 +3090,7 @@ "description": { "messageByLocale": { "en": "Type “**Mouse**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Souris**”" } } }, @@ -3105,7 +3105,7 @@ "description": { "messageByLocale": { "en": "Select “Mouse button released”.", - "fr-fr": "" + "fr-fr": "Cliquez sur “Bouton de la souris relâché”." } } }, @@ -3120,7 +3120,7 @@ "description": { "messageByLocale": { "en": "Select “left (primary)”.", - "fr-fr": "" + "fr-fr": "Sélectionnez “Gauche (principal)”." } }, "placement": "top" @@ -3136,7 +3136,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "" + "fr-fr": "C'est bon pour cette condition." } }, "placement": "top" @@ -3151,7 +3151,7 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-fr": "" + "fr-fr": "Ajoutons une **action** maintenant." } } } @@ -3165,7 +3165,7 @@ "description": { "messageByLocale": { "en": "Type “**Scene**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**scène**”." } } }, @@ -3180,7 +3180,7 @@ "description": { "messageByLocale": { "en": "Select “**Change the scene**”.", - "fr-fr": "" + "fr-fr": "Cliquez sur “**Changer la scène**”." } } }, @@ -3195,7 +3195,7 @@ "description": { "messageByLocale": { "en": "Select “$(playScene)”.", - "fr-fr": "" + "fr-fr": "Sélectionnez “$(playScene)”." } }, "placement": "top" @@ -3211,7 +3211,7 @@ "description": { "messageByLocale": { "en": "Alright, the **action** is all set.", - "fr-fr": "" + "fr-fr": "L'action est bien configurée." } }, "placement": "top" @@ -3226,7 +3226,7 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to add a score.", - "fr-fr": "" + "fr-fr": "Retournons à la **scène** pour afficher le score." } } } @@ -3242,7 +3242,7 @@ "description": { "messageByLocale": { "en": "Let's create a text that will display the player score.", - "fr-fr": "" + "fr-fr": "Créez un object texte qui affichera le score du joueur ou de la joueuse." } } } @@ -3256,7 +3256,7 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-fr": "" + "fr-fr": "Nous allons créer un objet texte de zéro." } }, "placement": "bottom" @@ -3272,7 +3272,7 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-fr": "" + "fr-fr": "Sélectionnez l'objet **Texte**" } }, "placement": "bottom" @@ -3288,7 +3288,7 @@ "description": { "messageByLocale": { "en": "Change the object name to “**Score**”.", - "fr-fr": "" + "fr-fr": "Changez le nom de l'objet pour “**Score**”." } }, "placement": "bottom" @@ -3304,7 +3304,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-fr": "" + "fr-fr": "Utilisez une taille de **50**." } }, "placement": "bottom" @@ -3319,8 +3319,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the initial text to display “Milliseconds: 0”.", - "fr-fr": "" + "en": "Change the initial text to display “Time: 0”.", + "fr-fr": "Utilisez comme texte initial “Temps: 0”." } }, "placement": "bottom" @@ -3353,7 +3353,7 @@ "description": { "messageByLocale": { "en": "Drag $(scoreText) into the top left corner of the screen.", - "fr-fr": "" + "fr-fr": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu." } }, "placement": "left" @@ -3368,7 +3368,7 @@ "description": { "messageByLocale": { "en": "Let's change the score dynamically.", - "fr-fr": "" + "fr-fr": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé." } } } @@ -3383,7 +3383,7 @@ "description": { "messageByLocale": { "en": "We will create a timer that will start when the **scene** starts.", - "fr-fr": "" + "fr-fr": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre." } } }, @@ -3398,7 +3398,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "" + "fr-fr": "Ajoutez une **condition**." } } } @@ -3412,7 +3412,7 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-fr": "Cherchez “**Scene**”" + "fr-fr": "Cherchez “**Scène**”." } } }, @@ -3427,7 +3427,7 @@ "description": { "messageByLocale": { "en": "Select the *At the beginning of the scene** condition.*", - "fr-fr": "" + "fr-fr": "Cliquez sur la condition *Au lancement de la scène*." } } }, @@ -3442,7 +3442,7 @@ "description": { "messageByLocale": { "en": "Let's create the timer now.", - "fr-fr": "" + "fr-fr": "Nous allons maintenant créer le minuteur." } }, "placement": "top" @@ -3457,7 +3457,7 @@ "description": { "messageByLocale": { "en": "Create an **action**.", - "fr-fr": "" + "fr-fr": "Créez une **action**." } } } @@ -3471,7 +3471,7 @@ "description": { "messageByLocale": { "en": "Search for “Scene timer”.", - "fr-fr": "Cherchez “Scene timer”" + "fr-fr": "Cherchez “chrono”." } } }, @@ -3486,7 +3486,7 @@ "description": { "messageByLocale": { "en": "Select the *Start (or reset) a scene timer* action.", - "fr-fr": "" + "fr-fr": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*." } } }, @@ -3501,7 +3501,7 @@ "description": { "messageByLocale": { "en": "Type **\"Score\"** (in quotations).", - "fr-fr": "" + "fr-fr": "Entrez **\"Score\"** (entre guillements)." } } }, @@ -3532,7 +3532,7 @@ "description": { "messageByLocale": { "en": "Now let's display the score.", - "fr-fr": "" + "fr-fr": "Maintenant, affichons le score." } } }, @@ -3547,7 +3547,7 @@ "description": { "messageByLocale": { "en": "Let's make the score dynamic.", - "fr-fr": "" + "fr-fr": "Nous allons rendre le score dynamique." } } } @@ -3576,7 +3576,7 @@ "description": { "messageByLocale": { "en": "We will change the text.", - "fr-fr": "" + "fr-fr": "Nous allons changer le contenu du texte." } } }, @@ -3591,7 +3591,7 @@ "description": { "messageByLocale": { "en": "Select “= (set to)”.", - "fr-fr": "" + "fr-fr": "Cliquez sur “= (définir à)”." } } }, @@ -3607,7 +3607,7 @@ "description": { "messageByLocale": { "en": "Copy this line and paste it here: `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`.", - "fr-fr": "" + "fr-fr": "Copier cette ligne et collez-là ici : `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`." } } }, @@ -3623,7 +3623,7 @@ "description": { "messageByLocale": { "en": "We're all set.", - "fr-fr": "" + "fr-fr": "On est tout bon." } }, "placement": "top" @@ -3638,13 +3638,13 @@ "title": { "messageByLocale": { "en": "Now we will display the other players scores.", - "fr-fr": "" + "fr-fr": "Maintenant, nous allons afficher le score des autres joueurs et joueuses." } }, "description": { "messageByLocale": { "en": "In the **event** where $(target) gets deleted, click on “Add action”.", - "fr-fr": "" + "fr-fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -3658,7 +3658,7 @@ "description": { "messageByLocale": { "en": "Search for “**leaderboard**”.", - "fr-fr": "Cherchez “**leaderboard**”" + "fr-fr": "Cherchez “**classement**”." } } }, @@ -3673,7 +3673,7 @@ "description": { "messageByLocale": { "en": "Select the *Display leaderboard* action.", - "fr-fr": "" + "fr-fr": "Cliquez sur l'action *Afficher le classement*." } } }, @@ -3688,7 +3688,7 @@ "description": { "messageByLocale": { "en": "Open the **Leaderboard admin**.", - "fr-fr": "" + "fr-fr": "Ouvrez le panneau de gestion des classements." } } }, @@ -3703,7 +3703,7 @@ "description": { "messageByLocale": { "en": "Create a leaderboard.", - "fr-fr": "" + "fr-fr": "Créez un nouveau classement." } } }, @@ -3718,7 +3718,7 @@ "description": { "messageByLocale": { "en": "Let's change its name.", - "fr-fr": "" + "fr-fr": "Changez son nom." } } }, @@ -3733,7 +3733,7 @@ "description": { "messageByLocale": { "en": "Type “*Score*”.", - "fr-fr": "" + "fr-fr": "Entrez “*Score*”." } } }, @@ -3748,7 +3748,7 @@ "description": { "messageByLocale": { "en": "Save changes when you're done.", - "fr-fr": "" + "fr-fr": "Sauvegardez quand vous avez terminé." } } }, @@ -3763,7 +3763,7 @@ "description": { "messageByLocale": { "en": "Our leaderboard is ready.", - "fr-fr": "" + "fr-fr": "Notre classement est bien configuré, vous pouvez fermer." } } }, @@ -3778,7 +3778,7 @@ "description": { "messageByLocale": { "en": "Select the option *Select the leaderboard from a list*.", - "fr-fr": "" + "fr-fr": "Sélectionnez l'option *Sélectionnez le classement dans une liste*." } }, "placement": "top" @@ -3795,7 +3795,7 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-fr": "" + "fr-fr": "Sélectionnez le classement qui s'appelle “Score”." } } }, @@ -3810,7 +3810,7 @@ "description": { "messageByLocale": { "en": "We'll use the built-in loader.", - "fr-fr": "" + "fr-fr": "Nous allons utiliser l'écran de chargement intégré par défaut." } } }, @@ -3826,7 +3826,7 @@ "description": { "messageByLocale": { "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", - "fr-fr": "" + "fr-fr": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target)." } }, "placement": "top" @@ -3841,7 +3841,7 @@ "description": { "messageByLocale": { "en": "Now we will ask the player to authenticate at game opening.", - "fr-fr": "" + "fr-fr": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu." } } } @@ -3857,7 +3857,7 @@ "description": { "messageByLocale": { "en": "Let's create an **event**!", - "fr-fr": "" + "fr-fr": "Créez un nouvel **évènement**." } } } @@ -3871,7 +3871,7 @@ "description": { "messageByLocale": { "en": "Add a condition.", - "fr-fr": "" + "fr-fr": "Ajoutez une condition." } } }, @@ -3893,7 +3893,7 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-fr": "Cherchez “**Scene**”" + "fr-fr": "Cherchez “**Scène**”." } } }, @@ -3908,7 +3908,7 @@ "description": { "messageByLocale": { "en": "Select the **At the beginning of the scene** condition.", - "fr-fr": "" + "fr-fr": "Cliquez sur la condition *Au lancement de la scène*." } } }, @@ -3938,7 +3938,7 @@ "description": { "messageByLocale": { "en": "Let's choose an **action**.", - "fr-fr": "" + "fr-fr": "Choisissons une **action**." } } } @@ -3952,7 +3952,7 @@ "description": { "messageByLocale": { "en": "Search for “**Authentication**”.", - "fr-fr": "Cherchez “**Authentication**”" + "fr-fr": "Cherchez “**Authentification**”." } } }, @@ -3967,7 +3967,7 @@ "description": { "messageByLocale": { "en": "Select *Display authentication banner*.", - "fr-fr": "" + "fr-fr": "Cliquez sur *Afficher la bannière d'authentification*." } } }, @@ -3982,7 +3982,7 @@ "description": { "messageByLocale": { "en": "Alright, now players will be asked to login.", - "fr-fr": "" + "fr-fr": "Maintenant, les joueurs et les joueurs pourront s'identifier." } }, "placement": "top" @@ -3997,7 +3997,7 @@ "title": { "messageByLocale": { "en": "Now let's create a new **scene** that will be used to display the **leaderboard**.", - "fr-fr": "" + "fr-fr": "Maintenant, nous allons créer une **scène** qui sera utilisée pour afficher le **classement**." } }, "placement": "right" @@ -4012,7 +4012,7 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-fr": "" + "fr-fr": "Cliquez ici." } }, "placement": "right" @@ -4030,7 +4030,7 @@ "description": { "messageByLocale": { "en": "Right click on the new **scene** and change its name to “Leaderboard”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-fr": "" + "fr-fr": "Faites un clic droit sur la nouvelle **scène** et changez son nom pour “**Classement**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." } }, "placement": "right" @@ -4046,7 +4046,7 @@ "description": { "messageByLocale": { "en": "Go to the **events**.", - "fr-fr": "" + "fr-fr": "Ouvrez les **évènements**." } } } @@ -4061,7 +4061,7 @@ "description": { "messageByLocale": { "en": "Let's add an **event** that makes sure the player comes back to the start screen after closing the **leaderboard**.", - "fr-fr": "" + "fr-fr": "Ajoutons un **évènement** pour que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**." } } } @@ -4075,7 +4075,7 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-fr": "" + "fr-fr": "Cliquez ici." } } } @@ -4089,7 +4089,7 @@ "description": { "messageByLocale": { "en": "Search for “**Leaderboard**”.", - "fr-fr": "Cherchez “**Leaderboard**”" + "fr-fr": "Cherchez “**classement**”." } } }, @@ -4104,7 +4104,7 @@ "description": { "messageByLocale": { "en": "Select the *Leaderboard display has loaded* condition.", - "fr-fr": "" + "fr-fr": "Cliquez sur la condition *L'affichage du classement a été chargé*." } } }, @@ -4149,7 +4149,7 @@ "description": { "messageByLocale": { "en": "Let's add the **action** to come back to the start screen.", - "fr-fr": "" + "fr-fr": "Ajoutez une action pour revenir à l'écran d'ouverture." } } } @@ -4163,7 +4163,7 @@ "description": { "messageByLocale": { "en": "Type “*Scene*”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Scène**”." } } }, @@ -4178,7 +4178,7 @@ "description": { "messageByLocale": { "en": "Select “Change the scene”.", - "fr-fr": "" + "fr-fr": "Cliquez sur “**Changer la scène**”." } } }, @@ -4193,7 +4193,7 @@ "description": { "messageByLocale": { "en": "Select “$(startScene)”.", - "fr-fr": "" + "fr-fr": "Sélectionnez “$(startScene)”." } }, "placement": "top" @@ -4210,7 +4210,7 @@ "description": { "messageByLocale": { "en": "Alright, the action is all set.", - "fr-fr": "" + "fr-fr": "L'action est bien configurée." } }, "placement": "top" @@ -4225,7 +4225,7 @@ "description": { "messageByLocale": { "en": "Now let's save the score of the player.", - "fr-fr": "" + "fr-fr": "Maintenant, sauvegardons le score du joueur ou de la joueuse." } } } @@ -4240,7 +4240,7 @@ "description": { "messageByLocale": { "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-fr": "" + "fr-fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -4254,7 +4254,7 @@ "description": { "messageByLocale": { "en": "Search for “leaderboard”.", - "fr-fr": "Cherchez “leaderboard”" + "fr-fr": "Cherchez “**classement**”." } } }, @@ -4269,7 +4269,7 @@ "description": { "messageByLocale": { "en": "Select the **Save player score** action.", - "fr-fr": "" + "fr-fr": "Sélectionnez l'action **Sauver le score du joueur**." } } }, @@ -4284,7 +4284,7 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-fr": "" + "fr-fr": "Sélectionnez le classement qui s'appelle “Score”." } } }, @@ -4298,8 +4298,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the **expression** builder.", - "fr-fr": "" + "en": "Open the **expression** builder.", + "fr-fr": "Ouvrez le constructeur **d'expression**." } } }, @@ -4314,7 +4314,7 @@ "description": { "messageByLocale": { "en": "Search for “*Timer*”.", - "fr-fr": "Cherchez “*Timer*”" + "fr-fr": "Cherchez “*chrono*”." } } }, @@ -4329,7 +4329,7 @@ "description": { "messageByLocale": { "en": "Select **Scene timer value**.", - "fr-fr": "" + "fr-fr": "Cliquez sur **Valeur du chronomètre de scène**." } } }, @@ -4344,7 +4344,7 @@ "description": { "messageByLocale": { "en": "Select timer “Score”.", - "fr-fr": "" + "fr-fr": "Sélectionnez le chronomètre “Score”." } }, "placement": "top" @@ -4360,7 +4360,7 @@ "description": { "messageByLocale": { "en": "This parameter is all set.", - "fr-fr": "" + "fr-fr": "C'est terminé." } }, "placement": "top" @@ -4375,8 +4375,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the **expression** builder.", - "fr-fr": "" + "en": "Open the **expression** builder.", + "fr-fr": "Ouvrez le constructeur **d'expression**." } } }, @@ -4391,7 +4391,7 @@ "description": { "messageByLocale": { "en": "Search for “**Username**”.", - "fr-fr": "Cherchez “**Username**”" + "fr-fr": "Cherchez “**Nom**”." } } }, @@ -4406,7 +4406,7 @@ "description": { "messageByLocale": { "en": "Select **Username**.", - "fr-fr": "" + "fr-fr": "Cliquez sur **Nom d'utilisateur**." } } }, @@ -4421,7 +4421,7 @@ "description": { "messageByLocale": { "en": "The action is ready.", - "fr-fr": "" + "fr-fr": "L'action est prête." } }, "placement": "top" @@ -4436,7 +4436,7 @@ "description": { "messageByLocale": { "en": "Let's change the **scene** to the **leaderboard** one (so that the play scene is closed).\n\nIn the **event** where $(target) gets deleted, click on “Add action”.", - "fr-fr": "" + "fr-fr": "Changeons la **scène** pour afficher celle du **classement** (de telle sorte que la scène de jeu est fermée).\n\nDans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -4450,7 +4450,7 @@ "description": { "messageByLocale": { "en": "Type “**Scene**”.", - "fr-fr": "" + "fr-fr": "Cherchez “**Scène**”." } } }, @@ -4465,7 +4465,7 @@ "description": { "messageByLocale": { "en": "Select “Change the scene”.", - "fr-fr": "" + "fr-fr": "Cliquez sur “**Changer la scène**”." } } }, @@ -4480,7 +4480,7 @@ "description": { "messageByLocale": { "en": "Select “$(leaderboardScene)”.", - "fr-fr": "" + "fr-fr": "Sélectionnez “$(leaderboardScene)”." } }, "placement": "top" @@ -4496,7 +4496,7 @@ "description": { "messageByLocale": { "en": "Alright, the **action** is all set.", - "fr-fr": "" + "fr-fr": "Parfait, l'action est prête." } }, "placement": "top" @@ -4511,7 +4511,7 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-fr": "" + "fr-fr": "Ouvrez le **Gestionnaire de projet**." } }, "placement": "right" @@ -4525,8 +4525,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Right-click on the start **scene** and select **Set as start scene**.", - "fr-fr": "" + "en": "Right-click on $(startScene) and select **Set as start scene**.", + "fr-fr": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**." } }, "placement": "right" @@ -4542,7 +4542,7 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button.", - "fr-fr": "" + "fr-fr": "Lancez un **Aperçu** de votre jeu." } }, "placement": "bottom" From bb24ec902fe83cc5886ba5367611260e8fc38e8a Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:48:53 +0100 Subject: [PATCH 009/208] Add doc --- docs/inAppTutorial/REFERENCE.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index 3020381..adcb4af 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -29,7 +29,8 @@ An in-app tutorial is a JSON with 4 fields: "id": "physics2-joints", "flow": [...], "editorSwitches": {...}, - "endDialog": {...} + "endDialog": {...}, + "availableLocales": [...], } ``` @@ -37,6 +38,10 @@ An in-app tutorial is a JSON with 4 fields: This id is a string that should be unique across all in-app tutorials. +### `availableLocales` + +This is the list of locales for which a translation is available. This can be displayed to the GDevelop user before following the tutorial. + ### `endDialog` This field holds the content for the dialog that will displayed after the user has completed the last step of the [flow](#flow). From bbc610eb994c1ff6f5ef2ea5473ec0b9c52446e4 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:18:16 +0100 Subject: [PATCH 010/208] Fix locales formatting --- docs/inAppTutorial/REFERENCE.md | 2 +- tutorials/in-app/flingGame.json | 588 ++++++++++++++++---------------- 2 files changed, 295 insertions(+), 295 deletions(-) diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index adcb4af..45fc9d1 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -12,7 +12,7 @@ For example, this will be the description of a tooltip: "description": { "messageByLocale": { "en": "Click on the button", - "fr-fr": "Cliquez sur le bouton" + "fr-FR": "Cliquez sur le bouton" } } } diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 926f114..28b369a 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -59,26 +59,26 @@ }, "availableLocales": [ "en", - "fr-fr" + "fr-FR" ], "endDialog": { "content": [ { "messageByLocale": { "en": "# You've finished your Fling Game!", - "fr-fr": "# Votre jeu est terminé !" + "fr-FR": "# Votre jeu est terminé !" } }, { "messageByLocale": { "en": "Share it with your friends and see who gets the highest score!", - "fr-fr": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !" + "fr-FR": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !" } }, { "messageByLocale": { "en": "Ready to make a new game? Click to discover what GDevelop can do!", - "fr-fr": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !" + "fr-FR": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !" } }, { @@ -100,7 +100,7 @@ "description": { "messageByLocale": { "en": "Head over to the **Build section**.", - "fr-fr": "Commençons par aller dans l'onglet **Créer**." + "fr-FR": "Commençons par aller dans l'onglet **Créer**." } }, "placement": "right" @@ -115,7 +115,7 @@ "description": { "messageByLocale": { "en": "Let's create a new **project** for this tutorial!", - "fr-fr": "Créons un nouveau **projet** pour ce tutoriel." + "fr-FR": "Créons un nouveau **projet** pour ce tutoriel." } } } @@ -129,7 +129,7 @@ "description": { "messageByLocale": { "en": "Let's go!", - "fr-fr": "C'est parti !" + "fr-FR": "C'est parti !" } } }, @@ -148,7 +148,7 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-fr": "Ouvrez le **Gestionnaire de projet**." + "fr-FR": "Ouvrez le **Gestionnaire de projet**." } }, "placement": "right" @@ -163,7 +163,7 @@ "description": { "messageByLocale": { "en": "Open the **Game Settings** tab.", - "fr-fr": "Ouvrez les **Paramètres du jeu**." + "fr-FR": "Ouvrez les **Paramètres du jeu**." } } }, @@ -178,7 +178,7 @@ "description": { "messageByLocale": { "en": "Open the game **properties**.", - "fr-fr": "Ouvrez les **Propriétés** du jeu." + "fr-FR": "Ouvrez les **Propriétés** du jeu." } } }, @@ -193,7 +193,7 @@ "description": { "messageByLocale": { "en": "Change the width to **1280** pixels.", - "fr-fr": "Définissez une largeur de **1280** pixels." + "fr-FR": "Définissez une largeur de **1280** pixels." } } }, @@ -208,7 +208,7 @@ "description": { "messageByLocale": { "en": "Change the height to **720** pixels.", - "fr-fr": "Et une hauteur de **720** pixels." + "fr-FR": "Et une hauteur de **720** pixels." } } }, @@ -223,7 +223,7 @@ "description": { "messageByLocale": { "en": "Set this to **no changes to the game size**.", - "fr-fr": "Choisissez l'option **Aucune modification de la taille du jeu**." + "fr-FR": "Choisissez l'option **Aucune modification de la taille du jeu**." } } }, @@ -238,7 +238,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "On a terminé." + "fr-FR": "On a terminé." } } } @@ -254,7 +254,7 @@ "description": { "messageByLocale": { "en": "First, let's find a border for our **scene**.", - "fr-fr": "Commençons par trouver une bordure à notre **scène**." + "fr-FR": "Commençons par trouver une bordure à notre **scène**." } } } @@ -268,7 +268,7 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store", - "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -285,13 +285,13 @@ "title": { "messageByLocale": { "en": "We're looking for a tiled sprite that we can resize easily", - "fr-fr": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner" + "fr-FR": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner" } }, "description": { "messageByLocale": { "en": "Tip: search for “**tiled sprite**”.", - "fr-fr": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”." + "fr-FR": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”." } } }, @@ -315,7 +315,7 @@ "description": { "messageByLocale": { "en": "Add this asset to your project.", - "fr-fr": "Ajoutez cette ressource à votre projet." + "fr-FR": "Ajoutez cette ressource à votre projet." } } }, @@ -334,7 +334,7 @@ "description": { "messageByLocale": { "en": "Let's add the $(border) to our game!", - "fr-fr": "Ajoutons $(border) à notre projet !" + "fr-FR": "Ajoutons $(border) à notre projet !" } } } @@ -348,7 +348,7 @@ "description": { "messageByLocale": { "en": "Drag $(border) from the menu to the canvas.", - "fr-fr": "Faites glisser $(border) du menu au canvas." + "fr-FR": "Faites glisser $(border) du menu au canvas." } }, "placement": "left" @@ -359,7 +359,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -368,7 +368,7 @@ "description": { "messageByLocale": { "en": "Place and resize at least 4 instances of $(border) to create a closed frame around the screen ($(instancesCount:border)/4).", - "fr-fr": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4)." + "fr-FR": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4)." } }, "placement": "top", @@ -388,7 +388,7 @@ "description": { "messageByLocale": { "en": "Now let's find an **object** that we can throw.", - "fr-fr": "Maintenant, trouvons un **objet** que nous allons lancer." + "fr-FR": "Maintenant, trouvons un **objet** que nous allons lancer." } } } @@ -402,7 +402,7 @@ "description": { "messageByLocale": { "en": "Let's choose an object from the **asset store**.", - "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -419,7 +419,7 @@ "description": { "messageByLocale": { "en": "Select a rounded object that you'd like to throw (try **ball**).", - "fr-fr": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**)." + "fr-FR": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**)." } } }, @@ -461,7 +461,7 @@ "description": { "messageByLocale": { "en": "Perfect, let's see how to throw it easily.", - "fr-fr": "Parfait, voyons maintenant comment le lancer." + "fr-FR": "Parfait, voyons maintenant comment le lancer." } } } @@ -475,7 +475,7 @@ "description": { "messageByLocale": { "en": "Add 3 **instances** of the **object** *$(projectile)* inside the frame.", - "fr-fr": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre." + "fr-FR": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre." } } } @@ -491,7 +491,7 @@ "description": { "messageByLocale": { "en": "Now let's find a target to aim.", - "fr-fr": "Maintenant trouvons une cible à atteindre." + "fr-FR": "Maintenant trouvons une cible à atteindre." } } } @@ -505,7 +505,7 @@ "description": { "messageByLocale": { "en": "Let's choose a new **object** from the asset store.", - "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -522,7 +522,7 @@ "description": { "messageByLocale": { "en": "Select an object that you would like to use as a target to throw $(projectile) at.", - "fr-fr": "Cherchez une cible qui vous plaît (essayez **target**)." + "fr-FR": "Cherchez une cible qui vous plaît (essayez **target**)." } } }, @@ -564,7 +564,7 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-fr": "Ajoutez cet objet à votre **scène**." + "fr-FR": "Ajoutez cet objet à votre **scène**." } } } @@ -578,7 +578,7 @@ "description": { "messageByLocale": { "en": "Add $(target) inside the frame.", - "fr-fr": "Ajoutez $(target) dans le cadre." + "fr-FR": "Ajoutez $(target) dans le cadre." } } } @@ -594,7 +594,7 @@ "description": { "messageByLocale": { "en": "Finally let's find something to protect $(target).", - "fr-fr": "Finalement, trouvons quelque chose pour protéger $(target)." + "fr-FR": "Finalement, trouvons quelque chose pour protéger $(target)." } } } @@ -608,7 +608,7 @@ "description": { "messageByLocale": { "en": "Let's choose a new object from the asset store.", - "fr-fr": "Nous allons choisir un objet dans le **Magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **Magasin de ressources**." } }, "placement": "bottom" @@ -625,7 +625,7 @@ "description": { "messageByLocale": { "en": "Select a **block** object you would like to use as an obstacle for your $(projectile).", - "fr-fr": "Cherchez un objet qui servira d'obstacle aux $(projectile)." + "fr-FR": "Cherchez un objet qui servira d'obstacle aux $(projectile)." } } }, @@ -667,7 +667,7 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-fr": "Parfait, ajoutez le à la **scène**." + "fr-FR": "Parfait, ajoutez le à la **scène**." } } } @@ -681,7 +681,7 @@ "description": { "messageByLocale": { "en": "Add multiple $(block)s inside the frame.", - "fr-fr": "Ajoutez plusieurs instances de $(block) dans le cadre." + "fr-FR": "Ajoutez plusieurs instances de $(block) dans le cadre." } } } @@ -695,14 +695,14 @@ "title": { "messageByLocale": { "en": "Now, let's add some physics to our **objects**.", - "fr-fr": "Maintenant, ajoutons un moteur physique à nos **objets**." + "fr-FR": "Maintenant, ajoutons un moteur physique à nos **objets**." } }, "placement": "left", "description": { "messageByLocale": { "en": "Right click on $(border) and select “Edit behaviors”.", - "fr-fr": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”." } } } @@ -716,7 +716,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -733,7 +733,7 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-fr": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement." } } }, @@ -748,7 +748,7 @@ "description": { "messageByLocale": { "en": "Select the **Physics behavior**.", - "fr-fr": "Sélectionnez le comportement **Moteur physique**." + "fr-FR": "Sélectionnez le comportement **Moteur physique**." } } }, @@ -763,7 +763,7 @@ "description": { "messageByLocale": { "en": "Select **static**.", - "fr-fr": "Choisissez l'option **Fixe**." + "fr-FR": "Choisissez l'option **Fixe**." } }, "placement": "top" @@ -779,7 +779,7 @@ "description": { "messageByLocale": { "en": "We'll see later how to use the other parameters. We're good now.", - "fr-fr": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment." + "fr-FR": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment." } } } @@ -794,7 +794,7 @@ "description": { "messageByLocale": { "en": "Now right click on $(projectile) and select “Edit behaviors”.", - "fr-fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." } } } @@ -808,7 +808,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -825,7 +825,7 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-fr": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement." } } }, @@ -840,7 +840,7 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-fr": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique." } } }, @@ -855,7 +855,7 @@ "description": { "messageByLocale": { "en": "Select **Circle**.", - "fr-fr": "Choisissez l'option **Cercle**." + "fr-FR": "Choisissez l'option **Cercle**." } }, "placement": "top" @@ -871,7 +871,7 @@ "description": { "messageByLocale": { "en": "Change the density to 5.", - "fr-fr": "Utilisez une densité de 5." + "fr-FR": "Utilisez une densité de 5." } }, "placement": "top" @@ -887,7 +887,7 @@ "description": { "messageByLocale": { "en": "Change the angular damping to 15.", - "fr-fr": "Utilisez un amortissement angulaire de 15." + "fr-FR": "Utilisez un amortissement angulaire de 15." } }, "placement": "top" @@ -903,7 +903,7 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-fr": "C'est bon." + "fr-FR": "C'est bon." } } } @@ -918,7 +918,7 @@ "description": { "messageByLocale": { "en": "Now right click on $(target) and select “Edit behaviors”.", - "fr-fr": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”." } } } @@ -932,7 +932,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -956,7 +956,7 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-fr": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique." } } }, @@ -971,7 +971,7 @@ "description": { "messageByLocale": { "en": "No need to change anything.", - "fr-fr": "La configuration de base suffit. Continuons." + "fr-FR": "La configuration de base suffit. Continuons." } } } @@ -986,7 +986,7 @@ "description": { "messageByLocale": { "en": "Now right click on $(block) and select “Edit behaviors”.", - "fr-fr": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”." } } } @@ -1000,7 +1000,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -1024,7 +1024,7 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-fr": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique." } } }, @@ -1046,13 +1046,13 @@ "title": { "messageByLocale": { "en": "Now we'll make it possible for the player to drag the $(projectile).", - "fr-fr": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris." + "fr-FR": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris." } }, "description": { "messageByLocale": { "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", - "fr-fr": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**." + "fr-FR": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**." } }, "placement": "right" @@ -1067,7 +1067,7 @@ "description": { "messageByLocale": { "en": "Open the **Extensions** tab.", - "fr-fr": "Ouvrez l'onglet **Extensions**." + "fr-FR": "Ouvrez l'onglet **Extensions**." } } }, @@ -1082,7 +1082,7 @@ "description": { "messageByLocale": { "en": "Open the extension store", - "fr-fr": "Ouvrez le **Magasin d'extension**." + "fr-FR": "Ouvrez le **Magasin d'extension**." } } }, @@ -1097,7 +1097,7 @@ "description": { "messageByLocale": { "en": "Search for the **draggable** extension (for physics objects).", - "fr-fr": "Cherchez l'extension **draggable**." + "fr-FR": "Cherchez l'extension **draggable**." } } }, @@ -1113,7 +1113,7 @@ "description": { "messageByLocale": { "en": "Click on the extension.", - "fr-fr": "Cliquez sur l'extension." + "fr-FR": "Cliquez sur l'extension." } } }, @@ -1128,7 +1128,7 @@ "description": { "messageByLocale": { "en": "Install the extension in your project.", - "fr-fr": "Installez l'extension dans votre projet." + "fr-FR": "Installez l'extension dans votre projet." } } }, @@ -1143,7 +1143,7 @@ "description": { "messageByLocale": { "en": "Close the store.", - "fr-fr": "Fermez le magasin." + "fr-FR": "Fermez le magasin." } } } @@ -1158,7 +1158,7 @@ "description": { "messageByLocale": { "en": "Now right click on $(projectile) and select “Edit behaviors”.", - "fr-fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." } } } @@ -1172,7 +1172,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -1189,7 +1189,7 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-fr": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement." } } }, @@ -1204,7 +1204,7 @@ "description": { "messageByLocale": { "en": "Select the Draggable behavior.", - "fr-fr": "Sélectionnez le comportement Draggable." + "fr-FR": "Sélectionnez le comportement Draggable." } } }, @@ -1219,7 +1219,7 @@ "description": { "messageByLocale": { "en": "That's it!", - "fr-fr": "C'est tout !" + "fr-FR": "C'est tout !" } } } @@ -1233,7 +1233,7 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button to see how you can click and drag your $(projectile) around the scene!", - "fr-fr": "Cliquez sur **Aperçu** pour voitre votre jeu. Cliquez et faites glisser $(projectile) dans la scène!" + "fr-FR": "Cliquez sur **Aperçu** pour voitre votre jeu. Cliquez et faites glisser $(projectile) dans la scène!" } }, "placement": "bottom" @@ -1246,25 +1246,25 @@ { "messageByLocale": { "en": "## Congratulations!", - "fr-fr": "## Félicitations !" + "fr-FR": "## Félicitations !" } }, { "messageByLocale": { "en": "You have finished the first part of your Fling Game.", - "fr-fr": "Vous avez terminé la première partie de votre jeu." + "fr-FR": "Vous avez terminé la première partie de votre jeu." } }, { "messageByLocale": { "en": "You've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", - "fr-fr": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" + "fr-FR": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" } }, { "messageByLocale": { "en": "Now you can take a break from the tutorial, or continue to the next chapter.", - "fr-fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre." + "fr-FR": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre." } } ] @@ -1281,7 +1281,7 @@ "description": { "messageByLocale": { "en": "Let's find a background for our game.", - "fr-fr": "Cherchons un arrière-plan pour notre jeu." + "fr-FR": "Cherchons un arrière-plan pour notre jeu." } } } @@ -1295,7 +1295,7 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store.", - "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -1312,7 +1312,7 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-fr": "Cherchez “**background**”." + "fr-FR": "Cherchez “**background**”." } } }, @@ -1354,7 +1354,7 @@ "description": { "messageByLocale": { "en": "Perfect, let's use it in our **scene**.", - "fr-fr": "Parfait, ajoutez le à la **scène**." + "fr-FR": "Parfait, ajoutez le à la **scène**." } } } @@ -1368,7 +1368,7 @@ "description": { "messageByLocale": { "en": "Drag $(background) from the menu to the canvas.", - "fr-fr": "Faites glisser $(background) du menu au canvas." + "fr-FR": "Faites glisser $(background) du menu au canvas." } }, "placement": "left" @@ -1379,7 +1379,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -1388,7 +1388,7 @@ "description": { "messageByLocale": { "en": "Drag to expand the size of $(background) until it stretches over your entire game area.", - "fr-fr": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu." + "fr-FR": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu." } }, "image": { @@ -1406,7 +1406,7 @@ "description": { "messageByLocale": { "en": "Select the instance of $(background) on the scene.", - "fr-fr": "Sélectionnez l'instance de $(background) sur la scène." + "fr-FR": "Sélectionnez l'instance de $(background) sur la scène." } } } @@ -1420,7 +1420,7 @@ "description": { "messageByLocale": { "en": "Change the z order of $(background) to **-1** so that it is behind all other **instances** on the **scene**.", - "fr-fr": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène." + "fr-FR": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène." } }, "placement": "right" @@ -1437,7 +1437,7 @@ "description": { "messageByLocale": { "en": "Let's add some protection for $(target).", - "fr-fr": "Ajoutons un objet pour protéger $(target)." + "fr-FR": "Ajoutons un objet pour protéger $(target)." } } } @@ -1451,7 +1451,7 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store.", - "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -1468,7 +1468,7 @@ "description": { "messageByLocale": { "en": "Search for **block**.", - "fr-fr": "Cherchez “**block**”." + "fr-FR": "Cherchez “**block**”." } } }, @@ -1510,7 +1510,7 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-fr": "Parfait, ajoutez le à la **scène**." + "fr-FR": "Parfait, ajoutez le à la **scène**." } } } @@ -1525,13 +1525,13 @@ "title": { "messageByLocale": { "en": "Let's make them static so that they act as a wall.", - "fr-fr": "Faisons en sorte qu'il reste fixe comme un mur." + "fr-FR": "Faisons en sorte qu'il reste fixe comme un mur." } }, "description": { "messageByLocale": { "en": "Right click on $(obstacle) and select “Edit behaviors”.", - "fr-fr": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”." } } } @@ -1545,7 +1545,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." } }, "placement": "bottom" @@ -1562,7 +1562,7 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-fr": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement." } } }, @@ -1577,7 +1577,7 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-fr": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique." } } }, @@ -1592,7 +1592,7 @@ "description": { "messageByLocale": { "en": "Select **static**.", - "fr-fr": "Choisissez l'option **Fixe**." + "fr-FR": "Choisissez l'option **Fixe**." } }, "placement": "top" @@ -1608,7 +1608,7 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-fr": "C'est bon." + "fr-FR": "C'est bon." } } } @@ -1622,7 +1622,7 @@ "description": { "messageByLocale": { "en": "Add a few $(obstacle) to the **scene** to protect $(target).", - "fr-fr": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target)." + "fr-FR": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target)." } } } @@ -1638,7 +1638,7 @@ "description": { "messageByLocale": { "en": "Now let's create a winning message!", - "fr-fr": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible." + "fr-FR": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible." } } } @@ -1652,7 +1652,7 @@ "description": { "messageByLocale": { "en": "This time, we'll create a text from scratch.", - "fr-fr": "Cette fois-ci, nous allons créer un texte de zéro." + "fr-FR": "Cette fois-ci, nous allons créer un texte de zéro." } }, "placement": "bottom" @@ -1668,7 +1668,7 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-fr": "Sélectionnez l'objet **Texte**" + "fr-FR": "Sélectionnez l'objet **Texte**" } }, "placement": "bottom" @@ -1684,7 +1684,7 @@ "description": { "messageByLocale": { "en": "Change the object name to “**YouWin**”.", - "fr-fr": "Utilisez “**Victoire**” comme nom d'objet." + "fr-FR": "Utilisez “**Victoire**” comme nom d'objet." } }, "placement": "bottom" @@ -1700,7 +1700,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-fr": "Utilisez une taille de **200**." + "fr-FR": "Utilisez une taille de **200**." } }, "placement": "bottom" @@ -1716,7 +1716,7 @@ "description": { "messageByLocale": { "en": "Change the text to “**You Win!**”", - "fr-fr": "Cet objet texte devra afficher “**Vous avez gagné !**”" + "fr-FR": "Cet objet texte devra afficher “**Vous avez gagné !**”" } }, "placement": "bottom" @@ -1732,7 +1732,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } } }, @@ -1749,7 +1749,7 @@ "description": { "messageByLocale": { "en": "Drag $(youWinText) into the **scene**, and center it as well as possible.", - "fr-fr": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène." + "fr-FR": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène." } }, "placement": "left" @@ -1764,7 +1764,7 @@ "description": { "messageByLocale": { "en": "Open the **Layers** panel.", - "fr-fr": "Ouvrez le panneau des **calques*." + "fr-FR": "Ouvrez le panneau des **calques*." } }, "placement": "bottom" @@ -1780,7 +1780,7 @@ "description": { "messageByLocale": { "en": "Add a new layer.", - "fr-fr": "Créez un nouveau calque." + "fr-FR": "Créez un nouveau calque." } }, "placement": "top" @@ -1795,7 +1795,7 @@ "description": { "messageByLocale": { "en": "Change the name to **WinLayer**.", - "fr-fr": "Utlisez le nom **CalqueVictoire**." + "fr-FR": "Utlisez le nom **CalqueVictoire**." } }, "placement": "top" @@ -1810,7 +1810,7 @@ "description": { "messageByLocale": { "en": "Hide the **layer**.", - "fr-fr": "Cachez le **calque**." + "fr-FR": "Cachez le **calque**." } }, "placement": "top" @@ -1821,7 +1821,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -1829,7 +1829,7 @@ "description": { "messageByLocale": { "en": "Now select the $(youWinText) **instance** on the **scene** and change its **layer** using the **properties panel**.\n\nIt should have disappeared!", - "fr-fr": "Sélectionnez **l'instance** de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché." + "fr-FR": "Sélectionnez **l'instance** de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché." } }, "standalone": true @@ -1844,7 +1844,7 @@ "description": { "messageByLocale": { "en": "We are now going to add some logic to our game.", - "fr-fr": "Nous allons maintenant ajouter de la logique à notre jeu." + "fr-FR": "Nous allons maintenant ajouter de la logique à notre jeu." } } } @@ -1859,7 +1859,7 @@ "title": { "messageByLocale": { "en": "Let's add our first **Event**!", - "fr-fr": "Créons notre premier **évènement** !" + "fr-FR": "Créons notre premier **évènement** !" } } } @@ -1873,7 +1873,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "Créez une **condition**." + "fr-FR": "Créez une **condition**." } } } @@ -1887,7 +1887,7 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-fr": "Cliquez sur $(projectile)." + "fr-FR": "Cliquez sur $(projectile)." } } }, @@ -1902,7 +1902,7 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-fr": "Cliquez sur la condition collision." + "fr-FR": "Cliquez sur la condition collision." } } }, @@ -1917,7 +1917,7 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-fr": "Cliquez sur $(target)." + "fr-FR": "Cliquez sur $(target)." } }, "placement": "top" @@ -1933,7 +1933,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "La condition est maintenant configurée." + "fr-FR": "La condition est maintenant configurée." } }, "placement": "top" @@ -1948,7 +1948,7 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-fr": "Créez une **action** maintenant." + "fr-FR": "Créez une **action** maintenant." } } } @@ -1962,7 +1962,7 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-fr": "Cliquez sur $(target)." + "fr-FR": "Cliquez sur $(target)." } } }, @@ -1977,7 +1977,7 @@ "description": { "messageByLocale": { "en": "We will make $(target) disappear on collision.", - "fr-fr": "Nous allons faire disparaître $(target) au moment de la collision." + "fr-FR": "Nous allons faire disparaître $(target) au moment de la collision." } } }, @@ -1992,7 +1992,7 @@ "description": { "messageByLocale": { "en": "Alright, $(target) will now disappear when $(projectile) hits it.", - "fr-fr": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra." + "fr-FR": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra." } }, "placement": "top" @@ -2007,7 +2007,7 @@ "description": { "messageByLocale": { "en": "Let's add another **action** that will be executed for the same **condition**.", - "fr-fr": "Créons une autre **action** qui sera exécutée pour la même **condition**." + "fr-FR": "Créons une autre **action** qui sera exécutée pour la même **condition**." } } } @@ -2021,7 +2021,7 @@ "description": { "messageByLocale": { "en": "Search for “layer”.", - "fr-fr": "Cherchez “calque”." + "fr-FR": "Cherchez “calque”." } } }, @@ -2036,7 +2036,7 @@ "description": { "messageByLocale": { "en": "Select the **Show a layer** action.", - "fr-fr": "Cliquez sur l'action **Afficher un calque**." + "fr-FR": "Cliquez sur l'action **Afficher un calque**." } } }, @@ -2051,7 +2051,7 @@ "description": { "messageByLocale": { "en": "Select the **layer** you created.", - "fr-fr": "Sélectionnez le **calque** que vous avez créé." + "fr-FR": "Sélectionnez le **calque** que vous avez créé." } }, "placement": "top" @@ -2067,7 +2067,7 @@ "description": { "messageByLocale": { "en": "Alright, now the title should appear when the player hits $(target) with $(projectile).", - "fr-fr": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile)." + "fr-FR": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile)." } }, "placement": "top" @@ -2082,7 +2082,7 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to create some constraints for the player.", - "fr-fr": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse." + "fr-FR": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse." } } } @@ -2098,7 +2098,7 @@ "description": { "messageByLocale": { "en": "We'll define an area where the player can grab $(projectile). Outside of this area, the $(projectile)s will be free.", - "fr-fr": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre." + "fr-FR": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre." } } } @@ -2112,7 +2112,7 @@ "description": { "messageByLocale": { "en": "Let's choose an object from the asset store", - "fr-fr": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." } }, "placement": "bottom" @@ -2129,7 +2129,7 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-fr": "Cherchez “**background**”." + "fr-FR": "Cherchez “**background**”." } } }, @@ -2171,7 +2171,7 @@ "description": { "messageByLocale": { "en": "Let's use it now!", - "fr-fr": "Mettons la zone en place." + "fr-FR": "Mettons la zone en place." } } } @@ -2185,7 +2185,7 @@ "description": { "messageByLocale": { "en": "Drag $(grabArea) from the menu to the canvas.", - "fr-fr": "Faites glisser $(grabArea) du menu à au canvas." + "fr-FR": "Faites glisser $(grabArea) du menu à au canvas." } }, "placement": "left" @@ -2196,7 +2196,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -2205,7 +2205,7 @@ "description": { "messageByLocale": { "en": "Drag and resize $(grabArea) until it covers the lower left side of the game screen.", - "fr-fr": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu." + "fr-FR": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu." } }, "image": { @@ -2222,7 +2222,7 @@ "description": { "messageByLocale": { "en": "Make sure that $(grabArea) is selected and change this value to **0**.", - "fr-fr": "Sélectionnez l'instance de $(grabArea) et définissez son ordre sur l'axe z à **0**." + "fr-FR": "Sélectionnez l'instance de $(grabArea) et définissez son ordre sur l'axe z à **0**." } }, "placement": "right" @@ -2237,7 +2237,7 @@ "description": { "messageByLocale": { "en": "Let's deactivate the draggable **behavior** of $(projectile) when outside of the $(grabArea).", - "fr-fr": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea)." + "fr-FR": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea)." } } } @@ -2253,7 +2253,7 @@ "description": { "messageByLocale": { "en": "Let's create a new event!", - "fr-fr": "Créez un nouvel évènement." + "fr-FR": "Créez un nouvel évènement." } } } @@ -2267,7 +2267,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "Ajoutez une **condition**." + "fr-FR": "Ajoutez une **condition**." } } } @@ -2281,7 +2281,7 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-fr": "Cliquez sur $(projectile)." + "fr-FR": "Cliquez sur $(projectile)." } } }, @@ -2296,7 +2296,7 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-fr": "Cliquez sur la condition collision." + "fr-FR": "Cliquez sur la condition collision." } } }, @@ -2311,7 +2311,7 @@ "description": { "messageByLocale": { "en": "Select $(grabArea).", - "fr-fr": "Cliquez sur $(grabArea)." + "fr-FR": "Cliquez sur $(grabArea)." } }, "placement": "top" @@ -2327,7 +2327,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "La **condition** est maintenant sécurisée." + "fr-FR": "La **condition** est maintenant sécurisée." } }, "placement": "top" @@ -2342,7 +2342,7 @@ "description": { "messageByLocale": { "en": "Right click on this newly created **condition** and select “Invert condition”.", - "fr-fr": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”." + "fr-FR": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”." } }, "placement": "right" @@ -2357,7 +2357,7 @@ "description": { "messageByLocale": { "en": "Add an action.", - "fr-fr": "Ajoutez une action." + "fr-FR": "Ajoutez une action." } } } @@ -2371,7 +2371,7 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-fr": "Cliquez sur $(projectile)." + "fr-FR": "Cliquez sur $(projectile)." } } }, @@ -2386,7 +2386,7 @@ "description": { "messageByLocale": { "en": "Select the **action** that releases the $(projectile) from the player drag.", - "fr-fr": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse." + "fr-FR": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse." } } }, @@ -2401,7 +2401,7 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-fr": "C'est bon." + "fr-FR": "C'est bon." } }, "placement": "top" @@ -2416,7 +2416,7 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to place the $(projectile)s correctly.", - "fr-fr": "Revenons à la **scène** pour placer les $(projectile)s correctement." + "fr-FR": "Revenons à la **scène** pour placer les $(projectile)s correctement." } } } @@ -2427,7 +2427,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -2437,13 +2437,13 @@ "title": { "messageByLocale": { "en": "Rearrange the $(projectile)s.", - "fr-fr": "Repositionnez les $(projectile)s." + "fr-FR": "Repositionnez les $(projectile)s." } }, "description": { "messageByLocale": { "en": "Drag all **instances** of $(projectile) within the boundaries of $(background).", - "fr-fr": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background)." + "fr-FR": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background)." } } } @@ -2453,7 +2453,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -2463,13 +2463,13 @@ "title": { "messageByLocale": { "en": "Set up $(target) protection.", - "fr-fr": "Créez une protection pour $(target)." + "fr-FR": "Créez une protection pour $(target)." } }, "description": { "messageByLocale": { "en": "Arrange both $(block) and $(obstacle) in a way to protect $(target).", - "fr-fr": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target)." + "fr-FR": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target)." } } } @@ -2483,7 +2483,7 @@ "description": { "messageByLocale": { "en": "**Preview** the game and make sure it's winnable.", - "fr-fr": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target)." + "fr-FR": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target)." } }, "placement": "bottom" @@ -2498,7 +2498,7 @@ "description": { "messageByLocale": { "en": "Once you're ready, we'll generate a link to share your game.", - "fr-fr": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu." + "fr-FR": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu." } }, "placement": "bottom" @@ -2513,7 +2513,7 @@ "description": { "messageByLocale": { "en": "First, you need to create an account.", - "fr-fr": "Tout d'abord, vous devez vous créer un compte." + "fr-FR": "Tout d'abord, vous devez vous créer un compte." } }, "placement": "bottom" @@ -2543,7 +2543,7 @@ "description": { "messageByLocale": { "en": "Fill in the form and then click here.", - "fr-fr": "Remplissez le formulaire et cliquez ici." + "fr-FR": "Remplissez le formulaire et cliquez ici." } }, "placement": "bottom" @@ -2560,7 +2560,7 @@ "description": { "messageByLocale": { "en": "After filling your info, click here.", - "fr-fr": "Après avoir rempli le formulaire, cliquez ici." + "fr-FR": "Après avoir rempli le formulaire, cliquez ici." } }, "placement": "bottom" @@ -2577,7 +2577,7 @@ "description": { "messageByLocale": { "en": "Click here to **publish** your game.", - "fr-fr": "Cliquez ici pour **publier** votre jeu." + "fr-FR": "Cliquez ici pour **publier** votre jeu." } }, "placement": "bottom" @@ -2599,7 +2599,7 @@ "description": { "messageByLocale": { "en": "Click here to open your game in your browser. Remember to share the link so that others can play your game!\n\nOnce you're done, close this dialog.", - "fr-fr": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre." + "fr-FR": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre." } }, "placement": "top" @@ -2613,25 +2613,25 @@ { "messageByLocale": { "en": "## Congratulations!", - "fr-fr": "## Félicitations !" + "fr-FR": "## Félicitations !" } }, { "messageByLocale": { "en": "You have finished the second part of your Fling Game.", - "fr-fr": "Vous avez terminé la seconde partie de votre jeu." + "fr-FR": "Vous avez terminé la seconde partie de votre jeu." } }, { "messageByLocale": { "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", - "fr-fr": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" + "fr-FR": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { "messageByLocale": { "en": "Now you can take a break from the tutorial, or add a leaderboard on the next chapter.", - "fr-fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score." + "fr-FR": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score." } } ] @@ -2646,7 +2646,7 @@ "description": { "messageByLocale": { "en": "Right click on your $(background) and click “set as **global object**”.", - "fr-fr": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”." + "fr-FR": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”." } }, "placement": "left" @@ -2661,7 +2661,7 @@ "title": { "messageByLocale": { "en": "Now let's create a new **scene** for our start screen.", - "fr-fr": "Créons une scène qui servira d'écran d'ouverture du jeu." + "fr-FR": "Créons une scène qui servira d'écran d'ouverture du jeu." } }, "placement": "right" @@ -2676,7 +2676,7 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-fr": "Cliquez ici." + "fr-FR": "Cliquez ici." } }, "placement": "right" @@ -2694,7 +2694,7 @@ "description": { "messageByLocale": { "en": "Right click on the new scene and change its name to “**StartScreen**”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-fr": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." + "fr-FR": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." } }, "placement": "right" @@ -2710,7 +2710,7 @@ "description": { "messageByLocale": { "en": "Drag $(background) into the scene.", - "fr-fr": "Faites glisser $(background) du menu au canvas." + "fr-FR": "Faites glisser $(background) du menu au canvas." } }, "placement": "left" @@ -2721,7 +2721,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-fr": "J'ai terminé" + "fr-FR": "J'ai terminé" } } }, @@ -2730,7 +2730,7 @@ "description": { "messageByLocale": { "en": "Drag to expand the size $(background) until it stretches over your entire game area.", - "fr-fr": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu." + "fr-FR": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu." } }, "image": { @@ -2749,7 +2749,7 @@ "description": { "messageByLocale": { "en": "Now let's create a title!", - "fr-fr": "Maintenant, créons un titre!" + "fr-FR": "Maintenant, créons un titre!" } } } @@ -2763,7 +2763,7 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-fr": "Nous allons créer un objet texte de zéro." + "fr-FR": "Nous allons créer un objet texte de zéro." } }, "placement": "bottom" @@ -2779,7 +2779,7 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-fr": "Sélectionnez l'objet **Texte**" + "fr-FR": "Sélectionnez l'objet **Texte**" } }, "placement": "bottom" @@ -2795,7 +2795,7 @@ "description": { "messageByLocale": { "en": "Change the object name to “Title”.", - "fr-fr": "Changez le nom de l'objet pour “Titre”." + "fr-FR": "Changez le nom de l'objet pour “Titre”." } }, "placement": "bottom" @@ -2811,7 +2811,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-fr": "Utilisez une taille de **200**." + "fr-FR": "Utilisez une taille de **200**." } }, "placement": "bottom" @@ -2827,7 +2827,7 @@ "description": { "messageByLocale": { "en": "Change the initial text to display whatever you want the title of your game to be.", - "fr-fr": "Entrez le nom que vous avez choisi pour votre jeu." + "fr-FR": "Entrez le nom que vous avez choisi pour votre jeu." } }, "placement": "bottom" @@ -2843,7 +2843,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } } }, @@ -2860,7 +2860,7 @@ "description": { "messageByLocale": { "en": "Drag $(title) into the **scene** where you'd like your title to be.", - "fr-fr": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu.." + "fr-FR": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu.." } }, "placement": "left" @@ -2875,7 +2875,7 @@ "description": { "messageByLocale": { "en": "Right-click on $(title) and select “Duplicate”.", - "fr-fr": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”." + "fr-FR": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”." } }, "placement": "left" @@ -2893,7 +2893,7 @@ "description": { "messageByLocale": { "en": "Double click on $(startText).", - "fr-fr": "Double-cliquez sur $(startText)." + "fr-FR": "Double-cliquez sur $(startText)." } }, "placement": "left" @@ -2908,7 +2908,7 @@ "description": { "messageByLocale": { "en": "Change the **object** name to “**Start**”.", - "fr-fr": "Changez le nom de **l'objet** pour “**Jouer**”." + "fr-FR": "Changez le nom de **l'objet** pour “**Jouer**”." } }, "placement": "bottom" @@ -2924,7 +2924,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-fr": "Utilisez une taille de **50**." + "fr-FR": "Utilisez une taille de **50**." } }, "placement": "bottom" @@ -2940,7 +2940,7 @@ "description": { "messageByLocale": { "en": "Change the initial text to “Start Game”.", - "fr-fr": "Définissez le texte de l'objet à “Jouer”." + "fr-FR": "Définissez le texte de l'objet à “Jouer”." } }, "placement": "bottom" @@ -2956,7 +2956,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } } }, @@ -2973,7 +2973,7 @@ "description": { "messageByLocale": { "en": "Drag $(startText) into the **scene** where you'd like the start button to be.", - "fr-fr": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez." + "fr-FR": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez." } }, "placement": "left" @@ -2988,7 +2988,7 @@ "description": { "messageByLocale": { "en": "Now let's interact with those titles.", - "fr-fr": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte." + "fr-FR": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte." } } } @@ -3003,7 +3003,7 @@ "description": { "messageByLocale": { "en": "Let's create a new **event**.", - "fr-fr": "Créez un nouvel **évènement**." + "fr-FR": "Créez un nouvel **évènement**." } } } @@ -3017,7 +3017,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "Ajoutez une **condition**." + "fr-FR": "Ajoutez une **condition**." } } } @@ -3031,7 +3031,7 @@ "description": { "messageByLocale": { "en": "Select $(startText).", - "fr-fr": "Cliquez sur $(startText)." + "fr-FR": "Cliquez sur $(startText)." } } }, @@ -3046,7 +3046,7 @@ "description": { "messageByLocale": { "en": "Select the cursor condition.", - "fr-fr": "Cliquez sur cette condition de position du curseur." + "fr-FR": "Cliquez sur cette condition de position du curseur." } } }, @@ -3061,7 +3061,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "Rien de plus à configurer." + "fr-FR": "Rien de plus à configurer." } }, "placement": "top" @@ -3076,7 +3076,7 @@ "description": { "messageByLocale": { "en": "Add another **condition**.", - "fr-fr": "Ajoutez une autre **condition**." + "fr-FR": "Ajoutez une autre **condition**." } } } @@ -3090,7 +3090,7 @@ "description": { "messageByLocale": { "en": "Type “**Mouse**”.", - "fr-fr": "Cherchez “**Souris**”" + "fr-FR": "Cherchez “**Souris**”" } } }, @@ -3105,7 +3105,7 @@ "description": { "messageByLocale": { "en": "Select “Mouse button released”.", - "fr-fr": "Cliquez sur “Bouton de la souris relâché”." + "fr-FR": "Cliquez sur “Bouton de la souris relâché”." } } }, @@ -3120,7 +3120,7 @@ "description": { "messageByLocale": { "en": "Select “left (primary)”.", - "fr-fr": "Sélectionnez “Gauche (principal)”." + "fr-FR": "Sélectionnez “Gauche (principal)”." } }, "placement": "top" @@ -3136,7 +3136,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-fr": "C'est bon pour cette condition." + "fr-FR": "C'est bon pour cette condition." } }, "placement": "top" @@ -3151,7 +3151,7 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-fr": "Ajoutons une **action** maintenant." + "fr-FR": "Ajoutons une **action** maintenant." } } } @@ -3165,7 +3165,7 @@ "description": { "messageByLocale": { "en": "Type “**Scene**”.", - "fr-fr": "Cherchez “**scène**”." + "fr-FR": "Cherchez “**scène**”." } } }, @@ -3180,7 +3180,7 @@ "description": { "messageByLocale": { "en": "Select “**Change the scene**”.", - "fr-fr": "Cliquez sur “**Changer la scène**”." + "fr-FR": "Cliquez sur “**Changer la scène**”." } } }, @@ -3195,7 +3195,7 @@ "description": { "messageByLocale": { "en": "Select “$(playScene)”.", - "fr-fr": "Sélectionnez “$(playScene)”." + "fr-FR": "Sélectionnez “$(playScene)”." } }, "placement": "top" @@ -3211,7 +3211,7 @@ "description": { "messageByLocale": { "en": "Alright, the **action** is all set.", - "fr-fr": "L'action est bien configurée." + "fr-FR": "L'action est bien configurée." } }, "placement": "top" @@ -3226,7 +3226,7 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to add a score.", - "fr-fr": "Retournons à la **scène** pour afficher le score." + "fr-FR": "Retournons à la **scène** pour afficher le score." } } } @@ -3242,7 +3242,7 @@ "description": { "messageByLocale": { "en": "Let's create a text that will display the player score.", - "fr-fr": "Créez un object texte qui affichera le score du joueur ou de la joueuse." + "fr-FR": "Créez un object texte qui affichera le score du joueur ou de la joueuse." } } } @@ -3256,7 +3256,7 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-fr": "Nous allons créer un objet texte de zéro." + "fr-FR": "Nous allons créer un objet texte de zéro." } }, "placement": "bottom" @@ -3272,7 +3272,7 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-fr": "Sélectionnez l'objet **Texte**" + "fr-FR": "Sélectionnez l'objet **Texte**" } }, "placement": "bottom" @@ -3288,7 +3288,7 @@ "description": { "messageByLocale": { "en": "Change the object name to “**Score**”.", - "fr-fr": "Changez le nom de l'objet pour “**Score**”." + "fr-FR": "Changez le nom de l'objet pour “**Score**”." } }, "placement": "bottom" @@ -3304,7 +3304,7 @@ "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-fr": "Utilisez une taille de **50**." + "fr-FR": "Utilisez une taille de **50**." } }, "placement": "bottom" @@ -3320,7 +3320,7 @@ "description": { "messageByLocale": { "en": "Change the initial text to display “Time: 0”.", - "fr-fr": "Utilisez comme texte initial “Temps: 0”." + "fr-FR": "Utilisez comme texte initial “Temps: 0”." } }, "placement": "bottom" @@ -3336,7 +3336,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } } }, @@ -3353,7 +3353,7 @@ "description": { "messageByLocale": { "en": "Drag $(scoreText) into the top left corner of the screen.", - "fr-fr": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu." + "fr-FR": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu." } }, "placement": "left" @@ -3368,7 +3368,7 @@ "description": { "messageByLocale": { "en": "Let's change the score dynamically.", - "fr-fr": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé." + "fr-FR": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé." } } } @@ -3383,7 +3383,7 @@ "description": { "messageByLocale": { "en": "We will create a timer that will start when the **scene** starts.", - "fr-fr": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre." + "fr-FR": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre." } } }, @@ -3398,7 +3398,7 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-fr": "Ajoutez une **condition**." + "fr-FR": "Ajoutez une **condition**." } } } @@ -3412,7 +3412,7 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-fr": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”." } } }, @@ -3427,7 +3427,7 @@ "description": { "messageByLocale": { "en": "Select the *At the beginning of the scene** condition.*", - "fr-fr": "Cliquez sur la condition *Au lancement de la scène*." + "fr-FR": "Cliquez sur la condition *Au lancement de la scène*." } } }, @@ -3442,7 +3442,7 @@ "description": { "messageByLocale": { "en": "Let's create the timer now.", - "fr-fr": "Nous allons maintenant créer le minuteur." + "fr-FR": "Nous allons maintenant créer le minuteur." } }, "placement": "top" @@ -3457,7 +3457,7 @@ "description": { "messageByLocale": { "en": "Create an **action**.", - "fr-fr": "Créez une **action**." + "fr-FR": "Créez une **action**." } } } @@ -3471,7 +3471,7 @@ "description": { "messageByLocale": { "en": "Search for “Scene timer”.", - "fr-fr": "Cherchez “chrono”." + "fr-FR": "Cherchez “chrono”." } } }, @@ -3486,7 +3486,7 @@ "description": { "messageByLocale": { "en": "Select the *Start (or reset) a scene timer* action.", - "fr-fr": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*." + "fr-FR": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*." } } }, @@ -3501,7 +3501,7 @@ "description": { "messageByLocale": { "en": "Type **\"Score\"** (in quotations).", - "fr-fr": "Entrez **\"Score\"** (entre guillements)." + "fr-FR": "Entrez **\"Score\"** (entre guillements)." } } }, @@ -3517,7 +3517,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } }, "placement": "top" @@ -3532,7 +3532,7 @@ "description": { "messageByLocale": { "en": "Now let's display the score.", - "fr-fr": "Maintenant, affichons le score." + "fr-FR": "Maintenant, affichons le score." } } }, @@ -3547,7 +3547,7 @@ "description": { "messageByLocale": { "en": "Let's make the score dynamic.", - "fr-fr": "Nous allons rendre le score dynamique." + "fr-FR": "Nous allons rendre le score dynamique." } } } @@ -3561,7 +3561,7 @@ "description": { "messageByLocale": { "en": "Select $(scoreText).", - "fr-fr": "Cliquez sur $(scoreText)." + "fr-FR": "Cliquez sur $(scoreText)." } } }, @@ -3576,7 +3576,7 @@ "description": { "messageByLocale": { "en": "We will change the text.", - "fr-fr": "Nous allons changer le contenu du texte." + "fr-FR": "Nous allons changer le contenu du texte." } } }, @@ -3591,7 +3591,7 @@ "description": { "messageByLocale": { "en": "Select “= (set to)”.", - "fr-fr": "Cliquez sur “= (définir à)”." + "fr-FR": "Cliquez sur “= (définir à)”." } } }, @@ -3607,7 +3607,7 @@ "description": { "messageByLocale": { "en": "Copy this line and paste it here: `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`.", - "fr-fr": "Copier cette ligne et collez-là ici : `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`." + "fr-FR": "Copier cette ligne et collez-là ici : `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`." } } }, @@ -3623,7 +3623,7 @@ "description": { "messageByLocale": { "en": "We're all set.", - "fr-fr": "On est tout bon." + "fr-FR": "On est tout bon." } }, "placement": "top" @@ -3638,13 +3638,13 @@ "title": { "messageByLocale": { "en": "Now we will display the other players scores.", - "fr-fr": "Maintenant, nous allons afficher le score des autres joueurs et joueuses." + "fr-FR": "Maintenant, nous allons afficher le score des autres joueurs et joueuses." } }, "description": { "messageByLocale": { "en": "In the **event** where $(target) gets deleted, click on “Add action”.", - "fr-fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -3658,7 +3658,7 @@ "description": { "messageByLocale": { "en": "Search for “**leaderboard**”.", - "fr-fr": "Cherchez “**classement**”." + "fr-FR": "Cherchez “**classement**”." } } }, @@ -3673,7 +3673,7 @@ "description": { "messageByLocale": { "en": "Select the *Display leaderboard* action.", - "fr-fr": "Cliquez sur l'action *Afficher le classement*." + "fr-FR": "Cliquez sur l'action *Afficher le classement*." } } }, @@ -3688,7 +3688,7 @@ "description": { "messageByLocale": { "en": "Open the **Leaderboard admin**.", - "fr-fr": "Ouvrez le panneau de gestion des classements." + "fr-FR": "Ouvrez le panneau de gestion des classements." } } }, @@ -3703,7 +3703,7 @@ "description": { "messageByLocale": { "en": "Create a leaderboard.", - "fr-fr": "Créez un nouveau classement." + "fr-FR": "Créez un nouveau classement." } } }, @@ -3718,7 +3718,7 @@ "description": { "messageByLocale": { "en": "Let's change its name.", - "fr-fr": "Changez son nom." + "fr-FR": "Changez son nom." } } }, @@ -3733,7 +3733,7 @@ "description": { "messageByLocale": { "en": "Type “*Score*”.", - "fr-fr": "Entrez “*Score*”." + "fr-FR": "Entrez “*Score*”." } } }, @@ -3748,7 +3748,7 @@ "description": { "messageByLocale": { "en": "Save changes when you're done.", - "fr-fr": "Sauvegardez quand vous avez terminé." + "fr-FR": "Sauvegardez quand vous avez terminé." } } }, @@ -3763,7 +3763,7 @@ "description": { "messageByLocale": { "en": "Our leaderboard is ready.", - "fr-fr": "Notre classement est bien configuré, vous pouvez fermer." + "fr-FR": "Notre classement est bien configuré, vous pouvez fermer." } } }, @@ -3778,7 +3778,7 @@ "description": { "messageByLocale": { "en": "Select the option *Select the leaderboard from a list*.", - "fr-fr": "Sélectionnez l'option *Sélectionnez le classement dans une liste*." + "fr-FR": "Sélectionnez l'option *Sélectionnez le classement dans une liste*." } }, "placement": "top" @@ -3795,7 +3795,7 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-fr": "Sélectionnez le classement qui s'appelle “Score”." + "fr-FR": "Sélectionnez le classement qui s'appelle “Score”." } } }, @@ -3810,7 +3810,7 @@ "description": { "messageByLocale": { "en": "We'll use the built-in loader.", - "fr-fr": "Nous allons utiliser l'écran de chargement intégré par défaut." + "fr-FR": "Nous allons utiliser l'écran de chargement intégré par défaut." } } }, @@ -3826,7 +3826,7 @@ "description": { "messageByLocale": { "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", - "fr-fr": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target)." + "fr-FR": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target)." } }, "placement": "top" @@ -3841,7 +3841,7 @@ "description": { "messageByLocale": { "en": "Now we will ask the player to authenticate at game opening.", - "fr-fr": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu." + "fr-FR": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu." } } } @@ -3857,7 +3857,7 @@ "description": { "messageByLocale": { "en": "Let's create an **event**!", - "fr-fr": "Créez un nouvel **évènement**." + "fr-FR": "Créez un nouvel **évènement**." } } } @@ -3871,7 +3871,7 @@ "description": { "messageByLocale": { "en": "Add a condition.", - "fr-fr": "Ajoutez une condition." + "fr-FR": "Ajoutez une condition." } } }, @@ -3893,7 +3893,7 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-fr": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”." } } }, @@ -3908,7 +3908,7 @@ "description": { "messageByLocale": { "en": "Select the **At the beginning of the scene** condition.", - "fr-fr": "Cliquez sur la condition *Au lancement de la scène*." + "fr-FR": "Cliquez sur la condition *Au lancement de la scène*." } } }, @@ -3923,7 +3923,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } }, "placement": "top" @@ -3938,7 +3938,7 @@ "description": { "messageByLocale": { "en": "Let's choose an **action**.", - "fr-fr": "Choisissons une **action**." + "fr-FR": "Choisissons une **action**." } } } @@ -3952,7 +3952,7 @@ "description": { "messageByLocale": { "en": "Search for “**Authentication**”.", - "fr-fr": "Cherchez “**Authentification**”." + "fr-FR": "Cherchez “**Authentification**”." } } }, @@ -3967,7 +3967,7 @@ "description": { "messageByLocale": { "en": "Select *Display authentication banner*.", - "fr-fr": "Cliquez sur *Afficher la bannière d'authentification*." + "fr-FR": "Cliquez sur *Afficher la bannière d'authentification*." } } }, @@ -3982,7 +3982,7 @@ "description": { "messageByLocale": { "en": "Alright, now players will be asked to login.", - "fr-fr": "Maintenant, les joueurs et les joueurs pourront s'identifier." + "fr-FR": "Maintenant, les joueurs et les joueurs pourront s'identifier." } }, "placement": "top" @@ -3997,7 +3997,7 @@ "title": { "messageByLocale": { "en": "Now let's create a new **scene** that will be used to display the **leaderboard**.", - "fr-fr": "Maintenant, nous allons créer une **scène** qui sera utilisée pour afficher le **classement**." + "fr-FR": "Maintenant, nous allons créer une **scène** qui sera utilisée pour afficher le **classement**." } }, "placement": "right" @@ -4012,7 +4012,7 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-fr": "Cliquez ici." + "fr-FR": "Cliquez ici." } }, "placement": "right" @@ -4030,7 +4030,7 @@ "description": { "messageByLocale": { "en": "Right click on the new **scene** and change its name to “Leaderboard”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-fr": "Faites un clic droit sur la nouvelle **scène** et changez son nom pour “**Classement**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." + "fr-FR": "Faites un clic droit sur la nouvelle **scène** et changez son nom pour “**Classement**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." } }, "placement": "right" @@ -4046,7 +4046,7 @@ "description": { "messageByLocale": { "en": "Go to the **events**.", - "fr-fr": "Ouvrez les **évènements**." + "fr-FR": "Ouvrez les **évènements**." } } } @@ -4061,7 +4061,7 @@ "description": { "messageByLocale": { "en": "Let's add an **event** that makes sure the player comes back to the start screen after closing the **leaderboard**.", - "fr-fr": "Ajoutons un **évènement** pour que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**." + "fr-FR": "Ajoutons un **évènement** pour que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**." } } } @@ -4075,7 +4075,7 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-fr": "Cliquez ici." + "fr-FR": "Cliquez ici." } } } @@ -4089,7 +4089,7 @@ "description": { "messageByLocale": { "en": "Search for “**Leaderboard**”.", - "fr-fr": "Cherchez “**classement**”." + "fr-FR": "Cherchez “**classement**”." } } }, @@ -4104,7 +4104,7 @@ "description": { "messageByLocale": { "en": "Select the *Leaderboard display has loaded* condition.", - "fr-fr": "Cliquez sur la condition *L'affichage du classement a été chargé*." + "fr-FR": "Cliquez sur la condition *L'affichage du classement a été chargé*." } } }, @@ -4119,7 +4119,7 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-fr": "Nous avons terminé." + "fr-FR": "Nous avons terminé." } }, "placement": "top" @@ -4134,7 +4134,7 @@ "description": { "messageByLocale": { "en": "Right-click on the condition and select *Invert Condition*.", - "fr-fr": "Faites un clic droit sur la **condition** et sélectionnez “Inverser une condition”." + "fr-FR": "Faites un clic droit sur la **condition** et sélectionnez “Inverser une condition”." } }, "placement": "bottom" @@ -4149,7 +4149,7 @@ "description": { "messageByLocale": { "en": "Let's add the **action** to come back to the start screen.", - "fr-fr": "Ajoutez une action pour revenir à l'écran d'ouverture." + "fr-FR": "Ajoutez une action pour revenir à l'écran d'ouverture." } } } @@ -4163,7 +4163,7 @@ "description": { "messageByLocale": { "en": "Type “*Scene*”.", - "fr-fr": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”." } } }, @@ -4178,7 +4178,7 @@ "description": { "messageByLocale": { "en": "Select “Change the scene”.", - "fr-fr": "Cliquez sur “**Changer la scène**”." + "fr-FR": "Cliquez sur “**Changer la scène**”." } } }, @@ -4193,7 +4193,7 @@ "description": { "messageByLocale": { "en": "Select “$(startScene)”.", - "fr-fr": "Sélectionnez “$(startScene)”." + "fr-FR": "Sélectionnez “$(startScene)”." } }, "placement": "top" @@ -4210,7 +4210,7 @@ "description": { "messageByLocale": { "en": "Alright, the action is all set.", - "fr-fr": "L'action est bien configurée." + "fr-FR": "L'action est bien configurée." } }, "placement": "top" @@ -4225,7 +4225,7 @@ "description": { "messageByLocale": { "en": "Now let's save the score of the player.", - "fr-fr": "Maintenant, sauvegardons le score du joueur ou de la joueuse." + "fr-FR": "Maintenant, sauvegardons le score du joueur ou de la joueuse." } } } @@ -4240,7 +4240,7 @@ "description": { "messageByLocale": { "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -4254,7 +4254,7 @@ "description": { "messageByLocale": { "en": "Search for “leaderboard”.", - "fr-fr": "Cherchez “**classement**”." + "fr-FR": "Cherchez “**classement**”." } } }, @@ -4269,7 +4269,7 @@ "description": { "messageByLocale": { "en": "Select the **Save player score** action.", - "fr-fr": "Sélectionnez l'action **Sauver le score du joueur**." + "fr-FR": "Sélectionnez l'action **Sauver le score du joueur**." } } }, @@ -4284,7 +4284,7 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-fr": "Sélectionnez le classement qui s'appelle “Score”." + "fr-FR": "Sélectionnez le classement qui s'appelle “Score”." } } }, @@ -4299,7 +4299,7 @@ "description": { "messageByLocale": { "en": "Open the **expression** builder.", - "fr-fr": "Ouvrez le constructeur **d'expression**." + "fr-FR": "Ouvrez le constructeur **d'expression**." } } }, @@ -4314,7 +4314,7 @@ "description": { "messageByLocale": { "en": "Search for “*Timer*”.", - "fr-fr": "Cherchez “*chrono*”." + "fr-FR": "Cherchez “*chrono*”." } } }, @@ -4329,7 +4329,7 @@ "description": { "messageByLocale": { "en": "Select **Scene timer value**.", - "fr-fr": "Cliquez sur **Valeur du chronomètre de scène**." + "fr-FR": "Cliquez sur **Valeur du chronomètre de scène**." } } }, @@ -4344,7 +4344,7 @@ "description": { "messageByLocale": { "en": "Select timer “Score”.", - "fr-fr": "Sélectionnez le chronomètre “Score”." + "fr-FR": "Sélectionnez le chronomètre “Score”." } }, "placement": "top" @@ -4360,7 +4360,7 @@ "description": { "messageByLocale": { "en": "This parameter is all set.", - "fr-fr": "C'est terminé." + "fr-FR": "C'est terminé." } }, "placement": "top" @@ -4376,7 +4376,7 @@ "description": { "messageByLocale": { "en": "Open the **expression** builder.", - "fr-fr": "Ouvrez le constructeur **d'expression**." + "fr-FR": "Ouvrez le constructeur **d'expression**." } } }, @@ -4391,7 +4391,7 @@ "description": { "messageByLocale": { "en": "Search for “**Username**”.", - "fr-fr": "Cherchez “**Nom**”." + "fr-FR": "Cherchez “**Nom**”." } } }, @@ -4406,7 +4406,7 @@ "description": { "messageByLocale": { "en": "Select **Username**.", - "fr-fr": "Cliquez sur **Nom d'utilisateur**." + "fr-FR": "Cliquez sur **Nom d'utilisateur**." } } }, @@ -4421,7 +4421,7 @@ "description": { "messageByLocale": { "en": "The action is ready.", - "fr-fr": "L'action est prête." + "fr-FR": "L'action est prête." } }, "placement": "top" @@ -4436,7 +4436,7 @@ "description": { "messageByLocale": { "en": "Let's change the **scene** to the **leaderboard** one (so that the play scene is closed).\n\nIn the **event** where $(target) gets deleted, click on “Add action”.", - "fr-fr": "Changeons la **scène** pour afficher celle du **classement** (de telle sorte que la scène de jeu est fermée).\n\nDans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Changeons la **scène** pour afficher celle du **classement** (de telle sorte que la scène de jeu est fermée).\n\nDans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -4450,7 +4450,7 @@ "description": { "messageByLocale": { "en": "Type “**Scene**”.", - "fr-fr": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”." } } }, @@ -4465,7 +4465,7 @@ "description": { "messageByLocale": { "en": "Select “Change the scene”.", - "fr-fr": "Cliquez sur “**Changer la scène**”." + "fr-FR": "Cliquez sur “**Changer la scène**”." } } }, @@ -4480,7 +4480,7 @@ "description": { "messageByLocale": { "en": "Select “$(leaderboardScene)”.", - "fr-fr": "Sélectionnez “$(leaderboardScene)”." + "fr-FR": "Sélectionnez “$(leaderboardScene)”." } }, "placement": "top" @@ -4496,7 +4496,7 @@ "description": { "messageByLocale": { "en": "Alright, the **action** is all set.", - "fr-fr": "Parfait, l'action est prête." + "fr-FR": "Parfait, l'action est prête." } }, "placement": "top" @@ -4511,7 +4511,7 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-fr": "Ouvrez le **Gestionnaire de projet**." + "fr-FR": "Ouvrez le **Gestionnaire de projet**." } }, "placement": "right" @@ -4526,7 +4526,7 @@ "description": { "messageByLocale": { "en": "Right-click on $(startScene) and select **Set as start scene**.", - "fr-fr": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**." + "fr-FR": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**." } }, "placement": "right" @@ -4542,7 +4542,7 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button.", - "fr-fr": "Lancez un **Aperçu** de votre jeu." + "fr-FR": "Lancez un **Aperçu** de votre jeu." } }, "placement": "bottom" From 4c1eb50eda80158fad992457fa970f0e1a2f4237 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:28:12 +0100 Subject: [PATCH 011/208] Fix cloudflare tutorial cache purge --- scripts/deploy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy.js b/scripts/deploy.js index 11733d1..fe30d78 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -67,7 +67,7 @@ axios // Update the "database" 'https://resources.gdevelop-app.com/in-app-tutorials-database/inAppTutorialShortHeaders.json', // Upload the tutorials - 'https://resources.gdevelop-app.com/in-app-tutorials/flingGamePart1.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/flingGame.json', ], }, { From 09df786b34faaa425dafe4b6ec169f93eb628fa0 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 16:06:02 +0100 Subject: [PATCH 012/208] Fine tune french translations --- tutorials/in-app/flingGame.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 28b369a..d46caed 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1716,7 +1716,7 @@ "description": { "messageByLocale": { "en": "Change the text to “**You Win!**”", - "fr-FR": "Cet objet texte devra afficher “**Vous avez gagné !**”" + "fr-FR": "Cet objet texte devra afficher “**Gagné !**”" } }, "placement": "bottom" @@ -2222,7 +2222,7 @@ "description": { "messageByLocale": { "en": "Make sure that $(grabArea) is selected and change this value to **0**.", - "fr-FR": "Sélectionnez l'instance de $(grabArea) et définissez son ordre sur l'axe z à **0**." + "fr-FR": "Sélectionnez l'instance de $(grabArea) et définissez sa position sur l'axe z à **0**." } }, "placement": "right" @@ -2327,7 +2327,7 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "La **condition** est maintenant sécurisée." + "fr-FR": "La **condition** est maintenant prête." } }, "placement": "top" @@ -3442,7 +3442,7 @@ "description": { "messageByLocale": { "en": "Let's create the timer now.", - "fr-FR": "Nous allons maintenant créer le minuteur." + "fr-FR": "Nous allons maintenant créer le chronomètre." } }, "placement": "top" From 3d58a3318b1218b9f11540f7f9f029b1211b45e4 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 1 Dec 2022 16:11:17 +0100 Subject: [PATCH 013/208] Add step to return to start scene before last preview --- tutorials/in-app/flingGame.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index d46caed..d7b48d8 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -4533,6 +4533,22 @@ }, "isOnClosableDialog": true }, + { + "elementToHighlightId": "editorTab:startScene:Scene", + "nextStepTrigger": { + "editorIsActive": "startScene:Scene" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Come back to the start scene *$(startScene)*.", + "fr-FR": "Retournons à la scène d'ouverture *$(startScene)*." + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { From d8b5321b18037451853aaac6ffe9ca5c8f5dc163 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Fri, 2 Dec 2022 09:32:06 +0100 Subject: [PATCH 014/208] Add missing placement --- tutorials/in-app/flingGame.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index d7b48d8..f02eaa2 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1130,7 +1130,8 @@ "en": "Install the extension in your project.", "fr-FR": "Installez l'extension dans votre projet." } - } + }, + "placement": "left" }, "isOnClosableDialog": true }, From cd578ffe0413adb2d06996f32770ad02304b9bfb Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Fri, 2 Dec 2022 11:38:47 +0100 Subject: [PATCH 015/208] Change fling game tutorial --- tutorials/in-app/flingGame.json | 524 ++++++++++---------------------- 1 file changed, 169 insertions(+), 355 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index f02eaa2..726618c 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -28,10 +28,6 @@ "editor": "EventsSheet", "scene": "startScene" }, - "SwitchToEvents6": { - "editor": "EventsSheet", - "scene": "leaderboardScene" - }, "SwitchToEvents7": { "editor": "EventsSheet", "scene": "playScene" @@ -48,13 +44,13 @@ "editor": "Scene", "scene": "playScene" }, - "openLeaderboardScene": { - "editor": "Scene", - "scene": "leaderboardScene" - }, "ClickOnNewObjectButtonForScore": { "editor": "Scene", "scene": "playScene" + }, + "SwitchToStartScene": { + "editor": "Scene", + "scene": "startScene" } }, "availableLocales": [ @@ -625,7 +621,7 @@ "description": { "messageByLocale": { "en": "Select a **block** object you would like to use as an obstacle for your $(projectile).", - "fr-FR": "Cherchez un objet qui servira d'obstacle aux $(projectile)." + "fr-FR": "Cherchez un objet qui servira d'obstacle aux $(projectile) (cherchez **block**)." } } }, @@ -1234,7 +1230,7 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button to see how you can click and drag your $(projectile) around the scene!", - "fr-FR": "Cliquez sur **Aperçu** pour voitre votre jeu. Cliquez et faites glisser $(projectile) dans la scène!" + "fr-FR": "Cliquez sur **Aperçu** pour tester votre jeu. Cliquez et faites glisser $(projectile) dans la scène !" } }, "placement": "bottom" @@ -1658,6 +1654,7 @@ }, "placement": "bottom" }, + "skippable": true, "isOnClosableDialog": true }, { @@ -1830,7 +1827,7 @@ "description": { "messageByLocale": { "en": "Now select the $(youWinText) **instance** on the **scene** and change its **layer** using the **properties panel**.\n\nIt should have disappeared!", - "fr-FR": "Sélectionnez **l'instance** de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché." + "fr-FR": "Sélectionnez l'instance de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché." } }, "standalone": true @@ -2769,6 +2766,7 @@ }, "placement": "bottom" }, + "skippable": true, "isOnClosableDialog": true }, { @@ -3262,6 +3260,7 @@ }, "placement": "bottom" }, + "skippable": true, "isOnClosableDialog": true }, { @@ -3321,7 +3320,7 @@ "description": { "messageByLocale": { "en": "Change the initial text to display “Time: 0”.", - "fr-FR": "Utilisez comme texte initial “Temps: 0”." + "fr-FR": "Utilisez comme texte initial “Temps : 0”." } }, "placement": "bottom" @@ -3607,8 +3606,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Copy this line and paste it here: `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`.", - "fr-FR": "Copier cette ligne et collez-là ici : `\"Milliseconds: \" + ToString(round(10*(TimerElapsedTime(\"Score\"))))`." + "en": "Copy this line and paste it here: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", + "fr-FR": "Copier cette ligne et collez-là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`." } } }, @@ -3638,13 +3637,13 @@ "standalone": true, "title": { "messageByLocale": { - "en": "Now we will display the other players scores.", - "fr-FR": "Maintenant, nous allons afficher le score des autres joueurs et joueuses." + "en": "Now let's save the score of the player.", + "fr-FR": "Maintenant, sauvegardons le score du joueur ou de la joueuse." } }, "description": { "messageByLocale": { - "en": "In the **event** where $(target) gets deleted, click on “Add action”.", + "en": "In the event where $(target) gets deleted, click on “Add action”.", "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } @@ -3653,12 +3652,12 @@ { "elementToHighlightId": "#instruction-editor-dialog #search-bar", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-Leaderboards--DisplayLeaderboard" + "presenceOfElement": "#instruction-item-Leaderboards--SaveConnectedPlayerScore" }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**leaderboard**”.", + "en": "Search for “leaderboard”.", "fr-FR": "Cherchez “**classement**”." } } @@ -3666,15 +3665,15 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-Leaderboards--DisplayLeaderboard", + "elementToHighlightId": "#instruction-item-Leaderboards--SaveConnectedPlayerScore", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select the *Display leaderboard* action.", - "fr-FR": "Cliquez sur l'action *Afficher le classement*." + "en": "Select the **Save connected player score** action.", + "fr-FR": "Sélectionnez l'action **Enregistrer le score du joueur connecté**." } } }, @@ -3803,115 +3802,79 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-parameters-container #yes-button", + "elementToHighlightId": "#instruction-parameters-container #open-number-expression-popover-button", "nextStepTrigger": { - "presenceOfElement": "#instruction-parameters-container #yes-button[data-effective=\"true\"]" + "presenceOfElement": "#expression-selector" }, "tooltip": { "description": { "messageByLocale": { - "en": "We'll use the built-in loader.", - "fr-FR": "Nous allons utiliser l'écran de chargement intégré par défaut." + "en": "Open the **expression** builder.", + "fr-FR": "Ouvrez le constructeur **d'expression**." } } }, - "isOnClosableDialog": true, - "skippable": true - }, - { - "elementToHighlightId": "#instruction-editor-dialog #ok-button", - "nextStepTrigger": { - "absenceOfElement": "#instruction-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", - "fr-FR": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target)." - } - }, - "placement": "top" - } + "isOnClosableDialog": true }, { - "elementToHighlightId": "editorTab:startScene:EventsSheet", + "elementToHighlightId": "#expression-selector input", "nextStepTrigger": { - "editorIsActive": "startScene:EventsSheet" + "presenceOfElement": "#instruction-or-expression-TimerElapsedTime" }, "tooltip": { "description": { "messageByLocale": { - "en": "Now we will ask the player to authenticate at game opening.", - "fr-FR": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu." + "en": "Search for “*Timer*”.", + "fr-FR": "Cherchez “*chrono*”." } } - } - }, - { - "id": "SwitchToEvents5", - "elementToHighlightId": "#toolbar-add-event-button", - "nextStepTrigger": { - "presenceOfElement": "[data-active=\"true\"] #add-condition-button-empty" }, - "isTriggerFlickering": true, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's create an **event**!", - "fr-FR": "Créez un nouvel **évènement**." - } - } - } + "isOnClosableDialog": true }, { - "elementToHighlightId": "[data-active=\"true\"] #add-condition-button-empty", + "elementToHighlightId": "#instruction-or-expression-TimerElapsedTime", "nextStepTrigger": { - "presenceOfElement": "#instruction-editor-dialog" + "presenceOfElement": "#expression-parameters-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "Add a condition.", - "fr-FR": "Ajoutez une condition." + "en": "Select **Scene timer value**.", + "fr-FR": "Cliquez sur **Valeur du chronomètre de scène**." } } }, - "shortcuts": [ - { - "stepId": "SwitchToEvents5", - "trigger": { - "absenceOfElement": "[data-active=\"true\"] #add-condition-button-empty" - } - } - ] + "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-editor-dialog #search-bar", + "elementToHighlightId": "#expression-parameters-editor-dialog textarea", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-DepartScene" + "valueHasChanged": true }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Scene**”.", - "fr-FR": "Cherchez “**Scène**”." + "en": "Select timer “Score”.", + "fr-FR": "Sélectionnez le chronomètre “Score”." } - } + }, + "placement": "top" }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-DepartScene", + "elementToHighlightId": "#expression-parameters-editor-dialog #apply-button", "nextStepTrigger": { - "presenceOfElement": "#instruction-parameters-container" + "absenceOfElement": "#expression-parameters-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select the **At the beginning of the scene** condition.", - "fr-FR": "Cliquez sur la condition *Au lancement de la scène*." + "en": "This parameter is all set.", + "fr-FR": "C'est terminé." } - } + }, + "placement": "top" }, "isOnClosableDialog": true }, @@ -3923,23 +3886,29 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We're done.", - "fr-FR": "Nous avons terminé." + "en": "The action is ready.", + "fr-FR": "L'action est prête." } }, "placement": "top" } }, { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button-empty", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, "tooltip": { + "standalone": true, + "title": { + "messageByLocale": { + "en": "Now we will display the other players scores after a 2 seconds delay.", + "fr-FR": "Maintenant, nous allons afficher le score des autres joueurs et joueuses après un délai de 2 secondes." + } + }, "description": { "messageByLocale": { - "en": "Let's choose an **action**.", - "fr-FR": "Choisissons une **action**." + "en": "In the **event** where $(target) gets deleted, click on “Add action”.", + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -3947,136 +3916,79 @@ { "elementToHighlightId": "#instruction-editor-dialog #search-bar", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-PlayerAuthentication--DisplayAuthenticationBanner" + "presenceOfElement": "#instruction-item-Wait" }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Authentication**”.", - "fr-FR": "Cherchez “**Authentification**”." + "en": "Search for “**Wait**”.", + "fr-FR": "Cherchez “**Attendre**”." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-PlayerAuthentication--DisplayAuthenticationBanner", + "elementToHighlightId": "#instruction-item-Wait", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select *Display authentication banner*.", - "fr-FR": "Cliquez sur *Afficher la bannière d'authentification*." + "en": "Select the *Wait X seconds* action.", + "fr-FR": "Cliquez sur l'action *Attendre X secondes*." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "elementToHighlightId": "#instruction-parameters-container textarea", "nextStepTrigger": { - "absenceOfElement": "#instruction-editor-dialog" + "valueHasChanged": true }, "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now players will be asked to login.", - "fr-FR": "Maintenant, les joueurs et les joueurs pourront s'identifier." + "en": "Type in **2**.", + "fr-FR": "Tapez **2**." } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#main-toolbar-project-manager-button", - "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-game-settings" + } }, - "tooltip": { - "title": { - "messageByLocale": { - "en": "Now let's create a new **scene** that will be used to display the **leaderboard**.", - "fr-FR": "Maintenant, nous allons créer une **scène** qui sera utilisée pour afficher le **classement**." - } - }, - "placement": "right" - } + "isOnClosableDialog": true }, { - "elementToHighlightId": "#project-manager #add-new-scene-button", + "elementToHighlightId": "#instruction-editor-dialog #ok-button", "nextStepTrigger": { - "presenceOfElement": "#scene-item-2" + "absenceOfElement": "#instruction-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "Click here.", - "fr-FR": "Cliquez ici." + "en": "Now the game will wait 2 seconds before going to next **action** in the **event**.", + "fr-FR": "Maintenant, le jeu va attendre 2 secondes avant de passer à **l'action** suivante dans **l'évènement**." } }, - "placement": "right" - }, - "mapProjectData": { - "leaderboardScene": "projectLastSceneName" + "placement": "top" } }, { - "elementToHighlightId": "#project-manager #scene-item-2", "nextStepTrigger": { - "presenceOfElement": "editorTab:leaderboardScene:EventsSheet" + "presenceOfElement": "#instruction-editor-dialog" }, "tooltip": { - "description": { + "standalone": true, + "title": { "messageByLocale": { - "en": "Right click on the new **scene** and change its name to “Leaderboard”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-FR": "Faites un clic droit sur la nouvelle **scène** et changez son nom pour “**Classement**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." + "en": "Now we will display a leaderboard.", + "fr-FR": "Maintenant, nous allons afficher un classement des scores." } }, - "placement": "right" - } - }, - { - "id": "openLeaderboardScene", - "elementToHighlightId": "editorTab:leaderboardScene:EventsSheet", - "nextStepTrigger": { - "editorIsActive": "leaderboardScene:EventsSheet" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Go to the **events**.", - "fr-FR": "Ouvrez les **évènements**." - } - } - } - }, - { - "id": "SwitchToEvents6", - "elementToHighlightId": "[data-active=\"true\"] #add-event-button", - "nextStepTrigger": { - "presenceOfElement": "[data-active=\"true\"] #add-condition-button-empty" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's add an **event** that makes sure the player comes back to the start screen after closing the **leaderboard**.", - "fr-FR": "Ajoutons un **évènement** pour que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**." - } - } - } - }, - { - "elementToHighlightId": "[data-active=\"true\"] #add-condition-button-empty", - "nextStepTrigger": { - "presenceOfElement": "#instruction-editor-dialog" - }, - "tooltip": { "description": { "messageByLocale": { - "en": "Click here.", - "fr-FR": "Cliquez ici." + "en": "In the **event** where $(target) gets deleted, click on “Add action”.", + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -4084,12 +3996,12 @@ { "elementToHighlightId": "#instruction-editor-dialog #search-bar", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-Leaderboards--IsLeaderboardViewLoaded" + "presenceOfElement": "#instruction-item-Leaderboards--DisplayLeaderboard" }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Leaderboard**”.", + "en": "Search for “**leaderboard**”.", "fr-FR": "Cherchez “**classement**”." } } @@ -4097,110 +4009,50 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-Leaderboards--IsLeaderboardViewLoaded", + "elementToHighlightId": "#instruction-item-Leaderboards--DisplayLeaderboard", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select the *Leaderboard display has loaded* condition.", - "fr-FR": "Cliquez sur la condition *L'affichage du classement a été chargé*." + "en": "Select the *Display leaderboard* action.", + "fr-FR": "Cliquez sur l'action *Afficher le classement*." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-editor-dialog #ok-button", - "nextStepTrigger": { - "absenceOfElement": "#instruction-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We're done.", - "fr-FR": "Nous avons terminé." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "span[data-instruction=\"Leaderboards::IsLeaderboardViewLoaded\"]", - "nextStepTrigger": { - "presenceOfElement": "span[data-instruction=\"Leaderboards::IsLeaderboardViewLoaded\"][data-instruction-inverted=true]" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Right-click on the condition and select *Invert Condition*.", - "fr-FR": "Faites un clic droit sur la **condition** et sélectionnez “Inverser une condition”." - } - }, - "placement": "bottom" - } - }, - { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button-empty", - "nextStepTrigger": { - "presenceOfElement": "#instruction-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's add the **action** to come back to the start screen.", - "fr-FR": "Ajoutez une action pour revenir à l'écran d'ouverture." - } - } - } - }, - { - "elementToHighlightId": "#instruction-editor-dialog #search-bar", + "elementToHighlightId": "#instruction-parameters-container select", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-Scene" + "valueHasChanged": true }, "tooltip": { "description": { "messageByLocale": { - "en": "Type “*Scene*”.", - "fr-FR": "Cherchez “**Scène**”." + "en": "Select the leaderboard named “Score”.", + "fr-FR": "Sélectionnez le classement qui s'appelle “Score”." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-Scene", + "elementToHighlightId": "#instruction-parameters-container #yes-button", "nextStepTrigger": { - "presenceOfElement": "#instruction-parameters-container" + "presenceOfElement": "#instruction-parameters-container #yes-button[data-effective=\"true\"]" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select “Change the scene”.", - "fr-FR": "Cliquez sur “**Changer la scène**”." + "en": "We'll use the built-in loader.", + "fr-FR": "Nous allons utiliser l'écran de chargement intégré par défaut." } } }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#instruction-parameters-container #parameter-1-scene-field", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select “$(startScene)”.", - "fr-FR": "Sélectionnez “$(startScene)”." - } - }, - "placement": "top" - }, "isOnClosableDialog": true, - "placement": "top" + "skippable": true }, { "elementToHighlightId": "#instruction-editor-dialog #ok-button", @@ -4210,225 +4062,185 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the action is all set.", - "fr-FR": "L'action est bien configurée." + "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", + "fr-FR": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target)." } }, "placement": "top" } }, { - "elementToHighlightId": "editorTab:playScene:EventsSheet", + "elementToHighlightId": "editorTab:startScene:EventsSheet", "nextStepTrigger": { - "editorIsActive": "playScene:EventsSheet" + "editorIsActive": "startScene:EventsSheet" }, "tooltip": { "description": { "messageByLocale": { - "en": "Now let's save the score of the player.", - "fr-FR": "Maintenant, sauvegardons le score du joueur ou de la joueuse." + "en": "Now we will ask the player to authenticate at game opening.", + "fr-FR": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu." } } } }, { - "id": "SwitchToEvents7", + "id": "SwitchToEvents5", + "elementToHighlightId": "#toolbar-add-event-button", "nextStepTrigger": { - "presenceOfElement": "#instruction-editor-dialog" + "presenceOfElement": "[data-active=\"true\"] #add-condition-button-empty" }, + "isTriggerFlickering": true, "tooltip": { - "standalone": true, "description": { "messageByLocale": { - "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "en": "Let's create an **event**!", + "fr-FR": "Créez un nouvel **évènement**." } } } }, { - "elementToHighlightId": "#instruction-editor-dialog #search-bar", - "nextStepTrigger": { - "presenceOfElement": "#instruction-item-Leaderboards--SavePlayerScore" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Search for “leaderboard”.", - "fr-FR": "Cherchez “**classement**”." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#instruction-item-Leaderboards--SavePlayerScore", - "nextStepTrigger": { - "presenceOfElement": "#instruction-parameters-container" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select the **Save player score** action.", - "fr-FR": "Sélectionnez l'action **Sauver le score du joueur**." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#instruction-parameters-container select", + "elementToHighlightId": "[data-active=\"true\"] #add-condition-button-empty", "nextStepTrigger": { - "valueHasChanged": true + "presenceOfElement": "#instruction-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select the leaderboard named “Score”.", - "fr-FR": "Sélectionnez le classement qui s'appelle “Score”." + "en": "Add a condition.", + "fr-FR": "Ajoutez une condition." } } }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#instruction-parameters-container #open-number-expression-popover-button", - "nextStepTrigger": { - "presenceOfElement": "#expression-selector" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Open the **expression** builder.", - "fr-FR": "Ouvrez le constructeur **d'expression**." + "shortcuts": [ + { + "stepId": "SwitchToEvents5", + "trigger": { + "absenceOfElement": "[data-active=\"true\"] #add-condition-button-empty" } } - }, - "isOnClosableDialog": true + ] }, { - "elementToHighlightId": "#expression-selector input", + "elementToHighlightId": "#instruction-editor-dialog #search-bar", "nextStepTrigger": { - "presenceOfElement": "#instruction-or-expression-TimerElapsedTime" + "presenceOfElement": "#instruction-item-DepartScene" }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for “*Timer*”.", - "fr-FR": "Cherchez “*chrono*”." + "en": "Search for “**Scene**”.", + "fr-FR": "Cherchez “**Scène**”." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-or-expression-TimerElapsedTime", + "elementToHighlightId": "#instruction-item-DepartScene", "nextStepTrigger": { - "presenceOfElement": "#expression-parameters-editor-dialog" + "presenceOfElement": "#instruction-parameters-container" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select **Scene timer value**.", - "fr-FR": "Cliquez sur **Valeur du chronomètre de scène**." + "en": "Select the **At the beginning of the scene** condition.", + "fr-FR": "Cliquez sur la condition *Au lancement de la scène*." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#expression-parameters-editor-dialog textarea", + "elementToHighlightId": "#instruction-editor-dialog #ok-button", "nextStepTrigger": { - "valueHasChanged": true + "absenceOfElement": "#instruction-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select timer “Score”.", - "fr-FR": "Sélectionnez le chronomètre “Score”." + "en": "We're done.", + "fr-FR": "Nous avons terminé." } }, "placement": "top" - }, - "isOnClosableDialog": true + } }, { - "elementToHighlightId": "#expression-parameters-editor-dialog #apply-button", + "elementToHighlightId": "[data-active=\"true\"] #add-action-button-empty", "nextStepTrigger": { - "absenceOfElement": "#expression-parameters-editor-dialog" + "presenceOfElement": "#instruction-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "This parameter is all set.", - "fr-FR": "C'est terminé." + "en": "Let's choose an **action**.", + "fr-FR": "Choisissons une **action**." } - }, - "placement": "top" - }, - "isOnClosableDialog": true + } + } }, { - "elementToHighlightId": "#instruction-parameters-container #open-string-expression-popover-button", + "elementToHighlightId": "#instruction-editor-dialog #search-bar", "nextStepTrigger": { - "presenceOfElement": "#expression-selector" + "presenceOfElement": "#instruction-item-PlayerAuthentication--DisplayAuthenticationBanner" }, "tooltip": { "description": { "messageByLocale": { - "en": "Open the **expression** builder.", - "fr-FR": "Ouvrez le constructeur **d'expression**." + "en": "Search for “**Authentication**”.", + "fr-FR": "Cherchez “**Authentification**”." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#expression-selector input", + "elementToHighlightId": "#instruction-item-PlayerAuthentication--DisplayAuthenticationBanner", "nextStepTrigger": { - "presenceOfElement": "#instruction-or-expression-PlayerAuthentication--Username" + "presenceOfElement": "#instruction-parameters-container" }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for “**Username**”.", - "fr-FR": "Cherchez “**Nom**”." + "en": "Select *Display authentication banner*.", + "fr-FR": "Cliquez sur *Afficher la bannière d'authentification*." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-or-expression-PlayerAuthentication--Username", + "elementToHighlightId": "#instruction-editor-dialog #ok-button", "nextStepTrigger": { - "absenceOfElement": "#expression-selector" + "absenceOfElement": "#instruction-editor-dialog" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select **Username**.", - "fr-FR": "Cliquez sur **Nom d'utilisateur**." + "en": "Alright, now players will be asked to login.", + "fr-FR": "Maintenant, les joueurs et les joueuses pourront s'identifier." } - } - }, - "isOnClosableDialog": true + }, + "placement": "top" + } }, { - "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "elementToHighlightId": "editorTab:playScene:EventsSheet", "nextStepTrigger": { - "absenceOfElement": "#instruction-editor-dialog" + "editorIsActive": "playScene:EventsSheet" }, "tooltip": { "description": { "messageByLocale": { - "en": "The action is ready.", - "fr-FR": "L'action est prête." + "en": "Let's make sure the player comes back to the start screen after closing the **leaderboard**.", + "fr-FR": "Faisons en sorte que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**." } - }, - "placement": "top" + } } }, { + "id": "SwitchToEvents7", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -4436,8 +4248,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Let's change the **scene** to the **leaderboard** one (so that the play scene is closed).\n\nIn the **event** where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Changeons la **scène** pour afficher celle du **classement** (de telle sorte que la scène de jeu est fermée).\n\nDans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "en": "In the event where $(target) gets deleted, click on “Add action”.", + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." } } } @@ -4450,7 +4262,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Type “**Scene**”.", + "en": "Type “*Scene*”.", "fr-FR": "Cherchez “**Scène**”." } } @@ -4480,13 +4292,14 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select “$(leaderboardScene)”.", - "fr-FR": "Sélectionnez “$(leaderboardScene)”." + "en": "Select “$(startScene)”.", + "fr-FR": "Sélectionnez “$(startScene)”." } }, "placement": "top" }, - "isOnClosableDialog": true + "isOnClosableDialog": true, + "placement": "top" }, { "elementToHighlightId": "#instruction-editor-dialog #ok-button", @@ -4496,8 +4309,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, the **action** is all set.", - "fr-FR": "Parfait, l'action est prête." + "en": "Alright, the action is all set.", + "fr-FR": "L'action est bien configurée." } }, "placement": "top" @@ -4551,6 +4364,7 @@ "skippable": true }, { + "id": "SwitchToStartScene", "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { "previewLaunched": true From 44663c91c359dd5924b4f05ad3fd269dbc9f0ea7 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 8 Dec 2022 10:45:00 +0100 Subject: [PATCH 016/208] Add intermediary step to open instance properties panel --- tutorials/in-app/flingGame.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 726618c..97bdd7c 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1408,6 +1408,22 @@ } } }, + { + "elementToHighlightId": "#toolbar-open-properties-panel-button", + "skippable": true, + "nextStepTrigger": { + "presenceOfElement": "#instance-properties-editor" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **instance** properties editor panel.", + "fr-FR": "Ouvrez le panneau d'édition des propriétés de **l'instance**." + } + }, + "placement": "bottom" + } + }, { "elementToHighlightId": "#instance-properties-editor [id=\"Z Order\"]", "nextStepTrigger": { From 688b2f60ff1623728c49f629105094e7f8f00ee7 Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Fri, 9 Dec 2022 16:26:53 +0100 Subject: [PATCH 017/208] Add possibility to flag step as deprecated (#9) --- docs/inAppTutorial/REFERENCE.md | 1 + scripts/types.d.ts | 1 + tutorials/in-app/flingGame.json | 2 ++ 3 files changed, 4 insertions(+) diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index 45fc9d1..872dcf7 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -101,6 +101,7 @@ Here is the structure of a step (all fields are optional): - `nextStepTrigger`: see [Triggers](#triggers) - `tooltip`: see [Tooltip](#tooltip) - `dialog`: A dialog to display with the same structure as the [the end dialog](#enddialog) +- `deprecated` (true): Useful to discard a step that is not useful anymore in order to not change the count of step of the tutorial and impact progress save on user side. - `isCheckpoint` (true): Useful to divide a tutorial in different part. When there are checkpoint steps, the notion of progress is part-based. - `isTriggerFlickering`(true): useful when a DOM mutation is not caught and the presence trigger is not fired. - `shortcuts`: list of steps that the flow can use as shortcuts. diff --git a/scripts/types.d.ts b/scripts/types.d.ts index 4bf99c5..dc610e4 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -43,6 +43,7 @@ export type InAppTutorialFlowStep = { elementToHighlightId?: string; id?: string; isTriggerFlickering?: true; + deprecated?: true; nextStepTrigger?: InAppTutorialFlowStepTrigger; shortcuts?: Array<{ stepId: string; diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 97bdd7c..c38dad6 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -185,6 +185,7 @@ "nextStepTrigger": { "valueHasChanged": true }, + "deprecated": true, "tooltip": { "description": { "messageByLocale": { @@ -200,6 +201,7 @@ "nextStepTrigger": { "valueHasChanged": true }, + "deprecated": true, "tooltip": { "description": { "messageByLocale": { From 177ae4bd208c6e8016c896165e8f7f75829671a6 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 12 Dec 2022 14:21:28 +0100 Subject: [PATCH 018/208] Make some steps skippable --- tutorials/in-app/flingGame.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index c38dad6..852bae4 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -163,7 +163,8 @@ } } }, - "isOnClosableDialog": true + "isOnClosableDialog": true, + "skippable": true }, { "elementToHighlightId": "#project-manager-tab-game-properties", @@ -1069,7 +1070,8 @@ } } }, - "isOnClosableDialog": true + "isOnClosableDialog": true, + "skippable": true }, { "elementToHighlightId": "#project-manager-extension-search-or-create", From 8ca537ad9ee96e6c8cf26f1378df772815c3eba8 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 12 Dec 2022 14:33:18 +0100 Subject: [PATCH 019/208] Fix instance properties panel additional step --- tutorials/in-app/flingGame.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 852bae4..b5967c0 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1398,34 +1398,34 @@ } }, { + "elementToHighlightId": "#toolbar-open-properties-panel-button", + "skippable": true, "nextStepTrigger": { - "presenceOfElement": "#instance-properties-editor [id=\"Z Order\"]" + "presenceOfElement": "#instance-properties-editor" }, - "skippable": true, "tooltip": { - "standalone": true, "description": { "messageByLocale": { - "en": "Select the instance of $(background) on the scene.", - "fr-FR": "Sélectionnez l'instance de $(background) sur la scène." + "en": "Open the **instance** properties editor panel and select the instance of $(background) on the scene.", + "fr-FR": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(background) sur la scène." } - } + }, + "placement": "bottom" } }, { - "elementToHighlightId": "#toolbar-open-properties-panel-button", - "skippable": true, "nextStepTrigger": { - "presenceOfElement": "#instance-properties-editor" + "presenceOfElement": "#instance-properties-editor [id=\"Z Order\"]" }, + "skippable": true, "tooltip": { + "standalone": true, "description": { "messageByLocale": { - "en": "Open the **instance** properties editor panel.", - "fr-FR": "Ouvrez le panneau d'édition des propriétés de **l'instance**." + "en": "Select the instance of $(background) on the scene.", + "fr-FR": "Sélectionnez l'instance de $(background) sur la scène." } - }, - "placement": "bottom" + } } }, { From 6a8254b83a314d6bd20221f96f980a5dab73f15f Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 12 Dec 2022 16:20:55 +0100 Subject: [PATCH 020/208] Improve documentation --- README.md | 9 +++++---- docs/inAppTutorial/README.md | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4eb810f..ccb56e4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # GDevelop-tutorials -![GDevelop logo](https://raw.githubusercontent.com/4ian/GDevelop/master/newIDE/GDevelop%20banner.png "GDevelop logo") +![GDevelop logo](https://raw.githubusercontent.com/4ian/GDevelop/master/newIDE/GDevelop%20banner.png 'GDevelop logo') This repository holds official tutorials for the [GDevelop](https://gdevelop.io) editor. @@ -8,6 +8,7 @@ At the moment, tutorials can only take the form of an in-app tutorial that guide ## Getting Started -| ❔ I want to... | 🚀 What to do | -| ------------------------------- | ------------------------------------------------------------------------------ | -| Create an in-app tutorial | First read [this README](./docs/inAppTutorial/README.md) and then submit a new tutorial of your own | \ No newline at end of file +| ❔ I want to... | 🚀 What to do | +| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Create an in-app tutorial | Head over to [this README](./docs/inAppTutorial/README.md) to understand how the tutorial files are structured and then submit a new tutorial of your own. | +| Help to translate existing in-app tutorials | Head over to [this README](./docs/inAppTutorial/README.md) to understand how we store translations and then submit with your suggestion. | diff --git a/docs/inAppTutorial/README.md b/docs/inAppTutorial/README.md index ce8e6f5..c9efe6c 100644 --- a/docs/inAppTutorial/README.md +++ b/docs/inAppTutorial/README.md @@ -10,3 +10,39 @@ You can have a look at the components in [the editor storybook](https://gdevelop ## How To Create An In-App Tutorial Have a look at the [documentation](./REFERENCE.md) to learn how to build your JSON. + +## Add a New Language to an In-App Tutorial + +> Make sure you're comfortable with editing [JSON files](https://docs.fileformat.com/web/json/). + +To help us translate the in-app tutorials, please follow these steps: + +- Git and GitHub manipulations: + - Fork the repository + - Create a new branch in your new repository + +Once the repository is installed, open the JSON file with your favorite IDE (VSCode or else.) and begin the translation work: + +- Find all the lines corresponding to a field with key `"en"` and duplicate those lines + - with VSCode, select `"en"` and then hit Ctrl+Shift+L to select all identical occurrences. +- Translate each new line you created with the above instruction +- Add the locale you added to field `availableLocales` + +**Notes** + +- There are a few things to know, you can have a look at the other translations if you're not sure: + - We're using markdown to format the text. For instance: + - **\*\*bold\*\*** + - \*_italic_\* + - `` `code` `` + - There shall not be empty translations + - Don't translate placeholders such as `$(character)` + +And finally: + +- Git and GitHub manipulations: + - Commit your changes + - Push your branch + - Open the PR from your branch to our `main` branch. + +Once you do this, a few automated checks will be run to make sure a few basic verifications are made. From a363aee6e9164a433aac5717d97d3acb58875737 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 12 Dec 2022 16:33:06 +0100 Subject: [PATCH 021/208] Add note in documentation --- docs/inAppTutorial/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/inAppTutorial/README.md b/docs/inAppTutorial/README.md index c9efe6c..ee005e7 100644 --- a/docs/inAppTutorial/README.md +++ b/docs/inAppTutorial/README.md @@ -11,6 +11,8 @@ You can have a look at the components in [the editor storybook](https://gdevelop Have a look at the [documentation](./REFERENCE.md) to learn how to build your JSON. +> Note: At the moment, there isn't a no-code approach to building/modifying an in-app tutorial. You should have GDevelop running and inspect its HTML to be able to specify the CSS selectors to use. If there are missing HTML tag ids, please tell us or open a PR on [GDevelop main repository](https://github.com/4ian/GDevelop). + ## Add a New Language to an In-App Tutorial > Make sure you're comfortable with editing [JSON files](https://docs.fileformat.com/web/json/). From b364de54b7411d3746ce1f2466bd340e36c2d98e Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Tue, 24 Jan 2023 17:37:26 +0100 Subject: [PATCH 022/208] Change copy to avoid users not being able to select the code --- tutorials/in-app/flingGame.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index b5967c0..d272e87 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -3626,8 +3626,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Copy this line and paste it here: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", - "fr-FR": "Copier cette ligne et collez-là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`." + "en": "Double click to highlight this line, then copy and paste it here: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", + "fr-FR": "Double cliquez sur cette ligne pour la sélectionner et copiez-collez là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`." } } }, From 49df5ceec4780d25e9e306e31f3d4e93f2aa390b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 28 Feb 2023 09:17:39 +0100 Subject: [PATCH 023/208] Add Plinko Multiplier template --- templates/plinkoMultiplier/assets/Ball.png | Bin 0 -> 219 bytes .../plinkoMultiplier/assets/BallRespawn.wav | Bin 0 -> 41498 bytes .../plinkoMultiplier/assets/ClickerBeep.wav | Bin 0 -> 8462 bytes .../plinkoMultiplier/assets/ClickerBeep2.wav | Bin 0 -> 17684 bytes .../plinkoMultiplier/assets/CloudLayer.png | Bin 0 -> 5071 bytes .../plinkoMultiplier/assets/Darkening.png | Bin 0 -> 530 bytes .../plinkoMultiplier/assets/DoublePeg.png | Bin 0 -> 2238 bytes .../plinkoMultiplier/assets/DoublePeg2.png | Bin 0 -> 2238 bytes .../plinkoMultiplier/assets/GameOver.wav | Bin 0 -> 69370 bytes .../assets/LongMetalPanel.png | Bin 0 -> 312 bytes .../plinkoMultiplier/assets/PTSans-Bold.ttf | Bin 0 -> 288340 bytes .../plinkoMultiplier/assets/StonePeg.png | Bin 0 -> 1908 bytes .../plinkoMultiplier/assets/StonePeg2.png | Bin 0 -> 1908 bytes .../assets/android-icon-144.png | Bin 0 -> 21536 bytes .../assets/android-icon-192.png | Bin 0 -> 33108 bytes .../assets/android-icon-36.png | Bin 0 -> 2661 bytes .../assets/android-icon-48.png | Bin 0 -> 4029 bytes .../assets/android-icon-72.png | Bin 0 -> 7496 bytes .../assets/android-icon-96.png | Bin 0 -> 11776 bytes ...android-windowSplashScreenAnimatedIcon.png | Bin 0 -> 136882 bytes .../assets/desktop-icon-512.png | Bin 0 -> 91056 bytes .../plinkoMultiplier/assets/ios-icon-100.png | Bin 0 -> 12395 bytes .../plinkoMultiplier/assets/ios-icon-1024.png | Bin 0 -> 272702 bytes .../plinkoMultiplier/assets/ios-icon-114.png | Bin 0 -> 15013 bytes .../plinkoMultiplier/assets/ios-icon-120.png | Bin 0 -> 16225 bytes .../plinkoMultiplier/assets/ios-icon-144.png | Bin 0 -> 21536 bytes .../plinkoMultiplier/assets/ios-icon-152.png | Bin 0 -> 23746 bytes .../plinkoMultiplier/assets/ios-icon-167.png | Bin 0 -> 27099 bytes .../plinkoMultiplier/assets/ios-icon-180.png | Bin 0 -> 30321 bytes .../plinkoMultiplier/assets/ios-icon-20.png | Bin 0 -> 1175 bytes .../plinkoMultiplier/assets/ios-icon-29.png | Bin 0 -> 2006 bytes .../plinkoMultiplier/assets/ios-icon-40.png | Bin 0 -> 3133 bytes .../plinkoMultiplier/assets/ios-icon-50.png | Bin 0 -> 4326 bytes .../plinkoMultiplier/assets/ios-icon-57.png | Bin 0 -> 5334 bytes .../plinkoMultiplier/assets/ios-icon-58.png | Bin 0 -> 5469 bytes .../plinkoMultiplier/assets/ios-icon-60.png | Bin 0 -> 5741 bytes .../plinkoMultiplier/assets/ios-icon-72.png | Bin 0 -> 7496 bytes .../plinkoMultiplier/assets/ios-icon-76.png | Bin 0 -> 8219 bytes .../plinkoMultiplier/assets/ios-icon-80.png | Bin 0 -> 8888 bytes .../plinkoMultiplier/assets/ios-icon-87.png | Bin 0 -> 10158 bytes .../plinkoMultiplier/assets/metalPanel.png | Bin 0 -> 298 bytes .../plinkoMultiplier/assets/starGold.png | Bin 0 -> 1123 bytes .../plinkoMultiplier/assets/starGold2.png | Bin 0 -> 1123 bytes .../plinkoMultiplier/assets/thumbnail.png | Bin 0 -> 377800 bytes .../assets/tiled_Background2.png | Bin 0 -> 156125 bytes templates/plinkoMultiplier/game.json | 11218 ++++++++++++++++ 46 files changed, 11218 insertions(+) create mode 100644 templates/plinkoMultiplier/assets/Ball.png create mode 100644 templates/plinkoMultiplier/assets/BallRespawn.wav create mode 100644 templates/plinkoMultiplier/assets/ClickerBeep.wav create mode 100644 templates/plinkoMultiplier/assets/ClickerBeep2.wav create mode 100644 templates/plinkoMultiplier/assets/CloudLayer.png create mode 100644 templates/plinkoMultiplier/assets/Darkening.png create mode 100644 templates/plinkoMultiplier/assets/DoublePeg.png create mode 100644 templates/plinkoMultiplier/assets/DoublePeg2.png create mode 100644 templates/plinkoMultiplier/assets/GameOver.wav create mode 100644 templates/plinkoMultiplier/assets/LongMetalPanel.png create mode 100644 templates/plinkoMultiplier/assets/PTSans-Bold.ttf create mode 100644 templates/plinkoMultiplier/assets/StonePeg.png create mode 100644 templates/plinkoMultiplier/assets/StonePeg2.png create mode 100644 templates/plinkoMultiplier/assets/android-icon-144.png create mode 100644 templates/plinkoMultiplier/assets/android-icon-192.png create mode 100644 templates/plinkoMultiplier/assets/android-icon-36.png create mode 100644 templates/plinkoMultiplier/assets/android-icon-48.png create mode 100644 templates/plinkoMultiplier/assets/android-icon-72.png create mode 100644 templates/plinkoMultiplier/assets/android-icon-96.png create mode 100644 templates/plinkoMultiplier/assets/android-windowSplashScreenAnimatedIcon.png create mode 100644 templates/plinkoMultiplier/assets/desktop-icon-512.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-100.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-1024.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-114.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-120.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-144.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-152.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-167.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-180.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-20.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-29.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-40.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-50.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-57.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-58.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-60.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-72.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-76.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-80.png create mode 100644 templates/plinkoMultiplier/assets/ios-icon-87.png create mode 100644 templates/plinkoMultiplier/assets/metalPanel.png create mode 100644 templates/plinkoMultiplier/assets/starGold.png create mode 100644 templates/plinkoMultiplier/assets/starGold2.png create mode 100644 templates/plinkoMultiplier/assets/thumbnail.png create mode 100644 templates/plinkoMultiplier/assets/tiled_Background2.png create mode 100644 templates/plinkoMultiplier/game.json diff --git a/templates/plinkoMultiplier/assets/Ball.png b/templates/plinkoMultiplier/assets/Ball.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea6be47dd43400e98ac61876d1f194651f19260 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%oCO|{#S9GGLLkg|>2BR0pkS}3 zi(`n#@#F-FoCibP0l+XkKM|o3w literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/BallRespawn.wav b/templates/plinkoMultiplier/assets/BallRespawn.wav new file mode 100644 index 0000000000000000000000000000000000000000..e990decb20aaa2ad375727b1f30fc0a9a69a6ca0 GIT binary patch literal 41498 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ClickerBeep.wav b/templates/plinkoMultiplier/assets/ClickerBeep.wav new file mode 100644 index 0000000000000000000000000000000000000000..739e7e3d7d7ee1a4887c11326d9b18a2f691fee0 GIT binary patch literal 8462 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 SXEp-(d3kPFQ?fez(0>3FnM)u5 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/Darkening.png b/templates/plinkoMultiplier/assets/Darkening.png new file mode 100644 index 0000000000000000000000000000000000000000..fc48a6782a3c6a104b7d28fbd4d8293a00c3598c GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xP1>rMq>17#J9j zc)B=-RNQ)d`5-TYq5!kuul!ky84oeppPP8cVM*rNZG8N@<_QaS87z?NS}f3Mk)SVh z+@a%$rUB;>MFFKkHXo)!mKKjW3`~rT4Gs@ztW(@!U literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/DoublePeg.png b/templates/plinkoMultiplier/assets/DoublePeg.png new file mode 100644 index 0000000000000000000000000000000000000000..12bedd3042eb864d6627ac2ed29ebae5ad62e1f7 GIT binary patch literal 2238 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/LongMetalPanel.png b/templates/plinkoMultiplier/assets/LongMetalPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..e450acd266a06385a903ef2ce5db19d5d52ef26f GIT binary patch literal 312 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 z%0D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
Lt&U)TLkf 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�O- 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/StonePeg.png b/templates/plinkoMultiplier/assets/StonePeg.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b4e4aa91566dc88bb364e47b7d85c784f542d5 GIT binary patch literal 1908 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 by!NwIy>KC8`X7*){YzCzQ?U~ID(L?K@D-m< literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/android-icon-36.png b/templates/plinkoMultiplier/assets/android-icon-36.png new file mode 100644 index 0000000000000000000000000000000000000000..eb92b493354391ad7ce9b86d46ff713bd3bcec00 GIT binary patch literal 2661 zcmZvedo&aLAIE3SY;v7w?J4)m%u=L~}sJsTF$eDw0{YRip2bjTcf`g7vGkfrC>i-vRJlzBm8T)Z||`#=fkDWN8|xpfo& zdKJf1i7fz@eEayyUlA|WX1)`0T|(r>QSR!ZrMI9dgAXVtN2pzxVoKZrtEgu2Eyb>q z?SASZWI_d?_qw_c5Z8H(M1`^2-JG6-N-uEHZ%|;5GAZU zWFK2I9{dh(vm52&&nD@#mQ*62>@)A6o##9f*-L`N#3mY@UBK<2b}nM5YWJ3S7aM>7 zOD1k_o8MCS$y~rT;KbCOO5eILlrE>y7--Vqs&3m;e<1+U|Q z&0xDWo~}#PU6+yDV`K1t1uCt{0HI+0*MTJy6m#L5n2p|aA9#ZZzxD|vvRip}(5#)( zR~kr%qey|s|3rtUm;Thw8JzSR(zaYYQY+fy1|Vc`Zt3;iGs3Ca3i7x)bW4Pfp%&}Q zJ4iwFXyYb&peRdFtR03U7LaO2j&h?MZ*PzPR(BcSvSlLj;oN1mGI?vg?8(`ctJ6w+ zXTuD}zj@RD1*0^a4rh?k|3e^sAByzI!07R%=4scg0zUu>3uHgh-Tazp%H14Bzf_Nm z!k0L8v+94(ByOKkvZ?c~P4Khw!1^}l0j#@$EaX1HW|BEN!%OJX%bwzi1PLtSIpUMH z0~pQ$jMrRJ5}@x^)LDoM!ci<0;9qWYGrK{t-MI2`Hs>FTy~ZEI24(#lKrO8nOB3qk=D^0BFZyL1<`0bdTcZt0#Ox+(VApxRub&op*aW1?QX#xwi$w|8e ziVkD%ZzXK_kn@Nf3DU=dB#9aWvuO_2_2`haTYGPm=Y*O`fn>hzdaeh06jEuNr9NC? zVRnYQ+eGiN(qL=!#tR7EEC=S@cKTwscT;dOxA%8JF#Ti~emvT9NKu-^C{t6V1VKkF zv(BsZ74K!)@I#gAMp5wM(A&c|)-xn&vY|AWxyj`m{^G%3U%?`e9x;1O=Rab-FY2y)zXM@&e6c*5T5QpRN{( zeTkv%syXS%F8Tb{-~9Q&Z#Ql18dim+H<>ZfN1iz=$dYc{zt>;;12?`Pdzl|tiS_>L zRdPzRg&ichh`oN~RN}leD`b~L-l_&B3Yepygkud!9JAUmG!BE6BG%^I30LrI0hj|h zL?eWH8p$QiB^8wiay+)|d)lI3HzUO-4N}yBeS!{J>#v?2rRrB0eC&+7v0u8Uo>xg^ zaLm!R*(G{CT0OR;_qsE_A(oeP>zP)HD2}Uvy9Orj9!M)&osvv+@tDYJ;tMVibWx@i z1{U!GF#)?dXHoyw`QXBl=(fggXjg^+i1n2(-*+x=qQ^+9Q;Zi0x)>9->qmLYSX@?< ztA~5Ovso9q(}*`FLPyk8*$@nvL-()jHsP*zuj*Pm)Q*?e}~crfEAZmo57Wa{>K*l=Br{;Yw!FrvZ0a6oAqWif!4q=mQ0N#Wsu0CKxOkn-w;ur$lngavPW?Ykr^0dY>;4Fok75`;%>=rJRTR9z`vTV=+|Q+T7TE zj|bMnMbVvD*L8mO-P>IlN&tl?Dp9$dxC}6cH!#`4?s4bQz+%DDS=>6qG<|?S)+XC% z7)!g>d($Bo%#dd|Qc)!N01VuttN@u+oO8$a-M^!gn|ozNAiJIQ9PCmfwgp_d>-kw> zLUV#QsBuO!o4uf%Fb-B9u6~@~O6?W`3fL*-o8`t(5*?b13kz z^jfu7`<1NdYI6!&3kxiF%)5n@C9gX&Tt{GpG%*aUuPpxOW2Yp*a$3pZIaucSm>nuqWpKOVXDpavy z+TD^`o)qKhc5RrPtOy^H(57>39Vp=J!T!Aq!r;(DMGqxSokMv)t&>Gd+{)n%OHn~W zWN7S?NK;w+z_ft)CEJ)2-B!k*SKS|rm)v+1lu@IEm)e%N=TkI51r9px_(p&O))`Z6 H{aeaExqlMc literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/android-icon-48.png b/templates/plinkoMultiplier/assets/android-icon-48.png new file mode 100644 index 0000000000000000000000000000000000000000..0692c5b6b18424f08828bedbf0223fe9563c448f GIT binary patch literal 4029 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/android-windowSplashScreenAnimatedIcon.png b/templates/plinkoMultiplier/assets/android-windowSplashScreenAnimatedIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e0ae5a8749aa099b8941b6ceb56c4c4f70aff5 GIT binary patch literal 136882 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

w6L>^_QrJV)gxpy0f#91Dg$! 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 L8G&mxo=5+GN!k4i literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-1024.png b/templates/plinkoMultiplier/assets/ios-icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..07d5131b7820c13ed12d33e476dd44877007e276 GIT binary patch literal 272702 zcmbq*2|UyPAHO?F*?~4iHq6nISqfc_xiU&9qGDsB5}`wfGd329n4^>=r4%~oBy+^5 zTwTi7`leDTUx^a_ug}o8@9*39|9Jc#|3_srJKpd2>v$fok2q@_ZDvkanJy+KHq*|Q zwpL6`3hqjY$;!Y@gzEelF|kN7JDR!69`O%VU2Es;&K`RI;Kg@Ndfv4AC7b^=qV<<` ztDIj~A9zEq5O8^iMhwTLrNUQYqw(7Hq6U-f%wJV=I$7<~vmP zd0?@E*)o0q;3wmEpGMsMmNp)-BN#rkvqc)7Uh&D(hmdsfD*D2s?sc@xbswKL9{zs! zQ|RNd1M&Mv#l-WyKEri4%Y;EI*JoX({rX9LOIgTDx+++0@3z<8{V;~xv@JxNvEj1y zzU85tjZQlzD`7Tkkhl~lRiQ;O*+gaR&hEv_K9te^UdgAsHL%u^B+)`_^h;579nWMt z-UiLM_^dT!&fvx4eb4TG3fd|purHz8N&3=>&sWCfUXPGpSw`2cPX5%K;IndldeDr2 ztO`vm{6_ecQYiIc5z(Q5EuN7$V z+B0Rs%i}9XJ}t@pYxFv@xnwuwFpGHg7IQteYPg-Qo_Qr;_2$5~>$`4j9luk(+oIf` zk>_pm23s5JwwS`=a?`NRok%u*QX ztaMNL(&aZk+T(m@Tp8ZD*g^t{XM&Zo@X3ZbRVu21Ctde_-+B7Z)z*z8L#ld~ozp1x z0?c}JyJiC?0Ck4n6BiS2wR1cRo0#)oEsaf>m=LKCcS4 z?m?(VzLreJc*V@|PGzi&Z2uXr!(YSS-U+Ziu6B&j7bAKT3aNqJi!CCin+s4(YZD4f zaQ~Q=&9_hcAmDFgniKN>akTRlgJ98pI#WSkljpkcYpF-qvvPJc8m<$09+sconkj`61QV8jGkra|LfhB7|;xA*K5JUc^ z^WdAVoxb-UeIB}f#rT7>@PhG&yAQs;+}|+NB}6{P9Lb5B7C*~I<>Irlj2GWK9CvTu z8b4o_V(*f=M^;!syUKBAWb(Ij@Qn0wypyBngYvbP%SV~Rd*>XK;b%C;&FeZ-ElS|S z(aV|=Qe!;bqoEnBzlWSl@x#e1IoqB4+*1SD%L7qO&6n*rW{*H&LaMZrDsk9GlCl=u zoZ<5*BofzMg1eI;;Gs4X;OD-RyC@^R3pos1`E?h^WFZ+x0)M8=sw)8xHtl-vvGm2& zi>jTgAP3#^p7HfKR-C027N>@N301~-g|yM`e)Cb=vnevQyKeV8gQt)%X}F_jW2QpU zchg7ozEJ)-ACCY_6CGH4JX*cr2ySDwT(FcUOFHdS{GwGiJq6Bo=H`BZj$s!m7rkq&a8 zY_caFo~5&Sq}iF10n3*K&UO zzNZ&=d<=bjZI>H{V$XIL24i*;(yd%#+_XxzG2+~~`|fW=P~O4QB)F7db6l-7 zp%!}fatW?niJs6D0;H{$E`~$|%W&r#vez=n_uAOuXty*srQqY9?mHJj zBVBNGg);=`mrUz(ngJP6bZe@GT5=GK2|Td%?9FRetB-OPa_X!E7zInu)yv4i%bgbF zrInv3pF?SM(}R!SIvJ$>6G8ecDt(6SiCI(SQn3nY_pY1%RrwRuqJ$Opqlz^9EL^hP z7MEyZa7#2;kXcY5UR;hl^eEyOwAe!&SM=_b`SwY1cR!u6YB@{WpgB79^kw$yZ(|2<&x@*BdN@XU;6%&YN*lDh_=sfBs1B)*HXJ&~OZQ%QlMH?V*YyHcjsak)R z_&#-gIRh3aUK>hS1XkH@q!O~wS_+4S5IHsTv;xf{`?Z-g^*gJO65(ly`q;V!>(l4X zjOemY%zuz}#rFFz^-&ZX3F)=(_ldPfU3j#R1YIk;aB&G8VtknG&amQ>gRzWsH>2Pw ztoRv%aZmqyY0=)MI*zk;`pO|a{1}o~FMq8Q=f6uH-afi;MTwpS_dVx509&IbY-=~t zve$OC-ZRL9(gEpcUo2@8&n zjcohW^yZcb`iAtN{|Ea1EPUr*3;&qL9Y0|)&4}ZRfqLZNh2acJ?MGZ0cMf`qMj#-f zt2+OTSMUfzku)qkO;r!>&zO}u>goQ^{jEbf@^!FUl!5M zHC^790)2p8X9Y--4y|o9LIII?*h@g-Xe97Cu z50m<{;pnUGs+aD;PyAL*X5E9m;|t(a*AZc7ea*k$8IB2@$lYR@KI0h8gktY$<&w(t z?VQGhu$|6v!<5LD1PDuJC|}Qwefbp|PG9;TJL}`a&UX8WcDDJ`ikSQ_;hh{9nG+cpJV&?zi6-TAPPup#J_4g5Bu)IJL>{_^lS3XCUcqk% z^y&ZX^$FmUs`byP?ZzOV%S<_Be67R!vUR-fuLzoePChQe&#Aa=+Y>aMi@#38yauHbJRvX%#8w4_6XqJz-u7}>g2DpN2toLV?N*c?!Y z7KT7SbYhK4p7we33t2p0gmKvuidkt8t5}Nt{=?-8&@Z(5av{tRV|_?hdgn%9V`^$2 zjw{6JiOBtU`&*8P9`sowT&!4es)ytJ+fUs7(18#}kENb=E{S{QLTSz8KW6XD zQvqB$gR&>~S?u4zCp%eRa0Gs!`Q=*fL*_H2iHGt&ylKE#PmgMKgyE?Rcge|}WMH%xQlH#ZB^RsI4)BI=1&LG=jlldiA7e^bJ(tq964+ob_ z_~6qjd~!c(Vq<(m&Q3-R|08a`77I|Klv8IWz?5-Eh|m|bPhB64EfK|SqBWlJ;{ELB z2i_oYTZFKOgSST(-Fm`Wg>d(YQX3Xn z!D4F%p}2%HQn&#cUc8p)rbT&x!z$R&0h6T>LLIN(FjaLaUowv>+l?Q%Hq;aH5`o|Y zZ(y54s+`~Mvy<028a_-%y(W8A}GmjK6m4<}0QhrM`3;-Er-%&v2wotUyNG; zfbp_rPnORA1&o_VK=f67q5+iM@%~wODZgUzdX65(Rl8WbFJ^ch=O*ekgwkE;$R9Nr zBQ~((SuUC7I~Y%=0_c7g;o=i4BmdU`o`wL9#EHOQGJ=|j#yN2p(F$io)SKpsz;6IX z!HT@fB@wzjIkkL2u$FjjyA*DTcClY14`H{D(L)X{i97>+Iqx*=kd=UHM)sI0JG|6ry03ZFoB{{*W`dx*m zWDR=c#B0e;s(Gv6NCVJbIjKi!cY|5E6$_Qc(PdJ4Vonxm7*I^+C(S(``1i_DA=tw3 z+GYK-qr`>QkP7YUAfpj3tYALDiHEEr#eqof*>idKI?V&tQ;cgO$UBfAtDTx6T-9m6 z23dp9Am_AQw36o-X%ormjqYj`mb~$6{)(V&^M>`Hr<+I?;gu=&>R3IVb_4z~)vZ;b z%^!sx2F@-J6R#cQuC=C}bfld$r5Uje;Y{5Di#U@V+4}>q>5Zn#5GDDKhMdfW)K6aX z%PAE|ZN2iidSE@E4>Jy$Db{VtT?%OY` zJ84nqb)x(#+w4Nb8ttAPh^~7~ZIF|g`K%@+tJlDxb2bvd!s!%msCZ3%+3NC8BzeZ} zWGLI^>iUZW^uT1*FEs@(BXHJ zvW@#|k4>O}ArcLS%60tRmj_ffZKM88X_B{c&SSAMZ2P=$goU|E;nrg_q;Mv>c3cbIx3r}AMhiD_VtY@9*h}@PtSwqJAT1>U8Z;kIhx85xC zF3p{9kNcGvDF~1SY!PX|@FD*_B~7+}1FSMhElccl4iE7a+6hQ5kZR?PwY4}0U$w0W zIUb!ONHWoW9l*GX9F4U}364o&n81DbJ}<|qR!5ufN|Y$sAZ1kUc$_yVG;s)XTM&%2 ztaZSQ;l0Z>x%Qyu)wz@sy@~dPRO3V|AKyD*BJu;(5YJ7`?Dws_o|BDf*GzX%{8L_s zY=gK2f=KbRbDvL3`Y74#>T2GcsT!@i^SIHd*<~4Y)O#G-Jd7xjh@B0RKLDDZR{z5Z z0BhRp7(cJ;_)HPow>1Yr**f9Byr6>NrDpa^pAr$QiEdtk0##B-6nPk=^p81dn%@sQ zj|jr1?=)Q6lcPA~#@<;wq@QPfAp)fsa@=%gN20z%n2vUXEYKCOXV%%#f%a#`?s2PV z`E$>(H=>p`z#NOn9sNGpie8j~QhO2evv=DTef{8j9WnBrKkM!Ql4u1|wtRup5$egy zIq#=(BdBkmlfj>YSykm7Sy@tv99aQ2gUdc?iWcu*!)FrJvcRDPDX=&KbGCZ*r{*{t z#GFit25;c(gl+6WfnE2R|9;oO^Yf+yn*zdhKzOa$&MvRZ`04}CvlBfzxJ$*UIcNzM z&2A^^^q7V*M0*C7wrr7j?J|P=tE1)WeaRy3Y(GJ}5bI+Cu?`-X4EZ`TXr1|}-*V>8 z%t8q;&oIfyb?WhJ+#EB1hP&dqZoNsFr9m;FqfOI|PWvO8r-XKLKF+SZzA6pN$O5{O zUOoxmll9R32ysR7)mKlec{ky3rX%&B^k4M=U6$e`&B)s0$#$% zuhi9M_iIgr*k97oV*tUX&myan5(QO#VE%bP_#(QjA%mFS$d zr2BRi3mL(+FE~X2D(&1}?0Tv)p+WYQUhQ=o&!%#dU?WiS>_T*r)f!28ZplgHAS|~B zT8oMv)e4$Wnvppn2PbkKf#17#CVS#;aDpp5e%}-Cpdp5u4fuA=iJsViFqN@Co~-yB zW^K}s;uhf&(Z1XooVAHlGZY#=5uIp&G@}yPYB%m4co^>JXe)a|4?h!4@Jo->;`Lv@ zktM~*%d^I74kg$dp*GX%zKXx;96F<} zeKocXgYps-7TI0qu`3r<7oKyZ{c#86z3|SjCuJXh|9@-h4#J4%{6|d%f>UDe5><{+ zTEu0f1Us(6j3xs1Lxd&(rVk(m5BLkgMdfkf7^otAfm>ybiGv|qz+*M+cu)quG?S_G zvSu5CY!4wyYz=T)FSr8qro`NG`#L+|NQmEJ3iPtt^ACr0-m?H^vu?3{DzuBNhP8 z1rt{2@z1RhQxk(ex(jE|vWXfkmrCKwTnch8C7Qk&akIF>xV0fr^*7ay_Cfn9K4Op-6{Yuk^0O7#4_ykot+Z$0qLYo38r&GDMVZ?y_cJNWVrkUXd0dE;V;ZGF?lcr4`!(3Lb(IDUvfap+U}wO-m8dqa4eG4h z!z&lH^&AD@GrtgxqlyZS>lQafgiiy}N%``3xedLTZv5uX{NMMci(vCL#O~3V5Du*} zIl+twV8B5`l{{~jo76h$9Zl?OdDL#dNH;2F@Z+^hC6+QaY;@>V z#-htLD-8n9W1U{@Biykj+fNAj2_`UQt^M8JyJl9K3~luPJuwb+a5)4`J+?49WNi{s zbMf>!M?q?t=ms8=mo+<#Uq=lHrfqNH6?p!sEp0{WkwwjbqpE>!-UvM^ImXGcdBs}d2VwW@=^o*GQ; z?)d-y)RtJMVZjg+IUMvkLA52LRh&_C6J{9A<9YRAheHh!{Yp5=E!jCo(RNvY(?v5E9*e zcKfiL;P*|eFB|-r1Fej$+qczD7+u^+wcnY=^8-chBf!i?rex<|%Nr+*)j(Now{5O; zgwFTr#lvQkq!mYc+5ScB6vTxlrLT&F=?AfLIF&*wVKp5d_xm{h;sEC0 zGnS_7WRv<40W;bW7K{VC@@%1pn#Gu@rtKAE`r`{&dmj}-zmJ?WUM?E#-!Xv>)Rk|2Wo$=w|N9r4 ze#{%c3WnEtkJC+S@vg*JZ%>SH#cQ9rR^vp@%aDLvpwIFjc+rG*zh$#(kK@-!5?O9O zv@nhHc zE0Xd+j43W7ArO}2M4(ZDV&3OR(dw1gu^*oL3Z*d_( z2WRND#S&@VPsaY>uQ2c?3(8GO)Fo+QIQ70`V&c+NpObTa7#k>xijhIhFH)gLsYa;= zpDLEA>R=aAnvg<6i1NVv)->p7G~j)KlKP^2 z`L6QJ6R7o67S7A7mK>vlQ>Iu(3q7~!^wb-y1DaYm3vu-+>uku$!67hXYJ&3Yy2Do4 z`aS9-PY%uYS9-8z%kg;iz*S@z=7QHxxT9_WUcU?C8y$QCVm?_NJnXN~i=>=EMhICit?{R0A!=pvWCfyQFG!djr;#L6@4W zS*BB7PC0l_OVPVE(=7xj)WpGDvRWD1D%`U2vHGv-Z)gh+qIl-_ep@-!NlO@Az8X10Xuc9x2s4%z2+KP%Spni7+#iT^R(8?lFww4<8}Nlr0e*lVG$>!JlbhhURucp zxW53XY6GrFD;)$0LiNeDK^eq=3-6{yca)N}+*Z}(A_yRyAq{fP?Nr~r>PYUdR8 zd+{0k0QMYYn%EZcEH3xRA6JII=+9638saObAzl4bA030yl-|YvI7=)@qdm4rJ|He* zx|X&EN7VH%dev7Z-M>G4v^+t_*IGAri0tr{BWm!PDm~1z@H#Z?Q8S6^YI~EG^JXMLhNx9$5G{v z==hT3!RFj4)T=eb4Z!5hn_TNQ3&3};j4Trm6u1z>JRuHtBMiX<@ariJ9AAU<>hg+c zLZ)g89$4|3GTiB@!qO>zI=%bh~os=YaIsx1LJbdf;Q|A&rrHQW_I?j!la*7 zyfXlzat?iQ{5k7K`1RT2brBa~+|=8#r3}2RWlqu-bU+lPI0S{QFr&4Z2ZVxI_$L%; z%R4?~j(F|dSJSO^sW2Q}g-_0g9kd%NL#l&!8-TB6dWkkwge&rahonex>D0^Ewf6NQ zsM?AQD&R7U$Pz_l=;*coICKFVwFmE|E(uP3WqCBu*V7>Hvhvl%!ngCX-l{)g$?P zlC>3Qq>n=zNdtQU1b@wMV!OlOVkPG$Od;(N0{yx5>xM6uOXeRHxg=EvQ&w1K3|vrh z>_1ErGTjA+s_Cerqp87)h-UrM0{P7Q_YsTYH9uP3pob?$u@RlvX$e#aw+=G2fzxi- zz(JVv&RPZ{_}zd>lSR^%Uo9euh`)@)+;GxV{YDIEYuD82v6#r+aj$bykn~_6)t}G9zK!3hF&X*;5_p=D$XE-#w|ac) zVxr+%b~_e4cl?ItLm|z^CCNEY=IzJEhIDCz8Vl5&9_O=*&Z_e)EHZEEFo4#|&FZDK zl^X@yGvdnq7)}!hxcCSEP^+-@<^@~OW1~Oym_lt(^YX&U87BgXQ`deefqCg^$hEg1 zJ3H1o{nAtK?=g_U4M?%GVSw}Ijw%#^ya7v2N36TE#j0&A;_DxQx=HgNb$ngQ@^vK| z{L!wOcFk4^-8}i~u-~eP>ZLuB!A2wpPoHLvbC1NpUSZd^BgTFP^VlIh z8WIBCfheADFE2cF_}cf;PnXW#9ecdv)%e)E!7q<<@0V`#o?c46>11x@9)l$u#)WEh6Yb#uc0V%ypR`QfXP|;NGGX zR_Q`beGE!0I7M8NWS*Z{gBs+0aHcIUD7LM!-GS%qzOm`lY0M+>7){eY%-e@*AyMaQ zV4-;7X2IFa8`F=?=~7<0I^6r}%7pj_1!}50_0}HezWT$f_YuK8{RJ+?_vzsqvlq_` z%vkwh{M_&Z?Hs);r6rp>BSIH$Tk+>JL8-w!szbJ+Q0JCcp=C3zfEy}E!#>k!p&u0k z3*o*B+*?j;%I7RfJs>VFB#MipX5$MZZKG|eiG*It)3fYwL722@=Pv`F!sWjMP9x-quYGAUjJ^(^0nY9CoaY)w076ThRVYy2QaAvdH~Q*HV9_8(m< zZ=V?ZPKD+2qREYcv^7rY8=gNS?@}AOd2`?B%RaT;Y5pfTF7(1huLZG$y72oYoBoQr zUrKH)C0XfNhd0{ZY7Mi~{)$p!3VI=*|H(zZ1&yxO*orWcr0Xcbw%K|71ki*}EZVkb(;!o?FjsS;0Ghh_;* z*d=wWfNS&z&4wOk5w9=3oF$7=H`}k?EQj)H;ZN%!_D6|DNnz}SAp!@?skeu&UNqca zw!Ht3Kj28T8%sNseB3+EpUfj)y>`|8!?M2JyNABtezE)x&)vEOE~XUkJ=Uw(G4g%@MqM9c8(nE7W8;`vg!L-DbXcr4|CgLn zi<;#}Q!iJ4c#6_PbV?ka8`ApEZ2HGJIhd#WUetr-z%g}w>g&5WduX0hws;9yp1p{f zwU*NTGlLe1@$oP{M14g2%kbq>S<3eW+JQ?Un+k0NhU&fO-G?(*d!~wsMg&E0%5$rWD4ihd@1MKc zoIBnEYaiTqb6*=Po#USjS;fxU$r2o4-u}~VVFjJdV(*d@$fvM+D1+=psl*<1lfg%f zzo-IISS_?H|2SJ}6Uv`twTLDW92LFBCboE(H=j*ltfgmd$?(r8tbapB}@%{JCSSrae;}H#fQb5tetZ=8Mb&dhjucX#?9aD*i#qDd$2!iZ(WYzY)(iI zCTh5{hnVW4;$xPdd1Br5zM-)jcOlWb+w7L@AA3HWk-KSi#AqhDQN{U)ue(NcLMbeP zRWeZC_2R|*p1yp1%U zj_jAkTTT7M%i>38KA7C_y}Rs{|GPM^YBynHEyFgAncq7?&)=j>yy?K21ARN2gP= zKg!Nfy?;l6ei=@NZz3)sXg`!EU*zFC%-SccsZ;1Dn6UcyasSj@`-61csDPnaTKpGxU6hMOzvbI}`s_t1es)!;=#4>6PMTYgb;e ziLB5ka4Yso2>wEO1)dOVRTJ+yubIN2#*4M8NcIpV(VoFhzT0|4KP+1&#e)h?&lL*^ zlMoEb8LZc?%;AXA%2?}$zAhvAkK>TNE}J-JJb~K3D?EeMjHEN8T#^{2UV_#&*9MV zTPt0(y@E4Mn7x?Cemz*BA+ra&UaN(h33Uw>!d~Q@i^{-LlL0X?{w%c=;#%%Gdkl43 z7NLcnkf{}AYJr)Jn|oMeHjm0uqcjS%F`B5^a&6+8`UZOf=GqxB(lb}H8wLA`HTk^f zmY&Cv@8BKS?j(o&Ohsxgs*IjxOZB%1eY^Ki(!Lzswy!=gSAW1Ay zLC|FAV4&WN2gu&zIXX6!y5~!dvv&XIZ#!OXJ{Z1ybkMJqTy#;rv2??~a=NgItijA; zL2Cs}DcNNBaK8R!TeKG~%MP8V<{Xb2WG|L;f*YP`tSwfTp_WR@Qm18WrjVX#wFt-r zX$zbE0-2=}JxmFD7SbWunv$$Ijk5yZ#da33enKy509p#EccQb|Gqw z*e%g02NVMxTOJ%;sC%p+wDZi#y2tgAV&be7=!8vfFZ8OHJjW``auhxa0cKPRa9*rg zsAGR|`*!7}$s>~mGM~D62KF2eW%OFW!^$9VPC&XAdBiQBk33z*JP-=}_I^`#$H{l}&m@@xfq>eQwIwmB~i zS|V)^ZOQom+PWLgye+LHj(g98r1I#Ly?OF({$1W{4YU2a&?{W!{(TH17vLCH=>Fyy z8u`3LL0G13O>AKT6&ol2C4qT6f4Qi_A5ZiMe+yj5zyzePj;y#X#ly>FCvGzckwsbn zSwXzVRLT}`2t|;U?x#F=an-D?hxPz3_MGSyr6}-SFz0aZaG`?Cds@;PEj~n=vCYhb z)MG4O*Iut_PTl18G53F(aFZ6qB7dLvKsSKSL7=nOr}*M3K`Euc-`V=s%xUsr{LK2a z5*a%F5mdrNQj@a0TWHSkn;X3VoBnyC$FJI|>l?nIYw*d`ck_Ho^HuawX2E52>k>w)GEB06H z^5s$(&j2~H2*nPO{;`Gj`NlgNJdYRJkY@*P#}K4Uk5|?ug!r0JCbD;r6fL5{d@ETRNZ9N&AjkRv%R>}z$r(PPg%|W_ZIo;Z1z6JiIwQ!lPP^3s|%r4cJ zULd8uke1mtx2cY?sMTMSUa)_g=|%PrMBv=rjhXLJk9~`a zCe%s(>~$l6QokOev0gNvB!F~GTV5#D|3Je`}8?D~jizXxX;RPai_sNW-e)2mi`s$d#x?*zwwJbLVM|BJt| z^uv5$LYp&1Splh->b&*%%JDOkB$4Oc!Z$=UQ9=J|+x&ax_X78Yat3*>|Ybe{{%T7*TahR3=gP+-uw=sx++=k z(mBW4;2;Aa&g78b4Iqp^~QN$$6bEB!8$5!c;G?wG~jo1YeZtbKUF@=L)f{zt`wn-^7G@$P-p{k(VRZZZI%<8l7!H+K(5e4BI& zF4>x=AJF<2?cjN*XHxuo?0>?*-1kb7w~2s1ks6#Bb|mL=7ALi7xYr~+O= z<~2pVCI4AI2c%7Xo~~zTU0C@9x0=%M#$+BDZtowpBPb7k9nTlg7< ziQdtsuUEN^7eo1+-t%K6RzZPVWNSoh?7JLIzWHhu@D7j>h>d`>5P?Bsynq9FM z7!GiXr~{l`IMe{=Jyo5>NzYv5oS3;9`2q6k0{}+B>p6=gg@&o59&8h|9QhrEyvr(g z&%ANXVyvi%9Ihm%e{)-1BjUIbEZF_gc~FPya4cqV_)U^vPmC#pmfY(~Z3g z*UNv&qFUfmi6TA;inSL_Yy#SrK+#1=CnedI>VWJ>g1+3MjoFLJo8=8k6{UMGpT}Z{ z$J$cEWFN_gWQxHm(P6Twqz%3*jJ5EvE^xyPTQtdm9CyxUk!60SDSug>8k5MJ$@X4l zu255nN6Yr1-acFwlHyJdaX+>5)pN!hyM-6Nt`>Hel}uYWRgyPjARAS$iUeKPrQ z!&_Xj0}fsyo2N#|Qs)!lVJd$+2}B;Owa}(>79*3rmp>Z|g6`1~Cu7!mwCat}w>xVW z*+q(lga|TF;Ip(}+~oFLZC{WqU) zHo{OF@2p5kD3MV&SW|8juSQUo+Ko~TTsUwB;B0Z?N9`9umsZ02lGN@@`AZ*Wy*uK& zTkubNDPnnVfNzYJk3MyKA#Pytk7npZaIP-0uvZ6&5b*6LR2Y26v$aHM)T@R0Qy|5ZK~C+*EM7BV5n1JlLDp=~Ad>*!fX zrEVX*_w4JFm>4HSz`h`;mVQW*)oVadw(QB?ABgV-+Vv6$?errR0uh+gjq+MzOX3ia zc{rb_%in^2qU3jxf+dR&oIne?;E%MVQFc^+;)e1eoJhAH zHe)9W@CauGUuO|$SJ0i{#D0asMf1r6XJ`pLU#J!+W!{b0ashCARwhV33RHG&n-&Z2 zl&!~rjymSBqoDb2YdQn2_uutgyn zkK~b_0GK~3ZzI$VvJXUlK9VZY$=gT-radky?Kb1{$lNfqcDOv3L|o7!B0dQFFa_O9{bHKlCnM1uxI=5@l%_q z9g(`s9<+bYH3NU5ReolHND;u2sRMA2*h?t@|3DO>Hebj%`1X-JgbdU-D2E=Tx$$n$ zZ}LBiHjXCNAT81O;={q|x62!DmzzH*%AtY+`AAXkq0XbKH_I}cK^86t z=8#;pa_mUyw5P<^)xpn7=9?MhD*6Yt^ruSGcgZa_@O(0Wc1ZmU_oFoeHRYb`$yVxO=j!4|z8 zY7w8e(E<@EZ6Hpv2+$AuNYF{PV-kt!iEi@!Cw%ktNT%L%lQIM7@zJw3HfMg7MR_%I zR-@G`uTbbP)GBFa^N#-$bR{=$~oWff6aZnG%AloJG#5h&M&wC&l|J zYp^?6WK=a_y#g1C7c7^cFP?bdqgEw(rFc(|oIx%Fki_hkGqh2Cf^ul5xm4eZfla4g z*0M@Q^XDL7KD

l^8r%jlSGevoSCVS&<0NyFN|9IT_DH?7+n?bdy;T1`oHARESc% zZ+usd3@1@4G!l&Og2)O(Cj8E!u5y`_Fs-~khiZgFmC>@qDR5ST{fzW2(FW?pj*HCm z@u|dSc9EeBEvuZ4L#@}&@`jgf#|*Of%Cj5kS;iX0&5`B$U~SoW9;Xb*2D`FWP#WRA zATt5{6(1>zUQdNLBgetJUulfwX|>Q@YV3?P4Slr&9}X-JOakdLTzSRZv!k`QWAx?b zp~fjDO&xvnz~||LHAj5y_5bA(XfXwKT>mUEs`2l6QJbi3TUV?m$HMgnVy2#oRe2<* zY@QZeX<-D^2@FpNKDcds2Kzba!wI~JiY(yb-Wpln2AK*ly)6aA1A*cq zHQho!2dg@pUAZ5;ZU(YVPal1-leU4ry)iK{BO$Y(ZqY1gn;f`FTK}Xfoe^#A4KhnA zK{5bZ|J*KCb!VOi2@#&AB`8L^nYgT{kGce8I$vH6RVG-VZHNM-_DR$L&byzgsnJdta&tJtH+#H*yB{O*z!Zq{>D7PKJcwv7;=rcy;7` zWlPa*g+7!d*h;NZyys?-_tSHs*GtVbK}s>&@dL_JU1A<@HRbyHQ#+YuPY$-soR~}W zBd(i*$aS;NS8q(GpSybT<6k4Apow=N{)4oE9~U)`m%WDa+W3}F;bU%CG%D8*sXc@Z zFD{d!nR)uGfM1AL4=}h2lv%`|aRhy8p8g{>YHqnHH5n~5Bmg%xP-n>n4+!=PztayO zjxZFQg(r!YkXZ-+sY;u-8F(&r@ItKcygd6G{8D|M8lrYn7)Zea`+g11^b(Ep3|vwn zuN1T7?Kibt)=O-efZQt88h4^^`-@MbVRz*x>GqP=h%tKl0_b-hn13BDnOjkRrHQ6j zzzq|uxrFbX`G!A@zZ2@*%6d^bNgILB7m3pwhDha}nMR1PBY&$3iff2rhVm z9D@RE2;r+hm#hR#;H_bD0C}SF)TbnGiGzs|5LwYMn8eOz60tKmr}8W_CPGmrILo`n zL-d{qcrQPjS5y5ff?SgVdVSPQ?!Cgb#!o}@(pRq72x1qZmxm10V-0!=T=EhTl_~+1>h+t$G|_nGM^th~bc>01;S%{l6_m&$^1Xfx zGBAI-lIo3E+@6KdkC1#`a&b*Xi95Kyar;Dbv0w6UMjN3~dE0M5Gw=u{5tNan<&GL&h!}c4JU;e?_5A@{D&juyY1WAhVQnq9(GSfL*;*g*9=wsXg=_~vZsM7-j zMGJWBEaJmuWw@TwU!m^HwhvW_c2hiKO+5Lg_ivysh$$uO9k`(;_SNU3uRc$M8g&8n zT;2qD3ySB8JsFvcfOmxGR%P=xt!J9)iKy#Qu$Il(6eD}GYLqKF6RzGk)tCX6s{%|2 z-$KQ~)s$-cy?&(cayKDS8gJn`Wf%P5qE z=kW^L9BLzfKdMc4{k`wIVL~{s=G8cUUyxWav7Jr6DGuT=?n3O~wCAsfMvz5JPLj-H zpyP7gV-w^c$LhKjNGh0fdseq;fCdko268=bBTR-6sDqCs$%0JRe?%(rj4huD>l)5t zUvOvm%jM}2oh4LFLn~Cu{3y44-LIiH;>@wD%1x-Wq zeAA;S^Qi0B7hV^2m%nF9nv>|Z0OQ_KIx+hg{dM+{FW$4fj9$RS$7aAaG9oFdSG#`! zJ*)f$!Vg)QJ#6;^hw1R^;BqLKa%wELe<0BAL6^}Jtg_5~nqbH`@}2jMw#!jq*a(*Z zWQ2MKk;=WaidzS#zky3ALI%K6zH_cFzHVY{@g@TNpu3X_@q(4Kd&kj#*%T^_m(<34 zyaYMsOkD4gQ!hV9ftV}Un76TK7s|f?(c4u2JUle~dRtGTCV`Xu)N95z76%MY@Gy~K zWC{yKjje3+N>4;CTiC_f1tXT_NUgy&3?bPZ82M$2yim}|$dwEkne{YnI)AC^Zls)M zRf(hB)CzPDh0n>Z`TENoi7uQ_HyzQlVAT^o{z35ZUrk+EvxO~I;;BcHzh|FRZI2|; z@Ujvd1I;f*gZlx?-V#@C2-n7B$lBQo4WD~qfY>7KSXrDAhq|7Idy}uG9FIO7WbD%s3AKIdC2%^G z|L@gQ(i}MF->yNuRgXn2soS66@3`hHRCU+jy?_YC-~6{^u1=m*3|6jjVbR2#R&*uk|A4iL}{Qf$0MXCVCaJyF@RO{0(a zNU;Qm=)*ibBToH1aV;8J(8-O+bqzvp1)ivQ`|=IfxE{;rm%oo!lg`PxZ`=;mcokLTgOhme=q0gH{ML1Gh%0%%Cp^xH8_+m zBOMG3xqgb|JugbNI^VZepuu;bZU!?6e)BI3>R%P;FxdSJk-MQ@yc!mek@@Y*c-gci z_qXTB-MIE?X^N)KIon<9rQV@F_U>5Yl%=ES+MT(+QfbQ{MjaNNbKcrHeAKb=c(e4{ z*sx^ux48+IY0i6`EfVC=C;z%}#8>X4Pq29YoOc%AQ5JJjh7Ro_ewrcfbHaAE_@64` z;<`snqJjvDQYnVIoSA3ax2iPbmnb}`S3WS^{N;4&U*DvTTwi?a`cQk%>9Zc~xnqCb zO^p~G`1Yl1r2+2CNtQwRsfO@nU#ngQjt*WQnUg$gXvsX)otE7f*C+?t%g*$pFB9_L z%pHlwzjJKJpLdFuuRzoyHY(jf>CVt1YPB2-)p$|AQ?5HpOhRtJVuo%?F+AZ#EGA`0 zF4izbpB8BI)_N5!-R?W_0P0;lIV0^5Cgt^XE#gL7cb(LB;#%cZw1#}zjibbP-xK6Vs zug@I4_x(?%?YlYnxT|l+GSkkk{h{?XvG4DNbzi)!XJJ{LRvYq?x3husz~rlROqG`b zPF^PFf%c-Dy%x^LohkPUgfmn0H1dV|=U#L^y{K^K`IoUVyMf+1yO1x9?nx&csC%ot zKFe9l%j9k;dUkM+!NI@2WcPR7?JB+-eyh7<);xmxdRW~YZzZFg{u|$qJ#HU=z*%TA zsDzwCXHKU~$_n-cN!YW@$+g6dcAU;x@PMLSitTLTd-GL375NKWrls7p{c|y!oO(eS zo_FJjnyhTS&?4nZ$|1QD@7~z5-q?@_g*ZxH0Xb4IV@K@!{2kpf67{!&?9PX`{?CEz zkIt$(dHOf`#`JEFjf>O8CL8yg)ZO``RWA0yYW2=ETiGHD&Dd}JyxRG_2!h3Rm! zN;9@b4*A9)+R`p9`lTF@mS02^3$n10(KC*_i zJ#pjrW@lts%Bp!MC5_(0o_T9YEeh{qzF0ynC1PZKiJ!2tEr&ui zHrmZ@QOMLrHRR9NO)*Sa$g$Pl$&@&CIFv9TWswP?G+&iZ_i>UqMZb}vdl+ZqpV*ZOIP)?LkBdULR9clOJ!mHwMXjs24jnlwHt^CvCD$txQ$ z4BQ^ByE^*W>&Kt(mb|(fad%_H;GXJ>s?+b)NgbK*Z4|pirFqZB(ORd$`A9k3THO&7 zdb)G^J8RRUj`?%k_20!`m{yTZ`>qZx&Tb_%;CT5J9CBtT;YEEw%Il+n`G+p7AS_;# z<4j@j;g=_i<P z_dD+5$45s-n{49e1b$qDT0s)j)7@qgV&kYJwGfxlhLVM{Z_?_+j|8T95MJ2Yv~WT- z8ns4`465%=wVgMyxKNGJBURcdTB-W*{en`@mcv($7@>q|PYf8e8d-G8ga1R?o5w@- z_W$G6yTw)%vQ@@DC~LOJzLT{=CX%fpGK!R?-nPPI581M%g=AWo4DP6ju@yzKB{L+V zX0i_E`#MwI%ja`{{`ft9rx|9>EY7*E*Xy}mLoyg%A1`?03m&Gr_p$qju?)rB_p7Tt z#O1KGG2b_N8hM2(g5m$T_TrPov-{uTw~WcyvX1K8@`KlKRBsIR_4Oa7AK@Q9r8#zC zPQ>hem9>soUXSVj_hH&ZK)nnW7M3$T{O+gx6%4!6MvB9_^*J(58`#WU))8#%rf^@^ zhHEdKJ9l%;x4fgRP>@Ua#LE+Jit&2_0oOyPsv1{)Ru*Ovatf$@+ANcDgx~N~w#tv} zlCMrTA`CPqjJyt-Ygp#&1wz_wA=8c9oAuMEH@ZSwcKc-Xub~Sl6;)Z3+yI-31Pa+i zQQk-`J}|jy1yzRMNx{9jXyboZ(B57Gg$?#F^=Z0*m2EfAX^#<-FM6Cfx{~qYHn8X^WuVX(i>*DYIJ0>cbJM27=8c-@C6uxr< zHa{aaN6BnMi_TZOT6WxbD@_N2riwh=o{Pi`7ptbbqoW=O2l&R9=>vGst zX*O(u{uiTWAK=VvYX;Zam<6j-g<7u?9|QTxl@q#H7`Lpcl!~!($9}Mhhn%nMjdX41pC(L zE(Vl5Z;VRI(zCf$;@*k<>3^%0b91zwpt2y*_rK9t6wkw!OrE2T>(;MdfAx(L_3kpR z?|l_;q^56}*Y3Nh(Bvz8&@2ODZIa!%pGM1K?tJTA{!(#PS-;)|^W{2M@AV3m;dQX(TZ;FNNz-Mq)fB~qD;4X7_U2r}2{!cg{6{lH7MwB-ql;1#Z0^fMwL)v8^*I60*jfyC*bTFfI_T#J==*G}{Ca5i8}5PL?mX&Z|7ki+hIL5p zMDiu#k+XV(m5pojEcpQ{rxxT#6i<_gxT=R*tWcOc+g3;EJ%|S3b>AVZ%k8p7u4PC9 z)fda@APu#Z8fmW49c!MGVUcrQ!n+$6ZokoMt9cIBCGnxy0{DJ3HKX+#J8t4-92}p- zM&nDrpv`cHf^3#yEqwB>4}L~DfZY9OOuWm`NFimeD}8)XX#d34iE^%nQ)qc_sTKUb^&UqH^nL`qNWTtA7qQ+EHdXX zv@P9xg==~HM++xf1CPEXg???q`o09B&lm2g`bZCEW8gLXVKVG;fsz=2i+xQOnoKW5 z1%le>sUC=0qE5Rr!*y2|xPKkL+qd4C!YSr#9l{z!nTk5#;f(8Md5eGZy5k#4_d-{q zd7E$`8Y0bIPVtXlLw2MNh}RgAOZS3K2g$u%HXZ+HTPY4?_@t>9!7wKyR%O!cOFZ%t zjiPk(>xk-rwuTpEv|?ieN^{?AnY4VKqTZeS{V1EGt;L1TYunW&?jOFk_c+=TH0+%- z8lfRm(X(e>*L8I06Mj zrk>5GFT4cNl*@S6?`4W2^6Ed_n3Bwi>SJHerF!+8L6`)4FvYUg22j{TDcezX@g($N zHTV3Uq_vg4kCnRm9xc`iR3L=~l{S4iB$Hx4<(#e=ZCYjsCXF+S9G_PHrrqe(B$zF2L1bF0t9Y0%>prz5_|j#mMsEC`{ec=8rr)Y-fL!1`u+N zOibLI42%v4VrrW1wVwt7iG$l*6kMc1AAd9#=r&9+4gmFo(8*0J%Th&zkSlf)wt`0z zJL^T*2>27nD&Ax4E%C7n8&fnkN?sv~-PW%KTM@?MByTM4=-i!!dD8pBZJpSa=_g@J zywQr?*Ioz!`TQcnXhb-Sv4q3ZvE4J*co5_n2RuZ&YG$)+x(e%}0JcgLjx?auI3N+G z(n15lMN8x7sTWXZORX(SWBIOw8?%6Z(?e7mAbY8ZY^pl)EOMze8MK=Sz!vH_Ji{E| zB7;4K6nxU?6`PP4O2tffFHr{cN_MIht?rx!*-IIlZ}&eS>qenL@bI}v@~1@cXvNO@ zGYh%VKhn!DgTV~_x(Xs_MgyhlF$Xei)TmQy?Czyba3%DZVCj`q6-7Qo|L)C&+LYxq z`5XES%^`}SH+@Zg75mW3?Mot`ke8dGe2#!_Y&++Wxd=-gpO&B-ItM!Jym^Qk!M+=L zgA5DSBkCZCQ}J&y+c~=reK9@ON{l(GqUf;m<29mU47^*4IyP7gnqy;*z|BLH=ig1g zn0mRLl94KsY;hGY@wd~+{Z*l2Md;1VvtH6D9=0fyYLQ3|dta+{Esq^I(2EgkQEL-R zKPQ-L-n6PH-NH4-md)-Nw_XU8fMkexRO2cdURU$u%eg3eV0;Df-0@SavVEPmn8xd_ zA`vLN5Bjj>J{T_)UECXyya9%wHW7mj_m)wA^KER}1^WOPkDEJzWRYs)huQtrrFW58 z6zI;(Fn2HIoJ{;__}qROa4y61KtMIZQ7u+?vf%rt}P0wKHvr5UWAm;Dc_K`1V-4DJ_a835F~GQyuPs(#yZZ{1LYh;vBXC ze~m>m2zHLk7L7(&nmLGvrgL=vHE9|Uzc(Fel}%nA;z(_Af^e}60Fg6k=uIf)?&c=! z#-A(|DdR?R0mI&CcmR6mpi=3XYZEQk8!un z;(D@vautaB)2F?N({|ERUKD@FH3J;P$}u9oe;X#1G_Q6v?oJrw7h?$;D6St;s6Y1l zg^aSbmQ+cwmvJVCqZt3$rubM}NpIS9R>-jWy{_Zy@Y*jo5%tGS44#(Q96J2RO!SRK zg*P6b)f+zN7oW+eYto!i@>S!;{Si%i%$s!%#pflZup0MJ2U7wlAuTGP+#~GtcOpi} z^mz(3?IG;^mZEU@rqwcP6(oziDKcfys|qZ+06>gYB};9JIcMXa0#*mZtFOQ=cny=r zIqJaHl5|BsdpqDoL5#_%BY~Hq0x<_QHQRnX?iqh?%Qf@l){FcjF3GQTKMX)rFf?%S zd~M^>7al;$vCjFicHqYroA#bkpA~N6n=ocPg;N@ zSH03M#E#EicW7M>uWTx(1M=+aPuPZ9cM*2Sh2ZzY#Ko(aT?N2CsVS15a^J)AQnI~z zm<-P_M_{ZT4_jX=@sZ$PAO*ani4smt))#%78J8hSE4Z=R;~uHS=+i5-jRNVNe^|9P z_)i-2q6Wdj1r26M3;EaVd{&luZ)FqyDk=Pci=2xxQZCD4Ccq+~sl{DXCS!q4Hk}r$ zF*=Z1030oOFtsf0MS02%uNznNU!B}w%$AtG6DtojBw$1+X1L<7Na zS#lH>2a&70v>rx|B{`mKCa1rc05#MmHDxd(?GlJT20!B8&_W#mR_dwIt`G(43Db}#*_luW}(R!9b1|HYC}`Xt>7YoHK&PWM*I{TGK1 zAAWNj++CZTt zo*fQcb{36Rjnf<@p1JFgdiYHeiq>kF_+2YTKC|RU?Z>row>i6r@&4byY>8i zn@(Mc(@H%G5S`r4>5bo0s-2Vm#xg+RykyISz(zYDMfD!xUHX;2p0-%BJ{bSdrB@$Vs=azSZg&XHOEo z-?J|-fM!4XTuDN8l)FjlYD|~+@3sh7DsNoD&a;?u<*#V%BA-X||D`Q<^B9i7A1c$l z=N9x;KES&7))St)*#f9`P7_N`S2w4Xu4UW8k^)7OnY zP7k02q`8Xcx0E|7$a?>cN%7;$2t_VDl3t#Ms%IYEL-DIiTpPsHN){eR^5x&qZ@~(Z z{t5jRPq#-utpRtVBd8a)Jhv!164=K;(q)f(U?d-L;T&&7blT75$(Fy26G?w6y=enK zDiJwIg7OQFl(4NlJEi4KHwQw(rS0{!C9U;XielnVqk#AdjY-oPX@XSu^}VJBun|fz zGH7(mCPL}$U)z=2Mfdd$^w%5wRdV9JzFa%oM#_OD&Gmn=nHRzjMjY`v@gwzP|redw$VD-N^!@`sj3Lm}T{b;%}H(Av~lZ^O&l9I*f@@|hV6y@iFYR)Uo2gl z+Q88*9-eaLN`{5~MR%U<1aZU}@4E*Mb{6+w%NAc&G`D>H#j*QB6_p<=hnN-2DezW} zyRlnhkpAVhdC-@)oS>Mg{{;q-~p|1>02zsWz(LvDgZJx9X3C>E1qQntQn z*IzAp>!6|lk;tH3KeiIzKvH|e%Px|$$;rAQmt5^S7yPSzWn1bA|JJ20LJ zq)wCQC+QGLpBGPLN9{B8CFiY!KvsZUia6Qr&(pQK^Uq5pTETNw6pJz;u9~!gR2pAv zcjrl(JXxFkx>X8JvJcIw8NtKDfb=Lf^eh^cMQOVG;__>|!t}9y+5Q_KKx>KBceY-9 zq`!`^V?&GU1`lZf$WJp5gevlX3AX6Bh0J4Mw;W=iNpAN`tz9K1Ux+ z6*sz`n#Pl0=z>mb029jr9p$j2N#$20`_t&On0FCp8E+;mIlZ~gcl|ssBpk4mlzP78 zd`X7+#X|ir*By2yl=7zHzw2Io!=1T9ma_;P&>?g>9@6(iUt)h6k_~gf|C-CDzKK;a zL&48T4KRMre*7A-4CAm<0^P{TLFP9w(QkI;V1ts|xGBee*j_(nL}*vxi@R6p+fU1B zR-yQv3=5ksh^?d!VyLHd9pjPb;Ku)5Uv9o&%oUfaCYKz?VN#g|2(IREW zH?1d)4{RrFm0L~O0iKy-_E8y>j| zH~7(qk^9I!L#b1CcKUYEM;Eqru-)MomE>f1@-o#&JxR??yFdK%-;&w~g@P5Cw_bdN zVB1r4`djaok(sl|BG<}*n8r?W(?s_hrF%C3!acnHaP~z|Cwom(II$K61aYVsHfR~R zLiM0pl8`3a2$A*StpPUwh_hC|y7gGAVbeF(I*n*#jmyx0UTd4EOvevJU#&~(9h6Pc zPnAwSQvVNs0+RAaoU8U=_7#kPZaFDf`n}(s0`YFnGHy%TQu72Dqm)==aj)An02U@D zA#h!_J7zALVRQJBn2GoU<5C#*fQ*2Q9WE+mypzTh^}Ar4OXVjGDM!r}VHDlaQr$QZ zWhnv1Hw_FF(6se1YM2x&4uBvIjt#>1Iru7!i+1o;=o=Wk;NauqyU(#7{byrCzd1}f z&*iJ8A%y}3w5S8ihV_ja5BKc)6{vlc+3W{=Nc%5**d5a)6+@EkIb-NwE6H?M((S5@zXmSUjtckB!kbM|L{z-Y`18vFY>1rVjQP#dr{B`q>gZWB>y( z9$mew-{B9H8l-UZWN5(&0QzGM?Cf}8_ER`FB*ba(ZOq^_AegQvDDYgp@^?w_-7X79 z1BnRELfii!%r#hf`4?gC7pfp4D`l*(O&tl_7|F9o>PFrquEQR8ex}rOk@Vw>RQg-_ zP95r?>ZzDF2F~0pH~R#@s=(Yue>~O}{Qf6(3m50W?n8nrHai6_ffokLn-W$e(+!=g zPF5Q=G}JQ&oD;9uB+Ds)u*h?EZ+@`QF=0qh-4u^j{hKHz#lZ$=^pKZN5{0xe2ZtO` z1zBn<+YUa;-?xb+7#SXgSg=;N60FZ)pBvnG*5Vb-&5rtJnEPGpQ1CLcJhoaW&{N1{ zWIblBn@@-eR)EhU-~ZngU(a46rq70Ryz`zNPR_=xDy-T3izQ$SpM{Gd1Tg0%Dw}qd zp`WmOcLO3lhXs31kkE*iFG5zEq>;QXotlQX1N$!OP|PQF-t&toq)C>@Lwcp0-Z%79 z;6W)%Gpsg52AfLt*>)qNWkPP+wLUgsYD3IUWEe%eO$nvpDSvN3T8z(!ZzCU1#>n-* z4W*#dSa=NsqMssEc4Qp^C3%uxu+ZTBKbEcmMe*-P77&XLEfW9T30t`R=j@hlkIsDh zU*u4cz^J;Kjh0Y7r8M%zlUqC@!|YblCf&R)QqXt2lh+{&+YN*Ti-O4N46-I8WvN#x z;o{fLOV|oeF?I=dkVI|j=7gL&mK_aCr@Stk5wdrXMrai_)xWR&eP#2;P3vRtZ-}+D zL$@45?%{C;Z{@aH@0kPGHT|rVic2$o@&(Ca@M;5dq9xa^s zInme~@a?+=#JRy7PKKv+CVopF4*sSctWdxm5(1qK9$_1smUpnVN$}h>V*yK^zB8=9 zYqBoO8=KWUzTePycHb~Mvz?98Q3=C)NfJpI5)8RFHmLy8f7|GNP$u`eLJL`ip=4CE|PHuL=G))l+R~j0rA2r8!FMV6o-TYF+000IUrS#<%FlE z#~da9y0!PpUb&)7a&ZRU&PSgBtA=^!#GU|7;mlLRBfG_~w5J~_&XBrtUSihqIeUIg zh{F!MapQ3|LA!AanIaREifsZHDi}bk$od#40W2?hmv;fAJ+vEGi)du9t`y(CjS_&W zfAH(urj67zARN04ztX+yH|AK>O70kz2`uFhvi-+q+t(MLy$~6#Tqn*$!L8`cf0EJK z#?bxwZE0oQjx=w3MMaaNdu2jDJ4h=y1$f`#KecJkMO>(u+soagBNi?t9`^J?lJv~MvbAow!tuX5RPdBX#KZl+3 z3-ae$o4aiEm<#a>YjY3G78)1HI9#35L*Xi1&@g8gJ zY+5~}jUm~GW?c6d*^;*ERUU-WdV;qfR=|om@p+e^$?~!2qfh+#iqOZ@6YQ?x?PClN z3%Zh??eIZYwO{lmX7t5f?y{aBYL12nHDoKfk&laLT==-Ur7(Z(Ya3%~%q%KDkU2KF zG^VGQJKGScYugy~(@itz=kVgGh~)=eU6Bh6_rld#z3@xRUuqVXzg(>mrZ}`58B@pA zXwSwrJ`7x$qlk1}K6zlF1lxwsn$9q4wb5F>oRUx8QaSiAT#y`pn{`%j;J9gtep$27 zdqi6-ZVy13nXbJ`*&Vn{rvTy>`DkY2jqHhmr!RNFs6EdD>~?OoRAMly`JnI zUqSkG0ny5{=7%Gf&2#3b7n4;DI+JU@BgDlny~wdI5kX(S{I%arq~@%DTiFkz=v}-2 zY?(N`D`gAbJ_9El+Y*a56iawhj8;h~<}pEbg`MW3I%EuyNXE@xB_1pPIHA<8G-k*Z z{Q|j=Oa&Ej16gOs%E^9OmqzjqJP&@*^Z2oD*kWrdlabq_d+AdpscwJ3nef0Qy4%IK zs$+vgY-5K!24j_Otm(%7Sl{y2b_a=}m=qe&RGS(kmXym0N6JfLh$p$K-eI^5E*CJ0nHnt^BDe{Cr7imGIxmHOqYjblF zr_qE@{fU#b8Jv+zeqMg1EpusXj=3`4AHFb04_n5SXkYmHrIXc0NRhGH$ktYLwf8CM ztT5$1Mz|^#1_>iPad5$FwMJ%2yX$g-KQzH*vfAeUn}fwI3em*Vlmq?hGd7V8K@99= zlA1W9wM*mS_An#1{<9e6Q%cWptCSPiV9%(2^{x1QeXY-`8wcBO!>ch81Ec`L@COyV zH%2h?Z2#Gmv;9uba8up`nt6kRwGsX51QKc>?X0IQ;pj7XX&uhbtLDWAb+3V1({0iN zq&fUqOqG95P$luGf=MLGDFcU<6)_VrI#1by(z>OR>XD~Ftkwaj-*2SRDn4F!eIcaJ?Ks&AWgYrMGlWmuq5 zZz_vPoA8B?DuvTm^q611*yJC0uKIg|`zK)m=KFACI z!lLH9A|@u66RTbE1DZ+GX+tCr7%Q`3#nwpD@s^>M0MD9f`8wS39R#@wv4PD5@pi%# zE>xjLzOPjmD@Y(H;jQqF50yjOY*br1y!HBF2#(_m2OoOrjj2o3;fC;50Zt)SAtGCp zL&!rdk@!M#fM*u*s5&{8xPy=)pMaGm$J!sJG@%XO!kARw#1*5DLCK&wwv%Hih7Zk$ z_qz$dTFmu0DINWyR*B1$WR>HgH1^bE^H`InUYNqf0r%dp_HN2KQovZsW|^U=@1K4; zxevRF>RnP9S$qAMKD)N!zb9%nyZ{=@CQtLZs%WKc)Z9}4Y$S8)F>^H@sib)~(SwhA zP?Y1Xeq)Emp7M~wx(>Q9zg5YMTzbpfLzt2b6|0etPhGI0iNT0Ok_+(32^fCEfB>Qs zwhk+(m9)zg?>L{aU^NdI9U?WGPT_(5`Gc{8xM>;2y=hMqdv)@NmjqT!gw?3>2~W`p zC-)^hbx!1eb*w_Ix7axmZtpa~!B=>w`1eJQz$32BCB50xGfv3b+6N;{@>6a9ASlFj zN7-+`)ng*}=B1#q``-D(vt#iKeKLi5`LEsew3zd@H)dYmD+vv_a4Do$hFed2b!9|! zn9*0YXNdV(zE3#xG!gzK(F-mQyB~BJ346Zw`OBYe*1aEHXQJR$;-BGkhA$RvY_Fbh zG8TPiUxVZIb?dIIvoJO|T;b2>XMYW9HUo!;ho^7$NehdNJ%!jg+XFz(pUVe;M}bQf zSVdZ-SumJ3c>W>1?7GXX!OS4lvHRzMRJd)JlWmuQRBXo^nPdG+p;3|Q$&J5A#U@|# z(uD4@!nLpT$0Mt2eZEWvcVU6<^0#{3OD8-BV}E#({KWLm4+q=!Mlq&ZYutXmJU{dL z|K}VH8mDrm?za5*6X%mp;8#0Z;cQ>=>KNZE0CjsfZQz)9tl6>bZ;8dH;)J+1^FlSk zX{)Fpr~E-oWUTu`HfewF-VXc#s%k6k394iwS5Z5*iD??XhaFzfiUOQc)3 zM6wEFF%bePBzaXgAw`@^7p}T9%SZV%?PKj3j9TQ4AV=V)`kooRi|3XfDB2!iOy>$P zmtF_%s`o3uG4lpB`w^9eJ&lpcB9;B9pNwrR2%iE35ja>zlx3X8R{D$dwc)&N$1e5D zI&H<`svU>LXOmkM2q|aBE)fVp^(+4Uw(}YFl6}Ghoe~nRD#js>SZ;*e?Dtps~c$!>)EP{Kbvw8kXyK4YKuw; z07@_bv(?x>+8r(j1(T3#SlI;3wIsa#H2~OCAPMXbC-9rtBhzONV`ZmK>qb!%f;@QQ z*vGn0&>RFu604QrR(31tcOkcXZEkM4Nupow%Bu=mUMX0t#q9B}89Pwtz7k3gq;Zkjx>HE;gSi zn>3Xa-TEv@1B>cEJ6(pzJ)2Z3?;3PgFO6ntVzx9>vGvg*2jol#~%3DALQsUgZ z%C<mkA6WZ6M}M% z%V}4NhE^oOJ-oM|0Es`^$3@YmlFnO)D?G`AeUGZ+!pg=3Il7cDFcwEw=i0goJK^;5 zq8Kt}vw)bcH3trAPo>8f=0~p0a?eKmcwfR`F7uBa7uHaVY!~d|RJ`PKAoTq2?dL+7 ze@5Tt{(T9>7|?&k{-Cm*6Ak$u*gs)SK*=u@_m81j65Iq6gaXwN97m25`J$BlqIQ3K zZOUxNMUWN)aXHHQ+U^s#_J^Ha0VfcY|06g*g!v-6$2}q}aP{-s^rczm#gMh3!ooij zGIXEUtY)TUZn8>Ok1;eG6)_(ewfOVr+rZfi^Z(c-}PqHasex2I4r7_vdg&NOkOdw z21*K`M1l{59Pn0eF}n9;<=f&{&`#Am{aB<0ymc4mNX~}D8ISOj#LV13~Ja;*h_DhuC#0{vDel|TWxCrz$x!n08_QzV=Td`Q^kN1n; zV}s5s0ZK;LHGMD=6fJ#}a&|(nMkYy{2PePTV_GaJi!4t_sY#?++5>W85@7E9pxB655{L;Tc6@mKv&r4IVeWjyL|9kK zELEoEnL&U;s02euTS}YSd=tbaO5^5qMm|Zc7?Ww`IdGBb1$#8MiT8t+iu~JOghImd zP?cyq!yHKg{oWYG%Po=6X_dkP__JtjuNs4G5`p9o`?RU!O|mu^wTp4V10)|Doo!N-{mu@?sW!1S{#R#Q10?5r@COV9OyRTXvL7BT0Y=ZfYJxlli>H03 zWwxXq#JTdu`ipqgR2zke)Z9m4FOn25#t^FWu9@}?7sTe$uA;R&KI~)dsRm!U%QQr! zj+)OYqj}-ImfK6h!KCAIAVje|xFPWYVbV5&O+Q+Lmym*VtV#b}#H;{kCIDlCx2%As zL=F%iIX)Fq?vYj-0O>VJ=UPtbL!HEEyS| zD%rB_)XHH`(H_pIgG;^X>467l?@bOqo0by2HqD2Z3YDsn-;%mu#)n-;;Puv9Vq`S8 zF!vG;E$L^hQk1Yf{jyp~(=xLd%~#m>pG@)?{c?;}1FstK0g@WtsvjLFVDj6b!s%ur zb{SEe$DTkVzdDvzQH=m>Wp%N$Hz*uGdp@M_;i3n)q~z)8<#|#`y;Ei)9T2Npxfzk5 zn^oJDz_Srf0>0X+aN^Xg9uK~R-~1z4MPoP!a`9?z4-_`d$bNL{2er?wDIO(TAFwWIGW&A*lR-lhPF-

rV4BTCa#~49?4gt$bUNEZx{6CxkV{qFN5#{V z^^%@Mygk7FMa8m5-$LCiDxC>+tbqO&FXdCa66@5YPwj?VL zwy}LA5^G+e7?JbJ_Snq&POBHvP#H7b+>?Ewv$S=AG=N)peR@GuM{~7Y(e^pBUqf+i zDtTm4(JUUKgnHE$zvyXoH({@VMXfsm1$is4pzs8ya>y5au=#jzE_^cHn>0+mDRkL# zY@GBWV>doox#eaM4kNGaJ&-gcUdKhdBh)A7y1Cy2;0SVt3s{`LP@hG}sT7S404i5- z|3~{(#!is8^>?8HZ&f$?iwNM8r)6DzFpAoete0zhN5LuiW$sgbc;s1otts9JLJH!c zXE-m{5E05D)ey3pIN@H7K}g#(gZWe{0O~%({lna2UxqX< zoLBm1hNQPP{v>(NB0K5G*z2Srz;-AS`rNyo^jV$b$;ZhJWHtN%emoK%7`?QsxZFgPi<+tQbpA52qALkK|S>L-&xlB#?RoRDt*bk}LHl zYc~#F(#?~kVd*;pBp z8U7Zi=wlV8iTwMH0kU|4wu4wztrrn_&VajMB(|T4fnF4+lo2~lP%e)(v7G%m-8@_9 zzRnyE>8z94FHU58V6u}qn`;kx^k$o;`w-3yRvNg8)OkTPA;3LbWvd%?0PH<>?OWll z-5|81wZ2V1j?!GsQWQlZiOa$a;du3bFPJ}p=kAD$WK%*8Xp0!bcZ)^ECiXFKfWog5 zp2Cc&fnYPN?nU}DkQB=j+bk|%5kd9~5TIjCUY>$c zsv)<2JO<A1glzbdXVw9khTXQH_VH&u}G12QK`4TxrwQ zxl9=aUB8ILwkNou;X=I+Echb?`eC?9^NP~2sK*MXRd6=ZD~bDv3h5jBSkw(CPipq{&+h5)G!E;o|^wQC8i{mDv^56SI|gf!(yG*IiGq31DCFjg=|*oHOg zP#hqcpl<9zI0^4F6vK+qy3xjw7{QpJ_Xt2EDqjgygNmx#t=1F3$AU}4Fz$=?V@)4U zlMG5r5Dm)~67TYe+*8In)4vbyiX0`3vW%EEk#)mZmp5v;w) zWsy9jg!<&2xP(Cv;~=d)PTNVS#^OLtYpbQ5C7kV7H^rCjvV16<(R@lW&@$jm$`lt~ zYD-##R}|rl-9zOT9Q0P%^y!qd5C@YKsD_cxAhQXyoL3HcVDQZ3+17sb5cxhq$~fK% zvR!ydw7(U+nIF|>vyhi-z!3=oVY&o5GE^tPwgX>At`>0Skm;( zET8NbUR)|F&}A!!+-?P(rgg*Mo&X8%1mQAyjub$>M7^&RU=||6;D|<6G)7@PDhdXa z+SRo-%Ul{?idud9whR09i;U}kEJrmgeto;D*nm|UJ1*pTY1E`^a&RDHp9h4QZ66%B zNyew_YWiRc*)1Zqt6iVP1_`!y@slpl#M+)IA-hAR>L|~s>Yz`xy~}r5Zj-3F=wp0Ekj{Xtf#Hxx zk~T<2!GnP|hb4|ItjR-;v8Na|Pftn$%i%Y3Nvmda`KW-?e*tI=O5g;kEJ#eT<6@b| zv{Fpa#hz?6YvI{?Vn{b@@v0|lq3?BaL3<7J$MnjNfBENCNtqjw`2R!N4gLdFg#!ee z?f%)6p5A!z(y~C;W$^y_*auitSQQv$B_!nDRexwco!cnDH2{|ELdalCEap?Wjb==5 zL?&P)F1L2@AubaEhF&mJ#`b*s02~r~LCE<9VVgjQC-B3$J^)>p$o~KyMIw$TXv6J@ z`YHDJ8aUy#@((2i>jn*w-hz4Ds_m3AdazG+keCSIM)Qfd?PK>nFoI6tyMnZZADgC2 z$E&qG3*sH~!Q0HvCC2+srT<&Pq1Sq^q;UE_1l{19+A~QHNOdZ|u=jEL>w<@`Z~WPG zcX^ix25zTj+FcVKkvFa`M)HkfSk{548o}P9AS_Pq`;~{P7&G-QFQ%1VkH`+~omi;a zn6MwM#K)mz?DCa8SK_Iz+0P{TPaK-xh3k3t6<_YX@u+E6PUTKx%-1D6{+v7|_k>hx zY~o@;x;9mf`gXi5Jiya4U|%zdbQ1@gfZ~S_A1*3C^GCM!N)P3Q_DaGjddPmof{tQ= z)6T~l>IweCFNp--dd3<6UO37E!>-;Nr`-wH$?ni z4k1%9!_}za4E?!M6&IbXl!RMq|L|c@NL{_=FJ1K31M3@NrP`GX0A2}Fle9NQBN`DEa)@gE8*{$iJ>`brD# z1&{AaD88c!P1IpUwFzKd#)IjP9(@QuJ;OyW!+8YzdU^)Si?FuKFXF1JmEBe2bo}W< zr`&Wzf^-jR4i6Fo_INf_E)7oh(S;xqvio5T-xVkI8Ti^E}%U5oXs=ALb1E%@xSWM)XI6J+#|{H8~9IgF)3m z_nFp(62hr*vCId0Mh$i|l%q4PzO>kIX`1DsBA7J92%R4{mVx0=l{ujGHiy?FXqya2 zkR>v4)UsPyLBHrF#HdH;dDO`d6yra^8#y{YdlKL~EpdtxsPO&|U6z3ga z;u+8(ALb1Y&a@ruXvU7{paKIL_E+V0ZC&aPm#xZuEl4ATF58N(e9mXChU!iFGQaET ztu?LgfC4>LYZXhbbUMSkzBiee;&My(DI{P*}Z$g55{7S310 zXzAcE>RFkub7q@$YzWH=l-K+8&|&&}WRf$?S_d*8lxMtdHKAXj)wd)cqkip5QOwY$ z=9&ahIhU+sAg@3l$k2v)HwpT@D*-OS=uW8KU`??EUKkRjShcA(3T^U6)zpG&W$W=? zsLVm~c<1<0b#--CSM>|3tB?08)zG?$SC!Nks6jNeU&tMgun)xRVM98ZOV4wMBbckX z?rY=u^uov=vy49G#F&8ST37PI=&WA9S=6~X(*nXJPd%-uxwgj3YqpIH_^rpbsMQC# z?ki*3P|t;}g`N%EQ;t#L^MSh0mzd#L-Dhr#oz&BmAaay3^=n;oAXfT=mY1GQ}l&vyl?-qHn_P(;*P{!nzuCB{b3vYE-Rz=-crlLaU zOan0W)wu=Cm8!tCQH{on3w@1ql^vmHeImZ5(^C|5mNL|pJ zZ?0lTZuV@?@;lMO)!bh|i2WB39+}B#6R*MA+P@(A+ijfY=Kc`ZyM6VntsjN&lrRg|xjL$%B4HX2=pfGD#E8M*F5Khqb6ZoR%WJ8;Xk zQ#9hd?)kYpP2qh2gsZQ4#s@fqFU$>@`#jtulS8C;_Q%UjF;A3hTK@I*>E%=U%%D!Ah>m=M(y4rReL2bO3=o9Qq zx1?;RX%bHDQQ;P%JtwMEkYenO7Tol7U%Jilvc5quM!tY|41 zbz3o3SGIc-{0j_$P;B=2Dzti1@r1p$o(dLl$D)9QNqbH9rhBGfGR$thHdn|kPbp8u z+Ai=T0uE7pE?X3l1rFUf$crERD$$sQ~8h;qChi;a(CyP0eYViOD9bkdUBSBIeK{f1nQ@d5L zpTfs*u|QXa+^UZ``KLjw)TDQHIMz)LEsQiS4UFha4HYu0Y?-h1>R>7VyD;|Epgeb?>+)>$LcwZBRlss9Bht&Kw_I0Cl<}p% zk+Im{Socq4TYr6!9O2=1op!7EZrD8@lkFUD#rVnrE&!#G2F#PS;hV6Ix63oK&jZ3b zlYq5_y*EaU*1CUZ2a)=H41 zZsbB0Tk6m0B|80aBXe?TsY-V^zLDuAy87b1Nf+ke7nzBw$fdRk=Fd9j%1Yx(Um+q) zMkZxu>rO>pgEP1^AGmgr9;kaz)Ro?xHETqZB=@v$s7H!&GCa$&i&XTVN9Ev#oRd9;pEDz9PXvG(>E+R$ycvN%A3#22SS`8?JF zK04Q#*ZkNwuUQNE7QC%%8*9&X;4SzpN*Vgh0X`FgBcB?zH>0Z6iJy9ue307dmEA=x z>&OSB2gDapy!hj9qz^#@<3WoE#(B3{gpNcp#{;A26`@gUjk>F%fGq|fwEhA3vEbK` z!59y=@W%E_x@#n7Y1D){E3}vd+wZBOT^LAtZQc+-@HbMBbI%eB^xt!M>3N6A(q?Ld zMMD7n5q1P#G9sBpxnR^_F(ZPtm>JNi2tOXDV>*)?FXgTgbz@MYHG<%!;Aga_WKcEh zsSY|YV9((&$J{NM8qWym8XCIwAmLP8`0+hygEd>j9K)Omz6Cb43-lDRdpencg zLWfCPG`Y{aMI<*qvpj{N4v0=8jUSy6AyiTPXgT2uHR47y#%{74hsr=40CIzfkKZP9 zAegN64kS;W5q1A=IZ(IKvLG7F5S9e6#$(iz?Lp6$VbU<_ z0-086ZR2=M8l$P*J1j}ZA&jHdJJ2zWaE96?Gm8V+KLXIfp zwqg4*X~g3QRGUyOGT^R`B_OwCSO&bAdKR^KP=JuhNh1sQ4}qR1yM$ zBF*D!xeQYHA^!$@+J2y(sU}LA;oE8J#3j}CP|t>$|Bf_%1%&4l|0mKgUa*N#F3`I# zjh5tcN1Ue@*>=6|)saljw4xc)>hJ2rlGD+Fj&Q10G;?a2&QXNal;NhVWO6FFfwWn( zFyXKrndNpc!pgsg3H(4R@i^?T$f&um6HBqDU4daGPXU`JZ%UPJ09KJF=5&>5* zy1%xFWH>JzR-Tr_X3{YM4i}wZ7z1WJA^6L=PQ>JDBD&P^{2fiOzQ_j#^ReaQW!Q3} zng|IFx*EY1k3XP76hve*i%`Ilt8!+HL^OUXivs%34b`67#z8r z7&XFVFvC|qH#3)hfZ~^7eBpjLqZ2$ATbS3lOjRrdfwxAdGimNoA@szk@bZaShJhe< zB>eqm@?zM1fNGZySjp8lii@&_d@r?%? z1muHEGHb3c&L{b@{1IZ4d=q+riq7A?2a+C{b$dPw#4+=kEG1xWT7fMLmlkn#Besx8 zi2}rnsjSuz$#nwXv9($0nPBsH=b$iM4P3E?mqEHPL3%InPt_OxeWog^ZAGcwn|=Wh1!O%k=a&(p(R1@?czP0ehal6Q zE3Y1SsCsF>DI6ZcAOr-Y)DgQh%0`bC7-x@J>P_g#<%H+LQ-}wVrvNFrI{N>5?m>?N zePjnb!xSrj3mKujW#fCXl`<4iV3m3*M zRoDKhqrsmuUCi&0Lp^?=I9U7qM1v^3j2JL%-O@)Dp%kc78g$UW32Kz$L5(cxbxIoT zir4}*4V07!wLzydB@ydRD8sCTJQMypbL4jO3*jh;=7&=NKpD%QP)&sp< zJig0DE50+YJIC<=01Z%<%&XG}fT1X5gK~=eg!huPTbP^S?~BErVep6+^>yo~bwl_d z4Q4j|SCuuBZf3=G^iiz9c7&e}E)O#zNG7YnnL6ybS=DMqKSIwJqVXF&TnpEDm={o> zH(Sp=e0g4@@evuoFZOdGIdfI@fhjwi3zddcd+Zv=rbSX|e!V z-h1caqsm1{0`a?i@{EFPSQ-~$BE)o(^9O~&7iR=Y)tqeWJL|tR2*cv5yhHk0EtemO-Zm2q;5ukd)Cs=I1(rY~6G|0!N$oGc7P(^CT}wj3i@LvmsUr zbW$KMNZLv`=}9j|Qi5PS#&!@g1A#ocjP2inI_KMc00~zh@BDvseFs=m*}C?9?&!r% z6;u$UNs$f`zz9Pipd!5vU>HC^q!}WE(EwMaXAqFy1w=puM5IImoPp32&=I5<;Y>{8 z3@QxCAcp#XJ38k-_b(xYkWlts>nrd3e&1TV6yoc9IzU&ztMFZ)DFM>S*H=tS4b>1} z2iiq%8iGWGiZ#F$_0{vhL30=~;2ntPOiu$05sED>Eixam#`^-{rRe}fY5}joj|Tnr z;u6u@s#}l!TAf!UcnHi@7Bj{;^}betdIL!!pf7z*B0X17P0X(#wr7(oOdS@OFyJDB zFEa{%r;H16DSzjTZ)hB#!lG1}X-X9$6@kKnoDiaszCRCe)E@At*~LBCx|1Y#N*y(r zpV8Y3e0FAx`Zs|DDXu{UKQIcIAI!ka5@W<}KWXzi--Po>~&G zW+NPJ7Z>&bgY36Ccgml@GJ^fC>ig5}*nL|F<+*nY+5`^8a36SjxV*KYSX zp|)-nO!RLI4Z3r*OnMT)9Px7w`#D}WseY{=Z z_ZhxM@SEVkBe!`)kO}NuQ>%C|Lrz!g{%|q{J%FC(FjfiiPQwhY*H-#FJq-{iQmm1< zJW@u@g%A+}|Dl&zG=wokI}5Vygg0tnkFkQqk@lKZFi+QSdY3KJ@G#!DRFDCMM| zmr=8vT(d0hpGi|m0{pI&E;9dC=Brx4XYNUgR`bsS7s0PtB3*ABEx!EoE$GbSP}cix zRbhL6`;%zJ#;C>m-k5i~)Aq1patgKmCdyo>LB6KD7V0t{$(YA|ZgGs<`u$xq8$_kgqvuKyUZ1byRu zgpfn+Bt^fG6Mf83t!8xJ@-zRTApSeC8^*l>M)cTVdA)>RTM?N#1PVB^pjm!9yPw`I zXcw<@$Fn_?S9)zx3Ttd`rupfL&cCIH>w6IiQfdzbusU&$1Gp2Y3oJP^p2y#&z^D?;tXSIUY33z)|vYK%pn%T+}Bm z{e?b);K0cJ0`lWO$1agd%^4_J-aW@pjC`-1-+!=Li0j5qIh)OEU`lXP`Kotl4iomiK z2HbB^3J<=R{>~%E2N+H6sgv_6^f)5be|p*=9BLC_PmoTy+vDUcc6K@Y+uKiy2*F%~c_XRcueY)MjcwNqxWbrprOgjqeZAG?x_? z|He3goc$MnW@L~;=ZXgz8G_KX3mL!4eCb6MMu849mjlv+{e>>ljPCa0`}dwb0@C)@ zbIS?u0ap~2w&kGBNQ}6Rc zRp)hy#Tzd;8oakdtsx1P6m^Sm!DF70AToC;Z{sO@P$S{NP=>D*Oy?fw#A0NP+f{Xk zQUJN2dHI4(mYSwCoEZCU;d0Xf&lE!Ev*LymO<w;!!1vycDc%BQz<(YXUh_whqYrnucu zvMcl<%%iVN4pxw&S2}v)etYM)xiz`HhO)5KMc)wRRtnm=-DP1FU0+0-aT~wLyx*JG z{09Al`6FtHV&T}R$3!V9HE^n6zB2~kE4r;_prttrZQ#pza5z#;F>&!KfhIZp(O>`ICj@{1?4n}<$Q zvQa?o4pzQUiEdB_=LRjwe4^%~1_qd3$rSxw=J3?dlvmV~pOZ$LhIbNP zQZ0y%(euC9`l8|-nw?smTL-?ZNd*a zC88Q2kSoC-PZe5`ptz3YZm&4fh!lr~!kaK=TLD1?R40a*5X5jv(2~^CqZ@W{JSe&y zycm$kHDiyja>kgg%mRO5==L)HS=(G)0g{GaLDAl1;_pZJ-*?NxiK!6P zf5Jvmc`AIFe39rCUQo}*^NI?;O)h_PeF^ueb$&gqlPAe*<$LyQt&AqDO>M97VCM*3 zzYT^({KUBVawC1+h>ia++aOax>Aud18&1iiiV7mxal^0JaYKPTMO6hCp6lHu8=e%g zn7yt7qb91cWXp*gTF<765{qGY*RyIzTvZ%%mM}bXm3j4OWf_hQI}Axtz;XX)=vcT6 zaRZFSlhD*@2C)R_GX8)kFy;k1gcb*3c?-c^HX2X^z(Vy9)(N06-AZhm#nB+a!{J8# z^T~`17>b!ELd6=WVbjbLilLt*&z2CP2v*I0o=ue@S|5qCobvB(q#8$Y9H5rSIBi8y zi()jsqkj2)W8+okc*2@)#gaw*YRZT0O^Xd{>YtLls)C-i4>Aeckngur5|$eo>qhez zo5tI8$4-PH(cTdmWjmrCayvTu%XZaAd zSJ^gmLt)udN)v9~Zjmt%+b5*@)2jMH$0`w&8EOV#a}2>*5a)oI!}ns9>e1C29Y8%( zsqTgs7s>kt)zRZNg|dW~dQl)u0I(n^Lp#Hv<5Qz6a4wzQV*>+F%%*4fhet*z5(2wt zrqSyUr)^t*CtOdWwkUS+_7Cu!2;(lW-+$7ymnHuC8YE4EK}-_id8kO7BMhLGDdrmEQPVj&Hl3 zfN#+O8RpZZ*HNr&!-E3~l7^^xQ@V2Jm!d^jE;SM70jL-c<<)N&wl zLFNJiZ~!VMaQ0Bnf!>Y&G)X8D4`qN>9_`2|;H6Icig7aplD*6$!ntA&B_p~y!mj>4 zX#~C$F&e>Psrt?P`?;A=-TqF7+m(7j@!5dh&y43qqs2F%v!r!$aGPgrzAe?>jUEg?TaczYq`ct

Cg};^AMJp45S#8UCDErX)CR72w#aPOk~PuuFz+9}xoFL$NSzVX z5bOY#O!9$Dag(Gm?@@l-F|T$gD@wQEsiG)Wel`n=(!qK*kWV+j=Nazyw&o98RmMJ8QuHCm<^C1s`09VnbKrWMNaU!${R ziLnIdNcI~a9a+FQFGgfj;^7v++y>u>iLZi zqkQuA=jY?wOWPk-o44Ng2(oYdruI*)Zonn~qq9+O%Ik{w>lgUtAUkv?5 z79^fJUju?O(Slorc9!2ILW%N1q3wNn>_Spe zDOSl$<=RnP<+EdRbnWMM@l%<@di!z&-*`iK=h#3~>)*k3AfM3)Oq`&swfeIl9pFs2 zlB1!ci+LSn1CbV)UCqDmO_(LUZ(943iT^i?O7KHCZo*fd$t!R&DXmW>Q7h%Se!~&`2Z`MYZEq`VdZGgHm`qv zuPI_eQt@e6r-4nz(WZS!ieg>Hwd}dr%0etTP3M^-UD_ z(}X06u!RxWrvVBo99R)B(nxJ*J4Dhw*>|-O^cdI|eY&Xt25A&lCIfLmKvDRN9(@W( z!$4v4VMsa072E{(cq+syvHeqXd;Av@^-wlLR>ZI&AFH|I*aBI8O|^_dSw+IyvcPeh z!`~cS+PbpYvz?+)FB4D0{l)W4*kmmwtp72%{ip8MeZkzN?#?wPfFq4!wO#zagOGcO zA!LSUM4{Rq{$lUOl_bHjd7U~fN-5zbe6OH2v!guI%Gu&ANp=o^-brP zX9QH}zPIX*jCRgJ=PD#7Q=fxklk~xPu}GF!tO!X43W!?s$NW64Wz^kCq((LPCMISf{G6N!wz}PAMao%}1 zY|cW-Bh>>t``I_^2Dc5`E^|)>E{4ykgN4vN>1F+Te%U?*Wp0Lca?li#N|HH^%p(K& z{`}X4vV8%O5s|=$;3Qt{BOc2fT7QfVkk6qupsN%Q6T>2Z=Di;BOw^BJ#1YgIydmFs zL^7u6Wdi*hzuEr&7mG6*zx;=8(-t&1EO68!0YR=Z{*EKeVlr1>;6M6`UABMf2l;8J zc0NI4d42h!!I3no2taNK^Awe(VW1zmX!~wi!dc+t_h6990EWLE3ZkgYXH(SS=lVt} zw4;@|l}_w1SWYz3cmS(z4Rtsn*#N-#{z?_17n+1<0-S+d+mA?PPEtoPNDPIJREqAB zdcwJBwAk@gdRfq+WaxJ&k=2KO4+ugal0m6Oy99-});?KTLLenXezK6NAW%Frm$^$M zWFH|AOes1Hn3VC-!?AzEGVOq6WDqstV$;U1|GyfsOJM$dake3I>z{nUb#W^r#kC`? zQBu4YzHUIcJ`QRL%pp2)QnUoPVNr~H&XP^J(!6e7h@Utm`v!<&Kq`(R_!NX>IHz>U z+CN@YBHRk$5b1mELlYqFQbats!!2cxZpaPO=<~YoOxCXHhqN54eKhoX-unF4gplu4F;jX0*qQ`)V zrz0)MX;lxHnwJ6J=lKvD1uk1pjF-Y8R0IYhj1uWJ{T4HkxC!!Ai7YYj5I<9}rJt$ELF{`|(Su0M116kG~x5B(dzIBMOkB#On6o#yH^ ztRvYTFtFm_polGkYyyQpL>)ppQsAM!^g&-}dhr1@3{nY2KuaXYCTEIgBVXLn%PnUX zouU{fbVGdx0t=EIALCE|#8`>>iO~dbTgWg5@-MWu5FrRA>!Sup3~<7aT}QYXl$=vU zCN%;M4x|~5I9>vUdSmU{WpkOWB^_3Y#aD!EcT(O6(lJ(Cke;^N4|=)`(&s71p#8d z&ds6Z7K-6&2JuoPJ=3Ppu6F~QC@C@(IQNz+!@nA{!s7@y^P3wR3#f`u^9if{2n`36JmAN3kw#EyhBo8q5cv_G{lq{*1G9LFYr`HR-A3zal}tg)VMd{kk1-vj zgPBhGsVNGeL}6LkuJ=CWB(QmXr1ENv9Be0V%-GRG=Mc|{x5&j4Km9XMj+E?4II+54 z5X^T9ob!6hEYgLeT`U1hjUpig!op&W(F2YynBS`ScLs6oH(T~M2Jt4!V)Ki_R)2?4 z0iz;J-jLrvd7>FdTD$;>^AYJsAPyQ!SYk1yj;ENXrlA02fII@-JMiv(k}Xe)Qw2Ze z#JN!u4T6*1NKS6;uyXWS^GCdLM8_Jz63>^bIJ(GZ+l^pB6jD@`;dIqO^9~!ls)st1 z@hz5Mo#)g$M#_-=(x3o_OkzA~@3RV0~N6czZtC6}&h^$q}< z91k2>DQXgOyC&$;P?|$>KGKx}wXrKuu>&}XP)eva0*6OE79g&xVZ;Wh$9XPhPk(m|TkA2)xh z2jbjDsDI=>ilG%DjB7`Xpj+{0H||3`zjA#Ugtsq$$#`xL3NwFq644KUei^vh3-sU0 z(dI?$B5=Ti&WqL*eI)Q*1^V*}au`%cK`DYY6Yrgby6Q=&mk2`%oC3?**%i9!BdzP8 zy%g#Y&D;{O>Qf*&^P$kyC)AjQhYu%!U_nHZc+!GE<3qBDD9vru7iA#SCkY87JbKCWdveo16;B=aBRV}6@!Q@Y!K_-%g}P1suMAuXe} zzc^d0(@=+aFCf4UG7Z_zVdmSvi{j$`Dgt$^I5w{qOt!p=3TCIS;0Dy1 z#xbB4fXHzgnM1Dd)GU0uauO0V zVx1rea(zK8fZ8{5he|l*8<%MMS5E(0ih$bki6*2{?h6&?2I%@UgsXoeLL$_hN}(zR zHjUg}q>xN%J!FMdv>wV(NAVcE8vjCS9s{5c6m@-)FTB5wLqC4($tGh8_wrP1zoq)ER|&*6z(ER4+dbRAi7X~5+?46s znDp!U64kT$*Smx-G6}uD#`CY4hV$Vc=`x0JI*LKL?v@N=MP3rJ}d+^xks~y&_V?`Zq{>Pq}J&%;WPkZ_p z_58xqr%%?mIZcW2;|C6=<*?A$0H5&maXVklc3QhqGfZ>TE`M;wSDkfJjBFxpn|`gzM2y^dknGj3L{mD5 z!X#$F?U;&6o?cpFV&ZxGGlhzMiTflag3lDzCmu$=DEec1_w9z8Z;FMs{@!c|*Y7^|czc<%Ca z8TY}%m;CINcYm35n@ow);)%OT?X*fI2XbJW_Occ$8viIYu%%J4W!Hki3hrau=YZxN zF__a;seZRl_&pw;EI|p@o;Uk#F0ME8xUv>0ud5gKP1e7qDz6kydyFgVxXGmPcOJC8 zrGc-jlgUgSr3JCP(QYwm*Url|Xydi&B3c^T`&;g{_X}>#iUo+V$Bq@WlKh^B-8;nJEcjYpIPS2E;eqA~H6T5)uaIk)eZ;lL#)%sy{4o{9<9&zlLsi&beI@iHS7LRO}-O5s8ZP zPD}knR@XiG^wsqA*Gk?E`RVz_-m{lNt7~d%o`3yPRdXq{(Hn(vz7eAwIeEHGl~oDH zjvRkYfKS{xai1z3aq^2_8XljBNj9@3JzC4UI7cm--+C3reY2GCaa%ARySd!l?c~}0 zV-#;CcKZXPXH&51w+YLuZmg^)#5`E@QpMMOzI<>ny>qg@qAC8b#Rc0XZkdd(xo%AN zz4pmhJKGw|b#(Hi@J-kLYdOG*Rp73RqjtKbV#Cw1sj`YK=QKY{NWf|BP^?Gn!%!v9 zKY90AMwVXRc~uplNzE#tx_f3>j#tI@`eHa)#615dQIBc7^Xp8VCjtx~;BedYUlY}Xfx zD(`yXLguNtMX}g)vD}9y9;*|fmS8JgW}KLK{#y&u%4UV%_*BA|=8CO%up7?jl%6k` z3xZo0IE;>jgq0NFDQkXP?DH!v3)K_Z4`Z9-d7l^5ba5oy0&$|&y(e`-b4)_lobn}T zk}RV;b}&G^ z=d-Fic4IJZx5TD2rCZL)ok2ULEXXxh*xT8WlYfOX0xz+#v$K2oRxY~@FBZBb?>3~nfxE-Z^(Ed9KBEbb$1k4I^vAeZ-pa~y3&<18L!yVO z^a_rZ_^i2c{ch)LZ&i;*``uXYDNP*@6svnStU9JnT|45cZ7ldb+-&S#&NleKG^%44 z`U~#I+-pmB|5PLIE;@nxI0^3EdLp5E!Rf-oa=(*pC9(H$zV|GTaP;Qw?k-y~a zUg+niVo6Rf)^_e(VcCgKj5i(VFB2nAH}D}4J?P9irV^|E)riZq%F z3v~uZ4An@_|LT&VaI3Dl^eL~Z1{^W(nVZx5y$e_;1=YeoH9wx)+_$jPb1QkGW$jQ* zZMmImRL|PWHw_gZgVk7Cc$Kz#2Rpe2`<7HIY^n6%!c&vGW-vmn5`zn`$bm7{clyhe zSmG@YZ!BQ&E^_sm;-YOd9Lqy|Fu=$6c;rN-7mdOa$3Jq|g?|J-r;Nv(CVx3hYgxO` zaIiH0hv7;W#>#DTbor*0E%ov&dV zAtV#P7iaRXRqE%g-?}b%$u@N6Nw;V$J4xa1!$IAdeBecEF;mo$mPw7k%GHbRC7wS2 z*Wl5p*u@6y(YhO~r)F;CXRav=Q|u9$OR$W?P6RFH}_tS3UO6AUS z4eoMh0$e}5N)O5IJmY)3r7`|+OQViNMUoc{#_^$aj9QH`nA!PKv4Z-DW%Ponig_aq z3kQ{dO}?%E08QyL%jv~*?lWofv=mtkg$c+*3{r)jWsP|N@$uF^!}E|tVT%eRmwx+# zq*Ox{utVeqDHSXH2*YdFyFX&xymn0I;KU8_iT3sbSf^TA+jVuw5XRo=#@>)4UOIit z6E!s%(iv6KHEj=9F^#wK&0Y^+B?{8)@tBBn;SGQw`c-|Cayw3~PKwZy7APuwE@R_! zMZDpB{C42>ctZDw%!HLB3UBB2oaUZ&zo@NG<2~C872AKkX_((`ARolnnx7M|h2S^- z$f1ESAvw8wrS9ICOn|uTEi)%t6|3tDw#``890my|r^$M1;wWC>_Q6wQS!IRQFPYe> z)}A*j#dy%vU6AuP(^?{aPa2{#yANm$v>&I)SY zck`V>GjHw9cKmvu-u(-(gqdnk?7n610~ zHB84e)YMrCL4r(0jWteGauYxJrfkg(f^_$>oCZ`ge&D9K=M5F4_*-V45 zZSR8Az?k+gkCob0?{>PCiIo6&SFTTORS8x~TTfs7$vY)oYT2nwObsh{R$SD*RATU9 zDsY?hYjt=`slX06o(Rx2MhvfyKG2cuP>#M}7e2}WF+M;-1 zLInQ(>EptLl7H>L@Ghmz4&-ZfF&I@iDrvk*drj(lG5jNyIlGTZUiSmU1H|tllxD~c zgXujFcIkf{vC_lAN-zrn502}*BA{sEn~lOm9N*=9Rz(G?LId)I1q{`HLs2^B-eOwn z`eoe%li%S_RK=)&zAV0sJDIKYbTKVV8=O(L(fz{SwufFPA$)_^sy_?ts1E8tfPNLr z`vN&%8vD{I_jOsPYr|{YBc(g{fw)*@*wV74@LI+-;D@#SEoR!RN=??8RQ{wAc1KK_ zQhcNz2Q?qJI=Q|29`%1jGGyw&xc?pG4ln#L+4AD!Uz2yF@ZJ&Rh?t^j34Bv3y)bQk zcJ}0~nV6A|tB+E9zbeZ>{7rz*1*Il{Lf6hi%x&{r?H`1H+vY`UOs%jbJr%2+jKizl znQWhyh?QV{=Mv-ih!xmh*?E4lrBnKSgLcfhI%RylnHUQ|Nlm#`c!M_lMLU*OTb(Vf zeO9_4O?x@Czvi+XO;xFVGCx(hMFy}=pie~F^j%tZ)?!ye8WCX;@)*h?{7CQSU?2OIRny~x}bW@5`|01e~_d|K)#c-MKFD#8yFcQ^Mo zO&ne*a9Yvyi~GN5y++f9{lioE+A$Ye*)z%5^l5U}v&oOt%>}ik?zQ2_pKw$YH<&Q9 z%E*aE?}?xVFDJF6Yjqwgf6#Wv_-V0jD*?t+mBRad+8Lu}Zu3z!vOg5dlx+CowIYR` zXh~hmGB&qi-8XT&KT(@wV)ucZ1rPnYinNviwS#06?Y~jHBErS2Fi25)b@O9=k zWlpFCr-&1*`pde~mT&8{-Nh}QUvoq2wCq{Hrx}7fe^k8#mbgg6X|cW!4?9g(TBy!T z^qzQduRWJ$1yR>_qBWH-Wf{k1p<_4`X5ladrY>sjiTP0CpHcSXM#8tQ&lSF;;r@hdf+%i>ZZ$)Xo6Gs<5G< z&d3Hf&R_dEI0ZI|C(4z0)5ivYPn!s=hO*L^ojA379Kuk(Yuw`#Zb=SkbH z+e=>|SJ89c&TC}=x#khbH6OPEEqWE6J=>mY2U|RE#N1B}#D1IvUW6<2(8Zyvz7CK9 z)@gOJZPo*La|g@e!}pU`;_i;(kPW7tL?^#fZ0f&(Z=53|X*a!7chQbncPd6poz*=} z#xm1H)4OQdCfb$KD=$I)@p4Ol@frjWiIntf*6B_myS)`umz}*UYG^l=%pa|=^cB@v zUaSyt$TP`eQfclkQxfEJz!T17!DAs{w+CQa{w{{pBao}$8(>;R#r_ZO7W=z^z3D+F zKMQ%y8L&&9n^r(xXRS(8f4-9ZD{s{UPsb!uBrZE&&h|cO?rrrpRQ;Tg7z{LhJOUj5 z972BWAXvT)J$lK?`9_VrdRv`L0wI06;l1nXLAmp7v}_KtYj%JbLLW9KCAqmxymK&Th|}nb4W$V zhFj*Y1uexoQ9I@?Bm+y>vb-;;9-y68Y)QvzX||j@qf`&tkfIf2A;7`shal(y7Xt(U zL+fG)Jhli#1s8xzLK#IeG4U9fwNOI2FYh_7S=YK_MbR?OOD=s?6X6Ef>Y9vv;Y~;w z8ohJ#Uq759hqX<)_+UPeEKgr>syLr&6;o}zV+EA1tCnwzfy%yk=2~I%)-#iQ3UFdc zRMXaSrYCXplOJp&EEE4HX(E6! z&xY@9Dd==x#(mtmeOfHcC;Zf{&5 zm*&%2Iz3Wc#?{91rSV#eVX0wQIkI+3W9ojq*5?JVkV_HgKq+N8?1Dchi}9wlh=Edg z*W|8Phs2HNPxdMK0&9_;k! zmN%_UI-_fvoWBPf==oDk#sx$lJY|%-__%t1Ozq2Gy=igyN18B{`?00E?f0>AdzUXB zHaKwqs_jv-(%3A;2)(i^k=Y`RqIAqU? zlH|9OrpcC0i1+NmsqtgwSeDbL{s$&b zY7?5}n({f2M6@ucbEc(PUJ<))nMjb$B*>k4FkWOtY0m2uUs6?(7Z2H;mUD|HQj@yB zMWg(z@BKScp`|XO6Axn=ma|!1`8(QV8eZR2!q-Z_oNn-eJaEeLDB1oj`r(9{m`pl> zrX;;A$4Z>`ptYDZ-cg;XG?4;^;nJd^lVc*WFCfpWze+Ju)dTN%hIvj*;ucLw81MCj z4h35^1HcyU8F}6w$%+6f`ha{P$hznp2q0m*cUuPN0?oQfQv(969n&-|y>t-!5@g6m zck)1+vA3pBnnlP~bd!R9%7?2QvddsV^Bt*Wf9%J8+|l%|XSJ!Pu+%SY4R#aXwN05hzV)n~ zxM`OAEdSo;0IP`52#DG^xwMG1Kua;mXU4Rfphnb%?QTi+fqR;4_QZ|d0ahO;Ap_#o z7SpEf9%iHTWGbp@0+tskUxL=SqwSpBUS}9gpeC3sw`8aXfPe-d3kmv&qV|=XAe7a0w_n+FvTvsPGVqiAD1NkGg%uVGpi)1Ocm-T%>p3)ta14*48 zFl1RKS)GzBZ&myW6=Ny93a#wgFK?t`bf6yJR|0+vDy(0CD~l{XQE4o{=du-0f&6?Z2q0lx zNbdi*^DU4!NN423-j1Q~ytOa84_&r z7Y)kKCDAo-6J#>NCD! zp&Jp%S3_BR$3Mw+g*muQK`GG7h(;B;uSjEb$B|Z|w&P{ouxjm)T4I)rivx^u7f)+X zwn&a^;)rTNv!XH^qOlg%N^!EQRL3pcrDUH*+$ab;Vj(_xGK#eBXmxh+sc(mxWmgH(pbf$l2rEC zQ=}?k`z1#+sLZ~*SEq63w({jWw_&8;6)Kx?O-$~XvP?{>0`I^R7p5NIp(g}3P(zwPQT%p&Xf@hv zOfO^jJ@^&1%0X~~p4+TVxHc7=z%NnQ;#3G^EIgMsW{OS`Bg#3! z-M)o4_}*TT!GjxL-bQVHS+rg1Avy|<2)-LCF^(d`<%}{`Eym`0R)3|>wGyp($)vmt zMwzKLyzg0DLK;Jl)DVqUqt!CGzc9~7a%-3+wu1X4Jaimw zyyWSP#0?y5itz?5%kM2DhK}AgWvGV3ER@qjaYY>w4ua`qXg(r~a*b&0U${^F zjcDAvB?1FzsVT6t3Kw`e=+_cm3!8JB4Jz_2sy6)DnJ4^IYpM0b{1UMuwU<|%h)z1t zS^0ozG-&BOA!mC>-OPk#^7}ti55U~rx&8G~`J2~VGBc^Vt(>k5Z3ddy{Tk7lq6P(} zcU{Xb4v7$47a2K~r98{>{Y2y3QzfqE>IDq@MWX^@7LzW^b?#+`JAluK=w}8*=4Yfq z+rc{YAV3!f=Z8g3&12L4U4(Sf#eEz<$E|AvbAgDh`B`r1@n&x>&Ee%XmJ~jwC~U$o zEB2HKN-2lA??0CH81dJK3x-dG#cyzJE#lX23(N#l+0Fc|O}&J3lo=-M4S8pzn)n7? z=m=YP>vG^?0Ig_^W+|e_BIk!(yU39orP?74*x02eS&DNO7R*?UFb<7WD=OsL$#Y!f z_v;&vv<}%**bkVas($Kzm$Z5^A)?K3pAe0?NetSd=vLV3$gq|eG}jJoGNHnmcmk{B z=(o{_jFVvvO|F`ixj}viKd6^y>Te#!Kgeqb`|6(>(cry`Zf5>*58Md;yZRmmxCq3b zI}eom@mH)x1}*V&a&Q+J{6+jIJaLs96h4ad<`z(zXA2!9=Bf7sskP>HL2czNP*P&qcx9E{|<&p&BJ<@!zw{EJS1lPZgUvqluKFsUyNLKSoLu455pWFb}I6V<4p_Q)zM3gVVx-0w&aeQJ2v_0@9ns*pKvTyA zx-MLYsOT7-PR+8@Z=w7gUF$odisImOh|q4L=%-E(iq|bs<7ewKwqWfuNckCO~}D` z)5Qn%`|;SpZbO7nJe6tpDWm|E@Oney97MI;YE#ZZm4|T!yjv+b`UFA8kuH_j51477Rgn6jL=xqiv+}vNnb$oP? z4OYGyydes{o6$>V1Vy&bJb~44m~b6gSpNz;GDN_R_4+8zFn5^A&K)h~I+RD?G{(8F z0{CQ$s!}DtrmP#z%89!;cU=>!eAA)R=V-1SUJm8}vHw9i5!Z)^+lZ!zHrV6gU=9?Z}uc2v*rLdn;&QgX$dEoSyxt2U{hyd&#kT77%nGqxAHXEUc z27VVEV0Hk4{Sxk=&oxT+C(M-g9^zkG4A2(Bd`KfdSKeum@8Fc z3)_)|8#^YW->Cm=y1xZ>=8QgkWV9@Knrh%0$<3>LObyK)B_+Yo9jhg|m^V_TPdY{q zYoNqORN)e|t~yw}^jsnh3sL%h5YdV5(tvxg^%~(y<%2sF#@unrMOb; zaCQg>F6`u3bORa58LDx#VNVI{(iUx)8EqIFZP*+UK4&Bf@l>Y|*=%by96V@ga9~cj zYKs7^nP6$0U$`>c$uYFmC6fc|^A^*h79(MX;{Zan=!^{=uJ-(ASP+~!zh$xg*XHt6 z!n#Gm`t}yg-=DhMA49lh6_ruzTTxqm9SQ5AJzJl9wyHPq><9ss`h+_OllZQ~;>$7m zxNV^Y*iO{ej&Ghfhc2vu5hieFsG)=?d3GTG9_gaBI{OFkx?do=0j_n?NrL>YRLiv_ zN?cAa{Wg>8@Jt=zVY+g3I);6Gb;KTmU^ClUhoVt{9#O4TFQ7Iu*{gT zhcY=H~W7@#Ta zL9T-pzY}N%y|Jlx0KdKaXDXoO2LRY0^P6!~5g-TO0b&LiP_1G1piTqhoKu3~A474J z`D*$Wj<8*MxEFF9LZ@4rxn^NJmze=R_^p4Iv6uLmXkg(V|6jcuEYZ5Z7G=*_Y+SOq z7Q_u>ub!;n+0Sn-crIu=-XmbZ8qx9iCl@Ig>jO1_jIyCm+^?q8&W0ZY&oMs78bu3!-xfdksAY{2%3h;^o3oWg7_C5{OO?%`Y@mx zqV4+J;Oc3rG{HN0pp@$pInWF4f}#{Lcgy+{wH5Y~O&Rt>Z@6uG2}k%bJa=AuDevq_ z1fe-p`zqzyK?u<}lC3jZuU;{NkSleRVEytJ z@qTewJCd~PB%lou@gmWYy@FE4-eGj12yv8I0-+(7sf7x}4KYf2zuHhBum#Jjp!hA! z(c46$TKa9s7RFkA`Ky5jNG{Yr{JFeq9Q`KXkWHb;?!M9iQg7iafMem^-sY85V|JcE zlfN=@qNLdaH$!sS8se#oMn@fA=qR*Uhl%`+c(tB-Are;)0COw1`D-Jd$wO?=+ z0`LzP%dKssunrVR>CTAl7hz1R#EPPGUco@++GV@CN-5SN&9&<3_tmZ8nh6hJ&6S({ zL~8V~J;!qY@NG&Oy0`>Aga%7dL&23boEABE1;=W68hi~&ZW6@eALWB^g=&Q268*r# z$&8$gh@l{QYX(tlfCt`e^7&l8N`Ni?+h=$`!Xm)nfbc_n z%szlV;7*Ro`yqe%8b=i$g3uj3!?X^h6ovRZ0Jb0H9_Jlvwx9Nj#0-UziG77rycpnR zfy6hdr92p2^>N-g#oF8u)l9fzX>>6YmNHh}hO??du)L6*DFdtrf{eKOJ>X`=EX3b6 z(pkWkk&fbms^fr@3z#Q*0A2bZ(KV{baTvCV&8^4}nR%>VOAnnXMe=Td5YQv}7aHYZ z-6xrX(u(~$&-E}Nb}-M{Q6&}+M&5A4a+~j3JmKBHDn}wrueTHlUKNgy4&Lb&Y$43} z|57Aqr!17eDH5BT7MntHyuJ0dd3#QT?_JIaBjl7&if#~!oAncq^54Z;d|7@g`k8T~ z=L-QwEbO#npj-EHnBDPs5P=gHeINOP*dW_|HJP9RxoJ&Q@F_j02e_e-MNHx0Mf$L}q_#1b$(UYki)oPTC_P92<7wbFuMF71 zfNX+c>(ub@Tvuajhd_Uzx40Sg;E}zP!W3(TY?Y~zeJ$eOR1v(h^06H z#T;BA>`kz14+2i`ZKn+1W|ovNwFh^la=Qj#*jRFa)?lIEG zH(Lu++skjZ-&b^7Y^_CYzmI}_s zKX4hNSWpE|oTRYMmtci)PVR=5Pgn#cL?bG zxpMYxAe)g&wP&nxsSq_eNz@>R65X64HGa?lHTN)~sAPX&FE})Ocn8ae>kx`)QZE61Lmd_P(hF=u0}QO7Qm;U9wU;^CB{*|&$a9!M!bK*dXCPmCIZ$#??7U(T z&JQ|7sU+WMxMX@QXcKVCRdu_uF9DG|O~^R|7u82-=>+g20wDC4z?Pik>=AB?Jiy|O zB#rc+kJtJ}yYi7)&vo3xj~Y+buLbQ!c+&v^N2uZa%+QeK1{b>O1jf&n0(_Is?cPjQ z-u!IKueP8HtOO61;#V4CxBpO>TX{Rb@l_jBUfPgLq6{<8qphSlsvdjB7eO<#8!X*d zB!EitjQ5P&ilW>x-{8gl{_^4c@N&lO07Q$-aiyb&Gz>(efqT}xNGujH#o8+(EAhXc zAhN@t%f)oeMQd@m&Pg=9j-kjQ+n@{MUb^xgd(b)5tpT)^D)B5w_7YWjTB0uH>|8s* z-NV(syt?5*UOrK8Jh}))zb*Kg_=;^%TVxw3f6*au06eo+zt)t&3@>`c{P};8^(Amk zo!h?W-gDj)6+tQr3WWv`0R_U8n3}?^5mA{$pr}MRVHO!`(i(S-aC>BuL1vPW2nCdY zv?8L=93mV+Fw=%wpn?QwYqD*%!ZE30B#^f@J@4N8evcsu0g>!)eQW*y|Fyogwhtc1 z9tl(8tbNEhaV^`fxW(x9nx4W>Xpt5l*8K}Eg>CHa5-V{`P?K2-=$(G4qvh)jrg$3r@ zE^A+}ImWt7-Q8IObNd{WEzsh5Mx_ukeU_M~Jy@QiDLQn>KLJQH620UeaGIy6TLbAAY$-R;OT3QZNa=7y^{ps!m*Fhd*H}}St9Xv@#Rt%`RU>iv87-BABSM@ z7l-#W1ER6!)VRl6MnRM9lz3+qLHjaX(Ljhm!PTJGbc3Yrp`TSQx*9j^H|D!D} zcjw55hl`W@aNY@D{=xN?ApKxY+R*DDfM0Fptz7MEYeQ97cBVc?SP2H$FeBmwLjIO&=PvMr$hFtHPCs#JM3 z^)g+X#KeX4oxtljHG;|*CUA}SE)#-!!2!J<@`5d1((m&esB1Kkp=!GsR7)`0_M%#PBRhodC9M1tp~v-a7cqk zGf2Yb(8+Db|4~)rzFV*JO#C0p@LAsl9R}+Udk|p^8}WU zSecBaY}6%zyet?G$-SFJxV;eRL2L~AmhEr#n55i7i@-(`SzF! z6u5H%Ar6BZQy8dfu=}Ob? zJL}Y`_J#2pwF0fuvI*=1UTXHTh(%x1B@?b zR&)XH{(NDv{2z~3et%~C^~J!una11|m`oH7hsZmX+0Y$#fw_YPsj?uw1UZfN#vA2B zG4oIQ^p8NMtJ9aFY=|k|o*7c*EVUO6(j{Ss!+;+EJ>^ESw$~F`>nUZ>N0Soz$O~R2 zyjUQ}ervc0b_WEOhqkaG%+k&9sRvz@U^=*BG|*(E4vg(DACWis?Z zN|-LqnH27<6k=H+JWv!U;4YM>w*zOiep8Xz6GE~h;YXCq_#lSP057A1JOrKrlm|Yj zLj};12V|MBL=cLwI}n+yp&6x@D0wP{MTVb4*KJ9pDR~M|Ezna7+WQ5P%(J7<(5}4j(%mxknDFp=Ge^0W=iSCTiF(5ta~A-k-4KgPdO9eCcOkl4~jv&Li;z z-`;xsoHA%(^$s=TP5?r@wI9dH)}eyBKBNgtQLtUP=ym*FHfuNsP-6e4=>pCu5gJ!- z+V0HSlF0PIG4SnI#5e!I@)>d4S@rfSzvN%Bo#zbq{bn_ACqCy)f4P3baJ2vVt^lKX zJW$9L?Cr1dh9OVmGvnKb@hdCy`ZXhoxu{FcU7d_KydE2P*O~j2OadaH1bzCn6c1V$>om|OKQ^mcEOP}{k&o?#1j3r|nReyU zf3aq)2p7wMUPDqDf(Bd<{0{s>Xc%l0u#5VmU>B`xAQP?$?lvqoR0?oVDWJNJ<*C%p zo-ntmn7W0cxkRlVui$E1k(#mX+DDKEm$9EHPy6$Bb@BU9SAjw}k~gh#R{|y>jg^X( zp%7Mjh`R5$3Cb9NBwrD^?iYB4niN4;7kPOq=HSl`&g)e3*yBHr%+$2f50P`2HKT12@4EA z)XQT5VXtcf;*87E6Tp}OZ{ZOWk0tev@R}XdKXkcr4Cf9Jz#j0N3ci!T*ZKuk3Lu`; z3rs76Q5Lc@z+272oEyP3iKatIARLLOy>aAVhbz9&Jl0zGNC^49cTvA~u&+3p4;X&n zyilNvGkyK5(_?eShXXnDk8|IY54>9*&;|W?FW{g)&3}U~f;V2#hcM=97D)l`2F4`G zar_`1y!yulkYq{$L?WK10z8<;vJUXPMEbO>0$~E?>?pDT^?j`_z~#fW3IWhRA)^h& z18Yh*JXLIV1urT9cmVP?JWenE?&DC4;vE1KKsbX(&Bq{8z^a4zy(a48Nk?s)x<$y8 z2SH^-Trr)w1p=|XrY05hu+O9H6cI781b11w@2MyI71$QmNgkktFj#CAzS=%Xz%2k& zAPfi*u{?cRn1V#M*&+Z^J#-r#s?3y*z&(J6p(%_pouVjB4#Sfl!j!eFppR(H1K?f& zC*k+8EGmvaZ{yU_YkCb;0M~RLQNo1*k#UQlTnj;HK2vE`Kd#&jZe%m7K9aW!(i?Y= zVENK^Sx{gZs6$Lw5JzA)fVL0L0Ad9QiEGIk0HW>f6xa(cSAN0M{q>L~fS;>(fHVg= zFpLs9D7`MJ;9|8BU#`mCv+OdxUSY_}$DIPSR)}-qW-e&&xnrTM>c0Pi)pmBkhU7%O zM=SuT$1{dsg1C&FtAv0%+qLatzCQ8QoV`He?x}fXn0ruvPvAH2uHpJ0ReCb6aql=KnmWv}chSP>E8 z?S>dUg2~wjF4?ufP99l~jz!&h4H+~+dBtVFd zZY59Mf=n^qC&%0lya4zGc=yru&`I%0L!2&D00<-%J*`}dQSbj>WlnstdjJ7uV~q4|4e6*C?!N2H=%s zy!~s}tAG9j@1Dyu)ooWKE3J53NS8CV3UbAR2Iw@ls%d@tUEdJ=iIKWxqOM1u_&cmJ zG6RDEl-&AxWqo1i!0Ug$?v=D8ATutF$LA(0!ZqDm4M`oT&pD`nz&Y68%SrDa5Mmx< z=&3N)4qaN@20&XfNe?ACtAJ>)TqouuJMDqogMQ&)3eq4KYjvKmY;ODYt5$ebpp2S9 z0t7E%!S>?fIbPI)-#lH*ZLPThs3L-J;8+ZH4o)9@9~8ELLN0zXa1YKjIRyq4mBFR=>VoiEnTfZ@0{Q_RTmJC=5dL5g8HP(_YheI@ z5`;x?6caE}{aPD=40b_lQ0wH$(iViF-RVXa^wF8U8ZqPo<;htI3y{^X=o24az+}gn zWbu010_Mzy0+5K~3*PM51*Q*SWSau3L0!4YL$`R5gPgDfiD8Z+iSIVVS$$pqQ)W$g z4H;eHhNFuIX>&E_hpvO&u_mm13WYWgA*sD?@d{$hnY;INEx)!_indlDwdN@kul(|3+FDG3 zYqka-oJFm`Kk&BWt#l?_V+g1RT=rMG9)Mg0{^10rAWoi|R;oN$>{`yO<}&53*$}PU zl@g+en9Y9%DOTLjvAd`%yBl$4`3U+bkaQBuNL;`T3n{vSj4*f}5{t8-JxNDMAj%d% z_eSt3&@u$D!)Y)kpXre)$j;(i1DB(1d}6cKR1VQJ82sNLz3=5LhFirU7(HsVnSQh@%{?_G8}S?s@kCz9B{1s>xihJ2`hp6@od# z>*&ciUg{1rcNJ(Iydni=sY5iaUBpH!tYx$I*!h2O#DH`^$vLY3QWL6g(6$=>aqRcW z3;VSHRAk@t%{`=_c+{8OPsw@Ln9DT$=9w!t!j#F`0Aou)#nS43_AiJ6jN$W!$@x`7 zhw%+L_ucBV+?|bH_DW!T65tpfx;i8oB6fO%vRVuh5}*GJOA&BE#L3~+*6oI{&C)r1pMc|#Ugkj$fx5zsU8yT zILZb?X<0)mfIyB;s3-EEk1B8|+HKhC+e3DS?iN+_8PAHd)WQL$Xn0uqm(pb$k+dN+A_+IpS!?U1@qELDn6h);Xy@51Ea(&4G>O|mq`%Vo3$OVXyqFbRtG7s;dw z;03Za6L~leZ=)Qwgu2*}CRYF{4vxhYAc{fJLRe%?s`h1XVZ1?i!Dvvh8$cz4a)#i_ zHFPJxE)A*$$t$u!b}CL@&6J;kB2xW9;%^PW zRX}m~vB!0;%!V0iHD5u;oM)gEkWpGDBPH2Dyy{98$Vhc~=mEqzowD%{?}A6DKS)e+ zq5#MY02}ZsFp>gr3K$CDKTue~D?yfV>Nez1#TjB;R!4n6Gzr&ii3Qjk%IXzo@T__W z0`3S$tOb_>wM}9$j!+<6p}0^QiK{k$aCV%dluwLk3KS_@R+)zsP%xJw_fs4p<&vGQR4Z zfBm{~WxR8Bb#YZ@KYAfI1Or{mPp!j(jDLsXxmv_mDJsBSLo$}tFoR_+q%;7Pv#uA^ zqo7cwNQ=NpdE6m9n! zp9QQ|FD>S1X8W==mVBXuqx>|pSQR2xPpIIdro6r)s8WF3q{7PI)-VYeEi|rV zuZ$a)vN_9{J!!=_Q`wJ(f(j<It(_%<5+jo=)M;NL3S6&O)jHpmBT;=py{WqQ&|L^?la5Ha@+8H(mguCk?7o1Y!kt-7CC+KB7X8XJL0>e(aNw3}^5T zzZp}_b6M{DHtYJo_-Hw*@|&#SBc-1u{N;y|519Uc8T||O-^>5eqWlkP38%dJPhalH znYENHEBu#LH)4BlOojGL<+`xGac)2CTk9Zleq`Cye0YJG4i!@eUH6w&L6PeA>o5+x zEy)f1fh_6(8X2_#9sfAODc>2FEui8hZ$G3kT@Ltf)*p&f?)Fpn)r`q$NRf~!qm?mb z7xWVCWpuZo5XMY1aMGkG@B)PvW;fw&X~6&(>+txvNios|U~4T^2eHtaw8y3z#z1;! zgn?a(taS-GIp#BH@Mnl2dsP?d-RNVkpCxg%a_m@tBXpIehAem+lMoZ+`sVzK7=TXD zY&bAH@92c({y6n8^+1?@dTjMi1W#?^dR>!JrSX7&e{|LR-Yc%dn3kqyE6V?R=d%(` zYOYL6(I0BiFr*K)VIE>9bL2WzO)wX$tElQMZABp!`mw5S!?Z#X{H=Shtlj+f<8i>T z(z8$TySk@8o>RR1@%UUn>Y4LOoo#$~#`rFNWn|t6lSi`WIU4lUU32u5hi*@!{F&w+ z4s~)GKjbX`{zLAn=fLkXxttdrxrRZqAiFUI=3M_#p9~rmzfW9BK_N%4P@aKn!H5%> zqf})H(Q}aF26tTHpybeqM7opB_p(2X?!xX3ava76rQO0Ruf^I(ULW%aR<)%4lCIrj ze+awD`M{5@u?)3y3xRUEt)a&v8O28#ZXpp-JZcn=*-i|kTz764@2&}n2y1sOzJ|~1 zhy)~cenSKmpFIS!KIA#Uz+Is3I=>=#j^9UB?A9Ok|HQuo@@MENaC-~KO!WT%TzWwe z(?bU_)f^x*@ND=j5xb{nVC8P}45dgrgr+L(9~@Nkz-_TdJi@x)O+#+*GxPE=N*Y;9 zV1Q0I#VbU+t#y#iCbL;qBh-yL2UEUmA7cUY*v=&DDhg#ooVdB|On#xnTm5I&iLh!; zdJkP2H^+BhtXaac_6$>P__gf8gPX)N-#Kv!TvM?UG!c8=0bkGhx<2h@WLuLI)CK@D zkcFuUzAi1I)&x6vJ6LS5oN#K!ZXQcIuyexFAqr<9_%#LzW^-U=yJgcZNb88&4lh8O z9@(~C8y2SjnsabYu@3srPE;^m7d4Oo(8g&gnpz5M_$5-0YLku4NFC0d0oP=NoV(=( zMb+a_(%S`@+qKzqpuA>Suj^4|f<*w}QEh^39s0ju zj9{)iX-6`rghE*;Tnc#1W%B!ELsT`xgf_DI;G^%XAxEV=MG2*VtB*|E5E?%5dtR#$ zyV>d@YB#Brt*dYH5?$IK=ZY1|*n%;sdDSAR(JSDJzB{dd+^}6)GV{|L4fmXidhvCw zsB_>|p^5GZhpP_MMrubI?{|^obGo4KA-6YIzm)w(GygW2{DnZ&8=i9md*~H#R&NHY zgGkN&)Wa2QCRY_|ssYady0j`2hd>%$BF8K_b5R0-Oc;VN6!<{5#h+f$f#2HoZ?{duOWa0Ug5o9jI^=D5&5g zVn|~J%6+uCnF=df${~cL9uDCZQkDC3eduh3AxGx`?-gv2gewU4Puh^mzA|lwGm=_x zE6`)Rf+;&4=2IDLhxz)l#R}m;gjB~oZO3#iJ*sYk-KO@?_&QhsTM)sfZWRK~fqEBN zP2`5q%A%0U$SA!27-pT;i(K|!2Ot^Yw#n`%~XF+D|%1cJrJcAa-7Dr z6c|KQ(e#x^~_m-_^@ptu6p*UAPLokuJhJ8 zEM`he2tMj8#})_-o3TLa!HPn?M1{fzqN=+wNc7G+bt-8|&h{PC+Svm51sZP%k7|aU z7A79;9INZ|V6KxSe=c5{cUT^(ZxAEcHco`H1SabUr&AhfN81sh!k zzmS5uj!359oK>xM?jVw^I|82lw&b?vCYEJaA5$0XpUr|2NpXjs09fI|R{_gi6W1(3N>&mRSBjX>aH!CR_3hL-7=5#sO5%-dsFX7PbNH3# z>Vk3go$>8_t`0To?N`>U;avRc%iLvb5z6TX-ja=Rae~F2xo-OD_}iQ?|Eg5IP<@v! zKQ$*i#dI|nE4rCn_-enjq$2qE9I*0@zB&VT{|^Z^O<2#o&%mAkMcMe#3KYexC~iW zTrar{o8GPmhd(f0WGz#pf}9oZ8oyu7k zY#N+>F}kiGPyZhtna+)Adm6Wr)QNtva~oMZwCx18uHrG4Rn><`XODY`Gr}UpHr}y= z4oVu$SN$Go1I?EUUGI&an1Z`JMF`m{$BJt z&{J)kK8t2u-?u+Wy9Y8Q(B?iQf)&H!iaRRD^FsW6ovQ6!HYBb={kAGTyDInQ+}q1i z`&fUk9kU5JZ>)AUR+pZCOBeM^g9r+>=P~o|UJn?8a+e>^e>>X%I}?@^oHOpVHG6M6W@qV#t>)iluf7|2t1apL z?d=b0QPKri-&Y!|c)ccm#VR~pH=#m@fZ`)*4Gm`Txhx&pOTLC>h3P7Z^T}|-C5{am zT(n1ceFW?nEzVRtLlqR}X{Ob1K9Lc3BJT7Yl&bH{Ks=u)PkEH-|HD5!PH{$85e%3~ z%~)_|nD~GrILNT1O>I7CC#P8xY6@{-uw8thS?2m)D;y>R`AQZAQBW4eYi^r}@;(9t zRTc&N_4*Qk`?xUm0D=+}RO744ANMvFm?wn+SGgb$2+{;a=L|Ffjk0Jq;UC=s2`orpPN*g= z{n&ni&gM;J(u&+FM0$oH9m^R>=@raoeep#zCtg-ql{-53b|d8U;mn0SElz!PWZY{0 zdC6xRb(a9XKLzC^0L~~x>VJZo?MRJzO`-m{e-*&^yJ|-m{#hHN-NTi90u!w(D7C8O zu#&Fp_?gKppqTf&@B@M)0KYy}F>NIm6`eV+)zJOKex)wovne78r6+>^7|~X6CPz0jR(|RB(dt{vlY|t zZQEXA?Hvo_zLHMnQ9?ByqE^j&+ch_ZtqE$V#fLi1t)UM4;b>c6TYJ$_aM1wgEnq|A zWZ*!O`X1*ig8mS|d2O7Xd|fMe8ab_6y0gYAl*x_kkK~1Cdaz(aLlz9XV_n^chiW07 z?c$H`1&B`p$30eur&$y2ush%&9U#>bLz*9#R0aE|F31<}BG(}ss;d~|u`$9t!=prr z5x52q-HP%8&4b{m_U#O{OZR2&z!>m{g|s2XA~+gTyraoAPnc4*ow=igq`i!o=)M%! zJl392*iZhk=F5u4VZ(V+ql+oh{HL}J{qN-CkLTa|YnxOk%}zU}u*u#3aE_xN z&e6Y!pIg<;4@`4&pVo{i8jtjke?LRLcTsx@1q!$qFnpt*4$*sQ9Q9YVm6EE*^4$=$ z;&$6h>j1)mivY}4R|sH!sUyZNc zpfPi*{)2YfQDL3cG?>ddPV(}Ty2dLR^IxzOp2p|0_?4dv^!@1#4Rh~a#^h=`I_KX# zf8qJ*`7g9{oU}cj1rlrR2^POlxI-~ZRh&LlKvWOI0f>Z8co5Y$>cZdz*hB1Y(g;=1 zrn9k5r{@a^>zg=7B)yZzpWuxpv&K=m=iBUE~0AsR%y=i4-YMY3@m>rpPXl zP}`)flyytj9huu+S;#zs?t^qR{0^!jHD52KW8fS>x&f_6c>$aS5z6zOM;<^SHqe$K za1pzKxj+F1cEbOTJ`N)UOsHxDzB3SYg?z&NV@?3PXu3C-Dp=YdnI=EIzu;eG1n2Q$ z0vGQl@SwaVz-o2{oB&;gm0riQe`ttF7K|wZrm^$OKb-sJMfN|-=6B`#Kg^2HK@891 zjX%E?3>g1DzZyUPrrh{rxVkK$$@7gO-dG-Q!0X-P4T4kv>t^wf6e zj%fEZR#Vkb6CCUx1yJCRAmOGa)TuNOKPc`aP9ai20`G%SBtksExt)6Nx3kPX%{j%{ zr>H<8)}Vr2+4DIs!ApFx{KmM5zS^oiq1&?<(vzJ@2-sQuM*YvSH{aM_8=5^U>H28e zds^bnrum=ADFn1$48R;>LZeR}fhpT;<4sdfS5Px()`Kos)#D#FkF=>W{Ub8q%=j*) ztMc@q`d*rkI1lkuZbm$zh#SyBP=Tdj$$K|;cSIY8*0H^}Fv5H+(2@~muSMPX@j-_S zOI?Pg%`kS%<8qo~J?Og-JDLVv_{~SXueG^~Ch)@<@Bx7x3O_x>8);DBw#(kF@ethC zK}^6yzw3LI7RW9QJTWF8;*9XvAScsE7z472nv!l}dJ2}5HA8)ibE(78V zH$G~VfXU`A6oQ%RnU^-%S@9QG2GDn6 zjeh*8UQirb!cwMT)ed%&)|?)<1GxY-pBV1c-oB)>jb6XOO6`bDQwAz)lBktqvuKtw|9 zs`kqoIKKroG}u)K#8ca)mt?HbbLSB%UL*_Wgin#o6M=$5SpPHd_GzJ(2$H0vItCND z2e|4gwrgkiyBr{-L#1yL>{Mqw|LE$i0Ti0-=vgq;3Y%(0Ny~ZDz39r;M=H)B&w6@u zb&s=Gmvh-OGXpCq+4yU~>PW6uq#cR>PeYeFFy~DqcTCnzRXlTQ(18wW=u4nWBum8+0fsx_>IH$9Hrv0 zxp42ne;@nP|ISGLx4183evD2b%muENXa3{k4_~#tZVO+yH{kZk))Utb^;|n0`a+mI zIzoTIyP#0nRF}Zfm@(xv(`yOi%O>e)q(1R3;vA!+v+mM0L!=lD-`&b@Oi9Rnk0g&4 zld<;+gY|_QtVK@e)v?R3Q{d?>j_CrFGOZZNZeDJ&_d5-MJ#A&@UN`~-hM@7 z!I9FMAew&=F9@j#*x9>Usd-p6M%pp^!0>aBm-?w@rBl&j1O3N$oKq*AG|n(Pd zjdsik!}PFxB7O!Z$8 zJZ-eENOBvRneKrLmXRlmPPEHMJd{E5NFP~?cf5G$KBM@^N|+1`hEpj8&VnMr~Y_BbE80g)NGUN9$h2W+QBbC9tz!AylzT~ zm-%gqa+03Jg5!)GVyRDJ11}Z3s4cO7d=UE7q~2tbnxsklTcvmw_NMCs-fL%lV3`nw z@s`gDrd*UQ#4*$15SEMQ4%&joDj=4YvpJExt55uB_I)VkzOAPt9=Y&yG31kVC8j5C*3-;b z(&-R0nvziH6>h4ymAq@u(62S)p>YGF*}1G|3QrbGj=JJ&5GE3a3B$w`&1XZXD_JDT zxjOLnH9KcT!;YIxDbeo{G~U%Bb?&0^s{+A3p^yrtD=DK)AOsabG;1c0##7%A^VW%< z&}+JhR@Fll+rKX$#)#{mF|%*hr82$DNvV!w>N#8O-=-xNb=}B!LiCbGY*9BvtyT`x zH8&^%BwapcQ}lfCV_wHC;#hvDcX>J~RlI>kiecy`Y?;(wNv)6H^Y--cqtD%#AP`n1`axeZHi*hu4Du%Res230oN@-sPfUHCsF znLw8I&VH-cZtN4kdKnY{s~}q~mh8#>+F+}Cw_bQ|dHBW3JN7`oJ~fx!=ehd*iPb#! z+1AGtQ@xXbZK^+j$P6k}p&jDU%xH7jW{5}QuEpcd1;TvO*mDVr0?lXDk2`fU^PFdm z#)UKB&F8=UXjUwi)s>CA+JHGc{Y(yKa{luR&tl?po;9va<}Lvtp6T~t`%jLLW(>Bq z-BJFs+sqFyKAY^w=IGyezwTc(!=mt2*JDBv^+PSJ=UtBT1t(<+gUNYC2 zyA&|6$~L}YcN$j%3~#V(W2T*^uqNIRS;bXnA~AOAOtJJ5z2<@#dX-dGFzeQBeb2d$ zcBm^~{dI=f5S%gZ`R&0=cZkAQb65L1R~C)$2K4d9;l+D@Um1Cc_Ii*~A#dZIsyHpI zo0-`cpY!VOz-ozc21R3f7CFUbnPH;XnX(}RRo%Rxn!Q+3Q%*`<9({@08=#TI(r`yW zTRZZY>f`&l7VYgctPU7QV&X6UGrzaJm(F`fW zKgkRkketzl=v}HsutzRuup<03Zhq1rugJW~ti7NZw#8jky{Lz3;!}(UjwUEB5nFiO zNtnYh#;IDCT=&4S_ zPcJ-IetPkE_15E0ykSKN5TjtF^|uI0f^s<@fkR8w4LW~)yC!_L0v4t~;-$`Tv0|Cn zIFyrOwx%qg(OvlF&C3^aJ8r?kNdr9q+$NZ?yy}>>-Gmr0kGY7OOiyJWe2F+N4N7AN zrA@?aORQ{A64BtA4QIBaSd~lD)XH_N9y)p-j_0^{FH)*16_=4-PVvAcvc3h~-+9t(L)(LQa3zVoIk`>zQSIGe7^^ zWc*u>WvyA~{ay&xJR`|eB+WG1I{_{lanPaL> z@145*!<(zhpcfC`7tKDo&8Y0AtZkhM@+UJ%8mUKXfx*}>e3kL4y8qc+{A zqUx`6-f9u4+MtI-*^>MoAzN{Yu5qK;)uiH}lLos*t75{gIpX2Ws@#+a9l>C|Zf}90 z1_%d29Qtc)FM0l3v0nZX4S4%2Iw?fQ6o#|6H3|N4VPX5G7b=z@AO``l;FZYW7XF(d zcp1-_ym$juiH9p6nqB72Vu}rNhd4M$--&ywJjzB|%AiyEAD?yFE1Bv&3|fP1nAc4= z)s&Snv#~jc7>YV$Pbm?w%#4c_L-(KpPN&=GeRU&3bPFP@TgL!b1kX3aA?EVk<^_hQ zg0ZS4-hLL(Au=i#|jEK>&U zEi>k7tu!m7MY%}8)_gPqgHrR5%~;&rAzqM7dC6kEPggrJ*89kU#*Lu4+-|#{w8V@c zFh=VbB@F)BSYaE{mbG`UjGR|KB>UZkfW7l%!?qZ4tPG7FEkM#?QSQ?H7Rh6#NP^Nw zF|EE&y(@MLS6)J+k!c}7<4Y89!6@B#Op}3CTwqDJ=>E!*Mw`vh@tp$Du>;Gn+fyi( zGbnsS&TDy)midA&; zOVnZ%K$|dB!xx`~Z>SSIMobhZN^eoUoHC?76ag&}X+a)p)1(ilFo*3}+$csg-!WvX zRn?Vfo6+eSGD#kbZ^$?zPOc;_RseXw(y?@k&7c}!ORDa#b|JhAtmvCqLVZVV36|~w zyyeMY4NTuH$2N<3w)&Oz+6+fex5kXQ#JPyMGrETgm`UCvnU{=7+!;A0Gn_k|W@3!U21*@Hlga%n z&v#$cm6dP7B6vZ1Yes+kprIyfMW$fsyL|s1+Npa)3drMgm6Eia%>w%oPQBhv*Q`=7 zz|{b@eTKacOk|HN5NTyfhcS4daj@#5yIWP4KzbkgT+Cq@i7XOk?Y*kiSRpGPc4o2a zyA3rYlF=!nCfAbHld-*rP~JMoISzQQ0qn;Tt43q7WEQX7r!mD0U=~An78}AMHz7p( zR6DSOJu%3gh?^MD2v!jxHIbr>_PRq!nRV5=-AGHHS3a=!faWQsi3vm&iU`aQp zNLvWu`P%_AmJyb)W%x#8(%kJzw$lDg!xKygpf23Uo-_tM5*Fcp(F$vpxUec|u$XvF zEbnMi`uWtAr`qfX#BZCL`Mtn^S_e-^~VUoh{?up4qENAFW+91Ia zFZ{MX$h$E?dmEXS>}gC8*gvLDVc6uE8QCnjlV!|i-g8VN=9F@TYPW#)*xV}ZOcfDr!iqN2on`Wt1YthC?zsIw=pt zjoM$XZYKe0qbZ_UUWKYykGc-!Fm{94B_=a8>3Q23qg58MgQW>KL6giATfc`zbWsGd zz|ld~Mp_=lMteJLPquH}(t6!Q2=4$d72;Bcbl6r~MNkv#I;baa?kLfS^-jaWO-QWS znYrV@_X2B6G8>-IYZsxTk#{wbRS7$urHJ+)WlpM>(I#-1{$V|0moZa@RN@ZNBLv1S zCzw^sh*tcNh7Y}jpORxlzZ@u<{mIvAxODRowE4JMVB%*Fzw=h#!kUv^3MuMz7`Pk! zhlXK?)I8I=Vy74$gSN0?)uK;d1bz18rB&zBi}{szSmVm<%l@~)_B)}6PR;*ZGrCjZ z+Q$J(UX({wi94(rtw>WrQ=Zrpo0WBb{UJJ#o4RRZF3gmBs*tm zY!ybaYR$uzugvPB;HZhNozzpE$!q-Ps#3Nd-Q}9v&Z$b)d@@kM0-4@+>qF(0Cox%8q>ThK;%_Y08;Fr;P&hjk*=>!Q=jEdP|BDHcv%)H*8e< z4vdv#XR1G|VWH-(x+_g$XRb&lH^Dp8jP*z*DB*W(*`H`e@NK?bL2I$x z7qMp$7Xai8Gx%km0vcf6C26^%b;T)U7r?SMBDJ59RqAk`(z(r@)+BV;T zy^@zfQ70$}b(hbw1kjamG{89XFVZu=`UmMj(caQ=?YlRlo&APO#-BQk*<`Zu$2~M-R_j;x3x^F*{z1cu6)gKqP?PIg&9W*WIbU*8YZr#Ajr-g+)A`Xi|U!Ypy$-qLK{}fDZ-oz&;hi$8dsDALBZu-~aLuNX9gP`22 z&~TLL1%Ot;`5HYj_X!Qm8Lrb!>^neofRSyT3)c%$-K=J)Cc9%CL-H(AECnPT?b;48XsNnTF&8)l7fpU1B}^n5dutA}Ea0Ao3{F>5qd+snSO zf7EeNACs$l9>2N_-OiUG$1_b-J&;{6)hD7(18Kn} z^aV{q2~;E!dq751crF@V$6tJ!yKFVEl)bt-@C6|9UUK}tB<2&?i>vp4{r&FCQPGo> zzOLB>|5;wQ{=}2ZBVkx%{{Ksav?ZKZ@663u5xW28LH+OE-F5dH%O{vJ=C4y zuzEx#gCZ3mA>{Vg4^`Nogk2Yd-?d$y@GHvlDg)oMQRz3_HLX3^3 zqT8a_b_c^{zoTmSI}XmtOkJW`t9qKQY6p6Qa)) z!k4i#Y~H%hf4(xFmB|+YbFdx^;pKHHH@AYqFnEWEGj++=bS2%_^CUoPD&TXLpc^?F zNAz6JN)x9yfZ)k4Lp)+wQurpVVF#{$w<9-%Xr!Q9Y@+Z%38_AXk|fB(kO#30oJlcB ztn8Zr;x&&30hJv$b5w45MD<~9<)aGbWQtwLabD`+4n-uT1daB#a#Y$d8q#*?ZYJms znCYTM0cl>S?EuviE!l>>FXmBdhUo4w$h56@_U=@j7b%9aCsp@>z4!c?(E=jNWvNwi zX7nIHIG*^BwV*?)kWbUmY3V%+ruB}4X?B~2=o1r3-h?4I15Pa6vIAw5`o(lfPi$ds z3v4?P<*{wH%O!80(4`SJOm52oQFJ?B+czo zJ`{v|188J^C|;TD{0;k|H-6<3R7bQ>x%S^i*+ZlmgQ+@mvEe;tj7 z90r^_b{}w|g(-61$qGz|o+sI@j@VOPMRzI(nuPbfgSX4$%nvmf24pI}?_XrCkOLi@3S1X>&BHZ{5?g zLbqQ(t~}OW6DjMC`El#{+PETiCH3LC+DN+~yVd(E-!HB1I1vBUzx_MJvC2F>Cv&75sP=WMR%Nxc7M`*;}dt+be9|71V-Cl>p4<%^7?yK z^@BC_&Q-;!W7}%?7Bv-E7pIjJIov36`J02w&nNfXSYP~=$&pJAYhOm0M$=r5bsW4} z)O5G#_{38u(#ejg;->b%9X4I*-z0QgNof1VI(;i`a&w3E^R|NHFuf% z!OhNtep|B{~O*I@~hAMWnDK?szLe^K?|#^;^Q+q%+dEp5mB zo}_&P$4A>faC37jaxNm6IHV;MO_Yt?$g=da+?jUx^kH5}O+ms<-;+<|w$2~MIDZ)Q zUDS83$DSM`C$tf|(yvw@zYBxeKM2g2Y_^M9oQN>Az48Cjb=iume?HTB4m8$_afa^? zUOWM7((>PHGVAh9;N*?Kf2~RJj^gw)5qFPl3XFg`k9|)Tr(dQY3EeV&GfvW0QZk(r zGafY|iX3aW(Pkg$*6ynO+utoREoc^&AFq9QS)Pr-AC$*D*mpN#EN6q8f8AI9^rQCi zM;EOokh7alF8<~7n4|3f_4&Y8Hz#3Pr$yhryId5V7!ef(LuehIq_vchp5Pb2$;~98 z$mDWe5n-%N_}q_{rxj0Lrq}b1ak<^uIcGI5I&c2A)ZMn%^VL^BIM#geCM_^xvHJYc z7m}I@U-Vqx_AOUuO}?4F=HC2ykYz;R(ZBdTfX}}KrdgD@G>1)G-tjjF(*HHtx*b3N zT716B`Xp^nLR-u6>v!9Z4}UTnozND@N%xwFNS~Z4ik`Uf$<}fhuu7^rdFQNKSNa)? zpv!@qPG{yhBt+AmpRB~KcjAWSVO84?ZkHp!DSL1uy>iEUB|DCFe0aqD=em*Rf@@*X z!ymst?9i2->GVlv=CDJ-$kAuG-7ZhKbrrRooE&deOQE#!!bGeH;1%{ z=U?5KxF14`#dzO+SH=I~WByPSMy#cTe0DSBvnyY06HrhRlIVe*SNyIOLJ z+!7*ark^`Dr#p^z5a?=6Z|>PwkoFn=T{myg35>6o=I^aM%>8HO%ZvYRh3L^vj~pF& zKF+Y3{eO7+4uB@GZ0)ztc@I>olpxgvL^`1hBCLb}DlJlikbw=I5MU%@i6YD@1SCc} zhOVGg0VBMAPj%OyZ zfgc`Z8WbLFIPag7bnn;ldQ-%vLpY(&dZLJWOUr7a$RTCDt?fc{jyU&Dj@Eg7qsTg6 zRV&rISpT68&*reD*V%iQ(@z`^_kXo~S{-wI6ZJn`%F}-Yl5N#n>onXZL+oHy7z_%_ z-B&ApbE}o#E5G+zz6R=?5?%H#s?n>J1Y>49Lv#PvobupWS+P^2mW|;w`nIvuN2uUR zUMS(zI%yiqhZ<$F?tJ-}7joeBC+{aupLbkX3k=Fr{(ScWdrM#my#)?W2x;QCZ+69s zi;|7Cbla|=8qZ#puhy4ue1CZIfNS5qoF_}8OKq2be%w-RklcbyZc#B_3YEIM`?9B$ z9Zas7piVWZoDam&o#Jt?3Tu-Crx~FJ*u%1$-*0by_}Y>Zv8lKFC1PvMVUa!il=bHO zg7Py6L`QpgpGa@#+;G$oGP~AS%5)3)74bwQ+C{LXV(mPPsv(Ao^p!r9%r%3{5yICwf(+ zPdVfv--J|H3QbhQ{Ner}cQ&W><%xMU`p^rAF4B{v961xp!5Kv=FFzQD(}r~pUOEK- zcF>2LId{7w8?O)RuufG4$uKq{Y+Zj`3Nw^hK@D(9j~l5YgIj~-z;V!z9=Xdn7Fj2c zyie00DMyw#<@}5TFVz{Siq%rnbjRW*{})c-3ELB$$Vm?swao97t=tc^xGUrC$)3_F zb~0+c9^X>iWUpCHN{jKPY?X^mur_R=bEqACKtbCoFd`qwaKboUZet;1Ai>M?*UBhe3_E5 zUDdy{?fT^L#zOk~TvwxU%BKsv$>rgvV|xx4d^ET+6nyS*nN?V){ah{c_?4euHlGhZ zFzWlrldOg>JlKK#&{+67d3|_%noh^lLORdQ>~9b6|JU-D`}lUt`$6 zftG%8&i6nZ$3yGd&z@vXu$hT^(t}et+@uFqE2(qx3@p1!?Oujqj=h0_Eb5vDYOh;7 zN_|q(t)O=LM2o^Htt7iiwx*_2fGzW_SJ`z`XHKVykxe~X|Nf7+GMhC*uZ3nFHTv?N zb9|}yXZ=R;Qo_<7IhNj)`1O;9Pw1ydVZv78!lm}hA@g;*!HO+@q}3wh^3tm_P z9o0hA#kRlPH-w{ zG+HUGUen1l2pb>{Vm4E}PDa;KVrnU7wVJ<%*s7_XNc4IT`VNk1+{D5S?AshHr}mU` zOLNeCd-AlB4EDiN(cETH0R8e>O!I#*aBE#?mwHg(hem*1YC&C%wY81iv`|nfG&<)m zolY289{c3|So->K@;ZE6t+oh0rxf;CqcyI^`@zzo?j>T$^!G*4)-mem`@ccqYp7%Z zTrEyUky2p%@AswbW=q0$=ZxQ}tJ+ChN>RmyZ^CCfO!4gOqutO z9^RS3-SD;EM4n;V+0Oy?!6`u#P?d2?&I(#d4$=3HaYj6WS-+_eAsIw^kY ziq{EJ?P{(I4ZNQdbcWtIbi%ywl!?L_c#5?_crsSYRg`?-bSvDr+yev8lCdbOTYc-vHj* zt(xzKUQ9Q$l(iCC571vqLAhGX^fBxix;;RdAUPlNUymL+7f82v0YpRVR99;Ng8}cJ zsLvuvU3hbsGA5wm*N|zP-1%UzqmV9$pbr4AE8Sqcga@RP?X7I>Bjew;Ea=~xelbU? zB(=^pVpWq=VVrkhr*wt2)F^ee_Z#DDuN^XwEmLwka3Iq-=exbAyN7d?rcc1?s+~#t zvHAIAleK36B_7_G*MDoy^gdCBIW-Vig&7H~QoiPdTLts-JozAWVrNK|WfYkM>!}4U zC~w2+(^dC?HA@TeOi#q8^e^AwJ>m|a`<7eFx?Q+;U9j}EjdvRplgvr+^x9yn&Tdj8 zcEFak_{uiOus+ZbF#R}vZZ+`~POojn1b*-ie5~_2ToOpwpBt~EdhS0arn&TV`Ps~d zMyPA^S9EKf-bw$7?xhCvzVE*L1k*63FMVpbd9oHa`KyN(Sd{dwQ|bE)Gk9gPJGyY|9K78$SOu2Wpv48wWm;+q-unwhlMjJ+M#Lw%TUt)o)?t1u=3KepZR zsxxVcG+Kc`7eN5yuNP<_)^wsI7J_S{~@BkGF|e-VSA^h?d#Wws|Hu}CS&@( zuDO1{^X2~|d&}LqIK0)g{^1oB*S?=4=7ZK{&*6{bavGYE;B#cKkTa;O(HoKKLCR-N zso?DH1iVK2l&8Rl>-i0SWKYmb?ar}zpQGHYWje8cBA1WfA119_!84vW`odW6>q{~u30Pf|;QfOq5=XoV7 z+hFCEx%dZXw9cEXs9?;Ox;03q>bUis>;CKeNXk8jA!MV5{FmJ;WzUDpb)Blr(OiPm zw@YE^R>*xoBl4`EcSBK!6>7n5y=qMiC$-ff ze|Y_&m8anMQugd>PGmJ-Bq^Wxo}Or)B!>%BRnw&B?vt-&eDk95b+v|>-~Hn5hJp#J zZUd^y2kO19DH&WFHlaD0v|cCGQS2szRg&zu#8ZLhn&r#@m0UyNba7)dbB1Ji_pXZA z8&ImP8syc+2V@T4)eRg1rlDx&D(ZPo$FeT6`p|RIThr$`N18S{&y?Ox-+1h)jG56_ z1LIsVS-P_#iSO-l*O#@|Bg(e@R@^wVo!f7sjF3a7UxYyX6N#CFT`OC-l zoj*)7cH&Y#Ua<4&$lPx0+gTp#+5LT2vK-g$%|>-JkP_ku$Q&)sP15mAxzM?Tc-bWn ztGZA>m0w@me$Srm{|vyCTFs>pTA1%f-}GEbX}@q_?wjLoST6mK>t6aCnbQieW0cx|8#yf9H4_tvekcED(%lCjN|~3J0g|}y zhCyMzms`Hl(jniWu2K_5cX@mZqu$9T>OjzWCF!ok((j;*x^j`t*Q`CysGXcS5vkl2 zuZ$_sIQ7<)MVeRRHtLzV+}h}bwe58}lJ0)vgjUw(BymJ<@lp<;(>P3)I}YPf?^56aY7zLV2&rbP;PRJs~B3Wr{3ET5DT zPRqbI;>p^M~fK)ZZ1BoOj~)>?I+2P8E;LlTY!r@ChvbpxBI4;iZs!HHGLbM?0drN-U;0a-Rt{Ug zffVzXB=oGWZMr_byd5eRwH8K3z!Z?+sa;sPsUG|EiHdBb-gv$EHiVYYhC4x znnSKMXX>yFdK(4Du6NS{nWmTjj!tzvPlM!$YM$m;pf7~Jq6pqnS zpiY+o0K`Vw=4&Y3;!rzXRm}FGljd_rkB}yZngJAn0jHlwNzD!OjiV%0sbQiT^H4^G zPBY-lL$T&0IOvJWCxUtdE&?(SnK^d;8w3Q?R#R+2RyVKQp01T*aV>}|B-19WmJ}L? zkxZZ8kmj{>xq#Qhk~mF(qJkqKA$Sl9QHFRU$lR?8(E?o83#DnC*_@GdqHd#+iHXqT z^yzUzZfRulH%JlaWn1uF0Sr1e22-y0LIrq5=Xxt6kp>XdPoMs9$O(^$17kkitWIGL z+}uksWolAP&#NXKW@@{?L)|NkKiQ1+N;2rIK7Opl{PQKOvs;pC6Jz@9=aZkd-2xS1+ded z-vZ)~Z(i$iDLB z+4*rOd+!OIA%>LmZIX_v2G%paOe^Wz*)4+Xq&zTC$*uql@W!`;TV`1HZyU7E%FoOn zLY?zG9cFI6w<>`dXNU`uVU=5z91Lg`78ZtfmFxvR?pm=s=1h{;{mEj@1EH_3IjK!= zes?}l&#-%W^xD_=xs6|0|8pLI(D5@#(}GznOI1f@yK?V#A84^xKd0J~8w6G|eL@bY+EjORW|kz) z@Xnqz3kCn#1*E>8veZ>#E1Q2-wwg|YPzaFS*FADZ{e)R$yc|5wtphD*WLQCfupm8U z#e;F1FNOLmW4@;&pVLF#<;{~+)rKHC*4BR8jyf9Xd#4O; zcuNbb>+?rc%TPBAtdRvFoD@CwZ-nooDK;Z+jaV zh8B|YmFfdks{ZMH#M-lA**g&X0%g#sb>roUs-iPPjLYTUvD8%02QS?!-T3jqdhV0u zL(g*_x0o#5y8LKJrxg~-J?)O>l6!0Jkbf?a-J3Iv4TCk8YyY3#@BjMN#WMYUU2~qH z>;+<~(#09-Ip3x1)6wPL0hOc{hEv1ylS`F9`&A+Ql+X45T&HktE|;PH%{yY6S}(WX z0VRWF$h=isF0Fk$tunN!_BnsU-)cw+L*_sNYI`oc5`jtLFd8?9KmcqfRp6qu`Mlb% zpm6T(EuACrGXER-xBrgQ{om?r>X&`J|J`oA|Fd;$bghseV^XYoPO^Ty~peO zQ^ld5`rf65Q_0n)J)(2eYVFjBl{xKHQ@z_0rrEt}LX7mmv~q1>-~5=EAM9dLV+h|T zVUAubdN=w^(C5ex9^gZ*JwMpO5TP{)n)K1oUOoFLX1p{zM)c5Iw{&z6s?wkUK($sS zrYf-bRKt&_?guzk{aE{}@%dkGuDP!yVoc0;5 zDbF%e&zd55r>>#Lg2?e+v%=a`t2oSp#`tFH$XW6NGj2b&dTu^IVoQl|$%g*a>NKyF z3O}4gm1=UN0pDH~-rt=q^XB?$a+~mFS~+!T`hAO~U;jp)>#^fOU@u+531hpP-Ky&c+u4HwW*V4Zgw)i@~Cw5`%7^d&~pB*2^FO?u%JBbVB>%3N^ z_$AaMBHn1z$_BYJ^Ki=9%Iv9EADw z)Go{HG&16zba9bqZEo9!)~%ikb}|VLbKsg^CB5){^;PN z&p$C_UR$3%C`758!KoqvD>%Wv-T!B??~$rAf%|aKM>C@l3d1&dk&1GPM@wWB2NI|n z3~qw+O&AV)?(%QQT19FB?uQ7-5F(25 z#$V@$u}N+A@Vmxo4Is8hEqAvOFvY0vBO+saF=I1h_jU&8D(uv)zVDj&jh?>tF5@#N zV)w0O|Heed>amJvu`6Y(zZYLsj_?TIx+7#!7w60A)I{jKpeHGaXL~{Sd{_vV;as#P zjo1y>>s+Fo#G{}9VVMqdRi&MO)taeLof`%%E*hdGM(>6)&xYrBiuzf_c6Gd!z$K=3 z^+Ktbx8Y#)A1At<&BD6L)DU~AZHo>`YyV^+M`;Q)DfwpH|16$*e-BowF(((Q8|GxS z)GLOE|NJR{dWkue3MQT8D?)2BJpQoN^|hV*ao~qBdybpzq{aYTX{V_ZiQ!v+X(@tU znWlig9bWs@PmaQ8=+)k3y6dJx`;KTe{EMJwSNv-Ci{8~wSFU_I0;V!TRG=h=Z~apK zuB-*=$K$@HQ4^DS&~_kv!zEgfXx#jQj)IonOP>R5Gt1(0wK_(iV^?`Uo3pHQURg zbZ~xz@BpgIDPW^w4_&afxKZMBp_U+w8>BEEMtMmvuL)q!^;#iH=)9}E8Ie^P6sIG^ zND8h^YPLcK+Z1Y7#epNo*d=uH9#pqkx3)Ec&4e)>VY<7HoOm+-hk-qs4JyKAqOB&wcj{NAs`$=xV;-#f5QD@_ z9QUqHf|vPz1@w7M(Fws651EaGGR)!p9;op`;xV&nf3@Y! zpvcJrGI>F>{8%m9go{Py*5<Jn-HzpX+=;?A2G1_GG@K zBQ2^eH6)pLwy(ewmCZIql)?AKm0{Rc2xK@Yp>VsT;N$aNEpiRAQ&Jh1wxX5q%8EOnIppN4a1 zdg{WyG<9n2(UK|SyyHj5b%-uL)gag;aTYNiI`UsCc`)P3FVct_P$eHrwuNu6C1m-x zxd}ORSAx_`r4FF4e}1er%|Y@wjo{+5GA`!-0b%{Iv%OxS-?zvfyfWS}D&|kY z(sU)Z00bN)$$$;I(g?`{7C&-fOj=Q=CN#??KTqxQHmv9%hje>)%N31EqX?Kf5vmg( zD8XPzw?G*DR04tD1UqSr<&2)SNG*kCMg|8RM;zFzsNY#xndIzlMl#7dT7}lNFL6_i zM3Rb=atxKB@3fn0l1;6K6B@TN@~%KH*d-5yd&-}P*!SGpgniT~7t%_(gOIdRvCh>O zvwPRzev*mEP!;YG4ik7+ZSdk@@ZiuHaxj)+$2Sv3GO3BFFVU;qAPTNdS+vCQ`-f_n zOEc1*UxnnlW4N!Ch?rC>XgpOMB?^^j&YsXpQ_>POoVF{{JyLi}Ct3@B^nkBA`6O+Mm8Rc}I7Il%py;#`6at>~T zZc*ffO?KM6b18wl9`HPN{233taH{ki(7936mdY5hmx8iN)T2sH2sjQ(0bOmJ6FrVD zBSQzMG)#xk%%S=yEB~a%0qpZy0~8LNAw(hHbGeO2agO&0@>zFTvzJDK^!MRZt0Dv5 z+j=O%B;G8gQ$DQ52k(bywK&@nd7r3s4FO5K6mfmtO5~vsHF6ao2y8EPvA1AQNV)t; z#%99G_1X^urj@-LSDA`TXtG)7X+h9sCNU4jLbbQO%}pAM&0M!dV0kUC#LKqW21gD) z0@}&AAMg}Xc<;v38|4AcP_^|)o^2;xWhizb3oN&@%DY>~SY6T+> zP>`%qiyXK?`=@)IM-wjBxAQ#`q`~ZJ8@a0VTo2;N&3H3#f!Wm0GRA-pD*+$2>yZ^f z#8hZgwwV1Y{l9FeX538(5i&mx;E(j>;;El8WzU3EVJpA}1&W5S_2BTlLkf4(K94&? zJLtxHZyS;3nDLb^>XFP;H=djkC^kuK!wF=8K28-(>CUUdjbY)d#E&43TaqhN=J=f}Xn z6io5rYDaz%G+CF2K`=M%5#C_y$5|P|NtQ0UHJd4Css&)DOb)tPoy`xy&Ff5{yP#Gy6jFrVr;q2j{a72rIHPJ;;yd-vzt*UX}K_BjTU`noG&};(8Sz;4y9hr38ATa_+J%V@Fgl>8kBl z6&u1czQnlh3ML}9Ig7n3Ev^)Mis?ExuWo(`r&a&&)aQ|jc|Ci;NN?%2bzDvjZHzcoiM2ow0SIO)4 zs;@dcI>I$KUeUJ!c5H_MIY3u-c2Rb=HmExv>EC>txcODhdQ}Tb4xR15Uj5`HmBRHX zk(JmpHhpQp`PG&!;Ki$A84w|laWOy?VHBWq(JUIO1MwWD)EyG7y`_bM@cCY3k-#id zNyMncw&jjtpSvmCH`;d>qEZQcjCd1kT@;@~IFGV*hw*466T1?rmT{wT@IZN`8bc|P zy>DD=luT?xk)cSwBa8akm+AW5dC~HC`;ShNuRZ;1T@g`zbjf2d=CG>DzOT#wqVH~W zOx0}jQr7!--n`oUy@m>E`i{$#aMu00G2?B7y!;WATC%nho7sah!$aFgTPa5!WtJ<*ALV3%gCC5xK4=K8&cd*0uVbcC7MwG8Bp!RxOQ2Mk znV)m&`Kjjvk7VBj#;STSTWXa`K-*Nc#7&xe;HGnOUvROux%Dw4L>k|WJ7bU{FHxnZ z4Q=i4U)$>y`&sd?7CrG;0q2f)LHY5n&;TwDD`B3~=0^g=FA4I>LVyLy0?>pI33PxvWcaO=g^4!{-i_rYJ3GsX z(+uygbgb(lE zk@r=gEMEjmsPS!xXpylD-#S{a3obLv^+U$jWqJfMn=H8;vGFA(UHGbB@@xCoQ{!9t zG(fA)fUwz?>w<6iC5=#hMDKPUz!?@#hToS~?(8Rh08@RW#&FT6I!2N#a+dNL1YXaG zm`{@Y2);gyU4ls#G)tRAz?@`}Qt!u)bc5|+Lc#|g5uz<-1erO4cRR$b@rs!P93BS`y*(Ic9XnCkKyG^PWr-htSWR;2fUw@dU&d|T-|UdGQ z5r}`LYoD1}e80xIJ9STsca2hw~=8j4KAN;}|le&nOsRF<1zYUw_tJM3cx;Q1g6 zdlGDdkv$$~2G|DLN$$fif-EIBRr*-DFWE>FTW1>!9y1w!)w_hG@GUD%u{#C)K>;#5 z(+*#uB@SeUiO=?~m2v$zy&LZDe8VD0$~c5S z{aW&>eTM@MOD7=W%JRK%$1h!6NUBBC-ckh<5XuZfF$Wrh)D0dsY5oQV*b_AUbs75PR0i#<%2dXEIM+CU`DvF6&(Hh8? zE2AS9lk~HB}v9^tauuh291HZ=H6dtEWwE=SN z|8MapX)l5wqf#J+v#v2kdILhwE&(T?BCld1GCf56a_f%hN?D$PIo~VEYb#~Bb{WcrZ zj^qDentN8&EobkPMlLl9T8g4T&L@*ccl8(lg$;Z~WFLpOcw?!wP9yIyx3@{rb_Pto+f`Qj8%&1;Yk)hN?&)EtC!M0tmZ> zbS3N2V;BuhEk=?FY%FU;3w|>=6B;F11hvFWe_Q-rRV+gZAZ}IUbdE3U?4%J2!za}{ zj&o{RBgbrVsi=#5(#RFj( zLV)^Tt0Wk7pt#(iYFV3gRoEnYM_L82)6gNqZ<@ai0d7-tP8uVnYcm0SD{|4t#V|$C z=WM@dSYx4Ax|teLePq!G$QlQUEhul5&?WZpNj|#9q$f2ZSpf8`Np^k-1|;|_f=8mQ zk7O#j6+_<(WM!P8kb{QDen%pTdPKp{QUh^NfePpY*ax)j4h+M#c=db;J@N6f>!W7X z(OZA`79aYn+>gJlR9x6|^^@|Y?+(WNZ(#!8$>YUe=WiICK3~0XCBtCC(YeCxQF`=A zVJPPmt9}+z4M~1|{EmVjq_hgsR zalRD+{3=O4+tRg(otUmIX2bo3jq9zliK3ov$MB~YdUwVK2YZ%(S+{fbudcXwOJ^~S zvbE*9^>IVozmwFzvzfB_Y4^`EDO6sV$dIh|?^NvmE2VGeL;t22zq^*Q6%FDgl(CCW zv98B9zCL^<=IGISO9B?gu#QAjkl@#${Af{K0{=@=D15>c|VAjD@l1 zgiW9?gQq6835%}`%-gWX!YCbtR``!2?|4PUSOQ#y6kikt`ihP09oQ-CQ5o*{&^wyr zXxBjC8H0P1C^!BOusi!3j#=BLt$W8s-Lss#RJ2D80P38-YNDG*~Y-Mj_W9iOPstr-4M?wge z&pH_!s$SM}K+<@ZsDXhFGzLRDdz5v3VD<;^m^v1NQ_qRjSJukn)e1kghzS;MMs$=a1Z#*uC0MqGwF+&xvJe3pv7-2Rxi@6cKZjXOzeKWTXMga2 zUC-LXsn@r;r=*p|ikF4v+KssQXTN`W<=UZ>zFx8TIML;A$)W_Iji43Zwp~5l}ScTtatN zmL4;yVLG20u1vMT6J`8R7SeKXhj{As%ElMlqxyF9bixKHhG>$wk3C{fJY!?9I&REAJ~$gM$Kwrq z45GEoVD60l1%L9?qdmVf$2=&SV2UqN?TQf~V}q!u5EAuIQe?~F4v=yrM$`f+cY4&Nh5WY;AXGdjH2`k-U$O&4vMNru#nW$WJ?zm zrl;0LyI^;yV|t~cy0N?m>@mbTU(62>nA8~87~!cFu3bdt6k0Ayn*AvxSs$eBnNqMj zIP3v0k=b(dt|M>e#V@+Ue>VbSWZ=RzX;kCfyCH#61A3|IR%W~^M-+SevZHd4HZXA# zX7nXpc!-w1K>O1tPZ<5zfBp1dC*4m3+K1YcwFB+v$ShVTOOCC9k!Qz&4xQE5k+Oik z4Sl;5LDQC(s5)(W%P4&Fx{}bgVe1mW9cA&Eos-j9F*5Whdg?-~#_t*g? ziq#D?KT>@Zz-gRp-F&8?s?vnt$^#OhOtM6GO`?!|sgX=iik&S&9|67W4QX8N44(uu zxZ8x&gqzM*cq*y7JYaztU=iyJ^cJ|e+p%q_i`*cPL$PacwgVN%RJ+9(N4fEWY-jXS_mOTvk!p1j{D`1xG)VY_2ZEIBW@BOaAnHL_?=5vE?p z`jh_@?e~9Ff^A!P#0yCSFMi1dJg&HqVCF!DmS{@(0QAcu_bDdi)G9^#SfnaL)U#S7 zn&HPenGE=;C^`?uYaa_SQ;%d_&$=F2$J#^u5#8WM4!mh6Ppp<+gqXSBl4cKA*#Nh$ ziU;M{DK361b7?;#*UeJ+CVKgPMS8L6f$iJBj36>lA|1EzF`Fz1+`f{Z{AH=ep!mPB z{9)@ga8n=S6z$Ez`gTlqK{e$Iy(Z&B%PYkZnDL-jK!hPI?E}{j($FO`*#uP~MrgvF zsXPEkk*YdeDY}sg=GX!9P<#_Hw=#7xbtjY5{|^_Tx1P>Zv4OHfUv4il{5yHWsgvd(+2|{||nC z0+@7}{RO~qc1hO4$YjmC$`s}OiuxeLFzS|5Da29A73pq9iMd%ung9HY%)UC1bm<(4 z(-@cPdJWFjb71OqB+SZ&kI#&>hHv4tRkf0GSh!g^b38_p4BnGd)8;YG^^rtNZ<=)2 zVArtTS3h&|j2DqLFixacaYP5X`bIQ^mvls=eOTOmlJT$G8IrK}TQbLV<=P`ay>$0w z|K_XR@rhkdiuR_?l|MOfn=^d*2W^l?|Kj@f^{f81KYzFcx9QW)KW=zE=tBw25<{VW+NDP3j%Tks&4wZY}xyN{v+Qnzamu` z`7&_ruOk#4S@}u8r_doEMby-y&HnK4(RDio_5T>D+B37E-0P7t92(K~CK3^4bTO&; zov_$)N0o=|yDfPv`DvbeWK>Z+=h_4a(P*82)iF!8;uyr}xbdKou=eoJbk{3?uI|2d z{h9&LXvKAB#&u))OUhHH^mofgMPI*MkJzFwZa8E}b}w%)<8N(0M?`E{F=u;#Nb7Rl zlzkQg+;%sxL>Z9)lo9nW#Jn6;A z0GAgpyLdg?m)C^UEAs1M8&7z*iO#r0V!&xr6GtjV^Y-_8{ll3^o-u+wHUok$3vgJJ zA>i8L!`jBQD7l~~Ai#|nH+UQ3r@m3<_GR`!&2{c6N&r0riY6v1KG_Yl1NW3KUGjS7 zoH@Hkp}1v$dBlV1DS!)}ddS~um2@9PISEbK;TpP@ z{my*q@{u`V!(UGsSzXN6BaH;P__d84Im>@`P8&uCiKLbcV=H%l+1<|Ac?w_^h@uR7 zW$H&MwOR7VM%SlbV293)to=6AviSA&PD4uHS34TJS<>CUCDhx^THN}>A>Bru*d_wJ z7wGaT?eibwtK<2u;SwfT~>+(^9=mtk#s#WSfhCfL093QfZ{QWO7x&!$wqWA?VhQLi;^1`UP zT{_gD6F|(Nq2aa&l+_sQSq+BHgQKy(|BZFM#Lm$hVxpH+>k15saQ|v}{htEWv zodWG3BU)N6a)N8@dJS2VJkp>gnmQ;Nl$ZPt7bcY6uVXE*BB&c{VPAf`E<7%IyoJ2< zY2BnB@$6$<`^O4=Z*@|5`Q|_`@IIihHJ%+UyehbEUy~3X!dw>&mLdj*gls~Lp|_x! ztpUYN>=Z*D57hwER3R^a?jdhQ?smMD_GP&T`Tzh1FYk(%XWD!15LbTqc(GeX8srXB zSSd-0)y>ysZe5MJ@-Su`Ze|Yy1eF)ZS656`0@^8Sv2qaHpeDnE-0$H=IeDQ+&{W<4 zb{W}MW7R<5?jNr^n=E=M1+F)#76|b?IeARQrlHr)QoaBoEN(&KDR$K4>Qfa{^ZZ+2 zL~tKXDRM~dpw}wTC->Q{za_O=+qH@KEOlmIsV_KXe=VL%$_pI44|mEofYR- z)O8v=^K<+&f#K3q6Ech(z=g|P@XyK3K9_m6Iw83<4kA=pbVUVccAgyd`tRVvEB^Qm zN#iUTDYAG9w=TgjZKN3^Np3J+qhjjs|NJ{uHC9s$BA7bFY7^Rg4?AjQzxdaAgz!Gw zlG`x$u7VojLKfafTk^ga|AkoX6#jILH?cbp>Qm79z4Oazy4ZA;o8U`L_GL2>spYH1 z4lssbVQl@&T-?#MuNCd<;)tE4nccNl?d!b$f1MRw>3IE0Y7Q=oX{GFTiMGwUpqdv~ z4!CpPMvn!euf=7(a76D@RWWjoC3FJ=h$7Bb4P@;?HY zR&ec!%CX6AId&z2X`|G!CNvzgp0U%)!a!g4`(LoBb0?7Q@{{xYGHO(~#()PCc@xg) zo@4W7+Ge-*eEx~^J8B4H7OWsv+Ao-OzNuqT%bE=#hsGANHK?RyQ9Oo!i@N9`s7`X3 zNUH|e9FZ<3U8%B77-6#d=JVKx_T8*cC5twm{Oi zJ7Rac2Zq;exVK-WecOi3_FbXtc18Q{*VUb^nf`69MPpdQaX)>ez_1~|M+C@(j`Yi% z=cC{_aZW>&=Vnq92W%T4U$$w;1XeGFD|PkO>)aq~2TDh32|F&eL;_IUS`XL;hJ*}5 z#v`Nzg-dMej1&_UZ31uywM{>sF~k%8ajGrc)d?mmMF5~6pag|$LP`v0gTQBSjZ?@u zBQr{rF&QXKGRCYJuX15ZI}{Q?a*A|dYovm3vlT=j6Yl}Oi5=cC%YQc0o2XhwAd}{z zt&@)O!2|keDcIW|)Pmi4!Q8taW47;{d)+_(o?WTC^pC+1?I{csd2s9)M;OT5*D(-i z3nwS!UrNt%*hX@!lQhjJ3ww8R0C`l4cyxA9BkZP*{)NY9z2U$xbUyx_0nvm!+j%r( zwo`+~hEWgX_`*V+9QN`tHAY z={tDXj@>V=yMsL$yAf%%uUrN{ToogBms@uK?CIZH-rYF1XuPXBkoI}Au*SnzfZBUf z7P-p56#}!zzh#>A31z87BY+>!NK_SG-76jx)O5{9?>v?!nX98VRKGS+)c93mU%ufLV|WBotTRmf|*K?}Ie7$b;EiP?70)pYZQRL^k+GyH}tBimas9U!&1v^4x6n z(b?Hf)}AOzmk*P@7eiKclf8>JuIoOMAH7oRoJ+uBY~BC(JK=Bx67kH4POu&F zkRwv&dToY0SV*o`)H!aYx`MDXm6;779x#%&nR*Flpgu-s08KWrH)UWkzL*sla|EE5 zQ&S0iXDfd5D_n=Qz?{7gSHB>3|NOMLi&)%w>i1a%9suY}YEWf7EXkKRG9yRqJ1yKSC&VNJrimU8f~yc;>I7hs`3HoUmGJ~$N5~h- z1Ay2s-V_D`wFdBRv@E&DMxCHWb#KQ2d4`ty^iHG?lCz0P-D23RWBgP?ypPx zJP`x|XaJV$tr8$$l80pKr6%35+D0fBPwggSJ?yj4+)+(Ftwq0}z(iC}+mLiW6kP2Mm; zjsoNw&xQ!W5p>4H^IU>};fQSmarrX#s1L~L-JIvMliJ3#M{1s?<)@&fz@F43xfg40L zLj-UEuFC=~jE#|U5?mgTG^{dotyQLutfI!|?(6Gy+Ux`09dCa(5qa^nemr@$T4s;> z-~O8Z2!BT{{(nO6BWja2uKp%-`X`S%+~S1txiYSIY`%AJM{~;+QDyeghY1>5S1#Ql zzs9^Ivd(B|X^WI218Hyb zk6>IJFxGwpBUs3f+Gqqh2^Xk*2uN?ATj#CkmpZ#0%wH>=DO=y)W8=saYlyTmltt)E5TG`BZ@ zlYjFOE}YJtfguMSz*k8x#4FW>ZIXCOd4*MA_sLi@-B=lqar-Mjbo}{`NEYwg^8r&Y z6HK9u>%DA51 z(H2El8?2`95qUUf6wD9!GdW?!8vCpiG=aVHV+*>puuw56}T5^r` zAoBwR;44w#8%Dq-L`rc>Qne{O>L5O|VALS#e%I0}l=R1b>m*t7YLC4TV#0VE6rY7`nHj1d6_ zWhjKQTjO2^DpRSv0u@cR&ZF7eKq=$kLs-h!ATk`pLYirEU@0}mb%zV&2jj_8)-R~KgWmO50tIv_k5KA!jIFA+KOx6`bhZz?L17q)X@ z2?fo)Cu9rsP<)fsg{Pb4z%H5Rfz_p*Wd>*rY;i_>cIJ3Bo(qPSFiWN?)h~RkuGgop ze%>IW$P+wBpI_gz{3{|H1SX$0+I)b8A$ydQ?{7iNOby_p-0F?o3edm*)koPn$vVkh zmaSpupfyZOu!&;Qi8qsO%2TWW#vwHmWuu5@_NH82CGebOr3_JM@sT=0CQ`E&r_QMj zQ33upHj|wg{su-*-psOcemrvB5p8ypas1)z>?5f?4G(*adqma8XwiMfXI=nVY|HO+ z6ugZn;tl%gZT;)_^;@nxIGsMDj6(kXtwNWL{gC_=Qw2ob9gfWApv>lG2AY{~7(q#E1Ylb>|%VUK!J#@TFGO4->+w9R+n%&z`SOexL9(=%KF`Nh0};(01L6!9&IA@2Vb#E=2yXRqDn(a?Fk*1d{@%Pp z!xkDix@Z$T`&-OvBYCk$a|{9?!9uAbGf~>Icfqs8CzFzeu_FnxHuf|}MiQCa7Rxo( zq-P@ShlV4g&e~e?OfeRslN==*OTMb~hU}r&OSqk&C=0U~#N^nv0fPr8yOF}q1el_! zsT(4V-GBN0AA9JW|Hsvvz(c*Z@x$-?f9jw`Mz&6OZAKz_noy1C;F*%bdrjy0FP}FvzZrvu``W(O_qy); zQnc0_Z;rIAZhc*a0srEsF`Wv`H}Xq-l8(-yRSEB+N0y}>l!8~>i$fbmW5rT6Z@A8mQEL&7rlC}9u=gp6!PL? zp^f|!rU7=Apmsbqv{q;uI-P@k0rQ=p*m`X7dE9A;y&5T7VHE2`d%}g3@3&GeM-}er zw!ig@3jj2@G!zGibe^!toM~-+e&F15LEJ>##2cI9;@DR+2EGttpNrzof^=zc5L>+>E>1=^~<40Tb~lmW^%tA zsD2tTp0(%>&yUHhv?Ht7-saTN%Q!Qc2yW`Z;n`5C#GBOwv1%p*Wz4RU< zP1Gv~<;w>PGgEF2zYy7n!+518WOHdW_3+R51ehBl zfjx$k@uRwHBlWv7!KA!qQVYK{^*Nk7vFLDm-Yx#2-U--;^Yo_P78nBnV>W2%_B&*~ zwcEebFXu!T%dEW!NEt}kWl@y*y{$F6Zc+bN7@h2}tcDf{Sy(+c35n!S`z4R3$6?o> z**8!NYU}gNZ1ZOkH-9W*4{cg&2NfH!lZQJ&w#Sz5(aRXQl*P$5L`U0n(F? zrlr&vO;yP=yj1`>+@4|H;zCU2kyXZ(da@YJ(4FuGEZMRpvZ$@*6r^HCz)Q}v9Ee27Z@wuh@;=X@3*-e8Y`MH_-1O;=W(#F zU%jdW{nl6=N(=$|#}@Sg_&{0sIaFt-O5(6)i|!9$ZsXbMTY5H^^~|R!Pr;kMiZ#CI zIo%rIHO&bCf-b-lVQkfEXjN`oVd#j+FjQ1|7VJ1^s97Obnv8)~h2+*VkbEc`yx0Q` zW{zjU`#gtWMLdc~dlRW*eGYNN&rlPqvKe!;#z-v|1X!49T^gB;DcRC}S|8RCdh*~_ z4ZS56rwl+rK~e0T!20afXWSOw|2(@c{<8LA5=Ixj+xDY4VQGDBczr2h{R1pk!hg2v zc05X5eV4GTn*c{UPfV`PPp(~s)thKPwy1jf+x$f4eQbQzzGIK=6_z}Ty3B4B|2#6y z`RV;V$G*TE@^;Q*08|X7W)~gjdtJU~!|aZ;i%>oiWqrxUw}wD30L9pMnr!TgIii5^ zVm?*DOo!3$%3HY*6!BW}dX|or@BWo^jDG!ISTe-V1CL>oPXCLDb96o3>xMS1yQd8L zbCKD{=v%WHdTMD$RNS#bR0QBZWRd#JUDTtI)mMjCC%S&zn_S(t{yh_B0Ie>3xz;P!g*e~~6l3S_*X^J8=SR!S z{@Pbw8t3rACCQiT_MK2VeW*yr%@lmkf%+(vV^eNJWwGjeQ7eR29H+R=k?w5EMyvsZb8ROj-SmbSfnZ}Z9Qi^$?bRq z(+XY~UF^$>^Dil$>NU8$U!gJ}kHHR5y|oFil2?RO$*VM??{??VE~#QI7_}Pd)cfjmwrcItxaNQ(o}rT`wm~`+xs&<)o}RG22Qt9WYkZ{-SCuXVwfb#85Zq=OWJ-q}|hF~=Lt%4cL%$dqoDA3%33MjOeSjd_KAoDE( z2qyw>Xn&v-dPX41o&|E|+OLAsiTyJ29Xj~1@B@oYk!LAz0{%=@oaHyqI>7ocU9h>; z^|HYMUzj;~*`U`8hAkc{_^}vP0v#*d8RN?a>P}BZ*1mZKvHiFAf18FF0;xBpm-szw zs_M;@o1x9LO2r#!)Mgve|Dmmgg^xajl^p#a7+civzM|nj<&ynO_~P=gjK-Pruw1L_ zfCnmLi;f`)&W1UTY{Mx7XT8|x#G?vsW<|wev{srvwyj!OX z2D74fSkLTCY48ehO|iF0k;Ug=+CIztf*Ep9Z_(Aq5FL*d=$;AcE$y3$dK@K*3)R7iOf8MGrd+t<1p)O1U5T?+Kuo_p@G z^v3(pbK)WBYLM{(kc@tN5ni|0Im5iX|AcilRK$M;(?jPbWoV|OucHrgI2-f6=;02p zpyx&}3Z@~Qf|jN?1z&EeFJgl>Ev-I|J6>pRRI0G#9{k*^L`4BVRUsr$oDs$@_+M)# zmsfdEroaEdOz+FHcJpAo)8ixdyBTcvNZ)Pkp59nhk-dlU=7rJ>$JH6@Mt9fSRIZ|` zua2cv;0zs)9-OY)myf5#HpxT7Jma3cpyG{*Gj#41;?KfHUFU~UOFmBfZ$gO@nry5q z%0~gtl`5Q@%=!UYd8ym{*w6gP`R8!w@;MCcx3hM%&hDsL}R^f#JLbH3;URzqkzlh$M-4j62LqD6sMuZsq1GC<HB;wL;cuqjo)I^l9H4Y%Bs2lh$XLqpb?9yX&WN z1E59^e>=UeJ9YB=r|vJ>PZD0mT*{fGcTC82RZJD!OO@NUzIgF#>b9@%9#%WF*MkAJf5V|a2 zpR#^GWQpN)3U@olIHwzC9L{-hen8iVUMbWX%&t7BNI%>IODG2lBbQ;A zVe4KcZyFWb;AhWw^2xROeRT1UDZdMRKmW_Nu{Tl`U6%f^2ZB^qxH}eWoLhlAf0sqD z8$!F#GYG~Q=1_J8(s&wNGpf4P@P?AAto^;>W7*)NBQOYH|9hGjNIBEE!kfk-IO`>Q zt6+eshQ=H$4Hl@_-ahWH)UNNx53l~`QNpVEdTGMSlXdcp@nKxytHsJ|f9-XPw@=Td-i|${GyU+kEQ}Jrd(Ok$9>9gqA#=L-I^ae_>cYOqqurzO#SZqP-EobV&2+84 zO+767u!!s1i&ZKAnE5(eOiN8tq$KawVOiveZ4F_`LNaD-XTp9x*otj!#WYyiSj)Vu z@F{Y5h#3rwdzPP?6!JRTRMB8t?B~D!u($o|f4Wk2 zw=&tqX#4k>+Ep#o1PCe|vJnWY{>|FAqa?1BW%Xh)l z=Ga#OFZKfKR#@=(%}sNSrHxCt!Y`K4e?i<|{Cmni)PV-rIaFzy)|@-v?wxYha`d}BcRK`6Qc!SZbf5OBn!OHr4NW^(&ITc6&9 zsF>Y91s0GC9ks>kvb5pEK6Rk{k-Y-Xk{9=Wj&=TStQH6=ulFC=wtMkl&dm4Ae*H_CPdV?lcqz18 z3jWvs*fQYzbyM^IsQo8b=-9k39I6K-4QH#obwUlc@W= zl9<+-3wdom$3#hEB6!S9Y*SW8BhDyLv%ME~HSA4v_WAsH(_SIQN1pENgKF3uqgIRz z^5q+p7?ZabBXv~K0)q=w^OuhaiK^=Qj-QpW3hpTA0PiD5r5#Hx}SxJ@}LH9T&q;i1ivSBUw@xym?X}q$n4>f&zkKk#tq#2m?+~QWgh#1 zvU)f?%Xtv?p3TS1x(lnsQB*{G4?~QkV!w$=4%ltV>a~nff`c!$)>>Mo!>^;U18a=EG0s?w^%yuZN74!phd~6)icqiSW(#Kb7Fg@^zSY|gSZqI(H}1ZB`;x=_ zKJ4vz+dE+q&K_8yKPSc~kw_<^aUK`}?K+8aBlK3|4Mgw$9_3+Ic-Nd=caev<3^gXR zHvcG36kK(M3@ zJ|{RX3sD*Ir=<{#FMe6Opt3M;UQU~=yK=nqu7ngNLC;A-dE5d~U0rjXsLoo-91|v8 zsmoDHM8(o-40HUR=~>b{z2M03obyfK`xIb=BI zSJ-1bT==N^U4~_>IM;%0dHWAv2cnap`DitzlH!gf>dSj6ko;dBF>$j<^dsB*y*>}?L0u{kyUvd*xB_d0>E)8x0%@4iXFBxBewG&icQ7IlJTbC@QZiH&_ zNav`qF5PPmP6Zq#s6;iZn5qgaNmbav{psOexAuoVXWvd4{zLP$?bhmd=PNkrMi{KV ztDpW;*Cc()j$wV{p656#qa!9aY!^j;!k%!L@nkPqBaZ%GE&JM2WV zdpZ8V`HzHDHKr+MVzbfSE&iDE^swiTlLyMn@ygoCib<-!d2G#*&)I}5qBq%c``wAM z|DZ*twjh{0l>aU=9L)#18)Zblg2kE}y3bbVm$2&LkA1t^w^!V{q6SB&2hK^xwK{{R zmlvGk*E17rfA+7RfAJ*Y59~4GYN)6l$x`1Sl_suSL0>asMI(e=x@ZS=A!uuS$1+Zd zU%5+OJQ3~RS@RGh>ZSOaa{~jpUSQ!4tiZtVKyHLgd+~1a6m@kY#}P8-bF5#^D9Y89 z@1Hm-H1ns)xhY|k^cHqG-WHglzy`ve(*3x5YW~r_0iRU3uoZu4G3X&U+lmWt8szsb78HxIawTSYIe2v~;m5>E>Ds53$<-zH{q<5`t>2t=_i&1lZ5+gq1E1@`9AGstIQpwr5?clD1uP>p+&UktGauChdcx{VV!1 z4q>ja5Wu)(7Vn3s-z&xEMCMx-?X#WUfNcu9qqR&ae(v>k0v z4|EL>?j)->aJ>RHLwML#LJxdzBJ6yS^MIw!KhwZvj5=S_gCJMOuM-;R2r7{}f^!R= zpCua?n4`piw7?MG!!=~zW1>9e_OV>sy-XcpU7d(GCOQ-2BS}+k$4NbJ=UvJ5OZ`J$ zUtw>Kp>nM4Q@Wa7T0fjSUfbjv!1pKDR@Pj1CD-osmuvT%-4*d#K$7#{jIQZMH`=R9 za~`NknZH!PjIzBryf54{wWs-X&kI)A?EL)5Crjhg63h3NmFdkhUthimt9+>_r+_&4 zhrQMmpVs}yveSz+#5wWT_Lz$vF?NE9YP*Rc{_W-eRNGxM*4xT3iRD=0Dk|tqYpmT6 zGjxaQr$)P+fh<>~0$X0s8WWIf7r|>j4^GYloIm)t(;sCzVrP{!gyv%I2+mLkbBN)n zP(kuZ0jB#ToBrtWF2BM?((qGGu8Fd;CejdAPYuF2gm2*%nK2$XUkLgki!Lo&OjC}A zA=EKgdfO|`XtOIu1?`b|g(xNgPCB#T-&wKNc9&La79XB=hIBY-SG*CXqb5kLU2M?x zV;wJW`xSJ#)1 zEaY5*A76+PV-_lC(aJDA!<_YMqtuY)B0FlaQ>HPKRTt0>bQ#Tug15Qk4-m<&fe|6Y zPUGTG8FuP0eT)11({a8zH^|3VvY96{a4>VQ?FedZ2?sRWNH6tiaI5Roy;A~%G_Cv^ zX8b?jdm#LKNiNQfS{b^v-Gc`HBky`ha+pRfMVAO|m1nWGIODoEWTyU)XKY>3jS9 zUed24Em4EQ%F(cZ%NpK7T1o096^r)G55*8a*|pUx^?|Le&x%yB$ivi3S6Bi@_nz*_001ZR2pNX6F}!ee%ZVrkL9)Vn4pdw7$7{OsxEE0a{QW}wUpjd6*PFM?!w^8tqoEq zi7FKfU*Skdfx^x)VU>=k@(LkS(qzXCj3WCoOIQ)oMqEDuTP*ZP9IjthlM<8w2`?KN zUua->3Gk}USZo6uhF{T*qGTuM?;I{1>Y*7$d4@Rm(yZxpBaDZ~;C`klIptOn-Ypby zMxTo#JM$ZFG<>8nk7#o5mS?Brq}6~u>7{uox6=Y=E0_@Tojg*H@?;SWOi47f9h_xL zt{PR1l$es6Of;z3?^h1-E#L+zOylldlPzjhr?PXhPG&z)Yc_K~Zb|~wQOK4_3V%l; z^z0*~-lA}wQsH#sF`SAirgy-I$)x%Ke7%JEOi_&U zXpZ$pH7L3~djy7H=QsOrG@|&Dzddom&`cS_H@ncl9&M(EJ>BJ#og~6q9GE((eQd07 z%|~)^wS{7yzl!`(=AtAGkxjj z$=XV!e};`Ncp!BU!c)6ZOe3lngY-wzQ7ELD^0OR1Zy6UwR)0lScZ5W;fnn#NWEv$h zApHjERX9&{M9@rv$TK`w+diDu6W()iaWks&WX;n4*;PmJt8$7)H$p_rs zcKcD>)r|bJeU#nwX@LP;MhnPkOB7hiFL-l6#0KvMpHKm?+lk1}PX?$^>xFeZS;ph; zz|r;j1qV4U4crLndwx=xwG^+t+P7IU(Z83at0t^0)7gk|COQ*;4MC9x$R09D>Ij^< zEQ^^xgLow_<`<7G8%T-9YgMAW6_S+DSp{g|3WwtR>esEk%?ED9SG>)+UbnC3n~dni z`q69ro+N4I%elEW2fE)u^4dy}U~aDV%flb1;)agg(axuqrT4X^d2Khf>8e*t8xFj-{^aKPmlXaR zi;GqliS0*;d}aPUB;fTY?sv1D6P=Zn)0##x0TGa7=PH^4@FRzP+Lu($Oe)8OW83XE zn>xBbHh!GDK_BhFD%1Q%7B&|5;52=Vl)dy(^5V2IGk1p1ovo1OheG6_q{yPq5E}wf zm_-=xy!)@ijOrk?HqYm+STkQrCMIiEtoTVQ2enp-Mq;WopZ0-%$&7za>ZROOa|s() zxvW5cz+%7=>ikNiHHM^2z^Ig4ZZJjTjkX$XMSBdCp_=9YehSOZ_jip_&e;Vshe%_~ zI2^c3ACdoiHXQdI&Tg_}1a=skkzZXw2W%E&l}fFwRV5~10&)<3wl5F_yh}>$b`kcp z2%ZAqn+HC{@c9_OR~!ZS!m2?bX0VMW*TB9Slih}E9~Jc~pAlWDn>6?-2S@&T=n92f`qJF}(j?iIpAtrm2@HsJSbR#w< zdzZ1iLPcVh>>=MkerrYI$>8u1b=9cIF^$0^gGc5lzU?ja3aXF02ZR~?Fv-d3nAuQv z55;r0|4?>Xook4`%&KTjd^0hYapX=OATVtb2`=FF?7+ryN9w}7H{>0`YvO!d5s+yb zld~F0nn@?w2sdUn!O_u48JBidkI4(ia&i@;c)tK4IL>Ow(2~lN$lhc7n1e$j7_6lk z35|jE4kPl_#Z-`;*8+VxRM0D-E-=Dpt=xVR(n?Jn>BtK)wehY9NOC`eN0V#dmWn^t zAL*{kbAb+cnRC_g96|TK-#tZ0if-y%nP1L7#OdC+rR}vcj6! z98+X_C%>I{FHWsugvi@~ zdLGK^X?gnj3_i)lzt>>)kZ6QOx;;*yE*m7Hk&>EyV-zF_R_=S+J1lFplv8UdF$YV&fgytLll)4qk-xG z3*RKhx<=yErDchm=*ybG#p(0H-|J(GH%Z$@MZRfcgbox1zu*aE$GphQT80>}7{?6u zRIXS{8^_=^S!Tv&00MMyr3{Y%9xNUuvahPPbE=ggUhXw}Y^O7I&)eC@H2@~BfVJ3Z zg=$BR*ga_dp47ci*+=SK_~nr!LEOtHwKJ?6PMLxhkhK+alI%9uHZ7ba)%K6A)DYN= zidvTi!u3l?%J%kAK^0lOc#{Gdk5=-69kxndC^_Y1lV@nL2`UHU$RTTI=I>H;QGBwq z8t>*gt9x`$_3*Bv2Oh4kUA=$tB5D5Uo`j#nrE%XTzFFVDxMzK(eqA#8@W;#3q&<78 zcNFI>FJE-A(cN1y{a%-H)XXk!Wy$uMvBLEH54#DX!H_F5-BXr~pip9yhBU9Z5ta=4 z82+srpdVEvOBE(&PD08mlgImL)JXV^J5>>Rjr?84e!=eUFmVIsWTh4GBsDU2>+fU` z95y(BJ%7`J96|0-J{l{j5&DM*HXG7$OdZjz`yEkxmqmp3>ioC$LAy80^Zo1f<6qWK z;rX-lQNcI`&o`?R^}qXQUiH@Ja2V#$TfeUMh51RwsEBvTzmwB^J7pXnmvG-xQPE*+ z1NMoNmg4(+0etAJMx=+oDN#H$q1}xA*48X{|6(s2dpOXZ$j1Z<@27PsOJ9}8>q(=4 zEew~TR2d5s2+mO!ekB$2qPid-g#VOMagCpi-0TCPnSvPY;EtRHMAY~0kM}e0b>GA- zclOz7UHdtqs}+4{43%y2%(24=&8w{SvN$k?WVMVTt)qC-lcXrbEAsFI^e){kZ~Mv}^t;cGgp*zp?TN9cAXIhR(h>^62@We6&_HxN<>NMeXp7Tj;p9PO16& zqWRi#^;HLHJ$}6OY&7DQMa12g$lz-?7|Fnd@!#bCaaE)E;JfX2lr<}mjgOrj zmEC?Fr_(z4pMP$jy?p3@o+9SQAKBFV)%iw<*_dyM>ZOfMiT+G=vHtR7--qXJv~`>E z?$&rJe+lVWrfvAw2LD?`fB)LEB}qzGvu(FiM1>@h3X}N{W>UUdlJypVzu{OR=c^-q zK-r{R-)FNn3Iic65ypq63F@s$P{}zo2<$$H177dOEsDxqTLp1IAZ1Qf4|A8;tP)P-Ssl?oKVWeqP+t$>9EQryg25=G z4BJhTq$3R6RVL=sKP!{enEx=vRARUor&@}+VLHpeu-h1IwMVn{h;pwzd!N^F# zNI^knb{lx=d#K*bWhB9X7EuzIsZ?bL;>`4wT|+Rg+~B@#}u zYsYixBbByc!U83Jb=pnjnic0kmAIOsEuwGvz)Ey*ubA*~tJ=zl8B$OCoA75O?#ked~WVjz3TO`T09$A=qR8z$b4MV|Ha zx6avBHOB3psDyH+p{hG$=ue-WznQu- zDhy3ENy#vW1FM>wlDi=^StzH#NjD*8YLfEHEKNj5aBe7(Gj6MbYAz@s?-d10YPJjG zCbigoWaTT$E*X-H3`v>!^LLnG!@50h!A zl40bbV{s<@C!~Hxrl?7|v_{&oY_iZ`=bMbIGZf#YZ6ks35aCuEqP!JM6OoETg__MM zoaPY4HQY5^p01L{Hq~JVYbT33`!cB9&4DGVz0BjfBGwYCeRv&$DG2W#Htfm^qQLB3ZPeVnOth){O4u z`4&iUAn026&)2h@J@Wm|TIcsw7%TK5J!+61t{eQ-iu>+_o(p;27<2AN&)1okGJ~Jl zSv;3+qsT#E;!#d?%PZ{`Nqn`m-r9w)*k)m-uU<46YG+RZk^ZsO{y!M+;_Jq^McDaY^1$TbjcTy%^E2~81xWiy38v84WVotis3~Sba zVKQZdpd9qynCNgwa$pAQmMYXcz4?JiiD2zN&6t|tuXeHHm)3uT-9dy37T-eB5DkgPo)y$@=1{=?EFLC#M>1=&nQvlNLadsCoyEp+&-RF&w!c*@ecQaS(P2#!-9x# zp|Ud)IYt~Bi5PCFNGGZCC|n<_tuQhbzZHni!BK|(&SyzH)1<%EPUYwsR4k8f?CING?oA=1w}Cd<1g zkgBrq*V#*#Z0tLno}X;)$$<1J2iCCct0NnCwLA>)b#u9)%v(^1d-Pc@`sMoN|3Eut z6&1PCZNvP%O};vE)06L-3<4d2*y3^&bS3^FWvj_#)_*qsswM&Sb24Fmdo<34^rW-I40UDNZ9!n z;^2$#*WM{wS=&^d^f$hCZ(OnRcgDM-yWrB9!l3s79+>v9`(w5Fbawg$?!>^dg|b|& zt|{wW%z&-0%R&c9up|y}pxox}(R?MON(ov*v_qw$q-}&Twj3-)YYVXm3D%3suJy3u z>4-R09Ehq!?Pebyhj@qJK)EAyt0fb~H=&-LEqmmd~L#ORz{&X6;B2 z?}o(<3)CR`BE(dLo^xE5Ei1`dks|W8B#~|mh0T_ghlP7<=KiK16dM>mTY=}|H6yvaz`etUcVHB0%;UO2b1EQ#$b{G#{Fw!<8f%C^* z#jtUEq#d}cQc2zeLV?7?SbX=8Xr#Xm7BiMid?nx@DG0}RR$6FE9NS0JcW!GxzODWDsAe5Z zd&Bqy#fEeu(7rOJE<;?M2G$f)R}vP0edBHH-Sxa!bDdya{5Xx*{addiv zll|ul`TF_O4&|ZW{yKT%UDD{@G?U1)1pok#i=5jLNYR6$# zZUKjC2-LcabcM{(NEK zYt+vL-RRX5>)*bteoKf8dHvaBM{*x-GXB8NwfhNh1mp)e;957L{rlU-4jVzx=&1*t zub=Hl$xbfE-RSv|n*L)V1?Mt&*5UKn&TBs+zRY)79cf0_sLl0scWx)QAVsyQYwfaMZXr(^X}RM}%iRgt5XXNb!bC5Cn34x1#Xs*&v$qF#xiqQn!3 zT?SIZ$^dA^@c?7fZmzQ95Njz!uKQ7@ zv&nIri<7V4#)XjbYm3{zL`KhhJ_8Jv9U4K;!W_pR57`p3C2{2Az9U|k<5Ai~cG6gc zh=3P75eEpEg%o-vo#?5$!2&M$jaUmSm_e=TjKTbZ!0;4a!w&KZXeF!b`&G)j4SV)s zrh@mRA=ADT2yz6u{0r?3{%Uw-oAKJY#$7qfU&o^-Cf?q<5b~j~*k=CA7q4&MzO8j7 ztljKdo2y5`3#;FcC49YqKiW$`4%3=4d-!8@#HQ=@uAaKLtDzs(e*CG?-nJg$(6KXd zun;6pOR8WF=JyCInB|x-cBePD;*gpg+Cv#bV1V6g=GeNrd28YVU0t6k%dxFEer~CO zk2ECmnuU}n;+A?ii`=|j06)`=6X`6#1W51%NY>4=Ll{6#`+xiL*0krr!o44P>)$db z-Hh2M+qL6Yx$h3I9ZOjFvHq8D*N<%pO%sa6efu_I$Gsx0yHCd`)dyYEPak|R8P$<6 z8dj-8m8sEuNBjCn`^Cv{^{5&$B`GXvISw7L2?$+XHGV5SV(fvLnXuBC{s`9E?M__D7rZ^z*oi(6R@NIT159#eI{-82)wQLw%%>CP85Cds0dCvJy zPh(G|O`i^VZBoK}HZ?lr}zo+(Z1)cXIXlVEeZ(QPw-}-?vHrGTFJb z`fc*+kJWFe=Ee>B4Uw>;N(*)2+duNslP0d}yj9dD;;92Eb}XcjLfDzxgB~0zvs9#* zH(MHRmFx<0wnBTMH!^*;8g2efIe)(+C(TfSoivm+kmZa=hnTag8}fYZyeah%yLpf;vOkD8K@NLa30w)zf!K9pS>^Z%&l<@GA1LKt@V*|E^ViC8#+Ayk_pp~0%eMEhZe7?MaUTID9XrL37 z_{I=h`@?9RG+B~bL*@XYzs+~65wob};$D;k$|?JkgWtHR~xP?18X?b|A)hVetX#hYe{iSZs{4 zE`yx`Azk*acrD_u_amSQH5FA58y#uHmHI)0>2aiLW(C>!w26K~#2>Dsc^bHN_I6R_9Xs!$~5=Bxc9U9DCTxCkn&svceW9e+%aiHPwM6)5$m zMQ{!s3-CSR$Y&xshtz~t2riN%3r1CiFrW3;BiO&0$hbtrDZ8+3;jfeCEH;=;+mEWZ zohR%+S5%~rpq+^h5N^2jbv~-KF0#7uoMYuyF)n~ktP$gCz{?V)hDXV&eB-LWUy&he zbz?;d_BPj+wOLhN;wZRo$NIn*_B@fW(hC5S^=fkMd^07X)N(Uk35y-?3gG~d*l?To z8Ar8K7W#fj4^IVzE-EKoeg z#dwUe`ac1t9a3{q-P1s~Q@0WrQ|Lq(Zi?}e5gm^Ib@xiDs?Guea34yT>l?7#{~|gU z5UqW6tp%mv-N)ej=W_X{{Y^Y-$ZjYhrG28Uy}gP4<>A$k8^M|(m%goarl!id0IEK& z?5LJso0Q)d7^zE^{QF%XHPw#gf=R;3nS!~(1Zz&G>s;OuRdlT*EI9^7GNVP0{zW!V zRJ@ByuF4ruM&0EHx!!RO#By=WW){#WnD9^kgyPc{84#xr^`P$vD_8V*zK0#-N>(ll zs8WB)j+nsJ8u5+=eP>jV_X+%}?eS7(yc>9Ik-3qN^qhiwji&HP;)-jHWCyzQid2%y zH>PE7Ea!7du#(WI8nL4`;daD(oM$c9*eAwYCZS(~Syriq7`~Mb^hjA9XOE@}waQGm zo$75K;lLqcrOpvVyodvKCE`#xY$*!_bxo=9-kV6%am?KHP~b<9kCk1X_4LivN1mPc z?49Ycnfy8S_3LqbBcw$py(4nH6G@oXg`}G5(bUiLkf%Sb^-h z3}0`wASwaK21*L}Dv;Ly6{XS88m8o|jj1*Eu^`^&R$k)NvXPSb`%C*$jKmYGFLMfW z9=rxvNG2)Yw>duEmy)9oCjy@M@wIQ~@Y(xI#qdl0`1S=M^TAINR`#qf7IYOt7`Puj zc_ks?*xt?eqt(X83)|k$T=?+r+Qw~PB=zgd|Ne1!n~Qd{YB_Zv49iu+GM%-AZ_Che z-Y6d_+KuJP)pHDUSK6R}d7ijSPhUQ9U_;)nL1FIbW(j*FC~TvQNTJk=$hKkFF&t?N z%{r&?MeHGIiy*d$>?gyockc}ks=>_F0l&KfDp$4a!lmgq&~+J(UdD6lI85VcvJ zN&XzU^);*0Io}mYEl0i{eeuvOFEX!G*DUJpKQ(!E}N}k1U(?ETI?7qBv_b0!5 zwe#DT$)z=iwB)(D$EJ@ocyIPyu$owpT3$OA=7o{dCLrW6Snk+faT%l=M`gt8E>sQHUVB+!mE|HYU7Qa+koqc?EbW z>5UaTi9W{U;>BJ#LcMQsHsQgSZwYUtYyBmoZDQ-_wZ9Heu0^lUZM(nz*NFt)_wIyp znW<91qUzVIXv9?lx;Ako7(EB1Ekd}>-IM2QZcNw9S6gV!0jc}WSsikLmf3}K;b|^0 z2DC~#SJPR0V*}mV2d%{eZ1gu}5p_G_PFf{BX{8Jx5+Uv`A&x$B%a#KX5jwBDeMQ@O z>i9c*(<`r3V7#S`YB4xDnS>z=#zUqhb(RSo__$_aWyK*}Or4nZ5@mKhxu;boJXr#j zAx33T=r;jF|3XDB7DNb?yC{%Lg?;`7ph1FG{|iaO6Ts0jn9YSBu%n+-HD@o!CKih6 zegY1)oLYBuY||L!6N{Ao=exT;JYRZ>tt$`+Y_q&FJs%);j4NmqC&|fVK~T6%9Nx+} za$Z@6=2Zj`shcHbVWJ>*CjeZ-T4J~dR_?!cbVs=4J_q!U9D;bb^oqYXrY5mCZYdQu zm48^jQ2YfB4{uvfSj+7CytbThg*;1-nveg{4g%|1-(~}XVV?jH1dVgw_OeP%(AVxh z%qq)B1S>*X=Pemi;`d&lsSw@qg&%2Skcf3o~lwn=2QZ#61Mtb?l6kT zs#4ev58PpS4! z^alAXx2fyw9NP~{c%kfO#rH-N3$-0}9!Tlk8;#rg4$)=sLu&ekaXQ)zk;HLqf% z?W~X4?`Q4a=BN0~S>v&I1&Z%6dZ0t@fHDa%3@5QD(faPtN1TEwf{1wB=A4iDtgL{! zFKLjEDL<<0#89)y!?lk=Wv7|NCKyTXV#2+s^#u0Str9op1*yVD>8Fj-Sp~_>%@PG@ z68||S=_a$DD7L~-Ch4*DS4D7wuXOpt`uN~(xqf9~HSU|_8WQ@>RWhw~xU>_#_CR4~ zU&*|La&@!E2}7hhG4(V(y6s-^Dg{s#+*nPtasXLX4}76B86ndl1QE|4P|H@qVw^WN zcqsAP$40G#ChIcBk&+OBSE*WaHop0`0lr zy(P*M;p7RWYI~IpF}OWIi-&E2#CGH07{)^x-+Wy6o+b(yes z5-mIkw{aTuIqo#)E^q?*zhT%hj8fn(F{xtdRk4~hjH_6M6)9n#fq>aX`7aZr_ctX& z4kNR6(d-yS##I`|W+MMMSHZENwh8M`ryr=^A0NyS+(VtMQ&gO#xQZ!(wX>85t*r~C z>;KsUhfC;gi9S2I+zaP!jz@PL=!jn(>w;5-r|VB7M7g>@YurIzm`*r&X+cD>eOMR0 z_N`X;;akHA+qHjPFrn^gMvfs39Tg-;-9ubGO%-5XI-N!@Bq`%vop$S8NIMxQ7WD3Y zWh1vIE%|*z{PNe4+4qBP?@d^Nx0^4-;M#53f#J=DJXr~`=Qw7Nh9hmeyWlfNzvMfM zk{%E&sVvNgQb?y=ao>vGi1C!hFNCxl$z;5r@lRxR zYtFX$tM6HOefUPt$fa`uoeu+f*#6-$%thU77(U z0{1`~TOJCcseh}@9^PIz+D%k`H@TH0Qu0TZBmGbLhaU9Km-a~e3hGY81^eZTL{g90 zcbXQF6V1itwR4xwzsX2xX^Cp09uW9%UGTmwQo_sbp4ftlltMCHlguh4v)GBdQt0K5 zkf71%<)Amf;ibs3at&bcddw&^x>3situw^);{o7O?$q{H)N;E|`xOY<>J-!7{Q*ay zbL&wS9haAS`lP(*uGNvh<}OZtUn!1`TkW%XnQw(kLFG?A=~K7r_0_jcs{ z$iumPcgifGPA*?tZnjai8AZ5D*r;luigosIBszOx!6H4xD_5lA>Hk;nLQKa*$M?0T zGub@^p_vYwJ(!PcFQVhx+k7pL(u*VwZQC=2gswlAqxkiEJ`3XQGOPY^IMwp7q6duBjr+NLWZ36a6Et7|E{n z92O_A5sVm?wW;CMaYkjsafbDxIZu_YAy1Xd3A_ZL#FCKB34tKG63cwagW>|8kyKkf zOKAZMzv<-bVP&h2qp-pj6`5PVj~#B9u{xw;%L_)m3#P^$V--F#7qWG!C@(Eah`O4` zf3)hb+@#h~4WntgyzUaBtdgCn3aqQ=*XZI$pH#6m zRiW_+bXkgpTd6>5hG=_!kb=Khp`i?i2Jv920t8}nLc=Jp+tO!MOdw7k)PrAGjYtK~ zpMvvCd5@!#dx?A_k9%y<@A+V%k!-0o-=S3TiX@p2INzdc6=KO*S!2~nlt6lFAjVSK z5N#R3`d709mS*fP2O+w|k}$EtIi%6IpTMG-g56^t6|$vK1yLPQGNqA|ukX-n%41Dq zexylJHjV;f@zL^-f81LCG>xBTF%p%PRMBkH<+J}!T!rs03*Kr1!9CALVfGfjZPbKk%b0XYh2R(Q@kVBSCgN{jV7WENIvd;_YZMn7ytL1} zP>8Pzvu>=KENTp##QDp}i4gBtkr-Ic$7ZLKS~W!ZQyCY0Uda)|bQ&VN9lv z%Tcn%l!|cUII5y}#brNg167t^OoRSw1N9CD*0z+_mo_{6U*<8Rd`a2R-HazjDp0Ni z+)c#&hYCFn7RpJ;uoaFrP&Yu5%?QvO{RNGAX<*JaKfgIYm2Q3;9v?g~q+z`w&mpTq zFv;Hy>%$FgDK0#SVNAOD|NnOJ2`dXn!GikX@t zL|=bmG42Sf*zjakW_&Y0&G?=UHJf;iN80g5H5cIB+sj!`x_}DVlP}JlSo}P>;<`J+ zPH{+5NTE_mS)EVnvY;A>cIsX7{e(h0;Ttft>Tn2!4S2&}32Jmfpd=7wfgs^}2%zn9 zE)oyj{16im8lbIyhKPny_xnQ-Ii^-V@PT%&r~`3jQNA#^R5f=R%@-7ymL-`G<~Zf- z(qeG#1imej^I>o>^>c)>8D-5-rp-TB_hy|*wN_hTiFlj8mf6?Pq`)%w68PUjT| zr!p1m7UvSEantO=iv-=h?eD3hUZ%M+s}UrSqC zq(snzbxcc6a^#%FAOPz7j+W<87x>%E0=j!OD}_cQ3$-;d>X7j-9+q zak)o%e<1;tbnLPx<;)~}$e9BUR%QNgXo5Hbq6@QL6~jkA7)whkWdGLoJRIX(QK-Ib z*KNy<{54ia4dGT8Qw9s z{j7m0!Y?0i>-+2*DAX0UZzI@=wuho8$r(huetZ zkuPwvq8qd}0HZqc82AO+Ou**f)~~AaTzo}XG<)cwQ%RLfkyKH*?(E{CT}k~MsfQiE zr`)mm=KJ8w*{!X`niwFt1c^rcXkdbuJ12y$e7bWnNOLwW=C3VX@kXbIm)=j>;pEJG zyJ;DgUDf77*2F_4VkOs#s>Djg?^+{@8+$kY<9*nziIpywwOh4s6R@E>VW#D)5`oto zL=juZ8DT6tiZ=aNWt2pQHYZBAag?Uu1~)@U!(b_RW=q0;&xUpAAn}+l6HaZJ%IeL?R!20uq2r z=%m0Ea)9OmOh6P4d;)HZA;KpCQO?A|WLex1xQzh!5W~7V(KZ@oSDx7jWGzOdxX34G zJtLm67P6McOdZAYRlU4hDxQ=in55vx%JD~cWT#PUlN861y_L>AhkqC7!-=&lgU z^L%s&+fv^N7Dj2GyXm;|g7K24;{k1yWxRUMP+zk4c-0+4GcjLYeqPCur`GXEawKDz z{)}z}XGUf2HVe|)9!J#xL~br`Lyz|D>-%dpZcSLX8{^M2Y0UxE)iaUowHntc{+AhB zH!#Az_+Y)UETYd5tNu3`Ti-_gJ^cetvPXzno`Q;11s5jijV_-W?*XEQhv~U~YP1vX zLPIhd`~iUk4}gRtMVFu7eSbkt{YVk4IroKgQoeJ=5N7xj_!9!a49n`cae!jf5Vl22 zR>NrVGA(bi+i|))QwSvSvzh1N!8Hj&43{cy$}v#E31ihqD((`W$srlv9YcK{YtceP z6?@3RuAJmdqf-Kh(knB%A9*#nw%yX2I>Y6lnYHlGZp->&jezNZswzyq?eCQ9DwvbO zV8}YKdEw8a^neo*jujqg-vb%^Z|**W_yEG}wJAXNDl}X8?|g#G8ECn^v4*fI)XU!I z?tT)%jd)>q7l+Qzx4y3}T!)dy_doxL{A=mutgpW>71bz|CCLRDc1U4>|8%SyT7Xx> zwyPTBd-5bNEVDPcm+?%!Se+N$AW?6WbmwGnMo-3#u?u`HZ~3H4mLJE9hl%CeN>?S~ z}=a6kREPn^ZwCY95`TR=^t(WL>qpqo4=iLiqR-HxJN1>V^ zhoFb@B?hjT{-t18KPHBF#+}`*Cz?U7;*(lb%uD*xs)=ybOSw{j0!X5J(1>C%x_{-D z!hhp{kudTRf92%J-$6Wgzn{Es9sGe(o+^tCYEZ!}7Kf+SA#gB+T^XlvQ(dN$@4)C% zINNbDOqOO$Z+iwA)j=hIn<`t%$51GR6RaP9(J-JeZTGwe`4`2V5wuUftec05)M!Xt7-j3#Yki}_qwNb>DG5;3T z=x$>WdI&Oriohj-4 z>(<{{%?Pi9xtxjw1v)J5j zWR~j`wV)`eFiEylNG_Im&!RY1+tH(~sj>al>cnj3Gf2%0?={=lT}9X8$&CP6u1IbrK$0s3@_S{AWMjy21bGns zi{VdY@l$ueBL~vMbmSv=7zX49d>2XR(yUfrR+lz{$LKim_2TQQQ$GJ*UG3U>D=f_G zmCm^-XE%TUO-QJB7HZmRCUG4eB)XlA$l$G|XuIl*3MOM#Bhx3$(C$XR?^~=Gc?OguVi89;AD6CvQ zm3^w4A1n@n5x4( zI9}8M9X5`Yz|zTTaE59Bxne7uC6+nul!*&5Gm4sTkItptq2F(|S*g%%pq9%m3l!Rc z3KrnU82jc)8d^Q(5oA#hnSbE0f?Tfb_4ueIfodnT*eI}>TS@MgY?{~7VcSgNR zKUc59|EXt82;0~rl~8or4&n;_*qNib*0(yX}qR8b+peylne>d_i=6(p_AhM17Z1eM#wu-|=iFdt^~G5OczK zs(mKlrLZDwSA%tCH6rqt7kiQVNyn3Cd+zkvgnMb05Op`&sImINva8qHuI@@PNST|y z$#D9vFzJg-5uDg5PpXim9H|JFhE(nl<~>in1nsi?M7?>@(<4~M<%-Mlmn*~-@0wgr z@g>UO#JFupazo5}Cg|<9^p~8n!P)S%{Fxh3;#~xm2bv%`bn!GRx zmPZ2aSjpw*zUb!(6qj1guNB7@&8XUExfHi@s$`PbRF5vR^qCRyM>s%6?b@ zO%DnanjO$jCIuwJVeGsW&DPk;8riUEJe^W3W0IsRcK4moA{(;26OKiRm^v*-`~J`O z*|)s3oTnq%3k9vw>?dN53W@%`RSEkA`q7_We7iXC*E>#4QrEwVuT_{dnux^AZN!PC zeRhfp?9Uzh%8POZU;fbKoQZ~sR^(vpXkz5eYl=Af{JMUXSGY~7Y%)#<$Eu`ER* zr1wvmDTQh_4b-I*d_r;trkz7_TKc>~a-5lgAvxC*n&wrJ`>ycChkTux(SPv$l)jXv z`EGcLy)!xcmhZ^x_2#6q^TgS<*d=HQ*X>i&8Wnkqvr{*`L+aS`@7SZ)IPZNe*q_*E z@9*tzidtAGeIdLX%y)L({q|jO|C4;dKI`?upaW-nf2+qKF5+p^?GJrdZY-Z>a;FTI z@qe)if8n0rwzu^ccLyi0W^c96*?Ufpu*>#i1}dpFB{!KaGgU>&aTMi5r^;<7QdW1HSx$oCrT(b|D*Tv6Ep>WG@c)a0L$~5F`h~})=CCbGJ zg37#fTr4KNWrqib6)LL^KW%B6uVMzOK6Sp*c{5w6G@;yGRp+8M?c&pOIGnmRjrOl{ zcN`9REp+H9FY9=-QZ(#pIIjPZPJu_Q}VzHhM7U0!pvwAEZXhb(SZr` zx<)gkSs3`+CrO%;gc&o?Fg||jq*&;+vR$B7DH;J_4&ckuWYh33Fa=%kT~z1RU<?LQ6SY{zXL-tXwx*6rXd-RnnvAykZd&GmOg zf1hwWr_`~XIO@=$9kcssG)u@Q`<>|vt2$2GyM&9xRMfip89u8Mx*zrK=zt%;(06Bg zhfa7WG!5wWJFWj~FoMiI&kaKgr1vkcmp!$>8py`klP}$a8Af}LT7z8Yhrf=zJmS9h zyBKN5aURX-EE1$AN>!#Fa%f$I};<$-mY1-7FBq^QTcX7d6{VZ4-m;Lmdy6JgUjdM7b zWhbq$l*`oYO5)R}re>7%G@Z=TbNLAR2+Ss&!~;t_Or_GM7Jo z{^~b2H8@g982kL~R`{!2F2Z{e=a6GdxBaxwhx{WW&8yw-Agc56AvuCM5mKZkva^&j zGo$I|48(Z`+&c(%rAz>WnWyAFFQuk|>G|&Ym`uUYz7!bvI}p*gGr!HlR4TqwUVg&8 z^!K;Z+2o6FuH2Zw{ zWRozAA(;1E?>weq@#XVZ*)OWI&sDU!9xn7!m;pmq+BFL!S(cAQZNU-25@xQZgVVH& z8YCg9PQy;xO`I0Z7Z*b5Gqgzrql8h)`@kMjHa0e$G`N5n21`ocI^&G4+%#fZCz+=6 z{tP>71IwAG*Js{IFI4SVt);g7GB^aSMCn$1hI|rg}SX)G2gY>jaYuI@xv##^&Yu&yS zPAL**$~|unA}*!r<}zZ3>q?mfxBm&Y>oY`42~vF1e1^E_JMc5G*nvIL(*}DRo5;Tp zZZ{HY2jkSAOywVFeG5>xcq4BL3gpiVOH<(gGvyQLP zc;375qCmn&nHA`RpJ)}Dzq34euWbDyr+r{B^5fS!2aE9B#+~f=I?gota7}?oQgobZ zH@WO@HnF!f0EL`!%cWB%z*f$<>~rd8%}Ti-rf{rB<@ZXta&&xImNto|gA;|Na7idf zE=@EV|Jig|O&fTIk_IV64MS;q?4z+lZF-Er=F?W`g2yk{4lkTqvsV=*GL=k~+?U_T zzyO7m46*o~85kJdrT1wnHK%_nAW0>HOs+l0++2IT%5neL`B$V?#H)Z%z1A0rhe^G| z?cdkk_MQ~%Gscy4x$f*tEtZXzn0MUS?HL^vCNcCv!(m!(;J{TR&RVmTyHUN+ z@KZ`Hz!UDQu8stsQ+k4L(tZB72z6YUM5ZsARb!hY83_@IRS6de%JNG=$D^6VlF5n(gngF-rHohSaK(YKeYYLiX zf#Rfep9ROJoM?&Rwdr@FCDDnkFbqR!AZ1?Z#E1m^bT3wQqcziw#_dg<0XoU3vEu~{po`#Wt6Eb(;2wyk|7B2S284S?Q+zQq1bpW!aItmnm+}zp{!y~D#h0&q#CItJ z+wcUA<>2;OA->VQkq{ky`&^}lwic9kcYH2|auVZquEuSUXSE)7mb`J-b$NJix9o7i?%K2H-HmmN{oTLJmzhc@ zAnHeMsGoKRiDV!fz%P|!?42}N(khJ-ecNFkySDP-QNhmdBD+>=;vCmO&HJ42V6Af^ zE_@l$GHM0tvuQhDnRir0KfT$Rn3sY-+FS|kJ>b-5dZuJBzRA}6&50)U(sof4b$^DRe3cxV4XLaq$7{N++CE?0-{?WZ;7VZ4l#xqbH}nZnG&wH(1u-s{Gk#}`-T^P2iQT$e8! zER2Xgj(D)Fd731i^}1mU=FG5UDvr zrC=lwzo3Z1C}^|uAr$Rl^m)WYquM?oke=3|&5+A^Fqq}9I8}^QXgLDk8fVkVl&1M= zJ$X%=&_1(R<)DSX7*8LzO4_t07t(OF~~ejng>bTl>0?5 zOiO>01Zo$NwKrz~w13_Ng$s5$)zoiR&!1N|WjCbuDVcJebpR77-PV z=5!0juC5of=;f8wv~Rsz9Iw$A)_vir#Ld0F+1hK+5mMo*&36gp>c*xI+g~3G5uovJ6FO!fuqX!UgZ{Mh_s zja8?-vvp~|!EL9z#`$65;ewdGk}@t*-RO9YMNt0CE8C&Wb9=YpH$#FOk=YL~jRfX( zrFC&I{M7w*(*?evGHIWtTp!mC!qV5TeI=1mI&@k7Fu8YiCd)*V`ykF*VcNEo=6Y>3 ziIXrm(^@;2f_Dw58$^-tA|fIOC=J`{^z`&z1+0Jn{)ZOVfg_}07P?0XTVHBAeryf; zlROiZUE9_;UuvAg2ljtx#?3hZqx3tt#Vx_Mui34Z*`1z}RUX}tiD6FntX|X(=c0w% zg6RIr=y->I)lo9}B55t)`k6OxWJEvmopvW*>{Ez1p4npT{l+$1(G)m4Ab%k+L{s$b zRRm1>3Y?CFYDNId33BRp4Bgvh2h7_201q}4XKQxmFIB?S6CXs&p}l<--bj!j!wozF z;gxd{G;4@vyjT^z zx;}-=76Q0Fz-Y7cs$p7W@RiTsEE9*&=ZC;Wz&$!AZkvOD6ow9QA-t{OGpY?K6F3Sj z{^@lwRdJj7(sEhVkW*5cAk+H>=T*hs^B4ZsG>|AhtU9YM3L4Yv2-?8jKve=As~nQ~ zGNWnU2F3tQ=#einCt5X_-ud7x`T7rf6YmXk4~vv09xm&A&-KtjuQi0Q`RzKa>{H%l zDenuC<`sPM^`DIUfc*Gt==&dNPCe)GK;nTo2MwnT;+&vD0#z4yCD?=zo&}O^loL(4N69EK03qPU|D6R&6@Jd!OqTmNU)2D*n(19cmX(2 z9FmD|!)&dV^IITO zi7@*pf~mBSnb9Jq5y5*lBS=j`^eOqI3RB;+Cp(**LoV^0(Hk5(J2V*lkQtI2s_w63 zVaB!ez48&$F$2vtt5|>%?e{WJZyHE(1`ddTDoj(3AaYO2Jwy<6hZSguBBm!i5{*?t z(sg5kNhpYzyAmgVKvQ7-j=O98BMZV`L5ia9L?8LA|Eu%);Tq?R)~r#@lbpGe z5VSBcc1CmF6R~Ut_n-v&Oo-+R`C^l>Pzo5?^o?mY1gOLb7%-%2Lx_4>(;oYsJi9lr zzk4Zmfj&nPd8nDM$bA+3Zt08LUYoK3cTfOC?SJRhm$-hW(uHXK$f&IWLi?M?FS*!% z43dZS^z|#yP`o$=iaH0e3WTnD*q^yNAhVIsMGq20Snmmx&Itq(!nB4Vmf==eDKkKa z8^Ra~X2`kWLYps@B|=(uWxkqe?F;oTpC%}IxCBa(WHsFlK!kJZWi`_`OqDq3wRFAy zM3{a2#D{}wx@pjOUu76dTaARq+QW@GdY`8X=Xe?kAvY5HfBgBGF6bJwcfX%H++LsP z5b~-X__J~UWPfQ_a?jz)9zx%1RL-Nbk z2OO2U{jRw_Ao#luxWI_wGIA5prczwHcF0RDq#0Q{pQfCu*AQcU_Y~;Bwk(ry2g&`NJ-UP@XNDt_Cb8c^biDPu^Zw&8> z?th8YNzZTv0GWU1)*|R%rw>%M%_7}TDX_!I6T8k!k{!r(9 zuY^r2LFeMa)tju>qoY3Uds`&ej=c{PzN$|L2nJERTcH*f5c@ZY2f`3M1T>%y67UEw z)Rm*Z6mlUrphx?RxKZK|I8`B2k6Yslfuc=D?j7(2;*B(Z4a^mOjRi+DNSr}2u2t$$ zn_w(c-kka#HZ-cC~)T#Li8O>0Vk8o3;BpSE8rZBu_KJ#wS)*vhBT_S2Y zqkrl_)5If~>zmy>tZm@)V%WzGvc1Iq;0K9^zi`dhITUO!)a<`gj^p@~dL3$_VXa$3 z=fYRLm|bSyqGpiu(Aw>c&h3!C*6d3XB+d;G_v`sk8f{f3HN_LJ=~zICU~-hKsTvlw zzLly8Rq$>?K8v5Y9vzZTuO8c5JHHG#q!C0V3UNXMgD6M|;T|F~3=EoW8z-2v)ORW1kn|PTJL|Wb&yk1S^tX2E z9F%mKL3>*ro87~4%WL42+co=3LAy-Nj<5-pnszO{Xm~-fj_u*HhXc7a>+GP&b&Fb# zWq_-#_XGFkW1iBfO=lI=R=Svu*|X%9vrT6`feb@)e9+4tO6%<$)cT$E-JGCz+&=BH zvmSfu?t5(J=$oC|wI%O8_M7O@)@)8`Q-6WQz+tA;Q=j!|kzJ=gQQ6_ODsPdPWwlEY z1XhIWioBYrKj@JH)%D%CWdl1rOs9Z7br2(72K-Fb2#~($Y=SiDBGjie=h0AVVk!;9 z7uLSjJn8;+8!8I9U!r%}pI>&wfHLp+KD)QA958WNLKL=WiX{HJ)4LIee)#>D$SIXm zA)-X_${6~ni3_coZODr?nwBf7I>s)Zqz~If zz_O5r<18Mo#9Qa@F5YT;Wsp>7H2zxR?z!r=E#~1%(9Qw>g2CFl&-{nlD{XoUInxZ9 z=8L3kVT0YKiB73^81{IEpA|o>Da|bn415?EIP@sS&{1eIO2^2||*ov*R|pKtwc z%-DDqJ{lFLr;~4va!9;KQg(gS-rnfw&zTbiL|b$~?eEQ{?d|OEPE^Hrrf4OZsk%mY z>4jGGuqK%ye!YR<)#a|aMCOzaDoxow64SK-*|>&)u2B;>;&Rz zA-cr4Uc*}pVsh_`m*n$U!|B8#oFIR4ov*xalJBCpVL5kEm3H@_?p|B}r;f+4MLovl z{NDH7*Q@nB9S-=N{DxQ(R!*n?YyE)2(gz(lwdhw5%k%KI2iNueruEl_M@#BVpQq;d zlD>X$EbSlopfp;NngfTIP@Y%w?JU2aN4-iN^0R*$3FG0p@I=G<`jHP;V8Vf*A|Cn( z#_)vM3s!L#m9Vc}7bcHc;9O`n;<44@xbdxLM`SOjP|O+--=OFDQtxh23@V_vb}V)Y zI&*U0&G@sHtL$z3<77Y6Ur{4HxB&B1B60eI(J8@X-e1E<_-m)NylbcZghcR zoWPg#@B9d3w8LUTSf~p-5tGa;Hw1#q!VQ=1PGZU)o+>-F!bdBu5>#d_^ha$Nn3r9M z9mWptsi~K$)D0-89Uti_MNZ+ul8IEf_LQ3RfEUQW3LVmxdQ9NgZ>nA1W#dvnu3QWZm<1sTc8m4(~Y_ z!a|18K8Ddhy;>h7g9@W!eS&#?FqFEAXOqv=Da`_SUfXFKQGu!yIbxKF{^LmBbXa04 zP@QGw@W4xm{Nx^WkyKq>b4b~>9oDyrE&d^{Qc_l{org2&t~!Pj^W->nMQ=&PviXzBWbbB6XLBuc|dj z7~qVf<-*MZCZnE(Q4MOUa#Yj;A&QLyGPKTdjbQ^N)4O2JR)hbdx-`5d^R|vLgT;Es z++w}!Cn>kZ?!NObec1ba^y|EM@GBcePGvTTfu(J|Yv>}+vwo2)VY4CTcUxocr4F(mx9;dhk zYW?&J<(6rf%lpF!=SFqZ*9z5#O`NtEZY6k1mJyM+B$D5dH zPa*Om)gL;OUfSH-77cK1jr{y+CH5AZQ8HLRb3W*t#R`71Sv!>%wrpU(5jUf(EU1xK zTJ`x}^7B!@0CTmOj<_$8q4j=?kvcir6ZHcR8kP8ruLX$PizhqvWo%wh;(N(Bn(P$p zHdWEfke6hgs@i7d+jAerl8Y3f8D~`^3J<>kHbLf@OOqu60|U=-9R^H>Ef>wr%`Y7N zo0^+Lw9f6EZqV@c2lciwG`Q-U*_A?-S9Wdv9Wc2J>c|cb4ycvc*-a3)-)7@>M!e5Q zvUgw8`!58}JRrwW=bR3m3Pq>UyQE5v5Q~Y=hKP@veUr?bA7{w~j~HPEl3iTXF~v$a zL0T!QA;p5GWbhn``q?YfsQ}@P-+GbFda}JqvR%Gc?UR>N@{ox z1pm+Dz-3ebDt>}8I1+eM7a+yZe;+8sm$Drv|5N~Y{s0IM=&X~Hg~Co!>Y#UY7HS#% zC)jPVsKI~Ap=IoERosm0Snfk%Wr4qhQ5#aYJshAdYK$%J6dphtj}ye>u@-VztRPI+ zs*SoVPE88CFvL~sdfquE^!tcdsnQFscFvDG;7W0I+RiQn&Q?Pwy}`^vTC;3prmdq^ z7F&>1z-POoT3bGxyv;K2|Ednb%ebvW*#40R``BCP_D-Ub26B$+hj?qpULXycuQBX* ztyf?26kLl=%^4XhRaEOyO3n$UB8z+4B{DvOuNY5Z{k6|=#r98DxcIboXzPer9FX?7 za%(i_ja0H|?4}_fxuZ2^u~#&1zE>1KMqC{4r&B*xcGIahl&}4noKJCL->}3)!&r6$ zs}`da9y?ftg~`?E%8Qa|zhIzDanaj$I?B4_YPrv0U9#1;>=<}bz~@$zq{~j;k_m4} z(PbAWp z4$HoPoWY&Ihk#n(01E#KL<2CC3||Kn@bF^@(W~{VAAJAkPoWV1LHMZzz|8W1YEW38 zkq^*qUISVQ4;8Vk{KqM}Rk~rPtI}}eQN?U4y($r^i=_{!KDObKhoFyLAt2Eez^0T} zb`2?JPUNw}BV$!XLnceujYDD7d_HSq1sHE2S6XYFeI@t4pRMiG(d3k_QV*M!EzaE{ z1}WJr#(c^lLQYPONGw|B7vS!eqP%~Vlrs4XTZ19X{bk8jZXvTi}lhSNuJf|prEa+kkh1sLL0 zQr0YmL(tH%SV`z^Ry>OD@!uO#TzF}D&oJMJk3M`9Fl;zyvHD~Bb;16E@cvH6-XB}6 zhEAPHi3WQYx7p1f?2ah*3oR4CiF+5kt8>kj^O#SS8vIE=-VF|3?;ULz{rV3n@2mrL zkxDfGDdTd0bViiaR9p~QAywKBumU8M zL}Un)vxuilieO*^Xp8W$(`-W*+F|5Nd0B&q40PFlCPFlWd1Dypm<`enI_=YYFnLe@ zZbzn=@scO`YoVp|P(_$k%a|jrx=Pos;8e?GrNClTQ`C7{lz_GoI@b#j1Hu?JuI$>} z9QB#Sn)E)O^?LR83+?=#$3Q-t&}+CmhF$)u#y7@N&9fAx78a_b4FWw>C&xa<(kI=r z1!i7c=Hn$xpp2v2B29LGNCwL%dpT5sWUMO69~=96J48 z#Ep*)Xu->j>YU?pZIAX-Q>(72adC6|bek2a_q5!ME10cX-QjpwTUFBlR`mgGOv&*H zu0pdLL}8SO`5qMlCC>O)Qc9OpU^hCLSF{VREQmFyI)YaHlWX`oG9s;`pL978bypqP zmN7*l71DIfZv2*D)0w91N zFgnmH*$BZ5bR9TJ&d)mtLLd?qqzX9DzZH!y34H9-67Y)}AWQ-{OI4k(pXcb6>-VjF zQgx`@;5KQj%3vzMKyw*w6l;OY>#l0Hdr3@6yo>X+0k61VP*FE2aI)eqY_X|Ss-TR4 z?@Tr*;l{;F3~+e@b_H@co67E#OA0mn?i1&#wOU;P`m3v>H+DB%J7QsNKHdM)&S&oS z{k_9vzv+R#mX|95-Ylj%cB5-tmhmNJn`IMRHi>h|HJ1*WZD;T8rkXkR&OtAJGpDjq zD<=~^d1yYzXI$BZNqY3L%Tat;B3Qb;I5sZh)e|E=wjnj~UZWCr6z4xWRzEp8@E`)3 z5;rx~8Z&mcH^#6?-UxM$*2vX2rBxCcn~J{v@5ib-TH{uFo%VgEHqwLA7&S%OTAmmRp*1ujccka;cyaU~1ap?EJZ*|Cyx1hqTTdLiDi7`>v(G)2&#Hy8J*z5BMuEs;3e!J=&7A!aZZC9NA zZ9`)3^xfuD7RO91Tb?CVB-Ood1_gYi0wyvcy&8zmP-?5o=hv0TAC|4`rtNd`iusDF zs~1~>diVEc_Xp#)=U_-z+@_{~+s3yQwD1zJ4U9+8y|lM*xNP*bDUTv}ieC<*D!^+- z0V`16fE^yqhz2<|>ID##<8?qTrw+UZ{G|kWSO?O?pDGs-x<%d4H>|)*ItD1cKuCk&kvlvT@in<~gB7n1rz>3lx%U$wdk|SV~ zHQAbVui4kd){0%9Kn-Fnh?2}sFX~937H@rL(fwy*HrfWkQqk*!FJ0SW@u7NotugC8 zpEfj6-2)WeT54H$8G}Tz=q`iSTK;NkGi`TPmOi~i;q#a`z4fdG9c#y|0XSapz0BAo zFs`#UWRtfuUe#1N;k|n5QTV~H#Z_ibYIF8{y>lbjekLR;Y<5E<%6Mn2-cEGjm9~gk zFOzlaJF@$vEz&(y>s<8q(#zQB^&TdZiIgweI+6!J%en6U7aL9s?+48d?(2qQEQzlG zX)w;VMvz`!@ee2=9MVJ|N zutO`Ef|9BAw|ogBOs|6cl)5{1)zA*sA{(iPS^1>%k3eeF<7To%|H_mBqt(4D4 z(%H=+@ltf$Ej`7qx(>||r7~?Tk(%6x{eD@$u5;%gUz2HB40AS2Wc z^4kMhnhosoQ>=m_{dohW1HOV-91qgrT-biVr$Wqn^U3bR7)na1IFVnr2$$Idnh@SmjHgWtyy2Iec!{(aNVg(b_r#Sv1Y30E8I|E| zZHHKsT^RqQoKhg2Zwuesl;O(q-$+f8WY{#6!*t2rrC-<$cbg$2;C=bCNs8{lK40}> zniAL-HckpaT*DR(xNTS1pnZNW@Fk{a z+@6$0%sR*}b9_CaY;X{7MTnZy9#n;RJD~Uf3BwYg^#47OpgV|JL=o2dp#iF)7-4oj zkM0O9J;bqT_3f0f(`1M_Dy{6U9HSN`bJ>4X2SBt^#$@^!?EW-#sRwL^K%+tIEml_4 zSD>m~Txk04=iiD^oag>2Kvt;yJ?nAhy~RaAIJe^!y36>55venA&cZWcEa-|pZLA8Z z6d>s%)C)k?SDEo`NWxr}WC;{+u-ne#s2^6B#g{AN8>VoJHjp0bh@?Sc7%+zAO1#&Q z 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

  • %$9@iC)d{`@*Jlq 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-114.png b/templates/plinkoMultiplier/assets/ios-icon-114.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3ceda4b5f43f7baaebb0bdf37ea1bdef117be3 GIT binary patch literal 15013 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-120.png b/templates/plinkoMultiplier/assets/ios-icon-120.png new file mode 100644 index 0000000000000000000000000000000000000000..a73a9d04e1c2b446405b95a5c03f50ef9f96f2c6 GIT binary patch literal 16225 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-144.png b/templates/plinkoMultiplier/assets/ios-icon-144.png new file mode 100644 index 0000000000000000000000000000000000000000..d73c3c3e25a6f59ac78a0625d7c3e3999e8fb2e7 GIT binary patch literal 21536 zcmXVX2OwKr|Nr}Yt43RuC^c(D?5f&ozR{Q!JE+-GJ9toPdmc)Ypmq^8Y73z$Y0=_o z1+{CB8Z8f6vl_9-|9Id3CHLl@d+y0O=es`N@A)2_nTbB@CEiQ_`q#f$4GoYM;F@~= zVP*v96}^SVfBj3V#1M(F3jM$Jk6|^N2M@WHS7=e$^)oyX>rEyvJ2<(OSW8*-j)zj8 z!hN9@(~~OceBFN<*`v#De$>65ZjToJkAcPo4l>7&;!}j@JtU3;m!5hN!9L7bh4#9C zNtk+F_#;^}(c}Hz%e|cMv%f6RBLyomX;aNlR}_^-m< zUbAEQfR$a#iv94&8*|CBo#taDW5K~y0@m59%@$OI@0iK#A9`nZTA8$C+vpPo2XAeT z9gR9gSfwAqZly4pNl_3Zq`&1xT_fEC-C!qU;U=Kja6h-J3ch3v|G z(dB`Sij-ehBNa|=gw9+b3Xp26@6lg3TV=1dHkYp==n`nQ(6rMh`_8|fv~A^TKVHsG z-4|T|FBSf+zJ0XKIU46(Az(c*RyM8rL{_$GC$Qk-Kdtv4TdG6f9hTnHZ*d!sZ>|+6 zTYX6X^NcCx!=X*vS+4f+2j_n;1kL1sHP!xWZ=oeLJ=|<#w0*T`U^eIl*KF^-&E+r; zr#C&0>gZ8~85Pk&;KsV8$VBu8%zyhVqaQU>tj`QalVTD4o#)u=umUvcA2YY|dY?ad zWp^ZH(f*g#Ou2xSI$c7#F7)B?hiux*AlW;;y?&Qgjm&If!)^ITQ3yx7-O)D{CP!i^ zbeZd#A!cmEa9iJ~D>45*qwi_cHe?U^ISO4jXQIP#dy9MD`*&9n=n3>}e^*OR;ohhH z*IDnc#x`3a*B`mp@zt3_nSvoUcvXqm>H9lW*Om?PPnqXOjaZ_7^;%E;j_JbBw$nbr zJ9~HFTKY3hCy###d=P9Kcham3SsiZq@GbuM1K00|)iZPgt9uITIHk$nTe>o?$cZhn zAhhP4rt)maXqQ9Pns-I*LEF!f{Y}u=lhKtw_xb+-!*%{s`jFOQ#is2+l(n~XsUrL_Ou(9f zz8VXY0Mp5UR=G&`3@~FtK$#RS`{!uQ^C|l)_03vEP;Atrcw(4i7C^fL$)wJcPfyu~`5h;%bPZ11-odtH9&%jNb*P%a=q(Q^aIKaXIpwKV=0DtI%^TcH z_(^il&#-t3*lD?Id+X%y`uT&0ZOjYx>!887dAxR?kw?(Ge^GaR7gg?K`nZQ*5!rzZ(thQ7_^P&m;Vo)?Zhp(OWsCgBx8wKVt%8Ajf*(3_VTJwvA1}v z)IyOTJ`T1}gr8(t6%w%GH0R_9aGbGX3aIiH4}mS<=v->~bL&R4R`%MK(Iae{M?0qB z`5kNL^E?-)9Y09>lL)$f_+#Je2`vEOcx^Na5!YOfExHPt#Kyq@bY#ChRJ&MVkbEf9D1uRQn-~wH<|ykUriOjNVO&dN=qw zckuQ9@7_(KK*K<8%0P6_eJ2j+T`Ge5`r2J2l8Qh=c~v_|;D$FIU_I^G__5gt@VCSfO-bTt1dL7Ha@Y$Oo4PLRVw|Vonf_RRvFlV?qD1 zSa|va>?H017CaJSj(woYERysEi~S3mFT{<-#yyzC2{AJ+2x04|dS8r?A3hKNyRvm{ zqsy6YDfnTp?JTPB|F(I4)qWM+XFulF8WefCBr2E}_2to`63eO%G@A(XlUksgQP*B! zP4%I5w-Qup{POlbJ5@C=i!7*|CVQM!7w%lfp_6 z7RuGIrk-#C?KWS`b%tP+@5z6hEQwnO955Cf9G;$34y`W z5vc|`v8jO8Lg0xI98?fSz+kvXkVgiosRjw~T`(Ghq^C&vbvFZyE<3n^$E8xa+qvcP zx+1#+yMJS+T=yCy`Z%(Qw?5n$sna-MjaiG^i~dyMx;e6EzfIa*ZIvnN3us; zkZ}>e>f!@?g}uxo1G_bbpd$FGN|G+(WX|mL##;*sqlhHLy#$hxtE|8a1L&UaI{eix zyB&;*5`JsM&dAGiRV*UlHaiPX-%8&K#kSMsBgWd7Vs#Lu7$O@UZ_;!ZQCUF>y}$)-4rWAu8xIrla@S35-NxdfkBI)>IB z6WR`D3Xfl#nn&X2f{!jJ95bJIPmG$hD4ykHuMEOQtv5OlzVWJ_vs_#*b#L*IhTR1n zGo}FN)L}ECMG9o0NVL*N$H6j!axS68By3BOF7_E^mz{|+QAD*~r(jzkNgpvziK6=Y z!H=zaMeFZNu2eTh$Zoc>udK*z3fLFq7u^~wJ5_Dn^w-*}P}aH_RQRTq&3Qw|kyt-< z&nY*?;mU%}41|hE3q_MT_eAkmI4GQKlDye4s`!h^L?#A+Fzf?R4%yV;8)@PHF=LOo zS0ksJHi&7oQ(Jj|2N(-aZSj+jkwBY;I)H=MQ-7)UVYw-ZYTy{?0 z`<`;ZaiuU8NXUTf-|wcRyeleE)=qXBi3W^}FdlAhpb(g2g?ZA2d6*e_(*F|X!NT4=0!4}{=YZ~~0^NQjw*5thKsj03C)gR#I^&R;_4Bs?+zijs#pb`pnx;V`fp z+<;|;u*@z=50w+9G+y+o-obSVuCS&Atz8%I>RU;>lILYhN}zkY6WkvgB+!;}y^M*K zd56Ad%XxE07qu=b)D6A&i}Cp7xR0N%T65AktfZ@|=s}<&2q1#&h7hU&97v}j9Dy`| zh(LjW1BqgQBH(iDNbq+q#RhO_8mN_aF23h)7@n7air`fUkX&K#fZ-JaR6-&_yROu8 znfZ;)uoQ?$>N2@=r)nuS>4##Cb$d(w_qmqbG4CH7`7oWF&PS~U?=95baL#mTlhfq3 z<5v+eT|RPq(=8Q|87XQ<_k9+~u?vllV9_X74(|TLSwjDyQdmyO69wTy!-ty`x#R^k%t! zatdRMBHOX9c!1LgGI8>=3ls&qIxTw_Z-V&_Tv z=<;#MJij0?+)liU;&3}}Dz7}J9MG%2{$a2{9_q0atd?c1ghJ*q4ltYeaJDwT6VbNf zues+j5XBx;XE>kYyp}K>cJSklj=bkNl2;Fql+XeCUOE5*5CKClgbASu_jIVrTQC9; z0cyc(0gx`+WxOgg0E1U!)tFaXZ!^~OBwp+ipHU;(zgyjJyiOyq+RLFZYBl2l(ONGH z*{adTe2Om80cKBMYfa^}Y0zGuPXCUMd~fQqnQ=Y|q5N%wzz%4&d1z{LnZpA_@kQ9R z1)&f;_MWZ-KCY3SEm0qTG!0o8!ejICMKCg_x{RR%F|LsVfEj4^f)NM#nmSL??YxQK zl_n;Q!9Ia&4JOaM$wK6bPQ?y){Ft|@I-m7Q`{?b@|CSz&Z}d0e%0ioEdvEPU&0cF; zF+KfEi`msJ{Ch@xPbRd!rFnF;rGyKrejylw*kCxH1V`k?Imw|+6w5;3Kp~K5Gq?b| zIVWO+nw93cW}$-|Gl85JJK%}JL;+E3YR?1Z9NE<$IU|;SvqXFG;7BXl9USSErSCa) z>YmYPO*GnMO$l=|jAFwC9UXYwhjBD=B$8Bs1NVRDJ^3~8b$**+&Z915_1pRnw|rB1 z)(Fu6R4KM)>ZPBjA#{Qo47FpAeTr+W#TM08PqHYy!R1d9NzJn4Yp;;l77lVYHA)5t z=Fx~6?8WSbeFldoLF@0!q^N2wk9*BFqs7HDN_6{IvNAiZlzF7a^S&Qrme(=1Bp1S` zr|kBUuv;9s{Jxy$pIeGYgSU>F#iIuc&(c=T)@e>1Gvd2W;a}s`JjGUM5ynui1s(p( z#yY;tNxZ4huEouad&>1!LgJ*l~{ zqZAFqyifJ5v4Ml%x8k^+9M^$+QfFuuAXy1G5*89WeJP*}Aaa*Fr#xzzYNgG!i4KIL z0lZw_?>3i05z@qcz62L@`~u`{_&<86299lae-9knGrtEYWmpL^}Znh(>( zboj9IXT8@Q3y#{F(As`~x|5=Hwo*uD+1p2P;4`M1D4oq z6(JnrA|B!*`xf?AhatF1^y;b(WR#VH=F+)01L5+n!}_>LH$0srwos#7Z|99INSK(2 zrOXmELVNu2h)Wu{?S1C*2@>Q{MQZQUO?20`_fiGyd8c#-ud(AKc07T2c_aFmF*&+I8sje!Unq61(mB`CBJ3oDwfn) zzlcWMfPen7htS(YG?L|d*)4REu4S{USF}mvMup1_)LYRV4xkmTIrzPylabCri z4GlxX#g8HO$yDnZE)E0^65++n;x6~exSuN^vX3;dICC}cG!Q5 z6XDZhD~D~AZGg+6j7OdtxK!lfClfD^F;YgZU&}S)$uh4uufJ2zQ-8nT{pR(XTx8qZ zgo{WT=>&f%H|H1~X3~+)?Kn7)dXtiP54AC=EvP#i`B&3i?=^n)8}I$-W1dI@lM zkig`}F!(Ze9l^PeTfzM^ zcMtuzR(l#|3}PYnWJ|a?6IA6Xj5IANwxQ?yc^cCi68UEPpFEqnV``88L1){_4d+AC zne6GcUoofcPa2#&s<(GEO)%uHQn2V6E0f!Z+bW7+|17CaCwt65vj~m!X6>x zyRM{{Lp9+wRBUK>SE#q^2dq$yZb+lf74a<;;U@9=*nEIO>KDuC_k7OX8@~B9LX%JH zcDHsU-oJ9q+e1wXKzU(GcF}IS=US1X1Sv#5xWqAoG8MV8-8JE--Spe}ctDW$LPgV~ zNmZe<=kBMvqp=tpKJBBlcVW8+Dj5$Rl;=Mzzwx;IhPP))vhuX2tCVkpTyRc#G7vW2 z@^ciRfKgVcM%7HTduxJ|qAs7Mmn#AAnisx`!F3d4O#?EUA?JNX&uE>}@OD9H8Zs=A zZV;EFR-+u`QQb5a?(S^>cl*K`APNuxJyq49n3O*?lt#Z-SJ_-O|4YgASiB zlWVzF(m6$Z)<)ei^FGyj!3ZZE;4E*ZYjqEenl`ML%d2bINOaz2YF*Noxi0M=HWK7s zpLGx^xhTh0U9;&e?z|IrHnY-pu+p;so9|>szYT)c9dn3B+UZ`C@uidw4X2yv6}x(h zpAW!$^&d~Xmjb3dN6q*e7;=`$Ia$jSUO?bklb47TPG61;Rct;yQw%mORDN}>f94>3 zGqV15xAFBW_SLHiA>C7y_ zqU4eEBCND-uGQFRve$GaMQ*%x$2scb7Vra}$wsfWr5Z2OT)TDTMcPaHxVkds24t4^ z`c_t+79M@(GV;7DCg-W73qa*v2E;}Z@}7k&QF6$)H7>DDhfWmz5>Im}a4Hs&g9hBcTW@q`_l+zv4T>^?@5dhtig|hik}AV+YcF z9prNxu|FhnoV*0XeKla?^+v+@W%z6K7OY7j-+;iEGyTN+y=G3xE zX%LJvp&&Mbhy6zNd_OEY$Be&k`!0Auciv3_)Oa&h6Dif1GnG3yI2%3k%vU)`Fltk# z{Hna6xRSv}7Pdvz6T%?;HdaXSsWO&o?ZC1y{2w`%1);0OF5(M9cttE8d+CPqNZ&#D zcTCVD1$8-X&5*|*GUaM)GTzJP^VJJG{%nw=5WRig*uX~-{0;D3e53sG<=lSbJWAeS zhx1A2+5U$1>Gs+83g3Rm10(*a>gGQ<*d-0uMcwNsYn0ighGAF5I1m){H8FY6>C=a8 z-zQEksQZ#8JhX0%G<@tFz|=&3v_H-D&^j%x%CgQXqM9ha)rm{}0%1yy6QWvE;~4`W z4Cd;HbtEK$rC4-9ND2g6q+$tP&rlu%6G2aG?(K#5b(2fFO!>9nDlWGlM!NPrt91=> z$_uhy!;PER8|mdp0X)cVpG9@@5od9Wj$A!n;^H5T7un9*_p%SNX-%50@_BLhX`_Eq zPQQD3usQVUWVJAH*0Wk{qg3pyhijf5W;#bdtjs8R@6@WU5L}c)HC`+VfEao*^Rn}@ z?LZ=TZSek+GH7S3Hm1S7(Spd&-xesNAcb8V)4C*0`_QOi^^c zvNraJU^_dj8WHA7srmV`-%2?Pnr{Z!w0sgrf*N7sJBG-#Z0*fvDZ1OOEB0pt88K#b zpTy=``4o6M7W;#Gh!KG$VBxTI5Hc*DX1PY1-$kAM-9|^pOsom#9uwc4i0Jn!WEvMs zNHM1yI9#JTIWW7(8bH_?Kq!m>8ej<`X&Y38gP{&%ZeHLcO_P@^qX(*FfqVTg%s3*xj~Q?MACrAPW?}58bjKZ`i@~IuWA_zjp9tF z#ys-a{KoCP*gBo3yQ~l_OpP}Ki!KvrbEP|K1%1mIIUoEiM6!$`!1F6H~F53e-iyj)rcHG@8VV(Rr% zuT=^6U-rp77hj8btSfFz$qqG3YZP11Sx-Jllgs;xvEE(PY16y0I5+c=tEujmn;aY( zV21Ri#8R!zK%iU3h?CAVzjtkJyZVegVQCya_Vv_R@USVS|FWzm!pKJ);aWlF1gM=o zA~_#>2`7z!BJPcvjG34rM@=B=lq{CJ>J1dHn*RKi&)y;4ghGPb!!Tp#Db@Gy<$P7! z-pe`HB;W5_ZjY3!2PAJ*x<8v=vo-eE1SmVJv_^;(1DffAE`u(z|GK{N8s}>BD%bbI zfem`EW=|ycVFiGf0g?z2Vyq!@eH8JMf1Z+47}3)2zLIWaRBhnth{fWW&jbVh*!A%# zm}fdTIG%e#(##JcnxGsVH&%yS4Hi_*IoM&BV;L3%zcFq$xukwe;Dh_6LJ&gIDoqz9 z|DALf$#F3q(jgYezaF|8x*Ec^S=%(wxT5r-P1a{4csF;|>MMD+o5qZjb`xPPM#jE@ zs>c^)zOn4Fo|04to;LX!8bxJ0N(8{MAt#Z=` zET)ofJ~^z+!puZ~W-VYwP(FmP)m;tgQ?xoYJC)Go1mX_o&B1*ee zaP&|l%$22x1gCy)-kUGtXq;S{~LQF;dk!WiH*F;upN9)C+3YivX7akdBcEQ zr>5hjw~+@{EQp6Mx1^WuyDhTvmE_A>^wdvdez9z4HnOKY=1yx|qko*0RgO!KpQl1S_J9zxyozQk#c z1wGR+$8s5QcWRnuk^+|!mG$__qDO;jN2eoDGbdc3Ve`nVNx+zM zBE1q;3|NV30%3rf!z2(>KY!$Wk$cq(S)B7!oqYFXKfT1hFd%dh-HtK!DwRyW(u{Dc z_3-PN*`DfA7mUR0ZtA-~8F)FD`%<9rzC&$NJx|Mh$2S_%C-QcDRw?kq<}3B(rfvbs z_g_9<>m8o3O2NL#2(>oz6sVRm)TnMy{t@L{jmb(Dq{tmUeUmj+Nh$9!F=NI*m7-=9 zIV5_P8WLVqQdQ=o`d8+Tzxc>%ez7}exBdaN_xSCj* z>nCJ0U?Twm)y4y&eO>fiTSM@l0*UO&CO`q@(cYG=s>ux^ruyk=OR1(rsJKu|T4 zSnECPV=;EpQ`fecJb1I^WW3AWRUdw8yMre-Muh*fIV;%UBv|zDZ>%{Fnw7}dLLef> zioDIntdz>CE{*NrrL2B76Ai~oy)BxjlABKKWy9$8+6!e9ZKczmWQY4Cn{t!79Pisa zq<+#H53l**g0fs)|63EYKbJmP&9p{+&2IY@=6k(2#5=5M=T}So($pin%+^vdZ#<#6 z&ekz=O!uAI);L$0Y>60$6t>h5tbi4abtBpw^RBT6v4`qTJ(){12~kt(@|qpG$wyI%Y60XSCF^_eJj4GVKjs zl?-Pk784(uDOK{)wN|6b_sr`MTc|A*+DaGAK`h2g5u1mr49nhI=(7#qc+MW56?)Z2 z%pG*Z+hq!mLc;4+3hzu8M*Q0TxA`?C^J`U=0^1)#tu>%27ZEA>Z!F*TWKC?3|B!U6 z#;_hmq$j|fgcw?^fGRQbDu&06Gm`X3R0iQo z&eQ{!&7DBM>K?tIm4Osn(+FZpcwz2gtC!kqr!9NZ%J@j1Vsd%aebczP5-Fm@t4b+! z*<-ZNn^AVJ2H~qtQ$cHEgAq$4!I0L*hJxnJ|L{CU4Oa3Q>&<$~|Io8!oGrRsOr=?m z{8PfjcH;*Bes|lk|Ng-?SIsT0ojF<3k4gij>fY{!$8L6+MN(F!l{#j%@XU%#X`Ftn zgaQawRXNhLRNCTtCv3m^egn zde!(O9Q!7?p{+sNJ|d0DgQ;A=zJ=fvKmsoHxyPlsai4Vc<_rDny&~C(7ZN)PmIB== z0yPtHz-iM*TfLI73PxwhSJ|b1ynUtf;M@3$`&Fmt-sHhkLy(U{=d~jEnGyVMdyVIJ z1O_(Q+SZ6!4oMp|DChLA?C$RNtpt&jOsl0TxU#P<2gPg-p59OFkhOK5p>5lUN7?0F zxiy$=o$cnSfW*Y(g%BFoO>taU>Sa+>lXZczg;v%27z#Pz+o2~xrAUY>FOac1oHC9+ z3Z&*&&4vdZ&Zn{2ex&2PnC-%*w*-PuMRvrkYz5gjwrs?Ou$IBurX#nN>}S^#qriDU z)=yQv?fdcZ=Z=oQdOKzUm2B(syl%AUZvkCnK{U$UX&v_|vw78P=5)|gz*iU9>EnD5 zv{^e|PIv{;M0t%{J_!$BUO)a6*aSn_-G#&xvuL!S_=CvJ<^H^@Y;2TqjSZKk$Bpk+ zWKY&&KDun5+3^>up6*W-F5P^E2{~ma+a-yw$6lb><{af}}s%K=}vc7Qc$O|9YmFWs`DZg<-DGdC z<#4syy*{@hU-r5m|N0S5n^qw+5Ixl~8?-iJxRxR5n5j4%D+GTVi|4x3V=Y0|!<0D~ zR{qWmB&{daW=bQ>m4|0A{<+>>J?R{}>}b&t7wKAEGv-$pe-eYyvsq59M*}iv6WaT7 zM>LA|nMd^9;gg3B4s*W;j+}qzKbd=LJCL8hrLLt3Vsrm29DfOH^0(`!dwq$p-0~ypO+j*H(9^c!v~f*NVjAKXf(|GzyBd9t!oBXE+!%k%!LaK48{99`-(KI z<3rC*_)fFi4z68g%T7=}=;4}^D|9}L3k^LcWYqI%wH`G)ANAMS-qi11>RVcB?FI7J z8#NN{OuwU4By0ttnlxFINnL7r((=Tz(6}Yy=e>Tm$e*lrG0Uix#4>hMb#3h@XCLoI z&@@R(G2Hb5qvhQ#5qlp_57(AyO%*o^o%cTq9t(r)1v1lo=#PbV!#cyCR%tL{DEV4p zt%kG&Lwx8>GWu=Lh#pY=fh3E=FMYq?lv%Dt3oGm3gm7;-ab1_lLyS@h%NgM#K1-)@ z7tT(cj|>+lPsGoL1|#UZ7i8NWum5q@C*INWtj?}Zziq!dW?1`d<6X^o9Nqi1UCLp2 zxoL#=v`rM7f}9b-Gi1T22_Vi_W-U8T;ai7R@-MzR6Aq5Kw6+2%)&&%YTbhkA^BC@i z@niEV?SCsaMeNn8%!Rh!zEX>7$s1gmJN;y@b=*@$V{0bX0#GWA#R?TzhqzQAHDuo! zQLjPEG)P2D@{(PcoqvYbW3LE3l^wgr>!wuk4iia3D>j*@@VDtX;iYwSg7MmB#p$8* zi_Eic^Jhvir(H2!^+sdgVovAJ@OyJ@4+#V>Z*Sfm-YWAxr68FIJ9j(1?mw|YZ-J*` zeo4~E%&Ka&=h0TkhvVf}HqJ4#9o|b`=%w#*Om@YTc~a8etz?}+_p&IQ0D%F6&ZsGE>0C|NsVX_*(?0Py@jvS-B#-gp z@?YC26D6T>+;D|{V?KAgJfB=cy(?Cw@c@Xi4@$9f#2eW(69d;amPzmC8gj%20UxQ5 zCK4Y0>hj{(&*tK?*4GCN zlu`HR?;At+WZP=?Hp5mtJnVd01??7&*ZU&1_L3Ce`Ok;^>Us9O&8;L;rzyP%R|Ls~ zOHi$=4LY(iEsSu!4 z^*6FuG#xPvrc}=>?uD3Fu^}NJ>%qB@HVK@q1-sjQ+gwk?`jCDqDv?me^*S=;S3#6-SRt zfJ+4?OI%OAEm_v0mQEkeywxufmlSl!yX3X~K|;}#YEo8OJX}hU_l~k~56`m-E~~V_ z!w|yY7YsA5*byG3GN4>UU{3G?n^L5qF8f3R@bLRF$|Kbpz67y(e{>n3eSM4OqEo5x zd2-S)(m;_s7EYVqUTgjJoolwav5dYPc9+#jJ9@T1G4JY&XLDg2?_bd3oie;ykW*6j zZj0}HlWIrbMd{qH8@R%x;%L}#P*8KrTtXc&Mf`26qfw22QJE?=oN2*h25fIF$0c*L zi%6w`4vYYYmEs^S(pVDlO;#ve0;GOBLjIe1VThqiok>v>(OFO7J$f)+80T;UHEUsa zO1kym=|zw#c*&eHh{O~Waz8k%XyA%COPN9mar|EE`9OMl^g0y zIE%zH7gK6F(VAXF&Zx>C8d;MI5@%GU+oW?ONyEeI(^>;w*7%vjA0N4d1S+I6g$3s z=@nnL%5kFF2aTQ1xWWDD;}!D|qp)=w44{ThFRkbB7NTZ@+G)rLBy!yot}WGo+E`fObiVXeTzIzftn(zxE6k7LK-k&{v-9cS zv-d&y^wX|qXOH(56R@7lEI4M^_nlvT@8%BQ4#xZn)92E+*k%eo+J8&`E@{+cEpR|g z9@5*c?dqY>r^uIFN|;9?-9LC*v0NfwGi8Ama@fa*Ix)l-K}@ZLse9H~AK;nSts{{N zYe7f7QFjIDKdB88y-UN9{(~c(Q+<2(b_!SGRvcdz+RK`QJRHjQRUwRPMx6~28((kU|%N?l=E+nNvbi^8zXUg;p8bQlK2DqW1w68+%@%8NrY<`+ML)C&un;!FY^|~nZ&yY)H4hK!nTBkhrCF0TTSr!GhnvFiE(;gVk zSS>y`IpG3xQ756wB7@3w23_GHGdy0J3_^P;Xeb{!>y5dcDHwN}m7q`3Lzh z-sLY%o1XFCC42m*zY2>Ss=jz!AQ{Tq#Of47_z+<*AcHRAR9EPNq;Nr2s2=8AR%)r@ z9I%j{@wvw%eQ9HVR3#Qv;+FJ-xY)$@w&v(PK6PQ!x364HdH(X{OS7evdp`Z&htl8$ zPqqebtn7(bGsQjRZn$E{NJ=Ik*gsqIM_aA9Ck~PmhfDF%0k;s$hhIi-15Us;fK*K^$hHOS05Uqk z5-B(j>s)4GVF4Zkxcy(2r_gzzJ=FlF18B_C*Z-k31(lpkmb>chS>Ew&J&$QFV&z5@ zLBs#-+uz^6ztX;CIMWz5qWZkxNm#)5_B}1dlOEq^y?l%%<9eiIJ4P?mFcQuxoJPH! z?4;J@=6~m1aOC3X&twI5LpV@L?7d^T9lxz4GsRc)0b}IN?-&Bw;&PF@QREqp-Xsot>(; zugX79it|zm{Y4R(KiPfa;N%eM#C|@6=g$Ffe|Tl_M`wTDF5A@)pW`C-BKK!gZnhn! zYq7cqe=AFzn01&_Ciw7(#yv`Xs%QwQQvIO%_;Ix7T42og@At&h6F_n=7Tb9C%|65k zL~zWs*Cb0kPD+T)i8h*U^j`(h0e-3)NW(;4MvGcqE3E#dZ39e)wL_wKEYUzi)Iv8_ zM+3Tj1lALo@$iu1B}mB}21!p9)9aStc{KYnlJ=#`e=aC=@oV%i{b(dG6F?ODmV;I* zDy*xsh`*2it8#!yJmmiHIk0J`fBqz4WPYmtaNyNL3^956j-vBSAUVcQGq04j*bo@U z+dChV>qY9v`o`O{pQGwcU@p=ElGl4(Jyrx?Ws-h>c03j_^(y$yws|rZwEaZWT7q~} zJJM9j0>KRc1&GIiob+?O`2Uap-K2}b2Nm_9J#J8o{LPEW4bp9l3u`PI0vScNz@YU&EQ%Q&D{n~cf(^OJX?3H4P z6b=@kNnhcqCQ}mZHbkIMsn>MPVal;m>f|hHmX3p@E^vNA;fShBzU2w#QwCMVc0ZDn z?3UBBUQo19)?BmtZ6SC0=E((O&d0;qrAo5$dHsFv3h1Q~_;!nfgTsF3MC4uL6T1wxSQCng|JsjN_});i3y^9nW0{H-vhrM_|M_@i4hTVCl$ukd%h=sfA!Dn zU(rIb$8dX8RJ3l>>yGxH+|t~SpHSsvT@>=oe0ZzeC|gHQ-3{t>(9OSh@XdXx+sC-eGQ>Q7|&DD3hfx0dgb+Fv-R}L z6e-BgfH}MOy;kI}#LdFf7adbZsM<^)x5c`X)$X%{Cx9UTE{oy* ztIU-~wFaIAm9~&pv@p_Owq&Hi4ubXfFc;Cn60#hH9BF3lp1gdL_UPJ7k{N2ch|)CP zESzEV)6&qkfRZSD8(VfD7X2(8GyyL-{J&p#*p zUJG2QH=j11c1Y0lRnG3S;@eTodc(=&f`c*ifBUiiWn9tZ1=BrFKIqc%Z;`FpGx6tx zZLX`*BX1=65Lx*a+apd7c3j%<&RvD&4r?vyCz~oCj?1)PO&Mf>D2sV(#U$1vE8hSt zh`>RZ&+@HZF@|c{;~LMfWQR1}nW|({HlkV!SK^1Q7`u&q%E}r#U*8%t^dKz6#YFdR zKfBD<`uoOK2Kd6X$E~vHhJz}dVVx^#-O>eL55KrHBkoN>* zap2o+c<9Wx`{<=~++48^q)gsOuLf!#k=S(L(mr?7N#~@DC3cWOa$pNj@UP74#N^wJ3&@oQ&Qsfa(4pn z{VIH7#P&dY?)$o%vr%hz-#MNA{k^}*UUoL{@nXV3q{)IE`o4pcnxUiUEh=Ek50 zQEGPi$pFMBm5hTZ4Nrn*`)hyC2)n#{c~#0p#Vo7`D{ogLmE@tS6LC;kgp$O{qbb0z{qQtrf6Rpx?|8e5IZ@ zymrKVQ@s>f@8vSK)S*$t=8lWm+1uZqCl@<-bu_Nq>0=n6X|D`@(ucnMuluBa*7kyi zJHGG|qsM91L=B6#33w}{#By&FX|5;m?eAZ|zs@!7rR2+Q+SX-TSI2v`$gkBE14D^C z8Li7d&S%o<_z`g=dE7PXBOqxXN1lKE`^)2i@5jHNKdYE0YqxDIP-&qr3mgww)xiMifm`K z{mUY!zI=c-lxc+}hq4mmD6b~9fWY0_qptZs$RGT*)D;^vy-L8k91hN2i~}2(bO8MQ zFGObf@AfAcoEczdEZF5_06Y7$er*3=|Ke0V->x1L@k^jOEP4_oCPc<;9Tg}jyjNJG z61 zB!d!{dMo@Y$zb6g*ng=O5;=9$ACaf&;Xd#(Xl}1PZ1BCu0KfAB{Y0lwJYaFA&-)Sr z!XU}guBQV-z~UZ#=1w;(@8(u;?Msr&@G4J?A6V{G%uxNp zGP#IZhD?4L|CgFIA9NwfF0s`63;uS(kZ}GZ0*|AowY+tC?GK~(fi>3?XB-?d-k{3Iubw4Y+#d# z*P^a#uhDWM1=!Y4c2Cy^PyW6hJ&K}S52~K|aSoPUTAwJ>5??0^}6<9&fei2HrcIrb~2=n&d;ATxXgVh*0P8G zF;7-(=6=$0!n~q+{mbUp4Du^Ge!K0un-UKlcG*HS57t|1*R>YhxZ3(1WzPiO<-fOQ z=OaVKT|{(WLIbR+Ro8{b7p!}`JFyC}Y8GAW9-P9^GU2rA?cZEkVyNe45D zc-0pMvBJ+EVN-=ntgu{JFsv&&ar{TBmHnVQM^e$^bb7>z0l>AxLiZoUgjXiG2 ze(;-JyM^*Y6s?a2*sZb-bhcVR@BavF;Et`u%$WiKO0F?%VxZ z4ge#DG)TK1L=M7$Kq6~Ip%)MkKJrUemA6b65UHx1PbZmUsVEkhFm8-{_uaGS!j_MW zjoZ1exytjrwa)M|mS^S3NXktz1neQ-nJU-K?D`p-l$r`*`1l_P0}GBeVNqp8MYDp2eqC zIJWxtz*v{#e8hNGHCx!2^!z{P^Qw4#fEhv6n~~D${~M2W)t!Njs};AWVTlG`Jn>kH zckDEC6-6~&$hxXs_px4$E(v`@vYylObCGBq%#Ty&B^I{LgQxP0ym9X>0<`+4gze-_ zMO`HF{m##FOm5)SV4^pv4IA+RnUVeDW6S*ZVUYhJiZ1B-PzKFs$@OANgx_iI zL|h>gwaLcD1Y8nnaMTGETtfum|6$MbzxR89bDr}Y&UwH0{e9oNeCKx#zGE%~m}D;~ zKiAIKC6z)_wD0z`c(Hsz?^^S5s}p5(@l}Fl?0>dPCg`&Dd1s@Ku~#aC!gn8jVK|IU zL4_GcQPk$oX1?Xj20!S1#g#uDZL;_>{oYo|s^SXcK|KNx`UnuUX;h<1>i_0ycl`1A z+as};UHmkFWRU4RstceC0!r$Rod_EOghkZYiYjo?flT+eTrSg%S*uisF5ohRQuQI% zk`|6xY2n*127hnbTe6Haq#JMXCG0C*txVd|8K?P~3*qu4w$wx4qyre4?9^!)kRiOZ|& zVfFm0T&}=rrdi}*55^EkIsntq+ZQ~^_$Ac<^j<~I)KQ?q+}r-o%y`4O(Rx&(q*WeZzlit{og3I904BlOflf)HBx9JY>E%vH7$Z?RZ zJC7g#YUfT*v%Ok=W`r9yY6-gyJTG|{dTST}wxxk*zf4UnOn01Wmc%m(RagOD zdo#mVW$<8E)g@{^YV|>$$D*3L$D-2ZtSDf=fPILrr;Dv3xh|a+e~{9Y!@6iIeMPahgQL}>oHd9!Y*Mkou; z+Di@f%Nf(t(m!{81pgRcLvuL575EoK7DOf?k97aA!{+!btEsRjt`gGZlv8q3$Ln~M z<~K<5M2k?r{KwkF&RJvJLZ@+-+NfF5LQYm+{qc(Y`s8xt7L_6H&__3J(Y5-rOwp zsYVs>o&NsE1wR;*RSvBZVCDbYcG<2wdU|HyeFF~7>Ig=mDInG&@OaZ)aAb3Xz<)Vp zIw#H)5!Kh%wlIb3MF~B%EFy52>4S$xYg|KxJOQ*dRWhuWMYN2~$@@HkTWFhiR_ILR z1j6VKo;T|0M#s7rxN4VMX_d#dj$x+8D(Xe<$w}FRQcCH=-tV;n>U>xlfa?xO>9=p#=J zB^*XL{cbb;q3V(DcWgMP*26kmz$n9b{26#is^#7!xt>&{1ZUR7{<{+!fP&GxVG^E;q zc1Z9;&>{Vb!>q)@-X{HKwOnbMzqzUxMW&z-uctZZu*!^gqO9>&N@?qle{$?CwSN1S$U3=KMd-ina(0iV=3$^? zRoess3yE;_(H}aHt5-CrM~<}4qinTIY97zp#-FpRplxg;f#pCd$F7G7Mw5wCk__zktZ& z5+JftZz3lYO}0ueKs_`d&xC6xZ1eKgNb;)lv4@~q#+Szjwlq)EfzXb=7eMH323(K| zwzne({1NwvarjW*TmVRbMAgsDsc#VnDu9^1iEksQ=tFNyH}`jg&UvYRG{fQ@eB<$h zdPSySb5XlKRze77@V4CA$c3qcC13D>S$iY4D~nE+#EUcv(%QOkP9*hEw`YbuedoIH`7L(9$vU(>M|15ikd%G1|D=}jhSxz1_WgEoj#VeZR3w; zOu3WXP=`$+aYfgrFtT|5Vtg~*t~NN#*`n@M8apkfzqTaIW?w{wS^}pljWoqVveQVg z+sOST6~VHX2|XE-unlcibdNowv&Vv)bHd6j<^EVC{hq4<7k5 zAJ@=*(9H=+L04{__sCva619sLwY6g7pg(@HV-_iHt?BrY21x02<|`gl9alTM{$iAvu?_jU}h5pwEsw^s=R2KL6Mxe}m2u1jK zi(NvI$lC1_V-W?qesl%*XCc+^!eFSTNr$fU0Z8S2S+P)zI4Nh4SbL zti+v>BOrgwv)z#KL$SIslZ60J*QA(^K@-IUG(N7ssqo_7p}6k@d+n?4s{+_2$bNx; zV!$|Cs}FuBGU*`7muOZDUIb8f;u0GkDDZF6wmT8RqL%!j z&ukT|v<_{J3Y(1-4AJi2EMc9rA$$kdq9X&%Jlb8~-x+CLZ^^_dl?#7|iTyallE=ls zSrC~zP{DV#Gf0}vfG;O1{#<&pW9Jlul8 znmOg6Rzj0Xf%5C{1V|GkXe+wX;)%s(N0$j<&T94RtZwm=Or60ix?vPP>%UXz4}x{6 z-`Wd_m@%_6cFUsU%8gQmAbi70e!AsjB!xq8JzQQcX&aW~hdZb9es8w(HzMqz;DMR6 z*+ec}YhV6IVj$?n%@P-_BoxVpFj5oM1ma(aAiQjh&tF{3!v(16SIgM%BL1y z3<&i0hIoKE)Fp$%st+R;=nhcY@fr^b^L<>}RJT>8~v}6oZPxT4?PjuEmE?}5%1ntV7-C|{5 zMbY`S7RC4QY+pi=!@X}UEXe)=0p{o7J`sf$L-xG~s$hj)zIk=8^RH9CK4^BT38*>+ zJ-=RkbcvOkvGSWFL-A8E=_#;sV2Gb8Zp&L3dY>ucOIO!jHDVL8KMI(gFZq?qBce-& zR_FrKziB1AOKm#`qA{IaJn;S8>gLG#!*eivyU%uVD7iM`1}D6~3rXVCa30s@x@ze^ zKx*{mSM9JOjAp-8N1);($MMpx%WJQ`dz7`Z#W-^b`>1^hMYc_5Q%_kq!D$hGkDe*F zWUniDv3v;{!U*d8^ggyFT2?NoUii9?6vRFQOQKy#kp*G+t5{Lis0r%BPwmkzN*hMV zNy=9zDV7nnxg77XZ@?m@BTe7BdW@I(ic{7%@9|kypC!NXx!xn0!bMixt19LY!K~s@ zRK63M2?nDZL#=1H)j2xrgV9REWJ76bST&Lo#I7Y3L7M3?(}MYiD<6JJMfW`$Zl8a} z8%SoJ)%wj_P*}pEa;Y~@z(T>LxWY(s z(8^wU*#gEEz&9hdPhh|@u-jl6jhS@wUrIvIPlI4(HDR!QLKY(X;RoA}e3w%VEz7q~ zSh8!)BBHOY{~}9f?`pp_1|9LFz{+5>2yj&!>L7`xuvKKrZ^$tG<&M;UEPgXxq^p$c zOoVKtuRvMz#o(e*uw?dL3Y;7U&=tXf^GL{wAQ%Mz9H=rBnOwcj#4~T<(v$<4DQjP8 z@n15Of^zp@rFI8Ro^6 zhwMRW$l^&s@Y$@{jP-Yu!9(CXf|eBxTe4IJ3;hVqa!1 z8kAxH#l!jfn&m21m%o%O+}?wk^!r<#9up2mM3SnauzBZNI2n*!xzKwGOItF(twUBH zyk@ya30=tjfEy?eOv*&)%c4OagR^Lry6+`h0!akx|W zR)hpd+wa`IR$YvJH?LgpSs-mHCy6%LC*o!F?NV4NO^!>U;`#U5Z@`;B{}JF5@upAoD7 zAD946V5 zMrTdiOks$&t%)F~6SDx7tA@5$fAJA_dv^b5b*sEzW%Q$IGbjD{`#Iaeql>)jjm7!; zBQ4_#$m{b7e#!u*_W!&RpZ_2GsL5s{I}4k`g>~B;F^$b}rW1wBH=pP`EJBy^ly~Ka zF8J8Ov}fB7zho?K{PGJHe>rZU^3={^W&QKIt(}GCm}X98(EYM&%Fw&l2jBwxux~u@ z-M3%1Y~FpMo{wo-tc3U@!3CB!htGVgB`R}TO4rrblNYY>SL~q|Lb)e%_PcKp!MUv= z8^hTr5}$I~IlME>+dj5b4US)~*C|>aj|mWwljE28ZL1#{yAB6$Ll!nVFzDeV-<6V?dbk6@$;mZiI`XYmT7hlp^RF zDkr*`)r}AOHJ(y!ptgPZ`&AOBTYJA9@Lc_5+6f$7DL>)%0rL7R|M$*fyx+PyUc$!a z^yDOD=qG>fkeMJxQp+i>=zXqM#lcC2=Q&{WROdX68*Yy42`}V6q2tL_x?D{b zQDsqYYsg2<=If|5lKQp*w*2nK9XbGphxSuR&kxH zIqN@D%!77K(E;N=eV7S*_wC=wuEzf3vhxOEt7W;tLo}*-3-v#N7F@%w?ziUxWg}!M z%bn*t??F=12ve0C;enp&D%yx~ii-6J?|@uO&;5^`B@ub(et-XDQ@-j$voWYI zvu6R8hRDVilaFm9>y%?e9ahbmcb{p*SWrw=cU!p^>Gss1hfKs5r$-zTBtza2Vk)fEJ?V&A^1V(4s+@?r_IX9qbJ zJS2$7#$0Pj>N6unL5~=nVl!RwuCi}LG(H7uyq@B^j|!>KpwFr7Tdx*q&r{tSHBxQa zXtJ~lrF zG$e*F6$AC_J*#T`zjI>=AMp~TW<0M#AB}3uiEj-mEa~k;lWjSM^?>r%(g|H2-!8`u zTE6=8-2#`bnGMl5eMMO=v@<8z);NR0*Ak+hBNh$~2a?9OVQGA;!Q&`#ZBXHGMN77Y zB`PqAR$@NdgYM6lpRsNGT==%SvgPN>TG-x|(ER!HJf~e(KX7;ZxZ}kEi3)<^vHSgF z(xyCtFeCIcajw>ki%;F81`97qjQCe+GpOm6-%{ z-rzIa!pg5Si3&x_!=ERK&fN~eZj#mSN0D8=p4Fm*w~!=@&GE}{QBb)S26Kp{V0qhA zWo4o0wk65YvjC`hd0V~&>8sCZrKSDvAB`t3#LiacuYb;;VU1EUjZ(fh-GB32=IeqQn~QHQLOt+y%QT}@k-K|bxfl59a9$;}@7;Ab&GqJ@D(%APjjFaY zsKv^EFDJCPrH zmG`+xN-(S2VZCdSzIGIjnp~xKG}-Q>+CEp&1R;-49naW8m%nygLTdg9i26s0i_X8& zfPhu<%0MFxm^D6B5}?8hw#GKTe2oim$XIjC6du}$t`S97uET9v$1JwG9MwILU?`Ge zD`FHZHEdZeks9WZ6|}?D8iHBWzz>m z-K|Lkol?77H2!~gNU5I((guGd21rsg8OsiZLebh!_-}(P6pH=lj}HosX2-Il|H<$| z(Y(-`3?DT5|Biujuuo<7f)iW|j^CXA&lVg68E~s;_S_t`AMVO;Tgn=cC3A5+hoCKg zet+5KoWS$BDJVZs)hGyk^gVe5PqnTQnGePY7~pIGDW-IVP2DP~K&#-!8lM`VB$NlU zrv%VO(Q-_9I>}J1kSgY*F&oGWheIWl8$t;Yhd6?$ua3vXyMUe{)x-Jfi+>NaNnPD; zpAB)_INg0@G!Uxg9);NKlC8B=!nH*f%E32TY9ThR*dR22vG!(H^T$dm$g#*m@<*uL zLN0jXjO2aZ=l?~s*wnId5!n{-%$^#XT`2f%|79aCJtyZLi7|os1o{QLtKS#sS3R2M z_Tx`P9?Y1npxB23+>Vso;Mx^>aNQ@p+?X-V%?7D5j7<4C#UXWMYD*y&pfcs1bpZ-r zJBUrKC512F(Rx=G3NjYaWvHtI(iGO9Fr;OYOJ?V+N6` z){+hA;estB$X5rl0QX2G8Qw@ch-gAmsfCOgCgo#u((|!29B~hw`j?6CrR~Suqw6ky zZCDMsk6YO7Jr7LVr)FVazUs_s4(O4 z7z!$<>rT4V4Tm1ZOyMx_8Du0034{~Ghc1IP_$3=dv&gX&8t_>ru3F0=zHQNkYAR7- zV#-IO1$>JTw5a=;TuoPaCqEs%g7OR1Si)h}l9WZ|QvzDnBJku>#3<8PGZ`O$yuh|Q z6rAj&s`IM#a69{?=LGIQZs9ST88YL&UxuK#kp={k1mOS)g7Far1o8-$1f-M{iO?*D zJYfKZkR-Yr!7+kUpTGe+y?5VSd5BsQo zPNm+}0oS{ZWuB1LLCM)&o%iQI+kUfmEE*i2aQpDaZ#NQV4Qoht*@88=Xf$ZJ3v9=T z((<|JxFc+IC_L=2R0UMlTml8KVKOfMqZpY?tw^#f5XVi$q?g0Ux`hOoHKURS3Dv*? zQ*V%S6N`=(?vjecHZ~@^V8re-G#iR>|fy{qUc#F1^Sl$u#W1s z_-p!eg?{Jz=<~zMUvwAZd6Ah$e*wKa7yI?D_b)@cqyEoYRXw_l2olgL9R?kkdK?fM z!;R<=krW_{~Q9@q?;nh&FMM_Z4&Q4${GiBke?5n1h)SabEv}} zX~seJ-#nmuth(GCAGjL1=s?FBml^-GW^vQ!qqnny3YSIYXJ!uuxYmHBH=A3f-`t*K zkNy5THJ_D?++R`ypY(6k;P0Nk4716$hhg1o3syHZX4i@Mst#*ihrB_~39TM>v)}5?rZ% zqaon%Kia{OoH(T${pkGwx*glepYZO@D&NbQzfa2P=-lLJ&~5hz2ct(ve?+lGFHJu* z7#0E7!QDwudo1iGZndBFB>-&*ULEZC<<;M&zr^*6b-m^AY2c5)9nkq$F?10p^a#Ew zOVT7YgDhi^ClbQ8@EKgsLhUArt;9p+!n={<415|hDfv_j@EIma8%jkWqo6K>uwPtL5CyZWEwXi7vmt{VcZlP)2zpQrmE+N zjZjov_!;2kCG}Xfy6clu5o2i`s%Ong`TFA5uJhZKyjbw`nzf(RQkp9~zYgeCR+!!gy=kX?yVEuw>S&n0kbZ17p4YB9I zp+IRE!{pGFL(fym&mrVP)ClPqNe7T&Gvr%RI6u3p*kf+Q5D}+=v355UPW+K z9=;Bg`;bFhiIjPs$YCLY3tILuvFb*7j1O{kHT}>E{!gdSFY%_(Ulj9;xr&oxG+INv zSSo;=z_J5i1m9>XX!!s62RB(zL=}z&jsh$h%Zt5n1Hch1j4B+c%guS_GXQ_?Pz;6yj32KCL5Xf_>YT$5Sk4%NL)}E%yV(hj>&?cJ8@5y^*U|D( zM)M!(@~g8ykINdcda%BVO<{WZVQhEz=db+bdd?zjx@$~~>%G3E|CQo~uTM;)OkpFM zzt)Uo_?M6Eo6mM7gCQdAzo~5s+?D)c^Rf+-uv1!2AZK@zy*{ine`Nr;3;v`?3{N<7 zq6se&`8fWO3N#t)jC^qe661ry!?mNaSoUPTX!g1Us(2V$JNgCqPQ_qBiv5C(yOICR zF7Uvx&%pka2!I=a+yJ;A0r=>5dSw4PfL;FOuPn>`Ujtt|<%MeAjQ=c1QB-{P$XN~z zOXgMVa+Cd#JMbZA@IgkW3@zsx1LTPm>0WI^%c*+ci#mSX(;<;u$|HgC!2+a)1F zmkx4(Zcz%z{p`Yw!-Si1qHCBONQOEtI<`zo8ZKg<8W?^}7oE)p*tQt}wHyoty3hr@ zUU!lT(S(t#jm;m_0PY5?*iX<+^7-BFXYJ(?za_le`1!)?W`L#?bz1ieIV4VDUF#-Y z98_qX`+gh@0>hzSX{@Bvz`|8KO6DklZr@4x%bRHFJH*rJzwovV+njMU*izM4s&7H* z3?K zg;@B2F9sYb1}+vpY|dTH_XCd=%8U374c9@{yp$iSW<6k)%`;#OFN}{Q$5eEB{Uf(r zx=N(JS%bO;6>y}&$uUzg1h0pqY=SxKcyfSH=v3_cAjrJehTSXiS9N9?;`BSbutrmg zc!(4_Yu(n3Um|j83B%w3XZgD@wx$krby z`o5+9wY7dPjt$=ipz1g*poHRY3wR*E%(mVqi75%QaH%M!X;A6hUN#NW#{8(Oy*@|WIT3t zC~IK$a3{Jn2y1Ye5>0||K;6sR82kmwgWw1x!i<`_D2`+Q)>|###bVUqx1R-En4TWY z+t{oDQBTVTeYh*s#UU$t$!qz*XL-}-X-%P-dzU8MSSdc9y-4wvuaQTjdIIZ&WL2gh z8{TgYcl_q}X37(>ra9k~&=f)oy6tHaZ}=3IICWQp1Qhq|u3`b-HlAGG8dF$aT3F23 z%^UIP%QIHsT-U!J;NVYY=fgpyv~A0C(kmVr_{3C zQ@D+V7Azs@%ct(RH|x(#w0e9OU+jI0CvwRP0$q*Jh&RFIq{}sqFhCWD=>VoSavK`G z9rt=ap-$4Y#pWomQF9)Xq8`#Yl`5sQ;e*=OhUP8?v#-xb!;W1i`&EoPXeif{-Q0YA z1Q+V2sBk%kh|Ne>4fn_iO^9`n22p@X@aqeJKtlD8W8Vz0^{>e0)joaw`p+NXUE!w> zy0I`#w4B3TMzXqN%m4F~(JO zEslzq0TA~H_`SY5mj4Azsv0dcPKYpILY@L)RBnZBJ>-(|1tB{U<{Z~Fn zo_!9!&!2RcANW2$s>|a?H2Y+_0y#muN`cK5v8YtAp(}IloSy!}w#$v>##QU`;^sE?Z~PCr%G2-&V1++$-!m{w5bDvwXuZWy#(s6zMAw+>!;`QC z7Y~FIurkwL+nerAMD9`%8Gzst4FF(isI6^qt!Od6*vwpl@#Lp_J6;1bvSGj@_@vX8 zsc0FrQIy6`ikiaAqyWpmRYKOT)Wx{fT3|RZ^{3T{Q4pUlM|N>=(;t0k@F>j{H1{bXx_-Rh>+u82 zPB&SQcyW~V{n&I@P~sX)ueI%#>5`dtEpl`-z*t*%mruua6|(LtD!d0+@ZwTWkuA0Eap1d=7$6=7YTO?>Q7RLVm`7@Wde$QNr;$sXS z$&y___4P;p$OSIp#KvpnPgd!%hq7p}yu7(8HLhbiM zZnfoI!F5l^(5jh3Li<+nR`KTOvJxW1=81kIl(vAjFn&Bx!DjG7&cK7oPMIV`k|{}Z zi@6pO`t~z6F!;s;lPXi|x=?HGOUv#SaW%HmXTokwc+@opQre%2^|k zqcWK-f?{=E0S$ZPNr{lpgp%t$rO?k9)L}z0BfZbYk9UEy13mgV=V4)&l?_j56(2T8 z%N9w?j#_Zt6~8yE$>pIRFGtql8kNzHcZ~rE)A_$@{G7;XvGJUk;Cj#OZTb!JJR&&Q z$&^n&>vxlLi~GtBlSP-w>3Vdb8swk_@vz3^av++%@tJ9_=gpj@bQ~|B>L!*jKw4rX z%ct~!%O|a**bw;RmgRW&_ucy${dRi;HRo57lJ;A`X^YSepTYs_M&qf0u8}DjH*_n-uH^+#csN~+I_S@+psvUxn5^-t)f2t!pC{{3FdY9~zB?+Ej!my-Kq()2}* z;dh{gh2l6d)1rpqk>oMqd$O`*H-{`iGl15vF|M4YBO+wsQW5ga5G4dLa;4>)5XUvS zh{Fsrjf`9cNmE!kQF7+EjCZ58LiTd$BWc!0X1CKF3(bhtF_nyfn!plBgBPn`)}z>L z%Uj#e#O3FAmpV=k-UWZN^R^7R2e*5)st)Tkw8H|*bRlL!)0LP~f!VUIm&+yu@7tev zyt?kYZYqjcaTjOpd4c_JK;k2tr*RzOeJdUz!-RR+Jc9Dk*oMGxwEjqWBCjba>UJ$t z2J@qD-;&LH*;5RMC&pY{i%R0_)C!EhGe33-_z4~9j8qfT{Y)O`+yDV`ssr4^)VSjaNY9$6Ne8s zss#%^_&Uin;u6kBAl#1k#?jDHYlQQTq0srO`2qwvYisLL3tc_E;So))paMCxP=SdJ z#Ky!X36c};^7c@s{sY|u?=L?Jx`t=^|3G;j{Y9Sk7OQLAelZ)f`V&4QS)LQ{J8wT7 zJpmOkX94CsJ=Z_0n_JsYedqmuukkfN(!-$=u`LW^D0ifWu8p}87!8>E+M|r?i=8vQ zup`UMUHJ=%Xzz`~k+SvGUsg4(kF5wRxxvdsGIh%PG2XOply-wUHeNgFn=m7nx{ECY z&`-<|;2K9#T&sD%K62Q|ou@oKy_oYSAdx|e=lUTt5karfJ(_g7;StpT{*MK-z|a5O z;(N*O*`vbC2ho>cV7U4%RS%X}CH(uJ6f1wR-R9=%apOi4M?J~2+o~a@Dr0l9RX;96 zte%Wllg~fUz5HI*xldB(CaIT~Gk7u}jN!5fSGkZsvYgUGo=bCc7$)?yd2^u2seSwL zvD0_B`r1v}Dn+RsE6wN_?|2HBCryb_dOEz9tdblIw!J*)xcGZM`+CRddbxLEwfo(o zfn;hOOFzFKv^IlPDP)~wQGCbK*xZsTut2c||MG+H^Y8O4@H~*0X4_~kxfRR5->SvxzY<-WDd+g1W>vpZil9r##E&72br--g z27{6gwJ5{}>6cuNZd9o4cR)JU#7w<0yHIF%!}u)rY^HhjF>r9+@$_J)j9FjeJz`Xf zaxtGw8}YSU8)=!ex974xcIAxLL7I*0WQdkv3EEw#@;mSa-c$mXfszHmN4>yn&P@TB zZeG9Mw7Lw1@+py|kBkUcm)>Vm*2lw3GTx5|+@qVP-JL>}{e7HYexNNiXsSo~RqlU1 zE7aF>TMv}HBc2-Zkx?EkRNY`qviPFlw%Ff*0`oA_RGv;t4_V1E`v)bT(5yNz13*;m$H%k+A*wGQQ)~{(^q)&Bkwe>7KS{xSEUk<$9JoQBVOaRQrZW z0W_C;mjy!*AC3#+$q;@5mKp#rxS&hnnHVV}_01`ewbbuLnuD0ugw?7?F)jI9!^B+& z>A~Cer!I}`1FS`!s_fmRv<4Uhgx(EvcEg(8%-Tegd7;VdPTqGkM35TOr?J&>)y!do zdcB6rw6$zOo&u>6yuuVnb9frwRCi5Shl6bDlUMqJQDDtn#4gn|(tI zbWcCCz3ZeEF;KXHaa+ejmvpBq;8b_0Ynh^il~|y678gkC7n!Cgi?G2orwz%r-TL3Q zr^Qk+9N8|(f?34{1qC=kPFI)YL~W?wg68QS+t7v9_0{|+nOr6=l6T%Oe~-s5A4{lX zs?A9JD9#5BXMkZN5)-is*oXj~nAGCfgoFfYCPhU>K_BLpoa*WKRx4A1pNbN;Ik)E? zb@;o7I#Ccjr5vPTyKS_}p{)S+pz1d}o zN01b<#WV`sS$Zeh!qz_9-*bSirM(SOLd<#*jIi^Rw7R{`w7*B!{p zvcOqpcZ}FqdQu5qHWl)}%ubeuQEf{sB`;L5PLg!J>cR9SqQ!a|3y!!jKV3Krycb1H z&EhFw!U7Q>r5SrN1c^wRPvcDQMAez;HnURJnuV9U1-_bKsytlva!dF4_T9y$Xxd%o z?r#Kl3jq()99Lv1af(Z7bc>Zv=|VAgPDfSyJ_?8}k_;scO?soWVjVp20LV5%i@cHT;&kwlI_q?#=>F zt20{_X1;T8DIca?UJj3fzr(+G`@=e;&(XW_!OBJ*XK&*6YB|O%X(VV8d@?6W%G@m+ z>$d|XpClnL!_i^T~Wft49taz zyp7@Tf`SGaJ3ue11tb|eN(w{NQvnB5O;VqZVO+?!6-iwcE-5PdW+D^q`EXE^<94)W z7GBs~qsFQJ2XOA|m(jDzq22p^)k71@R%?spvCp{;HtLk;pW3^-OSCpT9cnpTdeOFO zZl2~kYp`L;qgsB5WP$|$;_%Go$<)FiX1o2!N=vAQqdTfXcc;W()I@W(+}SDAXOkem9Z)YG94hM_FSH69%lRi)J^4Zcwk$1+BW%P4nv-;*2-VowTYpyZo7+1UKH$_kF{rc*^o_#t% zK8k`C1R68is87?}*@g4HgdHu%DhVq&mf2cOafawOPelJW63$y~$}Yc${m7VAQJl0sl`-$y?~BqhQgbG%!U2meV9p?_YgR}?-BM>j zrV6LR3mpE6q@I1PoR!19ESiK(|-@BXLXJRN;u14{;(9vT}miw&nWW z(=*vS!GkMdCw;0XfB$BG86Wm{(PVDG0f9K`FF8Io)>3iE8!~2HA>xMi{`wHZJlbMo z?~@%nVri0-9}|gZutW<1Y%Uk2_7txsdODS*W~Al(kZj+bM3r4}Cd`_?pH)hdbHPPu z7viV@?+wKYCV#XTA3juFlYOj)Y2PJGUi5byy^HJA+^HS4KJENtZNN?CsZqpAMo+Hl zWw>jW*>AVwdiBTi&&ntB-Hh8RRLfQ0pXKA%LcX2nTaH$)<;)fN2l^uIGR=KWyOn5q z=u!J;N@~l*rVcdzqpbu%J_TiRd$yd*U|G)U>B<*!5;4kPS+JHr*;#xngIZM$Xqd{N^B+kUk`o-B$-x&~Z)7jY&}yGy@QbH?*xb zU~U_X)y?yi)k22iy&QL&i^8rtI4YQweM&Z&am6}-E0d(IMPeiB*p%W^UoaS8A}k^* z1l#0y!cL;`FS#cYRxtjoVt-Aw%)hIUN7`074W@gOoV=^>6`ba>ae+LCs-x#KV_I$W zfjkFu2Qm0^@U3HMGcLiWQm2>}rX;?fSE~*9)zYMT%!D8KU?*Xa^V0nGZ2sMr;Z${b z^83tweGUVVN8m7KJGr?ztxv0iclGQK&N|;-q0T#geQ65waBX=YKE@m<-T1k!m1ajp z@kx=H3Z5g5mZ)r$r7vhcmdgq>eh^tP`@gl@W$R$ujoxD(gj3vO0@w$4W-}A@I z9gCzC)Ur>9uDXX#rmuhP1gsE_?W&w4ETo@^y_yT!wqD4?_tF>*CJ@S&t#_n(LJ#-@ zd5}DZS(&B$qdqU%9yg*S-AgkEoMa3JoH#*C?<1M<=rX*yZ;2UKT{;3&+_lRkl(5~t zMUcGm%-A3vdKD>+(Dvp#f1_>r{9=r@MSbX*l&}FC0%uf5b`K6X>z_?=xL(h@ln$*8 z{d%^Sv~$s`dx(86HxM|jeEIiZ4WcGcyt}MoElb$LCEmEjzZ8_}P&s0gy~NthR7;J9 zyShRzQzK69gE46^N^7k-E=bU96RddIcHdlYV zmL_CZL*}%;boRhsZr(4NTO67{Eqc9iZ?=6}?If4|IZzrrf2`=Zys#IA6tP2E5=|_U z)iDDPxn{0so`qg}(082lsG$6_T}v5D)^3-qWmRO2J9#zRHh)xZvNkFeZ7W2K^gBsw z_4KgDMoqg5;=bd1>-TATVx#h|D)I_LkskNo98b!XR^Z|X0)HKJ(mdhPVStcO!J@r} zZ^pGxKaRw)`VQ5pm?5D@rgtEdx;R3lD7Antg?Pyb(dS9F@mcA`!1dA4ng2DxeqXEO z!pOEV#_M(a2diqWycg@kVya)=e23ohgiN0<)h@aHSlA<-cG)?v_pTmPSrbo8|6;MoyxF27*m8(HZqb>#wgZQn_hKWF@c4~I+O=xE3eLe4X-G_ z*^7={N~+&?C>z=i4E5_dJ-x@qrZrL7d>Gg;Ei(?lM}s8>o{B0F4NOBl@+~!#WUZl{ zyO_aAUZ3RsaewFI)9Nq(S>g@cJy% z5uWV*ycz`+4q{>5qNQ<`P_a-{Pl^g(38JZ@;@t zsyUAc@H*p|4?T`;KfiLet#%q5dZ!!|x-h-Z#I_=2QOQ3V_%iGEcs9QDj$=(PO-ZUL zvUE@;t-?RMVxy%g%x9ZMZBKxH?kvuECBxZx6HNxs>+JO&z&{_1i>bB9YM!s0hseCm`gVw0pE{K`{r z1{*P@2O`Q0n=Sk_W9lqlig9RZUHWc>zN~9tGuJ_v#Z27+o>XC~OCuR;+N(|-*foEB z=>H*4^20@1NpbLz^bSWfaXuEmygS--aQ}K}GW0L`&|{CvahK*SE7W~3km_2L>#TSx zRLx{fe}i|$8*7Vbm>}`1Z5wUbXD`-Ml=9-6I!^w~=-6W!l1%S4wB2Y6+WUzcck_6Z zr?+riL|k@JZL%gPhh9u|zNHuNB;b`*)Q*eP&Wcn6c9OKzeAX{!tMMD-X@+3giV+EW ziOUg9-b;qNcd1W{k$@~QOO3;6UW85a_tqR_yZW_uRTa~gDP899NUy|z0&ZC2Z3CA_ zSPWM|jc@Q)6Y6;Ky4(Jbr#{zfVZS;8Utd>vKIMu|Ga5N}ksk0Ujk?|ryWn7Bix_tU z3m9_QnXb~(1~f#g)e!XolKu!nn?XITtq$2(i02PXTX$Ty%ZstNAMAQCJ#@{msBd4> zwtl+5GMKC8-|+M#LKpogPbuhX#$C>PXHKQbqx9?7UEEOU)xDjtwf<9op|+L+pi9jH zjL?^2FvMmm9M*WplfhApRN3o+baZ|&+1sbfqnKrN|LLSzTQ89rEvYIIMMCL{9(<#M zVnqxBM=>L1U%NDp>#xV{N22#EulCe_)m&%V@9TsvV$`-@T@Hom?$p}Sl~z<#tjXe4 znWSsK^%MI^!X6B?1)FJvd~NqzQRNAuNDbeT?Aag0A<5t?8v8%2K{NLDM(Rh+Vozsy zO1px$4-UpaBYb>*HufEoGujUX=1;oi+pf7%u0Dy`t?5qdK;h7G_-0ocTs!I`V^fy} zpK5i?M~Eg;wYti3sOl{0xnD8S;fb2bsCO?a>s^IcQGt6}q?C&|GcE!lW0rM5oXZ{& zmsD!WyN=>H4!h{JMCkC>X1w-OJsvK)#ey#|DS9y`CEbwuLc&9kgCxwN^W+l@D^}8L zK~<7k?Sq_c<9Rt3dQKayez=VUn9%(^k;GF9>z+_nQt`d1_FU^}@N&F7Ps?@GvGUbG zHNH|5k0m5(hr8^;(;}9c1de)pJmfMaHl*>XVvd!sufx0zVCS6-B(ksWwP;PfMSbr>QXKo#QwV+ zw3)6Rsd4B;8HmosD06rn5+$r5CPYt3Zy)A@-@`9?xz?kyH}@ftKn8y=grPJlBIo*B8U~0hel5_tp!< zmh$OK=VtmJEq=EE-fj*5lF`t*bxnEn<;a>lIPy*<)4Fg$R*^;%8JwC>Zr`! zi2Z%<{nHtbC?)?L#ZU!yqZUQ2$5c8@dW zRoSe%35;o`PYS*ozloR@L1;I~JkrKQ$0eI!iqZvLlhtK(xDm#{2pQ`}msfx}$oGfu zrah(A6!-9Rt*-UEu6k&)`@tM>!nRU0cF|!!<+H-~r<9%oM~sk2hExK{U3!0cEn9W} z=i3>zjv8dWS+CR7$?DwO_VcsW++1a($YiN&JXF}GWQN^?MNcvn)3@K#9aJ+dVzbX= zF*LkIq0XnVpoXOV0 zgMvX!x4?@nH`EictHI`Awb`8>4Q6@D?Sm@g_aeRpSt3!g*+aDZr2|kp=sy83SPWrd zt}Dboct>w8@GRYvGo(LDsZU9D|KMK7`Epb6{?>f0E7xC3T}(kpzh0s>ne*Poe-0%B zHA)Vc)ss9^JwH3GUin_1OKhRxzYfdyNn@-dzHppv>3qNxBo|A|&J7(smDg=2Gg zNfynJh5XH1B@{Y3S)??VCk=ejo?}7B$)X`y4HLoSGnop}8qRJLOoNk{UosXe$eE>} z-8CB<)V{a*OUxp;V;86fQJ|Bxk%@mQuC&HGf!u{wDe1`)N23rnLcR$z<`i7A6szS zK6Ix~u0Gy>K45Zs`n;FuRkRsL7urQr!hPUMFr|w5=Ip)bSY#_AN#iMiV&!3@F4+Vt z-&3MXx@j;JYb{d{--0#YOX^w{$|X(VNzN=7RUyX%IU4<|Yf0=)5K>k#4(l>LqZTx< zF@%~7+`nWm9aef5`X!~+$RH%%t0=Y2zE+l8NpCA6KVhUcHmbv*&sduQ-$bNx?bh)MTf&X$vP`2GXp>0BMT<+dDShgPJ*BQvcO$-s z!|=Uj1frnoOQ7i}d^m_6geE8Qnjd)9Q@)D5f3%k zx@`Vxu@Ap2v`noFJuA4A1~o4lx^4ZBh;E|rWJX|o>e>u9(RYmCM?!`3CIdNB|8Mjf zP8X&QLgbPVGXIDaNc1LVa-fRUaDskd{VA=x#O>@+1vRx}Jj`jonJ4lzSORC6qZan^ zv?^PoNC4=cOCcZVd#q||4}I?0mgEJK(YBh2NQdS8%WG|sRIZW}4NFb=(EDNIC=tqR zXCoaxVMKfcC#40VIekh@1{jM(V_@EdVJIx&Bcqb5$r3MxfOT)>9nWuQG2LluQBwSr zn=pljfT<%x>;TT{o)tZt;+deuJLg>Gz@Irop%$0{4=pV%iNV2xxe)7UPZ|3MpWLzp zjq;Q|Pb1s^(Hm^BP9aec%r2Co?hI{zcysVK?tEy6t5m&2zw?E(zFcRw)6`VI+{7Ze zYq(@7c*%z6f>q2?_sx$LJC50ttTxk^`YS_+`;@Tg?_=A(oz8l!^_c*#{iR zTbwusMR|GbpYT(|!x6Oc6F?&o)(qf%L!h2OCqXPT?4OWQMje+MZKmMkyHQnbpx+?) z6cpWL0S-v9uTLc^oqZc)=Mon0~9QR4^4 z0P?7R$Z0DxzO$5X+;MSibUo3VHmtY4@+)K3^l8XJdzPG3T=h7Eb+P=Ul(DKrHHl`o zjzr_hzgrjW#ULrRpy}QfpE#xW7|X_JP3zR$_sx7mH2yBTwwamtQ9P4T*ufK?_Urbc zkRLQC*@U8V`uhQXfo}EFClQ>^(#PBL@^>TNRqW0Aw=ZtC#a}Ed-LJmQwl(6__~^wL zIUfKeRiVHUdS|c;r{wJ4Ft-_eaORLbU0l+f?!^#jA9S|qZ}Kv=?%4Y!N84tGu{N@K zA|qqM=zeC$ZX;&A(3bEoN@sc`ib#c`sP5FV==sOk<<>y`loklLYFV96#=H}#*t0qG`oa!@M zk9W9whJ_xhs2t9|>To`!-`S}A{66ZO&HsTjrgFL)c!b)w5pcv~?XI>J|9j$We(AAk zLi9#Dn-pMn@)=mqi4AYc65GnZB%4c`mv&UoYOXzzmx0JP!RXh{VrQh*kO~`(yC z+iuST9bj^5!nQDj9jf(bgjP2fH}1HtskS99fTa!nu!v$;f(|Db)VOJ<<-yZ?i%t#R zf!CRb!O1c=`lj=Qf1pUHBOWfI6jgX}R+D$N6}Fi^+;ho&Rm|2qxYxGx@tP?t-0K@0 zQ#gYK>+1nJI0a!y-h*9FT*S%yshAzTVEsB{kLpyssfIwZiF8U;*IljbopVqXCkLEkY-*scB-I~f7$L$w6mp^ml^1LEs zd7=r$zwb8G{D(Qj;orWoW9mulF8K{OJ1Z1i2j|e2PPAgw;u5HaKIZmfoy%bcH}F`NtIU-(<)J5(J3-4f{&PoW0ck|9sxhzUE68Ivsuq^Z zWZ(pXrAnfVxH=3*d*cg%mqK(HC}@)?_+Uvga2dEBKOf|gt1A`;qTFvz*5-urd6b^n zxEPdxMTZi2iMg($jFXIL+OS*AbnDmyvUD`rzsJsBXMskia6>U_GpJ*}MaBd0JQ~N$~XwwoZ5mG~(o1*vmjhY%)oJk1u zM=2~GcsJ>Ebt&a}@3IVW*d#?KKJz*JC1PZI@*7)jh&ioe5!KR{9@V<@p=+U`(IC&A zKRc`hm!=l>>eqk$&-b|kFlJ3PxN#1i4<DQMyj!EI4%iMLmp7t;b7RKk+a^5~}KO(+tKD4m6 zKuXxR{7ia#f3LqNNaE^qPPCp)OFO^x+VaSIzm1N+hK`rooV`PcA2_ zVKZ*20miwd6q56ts z7-??d)3~}xs!sD~__$;cB!_MH+vjsSRMUQA(*kWms>9;KH;?%}kF3?6RZ9?M#>fcQ zyRpdsSVR6Bor90Sl6d(H^uV!18Q@OdBsVX2gahlGk{F2?fte8Mvpgy!L|x3EFyKwp z#TdtJ%|y*({;-y@930rPw`-{j=)L;PqT}uX7|v5PAzg1JFO>X*UUhY!K4-sQ%c%Kc z_j_Dyrcchq5HYkm+hfh?d&_C##8An`TDDsO3!$PB8UagoS(p$jn|X5;_tKrtP+U1^ z$g%SDnN%DNTTO89Xoi|g*lwI@dXRyY-eZ%P`LmSS`4hEI*g3W%zx5tFGdT-NOS_N@ zZ^Mpd+T>&fMiX6qG$ToqPY%rwz6%I$8gvn&>XxJUOJ*({5le)FeMYXR+8uMYac+?% z?Phg$B^}pA{gMWY7M9y_&uuw+J|3)!SAUq_n+dU0xx^c_9`^T(b*$YlGsB|syN(LJKe~)HVTe^0$Qk!7; z*NQn~5M1bu*Lw0YDVMNMzpveNEY6GYvSHI%|_J6iY zUP*#jCjSfnyg##hi@94bR)xg(KYTZAv!34``<@Km1rR2|?m$w#pb1^Y3{k>EY$*!K zQn+}p2ZHK+1?~v_-eLxa$%+Iik;yJvIQ)>&x(MU)+~ux8^eqSTu07t|EAy3+6-&d} zW}hDwJzF!~M-|Nk0&3Df_tjHcI(mzv8g9i;WZO5vJy+6A)?0&!l9`jwawx?y6BPG5GtKqs{8_u(xZ9CFL|t){t^evjknteo`7{Hmyr zg3Q#SFH?;tVqjEA@P7ilUE}kW64HigItDO(SW%kBTFGes!rvqn7KU{d2@Iq~Puck2-^bVhZT=JB#*20&mtXfQWWIltu2!=(6 zL+l{FF#frFgP@%=yJ9ygIx0?Y@uR71IVUY{Ns5(i#kRph(4*KsU5>ey715%d)gZXm zaA2LiMz)Uq~g2wTkgjb)!6ae zrG-DywXcZQ(}S~xH}Fz)!XjC)&v;+;q-fVy>6P6=jj^C3e^#B;&qPjO@mhn70+#<@ z4POEe_16FY?{!tQF;ha6OhaRAk0nC!7=sy7$e- zuG`?bW1U?4WNNzeSSDL!9sJMNeST*&zVjV@&pDs%d_M2b`J5l6-(90_6J{r_jrJ)P zoQKM1K%vzO2rZJ(k%jpJ_pZVW4l{vc;U+pTcQv@L$>6bf{eg^|YG4Nx_=(l=1*QjV z*tly=9Qs5H`D6etO1E<7yo0TqQ>!4cn;lv;s1%fdSDn97RQ1mw7rjxic8xdqH=gmE`5TrrC`2<=I3OkY-wR&H9DQ+<@@LqE9_E)!8> z3saf?pPRZ1yr;gbs&U=Dx7DK>)m%|k_-nj8iEdzUoRBEEZvavk-i=@qnMApAb-F^^ z+t(GHNM%L4^J6uNh%R04FyUMB&1;D{|--3}xl|M6b zNBZi5Gp>IEyAj}GCCYrK+$?`pyiN*Y__qYcXT`#qsc#*vB>tx#%8cO{bmmNN;2}OX z_f(o~``iuo=FKaSOBOw&3&P(eg(Cb-yMm(m$8GeEue{pNjI@^8b=vT~8@@qNjU|Fd z06S1faU%ObHFJsJ9Te+8rE)&H5C@gO2LL-D?mlGgo+llr+_2*B-ZbpgM>qC%9+9Xwp2Y;Uz5R%Vh=&0DgF)Qg=Tc2);MB3G;%Bk3uMaAKAPNqT ziN#`o`ef=1>oFp3aPfi}gV{&mVkV4UX>y*Sy z(g%V54NAoNt2+05N}>GgSp2z`rRc)~?7;=r9 z>Ty`?T>KW#BHmKLFmlHqc2QgYK6-@U*~AID`|~a1@Qs!Yj;U+JbXe0$ub^-1Y$ja` z&%@c`jwsj?5~i)d9;R!S?rOU388!qY{n>eciL8{%@Kd}zn<_DIPJ~*VdY4Q#+;`Yk z5fyBjdugJVXglIwj4Q*XpI1t(w{buos3e%BibQ z<`wD|en#KTI4=s(AE250Y!E|;xj=iG0B!*Q3(W>6zs@l;IdZHhC?|EYk|RsR#v&21 zbM8%&!)9>!86wU{Q#OBm5P97ClaF;X6rPf4Y*30yD+dl3XxTVS85X0`aN4s0lifYA zN4arz>-sj?yY+>a|49Gqm#9qlw5{c|`P~t1*EjuAUnx)5jkhNX8dbC9LsU!r>hfeK zjaXJHBA&nxtR?mHKgZYW2KB6|)CB`H7bKT@r7)3+qJZ&E{dxQ=NDyLV;K)kqu>a~yAnFPI#T2lYYTz21#Jl~M}88%==-tBKFU1K$&-fV2kdLkx3Fj~tPF z7HppYWrA2FIC=vr7lgqw%hXSV0$IgiFz&itkuopP%s?$OmuZ5YVQiVS|=Y%p>0++fMCZl`em!+17 z7MA*_E4>`5h{Hw04}C73Bc9lP{_RQUTW`$;=M&qfKei2r|Ej;>eEjIga35)@(~PT* z>xF@D-~TpJSbNpD*i$J%X}{_ehsXoc4eVlqXolC!t-f*~+K_PkubE(xHDm6>6bXn! zI(`~?(U30ea{zcAPy^Bg8WN-+=(9P+t)<2S?X(X=+BwFR_iW50x-Emf=8v6WC2A?} zmi*vG3t0~|c4UHglh5gI{65z<-zYrr^JeG$DwRy1=7}}VoF@6sK;T&88S%=lXGIQO z#52C06&+409+k)H>(1mjd@C9b_i364g3SBV6{11o%VvvFFNh@|(Fe|T0C|ywSZF#* zV(#BP^i2^|u*^~ueUxA@AZhZ6axM zkzd9iH?}W++z`y5^n4A1w!a-r7G?F=nuDQ#D`Lb;-EP||qi1V3a!MB)pm-5VH2~4Y zft&+$^~a!QFD3za2A9OFPXdDO|AVP|AB+0uafv7Gc*y_8#m^Pb!4M6e9WwLC`k!Qc|JGQv=ujG_{e_DYtx9pW_*iQF+ zX`5f%{)I!<%aP6gQ`K8A-%H3f+QK#L|{do^ipD7(kbg9Kwn2q=S!31Hw5qv4Iya_ z^pcIXV`CXOGeB>^kxFW!1G_7bUw&irKjUs855w6=oVyV>aPF`B*XKE2x0!EMGqsd0 zjwt&s?rbb9?$!hAA{!+W+;$B}#%mzM(_zaw%a)^AffWO(M$RV$S}gMqw@t<`JGriL zrl#-r`3Ft*UnS~YfGGfA4T3fR>ftdkmXPo!5tOV$4Ja7#l6CUgVMPp@F4=npJ<>~@cg<}X~|H1Q(L}ZqBk()S5iQS+GJQu$aFT*07_;IVZiwv*iRxJ z7WF<tFbC}Yq8v!PK5b=13%|xVu%n{`8OCo$XIk3!^DN}w z|Im1~>UqlTfN}6PDO!A?I}8X9;g-r%)6&J}?*9I>0CRw;71Z^UK{%)*X@}zkObR$r z+xe^aQ^WPqs@t`578>fhEb}XFMF7ZTncG)nJ7_waGcG$Q#|AzPM4~hl{QpYo+*K4e z`jKz6&D@C#;EqI2`st1mz3n{4xh~~3S+%xGo_1M>Y0-Z_`Mf=_sYR|%mv7#gc1z)Q zgrQ^UfyFmV7gpy%vZ4CD;HR#8F-KLGMF~W>V#{h_yn~jvetHgDVic%!WR(gn{e2b6 zEa62KRYKOx*j$fkjfrTp6C*IK5>hhUZ=ZYgcR6?E&+h1tf$#l{@&(OPHFxw4II_v# ze2V3i(fqu_S)}zRDtkOJw*v*$>D?!cK0IDrTNmCGX7l{PYH~|`{c6bWw+639gQ!V{ zBCv!1YXI^+38@d15{EM5Fa?F=vqZ2!0gnrQSD~nravC_4qVSm0aJ-JSW6J5fwvg|0 zRBS&D3>j5O=kaw%KF<8H;C&@{A)5R(X4B7V^k+tb)7cXzs?`bEAO`VOK2rW}gL1fv zvzJw!zHwx`L)&=Wdc!61BHtXW4%N}a`BB}n(SP`bT1LDIbiv%2VGU*%Y4o(&chfaY zRZQKwfB`D<@bd)sZ>dOHbeWf2Ltkf7FrAbaS#Y}}0jelHOEVTY^A3qpmi1IijZID! z`S$kVEbF7XTa=Rw%}-8_DC{^~(eL&aFs+hBc|CVPIP;6+0_l^ZO{Apo%e?XWJ;I)} zv0vpiRv)W;(v6?Jw|3)2)QX;Lv(_rqFKbXc*wfGRyU&Hs=w=149v_cjl`Vw{iTla^ zk~{zInu(j~vZ2W(rkqO3x}ZE-!ZSB9CnecbDQhN5-7GuLcdFM?whf?RO0ZdYnF{+9 zrD0ad(ZZEK#f2BPr3$h74lHw9rNz#HD-Zd*7bBl_IJcpVB$GDXN_mt z7Por5E)5-L9}hMSW`Kc6C?Bb@O{ljqi>am9nDLwlc)4;!&FM^f#(O2yvs3PBs3Rs# zRq0Iga)b$pdU$yv&o0}Up?u9M6zy}t*CyqNJJLBuTe&3OP@3?0idK28g9t&X)A-6` z{%+w9Ei6Et{ev7p?C?FIS_y|9*7KZkpvVcfGQCj4=0%@pySFA0h#FRgnBf5z>yGR z`Cb0@Qq6$S?cC!z@svv_GX=AzH`gq$K4}kFW3_O?%1P#he$`H$*wq`tB_JzcJdkP>c)SDEzn?c82;ob}RLb*ud z7Dmp=%XS@1qS~cq)!U^Gw=+o*pcmtL-}7y8P%jHMq{AdGQQzTu7XFU+_6hFVg#5A^ zcXfv-fOt8A0gu-pqczeY_S(EEO=5-+QjxB9l8IxeW8XeqDBN>2+8lf^W*8oa_EZ~T zQP5zy@@+pKz4?8iWj!i|IXdP%AS~^ewA`uQP#?|qAmH>H-bKZae%_X9{jc-XoBG`F zS7Irm7|YP7RtIDhsE z5Qyv)YT4_g4e4Fq4~wA3o>7~~f{iEIq;H`@sSU-sERb{p6@Ibk(1yi_-Hi5+jNKIZ z0J>qZY_3|qzs%=fF9gt%V$pC7dJ^*}L`D8V_$VRb3DcT>J11NdglbVgg4!4UT#>I0 zTdDw-gpa$Wl4&=xwq*6!Ui2F4vHGTggqwHtm)?O7H5-RF6j+p6hg5-E~E?m2W-p_(nh7Gn zI@BP+aLjFyn&p5Da`-YWJTS`yKIfhM&v6S<_q!aU`%M##wsf$A5S3|HwHZ}jXxy^> z>c*x4+%3LsZ*>4W7r!iCHhN2C)E<`Q3;Z5SB^ctFb2IWr3%(zwI@@CNDIC1MIh7t0B4a=^GbL{oeSy&_b{^ zd?2c~m1j7`4ps4&$~?3vNgL645ieSEjM6BD_Cm?Qg?M1pW?-28Lz$ zfYcft%K9AEikECGi~vD)WkOy5+Q_`?YZiss(P8Fs97XP|BIn3s^hsY2^zdJKt4Dt_ z2MpIz27R6KykKU_nz*GxwbBI>VBnhA!>y&qz8!(S$LrfFm2k?kQUYn|cAh3X{=9kd?`_*IZ3jB_-Y;I= zk>{kgo9^heos0r~CIW3c>1oH$+xI(wy~xc1ANTvg>jSIKS0bofIsY>?!_BDW@tz|0 zcisR6JmcmA^e#F&Z_A$BlWU!1c4_*d#LODkSBbF%5< zifGHnA=7v9SmCJ>c~bR|-ou0a5wE-?Cb3eAr>SJPqLM9@i3C4s(w%0+ z>j4@I{%-x;ouIyq3Hj?I5C0wdP@0?ipJx9Yzb;HL_|r7+A78A(FK8<^{nZ-~qTO$# xTI9vQ@%ZENX=$@MhPsRhVC6{y#rx+xGwf literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-167.png b/templates/plinkoMultiplier/assets/ios-icon-167.png new file mode 100644 index 0000000000000000000000000000000000000000..149096d5c331414b1cc4c7000502b7817b433de3 GIT binary patch literal 27099 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 P2WU(TEezi3IY<8&Z5rJE literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-50.png b/templates/plinkoMultiplier/assets/ios-icon-50.png new file mode 100644 index 0000000000000000000000000000000000000000..00fb9c077296451ddf1f253cb914a6aab0ec4abc GIT binary patch literal 4326 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 TFB;q*7d-YS9Bm#S_f7f_r!Wy( literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-57.png b/templates/plinkoMultiplier/assets/ios-icon-57.png new file mode 100644 index 0000000000000000000000000000000000000000..fd54ef7dbf759eae46899b79fd5ce65b1aebef3a GIT binary patch literal 5334 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 mNwaZ1)~imaK)MY#9_%!pJuEnT)lOy@V(#mF(Nt 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-80.png b/templates/plinkoMultiplier/assets/ios-icon-80.png new file mode 100644 index 0000000000000000000000000000000000000000..4f73f8e57a480014ae9c1f40bf60b7a16a698723 GIT binary patch literal 8888 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-87.png b/templates/plinkoMultiplier/assets/ios-icon-87.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebe3c2d03bb2524de342c3ae4b6c5fae0c1a693 GIT binary patch literal 10158 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 a-8Fr)@a;iY*(E@KGI+ZBxvXz?hF}PWUz?hG23U zCKErM4p#1RuzFEVtSS@d%n2BGBO7%)7>MG(6AYp_m=i(zE)_xFl`_zPoOum{T?ZjN ztp%_&QUgoDW8gVcC~+F{62{fcYGwBcJ>CWotN{p}hS10%2?O|!JQIHsBdJn*tW|$kSkA^Xx1J9M!Fd|?ZSqpE> ztkN(DxXSggRZ$Eubmcy_8dAkN9py;d;W3I;<`o11vmhG3o`$jVr4q`~8*Mies` ztl5Jij91>C6hKPu$nxTM#s{=5U~qk-g=$z{Fy@HAqZAegt798FvDF+U5e(LcqXI|P z;`kBpyLPCPLD0V2Dc4#X4kJeyS-$p?NQS5l!#u&!$6uHjWi1%2H~YkBg}I|5VFvj+ zs$%aV-p%X)BQ9p5vm`S7%7$Q$;N4-CCF#J#XAj;*Jbxq*4)4KxQJ}CLV8m!Me2u}^ zhYZ5~MX)?n48Mk0>L6BOWKHs=#N>9KS!Lq*z)d}OHXKIF7jZ!|cOp1yEj?oJ<0*sR z!x@0V^%UNPqs4|}7kl-tgx6$?@Rbv{?z0T$dyF`;zVZ6r&*0}EgFnwwfWd5fS*eX; z1qne{eSG9=V=)s!+YHxo{Uf_nDi!uJSRP<{x0Br?P;M!kqFqSY+NClD6VrwGciVdAE0+LPx>UL_$|y8z%b9PYojI#rD(x<0veReFMWouL z)(a+47qT^s)}_RSuNRCwf1=$z+ipAjFPN;`kC7MtzAN)EIGfI97_Zd;P9u1|1VbL%PI+JHo;!#YSaZ@U* zVATB?wqOgF$;UqCq=0te!7x9=MslTgO+v|MH%T+3FoD87{rGNw2dK48af# p!4M3=5DXQ;5DdW(48d%4{RN=(z8(%Ud*A>7002ovPDHLkV1gD0{U-nb literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/starGold2.png b/templates/plinkoMultiplier/assets/starGold2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff18377a0d635a24148ee645a91e95412b5eeb34 GIT binary patch literal 1123 zcmV-p1f2VcP)z?hF}PWUz?hG23U zCKErM4p#1RuzFEVtSS@d%n2BGBO7%)7>MG(6AYp_m=i(zE)_xFl`_zPoOum{T?ZjN ztp%_&QUgoDW8gVcC~+F{62{fcYGwBcJ>CWotN{p}hS10%2?O|!JQIHsBdJn*tW|$kSkA^Xx1J9M!Fd|?ZSqpE> ztkN(DxXSggRZ$Eubmcy_8dAkN9py;d;W3I;<`o11vmhG3o`$jVr4q`~8*Mies` ztl5Jij91>C6hKPu$nxTM#s{=5U~qk-g=$z{Fy@HAqZAegt798FvDF+U5e(LcqXI|P z;`kBpyLPCPLD0V2Dc4#X4kJeyS-$p?NQS5l!#u&!$6uHjWi1%2H~YkBg}I|5VFvj+ zs$%aV-p%X)BQ9p5vm`S7%7$Q$;N4-CCF#J#XAj;*Jbxq*4)4KxQJ}CLV8m!Me2u}^ zhYZ5~MX)?n48Mk0>L6BOWKHs=#N>9KS!Lq*z)d}OHXKIF7jZ!|cOp1yEj?oJ<0*sR z!x@0V^%UNPqs4|}7kl-tgx6$?@Rbv{?z0T$dyF`;zVZ6r&*0}EgFnwwfWd5fS*eX; z1qne{eSG9=V=)s!+YHxo{Uf_nDi!uJSRP<{x0Br?P;M!kqFqSY+NClD6VrwGciVdAE0+LPx>UL_$|y8z%b9PYojI#rD(x<0veReFMWouL z)(a+47qT^s)}_RSuNRCwf1=$z+ipAjFPN;`kC7MtzAN)EIGfI97_Zd;P9u1|1VbL%PI+JHo;!#YSaZ@U* zVATB?wqOgF$;UqCq=0te!7x9=MslTgO+v|MH%T+3FoD87{rGNw2dK48af# p!4M3=5DXQ;5DdW(48d%4{RN=(z8(%Ud*A>7002ovPDHLkV1gD0{U-nb literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/thumbnail.png b/templates/plinkoMultiplier/assets/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..482333e10a7a0ba9fa6f4f167283d20f517ffeca GIT binary patch literal 377800 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 z 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�x1m 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 >P5Zz}cf>MokT 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 m0vT(ai@JZ_CY}Ztj(Obr$SJ7", + "0.5" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Ball", + "Pitch", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If the ball falls below 1000 along the Y axis, reset it's starting properties andmove it back to the top of the play field.\n\nBut only if the player has more than 0 lives left.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PosY" + }, + "parameters": [ + "Ball", + ">", + "1000" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Ball", + "Physics2", + "no" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Ball", + "=", + "120" + ] + }, + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Ball", + "Dropped", + "False" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" + }, + "parameters": [ + "Ball", + "ShakeObject_PositionAngleScale", + "0.4", + "0", + "0", + "0", + "60", + "0.4", + "", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Ball", + "Lives", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "BallRespawn.wav", + "", + "45", + "1.2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Ball", + "Lives", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "Ball", + "" + ] + }, + { + "type": { + "value": "ShowLayer" + }, + "parameters": [ + "", + "\"GameOver\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If the balls \"Dropped\" boolean variable is set to false, have it follow the mouse and allow access to the sub event that will drop the ball is the left mouse button was released.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Ball", + "Dropped", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Ball", + "=", + "clamp(48, MouseX(), 752)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Ball", + "Dropped", + "True" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Ball", + "Physics2", + "yes" + ] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "ClickerBeep.wav", + "", + "50", + "0.8" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Ball", + "Lives", + "-", + "1" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngle::ShakeObject_PositionAngle" + }, + "parameters": [ + "Lives", + "ShakeObject_PositionAngle", + "1", + "0", + "-10", + "0", + "0.2", + "0.15", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Display the score and lives left", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarGlobal" + }, + "parameters": [ + "ScoreDisplay", + "=", + "floor(GlobalVariable(Score))" + ] + }, + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Score", + "=", + "\"Score: \" + GlobalVariableString(ScoreDisplay)" + ] + }, + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Lives", + "=", + "\"Lives: \" + Ball.VariableString(Lives)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "When the GameOver kayer has become visible, allow the sub events to be triggered.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "\"GameOver\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "GameOver.wav", + "", + "40", + "1" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngle::ShakeObject_PositionAngle" + }, + "parameters": [ + "GameOver", + "ShakeObject_PositionAngle", + "4", + "0", + "70", + "0", + "2", + "yes", + "" + ] + }, + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "Darkening", + "=", + "220" + ] + }, + { + "type": { + "value": "ChangeLayer" + }, + "parameters": [ + "Score", + "\"Score\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "When cursor hovers over the SubmitScore text object, and the left mouse button is released, it will take the text from the text input object and send that to the selected leaderboard and then display the loading screen for the leaderboard and reset the global values for score and score display.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "SubmitScore", + "", + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::ChangeColor" + }, + "parameters": [ + "SubmitScore", + "\"255;235;0\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Leaderboards::SavePlayerScore" + }, + "parameters": [ + "", + "\"d2c349c3-2f6b-4862-a19b-52eb2845622c\"", + "GlobalVariable(Score)", + "NewTextInput.Text()" + ] + }, + { + "type": { + "value": "Leaderboards::DisplayLeaderboard" + }, + "parameters": [ + "", + "\"d2c349c3-2f6b-4862-a19b-52eb2845622c\"", + "yes" + ] + }, + { + "type": { + "value": "ModVarGlobal" + }, + "parameters": [ + "Score", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarGlobal" + }, + "parameters": [ + "ScoreDisplay", + "=", + "0" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "SubmitScore", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::ChangeColor" + }, + "parameters": [ + "SubmitScore", + "\"255;255;255\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "When cursor hovers over the RestartGame text object, and the left mouse button is released, it will reset the global variables and change the scene back to the GameScene which will allow the player to start over.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "RestartGame", + "", + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::ChangeColor" + }, + "parameters": [ + "RestartGame", + "\"255;235;0\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarGlobal" + }, + "parameters": [ + "ScoreDisplay", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarGlobal" + }, + "parameters": [ + "Score", + "=", + "0" + ] + }, + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"GameScene\"", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "RestartGame", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::ChangeColor" + }, + "parameters": [ + "RestartGame", + "\"255;255;255\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "When the leaderboard has finished loading, change the game scene to the \"leaderboard\" game scene so the player is isolated from the game and can only interact with the leaderboard.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Leaderboards::IsLeaderboardViewLoaded" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Leaderboard\"", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Randomizing the object variable \"Speed\" of the cloud object that will be use in the below event to make them drift at a randomized speed.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "CloudLayer3", + "Speed", + "=", + "RandomFloatInRange(3,7)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "A constant addition to the X offset of the cloud objects so they'll drift slowly across the screen.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::XOffset" + }, + "parameters": [ + "CloudLayer3", + "+", + "CloudLayer3.Variable(Speed)*TimeDelta()" + ] + } + ] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 8187816, + "ambientLightColorG": 6040208, + "ambientLightColorR": 7389680, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "Background", + "visibility": true, + "cameras": [], + "effects": [] + }, + { + "ambientLightColorB": 19952200, + "ambientLightColorG": 6043600, + "ambientLightColorR": 10052400, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "Clouds", + "visibility": true, + "cameras": [], + "effects": [] + }, + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "0;0;0" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 0, + "ambientLightColorG": 6040208, + "ambientLightColorR": 9174096, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "GameOver", + "visibility": false, + "cameras": [], + "effects": [] + }, + { + "ambientLightColorB": 9248840, + "ambientLightColorG": 6040208, + "ambientLightColorR": 7389680, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "Score", + "visibility": true, + "cameras": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "0;0;0" + }, + "booleanParameters": {} + } + ] + } + ], + "behaviorsSharedData": [ + { + "name": "Physics2", + "type": "Physics2::Physics2Behavior", + "gravityX": 0, + "gravityY": 9.8, + "scaleX": 50, + "scaleY": 50 + }, + { + "name": "RectangularMovement", + "type": "RectangularMovement::RectangularMovement" + }, + { + "name": "ShakeObject_PositionAngle", + "type": "ShakeObject::ShakeObject_PositionAngle" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + } + ] + }, + { + "b": 209, + "disableInputWhenNotFocused": true, + "mangledName": "Leaderboard", + "name": "Leaderboard", + "r": 209, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 209, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 1, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [], + "objects": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "When the player exits the leaderboard, send them back to GameScene so they can restart the game.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Leaderboards::IsLeaderboardViewLoaded" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"GameScene\"", + "no" + ] + } + ] + } + ], + "layers": [ + { + "ambientLightColorB": 2, + "ambientLightColorG": 134217728, + "ambientLightColorR": 1597132097, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/)", + "category": "", + "extensionNamespace": "", + "fullName": "Shake Object (position, angle, scale)", + "helpPath": "https://victrisgames.itch.io/gdevelop-camera-shake-example", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWFycm93LWFsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMywxMUgxOEwxNi41LDkuNUwxNy45Miw4LjA4TDIxLjg0LDEyTDE3LjkyLDE1LjkyTDE2LjUsMTQuNUwxOCwxM0gxM1YxOEwxNC41LDE2LjVMMTUuOTIsMTcuOTJMMTIsMjEuODRMOC4wOCwxNy45Mkw5LjUsMTYuNUwxMSwxOFYxM0g2TDcuNSwxNC41TDYuMDgsMTUuOTJMMi4xNiwxMkw2LjA4LDguMDhMNy41LDkuNUw2LDExSDExVjZMOS41LDcuNUw4LjA4LDYuMDhMMTIsMi4xNkwxNS45Miw2LjA4TDE0LjUsNy41TDEzLDZWMTFaIiAvPjwvc3ZnPg==", + "name": "ShakeObject", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/arrow-all.svg", + "shortDescription": "Shake an object, using one or more ways to shake (position, angle, scale).", + "version": "1.5.5", + "description": [ + "Select one or more methods of shaking:", + "- Position: Shake the X and/or Y position of the object ", + "- Angle: Shake the angle (rotation) of the object ", + "- Scale: Shake the scale of the object (must be a sprite)", + "", + "Control how the object shakes:", + "- Amplitude: How far the object moves during each shake", + "- Duration: Amount of time to shake the object", + "- Time between shakes: Amount of time between each movement of the object", + "- Keep shaking until stopped (boolean)", + "", + "Tips:", + "- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)", + "- To make the single-shake move in the opposite direction, use negative numbers ", + "- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" ", + "- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)", + "- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. ", + "- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing" + ], + "origin": { + "identifier": "ShakeObject", + "name": "gdevelop-extension-store" + }, + "tags": [ + "shaking", + "object", + "effect", + "shake", + "scale", + "position", + "rotate", + "angle" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle).\nThis behavior can be used on any type of object.", + "fullName": "Shake object (position, angle)", + "name": "ShakeObject_PositionAngle", + "objectType": "", + "eventsFunctions": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle).", + "fullName": "Shake object (position, angle)", + "functionType": "Action", + "name": "ShakeObject_PositionAngle", + "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start/Reset duration timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "=", + "GetArgumentAsNumber(\"PowerX\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "=", + "GetArgumentAsNumber(\"PowerY\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "=", + "GetArgumentAsNumber(\"PowerAngle\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "GetArgumentAsNumber(\"TimeBetweenShakes\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Determine if the shake should keep going until stopped", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShakeForever\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add default values if none were provided", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0.08" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If duration is less than a single shake, increase duration to make 1 full shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "<", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect initial shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Initiate the onScenePostEvents function", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + }, + { + "description": "Duration of shake (in seconds) (Default: 0.5) ", + "name": "Duration", + "type": "expression" + }, + { + "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", + "name": "PowerX", + "type": "expression" + }, + { + "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", + "name": "PowerY", + "type": "expression" + }, + { + "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", + "name": "PowerAngle", + "type": "expression" + }, + { + "description": "Amount of time between shakes (in seconds) (Default: 0.08)", + "name": "TimeBetweenShakes", + "type": "expression" + }, + { + "description": "Keep shaking until stopped", + "longDescription": "Duration value will be ignored", + "name": "ShakeForever", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Start shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Keep object shaking forever (if desired)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "100" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate movement of the shake", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Run once before every shake movement", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + }, + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Position Shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "After initial shake pick a random direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Rotation (angle) shake ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"even\" shake, rotate clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, rotate counter-clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "-1 *(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save that initial shake has been processed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate the fraction of shake that occured during this frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PercentTimeElapsedThisFrame", + "=", + "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase change for the first half of the shake (move away from original values)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Decrease change the second half of the shake (return to original position)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Stop shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"", + "Object.Variable(__ShakeObject_Duration)" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "=", + "0" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Stop any shaking of object that was initiated by the Shake Object extension.", + "fullName": "Stop shaking the object", + "functionType": "Action", + "name": "StopShaking", + "sentence": "Stop shaking _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngle::IsShaking" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object is shaking.", + "fullName": "Check if an object is shaking", + "functionType": "Condition", + "name": "IsShaking", + "sentence": "_PARAM0_ is shaking", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [], + "sharedPropertyDescriptors": [] + }, + { + "description": "Shake an object, using one or more ways to shake (position, angle, scale)\nThis behavior can only be used on sprite objects.", + "fullName": "Shake object (position, angle, scale)", + "name": "ShakeObject_PositionAngleScale", + "objectType": "Sprite", + "eventsFunctions": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle, scale).", + "fullName": "Shake object (position, angle, scale)", + "functionType": "Action", + "name": "ShakeObject_PositionAngleScale", + "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start/Reset duration timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "=", + "GetArgumentAsNumber(\"PowerX\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "=", + "GetArgumentAsNumber(\"PowerY\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "=", + "GetArgumentAsNumber(\"PowerAngle\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "=", + "GetArgumentAsNumber(\"PowerScale\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "GetArgumentAsNumber(\"TimeBetweenShakes\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Determine if the shake should keep going until stopped", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShakeForever\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add default values if none were provided", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0.08" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If duration is less than a single shake, increase duration to make 1 full shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "<", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect initial shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Initiate the onScenePostEvents function", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + }, + { + "description": "Duration of shake (in seconds) (Default: 0.5)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", + "name": "PowerX", + "type": "expression" + }, + { + "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", + "name": "PowerY", + "type": "expression" + }, + { + "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", + "name": "PowerAngle", + "type": "expression" + }, + { + "description": "Amplitude of scale shake (in percent change) (For example: 5)", + "name": "PowerScale", + "type": "expression" + }, + { + "description": "Amount of time between shakes (in seconds) (Default: 0.08)", + "name": "TimeBetweenShakes", + "type": "expression" + }, + { + "description": "Keep shaking until stopped", + "longDescription": "Duration value will be ignored", + "name": "ShakeForever", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Start shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Keep object shaking forever (if desired)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "100" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate movement of the shake", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Run once before every shake movement", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + }, + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_ScaleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Position Shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "After initial shake pick a random direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Rotation (angle) shake ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"even\" shake, rotate clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, rotate counter-clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Scale shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate object scale displacement, with linear decay over time", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "ScaleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every even shake, increase scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementScale", + "=", + "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, decrease scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "ScaleDisplacement = -1 * (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementScale", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save that initial shake has been processed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate the fraction of shake that occured during this frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PercentTimeElapsedThisFrame", + "=", + "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase change for the first half of the shake (move away from original values)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerScale)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Decrease change the second half of the shake (return to original position)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerScale)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Stop shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"", + "Object.Variable(__ShakeObject_Duration)" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "=", + "0" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_ScaleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Stop shaking an object.", + "fullName": "Stop shaking an object", + "functionType": "Action", + "name": "StopShaking", + "sentence": "Stop shaking _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::IsShaking" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object is shaking.", + "fullName": "Check if an object is shaking", + "functionType": "Condition", + "name": "IsShaking", + "sentence": "_PARAM0_ is shaking", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "@4ian, Tristan Rhodes (https://victrisgames.itch.io/)", + "category": "", + "extensionNamespace": "", + "fullName": "Rectangular Movement", + "helpPath": "https://victrisgames.itch.io/extension-rectangular-movement", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXNoYXBlLXJlY3RhbmdsZS1wbHVzIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5LDZIMjJWOEgxOVYxMUgxN1Y4SDE0VjZIMTdWM0gxOVY2TTE3LDE3VjE0SDE5VjE5SDNWNkgxMVY4SDVWMTdIMTdaIiAvPjwvc3ZnPg==", + "name": "RectangularMovement", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/shape-rectangle-plus.svg", + "shortDescription": "Allow an object to move in a rectangular pattern.", + "version": "0.2.1", + "description": [ + "Allow an object to move in a rectangular pattern.", + "By default, movement will slow down when going around corners, but this can be changed to always use a constant speed.", + "", + "Example uses:", + "- Moveable platforms", + "- Enemy movement patterns", + "", + "Properties:", + "- Center of movement, X position", + "- Center of movement, Y position", + "- Horizontal distance", + "- Vertical distance", + "- Horizontal speed", + "- Vertical speed", + "- Use constant speed (object will not slow down at corners)", + "- Use counter-clockwise direction", + "", + "Tips:", + "- Set the CenterX and CenterY values to move the object", + "- For horizontal movement only, set vertical distance to 0", + "- For vertical movement only, set horizontal distance to 0", + "- Use conditions to apply logic based on the direction the object is moving. For example, setting the animation." + ], + "origin": { + "identifier": "RectangularMovement", + "name": "gdevelop-extension-store" + }, + "tags": [ + "rectangular", + "movement", + "rectangle", + "patrol", + "platform", + "enemy" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Allow an object to move in a rectangular pattern.", + "fullName": "Rectangular Movement", + "name": "RectangularMovement", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Rectangular movement", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the center of movement to the initial location of the object", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCenterPointX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCenterPointY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCenterPointX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.X()" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCenterPointY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Y()" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move slowly around corners (default)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyConstantSpeed" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move Clockwise or CounterClockwise", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Horizontal movement is the same for both methods", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyHorizontalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyCenterPointX() + cos(ToRad(Object.Behavior::PropertyProgressX())) * abs(Object.Behavior::PropertyHorizontalDistance()) / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Vertical movement is reversed based on the parameter", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyVerticalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyCenterPointY() + cos(ToRad(Object.Behavior::PropertyProgressY())) * abs(Object.Behavior::PropertyVerticalDistance()) / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyCenterPointY() - cos(ToRad(Object.Behavior::PropertyProgressY())) * abs(Object.Behavior::PropertyVerticalDistance()) / 2" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate how to move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "180" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyHorizontalSpeed() * TimeDelta()) / 2" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyHorizontalSpeed() * TimeDelta()) / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Skip if no horizontal movement is desired", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyHorizontalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "180" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Left\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "180" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "360" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyVerticalSpeed() * TimeDelta()) / 2" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyVerticalSpeed() * TimeDelta()) / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Skip if no vertical movement is desired", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyVerticalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "360" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Up\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Down\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "360" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "540" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyHorizontalSpeed() * TimeDelta()) / 2" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyHorizontalSpeed() * TimeDelta()) / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Skip if no horizontal movement is desired", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyHorizontalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "540" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Right\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "540" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "720" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyVerticalSpeed() * TimeDelta()) / 2" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyVerticalSpeed() * TimeDelta()) / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Skip if no vertical movement is desired", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyVerticalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "720" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Down\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Up\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset the counter after the rectangular path is completed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "720" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "720" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move at a constant speed", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyConstantSpeed" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move Clockwise or CounterClockwise", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Vertical movement is the same for both methods", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyVerticalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyCenterPointY() - abs(Object.Behavior::PropertyVerticalDistance()) / 2 + Object.Behavior::PropertyProgressY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyHorizontalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyCenterPointX() - abs(Object.Behavior::PropertyHorizontalDistance()) / 2 + Object.Behavior::PropertyProgressX()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyCenterPointX() + abs(Object.Behavior::PropertyHorizontalDistance()) / 2 - Object.Behavior::PropertyProgressX()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate how to move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyHorizontalSpeed() * TimeDelta())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "abs(Object.Behavior::HorizontalDistance())" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "abs(Object.Behavior::PropertyHorizontalDistance())" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Left\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Right\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "abs(Object.Behavior::PropertyVerticalSpeed() * TimeDelta())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "abs(Object.Behavior::VerticalDistance())" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "abs(Object.Behavior::PropertyVerticalDistance())" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Down\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "abs(Object.Behavior::PropertyHorizontalSpeed() * TimeDelta())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect when Progress crosses 0 (or if horizontal movement is disabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyHorizontalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Right\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Left\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "3" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "abs(Object.Behavior::PropertyVerticalSpeed() * TimeDelta())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect when Progress crosses 0 (or if vertical movement is disabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyVerticalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Record direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Up\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Counter used to change the Y position of the object.", + "fullName": "Progress Y", + "functionType": "Expression", + "name": "ProgressY", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyProgressY()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Counter used to change the X position of the object.", + "fullName": "Progress X", + "functionType": "Expression", + "name": "ProgressX", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyProgressX()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Horizontal speed.", + "fullName": "Horizontal speed ", + "functionType": "Expression", + "name": "HorizontalSpeed", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHorizontalSpeed()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Vertical speed.", + "fullName": "Vertical speed", + "functionType": "Expression", + "name": "VerticalSpeed", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyVerticalSpeed()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Horizontal distance.", + "fullName": "Horizontal distance", + "functionType": "Expression", + "name": "HorizontalDistance", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHorizontalDistance()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Vertical distance.", + "fullName": "Vertical distance", + "functionType": "Expression", + "name": "VerticalDistance", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyVerticalDistance()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Center of movement, X position.", + "fullName": "Center of movement, X position", + "functionType": "Expression", + "name": "CenterX", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCenterPointX()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Center of movement, Y position.", + "fullName": "Center of movement, Y position", + "functionType": "Expression", + "name": "CenterY", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCenterPointY()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Set center Y position.", + "fullName": "Set center Y position", + "functionType": "Action", + "name": "SetCenterY", + "sentence": "Set center Y position of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCenterPointY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Set center X position.", + "fullName": "Set center X position", + "functionType": "Action", + "name": "SetCenterX", + "sentence": "Set center X position of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCenterPointX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Set horizontal distance.", + "fullName": "Set horizontal distance", + "functionType": "Action", + "name": "SetHorizontalDistance", + "sentence": "Set horizontal distance of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyHorizontalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Set vertical distance.", + "fullName": "Set vertical distance", + "functionType": "Action", + "name": "SetVerticalDistance", + "sentence": "Set vertical distance of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyVerticalDistance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Set horizontal speed.", + "fullName": "Set horizontal speed", + "functionType": "Action", + "name": "SetHorizontalSpeed", + "sentence": "Set horizontal speed of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyHorizontalSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Set vertical speed.", + "fullName": "Set vertical speed", + "functionType": "Action", + "name": "SetVerticalSpeed", + "sentence": "Set vertical speed of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyVerticalSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Use counter-clockwise direction.", + "fullName": "Use counter-clockwise direction", + "functionType": "Action", + "name": "SetCounterClockwise", + "sentence": "Use counter-clockwise direction for _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyCounterClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Counter clockwise?", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Use constant speed.", + "fullName": "Use constant speed", + "functionType": "Action", + "name": "SetConstantSpeed", + "sentence": "Use constant speed for _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyConstantSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyConstantSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + }, + { + "description": "Make the speed constant?", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Reset progress counters. The object will return to the initial state.", + "fullName": "Reset progress counters", + "functionType": "Action", + "name": "ResetProgressCounters", + "sentence": "Reset progress counters on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is moving downwards.", + "fullName": "Object is moving downwards", + "functionType": "Condition", + "name": "IsMovingDown", + "sentence": "_PARAM0_ is moving downwards", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Down\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is moving upwards.", + "fullName": "Object is moving upwards", + "functionType": "Condition", + "name": "IsMovingUp", + "sentence": "_PARAM0_ is moving upwards", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Up\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is moving to the left.", + "fullName": "Object is moving to the left", + "functionType": "Condition", + "name": "IsMovingLeft", + "sentence": "_PARAM0_ is moving to the left", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Left\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is moving to the right.", + "fullName": "Object is moving to the right", + "functionType": "Condition", + "name": "IsMovingRight", + "sentence": "_PARAM0_ is moving to the right", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Right\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangularMovement::RectangularMovement", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "300", + "type": "Number", + "label": "Horizontal speed", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "HorizontalSpeed" + }, + { + "value": "300", + "type": "Number", + "label": "Vertical speed", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "VerticalSpeed" + }, + { + "value": "100", + "type": "Number", + "label": "Horizontal Distance: Amplitude of the movement on X axis (0 to deactivate)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "HorizontalDistance" + }, + { + "value": "100", + "type": "Number", + "label": "Vertical Distance: Amplitude of the movement on Y axis (0 to deactivate)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "VerticalDistance" + }, + { + "value": "0", + "type": "Number", + "label": "Center of movement, X position", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CenterPointX" + }, + { + "value": "0", + "type": "Number", + "label": "Center of movement, Y position", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CenterPointY" + }, + { + "value": "0", + "type": "Number", + "label": "Counter used to change X position", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProgressX" + }, + { + "value": "0", + "type": "Number", + "label": "Counter used to change Y position", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProgressY" + }, + { + "value": "0", + "type": "Number", + "label": "Counter used for rectangular movement", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "RectangularCounter" + }, + { + "value": "", + "type": "Boolean", + "label": "Use a constant speed for movement", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ConstantSpeed" + }, + { + "value": "", + "type": "Boolean", + "label": "Use counter-clockwise direction", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CounterClockwise" + }, + { + "value": "", + "type": "Choice", + "label": "Current direction the object is moving", + "description": "", + "group": "", + "extraInformation": [ + "Left", + "Right", + "Up", + "Down" + ], + "hidden": true, + "name": "CurrentDirection" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + } + ], + "externalLayouts": [], + "externalSourceFiles": [] +} \ No newline at end of file From e6f910fa846bcfa411cb42065b29a2f27751d5f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 28 Feb 2023 09:18:13 +0100 Subject: [PATCH 024/208] Modify script to update project files with resource URLs and prepare upload --- scripts/generate-database.js | 167 ++++++++++++++++++++++++++-- scripts/lib/FileTreeParser.js | 176 ++++++++++++++++++++++++++++++ scripts/lib/GDevelopCoreLoader.js | 83 ++++++++++++++ scripts/lib/LocalProjectOpener.js | 15 +++ scripts/lib/LocalProjectWriter.js | 50 +++++++++ scripts/types.d.ts | 3 + 6 files changed, 486 insertions(+), 8 deletions(-) create mode 100644 scripts/lib/FileTreeParser.js create mode 100644 scripts/lib/GDevelopCoreLoader.js create mode 100644 scripts/lib/LocalProjectOpener.js create mode 100644 scripts/lib/LocalProjectWriter.js diff --git a/scripts/generate-database.js b/scripts/generate-database.js index e55b8c9..9bd9157 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -4,27 +4,73 @@ const dree = require('dree'); const path = require('path'); const fs = require('fs').promises; const { InAppTutorial } = require('./lib/InAppTutorial'); +const { loadGDevelopCoreAndExtensions } = require('./lib/GDevelopCoreLoader'); +const { loadSerializedProject } = require('./lib/LocalProjectOpener'); +const { + readFileTree, + enhanceFileTreeWithParsedContent, + getAllFiles, + getAllTemplateFiles, +} = require('./lib/FileTreeParser'); +const { writeProjectJSONFile } = require('./lib/LocalProjectWriter'); +const args = require('minimist')(process.argv.slice(2)); -/** - * @typedef {import("./types").InAppTutorialShortHeader} InAppTutorialShortHeader - */ +/** @typedef {import("./types").InAppTutorialShortHeader} InAppTutorialShortHeader */ +/** @typedef {import("./types").libGDevelop} libGDevelop */ +/** @typedef {import('./types').gdProject} gdProject */ + +if (!args['gdevelop-root-path']) { + shell.echo( + '❌ You must pass --gdevelop-root-path with the path to GDevelop repository with `npm install` ran in `newIDE/app`.' + ); + shell.exit(1); +} + +const distPath = path.join(__dirname, '../dist'); +const gdevelopRootPath = path.resolve( + process.cwd(), + args['gdevelop-root-path'] +); const tutorialsSourceRootPath = path.join(__dirname, '../tutorials'); const inAppTutorialsSourceRootPath = path.join( tutorialsSourceRootPath, 'in-app' ); -const distPath = path.join(__dirname, '../dist'); -const databasePath = path.join(distPath, 'database'); const inAppTutorialsDestinationRootPath = path.join(distPath, 'tutorials'); +const tutorialsDatabasePath = path.join(distPath, 'database'); + +const templatesSourceRootPath = path.join(__dirname, '../templates'); +const templatesDestinationRootPath = path.join( + inAppTutorialsDestinationRootPath, + 'in-app' +); + +/** @param {string} fileOrFolderPath */ +const normalizePathSeparators = (fileOrFolderPath) => { + return fileOrFolderPath.replace(/\\/g, '/'); +}; + +/** + * Generate the URL used after deployment for a file in the templates folder. + * @param {string} filePath + */ +const getResourceUrl = (filePath) => { + const relativeFilePath = normalizePathSeparators( + path.relative(templatesDestinationRootPath, filePath) + ); + console.log(filePath, templatesDestinationRootPath, relativeFilePath); + return `https://resources.gdevelop-app.com/in-app-tutorials/${relativeFilePath}`; +}; const generateFolderStructure = () => { // Clean current folders - shell.rm('-rf', databasePath); + shell.rm('-rf', inAppTutorialsDestinationRootPath); + shell.rm('-rf', tutorialsDatabasePath); // Recreate destination folders shell.mkdir('-p', inAppTutorialsDestinationRootPath); - shell.mkdir('-p', databasePath); + shell.mkdir('-p', tutorialsDatabasePath); // Copy tutorials in destination folders shell.cp( @@ -32,6 +78,110 @@ const generateFolderStructure = () => { inAppTutorialsSourceRootPath, inAppTutorialsDestinationRootPath ); + shell.cp('-r', templatesSourceRootPath, templatesDestinationRootPath); +}; + +/** + * + * @param {libGDevelop} gd + * @param {gdProject} project + * @param {string} baseUrl + */ +const updateResources = (gd, project, baseUrl) => { + const worker = new gd.ArbitraryResourceWorkerJS(); + /** @param {string} file */ + worker.exposeImage = (file) => { + // Don't do anything + return file; + }; + /** @param {string} shader */ + worker.exposeShader = (shader) => { + // Don't do anything + return shader; + }; + /** @param {string} file */ + worker.exposeFile = (file) => { + if (file.length === 0) return ''; + return baseUrl + '/' + file; + }; + + project.exposeResources(worker); +}; + +/** + * Update the template game files to use resources on resources.gdevelop-app.com + * @returns {Promise<{errors: Error[]}>} + */ +const updateTemplateFiles = async () => { + const loadedGDevelop = await loadGDevelopCoreAndExtensions({ + gdevelopRootPath, + }); + const { gd } = loadedGDevelop; + if (!gd || loadedGDevelop.errors.length) { + console.error( + 'Unable to load GDevelop core and the extensions:', + loadedGDevelop.errors + ); + shell.exit(1); + } + console.info( + 'Loaded GDevelop and extensions', + loadedGDevelop.extensionLoadingResults + ); + + /** @type {Error[]} */ + const errors = []; + console.info('updating template files.'); + + const fileTree = await readFileTree(templatesDestinationRootPath); + if (!fileTree) throw new Error('Expected fileTree not to be null'); + + const enhancedTree = await enhanceFileTreeWithParsedContent(fileTree); + const { fileTreeWithParsedContent } = enhancedTree; + if (enhancedTree.errors.length) { + console.error( + 'There were errors while parsing templates files:', + enhancedTree.errors + ); + console.info('Aborting because of these errors.'); + shell.exit(1); + } + + const allFiles = getAllFiles(fileTreeWithParsedContent); + const allTemplateFiles = getAllTemplateFiles(allFiles); + + console.info('read all files.'); + + await Promise.all( + allTemplateFiles.map(async (fileWithParsedContent) => { + const projectObject = fileWithParsedContent.parsedContent; + if (!projectObject) { + errors.push( + new Error( + `Expected valid JSON content in ${fileWithParsedContent.path}.` + ) + ); + return; + } + + const project = loadSerializedProject(gd, projectObject); + const gameFolderPath = path.dirname(fileWithParsedContent.path); + updateResources(gd, project, getResourceUrl(gameFolderPath)); + + try { + await writeProjectJSONFile(gd, project, fileWithParsedContent.path); + } catch (error) { + errors.push( + new Error( + `Error while writing the updated project file at ${fileWithParsedContent.path}: ` + + error + ) + ); + } + }) + ); + + return { errors }; }; /** @@ -80,7 +230,7 @@ const buildAndWriteInAppTutorialsDatabase = (databasePath, inAppTutorials) => { const processInAppTutorials = async () => { const inAppTutorials = await readInAppTutorials(inAppTutorialsSourceRootPath); - buildAndWriteInAppTutorialsDatabase(databasePath, inAppTutorials); + buildAndWriteInAppTutorialsDatabase(tutorialsDatabasePath, inAppTutorials); }; /** @@ -89,6 +239,7 @@ const processInAppTutorials = async () => { (async () => { try { generateFolderStructure(); + await updateTemplateFiles(); await processInAppTutorials(); } catch (error) { console.error('The script errored', error); diff --git a/scripts/lib/FileTreeParser.js b/scripts/lib/FileTreeParser.js new file mode 100644 index 0000000..c4ce7a4 --- /dev/null +++ b/scripts/lib/FileTreeParser.js @@ -0,0 +1,176 @@ +// @ts-check +const dree = require('dree'); +const fs = require('fs').promises; +const path = require('path'); + +/** @typedef {{name: string, searchToken: string}} Author */ +/** @typedef {{name: string, searchToken: string}} License */ +/** @typedef {import('dree').Dree} Dree */ +/** @typedef {{parsedContent?: any}} OptionalParsedJSONContent */ +/** @typedef {{children?: DreeWithParsedContent[]} & OptionalParsedJSONContent & Dree} DreeWithParsedContent */ +/** @typedef {{name: string, children: TagsTreeNode[], allChildrenTags: string[] }} TagsTreeNode */ + +/** + * Remove if necessary the BOM character at the beginning of a JSON file content. + * @param {string} content + */ +const sanitizeJSONContent = (content) => { + if (content[0] === '\uFEFF') return content.slice(1); + + return content; +}; + +/** + * Create a "file tree" by browsing all the files of the specified folder, + * ignoring some specific folder names and only listing files with extensions + * that we know are useful. + * + * @param {string} rootPath + * @returns {Promise} + */ +const readFileTree = async (rootPath) => { + return await dree.scanAsync(rootPath, { + stat: false, + normalize: true, + followLinks: true, + size: false, + hash: false, + exclude: [ + /Default size/, + /Spritesheet/, + /Tilesheet/, + /Vector/, + /Unimplemented/i, + /TODO/i, + /Preview\.png/, + ], + extensions: ['png', 'md', 'txt', 'json', 'ttf', 'otf', 'wav', 'aac', 'svg'], + }); +}; + +/** + * Browse the specified file tree and add the file content for each project file. + * @param {Dree} fileTree + * @returns {Promise<{fileTreeWithParsedContent: DreeWithParsedContent, errors: Error[]}>} + */ +const enhanceFileTreeWithParsedContent = async (fileTree) => { + /** @type {Error[]} */ + const errors = []; + + /** @type {DreeWithParsedContent[]} */ + const childrenFileTreeWithParsedContent = []; + + /** @type {Object.} */ + const parsedContents = {}; + + if (fileTree.type === 'directory' && fileTree.children) { + // Make a first pass on the directory to create the contents of the project files. + await Promise.all( + fileTree.children.map(async (childFileTree) => { + if (childFileTree.type === 'file') { + if (childFileTree.name.endsWith('.json')) { + try { + const content = await fs.readFile(childFileTree.path, 'utf-8'); + const sanitizedContent = sanitizeJSONContent(content); + const parsedContent = JSON.parse(sanitizedContent); + parsedContents[childFileTree.name] = parsedContent; + } catch (error) { + errors.push( + new Error( + 'Unable to read the content of ' + + childFileTree.path + + ' - is it valid JSON?' + ) + ); + } + } + } + }) + ); + + // Make a second pass to build the tree + await Promise.all( + fileTree.children.map(async (childFileTree) => { + if (childFileTree.type === 'file') { + childrenFileTreeWithParsedContent.push({ + ...childFileTree, + parsedContent: parsedContents[childFileTree.name], + children: [], + }); + } else { + const childEnhancedTree = await enhanceFileTreeWithParsedContent( + childFileTree + ); + childrenFileTreeWithParsedContent.push( + childEnhancedTree.fileTreeWithParsedContent + ); + } + }) + ); + } + + return { + fileTreeWithParsedContent: { + ...fileTree, + children: childrenFileTreeWithParsedContent, + }, + errors, + }; +}; + +/** + * Get all files of a file tree indexed by their absolute path. + * @param {DreeWithParsedContent} fileTreeWithMetadata + * @returns {Object.} + */ +const getAllFiles = (fileTreeWithMetadata) => { + if (fileTreeWithMetadata.type === 'file') { + return { [fileTreeWithMetadata.path]: fileTreeWithMetadata }; + } else { + /** @type {Object.} */ + let allFiles = {}; + + if (!fileTreeWithMetadata.children) { + // A folder without children - just ignore it. + return allFiles; + } + + fileTreeWithMetadata.children.forEach((childFileTreeWithMetadata) => { + allFiles = { ...allFiles, ...getAllFiles(childFileTreeWithMetadata) }; + }); + return allFiles; + } +}; + +/** + * Return only the files that are GDevelop project files. + * @param {Object.} allFiles + * @returns {DreeWithParsedContent[]} + */ +const getAllTemplateFiles = (allFiles) => { + /** @param {DreeWithParsedContent} fileWithMetadata */ + const isGame = (fileWithMetadata) => { + if (fileWithMetadata.name === 'game.json') return true; + + if ( + fileWithMetadata.name.endsWith('.json') && + path.basename(path.dirname(fileWithMetadata.relativePath)) === + path.basename(fileWithMetadata.name, '.json') + ) { + return true; + } + + return false; + }; + + return Object.values(allFiles).filter((fileWithMetadata) => { + return isGame(fileWithMetadata); + }); +}; + +module.exports = { + readFileTree, + enhanceFileTreeWithParsedContent, + getAllFiles, + getAllTemplateFiles, +}; diff --git a/scripts/lib/GDevelopCoreLoader.js b/scripts/lib/GDevelopCoreLoader.js new file mode 100644 index 0000000..ecfe303 --- /dev/null +++ b/scripts/lib/GDevelopCoreLoader.js @@ -0,0 +1,83 @@ +const path = require('path'); + +/** @typedef {import('../types').libGDevelop} libGDevelop */ + +/** + * Load GDevelop core library and JavaScript extensions. + * + * @param {{gdevelopRootPath: string}} options + * @returns {Promise<{gd: ?libGDevelop, extensionLoadingResults: any[], errors: Error[]}>} + */ +const loadGDevelopCoreAndExtensions = async ({ gdevelopRootPath }) => { + /** @type {Error[]} */ + const errors = []; + + const libGDJsPath = path.join(gdevelopRootPath, 'newIDE/app/public/libGD.js'); + const localJsExtensionLoaderPath = path.join( + gdevelopRootPath, + 'newIDE/app/src/JsExtensionsLoader/LocalJsExtensionsLoader.js' + ); + + /** @type {?() => Promise} */ + let initializeGDevelopJs = null; + try { + initializeGDevelopJs = require(libGDJsPath); + } catch (error) { + errors.push( + new Error(`Unable to load libGD.js from ${libGDJsPath}:` + error) + ); + } + + /** @type {?Function} */ + let makeExtensionsLoader = null; + try { + makeExtensionsLoader = require(localJsExtensionLoaderPath); + } catch (error) { + errors.push( + new Error( + `Unable to load LocalJsExtensionsLoader.js from ${localJsExtensionLoaderPath}:` + + error + ) + ); + } + + if (!initializeGDevelopJs || !makeExtensionsLoader) { + return { + gd: null, + extensionLoadingResults: [], + errors, + }; + } + + return new Promise((resolve) => { + // @ts-ignore + initializeGDevelopJs().then( + /** @param {libGDevelop} gd */ + async (gd) => { + /** @param {string} str */ + const noopTranslationFunction = (str) => str; + + gd.ProjectHelper.initializePlatforms(); + + // @ts-ignore + const extensionLoadingResults = await makeExtensionsLoader({ + gd, + filterExamples: true, + onFindGDJS: async () => ({ + gdjsRoot: path.join(gdevelopRootPath, 'newIDE/app/resources/GDJS'), + }), + }).loadAllExtensions(noopTranslationFunction); + + resolve({ + gd, + extensionLoadingResults, + errors, + }); + } + ); + }); +}; + +module.exports = { + loadGDevelopCoreAndExtensions, +}; diff --git a/scripts/lib/LocalProjectOpener.js b/scripts/lib/LocalProjectOpener.js new file mode 100644 index 0000000..efd0f46 --- /dev/null +++ b/scripts/lib/LocalProjectOpener.js @@ -0,0 +1,15 @@ +/** @typedef {import('../types').libGDevelop} libGDevelop */ + +module.exports = { + /** + * @param {libGDevelop} gd + * @param {Object} projectObject + */ + loadSerializedProject: (gd, projectObject) => { + const serializedProject = gd.Serializer.fromJSObject(projectObject); + const newProject = gd.ProjectHelper.createNewGDJSProject(); + newProject.unserializeFrom(serializedProject); + + return newProject; + }, +}; diff --git a/scripts/lib/LocalProjectWriter.js b/scripts/lib/LocalProjectWriter.js new file mode 100644 index 0000000..9ed29d8 --- /dev/null +++ b/scripts/lib/LocalProjectWriter.js @@ -0,0 +1,50 @@ +const fs = require('fs'); + +/** @typedef {import('../types').libGDevelop} libGDevelop */ +/** @typedef {import('../types').gdProject} gdProject */ + +/** + * @param {libGDevelop} gd + * @param {any} serializable + * @param {string} methodName + * @returns {string} + */ +const serializeToJSON = (gd, serializable, methodName = 'serializeTo') => { + const serializedElement = new gd.SerializerElement(); + serializable[methodName](serializedElement); + // TODO: this could be speed up with a gd.Serializer.toPrettyJSON + // (and used in the IDE LocalProjectWriter.js too). + const json = JSON.stringify( + JSON.parse(gd.Serializer.toJSON(serializedElement)), + null, + 2 + ); + serializedElement.delete(); + + return json; +}; + +module.exports = { + /** + * @param {libGDevelop} gd + * @param {gdProject} project + * @param {string} filepath + * @returns {Promise} + */ + writeProjectJSONFile: (gd, project, filepath) => { + return new Promise((resolve, reject) => { + if (!fs) return reject('Not supported'); + + try { + const content = serializeToJSON(gd, project); + fs.writeFile(filepath, content, (err) => { + if (err) return reject(err); + + resolve(); + }); + } catch (e) { + return reject(e); + } + }); + }, +}; diff --git a/scripts/types.d.ts b/scripts/types.d.ts index dc610e4..e402a25 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -77,3 +77,6 @@ export type InAppTutorial = { endDialog: InAppTutorialEndDialog; availableLocales: Array; }; + +export type libGDevelop = any; +export type gdProject = any; From 9a4ca4b9827170bb4fa616940e59311627c581fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 28 Feb 2023 09:21:58 +0100 Subject: [PATCH 025/208] Update build CI --- .circleci/config.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6c6cd73..f877bfa 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,10 +10,13 @@ jobs: steps: - checkout - run: npm install + - run: git clone git@github.com:4ian/GDevelop.git --depth 1 + - run: cd GDevelop/newIDE/app && npm install - persist_to_workspace: root: . paths: - node_modules # For npm install. + - GDevelop/newIDE/app # As we have a dependency on GDevelop sources. tests: docker: @@ -33,7 +36,7 @@ jobs: - checkout - attach_workspace: at: . - - run: npm run build + - run: npm run build -- --gdevelop-root-path GDevelop - run: npm run check-post-build - persist_to_workspace: root: . From 327616b3ecfb365e35b48ddb9a37fe2e73a18395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 28 Feb 2023 09:32:29 +0100 Subject: [PATCH 026/208] Fix tests --- __tests__/post-build.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index 074ffb0..bd68d37 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -51,9 +51,9 @@ describe('In app tutorials content checks', () => { const { children: allInAppTutorialFiles } = allInAppTutorialFolder; if (!allInAppTutorialFiles) throw new Error('No tutorial file found.'); /** @type {InAppTutorial[]} */ - const allInAppTutorials = allInAppTutorialFiles.map((file) => { - return JSON.parse(fs.readFileSync(file.path, 'utf-8')); - }); + const allInAppTutorials = allInAppTutorialFiles + .filter((file) => file.type === dree.Type.FILE) + .map((file) => JSON.parse(fs.readFileSync(file.path, 'utf-8'))); test('there is no empty translation', () => { /** @type {Record>>} */ From 38a60f6f7be1c607e2a77dadd475c46197d17ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 2 Mar 2023 16:22:26 +0100 Subject: [PATCH 027/208] Update template and add some info to short headers --- docs/inAppTutorial/REFERENCE.md | 26 + scripts/generate-database.js | 2 - scripts/lib/InAppTutorial.js | 8 + scripts/types.d.ts | 2 + tutorials/in-app/plinkoMultiplier.json | 883 +++++++++++++++++++++++++ 5 files changed, 919 insertions(+), 2 deletions(-) create mode 100644 tutorials/in-app/plinkoMultiplier.json diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index 872dcf7..792f752 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -118,7 +118,9 @@ At the moment, only one trigger can be specified to go the next step. Here is th - `presenceOfElement` (string): the CSS selector of an element present in the DOM or a custom selector - `absenceOfElement` (string): the CSS selector of an element absent from the DOM or a custom selector - `valueHasChanged` (true): the CSS selector of an input whose value has changed +- `valueEquals` (string): the CSS selector of an input whose value is equal to the string (even for numbers, it has to be a string, ex: "2") - `instanceAddedOnScene` (string): the name of an object for which an instance has been added on the scene + - `instancesCount` (number): the number of instances that should be present on the scene (to be used with `instanceAddedOnScene`) - `previewLaunched` (true): a preview has been launched - `clickOnTooltipButton` (`messageByLocale` object): the label of the button displayed in the tooltip that the user has to click to go to the next step. - `editorIsActive` (string `scene:editor`): to detect when a user switched editors @@ -201,3 +203,27 @@ Notes: - `playScene` is the key under which the name of the scene has been stored during the tutorial. - The possible values for the expected editor are: `Scene`, `EventsSheet`, `Home` (other editors are not supported at the moment). + +## `initialTemplateUrl` & `initialProjectData` + +If the tutorial does not start from scratch, we can provide a template URL to download the project from with `initialTemplateUrl`. This should match the URL of the template in the GDevelop templates S3 bucket (https://resources.gdevelop-app.com/in-app-tutorials/templates/{gameName}/game.json) +This template should be available inside the `templates` folder, with the same name as the tutorial. It will get deployed to the S3 bucket when merging to master. + +Inside the app, when a tutorial is running, all objects or scenes added are tracked, so they can be re-used. +However, if we start from a template, we need to know which objects or scenes are already present so they can be tracked. +Ideally, we should be able to detect them automatically, but for now, we need to provide the list of objects and scenes that are already present in the template. +To do so, we can provide the `initialProjectData` field. + +Ex: + +```json +{ + ..., + "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json", + "initialProjectData": { + "gameScene": "GameScene", + "multiplier": "Multiplier", + "particles": "PegStar_Particle" + }, +} +``` diff --git a/scripts/generate-database.js b/scripts/generate-database.js index 9bd9157..66b5bd6 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -150,8 +150,6 @@ const updateTemplateFiles = async () => { const allFiles = getAllFiles(fileTreeWithParsedContent); const allTemplateFiles = getAllTemplateFiles(allFiles); - console.info('read all files.'); - await Promise.all( allTemplateFiles.map(async (fileWithParsedContent) => { const projectObject = fileWithParsedContent.parsedContent; diff --git a/scripts/lib/InAppTutorial.js b/scripts/lib/InAppTutorial.js index 68082f6..0e519a7 100644 --- a/scripts/lib/InAppTutorial.js +++ b/scripts/lib/InAppTutorial.js @@ -13,6 +13,10 @@ class InAppTutorial { id; /** @type {Array} */ availableLocales; + /** @type {string | undefined} */ + initialTemplateUrl; + /** @type { Record | undefined} */ + initialTemplateData; /** * @param {string} sourcePath @@ -29,6 +33,8 @@ class InAppTutorial { } this.id = tutorialContent.id; this.availableLocales = tutorialContent.availableLocales; + this.initialTemplateUrl = tutorialContent.initialTemplateUrl; + this.initialTemplateData = tutorialContent.initialProjectData; } catch (error) { console.error( `An error occurred when reading tutorial file with path ${sourcePath}. The file might be corrupt.`, @@ -46,6 +52,8 @@ class InAppTutorial { id: this.id, contentUrl: `https://resources.gdevelop-app.com/in-app-tutorials/${this.id}.json`, availableLocales: this.availableLocales, + initialTemplateUrl: this.initialTemplateUrl, + initialTemplateData: this.initialTemplateData, }; } } diff --git a/scripts/types.d.ts b/scripts/types.d.ts index e402a25..616afa0 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -2,6 +2,8 @@ export interface InAppTutorialShortHeader { id: string; contentUrl: string; availableLocales: Array; + initialTemplateUrl?: string; + initialTemplateData?: Record; } export type MessageByLocale = Record; diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json new file mode 100644 index 0000000..282ee9b --- /dev/null +++ b/tutorials/in-app/plinkoMultiplier.json @@ -0,0 +1,883 @@ +{ + "id": "plinkoMultiplier", + "editorSwitches": { + "Login": { + "editor": "Scene", + "scene": "gameScene" + }, + "CreateLeaderboard": { + "editor": "Scene", + "scene": "gameScene" + }, + "SwitchToEvents1": { + "editor": "EventsSheet", + "scene": "gameScene" + } + }, + "availableLocales": ["en"], + "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json", + "initialProjectData": { + "gameScene": "GameScene", + "multiplier": "Multiplier", + "scoreMultiplier": "ScoreMultiplier", + "ball": "Ball", + "particles": "PegStar_Particle" + }, + "endDialog": { + "content": [ + { + "messageByLocale": { + "en": "# You've finished adding a score multiplier to your game!" + } + }, + { + "messageByLocale": { + "en": "Well done, in this tutorial you've learned:" + } + }, + { + "messageByLocale": { + "en": "- How to create a scene variable" + } + }, + { + "messageByLocale": { + "en": "- How to update a scene variable" + } + }, + { + "messageByLocale": { + "en": "- How to use a scene variable in an expression" + } + }, + { + "messageByLocale": { + "en": "You can keep adding stuff to this example or publish it and share it with your friends to see who gets the highest score!" + } + } + ] + }, + "flow": [ + { + "id": "Login", + "nextStepTrigger": { + "absenceOfElement": "#login-now" + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!" + } + }, + "placement": "right" + } + }, + { + "id": "CreateLeaderboard", + "elementToHighlightId": "#create-and-replace-new-leaderboard", + "nextStepTrigger": { + "absenceOfElement": "#create-and-replace-new-leaderboard" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "First, let's **create a leaderboard** as this game will need it. You're lucky, everything will be automatically set up for you!" + } + }, + "placement": "right" + } + }, + { + "elementToHighlightId": "#toolbar-preview-button", + "nextStepTrigger": { + "previewLaunched": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "This game is called Plinko! You let a ball fall inside a maze and gather points depending on how many pegs you hit. Click on the **Preview** button to test it out." + } + }, + "placement": "bottom" + } + }, + { + "elementToHighlightId": "objectInObjectsList:multiplier", + "nextStepTrigger": { + "instanceAddedOnScene": "multiplier", + "instancesCount": 3 + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add a few **$(multiplier)** to spice up the game! Drag 3 from the menu to the canvas and place them so they can be collected by the ball through the maze." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "objectInObjectsList:scoreMultiplier", + "nextStepTrigger": { + "instanceAddedOnScene": "scoreMultiplier" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Once you're done, let's position a **$(scoreMultiplier)** to display the current multiplier score. Let's place it just below the score!" + } + }, + "placement": "bottom" + } + }, + { + "id": "OpenPropertiesManagerForScene", + "elementToHighlightId": "#main-toolbar-project-manager-button", + "nextStepTrigger": { + "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-scenes" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We now need to store the score somewhere. Let's create a **scene variable**! Open the **Project Manager**" + } + }, + "placement": "right" + } + }, + { + "id": "OpenPropertiesManagerForScene", + "elementToHighlightId": "#main-toolbar-project-manager-button", + "nextStepTrigger": { + "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-scenes" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We now need to store the score somewhere. Let's create a scene variable! Open the **Project Manager**" + } + }, + "placement": "right" + } + }, + { + "elementToHighlightId": "sceneInProjectManager:gameScene", + "nextStepTrigger": { + "presenceOfElement": "#scene-variables-dialog #add-variable" + }, + "tooltip": { + "placement": "left", + "description": { + "messageByLocale": { + "en": "Open the $(gameScene) options and select **Edit scene variables**." + } + } + } + }, + { + "elementToHighlightId": "#scene-variables-dialog #add-variable", + "nextStepTrigger": { + "presenceOfElement": "#variable-0-name" + }, + "tooltip": { + "title": { + "messageByLocale": { + "en": "Let's add our first **variable**!" + } + } + } + }, + { + "elementToHighlightId": "#scene-variables-dialog #variable-0-name", + "nextStepTrigger": { + "valueEquals": "Multiplier" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's name this variable `Multiplier`." + } + }, + "placement": "bottom" + } + }, + { + "elementToHighlightId": "#scene-variables-dialog #variable-0-type", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's change its type to **Number**." + } + }, + "placement": "bottom" + } + }, + { + "elementToHighlightId": "#scene-variables-dialog #variable-0-text-value", + "nextStepTrigger": { + "valueEquals": "1" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "And finally let's change its initial value to **1**." + } + }, + "placement": "bottom" + } + }, + { + "elementToHighlightId": "#scene-variables-dialog #apply-button", + "nextStepTrigger": { + "absenceOfElement": "#scene-variables-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "And we're done! Let's close this dialog." + } + } + } + }, + { + "elementToHighlightId": "editorTab:gameScene:EventsSheet", + "nextStepTrigger": { + "presenceOfElement": "#events-editor[data-active]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now let's make those multipliers active. Let's open the **Events Sheet** of the $(gameScene) scene." + } + }, + "placement": "bottom" + } + }, + { + "id": "SwitchToEvents1", + "elementToHighlightId": "#events-editor[data-active] #add-condition-button-empty", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "First we will make $(multiplier) disappear when $(ball) hits one. An event is ready for you, let's **add a condition** to it." + } + } + } + }, + { + "elementToHighlightId": "objectInObjectOrResourceSelector:ball", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-CollisionNP" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(ball)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-CollisionNP", + "nextStepTrigger": { + "presenceOfElement": "#parameter-1-object-selector" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Collision** condition." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-object-selector", + "nextStepTrigger": { + "valueEquals": "Multiplier" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "And select our **$(multiplier)**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, our **condition** is ready and will be **true** when the **$(ball) touches the $(multiplier)**." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "[data-active=\"true\"] #add-action-button-empty", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's make our multiplier disappear with an **action** now." + } + } + } + }, + { + "elementToHighlightId": "objectInObjectOrResourceSelector:multiplier", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-Delete" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(multiplier)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-Delete", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will make **$(multiplier)** disappear on collision." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "It is important to note that only the $(multiplier) that match the condition will be deleted. This is called **Object picking**. Let's close this dialog." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now let's **play a sound** when it is collected!." + } + } + } + }, + { + "elementToHighlightId": "#instruction-editor-dialog #search-bar", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-PlaySound" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Search for **sound**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-PlaySound", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Play a sound** action." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-audio-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Click on the field to see the options, and select **ClickerBeep2.wav**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, now the sound will play when the $(ball) collects a $(multiplier)!" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's **update our variable** accordingly." + } + } + } + }, + { + "elementToHighlightId": "#instruction-editor-dialog #search-bar", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-ModVarScene" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Search for **scene variable**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-ModVarScene", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Our multiplier is a number, so let's select **Change number variable** action." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-0-scene-variable-field", + "nextStepTrigger": { + "valueEquals": "Multiplier" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the variable we created earlier, **Multiplier**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-operator-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want to increase the multiplier, so let's select **+ (add)**." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "1" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's enter **1**." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, now our scene variable **Multiplier** will **increase by 1** every time **$(ball) collects a $(multiplier)**." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add some juice and **create particles** when the **$(multiplier)** is collected." + } + } + } + }, + { + "elementToHighlightId": "#instruction-editor-dialog #search-bar", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-Create" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Search for **Create**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-Create", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will **create some particles** we've prepared for you, pick the **Create an object** action." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-object-selector", + "nextStepTrigger": { + "valueEquals": "PegStar_Particle" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the particles we've prepared, **$(particles)**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "Multiplier.X()" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's make it spawn where the multiplier was, enter `$(multiplier).X()`." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-3-expression-field", + "nextStepTrigger": { + "valueEquals": "Multiplier.Y()" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "And `$(multiplier).Y()`." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Nice! Our **$(particles)** will be **created** exactly where the **$(multiplier)** was, giving a nice effect!" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Finally, we need to ensure that the **$(scoreMultiplier)** we've placed on the scene gets updated accordingly!" + } + } + } + }, + { + "elementToHighlightId": "#instruction-editor-dialog #search-bar", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-TextObject--String" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Search for **Modify**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-TextObject--String", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will **Modify the text** that we placed on the screen earlier." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-0-object-selector", + "nextStepTrigger": { + "valueEquals": "ScoreMultiplier" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the text object **$(scoreMultiplier)**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-operator-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want to update the text completely, so let's select **= (set to)**." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-2-string-field", + "nextStepTrigger": { + "valueEquals": "\"x\"+VariableString(Multiplier)" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so. Let's enter `\"x\"+VariableString(Multiplier)`." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Nice! our **$(scoreMultiplier)** will now be updated thanks to the **Multiplier variable** that we converted to a text!" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "[id=\"**Score multiplier-unfolded\"]", + "nextStepTrigger": { + "presenceOfElement": "[id=\"**Score multiplier-folded\"]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Finally, we need to take our multiplier into account when calculating the score. Let's **fold the Score multiplier** group with the arrow on the left." + } + }, + "placement": "bottom" + } + }, + { + "elementToHighlightId": "[id=\"**Hitting pegs-folded\"]", + "nextStepTrigger": { + "presenceOfElement": "[id=\"**Hitting pegs-unfolded\"]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "And let's **unfold the Hitting pegs** group with the arrow on the left." + } + }, + "placement": "bottom" + } + }, + { + "elementToHighlightId": "#event-3-action-0", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **double-clicking on it**!" + } + } + } + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "1*Variable(Multiplier)" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want to multiply the score added by the multiplier, so let's enter `1*Variable(Multiplier)`." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "This will make our score update according to the multiplier! Let's save." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#event-7-action-0", + "nextStepTrigger": { + "presenceOfElement": "#instruction-parameters-container" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "This event here manages the logic when the player hits a bigger peg. Let's modify the score action by **double-clicking on it** again." + } + } + } + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "2*Variable(Multiplier)" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want to do exactly the same, except that the score given is 2, so let's enter `2 * Variable(Multiplier)`." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now let's close this!." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#toolbar-preview-button", + "nextStepTrigger": { + "previewLaunched": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button." + } + }, + "placement": "bottom" + } + } + ] +} From 41b872251233a7b33c4b0eecfb7209f13126e067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 2 Mar 2023 16:42:04 +0100 Subject: [PATCH 028/208] Update tests and types --- __tests__/post-build.spec.js | 73 +++++++++++++++++++----------------- __tests__/utils.js | 1 + scripts/types.d.ts | 2 + 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index bd68d37..a1f639b 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -23,7 +23,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders).toHaveLength(1); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`2`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { @@ -84,44 +84,47 @@ describe('In app tutorials content checks', () => { /** @type {Record>} */ const messagesWithCorruptProjectDataByTutorial = {}; - allInAppTutorials.forEach((tutorial) => { - const { flow } = tutorial; - const projectData = flow.reduce( - /** - * @param {string[]} acc - * @param {{mapProjectData?: Record}} step - */ - (acc, step) => { - if (step.mapProjectData) { - acc.push(Object.keys(step.mapProjectData)[0]); - } - return acc; - }, - /** @type {string[]} */ - [] - ); + allInAppTutorials + // We don't check the tutorials with initial template, because they already have project data. + .filter((tutorial) => !tutorial.initialTemplateUrl) + .forEach((tutorial) => { + const { flow } = tutorial; + const projectData = flow.reduce( + /** + * @param {string[]} acc + * @param {{mapProjectData?: Record}} step + */ + (acc, step) => { + if (step.mapProjectData) { + acc.push(Object.keys(step.mapProjectData)[0]); + } + return acc; + }, + /** @type {string[]} */ + [] + ); - const allMessagesByLocale = getAllMessagesByLocale(tutorial); + const allMessagesByLocale = getAllMessagesByLocale(tutorial); - /** @type {string[]} */ - const messagesWithCorruptProjectData = []; - allMessagesByLocale.forEach((messageByLocale) => { - Object.values(messageByLocale).forEach((value) => { - const allPlaceholders = getAllPlaceholdersInMessage(value); - if ( - allPlaceholders.some( - (placeholder) => !projectData.includes(placeholder) - ) - ) { - messagesWithCorruptProjectData.push(value); - } + /** @type {string[]} */ + const messagesWithCorruptProjectData = []; + allMessagesByLocale.forEach((messageByLocale) => { + Object.values(messageByLocale).forEach((value) => { + const allPlaceholders = getAllPlaceholdersInMessage(value); + if ( + allPlaceholders.some( + (placeholder) => !projectData.includes(placeholder) + ) + ) { + messagesWithCorruptProjectData.push(value); + } + }); }); + if (messagesWithCorruptProjectData.length > 0) { + messagesWithCorruptProjectDataByTutorial[tutorial.id] = + messagesWithCorruptProjectData; + } }); - if (messagesWithCorruptProjectData.length > 0) { - messagesWithCorruptProjectDataByTutorial[tutorial.id] = - messagesWithCorruptProjectData; - } - }); if (Object.keys(messagesWithCorruptProjectDataByTutorial).length > 0) { console.error(messagesWithCorruptProjectDataByTutorial); throw new Error( diff --git a/__tests__/utils.js b/__tests__/utils.js index b569ec5..a4f2548 100644 --- a/__tests__/utils.js +++ b/__tests__/utils.js @@ -32,6 +32,7 @@ const getAllMessagesByLocale = (tutorial) => { return; } if (typeof value === 'object') { + // @ts-ignore localMessagesByLocale.push(...getAllMessagesByLocale(value)); return; } diff --git a/scripts/types.d.ts b/scripts/types.d.ts index 616afa0..29dd585 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -78,6 +78,8 @@ export type InAppTutorial = { editorSwitches: Record; endDialog: InAppTutorialEndDialog; availableLocales: Array; + initialTemplateUrl?: string; + initialTemplateData?: Record; }; export type libGDevelop = any; From 58696274a728c23c1ebc1f9f411e9dd2446917bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 3 Mar 2023 16:45:16 +0100 Subject: [PATCH 029/208] Some improvements --- scripts/generate-database.js | 1 - scripts/lib/FileTreeParser.js | 45 +++++++++++--------------- tutorials/in-app/plinkoMultiplier.json | 15 ++++++--- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/scripts/generate-database.js b/scripts/generate-database.js index 66b5bd6..6dc5c37 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -59,7 +59,6 @@ const getResourceUrl = (filePath) => { const relativeFilePath = normalizePathSeparators( path.relative(templatesDestinationRootPath, filePath) ); - console.log(filePath, templatesDestinationRootPath, relativeFilePath); return `https://resources.gdevelop-app.com/in-app-tutorials/${relativeFilePath}`; }; diff --git a/scripts/lib/FileTreeParser.js b/scripts/lib/FileTreeParser.js index c4ce7a4..c751d09 100644 --- a/scripts/lib/FileTreeParser.js +++ b/scripts/lib/FileTreeParser.js @@ -22,8 +22,7 @@ const sanitizeJSONContent = (content) => { /** * Create a "file tree" by browsing all the files of the specified folder, - * ignoring some specific folder names and only listing files with extensions - * that we know are useful. + * only listing files with extensions that we know are useful. * * @param {string} rootPath * @returns {Promise} @@ -35,15 +34,6 @@ const readFileTree = async (rootPath) => { followLinks: true, size: false, hash: false, - exclude: [ - /Default size/, - /Spritesheet/, - /Tilesheet/, - /Vector/, - /Unimplemented/i, - /TODO/i, - /Preview\.png/, - ], extensions: ['png', 'md', 'txt', 'json', 'ttf', 'otf', 'wav', 'aac', 'svg'], }); }; @@ -67,22 +57,23 @@ const enhanceFileTreeWithParsedContent = async (fileTree) => { // Make a first pass on the directory to create the contents of the project files. await Promise.all( fileTree.children.map(async (childFileTree) => { - if (childFileTree.type === 'file') { - if (childFileTree.name.endsWith('.json')) { - try { - const content = await fs.readFile(childFileTree.path, 'utf-8'); - const sanitizedContent = sanitizeJSONContent(content); - const parsedContent = JSON.parse(sanitizedContent); - parsedContents[childFileTree.name] = parsedContent; - } catch (error) { - errors.push( - new Error( - 'Unable to read the content of ' + - childFileTree.path + - ' - is it valid JSON?' - ) - ); - } + if ( + childFileTree.type === 'file' && + childFileTree.name.endsWith('.json') + ) { + try { + const content = await fs.readFile(childFileTree.path, 'utf-8'); + const sanitizedContent = sanitizeJSONContent(content); + const parsedContent = JSON.parse(sanitizedContent); + parsedContents[childFileTree.name] = parsedContent; + } catch (error) { + errors.push( + new Error( + 'Unable to read the content of ' + + childFileTree.path + + ' - is it valid JSON?' + ) + ); } } }) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 282ee9b..3ca2539 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -173,7 +173,8 @@ "en": "Open the $(gameScene) options and select **Edit scene variables**." } } - } + }, + "isOnClosableDialog": true }, { "elementToHighlightId": "#scene-variables-dialog #add-variable", @@ -186,7 +187,8 @@ "en": "Let's add our first **variable**!" } } - } + }, + "isOnClosableDialog": true }, { "elementToHighlightId": "#scene-variables-dialog #variable-0-name", @@ -200,7 +202,8 @@ } }, "placement": "bottom" - } + }, + "isOnClosableDialog": true }, { "elementToHighlightId": "#scene-variables-dialog #variable-0-type", @@ -214,7 +217,8 @@ } }, "placement": "bottom" - } + }, + "isOnClosableDialog": true }, { "elementToHighlightId": "#scene-variables-dialog #variable-0-text-value", @@ -228,7 +232,8 @@ } }, "placement": "bottom" - } + }, + "isOnClosableDialog": true }, { "elementToHighlightId": "#scene-variables-dialog #apply-button", From ebcc43bfe7c72012dd027c68f4aa88d33f824f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 6 Mar 2023 17:54:36 +0100 Subject: [PATCH 030/208] Update ids --- tutorials/in-app/plinkoMultiplier.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 3ca2539..5e93e48 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -264,7 +264,7 @@ }, { "id": "SwitchToEvents1", - "elementToHighlightId": "#events-editor[data-active] #add-condition-button-empty", + "elementToHighlightId": "#events-editor[data-active] #event-2-1-conditions #add-condition-button-empty", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -334,7 +334,7 @@ } }, { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button-empty", + "elementToHighlightId": "[data-active=\"true\"] #event-2-1-actions #add-action-button-empty", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -389,7 +389,7 @@ } }, { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "elementToHighlightId": "[data-active=\"true\"] #event-2-1-actions #add-action-button", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -459,7 +459,7 @@ } }, { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "elementToHighlightId": "[data-active=\"true\"] #event-2-1-actions #add-action-button", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -559,7 +559,7 @@ } }, { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "elementToHighlightId": "[data-active=\"true\"] #event-2-1-actions #add-action-button", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -659,7 +659,7 @@ } }, { - "elementToHighlightId": "[data-active=\"true\"] #add-action-button", + "elementToHighlightId": "[data-active=\"true\"] #event-2-1-actions #add-action-button", "nextStepTrigger": { "presenceOfElement": "#instruction-editor-dialog" }, @@ -759,9 +759,9 @@ } }, { - "elementToHighlightId": "[id=\"**Score multiplier-unfolded\"]", + "elementToHighlightId": "#event-2-group-unfolded", "nextStepTrigger": { - "presenceOfElement": "[id=\"**Score multiplier-folded\"]" + "presenceOfElement": "#event-2-group-folded" }, "tooltip": { "description": { @@ -773,9 +773,9 @@ } }, { - "elementToHighlightId": "[id=\"**Hitting pegs-folded\"]", + "elementToHighlightId": "#event-1-group-folded", "nextStepTrigger": { - "presenceOfElement": "[id=\"**Hitting pegs-unfolded\"]" + "presenceOfElement": "#event-1-group-unfolded" }, "tooltip": { "description": { @@ -787,7 +787,7 @@ } }, { - "elementToHighlightId": "#event-3-action-0", + "elementToHighlightId": "#event-1-1-action-0", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, @@ -829,7 +829,7 @@ } }, { - "elementToHighlightId": "#event-7-action-0", + "elementToHighlightId": "#event-1-3-action-0", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, From 641a1321ef89ea96c8e796411361270735af313f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 7 Mar 2023 11:36:19 +0100 Subject: [PATCH 031/208] Update template with translations --- tutorials/in-app/plinkoMultiplier.json | 320 ++++++++++++++++++++----- 1 file changed, 255 insertions(+), 65 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 5e93e48..6f8229b 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -14,7 +14,7 @@ "scene": "gameScene" } }, - "availableLocales": ["en"], + "availableLocales": ["en", "fr", "es", "pt"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -27,32 +27,50 @@ "content": [ { "messageByLocale": { - "en": "# You've finished adding a score multiplier to your game!" + "en": "# You've finished adding a score multiplier to your game!", + "fr": "# Vous avez terminé d'ajouter un multiplicateur de score à votre jeu !", + "es": "# ¡Has terminado de agregar un multiplicador de puntuación a tu juego!", + "pt": "# Você terminou de adicionar um multiplicador de pontuação ao seu jogo!" } }, { "messageByLocale": { - "en": "Well done, in this tutorial you've learned:" + "en": "Well done, in this tutorial you've learned:", + "fr": "Bien joué, dans ce tutoriel vous avez appris :", + "es": "¡Bien hecho, en este tutorial aprendiste:", + "pt": "Bem feito, neste tutorial você aprendeu:" } }, { "messageByLocale": { - "en": "- How to create a scene variable" + "en": "- How to create a scene variable", + "fr": "- Comment créer une variable de scène", + "es": "- Cómo crear una variable de escena", + "pt": "- Como criar uma variável de cena" } }, { "messageByLocale": { - "en": "- How to update a scene variable" + "en": "- How to update a scene variable", + "fr": "- Comment mettre à jour une variable de scène", + "es": "- Cómo actualizar una variable de escena", + "pt": "- Como atualizar uma variável de cena" } }, { "messageByLocale": { - "en": "- How to use a scene variable in an expression" + "en": "- How to use a scene variable in an expression", + "fr": "- Comment utiliser une variable de scène dans une expression", + "es": "- Cómo usar una variable de escena en una expresión", + "pt": "- Como usar uma variável de cena em uma expressão" } }, { "messageByLocale": { - "en": "You can keep adding stuff to this example or publish it and share it with your friends to see who gets the highest score!" + "en": "You can keep adding stuff to this game or publish it and share it with your friends to see who gets the highest score!", + "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier et le partager avec vos amis pour voir qui obtient le meilleur score !", + "es": "¡Puedes seguir agregando cosas a este juego o publicarlo y compartirlo con tus amigos para ver quién obtiene la puntuación más alta!", + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo e compartilhá-lo com seus amigos para ver quem obtém a pontuação mais alta!" } } ] @@ -67,7 +85,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!" + "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!", + "fr": "Ce jeu utilise un classement ! **Connectez-vous** pour que nous puissions le configurer automatiquement !", + "es": "¡Este juego usa una tabla de clasificación! ¡Vamos a **iniciar sesión** para que podamos configurarlo automáticamente!", + "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!" } }, "placement": "right" @@ -82,7 +103,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "First, let's **create a leaderboard** as this game will need it. You're lucky, everything will be automatically set up for you!" + "en": "First, let's **create a leaderboard** as this game will need it. You're lucky, everything will be automatically set up for you!", + "fr": "Tout d'abord, créons un **classement** car ce jeu en aura besoin. Vous avez de la chance, tout sera automatiquement configuré pour vous !", + "es": "Primero, **creemos una tabla de clasificación** porque este juego la necesitará. ¡Tienes suerte, todo se configurará automáticamente para ti!", + "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!" } }, "placement": "right" @@ -96,7 +120,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This game is called Plinko! You let a ball fall inside a maze and gather points depending on how many pegs you hit. Click on the **Preview** button to test it out." + "en": "This game is called Plinko! You let a ball fall inside a maze and gather points depending on how many pegs you hit. Click on the **Preview** button to test it out.", + "fr": "Ce jeu s'appelle Plinko ! Vous laissez une balle tomber dans un labyrinthe et gagnez des points en fonction du nombre de plots que vous touchez. Cliquez sur le bouton **Aperçu** pour le tester.", + "es": "¡Este juego se llama Plinko! Deja caer una bola en un laberinto y gana puntos dependiendo de cuántos clavos golpees. Haz clic en el botón **Vista previa** para probarlo.", + "pt": "Este jogo se chama Plinko! Você deixa uma bola cair em um labirinto e ganha pontos dependendo de quantos pinos você acerta. Clique no botão **Visualizar** para testá-lo." } }, "placement": "bottom" @@ -111,7 +138,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add a few **$(multiplier)** to spice up the game! Drag 3 from the menu to the canvas and place them so they can be collected by the ball through the maze." + "en": "Let's add a few **$(multiplier)** to spice up the game! Drag 3 from the menu to the canvas and place them so they can be collected by the ball through the maze.", + "fr": "Ajoutons quelques **$(multiplier)** pour pimenter le jeu ! Faites glisser 3 depuis le menu sur le canvas et placez-les de sorte qu'ils puissent être collectés par la balle à travers le labyrinthe.", + "es": "¡Agreguemos algunos **$(multiplier)** para darle un poco de sabor al juego! Arrastra 3 desde el menú al lienzo y colócalos de manera que puedan ser recogidos por la bola a través del laberinto.", + "pt": "Vamos adicionar alguns **$(multiplier)** para dar um pouco de sabor ao jogo! Arraste 3 do menu para a tela e coloque-os de modo que possam ser coletados pela bola através do labirinto." } }, "placement": "top" @@ -125,7 +155,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Once you're done, let's position a **$(scoreMultiplier)** to display the current multiplier score. Let's place it just below the score!" + "en": "Once you're done, let's position a **$(scoreMultiplier)** to display the current multiplier score. Let's place it just below the score!", + "fr": "Une fois que vous avez terminé, positionnons un **$(scoreMultiplier)** pour afficher le multiplicateur de score actuel. Plaçons-le juste en dessous du score !", + "es": "Una vez que hayas terminado, coloquemos un **$(scoreMultiplier)** para mostrar la puntuación actual del multiplicador. ¡Colóquelo justo debajo de la puntuación!", + "pt": "Uma vez que você terminou, vamos posicionar um **$(scoreMultiplier)** para exibir a pontuação atual do multiplicador. Vamos colocá-lo logo abaixo da pontuação!" } }, "placement": "bottom" @@ -140,7 +173,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We now need to store the score somewhere. Let's create a **scene variable**! Open the **Project Manager**" + "en": "We now need to store the score somewhere. Let's create a **scene variable**! Open the **Project Manager**", + "fr": "Nous devons maintenant stocker le score quelque part. Créons une **variable de scène** ! Ouvrez le **Project Manager**", + "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una **variable de escena**! Abre el **Project Manager**", + "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma **variável de cena**! Abra o **Project Manager**" } }, "placement": "right" @@ -155,7 +191,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We now need to store the score somewhere. Let's create a scene variable! Open the **Project Manager**" + "en": "We now need to store the score somewhere. Let's create a scene variable! Open the **Project Manager**", + "fr": "Nous devons maintenant stocker le score quelque part. Créons une variable de scène ! Ouvrez le **Project Manager**", + "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una variable de escena! Abre el **Project Manager**", + "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**" } }, "placement": "right" @@ -170,7 +209,10 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Open the $(gameScene) options and select **Edit scene variables**." + "en": "Open the $(gameScene) options and select **Edit scene variables**.", + "fr": "Ouvrez les options de $(gameScene) et sélectionnez **Modifier les variables de la scène**.", + "es": "Abre las opciones de $(gameScene) y selecciona **Editar variables de escena**.", + "pt": "Abra as opções de $(gameScene) e selecione **Editar variáveis de cena**." } } }, @@ -184,7 +226,10 @@ "tooltip": { "title": { "messageByLocale": { - "en": "Let's add our first **variable**!" + "en": "Let's add our first **variable**!", + "fr": "Ajoutons notre première **variable** !", + "es": "¡Agreguemos nuestra primera **variable**!", + "pt": "Vamos adicionar nossa primeira **variável**!" } } }, @@ -198,7 +243,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's name this variable `Multiplier`." + "en": "Let's name this variable `Multiplier`.", + "fr": "Nommons cette variable `Multiplier`.", + "es": "Nombramos esta variable `Multiplier`.", + "pt": "Vamos nomear esta variável `Multiplier`." } }, "placement": "bottom" @@ -213,7 +261,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's change its type to **Number**." + "en": "Let's change its type to **Number**.", + "fr": "Changeons son type en **Nombre**.", + "es": "Cambiamos su tipo a **Número**.", + "pt": "Vamos mudar seu tipo para **Número**." } }, "placement": "bottom" @@ -228,7 +279,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "And finally let's change its initial value to **1**." + "en": "And finally let's change its initial value to **1**.", + "fr": "Et enfin, changeons sa valeur initiale en **1**.", + "es": "Y finalmente, cambiemos su valor inicial a **1**.", + "pt": "E finalmente, vamos mudar seu valor inicial para **1**." } }, "placement": "bottom" @@ -243,7 +297,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "And we're done! Let's close this dialog." + "en": "And we're done! Let's close this dialog.", + "fr": "Et c'est tout ! Fermons cette boîte de dialogue.", + "es": "¡Y listo! Cerramos esta ventana.", + "pt": "E acabamos! Vamos fechar esta janela." } } } @@ -256,7 +313,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's make those multipliers active. Let's open the **Events Sheet** of the $(gameScene) scene." + "en": "Now let's make those multipliers active. Let's open the **Events Sheet** of the $(gameScene) scene.", + "fr": "Maintenant, rendons ces multiplicateurs actifs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", + "es": "Ahora hagamos que esos multiplicadores estén activos. Abramos la **Hoja de eventos** de la escena $(gameScene).", + "pt": "Agora vamos deixar esses multiplicadores ativos. Vamos abrir a **Folha de eventos** da cena $(gameScene)." } }, "placement": "bottom" @@ -271,7 +331,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "First we will make $(multiplier) disappear when $(ball) hits one. An event is ready for you, let's **add a condition** to it." + "en": "First we will make $(multiplier) disappear when $(ball) hits one. An event is ready for you, let's **add a condition** to it.", + "fr": "Tout d'abord, nous ferons disparaître $(multiplier) quand $(ball) touche un. Un événement est prêt pour vous, ajoutons-y une **condition**.", + "es": "Primero haremos que $(multiplier) desaparezca cuando $(ball) golpee uno. Un evento está listo para usted, agreguemosle una **condición**.", + "pt": "Primeiro vamos fazer com que $(multiplier) desapareça quando $(ball) bater em um. Um evento está pronto para você, vamos **adicionar uma condição** a ele." } } } @@ -284,7 +347,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **$(ball)**." + "en": "Select **$(ball)**.", + "fr": "Sélectionnez **$(ball)**.", + "es": "Seleccione **$(ball)**.", + "pt": "Selecione **$(ball)**." } } }, @@ -298,7 +364,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **Collision** condition." + "en": "Select the **Collision** condition.", + "fr": "Sélectionnez la condition **Collision**.", + "es": "Seleccione la condición **Colisión**.", + "pt": "Selecione a condição **Colisão**." } } }, @@ -312,7 +381,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "And select our **$(multiplier)**." + "en": "And select our **$(multiplier)**.", + "fr": "Et sélectionnez notre **$(multiplier)**.", + "es": "Y seleccione nuestro **$(multiplier)**.", + "pt": "E selecione nosso **$(multiplier)**." } }, "placement": "top" @@ -327,7 +399,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, our **condition** is ready and will be **true** when the **$(ball) touches the $(multiplier)**." + "en": "Alright, our **condition** is ready and will be **true** when the **$(ball) touches the $(multiplier)**.", + "fr": "Bien, notre **condition** est prête et sera **vraie** quand le **$(ball) touche le $(multiplier)**.", + "es": "Bien, nuestra **condición** está lista y será **verdadera** cuando el **$(ball) golpee el $(multiplier)**.", + "pt": "Bem, nossa **condição** está pronta e será **verdadeira** quando o **$(ball) bater no $(multiplier)**." } }, "placement": "top" @@ -341,7 +416,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make our multiplier disappear with an **action** now." + "en": "Let's make our multiplier disappear with an **action** now.", + "fr": "Faisons disparaître notre multiplicateur avec une **action** maintenant.", + "es": "Hagamos que nuestro multiplicador desaparezca con una **acción** ahora.", + "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora." } } } @@ -354,7 +432,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select **$(multiplier)**." + "en": "Select **$(multiplier)**.", + "fr": "Sélectionnez **$(multiplier)**.", + "es": "Seleccione **$(multiplier)**.", + "pt": "Selecione **$(multiplier)**." } } }, @@ -368,7 +449,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will make **$(multiplier)** disappear on collision." + "en": "We will make **$(multiplier)** disappear on collision.", + "fr": "Nous allons faire disparaître **$(multiplier)** en cas de collision.", + "es": "Haremos que **$(multiplier)** desaparezca en caso de colisión.", + "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão." } } }, @@ -382,7 +466,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "It is important to note that only the $(multiplier) that match the condition will be deleted. This is called **Object picking**. Let's close this dialog." + "en": "It is important to note that only the $(multiplier) that match the condition will be deleted. This is called **Object picking**. Let's close this dialog.", + "fr": "Il est important de noter que seul le $(multiplier) qui correspond à la condition sera supprimé. C'est ce qu'on appelle le **choix d'objet**. Fermons cette boîte de dialogue.", + "es": "Es importante tener en cuenta que solo el $(multiplier) que coincida con la condición será eliminado. Esto se llama **elección de objeto**. Cerraremos esta ventana.", + "pt": "É importante notar que apenas o $(multiplier) que corresponder à condição será excluído. Isso é chamado de **escolha de objeto**. Vamos fechar esta janela." } }, "placement": "top" @@ -396,7 +483,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's **play a sound** when it is collected!." + "en": "Now let's **play a sound** when it is collected!.", + "fr": "Maintenant, **jouons un son** quand il est collecté !", + "es": "¡Ahora, **reproducimos un sonido** cuando se recolecta!", + "pt": "Agora, **reproduzimos um som** quando é coletado!" } } } @@ -409,7 +499,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for **sound**." + "en": "Search for **sound**.", + "fr": "Recherchez **son**.", + "es": "Busque **sonido**.", + "pt": "Procure **som**." } } }, @@ -423,7 +516,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the **Play a sound** action." + "en": "Select the **Play a sound** action.", + "fr": "Sélectionnez l'action **Jouer un son**.", + "es": "Seleccione la acción **Reproducir un sonido**.", + "pt": "Selecione a ação **Reproduzir um som**." } } }, @@ -437,7 +533,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the field to see the options, and select **ClickerBeep2.wav**." + "en": "Click on the field to see the options, and select **ClickerBeep2.wav**.", + "fr": "Cliquez sur le champ pour voir les options, et sélectionnez **ClickerBeep2.wav**.", + "es": "Haga clic en el campo para ver las opciones y seleccione **ClickerBeep2.wav**.", + "pt": "Clique no campo para ver as opções e selecione **ClickerBeep2.wav**." } }, "placement": "top" @@ -452,7 +551,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now the sound will play when the $(ball) collects a $(multiplier)!" + "en": "Alright, now the sound will play when the $(ball) collects a $(multiplier)!", + "fr": "Bien, maintenant le son sera joué quand le $(ball) collecte un $(multiplier) !", + "es": "¡Bien, ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", + "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!" } }, "placement": "top" @@ -466,7 +568,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's **update our variable** accordingly." + "en": "Let's **update our variable** accordingly.", + "fr": "Mettons à jour notre **variable** en conséquence.", + "es": "Actualicemos nuestra **variable** en consecuencia.", + "pt": "Atualizemos nossa **variável** em conformidade." } } } @@ -479,7 +584,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for **scene variable**." + "en": "Search for **scene variable**.", + "fr": "Recherchez **variable de scène**.", + "es": "Busque **variable de escena**.", + "pt": "Procure **variável de cena**." } } }, @@ -493,7 +601,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Our multiplier is a number, so let's select **Change number variable** action." + "en": "Our multiplier is a number, so let's select **Change number variable** action.", + "fr": "Notre multiplicateur est un nombre, donc sélectionnons l'action **Modifier une variable numérique**.", + "es": "Nuestro multiplicador es un número, por lo que seleccionemos la acción **Cambiar variable numérica**.", + "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**." } } }, @@ -507,7 +618,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the variable we created earlier, **Multiplier**." + "en": "Select the variable we created earlier, **Multiplier**.", + "fr": "Sélectionnez la variable que nous avons créée précédemment, **Multiplier**.", + "es": "Seleccione la variable que creamos anteriormente, **Multiplier**.", + "pt": "Selecione a variável que criamos anteriormente, **Multiplier**." } }, "placement": "top" @@ -522,7 +636,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to increase the multiplier, so let's select **+ (add)**." + "en": "We want to increase the multiplier, so let's select **+ (add)**.", + "fr": "Nous voulons augmenter le multiplicateur, donc sélectionnons **+ (ajouter)**.", + "es": "Queremos aumentar el multiplicador, así que seleccionemos **+ (agregar)**.", + "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**." } }, "placement": "left" @@ -537,7 +654,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's enter **1**." + "en": "Let's enter **1**.", + "fr": "Entrez **1**.", + "es": "Ingrese **1**.", + "pt": "Digite **1**." } }, "placement": "left" @@ -552,7 +672,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now our scene variable **Multiplier** will **increase by 1** every time **$(ball) collects a $(multiplier)**." + "en": "Alright, now our scene variable **Multiplier** will **increase by 1** every time **$(ball) collects a $(multiplier)**.", + "fr": "Bien, maintenant notre variable de scène **Multiplier** **augmentera de 1** à chaque fois que $(ball) collecte un $(multiplier).", + "es": "¡Bien, ahora nuestra variable de escena **Multiplier** **aumentará en 1** cada vez que la $(ball) recolecte un $(multiplier)!", + "pt": "Ótimo, agora nossa variável de cena **Multiplier** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!" } }, "placement": "top" @@ -566,7 +689,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add some juice and **create particles** when the **$(multiplier)** is collected." + "en": "Let's add some juice and **create particles** when the **$(multiplier)** is collected.", + "fr": "Ajoutons un peu de piquant et **créons des particules** quand le **$(multiplier)** est collecté.", + "es": "Agreguemos un poco de sabor y **creemos partículas** cuando el **$(multiplier)** es recolectado.", + "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado." } } } @@ -579,7 +705,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for **Create**." + "en": "Search for **Create**.", + "fr": "Recherchez **Créer**.", + "es": "Busque **Crear**.", + "pt": "Procure por **Criar**." } } }, @@ -593,7 +722,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will **create some particles** we've prepared for you, pick the **Create an object** action." + "en": "We will **create some particles** we've prepared for you, pick the **Create an object** action.", + "fr": "Nous allons **créer des particules** que nous avons préparées pour vous, choisissez l'action **Créer un objet**.", + "es": "Vamos a **crear algunas partículas** que hemos preparado para usted, elija la acción **Crear un objeto**.", + "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**." } } }, @@ -607,7 +739,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the particles we've prepared, **$(particles)**." + "en": "Select the particles we've prepared, **$(particles)**.", + "fr": "Sélectionnez les particules que nous avons préparées, **$(particles)**.", + "es": "Seleccione las partículas que hemos preparado, **$(particles)**.", + "pt": "Selecione as partículas que preparamos, **$(particles)**." } }, "placement": "top" @@ -622,7 +757,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make it spawn where the multiplier was, enter `$(multiplier).X()`." + "en": "Let's make it spawn where the multiplier was, enter `$(multiplier).X()`.", + "fr": "Faisons en sorte qu'elles apparaissent là où le multiplicateur était, entrez `$(multiplier).X()`.", + "es": "Hagamos que aparezcan donde estaba el multiplicador, ingrese `$(multiplier).X()`.", + "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava, digite `$(multiplier).X()`." } }, "placement": "left" @@ -637,7 +775,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "And `$(multiplier).Y()`." + "en": "And `$(multiplier).Y()`.", + "fr": "Et `$(multiplier).Y()`.", + "es": "Y `$(multiplier).Y()`.", + "pt": "E `$(multiplier).Y()`." } }, "placement": "left" @@ -652,7 +793,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! Our **$(particles)** will be **created** exactly where the **$(multiplier)** was, giving a nice effect!" + "en": "Nice! Our **$(particles)** will be **created** exactly where the **$(multiplier)** was, giving a nice effect!", + "fr": "Bien! Nos **$(particles)** seront **créées** exactement là où se trouvait le **$(multiplier)**, ce qui donnera un bel effet !", + "es": "¡Bien! Nuestras **$(particles)** serán **creadas** exactamente donde estaba el **$(multiplier)**, ¡lo que dará un buen efecto!", + "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!" } }, "placement": "top" @@ -666,7 +810,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Finally, we need to ensure that the **$(scoreMultiplier)** we've placed on the scene gets updated accordingly!" + "en": "Finally, we need to ensure that the **$(scoreMultiplier)** we've placed on the scene gets updated accordingly!", + "fr": "Enfin, nous devons nous assurer que le **$(scoreMultiplier)** que nous avons placé sur la scène est mis à jour en conséquence !", + "es": "¡Finalmente, debemos asegurarnos de que el **$(scoreMultiplier)** que hemos colocado en la escena se actualice en consecuencia!", + "pt": "Finalmente, precisamos nos certificar de que o **$(scoreMultiplier)** que colocamos na cena seja atualizado de acordo!" } } } @@ -679,7 +826,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Search for **Modify**." + "en": "Search for **Modify**.", + "fr": "Recherchez **Modifier**.", + "es": "Busque **Modificar**.", + "pt": "Procure por **Modificar**." } } }, @@ -693,7 +843,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will **Modify the text** that we placed on the screen earlier." + "en": "We will **Modify the text** that we placed on the screen earlier.", + "fr": "Nous allons **Modifier le texte** que nous avons placé à l'écran plus tôt.", + "es": "Vamos a **Modificar el texto** que colocamos en la pantalla anteriormente.", + "pt": "Vamos **Modificar o texto** que colocamos na tela anteriormente." } } }, @@ -707,7 +860,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the text object **$(scoreMultiplier)**." + "en": "Select the text object **$(scoreMultiplier)**.", + "fr": "Sélectionnez l'objet texte **$(scoreMultiplier)**." } }, "placement": "top" @@ -722,7 +876,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to update the text completely, so let's select **= (set to)**." + "en": "We want to update the text completely, so let's select **= (set to)**.", + "fr": "Nous voulons mettre à jour le texte complètement, alors sélectionnons **= (définir à)**.", + "es": "Queremos actualizar el texto por completo, así que seleccionemos **= (establecer en)**.", + "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**." } }, "placement": "left" @@ -737,7 +894,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so. Let's enter `\"x\"+VariableString(Multiplier)`." + "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so. Let's enter `\"x\"+VariableString(Multiplier)`.", + "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela. Entrez `\"x\"+VariableString(Multiplier)`.", + "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello. Ingrese `\"x\"+VariableString(Multiplier)`.", + "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso. Digite `\"x\"+VariableString(Multiplier)`." } }, "placement": "left" @@ -752,7 +912,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! our **$(scoreMultiplier)** will now be updated thanks to the **Multiplier variable** that we converted to a text!" + "en": "Nice! our **$(scoreMultiplier)** will now be updated thanks to the **Multiplier variable** that we converted to a text!", + "fr": "Bien ! notre **$(scoreMultiplier)** sera maintenant mis à jour grâce à la **variable Multiplier** que nous avons convertie en texte !", + "es": "¡Bien! ¡nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", + "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!" } }, "placement": "top" @@ -766,7 +929,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Finally, we need to take our multiplier into account when calculating the score. Let's **fold the Score multiplier** group with the arrow on the left." + "en": "Finally, we need to take our multiplier into account when calculating the score. Let's **fold the Score multiplier** group with the arrow on the left.", + "fr": "Enfin, nous devons prendre en compte notre multiplicateur lors du calcul du score. Laissons **replier le groupe Multiplicateur de score** avec la flèche à gauche.", + "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. Dejemos **replegar el grupo Multiplicador de puntuación** con la flecha a la izquierda.", + "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **recolher o grupo Multiplicador de pontuação** com a seta à esquerda." } }, "placement": "bottom" @@ -780,7 +946,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "And let's **unfold the Hitting pegs** group with the arrow on the left." + "en": "And let's **unfold the Hitting pegs** group with the arrow on the left.", + "fr": "Et laissons **déplier le groupe Toucher des plots** avec la flèche à gauche.", + "es": "Y dejemos **desplegar el grupo Tocando plots** con la flecha a la izquierda.", + "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda." } }, "placement": "bottom" @@ -794,7 +963,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **double-clicking on it**!" + "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **double-clicking on it**!", + "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **double-cliquant dessus** !", + "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **dando doble clic en ella**!", + "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!" } } } @@ -807,7 +979,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to multiply the score added by the multiplier, so let's enter `1*Variable(Multiplier)`." + "en": "We want to multiply the score added by the multiplier, so let's enter `1*Variable(Multiplier)`.", + "fr": "Nous voulons multiplier le score ajouté par le multiplicateur, alors entrons `1*Variable(Multiplier)`.", + "es": "Queremos multiplicar la puntuación agregada por el multiplicador, así que ingresamos `1*Variable(Multiplier)`.", + "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador, então vamos digitar `1*Variable(Multiplier)`." } }, "placement": "left" @@ -822,7 +997,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This will make our score update according to the multiplier! Let's save." + "en": "This will make our score update according to the multiplier! Let's save.", + "fr": "Cela fera en sorte que notre score se mette à jour en fonction du multiplicateur ! Enregistrons.", + "es": "¡Esto hará que nuestra puntuación se actualice de acuerdo con el multiplicador! Guardemos.", + "pt": "Isso fará com que nossa pontuação seja atualizada de acordo com o multiplicador! Salve." } }, "placement": "top" @@ -836,7 +1014,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This event here manages the logic when the player hits a bigger peg. Let's modify the score action by **double-clicking on it** again." + "en": "This event here manages the logic when the player hits a bigger peg. Let's modify the score action by **double-clicking on it** again.", + "fr": "Cet événement gère la logique lorsque le joueur touche un plot plus gros. Modifions l'action de score en **double-cliquant dessus** à nouveau.", + "es": "Este evento gestiona la lógica cuando el jugador toca un plot más grande. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", + "pt": "Este evento gerencia a lógica quando o jogador toca um plot maior. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente." } } } @@ -849,7 +1030,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to do exactly the same, except that the score given is 2, so let's enter `2 * Variable(Multiplier)`." + "en": "We want to do exactly the same, except that the score given is 2, so let's enter `2 * Variable(Multiplier)`.", + "fr": "Nous voulons faire exactement la même chose, sauf que le score donné est 2, alors entrons `2 * Variable(Multiplier)`.", + "es": "Queremos hacer exactamente lo mismo, excepto que la puntuación dada es 2, así que ingresamos `2 * Variable(Multiplier)`.", + "pt": "Queremos fazer exatamente a mesma coisa, exceto que a pontuação dada é 2, então vamos digitar `2 * Variable(Multiplier)`." } }, "placement": "left" @@ -864,7 +1048,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's close this!." + "en": "Now let's close this!.", + "fr": "Maintenant, fermons ceci !", + "es": "¡Ahora cerramos esto!", + "pt": "Agora vamos fechar isso!" } }, "placement": "top" @@ -878,7 +1065,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button." + "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**." } }, "placement": "bottom" From 2e1640c68f9e016fa87a84f514bc7489cfd5c4cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 7 Mar 2023 12:14:38 +0100 Subject: [PATCH 032/208] Fix prop name --- scripts/lib/InAppTutorial.js | 6 +++--- scripts/types.d.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/lib/InAppTutorial.js b/scripts/lib/InAppTutorial.js index 0e519a7..69453ad 100644 --- a/scripts/lib/InAppTutorial.js +++ b/scripts/lib/InAppTutorial.js @@ -16,7 +16,7 @@ class InAppTutorial { /** @type {string | undefined} */ initialTemplateUrl; /** @type { Record | undefined} */ - initialTemplateData; + initialProjectData; /** * @param {string} sourcePath @@ -34,7 +34,7 @@ class InAppTutorial { this.id = tutorialContent.id; this.availableLocales = tutorialContent.availableLocales; this.initialTemplateUrl = tutorialContent.initialTemplateUrl; - this.initialTemplateData = tutorialContent.initialProjectData; + this.initialProjectData = tutorialContent.initialProjectData; } catch (error) { console.error( `An error occurred when reading tutorial file with path ${sourcePath}. The file might be corrupt.`, @@ -53,7 +53,7 @@ class InAppTutorial { contentUrl: `https://resources.gdevelop-app.com/in-app-tutorials/${this.id}.json`, availableLocales: this.availableLocales, initialTemplateUrl: this.initialTemplateUrl, - initialTemplateData: this.initialTemplateData, + initialProjectData: this.initialProjectData, }; } } diff --git a/scripts/types.d.ts b/scripts/types.d.ts index 29dd585..db34153 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -3,7 +3,7 @@ export interface InAppTutorialShortHeader { contentUrl: string; availableLocales: Array; initialTemplateUrl?: string; - initialTemplateData?: Record; + initialProjectData?: Record; } export type MessageByLocale = Record; @@ -79,7 +79,7 @@ export type InAppTutorial = { endDialog: InAppTutorialEndDialog; availableLocales: Array; initialTemplateUrl?: string; - initialTemplateData?: Record; + initialProjectData?: Record; }; export type libGDevelop = any; From 0fa41f4a43555a6c47c2a609a6f54f57f30a97ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 7 Mar 2023 12:20:03 +0100 Subject: [PATCH 033/208] Fix wordings --- tutorials/in-app/plinkoMultiplier.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 6f8229b..e8858a5 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -400,7 +400,7 @@ "description": { "messageByLocale": { "en": "Alright, our **condition** is ready and will be **true** when the **$(ball) touches the $(multiplier)**.", - "fr": "Bien, notre **condition** est prête et sera **vraie** quand le **$(ball) touche le $(multiplier)**.", + "fr": "Bien, notre **condition** est prête et sera **vraie** quand **$(ball) touche le $(multiplier)**.", "es": "Bien, nuestra **condición** está lista y será **verdadera** cuando el **$(ball) golpee el $(multiplier)**.", "pt": "Bem, nossa **condição** está pronta e será **verdadeira** quando o **$(ball) bater no $(multiplier)**." } @@ -552,7 +552,7 @@ "description": { "messageByLocale": { "en": "Alright, now the sound will play when the $(ball) collects a $(multiplier)!", - "fr": "Bien, maintenant le son sera joué quand le $(ball) collecte un $(multiplier) !", + "fr": "Bien, maintenant le son sera joué quand $(ball) collecte un $(multiplier) !", "es": "¡Bien, ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!" } From 373ea8a1552061ae19f1ea1f0990d9f5eafea1db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:01:44 +0100 Subject: [PATCH 034/208] Add shortcut to fix --- tutorials/in-app/plinkoMultiplier.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index e8858a5..d8e7358 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -198,7 +198,15 @@ } }, "placement": "right" - } + }, + "shortcuts": [ + { + "stepId": "SceneVariablesOpen", + "trigger": { + "presenceOfElement": "#scene-variables-dialog" + } + } + ] }, { "elementToHighlightId": "sceneInProjectManager:gameScene", @@ -206,7 +214,7 @@ "presenceOfElement": "#scene-variables-dialog #add-variable" }, "tooltip": { - "placement": "left", + "placement": "right", "description": { "messageByLocale": { "en": "Open the $(gameScene) options and select **Edit scene variables**.", @@ -219,6 +227,7 @@ "isOnClosableDialog": true }, { + "id": "SceneVariablesOpen", "elementToHighlightId": "#scene-variables-dialog #add-variable", "nextStepTrigger": { "presenceOfElement": "#variable-0-name" From fbd45be4ae938501099043d6ac12e8a2d3640b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Wed, 8 Mar 2023 15:46:47 +0100 Subject: [PATCH 035/208] Update right click wording --- tutorials/in-app/plinkoMultiplier.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index d8e7358..07a4b17 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -217,10 +217,10 @@ "placement": "right", "description": { "messageByLocale": { - "en": "Open the $(gameScene) options and select **Edit scene variables**.", - "fr": "Ouvrez les options de $(gameScene) et sélectionnez **Modifier les variables de la scène**.", - "es": "Abre las opciones de $(gameScene) y selecciona **Editar variables de escena**.", - "pt": "Abra as opções de $(gameScene) e selecione **Editar variáveis de cena**." + "en": "**Right click** on $(gameScene) or tap the **triple dot button** and select **Edit scene variables**.", + "fr": "Faites un **clic droit** sur $(gameScene) ou appuyez sur le **bouton à trois points** et sélectionnez **Modifier les variables de scène**.", + "es": "Haga **clic derecho** en $(gameScene) o toque el **botón de tres puntos** y seleccione **Editar variables de escena**.", + "pt": "Clique com o **botão direito** em $(gameScene) ou toque no **botão de três pontos** e selecione **Editar variáveis de cena**." } } }, From fe457d2b7884101a7dfaf050ad5edd83e9f5083d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Wed, 8 Mar 2023 16:30:00 +0100 Subject: [PATCH 036/208] Add new lines for formulas --- tutorials/in-app/plinkoMultiplier.json | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 07a4b17..5a10e12 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -766,10 +766,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make it spawn where the multiplier was, enter `$(multiplier).X()`.", - "fr": "Faisons en sorte qu'elles apparaissent là où le multiplicateur était, entrez `$(multiplier).X()`.", - "es": "Hagamos que aparezcan donde estaba el multiplicador, ingrese `$(multiplier).X()`.", - "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava, digite `$(multiplier).X()`." + "en": "Let's make it spawn where the multiplier was,\n\nenter `$(multiplier).X()`.", + "fr": "Faisons en sorte qu'elles apparaissent là où le multiplicateur était,\n\nentrez `$(multiplier).X()`.", + "es": "Hagamos que aparezcan donde estaba el multiplicador,\n\ningrese `$(multiplier).X()`.", + "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`." } }, "placement": "left" @@ -903,10 +903,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so. Let's enter `\"x\"+VariableString(Multiplier)`.", - "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela. Entrez `\"x\"+VariableString(Multiplier)`.", - "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello. Ingrese `\"x\"+VariableString(Multiplier)`.", - "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso. Digite `\"x\"+VariableString(Multiplier)`." + "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so.\n\nEnter `\"x\"+VariableString(Multiplier)`.", + "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela.\n\nEntrez `\"x\"+VariableString(Multiplier)`.", + "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+VariableString(Multiplier)`.", + "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`." } }, "placement": "left" @@ -988,10 +988,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to multiply the score added by the multiplier, so let's enter `1*Variable(Multiplier)`.", - "fr": "Nous voulons multiplier le score ajouté par le multiplicateur, alors entrons `1*Variable(Multiplier)`.", - "es": "Queremos multiplicar la puntuación agregada por el multiplicador, así que ingresamos `1*Variable(Multiplier)`.", - "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador, então vamos digitar `1*Variable(Multiplier)`." + "en": "We want to multiply the score added by the multiplier,\n\nlet's enter `1*Variable(Multiplier)`.", + "fr": "Nous voulons multiplier le score ajouté par le multiplicateur,\n\nentrons `1*Variable(Multiplier)`.", + "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Variable(Multiplier)`.", + "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`." } }, "placement": "left" @@ -1039,10 +1039,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to do exactly the same, except that the score given is 2, so let's enter `2 * Variable(Multiplier)`.", - "fr": "Nous voulons faire exactement la même chose, sauf que le score donné est 2, alors entrons `2 * Variable(Multiplier)`.", - "es": "Queremos hacer exactamente lo mismo, excepto que la puntuación dada es 2, así que ingresamos `2 * Variable(Multiplier)`.", - "pt": "Queremos fazer exatamente a mesma coisa, exceto que a pontuação dada é 2, então vamos digitar `2 * Variable(Multiplier)`." + "en": "We want to do exactly the same, except that the score given is 2,\n\nenter `2 * Variable(Multiplier)`.", + "fr": "Nous voulons faire exactement la même chose, sauf que le score donné est 2,\n\nentrons `2 * Variable(Multiplier)`.", + "es": "Queremos hacer exactamente lo mismo, excepto que la puntuación dada es 2,\n\ningresamos `2 * Variable(Multiplier)`.", + "pt": "Queremos fazer exatamente a mesma coisa, exceto que a pontuação dada é 2,\n\ndigitar `2 * Variable(Multiplier)`." } }, "placement": "left" From 441ccab451566c54d7363aeaf28687ddffe4d489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:27:12 +0100 Subject: [PATCH 037/208] Add template --- templates/cameraParallax/CameraExample.json | 1223 +++++++++++++++++ templates/cameraParallax/assets/Ground.png | Bin 0 -> 1224 bytes templates/cameraParallax/assets/Idle-1.png | Bin 0 -> 1887 bytes templates/cameraParallax/assets/Idle-2.png | Bin 0 -> 1908 bytes templates/cameraParallax/assets/Idle-3.png | Bin 0 -> 1885 bytes templates/cameraParallax/assets/Idle-4.png | Bin 0 -> 1908 bytes templates/cameraParallax/assets/Jump-1.png | Bin 0 -> 1591 bytes templates/cameraParallax/assets/Jump-2.png | Bin 0 -> 1454 bytes templates/cameraParallax/assets/Jump-3.png | Bin 0 -> 1807 bytes templates/cameraParallax/assets/Jump-4.png | Bin 0 -> 1777 bytes templates/cameraParallax/assets/Run-1.png | Bin 0 -> 1587 bytes templates/cameraParallax/assets/Run-2.png | Bin 0 -> 1527 bytes templates/cameraParallax/assets/Run-3.png | Bin 0 -> 1474 bytes templates/cameraParallax/assets/Run-4.png | Bin 0 -> 1587 bytes templates/cameraParallax/assets/Run-5.png | Bin 0 -> 1665 bytes templates/cameraParallax/assets/Run-6.png | Bin 0 -> 1569 bytes templates/cameraParallax/assets/WallLeft.png | Bin 0 -> 478 bytes templates/cameraParallax/assets/WallRight.png | Bin 0 -> 492 bytes templates/cameraParallax/assets/clouds-1.png | Bin 0 -> 13501 bytes templates/cameraParallax/assets/town-1.png | Bin 0 -> 13570 bytes 20 files changed, 1223 insertions(+) create mode 100644 templates/cameraParallax/CameraExample.json create mode 100644 templates/cameraParallax/assets/Ground.png create mode 100644 templates/cameraParallax/assets/Idle-1.png create mode 100644 templates/cameraParallax/assets/Idle-2.png create mode 100644 templates/cameraParallax/assets/Idle-3.png create mode 100644 templates/cameraParallax/assets/Idle-4.png create mode 100644 templates/cameraParallax/assets/Jump-1.png create mode 100644 templates/cameraParallax/assets/Jump-2.png create mode 100644 templates/cameraParallax/assets/Jump-3.png create mode 100644 templates/cameraParallax/assets/Jump-4.png create mode 100644 templates/cameraParallax/assets/Run-1.png create mode 100644 templates/cameraParallax/assets/Run-2.png create mode 100644 templates/cameraParallax/assets/Run-3.png create mode 100644 templates/cameraParallax/assets/Run-4.png create mode 100644 templates/cameraParallax/assets/Run-5.png create mode 100644 templates/cameraParallax/assets/Run-6.png create mode 100644 templates/cameraParallax/assets/WallLeft.png create mode 100644 templates/cameraParallax/assets/WallRight.png create mode 100644 templates/cameraParallax/assets/clouds-1.png create mode 100644 templates/cameraParallax/assets/town-1.png diff --git a/templates/cameraParallax/CameraExample.json b/templates/cameraParallax/CameraExample.json new file mode 100644 index 0000000..6284758 --- /dev/null +++ b/templates/cameraParallax/CameraExample.json @@ -0,0 +1,1223 @@ +{ + "firstLayout": "", + "gdVersion": { + "build": 99, + "major": 4, + "minor": 0, + "revision": 0 + }, + "properties": { + "adaptGameResolutionAtRuntime": true, + "folderProject": false, + "orientation": "landscape", + "packageName": "com.example.CameraParallaxLesson", + "pixelsRounding": true, + "projectUuid": "fec2302d-bab6-4c3c-9708-53638b91d17a", + "scaleMode": "nearest", + "sizeOnStartupMode": "", + "templateSlug": "", + "useExternalSourceFiles": false, + "version": "1.0.0", + "name": "Camera Parallax Lesson", + "description": "", + "author": "", + "windowWidth": 1280, + "windowHeight": 720, + "latestCompilationDirectory": "", + "maxFPS": 60, + "minFPS": 20, + "verticalSync": false, + "platformSpecificAssets": {}, + "loadingScreen": { + "backgroundColor": 0, + "backgroundFadeInDuration": 0.2, + "backgroundImageResourceName": "", + "gdevelopLogoStyle": "light", + "logoAndProgressFadeInDuration": 0.2, + "logoAndProgressLogoFadeInDelay": 0.2, + "minDuration": 1.5, + "progressBarColor": 16777215, + "progressBarHeight": 20, + "progressBarMaxWidth": 200, + "progressBarMinWidth": 40, + "progressBarWidthPercent": 30, + "showGDevelopSplash": true, + "showProgressBar": true + }, + "watermark": { + "placement": "bottom-left", + "showWatermark": true + }, + "authorIds": [], + "authorUsernames": [], + "categories": [], + "playableDevices": [], + "extensionProperties": [], + "platforms": [ + { + "name": "GDevelop JS platform" + } + ], + "currentPlatform": "GDevelop JS platform" + }, + "resources": { + "resources": [ + { + "alwaysLoaded": false, + "file": "assets/clouds-1.png", + "kind": "image", + "metadata": "", + "name": "clouds-1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Ground.png", + "kind": "image", + "metadata": "", + "name": "assets\\Ground.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Run-1.png", + "kind": "image", + "metadata": "", + "name": "Run-1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Run-2.png", + "kind": "image", + "metadata": "", + "name": "Run-2.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Run-3.png", + "kind": "image", + "metadata": "", + "name": "Run-3.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Run-3.png", + "kind": "image", + "metadata": "", + "name": "Run-4.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Run-5.png", + "kind": "image", + "metadata": "", + "name": "Run-5.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Run-6.png", + "kind": "image", + "metadata": "", + "name": "Run-6.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Idle-1.png", + "kind": "image", + "metadata": "", + "name": "Idle-1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Idle-2.png", + "kind": "image", + "metadata": "", + "name": "Idle-2.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Idle-3.png", + "kind": "image", + "metadata": "", + "name": "Idle-3.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Idle-4.png", + "kind": "image", + "metadata": "", + "name": "Idle-4.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/town-1.png", + "kind": "image", + "metadata": "", + "name": "town-1.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/WallRight.png", + "kind": "image", + "metadata": "", + "name": "assets\\WallRight.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/WallLeft.png", + "kind": "image", + "metadata": "", + "name": "assets\\WallLeft.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Jump-1.png", + "kind": "image", + "metadata": "", + "name": "Jump-1.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Jump-2.png", + "kind": "image", + "metadata": "", + "name": "Jump-2.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Jump-3.png", + "kind": "image", + "metadata": "", + "name": "Jump-3.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Jump-4.png", + "kind": "image", + "metadata": "", + "name": "Jump-4.png", + "smoothed": false, + "userAdded": true + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 206, + "disableInputWhenNotFocused": true, + "mangledName": "CameraScene", + "name": "CameraScene", + "r": 206, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 206, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 16, + "gridHeight": 16, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.22993261354593675, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": true, + "height": 128, + "layer": "", + "name": "Floor", + "persistentUuid": "dfe30617-73ce-4f7b-a10b-088538a5f43f", + "width": 3024, + "x": -848, + "y": 592, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 188, + "layer": "", + "name": "PlayerObject", + "persistentUuid": "ded74885-118b-4e48-9502-bd9705db2ff1", + "width": 304, + "x": 496, + "y": 400, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 752, + "layer": "", + "name": "WallRight", + "persistentUuid": "f42afc91-037c-490c-9cdf-d59187bcfa4c", + "width": 128, + "x": 2096, + "y": -32, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 752, + "layer": "", + "name": "WallLeft", + "persistentUuid": "3f9c0613-c0a3-41a6-b964-b4c19ca574ee", + "width": 128, + "x": -848, + "y": -32, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "PlayerObject", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "PlatformerObject", + "type": "PlatformBehavior::PlatformerObjectBehavior", + "acceleration": 1500, + "maxSpeed": 450, + "canGoDownFromJumpthru": true, + "canGrabPlatforms": false, + "canGrabWithoutMoving": true, + "deceleration": 2000, + "gravity": 1000, + "ignoreDefaultControls": false, + "jumpSpeed": 600, + "jumpSustainTime": 0.2, + "ladderClimbingSpeed": 150, + "maxFallingSpeed": 700, + "slopeMaxAngle": 60, + "useLegacyTrajectory": false, + "xGrabTolerance": 10, + "yGrabOffset": 0 + } + ], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.2, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Idle-1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Idle-2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Idle-3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Idle-4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Run", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.15, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Run-1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Run-2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Run-3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Run-4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Run-5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Run-6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 154, + "y": 52 + }, + { + "x": 266, + "y": 52 + }, + { + "x": 266, + "y": 236 + }, + { + "x": 154, + "y": 236 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Jump", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.2, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Jump-1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Jump-2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Jump-3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Jump-4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "height": 320, + "name": "FarBackground", + "tags": "", + "texture": "clouds-1.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 320, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "height": 640, + "name": "MidBackground", + "tags": "", + "texture": "town-1.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 640, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Floor", + "tags": "", + "texture": "assets\\Ground.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Platform", + "type": "PlatformBehavior::PlatformBehavior", + "canBeGrabbed": true, + "platformType": "NormalPlatform", + "yGrabOffset": 0 + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "WallRight", + "tags": "", + "texture": "assets\\WallRight.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Platform", + "type": "PlatformBehavior::PlatformBehavior", + "canBeGrabbed": true, + "platformType": "NormalPlatform", + "yGrabOffset": 0 + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "WallLeft", + "tags": "", + "texture": "assets\\WallLeft.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Platform", + "type": "PlatformBehavior::PlatformBehavior", + "canBeGrabbed": true, + "platformType": "NormalPlatform", + "yGrabOffset": 0 + } + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the offset of the background", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + }, + { + "colorB": 116, + "colorG": 116, + "colorR": 116, + "creationTime": 0, + "name": "Movement", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change default background color", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SceneBackground" + }, + "parameters": [ + "", + "\"24;18;32\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Player animations", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnFloor" + }, + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "PlayerObject", + "\"Run\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "PlayerObject", + "\"Jump\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "PlayerObject", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": [ + "PlayerObject", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyPressed" + }, + "parameters": [ + "", + "Right" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": [ + "PlayerObject", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Force camera to stay within the boundaries", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ClampCamera" + }, + "parameters": [ + "", + "WallLeft.BoundingBoxLeft()", + "0", + "WallRight.BoundingBoxRight()", + "Floor.BoundingBoxBottom()", + "", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 0, + "ambientLightColorG": 8823888, + "ambientLightColorR": 16, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "Platform", + "type": "PlatformBehavior::PlatformBehavior" + }, + { + "name": "PlatformerObject", + "type": "PlatformBehavior::PlatformerObjectBehavior" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [], + "externalLayouts": [], + "externalSourceFiles": [] +} \ No newline at end of file diff --git a/templates/cameraParallax/assets/Ground.png b/templates/cameraParallax/assets/Ground.png new file mode 100644 index 0000000000000000000000000000000000000000..1b785ccdd3088bd976a3a2ad781c4a9f4ba6ba64 GIT binary patch literal 1224 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 literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Idle-2.png b/templates/cameraParallax/assets/Idle-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef470b47d2936580abc3616683cd04fab3fa65 GIT binary patch literal 1908 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 literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Jump-2.png b/templates/cameraParallax/assets/Jump-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c899a872b351b26032cbf382f7d21c38265d770 GIT binary patch literal 1454 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z18ah(i(^Q|t+#g#^MoBm8XlV5QD9{XbXnx>=sZ=)`~lxY0bQ?CB`cXlMTJ6Sm^2^B zh-g}N3d;U=sH>bQxqk2O+Dof*)Tiy8w_l>SwuA*}3td6~hMoIw=ggjef4}duZ@-F+ zK7RZ0qoRJjMMDDz2M9ATF&&T>S2v%XTm0?M+iRWQ*R!dxJ^1{yd#&($eFX+4B?LZQ zQdP5c<(bXP*Q-xvef0P=|KyWQlUbGh#Cqi4p9cypG3{8V;o!jH;=lmI&o~|4C!{oX z^!HEJy>Qd|8F@@k*`4RH1NFLJ0FD+yAd#Uze(x zkE{yl78VwZkhQZP6f*YJ+uyq{ z`?6vmJbt`7xOQJ;z^a2MnS}Q182W8f*e*9kW^Y6I{r43UjHKrqfStw22(|~zPKe*a zrmS~hG4my>s}IiBZYX;9TJd+$$v0)#)UIPyigtLcR>~ z@fQFEN=E}I5}*N8puw2=w`i}9#$NNA?(8YK2N{4CGQx0#x5Fy#l=lrG%|U-1S1y(P z!wi!FJFB6cb?NsvRl&9I7VKEW01iQz{0;uK?3~Z-GG_e!f040}l@V+sFbtSLctg*D zH@DTQ#ab$=-^))ZYGnYq35InJuVW74?b7#VftdxO9~gf7`(PnL6-f1lBL{l;yuLl{ zSqIE|f&wtyP`bln=gmL1Ya1o^o~)~?F`bzeu;(#K!h6l*5mOKi^l|>GbjOV=`CtwM z(-Qw@$I9Ehk)4tgBZ#hR&W?nByNVlC7Xkv{NfMMauL<_tV>~JL8;0)I=~a!pZ+`B9+4RU$w z_06YB?p?qQE()N*H*94+s?E~Sz@VVOz`?QRSpJDE$DQ>xb|rwyMNd~hmvv4FO#r)Gq3Zwu literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Jump-3.png b/templates/cameraParallax/assets/Jump-3.png new file mode 100644 index 0000000000000000000000000000000000000000..3193d64b3e4fb2bc1c1897a6f36c2b94814b3b8e GIT binary patch literal 1807 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z1KUAQ7srr_TW{|g=81TUG$ab;Jz!|$(3xndpjh-kx`5rgL*(W{AolV8Eizxbr_Zo9}l1{Q36vD=Ewq=f3!QE$;oT z*Y9QdI64|QI206^loT2ofNX|nUbiipal0F0=iQT=lfkH0Z(mh=lOcs!P3Pg z4h|sm83hFx83llNNBmp0^0!T*e?LEM`uXta@4cN&lX)F1%gw{9h5!COb^mx6hJcKn$(0_zPCR;PZikI*kN{bF{>SyORmGBP9`zdt!2TsvtE4F z|NC$T#AQGyGBJUi3v}giw#DDL7jEJX`?esVOxT9YNo2yCnq3w9%%7g$%+9`f_Osyo z`izVqSE5)qZIZ2p`FAG4+*R%eJH$S`;9j;UVG834U~pVzD|_`l_-9q!p4}e3>Ow$2 z0uk7uEG%G0KZv-K*V)>U{-LutSvf{C0P^#kS&$uEbIe324B9ZDIhMc1C!@wb{?I@2i|=TWF>bFSq~hYz>8b57E*C(7ww#v--s* zWHg@ldwcMpk;Ki0l;gsTptJ&W3&<`eqi2o>ud)Bk;{P{wGOt_NIlp!Med^xx7Cw*HA6qbu*~^ylrMY=A`;$LUpYKJ^3xWdB^!AL?t8#|gttj5B|8FS(djaBR5Na3e(4T4Nm~ zw>C5=0JTRfU}1TX$XM9Q!UA+52!jeaM<8ApRvBO{70x3d0CE5bb5ChtxFgTQ9TcB4 ziF+*Fy&PNcT2q-HE sRg}=P0Bl?X*yJ^a3hO|IgLwu$_V>z4Dizf3TY_pGPgg&ebxsLQ09I!(-T(jq literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Jump-4.png b/templates/cameraParallax/assets/Jump-4.png new file mode 100644 index 0000000000000000000000000000000000000000..8342e3de1e556aff230b4303c56834d36fb39ac4 GIT binary patch literal 1777 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z1KVOx7srr_TW{}f%o6pLXn1IH&yg!ohp9|6XHC!(zCG;?H@t$DdCRU{!?Jb{hvObT zZtwL^A~@4Hem^~Z=H0n-cKkJ=kLDMDn=|)&d*V4uD<+^l=OKKyTKyKmN< zPv5WC{n@{--a6&khu`j5r|RF!GAk%BF~RVL-h>q9NpnBFpKn`VeZr^g;QZ=E$7k=o zw|4#hatoj$C546tj*bQfAcKkNjj6=NWfgCm!t_>%tDA=g=Ox{bi}&-}!g;SMcyG)~E|0Rw`{pb) zzqnc0_TN1_8DWHS2B1D566o346!>rNoBjP}7dNxBZkAssp*v&#`FI~cGljr_Z03oz z^;g)A%d&yIgyKCN)#`%0m#mAvwkuEL&MPU&}9tFE0o{{8dc%B(vR z!CqowLe}0ddiTKI{3f^AuWmM%-b`>~JfSz^;^Wn|b>92!ZYFSXfP$i<0UVOBAhEyc z`@ZO3O_i}_wDpgvu>p%a`98S{>rQxje!3mUjxYZgOgV4Mf)i`B0}KO%r)NBzrUz0u>hB z|K7)r=IVyMY)if_`}tz_lchNf$SDQly$E%Mt+SsoO|sUIID1|F{W~8s1tw;MJuuh! zJA4!CdDE^qt+AtN;@r!RSD!3&$4IgoGBR`coL)EA75j^H+$ubduE1gaw0|FttYufO z7Fb`_C=N-m&=d$syp>FoY%O+d_5FP9U4ob;O-7#_1Ib9MNB&Sh8m^*c@w zSrZE*qZ@CB@6}xPqoOR(v;|5=+*2ADY;+XXO=w^M1q#$(phSE{i$BZlaTg;K&|EN1 zY7`P^_}!f7_^R8t*ueqhC;y7srr_TW{|g`rUC5X-Jgn`XUmzNMz!rz$Knjo1_ccJveonCh3`ax{7Ls$S`ph z@^N|jJrc?M!12@2I=MQhe*PD&Eg7a2&)ubN?%vK0v}ORnnDpfW?7g0s;(CJZ>Tr?A_%z zsqyygX8;)hHROQay}f@g@%p|zEVMY`&V0GAZVn7AE)WdVm&KxFE^)E9;o|G{-~FpT zmz3U-hFAr&@`33=jlWLI@3hM=Tkp?*@^S*iWS9*H%xZrB*j#P5-~R6_-(R2CzuzzJ z`%>J&mC-9-rl(0!fq_X0ftw7EJ&~LAobAYAVMdr6K=ibiA0F(Ho~0pik!}9IeI^D= z&83!2{`c?8!_JrIFH6hEIs$F$XkdV09c77~!BR7Js`I*8T@;Vnxrl*L5E?)rSI+H8SD@i~s2Ks@CNdbrr`o3`Y%jM;>E&u9#e<|xxQ4XM+I5>b(P+xw|SrHxI zufedCKf9!r39JvS0u)>aUfaaVmY;wA?@LC(wld}Dw+T2s1IkYyk$-Wfo;%gq1Af)#q*D zU88^NL2Zqs^Oj;;BBPRoYdAgO@3;#l56jlB~$eC1tVX5e*w^S2)@NX`SRJ`mM3 zG4I9FgB^A8@3zRbTyp+&jY-J>*-fAj-7qD=r&eR0-6*x8- z!NDRZAkZ_N+3@SaAGeqSttB!Q7J0_U|9;rDRCsUw`~Vb%z!-LMXoxykpkbG%um~9P zz+}JFxXeLjRWm4UaeyNd7$BZccwg#~CP}S(DN))p%GEvyt z9Prz1*H%_%1+Wz?ETE_YrfG1rMRB^lZd{T3rd{&f-vY-*P{w0n0lN#T_?lGDQu(gw zr|y0@?EL0@{pPfH3e)~IKNRKwxkE_-9AePeFbFe{>AD_!{@urQ=79?qJ6y5*vQD<+ zPQwqDCTu?7X_N^2eWB*n_xNA@&CW&8z(6=4VdcRMO_i^u*Oq6$j|Y~upd5rGt9!6R zt}KJ~wAqcNxjQh^!`iMU1%bmw`7ANF+q5K*oe7ELpr*vuQ%sw_I;R3-$`QrW4Lh3> zU2k!90mB;Ta3BEs6B7L#T%h1*0GE9SjGB{LK?NHN3j-sg)K`9iKi+x*OI!DY%4Sbj KKbLh*2~7ZND%)EC literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Run-2.png b/templates/cameraParallax/assets/Run-2.png new file mode 100644 index 0000000000000000000000000000000000000000..cdcc1069494be68ad1916fa50520c867f93fba18 GIT binary patch literal 1527 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z1M5mp7srr_TW{}f^b-jbX-Jgfs^(g}(O~1^t($I`KalmAGR?s=y*DgGEX0n5^P#1N zM&+cf^Mp4|-&~&d?cCh=-hQmFHtoK%-{Rbxi-JHq=nBpx{Qk4yuBrd`|7CsY0uBx= zEDVf{4h{?vP6nHlH5izb6c{)-7?_wG_zwyQFfa-VFo0DgaLM1Rzx!_1O6E@$8zs-& zKfC;3MJoe~ivt|rP#3s)@}A5_kqHt#5+dsr8X7n_V3?tpMfu#>uTK*;d4Jyh`18R% zcjoaP)8o%LofusM*Na4c@o z^}2+scR&72*wYMh0VAUT6u(fG*z2olVJN`_vK0s&JzOK@sHQ&`?^n)AsheS;xE2CRF`rShBJ?aF^ubauuMzb-p#;Rhd2uCC7|UjED3WGwv-tkc0Mil;^xwwvsIaZwnDuIHjLpnt8(4m zEiC<$V>f*l>$!BvTDoOZ|KL^v z2M1Evfh}e{^7w-Izg}6Ok}ubq6&1irke%bO{@@I2fu+n_L?--S21+ounutAu?v~42u ztrTuQZ$CKY-`;C{Pu@I+CKgCq1Vx;S12C8}Yz4L+obmf(Z|#D9+pYHV7a&^*i5+iF zx7YUbnOCg8e*85%&=L*~pu2z`QDAz+AS94*KVeE<*^S$bPh~HbC)hMYJ%~_uVSSLm zG&v5Sbtu4qrRg3xJiwj=`V$Bo_8zopr0Ay&-_W%F@ literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Run-3.png b/templates/cameraParallax/assets/Run-3.png new file mode 100644 index 0000000000000000000000000000000000000000..18c1579e9a7aff48c0a104b92ec2336bb05579e9 GIT binary patch literal 1474 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z18a$=i(^Q|t+#jW{X!i@4kSu(RdX%gXs~hdhK-97*xwv<$?Tj`b}h>_RcUIsf#RCx zrb$z6URN)YIX1KM`}vyqBCQ9kZO8wL9==mu0JLJ@zz6>F{q=9Xj&(6AC@^qvFfcJ4 z5PJJAzfAXd7ZXQE0|P`fo2O*~0}_|Rqbwl6fq})vfk8lkfrX_(u&J=RFv_G(nSn`3 z0gQoW6|*chQ?U1o_jQ9Pg(`o>;qmtQafcZBdH&BHzREGGbB1dIX?~+DvDW-zvH=T= zg98F5%)Yn(-=^vuzqq;;vnm|V+r>%sh@Zdjt7dH>(JZ+Co;4GSYRSHSy>eAy{TY!A z`}Y4dn|ZCVb26(+UEQC`M=9q1A_73gK)1v2HNl=YO}DBq?9XG5KmYPTRJeK7Jn$5w1q;&DAJT?jWju5Gyo%Q=}`F^j> z|HRFPBoA_njqh8vAJ?ue{(kVty?A{Ih#f%7m_QN6!LcE%@UoTPo&`2BbA6wEd-Ubv z&tE?;r?^!+T-=v`?8dJLDi|8BC8V(b-ozas*74)x#cR7wByOG+_s&120d+pYXa$LS zez$Ea-#v)Dz2HjTDsC32%M_q07qcnX?fJ4G{-xUQOV?MIT;5gU#avih5oh|32@+hu z0B2zVhMAy%gTXwpo?Fc=#q3MV6|(sM9c8#<``cosj)d7+MsUa?lqO6`IKo|(Yq06M z_S~)Pi@!6^vk~Be7y^z(uyQxvWBbgHK2EuRe&6-Mu4NcVJlnmJKv8x znKyn-kdcq|1Exw$n|iis?%S3yg-wM`S(*{Uguv#F-+VvbYWTA6!S#J{nFe0WkMy}f z)&LU|!Ym0@38stRpSA5ZKg$aBEkXs*p|_YOvL?T4u3h>%Ub<)Uc6)hQMzEiOp@LAi zO{iyWZr64`k8f3LfgVFnB^(@}i0)`Ou;QRZZE#KAQt=x*Qf&$1WU^2Oy5OHwhlz+ml>>iE4WCN6jVjWdr0^nP#pv$bR00B%*4GbXs zUz@wh;liiCTX*lD>GO@jh@I2X;ln>60T6I-5D-`pYOqE?_o|%AmL{MT9SslwGS|jb zBCKWFBejZcn(q>TwnG5O9Sq)2p0zW8OP&T`aU%fEZje&vHb=(;1UKiJ{6^o!2@f@H Q90wJbp00i_>zopr0HLC`CIA2c literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Run-4.png b/templates/cameraParallax/assets/Run-4.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa623608cd71792356ec6739d9fe56e77479f4e GIT binary patch literal 1587 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z1M5>y7srr_TW{|!^pgn`X?Q5*V!J4_Sz)E~l@P@W=6j7xj+!YHW<<3rX|CeG*z(0v zz++y@YOQY_mUr$|Pq#L{KV9Z1)9uKzxBe}BEHtRtg<03#SXI50>kDwv0hyB3!h8CZV&7{|!KC@28NEG!MN zEXv#-VjULs`{w5KHZX8>Krqnc*B>4~{(kn#9ND=1vme{_T_>}u%)798!4Zc$@8{;9 z{rvXjwIdA`M;TdM92j8u*~5(gMaHIv3`-qX{QY-HwX*E<;T%sr1qLQ11U}80jKuv@+Kr$zT(=G{`O%7NEx< z&Tp_gctVZaE3+VqebM(zHhz05lip5>PXPIh5u(%qs60XLphoPj?RJdY`P^!1csyP& z_|eUZFbJpw=z%ifo*$p1*_VB9ZQgn?Q?}>QV_smGDk(HHfC2=_U}9Pm`tnjm-v52q z8nt+R#Condeii2hN^*eW0;Vuq)P93Tbk}-YiM`899avbwPKDS2cGR?2Kfjd#!$-l} znsKeJ1Ta!2KbB=gH-%|a&(hZ~4&EqLczkEBj89*=07wPQ9bnZLyvjZwx+EMR*0WSU zGMYX43-|9$_r>G?Tij~|JBNu0$miYMkrjU)_%Sp9) z$KSvCP!()+lhcmdWzLTuIe(5agLE)~RYF23;ZM9lmcELNt;W)WCzvk%de)x(-=7O9 zlp$&*{;SQqklj4-@19GM)dqdv^j9CVX21wcsh(Kx+6hKZDLOk9d zQ(2YS6n9_H-?wk?{Q2cNPzyi~1Udi`{rW(M{>Wnvl;pkf4>`W^`n=@a`;8^;_wPMT zm`YY0Jds!Sf@9m%*o^Qhr~JP)EKKO};5L=jQQ;V$$9vUns+P!c(A2=-&Do}GGVRiA z;cfqFnNSkCg2I8AriUG8tOfjDG&Cpx0~dlBdKP?1Yu`Kl2?GZQDC2>s^@0NKJPeGC zz@kh*fZ>^g0f=H@0g5E_G73sSm<|pNGkS< literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Run-5.png b/templates/cameraParallax/assets/Run-5.png new file mode 100644 index 0000000000000000000000000000000000000000..eccbc4055da2d673da37a271535afc5096468397 GIT binary patch literal 1665 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z1Dmm@i(^Q|t+#jA=ZOT097yzGm2*@O^)2Aw;ks!4Kz3Gu&caRWqyjXA0&G}34;P0h z{8s5!GEm>JyxrQ^y7>9;NsE7}-@RE@r_#Q=`n?>`7PORG#J?%$uo=jOn`;)1}xK0Nxk`tJPVvLe$N z{Qmd&)#~cZZt~h&-w3yjkYN7!^u^bNJo|kzK0F?Oe*SHPn+P&l=kR5A@!iu-HVLV7 zyL~;%z1sV;j)I{86O)1h0$)fs*rZzd`jQRXf?q!)6&_s==jY?%0QnP!9pn#oe17rp z^WNatS^c#e4E(-*PMfTIm6aLjai|Z0bi-j5rQMEU%@busa(G?DdU8(Av%UA@=f|T$ zk3;syo7Fip0u?bb0=>q<;sC@C{x=2kp15KBO=xe`hJrT@DUN~yKyjeY!RkPPIzwF| zn0?8w&wYDC*0ZT_A3OW^^T8wi;rsVDFfb_ry#Vwh#FYo`r{+%(v5(_Dai>51mBW^M z7dAJ@SRFu81@y6!!hxux<{GQ?4qpFOaeSZRcD9wfOvFWy>;${*!FynE-g!IwUcNyw zd(xYwwO>Dm@Yns~hPWK;Ww4fpxF*5rFMyHFmzK>KS!EC;mt9ESf~ZZ*uyEv~A* zyf%HoTE>@ukMgiGgPiB$0JfZk1?-Rn&4VYVz2d8TyWjDgY|qx%^%4U08^N|RF@c<+ zqyXjo$v1d(e6@aFc0}1_t?Fnc0 ziu6zZYqOVKiQ8??%KHjl0gxz0n3=Hlpv9MeC3^RE0i@*{0Xr!o73&R_s5mY8^0{AG!@XFS1Z?p7O>#R`6AS_l>N~K$B5hA z%3;ky%u3kJI(BQ?gPV_~e?PdlkpCYi2iQK8Xlh9KvQcC`+u=9+6a8gH7@@8PhZ2nQ zVBNtRw}NWkHLTH%D2_jW&3uZG0Ez-A=irWPgDQTP*SvS~uWY%#Uuwde2Me`%;BnXl z@&*SJQ`5)nZDogrdP?o>Zyt0G7l9`U7O;gZEWdc&z9qHi1vG7Z_I!Pnz(r9OP;L?g z+35&MIxLKhPfs;%`0B9XZ9M}pxgmis!aU&}y6lG!1^`vVK}5bmj3CRC??;+9@0P#b z+$sP5FYiU5NpQgM!dQb(2w0>5jRTg94*kG_?2o_ZTF1fwL6C(Y%)rQ)z`04aI@>_! zB`6<(%1U6NsLHm~s)-R8uAuT1XuuZ%k%J77l9Z*T?=Q>FpsBa`EWaCqih561KbLh* G2~7Zkj0k@K literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/Run-6.png b/templates/cameraParallax/assets/Run-6.png new file mode 100644 index 0000000000000000000000000000000000000000..5915a6d9ea83a914951b4c6369a540aa7f8da045 GIT binary patch literal 1569 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCzu{m5l2IBT4go370*}aI1_o{+5N5n|x9$%E z1M6i^7srr_TW{}f^b-jbX-Jg1-*6~H!{d!c&Kivh=6j7tZb)goTye3h%SBuMP|FV) zu_-nuZ*5Xf;XiI|T%G>x_oU#5db=OL`KMxD{_FwJl7R*Z$ISZqXHP3+VPtV}U=R>s zU}0&HV=An!-Dz51|NqvkYYRAd8X7n_K$wAv>3~d=;Q!j1eK{;$K?ee*kW_(;=-@trzz^3`) z?M0QZj|y*22x%5-7L4C-%muVhP=Eo78#1@lH6F{1HIc7wtJ{AwB!0fJ5Lf}wXTU%M z;eYTF0}1gl;)Nq1IS_XMVTt8+RY$`m) zgys!~$1IC?t=RYF@y_?%%2taRksJ+*9|watKDR%W+c@Nw?>e#XOF{^9QBlR#VrY;f z`E!Pv#9C?2=l@tEcuyStc=lQda}aOW0Z>vw3ACuDiFYq#zL0haP0u`df+>jCEjyvc z36u(8K?SlkVco$QRe?5s->Rm`aUe@T*%E3JzvD#aM=LDjJ9a~wbMwbeXgGtN3`#K# zJJ}8|`mv|^VpX#yvH@ThH*5t-*10>N+snv!5a^F$ewX}%9gP`4w*|!52!dh|nEVh< zjL0&WCf2dCc_OQ#U(KHj2QB{oNPZq+!VXda3^9c2XHq>|b-U76#lJ|-|8ja>{fmT@ z$HMHOAW>2P$0;;u3_=Zby1t9fc%@YFdQnYj@`47;$SmeF zDF`qHL|$3?W1LAe*`LLl}L<#G2g&^jo<0XGh8WL(q3jsVV%-ddn^_L1nS0tDnm{r-UW|y%p3& literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/WallLeft.png b/templates/cameraParallax/assets/WallLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..ea3766a1788202a1f2efbb84bc5e4f86ca635b8f GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQjEnx?oJHr&dIz4vS)a@IEGZr zd3(pukJ(VbEzyigGayL8i%Ug{OV44p^YW)$CNYZa4I&&X$|sbi^oH~8`Cb}$!1H6a z&FdTU^47oKcfMt-ArHeGTZcv8=gf|* zKGzSk?k2O!roT)xw_fL51rzeU$A2IVW=?5?+egbk>+kYExan|K0&FF}z?0%n|99yh zfSM|^kG%aCbxS#$%>o@nKirvT0U#fsP@eaShn!Wt??>=_F=G*(8`$PmI z$T5r!hu1T^to{9Ab20PH|KZR7yxPgA4H5?W;2T5dwatw;W$kbNxH@m~R8dgK0E42Q gyJ0glOujSo{tQXpJN?5VV1zMvy85}Sb4q9e0Aw)CmjD0& literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/WallRight.png b/templates/cameraParallax/assets/WallRight.png new file mode 100644 index 0000000000000000000000000000000000000000..20463b7ddcd3c8a7251837b629bdf3632ce1af93 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQjEnx?oJHr&dIz4vX^&a9$j%?{q}!8 zyH#0LGv(H;&#OD%vi0R&hOem%4|o{v{3y6t&QkGDMy)^l`sczO8vFizD_#*N+$qX% zj^ThL!;X*tzSVp>a{71q@})BA+y83qKPb8I1Q$a(ShK|Z4r9kH-+Cs*UQd5!JNNEm z<1hvbW{~8u<=1aYOsHM*QRvM@+ek*BO>-C^Ayac2R|8d;AS7+{W9#p%J;lEwRR1^*-F(lOCK5c9H`sO|99X&9&9i7dv)!6acRu$AT^<6tSU!M1x+WaX1S zKK0@>jD*HUO@z(rGi=5*z{p5kNLB4Ze1O}g|Tfjy?cTb}FAQJt6yCvD)TK6VA z5)=i)>U3`t3i`ck64eI;0OS_;Z!D3Lq6|fC=m6zI2^3f~EF-7@XQKLal#6OnP&Jqy z$bjiZqa*9?Qy$<3dfS82g_w7c0U&7y5{McV#3dWy!(PjwD&~<*{fG0G5x~U)Ff7EDjIfcLe@55o8)|7 zOI1z@2Hdm9AELDG&`&9)B}wV<_1lsz*Ucotde+%{li#mZ^#6N9rSv^lL;whVq}5cz zDWyh2B?5qx77R5T%qc2`0B}7xMwSF8CK)AKECA@fhB_9g*?=s`W}97gxxiAhDplYq z=+HCnqlnG>tP^jV&Hce(HoM@AKtUn2Dt@=~NAp_I7;rcrzAgkL_HEEF&T$~g*!+^3 z)tvAA&~=_a1@@}}uNIqJqd{rDagULvle?Y;vW`(;RuEC8AWOn#=h|j#o;DR^nrhl3 zNaqdLtM38ODhq)4gif~MH8~wLl$O0Z3gR67yq;R1u3cFgKpG#~An6-}?k3 zLq_Fl zzNj+am>vifkcl7Mox~_8g_@F%PS;7=D5zp<0_^Au@pw0%O9b))A>>1$(nja4U2}`*6#Tb()j-BRlGCJ1fZjh$9dZJ}D z2Tmv}fu_%}!0XezL~R7#|P`YLo--+GW7hUmpyn{WF2SDz_(t zTZ7j=8=;p|cXhJV&JV2h<_i<>b zkQ!J44Y-vN2(%%}xxUd~$zdnH(rdu`BvPfZ+oNa?+RQ)OJw70|Y*U@7Xs$F}LB|xKp2CGu<>5mv1MPYM}u?)B7*G9L@%rH8Majz&_%(xmK#}cQ>a#9 zqO|Ii)u%a2ryF*$B@chkWHd6wdUt=@^i3U*a2SZ$?;8Qq(;V)NiIF~!MCE()Q3qtn zBi;_Yb-Bqw7|0Hu$TY7w9o8%Nc-pD%CaGc-+f+a5dhQ#^eJj;&x7u@J0g%wF9BfJBLE?F>8MEEiQ# z%bReKO`9fwyhR;$*K%~mn~x%tcM9a^bN!1sJo#5@%KMVn6DLuMwMLMZwB zJYoHXx{HT;B#97f1n7YJzF>$P;*WC27Y(Tc2^cXNHWoh^a`g#0b$cVr*i$Z$OUP?X zQ+^1r#pvSSHhiUMll0amnvCHKnpZ9ENeyyeGw%lke#8fzb*vZm0c2y>`zUo-f)r|A z1o{P)Pk62Vey`c)*(J>FP|w*w?+o@B%ytuJ?rud4JHT1GspRA#j=x zBpZ&ZX$1iU{A^;B0OAX=DF2K;4(yNW*Gns$C0DXEA_KYM#mP6>aRRnFBQ-UmzY^nG z%}$5;5dL$PZU@=EvG&V4OOAu5n}R`MzQK71xWn6dc<4Z{@Wq$lCP%@VKK>y-3@FQ= z24T7;dg0eD@pt)SW1teG9?P@yy506P+PUly5dLv<+RdPTl~~~b0>>_eO1U~;V@xco z5srHLYsvP!5TGh1yzb<)eflJy2~Y>r0H1E&hqudtzI{pWV^IG90!FR(dX9+Q7O*UN zNig^Z=i8(r2YZ*GOKreKd7vOGxpaK!{)jbAYEL&f)qO(Da+RwiF zIfkQ1Gc^2Lj2z_XAX$CyevdmeLMGIVW#gW2I$Teh)KIf7 z>l_E1=@<`0yj*$aO+MHbPHCfd=*28YL!DmyS$q7c#vpeSOZ|zcx%@NEJi23SccXEg z-MstGO8V(DQg`@1K&g=hP|4hNATppMuJ-^Vi=RcFch?<@s>zmg?_&~1x4Sfd4t1xB ze#t=B7pTH)Y2}9}LVXywHZZEzZg0D9DG~5aNo)BASudQXg$F zG!yU<&zrba13nps`pF@kQSl1mg$$8{)e^weBf%c%_a|P!X|RjvKN# z>n$NmUEjXWh*Xt&8nMYvL8lOG&t#mgno^>dZ)I;GdRJB*z%AX*6LR;Os)ec+h04`w zaftY!HCYjTp)g}<^n~ENmOYKQ(AHPe?tIh_g4@v?qS;X5HpoXdV)tV+ogtsv-pyBR z-e5H!$y|~h!fcX^S20cM#7k;--KmfB4BGeWCYv|QGA6L|slA;kDF<49tg^c-d}*?2 zosk;UUyaYR@G6|V^;gRqx89LvBfGt0r9aHPPD?+{>24Nil$oaep8jk}^FFsQl@^>s z>#dYl^x&2Bw_3`HHm9MRoDM662dRQ?beA=_#;(SNRVj)}>JN?DW7(3Gd3$K51BV5U z;fDK<--sBT5Q_}vE;mnKmr$wTSW1=(Ug+q;uVmpOYy6DHY1Zi)#W=8^>h4T=<3L1b z1=XD`q4d-lIjmG`dC_J3L$T)w*eMv**`-Z(^!d7|4uDTwNW)nX-zf1Zjdi|kYZ)4~1nrwww;Uv>*HHy6V zQ>u-X4tBnyp+cpe!arLX{()**pFFFUXV^t{D$N$>{k3t1OiHVO>=AzXhJ}1eppgpW zy6Z}pD;P~mZI`s#S*}re=K12x(C2C>*!;(~2N?G?&}k#{=E?*vk33`LORm0Uo+3H* z=M9qjMKQgVjPEy{=NRIbQP^*S-HAKljALCyY<0%XG=Wf`m#I6cu7$oP9Q9T;_R6i; z_dif)RoFc>;{NsUYGiKNF3w$Hc?8r<_ zRqRkPKDidQz6mSiixNNgPSWof0*CR-pM8H=Knk!jC+V^Ft)UXCz(j|$G*R|C=i4X& z*&YTiQ#JZ9>q)W5A#S;(Ds+8N_xaoQrL9dV?^ZIx_9U95nLFg1hU&sDlO-j%lHsZp z)*VwGYwW0MVO$>fAANO5p5OOzBuBJUu`&<7*QGrojFU^%T`8aL_jnp9WLJvoDC2?c z9b{PlF~;w!Z6pW!N|3lwa`VLq(5C&SM||_7_<$p+kgwUnR%Gm2;pz_w@{c}u z#Pe=pXLzGX8aPVp?51)Z_%gwHj+NrDnm5ZQ%Nz{{dvMWa_+?(oT-(Q2=SknwgPks6 zTEz9Li2gQAW3xL?iY{G%6J_0dVvjzaq&#O-`T^m`r4iH|oB@u=Mr0hAUBE@Smj}5E z;TLzw=61T!-B%g%ay6q@tCqq!m<0yq_g}Hb3+3vC)nP?;=N{n;A3oIAgNc?|+}Eap z&GP%L#~UTKl}dh~xW`j=LN45w$*OY;u`)Y&JQ6KJ1|s87Vi?uDr2{Bg(T>$flX~A} zrErsMpqVEYEN6`CcE4*3@4qa$xrVi*O%kjc5B3+6JzB--&z=)?RA)HW;in6^9Rl@f zIKMZFY+$9!UOOI~jtFg5c3|{E!G~_@7o8~|=Hm-2@t-sq-?n2-{Nbkh|MO;2Vr7n~ zIknt^Uqes1@EWs*K1c>J;sKLj{S_R3ry};L4@88KQtWzjp3wd zIp;MUyNAu`6RfRbsOo1?$adXN$9Xq&_Az%h;_bHm^Po65BJNsnPB?Edy$SpAm z9Ql>1Rd6QTpUSzpg-<_aAk9~USXmnNgw6xS%eU;DuCWW%fdKcM*Xk^GwPBZ{-E*eW zX*LK-t#HSEkd1dDWwhhguF0L^bu8&$j&{AKquBECAvl*|6j_Z^!1cJ!JnB20Mze+F zYD60~RdMO5EakMW$_bi4pu7ANa`M@(BvA(cYF2Vh7P#J%;vUI(xM4TUwoqekv2Th# zU^`>A*P}{=5F*(;U$Bpk^a?Tw)nmYZ4$+C9Rk9TA#8WPEt)^;1Zz_!5DG7l@^(;-N z*t1zP$HmNNUFu+(7AlmNjS9f!Zi|&26P4<%%JLSnEVu)Ri5I|=NKlhp||-5|lx@bLWpwx~KMDV+cgW~C=yX@wK6 zT@~4q&VBB_gJJzDoNc#TPgtA4lg?e|+8Iyp%iD0k&a;(&HNuKR5k+&SwTur>!jATM zN20Bhc$M#1htVg(SoZOLKDJv}HvRaI4oBSq2Bs5|tuEe#$JU`mROjo|6II+N4a7!` z(Z$@-t~kQ`27j*F)oUpiRCBtuW0lovWwy@T()S$f3H9ac&D$+Guyz^7z-YJu4UK3L z-U^dLW8soMZFi3Wr*r6X>M7}R8vF$7PEwbEZDBygc(;pb64go*zi$oOvL*QfbIDrH z2Yn7wJryisfqXSo?-+$`DHp=kyWW1DwYx@eUVYr!tJ9+W3fS>rZ1BefG3?D#K75Ap%i0YrD$bUvLWc%l6`^({N^)Ks9)E|4qdTb(?9?KUPc`^pbN#0KgQ zUDRtW46MfBdh(Jwxol0u_REs7F}-2^`|3q)=I^p3GNDT_XxTxSZu8io?Ww^UgDs$& z5Qwe;Kt13e6mlP?vEbut%NE6)%8`Hk+RDgt9UxWYX-p)VQj+o+n~GdOF7H@Q1C_-M z28>NVr&5Mq&VM=?ZIK1Jt08P^(Nz{bFXX~dCm1rVA9i;D$Y-{Zj~dp{76S|$Egrai zA*x_(+C3g*&P`Y*a>Kcsvz(})9#sL8qx=<)RNIx(n@6qh)PATSD(KD|3mHkML@zW7GX_{{^KCm8UI`(g>8!`D%3l=K`xvi z)xDexCxHU6-EBVFB2fYExml)|-atZR?Kk$Qt2obG%_5_~&#Zmg&#Dxu18Dj2W+W`P zIv$|o&n$?wCh!lctqmZuCHoi6-D!05;(Dut+>J4ds#7L~^;6itmy4RH=Qc>vYnd7& zGpFR&Ox?0AU>kGC0?x{-$&W0e^~$Rvs`urb_7tzTY9II8M;LOs|ItSuZZDU$W9Lh1 zZLZA`kF@QlmUf33E#|o7B|Sosit6sRe&G}wPgsu@f`oT$qkG}ZuCdhEX?`9}M`?RA zBXT0#Dr!T^G~N++(H&ywA0ToIKR=L%GNnU1rgX5ThMTBgAxX%SzcZPCRxdpNq8%g% z*wQ@i?!2y-tnqKEf_fY0k&zcJLY_HaO6D$r8csWZOc4UE4}AxGlK)VdyBBl>gT|l> z?Tm*`8yf!AEr#bNZBxO^5&ax>izSTZaO%b%-_O{zFOHrnstXckKG>UYZ*Rm~x{c3g zG<*ZV{j1Skfa!(?=3Cl-^_W*|(V%GN?}o7-++B&`Ee1C1VV>p(_*q)|G%nJ!TMc7> z>;#vxiuHM4uC>E;xcGBEu4kIkM6}D;Yge^hOJ;0jyPq=Hb#--{6`!|}p5<^6ELg^Q zX1#KF|1!m`=sqH7*>0b=4YeIgAibh+ks0a`zoH3-G?L~rrztp>;m)Zc|_6YizJ31Pa+xkkagOx@Xq(Vgt-xtfI{Ruk^&QnL6OP8g`l zc+0-hRFv@?*noe zhSU#uaD@<9AD3Pc*5AlfW>c?qhn?gT+uXc-mRg@Ozmh7XCM?dp+LjDzn54?)exO$w z-mhZjC_O60@I5Dljm9-}R_1R-)MqFgmG?z~*hg*^kzngBe1Aq~Y819M<-}3O*B@p^ z%2})mxMuH=9pqfdbBsNr0=bU9aX_#B7tXeVaT5XpfN|Z8zKsrZ13Xx9@r*X-VIk)h z2*@zD9LTIY&Trs>ssaM&n-&cL=CdYxFJSoqj*SlOS8Zimr1^07TA)!F$R#f4isH8! zXJ&G*3Eqe21PO(%^Gxz4JjXEft#DC4?9xixZ&Y@Q`z@r$tn|Y~SL;1d@e@4+hWD}v zBA)%F5#M-{|HJ?zHLm+nuz^bwS(jqVsAug_bDUb9;A}@2oG)Axt1-(FcsP1t!Z~Ek z;?Kb)-Po@?Q)p?T(iTcXPx<$dZz{&PdLid16;0m%*tLerWbWal8#qn%+N^oqFcIj8 zXMTr1r9T^Oxdj#_gUvC$6Gm?=o@d35I{D1x=hswKK~LOJ75G!9r^C_lcv+fsVUe`9 zc}KglrAe%}7)PEj_J~sNCd8?Dgs^x_*9^&VzSe6mQ)26Z@|CXI8SrJ zrL~ELGl{x5aJ2Z04$rrmU#cxt=e@t$VsFdRNKbk;hj5$BCAY{4sYDw#UNq6G@Grkb zyg$)3{FQ00)i!L7ll_#dfoweUn+-pnUt}vk)}*`GBh4Z6zbs98Qx}wodsLpXR;YKK zB^Bgq#@=GYkZJs_heF{U3((Dx;rLverGeASYJu=_$lq+(EXS_O9vB|OEEes*9pbC* z={jds-I^JEfxso0rHSdC>%kkcaP3AoJLDDdbNxFd-IGSh_Up;D@UHYy55^CCS6Gx= z6_jXT=Q+%>gIAagrg>(Qq<;%1HCq&C*pyQ><+8$MC0H4o(ii|N$ zVKLf7?kowj{kOH!Srr*?AUCALyG>{kE)yZi=7U}ez)T+%tj_^c(bGBTlN*SI9MwMH z)9Uanc%2JvnLQQ+J>&y1)%`?QP5$wOukcomdc z;4P__*xvTC?}tr);BcZ=0*OwhrRJ^(ueAexTmF;E6bU?Z4N9&$&R z@-PAW_Y%!?zK;D74sTX^?+}2F2z32%U@15}h3^%gv(G%Mb~`HmUMF-nd1@VFXKZ{J z-Rlr91ttNyvxcMu{S71S@vsj7|DzxAg=+xSNC0`^!E$_=9V>JI_vvoZ#4kHFb?4Pd zk(Pb4&NwCl?mV=o;WZARZq~jis|yC{JE4SuSp|uyc=sJ@|&jQfX zAv?ghxF>OE`x0IsS?d&re4N91?XhjOR(GL#-I0i@eWHWXDtO6>Jsau;19}?Bg=>A>pjg>*arxW3`av6?X|Pa)SwVR1kXRJUj@|ih=2q)PC%PLD z48|wL(gBezbe&}!nawHYJp*LyU)~LbI%zj1q{8w?7*D{)nxe29qcGr0|AV)6ACMJ3 zdhK}1yn`7J-gLklV{d>2nWBC=?sYF@3yQZ#*!3M=G-KJ4oe5jG`OoK)XZVk&qh%@n zsCRKXP(S>0?^g!d7+$&BIngT%+L!>B?4*uelTRcI$e97=rF7X1`XjkI{x5TXyJ40a zLot$qZZV1>2K1eL_@Lsu$%2tmN9i{QOQH3ilO;nx-4Besc5R)x`R zuU_Fw%J&pvXZd37Pv*aU$7K97_38$PKaE= z;Rh-q6_=ZyM3c>(V;VIpR;&aZ4prFGr3y#<87=$mU7OvO{JYwLJ3$M1p z9Y2@@!gFWSe-YU0T+POx?7Xx{^Cwqnfsj4{vo#u+jeNs~F4E#+{G)Z_jdGxI-VbCf zcle{>hh0I4d7-Am1T+j7FdzcS@8wv~ zG=s=B- zZcw|yID#@vKd?RMrY`NU+s^TLsyxC^o0K_L^SEeP-9uc8jnQ%AGF3RU(0YRjD zySE|21P_96H81c|1AT#G6WE9-UX~%cdnQ(?2&vrVgAXZUCg z;TjFO!%Ed*P?y<6G0yVVqQh86iepePBX>?6KH8z-!)!V#BG3;q+&v`es21!N{?XCT zpC#cPMQ8}90{X+y&s~$KJ{&IkyKC~^Bzn7qv-pRgNCL_IUl}MAOCZ^I7fvA}km7e8 zonM8&G*G03U)w)P!Yir>96D<8XJ+)PaBmzTkidJCNJmu(^mBLU{CdAP0@9IK0{z^h zaJskd{{i8CL%p};U(x*DBocoWivf%OF9{#e=Kp~3zXG(k?qAXTuL!?07WX?iEz&7} VS6t^N0QmR9vx^se^$d6Ge*;cW2crN0 literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/assets/town-1.png b/templates/cameraParallax/assets/town-1.png new file mode 100644 index 0000000000000000000000000000000000000000..164685923f982f5a225d5b7c891e9a080d085c8d GIT binary patch literal 13570 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 J)4xyN|G&R%x%B`5 literal 0 HcmV?d00001 From fdf71a6cd39a68e1ba510c111026a44046171623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:20:40 +0100 Subject: [PATCH 038/208] Rename game and fold group --- .../{CameraExample.json => game.json} | 67 +++++-------------- 1 file changed, 15 insertions(+), 52 deletions(-) rename templates/cameraParallax/{CameraExample.json => game.json} (95%) diff --git a/templates/cameraParallax/CameraExample.json b/templates/cameraParallax/game.json similarity index 95% rename from templates/cameraParallax/CameraExample.json rename to templates/cameraParallax/game.json index 6284758..1c50874 100644 --- a/templates/cameraParallax/CameraExample.json +++ b/templates/cameraParallax/game.json @@ -934,6 +934,7 @@ "colorG": 116, "colorR": 116, "creationTime": 0, + "folded": true, "name": "Movement", "source": "", "type": "BuiltinCommonInstructions::Group", @@ -958,9 +959,7 @@ "type": { "value": "DepartScene" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -968,10 +967,7 @@ "type": { "value": "SceneBackground" }, - "parameters": [ - "", - "\"24;18;32\"" - ] + "parameters": ["", "\"24;18;32\""] } ] }, @@ -995,10 +991,7 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [], @@ -1010,10 +1003,7 @@ "type": { "value": "PlatformBehavior::IsOnFloor" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [ @@ -1021,10 +1011,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "PlayerObject", - "\"Run\"" - ] + "parameters": ["PlayerObject", "\"Run\""] } ] }, @@ -1035,10 +1022,7 @@ "type": { "value": "PlatformBehavior::IsJumping" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [ @@ -1046,10 +1030,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "PlayerObject", - "\"Jump\"" - ] + "parameters": ["PlayerObject", "\"Jump\""] } ] } @@ -1063,10 +1044,7 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [ @@ -1074,10 +1052,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "PlayerObject", - "\"Idle\"" - ] + "parameters": ["PlayerObject", "\"Idle\""] } ] }, @@ -1088,10 +1063,7 @@ "type": { "value": "KeyPressed" }, - "parameters": [ - "", - "Left" - ] + "parameters": ["", "Left"] }, { "type": { @@ -1105,10 +1077,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "PlayerObject", - "yes" - ] + "parameters": ["PlayerObject", "yes"] } ] }, @@ -1119,10 +1088,7 @@ "type": { "value": "KeyPressed" }, - "parameters": [ - "", - "Right" - ] + "parameters": ["", "Right"] }, { "type": { @@ -1136,10 +1102,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "PlayerObject", - "no" - ] + "parameters": ["PlayerObject", "no"] } ] }, @@ -1220,4 +1183,4 @@ "eventsFunctionsExtensions": [], "externalLayouts": [], "externalSourceFiles": [] -} \ No newline at end of file +} From 8a7491646de21ec1d28e4153bd3a4c861f62b6c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:27:27 +0100 Subject: [PATCH 039/208] Add cameraParallax --- tutorials/in-app/cameraParallax.json | 642 +++++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 tutorials/in-app/cameraParallax.json diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json new file mode 100644 index 0000000..52ec6d4 --- /dev/null +++ b/tutorials/in-app/cameraParallax.json @@ -0,0 +1,642 @@ +{ + "id": "cameraParallax", + "editorSwitches": { + "Start": { + "editor": "Scene", + "scene": "cameraScene" + }, + "SwitchToEvents1": { + "editor": "EventsSheet", + "scene": "cameraScene" + } + }, + "availableLocales": ["en", "fr", "es", "pt"], + "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json", + "initialProjectData": { + "cameraScene": "CameraScene", + "player": "PlayerObject", + "farBackground": "FarBackground", + "midBackground": "MidBackground" + }, + "endDialog": { + "content": [ + { + "messageByLocale": { + "en": "# You've finished this lesson!", + "fr": "# Vous avez terminé cette leçon !", + "es": "# ¡Has terminado esta lección!", + "pt": "# Você terminou esta lição!" + } + }, + { + "messageByLocale": { + "en": "Well done, in this tutorial you've learned:", + "fr": "Bien joué, dans ce tutoriel vous avez appris :", + "es": "¡Bien hecho, en este tutorial aprendiste:", + "pt": "Bem feito, neste tutorial você aprendeu:" + } + }, + { + "messageByLocale": { + "en": "- How to create a layer", + "fr": "- Comment créer une calque", + "es": "- Cómo crear una capa", + "pt": "- Como criar uma camada" + } + }, + { + "messageByLocale": { + "en": "- How to add an extension", + "fr": "- Comment ajouter une extension", + "es": "- Cómo agregar una extensión", + "pt": "- Como adicionar uma extensão" + } + }, + { + "messageByLocale": { + "en": "- How to use make Tiled Sprites move at different speeds", + "fr": "- Comment utiliser les Tiled Sprites pour faire bouger des objets à différentes vitesses", + "es": "- Cómo usar los Tiled Sprites para hacer que los objetos se muevan a diferentes velocidades", + "pt": "- Como usar os Tiled Sprites para fazer com que os objetos se movam a diferentes velocidades" + } + }, + { + "messageByLocale": { + "en": "You can keep adding stuff to this game or publish it!", + "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!" + } + } + ] + }, + "flow": [ + { + "id": "Start", + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "Let's go!", + "fr-FR": "C'est parti !" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "This game is a simple platformer.\nYou can move the player with the arrow keys.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue." + } + }, + "placement": "right" + } + }, + { + "id": "OpenPropertiesManagerForExtension", + "elementToHighlightId": "#main-toolbar-project-manager-button", + "nextStepTrigger": { + "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions" + }, + "tooltip": { + "title": { + "messageByLocale": { + "en": "First, let's improve this game by adding a nice camera effect when the character moves." + } + }, + "description": { + "messageByLocale": { + "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**." + } + }, + "placement": "right" + } + }, + { + "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions", + "nextStepTrigger": { + "presenceOfElement": "#project-manager-extension-search-or-create" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Extensions** tab.", + "fr-FR": "Ouvrez l'onglet **Extensions**." + } + } + }, + "isOnClosableDialog": true, + "skippable": true + }, + { + "elementToHighlightId": "#project-manager-extension-search-or-create", + "nextStepTrigger": { + "presenceOfElement": "#extension-search-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the extension store", + "fr-FR": "Ouvrez le **Magasin d'extension**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#extension-search-bar", + "nextStepTrigger": { + "presenceOfElement": "#extension-list-item-SmoothCamera" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Search for the **smooth camera** extension.", + "fr-FR": "Cherchez l'extension **smooth camera**." + } + } + }, + "isOnClosableDialog": true, + "skippable": true + }, + { + "elementToHighlightId": "#extension-list-item-SmoothCamera", + "nextStepTrigger": { + "presenceOfElement": "#install-extension-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Click on the extension.", + "fr-FR": "Cliquez sur l'extension." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#install-extension-dialog #install-extension-button", + "nextStepTrigger": { + "absenceOfElement": "#install-extension-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Install the extension in your project.", + "fr-FR": "Installez l'extension dans votre projet." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#extension-search-dialog #close-button", + "nextStepTrigger": { + "absenceOfElement": "#extension-search-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Close the store.", + "fr-FR": "Fermez le magasin." + } + } + } + }, + { + "elementToHighlightId": "objectInObjectsList:player", + "nextStepTrigger": { + "presenceOfElement": "#object-editor-dialog" + }, + "tooltip": { + "placement": "left", + "description": { + "messageByLocale": { + "en": "Now let's add it to our player. Right click on **$(player)** or use the 3-dots menu and select “Edit behaviors”." + } + } + } + }, + { + "elementToHighlightId": "#behaviors-tab", + "nextStepTrigger": { + "presenceOfElement": "#add-behavior-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "See the **behaviors** of the **object** here.", + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#add-behavior-button", + "nextStepTrigger": { + "presenceOfElement": "#behavior-item-SmoothCamera--SmoothCamera" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add the **Smooth Camera** behavior we just installed." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#behavior-item-SmoothCamera--SmoothCamera", + "nextStepTrigger": { + "presenceOfElement": "#behavior-parameters-SmoothCamera" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Smooth Camera** behavior.", + "fr-FR": "Sélectionnez le comportement **Smooth Camera**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#behavior-parameters-SmoothCamera #FollowOnY", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's make it only follow the X axis (Horizontal) by **unchecking** this checkbox." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#object-editor-dialog #apply-button", + "nextStepTrigger": { + "absenceOfElement": "#object-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "That's it! The camera will **follow our player horizontally**!" + } + } + } + }, + { + "elementToHighlightId": "#toolbar-open-layers-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-layer-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Next we will add the background. Open the **Layers** panel.", + "fr-FR": "Ensuite, nous allons ajouter le background, ouvrez le panneau des **calques*." + } + }, + "placement": "bottom" + }, + "skippable": true + }, + { + "elementToHighlightId": "#add-layer-button", + "nextStepTrigger": { + "presenceOfElement": "#layer-1" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's **add a new layer** for our background.", + "fr-FR": "Créons un **nouveau calque** pour notre fond d'écran." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-name", + "nextStepTrigger": { + "valueEquals": "Background" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the name to **Background**.", + "fr-FR": "Changeons son nom en **Background**." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-selected-unchecked", + "nextStepTrigger": { + "presenceOfElement": "#layer-1 #layer-selected-checked" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's select this layer as the **default layer** to add objects to." + } + }, + "placement": "left" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-drag-handle", + "nextStepTrigger": { + "presenceOfElement": "#layer-0 #layer-selected-checked" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now let's **move** this layer **below the Base Layer**, so that the background elements will appear behind the player.\n\n**Drag the handle below**" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "objectInObjectsList:farBackground", + "nextStepTrigger": { + "instanceAddedOnScene": "farBackground" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Perfect! Now let's add **$(farBackground)** to our game by dragging it to the center." + } + }, + "placement": "left" + } + }, + { + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "I'm done", + "fr-FR": "J'ai terminé" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "See the black square in the middle of the scene? This is the **camera view**.\nIt's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black square\n\nWhen you're done, click below." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "objectInObjectsList:midBackground", + "nextStepTrigger": { + "instanceAddedOnScene": "midBackground" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's do the same with another background to give a parallax effect! Drag **$(midBackground)** from the menu to the canvas." + } + }, + "placement": "left" + } + }, + { + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "I'm done", + "fr-FR": "J'ai terminé" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "Same as for the **$(farBackground)** object, resize the **$(midBackground)** object so that it covers the whole black square.\n\nWhen you're done, click below." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "editorTab:cameraScene:EventsSheet", + "nextStepTrigger": { + "presenceOfElement": "#events-editor[data-active]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of the $(cameraScene) scene." + } + }, + "placement": "bottom" + } + }, + { + "id": "SwitchToEvents1", + "elementToHighlightId": "#events-editor[data-active] #event-1-actions #add-action-button-empty", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add an action to make the first background move. " + } + } + } + }, + { + "elementToHighlightId": "objectInObjectOrResourceSelector:farBackground", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-TiledSpriteObject--XOffset" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(farBackground)**.", + "fr": "Sélectionnez **$(farBackground)**.", + "es": "Seleccione **$(farBackground)**.", + "pt": "Selecione **$(farBackground)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-TiledSpriteObject--XOffset", + "nextStepTrigger": { + "presenceOfElement": "#parameter-1-operator-field" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the action **Image X offset**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-operator-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want the background to follow the camera, so let's select **= (set to)**." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "CameraCenterX()/8" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's make the far background move way **slower** than the camera,\n\n Enter `CameraCenterX()/8`." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Nice! Now let's save this." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#events-editor[data-active] #event-1-actions #add-action-button", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's create the same action for **$(midBackground)**!" + } + } + } + }, + { + "elementToHighlightId": "objectInObjectOrResourceSelector:midBackground", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-TiledSpriteObject--XOffset" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(midBackground)**.", + "fr": "Sélectionnez **$(midBackground)**.", + "es": "Seleccione **$(midBackground)**.", + "pt": "Selecione **$(midBackground)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-TiledSpriteObject--XOffset", + "nextStepTrigger": { + "presenceOfElement": "#parameter-1-operator-field" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the action **Image X offset**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-operator-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want the background to follow the camera, so let's select **= (set to)**." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "CameraCenterX()/3" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\n Enter `CameraCenterX()/3`." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Nice! Let's close this." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#toolbar-preview-button", + "nextStepTrigger": { + "previewLaunched": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**." + } + }, + "placement": "bottom" + } + } + ] +} From 17b48d23879ef88612effe8cbf3b49a201691ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 9 Mar 2023 18:04:09 +0100 Subject: [PATCH 040/208] Update tutorial --- tutorials/in-app/cameraParallax.json | 180 +++++++++++++++++++++------ 1 file changed, 140 insertions(+), 40 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 52ec6d4..4e6015f 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -77,7 +77,9 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "Let's go!", - "fr-FR": "C'est parti !" + "fr": "C'est parti !", + "es": "¡Vamos!", + "pt": "Vamos!" } } }, @@ -85,7 +87,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game is a simple platformer.\nYou can move the player with the arrow keys.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue." + "en": "This game is a simple platformer.\nYou can move the player with the arrow keys and jump with space.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue.", + "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", + "es": "Este juego es un simple plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruebalo** con el botón **Previsualizar**.\n\nCuando estés listo, haz clic en este botón para continuar.", + "pt": "Este jogo é um simples plataforma.\nVocê pode mover o jogador com as setas e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar." } }, "placement": "right" @@ -100,12 +105,18 @@ "tooltip": { "title": { "messageByLocale": { - "en": "First, let's improve this game by adding a nice camera effect when the character moves." + "en": "First, let's improve this game by adding a nice camera effect when the character moves.", + "fr": "Tout d'abord, améliorons ce jeu en ajoutant un joli effet de caméra quand le personnage se déplace.", + "es": "Primero, mejoremos este juego agregando un bonito efecto de cámara cuando el personaje se mueve.", + "pt": "Primeiro, vamos melhorar este jogo adicionando um efeito de câmera legal quando o personagem se move." } }, "description": { "messageByLocale": { - "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**." + "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", + "fr": "Pour cela, nous allons installer une **extension**.\n\nOuvrez le **Gestionnaire de projet**.", + "es": "Para esto, instalaremos una **extensión**.\n\nAbre el **Administrador de proyectos**.", + "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**." } }, "placement": "right" @@ -120,7 +131,9 @@ "description": { "messageByLocale": { "en": "Open the **Extensions** tab.", - "fr-FR": "Ouvrez l'onglet **Extensions**." + "fr": "Ouvrez l'onglet **Extensions**.", + "es": "Abre la pestaña **Extensiones**.", + "pt": "Abra a guia **Extensões**." } } }, @@ -136,7 +149,9 @@ "description": { "messageByLocale": { "en": "Open the extension store", - "fr-FR": "Ouvrez le **Magasin d'extension**." + "fr": "Ouvrez le **Magasin d'extension**.", + "es": "Abre la **tienda de extensiones**", + "pt": "Abra a **loja de extensões**" } } }, @@ -151,7 +166,9 @@ "description": { "messageByLocale": { "en": "Search for the **smooth camera** extension.", - "fr-FR": "Cherchez l'extension **smooth camera**." + "fr": "Cherchez l'extension **smooth camera**.", + "es": "Busca la extensión **smooth camera**.", + "pt": "Procure pela extensão **smooth camera**." } } }, @@ -166,8 +183,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Click on the extension.", - "fr-FR": "Cliquez sur l'extension." + "en": "Click on the extension **Smooth Camera**.", + "fr": "Cliquez sur l'extension **Smooth Camera**.", + "es": "Haz clic en la extensión **Smooth Camera**.", + "pt": "Clique na extensão **Smooth Camera**." } } }, @@ -182,7 +201,9 @@ "description": { "messageByLocale": { "en": "Install the extension in your project.", - "fr-FR": "Installez l'extension dans votre projet." + "fr": "Installez l'extension au projet.", + "es": "Instala la extensión en tu proyecto.", + "pt": "Instale a extensão no seu projeto." } }, "placement": "left" @@ -197,8 +218,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Close the store.", - "fr-FR": "Fermez le magasin." + "en": "Let's close this dialog.", + "fr": "Fermons cette fenêtre.", + "es": "Cerramos esta ventana.", + "pt": "Vamos fechar esta janela." } } } @@ -212,7 +235,10 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now let's add it to our player. Right click on **$(player)** or use the 3-dots menu and select “Edit behaviors”." + "en": "Now let's add it to our player.\n\nRight click on **$(player)** or use the 3-dots menu and select **Edit behaviors**.", + "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nCliquez droit sur **$(player)** ou utilisez le menu à 3 points et sélectionnez **Modifier les comportements**.", + "es": "Añadamos ahora la extensión a nuestro jugador.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", + "pt": "Agora vamos adicioná-lo ao nosso jogador.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**." } } } @@ -226,7 +252,9 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", + "pt": "Os **comportamentos** do **objeto** estão nesta guia." } }, "placement": "bottom" @@ -242,7 +270,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add the **Smooth Camera** behavior we just installed." + "en": "Let's add the **Smooth Camera** behavior we just installed.", + "fr": "Ajoutons le comportement **Smooth Camera** que nous venons d'installer.", + "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", + "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar." } } }, @@ -257,7 +288,9 @@ "description": { "messageByLocale": { "en": "Select the **Smooth Camera** behavior.", - "fr-FR": "Sélectionnez le comportement **Smooth Camera**." + "fr": "Sélectionnez le comportement **Smooth Camera**.", + "es": "Selecciona el comportamiento **Smooth Camera**.", + "pt": "Selecione o comportamento **Smooth Camera**." } } }, @@ -271,7 +304,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make it only follow the X axis (Horizontal) by **unchecking** this checkbox." + "en": "Let's make it only follow the X axis (Horizontal) by **unchecking** this checkbox.", + "fr": "Faisons en sorte qu'il ne suive que l'axe X (Horizontal) en **désélectionnant** cette case.", + "es": "Hagamos que solo siga el eje X (Horizontal) **desmarcando** esta casilla.", + "pt": "Vamos fazer com que ele siga apenas o eixo X (Horizontal) **desmarcando** esta caixa." } } }, @@ -285,7 +321,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "That's it! The camera will **follow our player horizontally**!" + "en": "That's it! The camera will **follow our player horizontally**!", + "fr": "C'est tout ! La caméra va **suivre notre joueur horizontalement** !", + "es": "¡Eso es todo! ¡La cámara **seguirá a nuestro jugador horizontalmente**!", + "pt": "É isso aí! A câmera **seguirá nosso jogador horizontalmente**!" } } } @@ -299,7 +338,9 @@ "description": { "messageByLocale": { "en": "Next we will add the background. Open the **Layers** panel.", - "fr-FR": "Ensuite, nous allons ajouter le background, ouvrez le panneau des **calques*." + "fr": "Ensuite, nous allons ajouter le background, ouvrez le panneau des **calques**.", + "es": "A continuación, agregaremos el fondo. Abre el panel de **Capas**.", + "pt": "Em seguida, vamos adicionar o fundo. Abra o painel de **Camadas**." } }, "placement": "bottom" @@ -315,7 +356,9 @@ "description": { "messageByLocale": { "en": "Let's **add a new layer** for our background.", - "fr-FR": "Créons un **nouveau calque** pour notre fond d'écran." + "fr": "Créons un **nouveau calque** pour notre fond.", + "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", + "pt": "Vamos **adicionar uma nova camada** para nosso fundo." } }, "placement": "top" @@ -330,7 +373,9 @@ "description": { "messageByLocale": { "en": "Change the name to **Background**.", - "fr-FR": "Changeons son nom en **Background**." + "fr": "Changeons son nom en **Background**.", + "es": "Cambiar el nombre a **Background**.", + "pt": "Mude o nome para **Background**." } }, "placement": "top" @@ -344,7 +389,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's select this layer as the **default layer** to add objects to." + "en": "Let's select this layer as the **default layer** to add objects to.", + "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets.", + "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", + "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos." } }, "placement": "left" @@ -358,7 +406,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's **move** this layer **below the Base Layer**, so that the background elements will appear behind the player.\n\n**Drag the handle below**" + "en": "Now let's **move** this layer **below the Base Layer**, so that the background elements will appear behind the player.\n\n**Drag the handle below**", + "fr": "Maintenant, **déplaçons** ce calque **en dessous du calque de base**, de sorte que les éléments de fond apparaissent derrière le joueur.\n\n**Glissez le curseur en dessous**", + "es": "Ahora, **mueva** esta capa **debajo de la capa base**, para que los elementos de fondo aparezcan detrás del jugador.\n\n**Arrastre el control hacia abajo**", + "pt": "Agora, **mova** esta camada **abaixo da camada base**, para que os elementos de fundo apareçam atrás do jogador.\n\n**Arraste o controle para baixo**" } }, "placement": "top" @@ -372,7 +423,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect! Now let's add **$(farBackground)** to our game by dragging it to the center." + "en": "Perfect! Now let's add **$(farBackground)** to our game by dragging it to the center.", + "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le faisant glisser au centre.", + "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego arrastrándolo al centro.", + "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro." } }, "placement": "left" @@ -383,7 +437,9 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr": "J'ai terminé", + "es": "Ya terminé", + "pt": "Terminei" } } }, @@ -391,7 +447,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "See the black square in the middle of the scene? This is the **camera view**.\nIt's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black square\n\nWhen you're done, click below." + "en": "See the **black square** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black square\n\nWhen you're done, click below.", + "fr": "Vous voyez le **carré noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nRedimensionnons maintenant l'objet **$(farBackground)** de sorte qu'il couvre tout le carré noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "es": "¿Ves el **cuadrado negro** en medio del escenario? Es la vista de la cámara. Este es el punto de vista desde el que el jugador verá el juego.\n\nAhora vamos a redimensionar el objeto **$(farBackground)** para que cubra todo el cuadrado negro.\n\nCuando hayas terminado, haz clic abajo.", + "pt": "Você vê o **quadrado preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o quadrado preto.\n\nQuando terminar, clique abaixo." } }, "placement": "top" @@ -405,7 +464,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's do the same with another background to give a parallax effect! Drag **$(midBackground)** from the menu to the canvas." + "en": "Let's do the same with another background to give a parallax effect! Drag **$(midBackground)** from the menu to the canvas.", + "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! Glissez **$(midBackground)** depuis le menu vers la scène.", + "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! Arrastre **$(midBackground)** desde el menú a la escena.", + "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena." } }, "placement": "left" @@ -416,7 +478,9 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr": "J'ai terminé", + "es": "Ya terminé", + "pt": "Terminei" } } }, @@ -424,7 +488,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Same as for the **$(farBackground)** object, resize the **$(midBackground)** object so that it covers the whole black square.\n\nWhen you're done, click below." + "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black square.\n\nWhen you're done, click below.", + "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le carré noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el cuadrado negro.\n\nCuando haya terminado, haga clic abajo.", + "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o quadrado preto.\n\nQuando terminar, clique abaixo." } }, "placement": "top" @@ -438,7 +505,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of the $(cameraScene) scene." + "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of the $(cameraScene) scene.", + "fr": "Maintenant, faisons en sorte que ces **fonds se déplacent** ! Ouvrons la **feuille d'événements** de la scène $(cameraScene).", + "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de la escena $(cameraScene).", + "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** da cena $(cameraScene)." } }, "placement": "bottom" @@ -453,7 +523,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add an action to make the first background move. " + "en": "Let's **add an action** to make the first background move.", + "fr": "**Ajoutons une action** pour faire bouger le premier fond.", + "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", + "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover." } } } @@ -483,7 +556,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the action **Image X offset**." + "en": "Select the action **Image X offset**.", + "fr": "Sélectionnez l'action **Décalage X de l'image**.", + "es": "Seleccione la acción **Desplazamiento X de la imagen**.", + "pt": "Selecione a ação **Deslocamento X da imagem**." } } }, @@ -497,7 +573,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want the background to follow the camera, so let's select **= (set to)**." + "en": "We want the background to follow the camera, so let's select **= (set to)**.", + "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", + "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", + "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**." } }, "placement": "left" @@ -512,7 +591,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make the far background move way **slower** than the camera,\n\n Enter `CameraCenterX()/8`." + "en": "Let's make the far background move way **slower** than the camera,\n\n Enter `CameraCenterX()/8`.", + "fr": "Faisons en sorte que le fond lointain se déplace beaucoup **plus lentement** que la caméra,\n\n Entrez `CameraCenterX()/8`.", + "es": "Hagamos que el fondo lejano se mueva mucho **más lentamente** que la cámara,\n\n Ingrese `CameraCenterX()/8`.", + "pt": "Vamos fazer com que o plano de fundo distante se mova muito **mais devagar** que a câmera,\n\n Digite `CameraCenterX()/8`." } }, "placement": "top" @@ -527,7 +609,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! Now let's save this." + "en": "Nice! Now let's save this.", + "fr": "Bien ! Enregistrons maintenant cela.", + "es": "¡Bien! Ahora guardemos esto.", + "pt": "Legal! Agora vamos salvar isso." } }, "placement": "top" @@ -541,7 +626,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's create the same action for **$(midBackground)**!" + "en": "Let's create the same action for **$(midBackground)**!", + "fr": "Créons la même action pour **$(midBackground)** !", + "es": "¡Creemos la misma acción para **$(midBackground)**!", + "pt": "Vamos criar a mesma ação para **$(midBackground)**!" } } } @@ -571,7 +659,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Select the action **Image X offset**." + "en": "Select the action **Image X offset**.", + "fr": "Sélectionnez l'action **Décalage X de l'image**.", + "es": "Seleccione la acción **Desplazamiento X de la imagen**.", + "pt": "Selecione a ação **Deslocamento X da imagem**." } } }, @@ -585,7 +676,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want the background to follow the camera, so let's select **= (set to)**." + "en": "We want the background to follow the camera, so let's select **= (set to)**.", + "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", + "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", + "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**." } }, "placement": "left" @@ -600,7 +694,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\n Enter `CameraCenterX()/3`." + "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\n Enter `CameraCenterX()/3`.", + "fr": "Cette fois, faisons en sorte que ce fond se déplace **plus vite**, pour donner l'effet qu'il est plus proche du joueur,\n\n Entrez `CameraCenterX()/3`.", + "es": "Esta vez hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\n Ingrese `CameraCenterX()/3`.", + "pt": "Desta vez vamos fazer com que este plano de fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\n Digite `CameraCenterX()/3`." } }, "placement": "top" @@ -615,7 +712,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! Let's close this." + "en": "Nice! Let's close this.", + "fr": "Bien ! Fermons cela.", + "es": "¡Bien! Cerrémoslo.", + "pt": "Legal! Vamos fechar isso." } }, "placement": "top" From f488321a3f1594438c4f49170b2579b798a5d8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 9 Mar 2023 18:24:38 +0100 Subject: [PATCH 041/208] Tiny fixes --- tutorials/in-app/cameraParallax.json | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 4e6015f..3623b83 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -54,10 +54,18 @@ }, { "messageByLocale": { - "en": "- How to use make Tiled Sprites move at different speeds", - "fr": "- Comment utiliser les Tiled Sprites pour faire bouger des objets à différentes vitesses", - "es": "- Cómo usar los Tiled Sprites para hacer que los objetos se muevan a diferentes velocidades", - "pt": "- Como usar os Tiled Sprites para fazer com que os objetos se movam a diferentes velocidades" + "en": "- How to control the camera", + "fr": "- Comment contrôler la caméra", + "es": "- Cómo controlar la cámara", + "pt": "- Como controlar a câmera" + } + }, + { + "messageByLocale": { + "en": "- How to make Tiled Sprites move at different speeds", + "fr": "- Comment faire bouger des Tiled Sprites à différentes vitesses", + "es": "- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", + "pt": "- Como fazer Tiled Sprites se movem a diferentes velocidades" } }, { From 7874ebc43f6dd075094cee6b02ba3c9a672a4e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 9 Mar 2023 18:30:26 +0100 Subject: [PATCH 042/208] Update test --- __tests__/post-build.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index a1f639b..738e55b 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -23,7 +23,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders.length).toMatchInlineSnapshot(`2`); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`3`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { From 15f8487cbbb3bc992a653ef201e0a1a69b3f2ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 10 Mar 2023 12:21:24 +0100 Subject: [PATCH 043/208] Improve dialogs and add images --- tutorials/in-app/cameraParallax.json | 61 +++++++++----------------- tutorials/in-app/plinkoMultiplier.json | 24 ++-------- 2 files changed, 25 insertions(+), 60 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 3623b83..97afd01 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -38,34 +38,10 @@ }, { "messageByLocale": { - "en": "- How to create a layer", - "fr": "- Comment créer une calque", - "es": "- Cómo crear una capa", - "pt": "- Como criar uma camada" - } - }, - { - "messageByLocale": { - "en": "- How to add an extension", - "fr": "- Comment ajouter une extension", - "es": "- Cómo agregar una extensión", - "pt": "- Como adicionar uma extensão" - } - }, - { - "messageByLocale": { - "en": "- How to control the camera", - "fr": "- Comment contrôler la caméra", - "es": "- Cómo controlar la cámara", - "pt": "- Como controlar a câmera" - } - }, - { - "messageByLocale": { - "en": "- How to make Tiled Sprites move at different speeds", - "fr": "- Comment faire bouger des Tiled Sprites à différentes vitesses", - "es": "- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", - "pt": "- Como fazer Tiled Sprites se movem a diferentes velocidades" + "en": "- How to create a layer\n\n- How to add an extension\n\n- How to control the camera\n\n- How to make Tiled Sprites move at different speeds", + "fr": "- Comment créer une calque\n\n- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", + "es": "- Cómo crear una capa\n\n- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", + "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades" } }, { @@ -100,8 +76,7 @@ "es": "Este juego es un simple plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruebalo** con el botón **Previsualizar**.\n\nCuando estés listo, haz clic en este botón para continuar.", "pt": "Este jogo é um simples plataforma.\nVocê pode mover o jogador com as setas e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar." } - }, - "placement": "right" + } } }, { @@ -455,13 +430,16 @@ "standalone": true, "description": { "messageByLocale": { - "en": "See the **black square** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black square\n\nWhen you're done, click below.", - "fr": "Vous voyez le **carré noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nRedimensionnons maintenant l'objet **$(farBackground)** de sorte qu'il couvre tout le carré noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", - "es": "¿Ves el **cuadrado negro** en medio del escenario? Es la vista de la cámara. Este es el punto de vista desde el que el jugador verá el juego.\n\nAhora vamos a redimensionar el objeto **$(farBackground)** para que cubra todo el cuadrado negro.\n\nCuando hayas terminado, haz clic abajo.", - "pt": "Você vê o **quadrado preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o quadrado preto.\n\nQuando terminar, clique abaixo." + "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black rectangle\n\nWhen you're done, click below.", + "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nRedimensionnons maintenant l'objet **$(farBackground)** de sorte qu'il couvre tout le rectangle noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "es": "¿Ves el **rectángulo negro** en medio del escenario? Es la vista de la cámara. Este es el punto de vista desde el que el jugador verá el juego.\n\nAhora vamos a redimensionar el objeto **$(farBackground)** para que cubra todo el rectángulo negro.\n\nCuando hayas terminado, haz clic abajo.", + "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo." } }, - "placement": "top" + "placement": "top", + "image": { + "dataUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSI1Ni4yODcgMTc3LjEyMSA0MDIuNTczIDEyNC4zMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHJlY3QgeD0iNTYuMzY2IiB5PSIyODguNjg1IiB3aWR0aD0iNDAyLjQ5NCIgaGVpZ2h0PSIxMi43NzUiIHN0eWxlPSJzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbDogcmdiKDEyMiwgOTUsIDk1KTsiLz4KICA8cmVjdCB4PSI1Ni4yODciIHk9IjE3OC4yNSIgd2lkdGg9IjExLjEwMiIgaGVpZ2h0PSIxMTAuMzU5IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwgMCwgMCk7IGZpbGw6IHJnYigxMjIsIDk1LCA5NSk7Ii8+CiAgPHJlY3QgeD0iNDQ3LjIzMyIgeT0iMTc4LjM0IiB3aWR0aD0iMTEuMjA5IiBoZWlnaHQ9IjExMC4zNTkiIHN0eWxlPSJzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbDogcmdiKDEyMiwgOTUsIDk1KTsiLz4KICA8cmVjdCB4PSIxNDMuNTcyIiB5PSIxNzcuMTIxIiB3aWR0aD0iMjE3LjM2NyIgaGVpZ2h0PSIxMjMuOTM5IiBzdHlsZT0iZmlsbDogcmdiKDIxNiwgMjE2LCAyMTYpOyBzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbC1vcGFjaXR5OiAwOyIvPgogIDxyZWN0IHg9IjE0My45ODQiIHk9IjE3Ny40MDYiIHdpZHRoPSIyMTYuNTIxIiBoZWlnaHQ9IjEyMy41MjUiIHN0eWxlPSJzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbDogcmdiKDQ3LCAyNDIsIDQzKTsiLz4KPC9zdmc+" + } } }, { @@ -496,13 +474,16 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black square.\n\nWhen you're done, click below.", - "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le carré noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", - "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el cuadrado negro.\n\nCuando haya terminado, haga clic abajo.", - "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o quadrado preto.\n\nQuando terminar, clique abaixo." + "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black rectangle.\n\nWhen you're done, click below.", + "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le rectangle noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.\n\nCuando haya terminado, haga clic abajo.", + "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo." } }, - "placement": "top" + "placement": "top", + "image": { + "dataUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSI1Ni4yODcgMTc3LjEyMSA0MDIuNTczIDEyNC4zMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHJlY3QgeD0iNTYuMzY2IiB5PSIyODguNjg1IiB3aWR0aD0iNDAyLjQ5NCIgaGVpZ2h0PSIxMi43NzUiIHN0eWxlPSJzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbDogcmdiKDEyMiwgOTUsIDk1KTsiLz4KICA8cmVjdCB4PSI1Ni4yODciIHk9IjE3OC4yNSIgd2lkdGg9IjExLjEwMiIgaGVpZ2h0PSIxMTAuMzU5IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwgMCwgMCk7IGZpbGw6IHJnYigxMjIsIDk1LCA5NSk7Ii8+CiAgPHJlY3QgeD0iNDQ3LjIzMyIgeT0iMTc4LjM0IiB3aWR0aD0iMTEuMjA5IiBoZWlnaHQ9IjExMC4zNTkiIHN0eWxlPSJzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbDogcmdiKDEyMiwgOTUsIDk1KTsiLz4KICA8cmVjdCB4PSIxNDMuNTcyIiB5PSIxNzcuMTIxIiB3aWR0aD0iMjE3LjM2NyIgaGVpZ2h0PSIxMjMuOTM5IiBzdHlsZT0iZmlsbDogcmdiKDIxNiwgMjE2LCAyMTYpOyBzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbC1vcGFjaXR5OiAwOyIvPgogIDxyZWN0IHg9IjE0My45ODQiIHk9IjE3Ny40MDYiIHdpZHRoPSIyMTYuNTIxIiBoZWlnaHQ9IjEyMy41MjUiIHN0eWxlPSJzdHJva2U6IHJnYigwLCAwLCAwKTsgZmlsbDogcmdiKDQ3LCAyNDIsIDQzKTsiLz4KPC9zdmc+" + } } }, { diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 5a10e12..5cc9047 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -43,26 +43,10 @@ }, { "messageByLocale": { - "en": "- How to create a scene variable", - "fr": "- Comment créer une variable de scène", - "es": "- Cómo crear una variable de escena", - "pt": "- Como criar uma variável de cena" - } - }, - { - "messageByLocale": { - "en": "- How to update a scene variable", - "fr": "- Comment mettre à jour une variable de scène", - "es": "- Cómo actualizar una variable de escena", - "pt": "- Como atualizar uma variável de cena" - } - }, - { - "messageByLocale": { - "en": "- How to use a scene variable in an expression", - "fr": "- Comment utiliser une variable de scène dans une expression", - "es": "- Cómo usar una variable de escena en una expresión", - "pt": "- Como usar uma variável de cena em uma expressão" + "en": "- How to create a scene variable\n\n- How to update a scene variable\n\n- How to use a scene variable in an expression", + "fr": "- Comment créer une variable de scène\n\n- Comment mettre à jour une variable de scène\n\n- Comment utiliser une variable de scène dans une expression", + "es": "- Cómo crear una variable de escena\n\n- Cómo actualizar una variable de escena\n\n- Cómo usar una variable de escena en una expresión", + "pt": "- Como criar uma variável de cena\n\n- Como atualizar uma variável de cena\n\n- Como usar uma variável de cena em uma expressão" } }, { From fefc5490e3e2b684f1e9bde21f11776dab2f11d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 10 Mar 2023 12:24:34 +0100 Subject: [PATCH 044/208] Update cache clear --- scripts/deploy.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/deploy.js b/scripts/deploy.js index fe30d78..ee67b65 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -66,8 +66,13 @@ axios files: [ // Update the "database" 'https://resources.gdevelop-app.com/in-app-tutorials-database/inAppTutorialShortHeaders.json', - // Upload the tutorials + // Update the full tutorials 'https://resources.gdevelop-app.com/in-app-tutorials/flingGame.json', + // Update the guided lessons and their templates. + 'https://resources.gdevelop-app.com/in-app-tutorials/plinkoMultiplier.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/cameraParallax.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json', ], }, { From 7eec7e2b537678f511c9d35569c59ed7d607ec0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 13 Mar 2023 11:44:36 +0100 Subject: [PATCH 045/208] Remove first step to improve completion --- tutorials/in-app/cameraParallax.json | 32 ++++------------------------ 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 97afd01..de2a692 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -57,30 +57,6 @@ "flow": [ { "id": "Start", - "nextStepTrigger": { - "clickOnTooltipButton": { - "messageByLocale": { - "en": "Let's go!", - "fr": "C'est parti !", - "es": "¡Vamos!", - "pt": "Vamos!" - } - } - }, - "tooltip": { - "standalone": true, - "description": { - "messageByLocale": { - "en": "This game is a simple platformer.\nYou can move the player with the arrow keys and jump with space.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue.", - "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", - "es": "Este juego es un simple plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruebalo** con el botón **Previsualizar**.\n\nCuando estés listo, haz clic en este botón para continuar.", - "pt": "Este jogo é um simples plataforma.\nVocê pode mover o jogador com as setas e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar." - } - } - } - }, - { - "id": "OpenPropertiesManagerForExtension", "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions" @@ -88,10 +64,10 @@ "tooltip": { "title": { "messageByLocale": { - "en": "First, let's improve this game by adding a nice camera effect when the character moves.", - "fr": "Tout d'abord, améliorons ce jeu en ajoutant un joli effet de caméra quand le personnage se déplace.", - "es": "Primero, mejoremos este juego agregando un bonito efecto de cámara cuando el personaje se mueve.", - "pt": "Primeiro, vamos melhorar este jogo adicionando um efeito de câmera legal quando o personagem se move." + "en": "Let's improve this platformer game by following the character with the camera!", + "fr": "Améliorons ce jeu de plateforme en suivant le personnage avec la caméra !", + "es": "¡Mejoremos este juego de plataformas siguiendo al personaje con la cámara!", + "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!" } }, "description": { From f9433df0f974099709dda4bbaeba598aed122eb0 Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 13 Mar 2023 18:12:06 +0100 Subject: [PATCH 046/208] Add health bar guided lesson (#15) --- __tests__/post-build.spec.js | 2 +- scripts/generate-database.js | 4 + templates/healthBar/assets/9patch castle.png | Bin 0 -> 451 bytes templates/healthBar/assets/BrokenUpIdle1.png | Bin 0 -> 672 bytes templates/healthBar/assets/BrokenUpIdle10.png | Bin 0 -> 677 bytes templates/healthBar/assets/BrokenUpIdle11.png | Bin 0 -> 677 bytes templates/healthBar/assets/BrokenUpIdle2.png | Bin 0 -> 682 bytes templates/healthBar/assets/BrokenUpIdle3.png | Bin 0 -> 682 bytes templates/healthBar/assets/BrokenUpIdle4.png | Bin 0 -> 678 bytes templates/healthBar/assets/BrokenUpIdle5.png | Bin 0 -> 678 bytes templates/healthBar/assets/BrokenUpIdle6.png | Bin 0 -> 700 bytes templates/healthBar/assets/BrokenUpIdle7.png | Bin 0 -> 700 bytes templates/healthBar/assets/BrokenUpIdle8.png | Bin 0 -> 700 bytes templates/healthBar/assets/BrokenUpIdle9.png | Bin 0 -> 700 bytes templates/healthBar/assets/BrokenUpRun1.png | Bin 0 -> 651 bytes templates/healthBar/assets/BrokenUpRun10.png | Bin 0 -> 695 bytes templates/healthBar/assets/BrokenUpRun11.png | Bin 0 -> 704 bytes templates/healthBar/assets/BrokenUpRun12.png | Bin 0 -> 704 bytes templates/healthBar/assets/BrokenUpRun2.png | Bin 0 -> 665 bytes templates/healthBar/assets/BrokenUpRun3.png | Bin 0 -> 665 bytes templates/healthBar/assets/BrokenUpRun4.png | Bin 0 -> 649 bytes templates/healthBar/assets/BrokenUpRun5.png | Bin 0 -> 712 bytes templates/healthBar/assets/BrokenUpRun6.png | Bin 0 -> 712 bytes templates/healthBar/assets/BrokenUpRun7.png | Bin 0 -> 698 bytes templates/healthBar/assets/BrokenUpRun8.png | Bin 0 -> 713 bytes templates/healthBar/assets/BrokenUpRun9.png | Bin 0 -> 713 bytes templates/healthBar/assets/Brown.png | Bin 0 -> 552 bytes templates/healthBar/assets/DeathSound.wav | Bin 0 -> 92348 bytes templates/healthBar/assets/Desappearing1.png | Bin 0 -> 476 bytes templates/healthBar/assets/Desappearing2.png | Bin 0 -> 471 bytes templates/healthBar/assets/Desappearing3.png | Bin 0 -> 232 bytes templates/healthBar/assets/Desappearing4.png | Bin 0 -> 632 bytes templates/healthBar/assets/Desappearing5.png | Bin 0 -> 481 bytes templates/healthBar/assets/Desappearing6.png | Bin 0 -> 426 bytes templates/healthBar/assets/Desappearing7.png | Bin 0 -> 428 bytes templates/healthBar/assets/Fall (32x32).png | Bin 0 -> 709 bytes templates/healthBar/assets/Hit1.png | Bin 0 -> 219 bytes templates/healthBar/assets/Hit2.png | Bin 0 -> 219 bytes templates/healthBar/assets/Hit3.png | Bin 0 -> 731 bytes templates/healthBar/assets/Hit4.png | Bin 0 -> 687 bytes templates/healthBar/assets/Hit5.png | Bin 0 -> 686 bytes templates/healthBar/assets/Hit6.png | Bin 0 -> 687 bytes templates/healthBar/assets/Hit7.png | Bin 0 -> 727 bytes templates/healthBar/assets/Idle.png | Bin 0 -> 165 bytes templates/healthBar/assets/Jump (32x32).png | Bin 0 -> 737 bytes templates/healthBar/assets/Saw1.png | Bin 0 -> 681 bytes templates/healthBar/assets/Saw2.png | Bin 0 -> 704 bytes templates/healthBar/assets/Saw3.png | Bin 0 -> 826 bytes templates/healthBar/assets/Saw4.png | Bin 0 -> 733 bytes templates/healthBar/assets/Saw5.png | Bin 0 -> 668 bytes templates/healthBar/assets/Saw6.png | Bin 0 -> 707 bytes templates/healthBar/assets/Saw7.png | Bin 0 -> 827 bytes templates/healthBar/assets/Saw8.png | Bin 0 -> 760 bytes templates/healthBar/assets/SawHit.wav | Bin 0 -> 23454 bytes .../healthBar/assets/Tiled Floor Castle.png | Bin 0 -> 191 bytes templates/healthBar/game.json | 11558 ++++++++++++++++ tutorials/in-app/cameraParallax.json | 2 +- tutorials/in-app/healthBar.json | 485 + 58 files changed, 12049 insertions(+), 2 deletions(-) create mode 100644 templates/healthBar/assets/9patch castle.png create mode 100644 templates/healthBar/assets/BrokenUpIdle1.png create mode 100644 templates/healthBar/assets/BrokenUpIdle10.png create mode 100644 templates/healthBar/assets/BrokenUpIdle11.png create mode 100644 templates/healthBar/assets/BrokenUpIdle2.png create mode 100644 templates/healthBar/assets/BrokenUpIdle3.png create mode 100644 templates/healthBar/assets/BrokenUpIdle4.png create mode 100644 templates/healthBar/assets/BrokenUpIdle5.png create mode 100644 templates/healthBar/assets/BrokenUpIdle6.png create mode 100644 templates/healthBar/assets/BrokenUpIdle7.png create mode 100644 templates/healthBar/assets/BrokenUpIdle8.png create mode 100644 templates/healthBar/assets/BrokenUpIdle9.png create mode 100644 templates/healthBar/assets/BrokenUpRun1.png create mode 100644 templates/healthBar/assets/BrokenUpRun10.png create mode 100644 templates/healthBar/assets/BrokenUpRun11.png create mode 100644 templates/healthBar/assets/BrokenUpRun12.png create mode 100644 templates/healthBar/assets/BrokenUpRun2.png create mode 100644 templates/healthBar/assets/BrokenUpRun3.png create mode 100644 templates/healthBar/assets/BrokenUpRun4.png create mode 100644 templates/healthBar/assets/BrokenUpRun5.png create mode 100644 templates/healthBar/assets/BrokenUpRun6.png create mode 100644 templates/healthBar/assets/BrokenUpRun7.png create mode 100644 templates/healthBar/assets/BrokenUpRun8.png create mode 100644 templates/healthBar/assets/BrokenUpRun9.png create mode 100644 templates/healthBar/assets/Brown.png create mode 100644 templates/healthBar/assets/DeathSound.wav create mode 100644 templates/healthBar/assets/Desappearing1.png create mode 100644 templates/healthBar/assets/Desappearing2.png create mode 100644 templates/healthBar/assets/Desappearing3.png create mode 100644 templates/healthBar/assets/Desappearing4.png create mode 100644 templates/healthBar/assets/Desappearing5.png create mode 100644 templates/healthBar/assets/Desappearing6.png create mode 100644 templates/healthBar/assets/Desappearing7.png create mode 100644 templates/healthBar/assets/Fall (32x32).png create mode 100644 templates/healthBar/assets/Hit1.png create mode 100644 templates/healthBar/assets/Hit2.png create mode 100644 templates/healthBar/assets/Hit3.png create mode 100644 templates/healthBar/assets/Hit4.png create mode 100644 templates/healthBar/assets/Hit5.png create mode 100644 templates/healthBar/assets/Hit6.png create mode 100644 templates/healthBar/assets/Hit7.png create mode 100644 templates/healthBar/assets/Idle.png create mode 100644 templates/healthBar/assets/Jump (32x32).png create mode 100644 templates/healthBar/assets/Saw1.png create mode 100644 templates/healthBar/assets/Saw2.png create mode 100644 templates/healthBar/assets/Saw3.png create mode 100644 templates/healthBar/assets/Saw4.png create mode 100644 templates/healthBar/assets/Saw5.png create mode 100644 templates/healthBar/assets/Saw6.png create mode 100644 templates/healthBar/assets/Saw7.png create mode 100644 templates/healthBar/assets/Saw8.png create mode 100644 templates/healthBar/assets/SawHit.wav create mode 100644 templates/healthBar/assets/Tiled Floor Castle.png create mode 100644 templates/healthBar/game.json create mode 100644 tutorials/in-app/healthBar.json diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index 738e55b..d93c568 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -23,7 +23,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders.length).toMatchInlineSnapshot(`3`); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`4`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { diff --git a/scripts/generate-database.js b/scripts/generate-database.js index 6dc5c37..a313e04 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -238,6 +238,10 @@ const processInAppTutorials = async () => { generateFolderStructure(); await updateTemplateFiles(); await processInAppTutorials(); + console.info('✅ Asset packs were successfully generated.'); + console.info( + 'ℹ️ Make sure you run the command \x1b[1mnpm run check-post-build\x1b[0m' + ); } catch (error) { console.error('The script errored', error); shell.exit(1); diff --git a/templates/healthBar/assets/9patch castle.png b/templates/healthBar/assets/9patch castle.png new file mode 100644 index 0000000000000000000000000000000000000000..c0350c037434414a1e6a70d550710d66718d188d GIT binary patch literal 451 zcmV;!0X+VRP)Px$eMv+?RA_ky0PiGQ4kIZ0{&7Qy*0RT{LR!~d}XYnK-!D7B7(MzoW0JvW6&M&V+sUP}? zd{!Hym(Lf|qM`k8;Ci`RtwwdIl=rcEpXaqZfc;zeV0veDs2a|Q`o%cUl)r89(O~rg z0N`=Mtv028@Y8uf#@ZNs+hEEOo#ufq(Ai+J%_|S21bYXB`H?vIMxtaKIG>JiJ{{lJ z`<Cw z!|Z>D(KaYYtdecH#viLtjaa4AP9L#q%vm=i)IzlFP%=@dtsj@grPZ9c4b_;lZh+09 tK-ZX@B(WJ)8Nc|Pcr}j002ovPDHLkV1mPA%s&7C literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpIdle1.png b/templates/healthBar/assets/BrokenUpIdle1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0787654577783f005752f6e20db91fa0207b46d GIT binary patch literal 672 zcmV;R0$=@!P)Px%T1iAfR9J=WmN97CKoo|5l`dXH7sn+-mIkM;aUBSBb89U{DBwT`b+3nd>14We z30=AvPg#<|-8$4m!GQ=7D01S>P_SFvIKiQi!L-g&ym-70)*WX_C!Nx6^$!M1JiYhb zd+**Iu+&mZ{qItOUcPwwM)-kaTSV5mrW*_X-ygj5+1!?OMg!M|T>wD)Y9_QTt|b5f zukSx1UWgk3IJQMXUKUlC&W;3`RoFSRb006EBX8?d_Z!KXKZb?8&1*ZWi1O)R9k zpGehQ212CJ5*$5!5-WHRL^7LkAx`B19NQxMJL_24TxE_Xy)i1S(TyQQ5@w*%8Ud}5 zkUTC#EC5Y66vwuRT5m4Am)(9r5V1&NfDZ|P1MeE2N% zFFlG2xfD9}CMw)kBpmk$X7dM>mCiF;ePXm4S5`33p1 z$yODl;#wl`+~_w-VIjl-nr_cPM!!I<)fTL*_4N8%FK|z<&>nYA`-i|Kv)> zi#B4AV}5*#8rCc63kh{Pt(uXmlC=XQGe8Ft{r|Uiy#4??@iMP?ZF<}Q0000Px%Ur9tkR9J=WmN94(Q5eVnCoWkImo(C$izOOEOrhWw%`I|VAq9tXH-lN6f{ROW zaS55av_sq+%pj!D<0#0bW(x?35*tfI=nynrBumEUkb94p%e{B++QB7%2;`3MzVG+G z?|t8Uz)CBv^q-}Ly?p-SweSPab%?5S!?YIszdL-pWOGy184X+;b^!qGi~3OhYn?fo^v0;PMpuRqNtl63YXr1L zLh`r}u>cIy(mdB8dcC>uUbX$gAYzq(S0R@IFz*6hlinC>TkGuk>xb`4-_lMQy#FNh zuRMwixfD9}CMsMj^16NZ*3vhV-Wb5VoQ7#>zYcp#Hqyh0mVssgh&KtT=n#s17#XIe zc~zTq{Jl`frC26Z6$PtQ0_No8lz~J^b%sbsF`b6=7u<+c`)M8fX`LOz0I=i3>h-4d z4k65d=Q^a{C?W5!M6WmJneZL+dU-w-E@E1>(QlNHFCP(v>^W%(5_h(7-rmOS=NIJ5 zHd|GgiW`a0bEDrV$wG($4Aaum#XXj~;7|%mbZF(vN6cSX8%A~k5bqu+@*$G)AmSCZ z!)2wqHURB}u$A%Whp1zMQoa#Ur_-t(nO0RhKrsV!BGUiYwd3^<%I`9>X2=Dt00000 LNkvXXu0mjf7DzRd literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpIdle11.png b/templates/healthBar/assets/BrokenUpIdle11.png new file mode 100644 index 0000000000000000000000000000000000000000..f51eb07260c5ba018d8214d61994e81f583a3359 GIT binary patch literal 677 zcmV;W0$TlvP)Px%Ur9tkR9J=WmN94(Q5eVnCoWkImo(C$izOOEOrhWw%`I|VAq9tXH-lN6f{ROW zaS55av_sq+%pj!D<0#0bW(x?35*tfI=nynrBumEUkb94p%e{B++QB7%2;`3MzVG+G z?|t8Uz)CBv^q-}Ly?p-SweSPab%?5S!?YIszdL-pWOGy184X+;b^!qGi~3OhYn?fo^v0;PMpuRqNtl63YXr1L zLh`r}u>cIy(mdB8dcC>uUbX$gAYzq(S0R@IFz*6hlinC>TkGuk>xb`4-_lMQy#FNh zuRMwixfD9}CMsMj^16NZ*3vhV-Wb5VoQ7#>zYcp#Hqyh0mVssgh&KtT=n#s17#XIe zc~zTq{Jl`frC26Z6$PtQ0_No8lz~J^b%sbsF`b6=7u<+c`)M8fX`LOz0I=i3>h-4d z4k65d=Q^a{C?W5!M6WmJneZL+dU-w-E@E1>(QlNHFCP(v>^W%(5_h(7-rmOS=NIJ5 zHd|GgiW`a0bEDrV$wG($4Aaum#XXj~;7|%mbZF(vN6cSX8%A~k5bqu+@*$G)AmSCZ z!)2wqHURB}u$A%Whp1zMQoa#Ur_-t(nO0RhKrsV!BGUiYwd3^<%I`9>X2=Dt00000 LNkvXXu0mjf7DzRd literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpIdle2.png b/templates/healthBar/assets/BrokenUpIdle2.png new file mode 100644 index 0000000000000000000000000000000000000000..a84691276382bdb1f7c0fc84dba8a2ca25c5fb2a GIT binary patch literal 682 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 literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpRun10.png b/templates/healthBar/assets/BrokenUpRun10.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa822cd2063831f27e30641577e5d2b6e4f60a5 GIT binary patch literal 695 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 literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpRun3.png b/templates/healthBar/assets/BrokenUpRun3.png new file mode 100644 index 0000000000000000000000000000000000000000..dc265b381c918647ba523bd047d3f2b9b8f6689f GIT binary patch literal 665 zcmV;K0%rY*P)Px%Q%OWYR9J=WmN9J8Koo|5BP7%Xv7|*E8byi(Au963R#GpKkAkp$bi^NKrdPG+k(x2pEo`ykN&Z`z~wyZ$7_!@4I{V z-W_nQt1cyK@Y(ZM+zGB@Gg0T7ZUp?l-+ddhxhd+50#|z-0KmcNlxw@WwgdopdH)fc zhgb-}b!=Acb#QPxjSWm9n`*C<2$2Zj4-NqB!!t}QQ-m800h?F=UhrBuiy!@;c)0Z- zV4uq8aNa#aDxU)YoOh1^08ii8++DaK04Wrl0ulrP0l=r%kGY4J3*b67D>Yj}ITwN8 zDK-U-VnHf+6htbY`v>tw9KdyKRx4+*tgg-+jlB^n^})grJaKoRQXc^I0he4BLJC0B z4aIeAc6(<(FfLktQ4mro@M~jz1;Aw$_%-%MSXNhO-{1DWhvrhHbU%FN`WJ4+8|y1* z@9d-ED@DKV-n$c;GxkORF4L*$hBDmsLN>9N5v7540g&s2Bx*v^myxC$iffq+&DLy; zc0yE1utF(lAD#uy!o)IB@#2x;YC-#rQadvQFGT+)BVJ{Cw(E16Hh=Gs!|-e?pH7@l~sF%khXX*E;{ zGD?DoOo9JR=sNa7fk~xi3yordX}Y0Em*Jv)KxW5;%aAm&OwelPU(Z{&jsXA_%VeUx zA{L-l&MFnl3>?6uS8mk2S~;ui{SxB2))mxWS$9eFfQg5800000NkvXXu0mjf!?Pnk literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpRun4.png b/templates/healthBar/assets/BrokenUpRun4.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd67ca83aa1f3b519f730ef5167ccdd0a179e8d GIT binary patch literal 649 zcmV;40(Sk0P)Px%LrFwIR9J=WmN94(VHC%ICxT=tE@`DhMOvaUR0D!rO|pcLf&qti*TGwyii=Be zaS5GVl0i3z78Fv*5ejmx*)pA$*jNG~9fD04=~Bhv9NI5ja`)YRmyYJY-FNSM?|1Lr zd*25WP4vG@^IClR{FQWrSu<=^=b2o7$p8ED8<)*hRc9h_vDE-z_vlP&o1TjR@bb<> zdlX_U0JCP;#a4seqch*YLc*rlY6L0Gu=r0C@7+kY?eE0;E!K5l}z~Ab?NnkEB1Z6u_(*_VUi2Qq5H$ zWb!RRHJb_*+zTR_h+jZ_Q3o(AwmIU za(T_H8TQo1*3i0Y`*}fxDuGi=i!;D^7dX|odQ2y02hZO&zq|H|PHBGlEcLHEikB8= zsBdhcJ6h4H8@I2!_VleDa9++#F0XaUmdnQXFcM`DS%7epP)H1+(1%ebm)Fd-6`P&C z!J5c~s)AsZN>JZF9{LxY8IeiMkWSaqI%P|G#7j#c(sk=*(ltVt9T@?58=C^)L*#5yrc{;I*Pq+IIGtV(JO6x)b>&UgJBd99ANWL jj8Xwjci0EriYNL9@0cAk9{)kS00000NkvXXu0mjfGz29B literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpRun5.png b/templates/healthBar/assets/BrokenUpRun5.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0d466967ea37b23c21c16bfaf9923d9e113a56 GIT binary patch literal 712 zcmV;(0yq7MP)Px%f=NU{R9J=WmOp43Q5?s=SGu?yU5q6|mWquPYar0g)?3PP0fka7dmZZ1E=QLx zp-UEV%A$kWI>e!1Ajc6XXW}Ll&K4UREMf*}%~D*X({=FPaUSp8J(ID1!NGffexLXI z_a3m)N-O>E68s-ty?)P}Y#O?~tN}?@7Hk~W_7}$Q@@zs3m-`(6K~0RX() zd}8|{mI5#h-7fb#XkE>?3=@&L<$fm+A`rl9901zieq*Ys+zUC#;`sIB z4<7G6qOOaklDO_&Aeu@70Iqu%0Du=CbgCEb@SK9zI59{d2oL~#+Ivb(Vk&@X==RR( z*-|m*fuM;Qf|KXZZe*MW5ltl>i1Tm&)6nf|A&#}Jb$5e_HAbm9xHSY#R1cJz1E4ve z65j@b3qX<;!8CMRtTYzBFI#>z2(A!#l}*P0%&Wkwi8aRB*1G%u>(O`S9;9M=A3sya zxms~H9Yed)K*>{zUfq9qkGXbYjRDNVD#?m4tXT`=%*%*`fp`J9StleSO^Ew4l4M0N zHPvoAxsXlATu&^kAn4E#xQkEETo7LI^b%$(Cf$(y{E6t*K|;hqLUgZSq8$fXtTdQ! z391K7L$|y2JTlG+#7blC31>sU-ds+ZaKPM)-FhCG;;{{1-Z4WEd9aPk);4B8zaUdo z-P5p?+lVmlj&42ATt@|vWJO5i_FR|wn-Wby7gwfu?C$F?!@w#4*zdrg1oL|<=t&m( z9;g=L!cPx%f=NU{R9J=WmOp43Q5?s=SGu?yU5q6|mWquPYar0g)?3PP0fka7dmZZ1E=QLx zp-UEV%A$kWI>e!1Ajc6XXW}Ll&K4UREMf*}%~D*X({=FPaUSp8J(ID1!NGffexLXI z_a3m)N-O>E68s-ty?)P}Y#O?~tN}?@7Hk~W_7}$Q@@zs3m-`(6K~0RX() zd}8|{mI5#h-7fb#XkE>?3=@&L<$fm+A`rl9901zieq*Ys+zUC#;`sIB z4<7G6qOOaklDO_&Aeu@70Iqu%0Du=CbgCEb@SK9zI59{d2oL~#+Ivb(Vk&@X==RR( z*-|m*fuM;Qf|KXZZe*MW5ltl>i1Tm&)6nf|A&#}Jb$5e_HAbm9xHSY#R1cJz1E4ve z65j@b3qX<;!8CMRtTYzBFI#>z2(A!#l}*P0%&Wkwi8aRB*1G%u>(O`S9;9M=A3sya zxms~H9Yed)K*>{zUfq9qkGXbYjRDNVD#?m4tXT`=%*%*`fp`J9StleSO^Ew4l4M0N zHPvoAxsXlATu&^kAn4E#xQkEETo7LI^b%$(Cf$(y{E6t*K|;hqLUgZSq8$fXtTdQ! z391K7L$|y2JTlG+#7blC31>sU-ds+ZaKPM)-FhCG;;{{1-Z4WEd9aPk);4B8zaUdo z-P5p?+lVmlj&42ATt@|vWJO5i_FR|wn-Wby7gwfu?C$F?!@w#4*zdrg1oL|<=t&m( z9;g=L!cPx%bV)=(R9J=WRxxNAQ5gQN6oQL%F_sJ|rDAKvRtR*n(Itq12&J5RJM@-zIl6QS zUAl-<7BeJUhdLCl;BgIcT(bCW_x#`cKL7vy z-~WImmbhj}ev2<&y(2f6hVF-;j1n1RJqd!4x=<_h4+0igZ!FKks7(T%1+OrQXYyk1V=&+mVD zRCzcRA4{ij(LF^hodN({bWZ^Q&)(}~7H$ZL6e4GYOav1I0H1fCl9!hhU>dr!eRM2T za}f~~0!z@`+6+bRCnAG`2=iw86q6D3BRYv;m+ENabNg zgc49FmL${AooKBwwJzFzej-AZfJZJ92QcXZ9%E~S)$E%4{o~WGnZ2x2x*xxh=L=hL zE)z$))_}sbB9GhmZ_Vr(TO$CIau$juX}E9A!~_l_*1OwB$L?=ooREQ;P^e*4S?R+B z5Un-P+}cF6)<7;3cQYXhTa{rNv=jO+etq*CiZ*cge;yXhL)b;ORT+h1N%CgF*9jGE z;G7)n2piE}GK#%q)E&dXblGfG#>v5suN{*mh}_#izqNs6ev*D$l|g0Xb>Ak%F>(r| z4P6qO!o*oAp>v8d~fr!!)x1q2E-urEU&Ee0ZiJ{kDM35 ge~UcJm$-KP2Ze?=X=~=jJpcdz07*qoM6N<$g8K70@Bjb+ literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/BrokenUpRun8.png b/templates/healthBar/assets/BrokenUpRun8.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5b1d79262cac44879345337be9f5c26737a63d GIT binary patch literal 713 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

    8M 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 ZH*hmb3wO$0xflwP@O1TaS?83{1OP-&K287t literal 0 HcmV?d00001 diff --git a/templates/healthBar/game.json b/templates/healthBar/game.json new file mode 100644 index 0000000..892961b --- /dev/null +++ b/templates/healthBar/game.json @@ -0,0 +1,11558 @@ +{ + "firstLayout": "", + "gdVersion": { + "build": 99, + "major": 4, + "minor": 0, + "revision": 0 + }, + "properties": { + "adaptGameResolutionAtRuntime": true, + "folderProject": false, + "orientation": "landscape", + "packageName": "com.example.HealthBarLesson", + "pixelsRounding": true, + "projectUuid": "5aaac4f4-df86-47fe-94e9-3d8b81cf3839", + "scaleMode": "nearest", + "sizeOnStartupMode": "", + "templateSlug": "", + "useExternalSourceFiles": false, + "version": "1.0.0", + "name": "Health Bar Lesson", + "description": "", + "author": "", + "windowWidth": 1280, + "windowHeight": 720, + "latestCompilationDirectory": "", + "maxFPS": 60, + "minFPS": 20, + "verticalSync": false, + "platformSpecificAssets": {}, + "loadingScreen": { + "backgroundColor": 0, + "backgroundFadeInDuration": 0.2, + "backgroundImageResourceName": "", + "gdevelopLogoStyle": "light", + "logoAndProgressFadeInDuration": 0.2, + "logoAndProgressLogoFadeInDelay": 0.2, + "minDuration": 1.5, + "progressBarColor": 16777215, + "progressBarHeight": 20, + "progressBarMaxWidth": 200, + "progressBarMinWidth": 40, + "progressBarWidthPercent": 30, + "showGDevelopSplash": true, + "showProgressBar": true + }, + "watermark": { + "placement": "bottom-left", + "showWatermark": true + }, + "authorIds": [], + "authorUsernames": [], + "categories": [], + "playableDevices": [], + "extensionProperties": [], + "platforms": [ + { + "name": "GDevelop JS platform" + } + ], + "currentPlatform": "GDevelop JS platform" + }, + "resources": { + "resources": [ + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle1.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle2.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle2.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle3.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle3.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle4.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle4.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle5.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle5.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle6.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle6.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle7.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle7.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle8.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle8.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle9.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle9.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle10.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle10.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpIdle11.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpIdle11.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun1.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun2.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun2.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun3.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun3.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun4.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun4.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun5.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun5.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun6.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun6.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun7.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun7.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun8.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun8.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun9.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun9.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun10.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun10.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun11.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun11.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BrokenUpRun12.png", + "kind": "image", + "metadata": "", + "name": "BrokenUpRun12.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Jump (32x32).png", + "kind": "image", + "metadata": "", + "name": "Jump (32x32).png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Fall (32x32).png", + "kind": "image", + "metadata": "", + "name": "Fall (32x32).png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/9patch castle.png", + "kind": "image", + "metadata": "", + "name": "9patch castle.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Hit1.png", + "kind": "image", + "metadata": "", + "name": "Hit1.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Hit2.png", + "kind": "image", + "metadata": "", + "name": "Hit2.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Hit3.png", + "kind": "image", + "metadata": "", + "name": "Hit3.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Hit4.png", + "kind": "image", + "metadata": "", + "name": "Hit4.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Hit5.png", + "kind": "image", + "metadata": "", + "name": "Hit5.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Hit6.png", + "kind": "image", + "metadata": "", + "name": "Hit6.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Hit7.png", + "kind": "image", + "metadata": "", + "name": "Hit7.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Saw1.png", + "kind": "image", + "metadata": "", + "name": "Saw1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Saw2.png", + "kind": "image", + "metadata": "", + "name": "Saw2.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Saw3.png", + "kind": "image", + "metadata": "", + "name": "Saw3.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Saw4.png", + "kind": "image", + "metadata": "", + "name": "Saw4.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Saw5.png", + "kind": "image", + "metadata": "", + "name": "Saw5.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Saw6.png", + "kind": "image", + "metadata": "", + "name": "Saw6.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Saw7.png", + "kind": "image", + "metadata": "", + "name": "Saw7.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Saw8.png", + "kind": "image", + "metadata": "", + "name": "Saw8.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Idle.png", + "kind": "image", + "metadata": "", + "name": "Idle.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Brown.png", + "kind": "image", + "metadata": "", + "name": "Brown.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing1.png", + "kind": "image", + "metadata": "", + "name": "Desappearing1.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing2.png", + "kind": "image", + "metadata": "", + "name": "Desappearing2.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing3.png", + "kind": "image", + "metadata": "", + "name": "Desappearing3.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing4.png", + "kind": "image", + "metadata": "", + "name": "Desappearing4.png", + "smoothed": false, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing5.png", + "kind": "image", + "metadata": "", + "name": "Desappearing5.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing6.png", + "kind": "image", + "metadata": "", + "name": "Desappearing6.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Desappearing7.png", + "kind": "image", + "metadata": "", + "name": "Desappearing7.png", + "smoothed": false, + "userAdded": true + }, + { + "file": "assets/DeathSound.wav", + "kind": "audio", + "metadata": "{\"extension\":\".wav\",\"jfxr\":{\"data\":\"{\\\"_version\\\":1,\\\"_name\\\":\\\"Jump 1\\\",\\\"_locked\\\":[],\\\"sampleRate\\\":44100,\\\"attack\\\":0.39660610023751985,\\\"sustain\\\":0,\\\"sustainPunch\\\":0,\\\"decay\\\":0.6499094024577599,\\\"tremoloDepth\\\":11,\\\"tremoloFrequency\\\":2.6256280856837515,\\\"frequency\\\":10000,\\\"frequencySweep\\\":-8400,\\\"frequencyDeltaSweep\\\":-1800,\\\"repeatFrequency\\\":3.4000000000000004,\\\"frequencyJump1Onset\\\":33,\\\"frequencyJump1Amount\\\":-15,\\\"frequencyJump2Onset\\\":85,\\\"frequencyJump2Amount\\\":5,\\\"harmonics\\\":0,\\\"harmonicsFalloff\\\":0.52,\\\"waveform\\\":\\\"whitenoise\\\",\\\"interpolateNoise\\\":false,\\\"vibratoDepth\\\":0,\\\"vibratoFrequency\\\":10,\\\"squareDuty\\\":50,\\\"squareDutySweep\\\":-5,\\\"flangerOffset\\\":0,\\\"flangerOffsetSweep\\\":0,\\\"bitCrush\\\":16,\\\"bitCrushSweep\\\":-1,\\\"lowPassCutoff\\\":21100,\\\"lowPassCutoffSweep\\\":1300,\\\"highPassCutoff\\\":0,\\\"highPassCutoffSweep\\\":600,\\\"compression\\\":1.3,\\\"normalization\\\":true,\\\"amplification\\\":100}\",\"name\":\"DeathSound\"},\"localFilePath\":\"assets/DeathSound.wav\"}", + "name": "DeathSound", + "preloadAsMusic": false, + "preloadAsSound": true, + "preloadInCache": false, + "userAdded": true + }, + { + "file": "assets/SawHit.wav", + "kind": "audio", + "metadata": "", + "name": "assets\\SawHit.wav", + "preloadAsMusic": false, + "preloadAsSound": false, + "preloadInCache": false, + "userAdded": true + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 209, + "disableInputWhenNotFocused": true, + "mangledName": "Level", + "name": "Level", + "r": 209, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 209, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": true, + "zoomFactor": 0.622775034632561, + "windowMask": false + }, + "objectsGroups": [ + { + "name": "Traps", + "objects": [ + { + "name": "Trap" + }, + { + "name": "Trap2" + }, + { + "name": "Trap3" + } + ] + } + ], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": true, + "height": 174, + "layer": "", + "name": "Ground_And_Walls", + "persistentUuid": "0dae8de6-9bdb-4464-86ce-95509c9d3d7b", + "width": 640, + "x": 288, + "y": 416, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Player", + "persistentUuid": "b32caa97-016d-46b8-9861-2780e11d26d0", + "width": 0, + "x": 608, + "y": 409, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 320, + "layer": "", + "name": "Ground_And_Walls", + "persistentUuid": "86597996-bf18-4631-815b-3b7906168845", + "width": 160, + "x": 768, + "y": 96, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 320, + "layer": "", + "name": "Ground_And_Walls", + "persistentUuid": "39caeb0a-7104-4d49-978b-f0fa4a62fb7f", + "width": 160, + "x": 288, + "y": 96, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap", + "persistentUuid": "d8cd3a2e-a3a5-481e-8766-0e866e79d8e7", + "width": 0, + "x": 449, + "y": 256, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap", + "persistentUuid": "5a467690-84ae-4dd9-9a73-8a8ece343d4b", + "width": 0, + "x": 767, + "y": 256, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap2", + "persistentUuid": "5db22c35-3b08-4286-8cd2-e921e3c7fb9b", + "width": 0, + "x": 568, + "y": 416, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap2", + "persistentUuid": "a6d1da2f-9c34-47bb-809b-dbac6180f557", + "width": 0, + "x": 552, + "y": 416, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap2", + "persistentUuid": "8699b211-0089-43af-9046-4a8bcfd4e253", + "width": 0, + "x": 648, + "y": 416, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap2", + "persistentUuid": "ff400d83-b7a4-4982-8ebd-c15c8bdc6495", + "width": 0, + "x": 664, + "y": 416, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 416, + "layer": "", + "name": "Background", + "persistentUuid": "5c5c842b-6db5-4fe7-865c-5ea66fce35e1", + "width": 640, + "x": 288, + "y": 96, + "zOrder": -10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trap3", + "persistentUuid": "e68dfee1-2780-477d-ae81-3e153e23e241", + "width": 0, + "x": 544, + "y": 320, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Player", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Health", + "type": "Health::Health", + "Health": 3, + "CurrentHealth": 0, + "MaxHealth": 3, + "DamageCooldown": 0.5, + "IsHealthJustDamaged": false, + "HealthRegenRate": 0, + "HealthRegenDelay": 0, + "AllowOverHealing": false, + "HitAtLeastOnce": false, + "IsJustHealed": false, + "CurrentShieldPoints": 0, + "MaxShieldPoints": 0, + "ShieldDuration": 5, + "ShieldRegenRate": 0, + "BlockExcessDamage": false, + "ShieldRegenDelay": 0, + "IsShieldJustDamaged": false, + "ChanceToDodge": 0, + "DamageToBeApplied": 0, + "FlatDamageReduction": 0, + "PercentDamageReduction": 0, + "IsJustDodged": false, + "ShieldDamageTaken": 0, + "HealToBeApplied": 0 + }, + { + "name": "PlatformerCharacterAnimator", + "type": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "EnableAnimationChanges": true, + "EnableHorizontalFlipping": true, + "IdleAnimationName": "idle", + "RunAnimationName": "run", + "JumpAnimationName": "jump", + "FallAnimationName": "fall", + "ClimbAnimationName": "climb", + "PlatformerBehavior": "PlatformerObject" + }, + { + "name": "PlatformerObject", + "type": "PlatformBehavior::PlatformerObjectBehavior", + "acceleration": 700, + "gravity": 500, + "jumpSpeed": 300, + "maxFallingSpeed": 350, + "maxSpeed": 125, + "canGoDownFromJumpthru": true, + "canGrabPlatforms": false, + "canGrabWithoutMoving": true, + "deceleration": 1500, + "ignoreDefaultControls": false, + "jumpSustainTime": 0.2, + "ladderClimbingSpeed": 150, + "slopeMaxAngle": 60, + "useLegacyTrajectory": false, + "xGrabTolerance": 10, + "yGrabOffset": 0 + } + ], + "animations": [ + { + "name": "idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpIdle11.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + } + ] + } + ] + }, + { + "name": "run", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun11.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "BrokenUpRun12.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + } + ] + } + ] + }, + { + "name": "jump", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Jump (32x32).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + } + ] + } + ] + }, + { + "name": "fall", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Fall (32x32).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + } + ] + } + ] + }, + { + "name": "hurt", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Hit1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Hit2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Hit3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Hit4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Hit5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Hit6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Hit7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 16, + "y": 25 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + } + ] + } + ] + }, + { + "name": "dead", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.15, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Desappearing1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Desappearing2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Desappearing3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Desappearing4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Desappearing5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Desappearing6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Desappearing7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 47.62079833421518, + "y": 55.85234510695927 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 8, + "y": 10 + }, + { + "x": 25, + "y": 10 + }, + { + "x": 25, + "y": 32 + }, + { + "x": 8, + "y": 32 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 16, + "height": 48, + "leftMargin": 16, + "name": "Ground_And_Walls", + "rightMargin": 16, + "tags": "", + "texture": "9patch castle.png", + "tiled": true, + "topMargin": 16, + "type": "PanelSpriteObject::PanelSprite", + "width": 48, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Platform", + "type": "PlatformBehavior::PlatformBehavior", + "canBeGrabbed": true, + "platformType": "NormalPlatform", + "yGrabOffset": 0 + } + ] + }, + { + "assetStoreId": "", + "name": "Trap", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "RectangleMovement", + "type": "RectangleMovement::RectangleMovement", + "Width": 0, + "Height": 100, + "Clockwise": true, + "HorizontalEdgeDuration": 1, + "VerticalEdgeDuration": 1, + "Left": 1, + "Top": 1, + "Progress": 1, + "OldX": 1, + "OldY": 1, + "Easing": "easeInOutCubic", + "InitialPosition": "Top-left corner", + "ToogleClockwise": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.05, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Saw1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Trap2", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Idle.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 7.5, + "y": 16 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 3, + "y": 9 + }, + { + "x": 12, + "y": 9 + }, + { + "x": 14, + "y": 16 + }, + { + "x": 1, + "y": 16 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Trap3", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "RectangleMovement", + "type": "RectangleMovement::RectangleMovement", + "Width": 128, + "Height": 0, + "Clockwise": true, + "HorizontalEdgeDuration": 1, + "VerticalEdgeDuration": 1, + "Left": 1, + "Top": 1, + "Progress": 1, + "OldX": 1, + "OldY": 1, + "Easing": "easeInOutCubic", + "InitialPosition": "Top-left corner", + "ToogleClockwise": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.05, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Saw1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Saw8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 19, + "y": 19 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "height": 64, + "name": "Background", + "tags": "", + "texture": "Brown.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 64, + "variables": [], + "effects": [], + "behaviors": [] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set up for health bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + }, + { + "colorB": 116, + "colorG": 116, + "colorR": 116, + "creationTime": 0, + "folded": true, + "name": "Player and camera management", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ZoomCamera" + }, + "parameters": [ + "", + "2", + "", + "" + ] + }, + { + "type": { + "value": "CentreCamera" + }, + "parameters": [ + "", + "Background", + "", + "", + "" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Player", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Getting hit by the saw", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "Player", + "Traps", + "", + "", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "AnimationName" + }, + "parameters": [ + "Player", + "\"hurt\"" + ] + }, + { + "type": { + "inverted": true, + "value": "Health::Health::IsDead" + }, + "parameters": [ + "Player", + "Health", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Player", + "Health", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::Hit" + }, + "parameters": [ + "Player", + "Health", + "1", + "", + "", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::IsJustDamaged" + }, + "parameters": [ + "Player", + "Health", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "assets\\SawHit.wav", + "", + "100", + "1" + ] + }, + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Player", + "\"hurt\"" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Platformer behavior", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::AbortJump" + }, + "parameters": [ + "Player", + "PlatformerObject" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Player", + "PlatformerObject", + "" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Player", + "PlatformerCharacterAnimator", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "Player", + "Traps.AngleToPosition(Player.X(), Player.Y())", + "40", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeTimeScale" + }, + "parameters": [ + "", + "0.1" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "0.02" + ] + }, + { + "type": { + "value": "ChangeTimeScale" + }, + "parameters": [ + "", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Return to normal", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "AnimationName" + }, + "parameters": [ + "Player", + "\"hurt\"" + ] + }, + { + "type": { + "value": "AnimationEnded" + }, + "parameters": [ + "Player" + ] + }, + { + "type": { + "inverted": true, + "value": "Health::Health::IsDead" + }, + "parameters": [ + "Player", + "Health", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Arreter" + }, + "parameters": [ + "Player" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Player", + "PlatformerObject", + "yes" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Player", + "PlatformerCharacterAnimator", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Death", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::IsDead" + }, + "parameters": [ + "Player", + "Health", + "" + ] + }, + { + "type": { + "value": "AnimationName" + }, + "parameters": [ + "Player", + "\"hurt\"" + ] + }, + { + "type": { + "value": "AnimationEnded" + }, + "parameters": [ + "Player" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Player", + "PlatformerObject", + "" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Player", + "PlatformerCharacterAnimator", + "" + ] + }, + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Player", + "\"dead\"" + ] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "DeathSound", + "", + "50", + "1.2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "AnimationName" + }, + "parameters": [ + "Player", + "\"dead\"" + ] + }, + { + "type": { + "value": "AnimationEnded" + }, + "parameters": [ + "Player" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "Player", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 0, + "ambientLightColorG": 8947536, + "ambientLightColorR": 16, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "Platform", + "type": "PlatformBehavior::PlatformBehavior" + }, + { + "name": "PlatformerCharacterAnimator", + "type": "PlatformerCharacterAnimator::PlatformerCharacterAnimator" + }, + { + "name": "PlatformerObject", + "type": "PlatformBehavior::PlatformerObjectBehavior" + }, + { + "name": "RectangleMovement", + "type": "RectangleMovement::RectangleMovement" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "", + "category": "Movement", + "extensionNamespace": "", + "fullName": "Platformer character animator", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggZD0iTTIzLDExYzIuMiwwLDQtMS44LDQtNHMtMS44LTQtNC00cy00LDEuOC00LDRTMjAuOCwxMSwyMywxMXoiLz4NCgk8cGF0aCBkPSJNMzAuOCwxMi40Yy0wLjMtMC40LTEtMC41LTEuNC0wLjJsLTIuOSwyLjNjLTAuOCwwLjctMiwwLjYtMi43LTAuMmwtNy45LTcuOWMtMS42LTEuNi00LjEtMS42LTUuNywwTDcuMyw5LjMNCgkJYy0wLjQsMC40LTAuNCwxLDAsMS40czEsMC40LDEuNCwwbDIuOC0yLjhjMC44LTAuOCwyLjEtMC44LDIuOSwwbDEuNiwxLjZMMTEuNiwxNGMtMSwxLTEuNCwyLjMtMS4xLDMuN2MwLjIsMS4xLDAuOSwyLDEuOCwyLjYNCgkJbC0xLjYsMS42Yy0wLjQsMC40LTEsMC40LTEuNCwwbC0zLjYtMy42Yy0wLjQtMC40LTEtMC40LTEuNCwwcy0wLjQsMSwwLDEuNGwzLjYsMy42YzAuNiwwLjYsMS4zLDAuOSwyLjEsMC45czEuNi0wLjMsMi4xLTAuOQ0KCQlsMi4xLTIuMWwyLjUsMWMwLjcsMC4zLDEuMiwxLDEuMiwxLjh2NmMwLDAuNiwwLjQsMSwxLDFzMS0wLjQsMS0xdi02YzAtMS42LTEtMy4xLTIuNS0zLjdsLTEuNy0wLjdsNS4yLTUuMmwxLjQsMS40DQoJCWMwLjgsMC44LDEuOCwxLjIsMi45LDEuMmMwLjksMCwxLjgtMC4zLDIuNS0wLjlsMi45LTIuM0MzMS4xLDEzLjQsMzEuMSwxMi44LDMwLjgsMTIuNHoiLz4NCjwvZz4NCjwvc3ZnPg0K", + "name": "PlatformerCharacterAnimator", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Sports and Fitness/Sports and Fitness_training_running_run.svg", + "shortDescription": "Change animations and horizontal flipping of a platformer character automatically.", + "version": "1.0.0", + "description": [ + "Automatically change the animations and horizontal flipping of a platformer character based on movement and interaction with platform objects.", + "", + "The platformer example uses this extension ([open the project online](https://editor.gdevelop.io/?project=example://platformer))." + ], + "origin": { + "identifier": "PlatformerCharacterAnimator", + "name": "gdevelop-extension-store" + }, + "tags": [ + "animations", + "platformer", + "flipping", + "automatic" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Change animations and horizontal flipping of a platformer character automatically.", + "fullName": "Platformer character animator", + "name": "PlatformerCharacterAnimator", + "objectType": "Sprite", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Flip character based on input from controls", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableHorizontalFlipping" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": [ + "Object", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Change animations", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableAnimationChanges" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyJumpAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsFalling" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyFallAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnFloor" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyRunAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyIdleAnimationName()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyClimbAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": [ + "Object" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PauseAnimation" + }, + "parameters": [ + "Object" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": [ + "Object" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.", + "fullName": "Enable (or disable) automated animation changes", + "functionType": "Action", + "name": "EnableChangingAnimations", + "sentence": "Enable automated animation changes on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableAnimationChanges" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"EnableAnimationChanges\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableAnimationChanges" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Change animations automatically", + "name": "EnableAnimationChanges", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automated horizontal flipping of a platform character.", + "fullName": "Enable (or disable) automated horizontal flipping", + "functionType": "Action", + "name": "EnableHorizontalFlipping", + "sentence": "Enable automated horizontal flipping on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableHorizontalFlipping" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"EnableHorizontalFlipping\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableHorizontalFlipping" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Enable horizontal flipping", + "name": "EnableHorizontalFlipping", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Idle\" animation name. Do not use quotation marks.", + "fullName": "\"Idle\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetIdleAnimationName", + "sentence": "Set \"Idle\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyIdleAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Move\" animation name. Do not use quotation marks.", + "fullName": "\"Move\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetMoveAnimationName", + "sentence": "Set \"Move\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyRunAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Jump\" animation name. Do not use quotation marks.", + "fullName": "\"Jump\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetJumpAnimationName", + "sentence": "Set \"Jump\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyJumpAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Fall\" animation name. Do not use quotation marks.", + "fullName": "\"Fall\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetFallAnimationName", + "sentence": "Set \"Fall\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyFallAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Climb\" animation name. Do not use quotation marks.", + "fullName": "\"Climb\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetClimbAnimationName", + "sentence": "Set \"Climb\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyClimbAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "Enable animation changes", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EnableAnimationChanges" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable horizontal flipping", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EnableHorizontalFlipping" + }, + { + "value": "Idle", + "type": "String", + "label": "\"Idle\" animation name ", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "IdleAnimationName" + }, + { + "value": "Run", + "type": "String", + "label": "\"Run\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "RunAnimationName" + }, + { + "value": "Jump", + "type": "String", + "label": "\"Jump\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "JumpAnimationName" + }, + { + "value": "Fall", + "type": "String", + "label": "\"Fall\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "FallAnimationName" + }, + { + "value": "Climb", + "type": "String", + "label": "\"Climb\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "ClimbAnimationName" + }, + { + "value": "", + "type": "Behavior", + "label": "Platformer character", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "PlatformerBehavior" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "@4ian", + "category": "Game mechanic", + "extensionNamespace": "", + "fullName": "Health points and damage", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWhlYXJ0LWhhbGYtZnVsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNi41LDVDMTUsNSAxMy41OCw1LjkxIDEzLDcuMlYxNy43NEMxNy4yNSwxMy44NyAyMCwxMS4yIDIwLDguNUMyMCw2LjUgMTguNSw1IDE2LjUsNU0xNi41LDNDMTkuNTgsMyAyMiw1LjQxIDIyLDguNUMyMiwxMi4yNyAxOC42LDE1LjM2IDEzLjQ1LDIwLjAzTDEyLDIxLjM1TDEwLjU1LDIwLjAzQzUuNCwxNS4zNiAyLDEyLjI3IDIsOC41QzIsNS40MSA0LjQyLDMgNy41LDNDOS4yNCwzIDEwLjkxLDMuODEgMTIsNS4wOEMxMy4wOSwzLjgxIDE0Ljc2LDMgMTYuNSwzWiIgLz48L3N2Zz4=", + "name": "Health", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/heart-half-full.svg", + "shortDescription": "Manage health points and damage, including a protective shield and armor.", + "version": "0.2.0", + "description": [ + "Manage health points including a protective shield and armor. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.", + "", + "Damage calculations are performed in this order:", + "", + "Incoming Damage -> Is Damage Cooldown active? -> Chance to Dodge -> Flat Damage Reduction -> Percent Damage Reduction -> Damage to Shield -> Damage to Health", + "", + "How to use:", + "", + "- Set desired values in behavior properties", + "- To apply damage use “Apply damage to an object”", + "- To heal health, use “Heal object” action", + "- To activate the shield, use “Activate shield” action", + "- Health and shield regeneration will happen automatically based on properties", + " ", + "Tips:", + "", + "- While damage cooldown is active, no damage will be applied to health or shield (the object is invincible)", + "- Try using the “Blink” extension while damage cooldown is active", + "- Use the “Is just damaged” or \"Is just healed\" conditions to trigger sound and visual effects", + "", + "Health properties:", + "", + "- Starting health points", + "- Maximum health points. Use \"0\" for no maximum", + "- Damage cooldown (seconds) Use \"0\" for no cooldown", + "- Rate of health regeneration (points per second)", + "- Delay before health regeneration starts after being hit (seconds)", + "- Allow heals to increase health above max health (regen will never exceed max health)", + "", + "Shield properties:", + "", + "- Max shield points. Use \"0\" for no maximum", + "- Duration of shield (seconds) Use \"0\" to make shield permanent", + "- Rate of shield regeneration (points per second)", + "- Delay before shield regeneration starts after being hit (seconds)", + "- Block excess damage when shield is broken (yes/no)", + "", + "The top-down RPG example uses this extension ([open the project online](https://editor.gdevelop.io/?project=example://top-down-rpg))." + ], + "origin": { + "identifier": "Health", + "name": "gdevelop-extension-store" + }, + "tags": [ + "health", + "life", + "damage", + "hit", + "heal", + "shield", + "regeneration", + "armor" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "xpwUwByyImTDcHEqDUqfyg0oRBt1", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Manage health (life) points including a protective shield and armor.", + "fullName": "Health", + "name": "Health", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + }, + { + "type": { + "value": "Health::Health::SetCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Health", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Regeneration", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Health", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHealthRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "Health::Health::PropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::MaxHealth()" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"", + ">", + "Object.Behavior::PropertyHealthRegenDelay()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyHealthRegenRate() * TimeDelta()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Correct any values above maximum limits", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::MaxHealth()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxHealth()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset triggers", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsHealthJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyIsJustHealed" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyIsJustDodged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Shield", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Regeneration", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shield", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyShieldRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "Health::Health::PropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"", + ">", + "Object.Behavior::PropertyShieldRegenDelay()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::RenewShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyShieldRegenRate() * TimeDelta()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Correct any values above maximum limits", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Remove shield points if shield expired", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset damage trigger", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Apply damage to the object. Shield and armor can reduce this damage if enabled.", + "fullName": "Apply damage to an object", + "functionType": "Action", + "group": "Health", + "name": "Hit", + "sentence": "Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Incoming damage", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only consider incoming damage when damage cooldown is not active", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"DamageValue\")" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Chance to dodge", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "No damage will be applied when dodged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "RandomFloatInRange(0,1)", + "<", + "Object.Behavior::PropertyChanceToDodge()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDodged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Damage reduction from Armor", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"UseArmor\"" + ] + }, + { + "type": { + "value": "Health::Health::PropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Flat damage reduction", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,Object.Behavior::PropertyDamageToBeApplied() - Object.Behavior::PropertyFlatDamageReduction())" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Percent damage reduction", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyPercentDamageReduction" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "Health::Health::PropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "*", + "1 - min(1, Object.Behavior::PropertyPercentDamageReduction())" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply damage to shield", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If shield is active, damage the shield first", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"UseShield\"" + ] + }, + { + "type": { + "value": "Health::Health::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "Health::Health::PropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "Health::Health::TriggerDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If damage is less than shield, subtract damage from shield.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "Object.Behavior::PropertyCurrentShieldPoints()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "Object.Behavior::PropertyDamageToBeApplied()" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyShieldDamageTaken" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDamageToBeApplied()" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If damage is greater than shield, conditionally apply excess damage based on property", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyCurrentShieldPoints()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyShieldDamageTaken" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyCurrentShieldPoints()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyBlockExcessDamage" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Apply excess damage only if shield does not block excess damage", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::PropertyBlockExcessDamage" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "Object.Behavior::PropertyCurrentShieldPoints()" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply damage to health", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyDamageToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes", + "" + ] + }, + { + "type": { + "value": "Health::Health::TriggerDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyCurrentHealth() - Object.Behavior::PropertyDamageToBeApplied()", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Points of damage", + "name": "DamageValue", + "type": "expression" + }, + { + "defaultValue": "yes", + "description": "Shield can reduce damage taken", + "name": "UseShield", + "optional": true, + "type": "yesorno" + }, + { + "defaultValue": "yes", + "description": "Armor can reduce damage taken", + "name": "UseArmor", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the health points of the object. Will not trigger damage cooldown.", + "fullName": "Change health points", + "functionType": "Action", + "group": "Health configuration", + "name": "SetHealth", + "sentence": "Change the health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If MaxHealth is set, prevent health from going above it", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyCurrentHealth(), Object.Behavior::PropertyMaxHealth())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "New health value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the health points of the object. Will not trigger damage cooldown.", + "fullName": "Change health points (deprecated)", + "functionType": "Action", + "group": "Health configuration", + "name": "SetCurrentHealth", + "private": true, + "sentence": "Change the health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetHealth" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "New health value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Heal the object by increasing its health points.", + "fullName": "Heal object", + "functionType": "Action", + "group": "Health", + "name": "Heal", + "sentence": "Heal _PARAM0_ with _PARAM2_ health points", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Heal", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If Max Health is not set, do not enforce Max Health", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"HealValue\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If Max Health is set and Overhealing is not allowed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "inverted": true, + "value": "Health::Health::PropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealToBeApplied" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(GetArgumentAsNumber(\"HealValue\"),Object.Behavior::PropertyMaxHealth() - Object.Behavior::PropertyCurrentHealth())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Perform heal", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyHealToBeApplied()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update healing trigger", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustHealed" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Points to heal (will be added to object health)", + "name": "HealValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the object maximum health points.", + "fullName": "Maximum health points", + "functionType": "Action", + "group": "Health configuration", + "name": "SetMaxHealth", + "sentence": "Change the maximum health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure Current Health does not exceed new Max Health", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::MaxHealth()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::MaxHealth()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Maximum health", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the rate of health regeneration.", + "fullName": "Rate of health regeneration", + "functionType": "Action", + "group": "Health configuration", + "name": "SetHealthRegenRate", + "sentence": "Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealthRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Rate of regen", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the duration of damage cooldown (seconds).", + "fullName": "Damage cooldown", + "functionType": "Action", + "group": "Health configuration", + "name": "SetCooldownDuration", + "sentence": "Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Duration of damage cooldown (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the delay before health regeneration starts after being hit.", + "fullName": "Health regeneration delay", + "functionType": "Action", + "group": "Health configuration", + "name": "SetHealthRegenDelay", + "sentence": "Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealthRegenDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Delay (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the chance to dodge incoming damage.", + "fullName": "Chance to dodge incoming damage", + "functionType": "Action", + "group": "Health configuration", + "name": "SetChanceToDodge", + "sentence": "Change the chance to dodge on _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyChanceToDodge" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Chance to dodge (Range: 0 to 1)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the flat damage reduction from armor. Incoming damage is reduced by this value.", + "fullName": "Flat damage reduction from armor", + "functionType": "Action", + "group": "Health configuration", + "name": "SetFlatDamageReduction", + "sentence": "Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyFlatDamageReduction" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Flat reduction from armor", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the percent damage reduction from armor. Range: 0 to 1.", + "fullName": "Percent damage reduction from armor", + "functionType": "Action", + "group": "Health configuration", + "name": "SetPercentDamageReduction", + "sentence": "Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyPercentDamageReduction" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Percent damage reduction from armor", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Allow heals to increase health above max health. Regeneration will not exceed max health.", + "fullName": "Allow over-healing", + "functionType": "Action", + "group": "Health configuration", + "name": "AllowOverHealing", + "sentence": "Allow over-healing on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Allow over-healing", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Mark object as hit at least once.", + "fullName": "Mark object as hit at least once", + "functionType": "Action", + "group": "Health configuration", + "name": "SetHitAtLeastOnce", + "private": true, + "sentence": "Mark _PARAM0_ as hit at least once: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Hit at least once", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Mark object as just damaged.", + "fullName": "Mark object as just damaged", + "functionType": "Action", + "group": "Health configuration", + "name": "SetJustDamaged", + "private": true, + "sentence": "Mark _PARAM0_ as just damaged: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsHealthJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsHealthJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Just damaged", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Trigger damage cooldown.", + "fullName": "Trigger damage cooldown", + "functionType": "Action", + "group": "Health", + "name": "TriggerDamageCooldown", + "sentence": "Trigger the damage cooldown on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Mark that the object was hit at least once (used for initial state of damage cooldown)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::HitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object has been hit at least once.", + "fullName": "Object has been hit at least once", + "functionType": "Condition", + "group": "Health", + "name": "HitAtLeastOnce", + "private": true, + "sentence": "_PARAM0_ has been hit at least once", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This condition is used to prevent \"damage cooldown\" from being active when the game starts.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if health was just damaged previously in the events.", + "fullName": "Is health just damaged", + "functionType": "Condition", + "group": "Health", + "name": "IsJustDamaged", + "sentence": "Health has just been damaged on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyIsHealthJustDamaged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object was just healed previously in the events.", + "fullName": "Is just healed", + "functionType": "Condition", + "group": "Health", + "name": "IsJustHealed", + "sentence": "_PARAM0_ has just been healed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyIsJustHealed" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if damage cooldown is active. Object and shield cannot be damaged while this is active.", + "fullName": "Is damage cooldown active", + "functionType": "Condition", + "group": "Health", + "name": "IsDamageCooldownActive", + "sentence": "Damage cooldown on _PARAM0_ is active", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Health::Health::PropertyDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"", + "<", + "Object.Behavior::PropertyDamageCooldown()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object is considered dead (no health points).", + "fullName": "Is dead", + "functionType": "Condition", + "group": "Health", + "name": "IsDead", + "sentence": "_PARAM0_ is dead", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyCurrentHealth" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "maximum health points of the object.", + "fullName": "Maximum health points", + "functionType": "ExpressionAndCondition", + "group": "Health", + "name": "MaxHealth", + "sentence": "maximum health points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxHealth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Duration of damage cooldown (seconds).", + "fullName": "Damage cooldown", + "functionType": "Expression", + "group": "Health", + "name": "DamageCooldownDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDamageCooldown()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "current health points of the object.", + "fullName": "Health points", + "functionType": "ExpressionAndCondition", + "group": "Health", + "name": "Health", + "sentence": "health points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCurrentHealth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay before health regeneration starts after last being hit (seconds).", + "fullName": "Health regeneration delay", + "functionType": "Expression", + "group": "Health", + "name": "HealthRegenDelay", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealthRegenDelay()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Rate of health regeneration (points per second).", + "fullName": "Rate of health regeneration", + "functionType": "Expression", + "group": "Health", + "name": "HealthRegenRate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealthRegenRate()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time before damage cooldown ends (seconds).", + "fullName": "Time remaining in damage cooldown", + "functionType": "Expression", + "group": "Health", + "name": "DamageCooldownRemaining", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0,Object.Behavior::PropertyDamageCooldown() - Object.ObjectTimerElapsedTime(\"__Health.TimeSinceLastHit\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time since last hit (seconds).", + "fullName": "Time since last hit", + "functionType": "Expression", + "group": "Health", + "name": "TimeSinceLastHit", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ObjectTimerElapsedTime(\"__Health.TimeSinceLastHit\")" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Chance to dodge incoming damage.", + "fullName": "Chance to dodge incoming damage", + "functionType": "Expression", + "group": "Health", + "name": "ChanceToDodge", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyChanceToDodge()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Flat damage reduction from armor. Incoming damage is reduced by this value.", + "fullName": "Flat damage reduction from armor", + "functionType": "Expression", + "group": "Health", + "name": "FlatDamageReduction", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyFlatDamageReduction()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Percent damage reduction from armor. Range: 0 to 1.", + "fullName": "Percent damage reduction from armor", + "functionType": "Expression", + "group": "Health", + "name": "PercentDamageReduction", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPercentDamageReduction()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Health damage taken from most recent hit.", + "fullName": "Health damage taken from most recent hit", + "functionType": "Expression", + "group": "Health", + "name": "PreviousDamageTaken", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDamageToBeApplied()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum shield points of the object.", + "fullName": "Maximum shield points", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetMaxShield", + "sentence": "Change the maximum shield of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Maximum shield", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change current shield points. Will not trigger damage cooldown.", + "fullName": "Shield points", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetShieldPoints", + "sentence": "Change current shield points on _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Shield points", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change rate of shield regeneration.", + "fullName": "Shield regeneration rate", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetShieldRegenRate", + "sentence": "Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyShieldRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Regeneration rate (points per second)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change delay before shield regeneration starts after being hit.", + "fullName": "Shield regeneration delay", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetShieldRegenDelay", + "sentence": "Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyShieldRegenDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Regeneration delay (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change duration of shield. Use \"0\" to make shield permanent.", + "fullName": "Duration of shield", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetShieldDuration", + "sentence": "Change the duration of shield on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Shield duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Renew shield duration to it's full value.", + "fullName": "Renew shield duration", + "functionType": "Action", + "group": "Shield configuration", + "name": "RenewShieldDuration", + "sentence": "Renew the shield duration on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.ShieldDuration\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Activate the shield by setting the shield points and renewing the shield duration (optional).", + "fullName": "Activate shield", + "functionType": "Action", + "group": "Shield", + "name": "ActivateShield", + "sentence": "Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ShieldPoints\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(GetArgumentAsNumber(\"ShieldPoints\"),Object.Behavior::MaxShield())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"RenewShieldDuration\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::RenewShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Shield points", + "name": "ShieldPoints", + "type": "expression" + }, + { + "defaultValue": "yes", + "description": "Renew shield duration", + "name": "RenewShieldDuration", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change maximum shield points.", + "fullName": "Max shield points ", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetMaxShieldPoints", + "sentence": "Change the maximum shield points on _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Shield points", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) blocking excess damage when shield breaks.", + "fullName": "Block excess damage when shield breaks", + "functionType": "Action", + "group": "Shield configuration", + "name": "SetShieldBlockExcessDamage", + "sentence": "Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyBlockExcessDamage" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyBlockExcessDamage" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Block excess damage", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the shield was just damaged previously in the events.", + "fullName": "Is shield just damaged", + "functionType": "Condition", + "group": "Shield", + "name": "IsShieldJustDamaged", + "sentence": "Shield on _PARAM0_ has just been damaged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if incoming damage was just dodged.", + "fullName": "Damage was just dodged", + "functionType": "Condition", + "group": "Health", + "name": "IsJustDodged", + "sentence": "_PARAM0_ just dodged incoming damage", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyIsJustDodged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the shield is active (based on shield points and duration).", + "fullName": "Is shield active", + "functionType": "Condition", + "group": "Shield", + "name": "IsShieldActive", + "sentence": "Shield on _PARAM0_ is active", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyCurrentShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Don't check the timer when duration is zero (or negative)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.ShieldDuration\"", + "<", + "Object.Behavior::PropertyShieldDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "maximum shield points of the object.", + "fullName": "Maximum shield points", + "functionType": "ExpressionAndCondition", + "group": "Shield", + "name": "MaxShield", + "sentence": "maximum shield points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Duration of the shield (seconds).", + "fullName": "Duration of shield", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay before shield regeneration starts after being hit (seconds).", + "fullName": "Shield regeneration delay", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldRegenDelay", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldRegenDelay()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Rate of shield regeneration (points per second).", + "fullName": "Rate of shield regeneration", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldRegenRate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldRegenRate()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time before the shield duration ends (seconds).", + "fullName": "Time before shield duration ends", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldTimeRemaining", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0,Object.Behavior::PropertyShieldDuration() - Object.ObjectTimerElapsedTime(\"__Health.ShieldDuration\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "current shield points of the object.", + "fullName": "Shield points", + "functionType": "ExpressionAndCondition", + "group": "Shield", + "name": "ShieldPoints", + "sentence": "shield points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCurrentShieldPoints()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Shield damage taken from most recent hit.", + "fullName": "Shield damage taken from most recent hit", + "functionType": "Expression", + "group": "Health", + "name": "PreviousDamageToShield", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldDamageTaken()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Health points gained from previous heal.", + "fullName": "Health points gained from previous heal", + "functionType": "Expression", + "group": "Health", + "name": "PreviousHealAmount", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealToBeApplied()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "100", + "type": "Number", + "label": "Starting health (life) points", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "Health" + }, + { + "value": "0", + "type": "Number", + "label": "Current health (life) points", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "CurrentHealth" + }, + { + "value": "100", + "type": "Number", + "label": "Maximum health (points) Use \"0\" for no maximum", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "MaxHealth" + }, + { + "value": "0", + "type": "Number", + "label": "Damage cooldown (seconds) Use \"0\" for no cooldown", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "DamageCooldown" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "IsHealthJustDamaged" + }, + { + "value": "0", + "type": "Number", + "label": "Rate of health regeneration (points per second)", + "description": "", + "group": "Health regeneration", + "extraInformation": [], + "hidden": false, + "name": "HealthRegenRate" + }, + { + "value": "0", + "type": "Number", + "label": "Delay before health regeneration starts after being hit (seconds)", + "description": "", + "group": "Health regeneration", + "extraInformation": [], + "hidden": false, + "name": "HealthRegenDelay" + }, + { + "value": "", + "type": "Boolean", + "label": "Allow heals to increase health above max health (regen will never exceed max health)", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "AllowOverHealing" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "HitAtLeastOnce" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsJustHealed" + }, + { + "value": "", + "type": "Number", + "label": "Current shield points", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": true, + "name": "CurrentShieldPoints" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum shield (points) Use \"0\" for no maximum", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "MaxShieldPoints" + }, + { + "value": "5", + "type": "Number", + "label": "Duration of shield (seconds) Use \"0\" to make shield permanent", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldDuration" + }, + { + "value": "0", + "type": "Number", + "label": "Rate of shield regeneration (points per second)", + "description": "", + "group": "Shield regeneration", + "extraInformation": [], + "hidden": false, + "name": "ShieldRegenRate" + }, + { + "value": "", + "type": "Boolean", + "label": "Block excess damage when shield is broken", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "BlockExcessDamage" + }, + { + "value": "", + "type": "Number", + "label": "Delay before shield regeneration starts after being hit (seconds)", + "description": "", + "group": "Shield regeneration", + "extraInformation": [], + "hidden": false, + "name": "ShieldRegenDelay" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": true, + "name": "IsShieldJustDamaged" + }, + { + "value": "0", + "type": "Number", + "label": "Chance to dodge incoming damage (Range: 0 to 1) If damage is dodged, no damage is applied", + "description": "", + "group": "Health configuration", + "extraInformation": [], + "hidden": false, + "name": "ChanceToDodge" + }, + { + "value": "0", + "type": "Number", + "label": "Damage to health from the previous incoming damage", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "DamageToBeApplied" + }, + { + "value": "0", + "type": "Number", + "label": "Flat damage reduction from armor (incoming damage is reduced by this value)", + "description": "", + "group": "Armor", + "extraInformation": [], + "hidden": false, + "name": "FlatDamageReduction" + }, + { + "value": "0", + "type": "Number", + "label": "Percentage damage reduction from armor (Range: 0 to 1)", + "description": "", + "group": "Armor", + "extraInformation": [], + "hidden": false, + "name": "PercentDamageReduction" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsJustDodged" + }, + { + "value": "", + "type": "Number", + "label": "Damage to shield from the previous incoming damage", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShieldDamageTaken" + }, + { + "value": "0", + "type": "Number", + "label": "Health points gained from the previous heal", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HealToBeApplied" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "@4ian, Tristan Rhodes (https://victrisgames.itch.io/)", + "category": "Movement", + "extensionNamespace": "", + "fullName": "Rectangular movement", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXNoYXBlLXJlY3RhbmdsZS1wbHVzIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE5LDZIMjJWOEgxOVYxMUgxN1Y4SDE0VjZIMTdWM0gxOVY2TTE3LDE3VjE0SDE5VjE5SDNWNkgxMVY4SDVWMTdIMTdaIiAvPjwvc3ZnPg==", + "name": "RectangleMovement", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/shape-rectangle-plus.svg", + "shortDescription": "Move objects in a rectangular pattern.", + "version": "1.0.1", + "description": [ + "Move objects in a rectangular pattern with easing functions from the Tween extension.", + "", + "It can be used for:", + "- Moveable platforms", + "- Enemy movement patterns", + "", + "An example allows to check some settings ([open the project online](https://editor.gdevelop.io/?project=example://rectangular-movement))." + ], + "origin": { + "identifier": "RectangleMovement", + "name": "gdevelop-extension-store" + }, + "tags": [ + "rectangular", + "movement", + "rectangle", + "patrol", + "platform", + "enemy" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Move objects in a rectangular pattern.", + "fullName": "Rectangular movement", + "name": "RectangleMovement", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyOldX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.X()" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyOldY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Y()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the initial state according to the configuration.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyInitialPosition" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Top-right corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::TopRightDuration() / Object.Behavior::LoopDuration()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyInitialPosition" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Bottom-right corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::BottomRightDuration() / Object.Behavior::LoopDuration()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyInitialPosition" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Bottom-left corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::BottomLeftDuration() / Object.Behavior::LoopDuration()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyLeft" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.X() - Object.Behavior::DeltaX()" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Y() - Object.Behavior::DeltaY()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update the rectangle when the object is moved outside of the behavior.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyLeft" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.X() - Object.Behavior::PropertyOldX()" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyTop" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Y() - Object.Behavior::PropertyOldY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move the object on the rectangular path.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyLeft() + Object.Behavior::DeltaX()", + "=", + "Object.Behavior::PropertyTop() + Object.Behavior::DeltaY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save the position to detect when the object is moved outside of the behavior.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyOldX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.X()" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyOldY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Y()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Step on the path.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "mod(Object.Behavior::PropertyProgress() + TimeDelta() / Object.Behavior::LoopDuration(), 1)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "mod(Object.Behavior::PropertyProgress() - TimeDelta() / Object.Behavior::LoopDuration(), 1)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Teleport the object to a corner of the movement rectangle.", + "fullName": "Teleport at a corner", + "functionType": "Action", + "name": "TeleportToCorner", + "sentence": "Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Corner\")", + "=", + "\"Top-left corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Corner\")", + "=", + "\"Top-right corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::TopRightDuration() / Object.Behavior::LoopDuration()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Corner\")", + "=", + "\"Bottom-right corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::BottomRightDuration() / Object.Behavior::LoopDuration()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Corner\")", + "=", + "\"Bottom-left corner\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::BottomLeftDuration() / Object.Behavior::LoopDuration()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Corner", + "name": "Corner", + "supplementaryInformation": "[\"Top-left corner\",\"Top-right corner\",\"Bottom-left corner\",\"Bottom-right corner\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Return the perimeter of the movement rectangle.", + "fullName": "Perimeter", + "functionType": "Expression", + "group": "Rectangular movement shape", + "name": "Perimeter", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "2 * (abs(Object.Behavior::PropertyWidth()) + abs(Object.Behavior::PropertyHeight()))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the time the object takes to go through the whole rectangle (in seconds).", + "fullName": "Loop duration", + "functionType": "Expression", + "name": "LoopDuration", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "2 * (Object.Behavior::PropertyHorizontalEdgeDuration() + Object.Behavior::PropertyVerticalEdgeDuration())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the time the object takes to go through a horizontal edge (in seconds).", + "fullName": "Horizontal edge duration", + "functionType": "Expression", + "name": "HorizontalEdgeDuration", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHorizontalEdgeDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the time the object takes to go through a vertical edge (in seconds).", + "fullName": "Vertical edge duration", + "functionType": "Expression", + "name": "VerticalEdgeDuration", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyVerticalEdgeDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the rectangle width.", + "fullName": "Width", + "functionType": "Expression", + "group": "Rectangular movement/Shape", + "name": "Width", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyWidth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the rectangle height.", + "fullName": "Height", + "functionType": "Expression", + "group": "Rectangular movement/Shape", + "name": "Height", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHeight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the left bound of the movement.", + "fullName": "Left bound", + "functionType": "Expression", + "group": "Rectangular movement/Shape", + "name": "Left", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyLeft()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the top bound of the movement.", + "fullName": "Top bound", + "functionType": "Expression", + "group": "Rectangular movement/Shape", + "name": "Top", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTop()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the right bound of the movement.", + "fullName": "Right bound", + "functionType": "Expression", + "group": "Rectangular movement/Shape", + "name": "Right", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyLeft() + Object.Behavior::PropertyWidth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the bottom bound of the movement.", + "fullName": "Bottom bound", + "functionType": "Expression", + "group": "Rectangular movement/Shape", + "name": "Bottom", + "sentence": "Set initial Y of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTop() + Object.Behavior::PropertyHeight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the left bound of the rectangular movement.", + "fullName": "Left bound", + "functionType": "Action", + "group": "Rectangular movement shape", + "name": "SetLeft", + "sentence": "Change the movement left bound of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyWidth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyLeft() - GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyLeft" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the top bound of the rectangular movement.", + "fullName": "Top bound", + "functionType": "Action", + "group": "Rectangular movement shape", + "name": "SetTop", + "sentence": "Change the movement top bound of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyHeight" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyTop() - GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the right bound of the rectangular movement.", + "fullName": "Right bound", + "functionType": "Action", + "group": "Rectangular movement shape", + "name": "SetRight", + "sentence": "Change the movement right bound of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyWidth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\") - Object.Behavior::PropertyLeft()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the bottom bound of the rectangular movement.", + "fullName": "Bottom bound", + "functionType": "Action", + "group": "Rectangular movement shape", + "name": "SetBottom", + "sentence": "Change the movement bottom bound of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyHeight" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\") - Object.Behavior::PropertyTop()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the time the object takes to go through a horizontal edge (in seconds).", + "fullName": "Horizontal edge duration", + "functionType": "Action", + "group": "Rectangular movement speed", + "name": "SetHorizontalEdgeDuration", + "sentence": "Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyHorizontalEdgeDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the time the object takes to go through a vertical edge (in seconds).", + "fullName": "Vertical edge duration", + "functionType": "Action", + "group": "Rectangular movement speed", + "name": "SetVerticalEdgeDuration", + "sentence": "Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyVerticalEdgeDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the direction to clockwise or counter-clockwise.", + "fullName": "Clockwise", + "functionType": "Action", + "group": "Rectangular movement speed", + "name": "SetClockwise", + "sentence": "Use clockwise direction for _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Clockwise", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the easing function of the movement.", + "fullName": "Easing", + "functionType": "Action", + "group": "Rectangular movement speed", + "name": "SetEasing", + "sentence": "Change the easing of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Toggle the direction to clockwise or counter-clockwise.", + "fullName": "Toggle direction", + "functionType": "Action", + "name": "ToogleClockwise", + "sentence": "Toogle the direction of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyToogleClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyToogleClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyToogleClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyToogleClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object is moving to the left.", + "fullName": "Is moving left", + "functionType": "Condition", + "name": "IsMovingLeft", + "sentence": "_PARAM0_ is moving to the left", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnTop" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnBottom" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object is moving up.", + "fullName": "Is moving up", + "functionType": "Condition", + "name": "IsMovingUp", + "sentence": "_PARAM0_ is moving up", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnLeft" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnRight" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is moving to the right.", + "fullName": "Is moving right", + "functionType": "Condition", + "name": "IsMovingRight", + "sentence": "_PARAM0_ is moving to the right", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnTop" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnBottom" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object is moving down.", + "fullName": "Is moving down", + "functionType": "Condition", + "name": "IsMovingDown", + "sentence": "_PARAM0_ is moving down", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnRight" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "RectangleMovement::RectangleMovement::PropertyClockwise" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "RectangleMovement::RectangleMovement::IsOnLeft" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is on the left side of the rectangle.", + "fullName": "Is on left", + "functionType": "Condition", + "name": "IsOnLeft", + "sentence": "_PARAM0_ is on the left side", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + ">=", + "Object.Behavior::BottomLeftDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is on the top side of the rectangle.", + "fullName": "Is on top", + "functionType": "Condition", + "name": "IsOnTop", + "sentence": "_PARAM0_ is on the top side", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<=", + "Object.Behavior::TopRightDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is on the right side of the rectangle.", + "fullName": "Is on right", + "functionType": "Condition", + "name": "IsOnRight", + "sentence": "_PARAM0_ is on the right side", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + ">=", + "Object.Behavior::TopRightDuration()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<=", + "Object.Behavior::BottomRightDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Object is on the bottom side of the rectangle.", + "fullName": "Is on bottom", + "functionType": "Condition", + "name": "IsOnBottom", + "sentence": "_PARAM0_ is on the bottom side", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + ">=", + "Object.Behavior::BottomRightDuration()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<=", + "Object.Behavior::BottomLeftDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the duration between the top-left vertex and the top-right one.", + "fullName": "Duration to top right", + "functionType": "Expression", + "name": "TopRightDuration", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHorizontalEdgeDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the duration between the top-left vertex and the bottom-right one.", + "fullName": "Duration to bottom right", + "functionType": "Expression", + "name": "BottomRightDuration", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHorizontalEdgeDuration() + Object.Behavior::PropertyVerticalEdgeDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the duration between the top-left vertex and the bottom-left one.", + "fullName": "Duration to bottom left", + "functionType": "Expression", + "name": "BottomLeftDuration", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "2 * Object.Behavior::PropertyHorizontalEdgeDuration() + Object.Behavior::PropertyVerticalEdgeDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).", + "fullName": "Progress on edge", + "functionType": "Expression", + "name": "EdgeProgress", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::HalfCurrentTime() / Object.Behavior::PropertyHorizontalEdgeDuration()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::HalfCurrentTime()", + ">=", + "abs(Object.Behavior::PropertyHorizontalEdgeDuration())" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "(Object.Behavior::HalfCurrentTime() - Object.Behavior::PropertyHorizontalEdgeDuration()) / Object.Behavior::PropertyVerticalEdgeDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the X position of the current edge origin.", + "fullName": "Edge origin X", + "functionType": "Expression", + "name": "EdgeOriginX", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + ">=", + "Object.Behavior::TopRightDuration()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<", + "Object.Behavior::BottomLeftDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyWidth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the Y position of the current edge origin.", + "fullName": "Edge origin Y", + "functionType": "Expression", + "name": "EdgeOriginY", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + ">=", + "Object.Behavior::BottomRightDuration()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<", + "Object.Behavior::Perimeter()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHeight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the X position of the current edge target.", + "fullName": "Edge target X", + "functionType": "Expression", + "name": "EdgeTargetY", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + ">=", + "Object.Behavior::TopRightDuration()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<", + "Object.Behavior::BottomLeftDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHeight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the Y position of the current edge target.", + "fullName": "Edge target Y", + "functionType": "Expression", + "name": "EdgeTargetX", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CurrentTime()", + "<", + "Object.Behavior::BottomRightDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyWidth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the time from the top-left vertex.", + "fullName": "Current time", + "functionType": "Expression", + "name": "CurrentTime", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyProgress() * Object.Behavior::LoopDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the covered length from the top-left vertex or the bottom-right one.", + "fullName": "Half Current length", + "functionType": "Expression", + "name": "HalfCurrentTime", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object. Behavior::LoopDuration() * mod(Object.Behavior::PropertyProgress(), 0.5)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the displacement on the X axis from the top-left vertex.", + "fullName": "Delta X", + "functionType": "Expression", + "name": "DeltaX", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::EdgeOriginX(), Object.Behavior::EdgeTargetX(), Object.Behavior::EdgeProgress())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the displacement on the Y axis from the top-left vertex.", + "fullName": "Delta Y", + "functionType": "Expression", + "name": "DeltaY", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::EdgeOriginY(), Object.Behavior::EdgeTargetY(), Object.Behavior::EdgeProgress())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RectangleMovement::RectangleMovement", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "100", + "type": "Number", + "label": "Width", + "description": "", + "group": "Dimension", + "extraInformation": [], + "hidden": false, + "name": "Width" + }, + { + "value": "100", + "type": "Number", + "label": "Height", + "description": "", + "group": "Dimension", + "extraInformation": [], + "hidden": false, + "name": "Height" + }, + { + "value": "true", + "type": "Boolean", + "label": "Clockwise", + "description": "", + "group": "Speed", + "extraInformation": [], + "hidden": false, + "name": "Clockwise" + }, + { + "value": "4", + "type": "Number", + "label": "Horizontal edge duration (in seconds)", + "description": "", + "group": "Speed", + "extraInformation": [], + "hidden": false, + "name": "HorizontalEdgeDuration" + }, + { + "value": "1", + "type": "Number", + "label": "Vertical edge duration (in seconds)", + "description": "", + "group": "Speed", + "extraInformation": [], + "hidden": false, + "name": "VerticalEdgeDuration" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Left" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Top" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Progress" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "OldX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "OldY" + }, + { + "value": "easeInOutSine", + "type": "Choice", + "label": "Easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "linear", + "easeInQuad", + "easeOutQuad", + "easeInOutQuad", + "easeInCubic", + "easeOutCubic", + "easeInOutCubic", + "easeInQuart", + "easeOutQuart", + "easeInOutQuart", + "easeInQuint", + "easeOutQuint", + "easeInOutQuint", + "easeInOutSine", + "easeInExpo", + "easeOutExpo", + "easeInOutExpo", + "easeInCirc", + "easeOutCirc", + "easeInOutCirc", + "easeOutBounce", + "easeInBack", + "easeOutBack", + "easeInOutBack", + "elastic", + "swingFromTo", + "swingFrom", + "swingTo", + "bounce", + "bouncePast", + "easeFromTo", + "easeFrom", + "easeTo" + ], + "hidden": false, + "name": "Easing" + }, + { + "value": "Top-left corner", + "type": "Choice", + "label": "Initial position", + "description": "", + "group": "", + "extraInformation": [ + "Top-left corner", + "Top-right corner", + "Bottom-right corner", + "Bottom-left corner" + ], + "hidden": false, + "name": "InitialPosition" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ToogleClockwise" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + } + ], + "externalLayouts": [], + "externalSourceFiles": [] +} \ No newline at end of file diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index de2a692..fba3150 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -39,7 +39,7 @@ { "messageByLocale": { "en": "- How to create a layer\n\n- How to add an extension\n\n- How to control the camera\n\n- How to make Tiled Sprites move at different speeds", - "fr": "- Comment créer une calque\n\n- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", + "fr": "- Comment créer un calque\n\n- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", "es": "- Cómo crear una capa\n\n- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades" } diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json new file mode 100644 index 0000000..47be7df --- /dev/null +++ b/tutorials/in-app/healthBar.json @@ -0,0 +1,485 @@ +{ + "id": "healthBar", + "editorSwitches": { + "Start": { + "editor": "Scene", + "scene": "level" + }, + "SwitchToEvents1": { + "editor": "EventsSheet", + "scene": "level" + } + }, + "availableLocales": [ + "en", + "fr" + ], + "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json", + "initialProjectData": { + "level": "Level", + "player": "Player" + }, + "endDialog": { + "content": [ + { + "messageByLocale": { + "en": "# You've finished this lesson!", + "fr": "# Vous avez terminé cette leçon !" + } + }, + { + "messageByLocale": { + "en": "Well done, in this tutorial you've learned:", + "fr": "Bien joué, voici ce que vous avez appris :" + } + }, + { + "messageByLocale": { + "en": "- How to create a layer\n\n- How to add and use a prefab object", + "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué" + } + }, + { + "messageByLocale": { + "en": "You can keep adding stuff to this game or publish it!", + "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !" + } + } + ] + }, + "flow": [ + { + "id": "Start", + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "Let's go!", + "fr": "C'est parti !" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "This game is a simple platformer.\nYou can move the player with the arrow keys and jump with space.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue.", + "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer." + } + } + } + }, + { + "elementToHighlightId": "#add-new-object-button", + "nextStepTrigger": { + "presenceOfElement": "#new-object-dialog" + }, + "tooltip": { + "placement": "left", + "description": { + "messageByLocale": { + "en": "Let's add a health bar for the player to see how much of their health is left.", + "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste." + } + } + } + }, + { + "elementToHighlightId": "#asset-store-tab", + "nextStepTrigger": { + "presenceOfElement": "#asset-store" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's choose a **prefab object** from the asset store", + "fr-FR": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-store #home-button", + "nextStepTrigger": { + "presenceOfElement": "#asset-store-home[data-is-filtered=\"false\"]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's go back to the store home page.", + "fr-FR": "Retournons à la page d'accueil du magasin." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-pack-category-prefab", + "nextStepTrigger": { + "presenceOfElement": "#asset-store-home[data-is-filtered=\"true\"] #asset-pack-resource-bars" + }, + "placement": "bottom", + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will use a prefab object. It's an object that comes with specific actions and conditions to simplify its use.", + "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-store-home[data-is-filtered=\"true\"] #asset-pack-resource-bars", + "nextStepTrigger": { + "presenceOfElement": "#asset-card-Flat-Heart-Bar" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will use a resource bar that can be filled or emptied.", + "fr": "Nous allons utiliser une barre de ressource. Elle peut être remplie ou vidée." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-card-Flat-Heart-Bar", + "nextStepTrigger": { + "presenceOfElement": "#add-asset-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's choose the hearts bar.", + "fr": "Choisissons la barre de coeurs." + } + } + } + }, + { + "elementToHighlightId": "#add-asset-button", + "nextStepTrigger": { + "presenceOfElement": "#object-item-6" + }, + "mapProjectData": { + "resourceBar": "sceneLastObjectName:level" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add it to the scene.", + "fr": "Ajoutons la à la scène." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#close-button", + "nextStepTrigger": { + "absenceOfElement": "#new-object-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's close the asset store.", + "fr": "Fermons le magasin de ressources" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#toolbar-open-layers-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-layer-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Layers** panel.", + "fr": "Ouvrez le panneau des **calques**.", + "es": "Abre el panel de **Capas**.", + "pt": "Abra o painel de **Camadas**." + } + }, + "placement": "bottom" + }, + "skippable": true + }, + { + "elementToHighlightId": "#add-layer-button", + "nextStepTrigger": { + "presenceOfElement": "#layer-1" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will create a layer that will holds the User Interface (UI) elements.", + "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU)." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-name", + "nextStepTrigger": { + "valueEquals": "Interface" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the name to **Interface**.", + "fr": "Changeons son nom en **Interface**." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-selected-unchecked", + "nextStepTrigger": { + "presenceOfElement": "#layer-1 #layer-selected-checked" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's select this layer as the **default layer** to add objects to.", + "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets." + } + }, + "placement": "left" + } + }, + { + "elementToHighlightId": "objectInObjectsList:resourceBar", + "nextStepTrigger": { + "instanceAddedOnScene": "resourceBar" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Drag the **$(resourceBar)** on the scene.", + "fr-FR": "Faites glisser **$(resourceBar)** du menu à la scène." + } + } + } + }, + { + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "I'm done", + "fr": "J'ai terminé" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nPlace $(resourceBar) so that it's in the top left corner of the rectangle.\n\nWhen you're done, click below.", + "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez ci-dessous." + } + }, + "placement": "top", + "image": { + "dataUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSI1Mi45MzEgMzAuMDE2IDE0MC4yNzkgOTUuMTY4IiB3aWR0aD0iMTQwLjI3OSIgaGVpZ2h0PSI5NS4xNjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHJlY3QgeD0iNTIuOTUiIHk9IjI5Ljk4NCIgd2lkdGg9IjE0MC4yNzkiIGhlaWdodD0iOTUuMTY4IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwgMCwgMCk7IGZpbGw6IG5vbmU7IHN0cm9rZS13aWR0aDogMnB4OyIvPgogIDxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJtYXRyaXgoMC4xMzk5MzEsIDAsIDAsIDAuMTM5OTMxLCA1OC42MDk0MTcsIDM0LjE2ODMyNykiPgogICAgPHBhdGggZD0iTSA0NSA4NC4zMzQgTCA2LjgwMiA0Ni4xMzYgQyAyLjQxNiA0MS43NSAwIDM1LjkxOCAwIDI5LjcxNiBjIDAgLTYuMjAzIDIuNDE2IC0xMi4wMzQgNi44MDIgLTE2LjQyIGMgNC4zODYgLTQuMzg2IDEwLjIxNyAtNi44MDIgMTYuNDIgLTYuODAyIGMgNi4yMDMgMCAxMi4wMzQgMi40MTYgMTYuNDIgNi44MDIgTCA0NSAxOC42NTQgbCA1LjM1OCAtNS4zNTggYyA0LjM4NiAtNC4zODYgMTAuMjE4IC02LjgwMiAxNi40MiAtNi44MDIgYyA2LjIwMyAwIDEyLjAzNCAyLjQxNiAxNi40MiA2LjgwMiBsIDAgMCBsIDAgMCBDIDg3LjU4NSAxNy42ODIgOTAgMjMuNTEzIDkwIDI5LjcxNiBjIDAgNi4yMDMgLTIuNDE1IDEyLjAzNCAtNi44MDIgMTYuNDIgTCA0NSA4NC4zMzQgeiBNIDIzLjIyMiAxMC40OTQgYyAtNS4xMzQgMCAtOS45NjEgMiAtMTMuNTkyIDUuNjMgUyA0IDI0LjU4MiA0IDI5LjcxNiBzIDIgOS45NjEgNS42MyAxMy41OTIgTCA0NSA3OC42NzggbCAzNS4zNyAtMzUuMzcgQyA4NC4wMDEgMzkuNjc3IDg2IDM0Ljg1IDg2IDI5LjcxNiBzIC0xLjk5OSAtOS45NjEgLTUuNjMgLTEzLjU5MiBsIDAgMCBjIC0zLjYzMSAtMy42MyAtOC40NTcgLTUuNjMgLTEzLjU5MiAtNS42MyBjIC01LjEzNCAwIC05Ljk2MSAyIC0xMy41OTIgNS42MyBMIDQ1IDI0LjMxMSBsIC04LjE4NyAtOC4xODcgQyAzMy4xODMgMTIuNDk0IDI4LjM1NiAxMC40OTQgMjMuMjIyIDEwLjQ5NCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDIyMSwgMjAsIDE1NCk7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CiAgPC9nPgogIDxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJtYXRyaXgoMC4xMzk5MzEsIDAsIDAsIDAuMTM5OTMxLCA3My42MDk0MjEsIDM0LjE2ODMyNykiPgogICAgPHBhdGggZD0iTSA0NSA4NC4zMzQgTCA2LjgwMiA0Ni4xMzYgQyAyLjQxNiA0MS43NSAwIDM1LjkxOCAwIDI5LjcxNiBjIDAgLTYuMjAzIDIuNDE2IC0xMi4wMzQgNi44MDIgLTE2LjQyIGMgNC4zODYgLTQuMzg2IDEwLjIxNyAtNi44MDIgMTYuNDIgLTYuODAyIGMgNi4yMDMgMCAxMi4wMzQgMi40MTYgMTYuNDIgNi44MDIgTCA0NSAxOC42NTQgbCA1LjM1OCAtNS4zNTggYyA0LjM4NiAtNC4zODYgMTAuMjE4IC02LjgwMiAxNi40MiAtNi44MDIgYyA2LjIwMyAwIDEyLjAzNCAyLjQxNiAxNi40MiA2LjgwMiBsIDAgMCBsIDAgMCBDIDg3LjU4NSAxNy42ODIgOTAgMjMuNTEzIDkwIDI5LjcxNiBjIDAgNi4yMDMgLTIuNDE1IDEyLjAzNCAtNi44MDIgMTYuNDIgTCA0NSA4NC4zMzQgeiBNIDIzLjIyMiAxMC40OTQgYyAtNS4xMzQgMCAtOS45NjEgMiAtMTMuNTkyIDUuNjMgUyA0IDI0LjU4MiA0IDI5LjcxNiBzIDIgOS45NjEgNS42MyAxMy41OTIgTCA0NSA3OC42NzggbCAzNS4zNyAtMzUuMzcgQyA4NC4wMDEgMzkuNjc3IDg2IDM0Ljg1IDg2IDI5LjcxNiBzIC0xLjk5OSAtOS45NjEgLTUuNjMgLTEzLjU5MiBsIDAgMCBjIC0zLjYzMSAtMy42MyAtOC40NTcgLTUuNjMgLTEzLjU5MiAtNS42MyBjIC01LjEzNCAwIC05Ljk2MSAyIC0xMy41OTIgNS42MyBMIDQ1IDI0LjMxMSBsIC04LjE4NyAtOC4xODcgQyAzMy4xODMgMTIuNDk0IDI4LjM1NiAxMC40OTQgMjMuMjIyIDEwLjQ5NCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDIyMSwgMjAsIDE1NCk7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CiAgPC9nPgogIDxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJtYXRyaXgoMC4xMzk5MzEsIDAsIDAsIDAuMTM5OTMxLCA4OC42MDk0MjEsIDM0LjE2ODMyNykiPgogICAgPHBhdGggZD0iTSA0NSA4NC4zMzQgTCA2LjgwMiA0Ni4xMzYgQyAyLjQxNiA0MS43NSAwIDM1LjkxOCAwIDI5LjcxNiBjIDAgLTYuMjAzIDIuNDE2IC0xMi4wMzQgNi44MDIgLTE2LjQyIGMgNC4zODYgLTQuMzg2IDEwLjIxNyAtNi44MDIgMTYuNDIgLTYuODAyIGMgNi4yMDMgMCAxMi4wMzQgMi40MTYgMTYuNDIgNi44MDIgTCA0NSAxOC42NTQgbCA1LjM1OCAtNS4zNTggYyA0LjM4NiAtNC4zODYgMTAuMjE4IC02LjgwMiAxNi40MiAtNi44MDIgYyA2LjIwMyAwIDEyLjAzNCAyLjQxNiAxNi40MiA2LjgwMiBsIDAgMCBsIDAgMCBDIDg3LjU4NSAxNy42ODIgOTAgMjMuNTEzIDkwIDI5LjcxNiBjIDAgNi4yMDMgLTIuNDE1IDEyLjAzNCAtNi44MDIgMTYuNDIgTCA0NSA4NC4zMzQgeiBNIDIzLjIyMiAxMC40OTQgYyAtNS4xMzQgMCAtOS45NjEgMiAtMTMuNTkyIDUuNjMgUyA0IDI0LjU4MiA0IDI5LjcxNiBzIDIgOS45NjEgNS42MyAxMy41OTIgTCA0NSA3OC42NzggbCAzNS4zNyAtMzUuMzcgQyA4NC4wMDEgMzkuNjc3IDg2IDM0Ljg1IDg2IDI5LjcxNiBzIC0xLjk5OSAtOS45NjEgLTUuNjMgLTEzLjU5MiBsIDAgMCBjIC0zLjYzMSAtMy42MyAtOC40NTcgLTUuNjMgLTEzLjU5MiAtNS42MyBjIC01LjEzNCAwIC05Ljk2MSAyIC0xMy41OTIgNS42MyBMIDQ1IDI0LjMxMSBsIC04LjE4NyAtOC4xODcgQyAzMy4xODMgMTIuNDk0IDI4LjM1NiAxMC40OTQgMjMuMjIyIDEwLjQ5NCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDIyMSwgMjAsIDE1NCk7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CiAgPC9nPgogIDxyZWN0IHg9IjEwOC43MjMiIHk9IjUxLjI4IiB3aWR0aD0iMzAuNzExIiBoZWlnaHQ9IjMzLjA5MSIgc3R5bGU9ImZpbGw6IHJnYigyMTMsIDE3NywgMTQ5KTsiLz4KICA8cmVjdCB4PSIxMzkuMjI5IiB5PSI1MS44MjgiIHdpZHRoPSIxOC45NDciIGhlaWdodD0iMzIuNTQ0IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMTQyLCAxNDIsIDE0Mik7Ii8+CiAgPHJlY3QgeD0iODkuOTg3IiB5PSI1MS44MjgiIHdpZHRoPSIxOC45NDciIGhlaWdodD0iMzIuNTQ0IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMTQyLCAxNDIsIDE0Mik7Ii8+CiAgPHJlY3QgeD0iODkuOTgxIiB5PSI4NC4zMzIiIHdpZHRoPSI2OC4xODYiIGhlaWdodD0iMTYuMzciIHN0eWxlPSJzdHJva2U6IHJnYigxNDIsIDE0MiwgMTQyKTsiLz4KPC9zdmc+" + } + } + }, + { + "elementToHighlightId": "editorTab:level:EventsSheet", + "nextStepTrigger": { + "presenceOfElement": "#events-editor[data-active]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Now let's plug the health of the **$(player)** with **$(resourceBar)**! Let's **open the Events Sheet** of the $(level) scene.", + "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Ouvrons la **feuille d'événements** de la scène $(level)." + } + }, + "placement": "bottom" + } + }, + { + "id": "SwitchToEvents1", + "elementToHighlightId": "#events-editor[data-active] #event-1-actions #add-action-button-empty", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's **add an action** to change the filling value of $(resourceBar).", + "fr": "**Ajoutons une action** pour changer la valeur de remplissage de $(resourceBar)." + } + } + } + }, + { + "elementToHighlightId": "objectInObjectOrResourceSelector:resourceBar", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-TiledUnitsBar--TiledUnitsBar--SetValue" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(resourceBar)**.", + "fr": "Sélectionnez **$(resourceBar)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-TiledUnitsBar--TiledUnitsBar--SetValue", + "nextStepTrigger": { + "presenceOfElement": "#parameter-1-operator-field" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the action **Value**.", + "fr": "Sélectionnez l'action **Value**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-operator-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want the value of the bar to match the health of $(player), so let's select **= (set to)**.", + "fr": "Nous voulons que la barre de vie représente la santé de $(player), donc sélectionnons **= (définir à)**." + } + }, + "placement": "left" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#open-number-expression-popover-button", + "nextStepTrigger": { + "presenceOfElement": "#expression-selector" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's find where is stored the health of $(player).", + "fr": "Trouvons où est stockée la santé de $(player)." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#expression-selector input", + "nextStepTrigger": { + "presenceOfElement": "#instruction-or-expression-Health" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "$(player) is set up to use the **Health extension**. Search **Health**.", + "fr": "$(player) utiliser l'**extension Health**. Cherchez **Health**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-or-expression-Health", + "nextStepTrigger": { + "presenceOfElement": "#expression-parameters-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **Health points**.", + "fr": "Sélectionnez **Health points**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#expression-parameters-editor-dialog #parameter-0-object-selector", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(player)**.", + "fr": "Sélectionnez **$(player)**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#expression-parameters-editor-dialog #apply-button", + "nextStepTrigger": { + "absenceOfElement": "#expression-parameters-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We're good.", + "fr": "On est bon." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Everything is all set.", + "fr": "Tout est bien configuré." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#toolbar-preview-button", + "nextStepTrigger": { + "previewLaunched": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**." + } + }, + "placement": "bottom" + } + } + ] +} \ No newline at end of file From 143efd70dc789111eaacef5e5903fe81fcf127e0 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 13 Mar 2023 18:24:31 +0100 Subject: [PATCH 047/208] Add missing cache purges --- scripts/deploy.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/deploy.js b/scripts/deploy.js index ee67b65..fbc4cd0 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -73,6 +73,8 @@ axios 'https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json', 'https://resources.gdevelop-app.com/in-app-tutorials/cameraParallax.json', 'https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/healthBar.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json', ], }, { From f5a9826be55f1a5c2214e53a074084146741a31b Mon Sep 17 00:00:00 2001 From: Krittipoom <122365475+Krittipoom@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:29:18 +0700 Subject: [PATCH 048/208] Add Thai language support to tutorials in four in-app examples (#16) --- tutorials/in-app/cameraParallax.json | 131 ++-- tutorials/in-app/flingGame.json | 839 +++++++++++++++++-------- tutorials/in-app/healthBar.json | 100 ++- tutorials/in-app/plinkoMultiplier.json | 188 ++++-- 4 files changed, 841 insertions(+), 417 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index fba3150..725ef5e 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -10,7 +10,7 @@ "scene": "cameraScene" } }, - "availableLocales": ["en", "fr", "es", "pt"], + "availableLocales": ["en", "fr", "es", "pt", "th"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json", "initialProjectData": { "cameraScene": "CameraScene", @@ -25,7 +25,8 @@ "en": "# You've finished this lesson!", "fr": "# Vous avez terminé cette leçon !", "es": "# ¡Has terminado esta lección!", - "pt": "# Você terminou esta lição!" + "pt": "# Você terminou esta lição!", + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" } }, { @@ -33,7 +34,8 @@ "en": "Well done, in this tutorial you've learned:", "fr": "Bien joué, dans ce tutoriel vous avez appris :", "es": "¡Bien hecho, en este tutorial aprendiste:", - "pt": "Bem feito, neste tutorial você aprendeu:" + "pt": "Bem feito, neste tutorial você aprendeu:", + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" } }, { @@ -41,7 +43,8 @@ "en": "- How to create a layer\n\n- How to add an extension\n\n- How to control the camera\n\n- How to make Tiled Sprites move at different speeds", "fr": "- Comment créer un calque\n\n- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", "es": "- Cómo crear una capa\n\n- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", - "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades" + "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades", + "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่ม extension\n\n- วิธีควบคุมกล้อง\n\n- วิธีทำให้ Tiled Sprites เคลื่อนที่ด้วยค่าความเร็วต่างๆ" } }, { @@ -49,7 +52,8 @@ "en": "You can keep adding stuff to this game or publish it!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", - "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!" + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" } } ] @@ -67,7 +71,8 @@ "en": "Let's improve this platformer game by following the character with the camera!", "fr": "Améliorons ce jeu de plateforme en suivant le personnage avec la caméra !", "es": "¡Mejoremos este juego de plataformas siguiendo al personaje con la cámara!", - "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!" + "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!", + "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ!" } }, "description": { @@ -75,7 +80,8 @@ "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", "fr": "Pour cela, nous allons installer une **extension**.\n\nOuvrez le **Gestionnaire de projet**.", "es": "Para esto, instalaremos una **extensión**.\n\nAbre el **Administrador de proyectos**.", - "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**." + "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", + "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -92,7 +98,8 @@ "en": "Open the **Extensions** tab.", "fr": "Ouvrez l'onglet **Extensions**.", "es": "Abre la pestaña **Extensiones**.", - "pt": "Abra a guia **Extensões**." + "pt": "Abra a guia **Extensões**.", + "th": "เปิด **แท็บ Extensions**" } } }, @@ -110,7 +117,8 @@ "en": "Open the extension store", "fr": "Ouvrez le **Magasin d'extension**.", "es": "Abre la **tienda de extensiones**", - "pt": "Abra a **loja de extensões**" + "pt": "Abra a **loja de extensões**", + "th": "เปิด **ร้านค้า extension**" } } }, @@ -127,7 +135,8 @@ "en": "Search for the **smooth camera** extension.", "fr": "Cherchez l'extension **smooth camera**.", "es": "Busca la extensión **smooth camera**.", - "pt": "Procure pela extensão **smooth camera**." + "pt": "Procure pela extensão **smooth camera**.", + "th": "ค้นหา extension **smooth camera**" } } }, @@ -145,7 +154,8 @@ "en": "Click on the extension **Smooth Camera**.", "fr": "Cliquez sur l'extension **Smooth Camera**.", "es": "Haz clic en la extensión **Smooth Camera**.", - "pt": "Clique na extensão **Smooth Camera**." + "pt": "Clique na extensão **Smooth Camera**.", + "th": "คลิกที่ extension **Smooth Camera**" } } }, @@ -162,7 +172,8 @@ "en": "Install the extension in your project.", "fr": "Installez l'extension au projet.", "es": "Instala la extensión en tu proyecto.", - "pt": "Instale a extensão no seu projeto." + "pt": "Instale a extensão no seu projeto.", + "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ" } }, "placement": "left" @@ -180,7 +191,8 @@ "en": "Let's close this dialog.", "fr": "Fermons cette fenêtre.", "es": "Cerramos esta ventana.", - "pt": "Vamos fechar esta janela." + "pt": "Vamos fechar esta janela.", + "th": "ปิดหน้าต่างนี้" } } } @@ -197,7 +209,8 @@ "en": "Now let's add it to our player.\n\nRight click on **$(player)** or use the 3-dots menu and select **Edit behaviors**.", "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nCliquez droit sur **$(player)** ou utilisez le menu à 3 points et sélectionnez **Modifier les comportements**.", "es": "Añadamos ahora la extensión a nuestro jugador.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", - "pt": "Agora vamos adicioná-lo ao nosso jogador.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**." + "pt": "Agora vamos adicioná-lo ao nosso jogador.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", + "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**" } } } @@ -213,7 +226,8 @@ "en": "See the **behaviors** of the **object** here.", "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", - "pt": "Os **comportamentos** do **objeto** estão nesta guia." + "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -232,7 +246,8 @@ "en": "Let's add the **Smooth Camera** behavior we just installed.", "fr": "Ajoutons le comportement **Smooth Camera** que nous venons d'installer.", "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", - "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar." + "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar.", + "th": "เพิ่มพฤติกรรม **Smooth Camera** ที่เพิ่งได้ติดตั้ง" } } }, @@ -249,7 +264,8 @@ "en": "Select the **Smooth Camera** behavior.", "fr": "Sélectionnez le comportement **Smooth Camera**.", "es": "Selecciona el comportamiento **Smooth Camera**.", - "pt": "Selecione o comportamento **Smooth Camera**." + "pt": "Selecione o comportamento **Smooth Camera**.", + "th": "เลือกพฤติกรรม **Smooth Camera**" } } }, @@ -266,7 +282,8 @@ "en": "Let's make it only follow the X axis (Horizontal) by **unchecking** this checkbox.", "fr": "Faisons en sorte qu'il ne suive que l'axe X (Horizontal) en **désélectionnant** cette case.", "es": "Hagamos que solo siga el eje X (Horizontal) **desmarcando** esta casilla.", - "pt": "Vamos fazer com que ele siga apenas o eixo X (Horizontal) **desmarcando** esta caixa." + "pt": "Vamos fazer com que ele siga apenas o eixo X (Horizontal) **desmarcando** esta caixa.", + "th": "ทำให้กล้องติดตามเฉพาะแกน X (แนวนอน) เท่านั้น โดย **เอาเครื่องหมายเช็คออก** จาก checkbox นี้" } } }, @@ -283,7 +300,8 @@ "en": "That's it! The camera will **follow our player horizontally**!", "fr": "C'est tout ! La caméra va **suivre notre joueur horizontalement** !", "es": "¡Eso es todo! ¡La cámara **seguirá a nuestro jugador horizontalmente**!", - "pt": "É isso aí! A câmera **seguirá nosso jogador horizontalmente**!" + "pt": "É isso aí! A câmera **seguirá nosso jogador horizontalmente**!", + "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!" } } } @@ -299,7 +317,8 @@ "en": "Next we will add the background. Open the **Layers** panel.", "fr": "Ensuite, nous allons ajouter le background, ouvrez le panneau des **calques**.", "es": "A continuación, agregaremos el fondo. Abre el panel de **Capas**.", - "pt": "Em seguida, vamos adicionar o fundo. Abra o painel de **Camadas**." + "pt": "Em seguida, vamos adicionar o fundo. Abra o painel de **Camadas**.", + "th": "ต่อไปเราจะเพิ่มพื้นหลัง เปิดแผงควบคุม **Layers**" } }, "placement": "bottom" @@ -317,7 +336,8 @@ "en": "Let's **add a new layer** for our background.", "fr": "Créons un **nouveau calque** pour notre fond.", "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", - "pt": "Vamos **adicionar uma nova camada** para nosso fundo." + "pt": "Vamos **adicionar uma nova camada** para nosso fundo.", + "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง" } }, "placement": "top" @@ -334,7 +354,8 @@ "en": "Change the name to **Background**.", "fr": "Changeons son nom en **Background**.", "es": "Cambiar el nombre a **Background**.", - "pt": "Mude o nome para **Background**." + "pt": "Mude o nome para **Background**.", + "th": "เปลี่ยนชื่อเป็น **Background**" } }, "placement": "top" @@ -351,7 +372,8 @@ "en": "Let's select this layer as the **default layer** to add objects to.", "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets.", "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", - "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos." + "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", + "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" } }, "placement": "left" @@ -368,7 +390,8 @@ "en": "Now let's **move** this layer **below the Base Layer**, so that the background elements will appear behind the player.\n\n**Drag the handle below**", "fr": "Maintenant, **déplaçons** ce calque **en dessous du calque de base**, de sorte que les éléments de fond apparaissent derrière le joueur.\n\n**Glissez le curseur en dessous**", "es": "Ahora, **mueva** esta capa **debajo de la capa base**, para que los elementos de fondo aparezcan detrás del jugador.\n\n**Arrastre el control hacia abajo**", - "pt": "Agora, **mova** esta camada **abaixo da camada base**, para que os elementos de fundo apareçam atrás do jogador.\n\n**Arraste o controle para baixo**" + "pt": "Agora, **mova** esta camada **abaixo da camada base**, para que os elementos de fundo apareçam atrás do jogador.\n\n**Arraste o controle para baixo**", + "th": "ทีนี้ **ย้าย** เลเยอร์นี้ไป **ใต้เลเยอร์หลัก** เพื่อให้องค์ประกอบในพื้นหลังปรากฏอยู่ข้างหลังผู้เล่น\n\n**ลากตัวควบคุมลง**" } }, "placement": "top" @@ -385,7 +408,8 @@ "en": "Perfect! Now let's add **$(farBackground)** to our game by dragging it to the center.", "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le faisant glisser au centre.", "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego arrastrándolo al centro.", - "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro." + "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro.", + "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง" } }, "placement": "left" @@ -398,7 +422,8 @@ "en": "I'm done", "fr": "J'ai terminé", "es": "Ya terminé", - "pt": "Terminei" + "pt": "Terminei", + "th": "ฉันทำเสร็จแล้ว" } } }, @@ -409,7 +434,8 @@ "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black rectangle\n\nWhen you're done, click below.", "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nRedimensionnons maintenant l'objet **$(farBackground)** de sorte qu'il couvre tout le rectangle noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", "es": "¿Ves el **rectángulo negro** en medio del escenario? Es la vista de la cámara. Este es el punto de vista desde el que el jugador verá el juego.\n\nAhora vamos a redimensionar el objeto **$(farBackground)** para que cubra todo el rectángulo negro.\n\nCuando hayas terminado, haz clic abajo.", - "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo." + "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo.", + "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" } }, "placement": "top", @@ -429,7 +455,8 @@ "en": "Let's do the same with another background to give a parallax effect! Drag **$(midBackground)** from the menu to the canvas.", "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! Glissez **$(midBackground)** depuis le menu vers la scène.", "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! Arrastre **$(midBackground)** desde el menú a la escena.", - "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena." + "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena.", + "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene" } }, "placement": "left" @@ -442,7 +469,8 @@ "en": "I'm done", "fr": "J'ai terminé", "es": "Ya terminé", - "pt": "Terminei" + "pt": "Terminei", + "th": "ฉันทำเสร็จแล้ว" } } }, @@ -453,7 +481,8 @@ "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black rectangle.\n\nWhen you're done, click below.", "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le rectangle noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.\n\nCuando haya terminado, haga clic abajo.", - "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo." + "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo.", + "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" } }, "placement": "top", @@ -473,7 +502,8 @@ "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of the $(cameraScene) scene.", "fr": "Maintenant, faisons en sorte que ces **fonds se déplacent** ! Ouvrons la **feuille d'événements** de la scène $(cameraScene).", "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de la escena $(cameraScene).", - "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** da cena $(cameraScene)." + "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** da cena $(cameraScene).", + "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)" } }, "placement": "bottom" @@ -491,7 +521,8 @@ "en": "Let's **add an action** to make the first background move.", "fr": "**Ajoutons une action** pour faire bouger le premier fond.", "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", - "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover." + "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover.", + "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่" } } } @@ -507,7 +538,8 @@ "en": "Select **$(farBackground)**.", "fr": "Sélectionnez **$(farBackground)**.", "es": "Seleccione **$(farBackground)**.", - "pt": "Selecione **$(farBackground)**." + "pt": "Selecione **$(farBackground)**.", + "th": "เลือก **$(farBackground)**" } } }, @@ -524,7 +556,8 @@ "en": "Select the action **Image X offset**.", "fr": "Sélectionnez l'action **Décalage X de l'image**.", "es": "Seleccione la acción **Desplazamiento X de la imagen**.", - "pt": "Selecione a ação **Deslocamento X da imagem**." + "pt": "Selecione a ação **Deslocamento X da imagem**.", + "th": "เลือกการกระทำ **Image X ออฟเซ็ท**" } } }, @@ -541,7 +574,8 @@ "en": "We want the background to follow the camera, so let's select **= (set to)**.", "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**." + "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", + "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**" } }, "placement": "left" @@ -559,7 +593,8 @@ "en": "Let's make the far background move way **slower** than the camera,\n\n Enter `CameraCenterX()/8`.", "fr": "Faisons en sorte que le fond lointain se déplace beaucoup **plus lentement** que la caméra,\n\n Entrez `CameraCenterX()/8`.", "es": "Hagamos que el fondo lejano se mueva mucho **más lentamente** que la cámara,\n\n Ingrese `CameraCenterX()/8`.", - "pt": "Vamos fazer com que o plano de fundo distante se mova muito **mais devagar** que a câmera,\n\n Digite `CameraCenterX()/8`." + "pt": "Vamos fazer com que o plano de fundo distante se mova muito **mais devagar** que a câmera,\n\n Digite `CameraCenterX()/8`.", + "th": "ทำให้พื้นหลังเคลื่อนที่ **ช้ากว่า** กล้อง\n\n ใส่ `CameraCenterX()/8`" } }, "placement": "top" @@ -577,7 +612,8 @@ "en": "Nice! Now let's save this.", "fr": "Bien ! Enregistrons maintenant cela.", "es": "¡Bien! Ahora guardemos esto.", - "pt": "Legal! Agora vamos salvar isso." + "pt": "Legal! Agora vamos salvar isso.", + "th": "ดีมาก! มาบันทึกกันเถอะ" } }, "placement": "top" @@ -594,7 +630,8 @@ "en": "Let's create the same action for **$(midBackground)**!", "fr": "Créons la même action pour **$(midBackground)** !", "es": "¡Creemos la misma acción para **$(midBackground)**!", - "pt": "Vamos criar a mesma ação para **$(midBackground)**!" + "pt": "Vamos criar a mesma ação para **$(midBackground)**!", + "th": "สร้างการกระทำเหมือนเดิมสำหรับ **$(midBackground)**!" } } } @@ -610,7 +647,8 @@ "en": "Select **$(midBackground)**.", "fr": "Sélectionnez **$(midBackground)**.", "es": "Seleccione **$(midBackground)**.", - "pt": "Selecione **$(midBackground)**." + "pt": "Selecione **$(midBackground)**.", + "th": "เลือก **$(midBackground)**" } } }, @@ -627,7 +665,8 @@ "en": "Select the action **Image X offset**.", "fr": "Sélectionnez l'action **Décalage X de l'image**.", "es": "Seleccione la acción **Desplazamiento X de la imagen**.", - "pt": "Selecione a ação **Deslocamento X da imagem**." + "pt": "Selecione a ação **Deslocamento X da imagem**.", + "th": "เลือกการกระทำ **Image X ออฟเซ็ท**" } } }, @@ -644,7 +683,8 @@ "en": "We want the background to follow the camera, so let's select **= (set to)**.", "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**." + "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", + "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**" } }, "placement": "left" @@ -662,7 +702,8 @@ "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\n Enter `CameraCenterX()/3`.", "fr": "Cette fois, faisons en sorte que ce fond se déplace **plus vite**, pour donner l'effet qu'il est plus proche du joueur,\n\n Entrez `CameraCenterX()/3`.", "es": "Esta vez hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\n Ingrese `CameraCenterX()/3`.", - "pt": "Desta vez vamos fazer com que este plano de fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\n Digite `CameraCenterX()/3`." + "pt": "Desta vez vamos fazer com que este plano de fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\n Digite `CameraCenterX()/3`.", + "th": "ทำให้พื้นหลังเคลื่อนที่ **เร็วกว่า** เพื่อทำเอฟเฟกต์ให้ดูเหมือนกับว่าอยู่ใกล้กับผู้เล่น\n\n ใส่ `CameraCenterX()/3`" } }, "placement": "top" @@ -680,7 +721,8 @@ "en": "Nice! Let's close this.", "fr": "Bien ! Fermons cela.", "es": "¡Bien! Cerrémoslo.", - "pt": "Legal! Vamos fechar isso." + "pt": "Legal! Vamos fechar isso.", + "th": "ดีมาก! มาปิดกันเถอะ" } }, "placement": "top" @@ -697,7 +739,8 @@ "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**." + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" } }, "placement": "bottom" diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index d272e87..8635674 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -55,26 +55,30 @@ }, "availableLocales": [ "en", - "fr-FR" + "fr-FR", + "th-TH" ], "endDialog": { "content": [ { "messageByLocale": { "en": "# You've finished your Fling Game!", - "fr-FR": "# Votre jeu est terminé !" + "fr-FR": "# Votre jeu est terminé !", + "th-TH": "เกม Fling ของคุณเสร็จแล้ว" } }, { "messageByLocale": { "en": "Share it with your friends and see who gets the highest score!", - "fr-FR": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !" + "fr-FR": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !", + "th-TH": "แชร์กับเพื่อนของคุณ และมาลองดูกันว่าใครจะทำคะแนนได้สูงที่สุด!" } }, { "messageByLocale": { "en": "Ready to make a new game? Click to discover what GDevelop can do!", - "fr-FR": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !" + "fr-FR": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !", + "th-TH": "พร้อมสร้างเกมใหม่แล้ว? คลิกเพื่อสำรวจดูว่า GDevelop สามารถทำอะไรได้บ้าง" } }, { @@ -96,7 +100,8 @@ "description": { "messageByLocale": { "en": "Head over to the **Build section**.", - "fr-FR": "Commençons par aller dans l'onglet **Créer**." + "fr-FR": "Commençons par aller dans l'onglet **Créer**.", + "th-TH": "ไปยัง **Build section**" } }, "placement": "right" @@ -111,7 +116,8 @@ "description": { "messageByLocale": { "en": "Let's create a new **project** for this tutorial!", - "fr-FR": "Créons un nouveau **projet** pour ce tutoriel." + "fr-FR": "Créons un nouveau **projet** pour ce tutoriel.", + "th-TH": "มาสร้าง **โปรเจกต์** ใหม่ สำหรับบทเรียนนี้กันเถอะ!" } } } @@ -125,7 +131,8 @@ "description": { "messageByLocale": { "en": "Let's go!", - "fr-FR": "C'est parti !" + "fr-FR": "C'est parti !", + "th-TH": "ไปกันเลย!" } } }, @@ -144,7 +151,8 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-FR": "Ouvrez le **Gestionnaire de projet**." + "fr-FR": "Ouvrez le **Gestionnaire de projet**.", + "th-TH": "เปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -159,7 +167,8 @@ "description": { "messageByLocale": { "en": "Open the **Game Settings** tab.", - "fr-FR": "Ouvrez les **Paramètres du jeu**." + "fr-FR": "Ouvrez les **Paramètres du jeu**.", + "th-TH": "เปิดแท็บ **ตั้งค่าเกม**" } } }, @@ -175,7 +184,8 @@ "description": { "messageByLocale": { "en": "Open the game **properties**.", - "fr-FR": "Ouvrez les **Propriétés** du jeu." + "fr-FR": "Ouvrez les **Propriétés** du jeu.", + "th-TH": "เปิด **คุณสมบัติ** ของเกม" } } }, @@ -191,7 +201,8 @@ "description": { "messageByLocale": { "en": "Change the width to **1280** pixels.", - "fr-FR": "Définissez une largeur de **1280** pixels." + "fr-FR": "Définissez une largeur de **1280** pixels.", + "th-TH": "เปลี่ยนความกว้างเป็น **1280** พิกเซล" } } }, @@ -207,7 +218,8 @@ "description": { "messageByLocale": { "en": "Change the height to **720** pixels.", - "fr-FR": "Et une hauteur de **720** pixels." + "fr-FR": "Et une hauteur de **720** pixels.", + "th-TH": "เปลี่ยนความสูงเป็น **720** พิกเซล" } } }, @@ -222,7 +234,8 @@ "description": { "messageByLocale": { "en": "Set this to **no changes to the game size**.", - "fr-FR": "Choisissez l'option **Aucune modification de la taille du jeu**." + "fr-FR": "Choisissez l'option **Aucune modification de la taille du jeu**.", + "th-TH": "ตั้งค่าเป็น **ไม่เปลี่ยนแปลงขนาดของเกม**" } } }, @@ -237,7 +250,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "On a terminé." + "fr-FR": "On a terminé.", + "th-TH": "เสร็จแล้ว" } } } @@ -253,7 +267,8 @@ "description": { "messageByLocale": { "en": "First, let's find a border for our **scene**.", - "fr-FR": "Commençons par trouver une bordure à notre **scène**." + "fr-FR": "Commençons par trouver une bordure à notre **scène**.", + "th-TH": "ขั้นแรก หาขอบเขตของ **scene**" } } } @@ -267,7 +282,8 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", + "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -284,13 +300,15 @@ "title": { "messageByLocale": { "en": "We're looking for a tiled sprite that we can resize easily", - "fr-FR": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner" + "fr-FR": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner", + "th-TH": "เรากำลังมองหา tiled sprite ที่สามารถปรับขนาดได้ง่าย" } }, "description": { "messageByLocale": { "en": "Tip: search for “**tiled sprite**”.", - "fr-FR": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”." + "fr-FR": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”.", + "th-TH": "แนะนำ: ค้นหาเป็นภาษาอังกฤษ “**tiled sprite**”" } } }, @@ -314,7 +332,8 @@ "description": { "messageByLocale": { "en": "Add this asset to your project.", - "fr-FR": "Ajoutez cette ressource à votre projet." + "fr-FR": "Ajoutez cette ressource à votre projet.", + "th-TH": "เพิ่ม asset ไปยังโปรเจกต์ของคุณ" } } }, @@ -333,7 +352,8 @@ "description": { "messageByLocale": { "en": "Let's add the $(border) to our game!", - "fr-FR": "Ajoutons $(border) à notre projet !" + "fr-FR": "Ajoutons $(border) à notre projet !", + "th-TH": "มาใส่ $(border) ในเกมกันเถอะ!" } } } @@ -347,7 +367,8 @@ "description": { "messageByLocale": { "en": "Drag $(border) from the menu to the canvas.", - "fr-FR": "Faites glisser $(border) du menu au canvas." + "fr-FR": "Faites glisser $(border) du menu au canvas.", + "th-TH": "ลาก $(border) จากเมนูไปยังแคนวาส" } }, "placement": "left" @@ -358,7 +379,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -367,7 +389,8 @@ "description": { "messageByLocale": { "en": "Place and resize at least 4 instances of $(border) to create a closed frame around the screen ($(instancesCount:border)/4).", - "fr-FR": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4)." + "fr-FR": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4).", + "th-TH": "วางและปรับขนาดอย่างน้อย 4 อินสแตนซ์ ของ $(border) เพื่อสร้างกรอบรอบหน้าจอ ($(instancesCount:border)/4)" } }, "placement": "top", @@ -387,7 +410,8 @@ "description": { "messageByLocale": { "en": "Now let's find an **object** that we can throw.", - "fr-FR": "Maintenant, trouvons un **objet** que nous allons lancer." + "fr-FR": "Maintenant, trouvons un **objet** que nous allons lancer.", + "th-TH": "ทีนี้เราจะหา **วัตถุ** ที่เราจะใช้สำหรับโยน" } } } @@ -401,7 +425,8 @@ "description": { "messageByLocale": { "en": "Let's choose an object from the **asset store**.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", + "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -418,7 +443,8 @@ "description": { "messageByLocale": { "en": "Select a rounded object that you'd like to throw (try **ball**).", - "fr-FR": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**)." + "fr-FR": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**).", + "th-TH": "เลือกวัตถุที่กลมที่คุณอยากจะโยน (ลอง **ball**)" } } }, @@ -460,7 +486,8 @@ "description": { "messageByLocale": { "en": "Perfect, let's see how to throw it easily.", - "fr-FR": "Parfait, voyons maintenant comment le lancer." + "fr-FR": "Parfait, voyons maintenant comment le lancer.", + "th-TH": "สมบูรณ์แบบ ลองมาดูวิธีโยนมันแบบง่ายๆกัน" } } } @@ -474,7 +501,8 @@ "description": { "messageByLocale": { "en": "Add 3 **instances** of the **object** *$(projectile)* inside the frame.", - "fr-FR": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre." + "fr-FR": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre.", + "th-TH": "เพิ่ม 3 **instances** ของ **วัตถุ** *$(projectile)* ภายในเฟรม" } } } @@ -490,7 +518,8 @@ "description": { "messageByLocale": { "en": "Now let's find a target to aim.", - "fr-FR": "Maintenant trouvons une cible à atteindre." + "fr-FR": "Maintenant trouvons une cible à atteindre.", + "th-TH": "ทีนี้เราจะหาเป้าสำหรับโยนวัตถุใส่" } } } @@ -504,7 +533,8 @@ "description": { "messageByLocale": { "en": "Let's choose a new **object** from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", + "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -521,7 +551,8 @@ "description": { "messageByLocale": { "en": "Select an object that you would like to use as a target to throw $(projectile) at.", - "fr-FR": "Cherchez une cible qui vous plaît (essayez **target**)." + "fr-FR": "Cherchez une cible qui vous plaît (essayez **target**).", + "th-TH": "เลือกวัตถุที่คุณอยากจะโยน $(projectile) ใส่ (ลอง **target**)" } } }, @@ -563,7 +594,8 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-FR": "Ajoutez cet objet à votre **scène**." + "fr-FR": "Ajoutez cet objet à votre **scène**.", + "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -577,7 +609,8 @@ "description": { "messageByLocale": { "en": "Add $(target) inside the frame.", - "fr-FR": "Ajoutez $(target) dans le cadre." + "fr-FR": "Ajoutez $(target) dans le cadre.", + "th-TH": "เพิ่ม $(target) เข้าไปภายในเฟรม" } } } @@ -593,7 +626,8 @@ "description": { "messageByLocale": { "en": "Finally let's find something to protect $(target).", - "fr-FR": "Finalement, trouvons quelque chose pour protéger $(target)." + "fr-FR": "Finalement, trouvons quelque chose pour protéger $(target).", + "th-TH": "ขั้นสุดท้าย เราจะหาอะไรมาป้องกัน $(target)" } } } @@ -607,7 +641,8 @@ "description": { "messageByLocale": { "en": "Let's choose a new object from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **Magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **Magasin de ressources**.", + "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -624,7 +659,8 @@ "description": { "messageByLocale": { "en": "Select a **block** object you would like to use as an obstacle for your $(projectile).", - "fr-FR": "Cherchez un objet qui servira d'obstacle aux $(projectile) (cherchez **block**)." + "fr-FR": "Cherchez un objet qui servira d'obstacle aux $(projectile) (cherchez **block**).", + "th-TH": "เลือกวัตถุ **block** ที่คุณอยากจะใช้เป็นสิ่งกีดขวาง $(projectile) (ลอง **block**)" } } }, @@ -666,7 +702,8 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-FR": "Parfait, ajoutez le à la **scène**." + "fr-FR": "Parfait, ajoutez le à la **scène**.", + "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -680,7 +717,8 @@ "description": { "messageByLocale": { "en": "Add multiple $(block)s inside the frame.", - "fr-FR": "Ajoutez plusieurs instances de $(block) dans le cadre." + "fr-FR": "Ajoutez plusieurs instances de $(block) dans le cadre.", + "th-TH": "เพิ่ม $(block) ปริมาณมากใส่ลงไปในเฟรม" } } } @@ -694,14 +732,16 @@ "title": { "messageByLocale": { "en": "Now, let's add some physics to our **objects**.", - "fr-FR": "Maintenant, ajoutons un moteur physique à nos **objets**." + "fr-FR": "Maintenant, ajoutons un moteur physique à nos **objets**.", + "th-TH": "ทีนี้เราจะเพิ่มฟิสิกส์ให้ **objects**" } }, "placement": "left", "description": { "messageByLocale": { "en": "Right click on $(border) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”.", + "th-TH": "คลิกขวา $(border) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -715,7 +755,8 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -732,7 +773,8 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement.", + "th-TH": "เพิ่มพฤติกรรมใหม่" } } }, @@ -747,7 +789,8 @@ "description": { "messageByLocale": { "en": "Select the **Physics behavior**.", - "fr-FR": "Sélectionnez le comportement **Moteur physique**." + "fr-FR": "Sélectionnez le comportement **Moteur physique**.", + "th-TH": "เลือก **พฤติกรรมฟิสิกส์**" } } }, @@ -762,7 +805,8 @@ "description": { "messageByLocale": { "en": "Select **static**.", - "fr-FR": "Choisissez l'option **Fixe**." + "fr-FR": "Choisissez l'option **Fixe**.", + "th-TH": "เลือก **คงที่**" } }, "placement": "top" @@ -778,7 +822,8 @@ "description": { "messageByLocale": { "en": "We'll see later how to use the other parameters. We're good now.", - "fr-FR": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment." + "fr-FR": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment.", + "th-TH": "สำหรับพารามิเตอร์อื่นๆเดี๋ยวจะกลับมาดูอีกครั้ง ตอนนี้ยังไม่ต้องไปสนใจ" } } } @@ -793,7 +838,8 @@ "description": { "messageByLocale": { "en": "Now right click on $(projectile) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", + "th-TH": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -807,7 +853,8 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "th-TH": "ดู **พฤติกรรม** จาก **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -824,7 +871,8 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement.", + "th-TH": "เพิ่มพฤติกรรมใหม่" } } }, @@ -839,7 +887,8 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique.", + "th-TH": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -854,7 +903,8 @@ "description": { "messageByLocale": { "en": "Select **Circle**.", - "fr-FR": "Choisissez l'option **Cercle**." + "fr-FR": "Choisissez l'option **Cercle**.", + "th-TH": "เลือก **วงกลม**" } }, "placement": "top" @@ -870,7 +920,8 @@ "description": { "messageByLocale": { "en": "Change the density to 5.", - "fr-FR": "Utilisez une densité de 5." + "fr-FR": "Utilisez une densité de 5.", + "th-TH": "ปรับความหนาแน่นเป็น 5" } }, "placement": "top" @@ -886,7 +937,8 @@ "description": { "messageByLocale": { "en": "Change the angular damping to 15.", - "fr-FR": "Utilisez un amortissement angulaire de 15." + "fr-FR": "Utilisez un amortissement angulaire de 15.", + "th-TH": "ปรับการลดแรงสั่นสะเทือนเชิงมุมเป็น 15" } }, "placement": "top" @@ -902,7 +954,8 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-FR": "C'est bon." + "fr-FR": "C'est bon.", + "th-TH": "เรียบร้อยแล้ว" } } } @@ -917,7 +970,8 @@ "description": { "messageByLocale": { "en": "Now right click on $(target) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”.", + "th-TH": "คลิกขวาที่ $(target) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -931,7 +985,8 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -955,7 +1010,8 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique.", + "th-TH": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -970,7 +1026,8 @@ "description": { "messageByLocale": { "en": "No need to change anything.", - "fr-FR": "La configuration de base suffit. Continuons." + "fr-FR": "La configuration de base suffit. Continuons.", + "th-TH": "ไม่ต้องเปลี่ยนแปลงอะไร" } } } @@ -985,7 +1042,8 @@ "description": { "messageByLocale": { "en": "Now right click on $(block) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”.", + "th-TH": "คลิกขวาที่ $(block) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -999,7 +1057,8 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1023,7 +1082,8 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique.", + "th-TH": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -1045,13 +1105,15 @@ "title": { "messageByLocale": { "en": "Now we'll make it possible for the player to drag the $(projectile).", - "fr-FR": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris." + "fr-FR": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris.", + "th-TH": "ทีนี้เราจะทำให้ผู้เล่นสามารถลาก $(projectile)" } }, "description": { "messageByLocale": { "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", - "fr-FR": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**." + "fr-FR": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**.", + "th-TH": "โดยเราจะติดตั้ง **extension**\n\nเปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -1066,7 +1128,8 @@ "description": { "messageByLocale": { "en": "Open the **Extensions** tab.", - "fr-FR": "Ouvrez l'onglet **Extensions**." + "fr-FR": "Ouvrez l'onglet **Extensions**.", + "th-TH": "เปิดแท็บ **Extensions**" } } }, @@ -1082,7 +1145,8 @@ "description": { "messageByLocale": { "en": "Open the extension store", - "fr-FR": "Ouvrez le **Magasin d'extension**." + "fr-FR": "Ouvrez le **Magasin d'extension**.", + "th-TH": "เปิดร้านค้า extension" } } }, @@ -1097,7 +1161,8 @@ "description": { "messageByLocale": { "en": "Search for the **draggable** extension (for physics objects).", - "fr-FR": "Cherchez l'extension **draggable**." + "fr-FR": "Cherchez l'extension **draggable**.", + "th-TH": "ค้นหา **draggable** extension (สำหรับวัตถุฟิสิกส์)" } } }, @@ -1113,7 +1178,8 @@ "description": { "messageByLocale": { "en": "Click on the extension.", - "fr-FR": "Cliquez sur l'extension." + "fr-FR": "Cliquez sur l'extension.", + "th-TH": "คลิกที่ extension" } } }, @@ -1128,7 +1194,8 @@ "description": { "messageByLocale": { "en": "Install the extension in your project.", - "fr-FR": "Installez l'extension dans votre projet." + "fr-FR": "Installez l'extension dans votre projet.", + "th-TH": "ติดตั้ง extension ในโปรเจกต์ของคุณ" } }, "placement": "left" @@ -1144,7 +1211,8 @@ "description": { "messageByLocale": { "en": "Close the store.", - "fr-FR": "Fermez le magasin." + "fr-FR": "Fermez le magasin.", + "th-TH": "ปิดหน้าต่างของร้านค้า" } } } @@ -1159,7 +1227,8 @@ "description": { "messageByLocale": { "en": "Now right click on $(projectile) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", + "th-TH": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -1173,7 +1242,8 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1190,7 +1260,8 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement.", + "th-TH": "เพิ่มพฤติกรรมใหม่" } } }, @@ -1205,7 +1276,8 @@ "description": { "messageByLocale": { "en": "Select the Draggable behavior.", - "fr-FR": "Sélectionnez le comportement Draggable." + "fr-FR": "Sélectionnez le comportement Draggable.", + "th-TH": "เลือกพฤติกรรม Draggable" } } }, @@ -1220,7 +1292,8 @@ "description": { "messageByLocale": { "en": "That's it!", - "fr-FR": "C'est tout !" + "fr-FR": "C'est tout !", + "th-TH": "เรียบร้อยแล้ว!" } } } @@ -1234,7 +1307,8 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button to see how you can click and drag your $(projectile) around the scene!", - "fr-FR": "Cliquez sur **Aperçu** pour tester votre jeu. Cliquez et faites glisser $(projectile) dans la scène !" + "fr-FR": "Cliquez sur **Aperçu** pour tester votre jeu. Cliquez et faites glisser $(projectile) dans la scène !", + "th-TH": "ลองคลิกที่ **ดูตัวอย่าง** แล้วทำการคลิกและลาก $(projectile) ไปมาเพื่อทดสอบกันเถอะ!" } }, "placement": "bottom" @@ -1248,24 +1322,28 @@ "messageByLocale": { "en": "## Congratulations!", "fr-FR": "## Félicitations !" + , "th-TH": "## ยินดีด้วย!" } }, { "messageByLocale": { "en": "You have finished the first part of your Fling Game.", "fr-FR": "Vous avez terminé la première partie de votre jeu." + , "th-TH": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" } }, { "messageByLocale": { "en": "You've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", "fr-FR": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" + , "th-TH": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor" } }, { "messageByLocale": { "en": "Now you can take a break from the tutorial, or continue to the next chapter.", "fr-FR": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre." + , "th-TH": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเลยก็ได้" } } ] @@ -1282,7 +1360,8 @@ "description": { "messageByLocale": { "en": "Let's find a background for our game.", - "fr-FR": "Cherchons un arrière-plan pour notre jeu." + "fr-FR": "Cherchons un arrière-plan pour notre jeu.", + "th-TH": "หาพื้นหลังสำหรับเกม" } } } @@ -1296,7 +1375,8 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", + "th-TH": "ค้นหา **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -1313,7 +1393,8 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-FR": "Cherchez “**background**”." + "fr-FR": "Cherchez “**background**”.", + "th-TH": "ประเภท “**background**”" } } }, @@ -1355,7 +1436,8 @@ "description": { "messageByLocale": { "en": "Perfect, let's use it in our **scene**.", - "fr-FR": "Parfait, ajoutez le à la **scène**." + "fr-FR": "Parfait, ajoutez le à la **scène**.", + "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -1369,7 +1451,8 @@ "description": { "messageByLocale": { "en": "Drag $(background) from the menu to the canvas.", - "fr-FR": "Faites glisser $(background) du menu au canvas." + "fr-FR": "Faites glisser $(background) du menu au canvas.", + "th-TH": "ลาก $(background) จากเมนูไปยังแคนวาส" } }, "placement": "left" @@ -1380,7 +1463,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -1389,7 +1473,8 @@ "description": { "messageByLocale": { "en": "Drag to expand the size of $(background) until it stretches over your entire game area.", - "fr-FR": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu." + "fr-FR": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu.", + "th-TH": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" } }, "image": { @@ -1407,7 +1492,8 @@ "description": { "messageByLocale": { "en": "Open the **instance** properties editor panel and select the instance of $(background) on the scene.", - "fr-FR": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(background) sur la scène." + "fr-FR": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(background) sur la scène.", + "th-TH": "เปิดแผงควบคุมสำหรับแก้ไขคุณสมบัติ **instance** และเลือก instance ของ $(background) ใน scence" } }, "placement": "bottom" @@ -1423,7 +1509,8 @@ "description": { "messageByLocale": { "en": "Select the instance of $(background) on the scene.", - "fr-FR": "Sélectionnez l'instance de $(background) sur la scène." + "fr-FR": "Sélectionnez l'instance de $(background) sur la scène.", + "th-TH": "เลือก instance ของ $(background) ใน scence" } } } @@ -1437,7 +1524,8 @@ "description": { "messageByLocale": { "en": "Change the z order of $(background) to **-1** so that it is behind all other **instances** on the **scene**.", - "fr-FR": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène." + "fr-FR": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène.", + "th-TH": "ปรับค่าลำดับ z ของ $(background) เป็น **-1** เพื่อให้พื้นหลังปรากฏอยู่ข้างหลัง **instances** อื่น" } }, "placement": "right" @@ -1454,7 +1542,8 @@ "description": { "messageByLocale": { "en": "Let's add some protection for $(target).", - "fr-FR": "Ajoutons un objet pour protéger $(target)." + "fr-FR": "Ajoutons un objet pour protéger $(target).", + "th-TH": "เพิ่มวัตถุป้องกันให้ $(target)" } } } @@ -1468,7 +1557,8 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", + "th-TH": "เพิ่ม **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -1485,7 +1575,8 @@ "description": { "messageByLocale": { "en": "Search for **block**.", - "fr-FR": "Cherchez “**block**”." + "fr-FR": "Cherchez “**block**”.", + "th-TH": "ค้นหา “**block**”" } } }, @@ -1527,7 +1618,8 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-FR": "Parfait, ajoutez le à la **scène**." + "fr-FR": "Parfait, ajoutez le à la **scène**.", + "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -1542,13 +1634,15 @@ "title": { "messageByLocale": { "en": "Let's make them static so that they act as a wall.", - "fr-FR": "Faisons en sorte qu'il reste fixe comme un mur." + "fr-FR": "Faisons en sorte qu'il reste fixe comme un mur.", + "th-TH": "ทำให้คงที่เพื่อใช้ทำหน้าที่เป็นผนัง" } }, "description": { "messageByLocale": { "en": "Right click on $(obstacle) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”." + "fr-FR": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”.", + "th-TH": "คลิกขวาที่ $(obstacle) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -1562,7 +1656,8 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet." + "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1579,7 +1674,8 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement." + "fr-FR": "Ajoutez un nouveau comportement.", + "th-TH": "เพิ่มพฤติกรรมใหม่" } } }, @@ -1594,7 +1690,8 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique." + "fr-FR": "Sélectionnez le comportement Moteur physique.", + "th-TH": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -1609,7 +1706,8 @@ "description": { "messageByLocale": { "en": "Select **static**.", - "fr-FR": "Choisissez l'option **Fixe**." + "fr-FR": "Choisissez l'option **Fixe**.", + "th-TH": "เลือก **คงที่**" } }, "placement": "top" @@ -1625,7 +1723,8 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-FR": "C'est bon." + "fr-FR": "C'est bon.", + "th-TH": "เรียบร้อยแล้ว" } } } @@ -1639,7 +1738,8 @@ "description": { "messageByLocale": { "en": "Add a few $(obstacle) to the **scene** to protect $(target).", - "fr-FR": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target)." + "fr-FR": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target).", + "th-TH": "เพิ่ม $(obstacle) ปริมาณนิดหน่อยลงใน **scene** เพื่อป้องกัน $(target)" } } } @@ -1655,7 +1755,8 @@ "description": { "messageByLocale": { "en": "Now let's create a winning message!", - "fr-FR": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible." + "fr-FR": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible.", + "th-TH": "ทีนี้เราจะสร้างข้อความแสดงชัยชนะ!" } } } @@ -1669,7 +1770,8 @@ "description": { "messageByLocale": { "en": "This time, we'll create a text from scratch.", - "fr-FR": "Cette fois-ci, nous allons créer un texte de zéro." + "fr-FR": "Cette fois-ci, nous allons créer un texte de zéro.", + "th-TH": "คราวนี้ เราจะสร้างข้อความโดยทำขึ้นมาเอง" } }, "placement": "bottom" @@ -1686,7 +1788,8 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-FR": "Sélectionnez l'objet **Texte**" + "fr-FR": "Sélectionnez l'objet **Texte**", + "th-TH": "เลือกวัตถุ **ข้อความ**" } }, "placement": "bottom" @@ -1702,7 +1805,8 @@ "description": { "messageByLocale": { "en": "Change the object name to “**YouWin**”.", - "fr-FR": "Utilisez “**Victoire**” comme nom d'objet." + "fr-FR": "Utilisez “**Victoire**” comme nom d'objet.", + "th-TH": "แก้ไขชื่อของวัตถุเป็น “**YouWin**”" } }, "placement": "bottom" @@ -1718,7 +1822,8 @@ "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-FR": "Utilisez une taille de **200**." + "fr-FR": "Utilisez une taille de **200**.", + "th-TH": "แก้ไขขนาดฟอนต์เป็น **200**" } }, "placement": "bottom" @@ -1734,7 +1839,8 @@ "description": { "messageByLocale": { "en": "Change the text to “**You Win!**”", - "fr-FR": "Cet objet texte devra afficher “**Gagné !**”" + "fr-FR": "Cet objet texte devra afficher “**Gagné !**”", + "th-TH": "แก้ไขข้อความเป็น “**คุณชนะ!**”" } }, "placement": "bottom" @@ -1750,7 +1856,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé." + "fr-FR": "Nous avons terminé.", + "th-TH": "เรียบร้อยแล้ว" } } }, @@ -1767,7 +1874,8 @@ "description": { "messageByLocale": { "en": "Drag $(youWinText) into the **scene**, and center it as well as possible.", - "fr-FR": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène." + "fr-FR": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène.", + "th-TH": "ลาก $(youWinText) ไปยัง **scene** และพยายามจัดตำแหน่งให้อยู่ตรงกลาง" } }, "placement": "left" @@ -1782,7 +1890,8 @@ "description": { "messageByLocale": { "en": "Open the **Layers** panel.", - "fr-FR": "Ouvrez le panneau des **calques*." + "fr-FR": "Ouvrez le panneau des **calques*.", + "th-TH": "เปิดแผงควบคุม **Layers**" } }, "placement": "bottom" @@ -1798,7 +1907,8 @@ "description": { "messageByLocale": { "en": "Add a new layer.", - "fr-FR": "Créez un nouveau calque." + "fr-FR": "Créez un nouveau calque.", + "th-TH": "เพิ่มเลเยอร์ใหม่" } }, "placement": "top" @@ -1813,7 +1923,8 @@ "description": { "messageByLocale": { "en": "Change the name to **WinLayer**.", - "fr-FR": "Utlisez le nom **CalqueVictoire**." + "fr-FR": "Utlisez le nom **CalqueVictoire**.", + "th-TH": "เปลี่ยนชื่อเป็น **WinLayer**" } }, "placement": "top" @@ -1828,7 +1939,8 @@ "description": { "messageByLocale": { "en": "Hide the **layer**.", - "fr-FR": "Cachez le **calque**." + "fr-FR": "Cachez le **calque**.", + "th-TH": "ซ่อน *เลเยอร์*" } }, "placement": "top" @@ -1839,7 +1951,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -1847,7 +1960,8 @@ "description": { "messageByLocale": { "en": "Now select the $(youWinText) **instance** on the **scene** and change its **layer** using the **properties panel**.\n\nIt should have disappeared!", - "fr-FR": "Sélectionnez l'instance de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché." + "fr-FR": "Sélectionnez l'instance de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché.", + "th-TH": "ทีนี้เลือก $(youWinText) **instance** บน **scence** และเปลี่ยน **เลเยอร์** โดยใช้ **แผงควบคุมคุณสมบัติ**\n\nมันควรจะหายไป!" } }, "standalone": true @@ -1862,7 +1976,8 @@ "description": { "messageByLocale": { "en": "We are now going to add some logic to our game.", - "fr-FR": "Nous allons maintenant ajouter de la logique à notre jeu." + "fr-FR": "Nous allons maintenant ajouter de la logique à notre jeu.", + "th-TH": "เราจะเพิ่มโลจิกบางอย่างเข้าไปในเกม" } } } @@ -1877,7 +1992,8 @@ "title": { "messageByLocale": { "en": "Let's add our first **Event**!", - "fr-FR": "Créons notre premier **évènement** !" + "fr-FR": "Créons notre premier **évènement** !", + "th-TH": "มาเพิ่ม **อีเวนท์** แรกกันเถอะ!" } } } @@ -1891,7 +2007,8 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Créez une **condition**." + "fr-FR": "Créez une **condition**.", + "th-TH": "เพิ่ม **เงื่อนไข**" } } } @@ -1905,7 +2022,8 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-FR": "Cliquez sur $(projectile)." + "fr-FR": "Cliquez sur $(projectile).", + "th-TH": "เลือก $(projectile)" } } }, @@ -1920,7 +2038,8 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-FR": "Cliquez sur la condition collision." + "fr-FR": "Cliquez sur la condition collision.", + "th-TH": "เลือกเงื่อนไขการชนกัน" } } }, @@ -1935,7 +2054,8 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-FR": "Cliquez sur $(target)." + "fr-FR": "Cliquez sur $(target).", + "th-TH": "เลือก $(target)" } }, "placement": "top" @@ -1951,7 +2071,8 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "La condition est maintenant configurée." + "fr-FR": "La condition est maintenant configurée.", + "th-TH": "เอาล่ะ **เงื่อนไข** ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -1966,7 +2087,8 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-FR": "Créez une **action** maintenant." + "fr-FR": "Créez une **action** maintenant.", + "th-TH": "เพิ่ม **การกระทำ**" } } } @@ -1980,7 +2102,8 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-FR": "Cliquez sur $(target)." + "fr-FR": "Cliquez sur $(target).", + "th-TH": "เลือก $(target)" } } }, @@ -1995,7 +2118,8 @@ "description": { "messageByLocale": { "en": "We will make $(target) disappear on collision.", - "fr-FR": "Nous allons faire disparaître $(target) au moment de la collision." + "fr-FR": "Nous allons faire disparaître $(target) au moment de la collision.", + "th-TH": "เราจะทำให้ $(target) หายไปหลังจากชน" } } }, @@ -2010,7 +2134,8 @@ "description": { "messageByLocale": { "en": "Alright, $(target) will now disappear when $(projectile) hits it.", - "fr-FR": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra." + "fr-FR": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra.", + "th-TH": "เอาล่ะ ทีนี้ $(target) จะหายไปเมื่อถูก $(projectile) ชน" } }, "placement": "top" @@ -2025,7 +2150,8 @@ "description": { "messageByLocale": { "en": "Let's add another **action** that will be executed for the same **condition**.", - "fr-FR": "Créons une autre **action** qui sera exécutée pour la même **condition**." + "fr-FR": "Créons une autre **action** qui sera exécutée pour la même **condition**.", + "th-TH": "สร้าง **การกระทำ** เพิ่มอีก ซึ่งจะใช้ในกรณี **เงื่อนไข** เดียวกัน" } } } @@ -2039,7 +2165,8 @@ "description": { "messageByLocale": { "en": "Search for “layer”.", - "fr-FR": "Cherchez “calque”." + "fr-FR": "Cherchez “calque”.", + "th-TH": "ค้นหา “layer”" } } }, @@ -2054,7 +2181,8 @@ "description": { "messageByLocale": { "en": "Select the **Show a layer** action.", - "fr-FR": "Cliquez sur l'action **Afficher un calque**." + "fr-FR": "Cliquez sur l'action **Afficher un calque**.", + "th-TH": "เลือกการกระทำ **แสดงเลเยอร์**" } } }, @@ -2069,7 +2197,8 @@ "description": { "messageByLocale": { "en": "Select the **layer** you created.", - "fr-FR": "Sélectionnez le **calque** que vous avez créé." + "fr-FR": "Sélectionnez le **calque** que vous avez créé.", + "th-TH": "เลือก **เลเยอร์** ที่คุณสร้าง" } }, "placement": "top" @@ -2085,7 +2214,8 @@ "description": { "messageByLocale": { "en": "Alright, now the title should appear when the player hits $(target) with $(projectile).", - "fr-FR": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile)." + "fr-FR": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile).", + "th-TH": "เอาล่ะ ทีนี้ข้อความควรจะปรากฎเมื่อผู้เล่นโยน $(projectile) ชน $(target)" } }, "placement": "top" @@ -2100,7 +2230,8 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to create some constraints for the player.", - "fr-FR": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse." + "fr-FR": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse.", + "th-TH": "กลับไปยัง **scene** เพื่อสร้างขีดจำกัดให้ผู้เล่น " } } } @@ -2116,7 +2247,8 @@ "description": { "messageByLocale": { "en": "We'll define an area where the player can grab $(projectile). Outside of this area, the $(projectile)s will be free.", - "fr-FR": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre." + "fr-FR": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre.", + "th-TH": "เราจะกำหนดพื้นที่ที่ผู้เล่นจะสามารถจับ $(projectile) นอกเหนือจากพื้นที่ดังกล่าวนั้น $(projectile) จะเป็นอิสระ" } } } @@ -2130,7 +2262,8 @@ "description": { "messageByLocale": { "en": "Let's choose an object from the asset store", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**." + "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", + "th-TH": "เลือกวัตถุจากร้านค้า asset" } }, "placement": "bottom" @@ -2147,7 +2280,8 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-FR": "Cherchez “**background**”." + "fr-FR": "Cherchez “**background**”.", + "th-TH": "พิมพ์ “**background**”" } } }, @@ -2189,7 +2323,8 @@ "description": { "messageByLocale": { "en": "Let's use it now!", - "fr-FR": "Mettons la zone en place." + "fr-FR": "Mettons la zone en place.", + "th-TH": "เอาไปใช้เลย!" } } } @@ -2203,7 +2338,8 @@ "description": { "messageByLocale": { "en": "Drag $(grabArea) from the menu to the canvas.", - "fr-FR": "Faites glisser $(grabArea) du menu à au canvas." + "fr-FR": "Faites glisser $(grabArea) du menu à au canvas.", + "th-TH": "ลาก $(grabArea) จากเมนูไปยังแคนวาส" } }, "placement": "left" @@ -2214,7 +2350,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -2223,7 +2360,8 @@ "description": { "messageByLocale": { "en": "Drag and resize $(grabArea) until it covers the lower left side of the game screen.", - "fr-FR": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu." + "fr-FR": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu.", + "th-TH": "ลากและปรับขนาด $(grabArea) จนมันครอบคลุมบริเวณซ้ายล่างในหน้าจอเกมของคุณ" } }, "image": { @@ -2240,7 +2378,8 @@ "description": { "messageByLocale": { "en": "Make sure that $(grabArea) is selected and change this value to **0**.", - "fr-FR": "Sélectionnez l'instance de $(grabArea) et définissez sa position sur l'axe z à **0**." + "fr-FR": "Sélectionnez l'instance de $(grabArea) et définissez sa position sur l'axe z à **0**.", + "th-TH": "ดูให้แน่ใจว่า $(grabArea) ถูกเลือกอยู่ และปรับค่านี้เป็น **0**" } }, "placement": "right" @@ -2255,7 +2394,8 @@ "description": { "messageByLocale": { "en": "Let's deactivate the draggable **behavior** of $(projectile) when outside of the $(grabArea).", - "fr-FR": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea)." + "fr-FR": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea).", + "th-TH": "ปิดฟังก์ชันในการสามารถถูกลาก **พฤติกรรม** ของ $(projectile) เมื่ออยู่ภายนอก $(grabArea)" } } } @@ -2271,7 +2411,8 @@ "description": { "messageByLocale": { "en": "Let's create a new event!", - "fr-FR": "Créez un nouvel évènement." + "fr-FR": "Créez un nouvel évènement.", + "th-TH": "สร้างอีเวนท์ใหม่กันเถอะ!" } } } @@ -2285,7 +2426,8 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Ajoutez une **condition**." + "fr-FR": "Ajoutez une **condition**.", + "th-TH": "เพิ่ม **เงื่อนไข**" } } } @@ -2299,7 +2441,8 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-FR": "Cliquez sur $(projectile)." + "fr-FR": "Cliquez sur $(projectile).", + "th-TH": "เลือก $(projectile)" } } }, @@ -2314,7 +2457,8 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-FR": "Cliquez sur la condition collision." + "fr-FR": "Cliquez sur la condition collision.", + "th-TH": "เลือกเงื่อนไขการชนกัน" } } }, @@ -2329,7 +2473,8 @@ "description": { "messageByLocale": { "en": "Select $(grabArea).", - "fr-FR": "Cliquez sur $(grabArea)." + "fr-FR": "Cliquez sur $(grabArea).", + "th-TH": "เลือก $(grabArea)" } }, "placement": "top" @@ -2345,7 +2490,8 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "La **condition** est maintenant prête." + "fr-FR": "La **condition** est maintenant prête.", + "th-TH": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -2360,7 +2506,8 @@ "description": { "messageByLocale": { "en": "Right click on this newly created **condition** and select “Invert condition”.", - "fr-FR": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”." + "fr-FR": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”.", + "th-TH": "คลิกขวาที่ **เงื่อนไข** ที่เพิ่งสร้างขึ้นมาและเลือก “เงื่อนไขแบบตรงกันข้าม”" } }, "placement": "right" @@ -2375,7 +2522,8 @@ "description": { "messageByLocale": { "en": "Add an action.", - "fr-FR": "Ajoutez une action." + "fr-FR": "Ajoutez une action.", + "th-TH": "เพิ่มการกระทำ" } } } @@ -2389,7 +2537,8 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-FR": "Cliquez sur $(projectile)." + "fr-FR": "Cliquez sur $(projectile).", + "th-TH": "เลือก $(projectile)" } } }, @@ -2404,7 +2553,8 @@ "description": { "messageByLocale": { "en": "Select the **action** that releases the $(projectile) from the player drag.", - "fr-FR": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse." + "fr-FR": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse.", + "th-TH": "เลือก **การกระทำ** ที่ปล่อย $(projectile) จากการถูกผู้เล่นจับลาก" } } }, @@ -2419,7 +2569,8 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-FR": "C'est bon." + "fr-FR": "C'est bon.", + "th-TH": "มาถูกทางแล้ว" } }, "placement": "top" @@ -2434,7 +2585,8 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to place the $(projectile)s correctly.", - "fr-FR": "Revenons à la **scène** pour placer les $(projectile)s correctement." + "fr-FR": "Revenons à la **scène** pour placer les $(projectile)s correctement.", + "th-TH": "กลับไปยัง **scene** เพื่อวาง $(projectile) ให้ถูกต้อง" } } } @@ -2445,7 +2597,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -2455,13 +2608,15 @@ "title": { "messageByLocale": { "en": "Rearrange the $(projectile)s.", - "fr-FR": "Repositionnez les $(projectile)s." + "fr-FR": "Repositionnez les $(projectile)s.", + "th-TH": "จัดระเบียบ $(projectile)" } }, "description": { "messageByLocale": { "en": "Drag all **instances** of $(projectile) within the boundaries of $(background).", - "fr-FR": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background)." + "fr-FR": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background).", + "th-TH": "ลาก **instances** ของ $(projectile) ภายในขอบเขต $(background)" } } } @@ -2471,7 +2626,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -2481,13 +2637,15 @@ "title": { "messageByLocale": { "en": "Set up $(target) protection.", - "fr-FR": "Créez une protection pour $(target)." + "fr-FR": "Créez une protection pour $(target).", + "th-TH": "ตั้งที่ป้องกัน $(target)" } }, "description": { "messageByLocale": { "en": "Arrange both $(block) and $(obstacle) in a way to protect $(target).", - "fr-FR": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target)." + "fr-FR": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target).", + "th-TH": "จัดวาง $(block) และ $(obstacle) โดยมีเป้าหมายเพื่อปกป้อง $(target)" } } } @@ -2501,7 +2659,8 @@ "description": { "messageByLocale": { "en": "**Preview** the game and make sure it's winnable.", - "fr-FR": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target)." + "fr-FR": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target).", + "th-TH": "ลองเล่น **ดูตัวอย่าง** เพื่อให้มั่นใจว่าสามารถเล่นเกมชนะได้" } }, "placement": "bottom" @@ -2516,7 +2675,8 @@ "description": { "messageByLocale": { "en": "Once you're ready, we'll generate a link to share your game.", - "fr-FR": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu." + "fr-FR": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu.", + "th-TH": "เมื่อพร้อมแล้ว เราจะสร้างลิงค์สำหรับแชร์เกม" } }, "placement": "bottom" @@ -2531,7 +2691,8 @@ "description": { "messageByLocale": { "en": "First, you need to create an account.", - "fr-FR": "Tout d'abord, vous devez vous créer un compte." + "fr-FR": "Tout d'abord, vous devez vous créer un compte.", + "th-TH": "ก่อนอื่น คุณจะต้องมีบัญชี" } }, "placement": "bottom" @@ -2561,7 +2722,8 @@ "description": { "messageByLocale": { "en": "Fill in the form and then click here.", - "fr-FR": "Remplissez le formulaire et cliquez ici." + "fr-FR": "Remplissez le formulaire et cliquez ici.", + "th-TH": "กรอกฟอร์มแล้วกดตรงนี้" } }, "placement": "bottom" @@ -2578,7 +2740,8 @@ "description": { "messageByLocale": { "en": "After filling your info, click here.", - "fr-FR": "Après avoir rempli le formulaire, cliquez ici." + "fr-FR": "Après avoir rempli le formulaire, cliquez ici.", + "th-TH": "หลังจากกรอกข้อมูลของคุณแล้ว กดตรงนี้" } }, "placement": "bottom" @@ -2595,7 +2758,8 @@ "description": { "messageByLocale": { "en": "Click here to **publish** your game.", - "fr-FR": "Cliquez ici pour **publier** votre jeu." + "fr-FR": "Cliquez ici pour **publier** votre jeu.", + "th-TH": "กดที่นี่เพื่อ **เผยแพร่** เกมของคุณ" } }, "placement": "bottom" @@ -2617,7 +2781,8 @@ "description": { "messageByLocale": { "en": "Click here to open your game in your browser. Remember to share the link so that others can play your game!\n\nOnce you're done, close this dialog.", - "fr-FR": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre." + "fr-FR": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre.", + "th-TH": "คลิกที่นี่เพื่อเปิดเกมของคุณบนเบราวเซอร์ อย่าลืมแชร์ลิงค์เพื่อให้ผู้เล่นคนอื่นสามารถเล่นเกมของคุณได้!\n\nหลังจากเสร็จแล้ว ปิดหน้าต่างนี้" } }, "placement": "top" @@ -2632,24 +2797,28 @@ "messageByLocale": { "en": "## Congratulations!", "fr-FR": "## Félicitations !" + , "th-TH": "## ยินดีด้วย!" } }, { "messageByLocale": { "en": "You have finished the second part of your Fling Game.", "fr-FR": "Vous avez terminé la seconde partie de votre jeu." + , "th-TH": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" } }, { "messageByLocale": { "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", "fr-FR": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" + , "th-TH": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { "messageByLocale": { "en": "Now you can take a break from the tutorial, or add a leaderboard on the next chapter.", "fr-FR": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score." + , "th-TH": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเพื่อเพิ่มกระดานคะแนนเลยก็ได้" } } ] @@ -2664,7 +2833,8 @@ "description": { "messageByLocale": { "en": "Right click on your $(background) and click “set as **global object**”.", - "fr-FR": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”." + "fr-FR": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”.", + "th-TH": "คลิกขวาที่ $(background) และเลือก “ตั้งเป็น **วัตถุโกลบอล**”" } }, "placement": "left" @@ -2679,7 +2849,8 @@ "title": { "messageByLocale": { "en": "Now let's create a new **scene** for our start screen.", - "fr-FR": "Créons une scène qui servira d'écran d'ouverture du jeu." + "fr-FR": "Créons une scène qui servira d'écran d'ouverture du jeu.", + "th-TH": "ทีนี้สร้าง **scene** ใหม่ สำหรับฉากเริ่มต้น" } }, "placement": "right" @@ -2694,7 +2865,8 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-FR": "Cliquez ici." + "fr-FR": "Cliquez ici.", + "th-TH": "คลิกที่นี่" } }, "placement": "right" @@ -2712,7 +2884,8 @@ "description": { "messageByLocale": { "en": "Right click on the new scene and change its name to “**StartScreen**”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-FR": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène." + "fr-FR": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène.", + "th-TH": "คลิกขวาที่ scene ใหม่และเปลี่ยนชื่อเป็น “**StartScreen**”\n\nเมื่อเสร็จแล้ว คลิกที่ไอเทมเพื่อเปิด scene ใหม่" } }, "placement": "right" @@ -2728,7 +2901,8 @@ "description": { "messageByLocale": { "en": "Drag $(background) into the scene.", - "fr-FR": "Faites glisser $(background) du menu au canvas." + "fr-FR": "Faites glisser $(background) du menu au canvas.", + "th-TH": "ลาก $(background) มาใส่ใน scene" } }, "placement": "left" @@ -2739,7 +2913,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé" + "fr-FR": "J'ai terminé", + "th-TH": "เสร็จแล้ว" } } }, @@ -2748,7 +2923,8 @@ "description": { "messageByLocale": { "en": "Drag to expand the size $(background) until it stretches over your entire game area.", - "fr-FR": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu." + "fr-FR": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu.", + "th-TH": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" } }, "image": { @@ -2767,7 +2943,8 @@ "description": { "messageByLocale": { "en": "Now let's create a title!", - "fr-FR": "Maintenant, créons un titre!" + "fr-FR": "Maintenant, créons un titre!", + "th-TH": "ทีนี้ได้เวลาสร้าง title!" } } } @@ -2781,7 +2958,8 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-FR": "Nous allons créer un objet texte de zéro." + "fr-FR": "Nous allons créer un objet texte de zéro.", + "th-TH": "สร้างข้อความเอง" } }, "placement": "bottom" @@ -2798,7 +2976,8 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-FR": "Sélectionnez l'objet **Texte**" + "fr-FR": "Sélectionnez l'objet **Texte**", + "th-TH": "เลือกวัตถุ **ข้อความ**" } }, "placement": "bottom" @@ -2814,7 +2993,8 @@ "description": { "messageByLocale": { "en": "Change the object name to “Title”.", - "fr-FR": "Changez le nom de l'objet pour “Titre”." + "fr-FR": "Changez le nom de l'objet pour “Titre”.", + "th-TH": "เปลี่ยนชื่อวัตถุเป็น “Title”" } }, "placement": "bottom" @@ -2830,7 +3010,8 @@ "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-FR": "Utilisez une taille de **200**." + "fr-FR": "Utilisez une taille de **200**.", + "th-TH": "แก้ไขขนาดฟอนต์เป็น **200**" } }, "placement": "bottom" @@ -2846,7 +3027,8 @@ "description": { "messageByLocale": { "en": "Change the initial text to display whatever you want the title of your game to be.", - "fr-FR": "Entrez le nom que vous avez choisi pour votre jeu." + "fr-FR": "Entrez le nom que vous avez choisi pour votre jeu.", + "th-TH": "เปลี่ยนข้อความเริ่มต้นเป็นชื่อเกมของคุณ อะไรก็ได้" } }, "placement": "bottom" @@ -2862,7 +3044,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé." + "fr-FR": "Nous avons terminé.", + "th-TH": "เสร็จแล้ว" } } }, @@ -2879,7 +3062,8 @@ "description": { "messageByLocale": { "en": "Drag $(title) into the **scene** where you'd like your title to be.", - "fr-FR": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu.." + "fr-FR": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu..", + "th-TH": "ลาก $(title) ไปยัง **scene** ที่คุณต้องการใส่ชื่อเกม" } }, "placement": "left" @@ -2894,7 +3078,8 @@ "description": { "messageByLocale": { "en": "Right-click on $(title) and select “Duplicate”.", - "fr-FR": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”." + "fr-FR": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”.", + "th-TH": "คลิกขวาที่ $(title) และเลือก “คัดลอกซ้ำ”" } }, "placement": "left" @@ -2912,7 +3097,8 @@ "description": { "messageByLocale": { "en": "Double click on $(startText).", - "fr-FR": "Double-cliquez sur $(startText)." + "fr-FR": "Double-cliquez sur $(startText).", + "th-TH": "ดับเบิ้ลคลิกที่ $(startText)" } }, "placement": "left" @@ -2927,7 +3113,8 @@ "description": { "messageByLocale": { "en": "Change the **object** name to “**Start**”.", - "fr-FR": "Changez le nom de **l'objet** pour “**Jouer**”." + "fr-FR": "Changez le nom de **l'objet** pour “**Jouer**”.", + "th-TH": "เปลี่ยนชื่อ **วัตถุ** เป็น “**Start**”" } }, "placement": "bottom" @@ -2943,7 +3130,8 @@ "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-FR": "Utilisez une taille de **50**." + "fr-FR": "Utilisez une taille de **50**.", + "th-TH": "แก้ไขขนาดฟอนต์เป็น **50**" } }, "placement": "bottom" @@ -2959,7 +3147,8 @@ "description": { "messageByLocale": { "en": "Change the initial text to “Start Game”.", - "fr-FR": "Définissez le texte de l'objet à “Jouer”." + "fr-FR": "Définissez le texte de l'objet à “Jouer”.", + "th-TH": "เปลี่ยนข้อความเริ่มต้นเป็น “Start Game”" } }, "placement": "bottom" @@ -2975,7 +3164,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé." + "fr-FR": "Nous avons terminé.", + "th-TH": "เสร็จแล้ว" } } }, @@ -2992,7 +3182,8 @@ "description": { "messageByLocale": { "en": "Drag $(startText) into the **scene** where you'd like the start button to be.", - "fr-FR": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez." + "fr-FR": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez.", + "th-TH": "ลาก $(startText) ไปยัง **scene** ที่คุณต้องการใส่ปุ่มเริ่มเกม" } }, "placement": "left" @@ -3007,7 +3198,8 @@ "description": { "messageByLocale": { "en": "Now let's interact with those titles.", - "fr-FR": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte." + "fr-FR": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte.", + "th-TH": "โต้ตอบกับข้อความ" } } } @@ -3022,7 +3214,8 @@ "description": { "messageByLocale": { "en": "Let's create a new **event**.", - "fr-FR": "Créez un nouvel **évènement**." + "fr-FR": "Créez un nouvel **évènement**.", + "th-TH": "สร้าง **event** ใหม่" } } } @@ -3036,7 +3229,8 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Ajoutez une **condition**." + "fr-FR": "Ajoutez une **condition**.", + "th-TH": "เพิ่ม **เงื่อนไข**" } } } @@ -3050,7 +3244,8 @@ "description": { "messageByLocale": { "en": "Select $(startText).", - "fr-FR": "Cliquez sur $(startText)." + "fr-FR": "Cliquez sur $(startText).", + "th-TH": "เลือก $(startText)" } } }, @@ -3065,7 +3260,8 @@ "description": { "messageByLocale": { "en": "Select the cursor condition.", - "fr-FR": "Cliquez sur cette condition de position du curseur." + "fr-FR": "Cliquez sur cette condition de position du curseur.", + "th-TH": "เลือกเงื่อนไขเคอร์เซอร์" } } }, @@ -3080,7 +3276,8 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "Rien de plus à configurer." + "fr-FR": "Rien de plus à configurer.", + "th-TH": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3095,7 +3292,8 @@ "description": { "messageByLocale": { "en": "Add another **condition**.", - "fr-FR": "Ajoutez une autre **condition**." + "fr-FR": "Ajoutez une autre **condition**.", + "th-TH": "เพิ่ม **เงื่อนไข** อีก" } } } @@ -3109,7 +3307,8 @@ "description": { "messageByLocale": { "en": "Type “**Mouse**”.", - "fr-FR": "Cherchez “**Souris**”" + "fr-FR": "Cherchez “**Souris**”", + "th-TH": "พิมพ์ “**Mouse**”" } } }, @@ -3124,7 +3323,8 @@ "description": { "messageByLocale": { "en": "Select “Mouse button released”.", - "fr-FR": "Cliquez sur “Bouton de la souris relâché”." + "fr-FR": "Cliquez sur “Bouton de la souris relâché”.", + "th-TH": "เลือก “ปุ่มจากเมาส์ถูกปล่อย”" } } }, @@ -3139,7 +3339,8 @@ "description": { "messageByLocale": { "en": "Select “left (primary)”.", - "fr-FR": "Sélectionnez “Gauche (principal)”." + "fr-FR": "Sélectionnez “Gauche (principal)”.", + "th-TH": "เลือก “ซ้าย (หลัก)”" } }, "placement": "top" @@ -3155,7 +3356,8 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "C'est bon pour cette condition." + "fr-FR": "C'est bon pour cette condition.", + "th-TH": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3170,7 +3372,8 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-FR": "Ajoutons une **action** maintenant." + "fr-FR": "Ajoutons une **action** maintenant.", + "th-TH": "เพิ่ม **การกระทำ**" } } } @@ -3184,7 +3387,8 @@ "description": { "messageByLocale": { "en": "Type “**Scene**”.", - "fr-FR": "Cherchez “**scène**”." + "fr-FR": "Cherchez “**scène**”.", + "th-TH": "พิมพ์ “**Scene**”" } } }, @@ -3199,7 +3403,8 @@ "description": { "messageByLocale": { "en": "Select “**Change the scene**”.", - "fr-FR": "Cliquez sur “**Changer la scène**”." + "fr-FR": "Cliquez sur “**Changer la scène**”.", + "th-TH": "เลือก “**Change the scene**”" } } }, @@ -3214,7 +3419,8 @@ "description": { "messageByLocale": { "en": "Select “$(playScene)”.", - "fr-FR": "Sélectionnez “$(playScene)”." + "fr-FR": "Sélectionnez “$(playScene)”.", + "th-TH": "เลือก “$(playScene)”" } }, "placement": "top" @@ -3230,7 +3436,8 @@ "description": { "messageByLocale": { "en": "Alright, the **action** is all set.", - "fr-FR": "L'action est bien configurée." + "fr-FR": "L'action est bien configurée.", + "th-TH": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3245,7 +3452,8 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to add a score.", - "fr-FR": "Retournons à la **scène** pour afficher le score." + "fr-FR": "Retournons à la **scène** pour afficher le score.", + "th-TH": "กลับไปยัง **scene** เพื่อเพิ่มคะแนน" } } } @@ -3261,7 +3469,8 @@ "description": { "messageByLocale": { "en": "Let's create a text that will display the player score.", - "fr-FR": "Créez un object texte qui affichera le score du joueur ou de la joueuse." + "fr-FR": "Créez un object texte qui affichera le score du joueur ou de la joueuse.", + "th-TH": "สร้างข้อความสำหรับแสดงคะแนนผู้เล่น" } } } @@ -3275,7 +3484,8 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-FR": "Nous allons créer un objet texte de zéro." + "fr-FR": "Nous allons créer un objet texte de zéro.", + "th-TH": "สร้างข้อความเอง" } }, "placement": "bottom" @@ -3292,7 +3502,8 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-FR": "Sélectionnez l'objet **Texte**" + "fr-FR": "Sélectionnez l'objet **Texte**", + "th-TH": "เลือกวัตถุ **ข้อความ**" } }, "placement": "bottom" @@ -3308,7 +3519,8 @@ "description": { "messageByLocale": { "en": "Change the object name to “**Score**”.", - "fr-FR": "Changez le nom de l'objet pour “**Score**”." + "fr-FR": "Changez le nom de l'objet pour “**Score**”.", + "th-TH": "เปลี่ยนชื่อวัตถุเป็น “**Score**”" } }, "placement": "bottom" @@ -3324,7 +3536,8 @@ "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-FR": "Utilisez une taille de **50**." + "fr-FR": "Utilisez une taille de **50**.", + "th-TH": "แก้ไขขนาดฟอนต์เป็น **50**" } }, "placement": "bottom" @@ -3340,7 +3553,8 @@ "description": { "messageByLocale": { "en": "Change the initial text to display “Time: 0”.", - "fr-FR": "Utilisez comme texte initial “Temps : 0”." + "fr-FR": "Utilisez comme texte initial “Temps : 0”.", + "th-TH": "เปลี่ยนข้อความเริ่มต้นเป็น “Time: 0”" } }, "placement": "bottom" @@ -3356,7 +3570,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé." + "fr-FR": "Nous avons terminé.", + "th-TH": "เสร็จแล้ว" } } }, @@ -3373,7 +3588,8 @@ "description": { "messageByLocale": { "en": "Drag $(scoreText) into the top left corner of the screen.", - "fr-FR": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu." + "fr-FR": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu.", + "th-TH": "ลาก $(scoreText) ไปยังมุมซ้ายบนของหน้าจอ" } }, "placement": "left" @@ -3388,7 +3604,8 @@ "description": { "messageByLocale": { "en": "Let's change the score dynamically.", - "fr-FR": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé." + "fr-FR": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé.", + "th-TH": "เปลี่ยนแปลงคะแนนแบบไดนามิก" } } } @@ -3403,7 +3620,8 @@ "description": { "messageByLocale": { "en": "We will create a timer that will start when the **scene** starts.", - "fr-FR": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre." + "fr-FR": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre.", + "th-TH": "เราจะสร้างนาฬิกาจับเวลาโดยเริ่มจับเวลาเมื่อ **scene** เริ่มต้น" } } }, @@ -3418,7 +3636,8 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Ajoutez une **condition**." + "fr-FR": "Ajoutez une **condition**.", + "th-TH": "เพิ่ม **เงื่อนไข**" } } } @@ -3432,7 +3651,8 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-FR": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”.", + "th-TH": "ค้นหา “**Scene**”" } } }, @@ -3447,7 +3667,8 @@ "description": { "messageByLocale": { "en": "Select the *At the beginning of the scene** condition.*", - "fr-FR": "Cliquez sur la condition *Au lancement de la scène*." + "fr-FR": "Cliquez sur la condition *Au lancement de la scène*.", + "th-TH": "เลือก *เงื่อนไข** ขณะที่เริ่มฉาก*" } } }, @@ -3462,7 +3683,8 @@ "description": { "messageByLocale": { "en": "Let's create the timer now.", - "fr-FR": "Nous allons maintenant créer le chronomètre." + "fr-FR": "Nous allons maintenant créer le chronomètre.", + "th-TH": "สร้างนาฬืกาจับเวลา" } }, "placement": "top" @@ -3477,7 +3699,8 @@ "description": { "messageByLocale": { "en": "Create an **action**.", - "fr-FR": "Créez une **action**." + "fr-FR": "Créez une **action**.", + "th-TH": "สร้าง **การกระทำ**" } } } @@ -3491,7 +3714,8 @@ "description": { "messageByLocale": { "en": "Search for “Scene timer”.", - "fr-FR": "Cherchez “chrono”." + "fr-FR": "Cherchez “chrono”.", + "th-TH": "ค้นหา “ตัวจับเวลา Scene”" } } }, @@ -3506,7 +3730,8 @@ "description": { "messageByLocale": { "en": "Select the *Start (or reset) a scene timer* action.", - "fr-FR": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*." + "fr-FR": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*.", + "th-TH": "เลือกการกระทำ *เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลา*" } } }, @@ -3521,7 +3746,8 @@ "description": { "messageByLocale": { "en": "Type **\"Score\"** (in quotations).", - "fr-FR": "Entrez **\"Score\"** (entre guillements)." + "fr-FR": "Entrez **\"Score\"** (entre guillements).", + "th-TH": "พิมพ์ **\"Score\"** (ใส่ quotations ด้วย)" } } }, @@ -3537,7 +3763,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé." + "fr-FR": "Nous avons terminé.", + "th-TH": "เสร็จแล้ว" } }, "placement": "top" @@ -3552,7 +3779,8 @@ "description": { "messageByLocale": { "en": "Now let's display the score.", - "fr-FR": "Maintenant, affichons le score." + "fr-FR": "Maintenant, affichons le score.", + "th-TH": "แสดงคะแนน" } } }, @@ -3567,7 +3795,8 @@ "description": { "messageByLocale": { "en": "Let's make the score dynamic.", - "fr-FR": "Nous allons rendre le score dynamique." + "fr-FR": "Nous allons rendre le score dynamique.", + "th-TH": "เปลี่ยนแปลงคะแนนให้เป็นแบบไดนามิก" } } } @@ -3581,7 +3810,8 @@ "description": { "messageByLocale": { "en": "Select $(scoreText).", - "fr-FR": "Cliquez sur $(scoreText)." + "fr-FR": "Cliquez sur $(scoreText).", + "th-TH": "เลือก $(scoreText)" } } }, @@ -3596,7 +3826,8 @@ "description": { "messageByLocale": { "en": "We will change the text.", - "fr-FR": "Nous allons changer le contenu du texte." + "fr-FR": "Nous allons changer le contenu du texte.", + "th-TH": "เราจะแก้ไขข้อความ" } } }, @@ -3611,7 +3842,8 @@ "description": { "messageByLocale": { "en": "Select “= (set to)”.", - "fr-FR": "Cliquez sur “= (définir à)”." + "fr-FR": "Cliquez sur “= (définir à)”.", + "th-TH": "เลือก “= (ตั้งเป็น)”" } } }, @@ -3627,7 +3859,8 @@ "description": { "messageByLocale": { "en": "Double click to highlight this line, then copy and paste it here: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", - "fr-FR": "Double cliquez sur cette ligne pour la sélectionner et copiez-collez là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`." + "fr-FR": "Double cliquez sur cette ligne pour la sélectionner et copiez-collez là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`.", + "th-TH": "ดับเบิ้ลคลิกเพื่อไฮไลต์ จากนั้นคัดลองและวางที่นี่: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`" } } }, @@ -3643,7 +3876,8 @@ "description": { "messageByLocale": { "en": "We're all set.", - "fr-FR": "On est tout bon." + "fr-FR": "On est tout bon.", + "th-TH": "เรียบร้อยแล้ว" } }, "placement": "top" @@ -3658,13 +3892,15 @@ "title": { "messageByLocale": { "en": "Now let's save the score of the player.", - "fr-FR": "Maintenant, sauvegardons le score du joueur ou de la joueuse." + "fr-FR": "Maintenant, sauvegardons le score du joueur ou de la joueuse.", + "th-TH": "ทีนี้ เราจะบันทึกคะแนนของผู้เล่น" } }, "description": { "messageByLocale": { "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "th-TH": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -3678,7 +3914,8 @@ "description": { "messageByLocale": { "en": "Search for “leaderboard”.", - "fr-FR": "Cherchez “**classement**”." + "fr-FR": "Cherchez “**classement**”.", + "th-TH": "ค้นหา “leaderboard”" } } }, @@ -3693,7 +3930,8 @@ "description": { "messageByLocale": { "en": "Select the **Save connected player score** action.", - "fr-FR": "Sélectionnez l'action **Enregistrer le score du joueur connecté**." + "fr-FR": "Sélectionnez l'action **Enregistrer le score du joueur connecté**.", + "th-TH": "เลือกการกระทำ **บันทึกคะแนนผู้เล่นที่เชื่อมต่อ**" } } }, @@ -3708,7 +3946,8 @@ "description": { "messageByLocale": { "en": "Open the **Leaderboard admin**.", - "fr-FR": "Ouvrez le panneau de gestion des classements." + "fr-FR": "Ouvrez le panneau de gestion des classements.", + "th-TH": "เปิด **Leaderboard admin**" } } }, @@ -3723,7 +3962,8 @@ "description": { "messageByLocale": { "en": "Create a leaderboard.", - "fr-FR": "Créez un nouveau classement." + "fr-FR": "Créez un nouveau classement.", + "th-TH": "สร้าง leaderboard" } } }, @@ -3738,7 +3978,8 @@ "description": { "messageByLocale": { "en": "Let's change its name.", - "fr-FR": "Changez son nom." + "fr-FR": "Changez son nom.", + "th-TH": "เปลี่ยนชื่อ" } } }, @@ -3753,7 +3994,8 @@ "description": { "messageByLocale": { "en": "Type “*Score*”.", - "fr-FR": "Entrez “*Score*”." + "fr-FR": "Entrez “*Score*”.", + "th-TH": "พิมพ์ “*Score*”" } } }, @@ -3768,7 +4010,8 @@ "description": { "messageByLocale": { "en": "Save changes when you're done.", - "fr-FR": "Sauvegardez quand vous avez terminé." + "fr-FR": "Sauvegardez quand vous avez terminé.", + "th-TH": "บันทึกการเปลี่ยนแปลงหลังจากเสร็จแล้ว" } } }, @@ -3783,7 +4026,8 @@ "description": { "messageByLocale": { "en": "Our leaderboard is ready.", - "fr-FR": "Notre classement est bien configuré, vous pouvez fermer." + "fr-FR": "Notre classement est bien configuré, vous pouvez fermer.", + "th-TH": "leaderboard ของเราพร้อมแล้ว" } } }, @@ -3798,7 +4042,8 @@ "description": { "messageByLocale": { "en": "Select the option *Select the leaderboard from a list*.", - "fr-FR": "Sélectionnez l'option *Sélectionnez le classement dans une liste*." + "fr-FR": "Sélectionnez l'option *Sélectionnez le classement dans une liste*.", + "th-TH": "เลือกตัวเลือก *เลือก leaderboard จากในลิสต์*" } }, "placement": "top" @@ -3815,7 +4060,8 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-FR": "Sélectionnez le classement qui s'appelle “Score”." + "fr-FR": "Sélectionnez le classement qui s'appelle “Score”.", + "th-TH": "เลือก leaderboard ที่ชื่อ “Score”" } } }, @@ -3830,7 +4076,8 @@ "description": { "messageByLocale": { "en": "Open the **expression** builder.", - "fr-FR": "Ouvrez le constructeur **d'expression**." + "fr-FR": "Ouvrez le constructeur **d'expression**.", + "th-TH": "เปิด เมนูสร้าง **expression**" } } }, @@ -3845,7 +4092,8 @@ "description": { "messageByLocale": { "en": "Search for “*Timer*”.", - "fr-FR": "Cherchez “*chrono*”." + "fr-FR": "Cherchez “*chrono*”.", + "th-TH": "ค้นหา “*Timer*”" } } }, @@ -3860,7 +4108,8 @@ "description": { "messageByLocale": { "en": "Select **Scene timer value**.", - "fr-FR": "Cliquez sur **Valeur du chronomètre de scène**." + "fr-FR": "Cliquez sur **Valeur du chronomètre de scène**.", + "th-TH": "เลือก **ค่าจากตัวจับเวลา**" } } }, @@ -3875,7 +4124,8 @@ "description": { "messageByLocale": { "en": "Select timer “Score”.", - "fr-FR": "Sélectionnez le chronomètre “Score”." + "fr-FR": "Sélectionnez le chronomètre “Score”.", + "th-TH": "เลือกตัวจับเวลา “Score”" } }, "placement": "top" @@ -3891,7 +4141,8 @@ "description": { "messageByLocale": { "en": "This parameter is all set.", - "fr-FR": "C'est terminé." + "fr-FR": "C'est terminé.", + "th-TH": "พารามิเตอร์ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3907,7 +4158,8 @@ "description": { "messageByLocale": { "en": "The action is ready.", - "fr-FR": "L'action est prête." + "fr-FR": "L'action est prête.", + "th-TH": "การกระทำพร้อมแล้ว" } }, "placement": "top" @@ -3922,13 +4174,15 @@ "title": { "messageByLocale": { "en": "Now we will display the other players scores after a 2 seconds delay.", - "fr-FR": "Maintenant, nous allons afficher le score des autres joueurs et joueuses après un délai de 2 secondes." + "fr-FR": "Maintenant, nous allons afficher le score des autres joueurs et joueuses après un délai de 2 secondes.", + "th-TH": "ทีนี้เราจะแสดงคะแนนผู้เล่นคนอื่นโดยดีเลย์ 2 วินาที" } }, "description": { "messageByLocale": { "en": "In the **event** where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "th-TH": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -3942,7 +4196,8 @@ "description": { "messageByLocale": { "en": "Search for “**Wait**”.", - "fr-FR": "Cherchez “**Attendre**”." + "fr-FR": "Cherchez “**Attendre**”.", + "th-TH": "ค้นหา “**รอ**”" } } }, @@ -3957,7 +4212,8 @@ "description": { "messageByLocale": { "en": "Select the *Wait X seconds* action.", - "fr-FR": "Cliquez sur l'action *Attendre X secondes*." + "fr-FR": "Cliquez sur l'action *Attendre X secondes*.", + "th-TH": "เลือกการกระทำ *รอ X วินาที*" } } }, @@ -3972,7 +4228,8 @@ "description": { "messageByLocale": { "en": "Type in **2**.", - "fr-FR": "Tapez **2**." + "fr-FR": "Tapez **2**.", + "th-TH": "พิมพ์ **2**" } } }, @@ -3987,7 +4244,8 @@ "description": { "messageByLocale": { "en": "Now the game will wait 2 seconds before going to next **action** in the **event**.", - "fr-FR": "Maintenant, le jeu va attendre 2 secondes avant de passer à **l'action** suivante dans **l'évènement**." + "fr-FR": "Maintenant, le jeu va attendre 2 secondes avant de passer à **l'action** suivante dans **l'évènement**.", + "th-TH": "ทีนี้เกมจะรอ 2 วินาที ก่อนจะทำ **การกระทำ** ใน **อีเวนท์**" } }, "placement": "top" @@ -4002,13 +4260,15 @@ "title": { "messageByLocale": { "en": "Now we will display a leaderboard.", - "fr-FR": "Maintenant, nous allons afficher un classement des scores." + "fr-FR": "Maintenant, nous allons afficher un classement des scores.", + "th-TH": "แสดง leaderboard" } }, "description": { "messageByLocale": { "en": "In the **event** where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "th-TH": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -4022,7 +4282,8 @@ "description": { "messageByLocale": { "en": "Search for “**leaderboard**”.", - "fr-FR": "Cherchez “**classement**”." + "fr-FR": "Cherchez “**classement**”.", + "th-TH": "ค้นหา “**leaderboard**”" } } }, @@ -4037,7 +4298,8 @@ "description": { "messageByLocale": { "en": "Select the *Display leaderboard* action.", - "fr-FR": "Cliquez sur l'action *Afficher le classement*." + "fr-FR": "Cliquez sur l'action *Afficher le classement*.", + "th-TH": "เลือกการกระทำ *แสดง leaderboard*" } } }, @@ -4052,7 +4314,8 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-FR": "Sélectionnez le classement qui s'appelle “Score”." + "fr-FR": "Sélectionnez le classement qui s'appelle “Score”.", + "th-TH": "เลือก leaderboard ที่ชื่อ “Score”" } } }, @@ -4067,7 +4330,8 @@ "description": { "messageByLocale": { "en": "We'll use the built-in loader.", - "fr-FR": "Nous allons utiliser l'écran de chargement intégré par défaut." + "fr-FR": "Nous allons utiliser l'écran de chargement intégré par défaut.", + "th-TH": "เราจะใช้โหลดเดอร์ built-in" } } }, @@ -4083,7 +4347,8 @@ "description": { "messageByLocale": { "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", - "fr-FR": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target)." + "fr-FR": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target).", + "th-TH": "leaderboard ควรจะแสดง เมื่อ $(projectile) ไปถึง $(target)" } }, "placement": "top" @@ -4098,7 +4363,8 @@ "description": { "messageByLocale": { "en": "Now we will ask the player to authenticate at game opening.", - "fr-FR": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu." + "fr-FR": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu.", + "th-TH": "ทีนี้เราจะถามผู้เล่นให้ยืนยันตอนที่เปิดเกม" } } } @@ -4114,7 +4380,8 @@ "description": { "messageByLocale": { "en": "Let's create an **event**!", - "fr-FR": "Créez un nouvel **évènement**." + "fr-FR": "Créez un nouvel **évènement**.", + "th-TH": "สร้าง **อีเวนท์** กันเถอะ!" } } } @@ -4128,7 +4395,8 @@ "description": { "messageByLocale": { "en": "Add a condition.", - "fr-FR": "Ajoutez une condition." + "fr-FR": "Ajoutez une condition.", + "th-TH": "เพิ่มเงื่อนไข" } } }, @@ -4150,7 +4418,8 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-FR": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”.", + "th-TH": "ค้นหา “**Scene**”" } } }, @@ -4165,7 +4434,8 @@ "description": { "messageByLocale": { "en": "Select the **At the beginning of the scene** condition.", - "fr-FR": "Cliquez sur la condition *Au lancement de la scène*." + "fr-FR": "Cliquez sur la condition *Au lancement de la scène*.", + "th-TH": "เลือกเงื่อนไข **ขณะที่เริ่มฉาก**" } } }, @@ -4180,7 +4450,8 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé." + "fr-FR": "Nous avons terminé.", + "th-TH": "เสร็จแล้ว" } }, "placement": "top" @@ -4195,7 +4466,8 @@ "description": { "messageByLocale": { "en": "Let's choose an **action**.", - "fr-FR": "Choisissons une **action**." + "fr-FR": "Choisissons une **action**.", + "th-TH": "เลือก **การกระทำ**" } } } @@ -4209,7 +4481,8 @@ "description": { "messageByLocale": { "en": "Search for “**Authentication**”.", - "fr-FR": "Cherchez “**Authentification**”." + "fr-FR": "Cherchez “**Authentification**”.", + "th-TH": "ค้นหา “**Authentication**”" } } }, @@ -4224,7 +4497,8 @@ "description": { "messageByLocale": { "en": "Select *Display authentication banner*.", - "fr-FR": "Cliquez sur *Afficher la bannière d'authentification*." + "fr-FR": "Cliquez sur *Afficher la bannière d'authentification*.", + "th-TH": "เลือก *แสดงแบนเนอร์ authentication*" } } }, @@ -4239,7 +4513,8 @@ "description": { "messageByLocale": { "en": "Alright, now players will be asked to login.", - "fr-FR": "Maintenant, les joueurs et les joueuses pourront s'identifier." + "fr-FR": "Maintenant, les joueurs et les joueuses pourront s'identifier.", + "th-TH": "เอาล่ะ ทีนี้ผู้เล่นจะถูกขอให้ล็อกอิน" } }, "placement": "top" @@ -4254,7 +4529,8 @@ "description": { "messageByLocale": { "en": "Let's make sure the player comes back to the start screen after closing the **leaderboard**.", - "fr-FR": "Faisons en sorte que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**." + "fr-FR": "Faisons en sorte que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**.", + "th-TH": "ทำให้มั่นใจว่าผู้เล่นจะกลับมาที่หน้าเริ่มต้นหลังกดปิด **leaderboard**" } } } @@ -4269,7 +4545,8 @@ "description": { "messageByLocale": { "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”." + "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "th-TH": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -4283,7 +4560,8 @@ "description": { "messageByLocale": { "en": "Type “*Scene*”.", - "fr-FR": "Cherchez “**Scène**”." + "fr-FR": "Cherchez “**Scène**”.", + "th-TH": "พิมพ์ “*Scene*”" } } }, @@ -4298,7 +4576,8 @@ "description": { "messageByLocale": { "en": "Select “Change the scene”.", - "fr-FR": "Cliquez sur “**Changer la scène**”." + "fr-FR": "Cliquez sur “**Changer la scène**”.", + "th-TH": "เลือก “เปลี่ยน scene”" } } }, @@ -4313,7 +4592,8 @@ "description": { "messageByLocale": { "en": "Select “$(startScene)”.", - "fr-FR": "Sélectionnez “$(startScene)”." + "fr-FR": "Sélectionnez “$(startScene)”.", + "th-TH": "เลือก “$(startScene)”" } }, "placement": "top" @@ -4330,7 +4610,8 @@ "description": { "messageByLocale": { "en": "Alright, the action is all set.", - "fr-FR": "L'action est bien configurée." + "fr-FR": "L'action est bien configurée.", + "th-TH": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -4345,7 +4626,8 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-FR": "Ouvrez le **Gestionnaire de projet**." + "fr-FR": "Ouvrez le **Gestionnaire de projet**.", + "th-TH": "เปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -4360,7 +4642,8 @@ "description": { "messageByLocale": { "en": "Right-click on $(startScene) and select **Set as start scene**.", - "fr-FR": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**." + "fr-FR": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**.", + "th-TH": "คลิกขวาที่ $(startScene) และเลือก **ตั้งเป็น scene เริ่มต้น**" } }, "placement": "right" @@ -4376,7 +4659,8 @@ "description": { "messageByLocale": { "en": "Come back to the start scene *$(startScene)*.", - "fr-FR": "Retournons à la scène d'ouverture *$(startScene)*." + "fr-FR": "Retournons à la scène d'ouverture *$(startScene)*.", + "th-TH": "กลับไปยัง scene เริ่มต้น *$(startScene)*" } }, "placement": "bottom" @@ -4393,7 +4677,8 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button.", - "fr-FR": "Lancez un **Aperçu** de votre jeu." + "fr-FR": "Lancez un **Aperçu** de votre jeu.", + "th-TH": "คลิกปุ่ม **ดูตัวอย่าง**" } }, "placement": "bottom" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 47be7df..6e39879 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -12,7 +12,8 @@ }, "availableLocales": [ "en", - "fr" + "fr", + "th" ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json", "initialProjectData": { @@ -24,25 +25,29 @@ { "messageByLocale": { "en": "# You've finished this lesson!", - "fr": "# Vous avez terminé cette leçon !" + "fr": "# Vous avez terminé cette leçon !", + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" } }, { "messageByLocale": { "en": "Well done, in this tutorial you've learned:", - "fr": "Bien joué, voici ce que vous avez appris :" + "fr": "Bien joué, voici ce que vous avez appris :", + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" } }, { "messageByLocale": { "en": "- How to create a layer\n\n- How to add and use a prefab object", - "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué" + "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué", + "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab" } }, { "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", - "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !" + "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" } } ] @@ -54,7 +59,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "Let's go!", - "fr": "C'est parti !" + "fr": "C'est parti !", + "th": "ไปกันเลย!" } } }, @@ -63,7 +69,8 @@ "description": { "messageByLocale": { "en": "This game is a simple platformer.\nYou can move the player with the arrow keys and jump with space.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue.", - "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer." + "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", + "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ" } } } @@ -78,7 +85,8 @@ "description": { "messageByLocale": { "en": "Let's add a health bar for the player to see how much of their health is left.", - "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste." + "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste.", + "th": "เพิ่ม health bar ให้กับผู้เล่น เพื่อให้สามารถดูได้ว่าเหลือเลือดอยู่เท่าไร" } } } @@ -92,7 +100,8 @@ "description": { "messageByLocale": { "en": "Let's choose a **prefab object** from the asset store", - "fr-FR": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources." + "fr-FR": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", + "th-TH": "เลือก **วัตถุ prefab** จากร้านค้า asset" } }, "placement": "bottom" @@ -109,7 +118,8 @@ "description": { "messageByLocale": { "en": "Let's go back to the store home page.", - "fr-FR": "Retournons à la page d'accueil du magasin." + "fr-FR": "Retournons à la page d'accueil du magasin.", + "th-TH": "กลับไปยังหน้าโฮมเพจของร้านค้า" } }, "placement": "bottom" @@ -127,7 +137,8 @@ "description": { "messageByLocale": { "en": "We will use a prefab object. It's an object that comes with specific actions and conditions to simplify its use.", - "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation." + "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" } } }, @@ -142,7 +153,8 @@ "description": { "messageByLocale": { "en": "We will use a resource bar that can be filled or emptied.", - "fr": "Nous allons utiliser une barre de ressource. Elle peut être remplie ou vidée." + "fr": "Nous allons utiliser une barre de ressource. Elle peut être remplie ou vidée.", + "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้" } } }, @@ -157,7 +169,8 @@ "description": { "messageByLocale": { "en": "Let's choose the hearts bar.", - "fr": "Choisissons la barre de coeurs." + "fr": "Choisissons la barre de coeurs.", + "th": "มาเลือก hearts bar กัน" } } } @@ -174,7 +187,8 @@ "description": { "messageByLocale": { "en": "Let's add it to the scene.", - "fr": "Ajoutons la à la scène." + "fr": "Ajoutons la à la scène.", + "th": "เพิ่มลงไปใน scene" } }, "placement": "top" @@ -189,7 +203,8 @@ "description": { "messageByLocale": { "en": "Let's close the asset store.", - "fr": "Fermons le magasin de ressources" + "fr": "Fermons le magasin de ressources", + "th": "ปิดร้านค้า asset" } }, "placement": "top" @@ -205,6 +220,7 @@ "messageByLocale": { "en": "Open the **Layers** panel.", "fr": "Ouvrez le panneau des **calques**.", + "th": "เปิดแผงควบคุม **เลเยอร์**", "es": "Abre el panel de **Capas**.", "pt": "Abra o painel de **Camadas**." } @@ -222,7 +238,8 @@ "description": { "messageByLocale": { "en": "We will create a layer that will holds the User Interface (UI) elements.", - "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU)." + "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU).", + "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ" } }, "placement": "top" @@ -237,7 +254,8 @@ "description": { "messageByLocale": { "en": "Change the name to **Interface**.", - "fr": "Changeons son nom en **Interface**." + "fr": "Changeons son nom en **Interface**.", + "th": "เปลี่ยนชื่อเป็น **Interface**" } }, "placement": "top" @@ -252,7 +270,8 @@ "description": { "messageByLocale": { "en": "Let's select this layer as the **default layer** to add objects to.", - "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets." + "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets.", + "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" } }, "placement": "left" @@ -267,7 +286,8 @@ "description": { "messageByLocale": { "en": "Drag the **$(resourceBar)** on the scene.", - "fr-FR": "Faites glisser **$(resourceBar)** du menu à la scène." + "fr-FR": "Faites glisser **$(resourceBar)** du menu à la scène.", + "th-TH": "ลาก **$(resourceBar)** ใส่ลงใน scene" } } } @@ -277,7 +297,8 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr": "J'ai terminé" + "fr": "J'ai terminé", + "th": "เสร็จแล้ว" } } }, @@ -286,7 +307,8 @@ "description": { "messageByLocale": { "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nPlace $(resourceBar) so that it's in the top left corner of the rectangle.\n\nWhen you're done, click below.", - "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez ci-dessous." + "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" } }, "placement": "top", @@ -304,7 +326,8 @@ "description": { "messageByLocale": { "en": "Now let's plug the health of the **$(player)** with **$(resourceBar)**! Let's **open the Events Sheet** of the $(level) scene.", - "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Ouvrons la **feuille d'événements** de la scène $(level)." + "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Ouvrons la **feuille d'événements** de la scène $(level).", + "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)" } }, "placement": "bottom" @@ -320,7 +343,8 @@ "description": { "messageByLocale": { "en": "Let's **add an action** to change the filling value of $(resourceBar).", - "fr": "**Ajoutons une action** pour changer la valeur de remplissage de $(resourceBar)." + "fr": "**Ajoutons une action** pour changer la valeur de remplissage de $(resourceBar).", + "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)" } } } @@ -334,7 +358,8 @@ "description": { "messageByLocale": { "en": "Select **$(resourceBar)**.", - "fr": "Sélectionnez **$(resourceBar)**." + "fr": "Sélectionnez **$(resourceBar)**.", + "th": "เลือก **$(resourceBar)**" } } }, @@ -349,7 +374,8 @@ "description": { "messageByLocale": { "en": "Select the action **Value**.", - "fr": "Sélectionnez l'action **Value**." + "fr": "Sélectionnez l'action **Value**.", + "th": "เลือกการกระทำ **Value**" } } }, @@ -364,7 +390,8 @@ "description": { "messageByLocale": { "en": "We want the value of the bar to match the health of $(player), so let's select **= (set to)**.", - "fr": "Nous voulons que la barre de vie représente la santé de $(player), donc sélectionnons **= (définir à)**." + "fr": "Nous voulons que la barre de vie représente la santé de $(player), donc sélectionnons **= (définir à)**.", + "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**" } }, "placement": "left" @@ -380,7 +407,8 @@ "description": { "messageByLocale": { "en": "Let's find where is stored the health of $(player).", - "fr": "Trouvons où est stockée la santé de $(player)." + "fr": "Trouvons où est stockée la santé de $(player).", + "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน" } }, "placement": "bottom" @@ -396,7 +424,8 @@ "description": { "messageByLocale": { "en": "$(player) is set up to use the **Health extension**. Search **Health**.", - "fr": "$(player) utiliser l'**extension Health**. Cherchez **Health**." + "fr": "$(player) utiliser l'**extension Health**. Cherchez **Health**.", + "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**" } }, "placement": "top" @@ -412,7 +441,8 @@ "description": { "messageByLocale": { "en": "Select **Health points**.", - "fr": "Sélectionnez **Health points**." + "fr": "Sélectionnez **Health points**.", + "th": "เลือก **Health points**" } }, "placement": "bottom" @@ -428,7 +458,8 @@ "description": { "messageByLocale": { "en": "Select **$(player)**.", - "fr": "Sélectionnez **$(player)**." + "fr": "Sélectionnez **$(player)**.", + "th": "เลือก **$(player)**" } }, "placement": "top" @@ -444,7 +475,8 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr": "On est bon." + "fr": "On est bon.", + "th": "เรียบร้อยแล้ว" } }, "placement": "top" @@ -460,7 +492,8 @@ "description": { "messageByLocale": { "en": "Everything is all set.", - "fr": "Tout est bien configuré." + "fr": "Tout est bien configuré.", + "th": "ทุกอย่างเรียบร้อยแล้ว" } }, "placement": "top" @@ -475,7 +508,8 @@ "description": { "messageByLocale": { "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**." + "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" } }, "placement": "bottom" diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 5cc9047..da5cf48 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -14,7 +14,7 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt"], + "availableLocales": ["en", "fr", "es", "pt", "th"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -30,7 +30,8 @@ "en": "# You've finished adding a score multiplier to your game!", "fr": "# Vous avez terminé d'ajouter un multiplicateur de score à votre jeu !", "es": "# ¡Has terminado de agregar un multiplicador de puntuación a tu juego!", - "pt": "# Você terminou de adicionar um multiplicador de pontuação ao seu jogo!" + "pt": "# Você terminou de adicionar um multiplicador de pontuação ao seu jogo!", + "th": "คุณได้เพิ่ม score multiplier ในเกมของคุณสำเร็จแล้ว!" } }, { @@ -38,7 +39,8 @@ "en": "Well done, in this tutorial you've learned:", "fr": "Bien joué, dans ce tutoriel vous avez appris :", "es": "¡Bien hecho, en este tutorial aprendiste:", - "pt": "Bem feito, neste tutorial você aprendeu:" + "pt": "Bem feito, neste tutorial você aprendeu:", + "th": "ทำได้ดีเยี่ยม สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" } }, { @@ -46,7 +48,8 @@ "en": "- How to create a scene variable\n\n- How to update a scene variable\n\n- How to use a scene variable in an expression", "fr": "- Comment créer une variable de scène\n\n- Comment mettre à jour une variable de scène\n\n- Comment utiliser une variable de scène dans une expression", "es": "- Cómo crear una variable de escena\n\n- Cómo actualizar una variable de escena\n\n- Cómo usar una variable de escena en una expresión", - "pt": "- Como criar uma variável de cena\n\n- Como atualizar uma variável de cena\n\n- Como usar uma variável de cena em uma expressão" + "pt": "- Como criar uma variável de cena\n\n- Como atualizar uma variável de cena\n\n- Como usar uma variável de cena em uma expressão", + "th": "- วิธีสร้างตัวแปรของ scene\n\n- วิธีอัพเดทตัวแปรของ scene\n\n- วิธีใช้ตัวแปรของ scene ใน expression" } }, { @@ -54,7 +57,8 @@ "en": "You can keep adding stuff to this game or publish it and share it with your friends to see who gets the highest score!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier et le partager avec vos amis pour voir qui obtient le meilleur score !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo y compartirlo con tus amigos para ver quién obtiene la puntuación más alta!", - "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo e compartilhá-lo com seus amigos para ver quem obtém a pontuação mais alta!" + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo e compartilhá-lo com seus amigos para ver quem obtém a pontuação mais alta!", + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่กับเพื่อนๆของคุณเลยก็ได้ แล้วมาดูกัน ใครจะทำคะแนนได้สูงที่สุด!" } } ] @@ -72,7 +76,8 @@ "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!", "fr": "Ce jeu utilise un classement ! **Connectez-vous** pour que nous puissions le configurer automatiquement !", "es": "¡Este juego usa una tabla de clasificación! ¡Vamos a **iniciar sesión** para que podamos configurarlo automáticamente!", - "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!" + "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!", + "th": "เกมนี้มี leaderboard! **เข้าสู่ระบบ** เพื่อตั้งให้เป็นอัตโนมัติกันเถอะ!" } }, "placement": "right" @@ -90,7 +95,8 @@ "en": "First, let's **create a leaderboard** as this game will need it. You're lucky, everything will be automatically set up for you!", "fr": "Tout d'abord, créons un **classement** car ce jeu en aura besoin. Vous avez de la chance, tout sera automatiquement configuré pour vous !", "es": "Primero, **creemos una tabla de clasificación** porque este juego la necesitará. ¡Tienes suerte, todo se configurará automáticamente para ti!", - "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!" + "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!", + "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!" } }, "placement": "right" @@ -107,7 +113,8 @@ "en": "This game is called Plinko! You let a ball fall inside a maze and gather points depending on how many pegs you hit. Click on the **Preview** button to test it out.", "fr": "Ce jeu s'appelle Plinko ! Vous laissez une balle tomber dans un labyrinthe et gagnez des points en fonction du nombre de plots que vous touchez. Cliquez sur le bouton **Aperçu** pour le tester.", "es": "¡Este juego se llama Plinko! Deja caer una bola en un laberinto y gana puntos dependiendo de cuántos clavos golpees. Haz clic en el botón **Vista previa** para probarlo.", - "pt": "Este jogo se chama Plinko! Você deixa uma bola cair em um labirinto e ganha pontos dependendo de quantos pinos você acerta. Clique no botão **Visualizar** para testá-lo." + "pt": "Este jogo se chama Plinko! Você deixa uma bola cair em um labirinto e ganha pontos dependendo de quantos pinos você acerta. Clique no botão **Visualizar** para testá-lo.", + "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม" } }, "placement": "bottom" @@ -125,7 +132,8 @@ "en": "Let's add a few **$(multiplier)** to spice up the game! Drag 3 from the menu to the canvas and place them so they can be collected by the ball through the maze.", "fr": "Ajoutons quelques **$(multiplier)** pour pimenter le jeu ! Faites glisser 3 depuis le menu sur le canvas et placez-les de sorte qu'ils puissent être collectés par la balle à travers le labyrinthe.", "es": "¡Agreguemos algunos **$(multiplier)** para darle un poco de sabor al juego! Arrastra 3 desde el menú al lienzo y colócalos de manera que puedan ser recogidos por la bola a través del laberinto.", - "pt": "Vamos adicionar alguns **$(multiplier)** para dar um pouco de sabor ao jogo! Arraste 3 do menu para a tela e coloque-os de modo que possam ser coletados pela bola através do labirinto." + "pt": "Vamos adicionar alguns **$(multiplier)** para dar um pouco de sabor ao jogo! Arraste 3 do menu para a tela e coloque-os de modo que possam ser coletados pela bola através do labirinto.", + "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต" } }, "placement": "top" @@ -142,7 +150,8 @@ "en": "Once you're done, let's position a **$(scoreMultiplier)** to display the current multiplier score. Let's place it just below the score!", "fr": "Une fois que vous avez terminé, positionnons un **$(scoreMultiplier)** pour afficher le multiplicateur de score actuel. Plaçons-le juste en dessous du score !", "es": "Una vez que hayas terminado, coloquemos un **$(scoreMultiplier)** para mostrar la puntuación actual del multiplicador. ¡Colóquelo justo debajo de la puntuación!", - "pt": "Uma vez que você terminou, vamos posicionar um **$(scoreMultiplier)** para exibir a pontuação atual do multiplicador. Vamos colocá-lo logo abaixo da pontuação!" + "pt": "Uma vez que você terminou, vamos posicionar um **$(scoreMultiplier)** para exibir a pontuação atual do multiplicador. Vamos colocá-lo logo abaixo da pontuação!", + "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!" } }, "placement": "bottom" @@ -160,7 +169,8 @@ "en": "We now need to store the score somewhere. Let's create a **scene variable**! Open the **Project Manager**", "fr": "Nous devons maintenant stocker le score quelque part. Créons une **variable de scène** ! Ouvrez le **Project Manager**", "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una **variable de escena**! Abre el **Project Manager**", - "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma **variável de cena**! Abra o **Project Manager**" + "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma **variável de cena**! Abra o **Project Manager**", + "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -178,7 +188,8 @@ "en": "We now need to store the score somewhere. Let's create a scene variable! Open the **Project Manager**", "fr": "Nous devons maintenant stocker le score quelque part. Créons une variable de scène ! Ouvrez le **Project Manager**", "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una variable de escena! Abre el **Project Manager**", - "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**" + "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**", + "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -204,7 +215,8 @@ "en": "**Right click** on $(gameScene) or tap the **triple dot button** and select **Edit scene variables**.", "fr": "Faites un **clic droit** sur $(gameScene) ou appuyez sur le **bouton à trois points** et sélectionnez **Modifier les variables de scène**.", "es": "Haga **clic derecho** en $(gameScene) o toque el **botón de tres puntos** y seleccione **Editar variables de escena**.", - "pt": "Clique com o **botão direito** em $(gameScene) ou toque no **botão de três pontos** e selecione **Editar variáveis de cena**." + "pt": "Clique com o **botão direito** em $(gameScene) ou toque no **botão de três pontos** e selecione **Editar variáveis de cena**.", + "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**" } } }, @@ -222,7 +234,8 @@ "en": "Let's add our first **variable**!", "fr": "Ajoutons notre première **variable** !", "es": "¡Agreguemos nuestra primera **variable**!", - "pt": "Vamos adicionar nossa primeira **variável**!" + "pt": "Vamos adicionar nossa primeira **variável**!", + "th": "มาเพิ่ม **ตัวแปร** แรกของเรากันเถอะ!" } } }, @@ -239,7 +252,8 @@ "en": "Let's name this variable `Multiplier`.", "fr": "Nommons cette variable `Multiplier`.", "es": "Nombramos esta variable `Multiplier`.", - "pt": "Vamos nomear esta variável `Multiplier`." + "pt": "Vamos nomear esta variável `Multiplier`.", + "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multiplier`" } }, "placement": "bottom" @@ -257,7 +271,8 @@ "en": "Let's change its type to **Number**.", "fr": "Changeons son type en **Nombre**.", "es": "Cambiamos su tipo a **Número**.", - "pt": "Vamos mudar seu tipo para **Número**." + "pt": "Vamos mudar seu tipo para **Número**.", + "th": "เปลี่ยนประเภทเป็น **ตัวเลข**" } }, "placement": "bottom" @@ -275,7 +290,8 @@ "en": "And finally let's change its initial value to **1**.", "fr": "Et enfin, changeons sa valeur initiale en **1**.", "es": "Y finalmente, cambiemos su valor inicial a **1**.", - "pt": "E finalmente, vamos mudar seu valor inicial para **1**." + "pt": "E finalmente, vamos mudar seu valor inicial para **1**.", + "th": "และสุดท้าย เปลี่ยนค่าเริ่มต้นเป็น **1**" } }, "placement": "bottom" @@ -293,7 +309,8 @@ "en": "And we're done! Let's close this dialog.", "fr": "Et c'est tout ! Fermons cette boîte de dialogue.", "es": "¡Y listo! Cerramos esta ventana.", - "pt": "E acabamos! Vamos fechar esta janela." + "pt": "E acabamos! Vamos fechar esta janela.", + "th": "เสร็จแล้ว! ปิดหน้าต่างได้เลย" } } } @@ -309,7 +326,8 @@ "en": "Now let's make those multipliers active. Let's open the **Events Sheet** of the $(gameScene) scene.", "fr": "Maintenant, rendons ces multiplicateurs actifs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", "es": "Ahora hagamos que esos multiplicadores estén activos. Abramos la **Hoja de eventos** de la escena $(gameScene).", - "pt": "Agora vamos deixar esses multiplicadores ativos. Vamos abrir a **Folha de eventos** da cena $(gameScene)." + "pt": "Agora vamos deixar esses multiplicadores ativos. Vamos abrir a **Folha de eventos** da cena $(gameScene).", + "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)" } }, "placement": "bottom" @@ -327,7 +345,8 @@ "en": "First we will make $(multiplier) disappear when $(ball) hits one. An event is ready for you, let's **add a condition** to it.", "fr": "Tout d'abord, nous ferons disparaître $(multiplier) quand $(ball) touche un. Un événement est prêt pour vous, ajoutons-y une **condition**.", "es": "Primero haremos que $(multiplier) desaparezca cuando $(ball) golpee uno. Un evento está listo para usted, agreguemosle una **condición**.", - "pt": "Primeiro vamos fazer com que $(multiplier) desapareça quando $(ball) bater em um. Um evento está pronto para você, vamos **adicionar uma condição** a ele." + "pt": "Primeiro vamos fazer com que $(multiplier) desapareça quando $(ball) bater em um. Um evento está pronto para você, vamos **adicionar uma condição** a ele.", + "th": "ขั้นแรก เราจะทำให้ $(multiplier) หายไป เมื่อถูก $(ball) ชนครั้งหนึ่ง อีเวนท์พร้อมแล้ว ให้ **เพิ่มเงื่อนไข** ลงไป" } } } @@ -343,7 +362,8 @@ "en": "Select **$(ball)**.", "fr": "Sélectionnez **$(ball)**.", "es": "Seleccione **$(ball)**.", - "pt": "Selecione **$(ball)**." + "pt": "Selecione **$(ball)**.", + "th": "เลือก **$(ball)**" } } }, @@ -360,7 +380,8 @@ "en": "Select the **Collision** condition.", "fr": "Sélectionnez la condition **Collision**.", "es": "Seleccione la condición **Colisión**.", - "pt": "Selecione a condição **Colisão**." + "pt": "Selecione a condição **Colisão**.", + "th": "เลือกเงื่อนไข **การชนกัน**" } } }, @@ -377,7 +398,8 @@ "en": "And select our **$(multiplier)**.", "fr": "Et sélectionnez notre **$(multiplier)**.", "es": "Y seleccione nuestro **$(multiplier)**.", - "pt": "E selecione nosso **$(multiplier)**." + "pt": "E selecione nosso **$(multiplier)**.", + "th": "เลือก **$(multiplier)**" } }, "placement": "top" @@ -395,7 +417,8 @@ "en": "Alright, our **condition** is ready and will be **true** when the **$(ball) touches the $(multiplier)**.", "fr": "Bien, notre **condition** est prête et sera **vraie** quand **$(ball) touche le $(multiplier)**.", "es": "Bien, nuestra **condición** está lista y será **verdadera** cuando el **$(ball) golpee el $(multiplier)**.", - "pt": "Bem, nossa **condição** está pronta e será **verdadeira** quando o **$(ball) bater no $(multiplier)**." + "pt": "Bem, nossa **condição** está pronta e será **verdadeira** quando o **$(ball) bater no $(multiplier)**.", + "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**" } }, "placement": "top" @@ -412,7 +435,8 @@ "en": "Let's make our multiplier disappear with an **action** now.", "fr": "Faisons disparaître notre multiplicateur avec une **action** maintenant.", "es": "Hagamos que nuestro multiplicador desaparezca con una **acción** ahora.", - "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora." + "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora.", + "th": "ทำให้ multiplier หายไป โดยใช้ **การกระทำ**" } } } @@ -428,7 +452,8 @@ "en": "Select **$(multiplier)**.", "fr": "Sélectionnez **$(multiplier)**.", "es": "Seleccione **$(multiplier)**.", - "pt": "Selecione **$(multiplier)**." + "pt": "Selecione **$(multiplier)**.", + "th": "เลือก **$(multiplier)**" } } }, @@ -445,7 +470,8 @@ "en": "We will make **$(multiplier)** disappear on collision.", "fr": "Nous allons faire disparaître **$(multiplier)** en cas de collision.", "es": "Haremos que **$(multiplier)** desaparezca en caso de colisión.", - "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão." + "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão.", + "th": "เราจะทำให้ **$(multiplier)** หายไปเมื่อมีการชนกัน" } } }, @@ -462,7 +488,8 @@ "en": "It is important to note that only the $(multiplier) that match the condition will be deleted. This is called **Object picking**. Let's close this dialog.", "fr": "Il est important de noter que seul le $(multiplier) qui correspond à la condition sera supprimé. C'est ce qu'on appelle le **choix d'objet**. Fermons cette boîte de dialogue.", "es": "Es importante tener en cuenta que solo el $(multiplier) que coincida con la condición será eliminado. Esto se llama **elección de objeto**. Cerraremos esta ventana.", - "pt": "É importante notar que apenas o $(multiplier) que corresponder à condição será excluído. Isso é chamado de **escolha de objeto**. Vamos fechar esta janela." + "pt": "É importante notar que apenas o $(multiplier) que corresponder à condição será excluído. Isso é chamado de **escolha de objeto**. Vamos fechar esta janela.", + "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้" } }, "placement": "top" @@ -479,7 +506,8 @@ "en": "Now let's **play a sound** when it is collected!.", "fr": "Maintenant, **jouons un son** quand il est collecté !", "es": "¡Ahora, **reproducimos un sonido** cuando se recolecta!", - "pt": "Agora, **reproduzimos um som** quando é coletado!" + "pt": "Agora, **reproduzimos um som** quando é coletado!", + "th": "ทีนี้มาเพิ่มการ **เล่นเสียง** เมื่อมีการเก็บ!" } } } @@ -495,7 +523,8 @@ "en": "Search for **sound**.", "fr": "Recherchez **son**.", "es": "Busque **sonido**.", - "pt": "Procure **som**." + "pt": "Procure **som**.", + "th": "ค้นหา **sound**" } } }, @@ -512,7 +541,8 @@ "en": "Select the **Play a sound** action.", "fr": "Sélectionnez l'action **Jouer un son**.", "es": "Seleccione la acción **Reproducir un sonido**.", - "pt": "Selecione a ação **Reproduzir um som**." + "pt": "Selecione a ação **Reproduzir um som**.", + "th": "เลือกการกระทำ **เล่นเสียง**" } } }, @@ -529,7 +559,8 @@ "en": "Click on the field to see the options, and select **ClickerBeep2.wav**.", "fr": "Cliquez sur le champ pour voir les options, et sélectionnez **ClickerBeep2.wav**.", "es": "Haga clic en el campo para ver las opciones y seleccione **ClickerBeep2.wav**.", - "pt": "Clique no campo para ver as opções e selecione **ClickerBeep2.wav**." + "pt": "Clique no campo para ver as opções e selecione **ClickerBeep2.wav**.", + "th": "คลิกที่ field เพื่อดูตัวเลือก แล้วเลือก **ClickerBeep2.wav**" } }, "placement": "top" @@ -547,7 +578,8 @@ "en": "Alright, now the sound will play when the $(ball) collects a $(multiplier)!", "fr": "Bien, maintenant le son sera joué quand $(ball) collecte un $(multiplier) !", "es": "¡Bien, ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", - "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!" + "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!", + "th": "เอาล่ะ ทีนี้เสียงก็จะเล่นเมื่อ $(ball) เก็บ $(multiplier) แล้ว!" } }, "placement": "top" @@ -564,7 +596,8 @@ "en": "Let's **update our variable** accordingly.", "fr": "Mettons à jour notre **variable** en conséquence.", "es": "Actualicemos nuestra **variable** en consecuencia.", - "pt": "Atualizemos nossa **variável** em conformidade." + "pt": "Atualizemos nossa **variável** em conformidade.", + "th": "ทำการ **อัพเดทตัวแปร**" } } } @@ -580,7 +613,8 @@ "en": "Search for **scene variable**.", "fr": "Recherchez **variable de scène**.", "es": "Busque **variable de escena**.", - "pt": "Procure **variável de cena**." + "pt": "Procure **variável de cena**.", + "th": "ค้นหา **ตัวแปรของ scene" } } }, @@ -597,7 +631,8 @@ "en": "Our multiplier is a number, so let's select **Change number variable** action.", "fr": "Notre multiplicateur est un nombre, donc sélectionnons l'action **Modifier une variable numérique**.", "es": "Nuestro multiplicador es un número, por lo que seleccionemos la acción **Cambiar variable numérica**.", - "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**." + "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**.", + "th": "multiplier ของเราเป็นตัวเลข ดังนั้นเลือกการกระทำ **เปลี่ยนตัวเลขตัวแปร**" } } }, @@ -614,7 +649,8 @@ "en": "Select the variable we created earlier, **Multiplier**.", "fr": "Sélectionnez la variable que nous avons créée précédemment, **Multiplier**.", "es": "Seleccione la variable que creamos anteriormente, **Multiplier**.", - "pt": "Selecione a variável que criamos anteriormente, **Multiplier**." + "pt": "Selecione a variável que criamos anteriormente, **Multiplier**.", + "th": "เลือกตัวแปรที่เราสร้าง **Multiplier**" } }, "placement": "top" @@ -632,7 +668,8 @@ "en": "We want to increase the multiplier, so let's select **+ (add)**.", "fr": "Nous voulons augmenter le multiplicateur, donc sélectionnons **+ (ajouter)**.", "es": "Queremos aumentar el multiplicador, así que seleccionemos **+ (agregar)**.", - "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**." + "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**.", + "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**" } }, "placement": "left" @@ -650,7 +687,8 @@ "en": "Let's enter **1**.", "fr": "Entrez **1**.", "es": "Ingrese **1**.", - "pt": "Digite **1**." + "pt": "Digite **1**.", + "th": "ใส่ **1**" } }, "placement": "left" @@ -668,7 +706,8 @@ "en": "Alright, now our scene variable **Multiplier** will **increase by 1** every time **$(ball) collects a $(multiplier)**.", "fr": "Bien, maintenant notre variable de scène **Multiplier** **augmentera de 1** à chaque fois que $(ball) collecte un $(multiplier).", "es": "¡Bien, ahora nuestra variable de escena **Multiplier** **aumentará en 1** cada vez que la $(ball) recolecte un $(multiplier)!", - "pt": "Ótimo, agora nossa variável de cena **Multiplier** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!" + "pt": "Ótimo, agora nossa variável de cena **Multiplier** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!", + "th": "เอาล่ะ ทีนี้ตัวแปร scene **Multiplier** ก็จะ **เพิ่มขึ้นทีละ 1** ทุกครั้งที่ **$(ball) เก็บ $(multiplier)**" } }, "placement": "top" @@ -685,7 +724,8 @@ "en": "Let's add some juice and **create particles** when the **$(multiplier)** is collected.", "fr": "Ajoutons un peu de piquant et **créons des particules** quand le **$(multiplier)** est collecté.", "es": "Agreguemos un poco de sabor y **creemos partículas** cuando el **$(multiplier)** es recolectado.", - "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado." + "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado.", + "th": "เพิ่มความน่าตื่นเต้นโดย **สร้าง particles** เมื่อ **$(multiplier)** ถูกเก็บ" } } } @@ -701,7 +741,8 @@ "en": "Search for **Create**.", "fr": "Recherchez **Créer**.", "es": "Busque **Crear**.", - "pt": "Procure por **Criar**." + "pt": "Procure por **Criar**.", + "th": "ค้นหา **สร้าง**" } } }, @@ -718,7 +759,8 @@ "en": "We will **create some particles** we've prepared for you, pick the **Create an object** action.", "fr": "Nous allons **créer des particules** que nous avons préparées pour vous, choisissez l'action **Créer un objet**.", "es": "Vamos a **crear algunas partículas** que hemos preparado para usted, elija la acción **Crear un objeto**.", - "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**." + "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**.", + "th": "เราจะ **สร้าง some particles** เราเตรียมเอาไว้ให้คุณแล้ว เลือกการกระทำ **สร้างวัตถุ**" } } }, @@ -735,7 +777,8 @@ "en": "Select the particles we've prepared, **$(particles)**.", "fr": "Sélectionnez les particules que nous avons préparées, **$(particles)**.", "es": "Seleccione las partículas que hemos preparado, **$(particles)**.", - "pt": "Selecione as partículas que preparamos, **$(particles)**." + "pt": "Selecione as partículas que preparamos, **$(particles)**.", + "th": "เลือก **$(particles)** ที่เตรียมไว้" } }, "placement": "top" @@ -753,7 +796,8 @@ "en": "Let's make it spawn where the multiplier was,\n\nenter `$(multiplier).X()`.", "fr": "Faisons en sorte qu'elles apparaissent là où le multiplicateur était,\n\nentrez `$(multiplier).X()`.", "es": "Hagamos que aparezcan donde estaba el multiplicador,\n\ningrese `$(multiplier).X()`.", - "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`." + "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`.", + "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`" } }, "placement": "left" @@ -771,7 +815,8 @@ "en": "And `$(multiplier).Y()`.", "fr": "Et `$(multiplier).Y()`.", "es": "Y `$(multiplier).Y()`.", - "pt": "E `$(multiplier).Y()`." + "pt": "E `$(multiplier).Y()`.", + "th": "และ `$(multiplier).Y()`" } }, "placement": "left" @@ -789,7 +834,8 @@ "en": "Nice! Our **$(particles)** will be **created** exactly where the **$(multiplier)** was, giving a nice effect!", "fr": "Bien! Nos **$(particles)** seront **créées** exactement là où se trouvait le **$(multiplier)**, ce qui donnera un bel effet !", "es": "¡Bien! Nuestras **$(particles)** serán **creadas** exactamente donde estaba el **$(multiplier)**, ¡lo que dará un buen efecto!", - "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!" + "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!", + "th": "ดีมาก! **$(particles)** ของเราจะ **ถูกสร้าง** ที่ตำแหน่งของ **$(multiplier)** เป็นเอฟเฟกต์ที่เพิ่มคุณภาพกราฟฟิกได้!" } }, "placement": "top" @@ -806,7 +852,8 @@ "en": "Finally, we need to ensure that the **$(scoreMultiplier)** we've placed on the scene gets updated accordingly!", "fr": "Enfin, nous devons nous assurer que le **$(scoreMultiplier)** que nous avons placé sur la scène est mis à jour en conséquence !", "es": "¡Finalmente, debemos asegurarnos de que el **$(scoreMultiplier)** que hemos colocado en la escena se actualice en consecuencia!", - "pt": "Finalmente, precisamos nos certificar de que o **$(scoreMultiplier)** que colocamos na cena seja atualizado de acordo!" + "pt": "Finalmente, precisamos nos certificar de que o **$(scoreMultiplier)** que colocamos na cena seja atualizado de acordo!", + "th": "ขั้นสุดท้าย เราต้องการที่จะแน่ใจว่า **$(scoreMultiplier)** ที่เราใส่ใน scene จะต้องอัพเดทอย่างสอดคล้อง!" } } } @@ -822,7 +869,8 @@ "en": "Search for **Modify**.", "fr": "Recherchez **Modifier**.", "es": "Busque **Modificar**.", - "pt": "Procure por **Modificar**." + "pt": "Procure por **Modificar**.", + "th": "ค้นหา **แก้ไข**" } } }, @@ -839,7 +887,8 @@ "en": "We will **Modify the text** that we placed on the screen earlier.", "fr": "Nous allons **Modifier le texte** que nous avons placé à l'écran plus tôt.", "es": "Vamos a **Modificar el texto** que colocamos en la pantalla anteriormente.", - "pt": "Vamos **Modificar o texto** que colocamos na tela anteriormente." + "pt": "Vamos **Modificar o texto** que colocamos na tela anteriormente.", + "th": "เราจะ **แก้ไขข้อความ** ที่เราวางไว้ใน scene ก่อนหน้านี้" } } }, @@ -854,7 +903,8 @@ "description": { "messageByLocale": { "en": "Select the text object **$(scoreMultiplier)**.", - "fr": "Sélectionnez l'objet texte **$(scoreMultiplier)**." + "fr": "Sélectionnez l'objet texte **$(scoreMultiplier)**.", + "th": "เลือกวัตถุข้อความ **$(scoreMultiplier)**" } }, "placement": "top" @@ -872,7 +922,8 @@ "en": "We want to update the text completely, so let's select **= (set to)**.", "fr": "Nous voulons mettre à jour le texte complètement, alors sélectionnons **= (définir à)**.", "es": "Queremos actualizar el texto por completo, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**." + "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**.", + "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**" } }, "placement": "left" @@ -890,7 +941,8 @@ "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so.\n\nEnter `\"x\"+VariableString(Multiplier)`.", "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela.\n\nEntrez `\"x\"+VariableString(Multiplier)`.", "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+VariableString(Multiplier)`.", - "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`." + "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`.", + "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`" } }, "placement": "left" @@ -908,7 +960,8 @@ "en": "Nice! our **$(scoreMultiplier)** will now be updated thanks to the **Multiplier variable** that we converted to a text!", "fr": "Bien ! notre **$(scoreMultiplier)** sera maintenant mis à jour grâce à la **variable Multiplier** que nous avons convertie en texte !", "es": "¡Bien! ¡nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", - "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!" + "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!", + "th": "ดีมาก! **$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ" } }, "placement": "top" @@ -925,7 +978,8 @@ "en": "Finally, we need to take our multiplier into account when calculating the score. Let's **fold the Score multiplier** group with the arrow on the left.", "fr": "Enfin, nous devons prendre en compte notre multiplicateur lors du calcul du score. Laissons **replier le groupe Multiplicateur de score** avec la flèche à gauche.", "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. Dejemos **replegar el grupo Multiplicador de puntuación** con la flecha a la izquierda.", - "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **recolher o grupo Multiplicador de pontuação** com a seta à esquerda." + "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **recolher o grupo Multiplicador de pontuação** com a seta à esquerda.", + "th": "ขั้นสุดท้าย เราจะต้องในการคำนวณคะแนนเราต้องคำนวณ multiplier ด้วย ให้ **รวบรวมตัวแปร คะแนน multiplier** เอาไว้เป็นกลุ่มโดยลูกศรที่อยู่ทางซ้าย" } }, "placement": "bottom" @@ -942,7 +996,8 @@ "en": "And let's **unfold the Hitting pegs** group with the arrow on the left.", "fr": "Et laissons **déplier le groupe Toucher des plots** avec la flèche à gauche.", "es": "Y dejemos **desplegar el grupo Tocando plots** con la flecha a la izquierda.", - "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda." + "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda.", + "th": "และ **ยกเลิกการรวมกลุ่มของเป๊กที่ถูกชน** โดยลูกศรที่อยู่ทางซ้าย" } }, "placement": "bottom" @@ -959,7 +1014,8 @@ "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **double-clicking on it**!", "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **double-cliquant dessus** !", "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **dando doble clic en ella**!", - "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!" + "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!", + "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!" } } } @@ -975,7 +1031,8 @@ "en": "We want to multiply the score added by the multiplier,\n\nlet's enter `1*Variable(Multiplier)`.", "fr": "Nous voulons multiplier le score ajouté par le multiplicateur,\n\nentrons `1*Variable(Multiplier)`.", "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Variable(Multiplier)`.", - "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`." + "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`.", + "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`" } }, "placement": "left" @@ -993,7 +1050,8 @@ "en": "This will make our score update according to the multiplier! Let's save.", "fr": "Cela fera en sorte que notre score se mette à jour en fonction du multiplicateur ! Enregistrons.", "es": "¡Esto hará que nuestra puntuación se actualice de acuerdo con el multiplicador! Guardemos.", - "pt": "Isso fará com que nossa pontuação seja atualizada de acordo com o multiplicador! Salve." + "pt": "Isso fará com que nossa pontuação seja atualizada de acordo com o multiplicador! Salve.", + "th": "ทีนี้คะแนนของเราจะอัพเดทได้อย่างสอดคล้องแล้ว! มาบันทึกกันเถอะ" } }, "placement": "top" @@ -1010,7 +1068,8 @@ "en": "This event here manages the logic when the player hits a bigger peg. Let's modify the score action by **double-clicking on it** again.", "fr": "Cet événement gère la logique lorsque le joueur touche un plot plus gros. Modifions l'action de score en **double-cliquant dessus** à nouveau.", "es": "Este evento gestiona la lógica cuando el jugador toca un plot más grande. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", - "pt": "Este evento gerencia a lógica quando o jogador toca um plot maior. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente." + "pt": "Este evento gerencia a lógica quando o jogador toca um plot maior. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", + "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง" } } } @@ -1026,7 +1085,8 @@ "en": "We want to do exactly the same, except that the score given is 2,\n\nenter `2 * Variable(Multiplier)`.", "fr": "Nous voulons faire exactement la même chose, sauf que le score donné est 2,\n\nentrons `2 * Variable(Multiplier)`.", "es": "Queremos hacer exactamente lo mismo, excepto que la puntuación dada es 2,\n\ningresamos `2 * Variable(Multiplier)`.", - "pt": "Queremos fazer exatamente a mesma coisa, exceto que a pontuação dada é 2,\n\ndigitar `2 * Variable(Multiplier)`." + "pt": "Queremos fazer exatamente a mesma coisa, exceto que a pontuação dada é 2,\n\ndigitar `2 * Variable(Multiplier)`.", + "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`" } }, "placement": "left" @@ -1044,7 +1104,8 @@ "en": "Now let's close this!.", "fr": "Maintenant, fermons ceci !", "es": "¡Ahora cerramos esto!", - "pt": "Agora vamos fechar isso!" + "pt": "Agora vamos fechar isso!", + "th": "ปิดหน้าต่างได้เลย!" } }, "placement": "top" @@ -1061,7 +1122,8 @@ "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**." + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" } }, "placement": "bottom" From a71629db7b2f6d90dce8a6586d6493b10c7872d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 14 Mar 2023 16:12:50 +0100 Subject: [PATCH 049/208] Add pt & es to healthbar (#19) --- tutorials/in-app/healthBar.json | 86 +++++++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 14 deletions(-) diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 6e39879..83ab562 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -10,11 +10,7 @@ "scene": "level" } }, - "availableLocales": [ - "en", - "fr", - "th" - ], + "availableLocales": ["en", "fr", "es", "pt", "th"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json", "initialProjectData": { "level": "Level", @@ -26,6 +22,8 @@ "messageByLocale": { "en": "# You've finished this lesson!", "fr": "# Vous avez terminé cette leçon !", + "es": "# ¡Has terminado esta lección!", + "pt": "# Você terminou esta lição!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" } }, @@ -33,6 +31,8 @@ "messageByLocale": { "en": "Well done, in this tutorial you've learned:", "fr": "Bien joué, voici ce que vous avez appris :", + "es": "¡Bien hecho! En este tutorial, has aprendido:", + "pt": "Bom trabalho, neste tutorial você aprendeu:", "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" } }, @@ -40,6 +40,8 @@ "messageByLocale": { "en": "- How to create a layer\n\n- How to add and use a prefab object", "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué", + "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab", + "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab", "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab" } }, @@ -47,6 +49,8 @@ "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" } } @@ -60,6 +64,8 @@ "messageByLocale": { "en": "Let's go!", "fr": "C'est parti !", + "es": "¡Vamos!", + "pt": "Vamos lá!", "th": "ไปกันเลย!" } } @@ -70,6 +76,8 @@ "messageByLocale": { "en": "This game is a simple platformer.\nYou can move the player with the arrow keys and jump with space.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue.", "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", + "es": "Este juego es un simple plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.\n\nCuando estés listo, haz clic en este botón para continuar.", + "pt": "Este jogo é um simples plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar.", "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ" } } @@ -86,6 +94,8 @@ "messageByLocale": { "en": "Let's add a health bar for the player to see how much of their health is left.", "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste.", + "es": "Agreguemos una barra de salud para que el jugador pueda ver cuánta salud le queda.", + "pt": "Vamos adicionar uma barra de saúde para que o jogador veja quanto de sua saúde resta.", "th": "เพิ่ม health bar ให้กับผู้เล่น เพื่อให้สามารถดูได้ว่าเหลือเลือดอยู่เท่าไร" } } @@ -100,8 +110,10 @@ "description": { "messageByLocale": { "en": "Let's choose a **prefab object** from the asset store", - "fr-FR": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", - "th-TH": "เลือก **วัตถุ prefab** จากร้านค้า asset" + "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", + "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", + "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", + "th": "เลือก **วัตถุ prefab** จากร้านค้า asset" } }, "placement": "bottom" @@ -118,8 +130,10 @@ "description": { "messageByLocale": { "en": "Let's go back to the store home page.", - "fr-FR": "Retournons à la page d'accueil du magasin.", - "th-TH": "กลับไปยังหน้าโฮมเพจของร้านค้า" + "fr": "Retournons à la page d'accueil du magasin.", + "es": "Volvamos a la página de inicio de la tienda.", + "pt": "Vamos voltar para a página inicial da loja.", + "th": "กลับไปยังหน้าโฮมเพจของร้านค้า" } }, "placement": "bottom" @@ -138,6 +152,8 @@ "messageByLocale": { "en": "We will use a prefab object. It's an object that comes with specific actions and conditions to simplify its use.", "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", + "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" } } @@ -154,6 +170,8 @@ "messageByLocale": { "en": "We will use a resource bar that can be filled or emptied.", "fr": "Nous allons utiliser une barre de ressource. Elle peut être remplie ou vidée.", + "es": "Vamos a usar una barra de recursos que se puede llenar o vaciar.", + "pt": "Vamos usar uma barra de recursos que pode ser preenchida ou esvaziada.", "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้" } } @@ -170,6 +188,8 @@ "messageByLocale": { "en": "Let's choose the hearts bar.", "fr": "Choisissons la barre de coeurs.", + "es": "Elegimos la barra de corazones.", + "pt": "Vamos escolher a barra de corações.", "th": "มาเลือก hearts bar กัน" } } @@ -188,6 +208,8 @@ "messageByLocale": { "en": "Let's add it to the scene.", "fr": "Ajoutons la à la scène.", + "es": "Agreguemosla a la escena.", + "pt": "Vamos adicioná-la à cena.", "th": "เพิ่มลงไปใน scene" } }, @@ -204,6 +226,8 @@ "messageByLocale": { "en": "Let's close the asset store.", "fr": "Fermons le magasin de ressources", + "es": "Cerramos la tienda de recursos.", + "pt": "Vamos fechar a loja de recursos.", "th": "ปิดร้านค้า asset" } }, @@ -220,9 +244,9 @@ "messageByLocale": { "en": "Open the **Layers** panel.", "fr": "Ouvrez le panneau des **calques**.", - "th": "เปิดแผงควบคุม **เลเยอร์**", "es": "Abre el panel de **Capas**.", - "pt": "Abra o painel de **Camadas**." + "pt": "Abra o painel de **Camadas**.", + "th": "เปิดแผงควบคุม **เลเยอร์**" } }, "placement": "bottom" @@ -239,6 +263,8 @@ "messageByLocale": { "en": "We will create a layer that will holds the User Interface (UI) elements.", "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU).", + "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", + "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ" } }, @@ -255,6 +281,8 @@ "messageByLocale": { "en": "Change the name to **Interface**.", "fr": "Changeons son nom en **Interface**.", + "es": "Cambiamos su nombre a **Interface**.", + "pt": "Mudamos o nome para **Interface**.", "th": "เปลี่ยนชื่อเป็น **Interface**" } }, @@ -271,6 +299,8 @@ "messageByLocale": { "en": "Let's select this layer as the **default layer** to add objects to.", "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets.", + "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", + "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" } }, @@ -286,8 +316,10 @@ "description": { "messageByLocale": { "en": "Drag the **$(resourceBar)** on the scene.", - "fr-FR": "Faites glisser **$(resourceBar)** du menu à la scène.", - "th-TH": "ลาก **$(resourceBar)** ใส่ลงใน scene" + "fr": "Faites glisser **$(resourceBar)** du menu à la scène.", + "es": "Arrastra **$(resourceBar)** desde el menú a la escena.", + "pt": "Arraste **$(resourceBar)** do menu para a cena.", + "th": "ลาก **$(resourceBar)** ใส่ลงใน scene" } } } @@ -308,6 +340,8 @@ "messageByLocale": { "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nPlace $(resourceBar) so that it's in the top left corner of the rectangle.\n\nWhen you're done, click below.", "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.\n\nCuando hayas terminado, haz clic abajo.", + "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.\n\nQuando você terminar, clique abaixo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" } }, @@ -327,6 +361,8 @@ "messageByLocale": { "en": "Now let's plug the health of the **$(player)** with **$(resourceBar)**! Let's **open the Events Sheet** of the $(level) scene.", "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Ouvrons la **feuille d'événements** de la scène $(level).", + "es": "Ahora, conectemos la vida del **$(player)** con **$(resourceBar)**! Abramos la **hoja de eventos** de la escena $(level).", + "pt": "Agora, vamos conectar a vida do **$(player)** com **$(resourceBar)**! Vamos **abrir a Folha de Eventos** da cena $(level).", "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)" } }, @@ -344,6 +380,8 @@ "messageByLocale": { "en": "Let's **add an action** to change the filling value of $(resourceBar).", "fr": "**Ajoutons une action** pour changer la valeur de remplissage de $(resourceBar).", + "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", + "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)" } } @@ -359,6 +397,8 @@ "messageByLocale": { "en": "Select **$(resourceBar)**.", "fr": "Sélectionnez **$(resourceBar)**.", + "es": "Seleccione **$(resourceBar)**.", + "pt": "Selecione **$(resourceBar)**.", "th": "เลือก **$(resourceBar)**" } } @@ -375,6 +415,8 @@ "messageByLocale": { "en": "Select the action **Value**.", "fr": "Sélectionnez l'action **Value**.", + "es": "Seleccione la acción **Value**.", + "pt": "Selecione a ação **Value**.", "th": "เลือกการกระทำ **Value**" } } @@ -391,6 +433,8 @@ "messageByLocale": { "en": "We want the value of the bar to match the health of $(player), so let's select **= (set to)**.", "fr": "Nous voulons que la barre de vie représente la santé de $(player), donc sélectionnons **= (définir à)**.", + "es": "Queremos que el valor de la barra de vida coincida con la salud de $(player), así que seleccionemos **= (establecer en)**.", + "pt": "Queremos que o valor da barra de vida corresponda à saúde de $(player), então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**" } }, @@ -408,6 +452,8 @@ "messageByLocale": { "en": "Let's find where is stored the health of $(player).", "fr": "Trouvons où est stockée la santé de $(player).", + "es": "Encontremos dónde está almacenada la salud de $(player).", + "pt": "Vamos encontrar onde está armazenada a saúde de $(player).", "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน" } }, @@ -425,6 +471,8 @@ "messageByLocale": { "en": "$(player) is set up to use the **Health extension**. Search **Health**.", "fr": "$(player) utiliser l'**extension Health**. Cherchez **Health**.", + "es": "$(player) está configurado para usar la **extensión Health**. Busque **Health**.", + "pt": "$(player) está configurado para usar a **extensão Health**. Procure por **Health**.", "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**" } }, @@ -442,6 +490,8 @@ "messageByLocale": { "en": "Select **Health points**.", "fr": "Sélectionnez **Health points**.", + "es": "Seleccione **Health points**.", + "pt": "Selecione **Health points**.", "th": "เลือก **Health points**" } }, @@ -459,6 +509,8 @@ "messageByLocale": { "en": "Select **$(player)**.", "fr": "Sélectionnez **$(player)**.", + "es": "Seleccione **$(player)**.", + "pt": "Selecione **$(player)**.", "th": "เลือก **$(player)**" } }, @@ -476,6 +528,8 @@ "messageByLocale": { "en": "We're good.", "fr": "On est bon.", + "es": "Estamos bien.", + "pt": "Estamos bem.", "th": "เรียบร้อยแล้ว" } }, @@ -493,6 +547,8 @@ "messageByLocale": { "en": "Everything is all set.", "fr": "Tout est bien configuré.", + "es": "Todo está bien configurado.", + "pt": "Tudo está configurado.", "th": "ทุกอย่างเรียบร้อยแล้ว" } }, @@ -509,6 +565,8 @@ "messageByLocale": { "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" } }, @@ -516,4 +574,4 @@ } } ] -} \ No newline at end of file +} From 91292288ece3606910deb4c1f6c4ad4d8f331a3f Mon Sep 17 00:00:00 2001 From: LuniMoon <103995399+LuniMoon@users.noreply.github.com> Date: Tue, 14 Mar 2023 16:35:57 +0100 Subject: [PATCH 050/208] EN copy optimisations (#17) Copy optimisations on some instructions: - Improving English micro typos - Simplifying some notions like "default layer", "camera view", and "prefas" with copy writing --- tutorials/in-app/healthBar.json | 44 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 83ab562..0efd49e 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -29,7 +29,7 @@ }, { "messageByLocale": { - "en": "Well done, in this tutorial you've learned:", + "en": "Well done, in this tutorial you've learned how to:", "fr": "Bien joué, voici ce que vous avez appris :", "es": "¡Bien hecho! En este tutorial, has aprendido:", "pt": "Bom trabalho, neste tutorial você aprendeu:", @@ -38,7 +38,7 @@ }, { "messageByLocale": { - "en": "- How to create a layer\n\n- How to add and use a prefab object", + "en": "- Create a layer\n\n- Add and use a prefab object", "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué", "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab", "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab", @@ -74,10 +74,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game is a simple platformer.\nYou can move the player with the arrow keys and jump with space.\n\n**Test it out** with the **preview** button.\n\nWhen you're ready, click on this button to continue.", - "fr": "Ce jeu est un simple jeu de plateforme.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\n**Testez-le** avec le bouton **Aperçu**.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", - "es": "Este juego es un simple plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.\n\nCuando estés listo, haz clic en este botón para continuar.", - "pt": "Este jogo é um simples plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar.", + "en": "This game is a Platformer. Click on the **preview** button to play.\nYou can move the player with the arrow keys, and jump with space.\n\nOnce you're done, click on this button to continue.", + "fr": "Ce jeu est un jeu de plateforme. Cliquez sur le bouton **Aperçu** pour y jouer.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", + "es": "Este juego es un plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.\n\nCuando estés listo, haz clic en este botón para continuar.", + "pt": "Este jogo é um plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar.", "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ" } } @@ -92,7 +92,7 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Let's add a health bar for the player to see how much of their health is left.", + "en": "Let's show players how much health they have left with a health bar.", "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste.", "es": "Agreguemos una barra de salud para que el jugador pueda ver cuánta salud le queda.", "pt": "Vamos adicionar uma barra de saúde para que o jogador veja quanto de sua saúde resta.", @@ -150,7 +150,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will use a prefab object. It's an object that comes with specific actions and conditions to simplify its use.", + "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", @@ -261,7 +261,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We will create a layer that will holds the User Interface (UI) elements.", + "en": "We will create a layer for the User Interface (UI) elements.", "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU).", "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", @@ -297,8 +297,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's select this layer as the **default layer** to add objects to.", - "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets.", + "en": "Select this **layer** so we can place our hearts inside of it.", + "fr": "Sélectionnons ce **calque** pour y placer $(resourceBar).", "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" @@ -315,7 +315,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Drag the **$(resourceBar)** on the scene.", + "en": "Drag the **$(resourceBar)** to the scene.", "fr": "Faites glisser **$(resourceBar)** du menu à la scène.", "es": "Arrastra **$(resourceBar)** desde el menú a la escena.", "pt": "Arraste **$(resourceBar)** do menu para a cena.", @@ -338,8 +338,8 @@ "standalone": true, "description": { "messageByLocale": { - "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nPlace $(resourceBar) so that it's in the top left corner of the rectangle.\n\nWhen you're done, click below.", - "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nPlace the $(resourceBar) on the top left corner of the **camera view**.\n\nWhen you're done, click on the button below.", + "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez sur le bouton ci-dessous.", "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.\n\nCuando hayas terminado, haz clic abajo.", "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.\n\nQuando você terminar, clique abaixo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" @@ -359,8 +359,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's plug the health of the **$(player)** with **$(resourceBar)**! Let's **open the Events Sheet** of the $(level) scene.", - "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Ouvrons la **feuille d'événements** de la scène $(level).", + "en": "Now we'll link the health of the **$(player)** to **$(resourceBar)**! Click on the tab Events to go to the **Events Sheet** of your $(level) scene.", + "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Cliquez sur l'onglet Évènements de la scène $(level) pour accéder à la **feuille d'événements**.", "es": "Ahora, conectemos la vida del **$(player)** con **$(resourceBar)**! Abramos la **hoja de eventos** de la escena $(level).", "pt": "Agora, vamos conectar a vida do **$(player)** com **$(resourceBar)**! Vamos **abrir a Folha de Eventos** da cena $(level).", "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)" @@ -378,8 +378,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's **add an action** to change the filling value of $(resourceBar).", - "fr": "**Ajoutons une action** pour changer la valeur de remplissage de $(resourceBar).", + "en": "Let's **add an action** to define the number of lifes that will be displayed on $(resourceBar).", + "fr": "**Ajoutons une action** pour changer le nombre de vies affichées par $(resourceBar).", "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)" @@ -450,7 +450,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's find where is stored the health of $(player).", + "en": "Now, let's use the value where the health of $(player) is saved.", "fr": "Trouvons où est stockée la santé de $(player).", "es": "Encontremos dónde está almacenada la salud de $(player).", "pt": "Vamos encontrar onde está armazenada a saúde de $(player).", @@ -469,8 +469,8 @@ "tooltip": { "description": { "messageByLocale": { - "en": "$(player) is set up to use the **Health extension**. Search **Health**.", - "fr": "$(player) utiliser l'**extension Health**. Cherchez **Health**.", + "en": "A **Health extension** has been applied to $(player) to store its lives. Search **Health** to use that value.", + "fr": "L'**extension Health** (Santé) a été appliquée à $(player) pour stocker son nombre de vies. Cherchez **Health** pour utiliser cette valeur.", "es": "$(player) está configurado para usar la **extensión Health**. Busque **Health**.", "pt": "$(player) está configurado para usar a **extensão Health**. Procure por **Health**.", "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**" @@ -574,4 +574,4 @@ } } ] -} +} \ No newline at end of file From ee207756dce170e0f9d75b80a7b3e9ccb6a9b397 Mon Sep 17 00:00:00 2001 From: LuniMoon <103995399+LuniMoon@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:01:46 +0100 Subject: [PATCH 051/208] EN copy optimisations (#18) Improving concepts with copy writing: - Layers - Selecting and dragging objects --- tutorials/in-app/cameraParallax.json | 74 ++++++++++++++-------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 725ef5e..acb9e4a 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -70,7 +70,7 @@ "messageByLocale": { "en": "Let's improve this platformer game by following the character with the camera!", "fr": "Améliorons ce jeu de plateforme en suivant le personnage avec la caméra !", - "es": "¡Mejoremos este juego de plataformas siguiendo al personaje con la cámara!", + "es": "¡Mejoremos este juego de plataforma siguiendo al personaje con la cámara!", "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!", "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ!" } @@ -206,10 +206,10 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Now let's add it to our player.\n\nRight click on **$(player)** or use the 3-dots menu and select **Edit behaviors**.", + "en": "Let's attach the Camera to our player with the help of **behaviors*:\n\nclick on the 3 dot menu, or right click on **$(player)**, and select **Edit behaviors**.", "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nCliquez droit sur **$(player)** ou utilisez le menu à 3 points et sélectionnez **Modifier les comportements**.", - "es": "Añadamos ahora la extensión a nuestro jugador.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", - "pt": "Agora vamos adicioná-lo ao nosso jogador.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", + "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", + "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**" } } @@ -243,7 +243,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add the **Smooth Camera** behavior we just installed.", + "en": "Let's add the **Smooth Camera** behavior that we've just installed.", "fr": "Ajoutons le comportement **Smooth Camera** que nous venons d'installer.", "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar.", @@ -279,10 +279,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make it only follow the X axis (Horizontal) by **unchecking** this checkbox.", - "fr": "Faisons en sorte qu'il ne suive que l'axe X (Horizontal) en **désélectionnant** cette case.", - "es": "Hagamos que solo siga el eje X (Horizontal) **desmarcando** esta casilla.", - "pt": "Vamos fazer com que ele siga apenas o eixo X (Horizontal) **desmarcando** esta caixa.", + "en": "**Uncheck** the Y axis (vertical) checkbox, to make the camera follow the character only horizontally (X axis).", + "fr": "**Décochez** la case de l'axe Y (vertical), pour que la caméra suive le personnage uniquement horizontalement (axe X).", + "es": "**Desactiva** la casilla del eje Y (vertical) para que la cámara siga el personaje solamente de manera horizontal (eje X).", + "pt": "Desmarque** a caixa do eixo Y (vertical), para que a câmera siga o personagem apenas na horizontal (eixo X).", "th": "ทำให้กล้องติดตามเฉพาะแกน X (แนวนอน) เท่านั้น โดย **เอาเครื่องหมายเช็คออก** จาก checkbox นี้" } } @@ -297,10 +297,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "That's it! The camera will **follow our player horizontally**!", + "en": "That's it! Now the camera will **follow our player only horizontally**!", "fr": "C'est tout ! La caméra va **suivre notre joueur horizontalement** !", - "es": "¡Eso es todo! ¡La cámara **seguirá a nuestro jugador horizontalmente**!", - "pt": "É isso aí! A câmera **seguirá nosso jogador horizontalmente**!", + "es": "¡Eso es todo! ¡Ahora la cámara **seguirá a nuestro jugador unicamente de manera horizontal**!", + "pt": "É isso aí! Agora a câmera **seguirá nosso jogador unicamente de jeito horizontal**!", "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!" } } @@ -351,10 +351,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Change the name to **Background**.", - "fr": "Changeons son nom en **Background**.", - "es": "Cambiar el nombre a **Background**.", - "pt": "Mude o nome para **Background**.", + "en": "Change the name of the layer to **Background**.", + "fr": "Changez le nom du calque pour **Background**.", + "es": "Cambia el nombre de la capa por **Background**.", + "pt": "Mude o nome da camada para **Background**.", "th": "เปลี่ยนชื่อเป็น **Background**" } }, @@ -369,10 +369,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's select this layer as the **default layer** to add objects to.", - "fr": "Sélectionnons ce calque comme **calque par défaut** pour ajouter des objets.", - "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", - "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", + "en": "Now select this Background **layer** so we can start adding objects to it.", + "fr": "Sélectionnez maintenant le **calque** Background afin que nous puissions commencer à y ajouter des objets.", + "es": "Ahora selecciona la **capa** Background para que podamos empezar a agregarle objetos.", + "pt": "Agora selecione a **camada** Background para que possamos começar a adicionar objetos a ela.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" } }, @@ -387,10 +387,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's **move** this layer **below the Base Layer**, so that the background elements will appear behind the player.\n\n**Drag the handle below**", - "fr": "Maintenant, **déplaçons** ce calque **en dessous du calque de base**, de sorte que les éléments de fond apparaissent derrière le joueur.\n\n**Glissez le curseur en dessous**", - "es": "Ahora, **mueva** esta capa **debajo de la capa base**, para que los elementos de fondo aparezcan detrás del jugador.\n\n**Arrastre el control hacia abajo**", - "pt": "Agora, **mova** esta camada **abaixo da camada base**, para que os elementos de fundo apareçam atrás do jogador.\n\n**Arraste o controle para baixo**", + "en": "Now let's make sure the background decoration will appear behind the player. **Drag** this Background layer **under** Base Layer. \n\nUse this handle to **drag it**", + "fr": "Assurons-nous maintenant que l'arrière-plan apparaîtra derrière le personnage. **Faites glisser** ce calque d'arrière-plan **sous** Couche de base.\n\n**Glissez le curseur en dessous**", + "es": "Ahora asegurémonos de que la decoración de fondo aparezca detrás del player. **Arrastra** esta capa Background **debajo** de la Base Layer. \n\nUsa este controlador para **arrastrarlo**", + "pt": "Agora vamos garantir que a decoração de fundo apareça atrás do player. **Arraste** esta camada Background **em baixo** da Base Layer. \n\nUse esta alça para **arrastá-lo**", "th": "ทีนี้ **ย้าย** เลเยอร์นี้ไป **ใต้เลเยอร์หลัก** เพื่อให้องค์ประกอบในพื้นหลังปรากฏอยู่ข้างหลังผู้เล่น\n\n**ลากตัวควบคุมลง**" } }, @@ -431,10 +431,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "See the **black rectangle** in the middle of the scene? This is the **camera view**. It's the point of view from which the player will see the game.\n\nLet's resize the **$(farBackground)** object so that it covers the whole black rectangle\n\nWhen you're done, click below.", - "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nRedimensionnons maintenant l'objet **$(farBackground)** de sorte qu'il couvre tout le rectangle noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", - "es": "¿Ves el **rectángulo negro** en medio del escenario? Es la vista de la cámara. Este es el punto de vista desde el que el jugador verá el juego.\n\nAhora vamos a redimensionar el objeto **$(farBackground)** para que cubra todo el rectángulo negro.\n\nCuando hayas terminado, haz clic abajo.", - "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo.", + "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nResize the **$(farBackground)** object so it covers the whole camera view\n\nWhen you're done, click below.", + "fr": "Vous voyez le **cadre rectangulaire noir** au milieu de la scène ? C'est la **vue de la caméra**. Il encadre la partie du jeu que le joueur verra.\n\nRedimensionnez l'objet **$(farBackground)** afin qu'il couvre toute la vue de la caméra\n\nQuand vous aurez terminé, cliquez ci-dessous.", + "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.\n\nCuando hayas terminado, haz clic abajo.", + "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" } }, @@ -499,10 +499,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of the $(cameraScene) scene.", + "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of your scene $(cameraScene).", "fr": "Maintenant, faisons en sorte que ces **fonds se déplacent** ! Ouvrons la **feuille d'événements** de la scène $(cameraScene).", - "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de la escena $(cameraScene).", - "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** da cena $(cameraScene).", + "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de tu escena $(cameraScene).", + "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** de tua cena $(cameraScene).", "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)" } }, @@ -590,10 +590,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make the far background move way **slower** than the camera,\n\n Enter `CameraCenterX()/8`.", - "fr": "Faisons en sorte que le fond lointain se déplace beaucoup **plus lentement** que la caméra,\n\n Entrez `CameraCenterX()/8`.", - "es": "Hagamos que el fondo lejano se mueva mucho **más lentamente** que la cámara,\n\n Ingrese `CameraCenterX()/8`.", - "pt": "Vamos fazer com que o plano de fundo distante se mova muito **mais devagar** que a câmera,\n\n Digite `CameraCenterX()/8`.", + "en": "Let's make the far background move way **slower** than the camera,\n\n Type the formula `CameraCenterX()/8`.", + "fr": "Faisons en sorte que le fond le plus an arrière se déplace beaucoup **plus lentement** que la caméra,\n\n Entrez la formule `CameraCenterX()/8`.", + "es": "Hagamos que el fondo lejano se mueva mucho **más lento** que la cámara,\n\n Escribe la fórmula `CameraCenterX()/8`.", + "pt": "Vamos fazer com que o plano de fundo distante se mova muito **mais devagar** que a câmera,\n\n Digite a formula `CameraCenterX()/8`.", "th": "ทำให้พื้นหลังเคลื่อนที่ **ช้ากว่า** กล้อง\n\n ใส่ `CameraCenterX()/8`" } }, @@ -646,7 +646,7 @@ "messageByLocale": { "en": "Select **$(midBackground)**.", "fr": "Sélectionnez **$(midBackground)**.", - "es": "Seleccione **$(midBackground)**.", + "es": "Selecciona **$(midBackground)**.", "pt": "Selecione **$(midBackground)**.", "th": "เลือก **$(midBackground)**" } @@ -664,7 +664,7 @@ "messageByLocale": { "en": "Select the action **Image X offset**.", "fr": "Sélectionnez l'action **Décalage X de l'image**.", - "es": "Seleccione la acción **Desplazamiento X de la imagen**.", + "es": "Selecciona la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**" } From e7379f28d05e3ef8231bf7fcd03e3c6b751c3d91 Mon Sep 17 00:00:00 2001 From: LuniMoon <103995399+LuniMoon@users.noreply.github.com> Date: Wed, 15 Mar 2023 14:45:11 +0100 Subject: [PATCH 052/208] UX Copy suggestions for Plinko game (#20) Clarifying notions with the help of copy writing. Reworked translations in FR, ES and PT to match accordingly. A revision might be needed for other languages. --- tutorials/in-app/plinkoMultiplier.json | 88 +++++++++++++------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index da5cf48..50ececb 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -110,10 +110,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This game is called Plinko! You let a ball fall inside a maze and gather points depending on how many pegs you hit. Click on the **Preview** button to test it out.", - "fr": "Ce jeu s'appelle Plinko ! Vous laissez une balle tomber dans un labyrinthe et gagnez des points en fonction du nombre de plots que vous touchez. Cliquez sur le bouton **Aperçu** pour le tester.", - "es": "¡Este juego se llama Plinko! Deja caer una bola en un laberinto y gana puntos dependiendo de cuántos clavos golpees. Haz clic en el botón **Vista previa** para probarlo.", - "pt": "Este jogo se chama Plinko! Você deixa uma bola cair em um labirinto e ganha pontos dependendo de quantos pinos você acerta. Clique no botão **Visualizar** para testá-lo.", + "en": "This game is called Plinko! Click on the **Preview** button to test it out and gather points depending on how many pegs you hit.", + "fr": "Ce jeu s'appelle Plinko! Cliquez sur le bouton **Aperçu** pour le tester et accumuler des points en fonction du nombre de piquets que vous frappez.", + "es": "¡Este juego se llama Plinko!Haz clic en el botón **Vista previa** para probarlo y gana puntos dependiendo de cuántos clavos golpees.", + "pt": "Este jogo se chama Plinko! Clique no botão **Visualizar** para testá-lo e ganhe pontos dependendo de quantos pinos você acerta.", "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม" } }, @@ -129,10 +129,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's add a few **$(multiplier)** to spice up the game! Drag 3 from the menu to the canvas and place them so they can be collected by the ball through the maze.", - "fr": "Ajoutons quelques **$(multiplier)** pour pimenter le jeu ! Faites glisser 3 depuis le menu sur le canvas et placez-les de sorte qu'ils puissent être collectés par la balle à travers le labyrinthe.", - "es": "¡Agreguemos algunos **$(multiplier)** para darle un poco de sabor al juego! Arrastra 3 desde el menú al lienzo y colócalos de manera que puedan ser recogidos por la bola a través del laberinto.", - "pt": "Vamos adicionar alguns **$(multiplier)** para dar um pouco de sabor ao jogo! Arraste 3 do menu para a tela e coloque-os de modo que possam ser coletados pela bola através do labirinto.", + "en": "Drag 3 **$(multiplier)** objects to the canvas and place them where they can be hit by the ball.", + "fr": "Faites glisser 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", + "es": "¡Arrastra 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", + "pt": "Arraste 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต" } }, @@ -147,10 +147,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Once you're done, let's position a **$(scoreMultiplier)** to display the current multiplier score. Let's place it just below the score!", - "fr": "Une fois que vous avez terminé, positionnons un **$(scoreMultiplier)** pour afficher le multiplicateur de score actuel. Plaçons-le juste en dessous du score !", - "es": "Una vez que hayas terminado, coloquemos un **$(scoreMultiplier)** para mostrar la puntuación actual del multiplicador. ¡Colóquelo justo debajo de la puntuación!", - "pt": "Uma vez que você terminou, vamos posicionar um **$(scoreMultiplier)** para exibir a pontuação atual do multiplicador. Vamos colocá-lo logo abaixo da pontuação!", + "en": "Once you're done, place a **$(scoreMultiplier)** under *Score* to display the point multiplier!", + "fr": "Une fois que vous avez terminé, placez un **$(scoreMultiplier)** juste en dessous du *Score* pour afficher le multiplicateur de points !", + "es": "Una vez que hayas terminado, coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", + "pt": "Uma vez que você terminou, coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!" } }, @@ -166,10 +166,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We now need to store the score somewhere. Let's create a **scene variable**! Open the **Project Manager**", - "fr": "Nous devons maintenant stocker le score quelque part. Créons une **variable de scène** ! Ouvrez le **Project Manager**", - "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una **variable de escena**! Abre el **Project Manager**", - "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma **variável de cena**! Abra o **Project Manager**", + "en": "Now we'll store the game score: open the **Project Manager** and create a **scene variable**! ", + "fr": "Maintenant nous allons stocker le score quelque part: ouvrez le **Project Manager** et créons une **variable de scène** !", + "es": "Ahora vamos a guardar la puntuación en algún lugar: abre el **Project Manager** y crea una **variable de escena**!", + "pt": "Agora vamos armazenar a pontuação em algum lugar: abra o **Project Manager** et vamos criar uma **variável de cena**!", "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**" } }, @@ -212,10 +212,10 @@ "placement": "right", "description": { "messageByLocale": { - "en": "**Right click** on $(gameScene) or tap the **triple dot button** and select **Edit scene variables**.", - "fr": "Faites un **clic droit** sur $(gameScene) ou appuyez sur le **bouton à trois points** et sélectionnez **Modifier les variables de scène**.", - "es": "Haga **clic derecho** en $(gameScene) o toque el **botón de tres puntos** y seleccione **Editar variables de escena**.", - "pt": "Clique com o **botão direito** em $(gameScene) ou toque no **botão de três pontos** e selecione **Editar variáveis de cena**.", + "en": "**Right click** (or clck the *3 dot menu*) on $(gameScene) and select **Edit scene variables**.", + "fr": "Faites un **clic droit** (ou appuyez sur le *bouton à trois points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", + "es": "Haz **clic derecho** (o clic en el **botón de tres puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", + "pt": "Clique com o **botão direito** (ou toque no *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**" } } @@ -323,10 +323,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's make those multipliers active. Let's open the **Events Sheet** of the $(gameScene) scene.", - "fr": "Maintenant, rendons ces multiplicateurs actifs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", - "es": "Ahora hagamos que esos multiplicadores estén activos. Abramos la **Hoja de eventos** de la escena $(gameScene).", - "pt": "Agora vamos deixar esses multiplicadores ativos. Vamos abrir a **Folha de eventos** da cena $(gameScene).", + "en": "Now let's activate those multipliers. Open the **Events Sheet** of the $(gameScene) scene.", + "fr": "Maintenant, activons ces multiplicateurs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", + "es": "Ahora activemos esos multiplicadores. Abre la **Hoja de eventos** de la escena $(gameScene).", + "pt": "Agora vamos ativar esses multiplicadores. Vamos abra a **Folha de eventos** da cena $(gameScene).", "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)" } }, @@ -342,10 +342,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "First we will make $(multiplier) disappear when $(ball) hits one. An event is ready for you, let's **add a condition** to it.", - "fr": "Tout d'abord, nous ferons disparaître $(multiplier) quand $(ball) touche un. Un événement est prêt pour vous, ajoutons-y une **condition**.", - "es": "Primero haremos que $(multiplier) desaparezca cuando $(ball) golpee uno. Un evento está listo para usted, agreguemosle una **condición**.", - "pt": "Primeiro vamos fazer com que $(multiplier) desapareça quando $(ball) bater em um. Um evento está pronto para você, vamos **adicionar uma condição** a ele.", + "en": "We'll start by making the $(multiplier) disappear when it gets hitted by a $(ball). Click **add a condition** to begin.", + "fr": "Nous allons commencer par faire disparaître le $(multiplier) lorsqu'il est touché par une $(ball). Cliquez sur **ajouter une condition** pour commencer.", + "es": "Comenzaremos haciendo que el $(multiplier) desaparezca cuando sea golpeado por una $(ball). Haz clic en **agregar una condición** para empezar.", + "pt": "Começaremos fazendo o $(multiplier) desaparecer ao ser atingido por uma $(ball). Clique em **adicionar uma condição** para iniciar.", "th": "ขั้นแรก เราจะทำให้ $(multiplier) หายไป เมื่อถูก $(ball) ชนครั้งหนึ่ง อีเวนท์พร้อมแล้ว ให้ **เพิ่มเงื่อนไข** ลงไป" } } @@ -414,10 +414,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, our **condition** is ready and will be **true** when the **$(ball) touches the $(multiplier)**.", - "fr": "Bien, notre **condition** est prête et sera **vraie** quand **$(ball) touche le $(multiplier)**.", - "es": "Bien, nuestra **condición** está lista y será **verdadera** cuando el **$(ball) golpee el $(multiplier)**.", - "pt": "Bem, nossa **condição** está pronta e será **verdadeira** quando o **$(ball) bater no $(multiplier)**.", + "en": "Alright, our **condition** is ready. This **condition** will be **true** when the **$(ball) touches the $(multiplier)**.", + "fr": "Bien, notre **condition** est prête. Elle sera **vraie** quand **$(ball) touche le $(multiplier)**.", + "es": "Bien, nuestra **condición** está lista. Será **verdadera** cuando **$(ball) golpee el $(multiplier)**.", + "pt": "Bem, nossa **condição** está pronta. Ela será **verdadeira** quando **$(ball) bater no $(multiplier)**.", "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**" } }, @@ -485,10 +485,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "It is important to note that only the $(multiplier) that match the condition will be deleted. This is called **Object picking**. Let's close this dialog.", - "fr": "Il est important de noter que seul le $(multiplier) qui correspond à la condition sera supprimé. C'est ce qu'on appelle le **choix d'objet**. Fermons cette boîte de dialogue.", - "es": "Es importante tener en cuenta que solo el $(multiplier) que coincida con la condición será eliminado. Esto se llama **elección de objeto**. Cerraremos esta ventana.", - "pt": "É importante notar que apenas o $(multiplier) que corresponder à condição será excluído. Isso é chamado de **escolha de objeto**. Vamos fechar esta janela.", + "en": "It is important to note that only the $(multiplier) that is hitted by the $(ball) (matches our condition) will be deleted. This principle is called **Object picking**.\n\nLet's close this dialog.", + "fr": "Il est important de noter que seul le $(multiplier) qui est touché par la $(ball) (qui correspond à notre condition) sera supprimé. On appelle ce principe le **choix d'objet**.\n\nFermons cette boîte de dialogue.", + "es": "Es importante tomar en cuenta que solo el $(multiplier) que sea tocado por la $(ball) (coincida con nuestra condición) será eliminado. Este principio se llama **elección de objeto**.\n\nCerraremos esta ventana.", + "pt": "É importante notar que apenas o $(multiplier) que for atingido pela $(ball) (que corresponder à nossa condição) será excluído. Esse princípio é chamado de **escolha de objeto**.\n\nVamos fechar esta janela.", "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้" } }, @@ -1065,10 +1065,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This event here manages the logic when the player hits a bigger peg. Let's modify the score action by **double-clicking on it** again.", - "fr": "Cet événement gère la logique lorsque le joueur touche un plot plus gros. Modifions l'action de score en **double-cliquant dessus** à nouveau.", - "es": "Este evento gestiona la lógica cuando el jugador toca un plot más grande. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", - "pt": "Este evento gerencia a lógica quando o jogador toca um plot maior. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", + "en": "This event here manages the logic when the player hits a *bigger* peg. Let's modify the score action by **double-clicking on it** again.", + "fr": "Cet événement gère la logique lorsque le joueur touche un plot *plus gros*. Modifions l'action de score en **double-cliquant dessus** à nouveau.", + "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", + "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง" } } @@ -1082,10 +1082,10 @@ "tooltip": { "description": { "messageByLocale": { - "en": "We want to do exactly the same, except that the score given is 2,\n\nenter `2 * Variable(Multiplier)`.", - "fr": "Nous voulons faire exactement la même chose, sauf que le score donné est 2,\n\nentrons `2 * Variable(Multiplier)`.", - "es": "Queremos hacer exactamente lo mismo, excepto que la puntuación dada es 2,\n\ningresamos `2 * Variable(Multiplier)`.", - "pt": "Queremos fazer exatamente a mesma coisa, exceto que a pontuação dada é 2,\n\ndigitar `2 * Variable(Multiplier)`.", + "en": "Now we'll do exactly the same, except that the score given will be 2,\n\nenter `2 * Variable(Multiplier)`.", + "fr": "Nous allons faire exactement la même chose, sauf que le score donné sera 2,\n\nentrons `2 * Variable(Multiplier)`.", + "es": "Ahora vamos a hacer exactamente lo mismo, excepto que la puntuación dada sera 2,\n\ningresamos `2 * Variable(Multiplier)`.", + "pt": "Hora faremos exatamente a mesma coisa, exceto que a pontuação dada sera 2,\n\ndigitar `2 * Variable(Multiplier)`.", "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`" } }, From 3a3109d14358fc3c384a101ce4d5f579cbc64a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:12:18 +0100 Subject: [PATCH 053/208] Add new guided lesson Joystick --- __tests__/post-build.spec.js | 2 +- .../joystick/assets/Big Brown Meteor (1).png | Bin 0 -> 1804 bytes .../joystick/assets/Big Grey Meteor (1).png | Bin 0 -> 1786 bytes templates/joystick/assets/Crash.wav | Bin 0 -> 30914 bytes .../joystick/assets/Enemy_Spawn_Location.png | Bin 0 -> 99 bytes .../assets/Flat light joystick border.png | Bin 0 -> 1693 bytes .../assets/Flat light joystick thumb.png | Bin 0 -> 1044 bytes .../assets/Medium Brown Meteor (1).png | Bin 0 -> 982 bytes .../joystick/assets/Orange playerShip (3).png | Bin 0 -> 2725 bytes .../assets/Shaded dark joystick border.png | Bin 0 -> 3030 bytes .../assets/Shaded dark joystick thumb.png | Bin 0 -> 2989 bytes .../tiled_Starry Background Stars 2.png | Bin 0 -> 2188 bytes .../joystick/assets/tiled_black space.png | Bin 0 -> 2515 bytes templates/joystick/game.json | 1202 +++++++++++++++++ tutorials/in-app/cameraParallax.json | 22 +- tutorials/in-app/healthBar.json | 4 +- tutorials/in-app/joystick.json | 476 +++++++ 17 files changed, 1693 insertions(+), 13 deletions(-) create mode 100644 templates/joystick/assets/Big Brown Meteor (1).png create mode 100644 templates/joystick/assets/Big Grey Meteor (1).png create mode 100644 templates/joystick/assets/Crash.wav create mode 100644 templates/joystick/assets/Enemy_Spawn_Location.png create mode 100644 templates/joystick/assets/Flat light joystick border.png create mode 100644 templates/joystick/assets/Flat light joystick thumb.png create mode 100644 templates/joystick/assets/Medium Brown Meteor (1).png create mode 100644 templates/joystick/assets/Orange playerShip (3).png create mode 100644 templates/joystick/assets/Shaded dark joystick border.png create mode 100644 templates/joystick/assets/Shaded dark joystick thumb.png create mode 100644 templates/joystick/assets/tiled_Starry Background Stars 2.png create mode 100644 templates/joystick/assets/tiled_black space.png create mode 100644 templates/joystick/game.json create mode 100644 tutorials/in-app/joystick.json diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index d93c568..e91f270 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -23,7 +23,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders.length).toMatchInlineSnapshot(`4`); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`5`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { diff --git a/templates/joystick/assets/Big Brown Meteor (1).png b/templates/joystick/assets/Big Brown Meteor (1).png new file mode 100644 index 0000000000000000000000000000000000000000..31e06a4895c2f2b958aa13b664b40a385b3507a4 GIT binary patch literal 1804 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 literal 0 HcmV?d00001 diff --git a/templates/joystick/assets/Crash.wav b/templates/joystick/assets/Crash.wav new file mode 100644 index 0000000000000000000000000000000000000000..4d75323a8ec508a6298de325c5e78ad5499e308a GIT binary patch literal 30914 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 literal 0 HcmV?d00001 diff --git a/templates/joystick/assets/Enemy_Spawn_Location.png b/templates/joystick/assets/Enemy_Spawn_Location.png new file mode 100644 index 0000000000000000000000000000000000000000..b466cec3aa69af3157f4db28268515d3443b8b50 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WIbIRLo9le v|C~Q?;fw=g!XlT?D;O8E^+*}a;9+1$s%KneQE~q%P$7e-tDnm{r-UW|mtPzV literal 0 HcmV?d00001 diff --git a/templates/joystick/assets/Flat light joystick border.png b/templates/joystick/assets/Flat light joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..24e1cfe6abb42dbfae2c85321835caeddd4f5b0f GIT binary patch literal 1693 zcmV;O24eY%P)005u}1^@s6i_d2*00009a7bBm000XT z000XT0n*)m`~Uz3Pf0{URCwC$o$YPnN)(3O!7bsIkP>bQDS;9w!6i@vC8PvO;15EI zgg}u{q)1WrPef#e#LLUI_l8`80grv=<9Vc!R@#qvJrC#1nK?FD1_!*qzyG80@$oU- zjl3F@D@XnJhxNb99fmzcQQT~|+uK^O&(F_aWl!vW?y444*YNiC_BS(3G+3|wG{GB>6#h#v~W>T8*-{rZLR2tDbPtQ zA08g|L%$9*8s?I37UgU<+YkLZUah~7ujboKB1_`TZ7@ve87aKK?kB^P=#Uf!;#fjvLVSjHvpPwzDMo|>O z?-wE;AYscjALqH@OPEt|0EG$iAtC#GU@f8F=g0b#FimmeZG)>m9ZXOB=)}Z333WlV zQzey(SKc%*RC|3ZrX{)UnF)J+U@hUuT0WlBB^}#T#_H+g_Jh{`z4sDU-7ORyP)EUO zuL6eNS_J{G2ifm~pXhvlkkktesd&XXFIcDIoT?X0>7**Avl%Yfnz^IP1x#`FA|%dw z;mU$!%5fW5OE_TL1;X8yA^L%76lCoOW>JvJ7fhod(GScjVop84H5WB1&~62;Ir}{` z+Ir!3fors#NAUsv7b8671|3Gh(@hF$qv19|mz;c{UEfN{EdsMNO!@`0G)(mieZkXi zV4a3 zxucPzIo4czC7>>7u~?L|*-TG8F-wu6xz!wNu3br(xs*@i>FJ4?iWJRlJwA^>}`M?oYs? zD9ZVKj(`ZbA97){+4P%&^#hMdh=6Gc*haqAMaVG;5ilJA+sd~WuAp5t0TUP=Te>|atuOFkG1nDbg*uoQ5}W0_#a z{;^Enj1N}GJzmWLX7F}YFyr9mM7*923<{7jFQ^3D3Yb^)f@uZ(6>bTb6d)8LU|N9i zMKxfs{u}XCUEt69k1wkM)Ab+wfzTHxzcroC80caBH~djR8WW&v{xl%`1luvtVf341 zO^}A6D|W$c&?q3)Fm#37%Fcmm7&=J5S3vG%*o`hc!!=r#3{iorbf zl8T}Cs+Z1bI3xAunH37VG_EEs-z2l9D2f|SNs_F1SG}+MPE^GMrX;PRLxCsr2^tpI z@AE;zG1C*he1ptqI4_R6=on|dQ&q;Clpr4xLW1&rm5_8Cg?ytdWGGB1IFJz1l@AG# z4+#PJz8>3!cy_#8F3Z_$cGl3J4N$z5Sz8qi49(o%-=8hud_E6NzNt5j1?&|bXS3Pt z#X3hm{aN<-0+BGJrq(721C%e%;NOSdLrKX$Nf?rR$~@k+Q(2=2okB^;-z5x5KBe5` z)_XBl$+d)`$fqiosCQYF%mYtEJ=TVSZz{9ab9912yZ;5~L+fqZe8^ii9OX5Orw=RX zw&QA9B9fX93k-?Z_*JOjJR*)#7O@r&8|;tt1}QxPpiXnvc%E+GC@RMIx)9QAV5qf7 zYsHXdR8*IAY^B6exD0)NNJ{HjZNTeVsbu3%)e>@SDW!gPwPYBOT9NXmO51rgB*&yp nm0j)2O{%f~cl9$!ssHgCVy9DWnuW~g00000NkvXXu0mjfYE~d} literal 0 HcmV?d00001 diff --git a/templates/joystick/assets/Flat light joystick thumb.png b/templates/joystick/assets/Flat light joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d21ac519cecca59c8b4df8ad0385a33b33c6130e GIT binary patch literal 1044 zcmV+v1nc{WP)-;z5dwkcKz*kTkiM!KW&Em zubd<2_IR{EE(pQHAWzxK!LIK`FASd^mWoKu)0FVms z{|&j8?4OL)YW3F4xIuHHM-#z#^jVGd#dottIr1WS~dQR|O6Ov~W(_=!7R*$)Ze{G~;qHGtvp1K15KfzpIUEg;N z_#1*KI|u%9xjfHiv+psV&(BTp)Eyy+{?nXw)9Lg)8jXGod2h4Xs9jSsn;<`=sq+_$ z#V_zLqpB)Zn-E#Cbj0A^17AKv z$svXI^@k{KpLjsy@%R_`@}7JK6s!${Wi-)zZ}E1-{k(uLe`|U`4}?&>toOSZ<%TrM zFWG~fQp%dC>}*tzVIdSg0yq-9aIWc7;0w8lz=a)xDGjd$gUs2l_!MyVD?bG+uqf9K zEOU4)agFY#nh8*{;>|mB!mR^w!H|I$QedWCTM#%gA zaz%5Zh+Cw_dkFxQB5siy-wQPhkQmCAsPSF`K&OaXqQ-mG0W46&tx)5=+)yhNaSPOV z?>N8;MI4VDb+CC|sgR+ZM*1bgor$8u$aq}#IxqAEh$J^iUI2|QI1RK?5! zHD1(ruq})cHtn`VjgPXEI!e{d0yREbLkEOp9Xd5WdIvu3C>fa=pRC1|rVvo6@yYv( zX>v-@sPSrzKUu(0Y-2?s0Dzx+1J6f(K3ro@?eiOE7o)2InCYr|Db;X{T*71Rwgo>RQ zrchB%x65x8QJQXM@MK8!trU=)S~$JvKGyEL%4n@-yKo3YW*-@mVS5{;W>t z%`otepi#{3x3Mdz74j9?WbNXq)2R`y7xR0NS)V;?Hs{X=SeuzJaU0N}QOqA&n>=7c zUPOrq3qtH=W5&E$pBsqRYqRD>y%gZ-(v)ddF9)zU$)@8r;4HD}+=*i=#q3}H`Pp(I zl4w%co7`Tw(2aI>*Gs2c<;m2DhVi^s4D_!i%FaZm9Pzlw5?#@;PN(f`73~buX{*V{gm3Gm$ zx97}{ooWwJ8$TZ}nJ-(F&W3y(VW53UIo+5$=d>ut9z`?^-bF5&b#b7s3|f)p^wsKB zHPO%a7t}<<(e|=0>aR~Z{kU27BI-i6&%S8m_yhG=OO$L6CzK0FJ{SAq~)Y{{Z zODL^&T^u2>FL3~^1in4Ik%%b39W>vf#q5&Z?u8Jc}N>=N?efC9yi4-&yD@kGr zwDyHGJ7n7iVD$oSQXrd?kaZ~#efCwqa^{vxLEspZkaa0KaO!DjD77xGfFt-?m)2t= z?aOWp$w18_dk-q9+E%1}`A7lXxfTL#V%Z>%x?~S}x-QoOq48W_lCj;Fs}vwHiVkZS zu+xF}F;^*oaOs7lYwtRYsC8p#^)=wGQV<&(B}qAcdur3;2EI~|WE&MpqA3#@nH@yl za77C2YTP$kCNcJ)Pc=T0W_(=34J0S#FPX0%%1J}+a&hzpa+7EhB)UMa5oelG;MDAB zk}D**-;_JWF{hMJiRQpecX?!jC=o^yE;rvOJCZI+1{mJa9OMk)-x2s2(RLXv+2$?= z?>&Z(d&tc0j~FfaAW4BA#*LYBQHY?(Nl`%ygD5V|Dlqh9+TGo)^Bip-Ia0000jbVXQnQ*UN;cVTj6 z0AhJAVr*}3WMp|RV{&KQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$ Ef~vIA2mk;8 literal 0 HcmV?d00001 diff --git a/templates/joystick/assets/Orange playerShip (3).png b/templates/joystick/assets/Orange playerShip (3).png new file mode 100644 index 0000000000000000000000000000000000000000..0b6b7ec68abd9e47ad45429541cf5c35c2d145d4 GIT binary patch literal 2725 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 fP)Z)9b1s0M%T00000NkvXXu0mjfn&t-B literal 0 HcmV?d00001 diff --git a/templates/joystick/assets/Shaded dark joystick border.png b/templates/joystick/assets/Shaded dark joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6f08b35182a3012feef1f6c8bfe6761fb8bce1 GIT binary patch literal 3030 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 literal 0 HcmV?d00001 diff --git a/templates/joystick/game.json b/templates/joystick/game.json new file mode 100644 index 0000000..b579957 --- /dev/null +++ b/templates/joystick/game.json @@ -0,0 +1,1202 @@ +{ + "firstLayout": "", + "gdVersion": { + "build": 99, + "major": 4, + "minor": 0, + "revision": 0 + }, + "properties": { + "adaptGameResolutionAtRuntime": true, + "folderProject": false, + "orientation": "portrait", + "packageName": "com.example.JoystickLesson", + "pixelsRounding": false, + "projectUuid": "4ec7adea-2f85-4173-a98e-940556b75af5", + "scaleMode": "linear", + "sizeOnStartupMode": "", + "templateSlug": "", + "useExternalSourceFiles": false, + "version": "1.0.0", + "name": "JoystickLesson", + "description": "A game example where you add a joystick to control the movement of a ship in space.", + "author": "", + "windowWidth": 720, + "windowHeight": 1280, + "latestCompilationDirectory": "", + "maxFPS": 60, + "minFPS": 20, + "verticalSync": false, + "platformSpecificAssets": {}, + "loadingScreen": { + "backgroundColor": 0, + "backgroundFadeInDuration": 0.2, + "backgroundImageResourceName": "", + "gdevelopLogoStyle": "light", + "logoAndProgressFadeInDuration": 0.2, + "logoAndProgressLogoFadeInDelay": 0.2, + "minDuration": 1.5, + "progressBarColor": 16777215, + "progressBarHeight": 20, + "progressBarMaxWidth": 200, + "progressBarMinWidth": 40, + "progressBarWidthPercent": 30, + "showGDevelopSplash": true, + "showProgressBar": true + }, + "watermark": { + "placement": "bottom-left", + "showWatermark": true + }, + "authorIds": [], + "authorUsernames": [], + "categories": [], + "playableDevices": [], + "extensionProperties": [], + "platforms": [ + { + "name": "GDevelop JS platform" + } + ], + "currentPlatform": "GDevelop JS platform" + }, + "resources": { + "resources": [ + { + "alwaysLoaded": false, + "file": "assets/Big Brown Meteor (1).png", + "kind": "image", + "metadata": "", + "name": "Big Brown Meteor (1).png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter/PNG/Meteors/ae6802c87f6e3e4739b6260b23e4546582daad3fb803446401fbec2bc057f297_Big Brown Meteor (1).png", + "name": "Big Brown Meteor (1).png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Big Grey Meteor (1).png", + "kind": "image", + "metadata": "", + "name": "Big Grey Meteor (1).png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter/PNG/Meteors/821659c429013730ce54bc7259612b06fcaf5563cbed3ce63d0ee73e4de202cd_Big Grey Meteor (1).png", + "name": "Big Grey Meteor (1).png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Medium Brown Meteor (1).png", + "kind": "image", + "metadata": "", + "name": "Medium Brown Meteor (1).png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter/PNG/Meteors/70f274ae740166dbf45e9131bbaee2b5c18034303c527fccaed64aaedec2f1c1_Medium Brown Meteor (1).png", + "name": "Medium Brown Meteor (1).png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Orange playerShip (3).png", + "kind": "image", + "metadata": "", + "name": "Orange playerShip (3).png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter/PNG/5abeaf795b2d7c342a06be4ae70a6f484bf445f6884d7c456d4f6be66eab8f3a_Orange playerShip (3).png", + "name": "Orange playerShip (3).png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Enemy_Spawn_Location.png", + "kind": "image", + "metadata": "", + "name": "Enemy_Spawn_Location.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/tiled_black space.png", + "kind": "image", + "metadata": "", + "name": "tiled_black space.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter/Backgrounds/82e24c48618660952ceb6cede5c9917ceeb4371c9e971f4a49fb43689d045d89_tiled_black space.png", + "name": "tiled_black space.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/tiled_Starry Background Stars 2.png", + "kind": "image", + "metadata": "", + "name": "tiled_Starry Background Stars 2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/FoozleCC/Void Collection/Environment Pack/Backgrounds/1dd0ee3b6ee4b0545ef9b3723a60ee4a10bb29bfd0fdd4845c460ba69bec4ce0_tiled_Starry Background Stars 2.png", + "name": "tiled_Starry Background Stars 2.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Shaded dark joystick border.png", + "kind": "image", + "metadata": "", + "name": "Shaded dark joystick border.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/dd6e3c2d11ba02bd5a052cd47908e851b656d0fb492b52006afa4843e597d0cc_Shaded dark joystick border.png", + "name": "Shaded dark joystick border.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Shaded dark joystick thumb.png", + "kind": "image", + "metadata": "", + "name": "Shaded dark joystick thumb.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/13d8225be69d0f11b6de965cac0d840e7e63e2510a638af89ae42b052caa2460_Shaded dark joystick thumb.png", + "name": "Shaded dark joystick thumb.png" + } + }, + { + "file": "assets/Crash.wav", + "kind": "audio", + "metadata": "{\"extension\":\".wav\",\"jfxr\":{\"data\":\"{\\\"_version\\\":1,\\\"_name\\\":\\\"Jump 1\\\",\\\"_locked\\\":[],\\\"sampleRate\\\":44100,\\\"attack\\\":0,\\\"sustain\\\":0.13,\\\"sustainPunch\\\":70,\\\"decay\\\":0.22,\\\"tremoloDepth\\\":0,\\\"tremoloFrequency\\\":5,\\\"frequency\\\":7200,\\\"frequencySweep\\\":-2600,\\\"frequencyDeltaSweep\\\":-2200,\\\"repeatFrequency\\\":0,\\\"frequencyJump1Onset\\\":33,\\\"frequencyJump1Amount\\\":-5,\\\"frequencyJump2Onset\\\":66,\\\"frequencyJump2Amount\\\":0,\\\"harmonics\\\":0,\\\"harmonicsFalloff\\\":0.53,\\\"waveform\\\":\\\"pinknoise\\\",\\\"interpolateNoise\\\":true,\\\"vibratoDepth\\\":0,\\\"vibratoFrequency\\\":0,\\\"squareDuty\\\":55,\\\"squareDutySweep\\\":0,\\\"flangerOffset\\\":5,\\\"flangerOffsetSweep\\\":0,\\\"bitCrush\\\":16,\\\"bitCrushSweep\\\":-1,\\\"lowPassCutoff\\\":22050,\\\"lowPassCutoffSweep\\\":0,\\\"highPassCutoff\\\":0,\\\"highPassCutoffSweep\\\":-900,\\\"compression\\\":1,\\\"normalization\\\":true,\\\"amplification\\\":100}\",\"name\":\"Crash\"},\"localFilePath\":\"assets/Crash.wav\"}", + "name": "Crash", + "preloadAsMusic": false, + "preloadAsSound": true, + "preloadInCache": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Flat light joystick border.png", + "kind": "image", + "metadata": "", + "name": "Flat light joystick border.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/ab72105ef4577d93b002f4b6f9b6095f7db7e346da37bcffa2977edf61ac231d_Flat light joystick border.png", + "name": "Flat light joystick border.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Flat light joystick thumb.png", + "kind": "image", + "metadata": "", + "name": "Flat light joystick thumb.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/0acabda67390a4e4aa8b1023454400432c202efb1a525070784c756f61de7e81_Flat light joystick thumb.png", + "name": "Flat light joystick thumb.png" + } + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 209, + "disableInputWhenNotFocused": true, + "mangledName": "GameScene", + "name": "GameScene", + "r": 209, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 209, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": true, + "zoomFactor": 0.3866990209613917, + "windowMask": false + }, + "objectsGroups": [ + { + "name": "Meteors", + "objects": [ + { + "name": "BigBrownMeteor1" + }, + { + "name": "BigGreyMeteor1" + }, + { + "name": "MediumBrownMeteor1" + } + ] + } + ], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": true, + "height": 1280, + "layer": "", + "name": "Walls", + "persistentUuid": "b1673ac2-aa53-4b3b-8746-589e30d25f40", + "width": 64, + "x": 720, + "y": 0, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 1280, + "layer": "", + "name": "Walls", + "persistentUuid": "d00e0c03-99cb-48f5-987e-d7acbbd91f68", + "width": 64, + "x": -64, + "y": 0, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 64, + "layer": "", + "name": "Walls", + "persistentUuid": "4668bfcb-cf7e-4a8b-91c8-be6e2cc70c08", + "width": 848, + "x": -64, + "y": -64, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 64, + "layer": "", + "name": "Walls", + "persistentUuid": "e26dccc7-cf6d-46c1-ad7d-e9ca7c1de527", + "width": 848, + "x": -64, + "y": 1280, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 1344, + "layer": "", + "name": "BlackSpace", + "persistentUuid": "57a3ecf4-327c-414d-bcf9-46d386cb2241", + "width": 784, + "x": -32, + "y": -32, + "zOrder": -2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 1344, + "layer": "", + "name": "StarryBackgroundStars2", + "persistentUuid": "b7046053-b990-498a-ad8d-8b6b8648ae3c", + "width": 784, + "x": -32, + "y": -32, + "zOrder": -1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Trail", + "persistentUuid": "f0281bcf-f9c4-4b83-ba85-f641a4edaef4", + "width": 0, + "x": 960, + "y": 576, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "OrangePlayerShip3", + "persistentUuid": "95ae9a18-9c57-4734-b713-f580de816be6", + "width": 0, + "x": 352, + "y": 896, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "911c6f50a4c05507c6fc1df967493f61a7ce9bad9e144cec92f6ff32be42749a", + "name": "BigBrownMeteor1", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Big Brown Meteor (1).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 12, + "y": 10 + }, + { + "x": 87, + "y": 10 + }, + { + "x": 87, + "y": 72 + }, + { + "x": 12, + "y": 72 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "ca0633aaa11c9973eff808d10322e7c3142144c53b0c4747cd55b303acdc81f6", + "name": "BigGreyMeteor1", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Big Grey Meteor (1).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 12, + "y": 5 + }, + { + "x": 87, + "y": 5 + }, + { + "x": 87, + "y": 74 + }, + { + "x": 12, + "y": 74 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "829045c7d03f177ede71c000a4fc81b0ddbdc73a91144b7fa32ad0b557e4b020", + "name": "MediumBrownMeteor1", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Medium Brown Meteor (1).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 4, + "y": 5 + }, + { + "x": 38, + "y": 5 + }, + { + "x": 38, + "y": 36 + }, + { + "x": 4, + "y": 36 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "2dfe5abcf8449b36588904833bd4d48556da3e9cb3770285e4f8aa6ad3bd3b96", + "name": "OrangePlayerShip3", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "acceleration": 200, + "deceleration": 900, + "maxSpeed": 300, + "name": "TopDownMovement", + "type": "TopDownMovementBehavior::TopDownMovementBehavior", + "allowDiagonals": true, + "angleOffset": 0, + "angularMaxSpeed": 180, + "customIsometryAngle": 30, + "ignoreDefaultControls": false, + "movementAngleOffset": 0, + "rotateObject": false, + "viewpoint": "TopDown" + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Orange playerShip (3).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 49, + "y": 70.6128 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 42, + "y": 5 + }, + { + "x": 55, + "y": 5 + }, + { + "x": 95, + "y": 65 + }, + { + "x": 3, + "y": 65 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Walls", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Enemy_Spawn_Location.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "2d701679df0e067e63e657f3a7de8b0c076c1c0db19e7c6070c186b28a611df2", + "height": 128, + "name": "BlackSpace", + "tags": "", + "texture": "tiled_black space.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "c20fe4657b50f46f901b666ddae13412211ef388c101136bacecd5bee34520b4", + "height": 128, + "name": "StarryBackgroundStars2", + "tags": "", + "texture": "tiled_Starry Background Stars 2.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "additive": false, + "assetStoreId": "", + "destroyWhenNoParticles": true, + "emitterAngleA": 0, + "emitterAngleB": 0, + "emitterForceMax": 250, + "emitterForceMin": 175, + "flow": 30, + "maxParticleNb": 300, + "name": "Trail", + "particleAlpha1": 255, + "particleAlpha2": 0, + "particleAlphaRandomness1": 0, + "particleAlphaRandomness2": 0, + "particleAngle1": 0, + "particleAngle2": 0, + "particleAngleRandomness1": 0, + "particleAngleRandomness2": 0, + "particleBlue1": 68, + "particleBlue2": 87, + "particleGravityX": 0, + "particleGravityY": 0, + "particleGreen1": 239, + "particleGreen2": 87, + "particleLifeTimeMax": 1, + "particleLifeTimeMin": 0.5, + "particleRed1": 253, + "particleRed2": 87, + "particleSize1": 100, + "particleSize2": 20, + "particleSizeRandomness1": 0, + "particleSizeRandomness2": 0, + "rendererParam1": 10, + "rendererParam2": 1, + "rendererType": "Point", + "tags": "", + "tank": -1, + "textureParticleName": "", + "type": "ParticleSystem::ParticleEmitter", + "zoneRadius": 10, + "variables": [], + "effects": [], + "behaviors": [] + } + ], + "events": [ + { + "colorB": 116, + "colorG": 116, + "colorR": 116, + "creationTime": 0, + "folded": true, + "name": "Game Systems", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Meteor Management", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": ["", "\"RockSpawn\""] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": ["Difficulty", "=", "1"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareTimer" + }, + "parameters": [ + "", + "\"RockSpawn\"", + ">", + "Variable(Difficulty)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": ["Randomizer", "=", "RandomInRange(0,2)"] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": ["Difficulty", "*", "0.99"] + }, + { + "type": { + "value": "ResetTimer" + }, + "parameters": ["", "\"RockSpawn\""] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarScene" + }, + "parameters": ["Randomizer", "=", "0"] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "BigBrownMeteor1", + "RandomInRange(0,720)", + "-100", + "" + ] + }, + { + "type": { + "value": "AddForceXY" + }, + "parameters": ["BigBrownMeteor1", "0", "250", "1"] + }, + { + "type": { + "value": "RotateTowardAngle" + }, + "parameters": [ + "BigBrownMeteor1", + "RandomInRange(0,360)", + "0", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarScene" + }, + "parameters": ["Randomizer", "=", "1"] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "BigGreyMeteor1", + "RandomInRange(0,720)", + "-100", + "" + ] + }, + { + "type": { + "value": "AddForceXY" + }, + "parameters": ["BigGreyMeteor1", "0", "250", "1"] + }, + { + "type": { + "value": "RotateTowardAngle" + }, + "parameters": [ + "BigGreyMeteor1", + "RandomInRange(0,360)", + "0", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarScene" + }, + "parameters": ["Randomizer", "=", "2"] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MediumBrownMeteor1", + "RandomInRange(0,720)", + "-100", + "" + ] + }, + { + "type": { + "value": "AddForceXY" + }, + "parameters": ["MediumBrownMeteor1", "0", "250", "1"] + }, + { + "type": { + "value": "RotateTowardAngle" + }, + "parameters": [ + "MediumBrownMeteor1", + "RandomInRange(0,360)", + "0", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PosY" + }, + "parameters": ["Meteors", ">", "1400"] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": ["Meteors", ""] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Scrolling background", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::SetOpacity" + }, + "parameters": ["StarryBackgroundStars2", "=", "100"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LayerTimeScale" + }, + "parameters": ["", "\"\"", "=", "1"] + } + ], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::YOffset" + }, + "parameters": [ + "StarryBackgroundStars2", + "+", + "TimeDelta()*-150" + ] + }, + { + "type": { + "value": "TiledSpriteObject::YOffset" + }, + "parameters": ["BlackSpace", "+", "TimeDelta()*-100"] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Trail", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "RotateTowardAngle" + }, + "parameters": ["Trail", "90", "0", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Trail", + "=", + "OrangePlayerShip3.X()", + "=", + "OrangePlayerShip3.Y()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SeparateFromObjects" + }, + "parameters": ["OrangePlayerShip3", "Walls", ""] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Crashing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": ["OrangePlayerShip3", "Meteors", "", "", ""] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ChangeLayerTimeScale" + }, + "parameters": ["", "\"\"", "0"] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": ["", "Crash", "", "100", "1"] + }, + { + "type": { + "value": "Wait" + }, + "parameters": ["1.5"] + }, + { + "type": { + "value": "Scene" + }, + "parameters": ["", "\"GameScene\"", ""] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 0, + "ambientLightColorG": 22239848, + "ambientLightColorR": 16, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "TopDownMovement", + "type": "TopDownMovementBehavior::TopDownMovementBehavior" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [], + "externalLayouts": [], + "externalSourceFiles": [] +} diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index acb9e4a..4facd9d 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -206,7 +206,7 @@ "placement": "left", "description": { "messageByLocale": { - "en": "Let's attach the Camera to our player with the help of **behaviors*:\n\nclick on the 3 dot menu, or right click on **$(player)**, and select **Edit behaviors**.", + "en": "Let's attach the Camera to our player with the help of **behaviors**:\n\nclick on the 3 dot menu, or right click on **$(player)**, and select **Edit behaviors**.", "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nCliquez droit sur **$(player)** ou utilisez le menu à 3 points et sélectionnez **Modifier les comportements**.", "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", @@ -590,11 +590,11 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Let's make the far background move way **slower** than the camera,\n\n Type the formula `CameraCenterX()/8`.", - "fr": "Faisons en sorte que le fond le plus an arrière se déplace beaucoup **plus lentement** que la caméra,\n\n Entrez la formule `CameraCenterX()/8`.", - "es": "Hagamos que el fondo lejano se mueva mucho **más lento** que la cámara,\n\n Escribe la fórmula `CameraCenterX()/8`.", - "pt": "Vamos fazer com que o plano de fundo distante se mova muito **mais devagar** que a câmera,\n\n Digite a formula `CameraCenterX()/8`.", - "th": "ทำให้พื้นหลังเคลื่อนที่ **ช้ากว่า** กล้อง\n\n ใส่ `CameraCenterX()/8`" + "en": "Let's make the far background move,\n\n The way we do it is by making it move relatively to the position of the camera.\n\n If the player moves, the camera moves too, so we make the background follow the camera center horizontally (X), but **way slower** to give an effect of depth.\n\n Type the formula `CameraCenterX()/8`.", + "fr": "Faisons bouger le fond lointain,\n\n La façon de le faire est de le faire bouger par rapport à la position de la caméra.\n\n Si le joueur se déplace, la caméra se déplace aussi, donc nous faisons en sorte que le fond suive le centre de la caméra horizontalement (X), mais **beaucoup plus lentement** pour donner un effet de profondeur.\n\n Tapez la formule `CameraCenterX()/8`.", + "es": "Hagamos que el fondo lejano se mueva,\n\n La forma de hacerlo es hacer que se mueva en relación con la posición de la cámara.\n\n Si el jugador se mueve, la cámara también se mueve, por lo que hacemos que el fondo siga el centro de la cámara horizontalmente (X), pero **mucho más lento** para dar un efecto de profundidad.\n\n Escribe la fórmula `CameraCenterX()/8`.", + "pt": "Vamos fazer o fundo distante se mover,\n\n A maneira como fazemos isso é fazendo com que ele se mova em relação à posição da câmera.\n\n Se o jogador se mover, a câmera também se move, então fazemos o fundo seguir o centro da câmera horizontalmente (X), mas **muito mais devagar** para dar um efeito de profundidade.\n\n Digite a fórmula `CameraCenterX()/8`.", + "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`" } }, "placement": "top" @@ -699,11 +699,11 @@ "tooltip": { "description": { "messageByLocale": { - "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\n Enter `CameraCenterX()/3`.", - "fr": "Cette fois, faisons en sorte que ce fond se déplace **plus vite**, pour donner l'effet qu'il est plus proche du joueur,\n\n Entrez `CameraCenterX()/3`.", - "es": "Esta vez hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\n Ingrese `CameraCenterX()/3`.", - "pt": "Desta vez vamos fazer com que este plano de fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\n Digite `CameraCenterX()/3`.", - "th": "ทำให้พื้นหลังเคลื่อนที่ **เร็วกว่า** เพื่อทำเอฟเฟกต์ให้ดูเหมือนกับว่าอยู่ใกล้กับผู้เล่น\n\n ใส่ `CameraCenterX()/3`" + "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\nso let's make the background move **3 times slower** than the camera.\n\n Enter `CameraCenterX()/3`.", + "fr": "Cette fois, faisons en sorte que ce fond se déplace **plus vite**, pour donner l'effet qu'il est plus proche du joueur,\n\nalors faisons en sorte que le fond se déplace **3 fois plus lentement** que la caméra.\n\nEntrez `CameraCenterX()/3`.", + "es": "Esta vez, hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\nasí que hagamos que el fondo se mueva **3 veces más lento** que la cámara.\n\nIngrese `CameraCenterX()/3`.", + "pt": "Desta vez, vamos fazer com que este fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\nentão vamos fazer com que o fundo se mova **3 vezes mais devagar** que a câmera.\n\nDigite `CameraCenterX()/3`.", + "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`" } }, "placement": "top" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 0efd49e..9880e48 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -330,6 +330,8 @@ "messageByLocale": { "en": "I'm done", "fr": "J'ai terminé", + "es": "He terminado", + "pt": "Terminei", "th": "เสร็จแล้ว" } } @@ -574,4 +576,4 @@ } } ] -} \ No newline at end of file +} diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json new file mode 100644 index 0000000..155dd5a --- /dev/null +++ b/tutorials/in-app/joystick.json @@ -0,0 +1,476 @@ +{ + "id": "joystick", + "editorSwitches": { + "Start": { + "editor": "Scene", + "scene": "gameScene" + } + }, + "availableLocales": ["en", "fr", "es", "pt", "th"], + "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json", + "initialProjectData": { + "gameScene": "GameScene", + "ship": "OrangePlayerShip3" + }, + "endDialog": { + "content": [ + { + "messageByLocale": { + "en": "# You've finished this lesson!", + "fr": "# Vous avez terminé cette leçon !", + "es": "# ¡Has terminado esta lección!", + "pt": "# Você terminou esta lição!", + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" + } + }, + { + "messageByLocale": { + "en": "Well done, in this tutorial you've learned how to:", + "fr": "Bien joué, voici ce que vous avez appris :", + "es": "¡Bien hecho! En este tutorial, has aprendido:", + "pt": "Bom trabalho, neste tutorial você aprendeu:", + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" + } + }, + { + "messageByLocale": { + "en": "- Create a layer\n\n- Add and use a prefab object\n\n- Use a behavior", + "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué\n\n- Comment utiliser un comportement", + "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab\n\n- Cómo usar un comportamiento", + "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab\n\n- Como usar um comportamento", + "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab\n\n- วิธีใช้งานพฤติกรรม" + } + }, + { + "messageByLocale": { + "en": "You can keep adding stuff to this game or publish it!", + "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" + } + } + ] + }, + "flow": [ + { + "id": "Start", + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "Let's go!", + "fr": "C'est parti !", + "es": "¡Vamos!", + "pt": "Vamos lá!", + "th": "ไปกันเลย!" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!\n\nOnce you're done, click on this button to continue." + } + } + } + }, + { + "elementToHighlightId": "#toolbar-open-layers-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-layer-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "First, let's open the **Layers** panel.", + "fr": "Premièrement, ouvrons le panneau des **calques**.", + "es": "Primero, abramos el panel de **Capas**.", + "pt": "Primeiro, vamos abrir o painel de **Camadas**.", + "th": "เปิดแผงควบคุม **เลเยอร์**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, + { + "elementToHighlightId": "#add-layer-button", + "nextStepTrigger": { + "presenceOfElement": "#layer-1" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will first create a layer for the User Interface (UI) elements.", + "fr": "Nous allons d'abord créer un calque qui contiendra l'interface utilisateur (IU).", + "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", + "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", + "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-name", + "nextStepTrigger": { + "valueEquals": "Interface" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the name to **Interface**.", + "fr": "Changeons son nom en **Interface**.", + "es": "Cambiamos su nombre a **Interface**.", + "pt": "Mudamos o nome para **Interface**.", + "th": "เปลี่ยนชื่อเป็น **Interface**" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#layer-1 #layer-selected-unchecked", + "nextStepTrigger": { + "presenceOfElement": "#layer-1 #layer-selected-checked" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select this **layer** so we can place our joystick inside of it.", + "fr": "Sélectionnons ce **calque** pour y placer notre joystick.", + "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", + "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", + "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น" + } + }, + "placement": "left" + } + }, + { + "elementToHighlightId": "#add-new-object-button", + "nextStepTrigger": { + "presenceOfElement": "#new-object-dialog" + }, + "tooltip": { + "placement": "left", + "description": { + "messageByLocale": { + "en": "This game can only be played with a keyboard, so let's add **joystick controllers**, so that we can play on **mobile**!\n\nLet's go to the asset store to find a joystick prefab!", + "fr": "Ce jeu ne peut être joué qu'avec un clavier, alors ajoutons un **joystick** pour pouvoir y jouer sur **mobile** !\n\nAllons dans le magasin de ressources pour trouver un joystick préfabriqué !", + "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", + "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", + "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store" + } + } + } + }, + { + "elementToHighlightId": "#asset-store-tab", + "nextStepTrigger": { + "presenceOfElement": "#asset-store" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's choose a **prefab object** from the asset store", + "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", + "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", + "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", + "th": "เลือก **วัตถุ prefab** จากร้านค้า asset" + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-store #home-button", + "nextStepTrigger": { + "presenceOfElement": "#asset-store-home[data-is-filtered=\"false\"]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's go back to the store home page.", + "fr": "Retournons à la page d'accueil du magasin.", + "es": "Volvamos a la página de inicio de la tienda.", + "pt": "Vamos voltar para a página inicial da loja.", + "th": "กลับไปยังหน้าโฮมเพจของร้านค้า" + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-pack-category-prefab", + "nextStepTrigger": { + "presenceOfElement": "#asset-store-home[data-is-filtered=\"true\"] #asset-pack-multitouch-joysticks" + }, + "placement": "bottom", + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", + "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", + "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", + "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-store-home[data-is-filtered=\"true\"] #asset-pack-multitouch-joysticks", + "nextStepTrigger": { + "presenceOfElement": "#asset-card-Flat-light-joystick" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will use a joystick.", + "fr": "Nous allons utiliser un joystick.", + "es": "Vamos a usar un joystick.", + "pt": "Vamos usar um joystick.", + "th": "เราจะใช้ joystick" + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#asset-card-Flat-light-joystick", + "nextStepTrigger": { + "presenceOfElement": "#add-asset-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's choose this white joystick, it will match well with our background.", + "fr": "Choisissons ce joystick blanc, il s'accordera bien avec notre fond.", + "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", + "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", + "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง" + } + } + } + }, + { + "elementToHighlightId": "#add-asset-button", + "nextStepTrigger": { + "presenceOfElement": "#object-item-8" + }, + "mapProjectData": { + "joystick": "sceneLastObjectName:level" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add it to the scene.", + "fr": "Ajoutons le à la scène.", + "es": "Agreguemoslo a la escena.", + "pt": "Adicionemos-o à cena.", + "th": "เพิ่มวัตถุในฉาก" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "#close-button", + "nextStepTrigger": { + "absenceOfElement": "#new-object-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's close the asset store.", + "fr": "Fermons le magasin de ressources", + "es": "Cerramos la tienda de recursos.", + "pt": "Vamos fechar a loja de recursos.", + "th": "ปิดร้านค้า asset" + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "objectInObjectsList:joystick", + "nextStepTrigger": { + "instanceAddedOnScene": "joystick" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Drag the **$(joystick)** to the scene.", + "fr": "Faites glisser **$(joystick)** du menu à la scène.", + "es": "Arrastra **$(joystick)** desde el menú a la escena.", + "pt": "Arraste **$(joystick)** do menu para a cena.", + "th": "ลาก **$(joystick)** ใส่ลงใน scene" + } + } + } + }, + { + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "I'm done", + "fr": "J'ai terminé", + "es": "He terminado", + "pt": "Terminei", + "th": "เสร็จแล้ว" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "Place the $(joystick) below the ship on the screen, so that the player can use their thumb to control it easily.\n\nWhen you're done, click on the button below.", + "fr": "Placez le $(joystick) en dessous du vaisseau à l'écran, de façon à ce que le joueur puisse utiliser son pouce pour le contrôler facilement.\n\nQuand vous avez terminé, cliquez sur le bouton ci-dessous.", + "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.\n\nCuando hayas terminado, haz clic en el botón de abajo.", + "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.\n\nQuando você terminar, clique no botão abaixo.", + "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง" + } + }, + "placement": "top", + "image": { + "dataUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIxMjcuMjc5IDY2LjI3NSAyMTkuNDAyIDI5Ny4zNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpieD0iaHR0cHM6Ly9ib3h5LXN2Zy5jb20iPgogIDxyZWN0IHg9IjEyNy4yNzkiIHk9IjY2LjUwOSIgd2lkdGg9IjIxOS40MDIiIGhlaWdodD0iMjk2LjY0OSIgc3R5bGU9InN0cm9rZTogcmdiKDAsIDAsIDApOyBmaWxsOiByZ2IoODcsIDg1LCA4NSk7Ii8+CiAgPHBhdGggZD0iTSAyMzguMzI2IDIzMC40NDMgTCAyNTUuMDI1IDI2Mi44NjUgTCAyMjEuNjI4IDI2Mi44NjUgTCAyMzguMzI2IDIzMC40NDMgWiIgc3R5bGU9InN0cm9rZTogcmdiKDAsIDAsIDApOyBmaWxsOiByZ2IoMjU1LCAxNjIsIDU2KTsiIGJ4OnNoYXBlPSJ0cmlhbmdsZSAyMjEuNjI4IDIzMC40NDMgMzMuMzk3IDMyLjQyMiAwLjUgMCAxQDZlMjg1NDhlIi8+CiAgPGVsbGlwc2Ugc3R5bGU9InN0cm9rZTogcmdiKDAsIDAsIDApOyBmaWxsOiByZ2IoNTksIDIyMiwgOTcpOyIgY3g9IjIzNy45OTEiIGN5PSIzMTkuNjU5IiByeD0iMjEuMjc5IiByeT0iMTkuODUzIi8+CiAgPHJlY3QgeD0iMTI3LjM5MyIgeT0iNjYuMjc1IiB3aWR0aD0iMTAiIGhlaWdodD0iMjk3LjM2IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwgMCwgMCk7IGZpbGw6IHJnYigyMDgsIDM3LCAzNyk7Ii8+CiAgPHJlY3QgeD0iMzM2LjMzMyIgeT0iNjYuOTI3IiB3aWR0aD0iOS43NiIgaGVpZ2h0PSIyOTUuOTg3IiBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwgMCwgMCk7IGZpbGw6IHJnYigyMzIsIDQ0LCA0NCk7Ii8+CiAgPHJlY3QgeD0iMTM2Ljk3IiB5PSI2Ni42NDIiIHdpZHRoPSIxOTkuNDkzIiBoZWlnaHQ9IjkuMjAxIiBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwgMCwgMCk7IGZpbGw6IHJnYigyMzMsIDQ2LCA0Nik7Ii8+CiAgPHJlY3QgeD0iMTM4LjIyOSIgeT0iMzU0LjE4IiB3aWR0aD0iMTk3LjE1NSIgaGVpZ2h0PSI4LjUwMiIgc3R5bGU9InN0cm9rZTogcmdiKDAsIDAsIDApOyBmaWxsOiByZ2IoMjMwLCA1MywgNTMpOyIvPgo8L3N2Zz4=" + } + } + }, + { + "elementToHighlightId": "objectInObjectsList:ship", + "nextStepTrigger": { + "presenceOfElement": "#object-editor-dialog" + }, + "tooltip": { + "placement": "left", + "description": { + "messageByLocale": { + "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nclick on the 3 dot menu, or right click on **$(ship)**, and select **Edit behaviors**.", + "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\ncliquez sur le menu à 3 points, ou faites un clic droit sur **$(ship)**, et sélectionnez **Modifier les comportements**.", + "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", + "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", + "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**" + } + } + } + }, + { + "elementToHighlightId": "#behaviors-tab", + "nextStepTrigger": { + "presenceOfElement": "#add-behavior-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "See the **behaviors** of the **object** here.", + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", + "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#add-behavior-button", + "nextStepTrigger": { + "presenceOfElement": "#behavior-item-SpriteMultitouchJoystick--TopDownMultitouchMapper" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add the **Top down multi-touch controller mapper** behavior that was installed.", + "fr": "Ajoutons le comportement **Top down multi-touch controller mapper** qui a été installé.", + "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", + "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", + "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้" + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#behavior-item-SpriteMultitouchJoystick--TopDownMultitouchMapper", + "nextStepTrigger": { + "presenceOfElement": "#behavior-parameters-TopDownMultitouchMapper" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Top down multi-touch controller mapper** behavior.", + "fr": "Sélectionnez le comportement **Top down multi-touch controller mapper**.", + "es": "Selecciona el comportamiento **Top down multi-touch controller mapper**.", + "pt": "Selecione o comportamento **Top down multi-touch controller mapper**.", + "th": "เลือกพฤติกรรม **Top down multi-touch controller mapper**" + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#behavior-parameters-TopDownMultitouchMapper #StickMode", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the stick mode, so that it can be controlled at **360°**.", + "fr": "Changeons le mode de la manette, pour qu'elle puisse être contrôlée à **360°**.", + "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", + "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", + "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**" + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#object-editor-dialog #apply-button", + "nextStepTrigger": { + "absenceOfElement": "#object-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "That's it! Now the joystick will control the ship!", + "fr": "C'est tout ! Maintenant, la manette contrôlera le vaisseau !", + "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", + "pt": "É isso aí! Agora o joystick controlará o navio!", + "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!" + } + } + } + }, + { + "elementToHighlightId": "#toolbar-preview-button", + "nextStepTrigger": { + "previewLaunched": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" + } + }, + "placement": "bottom" + } + } + ] +} From d40c64498de2609091c46dd1a037d5d7caca5faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:03:44 +0100 Subject: [PATCH 054/208] Remove joysticks --- .../assets/Flat light joystick border.png | Bin 1693 -> 0 bytes .../assets/Flat light joystick thumb.png | Bin 1044 -> 0 bytes .../assets/Shaded dark joystick border.png | Bin 3030 -> 0 bytes .../assets/Shaded dark joystick thumb.png | Bin 2989 -> 0 bytes templates/joystick/game.json | 56 +----------------- 5 files changed, 2 insertions(+), 54 deletions(-) delete mode 100644 templates/joystick/assets/Flat light joystick border.png delete mode 100644 templates/joystick/assets/Flat light joystick thumb.png delete mode 100644 templates/joystick/assets/Shaded dark joystick border.png delete mode 100644 templates/joystick/assets/Shaded dark joystick thumb.png diff --git a/templates/joystick/assets/Flat light joystick border.png b/templates/joystick/assets/Flat light joystick border.png deleted file mode 100644 index 24e1cfe6abb42dbfae2c85321835caeddd4f5b0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1693 zcmV;O24eY%P)005u}1^@s6i_d2*00009a7bBm000XT z000XT0n*)m`~Uz3Pf0{URCwC$o$YPnN)(3O!7bsIkP>bQDS;9w!6i@vC8PvO;15EI zgg}u{q)1WrPef#e#LLUI_l8`80grv=<9Vc!R@#qvJrC#1nK?FD1_!*qzyG80@$oU- zjl3F@D@XnJhxNb99fmzcQQT~|+uK^O&(F_aWl!vW?y444*YNiC_BS(3G+3|wG{GB>6#h#v~W>T8*-{rZLR2tDbPtQ zA08g|L%$9*8s?I37UgU<+YkLZUah~7ujboKB1_`TZ7@ve87aKK?kB^P=#Uf!;#fjvLVSjHvpPwzDMo|>O z?-wE;AYscjALqH@OPEt|0EG$iAtC#GU@f8F=g0b#FimmeZG)>m9ZXOB=)}Z333WlV zQzey(SKc%*RC|3ZrX{)UnF)J+U@hUuT0WlBB^}#T#_H+g_Jh{`z4sDU-7ORyP)EUO zuL6eNS_J{G2ifm~pXhvlkkktesd&XXFIcDIoT?X0>7**Avl%Yfnz^IP1x#`FA|%dw z;mU$!%5fW5OE_TL1;X8yA^L%76lCoOW>JvJ7fhod(GScjVop84H5WB1&~62;Ir}{` z+Ir!3fors#NAUsv7b8671|3Gh(@hF$qv19|mz;c{UEfN{EdsMNO!@`0G)(mieZkXi zV4a3 zxucPzIo4czC7>>7u~?L|*-TG8F-wu6xz!wNu3br(xs*@i>FJ4?iWJRlJwA^>}`M?oYs? zD9ZVKj(`ZbA97){+4P%&^#hMdh=6Gc*haqAMaVG;5ilJA+sd~WuAp5t0TUP=Te>|atuOFkG1nDbg*uoQ5}W0_#a z{;^Enj1N}GJzmWLX7F}YFyr9mM7*923<{7jFQ^3D3Yb^)f@uZ(6>bTb6d)8LU|N9i zMKxfs{u}XCUEt69k1wkM)Ab+wfzTHxzcroC80caBH~djR8WW&v{xl%`1luvtVf341 zO^}A6D|W$c&?q3)Fm#37%Fcmm7&=J5S3vG%*o`hc!!=r#3{iorbf zl8T}Cs+Z1bI3xAunH37VG_EEs-z2l9D2f|SNs_F1SG}+MPE^GMrX;PRLxCsr2^tpI z@AE;zG1C*he1ptqI4_R6=on|dQ&q;Clpr4xLW1&rm5_8Cg?ytdWGGB1IFJz1l@AG# z4+#PJz8>3!cy_#8F3Z_$cGl3J4N$z5Sz8qi49(o%-=8hud_E6NzNt5j1?&|bXS3Pt z#X3hm{aN<-0+BGJrq(721C%e%;NOSdLrKX$Nf?rR$~@k+Q(2=2okB^;-z5x5KBe5` z)_XBl$+d)`$fqiosCQYF%mYtEJ=TVSZz{9ab9912yZ;5~L+fqZe8^ii9OX5Orw=RX zw&QA9B9fX93k-?Z_*JOjJR*)#7O@r&8|;tt1}QxPpiXnvc%E+GC@RMIx)9QAV5qf7 zYsHXdR8*IAY^B6exD0)NNJ{HjZNTeVsbu3%)e>@SDW!gPwPYBOT9NXmO51rgB*&yp nm0j)2O{%f~cl9$!ssHgCVy9DWnuW~g00000NkvXXu0mjfYE~d} diff --git a/templates/joystick/assets/Flat light joystick thumb.png b/templates/joystick/assets/Flat light joystick thumb.png deleted file mode 100644 index d21ac519cecca59c8b4df8ad0385a33b33c6130e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 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 Date: Mon, 20 Mar 2023 18:06:33 +0100 Subject: [PATCH 055/208] Fix missing cache clear --- scripts/deploy.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/deploy.js b/scripts/deploy.js index fbc4cd0..461cc4c 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -75,6 +75,8 @@ axios 'https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json', 'https://resources.gdevelop-app.com/in-app-tutorials/healthBar.json', 'https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/joystick.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json', ], }, { From eab8417b7f32ad7d15636416ab708020f92b3a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:08:17 +0100 Subject: [PATCH 056/208] Add new lesson about timer --- scripts/deploy.js | 2 + templates/joystick/game.json | 2 +- templates/plinkoMultiplier/game.json | 634 +++---------- templates/timer/assets/Fail.wav | Bin 0 -> 8864 bytes templates/timer/assets/Key_Filled.png | Bin 0 -> 1372 bytes .../timer/assets/Large Blue Hole_Unlocked.png | Bin 0 -> 2767 bytes .../timer/assets/LargeKeyHole-export.png | Bin 0 -> 3641 bytes templates/timer/assets/Pathway.png | Bin 0 -> 652 bytes templates/timer/assets/YouWin.wav | Bin 0 -> 47672 bytes templates/timer/game.json | 886 ++++++++++++++++++ tutorials/in-app/timer.json | 669 +++++++++++++ 11 files changed, 1672 insertions(+), 521 deletions(-) create mode 100644 templates/timer/assets/Fail.wav create mode 100644 templates/timer/assets/Key_Filled.png create mode 100644 templates/timer/assets/Large Blue Hole_Unlocked.png create mode 100644 templates/timer/assets/LargeKeyHole-export.png create mode 100644 templates/timer/assets/Pathway.png create mode 100644 templates/timer/assets/YouWin.wav create mode 100644 templates/timer/game.json create mode 100644 tutorials/in-app/timer.json diff --git a/scripts/deploy.js b/scripts/deploy.js index 461cc4c..71be28f 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -77,6 +77,8 @@ axios 'https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json', 'https://resources.gdevelop-app.com/in-app-tutorials/joystick.json', 'https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/timer.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/templates/timer/game.json', ], }, { diff --git a/templates/joystick/game.json b/templates/joystick/game.json index 6919846..1ed3924 100644 --- a/templates/joystick/game.json +++ b/templates/joystick/game.json @@ -18,7 +18,7 @@ "templateSlug": "", "useExternalSourceFiles": false, "version": "1.0.0", - "name": "JoystickLesson", + "name": "Joystick Lesson", "description": "A game example where you add a joystick to control the movement of a ship in space.", "author": "", "windowWidth": 720, diff --git a/templates/plinkoMultiplier/game.json b/templates/plinkoMultiplier/game.json index 19bc808..b45ed3e 100644 --- a/templates/plinkoMultiplier/game.json +++ b/templates/plinkoMultiplier/game.json @@ -10,7 +10,7 @@ "adaptGameResolutionAtRuntime": true, "folderProject": false, "orientation": "landscape", - "packageName": "com.example.plinko", + "packageName": "com.example.plinkoLesson", "pixelsRounding": false, "projectUuid": "4d3120d9-7219-4c0a-9f41-a60386d0430a", "scaleMode": "linear", @@ -18,7 +18,7 @@ "templateSlug": "plinko", "useExternalSourceFiles": false, "version": "1.0.0", - "name": "PlinkoOnboarding", + "name": "Plinko Lesson", "description": "In this game the player drops their pachinko ball in an effort to hit as many pegs as possible to accumulate the maximum number of points. This game exhibits a scoring system, a score multiplier, the physics options, the leaderboard system, and more.", "author": "", "windowWidth": 800, @@ -2371,9 +2371,7 @@ "type": { "value": "DepartScene" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -2398,71 +2396,43 @@ "type": { "value": "TextObject::String" }, - "parameters": [ - "ScoreMultiplier", - "=", - "\"\"" - ] + "parameters": ["ScoreMultiplier", "=", "\"\""] }, { "type": { "value": "CentreCamera" }, - "parameters": [ - "", - "Background", - "", - "\"Background\"", - "" - ] + "parameters": ["", "Background", "", "\"Background\"", ""] }, { "type": { "value": "TiledSpriteObject::SetColor" }, - "parameters": [ - "Background", - "\"233;178;178\"" - ] + "parameters": ["Background", "\"233;178;178\""] }, { "type": { "value": "TiledSpriteObject::XOffset" }, - "parameters": [ - "Background", - "-", - "100" - ] + "parameters": ["Background", "-", "100"] }, { "type": { "value": "TiledSpriteObject::SetOpacity" }, - "parameters": [ - "CloudLayer3", - "=", - "100" - ] + "parameters": ["CloudLayer3", "=", "100"] }, { "type": { "value": "TiledSpriteObject::SetColor" }, - "parameters": [ - "CloudLayer3", - "\"143;98;168\"" - ] + "parameters": ["CloudLayer3", "\"143;98;168\""] }, { "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Ball", - "Physics2", - "no" - ] + "parameters": ["Ball", "Physics2", "no"] } ] } @@ -2500,12 +2470,7 @@ "type": { "value": "Physics2::CollisionStarted" }, - "parameters": [ - "Ball", - "Physics2", - "Breakable_Pegs", - "" - ] + "parameters": ["Ball", "Physics2", "Breakable_Pegs", ""] } ], "actions": [ @@ -2513,11 +2478,7 @@ "type": { "value": "ModVarGlobal" }, - "parameters": [ - "Score", - "+", - "1" - ] + "parameters": ["Score", "+", "1"] }, { "type": { @@ -2552,40 +2513,25 @@ "type": { "value": "Opacity" }, - "parameters": [ - "Breakable_Pegs", - "-", - "30" - ] + "parameters": ["Breakable_Pegs", "-", "30"] }, { "type": { "value": "ModVarObjet" }, - "parameters": [ - "Ball", - "Pitch", - "+", - "0.05" - ] + "parameters": ["Ball", "Pitch", "+", "0.05"] }, { "type": { "value": "ResetTimer" }, - "parameters": [ - "", - "\"Ball_Pitch\"" - ] + "parameters": ["", "\"Ball_Pitch\""] }, { "type": { "value": "ChangeColor" }, - "parameters": [ - "Breakable_Pegs", - "\"114;114;114\"" - ] + "parameters": ["Breakable_Pegs", "\"114;114;114\""] } ], "events": [ @@ -2609,11 +2555,7 @@ "type": { "value": "Opacity" }, - "parameters": [ - "Breakable_Pegs", - "<", - "180" - ] + "parameters": ["Breakable_Pegs", "<", "180"] } ], "actions": [ @@ -2621,10 +2563,7 @@ "type": { "value": "Delete" }, - "parameters": [ - "Breakable_Pegs", - "" - ] + "parameters": ["Breakable_Pegs", ""] }, { "type": { @@ -2642,11 +2581,7 @@ "type": { "value": "ChangePlan" }, - "parameters": [ - "PegDeath_Particle", - "=", - "0" - ] + "parameters": ["PegDeath_Particle", "=", "0"] } ] } @@ -2672,12 +2607,7 @@ "type": { "value": "Physics2::CollisionStarted" }, - "parameters": [ - "Ball", - "Physics2", - "Peg_Bigger", - "" - ] + "parameters": ["Ball", "Physics2", "Peg_Bigger", ""] } ], "actions": [ @@ -2685,23 +2615,13 @@ "type": { "value": "ModVarGlobal" }, - "parameters": [ - "Score", - "+", - "2" - ] + "parameters": ["Score", "+", "2"] }, { "type": { "value": "PlaySound" }, - "parameters": [ - "", - "ClickerBeep.wav", - "", - "30", - "0.8" - ] + "parameters": ["", "ClickerBeep.wav", "", "30", "0.8"] }, { "type": { @@ -2724,21 +2644,13 @@ "type": { "value": "ModVarObjet" }, - "parameters": [ - "Ball", - "Pitch", - "+", - "0.05" - ] + "parameters": ["Ball", "Pitch", "+", "0.05"] }, { "type": { "value": "ResetTimer" }, - "parameters": [ - "", - "\"Ball_Pitch\"" - ] + "parameters": ["", "\"Ball_Pitch\""] }, { "type": { @@ -2756,11 +2668,7 @@ "type": { "value": "ChangePlan" }, - "parameters": [ - "PegDeath_Particle", - "=", - "0" - ] + "parameters": ["PegDeath_Particle", "=", "0"] }, { "type": { @@ -2843,12 +2751,7 @@ "type": { "value": "CompareTimer" }, - "parameters": [ - "", - "\"Ball_Pitch\"", - ">", - "0.5" - ] + "parameters": ["", "\"Ball_Pitch\"", ">", "0.5"] }, { "type": { @@ -2862,12 +2765,7 @@ "type": { "value": "ModVarObjet" }, - "parameters": [ - "Ball", - "Pitch", - "=", - "1" - ] + "parameters": ["Ball", "Pitch", "=", "1"] } ] }, @@ -2891,11 +2789,7 @@ "type": { "value": "PosY" }, - "parameters": [ - "Ball", - ">", - "1000" - ] + "parameters": ["Ball", ">", "1000"] } ], "actions": [ @@ -2903,31 +2797,19 @@ "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Ball", - "Physics2", - "no" - ] + "parameters": ["Ball", "Physics2", "no"] }, { "type": { "value": "MettreY" }, - "parameters": [ - "Ball", - "=", - "120" - ] + "parameters": ["Ball", "=", "120"] }, { "type": { "value": "SetObjectVariableAsBoolean" }, - "parameters": [ - "Ball", - "Dropped", - "False" - ] + "parameters": ["Ball", "Dropped", "False"] }, { "type": { @@ -2955,12 +2837,7 @@ "type": { "value": "VarObjet" }, - "parameters": [ - "Ball", - "Lives", - ">", - "0" - ] + "parameters": ["Ball", "Lives", ">", "0"] } ], "actions": [ @@ -2968,13 +2845,7 @@ "type": { "value": "PlaySound" }, - "parameters": [ - "", - "BallRespawn.wav", - "", - "45", - "1.2" - ] + "parameters": ["", "BallRespawn.wav", "", "45", "1.2"] } ] }, @@ -2985,12 +2856,7 @@ "type": { "value": "VarObjet" }, - "parameters": [ - "Ball", - "Lives", - "<", - "1" - ] + "parameters": ["Ball", "Lives", "<", "1"] } ], "actions": [ @@ -2998,19 +2864,13 @@ "type": { "value": "Delete" }, - "parameters": [ - "Ball", - "" - ] + "parameters": ["Ball", ""] }, { "type": { "value": "ShowLayer" }, - "parameters": [ - "", - "\"GameOver\"" - ] + "parameters": ["", "\"GameOver\""] } ] } @@ -3036,11 +2896,7 @@ "type": { "value": "ObjectVariableAsBoolean" }, - "parameters": [ - "Ball", - "Dropped", - "" - ] + "parameters": ["Ball", "Dropped", ""] } ], "actions": [ @@ -3048,11 +2904,7 @@ "type": { "value": "MettreX" }, - "parameters": [ - "Ball", - "=", - "clamp(48, MouseX(), 752)" - ] + "parameters": ["Ball", "=", "clamp(48, MouseX(), 752)"] } ], "events": [ @@ -3063,10 +2915,7 @@ "type": { "value": "MouseButtonReleased" }, - "parameters": [ - "", - "Left" - ] + "parameters": ["", "Left"] }, { "type": { @@ -3080,44 +2929,25 @@ "type": { "value": "SetObjectVariableAsBoolean" }, - "parameters": [ - "Ball", - "Dropped", - "True" - ] + "parameters": ["Ball", "Dropped", "True"] }, { "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Ball", - "Physics2", - "yes" - ] + "parameters": ["Ball", "Physics2", "yes"] }, { "type": { "value": "PlaySound" }, - "parameters": [ - "", - "ClickerBeep.wav", - "", - "50", - "0.8" - ] + "parameters": ["", "ClickerBeep.wav", "", "50", "0.8"] }, { "type": { "value": "ModVarObjet" }, - "parameters": [ - "Ball", - "Lives", - "-", - "1" - ] + "parameters": ["Ball", "Lives", "-", "1"] }, { "type": { @@ -3208,10 +3038,7 @@ "type": { "value": "LayerVisible" }, - "parameters": [ - "", - "\"GameOver\"" - ] + "parameters": ["", "\"GameOver\""] } ], "actions": [], @@ -3231,13 +3058,7 @@ "type": { "value": "PlaySound" }, - "parameters": [ - "", - "GameOver.wav", - "", - "40", - "1" - ] + "parameters": ["", "GameOver.wav", "", "40", "1"] }, { "type": { @@ -3259,20 +3080,13 @@ "type": { "value": "Opacity" }, - "parameters": [ - "Darkening", - "=", - "220" - ] + "parameters": ["Darkening", "=", "220"] }, { "type": { "value": "ChangeLayer" }, - "parameters": [ - "Score", - "\"Score\"" - ] + "parameters": ["Score", "\"Score\""] } ] }, @@ -3296,12 +3110,7 @@ "type": { "value": "SourisSurObjet" }, - "parameters": [ - "SubmitScore", - "", - "", - "" - ] + "parameters": ["SubmitScore", "", "", ""] } ], "actions": [], @@ -3321,10 +3130,7 @@ "type": { "value": "TextObject::ChangeColor" }, - "parameters": [ - "SubmitScore", - "\"255;235;0\"" - ] + "parameters": ["SubmitScore", "\"255;235;0\""] } ] }, @@ -3335,10 +3141,7 @@ "type": { "value": "MouseButtonReleased" }, - "parameters": [ - "", - "Left" - ] + "parameters": ["", "Left"] }, { "type": { @@ -3373,21 +3176,13 @@ "type": { "value": "ModVarGlobal" }, - "parameters": [ - "Score", - "=", - "0" - ] + "parameters": ["Score", "=", "0"] }, { "type": { "value": "ModVarGlobal" }, - "parameters": [ - "ScoreDisplay", - "=", - "0" - ] + "parameters": ["ScoreDisplay", "=", "0"] } ] } @@ -3401,12 +3196,7 @@ "inverted": true, "value": "SourisSurObjet" }, - "parameters": [ - "SubmitScore", - "", - "", - "" - ] + "parameters": ["SubmitScore", "", "", ""] } ], "actions": [ @@ -3414,10 +3204,7 @@ "type": { "value": "TextObject::ChangeColor" }, - "parameters": [ - "SubmitScore", - "\"255;255;255\"" - ] + "parameters": ["SubmitScore", "\"255;255;255\""] } ] }, @@ -3441,12 +3228,7 @@ "type": { "value": "SourisSurObjet" }, - "parameters": [ - "RestartGame", - "", - "", - "" - ] + "parameters": ["RestartGame", "", "", ""] } ], "actions": [], @@ -3466,10 +3248,7 @@ "type": { "value": "TextObject::ChangeColor" }, - "parameters": [ - "RestartGame", - "\"255;235;0\"" - ] + "parameters": ["RestartGame", "\"255;235;0\""] } ] }, @@ -3480,10 +3259,7 @@ "type": { "value": "MouseButtonReleased" }, - "parameters": [ - "", - "Left" - ] + "parameters": ["", "Left"] }, { "type": { @@ -3497,31 +3273,19 @@ "type": { "value": "ModVarGlobal" }, - "parameters": [ - "ScoreDisplay", - "=", - "0" - ] + "parameters": ["ScoreDisplay", "=", "0"] }, { "type": { "value": "ModVarGlobal" }, - "parameters": [ - "Score", - "=", - "0" - ] + "parameters": ["Score", "=", "0"] }, { "type": { "value": "Scene" }, - "parameters": [ - "", - "\"GameScene\"", - "" - ] + "parameters": ["", "\"GameScene\"", ""] } ] } @@ -3535,12 +3299,7 @@ "inverted": true, "value": "SourisSurObjet" }, - "parameters": [ - "RestartGame", - "", - "", - "" - ] + "parameters": ["RestartGame", "", "", ""] } ], "actions": [ @@ -3548,10 +3307,7 @@ "type": { "value": "TextObject::ChangeColor" }, - "parameters": [ - "RestartGame", - "\"255;255;255\"" - ] + "parameters": ["RestartGame", "\"255;255;255\""] } ] }, @@ -3583,11 +3339,7 @@ "type": { "value": "Scene" }, - "parameters": [ - "", - "\"Leaderboard\"", - "" - ] + "parameters": ["", "\"Leaderboard\"", ""] } ] } @@ -3613,9 +3365,7 @@ "type": { "value": "DepartScene" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -3839,11 +3589,7 @@ "type": { "value": "Scene" }, - "parameters": [ - "", - "\"GameScene\"", - "no" - ] + "parameters": ["", "\"GameScene\"", "no"] } ] } @@ -3922,9 +3668,7 @@ "rotate", "angle" ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], + "authorIds": ["gqDaZjCfevOOxBYkK6zlhtZnXCg1"], "dependencies": [], "eventsFunctions": [], "eventsBasedBehaviors": [ @@ -4088,9 +3832,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"ShakeForever\"" - ] + "parameters": ["\"ShakeForever\""] } ], "actions": [ @@ -5857,11 +5599,7 @@ "type": { "value": "ShakeObject::ShakeObject_PositionAngle::IsShaking" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -5921,9 +5659,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -6118,9 +5854,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"ShakeForever\"" - ] + "parameters": ["\"ShakeForever\""] } ], "actions": [ @@ -8270,11 +8004,7 @@ "type": { "value": "ShakeObject::ShakeObject_PositionAngleScale::IsShaking" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -8335,9 +8065,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -8460,23 +8188,13 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCenterPointX" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] }, { "type": { "value": "RectangularMovement::RectangularMovement::PropertyCenterPointY" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "actions": [ @@ -8521,10 +8239,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyConstantSpeed" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [], @@ -8617,10 +8332,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -8643,10 +8355,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -8914,10 +8623,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -8941,10 +8647,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9212,10 +8915,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9239,10 +8939,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9327,10 +9024,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyConstantSpeed" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [], @@ -9423,10 +9117,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9449,10 +9140,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9576,10 +9264,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9604,10 +9289,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9858,10 +9540,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -9886,10 +9565,7 @@ "inverted": true, "value": "RectangularMovement::RectangularMovement::PropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -10088,9 +9764,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyProgressY()" - ] + "parameters": ["Object.Behavior::PropertyProgressY()"] } ] } @@ -10128,9 +9802,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyProgressX()" - ] + "parameters": ["Object.Behavior::PropertyProgressX()"] } ] } @@ -10208,9 +9880,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyVerticalSpeed()" - ] + "parameters": ["Object.Behavior::PropertyVerticalSpeed()"] } ] } @@ -10328,9 +9998,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyCenterPointX()" - ] + "parameters": ["Object.Behavior::PropertyCenterPointX()"] } ] } @@ -10368,9 +10036,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyCenterPointY()" - ] + "parameters": ["Object.Behavior::PropertyCenterPointY()"] } ] } @@ -10677,9 +10343,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -10687,11 +10351,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] }, @@ -10703,9 +10363,7 @@ "inverted": true, "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -10713,11 +10371,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyCounterClockwise" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] } @@ -10756,9 +10410,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -10766,11 +10418,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyConstantSpeed" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] }, @@ -10782,9 +10430,7 @@ "inverted": true, "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -10792,11 +10438,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyConstantSpeed" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] } @@ -10836,34 +10478,19 @@ "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyProgressX" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] }, { "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyProgressY" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] }, { "type": { "value": "RectangularMovement::RectangularMovement::SetPropertyRectangularCounter" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -10897,12 +10524,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Down\"" - ] + "parameters": ["Object", "Behavior", "=", "\"Down\""] } ], "actions": [ @@ -10910,9 +10532,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -10946,12 +10566,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Up\"" - ] + "parameters": ["Object", "Behavior", "=", "\"Up\""] } ], "actions": [ @@ -10959,9 +10574,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -10995,12 +10608,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Left\"" - ] + "parameters": ["Object", "Behavior", "=", "\"Left\""] } ], "actions": [ @@ -11008,9 +10616,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11044,12 +10650,7 @@ "type": { "value": "RectangularMovement::RectangularMovement::PropertyCurrentDirection" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Right\"" - ] + "parameters": ["Object", "Behavior", "=", "\"Right\""] } ], "actions": [ @@ -11057,9 +10658,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11197,12 +10796,7 @@ "label": "Current direction the object is moving", "description": "", "group": "", - "extraInformation": [ - "Left", - "Right", - "Up", - "Down" - ], + "extraInformation": ["Left", "Right", "Up", "Down"], "hidden": true, "name": "CurrentDirection" } @@ -11215,4 +10809,4 @@ ], "externalLayouts": [], "externalSourceFiles": [] -} \ No newline at end of file +} diff --git a/templates/timer/assets/Fail.wav b/templates/timer/assets/Fail.wav new file mode 100644 index 0000000000000000000000000000000000000000..46d30f5f66cb6881b7ba8b70125149e8523ef952 GIT binary patch literal 8864 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 VEoHbm#bW>f002ovPDHLkV1g757JL8z literal 0 HcmV?d00001 diff --git a/templates/timer/assets/LargeKeyHole-export.png b/templates/timer/assets/LargeKeyHole-export.png new file mode 100644 index 0000000000000000000000000000000000000000..3e1a0d6ce7c563911dbafa37738431733e698418 GIT binary patch literal 3641 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 literal 0 HcmV?d00001 diff --git a/templates/timer/assets/Pathway.png b/templates/timer/assets/Pathway.png new file mode 100644 index 0000000000000000000000000000000000000000..ab62afd14f739cc94ac7ae166de6295a68bb2b29 GIT binary patch literal 652 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I8A$FCoGuTfSkfJR9T^xl_SO6joXo($s1V>2 z;%YVJn%&&nc5`ky&c1Cw_qP3<+qScA14V!gn;AFl=iRZJbJMuv3`k_|O`swF?}n{j z(y6DXe|+EE|5pt^KHXiCpE!4Vy_bjc{~NY8)|O2**^h5*{QodNEh+r}{pA1e*8YFJ z;QuYJ|Cd$&KdJuztmE50uKyP#{=b~^dX4!1b39j1FF#zawYxz1|A(D-r)fll`cCL7 zeY#k#uOj@zR)OPHy0<237qxYy^e)(2sQO@*YS@$=4fXjy53^nG)t^&nzcWv9YnEK> z#5MjijvTGj-e0V?JxAeegVEwV<98cH+G~( z!Sen2{_D@%&%dw#KAyjRKf`}2gZw_x??Ag&d%8G=RLpsM&XAEof#<*m&7=EyRNkCm tbYHAcY-hfnd3MvP1zIb(Rt*A5PfKf;tY47GOQ5qEJYD@<);T3K0RY(5T513Q literal 0 HcmV?d00001 diff --git a/templates/timer/assets/YouWin.wav b/templates/timer/assets/YouWin.wav new file mode 100644 index 0000000000000000000000000000000000000000..28ef42595ff24b30a049dc219c2ebfd492940244 GIT binary patch literal 47672 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 Date: Wed, 22 Mar 2023 10:39:21 +0100 Subject: [PATCH 057/208] Update count --- __tests__/post-build.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index e91f270..c0cdb36 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -23,7 +23,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders.length).toMatchInlineSnapshot(`5`); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`6`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { From 9d54ea96308876430303c3a8167e72cd1c47f6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Wed, 22 Mar 2023 11:18:04 +0100 Subject: [PATCH 058/208] typo --- tutorials/in-app/timer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 6aaa167..17648a8 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -618,7 +618,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, final detail! If we leave it like this, the score text will display the decimals of our timer and we only want the seconds!\n\nLet's **round** that number.\n\nLet's add use the function `round()` around the value so that we round the timer value. The result will look like this:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "en": "Alright, final detail! If we leave it like this, the score text will display the decimals of our timer and we only want the seconds!\n\nLet's **round** that number.\n\nLet's use the function `round()` around the value so that we round the timer value. The result will look like this:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", "fr": "Bien, dernier détail ! Si nous laissons comme ça, le texte du score affichera les décimales de notre chronomètre et nous ne voulons que les secondes !\n\n**Arrondissons** ce nombre.\n\nAjoutons la fonction `round()` autour de la valeur afin que nous puissions arrondir la valeur du chronomètre. Le résultat ressemblera à ceci :\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", "es": "¡Bien, detalle final! Si lo dejamos así, el texto de la puntuación mostrará los decimales de nuestro temporizador y solo queremos los segundos.\n\n¡**Redondeemos** ese número!\n\nAgreguemos la función `round()` alrededor del valor para que podamos redondear el valor del temporizador. El resultado se verá así:\n\n`\"ToString(round( TimerElapsedTime(\"GameTimer\")))`", "pt": "Bem, detalhe final! Se deixarmos assim, o texto da pontuação exibirá os decimais do nosso cronômetro e só queremos os segundos!\n\nVamos **arredondar** esse número.\n\nVamos adicionar a função `round()` ao redor do valor para que possamos arredondar o valor do cronômetro. O resultado será assim:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", From 1a7ff1bc24a972db71de336ffb7698a5ad44b450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 23 Mar 2023 11:54:01 +0100 Subject: [PATCH 059/208] Improve lessons overall so they can be done on mobile --- tutorials/in-app/cameraParallax.json | 149 +- tutorials/in-app/flingGame.json | 1945 ++++++++++++++++-------- tutorials/in-app/healthBar.json | 72 +- tutorials/in-app/joystick.json | 60 +- tutorials/in-app/plinkoMultiplier.json | 185 ++- tutorials/in-app/timer.json | 47 +- 6 files changed, 1762 insertions(+), 696 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 4facd9d..f3874b8 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -83,8 +83,7 @@ "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**" } - }, - "placement": "right" + } } }, { @@ -120,7 +119,8 @@ "pt": "Abra a **loja de extensões**", "th": "เปิด **ร้านค้า extension**" } - } + }, + "placement": "top" }, "isOnClosableDialog": true }, @@ -176,7 +176,7 @@ "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ" } }, - "placement": "left" + "placement": "top" }, "isOnClosableDialog": true }, @@ -195,7 +195,45 @@ "th": "ปิดหน้าต่างนี้" } } - } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close", + "nextStepTrigger": { + "absenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's close the menu.", + "fr": "Fermons le menu.", + "es": "Cerramos el menú.", + "pt": "Vamos fechar o menu.", + "th": "ปิดเมนู" + } + } + }, + "skippable": true + }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true }, { "elementToHighlightId": "objectInObjectsList:player", @@ -203,7 +241,7 @@ "presenceOfElement": "#object-editor-dialog" }, "tooltip": { - "placement": "left", + "placement": "top", "description": { "messageByLocale": { "en": "Let's attach the Camera to our player with the help of **behaviors**:\n\nclick on the 3 dot menu, or right click on **$(player)**, and select **Edit behaviors**.", @@ -212,6 +250,15 @@ "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**" } + }, + "touchDescription": { + "messageByLocale": { + "en": "Let's attach the Camera to our player with the help of **behaviors**:\n\nSelect then long-press **$(player)**, and select **Edit behaviors**.", + "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nSélectionnez puis appuyez longuement sur **$(player)** et sélectionnez **Modifier les comportements**.", + "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nSelecciona y pulsa largo **$(player)** y selecciona **Editar comportamientos**.", + "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nSelecione e pressione por um longo tempo **$(player)** e selecione **Editar comportamentos**.", + "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**" + } } } }, @@ -376,7 +423,7 @@ "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" } }, - "placement": "left" + "placement": "top" } }, { @@ -397,6 +444,25 @@ "placement": "top" } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "objectInObjectsList:farBackground", "nextStepTrigger": { @@ -412,7 +478,16 @@ "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง" } }, - "placement": "left" + "touchDescription": { + "messageByLocale": { + "en": "Perfect! Now let's add **$(farBackground)** to our game by **selecting** then **dragging** it to the center.", + "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le **sélectionnant** puis en le faisant glisser au centre.", + "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego **seleccionándolo** y luego arrastrándolo al centro.", + "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, **selecionando** e depois arrastando-o para o centro.", + "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดย **เลือก** แล้ว **ลาก** มันไปวางตรงกลาง" + } + }, + "placement": "top" } }, { @@ -431,11 +506,11 @@ "standalone": true, "description": { "messageByLocale": { - "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nResize the **$(farBackground)** object so it covers the whole camera view\n\nWhen you're done, click below.", - "fr": "Vous voyez le **cadre rectangulaire noir** au milieu de la scène ? C'est la **vue de la caméra**. Il encadre la partie du jeu que le joueur verra.\n\nRedimensionnez l'objet **$(farBackground)** afin qu'il couvre toute la vue de la caméra\n\nQuand vous aurez terminé, cliquez ci-dessous.", - "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.\n\nCuando hayas terminado, haz clic abajo.", - "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo.", - "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" + "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nResize the **$(farBackground)** object so it covers the whole camera view.", + "fr": "Vous voyez le **cadre rectangulaire noir** au milieu de la scène ? C'est la **vue de la caméra**. Il encadre la partie du jeu que le joueur verra.\n\nRedimensionnez l'objet **$(farBackground)** afin qu'il couvre toute la vue de la caméra.", + "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.", + "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.", + "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด" } }, "placement": "top", @@ -444,6 +519,25 @@ } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "objectInObjectsList:midBackground", "nextStepTrigger": { @@ -459,7 +553,16 @@ "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene" } }, - "placement": "left" + "touchDescription": { + "messageByLocale": { + "en": "Let's do the same with another background to give a parallax effect! **Select**, then **drag** **$(midBackground)** from the menu to the canvas.", + "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! **Sélectionnez**, puis **glissez** **$(midBackground)** depuis le menu vers la scène.", + "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! **Seleccione**, luego **arrastre** **$(midBackground)** desde el menú a la escena.", + "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! **Selecione**, em seguida, **arraste** **$(midBackground)** do menu para a cena.", + "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! **เลือก** แล้ว **ลาก** **$(midBackground)** จากเมนูไปยัง scene" + } + }, + "placement": "top" } }, { @@ -478,11 +581,11 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black rectangle.\n\nWhen you're done, click below.", - "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le rectangle noir.\n\nQuand vous aurez terminé, cliquez ci-dessous.", - "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.\n\nCuando haya terminado, haga clic abajo.", - "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.\n\nQuando terminar, clique abaixo.", - "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" + "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black rectangle.", + "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le rectangle noir.", + "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.", + "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.", + "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด" } }, "placement": "top", @@ -578,7 +681,7 @@ "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -597,7 +700,7 @@ "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`" } }, - "placement": "top" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -687,7 +790,7 @@ "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -706,7 +809,7 @@ "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`" } }, - "placement": "top" + "placement": "bottom" }, "isOnClosableDialog": true }, diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 8635674..485efe5 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -53,32 +53,34 @@ "scene": "startScene" } }, - "availableLocales": [ - "en", - "fr-FR", - "th-TH" - ], + "availableLocales": ["en", "fr", "es", "pt", "th"], "endDialog": { "content": [ { "messageByLocale": { "en": "# You've finished your Fling Game!", - "fr-FR": "# Votre jeu est terminé !", - "th-TH": "เกม Fling ของคุณเสร็จแล้ว" + "fr": "# Votre jeu est terminé !", + "es": "# ¡Has terminado tu juego Fling!", + "pt": "# Você terminou seu jogo Fling!", + "th": "เกม Fling ของคุณเสร็จแล้ว" } }, { "messageByLocale": { "en": "Share it with your friends and see who gets the highest score!", - "fr-FR": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !", - "th-TH": "แชร์กับเพื่อนของคุณ และมาลองดูกันว่าใครจะทำคะแนนได้สูงที่สุด!" + "fr": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !", + "es": "¡Compártelo con tus amigos y ve quién obtiene la puntuación más alta!", + "pt": "Compartilhe com seus amigos e veja quem consegue a maior pontuação!", + "th": "แชร์กับเพื่อนของคุณ และมาลองดูกันว่าใครจะทำคะแนนได้สูงที่สุด!" } }, { "messageByLocale": { "en": "Ready to make a new game? Click to discover what GDevelop can do!", - "fr-FR": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !", - "th-TH": "พร้อมสร้างเกมใหม่แล้ว? คลิกเพื่อสำรวจดูว่า GDevelop สามารถทำอะไรได้บ้าง" + "fr": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !", + "es": "¿Listo para crear un nuevo juego? ¡Haz clic para descubrir lo que puede hacer GDevelop!", + "pt": "Pronto para criar um novo jogo? Clique para descobrir o que o GDevelop pode fazer!", + "th": "พร้อมสร้างเกมใหม่แล้ว? คลิกเพื่อสำรวจดูว่า GDevelop สามารถทำอะไรได้บ้าง" } }, { @@ -100,8 +102,10 @@ "description": { "messageByLocale": { "en": "Head over to the **Build section**.", - "fr-FR": "Commençons par aller dans l'onglet **Créer**.", - "th-TH": "ไปยัง **Build section**" + "fr": "Commençons par aller dans l'onglet **Créer**.", + "es": "Vamos a la sección **Crear**.", + "pt": "Vamos para a seção **Criar**.", + "th": "ไปยัง **Build section**" } }, "placement": "right" @@ -116,8 +120,10 @@ "description": { "messageByLocale": { "en": "Let's create a new **project** for this tutorial!", - "fr-FR": "Créons un nouveau **projet** pour ce tutoriel.", - "th-TH": "มาสร้าง **โปรเจกต์** ใหม่ สำหรับบทเรียนนี้กันเถอะ!" + "fr": "Créons un nouveau **projet** pour ce tutoriel.", + "es": "¡Vamos a crear un nuevo **proyecto** para este tutorial!", + "pt": "Vamos criar um novo **projeto** para este tutorial!", + "th": "มาสร้าง **โปรเจกต์** ใหม่ สำหรับบทเรียนนี้กันเถอะ!" } } } @@ -131,8 +137,10 @@ "description": { "messageByLocale": { "en": "Let's go!", - "fr-FR": "C'est parti !", - "th-TH": "ไปกันเลย!" + "fr": "C'est parti !", + "es": "¡Vamos!", + "pt": "Vamos!", + "th": "ไปกันเลย!" } } }, @@ -151,8 +159,10 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-FR": "Ouvrez le **Gestionnaire de projet**.", - "th-TH": "เปิด **โปรเจกต์เมเนเจอร์**" + "fr": "Ouvrez le **Gestionnaire de projet**.", + "es": "Abre el **Gestor de proyectos**.", + "pt": "Abra o **Gerenciador de projetos**.", + "th": "เปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -167,8 +177,10 @@ "description": { "messageByLocale": { "en": "Open the **Game Settings** tab.", - "fr-FR": "Ouvrez les **Paramètres du jeu**.", - "th-TH": "เปิดแท็บ **ตั้งค่าเกม**" + "fr": "Ouvrez les **Paramètres du jeu**.", + "es": "Abre la pestaña **Configuración del juego**.", + "pt": "Abra a guia **Configurações do jogo**.", + "th": "เปิดแท็บ **ตั้งค่าเกม**" } } }, @@ -184,8 +196,10 @@ "description": { "messageByLocale": { "en": "Open the game **properties**.", - "fr-FR": "Ouvrez les **Propriétés** du jeu.", - "th-TH": "เปิด **คุณสมบัติ** ของเกม" + "fr": "Ouvrez les **Propriétés** du jeu.", + "es": "Abre las **Propiedades** del juego.", + "pt": "Abra as **Propriedades** do jogo.", + "th": "เปิด **คุณสมบัติ** ของเกม" } } }, @@ -194,15 +208,17 @@ { "elementToHighlightId": "#game-resolution-width", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "1280" }, "deprecated": true, "tooltip": { "description": { "messageByLocale": { "en": "Change the width to **1280** pixels.", - "fr-FR": "Définissez une largeur de **1280** pixels.", - "th-TH": "เปลี่ยนความกว้างเป็น **1280** พิกเซล" + "fr": "Définissez une largeur de **1280** pixels.", + "es": "Cambia el ancho a **1280** píxeles.", + "pt": "Mude a largura para **1280** pixels.", + "th": "เปลี่ยนความกว้างเป็น **1280** พิกเซล" } } }, @@ -211,15 +227,17 @@ { "elementToHighlightId": "#game-resolution-height", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "720" }, "deprecated": true, "tooltip": { "description": { "messageByLocale": { "en": "Change the height to **720** pixels.", - "fr-FR": "Et une hauteur de **720** pixels.", - "th-TH": "เปลี่ยนความสูงเป็น **720** พิกเซล" + "fr": "Et une hauteur de **720** pixels.", + "es": "Cambia la altura a **720** píxeles.", + "pt": "Mude a altura para **720** pixels.", + "th": "เปลี่ยนความสูงเป็น **720** พิกเซล" } } }, @@ -234,8 +252,10 @@ "description": { "messageByLocale": { "en": "Set this to **no changes to the game size**.", - "fr-FR": "Choisissez l'option **Aucune modification de la taille du jeu**.", - "th-TH": "ตั้งค่าเป็น **ไม่เปลี่ยนแปลงขนาดของเกม**" + "fr": "Choisissez l'option **Aucune modification de la taille du jeu**.", + "es": "Establece esto en **No hay cambios en el tamaño del juego**.", + "pt": "Defina isso como **Nenhuma alteração no tamanho do jogo**.", + "th": "ตั้งค่าเป็น **ไม่เปลี่ยนแปลงขนาดของเกม**" } } }, @@ -250,12 +270,33 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "On a terminé.", - "th-TH": "เสร็จแล้ว" + "fr": "On a terminé.", + "es": "Ya hemos terminado.", + "pt": "Estamos prontos.", + "th": "เสร็จแล้ว" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForBorder", "elementToHighlightId": "#add-new-object-button", @@ -267,8 +308,10 @@ "description": { "messageByLocale": { "en": "First, let's find a border for our **scene**.", - "fr-FR": "Commençons par trouver une bordure à notre **scène**.", - "th-TH": "ขั้นแรก หาขอบเขตของ **scene**" + "fr": "Commençons par trouver une bordure à notre **scène**.", + "es": "Primero, busquemos un borde para nuestra **escena**.", + "pt": "Primeiro, vamos encontrar uma borda para nossa **cena**.", + "th": "ขั้นแรก หาขอบเขตของ **scene**" } } } @@ -282,8 +325,9 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", - "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "es": "Vamos a elegir un **objeto** de la tienda de recursos.", + "th": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -300,15 +344,19 @@ "title": { "messageByLocale": { "en": "We're looking for a tiled sprite that we can resize easily", - "fr-FR": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner", - "th-TH": "เรากำลังมองหา tiled sprite ที่สามารถปรับขนาดได้ง่าย" + "fr": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner", + "es": "Buscamos un sprite mosaico que podamos redimensionar fácilmente", + "pt": "Estamos procurando por um sprite em mosaico que possamos redimensionar facilmente", + "th": "เรากำลังมองหา tiled sprite ที่สามารถปรับขนาดได้ง่าย" } }, "description": { "messageByLocale": { "en": "Tip: search for “**tiled sprite**”.", - "fr-FR": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”.", - "th-TH": "แนะนำ: ค้นหาเป็นภาษาอังกฤษ “**tiled sprite**”" + "fr": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”.", + "es": "Consejo: busca “**tiled sprite**”.", + "pt": "Dica: procure por “**tiled sprite**”.", + "th": "แนะนำ: ค้นหาเป็นภาษาอังกฤษ “**tiled sprite**”" } } }, @@ -332,8 +380,10 @@ "description": { "messageByLocale": { "en": "Add this asset to your project.", - "fr-FR": "Ajoutez cette ressource à votre projet.", - "th-TH": "เพิ่ม asset ไปยังโปรเจกต์ของคุณ" + "fr": "Ajoutez cette ressource à votre projet.", + "es": "Agrega este recurso a tu proyecto.", + "pt": "Adicione este recurso ao seu projeto.", + "th": "เพิ่ม asset ไปยังโปรเจกต์ของคุณ" } } }, @@ -352,8 +402,10 @@ "description": { "messageByLocale": { "en": "Let's add the $(border) to our game!", - "fr-FR": "Ajoutons $(border) à notre projet !", - "th-TH": "มาใส่ $(border) ในเกมกันเถอะ!" + "fr": "Ajoutons $(border) à notre projet !", + "es": "¡Agreguemos $(border) a nuestro juego!", + "pt": "Vamos adicionar $(border) ao nosso jogo!", + "th": "มาใส่ $(border) ในเกมกันเถอะ!" } } } @@ -367,8 +419,10 @@ "description": { "messageByLocale": { "en": "Drag $(border) from the menu to the canvas.", - "fr-FR": "Faites glisser $(border) du menu au canvas.", - "th-TH": "ลาก $(border) จากเมนูไปยังแคนวาส" + "fr": "Faites glisser $(border) du menu au canvas.", + "es": "Arrastra $(border) desde el menú al lienzo.", + "pt": "Arraste $(border) do menu para o canvas.", + "th": "ลาก $(border) จากเมนูไปยังแคนวาส" } }, "placement": "left" @@ -379,8 +433,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "Ya terminé", + "pt": "Terminei", + "th": "เสร็จแล้ว" } } }, @@ -389,8 +445,10 @@ "description": { "messageByLocale": { "en": "Place and resize at least 4 instances of $(border) to create a closed frame around the screen ($(instancesCount:border)/4).", - "fr-FR": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4).", - "th-TH": "วางและปรับขนาดอย่างน้อย 4 อินสแตนซ์ ของ $(border) เพื่อสร้างกรอบรอบหน้าจอ ($(instancesCount:border)/4)" + "fr": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4).", + "es": "Coloca y redimensiona al menos 4 instancias de $(border) para crear un marco cerrado alrededor de la pantalla ($(instancesCount:border)/4).", + "pt": "Coloque e redimensione pelo menos 4 instâncias de $(border) para criar um quadro fechado ao redor da tela ($(instancesCount:border)/4).", + "th": "วางและปรับขนาดอย่างน้อย 4 อินสแตนซ์ ของ $(border) เพื่อสร้างกรอบรอบหน้าจอ ($(instancesCount:border)/4)" } }, "placement": "top", @@ -399,6 +457,25 @@ } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForProjectile", "elementToHighlightId": "#add-new-object-button", @@ -410,8 +487,10 @@ "description": { "messageByLocale": { "en": "Now let's find an **object** that we can throw.", - "fr-FR": "Maintenant, trouvons un **objet** que nous allons lancer.", - "th-TH": "ทีนี้เราจะหา **วัตถุ** ที่เราจะใช้สำหรับโยน" + "fr": "Maintenant, trouvons un **objet** que nous allons lancer.", + "es": "Ahora, busquemos un **objeto** que podamos lanzar.", + "pt": "Agora, vamos encontrar um **objeto** que possamos jogar.", + "th": "ทีนี้เราจะหา **วัตถุ** ที่เราจะใช้สำหรับโยน" } } } @@ -425,8 +504,10 @@ "description": { "messageByLocale": { "en": "Let's choose an object from the **asset store**.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", - "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "es": "Vamos a elegir un objeto de la **tienda de recursos**.", + "pt": "Vamos escolher um objeto da **loja de recursos**.", + "th": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -443,8 +524,10 @@ "description": { "messageByLocale": { "en": "Select a rounded object that you'd like to throw (try **ball**).", - "fr-FR": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**).", - "th-TH": "เลือกวัตถุที่กลมที่คุณอยากจะโยน (ลอง **ball**)" + "fr": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**).", + "es": "Agrega un objeto redondo que te gustaría lanzar (intenta con **ball**).", + "pt": "Adicione um objeto redondo que você gostaria de jogar (tente **ball**).", + "th": "เลือกวัตถุที่กลมที่คุณอยากจะโยน (ลอง **ball**)" } } }, @@ -486,8 +569,10 @@ "description": { "messageByLocale": { "en": "Perfect, let's see how to throw it easily.", - "fr-FR": "Parfait, voyons maintenant comment le lancer.", - "th-TH": "สมบูรณ์แบบ ลองมาดูวิธีโยนมันแบบง่ายๆกัน" + "fr": "Parfait, voyons maintenant comment le lancer.", + "es": "Perfecto, veamos cómo lanzarlo fácilmente.", + "pt": "Perfeito, vamos ver como jogá-lo facilmente.", + "th": "สมบูรณ์แบบ ลองมาดูวิธีโยนมันแบบง่ายๆกัน" } } } @@ -495,18 +580,40 @@ { "elementToHighlightId": "objectInObjectsList:projectile", "nextStepTrigger": { - "instanceAddedOnScene": "projectile" + "instanceAddedOnScene": "projectile", + "instancesCount": 3 }, "tooltip": { "description": { "messageByLocale": { "en": "Add 3 **instances** of the **object** *$(projectile)* inside the frame.", - "fr-FR": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre.", - "th-TH": "เพิ่ม 3 **instances** ของ **วัตถุ** *$(projectile)* ภายในเฟรม" + "fr": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre.", + "es": "Agrega 3 **instancias** del **objeto** *$(projectile)* dentro del marco.", + "pt": "Adicione 3 **instâncias** do **objeto** *$(projectile)* dentro do quadro.", + "th": "เพิ่ม 3 **instances** ของ **วัตถุ** *$(projectile)* ภายในเฟรม" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForTarget", "elementToHighlightId": "#add-new-object-button", @@ -518,8 +625,10 @@ "description": { "messageByLocale": { "en": "Now let's find a target to aim.", - "fr-FR": "Maintenant trouvons une cible à atteindre.", - "th-TH": "ทีนี้เราจะหาเป้าสำหรับโยนวัตถุใส่" + "fr": "Maintenant trouvons une cible à atteindre.", + "es": "Ahora busquemos un objetivo para apuntar.", + "pt": "Agora vamos encontrar um alvo para mirar.", + "th": "ทีนี้เราจะหาเป้าสำหรับโยนวัตถุใส่" } } } @@ -533,8 +642,10 @@ "description": { "messageByLocale": { "en": "Let's choose a new **object** from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", - "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "es": "Vamos a elegir un **objeto** nuevo desde la tienda de recursos.", + "pt": "Vamos escolher um novo **objeto** da loja de recursos.", + "th": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -551,8 +662,10 @@ "description": { "messageByLocale": { "en": "Select an object that you would like to use as a target to throw $(projectile) at.", - "fr-FR": "Cherchez une cible qui vous plaît (essayez **target**).", - "th-TH": "เลือกวัตถุที่คุณอยากจะโยน $(projectile) ใส่ (ลอง **target**)" + "fr": "Cherchez une cible qui vous plaît (essayez **target**).", + "es": "Busca un objeto que te gustaría usar como un objetivo para lanzar $(projectile) a.", + "pt": "Selecione um objeto que você gostaria de usar como um alvo para jogar $(projectile) em.", + "th": "เลือกวัตถุที่คุณอยากจะโยน $(projectile) ใส่ (ลอง **target**)" } } }, @@ -594,8 +707,10 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-FR": "Ajoutez cet objet à votre **scène**.", - "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "fr": "Ajoutez cet objet à votre **scène**.", + "es": "Perfecto, agreguemoslo a la **escena**.", + "pt": "Perfeito, vamos adicioná-lo à **cena**.", + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -609,12 +724,33 @@ "description": { "messageByLocale": { "en": "Add $(target) inside the frame.", - "fr-FR": "Ajoutez $(target) dans le cadre.", - "th-TH": "เพิ่ม $(target) เข้าไปภายในเฟรม" + "fr": "Ajoutez $(target) dans le cadre.", + "es": "Agrega $(target) dentro del marco.", + "pt": "Adicione $(target) dentro do quadro.", + "th": "เพิ่ม $(target) เข้าไปภายในเฟรม" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForBlock", "elementToHighlightId": "#add-new-object-button", @@ -626,8 +762,10 @@ "description": { "messageByLocale": { "en": "Finally let's find something to protect $(target).", - "fr-FR": "Finalement, trouvons quelque chose pour protéger $(target).", - "th-TH": "ขั้นสุดท้าย เราจะหาอะไรมาป้องกัน $(target)" + "fr": "Finalement, trouvons quelque chose pour protéger $(target).", + "es": "Finalmente, encontremos algo para proteger $(target).", + "pt": "Finalmente, vamos encontrar algo para proteger $(target).", + "th": "ขั้นสุดท้าย เราจะหาอะไรมาป้องกัน $(target)" } } } @@ -641,8 +779,10 @@ "description": { "messageByLocale": { "en": "Let's choose a new object from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **Magasin de ressources**.", - "th-TH": "เลือก **วัตถุ** จาก ร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **Magasin de ressources**.", + "es": "Vamos a elegir un nuevo objeto de la tienda de recursos.", + "pt": "Vamos escolher um novo objeto da loja de recursos.", + "th": "เลือก **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -659,8 +799,10 @@ "description": { "messageByLocale": { "en": "Select a **block** object you would like to use as an obstacle for your $(projectile).", - "fr-FR": "Cherchez un objet qui servira d'obstacle aux $(projectile) (cherchez **block**).", - "th-TH": "เลือกวัตถุ **block** ที่คุณอยากจะใช้เป็นสิ่งกีดขวาง $(projectile) (ลอง **block**)" + "fr": "Cherchez un objet qui servira d'obstacle aux $(projectile) (cherchez **block**).", + "es": "Busca un objeto que sirva como obstáculo para tus $(projectile) (busca **block**).", + "pt": "Procure um objeto que sirva como obstáculo para seus $(projectile) (procure **block**).", + "th": "เลือกวัตถุ **block** ที่คุณอยากจะใช้เป็นสิ่งกีดขวาง $(projectile) (ลอง **block**)" } } }, @@ -702,8 +844,10 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-FR": "Parfait, ajoutez le à la **scène**.", - "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "fr": "Parfait, ajoutez le à la **scène**.", + "es": "Perfecto, agreguemoslo a la **escena**.", + "pt": "Perfeito, vamos adicioná-lo à **cena**.", + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -711,14 +855,17 @@ { "elementToHighlightId": "objectInObjectsList:block", "nextStepTrigger": { - "instanceAddedOnScene": "block" + "instanceAddedOnScene": "block", + "instancesCount": 2 }, "tooltip": { "description": { "messageByLocale": { "en": "Add multiple $(block)s inside the frame.", - "fr-FR": "Ajoutez plusieurs instances de $(block) dans le cadre.", - "th-TH": "เพิ่ม $(block) ปริมาณมากใส่ลงไปในเฟรม" + "fr": "Ajoutez plusieurs instances de $(block) dans le cadre.", + "es": "Agrega múltiples instancias de $(block) dentro del marco.", + "pt": "Adicione várias instâncias de $(block) dentro do quadro.", + "th": "เพิ่ม $(block) ปริมาณมากใส่ลงไปในเฟรม" } } } @@ -732,16 +879,20 @@ "title": { "messageByLocale": { "en": "Now, let's add some physics to our **objects**.", - "fr-FR": "Maintenant, ajoutons un moteur physique à nos **objets**.", - "th-TH": "ทีนี้เราจะเพิ่มฟิสิกส์ให้ **objects**" + "fr": "Maintenant, ajoutons un moteur physique à nos **objets**.", + "es": "Ahora, agreguemos un motor físico a nuestros **objetos**.", + "pt": "Agora, vamos adicionar um motor físico aos nossos **objetos**.", + "th": "ทีนี้เราจะเพิ่มฟิสิกส์ให้ **objects**" } }, "placement": "left", "description": { "messageByLocale": { "en": "Right click on $(border) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”.", - "th-TH": "คลิกขวา $(border) และเลือก “แก้ไขพฤติกรรม”" + "fr": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”.", + "es": "Haz clic derecho en $(border) y selecciona “Editar comportamientos”.", + "pt": "Clique com o botão direito em $(border) e selecione “Editar comportamentos”.", + "th": "คลิกขวา $(border) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -755,8 +906,10 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", + "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -773,8 +926,10 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement.", - "th-TH": "เพิ่มพฤติกรรมใหม่" + "fr": "Ajoutez un nouveau comportement.", + "es": "Agrega un nuevo comportamiento.", + "pt": "Adicione um novo comportamento.", + "th": "เพิ่มพฤติกรรมใหม่" } } }, @@ -789,8 +944,10 @@ "description": { "messageByLocale": { "en": "Select the **Physics behavior**.", - "fr-FR": "Sélectionnez le comportement **Moteur physique**.", - "th-TH": "เลือก **พฤติกรรมฟิสิกส์**" + "fr": "Sélectionnez le comportement **Moteur physique**.", + "es": "Selecciona el comportamiento **Motor físico**.", + "pt": "Selecione o comportamento **Motor físico**.", + "th": "เลือก **พฤติกรรมฟิสิกส์**" } } }, @@ -805,8 +962,10 @@ "description": { "messageByLocale": { "en": "Select **static**.", - "fr-FR": "Choisissez l'option **Fixe**.", - "th-TH": "เลือก **คงที่**" + "fr": "Choisissez l'option **Fixe**.", + "es": "Selecciona **estático**.", + "pt": "Selecione **estático**.", + "th": "เลือก **คงที่**" } }, "placement": "top" @@ -822,8 +981,10 @@ "description": { "messageByLocale": { "en": "We'll see later how to use the other parameters. We're good now.", - "fr-FR": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment.", - "th-TH": "สำหรับพารามิเตอร์อื่นๆเดี๋ยวจะกลับมาดูอีกครั้ง ตอนนี้ยังไม่ต้องไปสนใจ" + "fr": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment.", + "es": "Más adelante veremos cómo usar los otros parámetros. Por ahora, estamos bien.", + "pt": "Mais tarde veremos como usar os outros parâmetros. Por enquanto, estamos bem.", + "th": "สำหรับพารามิเตอร์อื่นๆเดี๋ยวจะกลับมาดูอีกครั้ง ตอนนี้ยังไม่ต้องไปสนใจ" } } } @@ -838,8 +999,10 @@ "description": { "messageByLocale": { "en": "Now right click on $(projectile) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", - "th-TH": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" + "fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", + "es": "Haz clic derecho en $(projectile) y selecciona “Editar comportamientos”.", + "pt": "Clique com o botão direito em $(projectile) e selecione “Editar comportamentos”.", + "th": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -853,8 +1016,10 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "th-TH": "ดู **พฤติกรรม** จาก **วัตถุ** ที่นี่" + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", + "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "th": "ดู **พฤติกรรม** จาก **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -871,8 +1036,10 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement.", - "th-TH": "เพิ่มพฤติกรรมใหม่" + "fr": "Ajoutez un nouveau comportement.", + "es": "Agrega un nuevo comportamiento.", + "pt": "Adicione um novo comportamento.", + "th": "เพิ่มพฤติกรรมใหม่" } } }, @@ -887,8 +1054,10 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique.", - "th-TH": "เลือกพฤติกรรมฟิสิกส์" + "fr": "Sélectionnez le comportement Moteur physique.", + "es": "Selecciona el comportamiento Motor físico.", + "pt": "Selecione o comportamento Motor físico.", + "th": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -903,8 +1072,10 @@ "description": { "messageByLocale": { "en": "Select **Circle**.", - "fr-FR": "Choisissez l'option **Cercle**.", - "th-TH": "เลือก **วงกลม**" + "fr": "Choisissez l'option **Cercle**.", + "es": "Selecciona **Círculo**.", + "pt": "Selecione **Círculo**.", + "th": "เลือก **วงกลม**" } }, "placement": "top" @@ -914,14 +1085,16 @@ { "elementToHighlightId": "#physics2-parameter-density", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "5" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the density to 5.", - "fr-FR": "Utilisez une densité de 5.", - "th-TH": "ปรับความหนาแน่นเป็น 5" + "fr": "Utilisez une densité de 5.", + "es": "Cambia la densidad a 5.", + "pt": "Mude a densidade para 5.", + "th": "ปรับความหนาแน่นเป็น 5" } }, "placement": "top" @@ -931,14 +1104,16 @@ { "elementToHighlightId": "#physics2-parameter-angular-damping", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "15" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the angular damping to 15.", - "fr-FR": "Utilisez un amortissement angulaire de 15.", - "th-TH": "ปรับการลดแรงสั่นสะเทือนเชิงมุมเป็น 15" + "fr": "Utilisez un amortissement angulaire de 15.", + "es": "Cambia el amortiguamiento angular a 15.", + "pt": "Mude o amortecimento angular para 15.", + "th": "ปรับการลดแรงสั่นสะเทือนเชิงมุมเป็น 15" } }, "placement": "top" @@ -954,8 +1129,10 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-FR": "C'est bon.", - "th-TH": "เรียบร้อยแล้ว" + "fr": "C'est bon.", + "es": "Está bien.", + "pt": "Está bom.", + "th": "เรียบร้อยแล้ว" } } } @@ -970,8 +1147,10 @@ "description": { "messageByLocale": { "en": "Now right click on $(target) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”.", - "th-TH": "คลิกขวาที่ $(target) และเลือก “แก้ไขพฤติกรรม”" + "fr": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”.", + "es": "Ahora haz clic derecho en $(target) y selecciona “Editar comportamientos”.", + "pt": "Agora clique com o botão direito em $(target) e selecione “Editar comportamentos”.", + "th": "คลิกขวาที่ $(target) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -985,8 +1164,10 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Aquí puedes ver los **comportamientos** del **objeto**.", + "pt": "Veja os **comportamentos** do **objeto** aqui.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1010,8 +1191,10 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique.", - "th-TH": "เลือกพฤติกรรมฟิสิกส์" + "fr": "Sélectionnez le comportement Moteur physique.", + "es": "Selecciona el comportamiento Física.", + "pt": "Selecione o comportamento Física.", + "th": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -1026,8 +1209,10 @@ "description": { "messageByLocale": { "en": "No need to change anything.", - "fr-FR": "La configuration de base suffit. Continuons.", - "th-TH": "ไม่ต้องเปลี่ยนแปลงอะไร" + "fr": "La configuration de base suffit. Continuons.", + "es": "No necesitas cambiar nada.", + "pt": "Não é necessário alterar nada.", + "th": "ไม่ต้องเปลี่ยนแปลงอะไร" } } } @@ -1042,8 +1227,10 @@ "description": { "messageByLocale": { "en": "Now right click on $(block) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”.", - "th-TH": "คลิกขวาที่ $(block) และเลือก “แก้ไขพฤติกรรม”" + "fr": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”.", + "es": "Ahora haz clic derecho en $(block) y selecciona “Editar comportamientos”.", + "pt": "Agora clique com o botão direito em $(block) e selecione “Editar comportamentos”.", + "th": "คลิกขวาที่ $(block) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -1057,8 +1244,10 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Aquí puedes ver los **comportamientos** del **objeto**.", + "pt": "Veja os **comportamentos** do **objeto** aqui.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1082,8 +1271,10 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique.", - "th-TH": "เลือกพฤติกรรมฟิสิกส์" + "fr": "Sélectionnez le comportement Moteur physique.", + "es": "Selecciona el comportamiento Física.", + "pt": "Selecione o comportamento Física.", + "th": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -1105,15 +1296,19 @@ "title": { "messageByLocale": { "en": "Now we'll make it possible for the player to drag the $(projectile).", - "fr-FR": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris.", - "th-TH": "ทีนี้เราจะทำให้ผู้เล่นสามารถลาก $(projectile)" + "fr": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris.", + "es": "Ahora vamos a hacer que el jugador pueda arrastrar $(projectile) con el ratón.", + "pt": "Agora vamos fazer com que o jogador possa arrastar $(projectile) com o mouse.", + "th": "ทีนี้เราจะทำให้ผู้เล่นสามารถลาก $(projectile)" } }, "description": { "messageByLocale": { "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", - "fr-FR": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**.", - "th-TH": "โดยเราจะติดตั้ง **extension**\n\nเปิด **โปรเจกต์เมเนเจอร์**" + "fr": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**.", + "es": "Para ello, vamos a instalar una **extensión**.\n\nAbre el **Gestor de proyectos**.", + "pt": "Para isso, vamos instalar uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", + "th": "โดยเราจะติดตั้ง **extension**\n\nเปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -1128,8 +1323,10 @@ "description": { "messageByLocale": { "en": "Open the **Extensions** tab.", - "fr-FR": "Ouvrez l'onglet **Extensions**.", - "th-TH": "เปิดแท็บ **Extensions**" + "fr": "Ouvrez l'onglet **Extensions**.", + "es": "Abre la pestaña **Extensiones**.", + "pt": "Abra a guia **Extensões**.", + "th": "เปิดแท็บ **Extensions**" } } }, @@ -1145,8 +1342,10 @@ "description": { "messageByLocale": { "en": "Open the extension store", - "fr-FR": "Ouvrez le **Magasin d'extension**.", - "th-TH": "เปิดร้านค้า extension" + "fr": "Ouvrez le **Magasin d'extension**.", + "es": "Abre la **Tienda de extensiones**.", + "pt": "Abra a **Loja de extensões**.", + "th": "เปิดร้านค้า extension" } } }, @@ -1161,8 +1360,10 @@ "description": { "messageByLocale": { "en": "Search for the **draggable** extension (for physics objects).", - "fr-FR": "Cherchez l'extension **draggable**.", - "th-TH": "ค้นหา **draggable** extension (สำหรับวัตถุฟิสิกส์)" + "fr": "Cherchez l'extension **draggable**.", + "es": "Busca la extensión **draggable**.", + "pt": "Procure pela extensão **draggable**.", + "th": "ค้นหา **draggable** extension (สำหรับวัตถุฟิสิกส์)" } } }, @@ -1178,8 +1379,10 @@ "description": { "messageByLocale": { "en": "Click on the extension.", - "fr-FR": "Cliquez sur l'extension.", - "th-TH": "คลิกที่ extension" + "fr": "Cliquez sur l'extension.", + "es": "Haz clic en la extensión.", + "pt": "Clique na extensão.", + "th": "คลิกที่ extension" } } }, @@ -1194,8 +1397,10 @@ "description": { "messageByLocale": { "en": "Install the extension in your project.", - "fr-FR": "Installez l'extension dans votre projet.", - "th-TH": "ติดตั้ง extension ในโปรเจกต์ของคุณ" + "fr": "Installez l'extension dans votre projet.", + "es": "Instala la extensión en tu proyecto.", + "pt": "Instale a extensão no seu projeto.", + "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ" } }, "placement": "left" @@ -1211,8 +1416,10 @@ "description": { "messageByLocale": { "en": "Close the store.", - "fr-FR": "Fermez le magasin.", - "th-TH": "ปิดหน้าต่างของร้านค้า" + "fr": "Fermez le magasin.", + "es": "Cierra la tienda.", + "pt": "Feche a loja.", + "th": "ปิดหน้าต่างของร้านค้า" } } } @@ -1227,8 +1434,10 @@ "description": { "messageByLocale": { "en": "Now right click on $(projectile) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", - "th-TH": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" + "fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", + "es": "Haz clic derecho en $(projectile) y selecciona “Editar comportamientos”.", + "pt": "Clique com o botão direito em $(projectile) e selecione “Editar comportamentos”.", + "th": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -1242,8 +1451,10 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", + "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1260,8 +1471,10 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement.", - "th-TH": "เพิ่มพฤติกรรมใหม่" + "fr": "Ajoutez un nouveau comportement.", + "es": "Agrega un nuevo comportamiento.", + "pt": "Adicione um novo comportamento.", + "th": "เพิ่มพฤติกรรมใหม่" } } }, @@ -1276,8 +1489,10 @@ "description": { "messageByLocale": { "en": "Select the Draggable behavior.", - "fr-FR": "Sélectionnez le comportement Draggable.", - "th-TH": "เลือกพฤติกรรม Draggable" + "fr": "Sélectionnez le comportement Draggable.", + "es": "Selecciona el comportamiento Draggable.", + "pt": "Selecione o comportamento Draggable.", + "th": "เลือกพฤติกรรม Draggable" } } }, @@ -1292,8 +1507,10 @@ "description": { "messageByLocale": { "en": "That's it!", - "fr-FR": "C'est tout !", - "th-TH": "เรียบร้อยแล้ว!" + "fr": "C'est tout !", + "es": "¡Eso es todo!", + "pt": "É isso aí!", + "th": "เรียบร้อยแล้ว!" } } } @@ -1307,8 +1524,10 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button to see how you can click and drag your $(projectile) around the scene!", - "fr-FR": "Cliquez sur **Aperçu** pour tester votre jeu. Cliquez et faites glisser $(projectile) dans la scène !", - "th-TH": "ลองคลิกที่ **ดูตัวอย่าง** แล้วทำการคลิกและลาก $(projectile) ไปมาเพื่อทดสอบกันเถอะ!" + "fr": "Cliquez sur **Aperçu** pour tester votre jeu. Cliquez et faites glisser $(projectile) dans la scène !", + "es": "¡Haz clic en el botón **Vista previa** para ver cómo puedes hacer clic y arrastrar tu $(projectile) por la escena!", + "pt": "Clique no botão **Pré-visualizar** para ver como você pode clicar e arrastar seu $(projectile) pela cena!", + "th": "ลองคลิกที่ **ดูตัวอย่าง** แล้วทำการคลิกและลาก $(projectile) ไปมาเพื่อทดสอบกันเถอะ!" } }, "placement": "bottom" @@ -1321,34 +1540,61 @@ { "messageByLocale": { "en": "## Congratulations!", - "fr-FR": "## Félicitations !" - , "th-TH": "## ยินดีด้วย!" + "fr": "## Félicitations !", + "es": "## ¡Felicidades!", + "pt": "## Parabéns!", + "th": "## ยินดีด้วย!" } }, { "messageByLocale": { "en": "You have finished the first part of your Fling Game.", - "fr-FR": "Vous avez terminé la première partie de votre jeu." - , "th-TH": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" + "fr": "Vous avez terminé la première partie de votre jeu.", + "es": "Has terminado la primera parte de tu juego.", + "pt": "Você terminou a primeira parte do seu jogo.", + "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" } }, { "messageByLocale": { "en": "You've discovered the basics of GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", - "fr-FR": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" - , "th-TH": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor" + "fr": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", + "es": "Has descubierto los fundamentos de GDevelop:\n- [Objetos](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instancias](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Comportamientos](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Escenas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", + "pt": "Você descobriu os fundamentos do GDevelop:\n- [Objetos](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instâncias](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Comportamentos](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Cenas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", + "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor" } }, { "messageByLocale": { "en": "Now you can take a break from the tutorial, or continue to the next chapter.", - "fr-FR": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre." - , "th-TH": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเลยก็ได้" + "fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre.", + "es": "Ahora puedes hacer una pausa antes de comenzar el próximo capítulo.", + "pt": "Agora você pode fazer uma pausa antes de começar o próximo capítulo.", + "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเลยก็ได้" } } ] } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForBackground", "elementToHighlightId": "#add-new-object-button", @@ -1360,8 +1606,10 @@ "description": { "messageByLocale": { "en": "Let's find a background for our game.", - "fr-FR": "Cherchons un arrière-plan pour notre jeu.", - "th-TH": "หาพื้นหลังสำหรับเกม" + "fr": "Cherchons un arrière-plan pour notre jeu.", + "es": "Busquemos un fondo para nuestro juego.", + "pt": "Vamos encontrar um fundo para o nosso jogo.", + "th": "หาพื้นหลังสำหรับเกม" } } } @@ -1375,8 +1623,10 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", - "th-TH": "ค้นหา **วัตถุ** จาก ร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "es": "Vamos a elegir un **objeto** de la tienda de recursos.", + "pt": "Vamos escolher um **objeto** na loja de recursos.", + "th": "ค้นหา **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -1393,8 +1643,10 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-FR": "Cherchez “**background**”.", - "th-TH": "ประเภท “**background**”" + "fr": "Cherchez “**background**”.", + "es": "Escribe “**background**”.", + "pt": "Digite “**background**”.", + "th": "ประเภท “**background**”" } } }, @@ -1436,8 +1688,10 @@ "description": { "messageByLocale": { "en": "Perfect, let's use it in our **scene**.", - "fr-FR": "Parfait, ajoutez le à la **scène**.", - "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "fr": "Parfait, ajoutez le à la **scène**.", + "es": "Perfecto, añádelo a la **escena**.", + "pt": "Perfeito, vamos usá-lo na nossa **cena**.", + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -1451,8 +1705,10 @@ "description": { "messageByLocale": { "en": "Drag $(background) from the menu to the canvas.", - "fr-FR": "Faites glisser $(background) du menu au canvas.", - "th-TH": "ลาก $(background) จากเมนูไปยังแคนวาส" + "fr": "Faites glisser $(background) du menu au canvas.", + "es": "Arrastra $(background) desde el menú al lienzo.", + "pt": "Arraste $(background) do menu para o canvas.", + "th": "ลาก $(background) จากเมนูไปยังแคนวาส" } }, "placement": "left" @@ -1463,8 +1719,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "He terminado", + "pt": "Eu terminei", + "th": "เสร็จแล้ว" } } }, @@ -1473,8 +1731,10 @@ "description": { "messageByLocale": { "en": "Drag to expand the size of $(background) until it stretches over your entire game area.", - "fr-FR": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu.", - "th-TH": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" + "fr": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu.", + "es": "Arrastra para ampliar el tamaño de $(background) hasta que se estire sobre toda la zona de juego.", + "pt": "Arraste para expandir o tamanho de $(background) até que ele se estenda sobre toda a área do jogo.", + "th": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" } }, "image": { @@ -1492,8 +1752,10 @@ "description": { "messageByLocale": { "en": "Open the **instance** properties editor panel and select the instance of $(background) on the scene.", - "fr-FR": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(background) sur la scène.", - "th-TH": "เปิดแผงควบคุมสำหรับแก้ไขคุณสมบัติ **instance** และเลือก instance ของ $(background) ใน scence" + "fr": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(background) sur la scène.", + "es": "Abre el panel de edición de propiedades de **la instancia** y selecciona la instancia de $(background) en la escena.", + "pt": "Abra o painel de edição de propriedades da **instância** e selecione a instância de $(background) na cena.", + "th": "เปิดแผงควบคุมสำหรับแก้ไขคุณสมบัติ **instance** และเลือก instance ของ $(background) ใน scence" } }, "placement": "bottom" @@ -1509,8 +1771,10 @@ "description": { "messageByLocale": { "en": "Select the instance of $(background) on the scene.", - "fr-FR": "Sélectionnez l'instance de $(background) sur la scène.", - "th-TH": "เลือก instance ของ $(background) ใน scence" + "fr": "Sélectionnez l'instance de $(background) sur la scène.", + "es": "Selecciona la instancia de $(background) en la escena.", + "pt": "Selecione a instância de $(background) na cena.", + "th": "เลือก instance ของ $(background) ใน scence" } } } @@ -1524,13 +1788,34 @@ "description": { "messageByLocale": { "en": "Change the z order of $(background) to **-1** so that it is behind all other **instances** on the **scene**.", - "fr-FR": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène.", - "th-TH": "ปรับค่าลำดับ z ของ $(background) เป็น **-1** เพื่อให้พื้นหลังปรากฏอยู่ข้างหลัง **instances** อื่น" + "fr": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène.", + "es": "Cambia el orden z de $(background) a **-1** para que esté detrás de todas las demás **instancias** de la **escena**.", + "pt": "Altere a ordem z de $(background) para **-1** para que ele fique atrás de todas as outras **instâncias** na **cena**.", + "th": "ปรับค่าลำดับ z ของ $(background) เป็น **-1** เพื่อให้พื้นหลังปรากฏอยู่ข้างหลัง **instances** อื่น" } }, "placement": "right" } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForObstacle", "elementToHighlightId": "#add-new-object-button", @@ -1542,8 +1827,10 @@ "description": { "messageByLocale": { "en": "Let's add some protection for $(target).", - "fr-FR": "Ajoutons un objet pour protéger $(target).", - "th-TH": "เพิ่มวัตถุป้องกันให้ $(target)" + "fr": "Ajoutons un objet pour protéger $(target).", + "es": "Agreguemos un objeto para proteger a $(target).", + "pt": "Vamos adicionar um objeto para proteger $(target).", + "th": "เพิ่มวัตถุป้องกันให้ $(target)" } } } @@ -1557,8 +1844,10 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store.", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", - "th-TH": "เพิ่ม **วัตถุ** จาก ร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "es": "Vamos a elegir un **objeto** de la tienda de recursos.", + "pt": "Vamos escolher um **objeto** na loja de recursos.", + "th": "เพิ่ม **วัตถุ** จาก ร้านค้า asset" } }, "placement": "bottom" @@ -1575,8 +1864,10 @@ "description": { "messageByLocale": { "en": "Search for **block**.", - "fr-FR": "Cherchez “**block**”.", - "th-TH": "ค้นหา “**block**”" + "fr": "Cherchez “**block**”.", + "es": "Busca **block**.", + "pt": "Procure por **block**.", + "th": "ค้นหา “**block**”" } } }, @@ -1618,8 +1909,10 @@ "description": { "messageByLocale": { "en": "Perfect, let's add it to the **scene**.", - "fr-FR": "Parfait, ajoutez le à la **scène**.", - "th-TH": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "fr": "Parfait, ajoutez le à la **scène**.", + "es": "Perfecto, agreguemoslo a la **escena**.", + "pt": "Perfeito, vamos adicioná-lo à **cena**.", + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" } } } @@ -1634,15 +1927,19 @@ "title": { "messageByLocale": { "en": "Let's make them static so that they act as a wall.", - "fr-FR": "Faisons en sorte qu'il reste fixe comme un mur.", - "th-TH": "ทำให้คงที่เพื่อใช้ทำหน้าที่เป็นผนัง" + "fr": "Faisons en sorte qu'il reste fixe comme un mur.", + "es": "Hagamos que se mantengan estáticos como una pared.", + "pt": "Vamos mantê-los estáticos como uma parede.", + "th": "ทำให้คงที่เพื่อใช้ทำหน้าที่เป็นผนัง" } }, "description": { "messageByLocale": { "en": "Right click on $(obstacle) and select “Edit behaviors”.", - "fr-FR": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”.", - "th-TH": "คลิกขวาที่ $(obstacle) และเลือก “แก้ไขพฤติกรรม”" + "fr": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”.", + "es": "Haga clic derecho en $(obstacle) y seleccione “Editar comportamientos”.", + "pt": "Clique com o botão direito em $(obstacle) e selecione “Editar comportamentos”.", + "th": "คลิกขวาที่ $(obstacle) และเลือก “แก้ไขพฤติกรรม”" } } } @@ -1656,8 +1953,10 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "fr-FR": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "th-TH": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "es": "Aquí puedes ver los **comportamientos** del **objeto**.", + "pt": "Veja os **comportamentos** do **objeto** aqui.", + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" } }, "placement": "bottom" @@ -1674,8 +1973,10 @@ "description": { "messageByLocale": { "en": "Add a new behavior.", - "fr-FR": "Ajoutez un nouveau comportement.", - "th-TH": "เพิ่มพฤติกรรมใหม่" + "fr": "Ajoutez un nouveau comportement.", + "es": "Agrega un nuevo comportamiento.", + "pt": "Adicione um novo comportamento.", + "th": "เพิ่มพฤติกรรมใหม่" } } }, @@ -1690,8 +1991,10 @@ "description": { "messageByLocale": { "en": "Select the Physics behavior.", - "fr-FR": "Sélectionnez le comportement Moteur physique.", - "th-TH": "เลือกพฤติกรรมฟิสิกส์" + "fr": "Sélectionnez le comportement Moteur physique.", + "es": "Selecciona el comportamiento Física.", + "pt": "Selecione o comportamento Física.", + "th": "เลือกพฤติกรรมฟิสิกส์" } } }, @@ -1706,8 +2009,10 @@ "description": { "messageByLocale": { "en": "Select **static**.", - "fr-FR": "Choisissez l'option **Fixe**.", - "th-TH": "เลือก **คงที่**" + "fr": "Choisissez l'option **Fixe**.", + "es": "Selecciona **estático**.", + "pt": "Selecione **estático**.", + "th": "เลือก **คงที่**" } }, "placement": "top" @@ -1723,8 +2028,10 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-FR": "C'est bon.", - "th-TH": "เรียบร้อยแล้ว" + "fr": "C'est bon.", + "es": "Está bien.", + "pt": "Está bom.", + "th": "เรียบร้อยแล้ว" } } } @@ -1732,18 +2039,39 @@ { "elementToHighlightId": "objectInObjectsList:obstacle", "nextStepTrigger": { - "instanceAddedOnScene": "obstacle" + "instanceAddedOnScene": "obstacle", + "instancesCount": 2 }, "tooltip": { "description": { "messageByLocale": { "en": "Add a few $(obstacle) to the **scene** to protect $(target).", - "fr-FR": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target).", - "th-TH": "เพิ่ม $(obstacle) ปริมาณนิดหน่อยลงใน **scene** เพื่อป้องกัน $(target)" + "fr": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target).", + "es": "Agrega algunos $(obstacle) a la **escena** para proteger a $(target).", + "th": "เพิ่ม $(obstacle) ปริมาณนิดหน่อยลงใน **scene** เพื่อป้องกัน $(target)" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForWinning", "elementToHighlightId": "#add-new-object-button", @@ -1755,8 +2083,10 @@ "description": { "messageByLocale": { "en": "Now let's create a winning message!", - "fr-FR": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible.", - "th-TH": "ทีนี้เราจะสร้างข้อความแสดงชัยชนะ!" + "fr": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible.", + "es": "¡Ahora creemos un mensaje de victoria!", + "pt": "Agora vamos criar uma mensagem de vitória!", + "th": "ทีนี้เราจะสร้างข้อความแสดงชัยชนะ!" } } } @@ -1770,8 +2100,10 @@ "description": { "messageByLocale": { "en": "This time, we'll create a text from scratch.", - "fr-FR": "Cette fois-ci, nous allons créer un texte de zéro.", - "th-TH": "คราวนี้ เราจะสร้างข้อความโดยทำขึ้นมาเอง" + "fr": "Cette fois-ci, nous allons créer un texte de zéro.", + "es": "Esta vez crearemos un texto desde cero.", + "pt": "Desta vez, vamos criar um texto do zero.", + "th": "คราวนี้ เราจะสร้างข้อความโดยทำขึ้นมาเอง" } }, "placement": "bottom" @@ -1788,8 +2120,10 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-FR": "Sélectionnez l'objet **Texte**", - "th-TH": "เลือกวัตถุ **ข้อความ**" + "fr": "Sélectionnez l'objet **Texte**", + "es": "Selecciona el objeto **Texto**", + "pt": "Selecione o objeto **Texto**", + "th": "เลือกวัตถุ **ข้อความ**" } }, "placement": "bottom" @@ -1799,14 +2133,16 @@ { "elementToHighlightId": "#object-name", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "YouWin" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the object name to “**YouWin**”.", - "fr-FR": "Utilisez “**Victoire**” comme nom d'objet.", - "th-TH": "แก้ไขชื่อของวัตถุเป็น “**YouWin**”" + "fr": "Utilisez “**YouWin**” comme nom d'objet.", + "es": "Cambia el nombre del objeto a “**YouWin**”.", + "pt": "Mude o nome do objeto para “**YouWin**”.", + "th": "แก้ไขชื่อของวัตถุเป็น “**YouWin**”" } }, "placement": "bottom" @@ -1816,14 +2152,16 @@ { "elementToHighlightId": "#text-object-font-size", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "200" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-FR": "Utilisez une taille de **200**.", - "th-TH": "แก้ไขขนาดฟอนต์เป็น **200**" + "fr": "Utilisez une taille de **200**.", + "es": "Cambia el tamaño de la fuente a **200**.", + "pt": "Mude o tamanho da fonte para **200**.", + "th": "แก้ไขขนาดฟอนต์เป็น **200**" } }, "placement": "bottom" @@ -1839,8 +2177,10 @@ "description": { "messageByLocale": { "en": "Change the text to “**You Win!**”", - "fr-FR": "Cet objet texte devra afficher “**Gagné !**”", - "th-TH": "แก้ไขข้อความเป็น “**คุณชนะ!**”" + "fr": "Cet objet texte devra afficher “**Gagné !**”", + "es": "Cambia el texto a “**¡Ganaste!**”", + "pt": "Mude o texto para “**Você Venceu!**”", + "th": "แก้ไขข้อความเป็น “**คุณชนะ!**”" } }, "placement": "bottom" @@ -1856,8 +2196,10 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé.", - "th-TH": "เรียบร้อยแล้ว" + "fr": "Nous avons terminé.", + "es": "¡Terminamos!", + "pt": "Terminamos.", + "th": "เรียบร้อยแล้ว" } } }, @@ -1874,8 +2216,10 @@ "description": { "messageByLocale": { "en": "Drag $(youWinText) into the **scene**, and center it as well as possible.", - "fr-FR": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène.", - "th-TH": "ลาก $(youWinText) ไปยัง **scene** และพยายามจัดตำแหน่งให้อยู่ตรงกลาง" + "fr": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène.", + "es": "Arrastra $(youWinText) al **escenario** y centra el objeto lo mejor que puedas.", + "pt": "Arraste $(youWinText) para a **cena** e centralize-o o mais próximo possível.", + "th": "ลาก $(youWinText) ไปยัง **scene** และพยายามจัดตำแหน่งให้อยู่ตรงกลาง" } }, "placement": "left" @@ -1890,8 +2234,10 @@ "description": { "messageByLocale": { "en": "Open the **Layers** panel.", - "fr-FR": "Ouvrez le panneau des **calques*.", - "th-TH": "เปิดแผงควบคุม **Layers**" + "fr": "Ouvrez le panneau des **calques*.", + "es": "Abre el panel de **Capas**.", + "pt": "Abra o painel **Camadas**.", + "th": "เปิดแผงควบคุม **Layers**" } }, "placement": "bottom" @@ -1907,8 +2253,10 @@ "description": { "messageByLocale": { "en": "Add a new layer.", - "fr-FR": "Créez un nouveau calque.", - "th-TH": "เพิ่มเลเยอร์ใหม่" + "fr": "Créez un nouveau calque.", + "es": "Añade una nueva capa.", + "pt": "Adicione uma nova camada.", + "th": "เพิ่มเลเยอร์ใหม่" } }, "placement": "top" @@ -1917,14 +2265,16 @@ { "elementToHighlightId": "#layer-1 #layer-name", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "WinLayer" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the name to **WinLayer**.", - "fr-FR": "Utlisez le nom **CalqueVictoire**.", - "th-TH": "เปลี่ยนชื่อเป็น **WinLayer**" + "fr": "Utlisez le nom **WinLayer**.", + "es": "Cambia el nombre a **WinLayer**.", + "pt": "Mude o nome para **WinLayer**.", + "th": "เปลี่ยนชื่อเป็น **WinLayer**" } }, "placement": "top" @@ -1939,8 +2289,10 @@ "description": { "messageByLocale": { "en": "Hide the **layer**.", - "fr-FR": "Cachez le **calque**.", - "th-TH": "ซ่อน *เลเยอร์*" + "fr": "Cachez le **calque**.", + "es": "Oculta la **capa**.", + "pt": "Esconda a **camada**.", + "th": "ซ่อน *เลเยอร์*" } }, "placement": "top" @@ -1951,8 +2303,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "Terminé", + "pt": "Terminei", + "th": "เสร็จแล้ว" } } }, @@ -1960,8 +2314,10 @@ "description": { "messageByLocale": { "en": "Now select the $(youWinText) **instance** on the **scene** and change its **layer** using the **properties panel**.\n\nIt should have disappeared!", - "fr-FR": "Sélectionnez l'instance de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché.", - "th-TH": "ทีนี้เลือก $(youWinText) **instance** บน **scence** และเปลี่ยน **เลเยอร์** โดยใช้ **แผงควบคุมคุณสมบัติ**\n\nมันควรจะหายไป!" + "fr": "Sélectionnez l'instance de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché.", + "es": "Ahora selecciona la **instancia** de $(youWinText) en la **escena** y cambia su **capa** usando el **panel de propiedades**.\n\n¡Debería haber desaparecido!", + "pt": "Agora selecione a **instância** de $(youWinText) na **cena** e altere sua **camada** usando o **painel de propriedades**.\n\nEle deve ter desaparecido!", + "th": "ทีนี้เลือก $(youWinText) **instance** บน **scence** และเปลี่ยน **เลเยอร์** โดยใช้ **แผงควบคุมคุณสมบัติ**\n\nมันควรจะหายไป!" } }, "standalone": true @@ -1976,8 +2332,10 @@ "description": { "messageByLocale": { "en": "We are now going to add some logic to our game.", - "fr-FR": "Nous allons maintenant ajouter de la logique à notre jeu.", - "th-TH": "เราจะเพิ่มโลจิกบางอย่างเข้าไปในเกม" + "fr": "Nous allons maintenant ajouter de la logique à notre jeu.", + "es": "Ahora vamos a añadir lógica a nuestro juego.", + "pt": "Agora vamos adicionar lógica ao nosso jogo.", + "th": "เราจะเพิ่มโลจิกบางอย่างเข้าไปในเกม" } } } @@ -1992,8 +2350,10 @@ "title": { "messageByLocale": { "en": "Let's add our first **Event**!", - "fr-FR": "Créons notre premier **évènement** !", - "th-TH": "มาเพิ่ม **อีเวนท์** แรกกันเถอะ!" + "fr": "Créons notre premier **évènement** !", + "es": "¡Añadamos nuestro primer **evento**!", + "pt": "Vamos adicionar nosso primeiro **evento**!", + "th": "มาเพิ่ม **อีเวนท์** แรกกันเถอะ!" } } } @@ -2007,8 +2367,10 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Créez une **condition**.", - "th-TH": "เพิ่ม **เงื่อนไข**" + "fr": "Créez une **condition**.", + "es": "Añade una **condición**.", + "pt": "Adicione uma **condição**.", + "th": "เพิ่ม **เงื่อนไข**" } } } @@ -2022,8 +2384,10 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-FR": "Cliquez sur $(projectile).", - "th-TH": "เลือก $(projectile)" + "fr": "Cliquez sur $(projectile).", + "es": "Selecciona $(projectile).", + "pt": "Selecione $(projectile).", + "th": "เลือก $(projectile)" } } }, @@ -2038,8 +2402,10 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-FR": "Cliquez sur la condition collision.", - "th-TH": "เลือกเงื่อนไขการชนกัน" + "fr": "Cliquez sur la condition collision.", + "es": "Selecciona la condición de colisión.", + "pt": "Selecione a condição de colisão.", + "th": "เลือกเงื่อนไขการชนกัน" } } }, @@ -2054,8 +2420,10 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-FR": "Cliquez sur $(target).", - "th-TH": "เลือก $(target)" + "fr": "Cliquez sur $(target).", + "es": "Selecciona $(target).", + "pt": "Selecione $(target).", + "th": "เลือก $(target)" } }, "placement": "top" @@ -2071,8 +2439,10 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "La condition est maintenant configurée.", - "th-TH": "เอาล่ะ **เงื่อนไข** ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "La condition est maintenant configurée.", + "es": "La condición está configurada.", + "pt": "A condição está configurada.", + "th": "เอาล่ะ **เงื่อนไข** ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -2087,8 +2457,10 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-FR": "Créez une **action** maintenant.", - "th-TH": "เพิ่ม **การกระทำ**" + "fr": "Créez une **action** maintenant.", + "es": "Añade una **acción** ahora.", + "pt": "Adicione uma **ação** agora.", + "th": "เพิ่ม **การกระทำ**" } } } @@ -2102,8 +2474,10 @@ "description": { "messageByLocale": { "en": "Select $(target).", - "fr-FR": "Cliquez sur $(target).", - "th-TH": "เลือก $(target)" + "fr": "Cliquez sur $(target).", + "es": "Selecciona $(target).", + "pt": "Selecione $(target).", + "th": "เลือก $(target)" } } }, @@ -2118,8 +2492,10 @@ "description": { "messageByLocale": { "en": "We will make $(target) disappear on collision.", - "fr-FR": "Nous allons faire disparaître $(target) au moment de la collision.", - "th-TH": "เราจะทำให้ $(target) หายไปหลังจากชน" + "fr": "Nous allons faire disparaître $(target) au moment de la collision.", + "es": "Haremos que $(target) desaparezca en la colisión.", + "pt": "Vamos fazer com que $(target) desapareça na colisão.", + "th": "เราจะทำให้ $(target) หายไปหลังจากชน" } } }, @@ -2134,8 +2510,10 @@ "description": { "messageByLocale": { "en": "Alright, $(target) will now disappear when $(projectile) hits it.", - "fr-FR": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra.", - "th-TH": "เอาล่ะ ทีนี้ $(target) จะหายไปเมื่อถูก $(projectile) ชน" + "fr": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra.", + "es": "Perfecto, $(target) desaparecerá cuando $(projectile) lo golpee.", + "pt": "Ótimo, $(target) desaparecerá quando $(projectile) o atingir.", + "th": "เอาล่ะ ทีนี้ $(target) จะหายไปเมื่อถูก $(projectile) ชน" } }, "placement": "top" @@ -2150,8 +2528,10 @@ "description": { "messageByLocale": { "en": "Let's add another **action** that will be executed for the same **condition**.", - "fr-FR": "Créons une autre **action** qui sera exécutée pour la même **condition**.", - "th-TH": "สร้าง **การกระทำ** เพิ่มอีก ซึ่งจะใช้ในกรณี **เงื่อนไข** เดียวกัน" + "fr": "Créons une autre **action** qui sera exécutée pour la même **condition**.", + "es": "Añade otra **acción** que se ejecutará para la misma **condición**.", + "pt": "Adicione outra **ação** que será executada para a mesma **condição**.", + "th": "สร้าง **การกระทำ** เพิ่มอีก ซึ่งจะใช้ในกรณี **เงื่อนไข** เดียวกัน" } } } @@ -2165,8 +2545,10 @@ "description": { "messageByLocale": { "en": "Search for “layer”.", - "fr-FR": "Cherchez “calque”.", - "th-TH": "ค้นหา “layer”" + "fr": "Cherchez “calque”.", + "es": "Busca “capa”.", + "pt": "Procure por “camada”.", + "th": "ค้นหา “layer”" } } }, @@ -2181,8 +2563,10 @@ "description": { "messageByLocale": { "en": "Select the **Show a layer** action.", - "fr-FR": "Cliquez sur l'action **Afficher un calque**.", - "th-TH": "เลือกการกระทำ **แสดงเลเยอร์**" + "fr": "Cliquez sur l'action **Afficher un calque**.", + "es": "Selecciona la **acción Mostrar una capa**.", + "pt": "Selecione a **ação Mostrar uma camada**.", + "th": "เลือกการกระทำ **แสดงเลเยอร์**" } } }, @@ -2197,8 +2581,10 @@ "description": { "messageByLocale": { "en": "Select the **layer** you created.", - "fr-FR": "Sélectionnez le **calque** que vous avez créé.", - "th-TH": "เลือก **เลเยอร์** ที่คุณสร้าง" + "fr": "Sélectionnez le **calque** que vous avez créé.", + "es": "Selecciona la **capa** que has creado.", + "pt": "Selecione a **camada** que você criou.", + "th": "เลือก **เลเยอร์** ที่คุณสร้าง" } }, "placement": "top" @@ -2214,8 +2600,10 @@ "description": { "messageByLocale": { "en": "Alright, now the title should appear when the player hits $(target) with $(projectile).", - "fr-FR": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile).", - "th-TH": "เอาล่ะ ทีนี้ข้อความควรจะปรากฎเมื่อผู้เล่นโยน $(projectile) ชน $(target)" + "fr": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile).", + "es": "Ahora, el título de victoria debería aparecer cuando el jugador golpee a $(target) con $(projectile).", + "pt": "Agora, o título de vitória deve aparecer quando o jogador atingir $(target) com $(projectile).", + "th": "เอาล่ะ ทีนี้ข้อความควรจะปรากฎเมื่อผู้เล่นโยน $(projectile) ชน $(target)" } }, "placement": "top" @@ -2230,12 +2618,33 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to create some constraints for the player.", - "fr-FR": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse.", - "th-TH": "กลับไปยัง **scene** เพื่อสร้างขีดจำกัดให้ผู้เล่น " + "fr": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse.", + "es": "Volvamos a la **escena** para crear algunas restricciones para el jugador.", + "pt": "Vamos voltar para a **cena** para criar algumas restrições para o jogador.", + "th": "กลับไปยัง **scene** เพื่อสร้างขีดจำกัดให้ผู้เล่น " } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "SwitchToScene1", "elementToHighlightId": "#add-new-object-button", @@ -2247,8 +2656,10 @@ "description": { "messageByLocale": { "en": "We'll define an area where the player can grab $(projectile). Outside of this area, the $(projectile)s will be free.", - "fr-FR": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre.", - "th-TH": "เราจะกำหนดพื้นที่ที่ผู้เล่นจะสามารถจับ $(projectile) นอกเหนือจากพื้นที่ดังกล่าวนั้น $(projectile) จะเป็นอิสระ" + "fr": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre.", + "es": "Definiremos un área donde el jugador pueda coger $(projectile)s. Fuera de esta área, los $(projectile)s serán libres.", + "pt": "Vamos definir uma área onde o jogador pode pegar $(projectile)s. Fora desta área, os $(projectile)s serão livres.", + "th": "เราจะกำหนดพื้นที่ที่ผู้เล่นจะสามารถจับ $(projectile) นอกเหนือจากพื้นที่ดังกล่าวนั้น $(projectile) จะเป็นอิสระ" } } } @@ -2262,8 +2673,10 @@ "description": { "messageByLocale": { "en": "Let's choose an object from the asset store", - "fr-FR": "Nous allons choisir un objet dans le **magasin de ressources**.", - "th-TH": "เลือกวัตถุจากร้านค้า asset" + "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "es": "Vamos a elegir un objeto de la tienda de recursos.", + "pt": "Vamos escolher um objeto da loja de recursos.", + "th": "เลือกวัตถุจากร้านค้า asset" } }, "placement": "bottom" @@ -2280,8 +2693,10 @@ "description": { "messageByLocale": { "en": "Type “**background**”.", - "fr-FR": "Cherchez “**background**”.", - "th-TH": "พิมพ์ “**background**”" + "fr": "Cherchez “**background**”.", + "es": "Escribe “**background**”.", + "pt": "Digite “**background**”.", + "th": "พิมพ์ “**background**”" } } }, @@ -2323,8 +2738,10 @@ "description": { "messageByLocale": { "en": "Let's use it now!", - "fr-FR": "Mettons la zone en place.", - "th-TH": "เอาไปใช้เลย!" + "fr": "Mettons la zone en place.", + "es": "¡Vamos a usarla ahora!", + "pt": "Vamos usá-la agora!", + "th": "เอาไปใช้เลย!" } } } @@ -2338,8 +2755,10 @@ "description": { "messageByLocale": { "en": "Drag $(grabArea) from the menu to the canvas.", - "fr-FR": "Faites glisser $(grabArea) du menu à au canvas.", - "th-TH": "ลาก $(grabArea) จากเมนูไปยังแคนวาส" + "fr": "Faites glisser $(grabArea) du menu à au canvas.", + "es": "Arrastra $(grabArea) desde el menú al lienzo.", + "pt": "Arraste $(grabArea) do menu para o canvas.", + "th": "ลาก $(grabArea) จากเมนูไปยังแคนวาส" } }, "placement": "left" @@ -2350,8 +2769,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "He terminado", + "pt": "Eu terminei", + "th": "เสร็จแล้ว" } } }, @@ -2360,8 +2781,10 @@ "description": { "messageByLocale": { "en": "Drag and resize $(grabArea) until it covers the lower left side of the game screen.", - "fr-FR": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu.", - "th-TH": "ลากและปรับขนาด $(grabArea) จนมันครอบคลุมบริเวณซ้ายล่างในหน้าจอเกมของคุณ" + "fr": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu.", + "es": "Arrastra y redimensiona $(grabArea) hasta que cubra la parte inferior izquierda de la pantalla del juego.", + "pt": "Arraste e redimensione $(grabArea) até que ele cubra a parte inferior esquerda da tela do jogo.", + "th": "ลากและปรับขนาด $(grabArea) จนมันครอบคลุมบริเวณซ้ายล่างในหน้าจอเกมของคุณ" } }, "image": { @@ -2372,14 +2795,16 @@ { "elementToHighlightId": "#instance-properties-editor [id=\"Z Order\"]", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "0" }, "tooltip": { "description": { "messageByLocale": { "en": "Make sure that $(grabArea) is selected and change this value to **0**.", - "fr-FR": "Sélectionnez l'instance de $(grabArea) et définissez sa position sur l'axe z à **0**.", - "th-TH": "ดูให้แน่ใจว่า $(grabArea) ถูกเลือกอยู่ และปรับค่านี้เป็น **0**" + "fr": "Sélectionnez l'instance de $(grabArea) et définissez sa position sur l'axe z à **0**.", + "es": "Asegúrate de que $(grabArea) está seleccionado y cambia este valor a **0**.", + "pt": "Certifique-se de que $(grabArea) está selecionado e mude este valor para **0**.", + "th": "ดูให้แน่ใจว่า $(grabArea) ถูกเลือกอยู่ และปรับค่านี้เป็น **0**" } }, "placement": "right" @@ -2394,8 +2819,10 @@ "description": { "messageByLocale": { "en": "Let's deactivate the draggable **behavior** of $(projectile) when outside of the $(grabArea).", - "fr-FR": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea).", - "th-TH": "ปิดฟังก์ชันในการสามารถถูกลาก **พฤติกรรม** ของ $(projectile) เมื่ออยู่ภายนอก $(grabArea)" + "fr": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea).", + "es": "Ahora, desactivemos el **comportamiento** “draggable” cuando los $(projectile)s estén fuera de la zona $(grabArea).", + "pt": "Agora, desative o **comportamento** “draggable” quando os $(projectile)s estiverem fora da área $(grabArea).", + "th": "ปิดฟังก์ชันในการสามารถถูกลาก **พฤติกรรม** ของ $(projectile) เมื่ออยู่ภายนอก $(grabArea)" } } } @@ -2411,8 +2838,10 @@ "description": { "messageByLocale": { "en": "Let's create a new event!", - "fr-FR": "Créez un nouvel évènement.", - "th-TH": "สร้างอีเวนท์ใหม่กันเถอะ!" + "fr": "Créez un nouvel évènement.", + "es": "¡Creemos un nuevo evento!", + "pt": "Vamos criar um novo evento!", + "th": "สร้างอีเวนท์ใหม่กันเถอะ!" } } } @@ -2426,8 +2855,10 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Ajoutez une **condition**.", - "th-TH": "เพิ่ม **เงื่อนไข**" + "fr": "Ajoutez une **condition**.", + "es": "Agrega una **condición**.", + "pt": "Adicione uma **condição**.", + "th": "เพิ่ม **เงื่อนไข**" } } } @@ -2441,8 +2872,10 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-FR": "Cliquez sur $(projectile).", - "th-TH": "เลือก $(projectile)" + "fr": "Cliquez sur $(projectile).", + "es": "Selecciona $(projectile).", + "pt": "Selecione $(projectile).", + "th": "เลือก $(projectile)" } } }, @@ -2457,8 +2890,10 @@ "description": { "messageByLocale": { "en": "Select the collision condition.", - "fr-FR": "Cliquez sur la condition collision.", - "th-TH": "เลือกเงื่อนไขการชนกัน" + "fr": "Cliquez sur la condition collision.", + "es": "Selecciona la condición de colisión.", + "pt": "Selecione a condição de colisão.", + "th": "เลือกเงื่อนไขการชนกัน" } } }, @@ -2473,8 +2908,10 @@ "description": { "messageByLocale": { "en": "Select $(grabArea).", - "fr-FR": "Cliquez sur $(grabArea).", - "th-TH": "เลือก $(grabArea)" + "fr": "Cliquez sur $(grabArea).", + "es": "Selecciona $(grabArea).", + "pt": "Selecione $(grabArea).", + "th": "เลือก $(grabArea)" } }, "placement": "top" @@ -2490,8 +2927,10 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "La **condition** est maintenant prête.", - "th-TH": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "La **condition** est maintenant prête.", + "es": "¡La **condición** está lista!", + "pt": "A **condição** está pronta!", + "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -2506,8 +2945,10 @@ "description": { "messageByLocale": { "en": "Right click on this newly created **condition** and select “Invert condition”.", - "fr-FR": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”.", - "th-TH": "คลิกขวาที่ **เงื่อนไข** ที่เพิ่งสร้างขึ้นมาและเลือก “เงื่อนไขแบบตรงกันข้าม”" + "fr": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”.", + "es": "Haz clic derecho en la nueva **condición** y selecciona “Invertir condición”.", + "pt": "Clique com o botão direito na nova **condição** e selecione “Inverter condição”.", + "th": "คลิกขวาที่ **เงื่อนไข** ที่เพิ่งสร้างขึ้นมาและเลือก “เงื่อนไขแบบตรงกันข้าม”" } }, "placement": "right" @@ -2522,8 +2963,10 @@ "description": { "messageByLocale": { "en": "Add an action.", - "fr-FR": "Ajoutez une action.", - "th-TH": "เพิ่มการกระทำ" + "fr": "Ajoutez une action.", + "es": "Agrega una acción.", + "pt": "Adicione uma ação.", + "th": "เพิ่มการกระทำ" } } } @@ -2537,8 +2980,10 @@ "description": { "messageByLocale": { "en": "Select $(projectile).", - "fr-FR": "Cliquez sur $(projectile).", - "th-TH": "เลือก $(projectile)" + "fr": "Cliquez sur $(projectile).", + "es": "Selecciona $(projectile).", + "pt": "Selecione $(projectile).", + "th": "เลือก $(projectile)" } } }, @@ -2553,8 +2998,10 @@ "description": { "messageByLocale": { "en": "Select the **action** that releases the $(projectile) from the player drag.", - "fr-FR": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse.", - "th-TH": "เลือก **การกระทำ** ที่ปล่อย $(projectile) จากการถูกผู้เล่นจับลาก" + "fr": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse.", + "es": "Selecciona la **acción** que libera el $(projectile) del arrastre del jugador.", + "pt": "Selecione a **ação** que libera o $(projectile) do arrasto do jogador.", + "th": "เลือก **การกระทำ** ที่ปล่อย $(projectile) จากการถูกผู้เล่นจับลาก" } } }, @@ -2569,8 +3016,10 @@ "description": { "messageByLocale": { "en": "We're good.", - "fr-FR": "C'est bon.", - "th-TH": "มาถูกทางแล้ว" + "fr": "C'est bon.", + "es": "¡Está bien!", + "pt": "Está bom.", + "th": "มาถูกทางแล้ว" } }, "placement": "top" @@ -2585,8 +3034,10 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to place the $(projectile)s correctly.", - "fr-FR": "Revenons à la **scène** pour placer les $(projectile)s correctement.", - "th-TH": "กลับไปยัง **scene** เพื่อวาง $(projectile) ให้ถูกต้อง" + "fr": "Revenons à la **scène** pour placer les $(projectile)s correctement.", + "es": "Volvamos a la **escena** para colocar los $(projectile)s correctamente.", + "pt": "Vamos voltar para a **cena** para colocar os $(projectile)s corretamente.", + "th": "กลับไปยัง **scene** เพื่อวาง $(projectile) ให้ถูกต้อง" } } } @@ -2597,8 +3048,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "Ya terminé", + "pt": "Terminei", + "th": "เสร็จแล้ว" } } }, @@ -2608,15 +3061,19 @@ "title": { "messageByLocale": { "en": "Rearrange the $(projectile)s.", - "fr-FR": "Repositionnez les $(projectile)s.", - "th-TH": "จัดระเบียบ $(projectile)" + "fr": "Repositionnez les $(projectile)s.", + "es": "Reordena los $(projectile)s.", + "pt": "Reorganize os $(projectile)s.", + "th": "จัดระเบียบ $(projectile)" } }, "description": { "messageByLocale": { "en": "Drag all **instances** of $(projectile) within the boundaries of $(background).", - "fr-FR": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background).", - "th-TH": "ลาก **instances** ของ $(projectile) ภายในขอบเขต $(background)" + "fr": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background).", + "es": "Arrastra todas las **instancias** de $(projectile) dentro de los límites de $(background).", + "pt": "Arraste todas as **instâncias** de $(projectile) dentro dos limites de $(background).", + "th": "ลาก **instances** ของ $(projectile) ภายในขอบเขต $(background)" } } } @@ -2626,8 +3083,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "Ya terminé", + "pt": "Terminei", + "th": "เสร็จแล้ว" } } }, @@ -2637,15 +3096,19 @@ "title": { "messageByLocale": { "en": "Set up $(target) protection.", - "fr-FR": "Créez une protection pour $(target).", - "th-TH": "ตั้งที่ป้องกัน $(target)" + "fr": "Créez une protection pour $(target).", + "es": "Configura la protección de $(target).", + "pt": "Configure a proteção de $(target).", + "th": "ตั้งที่ป้องกัน $(target)" } }, "description": { "messageByLocale": { "en": "Arrange both $(block) and $(obstacle) in a way to protect $(target).", - "fr-FR": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target).", - "th-TH": "จัดวาง $(block) และ $(obstacle) โดยมีเป้าหมายเพื่อปกป้อง $(target)" + "fr": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target).", + "es": "Coloca las instancias de $(block) y $(obstacle) de manera que protejan a $(target).", + "pt": "Coloque as instâncias de $(block) e $(obstacle) de forma a proteger $(target).", + "th": "จัดวาง $(block) และ $(obstacle) โดยมีเป้าหมายเพื่อปกป้อง $(target)" } } } @@ -2659,8 +3122,10 @@ "description": { "messageByLocale": { "en": "**Preview** the game and make sure it's winnable.", - "fr-FR": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target).", - "th-TH": "ลองเล่น **ดูตัวอย่าง** เพื่อให้มั่นใจว่าสามารถเล่นเกมชนะได้" + "fr": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target).", + "es": "**Previsualiza** el juego y asegúrate de que es posible ganar.", + "pt": "**Pré-visualize** o jogo e certifique-se de que é possível ganhar.", + "th": "ลองเล่น **ดูตัวอย่าง** เพื่อให้มั่นใจว่าสามารถเล่นเกมชนะได้" } }, "placement": "bottom" @@ -2675,8 +3140,10 @@ "description": { "messageByLocale": { "en": "Once you're ready, we'll generate a link to share your game.", - "fr-FR": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu.", - "th-TH": "เมื่อพร้อมแล้ว เราจะสร้างลิงค์สำหรับแชร์เกม" + "fr": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu.", + "es": "Una vez que estés listo, generaremos un enlace para compartir tu juego.", + "pt": "Quando estiver pronto, criaremos um link para compartilhar o seu jogo.", + "th": "เมื่อพร้อมแล้ว เราจะสร้างลิงค์สำหรับแชร์เกม" } }, "placement": "bottom" @@ -2691,8 +3158,10 @@ "description": { "messageByLocale": { "en": "First, you need to create an account.", - "fr-FR": "Tout d'abord, vous devez vous créer un compte.", - "th-TH": "ก่อนอื่น คุณจะต้องมีบัญชี" + "fr": "Tout d'abord, vous devez vous créer un compte.", + "es": "Primero, debes crear una cuenta.", + "pt": "Primeiro, você precisa criar uma conta.", + "th": "ก่อนอื่น คุณจะต้องมีบัญชี" } }, "placement": "bottom" @@ -2722,8 +3191,10 @@ "description": { "messageByLocale": { "en": "Fill in the form and then click here.", - "fr-FR": "Remplissez le formulaire et cliquez ici.", - "th-TH": "กรอกฟอร์มแล้วกดตรงนี้" + "fr": "Remplissez le formulaire et cliquez ici.", + "es": "Rellena el formulario y luego haz clic aquí.", + "pt": "Preencha o formulário e clique aqui.", + "th": "กรอกฟอร์มแล้วกดตรงนี้" } }, "placement": "bottom" @@ -2740,8 +3211,10 @@ "description": { "messageByLocale": { "en": "After filling your info, click here.", - "fr-FR": "Après avoir rempli le formulaire, cliquez ici.", - "th-TH": "หลังจากกรอกข้อมูลของคุณแล้ว กดตรงนี้" + "fr": "Après avoir rempli le formulaire, cliquez ici.", + "es": "Después de rellenar el formulario, haz clic aquí.", + "pt": "Depois de preencher o formulário, clique aqui.", + "th": "หลังจากกรอกข้อมูลของคุณแล้ว กดตรงนี้" } }, "placement": "bottom" @@ -2758,8 +3231,10 @@ "description": { "messageByLocale": { "en": "Click here to **publish** your game.", - "fr-FR": "Cliquez ici pour **publier** votre jeu.", - "th-TH": "กดที่นี่เพื่อ **เผยแพร่** เกมของคุณ" + "fr": "Cliquez ici pour **publier** votre jeu.", + "es": "Haz clic aquí para **publicar** tu juego.", + "pt": "Clique aqui para **publicar** o seu jogo.", + "th": "กดที่นี่เพื่อ **เผยแพร่** เกมของคุณ" } }, "placement": "bottom" @@ -2781,8 +3256,10 @@ "description": { "messageByLocale": { "en": "Click here to open your game in your browser. Remember to share the link so that others can play your game!\n\nOnce you're done, close this dialog.", - "fr-FR": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre.", - "th-TH": "คลิกที่นี่เพื่อเปิดเกมของคุณบนเบราวเซอร์ อย่าลืมแชร์ลิงค์เพื่อให้ผู้เล่นคนอื่นสามารถเล่นเกมของคุณได้!\n\nหลังจากเสร็จแล้ว ปิดหน้าต่างนี้" + "fr": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre.", + "es": "Haz clic aquí para abrir tu juego en tu navegador. ¡Recuerda compartir el enlace para que otros puedan jugar tu juego!\n\nUna vez que hayas terminado, cierra esta ventana.", + "pt": "Clique aqui para abrir o seu jogo no seu navegador. Lembre-se de compartilhar o link para que outros possam jogar o seu jogo!\n\nUma vez que você terminar, feche esta janela.", + "th": "คลิกที่นี่เพื่อเปิดเกมของคุณบนเบราวเซอร์ อย่าลืมแชร์ลิงค์เพื่อให้ผู้เล่นคนอื่นสามารถเล่นเกมของคุณได้!\n\nหลังจากเสร็จแล้ว ปิดหน้าต่างนี้" } }, "placement": "top" @@ -2796,29 +3273,37 @@ { "messageByLocale": { "en": "## Congratulations!", - "fr-FR": "## Félicitations !" - , "th-TH": "## ยินดีด้วย!" + "fr": "## Félicitations !", + "es": "## ¡Felicidades!", + "pt": "## Parabéns!", + "th": "## ยินดีด้วย!" } }, { "messageByLocale": { "en": "You have finished the second part of your Fling Game.", - "fr-FR": "Vous avez terminé la seconde partie de votre jeu." - , "th-TH": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" + "fr": "Vous avez terminé la seconde partie de votre jeu.", + "es": "Has terminado la segunda parte de tu juego.", + "pt": "Você terminou a segunda parte do seu jogo.", + "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" } }, { "messageByLocale": { "en": "You've discovered other basics of GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", - "fr-FR": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" - , "th-TH": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" + "fr": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", + "es": "Has descubierto otros conceptos básicos de GDevelop:\n- [Eventos](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Objetos de texto](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Capas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Acciones y condiciones](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", + "pt": "Você descobriu outros conceitos básicos do GDevelop:\n- [Eventos](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Objetos de texto](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Camadas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Ações e Condições](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", + "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { "messageByLocale": { "en": "Now you can take a break from the tutorial, or add a leaderboard on the next chapter.", - "fr-FR": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score." - , "th-TH": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเพื่อเพิ่มกระดานคะแนนเลยก็ได้" + "fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score.", + "es": "Ahora puedes hacer una pausa antes de comenzar el próximo capítulo para agregar una tabla de clasificación.", + "pt": "Agora você pode fazer uma pausa antes de começar o próximo capítulo para adicionar uma tabela de classificação.", + "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเพื่อเพิ่มกระดานคะแนนเลยก็ได้" } } ] @@ -2833,8 +3318,10 @@ "description": { "messageByLocale": { "en": "Right click on your $(background) and click “set as **global object**”.", - "fr-FR": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”.", - "th-TH": "คลิกขวาที่ $(background) และเลือก “ตั้งเป็น **วัตถุโกลบอล**”" + "fr": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”.", + "es": "Haga clic derecho en $(background) y seleccione “Definir como **objeto global**”.", + "pt": "Clique com o botão direito em $(background) e selecione “Definir como **objeto global**”.", + "th": "คลิกขวาที่ $(background) และเลือก “ตั้งเป็น **วัตถุโกลบอล**”" } }, "placement": "left" @@ -2849,8 +3336,10 @@ "title": { "messageByLocale": { "en": "Now let's create a new **scene** for our start screen.", - "fr-FR": "Créons une scène qui servira d'écran d'ouverture du jeu.", - "th-TH": "ทีนี้สร้าง **scene** ใหม่ สำหรับฉากเริ่มต้น" + "fr": "Créons une scène qui servira d'écran d'ouverture du jeu.", + "es": "Ahora creemos una nueva **escena** para nuestra pantalla de inicio.", + "pt": "Agora vamos criar uma nova **cena** para a nossa tela inicial.", + "th": "ทีนี้สร้าง **scene** ใหม่ สำหรับฉากเริ่มต้น" } }, "placement": "right" @@ -2865,8 +3354,10 @@ "description": { "messageByLocale": { "en": "Click here.", - "fr-FR": "Cliquez ici.", - "th-TH": "คลิกที่นี่" + "fr": "Cliquez ici.", + "es": "Haga clic aquí.", + "pt": "Clique aqui.", + "th": "คลิกที่นี่" } }, "placement": "right" @@ -2884,8 +3375,10 @@ "description": { "messageByLocale": { "en": "Right click on the new scene and change its name to “**StartScreen**”.\n\nOnce you're done, click on the item to open the new scene.", - "fr-FR": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène.", - "th-TH": "คลิกขวาที่ scene ใหม่และเปลี่ยนชื่อเป็น “**StartScreen**”\n\nเมื่อเสร็จแล้ว คลิกที่ไอเทมเพื่อเปิด scene ใหม่" + "fr": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène.", + "es": "Haga clic derecho en la nueva escena y cambie su nombre a “**PantallaInicio**”.\n\nUna vez terminado, haga clic en el elemento para abrir la escena.", + "pt": "Clique com o botão direito na nova cena e altere o nome para “**TelaInicial**”.\n\nUma vez terminado, clique no item para abrir a nova cena.", + "th": "คลิกขวาที่ scene ใหม่และเปลี่ยนชื่อเป็น “**StartScreen**”\n\nเมื่อเสร็จแล้ว คลิกที่ไอเทมเพื่อเปิด scene ใหม่" } }, "placement": "right" @@ -2901,8 +3394,10 @@ "description": { "messageByLocale": { "en": "Drag $(background) into the scene.", - "fr-FR": "Faites glisser $(background) du menu au canvas.", - "th-TH": "ลาก $(background) มาใส่ใน scene" + "fr": "Faites glisser $(background) du menu au canvas.", + "es": "Arrastre $(background) desde el menú al lienzo.", + "pt": "Arraste $(background) do menu para a cena.", + "th": "ลาก $(background) มาใส่ใน scene" } }, "placement": "left" @@ -2913,8 +3408,10 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "fr-FR": "J'ai terminé", - "th-TH": "เสร็จแล้ว" + "fr": "J'ai terminé", + "es": "He terminado", + "pt": "Terminei", + "th": "เสร็จแล้ว" } } }, @@ -2923,8 +3420,10 @@ "description": { "messageByLocale": { "en": "Drag to expand the size $(background) until it stretches over your entire game area.", - "fr-FR": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu.", - "th-TH": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" + "fr": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu.", + "es": "Arrastre para expandir el tamaño de $(background) hasta que se estire sobre toda la área del juego.", + "pt": "Arraste para expandir o tamanho de $(background) até que ele se estenda sobre toda a área do jogo.", + "th": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" } }, "image": { @@ -2932,6 +3431,25 @@ } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForStartScreenTitle", "elementToHighlightId": "#scene-editor[data-active=true] #add-new-object-button", @@ -2943,8 +3461,10 @@ "description": { "messageByLocale": { "en": "Now let's create a title!", - "fr-FR": "Maintenant, créons un titre!", - "th-TH": "ทีนี้ได้เวลาสร้าง title!" + "fr": "Maintenant, créons un titre!", + "es": "¡Ahora creemos un título!", + "pt": "Agora, vamos criar um título!", + "th": "ทีนี้ได้เวลาสร้าง title!" } } } @@ -2958,8 +3478,10 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-FR": "Nous allons créer un objet texte de zéro.", - "th-TH": "สร้างข้อความเอง" + "fr": "Nous allons créer un objet texte de zéro.", + "es": "Vamos a crear un texto desde cero.", + "pt": "Vamos criar um texto do zero.", + "th": "สร้างข้อความเอง" } }, "placement": "bottom" @@ -2976,8 +3498,10 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-FR": "Sélectionnez l'objet **Texte**", - "th-TH": "เลือกวัตถุ **ข้อความ**" + "fr": "Sélectionnez l'objet **Texte**", + "es": "Selecciona el objeto **Texto**", + "pt": "Selecione o objeto **Texto**", + "th": "เลือกวัตถุ **ข้อความ**" } }, "placement": "bottom" @@ -2987,14 +3511,16 @@ { "elementToHighlightId": "#object-name", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Title" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the object name to “Title”.", - "fr-FR": "Changez le nom de l'objet pour “Titre”.", - "th-TH": "เปลี่ยนชื่อวัตถุเป็น “Title”" + "fr": "Changez le nom de l'objet pour “Title”.", + "es": "Cambia el nombre del objeto a “Title”.", + "pt": "Mude o nome do objeto para “Title”.", + "th": "เปลี่ยนชื่อวัตถุเป็น “Title”" } }, "placement": "bottom" @@ -3004,14 +3530,16 @@ { "elementToHighlightId": "#text-object-font-size", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "200" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the font size to **200**.", - "fr-FR": "Utilisez une taille de **200**.", - "th-TH": "แก้ไขขนาดฟอนต์เป็น **200**" + "fr": "Utilisez une taille de **200**.", + "es": "Utiliza un tamaño de **200**.", + "pt": "Use um tamanho de **200**.", + "th": "แก้ไขขนาดฟอนต์เป็น **200**" } }, "placement": "bottom" @@ -3027,8 +3555,10 @@ "description": { "messageByLocale": { "en": "Change the initial text to display whatever you want the title of your game to be.", - "fr-FR": "Entrez le nom que vous avez choisi pour votre jeu.", - "th-TH": "เปลี่ยนข้อความเริ่มต้นเป็นชื่อเกมของคุณ อะไรก็ได้" + "fr": "Entrez le nom que vous avez choisi pour votre jeu.", + "es": "Escribe el nombre que has elegido para tu juego.", + "pt": "Digite o nome que você escolheu para o seu jogo.", + "th": "เปลี่ยนข้อความเริ่มต้นเป็นชื่อเกมของคุณ อะไรก็ได้" } }, "placement": "bottom" @@ -3044,8 +3574,10 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé.", - "th-TH": "เสร็จแล้ว" + "fr": "Nous avons terminé.", + "es": "Hemos terminado.", + "pt": "Terminamos.", + "th": "เสร็จแล้ว" } } }, @@ -3062,8 +3594,10 @@ "description": { "messageByLocale": { "en": "Drag $(title) into the **scene** where you'd like your title to be.", - "fr-FR": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu..", - "th-TH": "ลาก $(title) ไปยัง **scene** ที่คุณต้องการใส่ชื่อเกม" + "fr": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu.", + "es": "Arrastra $(title) desde el menú al lienzo y colócalo donde quieras en la pantalla de juego.", + "pt": "Arraste $(title) do menu para o canvas e coloque-o onde quiser na tela do jogo.", + "th": "ลาก $(title) ไปยัง **scene** ที่คุณต้องการใส่ชื่อเกม" } }, "placement": "left" @@ -3078,8 +3612,10 @@ "description": { "messageByLocale": { "en": "Right-click on $(title) and select “Duplicate”.", - "fr-FR": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”.", - "th-TH": "คลิกขวาที่ $(title) และเลือก “คัดลอกซ้ำ”" + "fr": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”.", + "es": "Haz clic derecho en $(title) y selecciona “Duplicar”.", + "pt": "Clique com o botão direito em $(title) e selecione “Duplicar”.", + "th": "คลิกขวาที่ $(title) และเลือก “คัดลอกซ้ำ”" } }, "placement": "left" @@ -3097,8 +3633,10 @@ "description": { "messageByLocale": { "en": "Double click on $(startText).", - "fr-FR": "Double-cliquez sur $(startText).", - "th-TH": "ดับเบิ้ลคลิกที่ $(startText)" + "fr": "Double-cliquez sur $(startText).", + "es": "Haz doble clic en $(startText).", + "pt": "Clique duas vezes em $(startText).", + "th": "ดับเบิ้ลคลิกที่ $(startText)" } }, "placement": "left" @@ -3107,14 +3645,16 @@ { "elementToHighlightId": "#object-name", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Start" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the **object** name to “**Start**”.", - "fr-FR": "Changez le nom de **l'objet** pour “**Jouer**”.", - "th-TH": "เปลี่ยนชื่อ **วัตถุ** เป็น “**Start**”" + "fr": "Changez le nom de **l'objet** pour “**Start**”.", + "es": "Cambia el nombre del **objeto** a “**Start**”.", + "pt": "Mude o nome do **objeto** para “**Start**”.", + "th": "เปลี่ยนชื่อ **วัตถุ** เป็น “**Start**”" } }, "placement": "bottom" @@ -3124,14 +3664,16 @@ { "elementToHighlightId": "#text-object-font-size", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "50" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-FR": "Utilisez une taille de **50**.", - "th-TH": "แก้ไขขนาดฟอนต์เป็น **50**" + "fr": "Utilisez une taille de **50**.", + "es": "Utiliza un tamaño de **50**.", + "pt": "Use um tamanho de **50**.", + "th": "แก้ไขขนาดฟอนต์เป็น **50**" } }, "placement": "bottom" @@ -3147,8 +3689,10 @@ "description": { "messageByLocale": { "en": "Change the initial text to “Start Game”.", - "fr-FR": "Définissez le texte de l'objet à “Jouer”.", - "th-TH": "เปลี่ยนข้อความเริ่มต้นเป็น “Start Game”" + "fr": "Définissez le texte de l'objet à “Jouer”.", + "es": "Define el texto del objeto como “Jugar”.", + "pt": "Defina o texto do objeto como “Jogar”.", + "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Start Game”" } }, "placement": "bottom" @@ -3164,8 +3708,10 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé.", - "th-TH": "เสร็จแล้ว" + "fr": "Nous avons terminé.", + "es": "Hemos terminado.", + "pt": "Terminamos.", + "th": "เสร็จแล้ว" } } }, @@ -3182,8 +3728,10 @@ "description": { "messageByLocale": { "en": "Drag $(startText) into the **scene** where you'd like the start button to be.", - "fr-FR": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez.", - "th-TH": "ลาก $(startText) ไปยัง **scene** ที่คุณต้องการใส่ปุ่มเริ่มเกม" + "fr": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez.", + "es": "Arrastra $(startText) desde el menú al lienzo en el lugar donde quieras.", + "pt": "Arraste $(startText) do menu para o canvas no lugar onde você deseja.", + "th": "ลาก $(startText) ไปยัง **scene** ที่คุณต้องการใส่ปุ่มเริ่มเกม" } }, "placement": "left" @@ -3198,8 +3746,10 @@ "description": { "messageByLocale": { "en": "Now let's interact with those titles.", - "fr-FR": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte.", - "th-TH": "โต้ตอบกับข้อความ" + "fr": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte.", + "es": "Ahora, hagamos que se pueda hacer clic en el texto.", + "pt": "Agora, vamos fazer com que seja possível clicar no texto.", + "th": "โต้ตอบกับข้อความ" } } } @@ -3214,8 +3764,10 @@ "description": { "messageByLocale": { "en": "Let's create a new **event**.", - "fr-FR": "Créez un nouvel **évènement**.", - "th-TH": "สร้าง **event** ใหม่" + "fr": "Créez un nouvel **évènement**.", + "es": "Crea un nuevo **evento**.", + "pt": "Crie um novo **evento**.", + "th": "สร้าง **event** ใหม่" } } } @@ -3229,8 +3781,10 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Ajoutez une **condition**.", - "th-TH": "เพิ่ม **เงื่อนไข**" + "fr": "Ajoutez une **condition**.", + "es": "Agrega una **condición**.", + "pt": "Adicione uma **condição**.", + "th": "เพิ่ม **เงื่อนไข**" } } } @@ -3244,8 +3798,10 @@ "description": { "messageByLocale": { "en": "Select $(startText).", - "fr-FR": "Cliquez sur $(startText).", - "th-TH": "เลือก $(startText)" + "fr": "Cliquez sur $(startText).", + "es": "Haz clic en $(startText).", + "pt": "Clique em $(startText).", + "th": "เลือก $(startText)" } } }, @@ -3260,8 +3816,10 @@ "description": { "messageByLocale": { "en": "Select the cursor condition.", - "fr-FR": "Cliquez sur cette condition de position du curseur.", - "th-TH": "เลือกเงื่อนไขเคอร์เซอร์" + "fr": "Cliquez sur cette condition de position du curseur.", + "es": "Haz clic en esta condición de posición del cursor.", + "pt": "Clique nesta condição de posição do cursor.", + "th": "เลือกเงื่อนไขเคอร์เซอร์" } } }, @@ -3276,8 +3834,10 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "Rien de plus à configurer.", - "th-TH": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "Rien de plus à configurer.", + "es": "Nada más que configurar.", + "pt": "Nada mais para configurar.", + "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3292,8 +3852,10 @@ "description": { "messageByLocale": { "en": "Add another **condition**.", - "fr-FR": "Ajoutez une autre **condition**.", - "th-TH": "เพิ่ม **เงื่อนไข** อีก" + "fr": "Ajoutez une autre **condition**.", + "es": "Agrega otra **condición**.", + "pt": "Adicione outra **condição**.", + "th": "เพิ่ม **เงื่อนไข** อีก" } } } @@ -3307,8 +3869,10 @@ "description": { "messageByLocale": { "en": "Type “**Mouse**”.", - "fr-FR": "Cherchez “**Souris**”", - "th-TH": "พิมพ์ “**Mouse**”" + "fr": "Cherchez “**Souris**”", + "es": "Escribe “**Ratón**”.", + "pt": "Digite “**Mouse**”.", + "th": "พิมพ์ “**Mouse**”" } } }, @@ -3323,8 +3887,10 @@ "description": { "messageByLocale": { "en": "Select “Mouse button released”.", - "fr-FR": "Cliquez sur “Bouton de la souris relâché”.", - "th-TH": "เลือก “ปุ่มจากเมาส์ถูกปล่อย”" + "fr": "Cliquez sur “Bouton de la souris relâché”.", + "es": "Haz clic en “Botón del ratón liberado”.", + "pt": "Clique em “Botão do mouse liberado”.", + "th": "เลือก “ปุ่มจากเมาส์ถูกปล่อย”" } } }, @@ -3339,8 +3905,10 @@ "description": { "messageByLocale": { "en": "Select “left (primary)”.", - "fr-FR": "Sélectionnez “Gauche (principal)”.", - "th-TH": "เลือก “ซ้าย (หลัก)”" + "fr": "Sélectionnez “Gauche (principal)”.", + "es": "Selecciona “Izquierda (principal)”.", + "pt": "Selecione “Esquerda (principal)”.", + "th": "เลือก “ซ้าย (หลัก)”" } }, "placement": "top" @@ -3356,8 +3924,10 @@ "description": { "messageByLocale": { "en": "Alright, the **condition** is all set.", - "fr-FR": "C'est bon pour cette condition.", - "th-TH": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "C'est bon pour cette condition.", + "es": "Está bien para esta condición.", + "pt": "Está tudo certo para esta condição.", + "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3372,8 +3942,10 @@ "description": { "messageByLocale": { "en": "Let's add an **action** now.", - "fr-FR": "Ajoutons une **action** maintenant.", - "th-TH": "เพิ่ม **การกระทำ**" + "fr": "Ajoutons une **action** maintenant.", + "es": "Agreguemos una **acción** ahora.", + "pt": "Vamos adicionar uma **ação** agora.", + "th": "เพิ่ม **การกระทำ**" } } } @@ -3387,8 +3959,10 @@ "description": { "messageByLocale": { "en": "Type “**Scene**”.", - "fr-FR": "Cherchez “**scène**”.", - "th-TH": "พิมพ์ “**Scene**”" + "fr": "Cherchez “**scène**”.", + "es": "Escribe “**Escena**”.", + "pt": "Digite “**Cena**”.", + "th": "พิมพ์ “**Scene**”" } } }, @@ -3403,8 +3977,10 @@ "description": { "messageByLocale": { "en": "Select “**Change the scene**”.", - "fr-FR": "Cliquez sur “**Changer la scène**”.", - "th-TH": "เลือก “**Change the scene**”" + "fr": "Cliquez sur “**Changer la scène**”.", + "es": "Haz clic en “**Cambiar la escena**”.", + "pt": "Clique em “**Alterar a cena**”.", + "th": "เลือก “**Change the scene**”" } } }, @@ -3419,8 +3995,10 @@ "description": { "messageByLocale": { "en": "Select “$(playScene)”.", - "fr-FR": "Sélectionnez “$(playScene)”.", - "th-TH": "เลือก “$(playScene)”" + "fr": "Sélectionnez “$(playScene)”.", + "es": "Selecciona “$(playScene)”.", + "pt": "Selecione “$(playScene)”.", + "th": "เลือก “$(playScene)”" } }, "placement": "top" @@ -3436,8 +4014,10 @@ "description": { "messageByLocale": { "en": "Alright, the **action** is all set.", - "fr-FR": "L'action est bien configurée.", - "th-TH": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "L'action est bien configurée.", + "es": "La acción está bien configurada.", + "pt": "A ação está configurada corretamente.", + "th": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -3452,12 +4032,33 @@ "description": { "messageByLocale": { "en": "Let's get back to the **scene** to add a score.", - "fr-FR": "Retournons à la **scène** pour afficher le score.", - "th-TH": "กลับไปยัง **scene** เพื่อเพิ่มคะแนน" + "fr": "Retournons à la **scène** pour afficher le score.", + "es": "Volvamos a la **escena** para mostrar el puntaje.", + "pt": "Vamos voltar para a **cena** para adicionar um score.", + "th": "กลับไปยัง **scene** เพื่อเพิ่มคะแนน" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "id": "ClickOnNewObjectButtonForScore", "elementToHighlightId": "#scene-editor[data-active=true] #add-new-object-button", @@ -3469,8 +4070,10 @@ "description": { "messageByLocale": { "en": "Let's create a text that will display the player score.", - "fr-FR": "Créez un object texte qui affichera le score du joueur ou de la joueuse.", - "th-TH": "สร้างข้อความสำหรับแสดงคะแนนผู้เล่น" + "fr": "Créez un object texte qui affichera le score du joueur ou de la joueuse.", + "es": "Crea un objeto de texto que muestre la puntuación del jugador o jugadora.", + "pt": "Vamos criar um texto que irá exibir o score do jogador.", + "th": "สร้างข้อความสำหรับแสดงคะแนนผู้เล่น" } } } @@ -3484,8 +4087,10 @@ "description": { "messageByLocale": { "en": "Let's create a text from scratch.", - "fr-FR": "Nous allons créer un objet texte de zéro.", - "th-TH": "สร้างข้อความเอง" + "fr": "Nous allons créer un objet texte de zéro.", + "es": "Vamos a crear un objeto de texto desde cero.", + "pt": "Vamos criar um texto do zero.", + "th": "สร้างข้อความเอง" } }, "placement": "bottom" @@ -3502,8 +4107,10 @@ "description": { "messageByLocale": { "en": "Select **Text** object", - "fr-FR": "Sélectionnez l'objet **Texte**", - "th-TH": "เลือกวัตถุ **ข้อความ**" + "fr": "Sélectionnez l'objet **Texte**", + "es": "Selecciona el objeto **Texto**", + "pt": "Selecione o objeto **Texto**", + "th": "เลือกวัตถุ **ข้อความ**" } }, "placement": "bottom" @@ -3513,14 +4120,16 @@ { "elementToHighlightId": "#object-name", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Score" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the object name to “**Score**”.", - "fr-FR": "Changez le nom de l'objet pour “**Score**”.", - "th-TH": "เปลี่ยนชื่อวัตถุเป็น “**Score**”" + "fr": "Changez le nom de l'objet pour “**Score**”.", + "es": "Cambia el nombre del objeto a “**Score**”.", + "pt": "Mude o nome do objeto para “**Score**”.", + "th": "เปลี่ยนชื่อวัตถุเป็น “**Score**”" } }, "placement": "bottom" @@ -3530,14 +4139,16 @@ { "elementToHighlightId": "#text-object-font-size", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "50" }, "tooltip": { "description": { "messageByLocale": { "en": "Change the font size to **50**.", - "fr-FR": "Utilisez une taille de **50**.", - "th-TH": "แก้ไขขนาดฟอนต์เป็น **50**" + "fr": "Utilisez une taille de **50**.", + "es": "Usa un tamaño de **50**.", + "pt": "Use um tamanho de **50**.", + "th": "แก้ไขขนาดฟอนต์เป็น **50**" } }, "placement": "bottom" @@ -3553,8 +4164,10 @@ "description": { "messageByLocale": { "en": "Change the initial text to display “Time: 0”.", - "fr-FR": "Utilisez comme texte initial “Temps : 0”.", - "th-TH": "เปลี่ยนข้อความเริ่มต้นเป็น “Time: 0”" + "fr": "Utilisez comme texte initial “Temps : 0”.", + "es": "Usa como texto inicial “Tiempo: 0”.", + "pt": "Use como texto inicial “Tempo: 0”.", + "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Time: 0”" } }, "placement": "bottom" @@ -3570,8 +4183,10 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé.", - "th-TH": "เสร็จแล้ว" + "fr": "Nous avons terminé.", + "es": "Hemos terminado.", + "pt": "Estamos prontos.", + "th": "เสร็จแล้ว" } } }, @@ -3588,8 +4203,10 @@ "description": { "messageByLocale": { "en": "Drag $(scoreText) into the top left corner of the screen.", - "fr-FR": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu.", - "th-TH": "ลาก $(scoreText) ไปยังมุมซ้ายบนของหน้าจอ" + "fr": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu.", + "es": "Arrastra $(scoreText) desde el menú al lienzo y colócalo en la esquina superior izquierda de la pantalla de juego.", + "pt": "Arraste $(scoreText) do menu para o canvas e coloque-o no canto superior esquerdo da tela de jogo.", + "th": "ลาก $(scoreText) ไปยังมุมซ้ายบนของหน้าจอ" } }, "placement": "left" @@ -3604,8 +4221,10 @@ "description": { "messageByLocale": { "en": "Let's change the score dynamically.", - "fr-FR": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé.", - "th-TH": "เปลี่ยนแปลงคะแนนแบบไดนามิก" + "fr": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé.", + "es": "Ahora, cambiemos la puntuación del jugador o jugadora en función del tiempo transcurrido.", + "pt": "Agora, vamos mudar a pontuação do jogador ou jogadora de acordo com o tempo decorrido.", + "th": "เปลี่ยนแปลงคะแนนแบบไดนามิก" } } } @@ -3620,8 +4239,10 @@ "description": { "messageByLocale": { "en": "We will create a timer that will start when the **scene** starts.", - "fr-FR": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre.", - "th-TH": "เราจะสร้างนาฬิกาจับเวลาโดยเริ่มจับเวลาเมื่อ **scene** เริ่มต้น" + "fr": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre.", + "es": "Vamos a crear un temporizador que comenzará cuando la **escena** comience.", + "pt": "Vamos criar um cronômetro que começará quando a **cena** começar.", + "th": "เราจะสร้างนาฬิกาจับเวลาโดยเริ่มจับเวลาเมื่อ **scene** เริ่มต้น" } } }, @@ -3636,8 +4257,10 @@ "description": { "messageByLocale": { "en": "Add a **condition**.", - "fr-FR": "Ajoutez une **condition**.", - "th-TH": "เพิ่ม **เงื่อนไข**" + "fr": "Ajoutez une **condition**.", + "es": "Agrega una **condición**.", + "pt": "Adicione uma **condição**.", + "th": "เพิ่ม **เงื่อนไข**" } } } @@ -3651,8 +4274,10 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-FR": "Cherchez “**Scène**”.", - "th-TH": "ค้นหา “**Scene**”" + "fr": "Cherchez “**Scène**”.", + "es": "Busca “**Escena**”.", + "pt": "Procure por “**Cena**”.", + "th": "ค้นหา “**Scene**”" } } }, @@ -3667,8 +4292,10 @@ "description": { "messageByLocale": { "en": "Select the *At the beginning of the scene** condition.*", - "fr-FR": "Cliquez sur la condition *Au lancement de la scène*.", - "th-TH": "เลือก *เงื่อนไข** ขณะที่เริ่มฉาก*" + "fr": "Cliquez sur la condition *Au lancement de la scène*.", + "es": "Haz clic en la condición *Al inicio de la escena*.", + "pt": "Clique na condição *No início da cena*.", + "th": "เลือก *เงื่อนไข** ขณะที่เริ่มฉาก*" } } }, @@ -3683,8 +4310,10 @@ "description": { "messageByLocale": { "en": "Let's create the timer now.", - "fr-FR": "Nous allons maintenant créer le chronomètre.", - "th-TH": "สร้างนาฬืกาจับเวลา" + "fr": "Nous allons maintenant créer le chronomètre.", + "es": "Ahora creemos el temporizador.", + "pt": "Agora, vamos criar o cronômetro.", + "th": "สร้างนาฬืกาจับเวลา" } }, "placement": "top" @@ -3699,8 +4328,10 @@ "description": { "messageByLocale": { "en": "Create an **action**.", - "fr-FR": "Créez une **action**.", - "th-TH": "สร้าง **การกระทำ**" + "fr": "Créez une **action**.", + "es": "Crea una **acción**.", + "pt": "Crie uma **ação**.", + "th": "สร้าง **การกระทำ**" } } } @@ -3714,8 +4345,10 @@ "description": { "messageByLocale": { "en": "Search for “Scene timer”.", - "fr-FR": "Cherchez “chrono”.", - "th-TH": "ค้นหา “ตัวจับเวลา Scene”" + "fr": "Cherchez “chrono”.", + "es": "Busca “temporizador”.", + "pt": "Procure por “cronômetro”.", + "th": "ค้นหา “ตัวจับเวลา Scene”" } } }, @@ -3730,8 +4363,10 @@ "description": { "messageByLocale": { "en": "Select the *Start (or reset) a scene timer* action.", - "fr-FR": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*.", - "th-TH": "เลือกการกระทำ *เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลา*" + "fr": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*.", + "es": "Haz clic en la acción *Iniciar (o reiniciar) un temporizador de escena*.", + "pt": "Clique na ação *Iniciar (ou reiniciar) um cronômetro de cena*.", + "th": "เลือกการกระทำ *เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลา*" } } }, @@ -3740,14 +4375,16 @@ { "elementToHighlightId": "#instruction-parameters-container textarea", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "\"Score\"" }, "tooltip": { "description": { "messageByLocale": { "en": "Type **\"Score\"** (in quotations).", - "fr-FR": "Entrez **\"Score\"** (entre guillements).", - "th-TH": "พิมพ์ **\"Score\"** (ใส่ quotations ด้วย)" + "fr": "Entrez **\"Score\"** (entre guillements).", + "es": "Escribe **\"Score\"** (entre comillas).", + "pt": "Digite **\"Score\"** (entre aspas).", + "th": "พิมพ์ **\"Score\"** (ใส่ quotations ด้วย)" } } }, @@ -3763,8 +4400,10 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé.", - "th-TH": "เสร็จแล้ว" + "fr": "Nous avons terminé.", + "es": "Hemos terminado.", + "pt": "Terminamos.", + "th": "เสร็จแล้ว" } }, "placement": "top" @@ -3779,8 +4418,10 @@ "description": { "messageByLocale": { "en": "Now let's display the score.", - "fr-FR": "Maintenant, affichons le score.", - "th-TH": "แสดงคะแนน" + "fr": "Maintenant, affichons le score.", + "es": "Ahora, muestremos el marcador.", + "pt": "Agora, vamos exibir a pontuação.", + "th": "แสดงคะแนน" } } }, @@ -3795,8 +4436,10 @@ "description": { "messageByLocale": { "en": "Let's make the score dynamic.", - "fr-FR": "Nous allons rendre le score dynamique.", - "th-TH": "เปลี่ยนแปลงคะแนนให้เป็นแบบไดนามิก" + "fr": "Nous allons rendre le score dynamique.", + "es": "Hagamos que el marcador sea dinámico.", + "pt": "Vamos tornar a pontuação dinâmica.", + "th": "เปลี่ยนแปลงคะแนนให้เป็นแบบไดนามิก" } } } @@ -3810,8 +4453,10 @@ "description": { "messageByLocale": { "en": "Select $(scoreText).", - "fr-FR": "Cliquez sur $(scoreText).", - "th-TH": "เลือก $(scoreText)" + "fr": "Cliquez sur $(scoreText).", + "es": "Haz clic en $(scoreText).", + "pt": "Clique em $(scoreText).", + "th": "เลือก $(scoreText)" } } }, @@ -3826,8 +4471,10 @@ "description": { "messageByLocale": { "en": "We will change the text.", - "fr-FR": "Nous allons changer le contenu du texte.", - "th-TH": "เราจะแก้ไขข้อความ" + "fr": "Nous allons changer le contenu du texte.", + "es": "Cambiamos el texto.", + "pt": "Vamos alterar o texto.", + "th": "เราจะแก้ไขข้อความ" } } }, @@ -3842,8 +4489,10 @@ "description": { "messageByLocale": { "en": "Select “= (set to)”.", - "fr-FR": "Cliquez sur “= (définir à)”.", - "th-TH": "เลือก “= (ตั้งเป็น)”" + "fr": "Cliquez sur “= (définir à)”.", + "es": "Selecciona “= (establecer en)”.", + "pt": "Selecione “= (definir como)”.", + "th": "เลือก “= (ตั้งเป็น)”" } } }, @@ -3859,8 +4508,10 @@ "description": { "messageByLocale": { "en": "Double click to highlight this line, then copy and paste it here: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", - "fr-FR": "Double cliquez sur cette ligne pour la sélectionner et copiez-collez là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`.", - "th-TH": "ดับเบิ้ลคลิกเพื่อไฮไลต์ จากนั้นคัดลองและวางที่นี่: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`" + "fr": "Double cliquez sur cette ligne pour la sélectionner et copiez-collez là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`.", + "es": "Haz doble clic para resaltar esta línea, luego copia y pega aquí: `\"Tiempo: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", + "pt": "Clique duas vezes para destacar esta linha, depois copie e cole aqui: `\"Tempo: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", + "th": "ดับเบิ้ลคลิกเพื่อไฮไลต์ จากนั้นคัดลองและวางที่นี่: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`" } } }, @@ -3876,8 +4527,10 @@ "description": { "messageByLocale": { "en": "We're all set.", - "fr-FR": "On est tout bon.", - "th-TH": "เรียบร้อยแล้ว" + "fr": "On est tout bon.", + "es": "Estamos listos.", + "pt": "Estamos prontos.", + "th": "เรียบร้อยแล้ว" } }, "placement": "top" @@ -3892,15 +4545,19 @@ "title": { "messageByLocale": { "en": "Now let's save the score of the player.", - "fr-FR": "Maintenant, sauvegardons le score du joueur ou de la joueuse.", - "th-TH": "ทีนี้ เราจะบันทึกคะแนนของผู้เล่น" + "fr": "Maintenant, sauvegardons le score du joueur ou de la joueuse.", + "es": "Ahora, guardemos la puntuación del jugador o jugadora.", + "pt": "Agora, vamos salvar a pontuação do jogador ou jogadora.", + "th": "ทีนี้ เราจะบันทึกคะแนนของผู้เล่น" } }, "description": { "messageByLocale": { "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", - "th-TH": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "es": "En el evento donde $(target) se elimina, haz clic en “Añadir acción”.", + "pt": "No evento onde $(target) é excluído, clique em “Adicionar ação”.", + "th": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -3914,8 +4571,10 @@ "description": { "messageByLocale": { "en": "Search for “leaderboard”.", - "fr-FR": "Cherchez “**classement**”.", - "th-TH": "ค้นหา “leaderboard”" + "fr": "Cherchez “**classement**”.", + "es": "Busca “**clasificación**”.", + "pt": "Procure por “**classificação**”.", + "th": "ค้นหา “leaderboard”" } } }, @@ -3930,8 +4589,10 @@ "description": { "messageByLocale": { "en": "Select the **Save connected player score** action.", - "fr-FR": "Sélectionnez l'action **Enregistrer le score du joueur connecté**.", - "th-TH": "เลือกการกระทำ **บันทึกคะแนนผู้เล่นที่เชื่อมต่อ**" + "fr": "Sélectionnez l'action **Enregistrer le score du joueur connecté**.", + "es": "Selecciona la acción **Guardar la puntuación del jugador conectado**.", + "pt": "Selecione a ação **Salvar pontuação do jogador conectado**.", + "th": "เลือกการกระทำ **บันทึกคะแนนผู้เล่นที่เชื่อมต่อ**" } } }, @@ -3946,8 +4607,10 @@ "description": { "messageByLocale": { "en": "Open the **Leaderboard admin**.", - "fr-FR": "Ouvrez le panneau de gestion des classements.", - "th-TH": "เปิด **Leaderboard admin**" + "fr": "Ouvrez le panneau de gestion des classements.", + "es": "Abre el panel de administración de clasificaciones.", + "pt": "Abra o painel de administração de classificações.", + "th": "เปิด **Leaderboard admin**" } } }, @@ -3962,8 +4625,10 @@ "description": { "messageByLocale": { "en": "Create a leaderboard.", - "fr-FR": "Créez un nouveau classement.", - "th-TH": "สร้าง leaderboard" + "fr": "Créez un nouveau classement.", + "es": "Crea una clasificación.", + "pt": "Crie uma classificação.", + "th": "สร้าง leaderboard" } } }, @@ -3978,8 +4643,10 @@ "description": { "messageByLocale": { "en": "Let's change its name.", - "fr-FR": "Changez son nom.", - "th-TH": "เปลี่ยนชื่อ" + "fr": "Changez son nom.", + "es": "Cambiamos su nombre.", + "pt": "Vamos mudar o nome.", + "th": "เปลี่ยนชื่อ" } } }, @@ -3988,14 +4655,16 @@ { "elementToHighlightId": "#leaderboard-administration-panel #edit-name-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Score" }, "tooltip": { "description": { "messageByLocale": { "en": "Type “*Score*”.", - "fr-FR": "Entrez “*Score*”.", - "th-TH": "พิมพ์ “*Score*”" + "fr": "Entrez “*Score*”.", + "es": "Escribe “*Score*”.", + "pt": "Digite “*Score*”.", + "th": "พิมพ์ “*Score*”" } } }, @@ -4010,8 +4679,10 @@ "description": { "messageByLocale": { "en": "Save changes when you're done.", - "fr-FR": "Sauvegardez quand vous avez terminé.", - "th-TH": "บันทึกการเปลี่ยนแปลงหลังจากเสร็จแล้ว" + "fr": "Sauvegardez quand vous avez terminé.", + "es": "Guarda cuando hayas terminado.", + "pt": "Salve quando terminar.", + "th": "บันทึกการเปลี่ยนแปลงหลังจากเสร็จแล้ว" } } }, @@ -4026,8 +4697,10 @@ "description": { "messageByLocale": { "en": "Our leaderboard is ready.", - "fr-FR": "Notre classement est bien configuré, vous pouvez fermer.", - "th-TH": "leaderboard ของเราพร้อมแล้ว" + "fr": "Notre classement est bien configuré, vous pouvez fermer.", + "es": "Nuestra clasificación está lista, puedes cerrar.", + "pt": "Nossa classificação está pronta, você pode fechar.", + "th": "leaderboard ของเราพร้อมแล้ว" } } }, @@ -4042,8 +4715,10 @@ "description": { "messageByLocale": { "en": "Select the option *Select the leaderboard from a list*.", - "fr-FR": "Sélectionnez l'option *Sélectionnez le classement dans une liste*.", - "th-TH": "เลือกตัวเลือก *เลือก leaderboard จากในลิสต์*" + "fr": "Sélectionnez l'option *Sélectionnez le classement dans une liste*.", + "es": "Selecciona la opción *Selecciona la clasificación de una lista*.", + "pt": "Selecione a opção *Selecione a classificação de uma lista*.", + "th": "เลือกตัวเลือก *เลือก leaderboard จากในลิสต์*" } }, "placement": "top" @@ -4060,8 +4735,10 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-FR": "Sélectionnez le classement qui s'appelle “Score”.", - "th-TH": "เลือก leaderboard ที่ชื่อ “Score”" + "fr": "Sélectionnez le classement qui s'appelle “Score”.", + "es": "Selecciona la clasificación que se llama “Score”.", + "pt": "Selecione a classificação que se chama “Score”.", + "th": "เลือก leaderboard ที่ชื่อ “Score”" } } }, @@ -4076,8 +4753,10 @@ "description": { "messageByLocale": { "en": "Open the **expression** builder.", - "fr-FR": "Ouvrez le constructeur **d'expression**.", - "th-TH": "เปิด เมนูสร้าง **expression**" + "fr": "Ouvrez le constructeur **d'expression**.", + "es": "Abre el constructor de **expresiones**.", + "pt": "Abra o construtor de **expressões**.", + "th": "เปิด เมนูสร้าง **expression**" } } }, @@ -4092,8 +4771,10 @@ "description": { "messageByLocale": { "en": "Search for “*Timer*”.", - "fr-FR": "Cherchez “*chrono*”.", - "th-TH": "ค้นหา “*Timer*”" + "fr": "Cherchez “*chrono*”.", + "es": "Busca “*temporizador*”.", + "pt": "Procure por “*cronômetro*”.", + "th": "ค้นหา “*Timer*”" } } }, @@ -4108,8 +4789,10 @@ "description": { "messageByLocale": { "en": "Select **Scene timer value**.", - "fr-FR": "Cliquez sur **Valeur du chronomètre de scène**.", - "th-TH": "เลือก **ค่าจากตัวจับเวลา**" + "fr": "Cliquez sur **Valeur du chronomètre de scène**.", + "es": "Selecciona **Valor del temporizador de escena**.", + "pt": "Selecione **Valor do cronômetro da cena**.", + "th": "เลือก **ค่าจากตัวจับเวลา**" } } }, @@ -4118,14 +4801,16 @@ { "elementToHighlightId": "#expression-parameters-editor-dialog textarea", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "\"Score\"" }, "tooltip": { "description": { "messageByLocale": { "en": "Select timer “Score”.", - "fr-FR": "Sélectionnez le chronomètre “Score”.", - "th-TH": "เลือกตัวจับเวลา “Score”" + "fr": "Sélectionnez le chronomètre “Score”.", + "es": "Selecciona el temporizador “Score”.", + "pt": "Selecione o cronômetro “Score”.", + "th": "เลือกตัวจับเวลา “Score”" } }, "placement": "top" @@ -4141,8 +4826,10 @@ "description": { "messageByLocale": { "en": "This parameter is all set.", - "fr-FR": "C'est terminé.", - "th-TH": "พารามิเตอร์ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "C'est terminé.", + "es": "Este parámetro está listo.", + "pt": "Este parâmetro está pronto.", + "th": "พารามิเตอร์ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -4158,8 +4845,10 @@ "description": { "messageByLocale": { "en": "The action is ready.", - "fr-FR": "L'action est prête.", - "th-TH": "การกระทำพร้อมแล้ว" + "fr": "L'action est prête.", + "es": "La acción está lista.", + "pt": "A ação está pronta.", + "th": "การกระทำพร้อมแล้ว" } }, "placement": "top" @@ -4174,15 +4863,19 @@ "title": { "messageByLocale": { "en": "Now we will display the other players scores after a 2 seconds delay.", - "fr-FR": "Maintenant, nous allons afficher le score des autres joueurs et joueuses après un délai de 2 secondes.", - "th-TH": "ทีนี้เราจะแสดงคะแนนผู้เล่นคนอื่นโดยดีเลย์ 2 วินาที" + "fr": "Maintenant, nous allons afficher le score des autres joueurs et joueuses après un délai de 2 secondes.", + "es": "Ahora mostraremos los puntajes de los otros jugadores después de un retraso de 2 segundos.", + "pt": "Agora, mostraremos os pontos dos outros jogadores após um atraso de 2 segundos.", + "th": "ทีนี้เราจะแสดงคะแนนผู้เล่นคนอื่นโดยดีเลย์ 2 วินาที" } }, "description": { "messageByLocale": { "en": "In the **event** where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", - "th-TH": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "es": "En el **evento** donde $(target) se elimina, haz clic en “Agregar acción”.", + "pt": "No **evento** onde $(target) é excluído, clique em “Adicionar ação”.", + "th": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -4196,8 +4889,10 @@ "description": { "messageByLocale": { "en": "Search for “**Wait**”.", - "fr-FR": "Cherchez “**Attendre**”.", - "th-TH": "ค้นหา “**รอ**”" + "fr": "Cherchez “**Attendre**”.", + "es": "Busca “**Esperar**”.", + "pt": "Procure por “**Esperar**”.", + "th": "ค้นหา “**รอ**”" } } }, @@ -4212,8 +4907,10 @@ "description": { "messageByLocale": { "en": "Select the *Wait X seconds* action.", - "fr-FR": "Cliquez sur l'action *Attendre X secondes*.", - "th-TH": "เลือกการกระทำ *รอ X วินาที*" + "fr": "Cliquez sur l'action *Attendre X secondes*.", + "es": "Haz clic en la acción *Esperar X segundos*.", + "pt": "Clique em *Esperar X segundos*.", + "th": "เลือกการกระทำ *รอ X วินาที*" } } }, @@ -4222,14 +4919,16 @@ { "elementToHighlightId": "#instruction-parameters-container textarea", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "2" }, "tooltip": { "description": { "messageByLocale": { "en": "Type in **2**.", - "fr-FR": "Tapez **2**.", - "th-TH": "พิมพ์ **2**" + "fr": "Tapez **2**.", + "es": "Escribe **2**.", + "pt": "Digite **2**.", + "th": "พิมพ์ **2**" } } }, @@ -4244,8 +4943,10 @@ "description": { "messageByLocale": { "en": "Now the game will wait 2 seconds before going to next **action** in the **event**.", - "fr-FR": "Maintenant, le jeu va attendre 2 secondes avant de passer à **l'action** suivante dans **l'évènement**.", - "th-TH": "ทีนี้เกมจะรอ 2 วินาที ก่อนจะทำ **การกระทำ** ใน **อีเวนท์**" + "fr": "Maintenant, le jeu va attendre 2 secondes avant de passer à **l'action** suivante dans **l'évènement**.", + "es": "Ahora el juego esperará 2 segundos antes de pasar a la **acción** siguiente en el **evento**.", + "pt": "Agora, o jogo vai esperar 2 segundos antes de ir para a **ação** seguinte no **evento**.", + "th": "ทีนี้เกมจะรอ 2 วินาที ก่อนจะทำ **การกระทำ** ใน **อีเวนท์**" } }, "placement": "top" @@ -4260,15 +4961,19 @@ "title": { "messageByLocale": { "en": "Now we will display a leaderboard.", - "fr-FR": "Maintenant, nous allons afficher un classement des scores.", - "th-TH": "แสดง leaderboard" + "fr": "Maintenant, nous allons afficher un classement des scores.", + "es": "Ahora mostraremos una tabla de clasificación.", + "pt": "Agora, mostraremos uma classificação.", + "th": "แสดง leaderboard" } }, "description": { "messageByLocale": { "en": "In the **event** where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", - "th-TH": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "es": "En el **evento** donde $(target) se elimina, haz clic en “Agregar acción”.", + "pt": "No **evento** onde $(target) é excluído, clique em “Adicionar ação”.", + "th": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -4282,8 +4987,10 @@ "description": { "messageByLocale": { "en": "Search for “**leaderboard**”.", - "fr-FR": "Cherchez “**classement**”.", - "th-TH": "ค้นหา “**leaderboard**”" + "fr": "Cherchez “**classement**”.", + "es": "Busca “**clasificación**”.", + "pt": "Procure por “**classificação**”.", + "th": "ค้นหา “**leaderboard**”" } } }, @@ -4298,8 +5005,10 @@ "description": { "messageByLocale": { "en": "Select the *Display leaderboard* action.", - "fr-FR": "Cliquez sur l'action *Afficher le classement*.", - "th-TH": "เลือกการกระทำ *แสดง leaderboard*" + "fr": "Cliquez sur l'action *Afficher le classement*.", + "es": "Haz clic en la acción *Mostrar clasificación*.", + "pt": "Clique em *Mostrar classificação*.", + "th": "เลือกการกระทำ *แสดง leaderboard*" } } }, @@ -4314,8 +5023,10 @@ "description": { "messageByLocale": { "en": "Select the leaderboard named “Score”.", - "fr-FR": "Sélectionnez le classement qui s'appelle “Score”.", - "th-TH": "เลือก leaderboard ที่ชื่อ “Score”" + "fr": "Sélectionnez le classement qui s'appelle “Score”.", + "es": "Selecciona la clasificación que se llama “Score”.", + "pt": "Selecione a classificação chamada “Score”.", + "th": "เลือก leaderboard ที่ชื่อ “Score”" } } }, @@ -4330,8 +5041,10 @@ "description": { "messageByLocale": { "en": "We'll use the built-in loader.", - "fr-FR": "Nous allons utiliser l'écran de chargement intégré par défaut.", - "th-TH": "เราจะใช้โหลดเดอร์ built-in" + "fr": "Nous allons utiliser l'écran de chargement intégré par défaut.", + "es": "Usaremos el cargador integrado.", + "pt": "Usaremos o carregador integrado.", + "th": "เราจะใช้โหลดเดอร์ built-in" } } }, @@ -4347,8 +5060,10 @@ "description": { "messageByLocale": { "en": "Now the leaderboard should be displayed when $(projectile) reaches $(target).", - "fr-FR": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target).", - "th-TH": "leaderboard ควรจะแสดง เมื่อ $(projectile) ไปถึง $(target)" + "fr": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target).", + "es": "Ahora, la tabla de clasificación debería mostrarse cuando $(projectile) llegue a $(target).", + "pt": "Agora, a classificação deve ser exibida quando $(projectile) atingir $(target).", + "th": "leaderboard ควรจะแสดง เมื่อ $(projectile) ไปถึง $(target)" } }, "placement": "top" @@ -4363,8 +5078,10 @@ "description": { "messageByLocale": { "en": "Now we will ask the player to authenticate at game opening.", - "fr-FR": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu.", - "th-TH": "ทีนี้เราจะถามผู้เล่นให้ยืนยันตอนที่เปิดเกม" + "fr": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu.", + "es": "Ahora, pediremos al jugador que se autentique al abrir el juego.", + "pt": "Agora, pediremos ao jogador que se autentique ao abrir o jogo.", + "th": "ทีนี้เราจะถามผู้เล่นให้ยืนยันตอนที่เปิดเกม" } } } @@ -4380,8 +5097,10 @@ "description": { "messageByLocale": { "en": "Let's create an **event**!", - "fr-FR": "Créez un nouvel **évènement**.", - "th-TH": "สร้าง **อีเวนท์** กันเถอะ!" + "fr": "Créez un nouvel **évènement**.", + "es": "¡Vamos a crear un **evento**!", + "pt": "Vamos criar um **evento**!", + "th": "สร้าง **อีเวนท์** กันเถอะ!" } } } @@ -4395,8 +5114,10 @@ "description": { "messageByLocale": { "en": "Add a condition.", - "fr-FR": "Ajoutez une condition.", - "th-TH": "เพิ่มเงื่อนไข" + "fr": "Ajoutez une condition.", + "es": "Agrega una condición.", + "pt": "Adicione uma condição.", + "th": "เพิ่มเงื่อนไข" } } }, @@ -4418,8 +5139,10 @@ "description": { "messageByLocale": { "en": "Search for “**Scene**”.", - "fr-FR": "Cherchez “**Scène**”.", - "th-TH": "ค้นหา “**Scene**”" + "fr": "Cherchez “**Scène**”.", + "es": "Busca “**Escena**”.", + "pt": "Procure por “**Cena**”.", + "th": "ค้นหา “**Scene**”" } } }, @@ -4434,8 +5157,10 @@ "description": { "messageByLocale": { "en": "Select the **At the beginning of the scene** condition.", - "fr-FR": "Cliquez sur la condition *Au lancement de la scène*.", - "th-TH": "เลือกเงื่อนไข **ขณะที่เริ่มฉาก**" + "fr": "Cliquez sur la condition *Au lancement de la scène*.", + "es": "Selecciona la condición **Al inicio de la escena**.", + "pt": "Selecione a condição **No início da cena**.", + "th": "เลือกเงื่อนไข **ขณะที่เริ่มฉาก**" } } }, @@ -4450,8 +5175,10 @@ "description": { "messageByLocale": { "en": "We're done.", - "fr-FR": "Nous avons terminé.", - "th-TH": "เสร็จแล้ว" + "fr": "Nous avons terminé.", + "es": "Ya terminamos.", + "pt": "Já terminamos.", + "th": "เสร็จแล้ว" } }, "placement": "top" @@ -4466,8 +5193,10 @@ "description": { "messageByLocale": { "en": "Let's choose an **action**.", - "fr-FR": "Choisissons une **action**.", - "th-TH": "เลือก **การกระทำ**" + "fr": "Choisissons une **action**.", + "es": "Vamos a elegir una **acción**.", + "pt": "Vamos escolher uma **ação**.", + "th": "เลือก **การกระทำ**" } } } @@ -4481,8 +5210,10 @@ "description": { "messageByLocale": { "en": "Search for “**Authentication**”.", - "fr-FR": "Cherchez “**Authentification**”.", - "th-TH": "ค้นหา “**Authentication**”" + "fr": "Cherchez “**Authentification**”.", + "es": "Busca “**Autenticación**”.", + "pt": "Procure por “**Autenticação**”.", + "th": "ค้นหา “**Authentication**”" } } }, @@ -4497,8 +5228,10 @@ "description": { "messageByLocale": { "en": "Select *Display authentication banner*.", - "fr-FR": "Cliquez sur *Afficher la bannière d'authentification*.", - "th-TH": "เลือก *แสดงแบนเนอร์ authentication*" + "fr": "Cliquez sur *Afficher la bannière d'authentification*.", + "es": "Selecciona *Mostrar banner de autenticación*.", + "pt": "Selecione *Mostrar banner de autenticação*.", + "th": "เลือก *แสดงแบนเนอร์ authentication*" } } }, @@ -4513,8 +5246,10 @@ "description": { "messageByLocale": { "en": "Alright, now players will be asked to login.", - "fr-FR": "Maintenant, les joueurs et les joueuses pourront s'identifier.", - "th-TH": "เอาล่ะ ทีนี้ผู้เล่นจะถูกขอให้ล็อกอิน" + "fr": "Maintenant, les joueurs et les joueuses pourront s'identifier.", + "es": "Ahora, los jugadores podrán iniciar sesión.", + "pt": "Agora, os jogadores poderão fazer login.", + "th": "เอาล่ะ ทีนี้ผู้เล่นจะถูกขอให้ล็อกอิน" } }, "placement": "top" @@ -4529,8 +5264,10 @@ "description": { "messageByLocale": { "en": "Let's make sure the player comes back to the start screen after closing the **leaderboard**.", - "fr-FR": "Faisons en sorte que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**.", - "th-TH": "ทำให้มั่นใจว่าผู้เล่นจะกลับมาที่หน้าเริ่มต้นหลังกดปิด **leaderboard**" + "fr": "Faisons en sorte que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**.", + "es": "Vamos a asegurarnos de que el jugador vuelva a la pantalla de inicio después de cerrar el **tablero de clasificación**.", + "pt": "Vamos garantir que o jogador volte para a tela inicial depois de fechar o **quadro de classificação**.", + "th": "ทำให้มั่นใจว่าผู้เล่นจะกลับมาที่หน้าเริ่มต้นหลังกดปิด **leaderboard**" } } } @@ -4545,8 +5282,10 @@ "description": { "messageByLocale": { "en": "In the event where $(target) gets deleted, click on “Add action”.", - "fr-FR": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", - "th-TH": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", + "es": "En el **evento** donde $(target) se elimina, haz clic en “Agregar acción”.", + "pt": "No **evento** onde $(target) é excluído, clique em “Adicionar ação”.", + "th": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" } } } @@ -4560,8 +5299,10 @@ "description": { "messageByLocale": { "en": "Type “*Scene*”.", - "fr-FR": "Cherchez “**Scène**”.", - "th-TH": "พิมพ์ “*Scene*”" + "fr": "Cherchez “**Scène**”.", + "es": "Escribe “**Escena**”.", + "pt": "Digite “**Cena**”.", + "th": "พิมพ์ “*Scene*”" } } }, @@ -4576,8 +5317,10 @@ "description": { "messageByLocale": { "en": "Select “Change the scene”.", - "fr-FR": "Cliquez sur “**Changer la scène**”.", - "th-TH": "เลือก “เปลี่ยน scene”" + "fr": "Cliquez sur “**Changer la scène**”.", + "es": "Selecciona “**Cambiar la escena**”.", + "pt": "Selecione “**Alterar a cena**”.", + "th": "เลือก “เปลี่ยน scene”" } } }, @@ -4592,8 +5335,10 @@ "description": { "messageByLocale": { "en": "Select “$(startScene)”.", - "fr-FR": "Sélectionnez “$(startScene)”.", - "th-TH": "เลือก “$(startScene)”" + "fr": "Sélectionnez “$(startScene)”.", + "es": "Selecciona “$(startScene)”.", + "pt": "Selecione “$(startScene)”.", + "th": "เลือก “$(startScene)”" } }, "placement": "top" @@ -4610,8 +5355,10 @@ "description": { "messageByLocale": { "en": "Alright, the action is all set.", - "fr-FR": "L'action est bien configurée.", - "th-TH": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "fr": "L'action est bien configurée.", + "es": "La acción está configurada.", + "pt": "A ação está configurada.", + "th": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" } }, "placement": "top" @@ -4626,8 +5373,10 @@ "description": { "messageByLocale": { "en": "Open the **Project Manager**.", - "fr-FR": "Ouvrez le **Gestionnaire de projet**.", - "th-TH": "เปิด **โปรเจกต์เมเนเจอร์**" + "fr": "Ouvrez le **Gestionnaire de projet**.", + "es": "Abre el **Administrador de proyectos**.", + "pt": "Abra o **Gerenciador de projetos**.", + "th": "เปิด **โปรเจกต์เมเนเจอร์**" } }, "placement": "right" @@ -4642,8 +5391,10 @@ "description": { "messageByLocale": { "en": "Right-click on $(startScene) and select **Set as start scene**.", - "fr-FR": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**.", - "th-TH": "คลิกขวาที่ $(startScene) และเลือก **ตั้งเป็น scene เริ่มต้น**" + "fr": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**.", + "es": "Haz clic derecho en $(startScene) y selecciona **Establecer como escena de inicio**.", + "pt": "Clique com o botão direito em $(startScene) e selecione **Definir como cena inicial**.", + "th": "คลิกขวาที่ $(startScene) และเลือก **ตั้งเป็น scene เริ่มต้น**" } }, "placement": "right" @@ -4659,8 +5410,10 @@ "description": { "messageByLocale": { "en": "Come back to the start scene *$(startScene)*.", - "fr-FR": "Retournons à la scène d'ouverture *$(startScene)*.", - "th-TH": "กลับไปยัง scene เริ่มต้น *$(startScene)*" + "fr": "Retournons à la scène d'ouverture *$(startScene)*.", + "es": "Vuelve a la escena de inicio *$(startScene)*.", + "pt": "Volte para a cena inicial *$(startScene)*.", + "th": "กลับไปยัง scene เริ่มต้น *$(startScene)*" } }, "placement": "bottom" @@ -4677,12 +5430,14 @@ "description": { "messageByLocale": { "en": "Click on the **Preview** button.", - "fr-FR": "Lancez un **Aperçu** de votre jeu.", - "th-TH": "คลิกปุ่ม **ดูตัวอย่าง**" + "fr": "Lancez un **Aperçu** de votre jeu.", + "es": "Haz clic en el botón **Vista previa**.", + "pt": "Clique no botão **Pré-visualizar**.", + "th": "คลิกปุ่ม **ดูตัวอย่าง**" } }, "placement": "bottom" } } ] -} \ No newline at end of file +} diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 9880e48..2ead535 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -59,6 +59,7 @@ "flow": [ { "id": "Start", + "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { @@ -74,22 +75,41 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game is a Platformer. Click on the **preview** button to play.\nYou can move the player with the arrow keys, and jump with space.\n\nOnce you're done, click on this button to continue.", - "fr": "Ce jeu est un jeu de plateforme. Cliquez sur le bouton **Aperçu** pour y jouer.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.\n\nQuand vous êtes prêt, cliquez sur ce bouton pour continuer.", - "es": "Este juego es un plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.\n\nCuando estés listo, haz clic en este botón para continuar.", - "pt": "Este jogo é um plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.\n\nQuando estiver pronto, clique neste botão para continuar.", + "en": "This game is a Platformer. Click on the **preview** button to play.\nYou can move the player with the arrow keys, and jump with space.", + "fr": "Ce jeu est un jeu de plateforme. Cliquez sur le bouton **Aperçu** pour y jouer.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.", + "es": "Este juego es un plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.", + "pt": "Este jogo é um plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.", "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "#add-new-object-button", "nextStepTrigger": { "presenceOfElement": "#new-object-dialog" }, "tooltip": { - "placement": "left", + "placement": "top", "description": { "messageByLocale": { "en": "Let's show players how much health they have left with a health bar.", @@ -151,7 +171,7 @@ "description": { "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", - "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" @@ -304,9 +324,28 @@ "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" } }, - "placement": "left" + "placement": "top" } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "objectInObjectsList:resourceBar", "nextStepTrigger": { @@ -321,6 +360,15 @@ "pt": "Arraste **$(resourceBar)** do menu para a cena.", "th": "ลาก **$(resourceBar)** ใส่ลงใน scene" } + }, + "touchDescription": { + "messageByLocale": { + "en": "Select the **$(resourceBar)**, then drag it to the scene.", + "fr": "Sélectionnez **$(resourceBar)**, puis faites-le glisser à la scène.", + "es": "Selecciona **$(resourceBar)**, luego arrástralo a la escena.", + "pt": "Selecione **$(resourceBar)**, em seguida, arraste-o para a cena.", + "th": "เลือก **$(resourceBar)** แล้วลากมันเข้า scene" + } } } }, @@ -340,10 +388,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nPlace the $(resourceBar) on the top left corner of the **camera view**.\n\nWhen you're done, click on the button below.", - "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.\n\nQuand vous aurez terminé, cliquez sur le bouton ci-dessous.", - "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.\n\nCuando hayas terminado, haz clic abajo.", - "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.\n\nQuando você terminar, clique abaixo.", + "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nPlace the $(resourceBar) on the top left corner of the **camera view**.", + "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.", + "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.", + "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" } }, @@ -440,7 +488,7 @@ "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**" } }, - "placement": "left" + "placement": "top" }, "isOnClosableDialog": true }, diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 155dd5a..a1eb260 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -55,6 +55,7 @@ "flow": [ { "id": "Start", + "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { @@ -70,7 +71,11 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!\n\nOnce you're done, click on this button to continue." + "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!", + "fr": "Ce jeu est un jeu de tir dans l'espace en vue du dessus ! Clique sur le bouton **prévisualiser** pour jouer.\nTu peux déplacer le vaisseau avec les flèches du clavier, essaie d'éviter de toucher les rochers !", + "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", + "pt": "Este jogo é um jogo de tiro em espaço em vista superior! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", + "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!" } } } @@ -145,16 +150,35 @@ "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น" } }, - "placement": "left" + "placement": "top" } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "#add-new-object-button", "nextStepTrigger": { "presenceOfElement": "#new-object-dialog" }, "tooltip": { - "placement": "left", + "placement": "top", "description": { "messageByLocale": { "en": "This game can only be played with a keyboard, so let's add **joystick controllers**, so that we can play on **mobile**!\n\nLet's go to the asset store to find a joystick prefab!", @@ -216,7 +240,7 @@ "description": { "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", - "fr": "Nous allons utilisé un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" @@ -313,6 +337,15 @@ "pt": "Arraste **$(joystick)** do menu para a cena.", "th": "ลาก **$(joystick)** ใส่ลงใน scene" } + }, + "touchDescription": { + "messageByLocale": { + "en": "Select the **$(joystick)**, then drag it to the scene.", + "fr": "Sélectionnez **$(joystick)**, puis faites-le glisser à la scène.", + "es": "Selecciona **$(joystick)**, luego arrástralo a la escena.", + "pt": "Selecione **$(joystick)**, em seguida, arraste-o para a cena.", + "th": "เลือก **$(joystick)** แล้วลากมันเข้า scene" + } } } }, @@ -332,10 +365,10 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Place the $(joystick) below the ship on the screen, so that the player can use their thumb to control it easily.\n\nWhen you're done, click on the button below.", - "fr": "Placez le $(joystick) en dessous du vaisseau à l'écran, de façon à ce que le joueur puisse utiliser son pouce pour le contrôler facilement.\n\nQuand vous avez terminé, cliquez sur le bouton ci-dessous.", - "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.\n\nCuando hayas terminado, haz clic en el botón de abajo.", - "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.\n\nQuando você terminar, clique no botão abaixo.", + "en": "Place the $(joystick) below the ship on the screen, so that the player can use their thumb to control it easily.", + "fr": "Placez le $(joystick) en dessous du vaisseau à l'écran, de façon à ce que le joueur puisse utiliser son pouce pour le contrôler facilement.", + "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", + "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง" } }, @@ -351,7 +384,7 @@ "presenceOfElement": "#object-editor-dialog" }, "tooltip": { - "placement": "left", + "placement": "top", "description": { "messageByLocale": { "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nclick on the 3 dot menu, or right click on **$(ship)**, and select **Edit behaviors**.", @@ -360,6 +393,15 @@ "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**" } + }, + "touchDescription": { + "messageByLocale": { + "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nSelect, then long press on **$(ship)**, then select **Edit behaviors**.", + "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\nSélectionnez, puis appuyez longuement sur **$(ship)**, puis sélectionnez **Modifier les comportements**.", + "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", + "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", + "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**" + } } } }, diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 50ececb..a7437fa 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -73,14 +73,14 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!", - "fr": "Ce jeu utilise un classement ! **Connectez-vous** pour que nous puissions le configurer automatiquement !", - "es": "¡Este juego usa una tabla de clasificación! ¡Vamos a **iniciar sesión** para que podamos configurarlo automáticamente!", - "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!", - "th": "เกมนี้มี leaderboard! **เข้าสู่ระบบ** เพื่อตั้งให้เป็นอัตโนมัติกันเถอะ!" + "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!\n\nYou can skip this step if you don't want to use a leaderboard, by closing the leaderboard dialog.", + "fr": "Ce jeu utilise un classement ! Connectons-nous **pour que nous puissions le configurer automatiquement !**\n\nVous pouvez ignorer cette étape si vous ne souhaitez pas utiliser de classement, en fermant la boîte de dialogue du classement.", + "es": "¡Este juego usa una tabla de clasificación! ¡**Inicia sesión** para que podamos configurarlo automáticamente!\n\nPuedes omitir este paso si no quieres usar una tabla de clasificación, cerrando el cuadro de diálogo de la tabla de clasificación.", + "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!\n\nVocê pode pular esta etapa se não quiser usar uma tabela de classificação, fechando a caixa de diálogo da tabela de classificação.", + "th": "เกมนี้ใช้ leaderboard! ให้เรา **เข้าสู่ระบบ** เพื่อที่จะตั้งค่า leaderboard ให้เราอัตโนมัติ!\n\nคุณสามารถข้ามขั้นตอนนี้ได้หากคุณไม่ต้องการใช้ leaderboard โดยการปิดกล่องโต้ตอบ leaderboard" } }, - "placement": "right" + "placement": "top" } }, { @@ -99,15 +99,42 @@ "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!" } }, - "placement": "right" + "placement": "top" } }, + { + "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close", + "nextStepTrigger": { + "absenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's close the menu.", + "fr": "Fermons le menu.", + "es": "Cerramos el menú.", + "pt": "Vamos fechar o menu.", + "th": "ปิดเมนู" + } + } + }, + "skippable": true + }, { "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { - "previewLaunched": true + "clickOnTooltipButton": { + "messageByLocale": { + "en": "Let's go!", + "fr": "C'est parti !", + "es": "¡Vamos!", + "pt": "Vamos lá!", + "th": "ไปกันเลย!" + } + } }, "tooltip": { + "standalone": true, "description": { "messageByLocale": { "en": "This game is called Plinko! Click on the **Preview** button to test it out and gather points depending on how many pegs you hit.", @@ -116,9 +143,27 @@ "pt": "Este jogo se chama Plinko! Clique no botão **Visualizar** para testá-lo e ganhe pontos dependendo de quantos pinos você acerta.", "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม" } + } + } + }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } }, "placement": "bottom" - } + }, + "skippable": true }, { "elementToHighlightId": "objectInObjectsList:multiplier", @@ -130,12 +175,21 @@ "description": { "messageByLocale": { "en": "Drag 3 **$(multiplier)** objects to the canvas and place them where they can be hit by the ball.", - "fr": "Faites glisser 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", + "fr": "Faites glisser 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", "es": "¡Arrastra 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", "pt": "Arraste 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต" } }, + "touchDescription": { + "messageByLocale": { + "en": "**Select** then **drag** 3 **$(multiplier)** objects to the canvas and place them where they can be hit by the ball.", + "fr": "**Sélectionnez** puis **faites glisser** 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", + "es": "**Selecciona** y **arrastra** 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", + "pt": "**Selecione** e **arraste** 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", + "th": "**เลือก** และ **ลาก** 3 ชิ้น **$(multiplier)** จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต" + } + }, "placement": "top" } }, @@ -154,26 +208,16 @@ "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!" } }, - "placement": "bottom" - } - }, - { - "id": "OpenPropertiesManagerForScene", - "elementToHighlightId": "#main-toolbar-project-manager-button", - "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-scenes" - }, - "tooltip": { - "description": { + "touchDescription": { "messageByLocale": { - "en": "Now we'll store the game score: open the **Project Manager** and create a **scene variable**! ", - "fr": "Maintenant nous allons stocker le score quelque part: ouvrez le **Project Manager** et créons une **variable de scène** !", - "es": "Ahora vamos a guardar la puntuación en algún lugar: abre el **Project Manager** y crea una **variable de escena**!", - "pt": "Agora vamos armazenar a pontuação em algum lugar: abra o **Project Manager** et vamos criar uma **variável de cena**!", - "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**" + "en": "Once you're done, select and place a **$(scoreMultiplier)** under *Score* to display the point multiplier!", + "fr": "Une fois que vous avez terminé, sélectionnez et placez un **$(scoreMultiplier)** juste en dessous du *Score* pour afficher le multiplicateur de points !", + "es": "Una vez que hayas terminado, selecciona y coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", + "pt": "Uma vez que você terminou, selecione e coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", + "th": "เมื่อทำเสร็จแล้ว ให้เลือกและใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!" } }, - "placement": "right" + "placement": "bottom" } }, { @@ -192,7 +236,7 @@ "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**" } }, - "placement": "right" + "placement": "bottom" }, "shortcuts": [ { @@ -209,16 +253,25 @@ "presenceOfElement": "#scene-variables-dialog #add-variable" }, "tooltip": { - "placement": "right", "description": { "messageByLocale": { - "en": "**Right click** (or clck the *3 dot menu*) on $(gameScene) and select **Edit scene variables**.", + "en": "**Right click** (or click the *3 dot menu*) on $(gameScene) and select **Edit scene variables**.", "fr": "Faites un **clic droit** (ou appuyez sur le *bouton à trois points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", "es": "Haz **clic derecho** (o clic en el **botón de tres puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", "pt": "Clique com o **botão direito** (ou toque no *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**" } - } + }, + "touchDescription": { + "messageByLocale": { + "en": "**Long press** (or use the *3 dot menu*) on $(gameScene) and select **Edit scene variables**.", + "fr": "Faites un **appui long** (ou utilisez le *bouton à 3 points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", + "es": "Haz **pulsación larga** (o usa el **botón de 3 puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", + "pt": "Pressione por **muito tempo** (ou use o *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", + "th": "**กดค้าง** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**" + } + }, + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -315,6 +368,24 @@ } } }, + { + "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close", + "nextStepTrigger": { + "absenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's close the menu.", + "fr": "Fermons le menu.", + "es": "Cerramos el menú.", + "pt": "Vamos fechar o menu.", + "th": "ปิดเมนู" + } + } + }, + "skippable": true + }, { "elementToHighlightId": "editorTab:gameScene:EventsSheet", "nextStepTrigger": { @@ -323,7 +394,7 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Now let's activate those multipliers. Open the **Events Sheet** of the $(gameScene) scene.", + "en": "Now let's activate those multipliers. Open the **Events Sheet** of the $(gameScene) scene.", "fr": "Maintenant, activons ces multiplicateurs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", "es": "Ahora activemos esos multiplicadores. Abre la **Hoja de eventos** de la escena $(gameScene).", "pt": "Agora vamos ativar esses multiplicadores. Vamos abra a **Folha de eventos** da cena $(gameScene).", @@ -672,7 +743,7 @@ "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -691,7 +762,7 @@ "th": "ใส่ **1**" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -800,7 +871,7 @@ "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -819,7 +890,7 @@ "th": "และ `$(multiplier).Y()`" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -907,7 +978,7 @@ "th": "เลือกวัตถุข้อความ **$(scoreMultiplier)**" } }, - "placement": "top" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -926,7 +997,7 @@ "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -945,7 +1016,7 @@ "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -976,10 +1047,10 @@ "description": { "messageByLocale": { "en": "Finally, we need to take our multiplier into account when calculating the score. Let's **fold the Score multiplier** group with the arrow on the left.", - "fr": "Enfin, nous devons prendre en compte notre multiplicateur lors du calcul du score. Laissons **replier le groupe Multiplicateur de score** avec la flèche à gauche.", - "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. Dejemos **replegar el grupo Multiplicador de puntuación** con la flecha a la izquierda.", - "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **recolher o grupo Multiplicador de pontuação** com a seta à esquerda.", - "th": "ขั้นสุดท้าย เราจะต้องในการคำนวณคะแนนเราต้องคำนวณ multiplier ด้วย ให้ **รวบรวมตัวแปร คะแนน multiplier** เอาไว้เป็นกลุ่มโดยลูกศรที่อยู่ทางซ้าย" + "fr": "Enfin, nous devons prendre en compte notre multiplicateur lors du calcul du score. **Fermons le groupe Multiplicateur de score** avec la flèche à gauche.", + "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. **Cerramos el grupo Multiplicador de puntuación** con la flecha a la izquierda.", + "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **fechar o grupo Multiplicador de pontuação** com a seta à esquerda.", + "th": "สุดท้ายเราจะนำตัวแปร Multiplier มาใช้ในการคำนวณคะแนน ให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย" } }, "placement": "bottom" @@ -994,10 +1065,10 @@ "description": { "messageByLocale": { "en": "And let's **unfold the Hitting pegs** group with the arrow on the left.", - "fr": "Et laissons **déplier le groupe Toucher des plots** avec la flèche à gauche.", - "es": "Y dejemos **desplegar el grupo Tocando plots** con la flecha a la izquierda.", + "fr": "Et **déplions le groupe Toucher des plots** avec la flèche à gauche.", + "es": "Y **desplegamos el grupo Tocando plots** con la flecha a la izquierda.", "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda.", - "th": "และ **ยกเลิกการรวมกลุ่มของเป๊กที่ถูกชน** โดยลูกศรที่อยู่ทางซ้าย" + "th": "และให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย" } }, "placement": "bottom" @@ -1017,6 +1088,15 @@ "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!" } + }, + "touchDescription": { + "messageByLocale": { + "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **pressing 2 times on it**!", + "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **appuyant 2 fois dessus** !", + "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**!", + "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**!", + "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!" + } } } }, @@ -1035,7 +1115,7 @@ "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, @@ -1071,6 +1151,15 @@ "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง" } + }, + "touchDescription": { + "messageByLocale": { + "en": "This event here manages the logic when the player hits a *bigger* peg. Let's modify the score action by **pressing twice on it**.", + "fr": "Cet événement gère la logique lorsque le joueur touche un plot *plus gros*. Modifions l'action de score en **appyant 2 fois dessus**.", + "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**.", + "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**.", + "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!" + } } } }, @@ -1089,7 +1178,7 @@ "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`" } }, - "placement": "left" + "placement": "bottom" }, "isOnClosableDialog": true }, diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 17648a8..62951af 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -58,6 +58,7 @@ "flow": [ { "id": "Start", + "elementToHighlightId": "#toolbar-preview-button", "nextStepTrigger": { "clickOnTooltipButton": { "messageByLocale": { @@ -73,22 +74,40 @@ "standalone": true, "description": { "messageByLocale": { - "en": "This game is quite simple! Use your mouse to drag the key to the keyhole, whilst staying inside the pathway! Click on the **preview** button to try it out.\n\nOnce you're done, click on this button to continue.", - "fr": "Ce jeu est assez simple ! Utilisez votre souris pour faire glisser la clé dans la serrure, tout en restant dans le chemin ! Cliquez sur le bouton **aperçu** pour l'essayer.\n\nUne fois que vous avez terminé, cliquez sur ce bouton pour continuer.", - "es": "¡Este juego es bastante simple! ¡Utiliza tu ratón para arrastrar la llave al agujero de la llave, mientras te mantienes dentro del camino! Haz clic en el botón **vista previa** para probarlo.\n\nUna vez que hayas terminado, haz clic en este botón para continuar.", - "pt": "Este jogo é bastante simples! Use o mouse para arrastar a chave para o buraco da chave, enquanto permanece dentro do caminho! Clique no botão **visualizar** para experimentá-lo.\n\nUma vez que você terminou, clique neste botão para continuar.", - "th": "เกมนี้เป็นเกมง่ายๆ ใช้เมาส์เพื่อลากกุญแจไปยังช่องกุญแจ โดยต้องอยู่ในเส้นทางเท่านั้น! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อลองเล่น\n\nเมื่อคุณเสร็จแล้ว คลิกที่ปุ่มนี้เพื่อดำเนินการต่อ" + "en": "This game is quite simple! Use your mouse or finger to drag the key to the keyhole, whilst staying inside the pathway! Click on the **preview** button to try it out.", + "fr": "Ce jeu est assez simple ! Utilisez votre souris ou votre doigt pour faire glisser la clé dans la serrure, tout en restant dans le chemin ! Cliquez sur le bouton **aperçu** pour l'essayer.", + "es": "¡Este juego es bastante simple! Utiliza tu ratón o dedo para arrastrar la llave al agujero de la llave, ¡mientras te mantienes dentro del camino! Haz clic en el botón **previsualización** para probarlo.", + "pt": "Este jogo é bastante simples! Use seu mouse ou dedo para arrastar a chave para a fechadura, enquanto permanece dentro do caminho! Clique no botão **pré-visualização** para experimentá-lo.", + "th": "เกมนี้เป็นเกมง่ายๆ! ใช้เมาส์หรือนิ้วเพื่อลากกุญแจไปยังช่องกุญแจในขณะที่ยังอยู่ในเส้นทาง! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อลองเล่น" } } } }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**" + } + }, + "placement": "bottom" + }, + "skippable": true + }, { "elementToHighlightId": "#add-new-object-button", "nextStepTrigger": { "presenceOfElement": "#new-object-dialog" }, "tooltip": { - "placement": "left", "description": { "messageByLocale": { "en": "First, let's create some text to display the time spent playing the level. Click on the **Add new object** button.", @@ -97,7 +116,8 @@ "pt": "Primeiro, vamos criar um texto para exibir o tempo gasto jogando o nível. Clique no botão **Adicionar novo objeto**.", "th": "เริ่มต้นกันด้วยการสร้างข้อความเพื่อแสดงเวลาที่ใช้ในการเล่นเกม คลิกที่ปุ่ม **เพิ่มวัตถุใหม่**" } - } + }, + "placement": "top" } }, { @@ -142,7 +162,7 @@ { "elementToHighlightId": "#object-name", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Score" }, "tooltip": { "description": { @@ -231,7 +251,16 @@ "th": "ลาก $(scoreText) ไปยัง **ฉาก**" } }, - "placement": "left" + "touchDescription": { + "messageByLocale": { + "en": "**Select** then **drag** $(scoreText) into the **scene**.", + "fr": "**Sélectionnez** puis **faites glisser** $(scoreText) du menu au canvas.", + "es": "**Seleccione** y **arrastrar** $(scoreText) al **escenario**.", + "pt": "**Selecione** e **arraste** $(scoreText) para a **cena**.", + "th": "**เลือก** แล้ว **ลาก** $(scoreText) ไปยัง **ฉาก**" + } + }, + "placement": "top" } }, { From 9ee360eaf5a834b0b47cdea2acbb3b5de7fd2271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 24 Mar 2023 10:31:30 +0100 Subject: [PATCH 060/208] Update healthbar template to have joystick controls --- .../assets/Flat dark joystick border.png | Bin 0 -> 1632 bytes .../assets/Flat dark joystick thumb.png | Bin 0 -> 1044 bytes .../healthBar/assets/Top arrow button.png | Bin 0 -> 962 bytes templates/healthBar/game.json | 4641 ++++++++++++++++- 4 files changed, 4627 insertions(+), 14 deletions(-) create mode 100644 templates/healthBar/assets/Flat dark joystick border.png create mode 100644 templates/healthBar/assets/Flat dark joystick thumb.png create mode 100644 templates/healthBar/assets/Top arrow button.png diff --git a/templates/healthBar/assets/Flat dark joystick border.png b/templates/healthBar/assets/Flat dark joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddd717e42b566f78f6441a2a92756a1e612dc74 GIT binary patch literal 1632 zcmV-m2A}zfP)005u}1^@s6i_d2*00009a7bBm000XT z000XT0n*)m`~Uz35=lfsRCwC$o$YbjN)(3GK}yJs8}Kk=Y=aF*Y9J+0f=i%;lt2lT z;1XOyN}vQTudbBXj6n!Vd-mfwGtb=oh>5QD^*MV!cF8jAi_K=Um6%SaZ;y|U8}an? z^nMG?&+D_A&*cqcl}#p-`-g{zUyZTsS59mS44;|goohTg-Fseu+`Zt9XBHY9#zToS7MNwQWKylpX2462ke1Hi1 z82#KRM7Sa001^|#hX|?jfhpeikM&!^LdA`@1Frh*V1d#&cjBE0>uWC*gM#+kqY=$oPSu^DVrVMrw61`q9tqsy{1G6b=$}V79 zmcjdhsTXAL2WDQ7%oj|(Al?tmGGe+OU^=M4xD}Y)Go#WAFAT<*oF@4I|C13;xq;b` zg2rfgQ7|SK547uBDS1g?7KRDGU>1hSe!&%-b_4%zQ{cc6n4Tf#%mZu^VFU=K0%QaW z3=gfpBS1iakgx!G5nx&i9P-2F^Eodya)w^x!33D+`JpV!!^_JH3l%9^TdlFy+A9Gz z;uDL-g2jpyt!=Z;Ly54r09UKk--kkg=?GA0?M(%^TrR&n5CTj~fI=ED5#V>?LxAZC zu&)TSKATYlhyWX2Utiq`a5kGAilRV(2(Ut0kS3gl;Bz8GfN2S^kNA2gA>WA*0j49s zzT&F{*tZvaDnbO9h5&~U-(bTCpGAlO;}_r%;v0M#Mh~P19OA*i+Y$Of*SHcOmlA;$ z)g?uY0Yd~iJ*SPF2<1(jf% z0dqw!m}bDAjh6x@2?&V@m?j{6Q4N^%fcdH}@MizVm(_sj{*QVfINbm3_`+)NqyBel z3?_iH0fY--m~sq^LN$WlW`toFasRh&6(HF#jD@t7U1Ma!FzWP6n^BYoC&lMW#y4of zfXT<7tgA622u_oa?~;+@5AJz^;N1J+1;I(@11|_8hu;0wrI!nZY32ms_NzDg8eR}? z-TU?Se(VLoY37R;1oO<7?g%*VdUWWH@ZG{NT+g?wF|Z1wmtB|_gj>-zEpuT^O@q_W zODG2O&`T%==UFe4)8M4t)~7(t;3}uwOl>lm+|wnY*K2C(`>`l#B^`1+nNP;R0`)#0 zM7U*vm~t^S`o$ERO|2f?qEmwS5FsQezLOdu;W+$LZNIaSjl_h60}(>H;zNXp4-o?5 z``oq*v3I;$tqx^bUWNW{h`n92u_^`_+R5|$Y5^8S5t`Tg@Mf@pTH)ED%Su?+h);i) z8ecdf+{Gfo0L8b-u>TLehZ2&{i7+JbDe`zXPGxO6=oCswJ{4hL;@c*---|IzZbTT0 z_>|@1^}1!r9C*U(u{R7{ctkt@2xMcQS2`S3KQ4eil=3l|Oin&TuH~-zr5GZ8J;DX>yp+Nh;58IdxZlj$Jks-6fY(q+p8T89 z>-ApBhkP54$Db&`{}j15xktIz)J8ls@b?s99{9mv@Ykm^RWMB-@(kvH@AvzEBD#OHH=g`z1@ z#4S?e8z}&lB5siy-|;mHkQmCAsPT;yfKCy&M2&CM2e3d9w?d6?6oy)%h+Ck>H_ijB zP{h%x@hnAXGbC7yQ_h6hj#Tc7u^*sZjwT}lfTl<=6gy&$l*N*?f{>PoLek}gJY{|; zsVM+6CpkADuH4L&VMeSxd7EYkV44!mkn%)5PST5_fSl7*(dLKI8AmKX*IAg4Ud4_)cEN8i)nI7 z(Wvoi8-KEaqqvO~l>h*K>Kl0eC(g&(*i(CZE7M69cT@$9bZC-*O-@adbVvaF1GLGh zQ$w=2D6HJG$^GPiOWZ6dLhey5v5Ms%5NG7bJ(;uf9(+Wu>8zb|%}v{QADe`Vt(Ep& z3=`!{%)9(%kWDwOAFlhBIfWdbc|+t}xrSUzt{H5r*)|-)(0D|wJl8+w8}J>qTXXyX O0000V=8pn03oHq- zXT~2RxmbyHoFDegcsw4Wh*1WE!QXzr|G(4eB<*%P?RLBCG7X>2+Z6wcJ|bTPFN+t? zfh}_ohhDFj>1gN+eWLG1qw&WnXn3Lg<>I{UbO9>?bd6`aFx%4nMNU-Uel|QC>cOgI zj=^FEa6x<3@MVeyiKWUt>cFaK5-wt#!Gtf$=8b!RI) zWm)gYmo%oo3-DBkWJ|h$cX9=uYG8~*gd5-@JQbobSH~5d$D$K`foBXNHtN2>Qy?zA z_wzJBT-1dZ`wCBi7zc~XVVNaHR2cWp>q_vjM-1RT+&334%PBy6T*{?f8^rViu-8G^ zw}wN?VAC|sw%hHk;cp4!`qiM|{6NAW$K!GKOe8=ABhk7K@XqIR_DbgSxlCOs!D)U6 zPY}fT8Ni(l@UAkO%~*pCqKrpXco2LZ|0lwja5~PPz>@&+&avhSSJi>X4e>7AWh*>x zh_^!`o8fUnyc|MN>pv6lxFBBiAm!fIBs>-3Xf&eR8&k#oDBxXXzu#xW;gBXyNCA)% z9wo#JKo{XrLNp2xgFhaR8K;*Zavl-weCdhr1X*s}z{WQ*UfH6xz z)fIrZto{J7Mo6DK2ijJEcZW)x$C|bRygSz9JXp6C;6s)cS89ii03T92IG3@F0H3D& zB4sN8EZ1J9`f^;VLA1E;F{YTyHyp+U(ULmnCe*otZ|{uwe6>r<)vs_vNyCjLDaq!- z047zhdL05dCGz}9ZG-^tN7Utm>#j*yx)qmhxV2g1mS(7zV5n|_tF>ZCYsmNl(P#l4 z*GfLIlz?(oCz2K+a}6R(1vfm<1s4a0L#!1orI-DDQ=nExrQc8jRAUj^Q1(-gtFx3C z3>7!)ev_g`{xX2mQ}r^TG&DtR{lvMt`bACsg$aX$KB0qKt=3oMgA_9}R(=NKPzBcY zXED$RXNmW3_O60PntIKQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$g4*A-XaE2J literal 0 HcmV?d00001 diff --git a/templates/healthBar/game.json b/templates/healthBar/game.json index 892961b..928b697 100644 --- a/templates/healthBar/game.json +++ b/templates/healthBar/game.json @@ -531,6 +531,45 @@ "preloadAsSound": false, "preloadInCache": false, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Flat dark joystick border.png", + "kind": "image", + "metadata": "", + "name": "Flat dark joystick border.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/1db606cabd7372d1494ba5934bc25bcdd72f5a213c4a27509be57c3f4d5aecca_Flat dark joystick border.png", + "name": "Flat dark joystick border.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Flat dark joystick thumb.png", + "kind": "image", + "metadata": "", + "name": "Flat dark joystick thumb.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/10167ade22c4a6b48324e6c1d1bd6dc74179d7bed0775890903f418b4a05c8a1_Flat dark joystick thumb.png", + "name": "Flat dark joystick thumb.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Top arrow button.png", + "kind": "image", + "metadata": "", + "name": "Top arrow button.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Flat Dark/e3943e1b23ceb90f00fc5e7c0481c5147b983fdc5397fb3690e102e53ce72d4f_Top arrow button.png", + "name": "Top arrow button.png" + } } ], "resourceFolders": [] @@ -583,12 +622,12 @@ { "angle": 0, "customSize": true, - "height": 174, + "height": 160, "layer": "", "name": "Ground_And_Walls", "persistentUuid": "0dae8de6-9bdb-4464-86ce-95509c9d3d7b", - "width": 640, - "x": 288, + "width": 704, + "x": 256, "y": 416, "zOrder": 1, "numberProperties": [], @@ -613,13 +652,13 @@ { "angle": 0, "customSize": true, - "height": 320, + "height": 352, "layer": "", "name": "Ground_And_Walls", "persistentUuid": "86597996-bf18-4631-815b-3b7906168845", - "width": 160, + "width": 192, "x": 768, - "y": 96, + "y": 64, "zOrder": 3, "numberProperties": [], "stringProperties": [], @@ -628,13 +667,13 @@ { "angle": 0, "customSize": true, - "height": 320, + "height": 352, "layer": "", "name": "Ground_And_Walls", "persistentUuid": "39caeb0a-7104-4d49-978b-f0fa4a62fb7f", - "width": 160, - "x": 288, - "y": 96, + "width": 192, + "x": 256, + "y": 64, "zOrder": 3, "numberProperties": [], "stringProperties": [], @@ -733,13 +772,13 @@ { "angle": 0, "customSize": true, - "height": 416, + "height": 480, "layer": "", "name": "Background", "persistentUuid": "5c5c842b-6db5-4fe7-865c-5ea66fce35e1", - "width": 640, - "x": 288, - "y": 96, + "width": 704, + "x": 256, + "y": 64, "zOrder": -10, "numberProperties": [], "stringProperties": [], @@ -759,6 +798,36 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 96, + "layer": "", + "name": "FlatDarkJoystick", + "persistentUuid": "6f189a9b-a19a-41f1-9f48-7f2ae4ab166e", + "width": 96, + "x": 368, + "y": 400, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 96, + "layer": "", + "name": "TopArrowButton", + "persistentUuid": "5a47d484-7d61-4c51-b115-80ee688cf600", + "width": 96, + "x": 800, + "y": 352, + "zOrder": 8, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -811,6 +880,14 @@ "ClimbAnimationName": "climb", "PlatformerBehavior": "PlatformerObject" }, + { + "name": "PlatformerMultitouchMapper", + "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "Property": "PlatformerObject", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "JumpButton": "A" + }, { "name": "PlatformerObject", "type": "PlatformBehavior::PlatformerObjectBehavior", @@ -2763,6 +2840,137 @@ "variables": [], "effects": [], "behaviors": [] + }, + { + "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d", + "name": "FlatDarkJoystick", + "tags": "", + "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "Border": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Flat dark joystick border.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + "Thumb": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Flat dark joystick thumb.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06", + "name": "TopArrowButton", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "MultitouchButton", + "type": "SpriteMultitouchJoystick::MultitouchButton", + "ControllerIdentifier": 1, + "ButtonIdentifier": "A", + "TouchId": 0, + "TouchIndex": 0, + "IsReleased": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Top arrow button.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] } ], "events": [ @@ -2830,6 +3038,42 @@ "" ] } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SystemInfo::HasTouchScreen" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "FlatDarkJoystick", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "TopArrowButton", + "" + ] + } + ] + } ] }, { @@ -3309,6 +3553,10 @@ "name": "Health", "type": "Health::Health" }, + { + "name": "MultitouchButton", + "type": "SpriteMultitouchJoystick::MultitouchButton" + }, { "name": "Platform", "type": "PlatformBehavior::PlatformBehavior" @@ -3317,6 +3565,10 @@ "name": "PlatformerCharacterAnimator", "type": "PlatformerCharacterAnimator::PlatformerCharacterAnimator" }, + { + "name": "PlatformerMultitouchMapper", + "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper" + }, { "name": "PlatformerObject", "type": "PlatformBehavior::PlatformerObjectBehavior" @@ -3330,6 +3582,4367 @@ ], "externalEvents": [], "eventsFunctionsExtensions": [ + { + "author": "", + "category": "Input", + "extensionNamespace": "", + "fullName": "Multitouch joystick and buttons (sprite)", + "helpPath": "/objects/multitouch-joystick", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTMiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjI4LjQsMTIgMjAsMTIgMjAsMy42ICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjAsMjguNCAyMCwyMCAyOC40LDIwICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMy42LDIwIDEyLDIwIDEyLDI4LjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwzLjYgMTIsMTIgMy42LDEyICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNiw2IDE2LjcsNyAxNS4zLDcgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjE2LDI2IDE1LjMsMjUgMTYuNywyNSAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwxNiA3LDE1LjMgNywxNi43ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyNiwxNiAyNSwxNi43IDI1LDE1LjMgIi8+DQo8L3N2Zz4NCg==", + "name": "SpriteMultitouchJoystick", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg", + "shortDescription": "Joysticks or buttons for touchscreens.", + "version": "1.1.3", + "description": [ + "Multitouch joysticks can be used the same way as physical gamepads:", + "- 4 or 8 directions", + "- Analogus pads", + "- Player selection", + "- Controls mapping for top-down movement and platformer characters", + "", + "There are ready-to-use joysticks in the asset-store [multitouch joysticks pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=multitouch-joysticks-multitouch-joysticks)." + ], + "origin": { + "identifier": "SpriteMultitouchJoystick", + "name": "gdevelop-extension-store" + }, + "tags": [ + "multitouch", + "joystick", + "thumbstick", + "controller", + "touchscreen", + "twin stick", + "shooter", + "virtual" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "1OgYzWp5UeVPbiWGJwI6vqfgZLC3", + "v0YRpdAnIucZFgiRCCecqVnGKno2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if a button is pressed on a gamepad.", + "fullName": "Multitouch controller button pressed", + "functionType": "Condition", + "name": "IsButtonPressed", + "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a button is released on a gamepad.", + "fullName": "Multitouch controller button released", + "functionType": "Condition", + "name": "IsButtonReleased", + "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "\"Released\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Change a button state for a multitouch controller.", + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "GetArgumentAsString(\"ButtonState\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "type": "string" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "Action", + "name": "SetDeadZone", + "private": true, + "sentence": "Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].DeadZone", + "=", + "GetArgumentAsNumber(\"DeadZoneRadius\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Dead zone radius", + "name": "DeadZoneRadius", + "supplementaryInformation": "[]", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "Expression", + "name": "DeadZone", + "private": true, + "sentence": "Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].DeadZone)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).", + "fullName": "Angle to 4-way index", + "functionType": "ExpressionAndCondition", + "name": "AngleTo4Way", + "private": true, + "sentence": "The angle _PARAM1_ 4-way index", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "mod(round(GetArgumentAsNumber(\"Angle\") * 4 / 360), 4)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).", + "fullName": "Angle to 8-way index", + "functionType": "ExpressionAndCondition", + "name": "AngleTo8Way", + "private": true, + "sentence": "The angle _PARAM1_ 8-way index", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "mod(round(GetArgumentAsNumber(\"Angle\") * 8 / 360), 8)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if angle is in a given direction.", + "fullName": "Angle 4-way direction", + "functionType": "Condition", + "name": "IsAngleIn4WayDirection", + "private": true, + "sentence": "The angle _PARAM1_ is the 4-way direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Right\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "0", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Down\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "1", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Left\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "2", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Up\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "3", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if angle is in a given direction.", + "fullName": "Angle 8-way direction", + "functionType": "Condition", + "name": "IsAngleIn8WayDirection", + "private": true, + "sentence": "The angle _PARAM1_ is the 8-way direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Right\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "0", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"DownRight\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "1", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Down\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "2", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"DownLeft\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "3", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Left\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "4", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"UpLeft\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "5", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Up\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "6", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"UpRight\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "7", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "Action", + "name": "SetJoystickForce", + "private": true, + "sentence": "Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Joystick that can be controlled by interacting with a touchscreen.", + "fullName": "Multitouch Joystick", + "name": "MultitouchJoystick", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetDeadZone" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyDeadZoneRadius()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasGameJustResumed" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Resumed!!!\"", + "", + "" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Manage touches", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update joystick position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(2 * DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)) / Object.Width(), 0, 1)", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickForce", + "name": "SetJoystickForce", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickForce()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the joystick angle of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickAngle()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Angle", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the joystick values (except for angle, which stays the same)", + "fullName": "Reset", + "functionType": "Action", + "name": "Reset", + "private": true, + "sentence": "Reset the joystick of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier.", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyControllerIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDeadZoneRadius()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyDeadZoneRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "String", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick angle (range: -180 to 180)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickAngle" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick force (range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickForce" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Detect button presses made on a touchscreen.", + "fullName": "Multitouch button", + "name": "MultitouchButton", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Idle\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Pressed\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Released\"", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if button is released.", + "fullName": "Button released", + "functionType": "Condition", + "name": "IsReleased", + "sentence": "Button _PARAM0_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if button is pressed.", + "fullName": "Button pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Button _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark the button _PARAM0_ as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetButtonState" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyButtonIdentifier()", + "GetArgumentAsString(\"ButtonState\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Button identifier", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ButtonIdentifier" + }, + { + "value": "0", + "type": "Number", + "label": "TouchID", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + }, + { + "value": "", + "type": "Boolean", + "label": "Button released", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsReleased" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a platformer character with a multitouch controller.", + "fullName": "Platformer multitouch controller mapper", + "name": "PlatformerMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "Property" + ] + }, + { + "type": { + "value": "PlatformBehavior::SimulateLadderKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsButtonPressed" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJumpButton()", + "\"Down\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateJumpKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Platform character behavior", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "Property" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "Controls", + "extraInformation": [ + "Primary", + "Secondary" + ], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Jump button name", + "description": "", + "group": "Controls", + "extraInformation": [], + "hidden": false, + "name": "JumpButton" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a top-down character with a multitouch controller.", + "fullName": "Top-down multitouch controller mapper", + "name": "TopDownMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Analog\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"360°\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "sign(SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier()))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"8 Directions\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"UpLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"UpRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"DownLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"DownRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::TopDownMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Top-down movement behavior", + "description": "", + "group": "", + "extraInformation": [ + "TopDownMovementBehavior::TopDownMovementBehavior" + ], + "hidden": false, + "name": "TopDownMovement" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [ + "Primary", + "Secondary" + ], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "Analog", + "type": "Choice", + "label": "Stick mode", + "description": "", + "group": "Controls", + "extraInformation": [ + "Analog", + "360°", + "8 Directions" + ], + "hidden": false, + "name": "StickMode" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "Joystick", + "description": "Joystick for touchscreens.", + "fullName": "Multitouch Joystick", + "name": "SpriteMultitouchJoystick", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Border", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Thumb", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Border", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Thumb", + "=", + "2" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Border", + "=", + "0", + "=", + "0" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Thumb", + "=", + "0", + "=", + "0" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": [ + "Thumb", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreAutour" + }, + "parameters": [ + "Thumb", + "Border", + "Border.MultitouchJoystick::JoystickForce() * Border.Width() / 2", + "Border.MultitouchJoystick::JoystickAngle()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Pass the object property values to the behavior.", + "fullName": "Update configuration", + "functionType": "Action", + "name": "UpdateConfiguration", + "private": true, + "sentence": "Update the configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyControllerIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyJoystickIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyDeadZoneRadius()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate control of the joystick.", + "fullName": "De/activate control", + "functionType": "Action", + "name": "ActivateControl", + "sentence": "Activate control of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "!=" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier (1, 2, 3, 4...).", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name of the object.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsString(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyDeadZoneRadius()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [ + "Primary", + "Secondary" + ], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbAnchorOrigin" + }, + { + "value": "Center-center", + "type": "Number", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbAnchorTarget" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbIsScaledProportionally" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ParentOrigin" + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Thumb", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Border", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "MultitouchJoystick", + "type": "SpriteMultitouchJoystick::MultitouchJoystick", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "FloatingEnabled": false, + "DeadZoneRadius": 0.4, + "JoystickAngle": 0, + "JoystickForce": 0, + "TouchId": 0, + "TouchIndex": 0 + } + ], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] + } + ] + } + ] + }, { "author": "", "category": "Movement", From 1bcdbb7bd76d46f2f715bfd920daeb8b77cab45d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 24 Mar 2023 10:50:43 +0100 Subject: [PATCH 061/208] Update cameraParallax to have joysticks --- .../assets/Flat dark joystick border.png | Bin 0 -> 1632 bytes .../assets/Flat dark joystick thumb.png | Bin 0 -> 1044 bytes .../assets/Top arrow button.png | Bin 0 -> 962 bytes templates/cameraParallax/game.json | 4692 ++++++++++++++++- 4 files changed, 4675 insertions(+), 17 deletions(-) create mode 100644 templates/cameraParallax/assets/Flat dark joystick border.png create mode 100644 templates/cameraParallax/assets/Flat dark joystick thumb.png create mode 100644 templates/cameraParallax/assets/Top arrow button.png diff --git a/templates/cameraParallax/assets/Flat dark joystick border.png b/templates/cameraParallax/assets/Flat dark joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddd717e42b566f78f6441a2a92756a1e612dc74 GIT binary patch literal 1632 zcmV-m2A}zfP)005u}1^@s6i_d2*00009a7bBm000XT z000XT0n*)m`~Uz35=lfsRCwC$o$YbjN)(3GK}yJs8}Kk=Y=aF*Y9J+0f=i%;lt2lT z;1XOyN}vQTudbBXj6n!Vd-mfwGtb=oh>5QD^*MV!cF8jAi_K=Um6%SaZ;y|U8}an? z^nMG?&+D_A&*cqcl}#p-`-g{zUyZTsS59mS44;|goohTg-Fseu+`Zt9XBHY9#zToS7MNwQWKylpX2462ke1Hi1 z82#KRM7Sa001^|#hX|?jfhpeikM&!^LdA`@1Frh*V1d#&cjBE0>uWC*gM#+kqY=$oPSu^DVrVMrw61`q9tqsy{1G6b=$}V79 zmcjdhsTXAL2WDQ7%oj|(Al?tmGGe+OU^=M4xD}Y)Go#WAFAT<*oF@4I|C13;xq;b` zg2rfgQ7|SK547uBDS1g?7KRDGU>1hSe!&%-b_4%zQ{cc6n4Tf#%mZu^VFU=K0%QaW z3=gfpBS1iakgx!G5nx&i9P-2F^Eodya)w^x!33D+`JpV!!^_JH3l%9^TdlFy+A9Gz z;uDL-g2jpyt!=Z;Ly54r09UKk--kkg=?GA0?M(%^TrR&n5CTj~fI=ED5#V>?LxAZC zu&)TSKATYlhyWX2Utiq`a5kGAilRV(2(Ut0kS3gl;Bz8GfN2S^kNA2gA>WA*0j49s zzT&F{*tZvaDnbO9h5&~U-(bTCpGAlO;}_r%;v0M#Mh~P19OA*i+Y$Of*SHcOmlA;$ z)g?uY0Yd~iJ*SPF2<1(jf% z0dqw!m}bDAjh6x@2?&V@m?j{6Q4N^%fcdH}@MizVm(_sj{*QVfINbm3_`+)NqyBel z3?_iH0fY--m~sq^LN$WlW`toFasRh&6(HF#jD@t7U1Ma!FzWP6n^BYoC&lMW#y4of zfXT<7tgA622u_oa?~;+@5AJz^;N1J+1;I(@11|_8hu;0wrI!nZY32ms_NzDg8eR}? z-TU?Se(VLoY37R;1oO<7?g%*VdUWWH@ZG{NT+g?wF|Z1wmtB|_gj>-zEpuT^O@q_W zODG2O&`T%==UFe4)8M4t)~7(t;3}uwOl>lm+|wnY*K2C(`>`l#B^`1+nNP;R0`)#0 zM7U*vm~t^S`o$ERO|2f?qEmwS5FsQezLOdu;W+$LZNIaSjl_h60}(>H;zNXp4-o?5 z``oq*v3I;$tqx^bUWNW{h`n92u_^`_+R5|$Y5^8S5t`Tg@Mf@pTH)ED%Su?+h);i) z8ecdf+{Gfo0L8b-u>TLehZ2&{i7+JbDe`zXPGxO6=oCswJ{4hL;@c*---|IzZbTT0 z_>|@1^}1!r9C*U(u{R7{ctkt@2xMcQS2`S3KQ4eil=3l|Oin&TuH~-zr5GZ8J;DX>yp+Nh;58IdxZlj$Jks-6fY(q+p8T89 z>-ApBhkP54$Db&`{}j15xktIz)J8ls@b?s99{9mv@Ykm^RWMB-@(kvH@AvzEBD#OHH=g`z1@ z#4S?e8z}&lB5siy-|;mHkQmCAsPT;yfKCy&M2&CM2e3d9w?d6?6oy)%h+Ck>H_ijB zP{h%x@hnAXGbC7yQ_h6hj#Tc7u^*sZjwT}lfTl<=6gy&$l*N*?f{>PoLek}gJY{|; zsVM+6CpkADuH4L&VMeSxd7EYkV44!mkn%)5PST5_fSl7*(dLKI8AmKX*IAg4Ud4_)cEN8i)nI7 z(Wvoi8-KEaqqvO~l>h*K>Kl0eC(g&(*i(CZE7M69cT@$9bZC-*O-@adbVvaF1GLGh zQ$w=2D6HJG$^GPiOWZ6dLhey5v5Ms%5NG7bJ(;uf9(+Wu>8zb|%}v{QADe`Vt(Ep& z3=`!{%)9(%kWDwOAFlhBIfWdbc|+t}xrSUzt{H5r*)|-)(0D|wJl8+w8}J>qTXXyX O0000V=8pn03oHq- zXT~2RxmbyHoFDegcsw4Wh*1WE!QXzr|G(4eB<*%P?RLBCG7X>2+Z6wcJ|bTPFN+t? zfh}_ohhDFj>1gN+eWLG1qw&WnXn3Lg<>I{UbO9>?bd6`aFx%4nMNU-Uel|QC>cOgI zj=^FEa6x<3@MVeyiKWUt>cFaK5-wt#!Gtf$=8b!RI) zWm)gYmo%oo3-DBkWJ|h$cX9=uYG8~*gd5-@JQbobSH~5d$D$K`foBXNHtN2>Qy?zA z_wzJBT-1dZ`wCBi7zc~XVVNaHR2cWp>q_vjM-1RT+&334%PBy6T*{?f8^rViu-8G^ zw}wN?VAC|sw%hHk;cp4!`qiM|{6NAW$K!GKOe8=ABhk7K@XqIR_DbgSxlCOs!D)U6 zPY}fT8Ni(l@UAkO%~*pCqKrpXco2LZ|0lwja5~PPz>@&+&avhSSJi>X4e>7AWh*>x zh_^!`o8fUnyc|MN>pv6lxFBBiAm!fIBs>-3Xf&eR8&k#oDBxXXzu#xW;gBXyNCA)% z9wo#JKo{XrLNp2xgFhaR8K;*Zavl-weCdhr1X*s}z{WQ*UfH6xz z)fIrZto{J7Mo6DK2ijJEcZW)x$C|bRygSz9JXp6C;6s)cS89ii03T92IG3@F0H3D& zB4sN8EZ1J9`f^;VLA1E;F{YTyHyp+U(ULmnCe*otZ|{uwe6>r<)vs_vNyCjLDaq!- z047zhdL05dCGz}9ZG-^tN7Utm>#j*yx)qmhxV2g1mS(7zV5n|_tF>ZCYsmNl(P#l4 z*GfLIlz?(oCz2K+a}6R(1vfm<1s4a0L#!1orI-DDQ=nExrQc8jRAUj^Q1(-gtFx3C z3>7!)ev_g`{xX2mQ}r^TG&DtR{lvMt`bACsg$aX$KB0qKt=3oMgA_9}R(=NKPzBcY zXED$RXNmW3_O60PntIKQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$g4*A-XaE2J literal 0 HcmV?d00001 diff --git a/templates/cameraParallax/game.json b/templates/cameraParallax/game.json index 1c50874..8178f2a 100644 --- a/templates/cameraParallax/game.json +++ b/templates/cameraParallax/game.json @@ -232,6 +232,45 @@ "name": "Jump-4.png", "smoothed": false, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Top arrow button.png", + "kind": "image", + "metadata": "", + "name": "Top arrow button.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Flat Dark/e3943e1b23ceb90f00fc5e7c0481c5147b983fdc5397fb3690e102e53ce72d4f_Top arrow button.png", + "name": "Top arrow button.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Flat dark joystick border.png", + "kind": "image", + "metadata": "", + "name": "Flat dark joystick border.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/1db606cabd7372d1494ba5934bc25bcdd72f5a213c4a27509be57c3f4d5aecca_Flat dark joystick border.png", + "name": "Flat dark joystick border.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Flat dark joystick thumb.png", + "kind": "image", + "metadata": "", + "name": "Flat dark joystick thumb.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/10167ade22c4a6b48324e6c1d1bd6dc74179d7bed0775890903f418b4a05c8a1_Flat dark joystick thumb.png", + "name": "Flat dark joystick thumb.png" + } } ], "resourceFolders": [] @@ -325,6 +364,36 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "Joysticks", + "name": "FlatDarkJoystick", + "persistentUuid": "6d41f662-4b75-44d8-8e07-7c623047ffe5", + "width": 0, + "x": 122, + "y": 596, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 166, + "layer": "Joysticks", + "name": "TopArrowButton", + "persistentUuid": "304abd69-5c72-4f7a-bb10-81b7277fd360", + "width": 166, + "x": 1089, + "y": 508, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -337,6 +406,14 @@ "variables": [], "effects": [], "behaviors": [ + { + "name": "PlatformerMultitouchMapper", + "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "Property": "PlatformerObject", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "JumpButton": "A" + }, { "name": "PlatformerObject", "type": "PlatformBehavior::PlatformerObjectBehavior", @@ -908,6 +985,137 @@ "yGrabOffset": 0 } ] + }, + { + "assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06", + "name": "TopArrowButton", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "MultitouchButton", + "type": "SpriteMultitouchJoystick::MultitouchButton", + "ControllerIdentifier": 1, + "ButtonIdentifier": "A", + "TouchId": 0, + "TouchIndex": 0, + "IsReleased": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Top arrow button.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d", + "name": "FlatDarkJoystick", + "tags": "", + "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "Border": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Flat dark joystick border.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + "Thumb": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Flat dark joystick thumb.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } } ], "events": [ @@ -959,7 +1167,9 @@ "type": { "value": "DepartScene" }, - "parameters": [""] + "parameters": [ + "" + ] } ], "actions": [ @@ -967,7 +1177,37 @@ "type": { "value": "SceneBackground" }, - "parameters": ["", "\"24;18;32\""] + "parameters": [ + "", + "\"24;18;32\"" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SystemInfo::HasTouchScreen" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "TopArrowButton", + "\"Joysticks\"" + ] + } + ] } ] }, @@ -991,7 +1231,10 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": ["PlayerObject", "PlatformerObject"] + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] } ], "actions": [], @@ -1003,7 +1246,10 @@ "type": { "value": "PlatformBehavior::IsOnFloor" }, - "parameters": ["PlayerObject", "PlatformerObject"] + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] } ], "actions": [ @@ -1011,7 +1257,10 @@ "type": { "value": "SetAnimationName" }, - "parameters": ["PlayerObject", "\"Run\""] + "parameters": [ + "PlayerObject", + "\"Run\"" + ] } ] }, @@ -1022,7 +1271,10 @@ "type": { "value": "PlatformBehavior::IsJumping" }, - "parameters": ["PlayerObject", "PlatformerObject"] + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] } ], "actions": [ @@ -1030,7 +1282,10 @@ "type": { "value": "SetAnimationName" }, - "parameters": ["PlayerObject", "\"Jump\""] + "parameters": [ + "PlayerObject", + "\"Jump\"" + ] } ] } @@ -1044,7 +1299,10 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": ["PlayerObject", "PlatformerObject"] + "parameters": [ + "PlayerObject", + "PlatformerObject" + ] } ], "actions": [ @@ -1052,7 +1310,10 @@ "type": { "value": "SetAnimationName" }, - "parameters": ["PlayerObject", "\"Idle\""] + "parameters": [ + "PlayerObject", + "\"Idle\"" + ] } ] }, @@ -1061,9 +1322,14 @@ "conditions": [ { "type": { - "value": "KeyPressed" + "value": "PlatformBehavior::CurrentSpeed" }, - "parameters": ["", "Left"] + "parameters": [ + "PlayerObject", + "PlatformerObject", + "<", + "0" + ] }, { "type": { @@ -1077,7 +1343,10 @@ "type": { "value": "FlipX" }, - "parameters": ["PlayerObject", "yes"] + "parameters": [ + "PlayerObject", + "yes" + ] } ] }, @@ -1086,9 +1355,14 @@ "conditions": [ { "type": { - "value": "KeyPressed" + "value": "PlatformBehavior::CurrentSpeed" }, - "parameters": ["", "Right"] + "parameters": [ + "PlayerObject", + "PlatformerObject", + ">", + "0" + ] }, { "type": { @@ -1102,7 +1376,10 @@ "type": { "value": "FlipX" }, - "parameters": ["PlayerObject", "no"] + "parameters": [ + "PlayerObject", + "no" + ] } ] }, @@ -1165,13 +1442,32 @@ } ], "effects": [] + }, + { + "ambientLightColorB": 12053944, + "ambientLightColorG": 6068784, + "ambientLightColorR": 12533720, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "Joysticks", + "visibility": true, + "cameras": [], + "effects": [] } ], "behaviorsSharedData": [ + { + "name": "MultitouchButton", + "type": "SpriteMultitouchJoystick::MultitouchButton" + }, { "name": "Platform", "type": "PlatformBehavior::PlatformBehavior" }, + { + "name": "PlatformerMultitouchMapper", + "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper" + }, { "name": "PlatformerObject", "type": "PlatformBehavior::PlatformerObjectBehavior" @@ -1180,7 +1476,4369 @@ } ], "externalEvents": [], - "eventsFunctionsExtensions": [], + "eventsFunctionsExtensions": [ + { + "author": "", + "category": "Input", + "extensionNamespace": "", + "fullName": "Multitouch joystick and buttons (sprite)", + "helpPath": "/objects/multitouch-joystick", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTMiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjI4LjQsMTIgMjAsMTIgMjAsMy42ICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjAsMjguNCAyMCwyMCAyOC40LDIwICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMy42LDIwIDEyLDIwIDEyLDI4LjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwzLjYgMTIsMTIgMy42LDEyICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNiw2IDE2LjcsNyAxNS4zLDcgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjE2LDI2IDE1LjMsMjUgMTYuNywyNSAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwxNiA3LDE1LjMgNywxNi43ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyNiwxNiAyNSwxNi43IDI1LDE1LjMgIi8+DQo8L3N2Zz4NCg==", + "name": "SpriteMultitouchJoystick", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg", + "shortDescription": "Joysticks or buttons for touchscreens.", + "version": "1.1.3", + "description": [ + "Multitouch joysticks can be used the same way as physical gamepads:", + "- 4 or 8 directions", + "- Analogus pads", + "- Player selection", + "- Controls mapping for top-down movement and platformer characters", + "", + "There are ready-to-use joysticks in the asset-store [multitouch joysticks pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=multitouch-joysticks-multitouch-joysticks)." + ], + "origin": { + "identifier": "SpriteMultitouchJoystick", + "name": "gdevelop-extension-store" + }, + "tags": [ + "multitouch", + "joystick", + "thumbstick", + "controller", + "touchscreen", + "twin stick", + "shooter", + "virtual" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "1OgYzWp5UeVPbiWGJwI6vqfgZLC3", + "v0YRpdAnIucZFgiRCCecqVnGKno2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if a button is pressed on a gamepad.", + "fullName": "Multitouch controller button pressed", + "functionType": "Condition", + "name": "IsButtonPressed", + "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a button is released on a gamepad.", + "fullName": "Multitouch controller button released", + "functionType": "Condition", + "name": "IsButtonReleased", + "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "\"Released\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Change a button state for a multitouch controller.", + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "GetArgumentAsString(\"ButtonState\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "type": "string" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "Action", + "name": "SetDeadZone", + "private": true, + "sentence": "Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].DeadZone", + "=", + "GetArgumentAsNumber(\"DeadZoneRadius\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Dead zone radius", + "name": "DeadZoneRadius", + "supplementaryInformation": "[]", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "Expression", + "name": "DeadZone", + "private": true, + "sentence": "Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].DeadZone)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).", + "fullName": "Angle to 4-way index", + "functionType": "ExpressionAndCondition", + "name": "AngleTo4Way", + "private": true, + "sentence": "The angle _PARAM1_ 4-way index", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "mod(round(GetArgumentAsNumber(\"Angle\") * 4 / 360), 4)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).", + "fullName": "Angle to 8-way index", + "functionType": "ExpressionAndCondition", + "name": "AngleTo8Way", + "private": true, + "sentence": "The angle _PARAM1_ 8-way index", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "mod(round(GetArgumentAsNumber(\"Angle\") * 8 / 360), 8)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if angle is in a given direction.", + "fullName": "Angle 4-way direction", + "functionType": "Condition", + "name": "IsAngleIn4WayDirection", + "private": true, + "sentence": "The angle _PARAM1_ is the 4-way direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Right\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "0", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Down\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "1", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Left\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "2", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Up\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "3", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if angle is in a given direction.", + "fullName": "Angle 8-way direction", + "functionType": "Condition", + "name": "IsAngleIn8WayDirection", + "private": true, + "sentence": "The angle _PARAM1_ is the 8-way direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Right\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "0", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"DownRight\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "1", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Down\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "2", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"DownLeft\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "3", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Left\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "4", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"UpLeft\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "5", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Up\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "6", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"UpRight\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "7", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "Action", + "name": "SetJoystickForce", + "private": true, + "sentence": "Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Joystick that can be controlled by interacting with a touchscreen.", + "fullName": "Multitouch Joystick", + "name": "MultitouchJoystick", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetDeadZone" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyDeadZoneRadius()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasGameJustResumed" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Resumed!!!\"", + "", + "" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Manage touches", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update joystick position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(2 * DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)) / Object.Width(), 0, 1)", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickForce", + "name": "SetJoystickForce", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickForce()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the joystick angle of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickAngle()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Angle", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the joystick values (except for angle, which stays the same)", + "fullName": "Reset", + "functionType": "Action", + "name": "Reset", + "private": true, + "sentence": "Reset the joystick of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier.", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyControllerIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDeadZoneRadius()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyDeadZoneRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "String", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick angle (range: -180 to 180)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickAngle" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick force (range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickForce" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Detect button presses made on a touchscreen.", + "fullName": "Multitouch button", + "name": "MultitouchButton", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Idle\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Pressed\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Released\"", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if button is released.", + "fullName": "Button released", + "functionType": "Condition", + "name": "IsReleased", + "sentence": "Button _PARAM0_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if button is pressed.", + "fullName": "Button pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Button _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark the button _PARAM0_ as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetButtonState" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyButtonIdentifier()", + "GetArgumentAsString(\"ButtonState\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Button identifier", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ButtonIdentifier" + }, + { + "value": "0", + "type": "Number", + "label": "TouchID", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + }, + { + "value": "", + "type": "Boolean", + "label": "Button released", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsReleased" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a platformer character with a multitouch controller.", + "fullName": "Platformer multitouch controller mapper", + "name": "PlatformerMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "Property" + ] + }, + { + "type": { + "value": "PlatformBehavior::SimulateLadderKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsButtonPressed" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJumpButton()", + "\"Down\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateJumpKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Platform character behavior", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "Property" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "Controls", + "extraInformation": [ + "Primary", + "Secondary" + ], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Jump button name", + "description": "", + "group": "Controls", + "extraInformation": [], + "hidden": false, + "name": "JumpButton" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a top-down character with a multitouch controller.", + "fullName": "Top-down multitouch controller mapper", + "name": "TopDownMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Analog\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"360°\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "sign(SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier()))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"8 Directions\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"UpLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"UpRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"DownLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"DownRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::TopDownMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Top-down movement behavior", + "description": "", + "group": "", + "extraInformation": [ + "TopDownMovementBehavior::TopDownMovementBehavior" + ], + "hidden": false, + "name": "TopDownMovement" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [ + "Primary", + "Secondary" + ], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "Analog", + "type": "Choice", + "label": "Stick mode", + "description": "", + "group": "Controls", + "extraInformation": [ + "Analog", + "360°", + "8 Directions" + ], + "hidden": false, + "name": "StickMode" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "Joystick", + "description": "Joystick for touchscreens.", + "fullName": "Multitouch Joystick", + "name": "SpriteMultitouchJoystick", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Border", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Thumb", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Border", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Thumb", + "=", + "2" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Border", + "=", + "0", + "=", + "0" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Thumb", + "=", + "0", + "=", + "0" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": [ + "Thumb", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreAutour" + }, + "parameters": [ + "Thumb", + "Border", + "Border.MultitouchJoystick::JoystickForce() * Border.Width() / 2", + "Border.MultitouchJoystick::JoystickAngle()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Pass the object property values to the behavior.", + "fullName": "Update configuration", + "functionType": "Action", + "name": "UpdateConfiguration", + "private": true, + "sentence": "Update the configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyControllerIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyJoystickIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyDeadZoneRadius()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate control of the joystick.", + "fullName": "De/activate control", + "functionType": "Action", + "name": "ActivateControl", + "sentence": "Activate control of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "!=" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier (1, 2, 3, 4...).", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name of the object.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsString(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyDeadZoneRadius()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [ + "Primary", + "Secondary" + ], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbAnchorOrigin" + }, + { + "value": "Center-center", + "type": "Number", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbAnchorTarget" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbIsScaledProportionally" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ParentOrigin" + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Thumb", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Border", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "MultitouchJoystick", + "type": "SpriteMultitouchJoystick::MultitouchJoystick", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "FloatingEnabled": false, + "DeadZoneRadius": 0.4, + "JoystickAngle": 0, + "JoystickForce": 0, + "TouchId": 0, + "TouchIndex": 0 + } + ], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] + } + ] + } + ] + } + ], "externalLayouts": [], "externalSourceFiles": [] -} +} \ No newline at end of file From d1f484a82565ac878b20e22315d4fbd1d61cda52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 24 Mar 2023 11:29:10 +0100 Subject: [PATCH 062/208] Cleaner joysticks --- templates/healthBar/game.json | 68 ++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/templates/healthBar/game.json b/templates/healthBar/game.json index 928b697..694f844 100644 --- a/templates/healthBar/game.json +++ b/templates/healthBar/game.json @@ -627,7 +627,7 @@ "name": "Ground_And_Walls", "persistentUuid": "0dae8de6-9bdb-4464-86ce-95509c9d3d7b", "width": 704, - "x": 256, + "x": 320, "y": 416, "zOrder": 1, "numberProperties": [], @@ -642,7 +642,7 @@ "name": "Player", "persistentUuid": "b32caa97-016d-46b8-9861-2780e11d26d0", "width": 0, - "x": 608, + "x": 672, "y": 409, "zOrder": 2, "numberProperties": [], @@ -657,7 +657,7 @@ "name": "Ground_And_Walls", "persistentUuid": "86597996-bf18-4631-815b-3b7906168845", "width": 192, - "x": 768, + "x": 832, "y": 64, "zOrder": 3, "numberProperties": [], @@ -672,7 +672,7 @@ "name": "Ground_And_Walls", "persistentUuid": "39caeb0a-7104-4d49-978b-f0fa4a62fb7f", "width": 192, - "x": 256, + "x": 320, "y": 64, "zOrder": 3, "numberProperties": [], @@ -687,7 +687,7 @@ "name": "Trap", "persistentUuid": "d8cd3a2e-a3a5-481e-8766-0e866e79d8e7", "width": 0, - "x": 449, + "x": 513, "y": 256, "zOrder": 0, "numberProperties": [], @@ -702,7 +702,7 @@ "name": "Trap", "persistentUuid": "5a467690-84ae-4dd9-9a73-8a8ece343d4b", "width": 0, - "x": 767, + "x": 831, "y": 256, "zOrder": 0, "numberProperties": [], @@ -717,7 +717,7 @@ "name": "Trap2", "persistentUuid": "5db22c35-3b08-4286-8cd2-e921e3c7fb9b", "width": 0, - "x": 568, + "x": 632, "y": 416, "zOrder": 5, "numberProperties": [], @@ -732,7 +732,7 @@ "name": "Trap2", "persistentUuid": "a6d1da2f-9c34-47bb-809b-dbac6180f557", "width": 0, - "x": 552, + "x": 616, "y": 416, "zOrder": 5, "numberProperties": [], @@ -747,7 +747,7 @@ "name": "Trap2", "persistentUuid": "8699b211-0089-43af-9046-4a8bcfd4e253", "width": 0, - "x": 648, + "x": 712, "y": 416, "zOrder": 5, "numberProperties": [], @@ -762,7 +762,7 @@ "name": "Trap2", "persistentUuid": "ff400d83-b7a4-4982-8ebd-c15c8bdc6495", "width": 0, - "x": 664, + "x": 728, "y": 416, "zOrder": 5, "numberProperties": [], @@ -777,7 +777,7 @@ "name": "Background", "persistentUuid": "5c5c842b-6db5-4fe7-865c-5ea66fce35e1", "width": 704, - "x": 256, + "x": 320, "y": 64, "zOrder": -10, "numberProperties": [], @@ -792,7 +792,7 @@ "name": "Trap3", "persistentUuid": "e68dfee1-2780-477d-ae81-3e153e23e241", "width": 0, - "x": 544, + "x": 608, "y": 320, "zOrder": 6, "numberProperties": [], @@ -802,13 +802,13 @@ { "angle": 0, "customSize": true, - "height": 96, - "layer": "", + "height": 160, + "layer": "Joysticks", "name": "FlatDarkJoystick", "persistentUuid": "6f189a9b-a19a-41f1-9f48-7f2ae4ab166e", - "width": 96, - "x": 368, - "y": 400, + "width": 160, + "x": 144, + "y": 592, "zOrder": 7, "numberProperties": [], "stringProperties": [], @@ -817,13 +817,13 @@ { "angle": 0, "customSize": true, - "height": 96, - "layer": "", + "height": 160, + "layer": "Joysticks", "name": "TopArrowButton", "persistentUuid": "5a47d484-7d61-4c51-b115-80ee688cf600", - "width": 96, - "x": 800, - "y": 352, + "width": 160, + "x": 1088, + "y": 512, "zOrder": 8, "numberProperties": [], "stringProperties": [], @@ -3056,20 +3056,11 @@ "actions": [ { "type": { - "value": "Delete" - }, - "parameters": [ - "FlatDarkJoystick", - "" - ] - }, - { - "type": { - "value": "Delete" + "value": "HideLayer" }, "parameters": [ "TopArrowButton", - "" + "\"Joysticks\"" ] } ] @@ -3546,6 +3537,17 @@ } ], "effects": [] + }, + { + "ambientLightColorB": 12194504, + "ambientLightColorG": 6068784, + "ambientLightColorR": 12709544, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "Joysticks", + "visibility": true, + "cameras": [], + "effects": [] } ], "behaviorsSharedData": [ From 40d04a94360a58fbb4679369a63d6b4fb449cc00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 24 Mar 2023 14:15:00 +0100 Subject: [PATCH 063/208] Final fixes --- templates/timer/game.json | 109 ++++++++++++++------------- tutorials/in-app/cameraParallax.json | 20 ++--- tutorials/in-app/healthBar.json | 10 +-- 3 files changed, 72 insertions(+), 67 deletions(-) diff --git a/templates/timer/game.json b/templates/timer/game.json index e2aa81f..6583845 100644 --- a/templates/timer/game.json +++ b/templates/timer/game.json @@ -226,8 +226,8 @@ "layer": "", "name": "Pathway", "persistentUuid": "cdcbc4bf-7cd1-4d9e-921a-f7866d0a3ee2", - "width": 64, - "x": 592, + "width": 128, + "x": 528, "y": 496, "zOrder": 6, "numberProperties": [], @@ -241,8 +241,8 @@ "layer": "", "name": "Pathway", "persistentUuid": "bd1518e0-3dc9-4aac-86a6-c3ec12f4e06f", - "width": 64, - "x": 616, + "width": 96, + "x": 600, "y": -408, "zOrder": 5, "numberProperties": [], @@ -256,7 +256,7 @@ "layer": "", "name": "Pathway", "persistentUuid": "279b0623-e3cb-4112-8b7a-6d1eaaacf0ac", - "width": 64, + "width": 128, "x": 48, "y": 384, "zOrder": 6, @@ -271,8 +271,8 @@ "layer": "", "name": "Pathway", "persistentUuid": "fd4f0435-cccc-4262-a35e-1312c0a0866b", - "width": 64, - "x": 1088, + "width": 96, + "x": 1072, "y": 416, "zOrder": 6, "numberProperties": [], @@ -297,13 +297,13 @@ { "angle": 0, "customSize": true, - "height": 176, + "height": 256, "layer": "", "name": "Pathway", "persistentUuid": "1ef93475-b28d-4a2a-9247-78c6d875074d", - "width": 64, + "width": 128, "x": 1136, - "y": 112, + "y": 96, "zOrder": 6, "numberProperties": [], "stringProperties": [], @@ -312,13 +312,13 @@ { "angle": 90, "customSize": true, - "height": 560, + "height": 624, "layer": "", "name": "Pathway", "persistentUuid": "3e8d09af-cb59-4da3-adf9-7576f18fb2d2", - "width": 64, - "x": 840, - "y": 360, + "width": 112, + "x": 784, + "y": 304, "zOrder": 5, "numberProperties": [], "stringProperties": [], @@ -327,12 +327,12 @@ { "angle": 90, "customSize": true, - "height": 608, + "height": 656, "layer": "", "name": "Pathway", "persistentUuid": "241c574c-0ea8-4d26-bfee-7a7adefdefa1", - "width": 64, - "x": 864, + "width": 112, + "x": 816, "y": -32, "zOrder": 5, "numberProperties": [], @@ -346,9 +346,9 @@ "layer": "", "name": "Pathway", "persistentUuid": "a01b122e-e945-41f9-84b7-85fc45524b60", - "width": 64, - "x": 320, - "y": 112, + "width": 112, + "x": 296, + "y": 88, "zOrder": 5, "numberProperties": [], "stringProperties": [], @@ -361,9 +361,9 @@ "layer": "", "name": "Pathway", "persistentUuid": "36ef8f28-16bb-4d44-87f9-ffac2f6cb355", - "width": 64, - "x": 320, - "y": 224, + "width": 96, + "x": 304, + "y": 240, "zOrder": 5, "numberProperties": [], "stringProperties": [], @@ -549,7 +549,7 @@ "timeBetweenFrames": 0.08, "sprites": [ { - "hasCustomCollisionMask": true, + "hasCustomCollisionMask": false, "image": "assets\\Pathway.png", "points": [], "originPoint": { @@ -563,26 +563,7 @@ "x": 0, "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 50, - "y": 0 - }, - { - "x": 110, - "y": 0 - }, - { - "x": 110, - "y": 160 - }, - { - "x": 50, - "y": 160 - } - ] - ] + "customCollisionMask": [] } ] } @@ -702,7 +683,9 @@ "type": { "value": "DepartScene" }, - "parameters": [""] + "parameters": [ + "" + ] } ], "actions": [ @@ -722,7 +705,9 @@ "type": { "value": "Cache" }, - "parameters": ["YouWin"] + "parameters": [ + "YouWin" + ] } ] }, @@ -784,7 +769,11 @@ "type": { "value": "Scene" }, - "parameters": ["", "\"GameScene\"", ""] + "parameters": [ + "", + "\"GameScene\"", + "" + ] } ] }, @@ -826,25 +815,41 @@ "type": { "value": "ActivateBehavior" }, - "parameters": ["Key", "Draggable", "no"] + "parameters": [ + "Key", + "Draggable", + "no" + ] }, { "type": { "value": "PlaySound" }, - "parameters": ["", "YouWin", "", "", ""] + "parameters": [ + "", + "YouWin", + "", + "", + "" + ] }, { "type": { "value": "Montre" }, - "parameters": ["YouWin", ""] + "parameters": [ + "YouWin", + "" + ] }, { "type": { "value": "ChangeTimeScale" }, - "parameters": ["", "0"] + "parameters": [ + "", + "0" + ] } ] } @@ -883,4 +888,4 @@ "eventsFunctionsExtensions": [], "externalLayouts": [], "externalSourceFiles": [] -} +} \ No newline at end of file diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index f3874b8..a0f86cc 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -375,7 +375,7 @@ { "elementToHighlightId": "#add-layer-button", "nextStepTrigger": { - "presenceOfElement": "#layer-1" + "presenceOfElement": "#layer-2" }, "tooltip": { "description": { @@ -391,7 +391,7 @@ } }, { - "elementToHighlightId": "#layer-1 #layer-name", + "elementToHighlightId": "#layer-2 #layer-name", "nextStepTrigger": { "valueEquals": "Background" }, @@ -409,9 +409,9 @@ } }, { - "elementToHighlightId": "#layer-1 #layer-selected-unchecked", + "elementToHighlightId": "#layer-2 #layer-selected-unchecked", "nextStepTrigger": { - "presenceOfElement": "#layer-1 #layer-selected-checked" + "presenceOfElement": "#layer-2 #layer-selected-checked" }, "tooltip": { "description": { @@ -427,18 +427,18 @@ } }, { - "elementToHighlightId": "#layer-1 #layer-drag-handle", + "elementToHighlightId": "#layer-2 #layer-drag-handle", "nextStepTrigger": { "presenceOfElement": "#layer-0 #layer-selected-checked" }, "tooltip": { "description": { "messageByLocale": { - "en": "Now let's make sure the background decoration will appear behind the player. **Drag** this Background layer **under** Base Layer. \n\nUse this handle to **drag it**", - "fr": "Assurons-nous maintenant que l'arrière-plan apparaîtra derrière le personnage. **Faites glisser** ce calque d'arrière-plan **sous** Couche de base.\n\n**Glissez le curseur en dessous**", - "es": "Ahora asegurémonos de que la decoración de fondo aparezca detrás del player. **Arrastra** esta capa Background **debajo** de la Base Layer. \n\nUsa este controlador para **arrastrarlo**", - "pt": "Agora vamos garantir que a decoração de fundo apareça atrás do player. **Arraste** esta camada Background **em baixo** da Base Layer. \n\nUse esta alça para **arrastá-lo**", - "th": "ทีนี้ **ย้าย** เลเยอร์นี้ไป **ใต้เลเยอร์หลัก** เพื่อให้องค์ประกอบในพื้นหลังปรากฏอยู่ข้างหลังผู้เล่น\n\n**ลากตัวควบคุมลง**" + "en": "Now let's make sure the background decoration will appear behind the player. **Drag** this Background layer **under** Base Layer. \n\nUse this handle to **drag it below base layer**", + "fr": "Assurons-nous maintenant que l'arrière-plan apparaîtra derrière le personnage. **Faites glisser** ce calque d'arrière-plan **sous** Couche de base.\n\nGlissez le curseur **en dessous de Calque de base**", + "es": "Ahora asegurémonos de que la decoración del fondo aparezca detrás del jugador. **Arrastra** esta capa de fondo **debajo** de la capa base.\n\nUsa este control para **arrastrarla debajo de la capa base**", + "pt": "Agora vamos nos certificar de que a decoração do fundo aparecerá atrás do jogador. **Arraste** esta camada de fundo **abaixo** da camada base.\n\nUse este controle para **arrastá-la abaixo da camada base**", + "th": "ตรวจสอบว่าพื้นหลังจะแสดงอยู่หลังจากผู้เล่น ลากเลเยอร์นี้ไป **ล่างสุด** ของเลเยอร์เริ่มต้น" } }, "placement": "top" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 2ead535..4a6de37 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -218,7 +218,7 @@ { "elementToHighlightId": "#add-asset-button", "nextStepTrigger": { - "presenceOfElement": "#object-item-6" + "presenceOfElement": "#object-item-8" }, "mapProjectData": { "resourceBar": "sceneLastObjectName:level" @@ -276,7 +276,7 @@ { "elementToHighlightId": "#add-layer-button", "nextStepTrigger": { - "presenceOfElement": "#layer-1" + "presenceOfElement": "#layer-2" }, "tooltip": { "description": { @@ -292,7 +292,7 @@ } }, { - "elementToHighlightId": "#layer-1 #layer-name", + "elementToHighlightId": "#layer-2 #layer-name", "nextStepTrigger": { "valueEquals": "Interface" }, @@ -310,9 +310,9 @@ } }, { - "elementToHighlightId": "#layer-1 #layer-selected-unchecked", + "elementToHighlightId": "#layer-2 #layer-selected-unchecked", "nextStepTrigger": { - "presenceOfElement": "#layer-1 #layer-selected-checked" + "presenceOfElement": "#layer-2 #layer-selected-checked" }, "tooltip": { "description": { From 3922e24438966c60ac3038e03c7e641c9c3a5141 Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Fri, 24 Mar 2023 17:34:26 +0100 Subject: [PATCH 064/208] Update Platformer character animator extensions (#27) --- templates/healthBar/game.json | 381 +++++++++++++++++++++++++++++++++- 1 file changed, 380 insertions(+), 1 deletion(-) diff --git a/templates/healthBar/game.json b/templates/healthBar/game.json index 694f844..d78a8f7 100644 --- a/templates/healthBar/game.json +++ b/templates/healthBar/game.json @@ -7955,7 +7955,7 @@ "name": "PlatformerCharacterAnimator", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Sports and Fitness/Sports and Fitness_training_running_run.svg", "shortDescription": "Change animations and horizontal flipping of a platformer character automatically.", - "version": "1.0.0", + "version": "1.0.1", "description": [ "Automatically change the animations and horizontal flipping of a platformer character based on movement and interaction with platform objects.", "", @@ -8423,6 +8423,385 @@ ], "objectGroups": [] }, + { + "fullName": "", + "functionType": "Action", + "name": "onActivate", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Flip character based on input from controls", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableHorizontalFlipping" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": [ + "Object", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Change animations", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableAnimationChanges" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyJumpAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsFalling" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyFallAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnFloor" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyRunAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyIdleAnimationName()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyClimbAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": [ + "Object" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PauseAnimation" + }, + "parameters": [ + "Object" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": [ + "Object", + "PlatformerBehavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": [ + "Object" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "description": "Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.", "fullName": "Enable (or disable) automated animation changes", From 903cd22f69d2218c4a8bb06ad829718bc9f5c13c Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Thu, 20 Apr 2023 13:16:22 +0200 Subject: [PATCH 065/208] Use open flag of project manager (#28) --- tutorials/in-app/cameraParallax.json | 8 ++++---- tutorials/in-app/flingGame.json | 12 ++++++------ tutorials/in-app/plinkoMultiplier.json | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index a0f86cc..0b1274b 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -63,7 +63,7 @@ "id": "Start", "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions" + "presenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-extensions" }, "tooltip": { "title": { @@ -87,7 +87,7 @@ } }, { - "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions", + "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-extensions", "nextStepTrigger": { "presenceOfElement": "#project-manager-extension-search-or-create" }, @@ -199,9 +199,9 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close", + "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-drawer-close", "nextStepTrigger": { - "absenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close" + "absenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-drawer-close" }, "tooltip": { "description": { diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 485efe5..c8cb6ee 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -153,7 +153,7 @@ "id": "OpenPropertiesManager", "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-game-settings" + "presenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-game-settings" }, "tooltip": { "description": { @@ -169,7 +169,7 @@ } }, { - "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-game-settings", + "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-game-settings", "nextStepTrigger": { "presenceOfElement": "#project-manager-tab-game-properties" }, @@ -1290,7 +1290,7 @@ "id": "OpenPropertiesManagerForExtension", "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions" + "presenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-extensions" }, "tooltip": { "title": { @@ -1315,7 +1315,7 @@ } }, { - "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-extensions", + "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-extensions", "nextStepTrigger": { "presenceOfElement": "#project-manager-extension-search-or-create" }, @@ -3330,7 +3330,7 @@ { "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-game-settings" + "presenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-game-settings" }, "tooltip": { "title": { @@ -5367,7 +5367,7 @@ { "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-game-settings" + "presenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-game-settings" }, "tooltip": { "description": { diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index a7437fa..a8d7227 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -103,9 +103,9 @@ } }, { - "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close", + "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-drawer-close", "nextStepTrigger": { - "absenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close" + "absenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-drawer-close" }, "tooltip": { "description": { @@ -224,7 +224,7 @@ "id": "OpenPropertiesManagerForScene", "elementToHighlightId": "#main-toolbar-project-manager-button", "nextStepTrigger": { - "presenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-tab-scenes" + "presenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-scenes" }, "tooltip": { "description": { @@ -369,9 +369,9 @@ } }, { - "elementToHighlightId": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close", + "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-drawer-close", "nextStepTrigger": { - "absenceOfElement": "div[role=\"presentation\"]:not([aria-hidden=true]) #project-manager-drawer-close" + "absenceOfElement": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-drawer-close" }, "tooltip": { "description": { From 5ddbb34ddce2e211cd3a94b5f3178388e6b594ce Mon Sep 17 00:00:00 2001 From: EyadMahm0ud <77191515+EyadMahm0ud@users.noreply.github.com> Date: Sun, 21 May 2023 13:37:18 +0300 Subject: [PATCH 066/208] Add a new language: Arabic The Arabic language has been added to the first three tutorials, the translations have been carefully reviewed, but in case I find something wrong, I will fix it --- tutorials/in-app/cameraParallax.json | 150 ++++++++++++++++++--------- tutorials/in-app/healthBar.json | 110 +++++++++++++------- tutorials/in-app/joystick.json | 95 +++++++++++------ 3 files changed, 236 insertions(+), 119 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 0b1274b..c9e2c19 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -10,7 +10,7 @@ "scene": "cameraScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json", "initialProjectData": { "cameraScene": "CameraScene", @@ -26,7 +26,8 @@ "fr": "# Vous avez terminé cette leçon !", "es": "# ¡Has terminado esta lección!", "pt": "# Você terminou esta lição!", - "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -35,7 +36,8 @@ "fr": "Bien joué, dans ce tutoriel vous avez appris :", "es": "¡Bien hecho, en este tutorial aprendiste:", "pt": "Bem feito, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -44,7 +46,8 @@ "fr": "- Comment créer un calque\n\n- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", "es": "- Cómo crear una capa\n\n- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades", - "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่ม extension\n\n- วิธีควบคุมกล้อง\n\n- วิธีทำให้ Tiled Sprites เคลื่อนที่ด้วยค่าความเร็วต่างๆ" + "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่ม extension\n\n- วิธีควบคุมกล้อง\n\n- วิธีทำให้ Tiled Sprites เคลื่อนที่ด้วยค่าความเร็วต่างๆ", + "ar": "- إنشاء طبقة\n\n- إضافة ملحق\n\n- التحكم في الكاميرا\n\n- إنشاء كائنات مبلطة تتحرك بسرعات مختلفة" } }, { @@ -53,7 +56,8 @@ "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", - "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -72,7 +76,8 @@ "fr": "Améliorons ce jeu de plateforme en suivant le personnage avec la caméra !", "es": "¡Mejoremos este juego de plataforma siguiendo al personaje con la cámara!", "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!", - "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ!" + "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ", + "ar": "دعنا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!" } }, "description": { @@ -81,7 +86,8 @@ "fr": "Pour cela, nous allons installer une **extension**.\n\nOuvrez le **Gestionnaire de projet**.", "es": "Para esto, instalaremos una **extensión**.\n\nAbre el **Administrador de proyectos**.", "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", - "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**" + "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**", + "ar": "لفعل هذا، سوف نثبت **ملحقًا**.\n\nفتح **مدير المشروع**." } } } @@ -98,7 +104,8 @@ "fr": "Ouvrez l'onglet **Extensions**.", "es": "Abre la pestaña **Extensiones**.", "pt": "Abra a guia **Extensões**.", - "th": "เปิด **แท็บ Extensions**" + "th": "เปิด **แท็บ Extensions**", + "ar": "فتح تبويب **الملحقات**." } } }, @@ -117,7 +124,8 @@ "fr": "Ouvrez le **Magasin d'extension**.", "es": "Abre la **tienda de extensiones**", "pt": "Abra a **loja de extensões**", - "th": "เปิด **ร้านค้า extension**" + "th": "เปิด **ร้านค้า extension**", + "ar": "فتح متجر الملحقات." } }, "placement": "top" @@ -136,7 +144,8 @@ "fr": "Cherchez l'extension **smooth camera**.", "es": "Busca la extensión **smooth camera**.", "pt": "Procure pela extensão **smooth camera**.", - "th": "ค้นหา extension **smooth camera**" + "th": "ค้นหา extension **smooth camera**", + "ar": "البحث عن الملحق **smooth camera*.*" } } }, @@ -155,7 +164,8 @@ "fr": "Cliquez sur l'extension **Smooth Camera**.", "es": "Haz clic en la extensión **Smooth Camera**.", "pt": "Clique na extensão **Smooth Camera**.", - "th": "คลิกที่ extension **Smooth Camera**" + "th": "คลิกที่ extension **Smooth Camera**", + "ar": "الضغط على الملحق **smooth camera*.*" } } }, @@ -173,7 +183,8 @@ "fr": "Installez l'extension au projet.", "es": "Instala la extensión en tu proyecto.", "pt": "Instale a extensão no seu projeto.", - "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ" + "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ", + "ar": "تثبيت الملحق في مشروعك." } }, "placement": "top" @@ -192,7 +203,8 @@ "fr": "Fermons cette fenêtre.", "es": "Cerramos esta ventana.", "pt": "Vamos fechar esta janela.", - "th": "ปิดหน้าต่างนี้" + "th": "ปิดหน้าต่างนี้", + "ar": "دعنا نغلق هذا." } } }, @@ -210,7 +222,8 @@ "fr": "Fermons le menu.", "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", - "th": "ปิดเมนู" + "th": "ปิดเมนู", + "ar": "دعنا نغلق هذه القائمة." } } }, @@ -228,7 +241,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -248,7 +262,8 @@ "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nCliquez droit sur **$(player)** ou utilisez le menu à 3 points et sélectionnez **Modifier les comportements**.", "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", - "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**" + "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**", + "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **($player)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { @@ -257,7 +272,8 @@ "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nSélectionnez puis appuyez longuement sur **$(player)** et sélectionnez **Modifier les comportements**.", "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nSelecciona y pulsa largo **$(player)** y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nSelecione e pressione por um longo tempo **$(player)** e selecione **Editar comportamentos**.", - "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**" + "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**", + "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **($player)** وتحديد **تحرير السلوكيات**." } } } @@ -274,7 +290,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." } }, "placement": "bottom" @@ -294,7 +311,8 @@ "fr": "Ajoutons le comportement **Smooth Camera** que nous venons d'installer.", "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar.", - "th": "เพิ่มพฤติกรรม **Smooth Camera** ที่เพิ่งได้ติดตั้ง" + "th": "เพิ่มพฤติกรรม **Smooth Camera** ที่เพิ่งได้ติดตั้ง", + "ar": "دعنا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو." } } }, @@ -312,7 +330,8 @@ "fr": "Sélectionnez le comportement **Smooth Camera**.", "es": "Selecciona el comportamiento **Smooth Camera**.", "pt": "Selecione o comportamento **Smooth Camera**.", - "th": "เลือกพฤติกรรม **Smooth Camera**" + "th": "เลือกพฤติกรรม **Smooth Camera**", + "ar": "تحديد السلوك **Smooth Camera**." } } }, @@ -330,7 +349,8 @@ "fr": "**Décochez** la case de l'axe Y (vertical), pour que la caméra suive le personnage uniquement horizontalement (axe X).", "es": "**Desactiva** la casilla del eje Y (vertical) para que la cámara siga el personaje solamente de manera horizontal (eje X).", "pt": "Desmarque** a caixa do eixo Y (vertical), para que a câmera siga o personagem apenas na horizontal (eixo X).", - "th": "ทำให้กล้องติดตามเฉพาะแกน X (แนวนอน) เท่านั้น โดย **เอาเครื่องหมายเช็คออก** จาก checkbox นี้" + "th": "ทำให้กล้องติดตามเฉพาะแกน X (แนวนอน) เท่านั้น โดย **เอาเครื่องหมายเช็คออก** จาก checkbox นี้", + "ar": "**إلغاء تحديد** خيار الـ Y axis (العمودية)، لجعل الكاميرا تتتبع الشخصية أفقيًا فقط (X axis)." } } }, @@ -348,7 +368,8 @@ "fr": "C'est tout ! La caméra va **suivre notre joueur horizontalement** !", "es": "¡Eso es todo! ¡Ahora la cámara **seguirá a nuestro jugador unicamente de manera horizontal**!", "pt": "É isso aí! Agora a câmera **seguirá nosso jogador unicamente de jeito horizontal**!", - "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!" + "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!", + "ar": "هذا كل شيء، الآن ستقوم الكاميرا بـ**متابعة الشخصية أفقيًا فقط**!" } } } @@ -365,7 +386,8 @@ "fr": "Ensuite, nous allons ajouter le background, ouvrez le panneau des **calques**.", "es": "A continuación, agregaremos el fondo. Abre el panel de **Capas**.", "pt": "Em seguida, vamos adicionar o fundo. Abra o painel de **Camadas**.", - "th": "ต่อไปเราจะเพิ่มพื้นหลัง เปิดแผงควบคุม **Layers**" + "th": "ต่อไปเราจะเพิ่มพื้นหลัง เปิดแผงควบคุม **Layers**", + "ar": "وفي المرحلة الثانية سنقوم بإضافة الخلفية، فتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -384,7 +406,8 @@ "fr": "Créons un **nouveau calque** pour notre fond.", "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", "pt": "Vamos **adicionar uma nova camada** para nosso fundo.", - "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง" + "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง", + "ar": "لنقم بـ**إضافة طبقة** لخلفيتنا." } }, "placement": "top" @@ -402,7 +425,8 @@ "fr": "Changez le nom du calque pour **Background**.", "es": "Cambia el nombre de la capa por **Background**.", "pt": "Mude o nome da camada para **Background**.", - "th": "เปลี่ยนชื่อเป็น **Background**" + "th": "เปลี่ยนชื่อเป็น **Background**", + "ar": "تغيير اسم الطبقة إلى **Background**." } }, "placement": "top" @@ -420,7 +444,8 @@ "fr": "Sélectionnez maintenant le **calque** Background afin que nous puissions commencer à y ajouter des objets.", "es": "Ahora selecciona la **capa** Background para que podamos empezar a agregarle objetos.", "pt": "Agora selecione a **camada** Background para que possamos começar a adicionar objetos a ela.", - "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" + "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", + "ar": "والآن تحديد هذه **الطبقة** حتى نتمكن من بدء إضافة كائنات فيه." } }, "placement": "top" @@ -438,7 +463,8 @@ "fr": "Assurons-nous maintenant que l'arrière-plan apparaîtra derrière le personnage. **Faites glisser** ce calque d'arrière-plan **sous** Couche de base.\n\nGlissez le curseur **en dessous de Calque de base**", "es": "Ahora asegurémonos de que la decoración del fondo aparezca detrás del jugador. **Arrastra** esta capa de fondo **debajo** de la capa base.\n\nUsa este control para **arrastrarla debajo de la capa base**", "pt": "Agora vamos nos certificar de que a decoração do fundo aparecerá atrás do jogador. **Arraste** esta camada de fundo **abaixo** da camada base.\n\nUse este controle para **arrastá-la abaixo da camada base**", - "th": "ตรวจสอบว่าพื้นหลังจะแสดงอยู่หลังจากผู้เล่น ลากเลเยอร์นี้ไป **ล่างสุด** ของเลเยอร์เริ่มต้น" + "th": "ตรวจสอบว่าพื้นหลังจะแสดงอยู่หลังจากผู้เล่น ลากเลเยอร์นี้ไป **ล่างสุด** ของเลเยอร์เริ่มต้น", + "ar": "والآن لنتأكد من أن الخلفية ستظهر خلف الشخصية. **سحب** هذه الطبقة إلى **أسفل** الطبقة الأساسية. \n\n استخدام هذا المقبض **لسحبها أسفل الطبقة الأساسية**." } }, "placement": "top" @@ -456,7 +482,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -475,7 +502,8 @@ "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le faisant glisser au centre.", "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego arrastrándolo al centro.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro.", - "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง" + "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง", + "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز." } }, "touchDescription": { @@ -484,7 +512,8 @@ "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le **sélectionnant** puis en le faisant glisser au centre.", "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego **seleccionándolo** y luego arrastrándolo al centro.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, **selecionando** e depois arrastando-o para o centro.", - "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดย **เลือก** แล้ว **ลาก** มันไปวางตรงกลาง" + "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดย **เลือก** แล้ว **ลาก** มันไปวางตรงกลาง", + "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز." } }, "placement": "top" @@ -498,7 +527,8 @@ "fr": "J'ai terminé", "es": "Ya terminé", "pt": "Terminei", - "th": "ฉันทำเสร็จแล้ว" + "th": "ฉันทำเสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -510,7 +540,8 @@ "fr": "Vous voyez le **cadre rectangulaire noir** au milieu de la scène ? C'est la **vue de la caméra**. Il encadre la partie du jeu que le joueur verra.\n\nRedimensionnez l'objet **$(farBackground)** afin qu'il couvre toute la vue de la caméra.", "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.", "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.", - "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด" + "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", + "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." } }, "placement": "top", @@ -531,7 +562,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -550,7 +582,8 @@ "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! Glissez **$(midBackground)** depuis le menu vers la scène.", "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! Arrastre **$(midBackground)** desde el menú a la escena.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena.", - "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene" + "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene", + "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة." } }, "touchDescription": { @@ -559,7 +592,8 @@ "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! **Sélectionnez**, puis **glissez** **$(midBackground)** depuis le menu vers la scène.", "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! **Seleccione**, luego **arrastre** **$(midBackground)** desde el menú a la escena.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! **Selecione**, em seguida, **arraste** **$(midBackground)** do menu para a cena.", - "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! **เลือก** แล้ว **ลาก** **$(midBackground)** จากเมนูไปยัง scene" + "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! **เลือก** แล้ว **ลาก** **$(midBackground)** จากเมนูไปยัง scene", + "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة." } }, "placement": "top" @@ -585,7 +619,9 @@ "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le rectangle noir.", "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.", "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.", - "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด" + "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", + "ar": "نفس الشيء مع الكائن $(farBackground)، إعادة ضبط حجم الـ **$(midBackground)** لتغطي المستطيل الأسود بالكامل." + } }, "placement": "top", @@ -606,7 +642,8 @@ "fr": "Maintenant, faisons en sorte que ces **fonds se déplacent** ! Ouvrons la **feuille d'événements** de la scène $(cameraScene).", "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de tu escena $(cameraScene).", "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** de tua cena $(cameraScene).", - "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)" + "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)", + "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! دعنا **نفتح صفحة أحداث** المشهد $(cameraScene)>" } }, "placement": "bottom" @@ -625,7 +662,8 @@ "fr": "**Ajoutons une action** pour faire bouger le premier fond.", "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover.", - "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่" + "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่", + "ar": "دعنا نقوم بـ**إضافة إجراء** لجعل الخلفية الأولى تتحرك." } } } @@ -642,7 +680,8 @@ "fr": "Sélectionnez **$(farBackground)**.", "es": "Seleccione **$(farBackground)**.", "pt": "Selecione **$(farBackground)**.", - "th": "เลือก **$(farBackground)**" + "th": "เลือก **$(farBackground)**", + "ar": "تحديد **$(farBackground)**." } } }, @@ -660,7 +699,8 @@ "fr": "Sélectionnez l'action **Décalage X de l'image**.", "es": "Seleccione la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", - "th": "เลือกการกระทำ **Image X ออฟเซ็ท**" + "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", + "ar": "تحديد الإجراء **Image X offset**." } } }, @@ -678,7 +718,8 @@ "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", - "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**" + "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", + "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -697,7 +738,8 @@ "fr": "Faisons bouger le fond lointain,\n\n La façon de le faire est de le faire bouger par rapport à la position de la caméra.\n\n Si le joueur se déplace, la caméra se déplace aussi, donc nous faisons en sorte que le fond suive le centre de la caméra horizontalement (X), mais **beaucoup plus lentement** pour donner un effet de profondeur.\n\n Tapez la formule `CameraCenterX()/8`.", "es": "Hagamos que el fondo lejano se mueva,\n\n La forma de hacerlo es hacer que se mueva en relación con la posición de la cámara.\n\n Si el jugador se mueve, la cámara también se mueve, por lo que hacemos que el fondo siga el centro de la cámara horizontalmente (X), pero **mucho más lento** para dar un efecto de profundidad.\n\n Escribe la fórmula `CameraCenterX()/8`.", "pt": "Vamos fazer o fundo distante se mover,\n\n A maneira como fazemos isso é fazendo com que ele se mova em relação à posição da câmera.\n\n Se o jogador se mover, a câmera também se move, então fazemos o fundo seguir o centro da câmera horizontalmente (X), mas **muito mais devagar** para dar um efeito de profundidade.\n\n Digite a fórmula `CameraCenterX()/8`.", - "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`" + "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`", + "ar": "دعنا نصنع الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى موضع الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، أدخل الصيغة `CameraCenterX()/8`." } }, "placement": "bottom" @@ -716,7 +758,8 @@ "fr": "Bien ! Enregistrons maintenant cela.", "es": "¡Bien! Ahora guardemos esto.", "pt": "Legal! Agora vamos salvar isso.", - "th": "ดีมาก! มาบันทึกกันเถอะ" + "th": "ดีมาก! มาบันทึกกันเถอะ", + "ar": "جميل! الآن دعنا نحفظ هذا." } }, "placement": "top" @@ -734,7 +777,8 @@ "fr": "Créons la même action pour **$(midBackground)** !", "es": "¡Creemos la misma acción para **$(midBackground)**!", "pt": "Vamos criar a mesma ação para **$(midBackground)**!", - "th": "สร้างการกระทำเหมือนเดิมสำหรับ **$(midBackground)**!" + "th": "สร้างการกระทำเหมือนเดิมสำหรับ **$(midBackground)**!", + "ar": "دعنا نقوم بنفس الشيء مع **$(midBackground)**!" } } } @@ -751,7 +795,8 @@ "fr": "Sélectionnez **$(midBackground)**.", "es": "Selecciona **$(midBackground)**.", "pt": "Selecione **$(midBackground)**.", - "th": "เลือก **$(midBackground)**" + "th": "เลือก **$(midBackground)**", + "ar": "تحديد **$(midBackground)**." } } }, @@ -769,7 +814,8 @@ "fr": "Sélectionnez l'action **Décalage X de l'image**.", "es": "Selecciona la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", - "th": "เลือกการกระทำ **Image X ออฟเซ็ท**" + "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", + "ar": "تحديد الإجراء **Image X offset**." } } }, @@ -787,7 +833,8 @@ "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", - "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**" + "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", + "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -806,7 +853,8 @@ "fr": "Cette fois, faisons en sorte que ce fond se déplace **plus vite**, pour donner l'effet qu'il est plus proche du joueur,\n\nalors faisons en sorte que le fond se déplace **3 fois plus lentement** que la caméra.\n\nEntrez `CameraCenterX()/3`.", "es": "Esta vez, hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\nasí que hagamos que el fondo se mueva **3 veces más lento** que la cámara.\n\nIngrese `CameraCenterX()/3`.", "pt": "Desta vez, vamos fazer com que este fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\nentão vamos fazer com que o fundo se mova **3 vezes mais devagar** que a câmera.\n\nDigite `CameraCenterX()/3`.", - "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`" + "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`", + "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n دعنا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`." } }, "placement": "bottom" @@ -825,7 +873,8 @@ "fr": "Bien ! Fermons cela.", "es": "¡Bien! Cerrémoslo.", "pt": "Legal! Vamos fechar isso.", - "th": "ดีมาก! มาปิดกันเถอะ" + "th": "ดีมาก! มาปิดกันเถอะ", + "ar": "جميل! لنغلق هذا." } }, "placement": "top" @@ -843,7 +892,8 @@ "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" + "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 4a6de37..9e194dd 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -10,7 +10,7 @@ "scene": "level" } }, - "availableLocales": ["en", "fr", "es", "pt", "th"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json", "initialProjectData": { "level": "Level", @@ -24,7 +24,8 @@ "fr": "# Vous avez terminé cette leçon !", "es": "# ¡Has terminado esta lección!", "pt": "# Você terminou esta lição!", - "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -33,7 +34,8 @@ "fr": "Bien joué, voici ce que vous avez appris :", "es": "¡Bien hecho! En este tutorial, has aprendido:", "pt": "Bom trabalho, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -42,7 +44,8 @@ "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué", "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab", "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab", - "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab" + "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab", + "ar": "- إنشاء طبقة\n\n- إضافة واستخدام عناصر كائنات جاهزة للاستخدام" } }, { @@ -51,7 +54,8 @@ "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", - "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -67,7 +71,8 @@ "fr": "C'est parti !", "es": "¡Vamos!", "pt": "Vamos lá!", - "th": "ไปกันเลย!" + "th": "ไปกันเลย!", + "ar": "لنبدأ!" } } }, @@ -79,7 +84,8 @@ "fr": "Ce jeu est un jeu de plateforme. Cliquez sur le bouton **Aperçu** pour y jouer.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.", "es": "Este juego es un plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.", "pt": "Este jogo é um plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.", - "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ" + "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ", + "ar": "هذه لعبة منصات. الضغط على زر **معاينة** للعب.\nيمكنك تحريك الشخصية بواسطة مفاتيح الأسهم، والقفز بواسطة مفتاح المسافة." } } } @@ -96,7 +102,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -116,7 +123,8 @@ "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste.", "es": "Agreguemos una barra de salud para que el jugador pueda ver cuánta salud le queda.", "pt": "Vamos adicionar uma barra de saúde para que o jogador veja quanto de sua saúde resta.", - "th": "เพิ่ม health bar ให้กับผู้เล่น เพื่อให้สามารถดูได้ว่าเหลือเลือดอยู่เท่าไร" + "th": "เพิ่ม health bar ให้กับผู้เล่น เพื่อให้สามารถดูได้ว่าเหลือเลือดอยู่เท่าไร", + "ar": "هيّا نظهر للاعبين كم تبقى من الصحة لديهم بواسطة شريط الصحة." } } } @@ -133,7 +141,8 @@ "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", - "th": "เลือก **วัตถุ prefab** จากร้านค้า asset" + "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", + "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" } }, "placement": "bottom" @@ -153,7 +162,8 @@ "fr": "Retournons à la page d'accueil du magasin.", "es": "Volvamos a la página de inicio de la tienda.", "pt": "Vamos voltar para a página inicial da loja.", - "th": "กลับไปยังหน้าโฮมเพจของร้านค้า" + "th": "กลับไปยังหน้าโฮมเพจของร้านค้า", + "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." } }, "placement": "bottom" @@ -174,7 +184,8 @@ "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", - "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" + "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." } } }, @@ -192,7 +203,8 @@ "fr": "Nous allons utiliser une barre de ressource. Elle peut être remplie ou vidée.", "es": "Vamos a usar una barra de recursos que se puede llenar o vaciar.", "pt": "Vamos usar uma barra de recursos que pode ser preenchida ou esvaziada.", - "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้" + "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้", + "ar": "سوف نستخدم شريط موارد يمكن أن يكون ممتلئًا أو فارغًا." } } }, @@ -210,7 +222,8 @@ "fr": "Choisissons la barre de coeurs.", "es": "Elegimos la barra de corazones.", "pt": "Vamos escolher a barra de corações.", - "th": "มาเลือก hearts bar กัน" + "th": "มาเลือก hearts bar กัน", + "ar": "دعنا نختار شريط القلوب." } } } @@ -230,7 +243,8 @@ "fr": "Ajoutons la à la scène.", "es": "Agreguemosla a la escena.", "pt": "Vamos adicioná-la à cena.", - "th": "เพิ่มลงไปใน scene" + "th": "เพิ่มลงไปใน scene", + "ar": "دعنا نقوم بإضافتها إلى المشهد." } }, "placement": "top" @@ -248,7 +262,8 @@ "fr": "Fermons le magasin de ressources", "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", - "th": "ปิดร้านค้า asset" + "th": "ปิดร้านค้า asset", + "ar": "دعنا نغلق متجر العناصر." } }, "placement": "top" @@ -266,7 +281,8 @@ "fr": "Ouvrez le panneau des **calques**.", "es": "Abre el panel de **Capas**.", "pt": "Abra o painel de **Camadas**.", - "th": "เปิดแผงควบคุม **เลเยอร์**" + "th": "เปิดแผงควบคุม **เลเยอร์**", + "ar": "فتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -285,7 +301,8 @@ "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU).", "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", - "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ" + "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ", + "ar": "سنبدأ بإنشاء طبقة لعناصر واجهة المستخدم." } }, "placement": "top" @@ -303,7 +320,8 @@ "fr": "Changeons son nom en **Interface**.", "es": "Cambiamos su nombre a **Interface**.", "pt": "Mudamos o nome para **Interface**.", - "th": "เปลี่ยนชื่อเป็น **Interface**" + "th": "เปลี่ยนชื่อเป็น **Interface**", + "ar": "تغيير الاسم إلى **Interface**." } }, "placement": "top" @@ -321,7 +339,8 @@ "fr": "Sélectionnons ce **calque** pour y placer $(resourceBar).", "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", - "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป" + "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป"", + "ar": "تحديد هذه **الطبقة** لنتمكن من وضع القلوب الخاصة بنا داخلها." } }, "placement": "top" @@ -339,7 +358,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -358,7 +378,8 @@ "fr": "Faites glisser **$(resourceBar)** du menu à la scène.", "es": "Arrastra **$(resourceBar)** desde el menú a la escena.", "pt": "Arraste **$(resourceBar)** do menu para a cena.", - "th": "ลาก **$(resourceBar)** ใส่ลงใน scene" + "th": "ลาก **$(resourceBar)** ใส่ลงใน scene", + "ar": "سحب الـ **$(resourceBar)** إلى المشهد." } }, "touchDescription": { @@ -367,7 +388,8 @@ "fr": "Sélectionnez **$(resourceBar)**, puis faites-le glisser à la scène.", "es": "Selecciona **$(resourceBar)**, luego arrástralo a la escena.", "pt": "Selecione **$(resourceBar)**, em seguida, arraste-o para a cena.", - "th": "เลือก **$(resourceBar)** แล้วลากมันเข้า scene" + "th": "เลือก **$(resourceBar)** แล้วลากมันเข้า scene", + "ar": "تحديد الـ **$(resourceBar)** ثم سحبه إلى المشهد." } } } @@ -380,7 +402,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -392,7 +415,8 @@ "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.", "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.", "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.", - "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง" + "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง", + "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nوضع الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." } }, "placement": "top", @@ -413,7 +437,8 @@ "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Cliquez sur l'onglet Évènements de la scène $(level) pour accéder à la **feuille d'événements**.", "es": "Ahora, conectemos la vida del **$(player)** con **$(resourceBar)**! Abramos la **hoja de eventos** de la escena $(level).", "pt": "Agora, vamos conectar a vida do **$(player)** com **$(resourceBar)**! Vamos **abrir a Folha de Eventos** da cena $(level).", - "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)" + "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)", + "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على تبويب الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level)." } }, "placement": "bottom" @@ -432,7 +457,8 @@ "fr": "**Ajoutons une action** pour changer le nombre de vies affichées par $(resourceBar).", "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", - "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)" + "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)", + "ar": "دعنا نقوم بـ**إضافة إجراء** لتعريف عدد المحاولات التي ستُعرض على $(resourceBar)." } } } @@ -449,7 +475,8 @@ "fr": "Sélectionnez **$(resourceBar)**.", "es": "Seleccione **$(resourceBar)**.", "pt": "Selecione **$(resourceBar)**.", - "th": "เลือก **$(resourceBar)**" + "th": "เลือก **$(resourceBar)**", + "ar": "تحديد **$(resourceBar)**." } } }, @@ -467,7 +494,8 @@ "fr": "Sélectionnez l'action **Value**.", "es": "Seleccione la acción **Value**.", "pt": "Selecione a ação **Value**.", - "th": "เลือกการกระทำ **Value**" + "th": "เลือกการกระทำ **Value**", + "ar": "تحديد الإجراء **Value**." } } }, @@ -485,7 +513,8 @@ "fr": "Nous voulons que la barre de vie représente la santé de $(player), donc sélectionnons **= (définir à)**.", "es": "Queremos que el valor de la barra de vida coincida con la salud de $(player), así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o valor da barra de vida corresponda à saúde de $(player), então vamos selecionar **= (definir como)**.", - "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**" + "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**", + "ar": "نريد أن يكون قيمة الشريط متصلًا بصحة الـ $(player)، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "top" @@ -504,7 +533,8 @@ "fr": "Trouvons où est stockée la santé de $(player).", "es": "Encontremos dónde está almacenada la salud de $(player).", "pt": "Vamos encontrar onde está armazenada a saúde de $(player).", - "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน" + "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน", + "ar": "والآن، دعنا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة." } }, "placement": "bottom" @@ -523,7 +553,8 @@ "fr": "L'**extension Health** (Santé) a été appliquée à $(player) pour stocker son nombre de vies. Cherchez **Health** pour utiliser cette valeur.", "es": "$(player) está configurado para usar la **extensión Health**. Busque **Health**.", "pt": "$(player) está configurado para usar a **extensão Health**. Procure por **Health**.", - "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**" + "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**", + "ar": "تم تطبيق الملحق **Health** على الـ $(player) لتخزين صحته. البحث عن **Health** لاستخدام تلك القيمة." } }, "placement": "top" @@ -542,7 +573,8 @@ "fr": "Sélectionnez **Health points**.", "es": "Seleccione **Health points**.", "pt": "Selecione **Health points**.", - "th": "เลือก **Health points**" + "th": "เลือก **Health points**", + "ar": "تحديد **Health points**." } }, "placement": "bottom" @@ -561,7 +593,8 @@ "fr": "Sélectionnez **$(player)**.", "es": "Seleccione **$(player)**.", "pt": "Selecione **$(player)**.", - "th": "เลือก **$(player)**" + "th": "เลือก **$(player)**", + "ar": "تحديد **$(player)**." } }, "placement": "top" @@ -580,7 +613,8 @@ "fr": "On est bon.", "es": "Estamos bien.", "pt": "Estamos bem.", - "th": "เรียบร้อยแล้ว" + "th": "เรียบร้อยแล้ว", + "ar": "نحن على الطريق الصحيح." } }, "placement": "top" @@ -599,7 +633,8 @@ "fr": "Tout est bien configuré.", "es": "Todo está bien configurado.", "pt": "Tudo está configurado.", - "th": "ทุกอย่างเรียบร้อยแล้ว" + "th": "ทุกอย่างเรียบร้อยแล้ว", + "ar": "تم ضبط كل شيء." } }, "placement": "top" @@ -617,7 +652,8 @@ "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index a1eb260..8b532ec 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -6,7 +6,7 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -20,7 +20,8 @@ "fr": "# Vous avez terminé cette leçon !", "es": "# ¡Has terminado esta lección!", "pt": "# Você terminou esta lição!", - "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -29,7 +30,8 @@ "fr": "Bien joué, voici ce que vous avez appris :", "es": "¡Bien hecho! En este tutorial, has aprendido:", "pt": "Bom trabalho, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -38,7 +40,8 @@ "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué\n\n- Comment utiliser un comportement", "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab\n\n- Cómo usar un comportamiento", "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab\n\n- Como usar um comportamento", - "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab\n\n- วิธีใช้งานพฤติกรรม" + "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab\n\n- วิธีใช้งานพฤติกรรม", + "ar": "- إنشاء طبقة\n\n- إضافة واستخدام عناصر كائنات جاهزة للاستخدام\n\n- استخدام سلوك" } }, { @@ -47,7 +50,8 @@ "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", - "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -63,7 +67,8 @@ "fr": "C'est parti !", "es": "¡Vamos!", "pt": "Vamos lá!", - "th": "ไปกันเลย!" + "th": "ไปกันเลย!", + "ar": "لنبدأ!" } } }, @@ -75,7 +80,8 @@ "fr": "Ce jeu est un jeu de tir dans l'espace en vue du dessus ! Clique sur le bouton **prévisualiser** pour jouer.\nTu peux déplacer le vaisseau avec les flèches du clavier, essaie d'éviter de toucher les rochers !", "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", "pt": "Este jogo é um jogo de tiro em espaço em vista superior! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", - "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!" + "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!", + "ar": "هذه لعبة إطلاق نار فضائية! الضغط على زر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!" } } } @@ -92,7 +98,8 @@ "fr": "Premièrement, ouvrons le panneau des **calques**.", "es": "Primero, abramos el panel de **Capas**.", "pt": "Primeiro, vamos abrir o painel de **Camadas**.", - "th": "เปิดแผงควบคุม **เลเยอร์**" + "th": "เปิดแผงควบคุม **เลเยอร์**", + "ar": "أولًا، دعنا نفتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -111,7 +118,8 @@ "fr": "Nous allons d'abord créer un calque qui contiendra l'interface utilisateur (IU).", "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", - "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ" + "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ", + "ar": "سنبدأ أولًا بإنشاء طبقة لعناصر واجهة المستخدم." } }, "placement": "top" @@ -129,7 +137,8 @@ "fr": "Changeons son nom en **Interface**.", "es": "Cambiamos su nombre a **Interface**.", "pt": "Mudamos o nome para **Interface**.", - "th": "เปลี่ยนชื่อเป็น **Interface**" + "th": "เปลี่ยนชื่อเป็น **Interface**", + "ar": "تغيير الاسم إلى **Interface**." } }, "placement": "top" @@ -147,7 +156,8 @@ "fr": "Sélectionnons ce **calque** pour y placer notre joystick.", "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", - "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น" + "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น", + "ar": "حدد هذه **الطبقة** لنتمكن من وضع عصا التحكم الخاصة بنا داخلها." } }, "placement": "top" @@ -165,7 +175,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -185,7 +196,8 @@ "fr": "Ce jeu ne peut être joué qu'avec un clavier, alors ajoutons un **joystick** pour pouvoir y jouer sur **mobile** !\n\nAllons dans le magasin de ressources pour trouver un joystick préfabriqué !", "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", - "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store" + "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store", + "ar": "هذه اللعبة يمكن أن تُلعب بواسطة لوحة المفاتيح فقط، لذلك دعنا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصرللعثور على عصا تحكم جاهزة للاستخدام!" } } } @@ -202,7 +214,8 @@ "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", - "th": "เลือก **วัตถุ prefab** จากร้านค้า asset" + "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", + "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" } }, "placement": "bottom" @@ -222,7 +235,8 @@ "fr": "Retournons à la page d'accueil du magasin.", "es": "Volvamos a la página de inicio de la tienda.", "pt": "Vamos voltar para a página inicial da loja.", - "th": "กลับไปยังหน้าโฮมเพจของร้านค้า" + "th": "กลับไปยังหน้าโฮมเพจของร้านค้า", + "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." } }, "placement": "bottom" @@ -243,7 +257,8 @@ "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", - "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ" + "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." } } }, @@ -261,7 +276,8 @@ "fr": "Nous allons utiliser un joystick.", "es": "Vamos a usar un joystick.", "pt": "Vamos usar um joystick.", - "th": "เราจะใช้ joystick" + "th": "เราจะใช้ joystick", + "ar": "سوف نستخدم عصا تحكم." } } }, @@ -279,7 +295,8 @@ "fr": "Choisissons ce joystick blanc, il s'accordera bien avec notre fond.", "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", - "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง" + "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง", + "ar": "دعنا نختار هذه البيضاء، سوف يتناسب جيدًا مع خلفيتنا." } } } @@ -299,7 +316,8 @@ "fr": "Ajoutons le à la scène.", "es": "Agreguemoslo a la escena.", "pt": "Adicionemos-o à cena.", - "th": "เพิ่มวัตถุในฉาก" + "th": "เพิ่มวัตถุในฉาก", + "ar": "دعنا نقوم بإضافتها إلى المشهد." } }, "placement": "top" @@ -317,7 +335,8 @@ "fr": "Fermons le magasin de ressources", "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", - "th": "ปิดร้านค้า asset" + "th": "ปิดร้านค้า asset", + "ar": "دعنا نغلق متجر العناصر." } }, "placement": "top" @@ -335,7 +354,8 @@ "fr": "Faites glisser **$(joystick)** du menu à la scène.", "es": "Arrastra **$(joystick)** desde el menú a la escena.", "pt": "Arraste **$(joystick)** do menu para a cena.", - "th": "ลาก **$(joystick)** ใส่ลงใน scene" + "th": "ลาก **$(joystick)** ใส่ลงใน scene", + "ar": "سحب الـ **$(joystick)** إلى المشهد." } }, "touchDescription": { @@ -344,7 +364,8 @@ "fr": "Sélectionnez **$(joystick)**, puis faites-le glisser à la scène.", "es": "Selecciona **$(joystick)**, luego arrástralo a la escena.", "pt": "Selecione **$(joystick)**, em seguida, arraste-o para a cena.", - "th": "เลือก **$(joystick)** แล้วลากมันเข้า scene" + "th": "เลือก **$(joystick)** แล้วลากมันเข้า scene", + "ar": "تحديد الـ **$(joystick)** ثم سحبه إلى المشهد." } } } @@ -357,7 +378,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -369,7 +391,8 @@ "fr": "Placez le $(joystick) en dessous du vaisseau à l'écran, de façon à ce que le joueur puisse utiliser son pouce pour le contrôler facilement.", "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", - "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง" + "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", + "ar": "وضع الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." } }, "placement": "top", @@ -391,7 +414,8 @@ "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\ncliquez sur le menu à 3 points, ou faites un clic droit sur **$(ship)**, et sélectionnez **Modifier les comportements**.", "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", - "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**" + "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", + "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط, أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { @@ -400,7 +424,8 @@ "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\nSélectionnez, puis appuyez longuement sur **$(ship)**, puis sélectionnez **Modifier les comportements**.", "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", - "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**" + "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**", + "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } } } @@ -417,7 +442,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." } }, "placement": "bottom" @@ -437,7 +463,8 @@ "fr": "Ajoutons le comportement **Top down multi-touch controller mapper** qui a été installé.", "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", - "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้" + "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้", + "ar": "دعنا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته." } } }, @@ -455,7 +482,8 @@ "fr": "Sélectionnez le comportement **Top down multi-touch controller mapper**.", "es": "Selecciona el comportamiento **Top down multi-touch controller mapper**.", "pt": "Selecione o comportamento **Top down multi-touch controller mapper**.", - "th": "เลือกพฤติกรรม **Top down multi-touch controller mapper**" + "th": "เลือกพฤติกรรม **Top down multi-touch controller mapper**", + "ar": "تحديد السلوك **Top down multi-touch controller mapper**." } } }, @@ -473,7 +501,8 @@ "fr": "Changeons le mode de la manette, pour qu'elle puisse être contrôlée à **360°**.", "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", - "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**" + "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**", + "ar": "دعنا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**" } } }, @@ -491,7 +520,8 @@ "fr": "C'est tout ! Maintenant, la manette contrôlera le vaisseau !", "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", "pt": "É isso aí! Agora o joystick controlará o navio!", - "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!" + "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!", + "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!" } } } @@ -508,7 +538,8 @@ "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" From 90d97519f8658a4808ea3810d876855478533458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Vivet?= Date: Wed, 24 May 2023 22:39:52 +0200 Subject: [PATCH 067/208] Remove extra spaces --- tutorials/in-app/cameraParallax.json | 22 +++++++++++----------- tutorials/in-app/healthBar.json | 14 +++++++------- tutorials/in-app/joystick.json | 14 +++++++------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index c9e2c19..4dfb5cf 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -47,7 +47,7 @@ "es": "- Cómo crear una capa\n\n- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades", "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่ม extension\n\n- วิธีควบคุมกล้อง\n\n- วิธีทำให้ Tiled Sprites เคลื่อนที่ด้วยค่าความเร็วต่างๆ", - "ar": "- إنشاء طبقة\n\n- إضافة ملحق\n\n- التحكم في الكاميرا\n\n- إنشاء كائنات مبلطة تتحرك بسرعات مختلفة" + "ar": "- إنشاء طبقة\n\n- إضافة ملحق\n\n- التحكم في الكاميرا\n\n- إنشاء كائنات مبلطة تتحرك بسرعات مختلفة" } }, { @@ -57,7 +57,7 @@ "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -77,7 +77,7 @@ "es": "¡Mejoremos este juego de plataforma siguiendo al personaje con la cámara!", "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!", "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ", - "ar": "دعنا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!" + "ar": "دعنا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!" } }, "description": { @@ -105,7 +105,7 @@ "es": "Abre la pestaña **Extensiones**.", "pt": "Abra a guia **Extensões**.", "th": "เปิด **แท็บ Extensions**", - "ar": "فتح تبويب **الملحقات**." + "ar": "فتح تبويب **الملحقات**." } } }, @@ -125,7 +125,7 @@ "es": "Abre la **tienda de extensiones**", "pt": "Abra a **loja de extensões**", "th": "เปิด **ร้านค้า extension**", - "ar": "فتح متجر الملحقات." + "ar": "فتح متجر الملحقات." } }, "placement": "top" @@ -145,7 +145,7 @@ "es": "Busca la extensión **smooth camera**.", "pt": "Procure pela extensão **smooth camera**.", "th": "ค้นหา extension **smooth camera**", - "ar": "البحث عن الملحق **smooth camera*.*" + "ar": "البحث عن الملحق **smooth camera*.*" } } }, @@ -165,7 +165,7 @@ "es": "Haz clic en la extensión **Smooth Camera**.", "pt": "Clique na extensão **Smooth Camera**.", "th": "คลิกที่ extension **Smooth Camera**", - "ar": "الضغط على الملحق **smooth camera*.*" + "ar": "الضغط على الملحق **smooth camera*.*" } } }, @@ -184,7 +184,7 @@ "es": "Instala la extensión en tu proyecto.", "pt": "Instale a extensão no seu projeto.", "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ", - "ar": "تثبيت الملحق في مشروعك." + "ar": "تثبيت الملحق في مشروعك." } }, "placement": "top" @@ -204,7 +204,7 @@ "es": "Cerramos esta ventana.", "pt": "Vamos fechar esta janela.", "th": "ปิดหน้าต่างนี้", - "ar": "دعنا نغلق هذا." + "ar": "دعنا نغلق هذا." } } }, @@ -223,7 +223,7 @@ "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", "th": "ปิดเมนู", - "ar": "دعنا نغلق هذه القائمة." + "ar": "دعنا نغلق هذه القائمة." } } }, @@ -263,7 +263,7 @@ "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **($player)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **($player)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 9e194dd..2cce47d 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -321,7 +321,7 @@ "es": "Cambiamos su nombre a **Interface**.", "pt": "Mudamos o nome para **Interface**.", "th": "เปลี่ยนชื่อเป็น **Interface**", - "ar": "تغيير الاسم إلى **Interface**." + "ar": "تغيير الاسم إلى **Interface**." } }, "placement": "top" @@ -339,8 +339,8 @@ "fr": "Sélectionnons ce **calque** pour y placer $(resourceBar).", "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", - "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป"", - "ar": "تحديد هذه **الطبقة** لنتمكن من وضع القلوب الخاصة بنا داخلها." + "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", + "ar": "تحديد هذه **الطبقة** لنتمكن من وضع القلوب الخاصة بنا داخلها." } }, "placement": "top" @@ -359,7 +359,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -379,7 +379,7 @@ "es": "Arrastra **$(resourceBar)** desde el menú a la escena.", "pt": "Arraste **$(resourceBar)** do menu para a cena.", "th": "ลาก **$(resourceBar)** ใส่ลงใน scene", - "ar": "سحب الـ **$(resourceBar)** إلى المشهد." + "ar": "سحب الـ **$(resourceBar)** إلى المشهد." } }, "touchDescription": { @@ -389,7 +389,7 @@ "es": "Selecciona **$(resourceBar)**, luego arrástralo a la escena.", "pt": "Selecione **$(resourceBar)**, em seguida, arraste-o para a cena.", "th": "เลือก **$(resourceBar)** แล้วลากมันเข้า scene", - "ar": "تحديد الـ **$(resourceBar)** ثم سحبه إلى المشهد." + "ar": "تحديد الـ **$(resourceBar)** ثم سحبه إلى المشهد." } } } @@ -403,7 +403,7 @@ "es": "He terminado", "pt": "Terminei", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "ar": "انتهيت" } } }, diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 8b532ec..3eea54b 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -425,7 +425,7 @@ "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } } } @@ -443,7 +443,7 @@ "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." + "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." } }, "placement": "bottom" @@ -464,7 +464,7 @@ "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้", - "ar": "دعنا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته." + "ar": "دعنا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته." } } }, @@ -483,7 +483,7 @@ "es": "Selecciona el comportamiento **Top down multi-touch controller mapper**.", "pt": "Selecione o comportamento **Top down multi-touch controller mapper**.", "th": "เลือกพฤติกรรม **Top down multi-touch controller mapper**", - "ar": "تحديد السلوك **Top down multi-touch controller mapper**." + "ar": "تحديد السلوك **Top down multi-touch controller mapper**." } } }, @@ -502,7 +502,7 @@ "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**", - "ar": "دعنا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**" + "ar": "دعنا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**" } } }, @@ -521,7 +521,7 @@ "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", "pt": "É isso aí! Agora o joystick controlará o navio!", "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!", - "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!" + "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!" } } } @@ -539,7 +539,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" From d29c35a7a7881caafccb59c8f58d4d32f49f2235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Vivet?= Date: Wed, 24 May 2023 22:51:49 +0200 Subject: [PATCH 068/208] Fix extra spaces --- tutorials/in-app/cameraParallax.json | 77 ++++++++++++++-------------- tutorials/in-app/healthBar.json | 48 ++++++++--------- tutorials/in-app/joystick.json | 36 ++++++------- 3 files changed, 80 insertions(+), 81 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 4dfb5cf..a049ef5 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -87,7 +87,7 @@ "es": "Para esto, instalaremos una **extensión**.\n\nAbre el **Administrador de proyectos**.", "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**", - "ar": "لفعل هذا، سوف نثبت **ملحقًا**.\n\nفتح **مدير المشروع**." + "ar": "لفعل هذا، سوف نثبت **ملحقًا**.\n\nفتح **مدير المشروع**." } } } @@ -145,7 +145,7 @@ "es": "Busca la extensión **smooth camera**.", "pt": "Procure pela extensão **smooth camera**.", "th": "ค้นหา extension **smooth camera**", - "ar": "البحث عن الملحق **smooth camera*.*" + "ar": "البحث عن الملحق **smooth camera**." } } }, @@ -165,7 +165,7 @@ "es": "Haz clic en la extensión **Smooth Camera**.", "pt": "Clique na extensão **Smooth Camera**.", "th": "คลิกที่ extension **Smooth Camera**", - "ar": "الضغط على الملحق **smooth camera*.*" + "ar": "الضغط على الملحق **smooth camera**." } } }, @@ -242,7 +242,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -273,7 +273,7 @@ "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nSelecciona y pulsa largo **$(player)** y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nSelecione e pressione por um longo tempo **$(player)** e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **($player)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **($player)** وتحديد **تحرير السلوكيات**." } } } @@ -291,7 +291,7 @@ "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." + "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." } }, "placement": "bottom" @@ -312,7 +312,7 @@ "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar.", "th": "เพิ่มพฤติกรรม **Smooth Camera** ที่เพิ่งได้ติดตั้ง", - "ar": "دعنا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو." + "ar": "دعنا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو." } } }, @@ -331,7 +331,7 @@ "es": "Selecciona el comportamiento **Smooth Camera**.", "pt": "Selecione o comportamento **Smooth Camera**.", "th": "เลือกพฤติกรรม **Smooth Camera**", - "ar": "تحديد السلوك **Smooth Camera**." + "ar": "تحديد السلوك **Smooth Camera**." } } }, @@ -350,7 +350,7 @@ "es": "**Desactiva** la casilla del eje Y (vertical) para que la cámara siga el personaje solamente de manera horizontal (eje X).", "pt": "Desmarque** a caixa do eixo Y (vertical), para que a câmera siga o personagem apenas na horizontal (eixo X).", "th": "ทำให้กล้องติดตามเฉพาะแกน X (แนวนอน) เท่านั้น โดย **เอาเครื่องหมายเช็คออก** จาก checkbox นี้", - "ar": "**إلغاء تحديد** خيار الـ Y axis (العمودية)، لجعل الكاميرا تتتبع الشخصية أفقيًا فقط (X axis)." + "ar": "**إلغاء تحديد** خيار الـ Y axis (العمودية)، لجعل الكاميرا تتتبع الشخصية أفقيًا فقط (X axis)." } } }, @@ -369,7 +369,7 @@ "es": "¡Eso es todo! ¡Ahora la cámara **seguirá a nuestro jugador unicamente de manera horizontal**!", "pt": "É isso aí! Agora a câmera **seguirá nosso jogador unicamente de jeito horizontal**!", "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!", - "ar": "هذا كل شيء، الآن ستقوم الكاميرا بـ**متابعة الشخصية أفقيًا فقط**!" + "ar": "هذا كل شيء، الآن ستقوم الكاميرا بـ**متابعة الشخصية أفقيًا فقط**!" } } } @@ -387,7 +387,7 @@ "es": "A continuación, agregaremos el fondo. Abre el panel de **Capas**.", "pt": "Em seguida, vamos adicionar o fundo. Abra o painel de **Camadas**.", "th": "ต่อไปเราจะเพิ่มพื้นหลัง เปิดแผงควบคุม **Layers**", - "ar": "وفي المرحلة الثانية سنقوم بإضافة الخلفية، فتح لوحة **الطبقات**." + "ar": "وفي المرحلة الثانية سنقوم بإضافة الخلفية، فتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -407,7 +407,7 @@ "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", "pt": "Vamos **adicionar uma nova camada** para nosso fundo.", "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง", - "ar": "لنقم بـ**إضافة طبقة** لخلفيتنا." + "ar": "لنقم بـ**إضافة طبقة** لخلفيتنا." } }, "placement": "top" @@ -426,7 +426,7 @@ "es": "Cambia el nombre de la capa por **Background**.", "pt": "Mude o nome da camada para **Background**.", "th": "เปลี่ยนชื่อเป็น **Background**", - "ar": "تغيير اسم الطبقة إلى **Background**." + "ar": "تغيير اسم الطبقة إلى **Background**." } }, "placement": "top" @@ -445,7 +445,7 @@ "es": "Ahora selecciona la **capa** Background para que podamos empezar a agregarle objetos.", "pt": "Agora selecione a **camada** Background para que possamos começar a adicionar objetos a ela.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", - "ar": "والآن تحديد هذه **الطبقة** حتى نتمكن من بدء إضافة كائنات فيه." + "ar": "والآن تحديد هذه **الطبقة** حتى نتمكن من بدء إضافة كائنات فيه." } }, "placement": "top" @@ -464,7 +464,7 @@ "es": "Ahora asegurémonos de que la decoración del fondo aparezca detrás del jugador. **Arrastra** esta capa de fondo **debajo** de la capa base.\n\nUsa este control para **arrastrarla debajo de la capa base**", "pt": "Agora vamos nos certificar de que a decoração do fundo aparecerá atrás do jogador. **Arraste** esta camada de fundo **abaixo** da camada base.\n\nUse este controle para **arrastá-la abaixo da camada base**", "th": "ตรวจสอบว่าพื้นหลังจะแสดงอยู่หลังจากผู้เล่น ลากเลเยอร์นี้ไป **ล่างสุด** ของเลเยอร์เริ่มต้น", - "ar": "والآن لنتأكد من أن الخلفية ستظهر خلف الشخصية. **سحب** هذه الطبقة إلى **أسفل** الطبقة الأساسية. \n\n استخدام هذا المقبض **لسحبها أسفل الطبقة الأساسية**." + "ar": "والآن لنتأكد من أن الخلفية ستظهر خلف الشخصية. **سحب** هذه الطبقة إلى **أسفل** الطبقة الأساسية. \n\n استخدام هذا المقبض **لسحبها أسفل الطبقة الأساسية**." } }, "placement": "top" @@ -483,7 +483,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -503,7 +503,7 @@ "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego arrastrándolo al centro.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro.", "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง", - "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز." + "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز." } }, "touchDescription": { @@ -513,7 +513,7 @@ "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego **seleccionándolo** y luego arrastrándolo al centro.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, **selecionando** e depois arrastando-o para o centro.", "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดย **เลือก** แล้ว **ลาก** มันไปวางตรงกลาง", - "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز." + "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز." } }, "placement": "top" @@ -528,7 +528,7 @@ "es": "Ya terminé", "pt": "Terminei", "th": "ฉันทำเสร็จแล้ว", - "ar": "انتهيت" + "ar": "انتهيت" } } }, @@ -541,7 +541,7 @@ "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.", "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", - "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." + "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." } }, "placement": "top", @@ -563,7 +563,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -583,7 +583,7 @@ "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! Arrastre **$(midBackground)** desde el menú a la escena.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena.", "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene", - "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة." + "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة." } }, "touchDescription": { @@ -593,7 +593,7 @@ "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! **Seleccione**, luego **arrastre** **$(midBackground)** desde el menú a la escena.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! **Selecione**, em seguida, **arraste** **$(midBackground)** do menu para a cena.", "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! **เลือก** แล้ว **ลาก** **$(midBackground)** จากเมนูไปยัง scene", - "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة." + "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة." } }, "placement": "top" @@ -620,8 +620,7 @@ "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.", "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.", "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", - "ar": "نفس الشيء مع الكائن $(farBackground)، إعادة ضبط حجم الـ **$(midBackground)** لتغطي المستطيل الأسود بالكامل." - + "ar": "نفس الشيء مع الكائن $(farBackground)، إعادة ضبط حجم الـ **$(midBackground)** لتغطي المستطيل الأسود بالكامل." } }, "placement": "top", @@ -643,7 +642,7 @@ "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de tu escena $(cameraScene).", "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** de tua cena $(cameraScene).", "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)", - "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! دعنا **نفتح صفحة أحداث** المشهد $(cameraScene)>" + "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! دعنا **نفتح صفحة أحداث** المشهد $(cameraScene)." } }, "placement": "bottom" @@ -663,7 +662,7 @@ "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover.", "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่", - "ar": "دعنا نقوم بـ**إضافة إجراء** لجعل الخلفية الأولى تتحرك." + "ar": "دعنا نقوم بـ**إضافة إجراء** لجعل الخلفية الأولى تتحرك." } } } @@ -681,7 +680,7 @@ "es": "Seleccione **$(farBackground)**.", "pt": "Selecione **$(farBackground)**.", "th": "เลือก **$(farBackground)**", - "ar": "تحديد **$(farBackground)**." + "ar": "تحديد **$(farBackground)**." } } }, @@ -700,7 +699,7 @@ "es": "Seleccione la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", - "ar": "تحديد الإجراء **Image X offset**." + "ar": "تحديد الإجراء **Image X offset**." } } }, @@ -719,7 +718,7 @@ "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -739,7 +738,7 @@ "es": "Hagamos que el fondo lejano se mueva,\n\n La forma de hacerlo es hacer que se mueva en relación con la posición de la cámara.\n\n Si el jugador se mueve, la cámara también se mueve, por lo que hacemos que el fondo siga el centro de la cámara horizontalmente (X), pero **mucho más lento** para dar un efecto de profundidad.\n\n Escribe la fórmula `CameraCenterX()/8`.", "pt": "Vamos fazer o fundo distante se mover,\n\n A maneira como fazemos isso é fazendo com que ele se mova em relação à posição da câmera.\n\n Se o jogador se mover, a câmera também se move, então fazemos o fundo seguir o centro da câmera horizontalmente (X), mas **muito mais devagar** para dar um efeito de profundidade.\n\n Digite a fórmula `CameraCenterX()/8`.", "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`", - "ar": "دعنا نصنع الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى موضع الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، أدخل الصيغة `CameraCenterX()/8`." + "ar": "دعنا نصنع الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى موضع الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، أدخل الصيغة `CameraCenterX()/8`." } }, "placement": "bottom" @@ -759,7 +758,7 @@ "es": "¡Bien! Ahora guardemos esto.", "pt": "Legal! Agora vamos salvar isso.", "th": "ดีมาก! มาบันทึกกันเถอะ", - "ar": "جميل! الآن دعنا نحفظ هذا." + "ar": "جميل! الآن دعنا نحفظ هذا." } }, "placement": "top" @@ -778,7 +777,7 @@ "es": "¡Creemos la misma acción para **$(midBackground)**!", "pt": "Vamos criar a mesma ação para **$(midBackground)**!", "th": "สร้างการกระทำเหมือนเดิมสำหรับ **$(midBackground)**!", - "ar": "دعنا نقوم بنفس الشيء مع **$(midBackground)**!" + "ar": "دعنا نقوم بنفس الشيء مع **$(midBackground)**!" } } } @@ -796,7 +795,7 @@ "es": "Selecciona **$(midBackground)**.", "pt": "Selecione **$(midBackground)**.", "th": "เลือก **$(midBackground)**", - "ar": "تحديد **$(midBackground)**." + "ar": "تحديد **$(midBackground)**." } } }, @@ -815,7 +814,7 @@ "es": "Selecciona la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", - "ar": "تحديد الإجراء **Image X offset**." + "ar": "تحديد الإجراء **Image X offset**." } } }, @@ -834,7 +833,7 @@ "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -854,7 +853,7 @@ "es": "Esta vez, hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\nasí que hagamos que el fondo se mueva **3 veces más lento** que la cámara.\n\nIngrese `CameraCenterX()/3`.", "pt": "Desta vez, vamos fazer com que este fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\nentão vamos fazer com que o fundo se mova **3 vezes mais devagar** que a câmera.\n\nDigite `CameraCenterX()/3`.", "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`", - "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n دعنا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`." + "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n دعنا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`." } }, "placement": "bottom" @@ -874,7 +873,7 @@ "es": "¡Bien! Cerrémoslo.", "pt": "Legal! Vamos fechar isso.", "th": "ดีมาก! มาปิดกันเถอะ", - "ar": "جميل! لنغلق هذا." + "ar": "جميل! لنغلق هذا." } }, "placement": "top" @@ -893,7 +892,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 2cce47d..ceb9f6e 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -103,7 +103,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -124,7 +124,7 @@ "es": "Agreguemos una barra de salud para que el jugador pueda ver cuánta salud le queda.", "pt": "Vamos adicionar uma barra de saúde para que o jogador veja quanto de sua saúde resta.", "th": "เพิ่ม health bar ให้กับผู้เล่น เพื่อให้สามารถดูได้ว่าเหลือเลือดอยู่เท่าไร", - "ar": "هيّا نظهر للاعبين كم تبقى من الصحة لديهم بواسطة شريط الصحة." + "ar": "هيّا نظهر للاعبين كم تبقى من الصحة لديهم بواسطة شريط الصحة." } } } @@ -142,7 +142,7 @@ "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", - "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" + "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" } }, "placement": "bottom" @@ -163,7 +163,7 @@ "es": "Volvamos a la página de inicio de la tienda.", "pt": "Vamos voltar para a página inicial da loja.", "th": "กลับไปยังหน้าโฮมเพจของร้านค้า", - "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." + "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." } }, "placement": "bottom" @@ -185,7 +185,7 @@ "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", - "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." } } }, @@ -204,7 +204,7 @@ "es": "Vamos a usar una barra de recursos que se puede llenar o vaciar.", "pt": "Vamos usar uma barra de recursos que pode ser preenchida ou esvaziada.", "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้", - "ar": "سوف نستخدم شريط موارد يمكن أن يكون ممتلئًا أو فارغًا." + "ar": "سوف نستخدم شريط موارد يمكن أن يكون ممتلئًا أو فارغًا." } } }, @@ -223,7 +223,7 @@ "es": "Elegimos la barra de corazones.", "pt": "Vamos escolher a barra de corações.", "th": "มาเลือก hearts bar กัน", - "ar": "دعنا نختار شريط القلوب." + "ar": "دعنا نختار شريط القلوب." } } } @@ -244,7 +244,7 @@ "es": "Agreguemosla a la escena.", "pt": "Vamos adicioná-la à cena.", "th": "เพิ่มลงไปใน scene", - "ar": "دعنا نقوم بإضافتها إلى المشهد." + "ar": "دعنا نقوم بإضافتها إلى المشهد." } }, "placement": "top" @@ -263,7 +263,7 @@ "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", "th": "ปิดร้านค้า asset", - "ar": "دعنا نغلق متجر العناصر." + "ar": "دعنا نغلق متجر العناصر." } }, "placement": "top" @@ -282,7 +282,7 @@ "es": "Abre el panel de **Capas**.", "pt": "Abra o painel de **Camadas**.", "th": "เปิดแผงควบคุม **เลเยอร์**", - "ar": "فتح لوحة **الطبقات**." + "ar": "فتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -302,7 +302,7 @@ "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ", - "ar": "سنبدأ بإنشاء طبقة لعناصر واجهة المستخدم." + "ar": "سنبدأ بإنشاء طبقة لعناصر واجهة المستخدم." } }, "placement": "top" @@ -416,7 +416,7 @@ "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.", "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง", - "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nوضع الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." + "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nوضع الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." } }, "placement": "top", @@ -438,7 +438,7 @@ "es": "Ahora, conectemos la vida del **$(player)** con **$(resourceBar)**! Abramos la **hoja de eventos** de la escena $(level).", "pt": "Agora, vamos conectar a vida do **$(player)** com **$(resourceBar)**! Vamos **abrir a Folha de Eventos** da cena $(level).", "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)", - "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على تبويب الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level)." + "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على تبويب الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level)." } }, "placement": "bottom" @@ -458,7 +458,7 @@ "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)", - "ar": "دعنا نقوم بـ**إضافة إجراء** لتعريف عدد المحاولات التي ستُعرض على $(resourceBar)." + "ar": "دعنا نقوم بـ**إضافة إجراء** لتعريف عدد المحاولات التي ستُعرض على $(resourceBar)." } } } @@ -476,7 +476,7 @@ "es": "Seleccione **$(resourceBar)**.", "pt": "Selecione **$(resourceBar)**.", "th": "เลือก **$(resourceBar)**", - "ar": "تحديد **$(resourceBar)**." + "ar": "تحديد **$(resourceBar)**." } } }, @@ -495,7 +495,7 @@ "es": "Seleccione la acción **Value**.", "pt": "Selecione a ação **Value**.", "th": "เลือกการกระทำ **Value**", - "ar": "تحديد الإجراء **Value**." + "ar": "تحديد الإجراء **Value**." } } }, @@ -514,7 +514,7 @@ "es": "Queremos que el valor de la barra de vida coincida con la salud de $(player), así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o valor da barra de vida corresponda à saúde de $(player), então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد أن يكون قيمة الشريط متصلًا بصحة الـ $(player)، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد أن يكون قيمة الشريط متصلًا بصحة الـ $(player)، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "top" @@ -534,7 +534,7 @@ "es": "Encontremos dónde está almacenada la salud de $(player).", "pt": "Vamos encontrar onde está armazenada a saúde de $(player).", "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน", - "ar": "والآن، دعنا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة." + "ar": "والآن، دعنا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة." } }, "placement": "bottom" @@ -554,7 +554,7 @@ "es": "$(player) está configurado para usar la **extensión Health**. Busque **Health**.", "pt": "$(player) está configurado para usar a **extensão Health**. Procure por **Health**.", "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**", - "ar": "تم تطبيق الملحق **Health** على الـ $(player) لتخزين صحته. البحث عن **Health** لاستخدام تلك القيمة." + "ar": "تم تطبيق الملحق **Health** على الـ $(player) لتخزين صحته. البحث عن **Health** لاستخدام تلك القيمة." } }, "placement": "top" @@ -574,7 +574,7 @@ "es": "Seleccione **Health points**.", "pt": "Selecione **Health points**.", "th": "เลือก **Health points**", - "ar": "تحديد **Health points**." + "ar": "تحديد **Health points**." } }, "placement": "bottom" @@ -594,7 +594,7 @@ "es": "Seleccione **$(player)**.", "pt": "Selecione **$(player)**.", "th": "เลือก **$(player)**", - "ar": "تحديد **$(player)**." + "ar": "تحديد **$(player)**." } }, "placement": "top" @@ -614,7 +614,7 @@ "es": "Estamos bien.", "pt": "Estamos bem.", "th": "เรียบร้อยแล้ว", - "ar": "نحن على الطريق الصحيح." + "ar": "نحن على الطريق الصحيح." } }, "placement": "top" @@ -634,7 +634,7 @@ "es": "Todo está bien configurado.", "pt": "Tudo está configurado.", "th": "ทุกอย่างเรียบร้อยแล้ว", - "ar": "تم ضبط كل شيء." + "ar": "تم ضبط كل شيء." } }, "placement": "top" @@ -653,7 +653,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 3eea54b..1208c2a 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -99,7 +99,7 @@ "es": "Primero, abramos el panel de **Capas**.", "pt": "Primeiro, vamos abrir o painel de **Camadas**.", "th": "เปิดแผงควบคุม **เลเยอร์**", - "ar": "أولًا، دعنا نفتح لوحة **الطبقات**." + "ar": "أولًا، دعنا نفتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -119,7 +119,7 @@ "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ", - "ar": "سنبدأ أولًا بإنشاء طبقة لعناصر واجهة المستخدم." + "ar": "سنبدأ أولًا بإنشاء طبقة لعناصر واجهة المستخدم." } }, "placement": "top" @@ -138,7 +138,7 @@ "es": "Cambiamos su nombre a **Interface**.", "pt": "Mudamos o nome para **Interface**.", "th": "เปลี่ยนชื่อเป็น **Interface**", - "ar": "تغيير الاسم إلى **Interface**." + "ar": "تغيير الاسم إلى **Interface**." } }, "placement": "top" @@ -157,7 +157,7 @@ "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น", - "ar": "حدد هذه **الطبقة** لنتمكن من وضع عصا التحكم الخاصة بنا داخلها." + "ar": "حدد هذه **الطبقة** لنتمكن من وضع عصا التحكم الخاصة بنا داخلها." } }, "placement": "top" @@ -176,7 +176,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -197,7 +197,7 @@ "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store", - "ar": "هذه اللعبة يمكن أن تُلعب بواسطة لوحة المفاتيح فقط، لذلك دعنا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصرللعثور على عصا تحكم جاهزة للاستخدام!" + "ar": "هذه اللعبة يمكن أن تُلعب بواسطة لوحة المفاتيح فقط، لذلك دعنا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصرللعثور على عصا تحكم جاهزة للاستخدام!" } } } @@ -215,7 +215,7 @@ "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", - "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" + "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" } }, "placement": "bottom" @@ -236,7 +236,7 @@ "es": "Volvamos a la página de inicio de la tienda.", "pt": "Vamos voltar para a página inicial da loja.", "th": "กลับไปยังหน้าโฮมเพจของร้านค้า", - "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." + "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." } }, "placement": "bottom" @@ -258,7 +258,7 @@ "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", - "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." } } }, @@ -277,7 +277,7 @@ "es": "Vamos a usar un joystick.", "pt": "Vamos usar um joystick.", "th": "เราจะใช้ joystick", - "ar": "سوف نستخدم عصا تحكم." + "ar": "سوف نستخدم عصا تحكم." } } }, @@ -296,7 +296,7 @@ "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง", - "ar": "دعنا نختار هذه البيضاء، سوف يتناسب جيدًا مع خلفيتنا." + "ar": "دعنا نختار هذه البيضاء، سوف يتناسب جيدًا مع خلفيتنا." } } } @@ -317,7 +317,7 @@ "es": "Agreguemoslo a la escena.", "pt": "Adicionemos-o à cena.", "th": "เพิ่มวัตถุในฉาก", - "ar": "دعنا نقوم بإضافتها إلى المشهد." + "ar": "دعنا نقوم بإضافتها إلى المشهد." } }, "placement": "top" @@ -336,7 +336,7 @@ "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", "th": "ปิดร้านค้า asset", - "ar": "دعنا نغلق متجر العناصر." + "ar": "دعنا نغلق متجر العناصر." } }, "placement": "top" @@ -355,7 +355,7 @@ "es": "Arrastra **$(joystick)** desde el menú a la escena.", "pt": "Arraste **$(joystick)** do menu para a cena.", "th": "ลาก **$(joystick)** ใส่ลงใน scene", - "ar": "سحب الـ **$(joystick)** إلى المشهد." + "ar": "سحب الـ **$(joystick)** إلى المشهد." } }, "touchDescription": { @@ -365,7 +365,7 @@ "es": "Selecciona **$(joystick)**, luego arrástralo a la escena.", "pt": "Selecione **$(joystick)**, em seguida, arraste-o para a cena.", "th": "เลือก **$(joystick)** แล้วลากมันเข้า scene", - "ar": "تحديد الـ **$(joystick)** ثم سحبه إلى المشهد." + "ar": "تحديد الـ **$(joystick)** ثم سحبه إلى المشهد." } } } @@ -379,7 +379,7 @@ "es": "He terminado", "pt": "Terminei", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "ar": "انتهيت" } } }, @@ -392,7 +392,7 @@ "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "وضع الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." + "ar": "وضع الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." } }, "placement": "top", @@ -415,7 +415,7 @@ "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط, أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط, أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { From f3906a01fb6882455fc8c09113aa7a7649df5a2d Mon Sep 17 00:00:00 2001 From: EyadMahm0ud <77191515+EyadMahm0ud@users.noreply.github.com> Date: Sun, 28 May 2023 23:16:22 +0300 Subject: [PATCH 069/208] Translating more for the new language: Arabic The Arabic language has been added to 2 more tutorials, the translations have been carefully reviewed, but in case I find something wrong, I will fix it --- tutorials/in-app/plinkoMultiplier.json | 214 ++++++++++++++++--------- tutorials/in-app/timer.json | 122 +++++++++----- 2 files changed, 223 insertions(+), 113 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index a8d7227..b6922ab 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -14,7 +14,7 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -31,7 +31,8 @@ "fr": "# Vous avez terminé d'ajouter un multiplicateur de score à votre jeu !", "es": "# ¡Has terminado de agregar un multiplicador de puntuación a tu juego!", "pt": "# Você terminou de adicionar um multiplicador de pontuação ao seu jogo!", - "th": "คุณได้เพิ่ม score multiplier ในเกมของคุณสำเร็จแล้ว!" + "th": "คุณได้เพิ่ม score multiplier ในเกมของคุณสำเร็จแล้ว!", + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -40,7 +41,8 @@ "fr": "Bien joué, dans ce tutoriel vous avez appris :", "es": "¡Bien hecho, en este tutorial aprendiste:", "pt": "Bem feito, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" + "th": "ทำได้ดีเยี่ยม สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -49,7 +51,8 @@ "fr": "- Comment créer une variable de scène\n\n- Comment mettre à jour une variable de scène\n\n- Comment utiliser une variable de scène dans une expression", "es": "- Cómo crear una variable de escena\n\n- Cómo actualizar una variable de escena\n\n- Cómo usar una variable de escena en una expresión", "pt": "- Como criar uma variável de cena\n\n- Como atualizar uma variável de cena\n\n- Como usar uma variável de cena em uma expressão", - "th": "- วิธีสร้างตัวแปรของ scene\n\n- วิธีอัพเดทตัวแปรของ scene\n\n- วิธีใช้ตัวแปรของ scene ใน expression" + "th": "- วิธีสร้างตัวแปรของ scene\n\n- วิธีอัพเดทตัวแปรของ scene\n\n- วิธีใช้ตัวแปรของ scene ใน expression", + "ar": "- إنشاء متغير مشهد\n\n- تحديث متغير المشهد\n\n- استخدام متغير المشهد كتعبير" } }, { @@ -58,7 +61,8 @@ "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier et le partager avec vos amis pour voir qui obtient le meilleur score !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo y compartirlo con tus amigos para ver quién obtiene la puntuación más alta!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo e compartilhá-lo com seus amigos para ver quem obtém a pontuação mais alta!", - "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่กับเพื่อนๆของคุณเลยก็ได้ แล้วมาดูกัน ใครจะทำคะแนนได้สูงที่สุด!" + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่กับเพื่อนๆของคุณเลยก็ได้ แล้วมาดูกัน ใครจะทำคะแนนได้สูงที่สุด!", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -77,7 +81,8 @@ "fr": "Ce jeu utilise un classement ! Connectons-nous **pour que nous puissions le configurer automatiquement !**\n\nVous pouvez ignorer cette étape si vous ne souhaitez pas utiliser de classement, en fermant la boîte de dialogue du classement.", "es": "¡Este juego usa una tabla de clasificación! ¡**Inicia sesión** para que podamos configurarlo automáticamente!\n\nPuedes omitir este paso si no quieres usar una tabla de clasificación, cerrando el cuadro de diálogo de la tabla de clasificación.", "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!\n\nVocê pode pular esta etapa se não quiser usar uma tabela de classificação, fechando a caixa de diálogo da tabela de classificação.", - "th": "เกมนี้ใช้ leaderboard! ให้เรา **เข้าสู่ระบบ** เพื่อที่จะตั้งค่า leaderboard ให้เราอัตโนมัติ!\n\nคุณสามารถข้ามขั้นตอนนี้ได้หากคุณไม่ต้องการใช้ leaderboard โดยการปิดกล่องโต้ตอบ leaderboard" + "th": "เกมนี้ใช้ leaderboard! ให้เรา **เข้าสู่ระบบ** เพื่อที่จะตั้งค่า leaderboard ให้เราอัตโนมัติ!\n\nคุณสามารถข้ามขั้นตอนนี้ได้หากคุณไม่ต้องการใช้ leaderboard โดยการปิดกล่องโต้ตอบ leaderboard", + "ar": "هذه اللعبة تستخدم لوحة صدارة! دعنا نقوم بـ**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا كنت لا ترغب في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة." } }, "placement": "top" @@ -96,7 +101,8 @@ "fr": "Tout d'abord, créons un **classement** car ce jeu en aura besoin. Vous avez de la chance, tout sera automatiquement configuré pour vous !", "es": "Primero, **creemos una tabla de clasificación** porque este juego la necesitará. ¡Tienes suerte, todo se configurará automáticamente para ti!", "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!", - "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!" + "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!", + "ar": "أولًا، دعنا نقوم بـ**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. أنت محظوظ، فكل شيء سيتم إعداده تلقائيًا لأجلك!" } }, "placement": "top" @@ -114,7 +120,8 @@ "fr": "Fermons le menu.", "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", - "th": "ปิดเมนู" + "th": "ปิดเมนู", + "ar": "دعنا نغلق القائمة." } } }, @@ -129,7 +136,8 @@ "fr": "C'est parti !", "es": "¡Vamos!", "pt": "Vamos lá!", - "th": "ไปกันเลย!" + "th": "ไปกันเลย!", + "ar": "لنبدأ!" } } }, @@ -141,7 +149,8 @@ "fr": "Ce jeu s'appelle Plinko! Cliquez sur le bouton **Aperçu** pour le tester et accumuler des points en fonction du nombre de piquets que vous frappez.", "es": "¡Este juego se llama Plinko!Haz clic en el botón **Vista previa** para probarlo y gana puntos dependiendo de cuántos clavos golpees.", "pt": "Este jogo se chama Plinko! Clique no botão **Visualizar** para testá-lo e ganhe pontos dependendo de quantos pinos você acerta.", - "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม" + "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม", + "ar": "هذه اللعبة تسمى Plinko! الضغط على زر **معاينة** لإختبارها وجمع النقاط حسب عدد العارضات التي تضرب." } } } @@ -158,7 +167,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -178,7 +188,8 @@ "fr": "Faites glisser 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", "es": "¡Arrastra 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", "pt": "Arraste 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", - "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต" + "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต", + "ar": "سحب 3 كائنات **$(multiplier)** إلى اللوحة ووضعها في مكان يمكن للكرة ضربها." } }, "touchDescription": { @@ -187,7 +198,8 @@ "fr": "**Sélectionnez** puis **faites glisser** 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", "es": "**Selecciona** y **arrastra** 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", "pt": "**Selecione** e **arraste** 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", - "th": "**เลือก** และ **ลาก** 3 ชิ้น **$(multiplier)** จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต" + "th": "**เลือก** และ **ลาก** 3 ชิ้น **$(multiplier)** จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต", + "ar": "**تحديد** و**سحب** 3 كائنات **$(multiplier)** إلى اللوحة ووضعها في مكان يمكن للكرة ضربها." } }, "placement": "top" @@ -205,7 +217,8 @@ "fr": "Une fois que vous avez terminé, placez un **$(scoreMultiplier)** juste en dessous du *Score* pour afficher le multiplicateur de points !", "es": "Una vez que hayas terminado, coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", "pt": "Uma vez que você terminou, coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", - "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!" + "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", + "ar": "بمجرد أن تنتهي، وضع **$(scoreMultiplier)* أسفل *Score* لعرض نقاط المضاعِفات!" } }, "touchDescription": { @@ -214,7 +227,8 @@ "fr": "Une fois que vous avez terminé, sélectionnez et placez un **$(scoreMultiplier)** juste en dessous du *Score* pour afficher le multiplicateur de points !", "es": "Una vez que hayas terminado, selecciona y coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", "pt": "Uma vez que você terminou, selecione e coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", - "th": "เมื่อทำเสร็จแล้ว ให้เลือกและใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!" + "th": "เมื่อทำเสร็จแล้ว ให้เลือกและใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", + "ar": "بمجرد أن تنتهي، تحديد ووضع **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" } }, "placement": "bottom" @@ -233,7 +247,8 @@ "fr": "Nous devons maintenant stocker le score quelque part. Créons une variable de scène ! Ouvrez le **Project Manager**", "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una variable de escena! Abre el **Project Manager**", "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**", - "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**" + "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**", + "ar": "نحتاج إلى تخزين النقاط في مكان ما، دعنا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**" } }, "placement": "bottom" @@ -259,7 +274,8 @@ "fr": "Faites un **clic droit** (ou appuyez sur le *bouton à trois points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", "es": "Haz **clic derecho** (o clic en el **botón de tres puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", "pt": "Clique com o **botão direito** (ou toque no *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", - "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**" + "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", + "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على ($gameScene) وتحديد **تحرير متغيرات المشهد**." } }, "touchDescription": { @@ -268,7 +284,8 @@ "fr": "Faites un **appui long** (ou utilisez le *bouton à 3 points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", "es": "Haz **pulsación larga** (o usa el **botón de 3 puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", "pt": "Pressione por **muito tempo** (ou use o *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", - "th": "**กดค้าง** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**" + "th": "**กดค้าง** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", + "ar": "الضغط على *الثلاث نقاط*، أو **ضغطة مطولة** على ($gameScene) وتحديد **تحرير متغيرات المشهد**." } }, "placement": "bottom" @@ -288,7 +305,8 @@ "fr": "Ajoutons notre première **variable** !", "es": "¡Agreguemos nuestra primera **variable**!", "pt": "Vamos adicionar nossa primeira **variável**!", - "th": "มาเพิ่ม **ตัวแปร** แรกของเรากันเถอะ!" + "th": "มาเพิ่ม **ตัวแปร** แรกของเรากันเถอะ!", + "ar": "دعنا نقوم بإضافة أول **متغير** لنا!" } } }, @@ -306,7 +324,8 @@ "fr": "Nommons cette variable `Multiplier`.", "es": "Nombramos esta variable `Multiplier`.", "pt": "Vamos nomear esta variável `Multiplier`.", - "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multiplier`" + "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multiplier`", + "ar": "دعنا نقوم بتسمية هذا المتغير `Multiplier`." } }, "placement": "bottom" @@ -325,7 +344,8 @@ "fr": "Changeons son type en **Nombre**.", "es": "Cambiamos su tipo a **Número**.", "pt": "Vamos mudar seu tipo para **Número**.", - "th": "เปลี่ยนประเภทเป็น **ตัวเลข**" + "th": "เปลี่ยนประเภทเป็น **ตัวเลข**", + "ar": "دعنا نقوم بتغيير النوع إلى **عدد**." } }, "placement": "bottom" @@ -344,7 +364,8 @@ "fr": "Et enfin, changeons sa valeur initiale en **1**.", "es": "Y finalmente, cambiemos su valor inicial a **1**.", "pt": "E finalmente, vamos mudar seu valor inicial para **1**.", - "th": "และสุดท้าย เปลี่ยนค่าเริ่มต้นเป็น **1**" + "th": "และสุดท้าย เปลี่ยนค่าเริ่มต้นเป็น **1**", + "ar": "وأخيرًا وليس آخرًا، دعنا نقوم بتغيير القيمة إلى **1**." } }, "placement": "bottom" @@ -363,7 +384,8 @@ "fr": "Et c'est tout ! Fermons cette boîte de dialogue.", "es": "¡Y listo! Cerramos esta ventana.", "pt": "E acabamos! Vamos fechar esta janela.", - "th": "เสร็จแล้ว! ปิดหน้าต่างได้เลย" + "th": "เสร็จแล้ว! ปิดหน้าต่างได้เลย", + "ar": "وها قد انتهينا! دعنا نغلق هذه." } } } @@ -380,7 +402,8 @@ "fr": "Fermons le menu.", "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", - "th": "ปิดเมนู" + "th": "ปิดเมนู", + "ar": "دعنا نغلق القائمة." } } }, @@ -398,7 +421,8 @@ "fr": "Maintenant, activons ces multiplicateurs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", "es": "Ahora activemos esos multiplicadores. Abre la **Hoja de eventos** de la escena $(gameScene).", "pt": "Agora vamos ativar esses multiplicadores. Vamos abra a **Folha de eventos** da cena $(gameScene).", - "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)" + "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)", + "ar": "الآن دعنا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene). " } }, "placement": "bottom" @@ -417,7 +441,8 @@ "fr": "Nous allons commencer par faire disparaître le $(multiplier) lorsqu'il est touché par une $(ball). Cliquez sur **ajouter une condition** pour commencer.", "es": "Comenzaremos haciendo que el $(multiplier) desaparezca cuando sea golpeado por una $(ball). Haz clic en **agregar una condición** para empezar.", "pt": "Começaremos fazendo o $(multiplier) desaparecer ao ser atingido por uma $(ball). Clique em **adicionar uma condição** para iniciar.", - "th": "ขั้นแรก เราจะทำให้ $(multiplier) หายไป เมื่อถูก $(ball) ชนครั้งหนึ่ง อีเวนท์พร้อมแล้ว ให้ **เพิ่มเงื่อนไข** ลงไป" + "th": "ขั้นแรก เราจะทำให้ $(multiplier) หายไป เมื่อถูก $(ball) ชนครั้งหนึ่ง อีเวนท์พร้อมแล้ว ให้ **เพิ่มเงื่อนไข** ลงไป", + "ar": "سوف نبدأ بجعل الـ $(multiplier) تختفي عندما يضربها $(ball). الضغط على **إضافة شرط** للبدأ." } } } @@ -434,7 +459,8 @@ "fr": "Sélectionnez **$(ball)**.", "es": "Seleccione **$(ball)**.", "pt": "Selecione **$(ball)**.", - "th": "เลือก **$(ball)**" + "th": "เลือก **$(ball)**", + "ar": "تحديد **$(ball)**." } } }, @@ -452,7 +478,8 @@ "fr": "Sélectionnez la condition **Collision**.", "es": "Seleccione la condición **Colisión**.", "pt": "Selecione a condição **Colisão**.", - "th": "เลือกเงื่อนไข **การชนกัน**" + "th": "เลือกเงื่อนไข **การชนกัน**", + "ar": "تحديد الشرط **تصادم**." } } }, @@ -470,7 +497,8 @@ "fr": "Et sélectionnez notre **$(multiplier)**.", "es": "Y seleccione nuestro **$(multiplier)**.", "pt": "E selecione nosso **$(multiplier)**.", - "th": "เลือก **$(multiplier)**" + "th": "เลือก **$(multiplier)**", + "ar": "وتحديد الـ **$(multiplier)** خاصتنا." } }, "placement": "top" @@ -489,7 +517,8 @@ "fr": "Bien, notre **condition** est prête. Elle sera **vraie** quand **$(ball) touche le $(multiplier)**.", "es": "Bien, nuestra **condición** está lista. Será **verdadera** cuando **$(ball) golpee el $(multiplier)**.", "pt": "Bem, nossa **condição** está pronta. Ela será **verdadeira** quando **$(ball) bater no $(multiplier)**.", - "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**" + "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**", + "ar": "حسنًا، إن **شرطنا** مستعد، هذا ***الشرط** سيكون **صحيحًا** عندما ** تلمس الـ $(ball) الـ $(multiplier)**." } }, "placement": "top" @@ -507,7 +536,8 @@ "fr": "Faisons disparaître notre multiplicateur avec une **action** maintenant.", "es": "Hagamos que nuestro multiplicador desaparezca con una **acción** ahora.", "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora.", - "th": "ทำให้ multiplier หายไป โดยใช้ **การกระทำ**" + "th": "ทำให้ multiplier หายไป โดยใช้ **การกระทำ**", + "ar": "دعنا نقوم بجعل مضاعِفاتنا الآن تختفي بواسطة **إجراء**." } } } @@ -524,7 +554,8 @@ "fr": "Sélectionnez **$(multiplier)**.", "es": "Seleccione **$(multiplier)**.", "pt": "Selecione **$(multiplier)**.", - "th": "เลือก **$(multiplier)**" + "th": "เลือก **$(multiplier)**", + "ar": "تحديد **$(multiplier)**." } } }, @@ -542,7 +573,8 @@ "fr": "Nous allons faire disparaître **$(multiplier)** en cas de collision.", "es": "Haremos que **$(multiplier)** desaparezca en caso de colisión.", "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão.", - "th": "เราจะทำให้ **$(multiplier)** หายไปเมื่อมีการชนกัน" + "th": "เราจะทำให้ **$(multiplier)** หายไปเมื่อมีการชนกัน", + "ar": "سوف نجعل **$(multiplier) تختفي مع التصادم." } } }, @@ -560,7 +592,8 @@ "fr": "Il est important de noter que seul le $(multiplier) qui est touché par la $(ball) (qui correspond à notre condition) sera supprimé. On appelle ce principe le **choix d'objet**.\n\nFermons cette boîte de dialogue.", "es": "Es importante tomar en cuenta que solo el $(multiplier) que sea tocado por la $(ball) (coincida con nuestra condición) será eliminado. Este principio se llama **elección de objeto**.\n\nCerraremos esta ventana.", "pt": "É importante notar que apenas o $(multiplier) que for atingido pela $(ball) (que corresponder à nossa condição) será excluído. Esse princípio é chamado de **escolha de objeto**.\n\nVamos fechar esta janela.", - "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้" + "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้", + "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nدعنا نغلق هذه." } }, "placement": "top" @@ -578,7 +611,8 @@ "fr": "Maintenant, **jouons un son** quand il est collecté !", "es": "¡Ahora, **reproducimos un sonido** cuando se recolecta!", "pt": "Agora, **reproduzimos um som** quando é coletado!", - "th": "ทีนี้มาเพิ่มการ **เล่นเสียง** เมื่อมีการเก็บ!" + "th": "ทีนี้มาเพิ่มการ **เล่นเสียง** เมื่อมีการเก็บ!", + "ar": "الآن دعنا نقوم بـ**تشغيل صوت** عندما يتم جمع المضاعِفات!" } } } @@ -595,7 +629,8 @@ "fr": "Recherchez **son**.", "es": "Busque **sonido**.", "pt": "Procure **som**.", - "th": "ค้นหา **sound**" + "th": "ค้นหา **sound**", + "ar": "البحث عن **صوت**." } } }, @@ -613,7 +648,8 @@ "fr": "Sélectionnez l'action **Jouer un son**.", "es": "Seleccione la acción **Reproducir un sonido**.", "pt": "Selecione a ação **Reproduzir um som**.", - "th": "เลือกการกระทำ **เล่นเสียง**" + "th": "เลือกการกระทำ **เล่นเสียง**", + "ar": "تحديد الإجراء **تشغيل صوت**." } } }, @@ -631,7 +667,8 @@ "fr": "Cliquez sur le champ pour voir les options, et sélectionnez **ClickerBeep2.wav**.", "es": "Haga clic en el campo para ver las opciones y seleccione **ClickerBeep2.wav**.", "pt": "Clique no campo para ver as opções e selecione **ClickerBeep2.wav**.", - "th": "คลิกที่ field เพื่อดูตัวเลือก แล้วเลือก **ClickerBeep2.wav**" + "th": "คลิกที่ field เพื่อดูตัวเลือก แล้วเลือก **ClickerBeep2.wav**", + "ar": "الضغط على الحقل لرؤية الخيارات، وتحديد **ClickerBeep2.wav**." } }, "placement": "top" @@ -650,7 +687,8 @@ "fr": "Bien, maintenant le son sera joué quand $(ball) collecte un $(multiplier) !", "es": "¡Bien, ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!", - "th": "เอาล่ะ ทีนี้เสียงก็จะเล่นเมื่อ $(ball) เก็บ $(multiplier) แล้ว!" + "th": "เอาล่ะ ทีนี้เสียงก็จะเล่นเมื่อ $(ball) เก็บ $(multiplier) แล้ว!", + "ar": "حسنًا، الآن سيتم تشغيل الصوت عندما تجمع الـ $(ball) الـ $(multiplier)!" } }, "placement": "top" @@ -668,7 +706,8 @@ "fr": "Mettons à jour notre **variable** en conséquence.", "es": "Actualicemos nuestra **variable** en consecuencia.", "pt": "Atualizemos nossa **variável** em conformidade.", - "th": "ทำการ **อัพเดทตัวแปร**" + "th": "ทำการ **อัพเดทตัวแปร**", + "ar": "دعنا نقوم بـ**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها." } } } @@ -685,7 +724,8 @@ "fr": "Recherchez **variable de scène**.", "es": "Busque **variable de escena**.", "pt": "Procure **variável de cena**.", - "th": "ค้นหา **ตัวแปรของ scene" + "th": "ค้นหา **ตัวแปรของ scene", + "ar": "البحث عن **متغير المشهد**." } } }, @@ -703,7 +743,8 @@ "fr": "Notre multiplicateur est un nombre, donc sélectionnons l'action **Modifier une variable numérique**.", "es": "Nuestro multiplicador es un número, por lo que seleccionemos la acción **Cambiar variable numérica**.", "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**.", - "th": "multiplier ของเราเป็นตัวเลข ดังนั้นเลือกการกระทำ **เปลี่ยนตัวเลขตัวแปร**" + "th": "multiplier ของเราเป็นตัวเลข ดังนั้นเลือกการกระทำ **เปลี่ยนตัวเลขตัวแปร**", + "ar": "مضاعِفاتنا عبارة عن عدد، لذلك دعنا نقوم بتحديد الإجراء **تغيير متغير عدد**." } } }, @@ -721,7 +762,8 @@ "fr": "Sélectionnez la variable que nous avons créée précédemment, **Multiplier**.", "es": "Seleccione la variable que creamos anteriormente, **Multiplier**.", "pt": "Selecione a variável que criamos anteriormente, **Multiplier**.", - "th": "เลือกตัวแปรที่เราสร้าง **Multiplier**" + "th": "เลือกตัวแปรที่เราสร้าง **Multiplier**", + "ar": "تحديد المتغير الذي قمنا بإنشائه في البداية (**Multiplier**)." } }, "placement": "top" @@ -740,7 +782,8 @@ "fr": "Nous voulons augmenter le multiplicateur, donc sélectionnons **+ (ajouter)**.", "es": "Queremos aumentar el multiplicador, así que seleccionemos **+ (agregar)**.", "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**.", - "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**" + "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**", + "ar": "نحن نريد أن نزيد المضاعِفات، لذلك دعنا نقوم بتحديد **+ (زائد)**." } }, "placement": "bottom" @@ -759,7 +802,8 @@ "fr": "Entrez **1**.", "es": "Ingrese **1**.", "pt": "Digite **1**.", - "th": "ใส่ **1**" + "th": "ใส่ **1**", + "ar": "دعنا نقوم بإدخال **1**." } }, "placement": "bottom" @@ -778,7 +822,8 @@ "fr": "Bien, maintenant notre variable de scène **Multiplier** **augmentera de 1** à chaque fois que $(ball) collecte un $(multiplier).", "es": "¡Bien, ahora nuestra variable de escena **Multiplier** **aumentará en 1** cada vez que la $(ball) recolecte un $(multiplier)!", "pt": "Ótimo, agora nossa variável de cena **Multiplier** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!", - "th": "เอาล่ะ ทีนี้ตัวแปร scene **Multiplier** ก็จะ **เพิ่มขึ้นทีละ 1** ทุกครั้งที่ **$(ball) เก็บ $(multiplier)**" + "th": "เอาล่ะ ทีนี้ตัวแปร scene **Multiplier** ก็จะ **เพิ่มขึ้นทีละ 1** ทุกครั้งที่ **$(ball) เก็บ $(multiplier)**", + "ar": "حسنًا، الآن متغير المشهد **Multiplier** سوف **يزداد بمقدار 1** في كل مرة **تقوم الـ $(ball) بجمع الـ $(multiplier)**." } }, "placement": "top" @@ -796,7 +841,8 @@ "fr": "Ajoutons un peu de piquant et **créons des particules** quand le **$(multiplier)** est collecté.", "es": "Agreguemos un poco de sabor y **creemos partículas** cuando el **$(multiplier)** es recolectado.", "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado.", - "th": "เพิ่มความน่าตื่นเต้นโดย **สร้าง particles** เมื่อ **$(multiplier)** ถูกเก็บ" + "th": "เพิ่มความน่าตื่นเต้นโดย **สร้าง particles** เมื่อ **$(multiplier)** ถูกเก็บ", + "ar": "دعنا نقوم بإضافة بعض المؤثرات و**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**." } } } @@ -813,8 +859,9 @@ "fr": "Recherchez **Créer**.", "es": "Busque **Crear**.", "pt": "Procure por **Criar**.", - "th": "ค้นหา **สร้าง**" - } + "th": "ค้นหา **สร้าง**", + "ar": "البحث عن **إنشاء**." + } } }, "isOnClosableDialog": true @@ -831,7 +878,8 @@ "fr": "Nous allons **créer des particules** que nous avons préparées pour vous, choisissez l'action **Créer un objet**.", "es": "Vamos a **crear algunas partículas** que hemos preparado para usted, elija la acción **Crear un objeto**.", "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**.", - "th": "เราจะ **สร้าง some particles** เราเตรียมเอาไว้ให้คุณแล้ว เลือกการกระทำ **สร้างวัตถุ**" + "th": "เราจะ **สร้าง some particles** เราเตรียมเอาไว้ให้คุณแล้ว เลือกการกระทำ **สร้างวัตถุ**", + "ar": "سوف نقوم بـ**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن جديد**." } } }, @@ -849,7 +897,8 @@ "fr": "Sélectionnez les particules que nous avons préparées, **$(particles)**.", "es": "Seleccione las partículas que hemos preparado, **$(particles)**.", "pt": "Selecione as partículas que preparamos, **$(particles)**.", - "th": "เลือก **$(particles)** ที่เตรียมไว้" + "th": "เลือก **$(particles)** ที่เตรียมไว้", + "ar": "تحديد الجسيمات التي حضرناها (**$(particles)**)." } }, "placement": "top" @@ -868,7 +917,8 @@ "fr": "Faisons en sorte qu'elles apparaissent là où le multiplicateur était,\n\nentrez `$(multiplier).X()`.", "es": "Hagamos que aparezcan donde estaba el multiplicador,\n\ningrese `$(multiplier).X()`.", "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`.", - "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`" + "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`", + "ar": "دعنا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X`." } }, "placement": "bottom" @@ -887,7 +937,8 @@ "fr": "Et `$(multiplier).Y()`.", "es": "Y `$(multiplier).Y()`.", "pt": "E `$(multiplier).Y()`.", - "th": "และ `$(multiplier).Y()`" + "th": "และ `$(multiplier).Y()`", + "ar": "بالإضافة إلى `$(multiplier).Y`." } }, "placement": "bottom" @@ -906,7 +957,8 @@ "fr": "Bien! Nos **$(particles)** seront **créées** exactement là où se trouvait le **$(multiplier)**, ce qui donnera un bel effet !", "es": "¡Bien! Nuestras **$(particles)** serán **creadas** exactamente donde estaba el **$(multiplier)**, ¡lo que dará un buen efecto!", "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!", - "th": "ดีมาก! **$(particles)** ของเราจะ **ถูกสร้าง** ที่ตำแหน่งของ **$(multiplier)** เป็นเอฟเฟกต์ที่เพิ่มคุณภาพกราฟฟิกได้!" + "th": "ดีมาก! **$(particles)** ของเราจะ **ถูกสร้าง** ที่ตำแหน่งของ **$(multiplier)** เป็นเอฟเฟกต์ที่เพิ่มคุณภาพกราฟฟิกได้!", + "ar": "جميل! الـ **$(particles)** خاصتنا سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!" } }, "placement": "top" @@ -924,7 +976,8 @@ "fr": "Enfin, nous devons nous assurer que le **$(scoreMultiplier)** que nous avons placé sur la scène est mis à jour en conséquence !", "es": "¡Finalmente, debemos asegurarnos de que el **$(scoreMultiplier)** que hemos colocado en la escena se actualice en consecuencia!", "pt": "Finalmente, precisamos nos certificar de que o **$(scoreMultiplier)** que colocamos na cena seja atualizado de acordo!", - "th": "ขั้นสุดท้าย เราต้องการที่จะแน่ใจว่า **$(scoreMultiplier)** ที่เราใส่ใน scene จะต้องอัพเดทอย่างสอดคล้อง!" + "th": "ขั้นสุดท้าย เราต้องการที่จะแน่ใจว่า **$(scoreMultiplier)** ที่เราใส่ใน scene จะต้องอัพเดทอย่างสอดคล้อง!", + "ar": "وأخيرًا وليس آخرًا، نحتاج أن نتحقق أن الـ **$(scoreMultiplier)** التي وضعناها في المشهد ستحدث متوافقةً مع المضاعِفات التي تم جمعها!" } } } @@ -941,7 +994,8 @@ "fr": "Recherchez **Modifier**.", "es": "Busque **Modificar**.", "pt": "Procure por **Modificar**.", - "th": "ค้นหา **แก้ไข**" + "th": "ค้นหา **แก้ไข**", + "ar": "البحث عن **تعديل**." } } }, @@ -959,7 +1013,8 @@ "fr": "Nous allons **Modifier le texte** que nous avons placé à l'écran plus tôt.", "es": "Vamos a **Modificar el texto** que colocamos en la pantalla anteriormente.", "pt": "Vamos **Modificar o texto** que colocamos na tela anteriormente.", - "th": "เราจะ **แก้ไขข้อความ** ที่เราวางไว้ใน scene ก่อนหน้านี้" + "th": "เราจะ **แก้ไขข้อความ** ที่เราวางไว้ใน scene ก่อนหน้านี้", + "ar": "سوف نقوم بـ**تعديل النص** الذي وضعناه في الشاشة بالبداية." } } }, @@ -975,7 +1030,8 @@ "messageByLocale": { "en": "Select the text object **$(scoreMultiplier)**.", "fr": "Sélectionnez l'objet texte **$(scoreMultiplier)**.", - "th": "เลือกวัตถุข้อความ **$(scoreMultiplier)**" + "th": "เลือกวัตถุข้อความ **$(scoreMultiplier)**", + "ar": "تحديد الكائن النصي **$(scoreMultiplier)**." } }, "placement": "bottom" @@ -994,7 +1050,8 @@ "fr": "Nous voulons mettre à jour le texte complètement, alors sélectionnons **= (définir à)**.", "es": "Queremos actualizar el texto por completo, así que seleccionemos **= (establecer en)**.", "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**.", - "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**" + "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**", + "ar": "نحن نريد تحديث النص بالكامل، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -1013,7 +1070,8 @@ "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela.\n\nEntrez `\"x\"+VariableString(Multiplier)`.", "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+VariableString(Multiplier)`.", "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`.", - "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`" + "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`", + "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x1، x2، إلخ... لذلك دعنا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+VariableString(Multiplier)`." } }, "placement": "bottom" @@ -1032,7 +1090,8 @@ "fr": "Bien ! notre **$(scoreMultiplier)** sera maintenant mis à jour grâce à la **variable Multiplier** que nous avons convertie en texte !", "es": "¡Bien! ¡nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!", - "th": "ดีมาก! **$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ" + "th": "ดีมาก! **$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ", + "ar": "جميل! الـ **$(scoreMultiplier)** خاصتنا سوف يتم تحديثها بفضل **متغير المضاعِفات** الذي حولناه إلى نص!" } }, "placement": "top" @@ -1050,7 +1109,8 @@ "fr": "Enfin, nous devons prendre en compte notre multiplicateur lors du calcul du score. **Fermons le groupe Multiplicateur de score** avec la flèche à gauche.", "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. **Cerramos el grupo Multiplicador de puntuación** con la flecha a la izquierda.", "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **fechar o grupo Multiplicador de pontuação** com a seta à esquerda.", - "th": "สุดท้ายเราจะนำตัวแปร Multiplier มาใช้ในการคำนวณคะแนน ให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย" + "th": "สุดท้ายเราจะนำตัวแปร Multiplier มาใช้ในการคำนวณคะแนน ให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", + "ar": "وأخيرًا وليس آخرًا، نحن نحتاج من مضاعِفاتنا أن تحصى عندما يتم حساب النتيجة، دعنا **نطوي المجموعة Score multiplier** بواسطة السهم على اليسار." } }, "placement": "bottom" @@ -1068,7 +1128,8 @@ "fr": "Et **déplions le groupe Toucher des plots** avec la flèche à gauche.", "es": "Y **desplegamos el grupo Tocando plots** con la flecha a la izquierda.", "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda.", - "th": "และให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย" + "th": "และให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", + "ar": "ودعنا نقوم بـ**توسيع المجموعة Hitting pegs** بواسطة السهم على اليسار." } }, "placement": "bottom" @@ -1086,7 +1147,8 @@ "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **double-cliquant dessus** !", "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **dando doble clic en ella**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!", - "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!" + "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!", + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النقاط عن طريق **النقر المزدوج عليه**!" } }, "touchDescription": { @@ -1095,7 +1157,8 @@ "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **appuyant 2 fois dessus** !", "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**!", - "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!" + "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النقاط عن طريق **الضغط عليه مرتين**!" } } } @@ -1112,7 +1175,8 @@ "fr": "Nous voulons multiplier le score ajouté par le multiplicateur,\n\nentrons `1*Variable(Multiplier)`.", "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Variable(Multiplier)`.", "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`.", - "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`" + "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`", + "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nدعنا نقوم بإدخال `1*Variable(Multiplier)`." } }, "placement": "bottom" @@ -1131,7 +1195,8 @@ "fr": "Cela fera en sorte que notre score se mette à jour en fonction du multiplicateur ! Enregistrons.", "es": "¡Esto hará que nuestra puntuación se actualice de acuerdo con el multiplicador! Guardemos.", "pt": "Isso fará com que nossa pontuação seja atualizada de acordo com o multiplicador! Salve.", - "th": "ทีนี้คะแนนของเราจะอัพเดทได้อย่างสอดคล้องแล้ว! มาบันทึกกันเถอะ" + "th": "ทีนี้คะแนนของเราจะอัพเดทได้อย่างสอดคล้องแล้ว! มาบันทึกกันเถอะ", + "ar": "هذا سيجعل نتيجتنا تحدث وفقًا للمضاعِفات! هيّا نحفظ." } }, "placement": "top" @@ -1149,7 +1214,8 @@ "fr": "Cet événement gère la logique lorsque le joueur touche un plot *plus gros*. Modifions l'action de score en **double-cliquant dessus** à nouveau.", "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", - "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง" + "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง", + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النقاط عن طريق **النقر المزدوج عليه** مجددًا." } }, "touchDescription": { @@ -1158,7 +1224,8 @@ "fr": "Cet événement gère la logique lorsque le joueur touche un plot *plus gros*. Modifions l'action de score en **appyant 2 fois dessus**.", "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**.", - "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!" + "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النقاط عن طريق **الضغط عليه مرتين** مجددًا." } } } @@ -1175,7 +1242,8 @@ "fr": "Nous allons faire exactement la même chose, sauf que le score donné sera 2,\n\nentrons `2 * Variable(Multiplier)`.", "es": "Ahora vamos a hacer exactamente lo mismo, excepto que la puntuación dada sera 2,\n\ningresamos `2 * Variable(Multiplier)`.", "pt": "Hora faremos exatamente a mesma coisa, exceto que a pontuação dada sera 2,\n\ndigitar `2 * Variable(Multiplier)`.", - "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`" + "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`", + "ar": "الآن سوف نقوم بنفس الشيء تمامًا، باستثناء أن النتيجة المعطاة ستكون الضعف،\n\nإدخال `2 * Variable(Multiplier)`." } }, "placement": "bottom" @@ -1194,7 +1262,8 @@ "fr": "Maintenant, fermons ceci !", "es": "¡Ahora cerramos esto!", "pt": "Agora vamos fechar isso!", - "th": "ปิดหน้าต่างได้เลย!" + "th": "ปิดหน้าต่างได้เลย!", + "ar": "الآن دعنا نغلق هذا." } }, "placement": "top" @@ -1212,7 +1281,8 @@ "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 62951af..3c6fb39 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -10,7 +10,7 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/timer/game.json", "initialProjectData": { "gameScene": "GameScene" @@ -23,7 +23,8 @@ "fr": "# Vous avez terminé cette leçon !", "es": "# ¡Has terminado esta lección!", "pt": "# Você terminou esta lição!", - "th": "# คุณเรียนบทเรียนนี้จบแล้ว!" + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -32,7 +33,8 @@ "fr": "Bien joué, dans ce tutoriel vous avez appris :", "es": "¡Bien hecho, en este tutorial aprendiste:", "pt": "Bem feito, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:" + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -41,7 +43,8 @@ "fr": "- Créer un texte\n\n- Créer et démarrer un chronomètre\n\n- Utiliser la valeur d'un chronomètre pour mettre à jour un texte", "es": "- Crear un texto\n\n- Crear y comenzar un temporizador\n\n- Utilizar el valor de un temporizador para actualizar un texto", "pt": "- Crie um texto\n\n- Crie e inicie um cronômetro\n\n- Use o valor de um cronômetro para atualizar um texto", - "th": "- สร้างข้อความ\n\n- สร้างและเริ่มต้นตัวจับเวลา\n\n- ใช้ค่าของตัวจับเวลาเพื่ออัปเดตข้อความ" + "th": "- สร้างข้อความ\n\n- สร้างและเริ่มต้นตัวจับเวลา\n\n- ใช้ค่าของตัวจับเวลาเพื่ออัปเดตข้อความ", + "ar": "- إنشاء نص\n\n- إنشاء وتشغيل مؤقت\n\n- استخدام قيمة المؤقت لتحديث النص" } }, { @@ -50,7 +53,8 @@ "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", - "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!" + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -66,7 +70,8 @@ "fr": "C'est parti !", "es": "¡Vamos!", "pt": "Vamos lá!", - "th": "ไปกันเลย!" + "th": "ไปกันเลย!", + "ar": "لنبدأ!" } } }, @@ -78,7 +83,8 @@ "fr": "Ce jeu est assez simple ! Utilisez votre souris ou votre doigt pour faire glisser la clé dans la serrure, tout en restant dans le chemin ! Cliquez sur le bouton **aperçu** pour l'essayer.", "es": "¡Este juego es bastante simple! Utiliza tu ratón o dedo para arrastrar la llave al agujero de la llave, ¡mientras te mantienes dentro del camino! Haz clic en el botón **previsualización** para probarlo.", "pt": "Este jogo é bastante simples! Use seu mouse ou dedo para arrastar a chave para a fechadura, enquanto permanece dentro do caminho! Clique no botão **pré-visualização** para experimentá-lo.", - "th": "เกมนี้เป็นเกมง่ายๆ! ใช้เมาส์หรือนิ้วเพื่อลากกุญแจไปยังช่องกุญแจในขณะที่ยังอยู่ในเส้นทาง! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อลองเล่น" + "th": "เกมนี้เป็นเกมง่ายๆ! ใช้เมาส์หรือนิ้วเพื่อลากกุญแจไปยังช่องกุญแจในขณะที่ยังอยู่ในเส้นทาง! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อลองเล่น", + "ar": "هذه اللعبة بسيطة قليلًا! استخدام الفأرة أو إصبعك لسحب المفتاح إلى الفوهة مع البقاء داخل المسار! الضغط على زر **معاينة** للتجربة." } } } @@ -95,7 +101,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -114,7 +121,8 @@ "fr": "Tout d'abord, créons du texte pour afficher le temps passé à jouer au niveau. Cliquez sur le bouton **Ajouter un nouvel objet**.", "es": "Primero, creemos un texto para mostrar el tiempo que se ha pasado jugando al nivel. Haga clic en el botón **Agregar nuevo objeto**.", "pt": "Primeiro, vamos criar um texto para exibir o tempo gasto jogando o nível. Clique no botão **Adicionar novo objeto**.", - "th": "เริ่มต้นกันด้วยการสร้างข้อความเพื่อแสดงเวลาที่ใช้ในการเล่นเกม คลิกที่ปุ่ม **เพิ่มวัตถุใหม่**" + "th": "เริ่มต้นกันด้วยการสร้างข้อความเพื่อแสดงเวลาที่ใช้ในการเล่นเกม คลิกที่ปุ่ม **เพิ่มวัตถุใหม่**", + "ar": "أولًا، دعنا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضى في لعب هذه المرحلة. الضغط على زر **إضافة كائن جديد**. " } }, "placement": "top" @@ -132,7 +140,8 @@ "fr": "Nous allons créer un texte à partir de zéro.", "es": "Vamos a crear un texto desde cero.", "pt": "Vamos criar um texto do zero.", - "th": "เราจะสร้างข้อความใหม่" + "th": "เราจะสร้างข้อความใหม่", + "ar": "سوف نقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -152,7 +161,8 @@ "fr": "Sélectionnez l'objet **Texte**", "es": "Seleccione el objeto **Texto**", "pt": "Selecione o objeto **Texto**", - "th": "เลือกวัตถุ **ข้อความ**" + "th": "เลือกวัตถุ **ข้อความ**", + "ar": "تحديد الكائن **نص**" } }, "placement": "bottom" @@ -171,7 +181,8 @@ "fr": "Utilisez **Score** comme nom d'objet.", "es": "Cambie el nombre del objeto a **Score**.", "pt": "Mude o nome do objeto para **Score**.", - "th": "เปลี่ยนชื่อวัตถุเป็น **Score**" + "th": "เปลี่ยนชื่อวัตถุเป็น **Score**", + "ar": "تغيير اسم الكائن إلى **Score**." } }, "placement": "bottom" @@ -190,7 +201,8 @@ "fr": "Utilisez une taille de **50**.", "es": "Cambie el tamaño de fuente a **50**.", "pt": "Mude o tamanho da fonte para **50**.", - "th": "เปลี่ยนขนาดตัวอักษรเป็น **50**" + "th": "เปลี่ยนขนาดตัวอักษรเป็น **50**", + "ar": "تغيير حجم الخط إلى **50**." } }, "placement": "bottom" @@ -209,7 +221,8 @@ "fr": "Changeons la valeur initiale à **0**, et nous allons le mettre à jour ensuite !", "es": "Cambie el texto inicial a **0**, ¡y lo actualizaremos más tarde!", "pt": "Mude o texto inicial para **0**, e atualizaremos mais tarde!", - "th": "เปลี่ยนข้อความเริ่มต้นเป็น **0** และเราจะอัปเดตมันในภายหลัง!" + "th": "เปลี่ยนข้อความเริ่มต้นเป็น **0** และเราจะอัปเดตมันในภายหลัง!", + "ar": "تغيير حالة النص إلى **0**، وسنقوم بتحديثها لاحقًا!" } }, "placement": "bottom" @@ -228,7 +241,8 @@ "fr": "Nous avons terminé.", "es": "Hemos terminado.", "pt": "Terminamos.", - "th": "เราเสร็จแล้ว" + "th": "เราเสร็จแล้ว", + "ar": "انتهينا." } } }, @@ -248,7 +262,8 @@ "fr": "Faites glisser $(scoreText) du menu au canvas.", "es": "Arrastre $(scoreText) al **escenario**.", "pt": "Arraste $(scoreText) para a **cena**.", - "th": "ลาก $(scoreText) ไปยัง **ฉาก**" + "th": "ลาก $(scoreText) ไปยัง **ฉาก**", + "ar": "سحب $(scoreText) إلى **المشهد**." } }, "touchDescription": { @@ -257,7 +272,8 @@ "fr": "**Sélectionnez** puis **faites glisser** $(scoreText) du menu au canvas.", "es": "**Seleccione** y **arrastrar** $(scoreText) al **escenario**.", "pt": "**Selecione** e **arraste** $(scoreText) para a **cena**.", - "th": "**เลือก** แล้ว **ลาก** $(scoreText) ไปยัง **ฉาก**" + "th": "**เลือก** แล้ว **ลาก** $(scoreText) ไปยัง **ฉาก**", + "ar": "**تحديد** ثم **سحب** الـ $(scoreText) إلى **المشهد**." } }, "placement": "top" @@ -271,7 +287,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -283,7 +300,8 @@ "fr": "Placez $(scoreText) en haut à droite de l'écran, de sorte que le joueur puisse voir son score pendant qu'il joue.\n\nQuand vous avez terminé, cliquez sur le bouton ci-dessous.", "es": "Coloque $(scoreText) en la parte superior derecha de la pantalla, para que el jugador pueda ver su puntuación mientras juega.\n\nCuando hayas terminado, haz clic en el botón de abajo.", "pt": "Coloque $(scoreText) no canto superior direito da tela, para que o jogador possa ver sua pontuação enquanto joga.\n\nQuando terminar, clique no botão abaixo.", - "th": "วาง $(scoreText) ที่ด้านบนขวาของหน้าจอ เพื่อให้ผู้เล่นสามารถเห็นคะแนนของตนเองขณะเล่นได้\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง" + "th": "วาง $(scoreText) ที่ด้านบนขวาของหน้าจอ เพื่อให้ผู้เล่นสามารถเห็นคะแนนของตนเองขณะเล่นได้\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", + "ar": "وضع الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية نقاطهم أثناء اللعب. \n\nعندما تنتهي، الضغط على الزر أدناه." } }, "placement": "top", @@ -304,7 +322,8 @@ "fr": "Maintenant, **mettons à jour ce texte avec un chronomètre** ! **Ouvrons la feuille d'événements** de votre scène $(gameScene).", "es": "¡Ahora, **actualicemos este texto con un temporizador**! **Abramos la hoja de eventos** de su escena $(gameScene).", "pt": "Agora, **atualizemos este texto com um temporizador**! **Abra a Planilha de Eventos** de sua cena $(gameScene).", - "th": "ตอนนี้ **อัปเดตข้อความนี้ด้วยตัวจับเวลา**! **เปิดแผ่นงานเหตุการณ์** ของฉากของคุณ $(gameScene)" + "th": "ตอนนี้ **อัปเดตข้อความนี้ด้วยตัวจับเวลา**! **เปิดแผ่นงานเหตุการณ์** ของฉากของคุณ $(gameScene)", + "ar": "الآن دعنا نقوم بـ**تحديث هذا النص مع المؤقت**! دعنا نقوم بـ**فتح صفحة الأحداث** لمشهدك $(gameScene)." } }, "placement": "bottom" @@ -323,7 +342,8 @@ "fr": "Ajoutons une **condition** pour détecter quand le jeu commence.", "es": "Agreguemos una **condición** para detectar cuando comienza el juego.", "pt": "Vamos **adicionar uma condição** para detectar quando o jogo começa.", - "th": "เพิ่ม **เงื่อนไข** เพื่อตรวจสอบเมื่อเกมเริ่มต้น" + "th": "เพิ่ม **เงื่อนไข** เพื่อตรวจสอบเมื่อเกมเริ่มต้น", + "ar": "دعنا نقوم بـ**إضافة شرط** لكشف وقت بدء اللعبة." } } } @@ -340,7 +360,8 @@ "fr": "Cherchez **Scène**.", "es": "Busque **Escena**.", "pt": "Procure por **Cena**.", - "th": "ค้นหา **ฉาก**" + "th": "ค้นหา **ฉาก**", + "ar": "البحث عن **مشهد**." } } }, @@ -358,7 +379,8 @@ "fr": "Nous allons démarrer notre chronomètre quand la scène commence, grâce à la condition **Au début de la scène**.", "es": "Comenzaremos nuestro temporizador cuando comience la escena, gracias a la condición **Al comienzo de la escena**.", "pt": "Vamos iniciar nosso temporizador quando a cena começar, graças à condição **No início da cena**.", - "th": "เราจะเริ่มต้นตัวจับเวลาเมื่อฉากเริ่มต้น โดยขอบคุณเงื่อนไข **เริ่มต้นฉาก**" + "th": "เราจะเริ่มต้นตัวจับเวลาเมื่อฉากเริ่มต้น โดยขอบคุณเงื่อนไข **เริ่มต้นฉาก**", + "ar": "سوف نبدأ مؤقتنا عندما يبدأ المشهد، بفضل الشرط **في بداية المشهد**." } } }, @@ -376,7 +398,8 @@ "fr": "Nous allons maintenant créer le chronomètre.", "es": "Ahora creemos el temporizador.", "pt": "Vamos criar o temporizador agora.", - "th": "เราจะสร้างตัวจับเวลาตอนนี้" + "th": "เราจะสร้างตัวจับเวลาตอนนี้", + "ar": "سوف نقوم بإنشاء المؤقت الآن." } }, "placement": "top" @@ -394,7 +417,8 @@ "fr": "Créez une **action**.", "es": "Crea una **acción**.", "pt": "Crie uma **ação**.", - "th": "สร้าง **การกระทำ**" + "th": "สร้าง **การกระทำ**", + "ar": "إضافة **إجراء**." } } } @@ -411,7 +435,8 @@ "fr": "Cherchez **chrono**.", "es": "Busque **temporizador**.", "pt": "Procure por **Cronômetro**.", - "th": "ค้นหา **ตัวจับเวลาฉาก**" + "th": "ค้นหา **ตัวจับเวลาฉาก**", + "ar": "البحث عن **مؤقت المشهد**." } } }, @@ -429,7 +454,8 @@ "fr": "Cliquez sur l'action **Démarrer (ou réinitialiser) un chronomètre de scène**.", "es": "Seleccione la acción **Iniciar (o reiniciar) un temporizador de escena**.", "pt": "Selecione a ação **Iniciar (ou reiniciar) um cronômetro de cena**.", - "th": "เลือก **เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลาฉาก**" + "th": "เลือก **เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลาฉาก**", + "ar": "تحديد الإجراء **بدء (أو إعادة تعيين) مؤقت المشهد**." } } }, @@ -447,7 +473,8 @@ "fr": "Ce chronomètre sera créé, nommons-le **\"GameTimer\"** (entre guillemets).", "es": "Este temporizador se creará, llamémoslo **\"GameTimer\"** (entre comillas).", "pt": "Este cronômetro será criado, vamos chamá-lo de **\"GameTimer\"** (entre aspas).", - "th": "ตัวจับเวลานี้จะถูกสร้าง ให้เราตั้งชื่อว่า **\"GameTimer\"** (ในเครื่องหมายคำพูด)" + "th": "ตัวจับเวลานี้จะถูกสร้าง ให้เราตั้งชื่อว่า **\"GameTimer\"** (ในเครื่องหมายคำพูด)", + "ar": "سوف يتم إنشاء المؤقت، فلنسميه**\"GameTimer\"** (داخل علامتا تنصيص)." } } }, @@ -466,7 +493,8 @@ "fr": "Nous avons terminé ! Notre chronomètre démarrera lorsque la scène commencera.", "es": "¡Hemos terminado! Nuestro temporizador comenzará cuando comience la escena.", "pt": "Terminamos! Nosso cronômetro começará quando a cena começar.", - "th": "เราจบแล้ว! ตัวจับเวลาของเราจะเริ่มต้นเมื่อฉากเริ่มต้น" + "th": "เราจบแล้ว! ตัวจับเวลาของเราจะเริ่มต้นเมื่อฉากเริ่มต้น", + "ar": "انتهينا! مؤقتنا سوف يبدأ وقتما يبدأ المشهد." } }, "placement": "top" @@ -484,7 +512,8 @@ "fr": "Maintenant, mettons à jour le score grâce au chronomètre.", "es": "Ahora actualicemos la puntuación gracias al temporizador.", "pt": "Agora vamos atualizar a pontuação graças ao cronômetro.", - "th": "ตอนนี้เราจะอัปเดตคะแนนของเราโดยใช้ตัวจับเวลา" + "th": "ตอนนี้เราจะอัปเดตคะแนนของเราโดยใช้ตัวจับเวลา", + "ar": "الآن دعنا نقوم بتحديث النقاط بفضل المؤقت." } } } @@ -501,7 +530,8 @@ "fr": "Cliquez sur $(scoreText).", "es": "Seleccione $(scoreText).", "pt": "Selecione $(scoreText).", - "th": "เลือก $(scoreText)" + "th": "เลือก $(scoreText)", + "ar": "تحديد $(scoreText)." } } }, @@ -519,7 +549,8 @@ "fr": "Nous allons changer le contenu du texte.", "es": "Cambiamos el texto.", "pt": "Vamos alterar o texto.", - "th": "เราจะเปลี่ยนข้อความ" + "th": "เราจะเปลี่ยนข้อความ", + "ar": "سوف نقوم بتغيير النص." } } }, @@ -537,7 +568,8 @@ "fr": "Cliquez sur **= (définir à)**.", "es": "Seleccione **= (establecer en)**.", "pt": "Selecione **= (definir como)**.", - "th": "เลือก **= (ตั้งค่าเป็น)**" + "th": "เลือก **= (ตั้งค่าเป็น)**", + "ar": "تحديد **= (تعيين إلى)**." } } }, @@ -556,7 +588,8 @@ "fr": "Maintenant, utilisons la valeur du chronomètre.", "es": "Ahora, usemos el valor del temporizador.", "pt": "Agora, vamos usar o valor do cronômetro.", - "th": "ตอนนี้เราจะใช้ค่าของตัวจับเวลา" + "th": "ตอนนี้เราจะใช้ค่าของตัวจับเวลา", + "ar": "والآن، دعنا نستخدم قيمة المؤقت." } }, "placement": "bottom" @@ -575,7 +608,8 @@ "fr": "Recherchez **Chrono**", "es": "Busque **Temporizador**", "pt": "Procure por **Cronômetro**", - "th": "ค้นหา **ตัวจับเวลา**" + "th": "ค้นหา **ตัวจับเวลา**", + "ar": "البحث عن **مؤقت**." } }, "placement": "top" @@ -594,7 +628,8 @@ "fr": "Sélectionnez **Valeur d'un chronomètre de scène**.", "es": "Seleccione **Valor de un temporizador de escena**.", "pt": "Selecione **Valor de um cronômetro de cena**.", - "th": "เลือก **ค่าของตัวจับเวลาของฉาก**" + "th": "เลือก **ค่าของตัวจับเวลาของฉาก**", + "ar": "تحديد **قيمة مؤقت المشهد**." } }, "placement": "bottom" @@ -613,7 +648,8 @@ "fr": "Sélectionnez le chronomètre que nous venons de créer, **\"GameTimer\"**.", "es": "Seleccione el temporizador que acabamos de crear, **\"GameTimer\"**.", "pt": "Selecione o cronômetro que acabamos de criar, **\"GameTimer\"**.", - "th": "เลือกตัวจับเวลาที่เราสร้างไว้เมื่อสักครู่ที่แล้ว **\"GameTimer\"**" + "th": "เลือกตัวจับเวลาที่เราสร้างไว้เมื่อสักครู่ที่แล้ว **\"GameTimer\"**", + "ar": "تحديد المؤقت الذي قمنا بإنشائه للتو (**\"GameTimer\"**)." } }, "placement": "top" @@ -632,7 +668,8 @@ "fr": "On est bon.", "es": "Estamos bien.", "pt": "Estamos bem.", - "th": "เรียบร้อยแล้ว" + "th": "เรียบร้อยแล้ว", + "ar": "نحن على الطريق الصحيح." } }, "placement": "top" @@ -651,7 +688,8 @@ "fr": "Bien, dernier détail ! Si nous laissons comme ça, le texte du score affichera les décimales de notre chronomètre et nous ne voulons que les secondes !\n\n**Arrondissons** ce nombre.\n\nAjoutons la fonction `round()` autour de la valeur afin que nous puissions arrondir la valeur du chronomètre. Le résultat ressemblera à ceci :\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", "es": "¡Bien, detalle final! Si lo dejamos así, el texto de la puntuación mostrará los decimales de nuestro temporizador y solo queremos los segundos.\n\n¡**Redondeemos** ese número!\n\nAgreguemos la función `round()` alrededor del valor para que podamos redondear el valor del temporizador. El resultado se verá así:\n\n`\"ToString(round( TimerElapsedTime(\"GameTimer\")))`", "pt": "Bem, detalhe final! Se deixarmos assim, o texto da pontuação exibirá os decimais do nosso cronômetro e só queremos os segundos!\n\nVamos **arredondar** esse número.\n\nVamos adicionar a função `round()` ao redor do valor para que possamos arredondar o valor do cronômetro. O resultado será assim:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", - "th": "ดี รายละเอียดสุดท้าย! ถ้าเราเหลืออย่างนี้ ข้อความคะแนนจะแสดงทศนิยมของตัวจับเวลาของเราและเราต้องการเฉพาะวินาที!\n\nเราจะ **ปัดเศษ** ตัวเลขนั้น\n\nเราจะเพิ่มการใช้ฟังก์ชัน `round()` รอบค่าเพื่อที่เราจะปัดเศษค่าของตัวจับเวลา ผลลัพธ์จะเป็นแบบนี้\n\n`ToString(round(TimerElapsedTime(\"GameTimer\")))`" + "th": "ดี รายละเอียดสุดท้าย! ถ้าเราเหลืออย่างนี้ ข้อความคะแนนจะแสดงทศนิยมของตัวจับเวลาของเราและเราต้องการเฉพาะวินาที!\n\nเราจะ **ปัดเศษ** ตัวเลขนั้น\n\nเราจะเพิ่มการใช้ฟังก์ชัน `round()` รอบค่าเพื่อที่เราจะปัดเศษค่าของตัวจับเวลา ผลลัพธ์จะเป็นแบบนี้\n\n`ToString(round(TimerElapsedTime(\"GameTimer\")))`", + "ar": "حسنًا، نحن في التفاصيل النهائية! إذا تركناها هكذا، نص النقاط سيعرض أرقامًا عشرية ونحن نريد الثواني فقط!\n\nدعنا نقوم بـ**تقريب** ذاك الرقم.\n\nدعنا نستخدم التعبير `round()` حول القيمة حتى يتم تقريب قيمة المؤقت. سوف تصبح هكذا:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" } }, "placement": "top" @@ -670,7 +708,8 @@ "fr": "On est tout bon.", "es": "Estamos listos.", "pt": "Estamos prontos.", - "th": "เราพร้อมแล้ว" + "th": "เราพร้อมแล้ว", + "ar": "ضبطنا كل شيء." } }, "placement": "top" @@ -688,7 +727,8 @@ "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**" + "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." } }, "placement": "bottom" From c1ccb1681a9f6a72984cd2f518afa69091bc2138 Mon Sep 17 00:00:00 2001 From: EyadMahm0ud <77191515+EyadMahm0ud@users.noreply.github.com> Date: Mon, 29 May 2023 16:07:22 +0300 Subject: [PATCH 070/208] Maintenance of Arabic translation in Tutorials joystick.json: - Fix Spaces between words - Grammars healthBar.json: - Cosmetic repairs - Grammars healthBar.json: - Cosmetic repairs - Grammars cameraParallax.json: - Cosmetic repairs - Grammars - Translate forgotten action - Add forgotten string - Fix $(object) timer.json: - Cosmetic repairs - Grammars - Fix Tabs - Fix bolded variable name plinkoMultiplier.json: - (CRITICAL) Fix Tabs - Cosmetic repairs - Grammars --- tutorials/in-app/cameraParallax.json | 31 +++--- tutorials/in-app/healthBar.json | 12 +-- tutorials/in-app/joystick.json | 16 +-- tutorials/in-app/plinkoMultiplier.json | 142 ++++++++++++------------- tutorials/in-app/timer.json | 80 +++++++------- 5 files changed, 141 insertions(+), 140 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index a049ef5..bf81256 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -165,7 +165,7 @@ "es": "Haz clic en la extensión **Smooth Camera**.", "pt": "Clique na extensão **Smooth Camera**.", "th": "คลิกที่ extension **Smooth Camera**", - "ar": "الضغط على الملحق **smooth camera**." + "ar": "الضغط على الملحق **Smooth Camera**." } } }, @@ -263,7 +263,7 @@ "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **($player)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(player)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { @@ -273,7 +273,7 @@ "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nSelecciona y pulsa largo **$(player)** y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nSelecione e pressione por um longo tempo **$(player)** e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **($player)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **$(player)** وتحديد **تحرير السلوكيات**." } } } @@ -291,7 +291,7 @@ "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." + "ar": "رؤية **سلوكيات الكائن** من هنا." } }, "placement": "bottom" @@ -369,7 +369,7 @@ "es": "¡Eso es todo! ¡Ahora la cámara **seguirá a nuestro jugador unicamente de manera horizontal**!", "pt": "É isso aí! Agora a câmera **seguirá nosso jogador unicamente de jeito horizontal**!", "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!", - "ar": "هذا كل شيء، الآن ستقوم الكاميرا بـ**متابعة الشخصية أفقيًا فقط**!" + "ar": "هذا كل شيء، الآن ستقوم الكاميرا ب**متابعة الشخصية أفقيًا فقط**!" } } } @@ -407,7 +407,7 @@ "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", "pt": "Vamos **adicionar uma nova camada** para nosso fundo.", "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง", - "ar": "لنقم بـ**إضافة طبقة** لخلفيتنا." + "ar": "لنقم ب**إضافة طبقة** لخلفيتنا." } }, "placement": "top" @@ -541,7 +541,7 @@ "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.", "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", - "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." + "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." } }, "placement": "top", @@ -607,7 +607,8 @@ "fr": "J'ai terminé", "es": "Ya terminé", "pt": "Terminei", - "th": "ฉันทำเสร็จแล้ว" + "th": "ฉันทำเสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -662,7 +663,7 @@ "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover.", "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่", - "ar": "دعنا نقوم بـ**إضافة إجراء** لجعل الخلفية الأولى تتحرك." + "ar": "دعنا نقوم ب**إضافة إجراء** لجعل الخلفية الأولى تتحرك." } } } @@ -699,7 +700,7 @@ "es": "Seleccione la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", - "ar": "تحديد الإجراء **Image X offset**." + "ar": "تحديد الإجراء **إزاحة الصورة أفقيًا**." } } }, @@ -718,7 +719,7 @@ "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -738,7 +739,7 @@ "es": "Hagamos que el fondo lejano se mueva,\n\n La forma de hacerlo es hacer que se mueva en relación con la posición de la cámara.\n\n Si el jugador se mueve, la cámara también se mueve, por lo que hacemos que el fondo siga el centro de la cámara horizontalmente (X), pero **mucho más lento** para dar un efecto de profundidad.\n\n Escribe la fórmula `CameraCenterX()/8`.", "pt": "Vamos fazer o fundo distante se mover,\n\n A maneira como fazemos isso é fazendo com que ele se mova em relação à posição da câmera.\n\n Se o jogador se mover, a câmera também se move, então fazemos o fundo seguir o centro da câmera horizontalmente (X), mas **muito mais devagar** para dar um efeito de profundidade.\n\n Digite a fórmula `CameraCenterX()/8`.", "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`", - "ar": "دعنا نصنع الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى موضع الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، أدخل الصيغة `CameraCenterX()/8`." + "ar": "دعنا نجعل الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى موضع الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، إدخال الصيغة `CameraCenterX()/8`." } }, "placement": "bottom" @@ -814,7 +815,7 @@ "es": "Selecciona la acción **Desplazamiento X de la imagen**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", - "ar": "تحديد الإجراء **Image X offset**." + "ar": "تحديد الإجراء **إزاحة الصورة أفقيًا**." } } }, @@ -833,7 +834,7 @@ "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -892,7 +893,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index ceb9f6e..ea33cc7 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -85,7 +85,7 @@ "es": "Este juego es un plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.", "pt": "Este jogo é um plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.", "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ", - "ar": "هذه لعبة منصات. الضغط على زر **معاينة** للعب.\nيمكنك تحريك الشخصية بواسطة مفاتيح الأسهم، والقفز بواسطة مفتاح المسافة." + "ar": "هذه لعبة منصات. الضغط على الزر **معاينة** للعب.\nيمكنك تحريك الشخصية بواسطة مفاتيح الأسهم، والقفز بواسطة مفتاح المسافة." } } } @@ -185,7 +185,7 @@ "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", - "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميه **كائن جاهز للاستخدام**." } } }, @@ -340,7 +340,7 @@ "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", - "ar": "تحديد هذه **الطبقة** لنتمكن من وضع القلوب الخاصة بنا داخلها." + "ar": "تحديد هذه **الطبقة** لنتمكن من إدراج القلوب الخاصة بنا داخلها." } }, "placement": "top" @@ -416,7 +416,7 @@ "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.", "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง", - "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بجزء من اللعبة الذي يمكن للاعبين رؤيته.\n\nوضع الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." + "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإدراج الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." } }, "placement": "top", @@ -458,7 +458,7 @@ "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)", - "ar": "دعنا نقوم بـ**إضافة إجراء** لتعريف عدد المحاولات التي ستُعرض على $(resourceBar)." + "ar": "دعنا نقوم ب**إضافة إجراء** لتعريف عدد المحاولات التي ستُعرض على $(resourceBar)." } } } @@ -653,7 +653,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 1208c2a..814dde5 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -157,7 +157,7 @@ "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น", - "ar": "حدد هذه **الطبقة** لنتمكن من وضع عصا التحكم الخاصة بنا داخلها." + "ar": "حدد هذه **الطبقة** لنتمكن من إدراج عصا التحكم الخاصة بنا داخلها." } }, "placement": "top" @@ -197,7 +197,7 @@ "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store", - "ar": "هذه اللعبة يمكن أن تُلعب بواسطة لوحة المفاتيح فقط، لذلك دعنا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصرللعثور على عصا تحكم جاهزة للاستخدام!" + "ar": "هذه اللعبة يمكن أن تُلعب بواسطة لوحة المفاتيح فقط، لذلك دعنا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصر للعثور على عصا تحكم جاهزة للاستخدام!" } } } @@ -258,7 +258,7 @@ "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", - "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميها **كائن جاهز للاستخدام**." + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميه **كائن جاهز للاستخدام**." } } }, @@ -296,7 +296,7 @@ "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง", - "ar": "دعنا نختار هذه البيضاء، سوف يتناسب جيدًا مع خلفيتنا." + "ar": "دعنا نختار هذه البيضاء، سوف تتناسب جيدًا مع خلفيتنا." } } } @@ -392,7 +392,7 @@ "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "وضع الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." + "ar": "إدراج الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." } }, "placement": "top", @@ -415,7 +415,7 @@ "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط, أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { @@ -443,7 +443,7 @@ "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "ar": "رؤية **سلوكيات الكائن** تأتي من هنا." + "ar": "رؤية **سلوكيات الكائن** من هنا." } }, "placement": "bottom" @@ -539,7 +539,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index b6922ab..018bea5 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -32,7 +32,7 @@ "es": "# ¡Has terminado de agregar un multiplicador de puntuación a tu juego!", "pt": "# Você terminou de adicionar um multiplicador de pontuação ao seu jogo!", "th": "คุณได้เพิ่ม score multiplier ในเกมของคุณสำเร็จแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -42,7 +42,7 @@ "es": "¡Bien hecho, en este tutorial aprendiste:", "pt": "Bem feito, neste tutorial você aprendeu:", "th": "ทำได้ดีเยี่ยม สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -52,7 +52,7 @@ "es": "- Cómo crear una variable de escena\n\n- Cómo actualizar una variable de escena\n\n- Cómo usar una variable de escena en una expresión", "pt": "- Como criar uma variável de cena\n\n- Como atualizar uma variável de cena\n\n- Como usar uma variável de cena em uma expressão", "th": "- วิธีสร้างตัวแปรของ scene\n\n- วิธีอัพเดทตัวแปรของ scene\n\n- วิธีใช้ตัวแปรของ scene ใน expression", - "ar": "- إنشاء متغير مشهد\n\n- تحديث متغير المشهد\n\n- استخدام متغير المشهد كتعبير" + "ar": "- إنشاء متغير مشهد\n\n- تحديث متغير المشهد\n\n- استخدام متغير المشهد كتعبير" } }, { @@ -62,7 +62,7 @@ "es": "¡Puedes seguir agregando cosas a este juego o publicarlo y compartirlo con tus amigos para ver quién obtiene la puntuación más alta!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo e compartilhá-lo com seus amigos para ver quem obtém a pontuação mais alta!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่กับเพื่อนๆของคุณเลยก็ได้ แล้วมาดูกัน ใครจะทำคะแนนได้สูงที่สุด!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -82,7 +82,7 @@ "es": "¡Este juego usa una tabla de clasificación! ¡**Inicia sesión** para que podamos configurarlo automáticamente!\n\nPuedes omitir este paso si no quieres usar una tabla de clasificación, cerrando el cuadro de diálogo de la tabla de clasificación.", "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!\n\nVocê pode pular esta etapa se não quiser usar uma tabela de classificação, fechando a caixa de diálogo da tabela de classificação.", "th": "เกมนี้ใช้ leaderboard! ให้เรา **เข้าสู่ระบบ** เพื่อที่จะตั้งค่า leaderboard ให้เราอัตโนมัติ!\n\nคุณสามารถข้ามขั้นตอนนี้ได้หากคุณไม่ต้องการใช้ leaderboard โดยการปิดกล่องโต้ตอบ leaderboard", - "ar": "هذه اللعبة تستخدم لوحة صدارة! دعنا نقوم بـ**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا كنت لا ترغب في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة." + "ar": "هذه اللعبة تستخدم لوحة صدارة! دعنا نقوم ب**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا كنت لا ترغب في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة." } }, "placement": "top" @@ -102,7 +102,7 @@ "es": "Primero, **creemos una tabla de clasificación** porque este juego la necesitará. ¡Tienes suerte, todo se configurará automáticamente para ti!", "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!", "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!", - "ar": "أولًا، دعنا نقوم بـ**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. أنت محظوظ، فكل شيء سيتم إعداده تلقائيًا لأجلك!" + "ar": "أولًا، دعنا نقوم ب**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. أنت محظوظ، فكل شيء سيتم إعداده تلقائيًا لأجلك!" } }, "placement": "top" @@ -121,7 +121,7 @@ "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", "th": "ปิดเมนู", - "ar": "دعنا نغلق القائمة." + "ar": "دعنا نغلق القائمة." } } }, @@ -137,7 +137,7 @@ "es": "¡Vamos!", "pt": "Vamos lá!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "ar": "لنبدأ!" } } }, @@ -150,7 +150,7 @@ "es": "¡Este juego se llama Plinko!Haz clic en el botón **Vista previa** para probarlo y gana puntos dependiendo de cuántos clavos golpees.", "pt": "Este jogo se chama Plinko! Clique no botão **Visualizar** para testá-lo e ganhe pontos dependendo de quantos pinos você acerta.", "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม", - "ar": "هذه اللعبة تسمى Plinko! الضغط على زر **معاينة** لإختبارها وجمع النقاط حسب عدد العارضات التي تضرب." + "ar": "هذه اللعبة تسمى Plinko! الضغط على الزر **معاينة** لإختبارها وجمع النقاط حسب عدد العارضات التي تضرب." } } } @@ -168,7 +168,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -189,7 +189,7 @@ "es": "¡Arrastra 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", "pt": "Arraste 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต", - "ar": "سحب 3 كائنات **$(multiplier)** إلى اللوحة ووضعها في مكان يمكن للكرة ضربها." + "ar": "سحب 3 كائنات **$(multiplier)** إلى اللوحة وإدراجها في مكان يمكن للكرة ضربها." } }, "touchDescription": { @@ -199,7 +199,7 @@ "es": "**Selecciona** y **arrastra** 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", "pt": "**Selecione** e **arraste** 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", "th": "**เลือก** และ **ลาก** 3 ชิ้น **$(multiplier)** จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต", - "ar": "**تحديد** و**سحب** 3 كائنات **$(multiplier)** إلى اللوحة ووضعها في مكان يمكن للكرة ضربها." + "ar": "**تحديد** و**سحب** 3 كائنات **$(multiplier)** إلى اللوحة وإدراجها في مكان يمكن للكرة ضربها." } }, "placement": "top" @@ -218,7 +218,7 @@ "es": "Una vez que hayas terminado, coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", "pt": "Uma vez que você terminou, coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", - "ar": "بمجرد أن تنتهي، وضع **$(scoreMultiplier)* أسفل *Score* لعرض نقاط المضاعِفات!" + "ar": "بمجرد أن تنتهي، إدراج **$(scoreMultiplier)* أسفل *Score* لعرض نقاط المضاعِفات!" } }, "touchDescription": { @@ -228,7 +228,7 @@ "es": "Una vez que hayas terminado, selecciona y coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", "pt": "Uma vez que você terminou, selecione e coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", "th": "เมื่อทำเสร็จแล้ว ให้เลือกและใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", - "ar": "بمجرد أن تنتهي، تحديد ووضع **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" + "ar": "بمجرد أن تنتهي، تحديد وإدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" } }, "placement": "bottom" @@ -248,7 +248,7 @@ "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una variable de escena! Abre el **Project Manager**", "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**", "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**", - "ar": "نحتاج إلى تخزين النقاط في مكان ما، دعنا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**" + "ar": "نحتاج إلى تخزين النقاط في مكان ما، دعنا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**" } }, "placement": "bottom" @@ -275,7 +275,7 @@ "es": "Haz **clic derecho** (o clic en el **botón de tres puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", "pt": "Clique com o **botão direito** (ou toque no *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", - "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على ($gameScene) وتحديد **تحرير متغيرات المشهد**." + "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على ($gameScene) وتحديد **تحرير متغيرات المشهد**." } }, "touchDescription": { @@ -285,7 +285,7 @@ "es": "Haz **pulsación larga** (o usa el **botón de 3 puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", "pt": "Pressione por **muito tempo** (ou use o *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", "th": "**กดค้าง** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", - "ar": "الضغط على *الثلاث نقاط*، أو **ضغطة مطولة** على ($gameScene) وتحديد **تحرير متغيرات المشهد**." + "ar": "الضغط على *الثلاث نقاط*، أو **ضغطة مطولة** على $(gameScene) وتحديد **تحرير متغيرات المشهد**." } }, "placement": "bottom" @@ -306,7 +306,7 @@ "es": "¡Agreguemos nuestra primera **variable**!", "pt": "Vamos adicionar nossa primeira **variável**!", "th": "มาเพิ่ม **ตัวแปร** แรกของเรากันเถอะ!", - "ar": "دعنا نقوم بإضافة أول **متغير** لنا!" + "ar": "دعنا نقوم بإضافة أول **متغير** لنا!" } } }, @@ -325,7 +325,7 @@ "es": "Nombramos esta variable `Multiplier`.", "pt": "Vamos nomear esta variável `Multiplier`.", "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multiplier`", - "ar": "دعنا نقوم بتسمية هذا المتغير `Multiplier`." + "ar": "دعنا نقوم بتسمية هذا المتغير `Multiplier`." } }, "placement": "bottom" @@ -345,7 +345,7 @@ "es": "Cambiamos su tipo a **Número**.", "pt": "Vamos mudar seu tipo para **Número**.", "th": "เปลี่ยนประเภทเป็น **ตัวเลข**", - "ar": "دعنا نقوم بتغيير النوع إلى **عدد**." + "ar": "دعنا نقوم بتغيير النوع إلى **عدد**." } }, "placement": "bottom" @@ -365,7 +365,7 @@ "es": "Y finalmente, cambiemos su valor inicial a **1**.", "pt": "E finalmente, vamos mudar seu valor inicial para **1**.", "th": "และสุดท้าย เปลี่ยนค่าเริ่มต้นเป็น **1**", - "ar": "وأخيرًا وليس آخرًا، دعنا نقوم بتغيير القيمة إلى **1**." + "ar": "وأخيرًا وليس آخرًا، دعنا نقوم بتغيير القيمة إلى **1**." } }, "placement": "bottom" @@ -385,7 +385,7 @@ "es": "¡Y listo! Cerramos esta ventana.", "pt": "E acabamos! Vamos fechar esta janela.", "th": "เสร็จแล้ว! ปิดหน้าต่างได้เลย", - "ar": "وها قد انتهينا! دعنا نغلق هذه." + "ar": "وها قد انتهينا! دعنا نغلق هذه." } } } @@ -403,7 +403,7 @@ "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", "th": "ปิดเมนู", - "ar": "دعنا نغلق القائمة." + "ar": "دعنا نغلق القائمة." } } }, @@ -422,7 +422,7 @@ "es": "Ahora activemos esos multiplicadores. Abre la **Hoja de eventos** de la escena $(gameScene).", "pt": "Agora vamos ativar esses multiplicadores. Vamos abra a **Folha de eventos** da cena $(gameScene).", "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)", - "ar": "الآن دعنا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene). " + "ar": "الآن دعنا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene). " } }, "placement": "bottom" @@ -442,7 +442,7 @@ "es": "Comenzaremos haciendo que el $(multiplier) desaparezca cuando sea golpeado por una $(ball). Haz clic en **agregar una condición** para empezar.", "pt": "Começaremos fazendo o $(multiplier) desaparecer ao ser atingido por uma $(ball). Clique em **adicionar uma condição** para iniciar.", "th": "ขั้นแรก เราจะทำให้ $(multiplier) หายไป เมื่อถูก $(ball) ชนครั้งหนึ่ง อีเวนท์พร้อมแล้ว ให้ **เพิ่มเงื่อนไข** ลงไป", - "ar": "سوف نبدأ بجعل الـ $(multiplier) تختفي عندما يضربها $(ball). الضغط على **إضافة شرط** للبدأ." + "ar": "سوف نبدأ بجعل الـ $(multiplier) تختفي عندما يضربها $(ball). الضغط على **إضافة شرط** للبدأ." } } } @@ -460,7 +460,7 @@ "es": "Seleccione **$(ball)**.", "pt": "Selecione **$(ball)**.", "th": "เลือก **$(ball)**", - "ar": "تحديد **$(ball)**." + "ar": "تحديد **$(ball)**." } } }, @@ -479,7 +479,7 @@ "es": "Seleccione la condición **Colisión**.", "pt": "Selecione a condição **Colisão**.", "th": "เลือกเงื่อนไข **การชนกัน**", - "ar": "تحديد الشرط **تصادم**." + "ar": "تحديد الشرط **تصادم**." } } }, @@ -498,7 +498,7 @@ "es": "Y seleccione nuestro **$(multiplier)**.", "pt": "E selecione nosso **$(multiplier)**.", "th": "เลือก **$(multiplier)**", - "ar": "وتحديد الـ **$(multiplier)** خاصتنا." + "ar": "وتحديد الـ **$(multiplier)** خاصتنا." } }, "placement": "top" @@ -518,7 +518,7 @@ "es": "Bien, nuestra **condición** está lista. Será **verdadera** cuando **$(ball) golpee el $(multiplier)**.", "pt": "Bem, nossa **condição** está pronta. Ela será **verdadeira** quando **$(ball) bater no $(multiplier)**.", "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**", - "ar": "حسنًا، إن **شرطنا** مستعد، هذا ***الشرط** سيكون **صحيحًا** عندما ** تلمس الـ $(ball) الـ $(multiplier)**." + "ar": "حسنًا، إن **شرطنا** مستعد، هذا ***الشرط** سيكون **صحيحًا** عندما ** تلمس الـ $(ball) الـ $(multiplier)**." } }, "placement": "top" @@ -537,7 +537,7 @@ "es": "Hagamos que nuestro multiplicador desaparezca con una **acción** ahora.", "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora.", "th": "ทำให้ multiplier หายไป โดยใช้ **การกระทำ**", - "ar": "دعنا نقوم بجعل مضاعِفاتنا الآن تختفي بواسطة **إجراء**." + "ar": "دعنا نقوم بجعل مضاعِفاتنا الآن تختفي بواسطة **إجراء**." } } } @@ -555,7 +555,7 @@ "es": "Seleccione **$(multiplier)**.", "pt": "Selecione **$(multiplier)**.", "th": "เลือก **$(multiplier)**", - "ar": "تحديد **$(multiplier)**." + "ar": "تحديد **$(multiplier)**." } } }, @@ -574,7 +574,7 @@ "es": "Haremos que **$(multiplier)** desaparezca en caso de colisión.", "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão.", "th": "เราจะทำให้ **$(multiplier)** หายไปเมื่อมีการชนกัน", - "ar": "سوف نجعل **$(multiplier) تختفي مع التصادم." + "ar": "سوف نجعل **$(multiplier) تختفي مع التصادم." } } }, @@ -593,7 +593,7 @@ "es": "Es importante tomar en cuenta que solo el $(multiplier) que sea tocado por la $(ball) (coincida con nuestra condición) será eliminado. Este principio se llama **elección de objeto**.\n\nCerraremos esta ventana.", "pt": "É importante notar que apenas o $(multiplier) que for atingido pela $(ball) (que corresponder à nossa condição) será excluído. Esse princípio é chamado de **escolha de objeto**.\n\nVamos fechar esta janela.", "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้", - "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nدعنا نغلق هذه." + "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nدعنا نغلق هذه." } }, "placement": "top" @@ -612,7 +612,7 @@ "es": "¡Ahora, **reproducimos un sonido** cuando se recolecta!", "pt": "Agora, **reproduzimos um som** quando é coletado!", "th": "ทีนี้มาเพิ่มการ **เล่นเสียง** เมื่อมีการเก็บ!", - "ar": "الآن دعنا نقوم بـ**تشغيل صوت** عندما يتم جمع المضاعِفات!" + "ar": "الآن دعنا نقوم ب**تشغيل صوت** عندما يتم جمع المضاعِفات!" } } } @@ -630,7 +630,7 @@ "es": "Busque **sonido**.", "pt": "Procure **som**.", "th": "ค้นหา **sound**", - "ar": "البحث عن **صوت**." + "ar": "البحث عن **صوت**." } } }, @@ -649,7 +649,7 @@ "es": "Seleccione la acción **Reproducir un sonido**.", "pt": "Selecione a ação **Reproduzir um som**.", "th": "เลือกการกระทำ **เล่นเสียง**", - "ar": "تحديد الإجراء **تشغيل صوت**." + "ar": "تحديد الإجراء **تشغيل صوت**." } } }, @@ -668,7 +668,7 @@ "es": "Haga clic en el campo para ver las opciones y seleccione **ClickerBeep2.wav**.", "pt": "Clique no campo para ver as opções e selecione **ClickerBeep2.wav**.", "th": "คลิกที่ field เพื่อดูตัวเลือก แล้วเลือก **ClickerBeep2.wav**", - "ar": "الضغط على الحقل لرؤية الخيارات، وتحديد **ClickerBeep2.wav**." + "ar": "الضغط على الحقل لرؤية الخيارات، وتحديد **ClickerBeep2.wav**." } }, "placement": "top" @@ -688,7 +688,7 @@ "es": "¡Bien, ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!", "th": "เอาล่ะ ทีนี้เสียงก็จะเล่นเมื่อ $(ball) เก็บ $(multiplier) แล้ว!", - "ar": "حسنًا، الآن سيتم تشغيل الصوت عندما تجمع الـ $(ball) الـ $(multiplier)!" + "ar": "حسنًا، الآن سيتم تشغيل الصوت عندما تجمع الـ $(ball) الـ $(multiplier)!" } }, "placement": "top" @@ -707,7 +707,7 @@ "es": "Actualicemos nuestra **variable** en consecuencia.", "pt": "Atualizemos nossa **variável** em conformidade.", "th": "ทำการ **อัพเดทตัวแปร**", - "ar": "دعنا نقوم بـ**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها." + "ar": "دعنا نقوم ب**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها." } } } @@ -725,7 +725,7 @@ "es": "Busque **variable de escena**.", "pt": "Procure **variável de cena**.", "th": "ค้นหา **ตัวแปรของ scene", - "ar": "البحث عن **متغير المشهد**." + "ar": "البحث عن **متغير المشهد**." } } }, @@ -744,7 +744,7 @@ "es": "Nuestro multiplicador es un número, por lo que seleccionemos la acción **Cambiar variable numérica**.", "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**.", "th": "multiplier ของเราเป็นตัวเลข ดังนั้นเลือกการกระทำ **เปลี่ยนตัวเลขตัวแปร**", - "ar": "مضاعِفاتنا عبارة عن عدد، لذلك دعنا نقوم بتحديد الإجراء **تغيير متغير عدد**." + "ar": "مضاعِفاتنا عبارة عن عدد، لذلك دعنا نقوم بتحديد الإجراء **تغيير متغير عدد**." } } }, @@ -763,7 +763,7 @@ "es": "Seleccione la variable que creamos anteriormente, **Multiplier**.", "pt": "Selecione a variável que criamos anteriormente, **Multiplier**.", "th": "เลือกตัวแปรที่เราสร้าง **Multiplier**", - "ar": "تحديد المتغير الذي قمنا بإنشائه في البداية (**Multiplier**)." + "ar": "تحديد المتغير الذي قمنا بإنشائه في البداية (**Multiplier**)." } }, "placement": "top" @@ -783,7 +783,7 @@ "es": "Queremos aumentar el multiplicador, así que seleccionemos **+ (agregar)**.", "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**.", "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**", - "ar": "نحن نريد أن نزيد المضاعِفات، لذلك دعنا نقوم بتحديد **+ (زائد)**." + "ar": "نحن نريد أن نزيد المضاعِفات، لذلك دعنا نقوم بتحديد **+ (زائد)**." } }, "placement": "bottom" @@ -803,7 +803,7 @@ "es": "Ingrese **1**.", "pt": "Digite **1**.", "th": "ใส่ **1**", - "ar": "دعنا نقوم بإدخال **1**." + "ar": "دعنا نقوم بإدخال **1**." } }, "placement": "bottom" @@ -823,7 +823,7 @@ "es": "¡Bien, ahora nuestra variable de escena **Multiplier** **aumentará en 1** cada vez que la $(ball) recolecte un $(multiplier)!", "pt": "Ótimo, agora nossa variável de cena **Multiplier** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!", "th": "เอาล่ะ ทีนี้ตัวแปร scene **Multiplier** ก็จะ **เพิ่มขึ้นทีละ 1** ทุกครั้งที่ **$(ball) เก็บ $(multiplier)**", - "ar": "حسنًا، الآن متغير المشهد **Multiplier** سوف **يزداد بمقدار 1** في كل مرة **تقوم الـ $(ball) بجمع الـ $(multiplier)**." + "ar": "حسنًا، الآن متغير المشهد **Multiplier** سوف **يزداد بمقدار 1** في كل مرة **تقوم الـ $(ball) بجمع الـ $(multiplier)**." } }, "placement": "top" @@ -842,7 +842,7 @@ "es": "Agreguemos un poco de sabor y **creemos partículas** cuando el **$(multiplier)** es recolectado.", "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado.", "th": "เพิ่มความน่าตื่นเต้นโดย **สร้าง particles** เมื่อ **$(multiplier)** ถูกเก็บ", - "ar": "دعنا نقوم بإضافة بعض المؤثرات و**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**." + "ar": "دعنا نقوم بإضافة بعض المؤثرات و**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**." } } } @@ -860,8 +860,8 @@ "es": "Busque **Crear**.", "pt": "Procure por **Criar**.", "th": "ค้นหา **สร้าง**", - "ar": "البحث عن **إنشاء**." - } + "ar": "البحث عن **إنشاء**." + } } }, "isOnClosableDialog": true @@ -879,7 +879,7 @@ "es": "Vamos a **crear algunas partículas** que hemos preparado para usted, elija la acción **Crear un objeto**.", "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**.", "th": "เราจะ **สร้าง some particles** เราเตรียมเอาไว้ให้คุณแล้ว เลือกการกระทำ **สร้างวัตถุ**", - "ar": "سوف نقوم بـ**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن جديد**." + "ar": "سوف نقوم بـ**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن جديد**." } } }, @@ -898,7 +898,7 @@ "es": "Seleccione las partículas que hemos preparado, **$(particles)**.", "pt": "Selecione as partículas que preparamos, **$(particles)**.", "th": "เลือก **$(particles)** ที่เตรียมไว้", - "ar": "تحديد الجسيمات التي حضرناها (**$(particles)**)." + "ar": "تحديد الجسيمات التي حضرناها (**$(particles)**)." } }, "placement": "top" @@ -918,7 +918,7 @@ "es": "Hagamos que aparezcan donde estaba el multiplicador,\n\ningrese `$(multiplier).X()`.", "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`.", "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`", - "ar": "دعنا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X`." + "ar": "دعنا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X`." } }, "placement": "bottom" @@ -938,7 +938,7 @@ "es": "Y `$(multiplier).Y()`.", "pt": "E `$(multiplier).Y()`.", "th": "และ `$(multiplier).Y()`", - "ar": "بالإضافة إلى `$(multiplier).Y`." + "ar": "و`$(multiplier).Y`." } }, "placement": "bottom" @@ -958,7 +958,7 @@ "es": "¡Bien! Nuestras **$(particles)** serán **creadas** exactamente donde estaba el **$(multiplier)**, ¡lo que dará un buen efecto!", "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!", "th": "ดีมาก! **$(particles)** ของเราจะ **ถูกสร้าง** ที่ตำแหน่งของ **$(multiplier)** เป็นเอฟเฟกต์ที่เพิ่มคุณภาพกราฟฟิกได้!", - "ar": "جميل! الـ **$(particles)** خاصتنا سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!" + "ar": "جميل! الـ **$(particles)** خاصتنا سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!" } }, "placement": "top" @@ -977,7 +977,7 @@ "es": "¡Finalmente, debemos asegurarnos de que el **$(scoreMultiplier)** que hemos colocado en la escena se actualice en consecuencia!", "pt": "Finalmente, precisamos nos certificar de que o **$(scoreMultiplier)** que colocamos na cena seja atualizado de acordo!", "th": "ขั้นสุดท้าย เราต้องการที่จะแน่ใจว่า **$(scoreMultiplier)** ที่เราใส่ใน scene จะต้องอัพเดทอย่างสอดคล้อง!", - "ar": "وأخيرًا وليس آخرًا، نحتاج أن نتحقق أن الـ **$(scoreMultiplier)** التي وضعناها في المشهد ستحدث متوافقةً مع المضاعِفات التي تم جمعها!" + "ar": "وأخيرًا وليس آخرًا، نحتاج أن نتحقق أن الـ **$(scoreMultiplier)** التي أدرجناها في المشهد سيتم تحديثها متوافقةً مع المضاعِفات التي تم جمعها!" } } } @@ -995,7 +995,7 @@ "es": "Busque **Modificar**.", "pt": "Procure por **Modificar**.", "th": "ค้นหา **แก้ไข**", - "ar": "البحث عن **تعديل**." + "ar": "البحث عن **تعديل**." } } }, @@ -1014,7 +1014,7 @@ "es": "Vamos a **Modificar el texto** que colocamos en la pantalla anteriormente.", "pt": "Vamos **Modificar o texto** que colocamos na tela anteriormente.", "th": "เราจะ **แก้ไขข้อความ** ที่เราวางไว้ใน scene ก่อนหน้านี้", - "ar": "سوف نقوم بـ**تعديل النص** الذي وضعناه في الشاشة بالبداية." + "ar": "سوف نقوم ب**تعديل النص** الذي أدرجناه في الشاشة بالبداية." } } }, @@ -1031,7 +1031,7 @@ "en": "Select the text object **$(scoreMultiplier)**.", "fr": "Sélectionnez l'objet texte **$(scoreMultiplier)**.", "th": "เลือกวัตถุข้อความ **$(scoreMultiplier)**", - "ar": "تحديد الكائن النصي **$(scoreMultiplier)**." + "ar": "تحديد الكائن النصي **$(scoreMultiplier)**." } }, "placement": "bottom" @@ -1051,7 +1051,7 @@ "es": "Queremos actualizar el texto por completo, así que seleccionemos **= (establecer en)**.", "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**.", "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نحن نريد تحديث النص بالكامل، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نحن نريد تحديث النص بالكامل، لذلك دعنا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -1071,7 +1071,7 @@ "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+VariableString(Multiplier)`.", "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`.", "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`", - "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x1، x2، إلخ... لذلك دعنا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+VariableString(Multiplier)`." + "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x1، x2، إلخ... لذلك دعنا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+VariableString(Multiplier)`." } }, "placement": "bottom" @@ -1091,7 +1091,7 @@ "es": "¡Bien! ¡nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!", "th": "ดีมาก! **$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ", - "ar": "جميل! الـ **$(scoreMultiplier)** خاصتنا سوف يتم تحديثها بفضل **متغير المضاعِفات** الذي حولناه إلى نص!" + "ar": "جميل! الـ **$(scoreMultiplier)** خاصتنا سوف يتم تحديثها بفضل **المتغير Multiplier** الذي حولناه إلى نص!" } }, "placement": "top" @@ -1110,7 +1110,7 @@ "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. **Cerramos el grupo Multiplicador de puntuación** con la flecha a la izquierda.", "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **fechar o grupo Multiplicador de pontuação** com a seta à esquerda.", "th": "สุดท้ายเราจะนำตัวแปร Multiplier มาใช้ในการคำนวณคะแนน ให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", - "ar": "وأخيرًا وليس آخرًا، نحن نحتاج من مضاعِفاتنا أن تحصى عندما يتم حساب النتيجة، دعنا **نطوي المجموعة Score multiplier** بواسطة السهم على اليسار." + "ar": "وأخيرًا وليس آخرًا، نحن نحتاج من مضاعِفاتنا أن تُحصى عندما يتم حساب النتيجة، دعنا **نطوي المجموعة Score multiplier** بواسطة السهم على اليسار." } }, "placement": "bottom" @@ -1129,7 +1129,7 @@ "es": "Y **desplegamos el grupo Tocando plots** con la flecha a la izquierda.", "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda.", "th": "และให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", - "ar": "ودعنا نقوم بـ**توسيع المجموعة Hitting pegs** بواسطة السهم على اليسار." + "ar": "ودعنا نقوم ب**توسيع المجموعة Hitting pegs** بواسطة السهم على اليسار." } }, "placement": "bottom" @@ -1148,7 +1148,7 @@ "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **dando doble clic en ella**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!", - "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النقاط عن طريق **النقر المزدوج عليه**!" + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه**!" } }, "touchDescription": { @@ -1158,7 +1158,7 @@ "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", - "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النقاط عن طريق **الضغط عليه مرتين**!" + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين**!" } } } @@ -1176,7 +1176,7 @@ "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Variable(Multiplier)`.", "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`.", "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`", - "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nدعنا نقوم بإدخال `1*Variable(Multiplier)`." + "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nدعنا نقوم بإدخال `1*Variable(Multiplier)`." } }, "placement": "bottom" @@ -1196,7 +1196,7 @@ "es": "¡Esto hará que nuestra puntuación se actualice de acuerdo con el multiplicador! Guardemos.", "pt": "Isso fará com que nossa pontuação seja atualizada de acordo com o multiplicador! Salve.", "th": "ทีนี้คะแนนของเราจะอัพเดทได้อย่างสอดคล้องแล้ว! มาบันทึกกันเถอะ", - "ar": "هذا سيجعل نتيجتنا تحدث وفقًا للمضاعِفات! هيّا نحفظ." + "ar": "هذا سيجعل نتيجتنا تُحدّث وفقًا للمضاعِفات! هيّا نحفظ." } }, "placement": "top" @@ -1215,7 +1215,7 @@ "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง", - "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النقاط عن طريق **النقر المزدوج عليه** مجددًا." + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه** مجددًا." } }, "touchDescription": { @@ -1225,7 +1225,7 @@ "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", - "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النقاط عن طريق **الضغط عليه مرتين** مجددًا." + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين** مجددًا." } } } @@ -1243,7 +1243,7 @@ "es": "Ahora vamos a hacer exactamente lo mismo, excepto que la puntuación dada sera 2,\n\ningresamos `2 * Variable(Multiplier)`.", "pt": "Hora faremos exatamente a mesma coisa, exceto que a pontuação dada sera 2,\n\ndigitar `2 * Variable(Multiplier)`.", "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`", - "ar": "الآن سوف نقوم بنفس الشيء تمامًا، باستثناء أن النتيجة المعطاة ستكون الضعف،\n\nإدخال `2 * Variable(Multiplier)`." + "ar": "الآن سوف نقوم بنفس الشيء تمامًا، باستثناء أن النتيجة المعطاة ستكون الضعف،\n\nإدخال `2 * Variable(Multiplier)`." } }, "placement": "bottom" @@ -1263,7 +1263,7 @@ "es": "¡Ahora cerramos esto!", "pt": "Agora vamos fechar isso!", "th": "ปิดหน้าต่างได้เลย!", - "ar": "الآن دعنا نغلق هذا." + "ar": "الآن دعنا نغلق هذا." } }, "placement": "top" @@ -1282,7 +1282,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 3c6fb39..3c56a74 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -24,7 +24,7 @@ "es": "# ¡Has terminado esta lección!", "pt": "# Você terminou esta lição!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "ar": "# لقد أنهيت هذا الدرس!" } }, { @@ -34,7 +34,7 @@ "es": "¡Bien hecho, en este tutorial aprendiste:", "pt": "Bem feito, neste tutorial você aprendeu:", "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" } }, { @@ -44,7 +44,7 @@ "es": "- Crear un texto\n\n- Crear y comenzar un temporizador\n\n- Utilizar el valor de un temporizador para actualizar un texto", "pt": "- Crie um texto\n\n- Crie e inicie um cronômetro\n\n- Use o valor de um cronômetro para atualizar um texto", "th": "- สร้างข้อความ\n\n- สร้างและเริ่มต้นตัวจับเวลา\n\n- ใช้ค่าของตัวจับเวลาเพื่ออัปเดตข้อความ", - "ar": "- إنشاء نص\n\n- إنشاء وتشغيل مؤقت\n\n- استخدام قيمة المؤقت لتحديث النص" + "ar": "- إنشاء نص\n\n- إنشاء وتشغيل مؤقت\n\n- استخدام قيمة المؤقت لتحديث النص" } }, { @@ -54,7 +54,7 @@ "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" } } ] @@ -71,7 +71,7 @@ "es": "¡Vamos!", "pt": "Vamos lá!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "ar": "لنبدأ!" } } }, @@ -84,7 +84,7 @@ "es": "¡Este juego es bastante simple! Utiliza tu ratón o dedo para arrastrar la llave al agujero de la llave, ¡mientras te mantienes dentro del camino! Haz clic en el botón **previsualización** para probarlo.", "pt": "Este jogo é bastante simples! Use seu mouse ou dedo para arrastar a chave para a fechadura, enquanto permanece dentro do caminho! Clique no botão **pré-visualização** para experimentá-lo.", "th": "เกมนี้เป็นเกมง่ายๆ! ใช้เมาส์หรือนิ้วเพื่อลากกุญแจไปยังช่องกุญแจในขณะที่ยังอยู่ในเส้นทาง! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อลองเล่น", - "ar": "هذه اللعبة بسيطة قليلًا! استخدام الفأرة أو إصبعك لسحب المفتاح إلى الفوهة مع البقاء داخل المسار! الضغط على زر **معاينة** للتجربة." + "ar": "هذه اللعبة بسيطة قليلًا! استخدام الفأرة أو إصبعك لسحب المفتاح إلى الفوهة مع البقاء داخل المسار! الضغط على الزر **معاينة** للتجربة." } } } @@ -102,7 +102,7 @@ "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -122,7 +122,7 @@ "es": "Primero, creemos un texto para mostrar el tiempo que se ha pasado jugando al nivel. Haga clic en el botón **Agregar nuevo objeto**.", "pt": "Primeiro, vamos criar um texto para exibir o tempo gasto jogando o nível. Clique no botão **Adicionar novo objeto**.", "th": "เริ่มต้นกันด้วยการสร้างข้อความเพื่อแสดงเวลาที่ใช้ในการเล่นเกม คลิกที่ปุ่ม **เพิ่มวัตถุใหม่**", - "ar": "أولًا، دعنا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضى في لعب هذه المرحلة. الضغط على زر **إضافة كائن جديد**. " + "ar": "أولًا، دعنا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضي في لعب هذه المرحلة. الضغط على الزر **إضافة كائن جديد**. " } }, "placement": "top" @@ -141,7 +141,7 @@ "es": "Vamos a crear un texto desde cero.", "pt": "Vamos criar um texto do zero.", "th": "เราจะสร้างข้อความใหม่", - "ar": "سوف نقوم بإنشاء نص من الصفر." + "ar": "سوف نقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -162,7 +162,7 @@ "es": "Seleccione el objeto **Texto**", "pt": "Selecione o objeto **Texto**", "th": "เลือกวัตถุ **ข้อความ**", - "ar": "تحديد الكائن **نص**" + "ar": "تحديد الكائن **نص**" } }, "placement": "bottom" @@ -182,7 +182,7 @@ "es": "Cambie el nombre del objeto a **Score**.", "pt": "Mude o nome do objeto para **Score**.", "th": "เปลี่ยนชื่อวัตถุเป็น **Score**", - "ar": "تغيير اسم الكائن إلى **Score**." + "ar": "تغيير اسم الكائن إلى **Score**." } }, "placement": "bottom" @@ -202,7 +202,7 @@ "es": "Cambie el tamaño de fuente a **50**.", "pt": "Mude o tamanho da fonte para **50**.", "th": "เปลี่ยนขนาดตัวอักษรเป็น **50**", - "ar": "تغيير حجم الخط إلى **50**." + "ar": "تغيير حجم الخط إلى **50**." } }, "placement": "bottom" @@ -222,7 +222,7 @@ "es": "Cambie el texto inicial a **0**, ¡y lo actualizaremos más tarde!", "pt": "Mude o texto inicial para **0**, e atualizaremos mais tarde!", "th": "เปลี่ยนข้อความเริ่มต้นเป็น **0** และเราจะอัปเดตมันในภายหลัง!", - "ar": "تغيير حالة النص إلى **0**، وسنقوم بتحديثها لاحقًا!" + "ar": "تغيير حالة النص إلى **0**، وسنقوم بتحديثها لاحقًا!" } }, "placement": "bottom" @@ -242,7 +242,7 @@ "es": "Hemos terminado.", "pt": "Terminamos.", "th": "เราเสร็จแล้ว", - "ar": "انتهينا." + "ar": "انتهينا." } } }, @@ -263,7 +263,7 @@ "es": "Arrastre $(scoreText) al **escenario**.", "pt": "Arraste $(scoreText) para a **cena**.", "th": "ลาก $(scoreText) ไปยัง **ฉาก**", - "ar": "سحب $(scoreText) إلى **المشهد**." + "ar": "سحب $(scoreText) إلى **المشهد**." } }, "touchDescription": { @@ -273,7 +273,7 @@ "es": "**Seleccione** y **arrastrar** $(scoreText) al **escenario**.", "pt": "**Selecione** e **arraste** $(scoreText) para a **cena**.", "th": "**เลือก** แล้ว **ลาก** $(scoreText) ไปยัง **ฉาก**", - "ar": "**تحديد** ثم **سحب** الـ $(scoreText) إلى **المشهد**." + "ar": "**تحديد** ثم **سحب** الـ $(scoreText) إلى **المشهد**." } }, "placement": "top" @@ -288,7 +288,7 @@ "es": "He terminado", "pt": "Terminei", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "ar": "انتهيت" } } }, @@ -301,7 +301,7 @@ "es": "Coloque $(scoreText) en la parte superior derecha de la pantalla, para que el jugador pueda ver su puntuación mientras juega.\n\nCuando hayas terminado, haz clic en el botón de abajo.", "pt": "Coloque $(scoreText) no canto superior direito da tela, para que o jogador possa ver sua pontuação enquanto joga.\n\nQuando terminar, clique no botão abaixo.", "th": "วาง $(scoreText) ที่ด้านบนขวาของหน้าจอ เพื่อให้ผู้เล่นสามารถเห็นคะแนนของตนเองขณะเล่นได้\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "وضع الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية نقاطهم أثناء اللعب. \n\nعندما تنتهي، الضغط على الزر أدناه." + "ar": "إدراج الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية وقتهم الذي قضوه في اللعب. \n\nعندما تنتهي، الضغط على الزر أدناه." } }, "placement": "top", @@ -323,7 +323,7 @@ "es": "¡Ahora, **actualicemos este texto con un temporizador**! **Abramos la hoja de eventos** de su escena $(gameScene).", "pt": "Agora, **atualizemos este texto com um temporizador**! **Abra a Planilha de Eventos** de sua cena $(gameScene).", "th": "ตอนนี้ **อัปเดตข้อความนี้ด้วยตัวจับเวลา**! **เปิดแผ่นงานเหตุการณ์** ของฉากของคุณ $(gameScene)", - "ar": "الآن دعنا نقوم بـ**تحديث هذا النص مع المؤقت**! دعنا نقوم بـ**فتح صفحة الأحداث** لمشهدك $(gameScene)." + "ar": "الآن دعنا نقوم ب**تحديث هذا النص مع المؤقت**! دعنا نقوم ب**فتح صفحة الأحداث** لمشهدك $(gameScene)." } }, "placement": "bottom" @@ -343,7 +343,7 @@ "es": "Agreguemos una **condición** para detectar cuando comienza el juego.", "pt": "Vamos **adicionar uma condição** para detectar quando o jogo começa.", "th": "เพิ่ม **เงื่อนไข** เพื่อตรวจสอบเมื่อเกมเริ่มต้น", - "ar": "دعنا نقوم بـ**إضافة شرط** لكشف وقت بدء اللعبة." + "ar": "دعنا نقوم ب**إضافة شرط** لكشف وقت بدء اللعبة." } } } @@ -361,7 +361,7 @@ "es": "Busque **Escena**.", "pt": "Procure por **Cena**.", "th": "ค้นหา **ฉาก**", - "ar": "البحث عن **مشهد**." + "ar": "البحث عن **مشهد**." } } }, @@ -380,7 +380,7 @@ "es": "Comenzaremos nuestro temporizador cuando comience la escena, gracias a la condición **Al comienzo de la escena**.", "pt": "Vamos iniciar nosso temporizador quando a cena começar, graças à condição **No início da cena**.", "th": "เราจะเริ่มต้นตัวจับเวลาเมื่อฉากเริ่มต้น โดยขอบคุณเงื่อนไข **เริ่มต้นฉาก**", - "ar": "سوف نبدأ مؤقتنا عندما يبدأ المشهد، بفضل الشرط **في بداية المشهد**." + "ar": "سوف يبدأ مؤقتنا عندما يبدأ المشهد، بفضل الشرط **في بداية المشهد**." } } }, @@ -399,7 +399,7 @@ "es": "Ahora creemos el temporizador.", "pt": "Vamos criar o temporizador agora.", "th": "เราจะสร้างตัวจับเวลาตอนนี้", - "ar": "سوف نقوم بإنشاء المؤقت الآن." + "ar": "سوف نقوم بإنشاء المؤقت الآن." } }, "placement": "top" @@ -418,7 +418,7 @@ "es": "Crea una **acción**.", "pt": "Crie uma **ação**.", "th": "สร้าง **การกระทำ**", - "ar": "إضافة **إجراء**." + "ar": "إضافة **إجراء**." } } } @@ -436,7 +436,7 @@ "es": "Busque **temporizador**.", "pt": "Procure por **Cronômetro**.", "th": "ค้นหา **ตัวจับเวลาฉาก**", - "ar": "البحث عن **مؤقت المشهد**." + "ar": "البحث عن **مؤقت المشهد**." } } }, @@ -455,7 +455,7 @@ "es": "Seleccione la acción **Iniciar (o reiniciar) un temporizador de escena**.", "pt": "Selecione a ação **Iniciar (ou reiniciar) um cronômetro de cena**.", "th": "เลือก **เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลาฉาก**", - "ar": "تحديد الإجراء **بدء (أو إعادة تعيين) مؤقت المشهد**." + "ar": "تحديد الإجراء **بدء (أو إعادة تعيين) مؤقت المشهد**." } } }, @@ -474,7 +474,7 @@ "es": "Este temporizador se creará, llamémoslo **\"GameTimer\"** (entre comillas).", "pt": "Este cronômetro será criado, vamos chamá-lo de **\"GameTimer\"** (entre aspas).", "th": "ตัวจับเวลานี้จะถูกสร้าง ให้เราตั้งชื่อว่า **\"GameTimer\"** (ในเครื่องหมายคำพูด)", - "ar": "سوف يتم إنشاء المؤقت، فلنسميه**\"GameTimer\"** (داخل علامتا تنصيص)." + "ar": "سوف يتم إنشاء المؤقت، فلنسميه **\"GameTimer\"** (داخل علامتا تنصيص)." } } }, @@ -494,7 +494,7 @@ "es": "¡Hemos terminado! Nuestro temporizador comenzará cuando comience la escena.", "pt": "Terminamos! Nosso cronômetro começará quando a cena começar.", "th": "เราจบแล้ว! ตัวจับเวลาของเราจะเริ่มต้นเมื่อฉากเริ่มต้น", - "ar": "انتهينا! مؤقتنا سوف يبدأ وقتما يبدأ المشهد." + "ar": "انتهينا! مؤقتنا سوف يبدأ وقتما يبدأ المشهد." } }, "placement": "top" @@ -513,7 +513,7 @@ "es": "Ahora actualicemos la puntuación gracias al temporizador.", "pt": "Agora vamos atualizar a pontuação graças ao cronômetro.", "th": "ตอนนี้เราจะอัปเดตคะแนนของเราโดยใช้ตัวจับเวลา", - "ar": "الآن دعنا نقوم بتحديث النقاط بفضل المؤقت." + "ar": "الآن دعنا نقوم بتحديث النص بفضل المؤقت." } } } @@ -531,7 +531,7 @@ "es": "Seleccione $(scoreText).", "pt": "Selecione $(scoreText).", "th": "เลือก $(scoreText)", - "ar": "تحديد $(scoreText)." + "ar": "تحديد $(scoreText)." } } }, @@ -550,7 +550,7 @@ "es": "Cambiamos el texto.", "pt": "Vamos alterar o texto.", "th": "เราจะเปลี่ยนข้อความ", - "ar": "سوف نقوم بتغيير النص." + "ar": "سوف نقوم بتغيير النص." } } }, @@ -569,7 +569,7 @@ "es": "Seleccione **= (establecer en)**.", "pt": "Selecione **= (definir como)**.", "th": "เลือก **= (ตั้งค่าเป็น)**", - "ar": "تحديد **= (تعيين إلى)**." + "ar": "تحديد **= (تعيين إلى)**." } } }, @@ -589,7 +589,7 @@ "es": "Ahora, usemos el valor del temporizador.", "pt": "Agora, vamos usar o valor do cronômetro.", "th": "ตอนนี้เราจะใช้ค่าของตัวจับเวลา", - "ar": "والآن، دعنا نستخدم قيمة المؤقت." + "ar": "والآن، دعنا نستخدم قيمة المؤقت." } }, "placement": "bottom" @@ -609,7 +609,7 @@ "es": "Busque **Temporizador**", "pt": "Procure por **Cronômetro**", "th": "ค้นหา **ตัวจับเวลา**", - "ar": "البحث عن **مؤقت**." + "ar": "البحث عن **مؤقت**." } }, "placement": "top" @@ -629,7 +629,7 @@ "es": "Seleccione **Valor de un temporizador de escena**.", "pt": "Selecione **Valor de um cronômetro de cena**.", "th": "เลือก **ค่าของตัวจับเวลาของฉาก**", - "ar": "تحديد **قيمة مؤقت المشهد**." + "ar": "تحديد **قيمة مؤقت المشهد**." } }, "placement": "bottom" @@ -649,7 +649,7 @@ "es": "Seleccione el temporizador que acabamos de crear, **\"GameTimer\"**.", "pt": "Selecione o cronômetro que acabamos de criar, **\"GameTimer\"**.", "th": "เลือกตัวจับเวลาที่เราสร้างไว้เมื่อสักครู่ที่แล้ว **\"GameTimer\"**", - "ar": "تحديد المؤقت الذي قمنا بإنشائه للتو (**\"GameTimer\"**)." + "ar": "تحديد المؤقت الذي قمنا بإنشائه للتو (**\"GameTimer\"**)." } }, "placement": "top" @@ -669,7 +669,7 @@ "es": "Estamos bien.", "pt": "Estamos bem.", "th": "เรียบร้อยแล้ว", - "ar": "نحن على الطريق الصحيح." + "ar": "نحن على الطريق الصحيح." } }, "placement": "top" @@ -689,7 +689,7 @@ "es": "¡Bien, detalle final! Si lo dejamos así, el texto de la puntuación mostrará los decimales de nuestro temporizador y solo queremos los segundos.\n\n¡**Redondeemos** ese número!\n\nAgreguemos la función `round()` alrededor del valor para que podamos redondear el valor del temporizador. El resultado se verá así:\n\n`\"ToString(round( TimerElapsedTime(\"GameTimer\")))`", "pt": "Bem, detalhe final! Se deixarmos assim, o texto da pontuação exibirá os decimais do nosso cronômetro e só queremos os segundos!\n\nVamos **arredondar** esse número.\n\nVamos adicionar a função `round()` ao redor do valor para que possamos arredondar o valor do cronômetro. O resultado será assim:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", "th": "ดี รายละเอียดสุดท้าย! ถ้าเราเหลืออย่างนี้ ข้อความคะแนนจะแสดงทศนิยมของตัวจับเวลาของเราและเราต้องการเฉพาะวินาที!\n\nเราจะ **ปัดเศษ** ตัวเลขนั้น\n\nเราจะเพิ่มการใช้ฟังก์ชัน `round()` รอบค่าเพื่อที่เราจะปัดเศษค่าของตัวจับเวลา ผลลัพธ์จะเป็นแบบนี้\n\n`ToString(round(TimerElapsedTime(\"GameTimer\")))`", - "ar": "حسنًا، نحن في التفاصيل النهائية! إذا تركناها هكذا، نص النقاط سيعرض أرقامًا عشرية ونحن نريد الثواني فقط!\n\nدعنا نقوم بـ**تقريب** ذاك الرقم.\n\nدعنا نستخدم التعبير `round()` حول القيمة حتى يتم تقريب قيمة المؤقت. سوف تصبح هكذا:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" + "ar": "حسنًا، نحن في التفاصيل النهائية! إذا تركناها هكذا، سيعرض النص أرقامًا عشرية ونحن نريد الثواني فقط!\n\nدعنا نقوم ب**تقريب** ذاك الرقم.\n\nدعنا نستخدم التعبير `round()` حول القيمة حتى يتم تقريب قيمة المؤقت. سوف تصبح هكذا:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" } }, "placement": "top" @@ -709,7 +709,7 @@ "es": "Estamos listos.", "pt": "Estamos prontos.", "th": "เราพร้อมแล้ว", - "ar": "ضبطنا كل شيء." + "ar": "ضبطنا كل شيء." } }, "placement": "top" @@ -728,7 +728,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." } }, "placement": "bottom" From 7b8cb1b2f85f0d8572b69ba1ce492779d76a05de Mon Sep 17 00:00:00 2001 From: EyadMahm0ud <77191515+EyadMahm0ud@users.noreply.github.com> Date: Sun, 4 Jun 2023 16:52:55 +0300 Subject: [PATCH 071/208] Translating Fling Game tutorial into: Arabic --- tutorials/in-app/cameraParallax.json | 2 +- tutorials/in-app/flingGame.json | 884 ++++++++++++++++--------- tutorials/in-app/healthBar.json | 2 +- tutorials/in-app/plinkoMultiplier.json | 2 +- 4 files changed, 592 insertions(+), 298 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index bf81256..6a92615 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -105,7 +105,7 @@ "es": "Abre la pestaña **Extensiones**.", "pt": "Abra a guia **Extensões**.", "th": "เปิด **แท็บ Extensions**", - "ar": "فتح تبويب **الملحقات**." + "ar": "فتح نافذة **الملحقات**." } } }, diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index c8cb6ee..7549d8f 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -53,7 +53,7 @@ "scene": "startScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], "endDialog": { "content": [ { @@ -62,7 +62,8 @@ "fr": "# Votre jeu est terminé !", "es": "# ¡Has terminado tu juego Fling!", "pt": "# Você terminou seu jogo Fling!", - "th": "เกม Fling ของคุณเสร็จแล้ว" + "th": "เกม Fling ของคุณเสร็จแล้ว", + "ar": "# لقد أنهيت لعبة القذف الخاصة بك!" } }, { @@ -71,7 +72,8 @@ "fr": "Partagez le avec vos amis pour voir qui obtiendra le meilleur score !", "es": "¡Compártelo con tus amigos y ve quién obtiene la puntuación más alta!", "pt": "Compartilhe com seus amigos e veja quem consegue a maior pontuação!", - "th": "แชร์กับเพื่อนของคุณ และมาลองดูกันว่าใครจะทำคะแนนได้สูงที่สุด!" + "th": "แชร์กับเพื่อนของคุณ และมาลองดูกันว่าใครจะทำคะแนนได้สูงที่สุด!", + "ar": "شاركها مع الأصدقاء وشاهد من سيحصل على أعلى نتيجة!" } }, { @@ -80,7 +82,8 @@ "fr": "Prêt à créer un nouveau jeu ? Cliquez sur l'image pour découvrir de quoi GDevelop est capable !", "es": "¿Listo para crear un nuevo juego? ¡Haz clic para descubrir lo que puede hacer GDevelop!", "pt": "Pronto para criar um novo jogo? Clique para descobrir o que o GDevelop pode fazer!", - "th": "พร้อมสร้างเกมใหม่แล้ว? คลิกเพื่อสำรวจดูว่า GDevelop สามารถทำอะไรได้บ้าง" + "th": "พร้อมสร้างเกมใหม่แล้ว? คลิกเพื่อสำรวจดูว่า GDevelop สามารถทำอะไรได้บ้าง", + "ar": "هل أنت مستعد لصنع لعبة جديدة؟ النقر لإكتشاف ماذا يمكن لـ GDevelop أن يفعل!" } }, { @@ -105,7 +108,8 @@ "fr": "Commençons par aller dans l'onglet **Créer**.", "es": "Vamos a la sección **Crear**.", "pt": "Vamos para a seção **Criar**.", - "th": "ไปยัง **Build section**" + "th": "ไปยัง **Build section**", + "ar": "التوجه إلى القسم **بناء**." } }, "placement": "right" @@ -123,7 +127,8 @@ "fr": "Créons un nouveau **projet** pour ce tutoriel.", "es": "¡Vamos a crear un nuevo **proyecto** para este tutorial!", "pt": "Vamos criar um novo **projeto** para este tutorial!", - "th": "มาสร้าง **โปรเจกต์** ใหม่ สำหรับบทเรียนนี้กันเถอะ!" + "th": "มาสร้าง **โปรเจกต์** ใหม่ สำหรับบทเรียนนี้กันเถอะ!", + "ar": "دعنا نقوم بإنشاء **مشروع** جديد لهذا البرنامج التعليمي!" } } } @@ -140,7 +145,8 @@ "fr": "C'est parti !", "es": "¡Vamos!", "pt": "Vamos!", - "th": "ไปกันเลย!" + "th": "ไปกันเลย!", + "ar": "لنبدأ!" } } }, @@ -162,7 +168,8 @@ "fr": "Ouvrez le **Gestionnaire de projet**.", "es": "Abre el **Gestor de proyectos**.", "pt": "Abra o **Gerenciador de projetos**.", - "th": "เปิด **โปรเจกต์เมเนเจอร์**" + "th": "เปิด **โปรเจกต์เมเนเจอร์**", + "ar": "فتح **مدير المشروع**." } }, "placement": "right" @@ -180,7 +187,8 @@ "fr": "Ouvrez les **Paramètres du jeu**.", "es": "Abre la pestaña **Configuración del juego**.", "pt": "Abra a guia **Configurações do jogo**.", - "th": "เปิดแท็บ **ตั้งค่าเกม**" + "th": "เปิดแท็บ **ตั้งค่าเกม**", + "ar": "فتح نافذة **إعدادات اللعبة**." } } }, @@ -199,7 +207,8 @@ "fr": "Ouvrez les **Propriétés** du jeu.", "es": "Abre las **Propiedades** del juego.", "pt": "Abra as **Propriedades** do jogo.", - "th": "เปิด **คุณสมบัติ** ของเกม" + "th": "เปิด **คุณสมบัติ** ของเกม", + "ar": "فتح **الخصائص** التابعة للعبة." } } }, @@ -218,7 +227,8 @@ "fr": "Définissez une largeur de **1280** pixels.", "es": "Cambia el ancho a **1280** píxeles.", "pt": "Mude a largura para **1280** pixels.", - "th": "เปลี่ยนความกว้างเป็น **1280** พิกเซล" + "th": "เปลี่ยนความกว้างเป็น **1280** พิกเซล", + "ar": "تغيير العرض إلى **1280** بكسل." } } }, @@ -237,7 +247,8 @@ "fr": "Et une hauteur de **720** pixels.", "es": "Cambia la altura a **720** píxeles.", "pt": "Mude a altura para **720** pixels.", - "th": "เปลี่ยนความสูงเป็น **720** พิกเซล" + "th": "เปลี่ยนความสูงเป็น **720** พิกเซล", + "ar": "تغيير الارتفاع إلى **720** بكسل." } } }, @@ -255,7 +266,8 @@ "fr": "Choisissez l'option **Aucune modification de la taille du jeu**.", "es": "Establece esto en **No hay cambios en el tamaño del juego**.", "pt": "Defina isso como **Nenhuma alteração no tamanho do jogo**.", - "th": "ตั้งค่าเป็น **ไม่เปลี่ยนแปลงขนาดของเกม**" + "th": "ตั้งค่าเป็น **ไม่เปลี่ยนแปลงขนาดของเกม**", + "ar": "تعيين هذه إلى **لا تغيير في حجم اللعبة**." } } }, @@ -273,7 +285,8 @@ "fr": "On a terminé.", "es": "Ya hemos terminado.", "pt": "Estamos prontos.", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهينا." } } } @@ -290,7 +303,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -311,7 +325,8 @@ "fr": "Commençons par trouver une bordure à notre **scène**.", "es": "Primero, busquemos un borde para nuestra **escena**.", "pt": "Primeiro, vamos encontrar uma borda para nossa **cena**.", - "th": "ขั้นแรก หาขอบเขตของ **scene**" + "th": "ขั้นแรก หาขอบเขตของ **scene**", + "ar": "أولًا، دعنا نعثر على حدود **مشهدنا**." } } } @@ -327,7 +342,8 @@ "en": "Let's choose an **object** from the asset store", "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un **objeto** de la tienda de recursos.", - "th": "เลือก **วัตถุ** จาก ร้านค้า asset" + "th": "เลือก **วัตถุ** จาก ร้านค้า asset", + "ar": "دعنا نقوم بإختيار **كائن** من متجر العناصر" } }, "placement": "bottom" @@ -347,7 +363,8 @@ "fr": "Nous allons chercher une mosaïque que nous pouvons facilement redimensionner", "es": "Buscamos un sprite mosaico que podamos redimensionar fácilmente", "pt": "Estamos procurando por um sprite em mosaico que possamos redimensionar facilmente", - "th": "เรากำลังมองหา tiled sprite ที่สามารถปรับขนาดได้ง่าย" + "th": "เรากำลังมองหา tiled sprite ที่สามารถปรับขนาดได้ง่าย", + "ar": "نحن نبحث عن كائن مبلط يمكن إعادة تحجيمه بسهولة" } }, "description": { @@ -356,7 +373,8 @@ "fr": "Un conseil, cherchez la traduction en anglais: “**tiled sprite**”.", "es": "Consejo: busca “**tiled sprite**”.", "pt": "Dica: procure por “**tiled sprite**”.", - "th": "แนะนำ: ค้นหาเป็นภาษาอังกฤษ “**tiled sprite**”" + "th": "แนะนำ: ค้นหาเป็นภาษาอังกฤษ “**tiled sprite**”", + "ar": "تلميح: البحث عن **tiled sprite**." } } }, @@ -383,7 +401,8 @@ "fr": "Ajoutez cette ressource à votre projet.", "es": "Agrega este recurso a tu proyecto.", "pt": "Adicione este recurso ao seu projeto.", - "th": "เพิ่ม asset ไปยังโปรเจกต์ของคุณ" + "th": "เพิ่ม asset ไปยังโปรเจกต์ของคุณ", + "ar": "إضافة هذا العنصر إلى مشروعك." } } }, @@ -405,7 +424,8 @@ "fr": "Ajoutons $(border) à notre projet !", "es": "¡Agreguemos $(border) a nuestro juego!", "pt": "Vamos adicionar $(border) ao nosso jogo!", - "th": "มาใส่ $(border) ในเกมกันเถอะ!" + "th": "มาใส่ $(border) ในเกมกันเถอะ!", + "ar": "دعنا نقوم بإضافة الـ $(border) إلى لعبتنا" } } } @@ -422,7 +442,8 @@ "fr": "Faites glisser $(border) du menu au canvas.", "es": "Arrastra $(border) desde el menú al lienzo.", "pt": "Arraste $(border) do menu para o canvas.", - "th": "ลาก $(border) จากเมนูไปยังแคนวาส" + "th": "ลาก $(border) จากเมนูไปยังแคนวาส", + "ar": "سحب $(border) من القائمة إلى اللوحة." } }, "placement": "left" @@ -436,7 +457,8 @@ "fr": "J'ai terminé", "es": "Ya terminé", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت!" } } }, @@ -448,7 +470,8 @@ "fr": "Ajoutez et redimensionnez 4 instances de $(border) de manière à créer un cadre fermé autour de l'écran ($(instancesCount:border)/4).", "es": "Coloca y redimensiona al menos 4 instancias de $(border) para crear un marco cerrado alrededor de la pantalla ($(instancesCount:border)/4).", "pt": "Coloque e redimensione pelo menos 4 instâncias de $(border) para criar um quadro fechado ao redor da tela ($(instancesCount:border)/4).", - "th": "วางและปรับขนาดอย่างน้อย 4 อินสแตนซ์ ของ $(border) เพื่อสร้างกรอบรอบหน้าจอ ($(instancesCount:border)/4)" + "th": "วางและปรับขนาดอย่างน้อย 4 อินสแตนซ์ ของ $(border) เพื่อสร้างกรอบรอบหน้าจอ ($(instancesCount:border)/4)", + "ar": "إدراج وإعادة تحجيم 4 مثيلات على الأقل من $(border) لإنشاء إطار مغلق حول الشاشة ($(instancesCount:border)/4)." } }, "placement": "top", @@ -469,7 +492,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -490,7 +514,8 @@ "fr": "Maintenant, trouvons un **objet** que nous allons lancer.", "es": "Ahora, busquemos un **objeto** que podamos lanzar.", "pt": "Agora, vamos encontrar um **objeto** que possamos jogar.", - "th": "ทีนี้เราจะหา **วัตถุ** ที่เราจะใช้สำหรับโยน" + "th": "ทีนี้เราจะหา **วัตถุ** ที่เราจะใช้สำหรับโยน", + "ar": "الآن دعنا نعثر على **كائن** يمكننا قذفه." } } } @@ -507,7 +532,8 @@ "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un objeto de la **tienda de recursos**.", "pt": "Vamos escolher um objeto da **loja de recursos**.", - "th": "เลือก **วัตถุ** จาก ร้านค้า asset" + "th": "เลือก **วัตถุ** จาก ร้านค้า asset", + "ar": "دعنا نقوم بإختيار كائن من **متجر العناصر**." } }, "placement": "bottom" @@ -527,7 +553,8 @@ "fr": "Ajoutez un objet rond que vous aimeriez lancer (essayez **ball**).", "es": "Agrega un objeto redondo que te gustaría lanzar (intenta con **ball**).", "pt": "Adicione um objeto redondo que você gostaria de jogar (tente **ball**).", - "th": "เลือกวัตถุที่กลมที่คุณอยากจะโยน (ลอง **ball**)" + "th": "เลือกวัตถุที่กลมที่คุณอยากจะโยน (ลอง **ball**)", + "ar": "تحديد كائن مستدير تحب إلقائه (تجربة **ball**)." } } }, @@ -572,7 +599,8 @@ "fr": "Parfait, voyons maintenant comment le lancer.", "es": "Perfecto, veamos cómo lanzarlo fácilmente.", "pt": "Perfeito, vamos ver como jogá-lo facilmente.", - "th": "สมบูรณ์แบบ ลองมาดูวิธีโยนมันแบบง่ายๆกัน" + "th": "สมบูรณ์แบบ ลองมาดูวิธีโยนมันแบบง่ายๆกัน", + "ar": "ممتاز، دعنا نرى كيفية رميه بسهولة." } } } @@ -590,7 +618,8 @@ "fr": "Ajoutez 3 **instances** de **l'objet** *$(projectile)* dans le cadre.", "es": "Agrega 3 **instancias** del **objeto** *$(projectile)* dentro del marco.", "pt": "Adicione 3 **instâncias** do **objeto** *$(projectile)* dentro do quadro.", - "th": "เพิ่ม 3 **instances** ของ **วัตถุ** *$(projectile)* ภายในเฟรม" + "th": "เพิ่ม 3 **instances** ของ **วัตถุ** *$(projectile)* ภายในเฟรม", + "ar": "إضافة 3 **مثيلات** من **الكائن** *$(projectile)* داخل الإطار." } } } @@ -607,7 +636,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -628,7 +658,8 @@ "fr": "Maintenant trouvons une cible à atteindre.", "es": "Ahora busquemos un objetivo para apuntar.", "pt": "Agora vamos encontrar um alvo para mirar.", - "th": "ทีนี้เราจะหาเป้าสำหรับโยนวัตถุใส่" + "th": "ทีนี้เราจะหาเป้าสำหรับโยนวัตถุใส่", + "ar": "الآن دعنا نعثر على هدف لإصابته." } } } @@ -645,7 +676,8 @@ "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un **objeto** nuevo desde la tienda de recursos.", "pt": "Vamos escolher um novo **objeto** da loja de recursos.", - "th": "เลือก **วัตถุ** จาก ร้านค้า asset" + "th": "เลือก **วัตถุ** จาก ร้านค้า asset", + "ar": "دعنا نقوم بإختيار **كائن** جديد من متجر العناصر." } }, "placement": "bottom" @@ -665,7 +697,8 @@ "fr": "Cherchez une cible qui vous plaît (essayez **target**).", "es": "Busca un objeto que te gustaría usar como un objetivo para lanzar $(projectile) a.", "pt": "Selecione um objeto que você gostaria de usar como um alvo para jogar $(projectile) em.", - "th": "เลือกวัตถุที่คุณอยากจะโยน $(projectile) ใส่ (ลอง **target**)" + "th": "เลือกวัตถุที่คุณอยากจะโยน $(projectile) ใส่ (ลอง **target**)", + "ar": "تحديد كائن تحب أن يتم استخدامه كهدف لقذف الـ $(projectile) عليه." } } }, @@ -710,7 +743,8 @@ "fr": "Ajoutez cet objet à votre **scène**.", "es": "Perfecto, agreguemoslo a la **escena**.", "pt": "Perfeito, vamos adicioná-lo à **cena**.", - "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", + "ar": "ممتاز، دعنا نقوم بإضافته إلى **المشهد**." } } } @@ -727,7 +761,8 @@ "fr": "Ajoutez $(target) dans le cadre.", "es": "Agrega $(target) dentro del marco.", "pt": "Adicione $(target) dentro do quadro.", - "th": "เพิ่ม $(target) เข้าไปภายในเฟรม" + "th": "เพิ่ม $(target) เข้าไปภายในเฟรม", + "ar": "إضافة $(target) داخل الإطار." } } } @@ -744,7 +779,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -765,7 +801,8 @@ "fr": "Finalement, trouvons quelque chose pour protéger $(target).", "es": "Finalmente, encontremos algo para proteger $(target).", "pt": "Finalmente, vamos encontrar algo para proteger $(target).", - "th": "ขั้นสุดท้าย เราจะหาอะไรมาป้องกัน $(target)" + "th": "ขั้นสุดท้าย เราจะหาอะไรมาป้องกัน $(target)", + "ar": "أخيرًا وليس آخرًا، دعنا نعثر على شيء يحمي $(target)." } } } @@ -782,7 +819,8 @@ "fr": "Nous allons choisir un objet dans le **Magasin de ressources**.", "es": "Vamos a elegir un nuevo objeto de la tienda de recursos.", "pt": "Vamos escolher um novo objeto da loja de recursos.", - "th": "เลือก **วัตถุ** จาก ร้านค้า asset" + "th": "เลือก **วัตถุ** จาก ร้านค้า asset", + "ar": "دعنا نقوم بإختيار **كائن** جديد من متجر العناصر." } }, "placement": "bottom" @@ -802,7 +840,8 @@ "fr": "Cherchez un objet qui servira d'obstacle aux $(projectile) (cherchez **block**).", "es": "Busca un objeto que sirva como obstáculo para tus $(projectile) (busca **block**).", "pt": "Procure um objeto que sirva como obstáculo para seus $(projectile) (procure **block**).", - "th": "เลือกวัตถุ **block** ที่คุณอยากจะใช้เป็นสิ่งกีดขวาง $(projectile) (ลอง **block**)" + "th": "เลือกวัตถุ **block** ที่คุณอยากจะใช้เป็นสิ่งกีดขวาง $(projectile) (ลอง **block**)", + "ar": "تحديد **كتلة** تحبها أن تكون حاجزًا للـ $(projectile) خاصتك." } } }, @@ -847,7 +886,8 @@ "fr": "Parfait, ajoutez le à la **scène**.", "es": "Perfecto, agreguemoslo a la **escena**.", "pt": "Perfeito, vamos adicioná-lo à **cena**.", - "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", + "ar": "ممتاز، دعنا نقوم بإضافته إلى **المشهد**." } } } @@ -865,7 +905,8 @@ "fr": "Ajoutez plusieurs instances de $(block) dans le cadre.", "es": "Agrega múltiples instancias de $(block) dentro del marco.", "pt": "Adicione várias instâncias de $(block) dentro do quadro.", - "th": "เพิ่ม $(block) ปริมาณมากใส่ลงไปในเฟรม" + "th": "เพิ่ม $(block) ปริมาณมากใส่ลงไปในเฟรม", + "ar": "إضافة العديد من الـ $(block) داخل الإطار." } } } @@ -882,7 +923,8 @@ "fr": "Maintenant, ajoutons un moteur physique à nos **objets**.", "es": "Ahora, agreguemos un motor físico a nuestros **objetos**.", "pt": "Agora, vamos adicionar um motor físico aos nossos **objetos**.", - "th": "ทีนี้เราจะเพิ่มฟิสิกส์ให้ **objects**" + "th": "ทีนี้เราจะเพิ่มฟิสิกส์ให้ **objects**", + "ar": "الآن، دعنا نقوم بإضافة بعض الفيزيائيات إلى **كائننا**." } }, "placement": "left", @@ -892,7 +934,8 @@ "fr": "Faites un clic droit sur $(border) et cliquez sur “Modifier les comportements”.", "es": "Haz clic derecho en $(border) y selecciona “Editar comportamientos”.", "pt": "Clique com o botão direito em $(border) e selecione “Editar comportamentos”.", - "th": "คลิกขวา $(border) และเลือก “แก้ไขพฤติกรรม”" + "th": "คลิกขวา $(border) และเลือก “แก้ไขพฤติกรรม”", + "ar": "نقرة بزر الفأرة الأيمن على $(border) وتحديد **تحرير السلوكيات**." } } } @@ -909,7 +952,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** هنا." } }, "placement": "bottom" @@ -929,7 +973,8 @@ "fr": "Ajoutez un nouveau comportement.", "es": "Agrega un nuevo comportamiento.", "pt": "Adicione um novo comportamento.", - "th": "เพิ่มพฤติกรรมใหม่" + "th": "เพิ่มพฤติกรรมใหม่", + "ar": "إضافة سلوك جديد." } } }, @@ -947,7 +992,8 @@ "fr": "Sélectionnez le comportement **Moteur physique**.", "es": "Selecciona el comportamiento **Motor físico**.", "pt": "Selecione o comportamento **Motor físico**.", - "th": "เลือก **พฤติกรรมฟิสิกส์**" + "th": "เลือก **พฤติกรรมฟิสิกส์**", + "ar": "تحديد **سلوك الفيزياء**." } } }, @@ -965,7 +1011,8 @@ "fr": "Choisissez l'option **Fixe**.", "es": "Selecciona **estático**.", "pt": "Selecione **estático**.", - "th": "เลือก **คงที่**" + "th": "เลือก **คงที่**", + "ar": "تحديد **ثابت**." } }, "placement": "top" @@ -984,7 +1031,8 @@ "fr": "Nous verrons plus tard à quoi servent les autres paramètres. C'est tout pour le moment.", "es": "Más adelante veremos cómo usar los otros parámetros. Por ahora, estamos bien.", "pt": "Mais tarde veremos como usar os outros parâmetros. Por enquanto, estamos bem.", - "th": "สำหรับพารามิเตอร์อื่นๆเดี๋ยวจะกลับมาดูอีกครั้ง ตอนนี้ยังไม่ต้องไปสนใจ" + "th": "สำหรับพารามิเตอร์อื่นๆเดี๋ยวจะกลับมาดูอีกครั้ง ตอนนี้ยังไม่ต้องไปสนใจ", + "ar": "سوف نرى لاحقًا كيفية استخدام الخصائص الأخرى. نحن على الطريق الصحيح حاليًا." } } } @@ -1002,7 +1050,8 @@ "fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", "es": "Haz clic derecho en $(projectile) y selecciona “Editar comportamientos”.", "pt": "Clique com o botão direito em $(projectile) e selecione “Editar comportamentos”.", - "th": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" + "th": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”", + "ar": "الآن نقرة بزر الفأرة الأيمن على $(projectile) وتحديد **تحرير السلوكيات**." } } } @@ -1019,7 +1068,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", - "th": "ดู **พฤติกรรม** จาก **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** จาก **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** هنا." } }, "placement": "bottom" @@ -1039,7 +1089,8 @@ "fr": "Ajoutez un nouveau comportement.", "es": "Agrega un nuevo comportamiento.", "pt": "Adicione um novo comportamento.", - "th": "เพิ่มพฤติกรรมใหม่" + "th": "เพิ่มพฤติกรรมใหม่", + "ar": "إضافة سلوك جديد." } } }, @@ -1057,7 +1108,8 @@ "fr": "Sélectionnez le comportement Moteur physique.", "es": "Selecciona el comportamiento Motor físico.", "pt": "Selecione o comportamento Motor físico.", - "th": "เลือกพฤติกรรมฟิสิกส์" + "th": "เลือกพฤติกรรมฟิสิกส์", + "ar": "تحديد سلوك الفيزياء." } } }, @@ -1075,7 +1127,8 @@ "fr": "Choisissez l'option **Cercle**.", "es": "Selecciona **Círculo**.", "pt": "Selecione **Círculo**.", - "th": "เลือก **วงกลม**" + "th": "เลือก **วงกลม**", + "ar": "تحديد **دائرة**." } }, "placement": "top" @@ -1094,7 +1147,8 @@ "fr": "Utilisez une densité de 5.", "es": "Cambia la densidad a 5.", "pt": "Mude a densidade para 5.", - "th": "ปรับความหนาแน่นเป็น 5" + "th": "ปรับความหนาแน่นเป็น 5", + "ar": "تغيير الكثافة (Density) إلى 5." } }, "placement": "top" @@ -1113,7 +1167,8 @@ "fr": "Utilisez un amortissement angulaire de 15.", "es": "Cambia el amortiguamiento angular a 15.", "pt": "Mude o amortecimento angular para 15.", - "th": "ปรับการลดแรงสั่นสะเทือนเชิงมุมเป็น 15" + "th": "ปรับการลดแรงสั่นสะเทือนเชิงมุมเป็น 15", + "ar": "تغيير التثبيط الزاوي (Angular Damping) إلى 15." } }, "placement": "top" @@ -1132,7 +1187,8 @@ "fr": "C'est bon.", "es": "Está bien.", "pt": "Está bom.", - "th": "เรียบร้อยแล้ว" + "th": "เรียบร้อยแล้ว", + "ar": "نحن على الطريق الصحيح." } } } @@ -1150,7 +1206,8 @@ "fr": "Faites un clic droit sur $(target) et cliquez sur “Modifier les comportements”.", "es": "Ahora haz clic derecho en $(target) y selecciona “Editar comportamientos”.", "pt": "Agora clique com o botão direito em $(target) e selecione “Editar comportamentos”.", - "th": "คลิกขวาที่ $(target) และเลือก “แก้ไขพฤติกรรม”" + "th": "คลิกขวาที่ $(target) และเลือก “แก้ไขพฤติกรรม”", + "ar": "الآن نقرة بزر الفأرة الأيمن على $(target) وتحديد **تحرير السلوكيات**." } } } @@ -1167,7 +1224,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Aquí puedes ver los **comportamientos** del **objeto**.", "pt": "Veja os **comportamentos** do **objeto** aqui.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** هنا." } }, "placement": "bottom" @@ -1194,7 +1252,8 @@ "fr": "Sélectionnez le comportement Moteur physique.", "es": "Selecciona el comportamiento Física.", "pt": "Selecione o comportamento Física.", - "th": "เลือกพฤติกรรมฟิสิกส์" + "th": "เลือกพฤติกรรมฟิสิกส์", + "ar": "تحديد سلوك الفيزياء." } } }, @@ -1212,7 +1271,8 @@ "fr": "La configuration de base suffit. Continuons.", "es": "No necesitas cambiar nada.", "pt": "Não é necessário alterar nada.", - "th": "ไม่ต้องเปลี่ยนแปลงอะไร" + "th": "ไม่ต้องเปลี่ยนแปลงอะไร", + "ar": "لا حاجة إلى تغيير أي شيء" } } } @@ -1230,7 +1290,8 @@ "fr": "Faites un clic droit sur $(block) et cliquez sur “Modifier les comportements”.", "es": "Ahora haz clic derecho en $(block) y selecciona “Editar comportamientos”.", "pt": "Agora clique com o botão direito em $(block) e selecione “Editar comportamentos”.", - "th": "คลิกขวาที่ $(block) และเลือก “แก้ไขพฤติกรรม”" + "th": "คลิกขวาที่ $(block) และเลือก “แก้ไขพฤติกรรม”", + "ar": "الآن نقرة بزر الفأرة الأيمن على $(block) وتحديد **تحرير السلوكيات**." } } } @@ -1247,7 +1308,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Aquí puedes ver los **comportamientos** del **objeto**.", "pt": "Veja os **comportamentos** do **objeto** aqui.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** هنا." } }, "placement": "bottom" @@ -1274,7 +1336,8 @@ "fr": "Sélectionnez le comportement Moteur physique.", "es": "Selecciona el comportamiento Física.", "pt": "Selecione o comportamento Física.", - "th": "เลือกพฤติกรรมฟิสิกส์" + "th": "เลือกพฤติกรรมฟิสิกส์", + "ar": "تحديد سلوك الفيزياء." } } }, @@ -1299,7 +1362,8 @@ "fr": "Maintenant, nous allons faire en sorte que le joueur puisse faire glisser $(projectile) avec sa souris.", "es": "Ahora vamos a hacer que el jugador pueda arrastrar $(projectile) con el ratón.", "pt": "Agora vamos fazer com que o jogador possa arrastar $(projectile) com o mouse.", - "th": "ทีนี้เราจะทำให้ผู้เล่นสามารถลาก $(projectile)" + "th": "ทีนี้เราจะทำให้ผู้เล่นสามารถลาก $(projectile)", + "ar": "الآن دعنا نقوم بجعل اللاعبين قادرين على سحب الـ $(projectile)." } }, "description": { @@ -1308,7 +1372,8 @@ "fr": "Pour cela, nous allons installer un **extension**.\n\nOuvrez le **Gestionnaire de projet**.", "es": "Para ello, vamos a instalar una **extensión**.\n\nAbre el **Gestor de proyectos**.", "pt": "Para isso, vamos instalar uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", - "th": "โดยเราจะติดตั้ง **extension**\n\nเปิด **โปรเจกต์เมเนเจอร์**" + "th": "โดยเราจะติดตั้ง **extension**\n\nเปิด **โปรเจกต์เมเนเจอร์**", + "ar": "للقيام بذلك، سوف نقوم بتثبيت **ملحق**.\n\nفتح **مدير المشروع**." } }, "placement": "right" @@ -1326,7 +1391,8 @@ "fr": "Ouvrez l'onglet **Extensions**.", "es": "Abre la pestaña **Extensiones**.", "pt": "Abra a guia **Extensões**.", - "th": "เปิดแท็บ **Extensions**" + "th": "เปิดแท็บ **Extensions**", + "ar": "فتح نافذة **الملحقات**." } } }, @@ -1345,7 +1411,8 @@ "fr": "Ouvrez le **Magasin d'extension**.", "es": "Abre la **Tienda de extensiones**.", "pt": "Abra a **Loja de extensões**.", - "th": "เปิดร้านค้า extension" + "th": "เปิดร้านค้า extension", + "ar": "فتح متجر الملحقات" } } }, @@ -1363,7 +1430,8 @@ "fr": "Cherchez l'extension **draggable**.", "es": "Busca la extensión **draggable**.", "pt": "Procure pela extensão **draggable**.", - "th": "ค้นหา **draggable** extension (สำหรับวัตถุฟิสิกส์)" + "th": "ค้นหา **draggable** extension (สำหรับวัตถุฟิสิกส์)", + "ar": "البحث عن الملحق **draggable (for physics object)**." } } }, @@ -1382,7 +1450,8 @@ "fr": "Cliquez sur l'extension.", "es": "Haz clic en la extensión.", "pt": "Clique na extensão.", - "th": "คลิกที่ extension" + "th": "คลิกที่ extension", + "ar": "النقر على الملحق." } } }, @@ -1400,7 +1469,8 @@ "fr": "Installez l'extension dans votre projet.", "es": "Instala la extensión en tu proyecto.", "pt": "Instale a extensão no seu projeto.", - "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ" + "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ", + "ar": "تثبيت الملحق في مشروعك." } }, "placement": "left" @@ -1419,7 +1489,8 @@ "fr": "Fermez le magasin.", "es": "Cierra la tienda.", "pt": "Feche a loja.", - "th": "ปิดหน้าต่างของร้านค้า" + "th": "ปิดหน้าต่างของร้านค้า", + "ar": "إغلاق المتجر." } } } @@ -1437,7 +1508,8 @@ "fr": "Faites un clic droit sur $(projectile) et cliquez sur “Modifier les comportements”.", "es": "Haz clic derecho en $(projectile) y selecciona “Editar comportamientos”.", "pt": "Clique com o botão direito em $(projectile) e selecione “Editar comportamentos”.", - "th": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”" + "th": "คลิกขวาที่ $(projectile) และเลือก “แก้ไขพฤติกรรม”", + "ar": "الآن نقرة بزر الفأرة الأيمن على $(projectile) وتحديد **تحرير السلوكيات**." } } } @@ -1454,7 +1526,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** هنا." } }, "placement": "bottom" @@ -1474,7 +1547,8 @@ "fr": "Ajoutez un nouveau comportement.", "es": "Agrega un nuevo comportamiento.", "pt": "Adicione um novo comportamento.", - "th": "เพิ่มพฤติกรรมใหม่" + "th": "เพิ่มพฤติกรรมใหม่", + "ar": "إضافة سلوك جديد." } } }, @@ -1492,7 +1566,8 @@ "fr": "Sélectionnez le comportement Draggable.", "es": "Selecciona el comportamiento Draggable.", "pt": "Selecione o comportamento Draggable.", - "th": "เลือกพฤติกรรม Draggable" + "th": "เลือกพฤติกรรม Draggable", + "ar": "تحديد السلوك Draggable." } } }, @@ -1510,7 +1585,8 @@ "fr": "C'est tout !", "es": "¡Eso es todo!", "pt": "É isso aí!", - "th": "เรียบร้อยแล้ว!" + "th": "เรียบร้อยแล้ว!", + "ar": "هذا كل شيء!" } } } @@ -1527,7 +1603,8 @@ "fr": "Cliquez sur **Aperçu** pour tester votre jeu. Cliquez et faites glisser $(projectile) dans la scène !", "es": "¡Haz clic en el botón **Vista previa** para ver cómo puedes hacer clic y arrastrar tu $(projectile) por la escena!", "pt": "Clique no botão **Pré-visualizar** para ver como você pode clicar e arrastar seu $(projectile) pela cena!", - "th": "ลองคลิกที่ **ดูตัวอย่าง** แล้วทำการคลิกและลาก $(projectile) ไปมาเพื่อทดสอบกันเถอะ!" + "th": "ลองคลิกที่ **ดูตัวอย่าง** แล้วทำการคลิกและลาก $(projectile) ไปมาเพื่อทดสอบกันเถอะ!", + "ar": "الضغط على الزر **معاينة** لرؤية كيف يمكنك ضغط وسحب كائنك $(projectile) في أرجاء المشهد!" } }, "placement": "bottom" @@ -1543,7 +1620,8 @@ "fr": "## Félicitations !", "es": "## ¡Felicidades!", "pt": "## Parabéns!", - "th": "## ยินดีด้วย!" + "th": "## ยินดีด้วย!", + "ar": "## تهانينا!" } }, { @@ -1552,7 +1630,8 @@ "fr": "Vous avez terminé la première partie de votre jeu.", "es": "Has terminado la primera parte de tu juego.", "pt": "Você terminou a primeira parte do seu jogo.", - "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" + "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว", + "ar": "لقد أنهيت أول جزء من لعبة القذف خاصتك." } }, { @@ -1561,7 +1640,8 @@ "fr": "Vous avez découvert les bases de GDevelop:\n- [les objets](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [les instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [les comportements](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [les scènes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", "es": "Has descubierto los fundamentos de GDevelop:\n- [Objetos](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instancias](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Comportamientos](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Escenas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", "pt": "Você descobriu os fundamentos do GDevelop:\n- [Objetos](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instâncias](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Comportamentos](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Cenas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)", - "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor" + "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Objects](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [Instances](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [Behaviors](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [Scenes](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor", + "ar": "لقد اكتشفت أساسيات GDevelop:\n- [كائنات](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=In%20GDevelop%2C%20everything%20on%20the,add%20text%20to%20a%20game)\n- [مثيلات](https://wiki.gdevelop.io/gdevelop5/objects#:~:text=After%20creating%20an%20object%2C%20GDevelop,an%20instance%20of%20the%20object)\n- [سلوكيات](https://wiki.gdevelop.io/gdevelop5/behaviors#:~:text=In%20GDevelop%2C%20behaviors%20add%20significant,following%20the%20laws%20of%20physics)\n- [مشاهد](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor#:~:text=The%20Scene%20Editor%20is%20where,events%20in%20the%20Events%20Editor)" } }, { @@ -1570,7 +1650,8 @@ "fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre.", "es": "Ahora puedes hacer una pausa antes de comenzar el próximo capítulo.", "pt": "Agora você pode fazer uma pausa antes de começar o próximo capítulo.", - "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเลยก็ได้" + "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเลยก็ได้", + "ar": "يمكنك الآن أخذ استراحة أو استئناف البرنامج التعليمي إلى الفصل التالي." } } ] @@ -1588,7 +1669,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -1609,7 +1691,8 @@ "fr": "Cherchons un arrière-plan pour notre jeu.", "es": "Busquemos un fondo para nuestro juego.", "pt": "Vamos encontrar um fundo para o nosso jogo.", - "th": "หาพื้นหลังสำหรับเกม" + "th": "หาพื้นหลังสำหรับเกม", + "ar": "دعنا نعثر على خلفية للعبتنا." } } } @@ -1626,7 +1709,8 @@ "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un **objeto** de la tienda de recursos.", "pt": "Vamos escolher um **objeto** na loja de recursos.", - "th": "ค้นหา **วัตถุ** จาก ร้านค้า asset" + "th": "ค้นหา **วัตถุ** จาก ร้านค้า asset", + "ar": "دعنا نقوم بإختيار **كائن** من متجر العناصر." } }, "placement": "bottom" @@ -1646,7 +1730,8 @@ "fr": "Cherchez “**background**”.", "es": "Escribe “**background**”.", "pt": "Digite “**background**”.", - "th": "ประเภท “**background**”" + "th": "ประเภท “**background**”", + "ar": "كتابة **background**." } } }, @@ -1691,7 +1776,8 @@ "fr": "Parfait, ajoutez le à la **scène**.", "es": "Perfecto, añádelo a la **escena**.", "pt": "Perfeito, vamos usá-lo na nossa **cena**.", - "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", + "ar": "ممتاز، دعنا نستخدمه في **مشهدنا**." } } } @@ -1708,7 +1794,8 @@ "fr": "Faites glisser $(background) du menu au canvas.", "es": "Arrastra $(background) desde el menú al lienzo.", "pt": "Arraste $(background) do menu para o canvas.", - "th": "ลาก $(background) จากเมนูไปยังแคนวาส" + "th": "ลาก $(background) จากเมนูไปยังแคนวาส", + "ar": "سحب $(background) من القائمة إلى اللوحة." } }, "placement": "left" @@ -1722,7 +1809,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Eu terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت!" } } }, @@ -1734,7 +1822,8 @@ "fr": "Redimensionnez $(background) de façon à ce qu'il couvre toute la zone de jeu.", "es": "Arrastra para ampliar el tamaño de $(background) hasta que se estire sobre toda la zona de juego.", "pt": "Arraste para expandir o tamanho de $(background) até que ele se estenda sobre toda a área do jogo.", - "th": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" + "th": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ", + "ar": "سحب لتوسيع حجم الـ $(background) حتى يتم تغطية اللعبة بأكملها." } }, "image": { @@ -1755,7 +1844,8 @@ "fr": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(background) sur la scène.", "es": "Abre el panel de edición de propiedades de **la instancia** y selecciona la instancia de $(background) en la escena.", "pt": "Abra o painel de edição de propriedades da **instância** e selecione a instância de $(background) na cena.", - "th": "เปิดแผงควบคุมสำหรับแก้ไขคุณสมบัติ **instance** และเลือก instance ของ $(background) ใน scence" + "th": "เปิดแผงควบคุมสำหรับแก้ไขคุณสมบัติ **instance** และเลือก instance ของ $(background) ใน scence", + "ar": "فتح لوحة خصائص **المثيل** وتحديد مثيل الـ $(background) على الشاشة." } }, "placement": "bottom" @@ -1774,7 +1864,8 @@ "fr": "Sélectionnez l'instance de $(background) sur la scène.", "es": "Selecciona la instancia de $(background) en la escena.", "pt": "Selecione a instância de $(background) na cena.", - "th": "เลือก instance ของ $(background) ใน scence" + "th": "เลือก instance ของ $(background) ใน scence", + "ar": "تحديد المثيل $(background) بالمشهد." } } } @@ -1791,7 +1882,8 @@ "fr": "Définissez la position sur l'axe z de $(background) à -1 pour qu'il soit derrière toutes les autres **instances** de la scène.", "es": "Cambia el orden z de $(background) a **-1** para que esté detrás de todas las demás **instancias** de la **escena**.", "pt": "Altere a ordem z de $(background) para **-1** para que ele fique atrás de todas as outras **instâncias** na **cena**.", - "th": "ปรับค่าลำดับ z ของ $(background) เป็น **-1** เพื่อให้พื้นหลังปรากฏอยู่ข้างหลัง **instances** อื่น" + "th": "ปรับค่าลำดับ z ของ $(background) เป็น **-1** เพื่อให้พื้นหลังปรากฏอยู่ข้างหลัง **instances** อื่น", + "ar": "تغيير ترتيب $(background) إلى **-1** حيث يكون خلف كل **المثيلات** الأخرى في **المشهد**." } }, "placement": "right" @@ -1809,7 +1901,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -1830,7 +1923,8 @@ "fr": "Ajoutons un objet pour protéger $(target).", "es": "Agreguemos un objeto para proteger a $(target).", "pt": "Vamos adicionar um objeto para proteger $(target).", - "th": "เพิ่มวัตถุป้องกันให้ $(target)" + "th": "เพิ่มวัตถุป้องกันให้ $(target)", + "ar": "دعنا نقوم بإضافة بعض الحماية لصالح $(target)." } } } @@ -1847,7 +1941,8 @@ "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un **objeto** de la tienda de recursos.", "pt": "Vamos escolher um **objeto** na loja de recursos.", - "th": "เพิ่ม **วัตถุ** จาก ร้านค้า asset" + "th": "เพิ่ม **วัตถุ** จาก ร้านค้า asset", + "ar": "دعنا نقوم بإختيار **كائن** من متجر العناصر." } }, "placement": "bottom" @@ -1867,7 +1962,8 @@ "fr": "Cherchez “**block**”.", "es": "Busca **block**.", "pt": "Procure por **block**.", - "th": "ค้นหา “**block**”" + "th": "ค้นหา “**block**”", + "ar": "البحث عن **block**." } } }, @@ -1912,7 +2008,8 @@ "fr": "Parfait, ajoutez le à la **scène**.", "es": "Perfecto, agreguemoslo a la **escena**.", "pt": "Perfeito, vamos adicioná-lo à **cena**.", - "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**" + "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", + "ar": "ممتاز، دعنا نقوم بإضافته إلى **المشهد**." } } } @@ -1930,7 +2027,8 @@ "fr": "Faisons en sorte qu'il reste fixe comme un mur.", "es": "Hagamos que se mantengan estáticos como una pared.", "pt": "Vamos mantê-los estáticos como uma parede.", - "th": "ทำให้คงที่เพื่อใช้ทำหน้าที่เป็นผนัง" + "th": "ทำให้คงที่เพื่อใช้ทำหน้าที่เป็นผนัง", + "ar": "دعنا نعينه ككائن ثابت حيث سيمثل الجدار." } }, "description": { @@ -1939,7 +2037,8 @@ "fr": "Faites un clic droit sur $(obstacle) et cliquez sur “Modifier les comportements”.", "es": "Haga clic derecho en $(obstacle) y seleccione “Editar comportamientos”.", "pt": "Clique com o botão direito em $(obstacle) e selecione “Editar comportamentos”.", - "th": "คลิกขวาที่ $(obstacle) และเลือก “แก้ไขพฤติกรรม”" + "th": "คลิกขวาที่ $(obstacle) และเลือก “แก้ไขพฤติกรรม”", + "ar": "نقرة بزر الفأرة الأيمن على $(obstacle) وتحديد **تحرير السلوكيات**." } } } @@ -1956,7 +2055,8 @@ "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Aquí puedes ver los **comportamientos** del **objeto**.", "pt": "Veja os **comportamentos** do **objeto** aqui.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่" + "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", + "ar": "رؤية **سلوكيات الكائن** هنا." } }, "placement": "bottom" @@ -1976,7 +2076,8 @@ "fr": "Ajoutez un nouveau comportement.", "es": "Agrega un nuevo comportamiento.", "pt": "Adicione um novo comportamento.", - "th": "เพิ่มพฤติกรรมใหม่" + "th": "เพิ่มพฤติกรรมใหม่", + "ar": "إضافة سلوك جديد." } } }, @@ -1994,7 +2095,8 @@ "fr": "Sélectionnez le comportement Moteur physique.", "es": "Selecciona el comportamiento Física.", "pt": "Selecione o comportamento Física.", - "th": "เลือกพฤติกรรมฟิสิกส์" + "th": "เลือกพฤติกรรมฟิสิกส์", + "ar": "تحديد سلوك الفيزياء." } } }, @@ -2012,7 +2114,8 @@ "fr": "Choisissez l'option **Fixe**.", "es": "Selecciona **estático**.", "pt": "Selecione **estático**.", - "th": "เลือก **คงที่**" + "th": "เลือก **คงที่**", + "ar": "تحديد **ثابت**." } }, "placement": "top" @@ -2031,7 +2134,8 @@ "fr": "C'est bon.", "es": "Está bien.", "pt": "Está bom.", - "th": "เรียบร้อยแล้ว" + "th": "เรียบร้อยแล้ว", + "ar": "نحن على الطريق الصحيح." } } } @@ -2048,7 +2152,8 @@ "en": "Add a few $(obstacle) to the **scene** to protect $(target).", "fr": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target).", "es": "Agrega algunos $(obstacle) a la **escena** para proteger a $(target).", - "th": "เพิ่ม $(obstacle) ปริมาณนิดหน่อยลงใน **scene** เพื่อป้องกัน $(target)" + "th": "เพิ่ม $(obstacle) ปริมาณนิดหน่อยลงใน **scene** เพื่อป้องกัน $(target)", + "ar": "إضافة بضعة $(obstacle) إلى **المشهد** لحماية $(target)." } } } @@ -2065,7 +2170,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -2086,7 +2192,8 @@ "fr": "Maintenant, nous allons ajouter un message quand le joueur atteint la cible.", "es": "¡Ahora creemos un mensaje de victoria!", "pt": "Agora vamos criar uma mensagem de vitória!", - "th": "ทีนี้เราจะสร้างข้อความแสดงชัยชนะ!" + "th": "ทีนี้เราจะสร้างข้อความแสดงชัยชนะ!", + "ar": "الآن دعنا نقوم بإنشاء رسالة الفوز!" } } } @@ -2103,7 +2210,8 @@ "fr": "Cette fois-ci, nous allons créer un texte de zéro.", "es": "Esta vez crearemos un texto desde cero.", "pt": "Desta vez, vamos criar um texto do zero.", - "th": "คราวนี้ เราจะสร้างข้อความโดยทำขึ้นมาเอง" + "th": "คราวนี้ เราจะสร้างข้อความโดยทำขึ้นมาเอง", + "ar": "هذه المرة، سنقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -2123,7 +2231,8 @@ "fr": "Sélectionnez l'objet **Texte**", "es": "Selecciona el objeto **Texto**", "pt": "Selecione o objeto **Texto**", - "th": "เลือกวัตถุ **ข้อความ**" + "th": "เลือกวัตถุ **ข้อความ**", + "ar": "تحديد الكائن **نص**" } }, "placement": "bottom" @@ -2142,7 +2251,8 @@ "fr": "Utilisez “**YouWin**” comme nom d'objet.", "es": "Cambia el nombre del objeto a “**YouWin**”.", "pt": "Mude o nome do objeto para “**YouWin**”.", - "th": "แก้ไขชื่อของวัตถุเป็น “**YouWin**”" + "th": "แก้ไขชื่อของวัตถุเป็น “**YouWin**”", + "ar": "تغيير اسم الكائن إلى **YouWin**." } }, "placement": "bottom" @@ -2161,7 +2271,8 @@ "fr": "Utilisez une taille de **200**.", "es": "Cambia el tamaño de la fuente a **200**.", "pt": "Mude o tamanho da fonte para **200**.", - "th": "แก้ไขขนาดฟอนต์เป็น **200**" + "th": "แก้ไขขนาดฟอนต์เป็น **200**", + "ar": "تغيير حجم الخط إلى **200**." } }, "placement": "bottom" @@ -2180,7 +2291,8 @@ "fr": "Cet objet texte devra afficher “**Gagné !**”", "es": "Cambia el texto a “**¡Ganaste!**”", "pt": "Mude o texto para “**Você Venceu!**”", - "th": "แก้ไขข้อความเป็น “**คุณชนะ!**”" + "th": "แก้ไขข้อความเป็น “**คุณชนะ!**”", + "ar": "إدخال أي نص يدل على فوز اللاعبين\n(على سبيل المثال:** لقد فزت**)." } }, "placement": "bottom" @@ -2199,7 +2311,8 @@ "fr": "Nous avons terminé.", "es": "¡Terminamos!", "pt": "Terminamos.", - "th": "เรียบร้อยแล้ว" + "th": "เรียบร้อยแล้ว", + "ar": "انتهينا." } } }, @@ -2219,7 +2332,8 @@ "fr": "Faites glisser $(youWinText) du menu au canvas et centrez le sur la scène.", "es": "Arrastra $(youWinText) al **escenario** y centra el objeto lo mejor que puedas.", "pt": "Arraste $(youWinText) para a **cena** e centralize-o o mais próximo possível.", - "th": "ลาก $(youWinText) ไปยัง **scene** และพยายามจัดตำแหน่งให้อยู่ตรงกลาง" + "th": "ลาก $(youWinText) ไปยัง **scene** และพยายามจัดตำแหน่งให้อยู่ตรงกลาง", + "ar": "سحب $(youWinText) داخل **المشهد**، وإدراجه في المنتصف قدر الإمكان." } }, "placement": "left" @@ -2237,7 +2351,8 @@ "fr": "Ouvrez le panneau des **calques*.", "es": "Abre el panel de **Capas**.", "pt": "Abra o painel **Camadas**.", - "th": "เปิดแผงควบคุม **Layers**" + "th": "เปิดแผงควบคุม **Layers**", + "ar": "فتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -2256,7 +2371,8 @@ "fr": "Créez un nouveau calque.", "es": "Añade una nueva capa.", "pt": "Adicione uma nova camada.", - "th": "เพิ่มเลเยอร์ใหม่" + "th": "เพิ่มเลเยอร์ใหม่", + "ar": "إضافة طبقة جديدة." } }, "placement": "top" @@ -2274,7 +2390,8 @@ "fr": "Utlisez le nom **WinLayer**.", "es": "Cambia el nombre a **WinLayer**.", "pt": "Mude o nome para **WinLayer**.", - "th": "เปลี่ยนชื่อเป็น **WinLayer**" + "th": "เปลี่ยนชื่อเป็น **WinLayer**", + "ar": "تغيير الاسم إلى **WinLayer**." } }, "placement": "top" @@ -2292,7 +2409,8 @@ "fr": "Cachez le **calque**.", "es": "Oculta la **capa**.", "pt": "Esconda a **camada**.", - "th": "ซ่อน *เลเยอร์*" + "th": "ซ่อน *เลเยอร์*", + "ar": "إخفاء **الطبقة**." } }, "placement": "top" @@ -2306,7 +2424,8 @@ "fr": "J'ai terminé", "es": "Terminé", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -2317,7 +2436,8 @@ "fr": "Sélectionnez l'instance de $(youWinText) sur la **scène** et changez son **calque** en utilisant le **panneau des propriétés**.\n\nIl devrait maintenant être caché.", "es": "Ahora selecciona la **instancia** de $(youWinText) en la **escena** y cambia su **capa** usando el **panel de propiedades**.\n\n¡Debería haber desaparecido!", "pt": "Agora selecione a **instância** de $(youWinText) na **cena** e altere sua **camada** usando o **painel de propriedades**.\n\nEle deve ter desaparecido!", - "th": "ทีนี้เลือก $(youWinText) **instance** บน **scence** และเปลี่ยน **เลเยอร์** โดยใช้ **แผงควบคุมคุณสมบัติ**\n\nมันควรจะหายไป!" + "th": "ทีนี้เลือก $(youWinText) **instance** บน **scence** และเปลี่ยน **เลเยอร์** โดยใช้ **แผงควบคุมคุณสมบัติ**\n\nมันควรจะหายไป!", + "ar": "الآن تحديد **المثيل** $(youWinText) **بالمشهد** وتغيير طبقته باستخدام **لوحة الخصائص**.\n\nمن المفترض أن تختفي!" } }, "standalone": true @@ -2335,7 +2455,8 @@ "fr": "Nous allons maintenant ajouter de la logique à notre jeu.", "es": "Ahora vamos a añadir lógica a nuestro juego.", "pt": "Agora vamos adicionar lógica ao nosso jogo.", - "th": "เราจะเพิ่มโลจิกบางอย่างเข้าไปในเกม" + "th": "เราจะเพิ่มโลจิกบางอย่างเข้าไปในเกม", + "ar": "سوف نقوم الآن بإضافة بعض المنطق إلى لعبتنا." } } } @@ -2353,7 +2474,8 @@ "fr": "Créons notre premier **évènement** !", "es": "¡Añadamos nuestro primer **evento**!", "pt": "Vamos adicionar nosso primeiro **evento**!", - "th": "มาเพิ่ม **อีเวนท์** แรกกันเถอะ!" + "th": "มาเพิ่ม **อีเวนท์** แรกกันเถอะ!", + "ar": "دعنا نقوم بإضافة أول **حدث** لنا!" } } } @@ -2370,7 +2492,8 @@ "fr": "Créez une **condition**.", "es": "Añade una **condición**.", "pt": "Adicione uma **condição**.", - "th": "เพิ่ม **เงื่อนไข**" + "th": "เพิ่ม **เงื่อนไข**", + "ar": "إضافة **شرط**." } } } @@ -2387,7 +2510,8 @@ "fr": "Cliquez sur $(projectile).", "es": "Selecciona $(projectile).", "pt": "Selecione $(projectile).", - "th": "เลือก $(projectile)" + "th": "เลือก $(projectile)", + "ar": "تحديد $(projectile)." } } }, @@ -2405,7 +2529,8 @@ "fr": "Cliquez sur la condition collision.", "es": "Selecciona la condición de colisión.", "pt": "Selecione a condição de colisão.", - "th": "เลือกเงื่อนไขการชนกัน" + "th": "เลือกเงื่อนไขการชนกัน", + "ar": "تحديد شرط التصادم." } } }, @@ -2423,7 +2548,8 @@ "fr": "Cliquez sur $(target).", "es": "Selecciona $(target).", "pt": "Selecione $(target).", - "th": "เลือก $(target)" + "th": "เลือก $(target)", + "ar": "تحديد $(target)." } }, "placement": "top" @@ -2442,7 +2568,8 @@ "fr": "La condition est maintenant configurée.", "es": "La condición está configurada.", "pt": "A condição está configurada.", - "th": "เอาล่ะ **เงื่อนไข** ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "เอาล่ะ **เงื่อนไข** ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "حسنًا، تم ضبط **شرط** تمامًا." } }, "placement": "top" @@ -2460,7 +2587,8 @@ "fr": "Créez une **action** maintenant.", "es": "Añade una **acción** ahora.", "pt": "Adicione uma **ação** agora.", - "th": "เพิ่ม **การกระทำ**" + "th": "เพิ่ม **การกระทำ**", + "ar": "دعنا نقوم بإضافة **إجراء** الآن." } } } @@ -2477,7 +2605,8 @@ "fr": "Cliquez sur $(target).", "es": "Selecciona $(target).", "pt": "Selecione $(target).", - "th": "เลือก $(target)" + "th": "เลือก $(target)", + "ar": "تحديد $(target)." } } }, @@ -2495,7 +2624,8 @@ "fr": "Nous allons faire disparaître $(target) au moment de la collision.", "es": "Haremos que $(target) desaparezca en la colisión.", "pt": "Vamos fazer com que $(target) desapareça na colisão.", - "th": "เราจะทำให้ $(target) หายไปหลังจากชน" + "th": "เราจะทำให้ $(target) หายไปหลังจากชน", + "ar": "سوف نجعل $(target) يختفي مع التصادم." } } }, @@ -2513,7 +2643,8 @@ "fr": "Parfait, $(target) va disparaître quand un $(projectile) l'atteindra.", "es": "Perfecto, $(target) desaparecerá cuando $(projectile) lo golpee.", "pt": "Ótimo, $(target) desaparecerá quando $(projectile) o atingir.", - "th": "เอาล่ะ ทีนี้ $(target) จะหายไปเมื่อถูก $(projectile) ชน" + "th": "เอาล่ะ ทีนี้ $(target) จะหายไปเมื่อถูก $(projectile) ชน", + "ar": "حسنًا، الآن سوف يختفي $(target) وقتما يضربه $(projectile)." } }, "placement": "top" @@ -2531,7 +2662,8 @@ "fr": "Créons une autre **action** qui sera exécutée pour la même **condition**.", "es": "Añade otra **acción** que se ejecutará para la misma **condición**.", "pt": "Adicione outra **ação** que será executada para a mesma **condição**.", - "th": "สร้าง **การกระทำ** เพิ่มอีก ซึ่งจะใช้ในกรณี **เงื่อนไข** เดียวกัน" + "th": "สร้าง **การกระทำ** เพิ่มอีก ซึ่งจะใช้ในกรณี **เงื่อนไข** เดียวกัน", + "ar": "دعنا نقوم بإضافة **إجراء** آخر حيث سيتم تنفيذه بواسطة نفس **الشرط**." } } } @@ -2548,7 +2680,8 @@ "fr": "Cherchez “calque”.", "es": "Busca “capa”.", "pt": "Procure por “camada”.", - "th": "ค้นหา “layer”" + "th": "ค้นหา “layer”", + "ar": "البحث عن **طبقة**." } } }, @@ -2566,7 +2699,8 @@ "fr": "Cliquez sur l'action **Afficher un calque**.", "es": "Selecciona la **acción Mostrar una capa**.", "pt": "Selecione a **ação Mostrar uma camada**.", - "th": "เลือกการกระทำ **แสดงเลเยอร์**" + "th": "เลือกการกระทำ **แสดงเลเยอร์**", + "ar": "تحديد الإجراء **إظهار طبقة**." } } }, @@ -2584,7 +2718,8 @@ "fr": "Sélectionnez le **calque** que vous avez créé.", "es": "Selecciona la **capa** que has creado.", "pt": "Selecione a **camada** que você criou.", - "th": "เลือก **เลเยอร์** ที่คุณสร้าง" + "th": "เลือก **เลเยอร์** ที่คุณสร้าง", + "ar": "تحديد **الطبقة** التي قمتَ بإنشائها." } }, "placement": "top" @@ -2603,7 +2738,8 @@ "fr": "Maintenant, le titre de victoire devrait apparaître quand le joueur touche $(target) avec $(projectile).", "es": "Ahora, el título de victoria debería aparecer cuando el jugador golpee a $(target) con $(projectile).", "pt": "Agora, o título de vitória deve aparecer quando o jogador atingir $(target) com $(projectile).", - "th": "เอาล่ะ ทีนี้ข้อความควรจะปรากฎเมื่อผู้เล่นโยน $(projectile) ชน $(target)" + "th": "เอาล่ะ ทีนี้ข้อความควรจะปรากฎเมื่อผู้เล่นโยน $(projectile) ชน $(target)", + "ar": "حسنًا، من المفترض أن يظهر العنوان عندما يقوم اللاعبون بضرب $(target) بواسطة $(projectile)." } }, "placement": "top" @@ -2621,7 +2757,8 @@ "fr": "Retournons à la **scène** pour ajouter des contraintes au joueur ou à la joueuse.", "es": "Volvamos a la **escena** para crear algunas restricciones para el jugador.", "pt": "Vamos voltar para a **cena** para criar algumas restrições para o jogador.", - "th": "กลับไปยัง **scene** เพื่อสร้างขีดจำกัดให้ผู้เล่น " + "th": "กลับไปยัง **scene** เพื่อสร้างขีดจำกัดให้ผู้เล่น ", + "ar": "دعنا نعود إلى **المشهد** لفرض بعض القيود على اللاعبين." } } } @@ -2638,7 +2775,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -2659,7 +2797,8 @@ "fr": "Nous allons définir une zone où le joueur ou la joueuse peut attraper les $(projectile)s. En dehors de cette zone, les $(projectile)s seront en mouvement libre.", "es": "Definiremos un área donde el jugador pueda coger $(projectile)s. Fuera de esta área, los $(projectile)s serán libres.", "pt": "Vamos definir uma área onde o jogador pode pegar $(projectile)s. Fora desta área, os $(projectile)s serão livres.", - "th": "เราจะกำหนดพื้นที่ที่ผู้เล่นจะสามารถจับ $(projectile) นอกเหนือจากพื้นที่ดังกล่าวนั้น $(projectile) จะเป็นอิสระ" + "th": "เราจะกำหนดพื้นที่ที่ผู้เล่นจะสามารถจับ $(projectile) นอกเหนือจากพื้นที่ดังกล่าวนั้น $(projectile) จะเป็นอิสระ", + "ar": "سوف نقوم بتحديد المنطقة التي يمكن للاعبين الإمساك بكل الـ $(projectile). وخارج تلك المنطقة، ستكون كل الـ $(projectile) حرة." } } } @@ -2676,7 +2815,8 @@ "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un objeto de la tienda de recursos.", "pt": "Vamos escolher um objeto da loja de recursos.", - "th": "เลือกวัตถุจากร้านค้า asset" + "th": "เลือกวัตถุจากร้านค้า asset", + "ar": "دعنا نقوم بإختيار كائن من متجر العناصر" } }, "placement": "bottom" @@ -2696,7 +2836,8 @@ "fr": "Cherchez “**background**”.", "es": "Escribe “**background**”.", "pt": "Digite “**background**”.", - "th": "พิมพ์ “**background**”" + "th": "พิมพ์ “**background**”", + "ar": "كتابة **background**." } } }, @@ -2741,7 +2882,8 @@ "fr": "Mettons la zone en place.", "es": "¡Vamos a usarla ahora!", "pt": "Vamos usá-la agora!", - "th": "เอาไปใช้เลย!" + "th": "เอาไปใช้เลย!", + "ar": "دعنا نقوم باستخدام هذا الآن!" } } } @@ -2758,7 +2900,8 @@ "fr": "Faites glisser $(grabArea) du menu à au canvas.", "es": "Arrastra $(grabArea) desde el menú al lienzo.", "pt": "Arraste $(grabArea) do menu para o canvas.", - "th": "ลาก $(grabArea) จากเมนูไปยังแคนวาส" + "th": "ลาก $(grabArea) จากเมนูไปยังแคนวาส", + "ar": "سحب $(grabArea) من القائمة إلى اللوحة." } }, "placement": "left" @@ -2772,7 +2915,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Eu terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -2784,7 +2928,8 @@ "fr": "Placez et redimensionnez $(grabArea) de telle sorte à ce qu'il couvre le coin en bas à gauche de l'écran de jeu.", "es": "Arrastra y redimensiona $(grabArea) hasta que cubra la parte inferior izquierda de la pantalla del juego.", "pt": "Arraste e redimensione $(grabArea) até que ele cubra a parte inferior esquerda da tela do jogo.", - "th": "ลากและปรับขนาด $(grabArea) จนมันครอบคลุมบริเวณซ้ายล่างในหน้าจอเกมของคุณ" + "th": "ลากและปรับขนาด $(grabArea) จนมันครอบคลุมบริเวณซ้ายล่างในหน้าจอเกมของคุณ", + "ar": "سحب وإعادة تحجيم $(grabArea) حتى يغطي أسفل الجانب الأيسر من شاشة اللعبة." } }, "image": { @@ -2804,7 +2949,8 @@ "fr": "Sélectionnez l'instance de $(grabArea) et définissez sa position sur l'axe z à **0**.", "es": "Asegúrate de que $(grabArea) está seleccionado y cambia este valor a **0**.", "pt": "Certifique-se de que $(grabArea) está selecionado e mude este valor para **0**.", - "th": "ดูให้แน่ใจว่า $(grabArea) ถูกเลือกอยู่ และปรับค่านี้เป็น **0**" + "th": "ดูให้แน่ใจว่า $(grabArea) ถูกเลือกอยู่ และปรับค่านี้เป็น **0**", + "ar": "التحقق أنه تم تحديد $(grabArea) مع تغيير قيمته إلى **0**." } }, "placement": "right" @@ -2822,7 +2968,8 @@ "fr": "Maintenant, désactivons le **comportement** “draggable” quand les $(projectile)s sont en dehors de la zone $(grabArea).", "es": "Ahora, desactivemos el **comportamiento** “draggable” cuando los $(projectile)s estén fuera de la zona $(grabArea).", "pt": "Agora, desative o **comportamento** “draggable” quando os $(projectile)s estiverem fora da área $(grabArea).", - "th": "ปิดฟังก์ชันในการสามารถถูกลาก **พฤติกรรม** ของ $(projectile) เมื่ออยู่ภายนอก $(grabArea)" + "th": "ปิดฟังก์ชันในการสามารถถูกลาก **พฤติกรรม** ของ $(projectile) เมื่ออยู่ภายนอก $(grabArea)", + "ar": "دعنا نقوم بإلغاء تفعيل السلوك (Draggable) الخاص بكل الـ $(projectile) عندما يكون خارج الـ $(grabArea)." } } } @@ -2841,7 +2988,8 @@ "fr": "Créez un nouvel évènement.", "es": "¡Creemos un nuevo evento!", "pt": "Vamos criar um novo evento!", - "th": "สร้างอีเวนท์ใหม่กันเถอะ!" + "th": "สร้างอีเวนท์ใหม่กันเถอะ!", + "ar": "دعنا نقوم بإنشاء حدث جديد!" } } } @@ -2858,7 +3006,8 @@ "fr": "Ajoutez une **condition**.", "es": "Agrega una **condición**.", "pt": "Adicione uma **condição**.", - "th": "เพิ่ม **เงื่อนไข**" + "th": "เพิ่ม **เงื่อนไข**", + "ar": "إضافة **شرط**." } } } @@ -2875,7 +3024,8 @@ "fr": "Cliquez sur $(projectile).", "es": "Selecciona $(projectile).", "pt": "Selecione $(projectile).", - "th": "เลือก $(projectile)" + "th": "เลือก $(projectile)", + "ar": "تحديد $(projectile)." } } }, @@ -2893,7 +3043,8 @@ "fr": "Cliquez sur la condition collision.", "es": "Selecciona la condición de colisión.", "pt": "Selecione a condição de colisão.", - "th": "เลือกเงื่อนไขการชนกัน" + "th": "เลือกเงื่อนไขการชนกัน", + "ar": "تحديد شرط التصادم." } } }, @@ -2911,7 +3062,8 @@ "fr": "Cliquez sur $(grabArea).", "es": "Selecciona $(grabArea).", "pt": "Selecione $(grabArea).", - "th": "เลือก $(grabArea)" + "th": "เลือก $(grabArea)", + "ar": "تحديد $(grabArea)." } }, "placement": "top" @@ -2930,7 +3082,8 @@ "fr": "La **condition** est maintenant prête.", "es": "¡La **condición** está lista!", "pt": "A **condição** está pronta!", - "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "حسنًا، تم ضبط **الشرط** تمامًا." } }, "placement": "top" @@ -2948,7 +3101,8 @@ "fr": "Faites un clic droit sur la nouvelle **condition** et sélectionnez “Inverser une condition”.", "es": "Haz clic derecho en la nueva **condición** y selecciona “Invertir condición”.", "pt": "Clique com o botão direito na nova **condição** e selecione “Inverter condição”.", - "th": "คลิกขวาที่ **เงื่อนไข** ที่เพิ่งสร้างขึ้นมาและเลือก “เงื่อนไขแบบตรงกันข้าม”" + "th": "คลิกขวาที่ **เงื่อนไข** ที่เพิ่งสร้างขึ้นมาและเลือก “เงื่อนไขแบบตรงกันข้าม”", + "ar": "نقرة بزر الفأرة الأيمن على هذا **الشرط** الذي أنشأناه للتو وتحديد **عكس الشرط**." } }, "placement": "right" @@ -2966,7 +3120,8 @@ "fr": "Ajoutez une action.", "es": "Agrega una acción.", "pt": "Adicione uma ação.", - "th": "เพิ่มการกระทำ" + "th": "เพิ่มการกระทำ", + "ar": "إضافة إجراء." } } } @@ -2983,7 +3138,8 @@ "fr": "Cliquez sur $(projectile).", "es": "Selecciona $(projectile).", "pt": "Selecione $(projectile).", - "th": "เลือก $(projectile)" + "th": "เลือก $(projectile)", + "ar": "تحديد $(projectile)." } } }, @@ -3001,7 +3157,8 @@ "fr": "Sélectionnez **l'action** qui libère le $(projectile) de la souris du joueur ou de la joueuse.", "es": "Selecciona la **acción** que libera el $(projectile) del arrastre del jugador.", "pt": "Selecione a **ação** que libera o $(projectile) do arrasto do jogador.", - "th": "เลือก **การกระทำ** ที่ปล่อย $(projectile) จากการถูกผู้เล่นจับลาก" + "th": "เลือก **การกระทำ** ที่ปล่อย $(projectile) จากการถูกผู้เล่นจับลาก", + "ar": "تحديد **الإجراء** الذي يحرر الـ $(projectile) من تحكم اللاعبين." } } }, @@ -3019,7 +3176,8 @@ "fr": "C'est bon.", "es": "¡Está bien!", "pt": "Está bom.", - "th": "มาถูกทางแล้ว" + "th": "มาถูกทางแล้ว", + "ar": "نحن على الطريق الصحيح." } }, "placement": "top" @@ -3037,7 +3195,8 @@ "fr": "Revenons à la **scène** pour placer les $(projectile)s correctement.", "es": "Volvamos a la **escena** para colocar los $(projectile)s correctamente.", "pt": "Vamos voltar para a **cena** para colocar os $(projectile)s corretamente.", - "th": "กลับไปยัง **scene** เพื่อวาง $(projectile) ให้ถูกต้อง" + "th": "กลับไปยัง **scene** เพื่อวาง $(projectile) ให้ถูกต้อง", + "ar": "دعنا نعود إلى **المشهد** لإدراج كل الـ $(projectile) بشكل صحيح." } } } @@ -3051,7 +3210,8 @@ "fr": "J'ai terminé", "es": "Ya terminé", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -3064,7 +3224,8 @@ "fr": "Repositionnez les $(projectile)s.", "es": "Reordena los $(projectile)s.", "pt": "Reorganize os $(projectile)s.", - "th": "จัดระเบียบ $(projectile)" + "th": "จัดระเบียบ $(projectile)", + "ar": "إعادة ترتيب كل الـ $(projectile)." } }, "description": { @@ -3073,7 +3234,8 @@ "fr": "Faites glisser les **instances** de $(projectile) à l'intérieur de $(background).", "es": "Arrastra todas las **instancias** de $(projectile) dentro de los límites de $(background).", "pt": "Arraste todas as **instâncias** de $(projectile) dentro dos limites de $(background).", - "th": "ลาก **instances** ของ $(projectile) ภายในขอบเขต $(background)" + "th": "ลาก **instances** ของ $(projectile) ภายในขอบเขต $(background)", + "ar": "سحب كل **مثيلات** الـ $(projectile) داخل حدود الـ $(background)." } } } @@ -3086,7 +3248,8 @@ "fr": "J'ai terminé", "es": "Ya terminé", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -3099,7 +3262,8 @@ "fr": "Créez une protection pour $(target).", "es": "Configura la protección de $(target).", "pt": "Configure a proteção de $(target).", - "th": "ตั้งที่ป้องกัน $(target)" + "th": "ตั้งที่ป้องกัน $(target)", + "ar": "إعداد حماية الـ $(target)." } }, "description": { @@ -3108,7 +3272,8 @@ "fr": "Positionnez les instances de $(block) et de $(obstacle) de manière à protéger $(target).", "es": "Coloca las instancias de $(block) y $(obstacle) de manera que protejan a $(target).", "pt": "Coloque as instâncias de $(block) e $(obstacle) de forma a proteger $(target).", - "th": "จัดวาง $(block) และ $(obstacle) โดยมีเป้าหมายเพื่อปกป้อง $(target)" + "th": "จัดวาง $(block) และ $(obstacle) โดยมีเป้าหมายเพื่อปกป้อง $(target)", + "ar": "ترتيب كلًا من الـ $(block) والـ $(obstacle) بحيث تحمي الـ $(target)." } } } @@ -3125,7 +3290,8 @@ "fr": "Lancez un **Aperçu** du jeu et assurez-vous qu'il est possible de toucher $(target).", "es": "**Previsualiza** el juego y asegúrate de que es posible ganar.", "pt": "**Pré-visualize** o jogo e certifique-se de que é possível ganhar.", - "th": "ลองเล่น **ดูตัวอย่าง** เพื่อให้มั่นใจว่าสามารถเล่นเกมชนะได้" + "th": "ลองเล่น **ดูตัวอย่าง** เพื่อให้มั่นใจว่าสามารถเล่นเกมชนะได้", + "ar": "**معاينة** اللعبة والتحقق أنها قابلة للفوز فيها." } }, "placement": "bottom" @@ -3143,7 +3309,8 @@ "fr": "Une fois que c'est bon, nous allons générer un lien pour partager votre jeu.", "es": "Una vez que estés listo, generaremos un enlace para compartir tu juego.", "pt": "Quando estiver pronto, criaremos um link para compartilhar o seu jogo.", - "th": "เมื่อพร้อมแล้ว เราจะสร้างลิงค์สำหรับแชร์เกม" + "th": "เมื่อพร้อมแล้ว เราจะสร้างลิงค์สำหรับแชร์เกม", + "ar": "بمجرد الاستعداد، سوف نقوم بإنشاء رابط لمشاركة لعبتك." } }, "placement": "bottom" @@ -3161,7 +3328,8 @@ "fr": "Tout d'abord, vous devez vous créer un compte.", "es": "Primero, debes crear una cuenta.", "pt": "Primeiro, você precisa criar uma conta.", - "th": "ก่อนอื่น คุณจะต้องมีบัญชี" + "th": "ก่อนอื่น คุณจะต้องมีบัญชี", + "ar": "أولًا، نحتاج إلى إنشاء حساب." } }, "placement": "bottom" @@ -3194,7 +3362,8 @@ "fr": "Remplissez le formulaire et cliquez ici.", "es": "Rellena el formulario y luego haz clic aquí.", "pt": "Preencha o formulário e clique aqui.", - "th": "กรอกฟอร์มแล้วกดตรงนี้" + "th": "กรอกฟอร์มแล้วกดตรงนี้", + "ar": "كتابة المعلومات وثم النقر هنا." } }, "placement": "bottom" @@ -3214,7 +3383,8 @@ "fr": "Après avoir rempli le formulaire, cliquez ici.", "es": "Después de rellenar el formulario, haz clic aquí.", "pt": "Depois de preencher o formulário, clique aqui.", - "th": "หลังจากกรอกข้อมูลของคุณแล้ว กดตรงนี้" + "th": "หลังจากกรอกข้อมูลของคุณแล้ว กดตรงนี้", + "ar": "بعد كتابة معلوماتك، النقر هنا." } }, "placement": "bottom" @@ -3234,7 +3404,8 @@ "fr": "Cliquez ici pour **publier** votre jeu.", "es": "Haz clic aquí para **publicar** tu juego.", "pt": "Clique aqui para **publicar** o seu jogo.", - "th": "กดที่นี่เพื่อ **เผยแพร่** เกมของคุณ" + "th": "กดที่นี่เพื่อ **เผยแพร่** เกมของคุณ", + "ar": "النقر هنا ل**نشر** لعبتك." } }, "placement": "bottom" @@ -3259,7 +3430,8 @@ "fr": "Cliquez ici pour ouvrir votre jeu dans votre navigateur. Pensez à partager le lien pour que d'autres puissent y jouer!\n\nUne fois que vous avez terminé, fermez cette fenêtre.", "es": "Haz clic aquí para abrir tu juego en tu navegador. ¡Recuerda compartir el enlace para que otros puedan jugar tu juego!\n\nUna vez que hayas terminado, cierra esta ventana.", "pt": "Clique aqui para abrir o seu jogo no seu navegador. Lembre-se de compartilhar o link para que outros possam jogar o seu jogo!\n\nUma vez que você terminar, feche esta janela.", - "th": "คลิกที่นี่เพื่อเปิดเกมของคุณบนเบราวเซอร์ อย่าลืมแชร์ลิงค์เพื่อให้ผู้เล่นคนอื่นสามารถเล่นเกมของคุณได้!\n\nหลังจากเสร็จแล้ว ปิดหน้าต่างนี้" + "th": "คลิกที่นี่เพื่อเปิดเกมของคุณบนเบราวเซอร์ อย่าลืมแชร์ลิงค์เพื่อให้ผู้เล่นคนอื่นสามารถเล่นเกมของคุณได้!\n\nหลังจากเสร็จแล้ว ปิดหน้าต่างนี้", + "ar": "النقر هنا لفتح لعبتك على متصفحك، تذكر مشاركة الرابط حتى يتنسى للآخرين إمكانية لعب لعبتك!\n\nيمكنك الإغلاق بمجرد الانتهاء." } }, "placement": "top" @@ -3276,7 +3448,8 @@ "fr": "## Félicitations !", "es": "## ¡Felicidades!", "pt": "## Parabéns!", - "th": "## ยินดีด้วย!" + "th": "## ยินดีด้วย!", + "ar": "## تهانينا!" } }, { @@ -3285,7 +3458,8 @@ "fr": "Vous avez terminé la seconde partie de votre jeu.", "es": "Has terminado la segunda parte de tu juego.", "pt": "Você terminou a segunda parte do seu jogo.", - "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว" + "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว", + "ar": "لقد انهيت الجزء الثاني من لعبة القذف." } }, { @@ -3294,7 +3468,8 @@ "fr": "Vous avez découvert de nouveaux concepts de GDevelop:\n- [les évènements](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [les objets texte](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [les calques](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [les actions et les conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", "es": "Has descubierto otros conceptos básicos de GDevelop:\n- [Eventos](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Objetos de texto](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Capas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Acciones y condiciones](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", "pt": "Você descobriu outros conceitos básicos do GDevelop:\n- [Eventos](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Objetos de texto](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Camadas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Ações e Condições](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", - "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" + "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", + "ar": "لقد اكتشفت المزيد من أساسياتGDevelop:\n- [أحداث](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [كائنات نصية](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [طبقات](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [شروط وإجراءات](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { @@ -3303,7 +3478,8 @@ "fr": "Vous pouvez maintenant faire une pause avant de commencer le prochain chapitre pour ajouter un tableau de score.", "es": "Ahora puedes hacer una pausa antes de comenzar el próximo capítulo para agregar una tabla de clasificación.", "pt": "Agora você pode fazer uma pausa antes de começar o próximo capítulo para adicionar uma tabela de classificação.", - "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเพื่อเพิ่มกระดานคะแนนเลยก็ได้" + "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเพื่อเพิ่มกระดานคะแนนเลยก็ได้", + "ar": "يمكنك الآن أخذ استراحة من البرنامج التعليمي، أو إضافة لوحة صدارة في الفصل التالي." } } ] @@ -3321,7 +3497,8 @@ "fr": "Faites un clic droit sur $(background) et sélectionnez “Définir comme **objet global**”.", "es": "Haga clic derecho en $(background) y seleccione “Definir como **objeto global**”.", "pt": "Clique com o botão direito em $(background) e selecione “Definir como **objeto global**”.", - "th": "คลิกขวาที่ $(background) และเลือก “ตั้งเป็น **วัตถุโกลบอล**”" + "th": "คลิกขวาที่ $(background) และเลือก “ตั้งเป็น **วัตถุโกลบอล**”", + "ar": "نقرة بزر الفأرة الأيمن على $(background) ونقر **تعيين ككائن عمومي**." } }, "placement": "left" @@ -3339,7 +3516,8 @@ "fr": "Créons une scène qui servira d'écran d'ouverture du jeu.", "es": "Ahora creemos una nueva **escena** para nuestra pantalla de inicio.", "pt": "Agora vamos criar uma nova **cena** para a nossa tela inicial.", - "th": "ทีนี้สร้าง **scene** ใหม่ สำหรับฉากเริ่มต้น" + "th": "ทีนี้สร้าง **scene** ใหม่ สำหรับฉากเริ่มต้น", + "ar": "الآن دعنا نقوم بإنشاء **مشهد** جديد لشاشة البداية خاصتنا." } }, "placement": "right" @@ -3357,7 +3535,8 @@ "fr": "Cliquez ici.", "es": "Haga clic aquí.", "pt": "Clique aqui.", - "th": "คลิกที่นี่" + "th": "คลิกที่นี่", + "ar": "النقر هنا." } }, "placement": "right" @@ -3378,7 +3557,8 @@ "fr": "Faites un clic droit sur la nouvelle scène et changez son nom pour “**EcranOuverture**”.\n\nUne fois terminé, cliquez sur l'élément pour ouvrir la scène.", "es": "Haga clic derecho en la nueva escena y cambie su nombre a “**PantallaInicio**”.\n\nUna vez terminado, haga clic en el elemento para abrir la escena.", "pt": "Clique com o botão direito na nova cena e altere o nome para “**TelaInicial**”.\n\nUma vez terminado, clique no item para abrir a nova cena.", - "th": "คลิกขวาที่ scene ใหม่และเปลี่ยนชื่อเป็น “**StartScreen**”\n\nเมื่อเสร็จแล้ว คลิกที่ไอเทมเพื่อเปิด scene ใหม่" + "th": "คลิกขวาที่ scene ใหม่และเปลี่ยนชื่อเป็น “**StartScreen**”\n\nเมื่อเสร็จแล้ว คลิกที่ไอเทมเพื่อเปิด scene ใหม่", + "ar": "نقرة بزر الفأرة الأيمن على المشهد الجديد وإعادة تسميته إلى **StartScreen**.\n\nبمجرد الإنتهاء، النقر عليه لفتح المشهد الجديد." } }, "placement": "right" @@ -3397,7 +3577,8 @@ "fr": "Faites glisser $(background) du menu au canvas.", "es": "Arrastre $(background) desde el menú al lienzo.", "pt": "Arraste $(background) do menu para a cena.", - "th": "ลาก $(background) มาใส่ใน scene" + "th": "ลาก $(background) มาใส่ใน scene", + "ar": "سحب $(background) إلى المشهد." } }, "placement": "left" @@ -3411,7 +3592,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -3423,7 +3605,8 @@ "fr": "Positionnez et redimensionnez $(background) de telle sorte qu'il recouvre l'écran de jeu.", "es": "Arrastre para expandir el tamaño de $(background) hasta que se estire sobre toda la área del juego.", "pt": "Arraste para expandir o tamanho de $(background) até que ele se estenda sobre toda a área do jogo.", - "th": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ" + "th": "ลากเพื่อปรับขนาด $(background) จนมันครอบคลุมบริเวณทั้งหมดในเกมของคุณ", + "ar": "سحب وتوسيع حجم الـ $(background) حتى يتم تغطية اللعبة بأكملها." } }, "image": { @@ -3443,7 +3626,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -3464,7 +3648,8 @@ "fr": "Maintenant, créons un titre!", "es": "¡Ahora creemos un título!", "pt": "Agora, vamos criar um título!", - "th": "ทีนี้ได้เวลาสร้าง title!" + "th": "ทีนี้ได้เวลาสร้าง title!", + "ar": "الآن دعنا نقوم بإنشاء عنوان!" } } } @@ -3481,7 +3666,8 @@ "fr": "Nous allons créer un objet texte de zéro.", "es": "Vamos a crear un texto desde cero.", "pt": "Vamos criar um texto do zero.", - "th": "สร้างข้อความเอง" + "th": "สร้างข้อความเอง", + "ar": "الآن دعنا نقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -3501,7 +3687,8 @@ "fr": "Sélectionnez l'objet **Texte**", "es": "Selecciona el objeto **Texto**", "pt": "Selecione o objeto **Texto**", - "th": "เลือกวัตถุ **ข้อความ**" + "th": "เลือกวัตถุ **ข้อความ**", + "ar": "تحديد الكائن **نص**" } }, "placement": "bottom" @@ -3520,7 +3707,8 @@ "fr": "Changez le nom de l'objet pour “Title”.", "es": "Cambia el nombre del objeto a “Title”.", "pt": "Mude o nome do objeto para “Title”.", - "th": "เปลี่ยนชื่อวัตถุเป็น “Title”" + "th": "เปลี่ยนชื่อวัตถุเป็น “Title”", + "ar": "تغيير اسم الكائن إلى **Title**." } }, "placement": "bottom" @@ -3539,7 +3727,8 @@ "fr": "Utilisez une taille de **200**.", "es": "Utiliza un tamaño de **200**.", "pt": "Use um tamanho de **200**.", - "th": "แก้ไขขนาดฟอนต์เป็น **200**" + "th": "แก้ไขขนาดฟอนต์เป็น **200**", + "ar": "تغيير حجم الخط إلى **200**." } }, "placement": "bottom" @@ -3558,7 +3747,8 @@ "fr": "Entrez le nom que vous avez choisi pour votre jeu.", "es": "Escribe el nombre que has elegido para tu juego.", "pt": "Digite o nome que você escolheu para o seu jogo.", - "th": "เปลี่ยนข้อความเริ่มต้นเป็นชื่อเกมของคุณ อะไรก็ได้" + "th": "เปลี่ยนข้อความเริ่มต้นเป็นชื่อเกมของคุณ อะไรก็ได้", + "ar": "تغيير نص المثيل ليقوم بعرض **-أيًا كان-** عنوان اللعبة الذي يناسب ذوقك." } }, "placement": "bottom" @@ -3577,7 +3767,8 @@ "fr": "Nous avons terminé.", "es": "Hemos terminado.", "pt": "Terminamos.", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهينا." } } }, @@ -3597,7 +3788,8 @@ "fr": "Faites glisser $(title) du menu au canvas et placez le où vous voulez dans l'écran de jeu.", "es": "Arrastra $(title) desde el menú al lienzo y colócalo donde quieras en la pantalla de juego.", "pt": "Arraste $(title) do menu para o canvas e coloque-o onde quiser na tela do jogo.", - "th": "ลาก $(title) ไปยัง **scene** ที่คุณต้องการใส่ชื่อเกม" + "th": "ลาก $(title) ไปยัง **scene** ที่คุณต้องการใส่ชื่อเกม", + "ar": "سحب $(title) إلى **المشهد** أينما كان المكان الذي يعجبك." } }, "placement": "left" @@ -3615,7 +3807,8 @@ "fr": "Faites un clic droit sur $(title) et sélectionnez “Dupliquer”.", "es": "Haz clic derecho en $(title) y selecciona “Duplicar”.", "pt": "Clique com o botão direito em $(title) e selecione “Duplicar”.", - "th": "คลิกขวาที่ $(title) และเลือก “คัดลอกซ้ำ”" + "th": "คลิกขวาที่ $(title) และเลือก “คัดลอกซ้ำ”", + "ar": "نقرة بزر الفأرة الأيمن على $(title) وتحديد **تكرار**." } }, "placement": "left" @@ -3636,7 +3829,8 @@ "fr": "Double-cliquez sur $(startText).", "es": "Haz doble clic en $(startText).", "pt": "Clique duas vezes em $(startText).", - "th": "ดับเบิ้ลคลิกที่ $(startText)" + "th": "ดับเบิ้ลคลิกที่ $(startText)", + "ar": "نقرة مزدوجة على $(startText)." } }, "placement": "left" @@ -3654,7 +3848,8 @@ "fr": "Changez le nom de **l'objet** pour “**Start**”.", "es": "Cambia el nombre del **objeto** a “**Start**”.", "pt": "Mude o nome do **objeto** para “**Start**”.", - "th": "เปลี่ยนชื่อ **วัตถุ** เป็น “**Start**”" + "th": "เปลี่ยนชื่อ **วัตถุ** เป็น “**Start**”", + "ar": "تغيير اسم **الكائن** إلى **Start**." } }, "placement": "bottom" @@ -3673,7 +3868,8 @@ "fr": "Utilisez une taille de **50**.", "es": "Utiliza un tamaño de **50**.", "pt": "Use um tamanho de **50**.", - "th": "แก้ไขขนาดฟอนต์เป็น **50**" + "th": "แก้ไขขนาดฟอนต์เป็น **50**", + "ar": "تغيير حجم الخط إلى **50**." } }, "placement": "bottom" @@ -3692,7 +3888,8 @@ "fr": "Définissez le texte de l'objet à “Jouer”.", "es": "Define el texto del objeto como “Jugar”.", "pt": "Defina o texto do objeto como “Jogar”.", - "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Start Game”" + "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Start Game”", + "ar": "تغيير نص المثيل إلى أي شيء يدل على أن اللعبة ستبدأ بمجرد الضغط عليه.\n(على سبيل المثال: بدء اللعبة)" } }, "placement": "bottom" @@ -3711,7 +3908,8 @@ "fr": "Nous avons terminé.", "es": "Hemos terminado.", "pt": "Terminamos.", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهينا." } } }, @@ -3731,7 +3929,8 @@ "fr": "Faites glisser $(startText) du menu au canvas à l'endroit où vous voulez.", "es": "Arrastra $(startText) desde el menú al lienzo en el lugar donde quieras.", "pt": "Arraste $(startText) do menu para o canvas no lugar onde você deseja.", - "th": "ลาก $(startText) ไปยัง **scene** ที่คุณต้องการใส่ปุ่มเริ่มเกม" + "th": "ลาก $(startText) ไปยัง **scene** ที่คุณต้องการใส่ปุ่มเริ่มเกม", + "ar": "سحب $(startText) إلى **المشهد** أينما كان المكان الذي يعجبك." } }, "placement": "left" @@ -3749,7 +3948,8 @@ "fr": "Maintenant, faisons en sorte de pouvoir cliquer sur le texte.", "es": "Ahora, hagamos que se pueda hacer clic en el texto.", "pt": "Agora, vamos fazer com que seja possível clicar no texto.", - "th": "โต้ตอบกับข้อความ" + "th": "โต้ตอบกับข้อความ", + "ar": "الآن دعنا نتفاعل مع ذلك العنوانين." } } } @@ -3767,7 +3967,8 @@ "fr": "Créez un nouvel **évènement**.", "es": "Crea un nuevo **evento**.", "pt": "Crie um novo **evento**.", - "th": "สร้าง **event** ใหม่" + "th": "สร้าง **event** ใหม่", + "ar": "دعنا نقوم بإنشاء **حدث** جديد." } } } @@ -3784,7 +3985,8 @@ "fr": "Ajoutez une **condition**.", "es": "Agrega una **condición**.", "pt": "Adicione uma **condição**.", - "th": "เพิ่ม **เงื่อนไข**" + "th": "เพิ่ม **เงื่อนไข**", + "ar": "إضافة **شرط**." } } } @@ -3801,7 +4003,8 @@ "fr": "Cliquez sur $(startText).", "es": "Haz clic en $(startText).", "pt": "Clique em $(startText).", - "th": "เลือก $(startText)" + "th": "เลือก $(startText)", + "ar": "تحديد $(startText)." } } }, @@ -3819,7 +4022,8 @@ "fr": "Cliquez sur cette condition de position du curseur.", "es": "Haz clic en esta condición de posición del cursor.", "pt": "Clique nesta condição de posição do cursor.", - "th": "เลือกเงื่อนไขเคอร์เซอร์" + "th": "เลือกเงื่อนไขเคอร์เซอร์", + "ar": "تحديد شرط المؤشر." } } }, @@ -3837,7 +4041,8 @@ "fr": "Rien de plus à configurer.", "es": "Nada más que configurar.", "pt": "Nada mais para configurar.", - "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "حسنًا، تم ضبط **الشرط** تمامًا." } }, "placement": "top" @@ -3855,7 +4060,8 @@ "fr": "Ajoutez une autre **condition**.", "es": "Agrega otra **condición**.", "pt": "Adicione outra **condição**.", - "th": "เพิ่ม **เงื่อนไข** อีก" + "th": "เพิ่ม **เงื่อนไข** อีก", + "ar": "إضافة **شرط** آخر." } } } @@ -3872,7 +4078,8 @@ "fr": "Cherchez “**Souris**”", "es": "Escribe “**Ratón**”.", "pt": "Digite “**Mouse**”.", - "th": "พิมพ์ “**Mouse**”" + "th": "พิมพ์ “**Mouse**”", + "ar": "كتابة **فأرة**." } } }, @@ -3890,7 +4097,8 @@ "fr": "Cliquez sur “Bouton de la souris relâché”.", "es": "Haz clic en “Botón del ratón liberado”.", "pt": "Clique em “Botão do mouse liberado”.", - "th": "เลือก “ปุ่มจากเมาส์ถูกปล่อย”" + "th": "เลือก “ปุ่มจากเมาส์ถูกปล่อย”", + "ar": "تحديد **تم تحرير زر الفأرة**." } } }, @@ -3908,7 +4116,8 @@ "fr": "Sélectionnez “Gauche (principal)”.", "es": "Selecciona “Izquierda (principal)”.", "pt": "Selecione “Esquerda (principal)”.", - "th": "เลือก “ซ้าย (หลัก)”" + "th": "เลือก “ซ้าย (หลัก)”", + "ar": "تحديد **يسار (أساسي)**." } }, "placement": "top" @@ -3927,7 +4136,8 @@ "fr": "C'est bon pour cette condition.", "es": "Está bien para esta condición.", "pt": "Está tudo certo para esta condição.", - "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "เอาล่ะ เงื่อนไขถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "حسنًا، تم ضبط **الشرط** تمامًا." } }, "placement": "top" @@ -3945,7 +4155,8 @@ "fr": "Ajoutons une **action** maintenant.", "es": "Agreguemos una **acción** ahora.", "pt": "Vamos adicionar uma **ação** agora.", - "th": "เพิ่ม **การกระทำ**" + "th": "เพิ่ม **การกระทำ**", + "ar": "دعنا نقوم بإضافة **إجراء** الآن." } } } @@ -3962,7 +4173,8 @@ "fr": "Cherchez “**scène**”.", "es": "Escribe “**Escena**”.", "pt": "Digite “**Cena**”.", - "th": "พิมพ์ “**Scene**”" + "th": "พิมพ์ “**Scene**”", + "ar": "كتابة **مشهد**." } } }, @@ -3980,7 +4192,8 @@ "fr": "Cliquez sur “**Changer la scène**”.", "es": "Haz clic en “**Cambiar la escena**”.", "pt": "Clique em “**Alterar a cena**”.", - "th": "เลือก “**Change the scene**”" + "th": "เลือก “**Change the scene**”", + "ar": "تحديد **تغيير المشهد**." } } }, @@ -3998,7 +4211,8 @@ "fr": "Sélectionnez “$(playScene)”.", "es": "Selecciona “$(playScene)”.", "pt": "Selecione “$(playScene)”.", - "th": "เลือก “$(playScene)”" + "th": "เลือก “$(playScene)”", + "ar": "تحديد $(playScene)." } }, "placement": "top" @@ -4017,7 +4231,8 @@ "fr": "L'action est bien configurée.", "es": "La acción está bien configurada.", "pt": "A ação está configurada corretamente.", - "th": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "حسنًا، تم ضبط **الإجراء** تمامًا." } }, "placement": "top" @@ -4035,7 +4250,8 @@ "fr": "Retournons à la **scène** pour afficher le score.", "es": "Volvamos a la **escena** para mostrar el puntaje.", "pt": "Vamos voltar para a **cena** para adicionar um score.", - "th": "กลับไปยัง **scene** เพื่อเพิ่มคะแนน" + "th": "กลับไปยัง **scene** เพื่อเพิ่มคะแนน", + "ar": "دعنا نعود إلى **المشهد** لإضافة النتيجة." } } } @@ -4052,7 +4268,8 @@ "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", - "th": "เปิดแผงควบคุม **วัตถุ**" + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." } }, "placement": "bottom" @@ -4073,7 +4290,8 @@ "fr": "Créez un object texte qui affichera le score du joueur ou de la joueuse.", "es": "Crea un objeto de texto que muestre la puntuación del jugador o jugadora.", "pt": "Vamos criar um texto que irá exibir o score do jogador.", - "th": "สร้างข้อความสำหรับแสดงคะแนนผู้เล่น" + "th": "สร้างข้อความสำหรับแสดงคะแนนผู้เล่น", + "ar": "دعنا نقوم بإنشاء نص ليعرض نتيجة اللاعبين." } } } @@ -4090,7 +4308,8 @@ "fr": "Nous allons créer un objet texte de zéro.", "es": "Vamos a crear un objeto de texto desde cero.", "pt": "Vamos criar um texto do zero.", - "th": "สร้างข้อความเอง" + "th": "สร้างข้อความเอง", + "ar": "دعنا نقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -4110,7 +4329,8 @@ "fr": "Sélectionnez l'objet **Texte**", "es": "Selecciona el objeto **Texto**", "pt": "Selecione o objeto **Texto**", - "th": "เลือกวัตถุ **ข้อความ**" + "th": "เลือกวัตถุ **ข้อความ**", + "ar": "تحديد الكائن **نص**." } }, "placement": "bottom" @@ -4129,7 +4349,8 @@ "fr": "Changez le nom de l'objet pour “**Score**”.", "es": "Cambia el nombre del objeto a “**Score**”.", "pt": "Mude o nome do objeto para “**Score**”.", - "th": "เปลี่ยนชื่อวัตถุเป็น “**Score**”" + "th": "เปลี่ยนชื่อวัตถุเป็น “**Score**”", + "ar": "تغيير اسم الكائن إلى **Score**." } }, "placement": "bottom" @@ -4148,7 +4369,8 @@ "fr": "Utilisez une taille de **50**.", "es": "Usa un tamaño de **50**.", "pt": "Use um tamanho de **50**.", - "th": "แก้ไขขนาดฟอนต์เป็น **50**" + "th": "แก้ไขขนาดฟอนต์เป็น **50**", + "ar": "تغيير حجم الخط إلى **50**." } }, "placement": "bottom" @@ -4167,7 +4389,8 @@ "fr": "Utilisez comme texte initial “Temps : 0”.", "es": "Usa como texto inicial “Tiempo: 0”.", "pt": "Use como texto inicial “Tempo: 0”.", - "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Time: 0”" + "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Time: 0”", + "ar": "تغيير نص المثيل إلى **الوقت: 0**." } }, "placement": "bottom" @@ -4186,7 +4409,8 @@ "fr": "Nous avons terminé.", "es": "Hemos terminado.", "pt": "Estamos prontos.", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهينا." } } }, @@ -4206,7 +4430,8 @@ "fr": "Faites glisser $(scoreText) du menu au canvas et mettez le en haut à droite de l'écran de jeu.", "es": "Arrastra $(scoreText) desde el menú al lienzo y colócalo en la esquina superior izquierda de la pantalla de juego.", "pt": "Arraste $(scoreText) do menu para o canvas e coloque-o no canto superior esquerdo da tela de jogo.", - "th": "ลาก $(scoreText) ไปยังมุมซ้ายบนของหน้าจอ" + "th": "ลาก $(scoreText) ไปยังมุมซ้ายบนของหน้าจอ", + "ar": "سحب $(scoreText) إلى أعلى يسار الشاشة." } }, "placement": "left" @@ -4224,7 +4449,8 @@ "fr": "Maintenant, changeons le score du joueur ou de la joueuse en fonction du temps écoulé.", "es": "Ahora, cambiemos la puntuación del jugador o jugadora en función del tiempo transcurrido.", "pt": "Agora, vamos mudar a pontuação do jogador ou jogadora de acordo com o tempo decorrido.", - "th": "เปลี่ยนแปลงคะแนนแบบไดนามิก" + "th": "เปลี่ยนแปลงคะแนนแบบไดนามิก", + "ar": "دعنا نقوم بتغيير النتيجة بفعالية." } } } @@ -4242,7 +4468,8 @@ "fr": "Nous allons créer un chronomètre qui commencera au moment où la **scène** démarre.", "es": "Vamos a crear un temporizador que comenzará cuando la **escena** comience.", "pt": "Vamos criar um cronômetro que começará quando a **cena** começar.", - "th": "เราจะสร้างนาฬิกาจับเวลาโดยเริ่มจับเวลาเมื่อ **scene** เริ่มต้น" + "th": "เราจะสร้างนาฬิกาจับเวลาโดยเริ่มจับเวลาเมื่อ **scene** เริ่มต้น", + "ar": "سوف نقوم بإنشاء مؤقت يبدأ مع **بداية** المشهد." } } }, @@ -4260,7 +4487,8 @@ "fr": "Ajoutez une **condition**.", "es": "Agrega una **condición**.", "pt": "Adicione uma **condição**.", - "th": "เพิ่ม **เงื่อนไข**" + "th": "เพิ่ม **เงื่อนไข**", + "ar": "إضافة **شرط**." } } } @@ -4277,7 +4505,8 @@ "fr": "Cherchez “**Scène**”.", "es": "Busca “**Escena**”.", "pt": "Procure por “**Cena**”.", - "th": "ค้นหา “**Scene**”" + "th": "ค้นหา “**Scene**”", + "ar": "البحث عن **مشهد**." } } }, @@ -4295,7 +4524,8 @@ "fr": "Cliquez sur la condition *Au lancement de la scène*.", "es": "Haz clic en la condición *Al inicio de la escena*.", "pt": "Clique na condição *No início da cena*.", - "th": "เลือก *เงื่อนไข** ขณะที่เริ่มฉาก*" + "th": "เลือก *เงื่อนไข** ขณะที่เริ่มฉาก*", + "ar": "تحديد الشرط *في بداية المشهد*." } } }, @@ -4313,7 +4543,8 @@ "fr": "Nous allons maintenant créer le chronomètre.", "es": "Ahora creemos el temporizador.", "pt": "Agora, vamos criar o cronômetro.", - "th": "สร้างนาฬืกาจับเวลา" + "th": "สร้างนาฬืกาจับเวลา", + "ar": "دعنا نقوم بإنشاء مؤقت الآن." } }, "placement": "top" @@ -4331,7 +4562,8 @@ "fr": "Créez une **action**.", "es": "Crea una **acción**.", "pt": "Crie uma **ação**.", - "th": "สร้าง **การกระทำ**" + "th": "สร้าง **การกระทำ**", + "ar": "إنشاء **إجراء**." } } } @@ -4348,7 +4580,8 @@ "fr": "Cherchez “chrono”.", "es": "Busca “temporizador”.", "pt": "Procure por “cronômetro”.", - "th": "ค้นหา “ตัวจับเวลา Scene”" + "th": "ค้นหา “ตัวจับเวลา Scene”", + "ar": "البحث عن **مؤقت**." } } }, @@ -4366,7 +4599,8 @@ "fr": "Cliquez sur l'action *Démarrer (ou réinitialiser) un chronomètre de scène*.", "es": "Haz clic en la acción *Iniciar (o reiniciar) un temporizador de escena*.", "pt": "Clique na ação *Iniciar (ou reiniciar) um cronômetro de cena*.", - "th": "เลือกการกระทำ *เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลา*" + "th": "เลือกการกระทำ *เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลา*", + "ar": "تحديد الإجراء *بدء (أو إعادة تعيين) مؤقت المشهد*." } } }, @@ -4384,7 +4618,8 @@ "fr": "Entrez **\"Score\"** (entre guillements).", "es": "Escribe **\"Score\"** (entre comillas).", "pt": "Digite **\"Score\"** (entre aspas).", - "th": "พิมพ์ **\"Score\"** (ใส่ quotations ด้วย)" + "th": "พิมพ์ **\"Score\"** (ใส่ quotations ด้วย)", + "ar": "كتابة **\"Score\"** (داخل علامتا تنصيص)." } } }, @@ -4403,7 +4638,8 @@ "fr": "Nous avons terminé.", "es": "Hemos terminado.", "pt": "Terminamos.", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهينا." } }, "placement": "top" @@ -4421,7 +4657,8 @@ "fr": "Maintenant, affichons le score.", "es": "Ahora, muestremos el marcador.", "pt": "Agora, vamos exibir a pontuação.", - "th": "แสดงคะแนน" + "th": "แสดงคะแนน", + "ar": "الآن دعنا نقوم بعرض النتيجة." } } }, @@ -4439,7 +4676,8 @@ "fr": "Nous allons rendre le score dynamique.", "es": "Hagamos que el marcador sea dinámico.", "pt": "Vamos tornar a pontuação dinâmica.", - "th": "เปลี่ยนแปลงคะแนนให้เป็นแบบไดนามิก" + "th": "เปลี่ยนแปลงคะแนนให้เป็นแบบไดนามิก", + "ar": "دعنا نقوم بجعل النتيجة متفاعلة." } } } @@ -4456,7 +4694,8 @@ "fr": "Cliquez sur $(scoreText).", "es": "Haz clic en $(scoreText).", "pt": "Clique em $(scoreText).", - "th": "เลือก $(scoreText)" + "th": "เลือก $(scoreText)", + "ar": "تحديد $(scoreText)." } } }, @@ -4474,7 +4713,8 @@ "fr": "Nous allons changer le contenu du texte.", "es": "Cambiamos el texto.", "pt": "Vamos alterar o texto.", - "th": "เราจะแก้ไขข้อความ" + "th": "เราจะแก้ไขข้อความ", + "ar": "سوف نقوم بتغيير النص." } } }, @@ -4492,7 +4732,8 @@ "fr": "Cliquez sur “= (définir à)”.", "es": "Selecciona “= (establecer en)”.", "pt": "Selecione “= (definir como)”.", - "th": "เลือก “= (ตั้งเป็น)”" + "th": "เลือก “= (ตั้งเป็น)”", + "ar": "تحديد **= (تعيين إلى)**." } } }, @@ -4511,7 +4752,8 @@ "fr": "Double cliquez sur cette ligne pour la sélectionner et copiez-collez là ici : `\"Temps : \" + ToString(round( TimerElapsedTime(\"Score\")))`.", "es": "Haz doble clic para resaltar esta línea, luego copia y pega aquí: `\"Tiempo: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", "pt": "Clique duas vezes para destacar esta linha, depois copie e cole aqui: `\"Tempo: \" + ToString(round( TimerElapsedTime(\"Score\")))`.", - "th": "ดับเบิ้ลคลิกเพื่อไฮไลต์ จากนั้นคัดลองและวางที่นี่: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`" + "th": "ดับเบิ้ลคลิกเพื่อไฮไลต์ จากนั้นคัดลองและวางที่นี่: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`", + "ar": "نقرة مزدوجة لتحديد هذا السطر، ثم نسخ ولصق هذا هنا:\n\n`\"الوقت: \" + ToString(round( TimerElapsedTime(\"Score\")))`." } } }, @@ -4530,7 +4772,8 @@ "fr": "On est tout bon.", "es": "Estamos listos.", "pt": "Estamos prontos.", - "th": "เรียบร้อยแล้ว" + "th": "เรียบร้อยแล้ว", + "ar": "ضبطنا كل شيء." } }, "placement": "top" @@ -4548,7 +4791,8 @@ "fr": "Maintenant, sauvegardons le score du joueur ou de la joueuse.", "es": "Ahora, guardemos la puntuación del jugador o jugadora.", "pt": "Agora, vamos salvar a pontuação do jogador ou jogadora.", - "th": "ทีนี้ เราจะบันทึกคะแนนของผู้เล่น" + "th": "ทีนี้ เราจะบันทึกคะแนนของผู้เล่น", + "ar": "الآن دعنا نقوم بحفظ نتيجة اللاعبين." } }, "description": { @@ -4557,7 +4801,8 @@ "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", "es": "En el evento donde $(target) se elimina, haz clic en “Añadir acción”.", "pt": "No evento onde $(target) é excluído, clique em “Adicionar ação”.", - "th": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "th": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”", + "ar": "في الحدث الذي يتم حذف $(target) فيه، النقر على **إضافة إجراء**." } } } @@ -4574,7 +4819,8 @@ "fr": "Cherchez “**classement**”.", "es": "Busca “**clasificación**”.", "pt": "Procure por “**classificação**”.", - "th": "ค้นหา “leaderboard”" + "th": "ค้นหา “leaderboard”", + "ar": "البحث عن **حفظ**." } } }, @@ -4592,7 +4838,8 @@ "fr": "Sélectionnez l'action **Enregistrer le score du joueur connecté**.", "es": "Selecciona la acción **Guardar la puntuación del jugador conectado**.", "pt": "Selecione a ação **Salvar pontuação do jogador conectado**.", - "th": "เลือกการกระทำ **บันทึกคะแนนผู้เล่นที่เชื่อมต่อ**" + "th": "เลือกการกระทำ **บันทึกคะแนนผู้เล่นที่เชื่อมต่อ**", + "ar": "تحديد الإجراء **حفظ نتيجة اللاعب المتصل**." } } }, @@ -4610,7 +4857,8 @@ "fr": "Ouvrez le panneau de gestion des classements.", "es": "Abre el panel de administración de clasificaciones.", "pt": "Abra o painel de administração de classificações.", - "th": "เปิด **Leaderboard admin**" + "th": "เปิด **Leaderboard admin**", + "ar": "فتح **مسؤول لوحات الصدارة**." } } }, @@ -4628,7 +4876,8 @@ "fr": "Créez un nouveau classement.", "es": "Crea una clasificación.", "pt": "Crie uma classificação.", - "th": "สร้าง leaderboard" + "th": "สร้าง leaderboard", + "ar": "إنشاء لوحة صدارة." } } }, @@ -4646,7 +4895,8 @@ "fr": "Changez son nom.", "es": "Cambiamos su nombre.", "pt": "Vamos mudar o nome.", - "th": "เปลี่ยนชื่อ" + "th": "เปลี่ยนชื่อ", + "ar": "دعنا نقوم بتغيير اسمه." } } }, @@ -4664,7 +4914,8 @@ "fr": "Entrez “*Score*”.", "es": "Escribe “*Score*”.", "pt": "Digite “*Score*”.", - "th": "พิมพ์ “*Score*”" + "th": "พิมพ์ “*Score*”", + "ar": "كتابة *Score*." } } }, @@ -4682,7 +4933,8 @@ "fr": "Sauvegardez quand vous avez terminé.", "es": "Guarda cuando hayas terminado.", "pt": "Salve quando terminar.", - "th": "บันทึกการเปลี่ยนแปลงหลังจากเสร็จแล้ว" + "th": "บันทึกการเปลี่ยนแปลงหลังจากเสร็จแล้ว", + "ar": "حفظ التغييرات عند الإنتهاء." } } }, @@ -4700,7 +4952,8 @@ "fr": "Notre classement est bien configuré, vous pouvez fermer.", "es": "Nuestra clasificación está lista, puedes cerrar.", "pt": "Nossa classificação está pronta, você pode fechar.", - "th": "leaderboard ของเราพร้อมแล้ว" + "th": "leaderboard ของเราพร้อมแล้ว", + "ar": "لوحة الصدارة خاصتنا جاهزة." } } }, @@ -4718,7 +4971,8 @@ "fr": "Sélectionnez l'option *Sélectionnez le classement dans une liste*.", "es": "Selecciona la opción *Selecciona la clasificación de una lista*.", "pt": "Selecione a opção *Selecione a classificação de uma lista*.", - "th": "เลือกตัวเลือก *เลือก leaderboard จากในลิสต์*" + "th": "เลือกตัวเลือก *เลือก leaderboard จากในลิสต์*", + "ar": "تحديد الخيار *تحديد لوحة الصدارة من قائمة*." } }, "placement": "top" @@ -4738,7 +4992,8 @@ "fr": "Sélectionnez le classement qui s'appelle “Score”.", "es": "Selecciona la clasificación que se llama “Score”.", "pt": "Selecione a classificação que se chama “Score”.", - "th": "เลือก leaderboard ที่ชื่อ “Score”" + "th": "เลือก leaderboard ที่ชื่อ “Score”", + "ar": "تحديد لوحة الصدارة المسماة *Score*." } } }, @@ -4756,7 +5011,8 @@ "fr": "Ouvrez le constructeur **d'expression**.", "es": "Abre el constructor de **expresiones**.", "pt": "Abra o construtor de **expressões**.", - "th": "เปิด เมนูสร้าง **expression**" + "th": "เปิด เมนูสร้าง **expression**", + "ar": "فتح **بناء التعبيرات**." } } }, @@ -4774,7 +5030,8 @@ "fr": "Cherchez “*chrono*”.", "es": "Busca “*temporizador*”.", "pt": "Procure por “*cronômetro*”.", - "th": "ค้นหา “*Timer*”" + "th": "ค้นหา “*Timer*”", + "ar": "البحث عن **مؤقت**." } } }, @@ -4792,7 +5049,8 @@ "fr": "Cliquez sur **Valeur du chronomètre de scène**.", "es": "Selecciona **Valor del temporizador de escena**.", "pt": "Selecione **Valor do cronômetro da cena**.", - "th": "เลือก **ค่าจากตัวจับเวลา**" + "th": "เลือก **ค่าจากตัวจับเวลา**", + "ar": "تحديد **قيمة مؤقت المشهد**." } } }, @@ -4810,7 +5068,8 @@ "fr": "Sélectionnez le chronomètre “Score”.", "es": "Selecciona el temporizador “Score”.", "pt": "Selecione o cronômetro “Score”.", - "th": "เลือกตัวจับเวลา “Score”" + "th": "เลือกตัวจับเวลา “Score”", + "ar": "تحديد المؤقت **Score**." } }, "placement": "top" @@ -4829,7 +5088,8 @@ "fr": "C'est terminé.", "es": "Este parámetro está listo.", "pt": "Este parâmetro está pronto.", - "th": "พารามิเตอร์ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "พารามิเตอร์ได้ถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "تم ضبط المعامل تمامًا." } }, "placement": "top" @@ -4848,7 +5108,8 @@ "fr": "L'action est prête.", "es": "La acción está lista.", "pt": "A ação está pronta.", - "th": "การกระทำพร้อมแล้ว" + "th": "การกระทำพร้อมแล้ว", + "ar": "الإجراء جاهز." } }, "placement": "top" @@ -4866,7 +5127,8 @@ "fr": "Maintenant, nous allons afficher le score des autres joueurs et joueuses après un délai de 2 secondes.", "es": "Ahora mostraremos los puntajes de los otros jugadores después de un retraso de 2 segundos.", "pt": "Agora, mostraremos os pontos dos outros jogadores após um atraso de 2 segundos.", - "th": "ทีนี้เราจะแสดงคะแนนผู้เล่นคนอื่นโดยดีเลย์ 2 วินาที" + "th": "ทีนี้เราจะแสดงคะแนนผู้เล่นคนอื่นโดยดีเลย์ 2 วินาที", + "ar": "الآن سوف نقوم بعرض نتيجة اللاعبين الآخرين بعد ثانيتين (2)." } }, "description": { @@ -4875,7 +5137,8 @@ "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", "es": "En el **evento** donde $(target) se elimina, haz clic en “Agregar acción”.", "pt": "No **evento** onde $(target) é excluído, clique em “Adicionar ação”.", - "th": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "th": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”", + "ar": "في الحدث الذي يتم حذف $(target) فيه، النقر على **إضافة إجراء**." } } } @@ -4892,7 +5155,8 @@ "fr": "Cherchez “**Attendre**”.", "es": "Busca “**Esperar**”.", "pt": "Procure por “**Esperar**”.", - "th": "ค้นหา “**รอ**”" + "th": "ค้นหา “**รอ**”", + "ar": "البحث عن **ثوان**." } } }, @@ -4910,7 +5174,8 @@ "fr": "Cliquez sur l'action *Attendre X secondes*.", "es": "Haz clic en la acción *Esperar X segundos*.", "pt": "Clique em *Esperar X segundos*.", - "th": "เลือกการกระทำ *รอ X วินาที*" + "th": "เลือกการกระทำ *รอ X วินาที*", + "ar": "تحديد الإجراء *انتظار لثوان*." } } }, @@ -4928,7 +5193,8 @@ "fr": "Tapez **2**.", "es": "Escribe **2**.", "pt": "Digite **2**.", - "th": "พิมพ์ **2**" + "th": "พิมพ์ **2**", + "ar": "كتابة **2**." } } }, @@ -4946,7 +5212,8 @@ "fr": "Maintenant, le jeu va attendre 2 secondes avant de passer à **l'action** suivante dans **l'évènement**.", "es": "Ahora el juego esperará 2 segundos antes de pasar a la **acción** siguiente en el **evento**.", "pt": "Agora, o jogo vai esperar 2 segundos antes de ir para a **ação** seguinte no **evento**.", - "th": "ทีนี้เกมจะรอ 2 วินาที ก่อนจะทำ **การกระทำ** ใน **อีเวนท์**" + "th": "ทีนี้เกมจะรอ 2 วินาที ก่อนจะทำ **การกระทำ** ใน **อีเวนท์**", + "ar": "الآن ستنتظر اللعبة لمدة 2 من الثوان قبل تنفيذ **الإجراء** التالي في **الحدث**." } }, "placement": "top" @@ -4964,7 +5231,8 @@ "fr": "Maintenant, nous allons afficher un classement des scores.", "es": "Ahora mostraremos una tabla de clasificación.", "pt": "Agora, mostraremos uma classificação.", - "th": "แสดง leaderboard" + "th": "แสดง leaderboard", + "ar": "الآن سوف نقوم بعرض لوحة صدارة." } }, "description": { @@ -4973,7 +5241,8 @@ "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", "es": "En el **evento** donde $(target) se elimina, haz clic en “Agregar acción”.", "pt": "No **evento** onde $(target) é excluído, clique em “Adicionar ação”.", - "th": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "th": "ใน **อีเวนท์** ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”", + "ar": "في الحدث الذي يتم حذف $(target) فيه، النقر على **إضافة إجراء**." } } } @@ -4990,7 +5259,8 @@ "fr": "Cherchez “**classement**”.", "es": "Busca “**clasificación**”.", "pt": "Procure por “**classificação**”.", - "th": "ค้นหา “**leaderboard**”" + "th": "ค้นหา “**leaderboard**”", + "ar": "البحث عن **عرض**." } } }, @@ -5008,7 +5278,8 @@ "fr": "Cliquez sur l'action *Afficher le classement*.", "es": "Haz clic en la acción *Mostrar clasificación*.", "pt": "Clique em *Mostrar classificação*.", - "th": "เลือกการกระทำ *แสดง leaderboard*" + "th": "เลือกการกระทำ *แสดง leaderboard*", + "ar": "تحديد الإجراء *عرض لوحة الصدارة*." } } }, @@ -5026,7 +5297,8 @@ "fr": "Sélectionnez le classement qui s'appelle “Score”.", "es": "Selecciona la clasificación que se llama “Score”.", "pt": "Selecione a classificação chamada “Score”.", - "th": "เลือก leaderboard ที่ชื่อ “Score”" + "th": "เลือก leaderboard ที่ชื่อ “Score”", + "ar": "تحديد لوحة الصدارة المسماة **Score**." } } }, @@ -5044,7 +5316,8 @@ "fr": "Nous allons utiliser l'écran de chargement intégré par défaut.", "es": "Usaremos el cargador integrado.", "pt": "Usaremos o carregador integrado.", - "th": "เราจะใช้โหลดเดอร์ built-in" + "th": "เราจะใช้โหลดเดอร์ built-in", + "ar": "سوف نقوم باستخدام شاشة التحميل المبنية مسبقًا." } } }, @@ -5063,7 +5336,8 @@ "fr": "Maintenant, le classement devrait s'afficher quand les $(projectile)s atteignent $(target).", "es": "Ahora, la tabla de clasificación debería mostrarse cuando $(projectile) llegue a $(target).", "pt": "Agora, a classificação deve ser exibida quando $(projectile) atingir $(target).", - "th": "leaderboard ควรจะแสดง เมื่อ $(projectile) ไปถึง $(target)" + "th": "leaderboard ควรจะแสดง เมื่อ $(projectile) ไปถึง $(target)", + "ar": "الآن من المفترض أن يتم عرض لوحة الصدارة وقتما يصل $(projectile) إلى $(target)." } }, "placement": "top" @@ -5081,7 +5355,8 @@ "fr": "Maintenant, nous allons demander au joueur ou à la joueuse de s'identifier à l'ouverture du jeu.", "es": "Ahora, pediremos al jugador que se autentique al abrir el juego.", "pt": "Agora, pediremos ao jogador que se autentique ao abrir o jogo.", - "th": "ทีนี้เราจะถามผู้เล่นให้ยืนยันตอนที่เปิดเกม" + "th": "ทีนี้เราจะถามผู้เล่นให้ยืนยันตอนที่เปิดเกม", + "ar": "الآن سوف نطلب من اللاعبين المصادقة في بداية اللعبة." } } } @@ -5100,7 +5375,8 @@ "fr": "Créez un nouvel **évènement**.", "es": "¡Vamos a crear un **evento**!", "pt": "Vamos criar um **evento**!", - "th": "สร้าง **อีเวนท์** กันเถอะ!" + "th": "สร้าง **อีเวนท์** กันเถอะ!", + "ar": "سوف نقوم بإنشاء **حدث**!" } } } @@ -5117,7 +5393,8 @@ "fr": "Ajoutez une condition.", "es": "Agrega una condición.", "pt": "Adicione uma condição.", - "th": "เพิ่มเงื่อนไข" + "th": "เพิ่มเงื่อนไข", + "ar": "إضافة شرط." } } }, @@ -5142,7 +5419,8 @@ "fr": "Cherchez “**Scène**”.", "es": "Busca “**Escena**”.", "pt": "Procure por “**Cena**”.", - "th": "ค้นหา “**Scene**”" + "th": "ค้นหา “**Scene**”", + "ar": "البحث عن **مشهد**." } } }, @@ -5160,7 +5438,8 @@ "fr": "Cliquez sur la condition *Au lancement de la scène*.", "es": "Selecciona la condición **Al inicio de la escena**.", "pt": "Selecione a condição **No início da cena**.", - "th": "เลือกเงื่อนไข **ขณะที่เริ่มฉาก**" + "th": "เลือกเงื่อนไข **ขณะที่เริ่มฉาก**", + "ar": "تحديد الشرط **في بداية المشهد**." } } }, @@ -5178,7 +5457,8 @@ "fr": "Nous avons terminé.", "es": "Ya terminamos.", "pt": "Já terminamos.", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهينا." } }, "placement": "top" @@ -5196,7 +5476,8 @@ "fr": "Choisissons une **action**.", "es": "Vamos a elegir una **acción**.", "pt": "Vamos escolher uma **ação**.", - "th": "เลือก **การกระทำ**" + "th": "เลือก **การกระทำ**", + "ar": "دعنا نقوم بإختيار **إجراء**." } } } @@ -5213,7 +5494,8 @@ "fr": "Cherchez “**Authentification**”.", "es": "Busca “**Autenticación**”.", "pt": "Procure por “**Autenticação**”.", - "th": "ค้นหา “**Authentication**”" + "th": "ค้นหา “**Authentication**”", + "ar": "البحث عن **مصادقة**." } } }, @@ -5231,7 +5513,8 @@ "fr": "Cliquez sur *Afficher la bannière d'authentification*.", "es": "Selecciona *Mostrar banner de autenticación*.", "pt": "Selecione *Mostrar banner de autenticação*.", - "th": "เลือก *แสดงแบนเนอร์ authentication*" + "th": "เลือก *แสดงแบนเนอร์ authentication*", + "ar": "تحديد *عرض لافتة المصادقة**." } } }, @@ -5249,7 +5532,8 @@ "fr": "Maintenant, les joueurs et les joueuses pourront s'identifier.", "es": "Ahora, los jugadores podrán iniciar sesión.", "pt": "Agora, os jogadores poderão fazer login.", - "th": "เอาล่ะ ทีนี้ผู้เล่นจะถูกขอให้ล็อกอิน" + "th": "เอาล่ะ ทีนี้ผู้เล่นจะถูกขอให้ล็อกอิน", + "ar": "حسنًا، الآن سوف يتم طلب اللاعبين تسجيل الدخول." } }, "placement": "top" @@ -5267,7 +5551,8 @@ "fr": "Faisons en sorte que le joueur ou la joueuse revienne à l'écran d'ouverture après avoir fermé le **classement**.", "es": "Vamos a asegurarnos de que el jugador vuelva a la pantalla de inicio después de cerrar el **tablero de clasificación**.", "pt": "Vamos garantir que o jogador volte para a tela inicial depois de fechar o **quadro de classificação**.", - "th": "ทำให้มั่นใจว่าผู้เล่นจะกลับมาที่หน้าเริ่มต้นหลังกดปิด **leaderboard**" + "th": "ทำให้มั่นใจว่าผู้เล่นจะกลับมาที่หน้าเริ่มต้นหลังกดปิด **leaderboard**", + "ar": "دعنا نتحقق أن اللاعبين سيعودون إلى شاشة البداية بعد إغلاق **لوحة الصدارة**." } } } @@ -5285,7 +5570,8 @@ "fr": "Dans **l'évènement** où $(target) est supprimé, cliquez sur “Ajouter une action”.", "es": "En el **evento** donde $(target) se elimina, haz clic en “Agregar acción”.", "pt": "No **evento** onde $(target) é excluído, clique em “Adicionar ação”.", - "th": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”" + "th": "ในอีเวนท์ที่ $(target) ถูกลบ กด “เพิ่มการกระทำ”", + "ar": "في الحدث الذي يتم حذف $(target) فيه، النقر على **إضافة إجراء**." } } } @@ -5302,7 +5588,8 @@ "fr": "Cherchez “**Scène**”.", "es": "Escribe “**Escena**”.", "pt": "Digite “**Cena**”.", - "th": "พิมพ์ “*Scene*”" + "th": "พิมพ์ “*Scene*”", + "ar": "كتابة *مشهد*." } } }, @@ -5320,7 +5607,8 @@ "fr": "Cliquez sur “**Changer la scène**”.", "es": "Selecciona “**Cambiar la escena**”.", "pt": "Selecione “**Alterar a cena**”.", - "th": "เลือก “เปลี่ยน scene”" + "th": "เลือก “เปลี่ยน scene”", + "ar": "تحديد **تغيير المشهد**." } } }, @@ -5338,7 +5626,8 @@ "fr": "Sélectionnez “$(startScene)”.", "es": "Selecciona “$(startScene)”.", "pt": "Selecione “$(startScene)”.", - "th": "เลือก “$(startScene)”" + "th": "เลือก “$(startScene)”", + "ar": "تحديد $(startScene)." } }, "placement": "top" @@ -5358,7 +5647,8 @@ "fr": "L'action est bien configurée.", "es": "La acción está configurada.", "pt": "A ação está configurada.", - "th": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว" + "th": "เอาล่ะ การกระทำถูกกำหนดเอาไว้เรียบร้อยแล้ว", + "ar": "حسنًا، تم ضبط الإجراء تمامًا." } }, "placement": "top" @@ -5376,7 +5666,8 @@ "fr": "Ouvrez le **Gestionnaire de projet**.", "es": "Abre el **Administrador de proyectos**.", "pt": "Abra o **Gerenciador de projetos**.", - "th": "เปิด **โปรเจกต์เมเนเจอร์**" + "th": "เปิด **โปรเจกต์เมเนเจอร์**", + "ar": "فتح **مدير المشروع**." } }, "placement": "right" @@ -5394,7 +5685,8 @@ "fr": "Faites un clic droit sur $(startScene) et sélectionnez **Définir comme scène de départ**.", "es": "Haz clic derecho en $(startScene) y selecciona **Establecer como escena de inicio**.", "pt": "Clique com o botão direito em $(startScene) e selecione **Definir como cena inicial**.", - "th": "คลิกขวาที่ $(startScene) และเลือก **ตั้งเป็น scene เริ่มต้น**" + "th": "คลิกขวาที่ $(startScene) และเลือก **ตั้งเป็น scene เริ่มต้น**", + "ar": "نقرة بزر الفأرة الأيمن على $(startScene) وتحديد **تعيين كمشهد بداية**." } }, "placement": "right" @@ -5413,7 +5705,8 @@ "fr": "Retournons à la scène d'ouverture *$(startScene)*.", "es": "Vuelve a la escena de inicio *$(startScene)*.", "pt": "Volte para a cena inicial *$(startScene)*.", - "th": "กลับไปยัง scene เริ่มต้น *$(startScene)*" + "th": "กลับไปยัง scene เริ่มต้น *$(startScene)*", + "ar": "العودة إلى مشهد البداية *$(startScene)*." } }, "placement": "bottom" @@ -5433,7 +5726,8 @@ "fr": "Lancez un **Aperçu** de votre jeu.", "es": "Haz clic en el botón **Vista previa**.", "pt": "Clique no botão **Pré-visualizar**.", - "th": "คลิกปุ่ม **ดูตัวอย่าง**" + "th": "คลิกปุ่ม **ดูตัวอย่าง**", + "ar": "وأخيرًا.. النقر على الزر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index ea33cc7..7ffee6f 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -438,7 +438,7 @@ "es": "Ahora, conectemos la vida del **$(player)** con **$(resourceBar)**! Abramos la **hoja de eventos** de la escena $(level).", "pt": "Agora, vamos conectar a vida do **$(player)** com **$(resourceBar)**! Vamos **abrir a Folha de Eventos** da cena $(level).", "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)", - "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على تبويب الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level)." + "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على نافذة الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level)." } }, "placement": "bottom" diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 018bea5..4ced588 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -275,7 +275,7 @@ "es": "Haz **clic derecho** (o clic en el **botón de tres puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", "pt": "Clique com o **botão direito** (ou toque no *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", - "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على ($gameScene) وتحديد **تحرير متغيرات المشهد**." + "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على $(gameScene) وتحديد **تحرير متغيرات المشهد**." } }, "touchDescription": { From 0ad00dc5eaf0cc7513fede898ece99482592fcbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 8 Jun 2023 10:35:26 +0200 Subject: [PATCH 072/208] Add 3D example --- __tests__/post-build.spec.js | 2 +- scripts/generate-database.js | 2 +- templates/object3d/assets/A Button.png | Bin 0 -> 5190 bytes templates/object3d/assets/BlackCheckered.png | Bin 0 -> 5248 bytes templates/object3d/assets/Button_Open_1.png | Bin 0 -> 6816 bytes templates/object3d/assets/Button_Open_2.png | Bin 0 -> 6806 bytes templates/object3d/assets/Button_Open_3.png | Bin 0 -> 6779 bytes .../assets/Character Orange_Fall_1.png | Bin 0 -> 22786 bytes .../assets/Character Orange_Fall_2.png | Bin 0 -> 22786 bytes .../assets/Character Orange_Fall_3.png | Bin 0 -> 22786 bytes .../assets/Character Orange_Fall_4.png | Bin 0 -> 22146 bytes .../assets/Character Orange_Jump_10.png | Bin 0 -> 22776 bytes .../assets/Character Orange_Jump_11.png | Bin 0 -> 22776 bytes .../assets/Character Orange_Jump_7.png | Bin 0 -> 19114 bytes .../assets/Character Orange_Jump_8.png | Bin 0 -> 22146 bytes .../assets/Character Orange_Jump_9.png | Bin 0 -> 22776 bytes .../assets/Character Orange_Ledge Grab_1.png | Bin 0 -> 20621 bytes .../assets/Character Orange_Stand_1.png | Bin 0 -> 21167 bytes .../assets/Character Orange_Stand_10.png | Bin 0 -> 22230 bytes .../assets/Character Orange_Stand_11.png | Bin 0 -> 21212 bytes .../assets/Character Orange_Stand_12.png | Bin 0 -> 21212 bytes .../assets/Character Orange_Stand_2.png | Bin 0 -> 21167 bytes .../assets/Character Orange_Stand_3.png | Bin 0 -> 21212 bytes .../assets/Character Orange_Stand_4.png | Bin 0 -> 21212 bytes .../assets/Character Orange_Stand_5.png | Bin 0 -> 22230 bytes .../assets/Character Orange_Stand_6.png | Bin 0 -> 22230 bytes .../assets/Character Orange_Stand_7.png | Bin 0 -> 22296 bytes .../assets/Character Orange_Stand_8.png | Bin 0 -> 22296 bytes .../assets/Character Orange_Stand_9.png | Bin 0 -> 22230 bytes .../assets/Character Orange_Walk_1.png | Bin 0 -> 16439 bytes .../assets/Character Orange_Walk_2.png | Bin 0 -> 16439 bytes .../assets/Character Orange_Walk_3.png | Bin 0 -> 19255 bytes .../assets/Character Orange_Walk_4.png | Bin 0 -> 19255 bytes .../assets/Character Orange_Walk_5.png | Bin 0 -> 16350 bytes .../assets/Character Orange_Walk_6.png | Bin 0 -> 16350 bytes .../assets/Character Orange_Walk_7.png | Bin 0 -> 19525 bytes .../assets/Character Orange_Walk_8.png | Bin 0 -> 19525 bytes templates/object3d/assets/Death.wav | Bin 0 -> 36206 bytes .../assets/Flat light joystick border.png | Bin 0 -> 1693 bytes .../assets/Flat light joystick thumb.png | Bin 0 -> 1044 bytes templates/object3d/assets/Orange Arrow.png | Bin 0 -> 10023 bytes templates/object3d/assets/RedCheckered.png | Bin 0 -> 4816 bytes templates/object3d/assets/WhiteCheckered.png | Bin 0 -> 4808 bytes templates/object3d/assets/WinGame.wav | Bin 0 -> 50320 bytes templates/object3d/game.json | 13714 ++++++++++++++++ tutorials/in-app/object3d.json | 801 + 46 files changed, 14517 insertions(+), 2 deletions(-) create mode 100644 templates/object3d/assets/A Button.png create mode 100644 templates/object3d/assets/BlackCheckered.png create mode 100644 templates/object3d/assets/Button_Open_1.png create mode 100644 templates/object3d/assets/Button_Open_2.png create mode 100644 templates/object3d/assets/Button_Open_3.png create mode 100644 templates/object3d/assets/Character Orange_Fall_1.png create mode 100644 templates/object3d/assets/Character Orange_Fall_2.png create mode 100644 templates/object3d/assets/Character Orange_Fall_3.png create mode 100644 templates/object3d/assets/Character Orange_Fall_4.png create mode 100644 templates/object3d/assets/Character Orange_Jump_10.png create mode 100644 templates/object3d/assets/Character Orange_Jump_11.png create mode 100644 templates/object3d/assets/Character Orange_Jump_7.png create mode 100644 templates/object3d/assets/Character Orange_Jump_8.png create mode 100644 templates/object3d/assets/Character Orange_Jump_9.png create mode 100644 templates/object3d/assets/Character Orange_Ledge Grab_1.png create mode 100644 templates/object3d/assets/Character Orange_Stand_1.png create mode 100644 templates/object3d/assets/Character Orange_Stand_10.png create mode 100644 templates/object3d/assets/Character Orange_Stand_11.png create mode 100644 templates/object3d/assets/Character Orange_Stand_12.png create mode 100644 templates/object3d/assets/Character Orange_Stand_2.png create mode 100644 templates/object3d/assets/Character Orange_Stand_3.png create mode 100644 templates/object3d/assets/Character Orange_Stand_4.png create mode 100644 templates/object3d/assets/Character Orange_Stand_5.png create mode 100644 templates/object3d/assets/Character Orange_Stand_6.png create mode 100644 templates/object3d/assets/Character Orange_Stand_7.png create mode 100644 templates/object3d/assets/Character Orange_Stand_8.png create mode 100644 templates/object3d/assets/Character Orange_Stand_9.png create mode 100644 templates/object3d/assets/Character Orange_Walk_1.png create mode 100644 templates/object3d/assets/Character Orange_Walk_2.png create mode 100644 templates/object3d/assets/Character Orange_Walk_3.png create mode 100644 templates/object3d/assets/Character Orange_Walk_4.png create mode 100644 templates/object3d/assets/Character Orange_Walk_5.png create mode 100644 templates/object3d/assets/Character Orange_Walk_6.png create mode 100644 templates/object3d/assets/Character Orange_Walk_7.png create mode 100644 templates/object3d/assets/Character Orange_Walk_8.png create mode 100644 templates/object3d/assets/Death.wav create mode 100644 templates/object3d/assets/Flat light joystick border.png create mode 100644 templates/object3d/assets/Flat light joystick thumb.png create mode 100644 templates/object3d/assets/Orange Arrow.png create mode 100644 templates/object3d/assets/RedCheckered.png create mode 100644 templates/object3d/assets/WhiteCheckered.png create mode 100644 templates/object3d/assets/WinGame.wav create mode 100644 templates/object3d/game.json create mode 100644 tutorials/in-app/object3d.json diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index c0cdb36..02e9e65 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -23,7 +23,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders.length).toMatchInlineSnapshot(`6`); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`7`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { diff --git a/scripts/generate-database.js b/scripts/generate-database.js index a313e04..4bd23c2 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -238,7 +238,7 @@ const processInAppTutorials = async () => { generateFolderStructure(); await updateTemplateFiles(); await processInAppTutorials(); - console.info('✅ Asset packs were successfully generated.'); + console.info('✅ Tutorials were successfully generated.'); console.info( 'ℹ️ Make sure you run the command \x1b[1mnpm run check-post-build\x1b[0m' ); diff --git a/templates/object3d/assets/A Button.png b/templates/object3d/assets/A Button.png new file mode 100644 index 0000000000000000000000000000000000000000..42f76eabbb5961673f918db99049377df9cd7fb4 GIT binary patch literal 5190 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 D;{&PH literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/BlackCheckered.png b/templates/object3d/assets/BlackCheckered.png new file mode 100644 index 0000000000000000000000000000000000000000..5967eb1023362037af45bc003bf4acf832883526 GIT binary patch literal 5248 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Button_Open_1.png b/templates/object3d/assets/Button_Open_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e281cd1c6798f407bfe043c04a9809fa4ebe61 GIT binary patch literal 6816 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 I_Wm*d1@C%R4gdfE literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Button_Open_2.png b/templates/object3d/assets/Button_Open_2.png new file mode 100644 index 0000000000000000000000000000000000000000..517066dbbebb9cf9b0c7a8fb5c788f6c1e7fb387 GIT binary patch literal 6806 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 GBL4>$9CI=N literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Button_Open_3.png b/templates/object3d/assets/Button_Open_3.png new file mode 100644 index 0000000000000000000000000000000000000000..4167bd6910fe07d7dabfc63b7f9cd6c2e70a074d GIT binary patch literal 6779 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 I8=)ir0g6K8Q2+n{ literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Fall_2.png b/templates/object3d/assets/Character Orange_Fall_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8042932d5b8af14f2e4295b94c77635f4092b31b GIT binary patch literal 22786 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 bg_GBiTWzZXc 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Jump_7.png b/templates/object3d/assets/Character Orange_Jump_7.png new file mode 100644 index 0000000000000000000000000000000000000000..8c071ff00e01a095df9c1dc1231d5d0e7c73c226 GIT binary patch literal 19114 zcmeIabyQp1*C-05lnRtn!L>*!#U(|9lu}%ZJ4J#+un>Y%p)JL&#i3Ynid\QLJ7 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

    kBEGq6$kJ4Duf^Nk5VN@LiOV^ql$a>wKpo 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 R^4p|T6g8ifJ$?D=e*kfb+~EKK literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Jump_8.png b/templates/object3d/assets/Character Orange_Jump_8.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9e44eded14c6657e6ccffce761b96727a1e240 GIT binary patch literal 22146 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Jump_9.png b/templates/object3d/assets/Character Orange_Jump_9.png new file mode 100644 index 0000000000000000000000000000000000000000..084f6c1d43014a120db287247587c8d825be05ef GIT binary patch literal 22776 zcmeFYWmH|;vMxGt2o~JkgS!Ry5InfMyZgi~1ef3e5<+l->kJOT3GVLh{swEWwfA|i z-Fx2o^ZvYcY0Nfd^ijQfRrTs6--uFHltFz(_zDC9p~}fhs)9gJcfjie5gzzO@lzQq z@P_0htL+K`A!EI~pgdV{$KhI|o+*FCogm=n4RzUw&q#B>!uOo2?L~*vo|ES_;bK5{@qB2j{lo={QL61SK}lg;bLy==IHXl(b4W7O)39Fg`9(vg`1pS z)7rtz(bJXTg`>Z3FqbrTGZ&%+w8qKI#tr;`U}qQL;t=5AU}WPEU}O8&PzAsc%#7WP z|7U|8&8#iF|0hEg6a?fPT-}TvOwHvag(v~0Sgfth1b8htO)PlKd6@b5O}UuaOu6`& z`OVnbm@Rnuc+9xDO!$pWE&k#QxL?xI)cr+#FZch;Zp|D`0UH07kN}$ruQ4}29~(2b zDLXGSn;Dl0vx$Yd1+ys+2fsNVH#Zl%1?NB1lw7QVtz&HWU#Y%uWd=~>kqu;4W|W8*ibBsVh^uyAy-HwNs)+TPgGoYl#}l9K#C z+(YDk{ojtlvfGqB*cW*K~Hr~_HRcx>Sf@!#3 za9wWf7pget-{z#IfQ^idl+E7I!V{I0luYQ%qobr$Wrr8Sz(|N@--(Kh{P0msNm8=V z1jUDvk`l*s6bl2R7(XNjxTzce0=VT(&;PmQ|48ire+FZ1st<}4N~G>?f)&V|g&l-( zVgY{!xlog1JT5yEfMG?m9(Z9_;=wF%R@e|0xS1VzG$^O;?*Zyq;$2O!guT>HP^x+O z7X`s8=z7Ia4#{8!keOWK+$)zMRCNE%>T^5=4#mDt(|v^6qNyUc{tWM)uNO-Y-LB@w zMwcQ&YK7KDDoB0^_${o#uc(6kK{+0vOpuq!X=gEN+)r$I6rWf4A;K0l(krw`H^GXj zE~&%)Q~vi;H2m9&3S7I~UjpOcs4p67md*xzhQb%!wSE@$H~q|a%D7*=ffs`NC`RU9EWJ`MUFLT5V>1j%q}|j&TE)Y!Yxx7B(Q_5g!_KbI;l5{W9X(_p zZDkuoj1lOXvg({_5+$YtWjZPofz*cuF}$eex#cF_ZO$C>!_GiWB(Unj-s zB;GlW-hXK;!>fNdfZ1QNnI~<2y$z#Gsk<=Kwa(Oy8Il9tlZVa<<0O@3@N~#}q@ya( zN{_&BO87q03dM>H6NDiu8Zpm#oV@N?L1M?Rv7J7P;MP?bsq*nZ%NCYivE-!fS$;ep zDeq&;yhu;B6;;$(IoHb0K&49^uoXB-o4)G&rVzM7=6Lw1{qZ+}x>wd$Et63-2>!(? z2Av$M|6YF7^kP6iaT&E7JtGGtw;1QfmH36BIvMI0VeFWpFvGV$;gaNOwNse|Sncl= z&|SU>vF$L_;a_00!Ta}Zc*R~UO;==loSMgcg9g!V6D6c@xb?vx?kssTdE*2{JU7Cr zFU~EFv;~?4le7H>faDSD;G^!_VO6FoDJ5*0+0!}RcE8Q!35wjrJObg3pd{YSUISn%48_K$L*G4Iu6);+7V2W#nht9Wyis`i0^I3MDAiW!4_xd!-q7V6q~BO1vLl1y$0&8 z>QlbqoEPQQ?L<-bp={`}QEeL5>vJ5t^|9ty2s8dscR$;p`cu8W&{QAbdTT}@=h&M^ zneQAcri3lV`3{rUu&VHV!SuCKa8g2H*i`Sr(sjyD&>(@ zdceslB^#`G{*#7=Kq~2c0t!@3t<14Hcz?Ej7=3i@m{FVtcD;bqXibZA8L$D|kdyZ5 zz2!a?oX+OmzcA&b`%I2%(_FF}{iyAi)!kPe${l$7hZ^<74CM_aVHzMNj1{PyrrVZX zTJ59fXaZD@wILYVZUU;G3t?uFKhwj)nr;|V@wPI-$I^|!0)WkpZ9!{v+hx~z!4Rfh zM3%`p>$WBR=GZ)N?lm2!lE1HYfKKog;|hBu{n`x;)vIwSEj4V!(>>9m*Cdxe|YoR z?QC+zIg&pA29D|#71GUVoP##c>YwLKR1U?ZZ)AZKBH)wL3ENtZHjjw|JE{{=ly{Vb zyujLwO<-wp&30nOldu#;G&HRE9+#ot5V4Yhe-)rA-cGrztzA^RxhDUnAk+j#ub!{8 z*0Zn>-+;$PpK;VC2R)6Gt){3%dUrUWw|kp#DQitevBDxWsN|5}xo|3q#Ha4`5}t=H z2X044VV-nqO^X$3p!npov4Kibhlbfu?HZK^37lpP4o$ZnH};!);MCqD32488jgyhY z_{EB=f-eivH*B_W7=!ep_!yLv4NfD)G0F2e8t421>5+saMt+C`qz%uZoMrZ8CYx>0 z8-FdA=vTKFc=p*F%WUQ9J7BhGfXc-S5iFQ;5>k2CI;z!b*h{V4&fT$0HH`DAp}wlH zhFcLE0c^{{JG2}HGZe#+$;+9IqWAYA!j@@Bn`GgF5)1Uv66S!QPMjL*_m-mUG`b(t zu-92hx1yJ&8g?#vMOz;AB%&V9rp>SYNI&dpUS>GPv>9TY=59|I6Vu^KN zm)z^kqk9$Web?2HMG-MlC3RfS(0EFSluo=a5cww@SPnD^8x1R`9BUU{*@rR<(U=rw zpLTQVJqoC(s`3z7dq52oqae}$r=um;yW#=&yo`E~R^s8S)O~R0k=C-(r{E4;?rEs*?YanNxMl_RZB&1Xa z_EMNAwCeob!n4r13j9N4_)Z}oMW*OVpr=UskN}vSMXW=HjZrIXl#F zBwnF#rrH_w;Xl{D?Cu@9a!hu1?VqN96qP95Cs)OKVI_k|@ZK(j%&o~g(_2!w+=sYy zZ~p+s$5a_L!RAGmu2zBSKg~}>BjGPiUqinJqk(^4BS+HXzc54(dD^POn)?-3 z@78FlGMv73f+!32++dEPfBkZ~0UTXWYiZbY{Ign$?7OKwOB_hRL?0nx?#15LEBUeO zD=v5RiIqgS$U4#EChKjmjXY6)P^fYPyhVn-wqKn3NqA{x_@fL^s0slL<0Gz|YSwFHb33Df zh|6nbnzP2_6NmTeja(a?TfRd-ZPO|7=YcAUDf0mdH_ulr zt3_P;3O-{znnd;>02ICG(c)$T3d@JKlkVeA4IY&Z7PU(Fz`0#bX#eseQ6SR0?w|8N z{Drn%82QHbqdepa45akwmS$(0kVP#^Z7Eb=EH0fdXzz;DQ%$B~ME8Q4EV4|*MB4)801t-7D?c(&6DG*QQHx`6H5e!P79yB=LW@i`H?+jFZ|604Yg`G4&5WnqoLOhExjQMRX%=u z18o_XCi0jCYP%{L(#MJYG^xT8W2FapPbn~3!+QOQ9VTIRkLAy$P2BI_)s7#13}dFU z&JO0*bIKx`mYkqARhXiz783mwPQqMWhMB&&c_HJV(|Y3M0Bl}P7na(%?yx4Q1w4BX3#;k&L(1adG5 z+6v&_#kq1`4%iZ1sH5g}U!@Hqg>Z`bLj@8C;xhGPuExwO-jy$w=tnSakiUHH~Ha z5{$9$Fc_iSVRRFLS^FRggmTf%TWi)=BZhiSvQ+*qP=~c~XpnWBhNs}q0sc9=a)j@P zdBr*5%YUg)d9I>AFNJ9*ah_g#zR^V^tFQ9`=Qe`_dz^P5;)9fIsTt1q z&gDPmHk-XGH{iW6<0CsNm6XuM6Ly`2?mO#4Vv&R9FBZVw#1GGs5T4>WDDKV7EIBDt zV(xnS;Zdr`g+U_3vv76NR5yg6NUR1%$c8jmm2=MhCvXOVTG7&JVetAPZ%`{cN+Xg} zP#7qN!NG%OR%Qg&a?a_h=~2~4pGSAOEDy~B-8qGqG-KyAhb6?bW-EA8X@ZhrnQ1ro zzD&n{q78`aj+-Sn(&_ix+lwP1d@bR8~=y!;wMBrI3=zV}mMcjs`MR%I|LvA7SO zj{(Uz-%NK)xtKCP^B&kLUd){?_-@X)6i(Qyps=>I)@~_+_V6v(U`Z_*Qh|h^(i!tY zhpO^JV&Ob_mmkt7^2$tdN3wnU?Lc??sN6dUnYgbe+0uLfHfbD$dwWFGrDgZRRUEOU zwvl*<&d2!??q_@kKAzJrfwIsC6cP@#no%3dbHQqU>_2r4qvofgDq#2K5@nU;aI(cJ zL^WFKb=Hc*u!t#&<_hg9`mH#F$A&x1?`}4Ff3wDhgWzwIuhGWL zsr`Ig40k#a!+}+6E;UQfJQ%!$eVnksW6!r#_@#`<(cw*RX@8@Zz|WnJ+l2GYr&p;| zeIv3R-N^6!4UVqU6zM30Y5_lCf5t(CvCTO#H!SRW-K3_dMC=1%jdA1w2h zG*w~IhTwA2Zkkv)^ISAla?QY;tq#Ad@wi%@lHbn0%*sc!6L2C%_>sxZz>2dy!V=z( z|43txBbC?k4Nh>tHX+TrW3j}Nf>$VDX8Pf(o20=_1;gU~0N-OewOjzg(v*b4%`^he zz!#t2r)8VjybVFEUmj4Zdj8Isd8UG&MnqcKmsV2iG{}V6TE8_SM_Ev9C2tw;g`!w- z{W2uHj-W;YVRBW&h8P6P(fwLeUUBk2Yt^m)iFxV_?WxaA^ctFlb;X0Rat^Lkk(J2< z&X+Nxa#I%$=WePCH&OHW|%qKlw;_4fVn$e+JSKF5=QX z-3+ii+zfxEm~;k?w;Zn$y;--00*65N1QH1ne=)uE6! zo!#>t={sZ&O4W7)Itpg7m}E&*%yq7Knq9NL`)~A+Iu}O8GQ;y@cVDN@=qRcyEysh( zwPo9qs^)wg9qpJzq}_C#^r(x%hWJ31=FYIWDMhZDY|;Ae;8JW(7VQtA-d|_MV&|V1 ze+vTJNliKa^J`Uokn-|WM0=aFtaqTLsjGMFB^1KRhd#kr%73=)81cn#%dO?NzTywA z+1ZO3$*`QbsS1$7g+G;(Omff`1@N~70)^C86!HO!0i@$O?}+Tspwi|;ik23_i;mjy z1Y;W z-s^}GMxJXf+c~QJwSGy?I0P=nQmt~6CVl0asMtp9waHE5WqZ!v?z4hU-8GtPEfYtg z)UM95v@|x_x-L8NJR2m#4j;bt&%TMR&f_HvB1#(>c(B(9&dM?4G41~-j=fnJZoXZO zVpg;lpOPOoi~qUbTJgfmxo|k>Fk*jn*0yuxD1+=zKufgfZzNBhPsLVtGO1hi(4W3fp^{86&ctQIvroj=EEa$7NT@nveA>o zq@8m}<(yZKK@6~!CHZi1Z7z_eOJx}a-}-xYx)WHC=FBn^;yPNjLW_0s3JHsU-q`xTzP| zZ>kpvXjpKf=nL_g`GGf0=3z99cxk`PZZ^)2yB6G%aXd_ihF|GbI}M!NkG)G59>cG? zKUl54TVS#ia-*Iy51lMrpw=Q0lKm(T1-j6|IS{asaA|?3xrN_xe}Zd+h2%E8SK?UJ zogNx>^YpMSZ_7JKELtwnI@@b9ysXX2pAb_ zBp#irBcE^U)w=yiCO-Bx=cRx(&~C=N{mfvgKxaGpE}aLy!@u(Q(VK+yaW7gc4TA^g zQvc?DU&eXJo6}!7mzcGHZyHoU(b8VzOQstaaV(5Jm!yeF`n+sl_jYDaXl%0Rvrami zC}cH7h`IHhtGdMYr!9@%IpH+VW+FZmNI2Wo*7l1_XZ9hqPqf78X&0;~cRt;eFUqbR zpEpXRUhP5NUU95&l+sqg9mkAK*Rhg(*D>=rkxGq3THzv)*VEMR-EVccM|5`U5EHDA z<3XLyot|7E(K6fadjpMGNHKTgpcE*L{(y39AcWvq(X*S44Arn;V6R(WmRH=V>eN!a z-4y*zxav{1*<8uov!r{k)+cNSQ#2cv_%(zSiO&S#U`GT4zqa)u3ZAf8MnaVY=Hzle z&Eh%07^s%#s;*q`Q_FRz{~oB^g&04a9l26z8N2mi<|RyGoPo%HV{#;ZbmCiNBMd+C zUbZ|pF|5S{DJMFLS`3^-&>=xXkMBN{e*aR2cT3Qz^oL3gELI^VW&!<*1FO;tIiZcIsR^?>lp|u}FO94K9HWwnj9e}H1 zp(!=EJ3+j&^GU`rhr4Ksn)TWEW-F7EVl~PnSmCc11)D^Q$4rm%Z2_Z^CZw`+XGU*n z)~&NX*ESK%2iNcmiuhWe6sXt>?pgDUrkgc ztWYzWv*A*Y%omZPNJYu?KJU{~tfQHa7Xpq-l>8ngki6z#TL`OoX!RyGfzIWJ z*mAO}y?+0qWg;=gfqX%kOfrPdL-{!~EPB2CAr+-)vpOPI#IJ(Hi~75GWQT0F3^t+r z1%!*U@)Dt*we74`rrhw&?>-Lh55-#)x|&aYaxpR* z(FDGX^K3=boI8)O)RD#!LK<`dR~HrwZYl({o3s(_-&CksIiXMwahXo;!xdJ35Gv)7 zGr}$6vhtACfIt@SIi$@fvN>;V7At@(ucU6$?;91vF3ZQnZg(p`peIs@FVFc=&`}`p z>_Q$7RRsM}H1~Znrq6Zpyyg(3V8k)bU=+b>{R#fT(jTtPZ-_Wq@g(riFD(wIfIDF0 zvUr*mr7io{td_c?qml0CLKIVj_46_1!h+*T>wdx&^rGqoSn9El z&#dyII>GR`MWVsl(qiFg0@>IXhggO&M}rJQ9a~f>(?McN>_AtnavX*e^!EAQw}L4> z@o4!CjYUCdBTXCn@Ruh4NtCx2f4;>B8+6bG(Z~gjxNM!i`R=gO!+EU!Yg0p6)u_YM zQM+&;%6XXM`(_rgC3tdGI+*`K?{Yh@J)jcYWf}t zfMx?*D?Q1+$D~QO-*b_Kko%zU;ydIMRY%QSn0*i4)y1;f%I1Z1)%airIPLW0v~VeN z=K$8BA3WA_7Bx9L$iAb<6qWVW7=|r(S(S$qySU%2oeREgCL#Gy%LVn*Q}Hf>FC>|V z@sVZ&alLw$-0a^FgqP9hlLLxlLV;+$*V(mYecbrLF~NqMhQihU2m9))od50M z4}ym4s!P7WBiNgHijzN8bIWzjy(LD!e|faD7vT10HW~l1X8+2DHEqa7bQ&UV-xB^7 zgl$e|vY6xXo<$aYKfqIyE03NIH3M-(j64)2ljQpk&-_=4AV76Jr6y|6@F9wbG$4{i zQeVj!Ns zQYM}ybvGQZp9?u)T4fP7r(Y-KC6+YV?(ALxWux@?uVfGF9jj*@c2l9kB;+cHKq=r= z8HU%S-DsE4b7x7>?av?jI{ENw$OR%1eeT<7Ye96v!i+mGsNO(-v21f_rlA6go5bUI zX|H^MwLC-U@@Vo&!A(tv4ejVRIu&<+XjZ9NZ~OGL|I-%2vbWP}&7TEULw;69UZI=$ znd3vg=rA>8%JGae8mR8L)0@~sheDdY*OsvGip6TvbI94!!nju*k;>1lO;op0t^9&Z%;E-2T#v=ZNpm zl|7x4pPaMab*afS-j^uO*q^wMdF?S?NoZwsOb&D>@L=A$G*6aggSM?-yIAYn3;vS} zf5ux-`l`XNpZpa`7Byp!xF@x$He3LZm@>Bzz7GPj_U(Pc-0NJeEPn z_Uj(0ZF#EqJdB|bA|iB?%f<;Rz1qOg9YcO4-?O^d*O2r5I8T9~T6UJ$9)6&+&uBm; zr>S4xVmH%Hp$$F!8Kd?7w6kB9M}n$Sniz1hp7G+i$H3!GVFE zqd8hA`g)^-BRBN9?T0iqO?rGnBAb^dyJ;%>V+H7;3T4vZU(Y7 zl~@VO@tO_j;Dj{&3-#Lbu}9iG5tm!6p}cnI^|k^kbQ`x^MFNhRK}~9Eu_OLB2aglY zpNJn?=GUc6eR<8~diFLs^L6fJGn5(R##(Rk6hUB{$p4lyh3N z&uhC;gzuxoikcG!)6;|KmS^G?aqMq)&k+Wu9UT*~DbT!wavQ*BAdeJ!C2Z8zO7h4`Kxiov*HJDjq`cQno zq^lZ1lb>vDy(#?m)vJzp=_l_LH%4r^BT_6*HIrPiMbdHD4(-;CDb`uQpjLgw57dfM zN7doyo@NCy2iu204GN2yAR-tPZ~UNJ= zP%m%@M%I}@D zT%yX<4!6LL`(s4Cm3wLykj(%+l7NRe`y*54^2BG)$vB&WvmQw*BLD`WC;9`v5-mWF zimHi%6_(n1qucH`k==m$^1Y$IeEq!?f|H@v5+VKL)V5|U-}+~cyaqlhKpHD&UiaAK z{C^htz|D$J^%~BMzjN-6kC1cVzd_5w#3vd}Q5Vr!V@10rs!m|K&2^N*_S(5JI|*??*<60(>h2X2j7Up5kNb8uI@Hq$?LvMz`=uf@}6@i z4tQAS>#d=>h=R1C)4xm%Ot|S3kA6?#aMxkbhQT+BrKX|T5z^l6KVpz-43|m* zimE%@)%|%PiX{YBk}F!K2z6xqEC$Qt4~h~M_d1nnLa`jcj!Q?jnt-wV+BDYAa1`Qc zGxl1^^?mdoh2q;4YyI2blZ9`%$T_| zF1tV>6x?uP+ya1zUpu&>ADZKlW#b7H0QuJ34JYUCy)yIzzX|7^!oB2o!(!sX>3T6rQp~0Cy0p z?X9l+C$v3bA(4Wzi&PhJy)4D^(*Xlh)^pfg)R);$%M!Fym0XsQJ&UApboZ(}yLX&C zDBCHnf#HR;_dAGhx;HQ4`=d^bDHTmx|N7D@snW?x1Sf_3u(`O{dk-(XbrtIUkWR*Y zYspjNv88t{ew!1WLpB#AkC7dp1_xB4e_;uzO(5CwisR48N(LFn#;~6HsB%}Jy7k+0E$8ID+N#i zZx$bjF}FvqUOHjla$BdZFC*s$nw2AnLJ7j5qDx`&vfH~=D`2N_-{ ztP9Go0O)Q>^y-2@y_tSoe-z;x@Qc^y5b0o9D};jYpQ}pDeN(tcP!CYQEwPgzWxPfd543{;S+aTu=DI7i&$W1GO08KnCWDpjv|Hy!>wgX<>`HRYs<0y=n=&{3n%+MOtRKWcW;I8p4x z1dTfm=x4V5&D+4+Eh$bGz4)jmY!cXe=4rjlFP@YyS`hyA0NEC z@hvxmPf`(CyMoXD2&cxMKnkKR^|8oBO~=|7$d7udZvwenr7I}+(3K(get>Ms;qi)0 z1k<*Tx3lENGw~)c}^}4KrU>%7yPUe78&0$5|!!M|ZR|V?eymDfe7=`DJz7L~_A9LOSbg>&b;;g2P|KLR zzxzQ*QdUjv&LD0Ff09LF_0fGOV9(hXd&f;julhT7G-YM|52Ol*8T6RWu+n7M_k(hs z7g5@5JGIKX%R*8ZJ5>TI6XP*=QwGUo$B@%4(sUG^uFr1i{0uN^uO^%}$4$}^N(~pL z>_afW;J`)o@xlv9b+=54l)^iG9--?svXucT9P(5M@~V`;fV5NDD!9&^1|@fDI+syPZFj@E*a0|QHvkP7 zt{Re=zgnuSG+JGuGt(B=uz_aLf4g~MYEXffbZ$;uw%_&X%p!T(Ew6V?QbQ+jhNy-R z(CVs_HyghQ+^ICl+K>-Es!lqp0I>KSrSR_>j1onM$1C6Yxd{?pD=R+gVmSHYc(uH0 zF@UP?MXuKkT09JzJPPmL3hq7%?%b5Bn2Zw6MAr95v*O~QMv7N5@Mj~aVI!>RQ;h9Q z?)dP&@13M{wRabrNVjIi{nZoh;~hlUhVm60(2M888ELQbZK}w-mMRz{r(;HI+&$G| zckCb-VR#qFcRiEEH)bCpqcUpi{$*rO++LoQSP`8ZN~0NB2$v2PR3;q`@F7+aG_e_` z8971WzxOIggG!2gpm=LKCE48UE8(_kB* zKXa?h{ZJ?A#G&xKAMV924Lpbex>g)DF@pJ zI-eqBe5La(lm{bX7O04cnD9CSrq8J{nq*B(tCzWkPOBGww^|liN5$zla(|)Df~mm+ zLfnh3A!K9@m=KBH!vrSlKm6{)t~J9!KxV0umF98Rc)o?b5-U^Q2~)4o>Z+PiK85&z z0qHwO!cq}^5rryvI@iyCe@xV1!jecv!N+g>NBs;=ON$4q#$cvf&$%{(h2QO5Bj3%1 z0+w*#;sLS(gp}$88|3;YhDMbEz@NltLFSq)d`{jLvV#v`d(J=DknDB+kW16)8uD3xziOc)a$gH z&%lNsF0!$aSG-Xc!P0QIqQ<-Vyp_{^O+7G9iggk~pYpEoo!*~tz>Vee*jPg67`B?& z>}qN#CSh{2!-kuBA`d=xFzyrTk`%u>iG=YI7XK=Z{clY76PAF{7u=iP+|d!h(;OhGq4l+^N~a*V{FO3w=0XfG+hL0B4%72#ynzPoWnrm{{+7loSy|fdi(g(!vrIcvBXjz?sg{j4n;CnmzS1tcAhN#A8WA2)sL{ zeR~aghmRV%Jf1Lq-Wt_D<>tZPuZ|KtYUetF%*N&y7a*OTLpB#t+UW)N) z4R~riikL!qeosuIdH-X?^0EhF*sQeQ(SWuJV|NLn-!8hYpzxgf{NgTTPcf$Ct&QUm z!hg}qM@X4r`?rHe#x%u{*Ct&fbTePvHJXV6z0B!sbch>{9%f}favG_YLunU}>D$lk z;?h@Cb#C#U&rpOyra~eTGK?VG<*%4GXyjhKA!ghYINg!=O-A?dd}wQ%zdekPMx^?` zO%_Mi;{PPEJxEXJtSg79B|s%yczu7}MBCDK`uZD=`T7EXE{e8%)U=UFIq5eH+OJ6A z6J>cneua^iAc$u@-h29Dw^V!Jr49{rm8HE${_XoN5%vo`;zd9hkeogQ-k+{;B3#c9 zFEQGQx@x_81@&Ka^}ER2;c;zXHzvkKRc1jWHOTc_1dsM7aOk7D1|U&#pF84)+kF1f z-Qk=_=|tEXLV{CTg3k;(=_r^WBpvNw1JAA3yiiCiap3tf$R762?s@+2wXj~nv(qmH z^U;A7%RoPe4nSHw+r#}7>si2@n6;gRf9Q+`hdd>>PLedN2BGg|2rL@9LOX_P$;tlH z^Tofg)ZyW-J?gDzVr9#8qjD&jmebI30X!Rd#;u@kG$-)qmeaT zkZ-?8=x6#pSe}NT@1|0&--AX;E;1v)FR>(xjRZDjfyUH5))^??3N5g=vE?JI-?m!J z>7ERN(a+}a1;s?{P=Vc?>HTg5!B1=5=vQlNVQNl5s}x4yR8Vyv@(o6##=|?<=Q)Ui ztS|1YZ&4mo5OyTX*$LAWG$n$(~gE> z2FC?Q>Q|3{@9FllgIG&HxVeHK;r6rKuR|13^$@H~G_6%9_?DYxYw^Sf;r?{Zj4+vF zgG8^fwS$4Y<#?-)FK};ZBH7;@m=iNGN%r%|Tju%ntU%|2$j@=Rp#DLYSdmwF#u+>A z(UVh;6#b~tm|*y`3U=K*Z}Xc2pe^;Ph%u7$HN_okRPI3~owU{Z2y=heS#|P8b<2&4 zh&hW2pOhzvC1D^P%vIL&tl>jFT#8^Y+_rsZeY3h;XQU_>FnX_s4Ts}SG852%#uI^z zJn-sdaz9O~#<6F(;L&!1DcvSq3~%K=D~mU9rG)yT{)PgUi3jiML*1&VJCRL>uhCRP z0PM=D)1)HTUkL9NI7}3u=XPm$2{SSk?^|K_2<*1dTz zV+~5HLz91O=Ot1Mf|upJ!S58_xWX_9)<~r8BJe{$$D(6(zn*&uw50THc{$Y90sqhw z<|>~zVZCztYNw{EwP1ScP|PIU`5nP=nDD?1G=lthR`f zpI%Ehh{+TBIK0^-e=PC^SI!zw;`nI@-`S8F>ATI|>$JuDTnRcd0e5{v@#kz93NWd5 z;+~MWT@q9QlbmL%BAY@sH-nJ3PC(OJc2?AWXIlISKI2Gu3Nt$at4{ujb+!d?xI+xq zv7_LpY#H5nqw)2%u&{>9aqHYH#1H0yA^+ z{Jy^s?R0XtQKxN|p)o0>G3y`l5V*7!kv`U$h&egDozNrgCMwr&1Z$2yqc1JZ>D^pSZ8g&vb!YWQO{6LQj?L9f zWZbl*l_`~Jn=UcBUln-!q=WShw`cvwX42`V?KYg?qYy}R_c(WCm&AJEB3~Ika)qno3b<=?*Uc_Mq4jh6C|NTAzKKPy7FHmLd-^Qr{#ron0@3D zDKRfX_!Mie>NRvXS|?Luo=y!e(=2f4^ten-q#xGC^%Ug9d_=D=TMghMY;>v~m6-vT zzdf82YCF82E3^E1v_`UXBr33G%p?K)4eTMy75;)+&r6^V(bzXkm&1_tLE>W^rq*7U zdKTJ&ApAj)aR!lrZj5x@$*wf7nFAb#sw#$=6I$|-;$Qv`nj+L-+p@$xG7C9s ztzh#<0!;;mtaF#uS02GiR7f53Wb2IfqTu$|%UZ*1fnRPz8!a_A#f@^(C7rR8+lm0F zJ_x;zObU4W%1O8O!+fGsvx}{y+g|X`nhP{h=e31o0TGZp!B)d&PmRD{|6C<|ZJ1VM zuC0Mh-lR5%`U~~I9mbIFgXOcXlzwN7V}TeeOwY&U&Z4GzC?c$`McV{s7&fz-GtzXK}8wub&x(b}bm;udtwTKr?*gWj1RK#`F z-X|f~XPw3~Av5Q>M?5czW1^?ytV}F7d;Hq?ax{(JZH72vS%0aFwKt#r{Ob2`WDg>M z6&I)SZFzEc;U%J~l0KZZ#K+B?k5b`NT!49ad_EGcXBv%H`iQ=4ycd#<+JW?zw2lNb z77DPb(HoNQw5G6a4#L50BYTymeZt#S#vqmy@WE{NXQ*6ovI61=wTIxRnw8k0ArDYp z%(8ToYT8>B;wLj@1EPv%SO&OFf&u_cs zWX;A|y*0Lc3p{#~kg*{osUylsD6qa8RLtSDP$Yc+q2}R?pv#{pXRsPOh)bg?82=C>L*ayf{XCp|MvgTKnyiP$wmj6 zdQdKc?ajPD>FJG)AclklO^Fu5zihTb8XK&KWdVWM=Va<6Byb?(p=3OU7fAH?h={Ku zq;qxh0%DHU<|)Y{#ud((P$_&@*?EAR=!mOm-1@AtY`p&di=Px zW!*t^GkFG}=+ch&f6i$7LvQw$;W!N2E3E_16iQOavJnD7C2?8vZIrXL=|{_+3Bn-D zcdxJvund$SBA1~|{xia*BSKB(22e+Tsh$2s?RjGz$2_gGub&F9Yl-)3^h|#ccjC4} zHFV^qxIW)Z%2yy>)Fx6Z#}mxyBW!MPh26(xi%OLpe#b)e(jrU9czGHoZvvLBPY_xG zc#2_;nvh1W%Swfa%Be^?vF(05t|A?GaNiOy^Koga1d+>KOL=lM>_<3DjpzKRy|cIq zZ0PG7Bh4gAaK6#rzaH#Cq-LnAZ}($vcHppqB4@vw1QE*JU1g$I}K(ZO1i5s`}fX$Sf5?5NoN8L@3m+)0>{KYtOdiw*@Q^ud#Wa&6as* zcE%n?=vF!#3N_sk(+|t{jDNnp0lMP&){~;zsV8?5jKgwmYqPl$k>+AJQiaejivQSi z>w>v{F)FJXUg3R0)eTB6)k}8Y$C3XX?DM!FX1W!}?Y_QQD>F7`-`P=3?6*7DD690! zFZHcOd4Y{6a3g{ciy&Mg8tgRgV`^rvRc zkzb*u%d?+I#r)k3Lo#Ug@y{`0j*OwHzn{sBQuZ&+XhC7Xqjo7>c+p(Jv4Sptv<` zfB>X|qoWRD`$&vFrHZnc%E?Kv6xh$r6%qX(ky)D0J{RTso_?-P34C5mW4TEcsrbw} z`w?%NxM!G(xnVPrV=y<7LQUvKzBq~yb027MH5Wt8U#Zf>ZfQUrt(n1SGL`o2WQL3V-6e$s; z8$tv^K!y?_6hVqndWTR0d2gH#zxDnP^YyNK&${cJ=kB|oviH#T&+O~2kZ~+x4D)*w zm81SufnHHVMt1&+9(rpS&h@tULeIUV^LRtQt}IubH#(IL1o|=K%VKH#e)eP$As?Dd zwltbPS1ILK8@6vpJ!&q3b?H@{4$v5hpu*2v%`e@7BCQczR}UUDHm# zMOR3HM!r3{@A$Nj4~m%hQB3I z36i{FY+O%#RL2633Ou9{ly@}-Si`8UqT0>TCO1N-*ua7I$s|YIo7@!4W0kiN8#UuG z@9W5#&7Xt|lC~O?wF%)~)QP}4AOpY;k`(-J179G0(Vx#2nsN#N=;#93;-&ANRoeq| zqupvO=M-S2pTxd*v`{L!F7kn)4~a4n?liH${=r6SH-spkeW!dvKCrJai5cQz$Dqq)a<=wki>yoSrJ9TO!DF8S z1fS`S5X&ZL|F;S_YYuok1{g zeHD*kkt^AxbjM&K@a91%4oKXYn zb2wl2nEvg~D6ddULNlS=KL(`dLBJd)@3+}l!FGHE?DKj~yxcdR*~{vq%vd|=S&Xwn zdJN_{_<0jw6uPdwy+IhO2aEv&mi*~QY;4IML zeg%`y6FZ!=@2@0AEQ;zmRbG}yi2D*PQQ}JAdBd-Lb2i<(@`=!|zjE{nV1hI4JBDvI zV$a;+)B6_n)grOrXVVciMx)O_Y4Tl3RPnj{E5j)EuPA>|b8@e;^_i2Y?&s1Bc!=b< zFH%u!0u}g1+^V6?>2e%l}Q{u}L2#8aJ zOR<^coB^*T5`c2b(Bv88mM3w4aunSTnvseRN9UMLi~h|ESM$DAq`C4x%2ZX4{8`v= zQY6V>9&agbU=C_XP>Bh9pz-Z&_5qGk&)rSoj-5qxJIMUtpsYsNhwqWd;C7&>C!Dr+ zjq62q_<63cc8r+<@wd0F19v;AH%pQqPdUV4fYz?qBWlzFwcaZI;zi`J11+wU&)sLH z>16FBG1JZCZ>Q&HN_!$7QVo|!c7GMRFHjPK#g>Z_J6`q121a@Mv>hOqv}c~^a<9ua zMZs|8I`TaD7b{(NK^n>W7}8pUjGF_tvP>?>o^-GxY-6gj@HC_zTreP?99>f*-~7#? ziqn$IMZ@KI_u3dMk71Y}vc=z%K1F=`yxr8Q>auM3?#l0CawuRhFwWgSm@}FaPFJrD zr*q{hY9fE&pYnl9Z?w`opp2SL`?#TBTsaPS6DNaA2ya*-l`cB{Q1K5hOg?y z59-1pdn zSk_tu0aN8bs|s*tS5kH6gHGz6H1fL^zW?6NR$Ezeb1&e)h`eiDNY`0@PCo?VzV!Zs zxGBPgBiToA#dUXIlnRt_IGDc3cdP1-s22%y3b#BU1h7BSEWG$qZkj|g9t%GbdDi36 z;eWxCR;jd>TGF@WTod2>c(Yh9;({LO!GgWfatjr+NmGvS$wsF}o;06H1=kvt01p-Z z_C$a~DLE%Pl*67WX}K@ICEf{Jn|!p@DL72?^u?{-Fk5HkYFAaFxypnijw4`Mzl#Zc zs*?H87LVzhfW(0mvKPi;DP+@J7KC?SPhMx!)7*Dt$@+PA3L+GFPKvIrWuks>t79Xj zUtwcyISs1!1AA@Lu6Zd2^fF}XLt)`e6?poIc@je0kVDhYlk?6lvEp{Cy%|YjN2xt7v$Cq+Hb9-Wm8c5bxT!fg6$!4kWILfwK}KXRdy4-o;iYl zUC_V-N>XJx>L61=$XUmS`#+7h@0rhReF^X@2S!sl(l2jIIStZglGvQ^Ez(dQqh4d) z9N5UiFF!XR7|#ZrFTjKw`$B8|&`mv?6Wy69kD-g74n^!Qp^a+FaJ}V_DM}<=WKr2$EB5cPp;#yTWt-*`up0{f~ zcpUmdHmW?}A=XG>k=02pC6p12@AH*K-y+c?PJFQ|?iTvx6P~-Z zt~u&%WbHmY2lC=3hpr&}C4d)MPDr(wj^hJmnVM>9y{aJ|-eV`Fb+qk@tOk@e)G|_% zvjYDP>OV!6yZlPKa5f%e52QUjnwm5ZY2PAPS8I1NN`5P@+%h?B$kaWNVeFlZA<hyqa{DY)%n8Jw^sxm|?x( zFmb0M1ndbAThS_@z44A!vwI7x$J8in!Y#8<1+;C@KfB#QkeY$2`kMMjTTz04hb_LpiYhu47qrI1Ggj+DZ;C`qy8V5|H5y!T`a|(*40b+AS&rac z=xGx(eI+ve1=$2_t8`75!u7xY42%&Vs69WBV|c(EUZm_b&kUi3bQ&+xcegoy9y;Z4-)+W7D?TBzi5`(PVYsn-#qi~n3#0Zp)^xI^Q%2BRj=z` zi_tGRm)|M-`q}5Yil7!ug#~#spKqeX=AJ4>uRa)tE^$}Yi}-OK`$Xr zE9xx_5OB0~H>LGn3rFeiU5p-J_1`l%I{zi>g2|C@9C{qx_`I15X=TAI2;Ts0sNhd-Kn{f7!IHxD}> zEsM6TlLf@f?a2d2|9QYt#?;+Xj2_S$4;v>R8z-*@myj?Qw=fqcD<`)wC+ELQl>kGq zFm*Tm?=6N{*joAgca|zC2`f6extltfTPn(k(F07e+uB+P3-a-rS($O0v6=DnSg=`e z@$$2o3ULXt@d;X(TAK55Sz7Q5{lgdVybQ$L<3W56&;M(;77%lQ#$O2u^Y94qa`N#5 zXR{LIWi#dF62tQxA)%pC#Kh!N<{`1Mfmi8Z`6E-z}uyrwd^9Lnc z0{i^?we9~xdjCB>|9#%e#u6awCkOq*VK^Q_%)d(E_D3*8CM3vK)Zjh)t; z9pA;73h&hYN1~@EqGBrh&k768AdxI;n!XW|P$UA{;INbG0I%QY@^z`&<%v|%xc=-6L2b>#kBO^6pq*P>NKAB+2Oe$B-r{cH{)I--XG6COLyh=rKUS+SxLW9{I$rlc4X!!4$}} zs8AL}=5-aCusL>W5zkj2_@8u?2DA9yizhL5{dUi983^el^w3GuUcT9%iip~#Snwnh zqyFn@5PI#RWalwe>l-&m=af$(FIF6XD(k|u#; z{0(wO@3alCryANM-g^~kZKwRA2Sx9~nxK@D-QGr@6*_a7)$l$_(byveG9!>+4aE=} z`I;C_etT9!r}5c|z3APZpNpfZk!h%U(wdh8Yzbz46ZQ8wQ>h#qBqL6WZ;I_LcF*S_ z9AxAAg%e?Aq#4qk@1m!6by_bQr4ZU`5#xh{mk|E)%(!vN1m8z#72NKpV8WqFUceob zlL>Dw7$cwe9UgB^d&VJdrI-d?--Tr?mp@TEXnBzsCZ+O;c3ujCZ;u=Rrt|Vgst$l5tye8Cs=f3~ZJk=N5S&_l{={#RJ#h*<(Nly-$;O3#qya89g zI*awnaD2<4=w08Jzw}z?Kq`vA?u~wC7K26Oz~4Df5h{yTs4<$35I#YZAE5{?L581e z8*+LsDUI>4CtHI1UG%W1P0+rBEyyl5{m>=Vmu{>okV6*O`lQSKATKq`O2$zP2r8+( zc>a=c8HtvIOCWIG%#oDSU`KR=K!|E58%z3Acg%>7#wBu45l&jI#V&@b%dV9l&p^L| z$Puf@oWj;MqZk3RMyA8^%}2lR)zQk_qwyLNdztjXh;m#dK1GIujs~vfZH*oRS5LV0 zQ|b;z%{JOg2@dCnd!xOGCjGm=?1()03HQMe&3?ML#dEFd&Go4WOVUJA!nS3%;FAgQ zsg4qAgB4FiZINKH<#J|?zbf9z6#yaDg&bVA@8=}WNqnB#oRY`prJJ4iRP7%Fl=YG0 zOmVwB;2_J0+9VN?1?*}vk6Hv9Z2EJ-Mkd9z* zGdN4vs`8w5yzH^$4H6R=oGw^qAB4s@Eq>UCJIQc-6h0g(EH5Vx_JX8s81*tda5q9EWV^AcHteA}0qtI*?1uWQZ9_@xT zRvhH;nXgWh)a711x!-KVaf`UJ`2?;)^xgP3kDa$6QC-`SL`WvySu4F2_r=Y>1c+lD3W8=tSAtPm(HSRfv$7;6AE&ll-_oAW}Ys z<{x&~QXEF@2p`bhbjU1e-76hzh7p_wt-IqB*O4Oys9+@Y}Au*=w74 z#(wUV-}jK5N2Itg>OEhC;0K#`7$rnrJPt_CZ?mC30&(&hnwn9Du%MAjw0H%hU%Uhq zq{dLc@s{XfG%sENQKHoUtlGer9e=M1( z@ky4l;Sx0hjSCnp%I_}xyj##@u*Q5i6eXY)NhJ91_WR{8{OH;5W~&K};sXO&(Tq4; zS9rCkKpA8k6tj7eg3r|KM9F(e}f8_z6;@9vT`Ks8;4sEHpQ_>)9p|E>@lSa-Uu zJLESvSp8!1^Km@ZKI_~NO%|^{NKIN7H*prorf&)#K|g7eEV-#<2z>CW-~UK;Ak3g# zdp8eU6O+#)HGo+Bi4k<$5>Zmj2w=>_yiWYKadzB8X4&)%ti<= z6%lWqqf9oJ#j>Fc+Vhol#ti>fA#4%-hKEE3it~Xg(y{%U)8AzX(lZAbmIQh$M2)dP zly(PRMVFHVFE5veDzE{b7)TI29yHGvV7on)yfVyt;P)$~!H^fy(`NzN{AW!q738_h zE*`SfNOS2VfBWa(n5*8+no5qbLy9jSO{39aklv+7-r!*~#*z}1OuIar9N$^*j`Mc( z*{m56=tyBiEWp#2{-g)QS_whuozP}00nw5}>h4a&x=4+(Ik9&`B8$m|IsH*6+NaaE zJPr3ENtXN@A|1Plnc&6GMTk8%&|?c26Q~u*q!Mc<396C>qXUUK3rTG~0Zi^lrJYoL zE|VmjN69<*NyYcU_Lo_PUy$I3Zu@!Y=?*AId7xIun9ld}Neb2r zn2fpXKjltsf?!y1Vh~uht4dzB^+HXhlz?g*CH%QYi2sUSQx}i=|jd|yPewA#)(YUjKx7y)yY^8alHPU z&jnH=bEN@yuE)AMb*r>(bAemk!p)3AP|GYJo1uR&rB&4?#364;4oLFMbvv*(n;s0q zH$JxnvF}io`2GIyHMDv-gOg~0#K@Xghicl;89`oIqhrsVUR*EY?#ZY^9FOTMPXyoY zP1KgQn~Sl$XA-nv5ev8@b7djVQano%VAeOQ2P~hOo?$MMmxi5jggv#-Y<&#Rh&%g; z>gpbHFfdWW^P_2FXZd-|j2~uO(_%_wK!~=0kFL-BJgH>7$jz_5Uyg+_Sj~1HUhs*tX3ZB5|y*)ipt3COnJ(_Va zfESkPDNbdNWJH}}m3}d08wRjVYP& z`_mkQbfIM*>k+{bfBHNEo+I+Wqs2+`U}hQkiU@lSp5JogT|kN)?=&TQ>9i~8IxYp~ zFuqbJ|J(Ecv=$9EKAjNw=HKAGN8f-nf4mYO&%UI=UG{16>qtcwLHIwXBZqr?lxezP zd4?)IH!Dr8S*v9lOh8t3(Sxt=2Nb^1+ubMReg;R;5NE^ zcemY4pP0xF`|6T81KjVSspXG?wF5m;FC}#Sh+Eq7Y^EkVn?}K6AXU5vtq}6|4}>=Y+*dU#gg#nUV_hD z8=*m-YQ2!CIT(vVgpux$LtvQnBYw($WM6emYlMoK$}(4`SQ7_zi=FZuvHy0^H7Fv` zDHVTeh=R4Hp=raF@W7Y?J}e_4Bh>}aPDV>`OX$$r^pRI>Kn0}rmH~apwnO3 ztK<1mx_R2YGFU^2Q#ch=8!A6owF+0oqDhC6>}MdC)fbbrLY2Q8=epz5q7@pStKdd2972_ORMS_d_QIP>95a^TRqLQ@3v+T zQGGElx2}Bs?`}QEb-x^>i4-pXh?dL2@qrC1MjF8^u@a^8_lY?6Y zy`aS)2Be=O3L_Z|>??WgTT%P7d+uCZxb|FfZycY@(Fjs0d~jPXx+AO+hFU=$ab2Dc z)u|D0?7p~I`kreq9Ny-+)S_tHdZL0-!E}dAdVikLg_cO_UCftAhG1hQAH=~?7jCD>UQ7TbAW|ocaYAciVkPU)x50*2Q zeo<-qR&0DqZrIPT_ZVdugfVbb^j>_tt!mCCst9bux9ulyIU1q-PL@M`X3q$T-Umr~ zbiL0VexVdbD^w$`N~mi6aBsuF&n`X9t2AxDw~RgR`u#dnG#=#N*hDmH#g=`wWanQO zD3IOkMP8mEaP!^!f|Ibt;M4B2N}vuP2Fa+(Xl9k*NG6Ej;d$Tyxd$h?rLMTkz?PQ3 zR?tBs!}zH?CUG;S22nZ2sM6YZsrvV$jc^*{s{Xa7ovm-;G_|;_74PS2aS)e=1ll8lH~*$ zLznK?{l3Xk9Gn=|aGJjw;|9C+6n5=7n_qWSb863M*@hEtpX(8=&)mOfR0Il8K~U_+ zl9(cMEZ;oP5$OK9{V~PyyTuwI#_>5{tC40g0`dDc5N=y7ic@@8;a=ujWOdZ~O&hO$ z%hjr1&HjRhiCm)z@<~-(!yzl&+7WZaIi+&>O2T*{)se!o@DK_a$0ucOdkmvkJ9<}X z(Q+HLj_bB0vL-((St7-L5zOr-9(3a(Pggb&sk>e;uaJd)yev-6dd3Mp^A ziU>HAH6?)vR3!`H=i0wlJJKd4^YIT)7HXU~OX&)wsSmj8pwG--I7y7_X9~KvFu5ZO zs4t9+&-|E5K!r}VEvTx$HVc|SNI|XQ&0{xx$i!*bd_j0huvC?715Wl?3ypaboj3Tc zX1sSp!_>jg_({YK0zf|UPdV)kgo$6-`uQ!Ayz}6H7U;)tcQ!Z^%<&Ub5uu){wsUQ7 zKImOH4P>U#YVeR;q!PY9^`~NlTaR>szQ0uAzd5dpAhvq4Z`>31adf2Ef?(^5FGZ?< zTDZ z#M+F1D%k^p4KNJJ|EgEN(1??(xxy^dUIt7U@t)qwEWMniq8=W!v?r~Zg`M`DGUQPD z8p&aaTCpdTqpX9+YsjJMg(2-s7J(;q_4A~FdkEb9YgM2Mm(jJ=(rA?Mxm|PT7mq*t zpvjCNj>w~To(wG1;z`QXj+`sc#z&>J4buhT(+={j;H*+jWhmcW9rOWKnO^aobyn;}--U zje_+))VK7+b`mUEKNZy+gKFwyj@Wpuy#9K7H-xM?>~%u+P@@6yg9z#AgUCcB{LI>; zsasuL-weK#cS@Fm6-imy(7RK9Uu1aXz2EH5C`aME8iG%kRp7ZD%KTD38B9i9YaNH(zH8OI)M>=hM~9RxH&D=XnnitkK*zAa#2Bq2d6Yn@7*VLL&wZo z9P_6zNRu7k@P`O*>^>C?kDsEHtk5BJYBOP6$-^=&UTvr-?b@%%`MIWb+eR;9M-kAh zbl+9ZFs*Iy#wH)kWBuxB+tnd1w}_wU-?IpBjPm|+x~0G!PM_!Kzdm+Q1_hs)56}g0b%oF(iGk8rPgi=n?;!(y%kOv3l~rC&GPK6Clk(M; zEN*=h8xDw|yCrnFmd#Hjvc~YiUKBl8u@m)Jf3@Mi6Wq=<{L_p~7h<8?lX}}*x%wKN zJzb=qd+R0~@r_Dr-E5AY&mZjVQ!Xm>!o_xWYtSl|s36YfKCaS;*+eE4T`s`JcQc@U zTd?ioBWU%_S;xfsudrX~S%+cBV;b|ryw+T{X#q_u$CWWm&9t? zIbItQOglA7XFz6r%(PV zdFf2on}xHRxsoMJi?Y9-BRA4(+r3`#{@vX+>o6InZt7wGY%2)*(kkv?)7!RR_|xem zYK!$65Ith&|&uf)SCn96jVCN?p3B8)hvr-)f9- zw+u4EmdpCPk2?U(ZL>>=?3Ud(IOmP{FKwR_neHbhH@fcGe3QSPTxNTs92z5zLWsh{yjld7)=-zX$j-Zxu=L2;SRa0|`e+ciL2Kcqic!{^(Wk+uvx526$|YQ#j>#W<4U0g~o^rGs@UE6J4!M5IaokM_KQ`pV%CJ^D;#-BCwxJrzRiEH)|>}iY-N3 z03KTBQ*N1|{HzW<1+GMCc#+rFNeq}FsD5KLA9?xu{`PJj2-EMZ6A6)FyNQRV1^y|T zldE}~3<*Ru6UCvCKs7*|xY!Ek3Hm@Ov6*M!W z$#n{GG|N-sA;leA9ob!r*0qB#l)eE0{&}h;S_m}XlCN=p&BO1Rr%EDmV>gb*n@WSc z$cKcm#k-7F^m?*u9rtkU2b86+Z)eUE$4d&-gQMIrh+B|b{o~EKHZlD6oqhtTedqW* zuMMxuh>dU{@zRIE1@}Y~e$Ts_j!BzSlYM;si0v-S5NNP%>p{mC!)a9wLm;2zA4a^H zMc+YJEtXk80rD!?cbNR}e83qe#D1iK-&CiUYCmb^RpWY6A_)333Z-;OJxVMh`nBqI zh$=)=;buV{QR}E}!Lh^Hx?r%kQw0-uGs>Vtf-AWe6cJrT&$La}mc8 zw}V51lT*~0wyn}M4?_}h=DpA)@KAZky|}@+%9Nvi3VTqCoPs*Vm{E7%o@T(>8~uO0 zHW0UFu^s+dPsid_;FYKB{u{WY>}mNIw|{K51tfvX5_- z5u8y~T~QuXKQlkRGr#C%ZjNH5Sh%-FUBn7}C$m5yvWov?-&xkfFMoHVvplp}S zXv5}q!J6D<62y>xkWC~U{keL@wRErj;nwM^f22NJSBaDhN@1L)7;-tv0$tD$b9+sP!1qEYb$Fx*vYB2s645d z!ibEe#3KI`dP4pyMXV&nduys)d4XIEc>382*%Msh$QTWM7?QJ*zFAJo=g-hR(FhqGr zXOAP4>(OdEhklNp0V-yU_!N=AO;8)Uw~LI}L%pxU1dnBQdY@W$=%V}e8!0wc(*ZlO zh>H#fC2NJ0Z;s43uY#b#77P~n2D;PyPp%g)VPAZlg)NzjPl=5uJ9n{TS0_T-+ zytFW%!2&H7b~5C#1M>tPiTI74KM#!FzpZL3W55N4UPbKB_`9hx;akW5=v0Wc| z$qY11MRw?KcwRxs$ut*v+pP@ZRwJm5jGpW)BB`{^LCz+=-SWrvDIAR5@?~w)YsVe! zFJ5Aw(c$MXF^-BPa-kGUM4;&zjUElDJY8ibiQxnCn@39msu87uZ9}OfPrbyh#R}pS zulRMI;&<#4YE`1)l6QOBhg(BfcT~)4&qO@I`dqAHsYi<~9*SnUman zx#gbNY38+jRyYOkxg-oQB52@=OVu=A_`%@(RV=}M_RW16dmQ$K6g}Pp4e#yjqGOq4 zt;XAx{u%KIf2*awbl3VimV6wQc~S8F`BGWq;SDyJ+bcYI<&rL zh$1|B%VjvLl0Oj~>m#pfWEfi-Smk~3L02Ktb}N~7P|_hq8P(lsnhO6iUP@(Lk*Umi z--oa|U@_37y>A0Lm7N*Gcyl;e?0t4yrVts|domj8pS|DyOM}nz5s@^*K)Q%HB2Q0@ zt=oC$vU`5*z$jkW&$mU0KoC;q1Zx}ci?Hff9Pbt~L`lAQetz-(Go##ch1YjjL=2~;Bh zrHKDT@4O$%5$s#fK4ahx$WdTUl6~(^Dp8BugS$Jn7O=x%>)r<&0Hw;xh-2&zkjpGY zc)ELj7wY<{?ms*2K$N>?d17k}5%$$UnG9>j$;*E5JVZq2v6(LQeA&?k{lhL4q`;Xe zg{j5%7)1^yVQ4-b>zhbrz@IK@^*9!VJ!A@o=P0ljj%QjVT0A6<6}YdM$q2#ju9m*^ z7)StS&}+tw^^%f`W_OO~9Q-7aFDIZ;b8-fr#5d_YB{i-N;Kjlwpz@6Ltd-+&Puu=P z5lkaNqO2m>Q1u$tc@Ml(4M4d#Hpt7>RnphjwPh@{^y{^_g}1WrbgHT@ivQ4^WNEdg{RxSjJinwrPhLxcT{w_PWx`m{M-MN<9 zRTCkrq09qY(l2y*R)A?4p-H+Xsd9s%v}oxfrkp>rc#$AMHIL?SGs(D!Emww%_!{J& z>v}M-x1KMlggtN+XU#&-fh4(qR_os~&mlzJU?_+z%Up7JcH~$oWYD)U<`yyGWyz@GCg<@t(!=e+ z-u%(6Z*xn(mXG&wP4_Oa00?q)m!#7+;C;>GcFG70`#s#3T)^Es45%d`c;H0@ze#eN zOvY)W{iu$p=NNB_roQuibjcx5v{lYNDj45I(KF5;=bcv7W1Zp!y)%6h8AK-rb&6+))cQbirTv=|w(%4b;4N2wRI4Il*H3hkqE zFo4~Ey`w!J=aK}vdPratlWZx5`OAqF*>)Sq-1j!$PfVLP!bSiL({@vZ$6P`Vh~VjO zrGe)u{p|s7W_ML8VD|O{W}uUcV#q(0wl!eHg3x_F>PrqPM{Tv`6Oj$n&yV4Etjw^r z)Jj)?H^Rt})v()CK2Iq!Kc%R$n^WBp zQv)X(ML%J$@g#E}0q%z?OMG~agq?PpxQi0Yc0 zoU!!Co59aava3x#U0_gMEKcd150*-MGZ}v~X6O~O+0lW{%dC7a$ z&jU^9{{h4?!mQppB204loZJ+@t@`aLk^JG4td+5JMy(-4jC&>y=!sDk>Kga|bPCB(JWCtAYr(y}F}rxsnZCG604%KJ?E31~ABz>oYk&f!Y19s!zc5h1=O z<1&k6O>MC;;-}ymS=h>j6vAbZ(=3Q;1bGRWCURz__=lq? z>Da=gC*&I*1E5T-4OG3X#xx?s z;8L`6FC2kCcvUTqFBNCcr$>uMSL@Mk`t4JCc1bwz1G<(J%NeK@=fRLdvG3WB7 zCuB=l1R$)l%icIoK*=ruk}RB%OtMJF(qrs-pFnCJwy@cg-Sx=(s{B3Z!{o=H!~ER~ z=dS*>2<2JgJk$#LKiCz*XHEfdg^}N4Wl2Rw@|fxV(ddkv3>jYnUDz&vV5JxUQ{8MG z9g-#x%&nZBx6Q>jXp?9=&T0zP7Ai*!0svUj0dC*pEhY!p?!JFU&;h(E3a4Sg&?dB( zp@jd}ahwK#LC=MWf(!zbakASipI0b;MVCc^cXFo4%M1Z{qp%d_cR%<6U9XAs9Y z95yvnFr&djwPU)ImXzMpl;GDRC}8;}%8VoYQ&|>S-wwZmH4P3AD%}LRz4=w&ki`N5 zz~+ym?!y$9)mY=az6X0zVtvZdy)BCGqvqC={~F_Q9zQTqpa!>(zGKcq*9lzj?pinCwJa*gkM(1=Nz5Xi zEq1+ixk&=9$lBkPv;!RatvD-oLc*7ce(aexF|pj9jRE`KY}MEDR@-e~7Gq<5 z_`HMGaBj}M*4=#qZwk2H4BTgDoaey0<12*J<~Dp_VE@HaI|j@@-rPif0y07P!M*uy zDkx~Tv4ijp_Q56(;`Qbzv+C5EIZDzq#E7^Vm(uw-jwwhljnjva#lzi-`Sp0=XvBP{ zn?9`xmNorg7b%g~Xn&#*EGPH=?IN0gi_I0(4f0-KGIzrBVuKo#@Xk(h$w)6Ke!-GB zBTOv9u~LNc!mf*bK5*FviyH3+-v#I)37rRQ&8nI#K#+S7ol$RdrM~?^jzIu&3_~*z zgQyKqq$$4?NRNH15OwZo*=$rrjcG9|lk-5#+fH=c#U_QMOrn+EY+nOkkEAY{tK9E>mK= zb|N|ZFSsot3`TUEH@9x-&us^nES)!kuCCSf4ZY|{nSZv?G@DPQ#O9((^l=J|k~KYk zlm;%;f7A82V>4;_u$sH2YqK+|3;=UA@*!$tcJAc(4{Zi1nyclYVfL92vi$2V z6VCpzy*t--tW0af7t%(NG=JL^F}bLCS&6xGw`Y)`L}U$lJEqp-UmpoZux!2gb|DoEk-RGQDMMEBO>9B=tz*8ifBKI|taJ=Mb^ z8=;U!VPv4|p-j-T(3SI1LOdhN{Fa!k85zyJQkwXFBPVHO+1mU&y&MkK;_+3E=D6PB zNpnWk#Tgk}&khY+NpB`!{>}H*N+G%C!V8hINS3z}Aj(TMEFRA9)CB z&PAd`BN8_gI>n=g&~_EsljlRc6j{V|5fxn-nu9Q^$C5@R9)oX_S97Pl*gwAOqz1`h z^U}}m%w>YI9z?@s_ZpJ9ZmB5>64YFW!B{1xnZaIj!5&}^dgxyhD9w#W@x`SyS-f2l zTlZ=kY>fwi>5Hx2TPUsh=!q(41`z%iBZHZ~eL$RwhqvyZ<#%j-+a-zHbDjf6ac(*M zg4*>{_uW9OH=?z=xLB?TemC*W6_l^GeJGXgOW`5qY&w~_ub1cvw1@&gBEr*=N{3jVo`-FDYo0n;oWynw z;(nKsGp4$0cHpricK{;U1YO7Y(;YEtGKwSeR^`6@Z+p(Gn_dE|i-SE3;!Ue__lxAc zRaRo2ck4+pCl%+fB^05w|3D_z;m+;O> zOe>nhT;kT15lg|DPB1nwMZ`-A-*|laeRXep9lQ5C*X`jAs>p~49sZa+?#_6d0}gr~ zt+d_QcOw90oV7kImT!|!IxKA9hi|#LCM+^f7Mf!uwEl>tv7a=*Zs$;JKN@DeuW{9v zMF0)WSG8uh1>E7S-V}$XIHA;jB&2N&RyO#8=fMFCnTG2yy#Csp`&)x0-nJ^IzY6@M z>S9ieCxHOB<#NIbn6t~8of@WF@@2W(>+8Z%l zBA2=geIn#}{|*IF_fwme^99cx_Kh2jqonz9#fq;B5spS(cl$I>U6nCL0Djjx){BsP zQF>>Ml7;dzM=xwX2I*sYG6{R{Q%4Vn(c}+61=%Ty5|^qS;q>)%3niQ#TpdHV`PTbZ zz|Fa|g}fr*E55S!`W2cl~@`&hpaxznr--r z<=c$mXmj&qXUQlV6@W#7DLzlTcEiL84(is`q3POvnK^;h`6~&vS-hXUEHWP-T0Mwl zI$8$AO_r07bwBdWm4=s0M5YT@b4*ee3Ej8Wp?*odYs5`b3-RjQdron8dMWSF6xWd&MgGmIdkJlOPVH-<9YFf59b3UAOm50w6>d%BZb3uwGVAe#fMk* zOzCZ~FOhp$r9E4IOYfur6AaQsVPny|jnJ%p$TL2Nr(YHhXMZXcmDXLjXFiO_d3B&0 z2tfR!i^IGg&A!&8`GyV-5>CaU6>77!TU4*3GFIpp#Z4MG41&v;R*O~0wDaAkFAaAF ztl0t6Frdf~5E*CQnoq~=>F@m2wpmZRSwB{iBrTv1t!1w0U?NVuYni`mo(<116KjHqd&EKa?IjI4ay$)ghRlyYPrD z6aJ>C1a3T6Kn}bf&;zg)I?PTzkdTq*@}lwYs0H;M-_7>H2AG`);UqKbc9ny)xKp|W zm|W?442}R>RXV4Q;Cd6Y$3vJjx|zvO`fXWoh5*7+ zROw(NdDWTSNqDheT_)(gqwzXbs7_?K*1^yT-QJ73x58K_TxF87vo$Tg_nlh=SdtQY z*3|csSodzNkYa$^ZzIPzuksVYqq^7&_XTPL35e(`l&s-XO2IA301@@yD4mzdHNd#v z>aG(*B!ZdWd*L==x~+o7B5c*j_t4$~TowDO+}P3FuDtgQrgcJ9zSeYY3;uWke%&TA zT2HIh2tQ6;pR2#KBm>fdZD95W=mn=}@tSzc5l}b#kQ1243<=hI4%U{(?XVa`#NL2Pt}5wjhLyCM zmw;z37c&FOQbq*u0Xz$ZB&-JckcDNr)`_?;!kAC(*owZ`Z?WYp3ZRV1pLLwBuV)*@ zxAG~b%G*Q3+x+o?>9(d;J~DxvG!JWsl&V!+?<$c#({__tTL1bzJnAMZwby4VM4Nyk z(ODquf6G>~N zf_9OuvCmJ<9e2bXy3!p8zxTi*0zCB)2JA}#q=)y#{ay$tc=ccBrW+Sf^;+Ml%F;)q zw!sKYR*mP)r?zcfZFb)g9D9$askd}H0f|fLhi(1Xo5C?T@BY1FddOAaVjZv6roJ4V zh0OnIFxF0_uq+1&oGvQ*h_!)uwdF0DqjfLl=z(0Gv#GUc9v&A$!?VnkY}1kJMN_r} zy;qmz2Y1mg`T3@y%uUt%(rah^8Ms-sBv(Sc(1hd zcXfK+j5D@QotJu&XgP`K?Sk44&IOfeA(xZt(Th6unrGJRpbY7rj(pFcL0i-L1o3IN z#@(OC*!=zIi%rZAuSX-l$4~cIivbf7n59J2hJQk7J*RdW6rhsoP@S6#7EVRHScz6* z&M~NVEi}F^Ea}ERYv>YJhT_T60`{MP4kL79#=)68%vh?I zFVU)hhDdQVFapf2As?lC!uuQASg)LSah6h}P75l>$wp?5nQ&FQKkW7@-#dD}5PUt~ zm&>gAz*Hi2Uu^s&)45^{wm$Y|z=wr;$i(&yZ1m|4TOBbX+D?Egh#&r?dw<`keZLRA z{jBD^a;Uv-C&O_5RlidABqFoQeZYCN1Tf8RTSItIp^%66AT@e?oty8DV_j#?Mno>Y zNu;0O&9&(nN1ir6bwc~O{Fs7sKUkZ8kG;6))LtIAyU}FQz5-VtdjnE~e&^ia`EtHy zZK`YVHm$B16MLP#+wt1d!TX^)&+}0m zf2CS$?bgg@2JYIJGe<0BwN=`BkTBFhDBEVeN#k4ESeNJr^KYI;6;V9AHuRRlduvmq z;P;!FH#W)VITzX)as7VLrQq$b^;kr~XW(|dlZ&5X)bT+>M?=>El%C9kc&(+P6plYv z7fJX9GON9r5YhJZzRKW30n?=%C6`JUrLT!sp^zs-6y0ZqlDb{9R@`~?pK+t&jVOCB zP6umJ!zcWVuj;3BOuYbXAwX8#of$7hD;pJus-lBtabDBdF>z6LiW!xDOA81mQYJ{$ zKEI+8yO6@4XurFd8PQC6w-vB+Gg|FSDQd-mgm>}Yw#6C5L6WK`aXoxw=vY{|9X2b6 zt32V}MrQ;B&dc`O-#R|6)*rAh-bwJ`c`yU{35+mS&or?Dvn3M2#0$lfSWDIBzW!Ds zjjGlMN`mP7nr0e$4ZI6rQQY3Ohw*}PKLk2d8^22y5*zK0 zWxG@AjiJ@R7^cC^^uWrh$DT`;Zb;fc?+<~AY03iJuUMAS^00eeZI4QniB#}@avBU) zFS2unNL>^JymNrv7`NZ7iU$$Hz))--;_m&6ng?|B+IYdWv9ePLNwUrum0_y@5FeNb z`y^ZJsn3fSX0N906k>z`){3KHIZJbzY>2oKm5h&1+2L;@jC3_u+^?n%1A05^NidTb zS1a}%yB0Vc?p@DS2Wbzq#7<2Bv4LC>qnUAb_s8nZ@SJ84VU<`6ptVVVk5H6pU8nFQzo-O z2F(9B$E?RHeKp;I^XBlUhE!rS70g5mOF8*j-yM5Ia0aYE>t8m8zooiZ+6%c#qYm1R z;123+s~iXGqSWtjbe$Ln7}cB26;n_yx7$k*;Xj<&3@MPu)ug&7jm{$vFDwO>lfGsK z!>4S^*^d!uQoKEuV;<&12tt1WHZ(!ap08~;>n_|rZuZArT0Mj(YV(_(A+iQedv$U> z!+W_$P>lRA`>nR(F7TZ)d3UTni8Ay0Om!El*w3?H3xL_@{qJ7K8W9nre1@`DBMJa> zi8pl=IGG#n(`lJsx|bvtS#FO9rGqNLV;w%*Zy&m{$UtCT+DLifF?(?P3FTZM^X^_> zB1a%fR{10jEWnpD*MVB1hC?|Ftn z!uy-ez3yefyIfxB=yprALgvAlbZrb!-v))()$L_I;i@~issF~)6D7pgn+WCY7Xmrd zBjl%!okmHF&kWmfhlA?t%!c-&4*B6zrYy-t`T*%m4s=j0Om_+LRCK!~LPFQl?Lxpo zf5XDMH3i8rx*fR>N(!hJ?lh2_dyV(yjKZR&P4KsL&kYpsnD~9qm!#{Pxz?vBT{-f zc=z_YnQJB{EMjfDGy2bz^c~WziVWca8g#onM}q$F%Vww= zFy{rEip7H7;u*2oei=_BLQ!XfLeC};w792C%9)Zr#)X*>6S?e)y{mzmc2@fb*(-(Xq1@a;dl zm{JD!)2}{UFr6%7S9P=N*=(R1UrUxL4I8wc>R2 zH{ihK{(ZY8t>&`vZ_heez1!K)O54#O>u9mnN864SvoDtI;S^+@#9SeF;IsWZtIDhW zyQls2S}$sP{;qZPl@D7i=B@|sipkCTSYEl66*Ox4Gng&u+6~6sZQsj&PM9Ubyw*>K z)m-|tOBQJ3v9R<8mIFfl(Wmx4-#N9PQNk|W>Hmu8^XEPNJNmx;+WEvn_slV4^T(gM zSAV#5>F$pIt2$pyfAY83ODKs)AZ2H`_<)-8Km$BYodF&;JK?ZaFNqu6PJ7GqNQOeaX&v+Nf(4YIHd~L7ja>G0+Sl!jv$d1Psx?P z&O|0(n)IyC?_%FMKgaz`GUi8px3><=J^Ucs?$i=sd?p@r**KvHo7MCTe?uXwz{rPwI?YXD(>%Y|AX!xnPF8V5LH1k4l zQ(Wi88&_V9kr>mdKI;Vst03cmF_5c6? literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_1.png b/templates/object3d/assets/Character Orange_Stand_1.png new file mode 100644 index 0000000000000000000000000000000000000000..449684b352ad8715ea801703ae42ca5147b9ccc8 GIT binary patch literal 21167 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_10.png b/templates/object3d/assets/Character Orange_Stand_10.png new file mode 100644 index 0000000000000000000000000000000000000000..92143ca6c13cd5117ffaf3acc1a735737e515a68 GIT binary patch literal 22230 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_11.png b/templates/object3d/assets/Character Orange_Stand_11.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9b5f551b679287567bceb8cab800f3e7a27ca2 GIT binary patch literal 21212 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 ZL!^u0Ii__{ir?}l&;RIZ*JR_D`VU1vhHwA? literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_2.png b/templates/object3d/assets/Character Orange_Stand_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e380fe14eaaf1e639dd5171b225d1e0827e3461d GIT binary patch literal 21167 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%0DxhY(U5pUya`Yb`;r=5um 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 ZL!^u0Ii__{ir?}l&;RIZ*JR_D`VT)rhIs%0 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_4.png b/templates/object3d/assets/Character Orange_Stand_4.png new file mode 100644 index 0000000000000000000000000000000000000000..74669214d743642214ad4480078ac5f739eaf626 GIT binary patch literal 21212 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�r|TipZtWYmAS=c;B`J;VjO3l!Rc>A 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 y- z`T4>E6RiTdZpf}_bmfK^x51;)Yc!3o8%4-;5R6^E>O^YExa~=1dxH{VS)00nIcs+x zY6L_NZzD>{KGV;p+{}%q%QHYWp%@X+QrOD%xf+8;K%}5p(yReyKV_IT>uHOX^^o&V zi!L7xdB}W_#z~0&}!Tc1SS`T2h$jrV$t%V zJ@BWWa#?5Pd*Y)OFY&(pj^{llAKU2rLFG2ERRzM0gxOarIR#+DElAX{4ZEi&PUCHabCDeA$N6PHulJTAL&HdoxAx^B5#K=@Cee2^`j864*nCl^=|r zs4*>+GC!;#T7PLcxA?Mp7Fuu`5TGBVk;3|b1&`z%JVp>N=5m7&9RoYANULrZhw`@n zwpRoF=xO_nUY!*QkRd5&34Z&HLu_y}m(R|#`YGa$AIZvOWYOm`34!~6+Bp}0ruRRNkI{yhoN~_yMaGuPDw+GW zA;mP8&1f!1u1&~o;>3wuVx7ocAsyEvZBq}n<9gZ_%4u%neEXfp@2~j%{(;Zq^LTtN zkN5lYc|Kol$a??;s0u(GqX%}^8}TQN^bAe{u&b-2BGsZ@4dlC<;RievUfJa!SJQ?;;(kZwAVhvjfHl;51z} zC9zr_-L{pYk`uKYPB%q;-t)d&0|UOx6*S0%=uk@usoy$d>L(~`CC93)KygY~q`5(V zfW+S&A?QICSEblei<&#_$igCGuP-}|k263%>coFR(~G}|5xIAZ#%EMMeb_jn{lwMa z)iP2!7kodP#Sq%=t3ldThA(_Ca}YDtC6SXoqNd2kr09qOnr@^{R&rZXt8LEOt(t{m z$*cT(I;GtA94}2Yw z;-HX=GKa;rsKd&G=9@nu_M^}_7tOeZjk=6Iy0;q zwXP=gx#iks>7tjtm-jbN>|Higy^H>#$B0ilYI@qK#33{O;r2r@Plx$=YsP9Qcovrg zo$HGAVC`I}WR{2)WqvnK@cLM5XhkeH&QLfAV3q!0jjgGp%TD)BbyljPp;}3AfbF*l zM!gf%eI!-;&aa$F{^J;)8nNOx#Wx+T`7!Ki1;uE+SBAG_8fJ2nsky|165tPs?p znBYvU>$x)Dz#u>>u<`tZlSl>h*kbRB3V-l9OT81CZa@iK@KCHrw4_V3PwSZ5)Qj!q zIoD04JRMLWF5c<#6I?C}GAj-EU=nd!O?#DdT;eMn-}@DOrY)v#r2-~Sg_2hM&=uQ# z?LnYV8Doy>qu*95q|FJ>6G&6h`F%C zWRbM>UzQM>k$~W>OwBuQMRbQN=t6-5*(W_>dW|9C<~$f5H?jFMP@W*S>7GPCxTBGN zq)NMUVHg)5t{qeqk!2@4HMrnEFsLnWE}DH@e&hmSN%ZHu&N#M<1Y1Zy}FE?J#<>)N8clacLV7;sBT$g&v0 zqRG}EWf&O{cT}p)vJi)Xc4YzPm@*EZLA86(4mB9=6%z(eiy268K`Of;|33xmG?BMwq z1$i&>$Wm>I@s%~h%a8G2O~91*JlNYaFFf7L6%*n!2Oi`HKD8X_4>gq@{Z(vccxlI- zZg)XS3xGc?6<=An@e23jc`N(){Lf>UZPXo7ZqL&ahCY*Aw-LVb!hrz2;$(NxjCcsj zC~6X+F*~9|(;7_zBNstw&wr-+!FP%9#gg>?! zTVBs~+epNUQ{ZdWKlH|TDh0wp6CL-l5K0p+$)yjR+f8~ct1ihA2y9?!I+|0Ycue{1 z8x6(>VC7hgbJ)G9o1IIMLo(bsOE2=4xquz={IAgc?wwcvs#k{&<@ax9{XaYEe=San awGWXlf@ho5Mk;>GpFIDgi*2K|Z^}P-6o?c6 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_5.png b/templates/object3d/assets/Character Orange_Stand_5.png new file mode 100644 index 0000000000000000000000000000000000000000..420c61ff63f6d83068ad88ac2d554e57c3647f80 GIT binary patch literal 22230 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_6.png b/templates/object3d/assets/Character Orange_Stand_6.png new file mode 100644 index 0000000000000000000000000000000000000000..805bb56c659033034f0a7b2df3a27be67466c16c GIT binary patch literal 22230 zcmeFYWmH_tw=debTX44o4bZq-@B|GSym9Tu-3e|<2!Y@M0tp_1YvUofy9al7c#Hkt zd%rv0xc9vC<-JdbF&H$xs%A~Ax#s-UtSEI=1sqHYOb`f!qogSN8U#YP27V9GQGst% z<4d@JKNwDmZ(KnjEW*cM1W;-^83=^ZW2>d-rl+DTVh(fUgjm4LEIGX#oq*9GkeH;G z6U5x!(v8l{(%Kd(&T!Ds!a!$hA*aR%wf1?luu)ahhkE|zqHoID)n zU@(|YP?(e3On@IEDEyp`2h7961s34q=H=iP6yXyP;pU_J`-cHo&c(t?3{%;ApYI!?Za=o^6g}J+!TgrJ@LfshuSiiE)IW5YGKZ0>0s#y z408n-%+&_=e~{zf$Nx&>BqHNt32}qDXu)6(|5!@>A1ZV_yqx@WEV{N( z3z(-X>mx^hPq37QxLJxb09NDW0P}Nz`Lwu&M7ViGxCPk3JR)H5e}<|6j$i?CgZ%df z!z^sAy#G5xRa8WjpssEZsJW$*tT+R}6sN7Ng$P*KoR5!J7{X!6Eg;On4d&zFfN)#z za+pEP1t9#q!h!8%$J3kyFaS$asGe&)&gb@(D+wFA{G{W5Pk~_ehza81RyEI zXTbphTM2LoLCno8%!R?cV1CFy)YM#Tfvp2^_+P0$a%BNfw6qkq61EiP;ovs6wB+Cy z@Dp1{h_xk`6V#f4?*HaS2Ic^BQGr68&IK8kA?d9J_6(&&tAmCE?|{HOMwNY){og*v-Yv$>c^AbS3+I`G;)7am z@#z>C7=*tg8G(Sm+oIS$z@I4Y&8W!8r(N013=AL0LNg;H70v$V!T+e_f1Kfew!!~z zks+UU6A>RJhvl~vskD4X%Rw^&dnet~w`7|P_-Ev(;_t=!NV19GexOkV3wEgxRc$wt zM7zp2T8TNJRMeJy>67a)8|XL(WMC%oVw1kJiV9Rp*>{Td1)~1XZ9}*VG zPZj0mS)m!3aNBN+%XHr92~&b1S)wIx{*;z>7^?Q(y|-Oz5J-J-Mb#fW5Kh}9U0C{amehcaQG_jLiz)FXeR12RDUNcQ`R6@A)G~9L-nJwqRGXgiOI>C zvXQwx3tk{h%J=GEgXI4&m8EEe0o@IeMM%HBD(RtccD8(FQiIc9fwNgSk6y z=z3zM)k2?y()bWMEp9#^J-b*C1e+nL2 zlIK722JU-FBhabR(&ike>WH1*>WE!IuNtaUALPh#n$EmwpMK`vv{k3bmxkRAJTsqH zDN*&aIh0U!vyl!j@i(ZS`ggt% zN)vhQPITQH$%cR{t&TVSDY|Bqn+$Tw=u3iw2gma#7bW&HVS3^8uagG{io!Gw2Om63-Miah2+quEcrhjtvJ zE3P9ZRa0xq-LQi)Wdh1E*SfodkC~Joei!-ry)YC>u^wOjTO&#<*^{$GmS^IEgDHak z4xAvRiOP-T)V=X(-Nbh}{m9xljb~!yL|W!n zsktaEd2L$K69V~;ayc)R9A+Z~p#=Pyr)tr#$!TgGas4$CT*=jlv|wK0~CB^S81>-R-ctOaGjaou8O~i)1}DWKZ(e4dc#0H-3`b{dXDa zH$K@BbAaYMl*@5`_LoTmYA1FZhLoH*C*oVjqX_7ei7IB7K^Q6Ch& z%dlrCgd#0MKe9(_ua-x^i!r5HZJrXM!sBSS4s^d?JQaNuDkX?gGck7DsNf*3rjWX| ztKf>aKH$lQT7NL&bFz1B_)75rIYu_8)vOl(W$)nXsL@vguOm3K!lv`OD=~UlnM_YX zNs)^B*giQ^iaMa8`8-MH)+eiDKX-nQzR9_H*KlBDlv)B>q)I^~=!pSnA(1S7T4@{G zE-gz?7JOM%>SvNF$*nTX{(CN%6Yaf&7aBu!T+)S~^TKf{*G!2>bwAp06_-p%|JxPr z^YcJC1Cfpp%)1Z&oQqGZioq$3=prk-~ck~-1 zzEGT+&ibh#`U(8(Dqs^?;zd%YV6X+;BI^(3LD?n!O%;e0$q1L> z4H)2_F6j1S$0e{a-beB7EI)b&c4#IGCgQJ`%9TDL(68kfas)nbv7t4(4=9fhFyE2E ze%2wvEY|#=>d&X5-6qKr@d8$3L5J^-4iVX;<)67io(@lKA6+8|MBsO#1Cw4_<@o^fNlSx$0DWa8^bIyRBaW} z(h|dnQZvg8Lf%?ZlwE!_n>2`d-dGL(#Waos``Xz3Gr1Z%e1{YhH1YS6BHfY;K9^3} zI5;KE_nf^$qm~vS?R#>Lxn&+fFJ+!S1ANvkKBL$bZEneOAflwO6bCm!hx<`Vj7KRs zm)?df6_s4QL7@KBq_Bfvx+;|%s>lS$xp@haiiFE-rOsUH(Z-+o?(j(-{{H773r2S7 zI6>|8{gjdi4W2x*-uXsuMpD1A=?#b|;xFfBv4wxCh^`NsO^3Gj7>26X`+-#)p;U!V znIPXe!cL+`ZLuBx&X?g2rrkoQ6;r-ecbG8<(@PY<=0q}!!~t(w-!9v z_{FuU=Bpw4(#4}qryp&)QDl3p<0TeMyFHt(Kj{tmhE>y@5E!5y(1$`r354;Ua6rkF zWl&KqV!i=;il)0apXfJA`jhmHejb!OE)xqZ!@Y!je?B?sIe|PIQ2U|jU=Urs>F8Il zXle#LSGa^Fz{qaDecz7+&XTcJ2+u>7nCB}OPcgA!%khg#~4C0w0 z9{LlisWIziirNzd&_vho_LBB&Jd0{@+=L@7x&bM;Nu9bi5B5rqu0tZO&SeH5nqjmy zN2zhXMdc@Nivl)|)*rB?{*Lmy!oTgsTkbB<8hm1pInb!?v@;RL-H#{$LohGSuzOHJ zIVrLk2yoZ|my%dQ-hb$BKod;==7?FJ(94)-+@+&|=-KM~r?bS%-t}(&hTQ;(>qwf?*<*<1Bu(AzP$#LWShr8+5pgQ-Y9f9<-D6tEK18L%@keS6Z-SQavtAkL_jL7 z5g$%_{}bb8d%WrZDssMuz(PD+4yb$^jmFeu8sj2bvg!EyE&xENfCEZ((_vIxt@V6kTIB!DZ-rXBT(&c4e^dOK$ulgt|J;&V%v zyw6AhdZ`uz!^in(nplGEVP*OeRavckbN`L{2c9mgC-pI;D#zB{%-bRdo)yg~_MW@# zZ6imDucEQG<~mWVo=&+n9ZZ?L-9-0BIkbnz^DwjR%pRQp(GZFGF3rGi<}{eo?3>p= z8MmD@En40Tp|VMD{A2(R8?RE2s)|%vJ5E72QmASKfh|S~m<`FBT*-PNt$nLi^T45P z7sETnFokf$T}#e%gpA!`y>)nd{RGQFeDiHLd-;J44o#qSfw{q(Q67X_BB?N}TFdNS zGR%KVg_lDH!Os!Ic)r4YdK`A#Jf2wHZq@zhv4{U{e#|SlyQNnSu?qZJ*~tV7JQFTNPYjstD9+7 z-vk~0rL!|%aLZHD>F=nG&HLbHr(rRc=n!GTl9anDQZ^4-XiGba*sNz*49!24K&bd; zKYTPx90rJMD8&Cq-j%-N^Tpbkt=Cce9(eOiud19ZIw!k-xhvoQW_TN!GgX{G#OQMG zs1Px)W9NNRVZ`*ew(Nvm*D=2A{xt>nCOmfz2^*vQRhVn-QP;INm;yP#XZ3l<8_|GG zvEvbe;(3iw1KobPVMX3zrr@m_2^06qnV-LKsA9i??}GlWVZXLgoqiT*j|jX!uL$dL z{!|{XNsJIG9X9$k<9p77*DQqUyB(Y(c>w#P!nacazrw0SF~!n=nV@9S;UTA$L|JZ&i@3H$RZ8Q&>z{oD7t<>1C#Vy#4sE?2*X48 z*Jj|&@ubAjro{$mGll9jk(?>?hxn#PvO)VglIpIQR`?$;LWzdF&GbEqmhf?d-lO$v z8FeD0Xe<|vlr)l~H1vqc0?5OWoz__9+abPUeIb(37#?3Sc?}|T`oq}`5BTy#xrIJG zpoOJL8fQ@Q=?NjDwq0M&%IA(XcC;Y##!VjPQ`tv8auR=)AaJ$~uk)y%m79ZhI4X4b#X z^5oRY^iSb5xdK-zFMaXC;gJB!Gn9$)(yALpYU8U*x`4|o;ii4xyb26^k97DzyZg67 zSH@vzXXGjJpL}M9XRWAd)97*-x5Ak8OD9;B!baaoRf(Z+;A9To0?SqS5B}MDf1?``kF@ZN*d~aaIwH&jP zTnouJw8uDx+AWqU8yZQF;?{H8C!S?MVEikg4=hi73lHET%{5pSxpLMHO^MMJkX5)6V;3f`)gVwM|pC2Nrz;f0RD6yD>Xca(K9RQ*~<5{JA&r;$b(uwA+p%hAAFM_NGHg6 zI`j5RHkcX1H$fW-w5>lNF`pc-6fvH+4nl_!(=uRUg=U8H^MZdDvpqE3jcj%0f!9j~ z$%#M4M(;WCfiAn#8o*^wE3395qE|w+K2Gvw`Y&stdCDQ|-)yfqU>zR9KgQa4nGTIQ zeJV!ek~r-@VX}G}aZgmD8N9XHmWIu&MR~48uU5f){m~069Xj|~Qg{4j;P!&}C(m<% z7${rNW;i>(hB_cgX)MW7|KglLpi6+&>tATB(eT}LCd^U1HQmI{!xB_44ITcOt+a7s`Afa|^$jrrs^dp%=q z%^2Pwufr_LAAVK=Ss8(J#B0xT3!8~SboI}Hq$_$@zDT3Vh3>Z;9~F4hcIpRca3Ns2 z=(ngXfWzRpt)P+2M~b7&`y>B9Ym?QuuX z-XAZnFn~)r=iT8xaBiSWvPHaX#Bhi=kR2OzLu<~44dywwm z?Cc#y1HZd7xG!g)Rgn7yW-Q{Q^7z*5kebyX ze!_Z^{P}Cb=RzajGn$Lr{0GiM2%>7Qa&CoDOEYyLt1}ZtY|Er_a996eyRq9_MGM@*NVlv8lSj-Z)@?_j+Ux!>^$v{mN)xhU%!)PO6IZ@uQDZ6!|nDP%DOaRd-7?T z?G@y!AUEX#Q7QmPQlB3R7_c{*-9lKhPbS@2>8o!!)vf!h>|rGjR_bM9mMk~3Vr|>< zOHRs(n4j@9iK!8!YTeIOsdbR%2GMayFIrDhI5?1)!&|TtF6Opxe$**l?s_v8qy>lF zX$vp_psgzQe0%1=(GQfqse-)R)5i(V-&ty$w_u`Up! zfXTINQauKCEQvFrH}{+MubYfD0v6Te7(Y+|vJsYPX0})jU&dDE9f~ZTjlbXr9k#BE zh#jw}8a6x42&+}ew;z71mgH!)3h8x)y8D|OTx{R$YKcN?o%+ZKo$LdX;uLiNn?++> zw)B#&m!xn@G;TR=Bz5FR_-9WoxMbrbG&Q3DcyP!-`_1mB<%_dk#p*BfTbt)TDw-GN zflIGOSKZ*$0(6Zi7?GP)?FXtdBRq(5!r!|@TWbC6^hT$W;-if4e22f{)E6$qL_9PQ z^jgQtyq>G$M>Ur}HR5eGO-izhFsW^53Mg;9vDf*Dkj(Y_6#@MEo`v##G1=);9Pz_l zE|~sDYSjimNGV1&OIESm#>S=U-k?Mayew-WG75#9EF*DduhynalqgOyMn=Wl7w)*Q zk9X#^auc%xsw4{{_c!2S@WyEo#Zl@(6bronI5yHZcKI$rDSnh*ocr4NAbNAGu6UI2 zZjg2n@uyP48^Q)b#qX*Nb)esR`FgD8^otPe;tZ|;vUJ`JXVa_KL1?Q5$Ck*G_kbX=DPyS9#(*7zIf z-{M{P*$RAE8F18(s-ZY)rRC(*KaHD&c_87PD|km)z_Sa!^re_iaHi;d!~*?NQj=2k zK?K2f&dfKK*=}zFXX)v{B{s+}F)Ol1x86OWy_38trC*%d?jEEuNVwg_wqUxrg_FZ5 zyOi*x3fPADa0+LRgwg5CeR}D4g*~2-_C0UgOxJokgLILV!Yv^8MnHUT;lZ)+u7*%( zIBSiGqA>h|IwG8p5qw^6xr#KAK#47)Or0E>#`!sF=aZV8Q6f^H_Z4CB{0~~(WWnPY zk39~L-!Zf_Zwt4^2H zSG!%jgxln&I{k;6E@tPfH)7&>C~hz14e+@PD4TMS?+C`mVVO5XQRiC4)6U4OM>@s& zdVcF$%|B0N#W7ux1b^OMtx;d@XVr-BA~#cL*QqT7=POLp^WouGyyd1)C3z1a`YfAC z$nZzQ+wBRtUxP2FF@)IQv~BTniD6j(wUc50b60>)1N=7jU>J>!B?mc zbI{^nGDK`uCQpp-B_&}Tn7I){rMy7NG*r+g7CVl+@<8!I-?f(=V+8h}T%l5#DlT7% z16ZWW7Y1ZTI(-yji~f!n+i4k>t&Bw)#-kLM$Os|3YA`COsLsxUE{}+LTV!SByI!+* zd+#Os>|kl*=xW(l&`_ZO9;dA6Vj|JZ`=d4`tEI4VOewxTAS3z3jda45l9)y~fGjND zA5u_=32m%JUaa>)y+0n&X*?ZnH6GLj@@ZP}#`AZCwfdKaU*E9y&?i4zdg9q0Ik}+# z1amou5Z1CYBY*zoPJowcJ+Swh#yXDU+cbLbKnN#q+e!38FM_ z;&Qe7=g+-Y_WV~&!*=|+%7@X3I?>2as1=1W&@8`Bem}f!I{?)|V4}AO_k}8`)C;$x zXVX4Q!iSmiV>m5De0h37b0-B>#M^GxSwp@>ZM2jYkveLRSz|(r5NV)~GrPpJk@x!9 z>Nv;caBkW~T~Hdx^eR2);8Z|b)ws>cX7?PnX_9|?j5*vbmnYDZTxVTgo1g9 z=@rO`2!w^y)YI;&ONi1&VPrIfvh%YloR8L%^iKzi8XT8g&WM!rsJ@uU{g zxppp1YiW&Aqf0lXejB!0JV9B;Qk5EoLkf}%uzfu| z{z{&M2T3yK`h~0v6;R7yCyYV{HpgfdgvXGSD!bRSY6i=eYX%)f_mKl8EfWiE5fd6~ zNe*BV=miZI+DC5%`U>~es=i{;1IWW~Hj1N}dKt2$q>rcvaf?IA=DU?GJTajt+q z^wDH&cu|zb1RZ4zawr073Fyl&j7s9xRl z%vNfZ(%SVG2ctV$jjj*BceN$`cly=vsx}bN=gQTd3Ijn0gU!j(IY9pxeO4BE1OH;+ zQD45Dq?1~dDCafl#(PyH zX5UV(_^BkPLsV{5%{Jca3mHko{#J!YPv?T^Tg)9p&@!h%u93VL;VYx!dnuY!UO64W z`7lkRqv~(!1jm^cE0`t}o)P)98*pD~girCkz3AQ#yISU#q!{4c-sNMno8Wp6ymH1N zdVZB=d62aax;_VLA4gC3+y_4Z^M3!^XIEH1ZgOHTcsN@or$4q!j***96v2DzXlN$_ zy7SqD@SCke_kO$kly@yjw`w(fV^kf?KmZ^|&PVBpQ^oTSG|KYg%3V`;_@l_>8{e=9 zLyE1zzGec=F0Co)(K8tbG$pQFG1FmD;pl+MQ0&sRlPL$l)sf-0XhNIqd&EGmObhWJ z^pgH%*ul5q1DdJALQ^+YHr29<0$aqh{*uEhBd`0=JE7?z+*}R3CRJ&ukC?nA6CJZS zE;*~f({6aXFdA)k(?wx$XXAPasX;A01;7Jjt%<6Pz)8)UeRl-O_^r+;)JG%xpql=c z`{{Bbvo}xEyY=Vcur1RE;qor^$;eoBVIdtmKf+HY3rJ_N21taBfC|c`I##(d z)kES}Ux3N4g3DJawCv{nWpc-qdxyZ9yA8@s*9w&nnMY1jO6c&yDhAXiPYr|vpA5_l z)i71A;bkY^<)iE6BiqOt z^7p2^^c=&{K$$R*Ch~-FWVbw((U)P855YI6;8t(Sc`B-|^E`XD#lIhWOrT-^c9mVB z#v8~-l;|T-=^sU8b8_6;JbgF2!JF8QMUQ}jpEEn^n${kQ(?I!~T1xxSe0XeoL^g-N za=|jEHx?R=IMs(5+yAO-s&W6-d}cr))Xw!w)qE&P0UC!Rl&`W@U3)QJpa9Ld1+}Id zFJTf-1>Gi9h}Sv2&|?g9)16IAJ6NME)VKidFw}0xO}Ahr>(WRbR;N^M5L<45V{J#6 zV-%zy6+B|86LL+$tfkF7gvN`8@x}DPnY3#SrSu9wA0(Tcad9)<#O}HZ_$`f14T^iE z_{f05ct|tYTdwXi{Xtd|h4D}kKKhu#ewbQehH=Yfd4V~Kx^rdzxNd3|*@#?dNfAw@ zgPp=s{xc7)_ju2uhwAwws7jodWZAbtd1sycJE?bMTN9=ND5YjUKI3?8+MlSzG+%8O zMeH=~rYp3!4eepbwugxbO!9S^;ob>;pC(&qH!I)0>oJ+6B7uiCQ8ic@O!vHtaFnb4 z)ccO;+xN9)-3x8UIn64_;QK^>k9kMS0h-=-8Ft+`8wtOExMh(BE4~CEn6W6~g= zhLdFo+Go@!s~(PQ!h6hFStx08HBY33u!!+-lpaYVI|b;x^!t^tiE)0oKDsp%?l;rb zq&>7VR?b*ZBR z&ea@E)~(XwnbJ%dhToazfmzS47%eCn>vFpL#y(zaa`OBQ`8k#QS?ygaig);!&|RAZ zJ7}1$6=<pfP`T5!W?nW*;H2U4*UiC$)dyD3VhTK{+3@P;Erc$v zJcPuCvt&SOjRDB2H6e}2j;N~ho)XiGhCYLd_DzoQnMlH~RU88@)dq#AmSiS(vy_k6MipZ1@gM;9Vv2Za*jOzBTlaE_gz(=D4?^4?P7nJ)gI z5SlaollM$&6nVvgNod{}c!Nacye9{5YTFER%?acc&yU9^cv7`G7Om%2G$RUk3e=KOc|uqNS??n~3W#Ta zPn3u?&DQ(#KSU+;P9F|eSG>V`)!orZ#;G>=z|^(&jFD@!9usb29^jlK9Rh&e(~ZN^ zQS=30dhm^3eIzk`K??c?JF&$)>{TCtfVYedwbFA9)J3k-zZm}hzGXl9WDkH{jy_Ks zP(yd0iw4t5UK4y+?W=X#w^3$OjPY?vZS7hk0M01^2wbn}D|X<+@D%`sL-`p*JEPOM zvYcx`nSf(OQELh}EL55hbxLa6;>DmMU z?Gc#<80(w;x|!vGh|yyaRCeD}#;-}5? zCvu~-qSPxlJG0&Sr3)48n@+VhA1A$n>3Wewjf{oT7e1w!e6+y_@ z5WWC3468CV8M&$kl%_JHQdKfr-`n5MzJ4(|`KV<6929h0j6COYMRa>!wDE;bl;A?* z2X2ecHX)V7Fwwa%T4=bAQfO?&a^;il3#12?B-jAyIvzfWzoA- z(y8;ViSX`8huK-dFs$PXBke`p2;JSSw3sJ2xW)Aa(yt0MV+C9{+t+;T6T~B))G{t? zQ;)wus=n~3C9n0p`uLvJSx0ko5;-=bMF0tA`6J+soFdh!gJO334)d7x*=Kw59=ldJIGEj zt_aEvWyQMHw&~S2HcF5(?c|ByS#Aa4QTyOvYfWipJe~mUU-dw0{yXcbJ>4~a%5#o;e?lLyZ_}>^8N*Sw$-cC*Teu=`0PK4>Ji-^qS zK(1>KeLs>~Fs}s94$8=>@MfAc5!!oHp543^g(ko!kf@iNAqhxO*iyXX3-rcn4>Xcb zR%SqMlOc#a_i)^44mlb(nK*MNb+VW*4d;5;JBv%5P$&Xb35#8>_WGvxOYHUfyCCF9 z1N|wXI<9FR6+ifkZU211K)FY6Uk)@V;=}REFYq5J30ELh9ngKTXBn8@T zNy1tL&~y?B9(-VwfNQsR`Qz5gIOL;8;8XikpVPQQ=1YO2NtlE1FRVRGw!eRwUx6ees;o%rhQ*Xr-MJ03Kxf~BeP zbEma%Q55oJ5U3NyRP0%hqI zg!E=Cq(hsxD?)PD{`kA|$q$|eAuP#S2;0I;ISQxeu1IlM`^E+2u5@0=>-OpX&2ifj zJ>F@3^kCx$Dx!_)KvD)uJ1p3JHN zUG!zXBlMVU9L|<1i@7_kUOmxtTJ3yxd4OhcVyY!tTFR&bNX zb+AlyJv5*jo~V8tUJZ3y z;#DVUo2>@B98gl)1*{+kG+q4)AL@Pil>Dn?7HZ^+@w1+*gA4zg@T!B` zjqgWSAs$V_a<^?gy}qtr3kGyXyipyE0__5w^Gg z^yi>_XAm@Q`IbGMbKRfJ#U@=lI_Ob#qE4LYWuIGplHwVQCG^BWlD&K_$;42k(+2$3 z{eFa-Wa@>9WsRqFX7qvIDdF=J!$_ebVfkbNA&uEswF@c*cXRfx^?dW?KZs=Y&x=G| z8*#$PCNLK68}KS6TMTHnW||6Kt;GB>eQZ(!UddlNPWmDuIGlCva3Tt4X{fUjO+V{? zNJu~Jc<0lW7Kdp^L4D~q$gMRl2$9wKF!(7obxlNvxUzK;J6(`r-T__k53yW_z#mc7 znZ2(S(ee)Sflo;LS);bca0}2Zlg_3*D>3=wa4qsX%+EW-{^T*Eid(HV3-obRE4VdD zwY(`c5YWjGhuN->2A<1mA{WH6EJcMQNequ>6TNgw3yN7!wvhOcmbd=(>C`(@exQV- z=VHV-(%}^gkW8IT2U-fEanLCB7iQf~|NP;Os($rJwaCEzXoYm1Bhy6nc6VM}HN^}; zBH(@>Yh#vU`D~Sq6U^93vej<8d4E2GE0iwrF_s3$yr6q$CSSnKXx3$sXQu@V^UHWeNw>D6=tn|h912HGEAszfTI{6YgE@Ud81Z)t$MkcY6d5rWtUiVY6O zGDtV{l$XbK+=zQGd`7tz;4Kql9L@-|9lLq-OOIC^3VlDceK!@N#O1Daz6tgXIPTnn zMEDuYZ@$_Ie-6jXGN3iwdm>duSc@6NwR^F9+~QQ8BVs+Wd8okSwthxmQGE@PG!D4! ztP>ipxZk?)7z-Edq#;1*bUu|0{vJhgR+uw)Xl>T3lCY0a$4+3%HZ#M7CNVeRG==e8 z=I!37>QcQZ&7E6T{+U>UKTKfHK4upV5X6*!YNl1lDOx%zat1VR1AUSprlpW1SDwT+ zqv#2{=sR7up_jgkx4rp3l1`*As3b_QBAx&SqUl`ADG z*G!VvNVh~4Phh{4w>F4*sQsnyvJ)aDn;o_91$7*7CrE~Q?gtAl$h4>Oy-=g?1~s=R z{V*742i|^x5Kw7jCXd(q17(7CbsZLHGm3y97C{zvYs*>ikeWQXpRk?IOlc-)-CvCH zW~$;sZ&7tYjZYb9QK|o>!dsfoC(^iZ9(6ty?w5@UQX%wOzT?Tly3|(YLd~ZBcJHNo zXK<4sccEo6N;F+jXS7&0ou?rGL5171FGfmM1L%i$H$zw-VDI^jSyKaa>Q8yJVU4Za zr6uF(VwzH4+tlkOn>4I8Z%A+?tW%-&%48;NQUxy@B*iFDB9vzU4cdT7T>ahm-!_)} zjIl;XPV<$E*KG_}RdHqy&XkD5OA~Q2`ww=%LF3oO_6B~5th?V0k&;+Tqgcsnk}v>0 zx$ahcEWdxZr5~=_eI7%zAMiXInK(DkF&9}3Z*Gjoz5E?ISX>fo^>T_jf|1g0@+=y_ z%$-T7ccpwf!sr=L#fNRJmg4&?#_^$5P4hDs8Hdoz;gfDZc!s}!hCsGF;Y$0YgfN+N zx0njj+sJ-!`=E)A-4TLGLQhX*I4dxn71ODmpPh+Ks+)m1HUF%BO39?}?c{iA{^cF! zyCoEX^Q%sfP;i;}(L`pbvB{r|Lp-VkyNV{><|?~6G88?c#6$udO~bM9O(No77j;Hm zo&vk=J>deoLRwKDLX<0o#iz;(D0;2qWvyJqfTqD7XOcgbPtBxlpYW+jX`AzD#OJsf zytAID!t*Z#`I@^1zq`~=zmG7v_Bx;~6M>n@GJmr_GB>P6L(%&qPfR1H{jok};K!@S zqoXL1Zy>{01uA?Lr}J4OFr&4IoNrEb{x&v_3P!G!zuC5(8?TWmW)0Q9z|BS&CD{=Y zyYjx!u@hKnBAb+P2J3wNs?7#>V?ONswV-1$2XBA4F5lfr?xz&&vWeXlSU$rbJB8eW zM2L?iTEc<8?!)u&T&LQmp&jrSSQj}y4jyoY8sschk)s<=cDnsXYSz6z-ovY?6IApJ zXtas~4U~44+9JAhs8We71o6+ZA9heSES=f@Qmlr&goxzF_DcEWR9%F)c^7ijT|bDk ziFAGFb_+?zx8cBD{8>~(dkc*`7amq&A&OiWarW0 zm^8Vt#iCNv_?|4r!;uanS%@B)lE}94(6DaB*$DniFIS{d5+J&mq8xt`zioS_#8|isqY0%B8Ft5rFV&L>w?N z>#eklD@tM1#y%e+xS#&+QLL{Xsf~q6kF2gS8(k&JcDT@$t5}`}_I9JNQtb=xci5be zc=+8#q2`*lm>@y(dJ<`{$LD~stZeb7Dan=jt>3$zZ}7b>FIvuopsTSLlBrBiyB53x zyWiW+D=4Hiz?RA)(56Nr)}z)47B;EH1e2$a*WJ;B5S6pUM7oCxCe?%HPK69z1GE`snoCX<7FYxk zThL^m#-K01Q6yxu+b-WT#nGRc|D}}B-goq-*6p55uYV&`O*-husSkCmd=<|AJ+zMQ z1KM8p#JRs)rnQm>~h(GkdAvj>WW<{G7ltKA)#wk-=Gemi)Hkz10g@WZEIbQp6YSP zvqZz^%zPCmF$AoGXLFx*?Dpg1$N+H=H?^1gKIFN6vDu}TwIFcB2ORh#XXP*FW;6`M z3{U4C9|r2w7;!UdHr^g_e*IEMjax&y#;?M{`Ab&kC1O758iOc5J#aWZJn)VgdCBe4 zD~ll-u|-N2guDb`;pP@8-L@-QH8*4pYae>NHplN&v~fNA2C1Vs(Cj+qqJ)2={OoGA zz%FB#3G#MA#2k}9IJb4GtsLswB+!t0+!u&8_O94-g#MH7L^UQ+vlMnl2ZAAB(l!0D z&xCDv{zd{u!&_?DM9<>$q#r+#r-lW|PjfWSkpOZA`I+9CO7Eq<;Hg)M?(Z2Ws+4#KY zmNT@50%&CI`yuS@w(H{_JWnAv6fqJ(ub6OS&P+jw;74`T85Jq5h73ad<}Qza%BdEc zx!E8#KGTnS>95a)G3xEerc7NgvUefO;fRR^oYl>s71-jZc%MxF@i@A(1 zvU`=eWf#W9J*+mqDl8Ci(T`>09m;GRM(L=4Le1@@a_E7p(m)GH1u+fGYy5&iUWs<| zIpb>%B$`tZxzC?IQ+N*Tw%VM`4bk zH?I>NtgxNNn^fhX`Y-;p2x8MK`(x3Wj^FjtQr)YA5@h|H84%&w%p&cX=^iT<{-Z&L zqC<|h{O$;7LYnw|O5Y24x-W4(6-8Ash>%l=>OoQFHxYa7RtAg4x* zR;gOYD0Lk4SXHf6f#=GjBA z09x`nJUcUcT$awa1y?opRkfqb(v{OBoU0Td_f|GkKCpsD!%&!Xp$5(lPa@44@WE1Z zJv#wbyZ?0IZ^hMXt?KgaX4N^CV(Ef-*3PJ7^a59DN}tVQRI^R{GeE#Q; z>L$CfqG%B$^lKt_v57$7$N_=ixX0l>${qSOYJL-)@3Ug~Vk1T< z&-|T;FXo{SSMxb9oH8EznP1Su)`)O^c}fBwUFD@JQD{s2=!w@Dr*_3W4>+#Nu-RC{ z!p9|xamNB1<^HI4NvE!fNn|uADD(*<#ukHixUw2?De~&aKAxij(se|CyL~euW^Z~W zw3571LuNdRvE9&2XFg8w{avRc*{J0WRLmjLU@Llf`=#NeKMqpTy(RC}Yu%8Po3*)z|=cl&4l(%br3KT18sII`KF>Zoe%Y&`#E?S8;9yYUy8RUW^wFTU!2 zfqYg&l@R(mTSqK*|GPb^XO!e3Uoa~JIv)6v z^+g;K`J-Y25F#P0DXdHn1EnpY*nN}vQ%GDqQPK|sF>VVJP)vgXQ~>{o0Hx-B@FWMb zyFVzJ2TRrA{0Qe;5FHb~t23i~e!%=zzQmEn9hA%@4z5^JCb)Te@xPv#J}f(E->P+{s_1bN?2yEg^UAzEA-=8k6xUcf6>Gb~=36M^|fn3?g> z>M@TwUJLKoBD71dDJ5U+W>pnF{*6=5dr@%2A||Oa&`AMG(wdz6YqWvkW8v%&thqC8 zF*U=Sz7vZ`0Qja`qy6k;aW0sV-h6qM^=BWY(^nJQGvOx_kw8{9z5ny=^wnZl^*?3K z6ZMQ{(z6BlN|Tn!D9jNgg!Kczz($`3s*Cttmx56m^ej$INtr*L_KJotr5X%*`xZ|u zb+_2Q?i5%5v!^a3N3QVhN@v#GG7b@Ex`w|DG&g=ZaanDxq(~cWxhe;dEz4HbylxyK zCQ8o3-SvrW#M3r0E4oWSLLW$A2>sKy+dH9@+Vah`7ob4LH@jTi8e$;8mSM}3oW6*0 z)cylSEhY=k|F5Ik*Yc{;^m!}d{D8Y=(6ugxooL+XiO%RE-9^Xo@YzcgN~yrud;fP7 zk9H%WuC7SZAW<$?hK0sVmjD;dG9(KE@SEVjz2znCnA@4fY5bx6wJ>A9E*{0x765E2 zed3;_3&m?h+IcXMlo~bA)$0_bwdly6;}2zi&TA&D7Ab>daai|CUBN55lEpWAp*Wh< z?w5^bhG925O{)Kt?6)Bck=u^>S!*rGI+;kl8OU*%0>IZ=Q%vA8yJINl#N-7ldn6t*@hfeJQ^mWo)BtO8Po!p2L z#pAq;G&_?&WF-#ha-qx}?Fe2#XxYA6<^3>gLNhdfBrtwgYIc)$j=Kyk2y}ZV&wIE% z*ni2{GsxOz|t~(As-!GQM!I%K)6l%SuCYq zwT`Rlx`LZ7>a!USo((f^zkS{LYkvs5pmS1XF(6NBcW{57`EZby{1(Z0lMCA&$s(5K zl6?)}DZtSuk!KwyTf)3Tx~R+7J+Il!>3}=j&IO2)evDPKkeIcLs3?MLUhp|pXY2e5-ZKq z1lO+{TVpYMD-+q5^kL+s)Dhuh6^u6F7MpHUM4{|mF!sbp9{dw9)WA}XR(XhB+Um`# zv9-ky2jN}m(#`DSc1^)22;Nx^91NNhSuUd0bLYFQM&OE`1zi7aIN6iF%qv&4HTynD z$y4BwT?P^@Pw>3nU4ev{IGm7PnYXR^)cLGhoeKa_D+DVz~2>a3@^!Z)|cTDhtD zr+`DP5)Y}DWi-=O-%pSwJ|b-3xVF|Nt_BaM)AyQ%39~Ib8;7Q4x8S1Fzd4^|NW^8P zW@KK80Q`WBYsMyMdt@!0M^kfHxbqV?@oaneho0GLXVjyZYc^;p?t3*t3E|0G+}kw? zzNlD;5Pf-B(1iHMsT>LSwF5gfby}R@u1A|&A`*WD5fVW+^@}GZ`l?%KUa|oI^ioWE zX)xCc(yaxLmi2sP2@6~+(2?uD^vA_Bq;vo;T010*AezGNC&rIl1k#kCgU#{>|E#2p zBb}#b$_9ovMo&1?mk<<^JTeo50ML%v&9v$RJLK@}-;UaZf79rQph42`$pcHEO}=+f z!`pjhwQxHU5cz&q9X8(tSs&atA;?*XU`A-!XZgNIKx@G|>3lOQz7OA=qP_Jcj;)19 zQYz>4tYSP!Du$E6!h$Ia>-AAfKWuz{=21b7N z#4@F=X&W4!--rE0scuLaeA3}>|B@HnRtmHRyE=e_E`0eYKW2lmFl@t(2{n#mzl%%P zgGob0yw(>c+DwjtU-~ikcqmvoHxD_%>-9QGHVuk7u=tI+yr%~+!H^-|ey$#^y9RlO8K;k{FVW9?wQX6~P%AhveV+D}Lq4k_S@U9t^6R?<_GF25u zS#SguLU%KgR}LMID6?JrnNTKaI@)CNHC2j vqj-1<)%Z`G_`ieFbpJm{?tgBC9!ECu#$<4exuVw5u?1gA4-%0%0jB%Dx7Hz*oTM;1Mct zM>Vd51NevTtf=D#0%77me88ZzbP^BuT}FS5?Ez*Un7HoK8ZV zM$}sv0N`NZZbIYjVDIQA>@7z37hGZB`@?MxI-0+RxZ8=*Nj*$R^H${*jf|741&shZ zH=7wJCnt@75IdJCKc9(!&~qAYPHt`vPJRw99yTrkVP1Y=E?%0y|LB0}T+J zJsEH%MrZBr?kvo~;pOGU?#09Is;CGnIl8%jFY{StBR93z;m7lZ3dtNR4CfG0iyHydwsmIaQXY2y$#J@N+)b$_Mq!xbY>4i zwlJsr`?k&hfqVZwJpTi%m$d}|^uG}Pe++YTvUK+{akY@L0yzEus$3lZH{{(+JpXId z|9gV}{}A=R*=lBO;%H?7SWXVQ2VyuLOw4}>h2#GzufLxCZ|3Nq;ed^M`1-GP1up)z z&lZjVXjj1c2E@x4fk3ZLm1Lzfywi8*yxjH2zw#Xf?4RV!TPP)2^d{BM`n7cOcR*Fp z#lRypAKw3I{6zdj5fV&KPus1aM0@f?aid>j)ZT2?FR{qHdn@2-_V|{TSSRh{j{?fw z1znvMx0%%P^}SztEYgo~@$f#Tk2SG_@bK_XDNx0L%XX3zSy|a9W<&URcuFx+YO=EQ zT>tane^~NA%J4tS;Qt@X5MV?MWx|zHzp8u0ZF?VZeyYQKMN2DdL>!#o#kmpr$D|t6 z0a}BkV9@A+pSTz1RHSI+_UEJ#pbYU|@L{DPIAqPDVLBizh#&(L3-Wdsd=?^s9P#bz zLGtrc1^*nJ$l=F*NY0HI1lyV&obC}*L6-^Wo9oIH37mAjmdfP?g&0_c)0f9%ykKy4 zb$8?l3z{cIDPa*mr4x&g*2=u!m1l*3K{m*HKzCiuLtx`)H*SAM2k_UUj*(F8%m9D&y-D_5OBduFK-Be-l4qjD6L-(A0k2oh)*C9PQSwLQKR=i`IbaAQiZEUq7WH zbh}^O2vUc@$UfGv$^!2)pT+e{_i|N%(E(d%t@665%wBbZ) zB(2>ZnbK))@Z2#xh%vT88Ok&(W!{3ohUP6}1jGwTCg z?mlaCq$10y*I{3B&J13U6mrBbMb(SXZ&{Nc8zB&@o7npy^gO6yr!PZjHpaa(j^@4C z*>(L}in%~T7QfHsH3I|*#hx#hx54?9{J=(dvVFR~E1j9YR<#^ZyfsqVsm zy0Ce?D36fx4a8FpWmY~3+<6}=vL1kIO&Qc-fU|J=1oL2am$mD8rhp3x2yXlOqxHV2 zu%2cnY`v8$vQy&T+2pH=`uzU(Ph2eiqgkbhD=y4~#BJhrqky~O;XI=+ydxv0Qb;#S zO}Q|R?h2!zK$CKmi#JBeq1K!x49)Y-<(W~3<2@o-0fr)Vag+|L^94lgz2e4hFXP%i@!vO z@?ywLuQ`sirP>OyMZy1@a`n{0={oMX9 zbc_LNaq-Jc*ET+dzKM2KYvzC6JL#hknZ_*bF?Aztjk}^OX#$K?^n46pU@`{wy1nSp zIovhsQ{{7?cf+m5Va0I1SJO@^gue+eAflV%+KBXpqFmgrzLZ~|F8MJEBgEp%s2Vix z_QLzN-l9@rzrNrc*kX?FEX6?_Y5mG%2*2Yk#fL&rbW`Bo#-}q_UVBz5tGpyBFW(u4 z?2r+km%g5T4A1u7?kXJ~77Ks`$uT(S_H31BWCjOMSxwYWTF~N^d%YdwZ&+F}fk=~Q zV2dCRXLIsPSzc?vpqjE8f*Fca_~~yOZ$}%Z#Sy44+x)eK{ZUb-BAM7@IAV}qU+2rpz6La-BhC=K7UZDbl5)lo z$7U_y7+A*J=asvXcOYSunzDryI7Mthn?Mva@6;QwHeMOMv7wZR zbYonX1h1VcnMBZcWiv+M5!N0$Nr>L3OU|?xJhLiL2_I~=A2I7m`9pxu*%1FimYxk& zOx>QI6*}%XlJ(g*(q${vV|DZKu+Q(g_|oSCTF{y6ACj_1rT}UH*E?%l$9m#mI4S}! zs!ILU(nR=GhFN=dn%L1k+IyqXMa8aqEpS@dbP?}rQO>M|Y)mH8wpg~-;+=g3L7qR7 zl>G?6kyC?#x-A<^kBP$kUjfuZMIZW{d zAV#JFc;)g86s_w`b&n?Qu+D-i&lnhPvgf6KN`WDb(B%x z#%$b}JW+3dcoZitq)MGvm@)I^RJeN3t4L6ns23$9T zgen%&qz4xM^PN#g8FZ52#gL=;Fo0*woLdmd!MIO>L1>^@7y9XeNzVaYP{)-Fd|~Pj z&(8bZo_cx!&|?|~kc|R1f5xCICROu#@_o)DG2^{$SKRJ*4-ZfjV``@Kg9Uybi9hLg z>_@tLK^H{|NR0s5_{_%oQKibL?=Q}Te5W(-ThJGo2-EiuOsp8jb)KzRl(CUj9jmVM zkaRFg4pAg};0qH}4~BRGalrS_iC5GNh(>e+dh!=Mg6ywV-T2hjdbw>2GaVn_&FtcX z-nl!|=Quwwod$~U2xDA)Rd&UI8c-wL7sH6Wc#4Sv+WvdW46`f;A$O*susTa4r(}!8 zO-}BXrL&y6dF?rc@3aX|0G$<9P#dd7ay;N(Z_`pAg@h}xZa+}@fG`TNv%b{9_{2>y z6uUR`X%(pKE38+F9v`67-5*3FyZF@|i_O0nr>jnkFOAx}@t=pEkYA1NJkk#cIzbkR zM|%o+etoAT31BA)#fOOPMVdxE zaEs78V5OxH9)AMTr(y_T;@>NftQftQdf*xV1J8tlImBmlweak(n?~Sv^FveOllm;k z2kU<+J|NTKV@*EqUeQcA&MBK}$w~v~Sn$kBSF?69l?Pbiy6(B`&j&lyNv?;Zg&cca z=5#)egk=LBV+_u zDIOR@?qM-LA9C6soUD#O9vW&L_yZDF@zc{Ce+(YS$}V-nkfj#@couUJdePOT_u`%7 zf*buoJhWvm6z6==`SbR~1Ion@CTSUxd27CYD6fJ!s{upL&Pn1~t6m z+dPW^EDa$bHBW!PxJvQ6sWWKw6c~j4xgN~|=VridvC3y{PVBQU5h%qh_Y~xXU3~O;iYwu~ zGDv-2EIR2d0%9sU%Nb|3@(akuj@T;u|p7E-kxGWN9dNQ2dp3S&LOJ%%&NH&;w zE?QIC%ZMm>rdm6DBrvHxR=rs6b!PJ=u2OmLVP|ImG>hsFB(U1juj5SR`bGV$(`aD$ zn92Ux#bI8M6TA*7b{#@Ok%1p^h5mrF8-)07b(L*(9E;6hug0bssUJIt<8$G;bsBs> z%OIYTaSZM36F+Qk`v~wF0N9!9g~jKFzUyYxbs43lA`1=@8`3`gAcGNp$uAAKaHG2l zJU_c}zI`Xrt2S{a!r^RS!`PCtG%hC;bR1*mFc7q=-0O(vZ`t0xD!6qHMVonnx(E@Z z^qs;4i(ZT{>=bnl2L;szIZ}U)vL1RlBB9@UPWb z^fvrOFV>=o{kHX)^OXVef$$Fdog<1UI!>Q&Se7gB>*u=Zfj7%p+a@YM1?JCplFa4Q zc|pFQTUSl$e;rlZp)bK-K~x&S4YWFE+SJ!eBO;;J_lC$Ua% z0i>We&|eVmg<@?Y3D+({nXt*5!(dOxgN*>{Qk|kKBT+INB^O!)WBp)KbbbS6OiDu9 zX=y|74Ov-Zd*soy*3DJis>fHeGi`Q7{h_7D$!n(HHb${U;V3A>!hj}4yl*~o&kJF3wDZ2)u1GyMX z(O=n_fu-a=?pNNcjQ?RHs9_jhg4UxxI{B`3*8O=VHw2U|*%D3d5Ips*EwrLjN>e6i z;i;?gZ^eOW(BwsX8=@j^; z#IiiT`Yo=Yf~2b-s4;Q%YV=RYgo*GSQ8>91Yz8Y=YH@(vie|v}Jw!6y-$`KZ9DH{% z=VmN`^u{T$U|I3IRWP|AuDXdY_+PYyHh3Ju)b7sOo*gHyJU5}tV}YQCVC20NF_61o z4%buH)d^4DuYUx=NViS5JKwuqTVGg+71X06Qel6uN_?AGr-~ATih>#f2`Q{B!43L} zpRs`BeM{ERRBef>f_%RtW=JhQ-9UY+5?gC?>8(ta>N4Rer%v-8PMx(77xPC}zvej( zTD(Bc1v$*Y3zP^t=_U04M|N8V`x)BN#^w2TL&|ClX;gkjdfMy0Tv+s=RbKQc_d8H{WEsP* zn(bowa&Wc&jET7@+|a3Wqv84EL8TBW>UvdgHf({jWKFaC@)soTfy&R7+dAA7XbReJ zKD?qRux>}<*lWMn7sK+|ly7LRO`9O1p}H-`_%}+vdvaoFyb+a3s=%JY$51?f zaLA9cf>~^0uwA1T6l|h{UVAhbKJSd8Kshouy+7i0*9|<4N?j?d)vd$ z5AUC)6hL_*pKYz4;mJ{0;SQ)+{P0V!cb7h)~WyPLfyU zJs+uBF@^9vRKajAI+~au+GnK?1JuxbNTPMOyrP{B|K4brP4lo6PUC%eBd_qDaxUc* zq}IcXhzx(@^mED+9)Zf-b;YZxi{rK^f=}drBS{8oLHgt+c)#X!3{N}{+WRD`%>3f5 zF}QB8PED4pC7aQ<3#44_QAzo}D34 zM~fLLMrgIgHucrsjyWj)++i~U6%AEvSP3=TyW=FLAMrec;3&!!^x=zR`-jR&6n81h zjaxA4yVi92PZTiW?J5@(n_3&4c{==8lL{SlWW0b|WNnw&Y_8jxWS6WeZ7Xdpvkao) z(TQ(}nG9`c+wBNzWCVf8u7(pT)k(BJL?K!54P~1ys3SHJP7Tg63Ff2s6*$rIyiA-M zHbXoRxr#1&r~11FX2m!hu|F%j!jGw+1nysz?uclG&&E_wBNN`GWY)vJwd*Z9{{rXd z{MhXCW1;$pU8K|x#+_#omn9%V6~nT%G)~dcyz|@ccoVB+(r4hr%|asa{H$#_)7Oe| zEe6NI;VM{Klkl+;kJQDSgBV23(^;Efaeju#QV$w_Rpu=_Vm35toKy^fiF#iH1;hjy zr$j^nd`x{wB@Dmtw4U`tG9DU7%{NKi(*&}ROw_02kcI$+cAhG=!1LVe#+g+8Ngi4p z5YCMsQj+Q*8fb$+XnI|(`$dJ>`4T?pJ)Q9Lkn32BwpguPU!R3fF^YkYeaYOP!`*5O zxjlz>Tx8mW9haSX`hH~k49y$q;^az&Ta1RE{=U4{P49RlcPgVf&CqY-k*PD*#ZDQ;% z=3vWnmCcAh9ROl2$OLgcRd>6YzZceW+0?>W#;RWBdJ zRmFtQ9*>mgDDwH#>OTAOuIJDf)VzP2fY%)>r4|w_^vv*nf)X*H!b>6@#I3DqeDr%` z!hF9cP6k`_c+c|YCd{qeURO8XAg`I}x2mknOMH-|q?}Uf_0F!$lfzTYBP&vTR zoetNAk}s*&?H09x_;=3q@*@yuQFz!e7>Wy*Fr15VK}l6qDm#12*nCIN+7Z@MS6zMr zao9&7zGB=@5Uyxes9xH^h~pGZANwXux0|>)1#Q3k$dgA9Dljwqtu@mx0S#&-arf-? zladrJPbLQ9v%Wtfx3T@E?FE*JZ$_`F3J%h%27k}e>o@ZTCE=wEZKKd95QJoY)BI#{ zy>J};W>CUQSN(053Wa0v_^g{zY@YV6bo86H1e;t?rAnR%2@{4fcm7Z%kIc4k^(YeD zOFM3~Bh@2lzyBxRLu&msHv~UPS-B}_>csT@=p{R=98P`JdK1xpsYHx{0-1Ang9`|H zBKvD1YhU$UKXUTAMs1Dej9-J5_CkE0N~`t&sqpyYzWvo@Jf%n}HEwRT=VgsG&Lh?v z?qBcm1xN`A%)31K>dwR$41;SBlr2Y7_-gkTBp-Qde|QfnR(~De6uiu<9?bsMH)_+I zW$>mL!P=AM2Qz=jCndTsd-S~2W+Tb?m_%T>UZ1I(j|$RqDr|WQ+ky97z8QFbgNxsq zZ~sABtB^9##nb8fDrsQ+e5$}x-|H>{k703bo`w7&lBFlaKgjree4M00PC0*4?bg}# zBRn8`cD|t*<=)qhr__)eeK-8vg1%P($eW*nmmUy+B^)CNygjdO$=^ zlT*RDp+qL1&BQqF-G%j%F`O^f;4otHw2YXNYM9lw(R-tryv%)?iM}JFfa_7NoD>W5 zq2<_^h;U@(4#gtkg4eop2#+LiWE$yx8-IWwFD-CkIxsQC7g%={vy z6>>b#oI!&2+e2sY1vdoty|T^nP&75mF3VpsZUwKyuL;#` zw0QSea>j|SNXXlvGwIfW@|0I)@z=TM%GYH6B?W|X*Gn(9Nb=8C88#61t&*Qlx=nEx zToq9nvN>Dchh{lQywet+3N{E=gRg7`rXt>osF6^}4U+;VRpWYO_8iz}W zE<1!=+vQ;%0V(`ZwpXup@Rc7dPcKFY*fJ z&+O674^OCXC9dOWjTUygIPR;kFQ-UG?3epp!3N*!nlRVXE5u_R5dUJqZOi=l-?jS8|NbqFb)`Sdb_4F4kq7kf$&mZee4w zvX<<&Kk7oYn>m}cmYe2dyn+Ykh$eX2?)9Rx&(mh>51f9hiAb+BDFJ?LpAiU8S+?OX z7n_96O?l))a2=>y&k|fkZ;r^AFr2r)yQ$&G+?Z;=99ju-ThU;J-pgxR=19qIUYJXd zQNJH5SFK|1iL2Su6JmI)=S?GS1jKn>xVf&0fT|3arRBop?;G03Z$@T}+6}6mZ51&$ zl&Kv;r8v~5!w-3JK=F;`l)f@_;?wRR=0mOG6bWpg`k4AuOg+AJ7T*6n$j?FK?%YX_ z+7(hGr@!a<;MpBUW}?#ba5|k`#Oydriw~E!y;J&ivD=UNA?q`={_a%h!4L7j8_JRw zvGwqCIaM<{+Vr5k6$FDw%>BOM@X$MGJ@uqu>C#*$S{Vt&hlGg^@v}L0ecn~QoRC{_ z*{eK(=|F#(Bqv*cFc}(!egiH1@@@Iu?i|NVHa)RdRER;OMj5pbv`%48KXcHGQ`)(m zmFyni{DJe!U4ODy{6I~|AcctN$vefQ}8*@>;M zMg0F%HWCv)E&Eab2W$u$6~aCuZd1 zfEjo;lok@WI3TFEk+}bUbc}|zQ8g6d_2ZXpIGkrSGZUm1C{9o7+&k76qG%D|xp171A!7#mj8e>= zZmfIXlu&}8dUqEeCpJzNu(Njy(*~1_F|7zi85$9JC>i^Pn`_6z$j&G41r|-EVY5Q_ z`k-Hyi&t+yB|a1d$X>}~RR#I={GJ^R+ADRMIiMXbd2Pi3JC<9t5G znPU?0t6<|~>UcOeV_uZa^%nj>7d`4B^RL_lrSI*n4-rq(6xB&w{$YC$HNpqN^{y{= zIHqs4UI?Ih_U{rNpl*gr1brI!UHRUj#dBb*K}?%~Z1pJzY_@b!jP@f&_>BXM2_l_N znZA23DlAcFdwoV_-~r!0i_8;l+B>zKuHi_HWkc&ZXhqZe$^^*`w=k8KBI^4waJ+Hd zMxn(&ba?~Od&zP*HSwCF#J+XXq(Cu_M}|1W1}d=U&{6CXte|su`UO8qmyE2!=wjo5 z!vM~a+e9)90=#)}+lqS%&-AJDKFJZ~vuU$8CacGG7c0kl@j}5892HN}B23BsdYMz0gVHCpn{#8_u~!s8gDft?y0x>Bv24YeFP)t_ z%!1K)s?UTZae+T^>2|O*du@bils325 zYOwNB8%R}b|G}k!x6P?|dcIxgaDKR99*uw)RU0?{heWFI7y|Mq_6+$^BY7)(d?h6Y zjipneTUT12wD@u>f1+2#s*csv;#qOgiA_aS%CfSji$PFy&}na-g3eb6-ORst?XM=|2+w$^)#ibvz(nyqy^nnEcg6CKSsB$c2wW; zl~5V`eaO8DR6)0~)zj4c@Hq`iYWB0tzO!sJ*}b+=&~Q8^moe>Nbq_;>Pw*Au&->BU zP(xTqN3jABD%N*Ek?Tp(J@M@s#Gb6Mm64rtl6r7%Xl{70xC;{sYYG)5Ul+tV2R5U| ztA!xe!)I0$qI;vY@`$ne*((LbtUbM7jV``#+YRm74)4mNod@E-{`UZVKi}*MS{=Q5 ztW?ov8@Chw=?D5GlIW^}3_g7CDSHh1&&-y-@~Mk6pQo-pg8xvsvo<7syHrqr8gat{@Djj`&Sj?G{MtY!DGZRJ!3AIK}I;_zsXSL=d-{icwG zbIW6Bn;-?t_bnT0`%H{toIoz80J>*1o@ddLyMuHk=D{PTjOhWpFX^u|GbD+5(5ea# zRrpJoPf(CSV*=O1%Li?aSo)i8{UcmVFdL!s(!BHe6-Xe}z^_PDVW2C;57l@Cg~#<+ zh7v~Ai?V!obhM|7a-mYT3toYR!*0^ie~?x8B09 zSK&bXP;0Eh+lF_*!-Ekomay$0@uz*qr3L49Nptko+(z9B3`RY*1->Ki=8Hhh37)}^ zK*b`gt@HNw{k?mf+P$R7ipc~s1rn>;EI(K43r^nGco#@ zd-@;y+!v1>yfX}a^mhFIi1@QA%*cPFe~H>*&S(pJ`(21^_5$y|zvs8R-!5I}4N>I^ z3l5$)yAlSDogVlg|#&Kw|!r0xKm@7#^=!de&2OS zNJ!8_(dvXJuqc>djviqijZz01)EiFOO;af0dT#a5D2H%zJHM@Iy_W+w9>|57zg4SN z>fFLt-$MGLB_H<1Q#&9?d7m!Q8pMlvmK7eCDn%y?+pxZjbLjc1j7AQ z;??fH?N4qF!O&;V^3KbxEi-YT`yDm&YHoF+Vy+I&s2XEekffDQM*beCK$gfAwDep| zk(cJ7K7jY0zKmp<2S36n06=N>z@~qnbHQKqxFz4EtFCF#cKiObUH>ha2f-y6;I3N zndwfMG67aUP`#4IY;gWkIk98kVKsxZl0@jHZm1Xb};(%T6{+Pv}!ZADBR-P zx6|JqUeqooJ7tSFJKFudJhO*ofq^=1AI4oG=v#p7w}W-Hji;(Ef_0*b*q*|J2E5h< z1_9YueoA}iU%|I?8BehlGlaxfakO&rqJI#W9*#*fML}q%JAWeht4w#}o=$pfAWzs! zJgyjqwk7^_>Bw2)B&9d3IQxTEZ>hlQNhu!uO%QV+BPl{Fk5KRB1Unj(NE(sHUnq>ZvLx#CJCr_i`<^P4gwg(%R<= zmnk89AWz;ocz?*e=Vwbv3+LAZ6pqXcxL)h!g@=Q>Te-+W z(_ZQJ^33TT=E)fKoymO4Za*U@PUn6A7O%MBv`>U#p&-Q<~^}7e&V|f;@ch0I9 zotgE=X^rvKct`{8Q?TKB>oYfn^eUs453(EY6>hH$5Gr7(CV9_V5`sS>t#g8k8BzX1 zZHV!zk3i(H@UvzGcI7d(ve?WkHk6bv$w?$fcb+dvG;in*=!HNBW7lZ$!omFpl#Zx@ zRqi80p9G7TPwXH=1uyapFA58R(h^1Amz0pURjiA1G{2!gC(At@a!gbosU|M3r4wb^ z;zF#{o-Mljm0K);XT97Obq_6gFb?J?cK0EQD2vzY^$LvJn)gXSUnI^iPkN2-nudSA zlS9H9ft|8#(;;dTCGv_?d>G)Du)tHUKN))IChk@^PZ)qg($5!O_;rT$vx0WYJ!%74 zLM$iS8N41Eh~sgbUe)&d01u)-=T(j3d3ORYu`8iMva5COEdYG+)bKR(A3l}E%X5Jx zJ=Q1_E|kEe6p_G3>HQwe+WK6bk3fdT+cSDwRQLYdnVHP?ADZ{0rnLkcOuYv6KjjB4 z;)|W?31^sArpi#WBMkg@bO@d;LeJuBv@x(IC&s^a%g?n%Gp>Iyx=dScc+yZ?5!T^yENdy4A3J zsTvJCE=&rXsk9A2WlumaR0SP<-FhR1w4ww4e9CDcN!AMyhwHZ5d4Bqu({nkPVi=R3 zwe)};PbZGUW3K{@c!A0?oC&;r91i;eJh+$vMVg?K{*lUYRCu^1J19lChvS zpKyDnH6D>HJ|8?-Q*(0lUc@mTo^-1Uuqx`bp3)%f=8IjmS)dC;Qa{N=pbY$0o1FqZ z8g`a&1}mA-len82_fw^SIY#JQf{oiU2dd~CJn|)d3P^LV6Zg8 zJt>Rvuc!JrV|atRhh}qe(=P;^X(nAZwb~@s)cUkr9TfOUHQwuhozn_gE>^s(T5P$O zLvgB2`{Ri0C%2&@?bLirxH%=3=7V^|6MOb8X_O_CwS!;HO71GkM-+} z|4fmG_-iS-Sbm#~?db`XBd+qBsyKG;-3e-{=-52-&h;0tvd(cM6`%Geu&YMgGFlST zZsh@OsYW)dReM{`IEBTSY!nccfcj%+K3-Z+WDy3yzzQ&|Mit2YS|Y-HQ)lyKKTcKi zpckel?I;h)^!G#3r4+ZH-G&25UAU^Tz9?$2_OLy;oMG5P7p&OtMyQ4Q$V7*Yuy9oG zc$v-(Xg#nOh>6Q>vXDIb10z67B#JW8_)euW?^oS0%KSaO`6yY}i0KSHB*yRfh@HK6 z2kM-}t|m}R^43VKUAzwv2u~66fax0FKM>j5M>Bwxv$Y>q9TN};@W;FZ z9AtjSX?Fg3Vp8Ck-!e@Zet66JgHAw<{XkXfN(Kb4eaB0$<4F&R0Ah*rdQ9)NDi6X- zmo*hHqoDauDQE3oez&#TJKqMuF8gzV<^B9mSCXr4U)OwNpzegpC~MM(0&3x z3*k#6_h$Ufe%6f=$@(J}yE$>P9q;S?EA);&7oCeukHm7@Tg%$n@}ha{@WK7Ix{P|~ z#Yyzp>ypbB8LACW!YrW`H%|7!d7JLH#Lk032&$lsO-*u_hB~goqs*;vuk1=HiNK3D zqDK?udSAruYI1~`hd~e9X)n5{(d+pQoSLhNb>h5aW~}kfMnY@nf^ZPBeM~jTYmg!l z-*cv6I9n1Hy<6)HBFV^lN6tYJe_uNP#GQE}6DZjSkF0p#R;Z-#0f~e%g5 zaA)#-Kza3eajc4MKS_lyjN2S51!uXMRTY3Plx1pINn6v1{LNmH8&C#P-9Ym?G;6oz zH@1(P`(Ql6hF#e>v3h-(>B@DbtrqxesQ~AkH|)BNVR)|{Ms-clpEh-g@QPzL@TjIw zzyn&?t30mbf{tIsj{Yk7bFqmKZ5nbsp>mpOWywQ9j{qW^GE1j`+j251_~|+ud>1ns zbGa=b4N>5*dt5$oXYf2rjG{;&8E(E)r|tjkCJ>AKJZX6tfyn;WKxQQ7#F8{f6%u>h zn%=IU{_d;^4cbc-C$0N#>CSjY3_kxNJm{)oe=qRPYcODsgSlw)EP*N>2UsLe9UJaP zpR&=}jhs{K&eSC0;-2DpcIF1|kM<<({1LM_m3~A(9Ck?HGXku~6z-mBqB?LAYk=jr zs{b#Ti$&QA;bIzL1!mh_Y5R?h_|WSjUqUxVBKWGhal~+q&ZFR!@z@L3b1sbu0W)() z;U>>J2!O-`OA9IQ2g4}HU~|dO5ct=l!A$vW6L;M zE!!KNYr%9Xdp72-u-otRH3;q7R`eUk(WO%pf=>@QwXJiqI9}eq`w0~U%x7Oh&95O) znVN@p$1Pn~r9T@jVaK$WMY5R#uwF1gRb( zp2s}>mSM;Oq)w6o7@b>+57jfKmrelo5&^o9T{s`y_sJV5n}(;Kv}bqOPtLrXTG_!f z;D9?30jZvE!fpf0?c{-%vNGCTb-}k;JEa5qIO)gxYVq?QKbn&m=zmDJ;IGV3hat>@ zK3|t`oNF6lXU}LpiZstVu~eYSd4*EIAYfRZojsg$)z3;Cqfm?4<6gO9jFS1bN@~Vs zOr#Zs0=qIEix=LMW0QhWt-TE1bbBj;+;TnAdU?HS5u2Io7q z1=|~E1p`y$@GKTN??z6wzfM9h`jRP%4hFjZequFl-c^LVB@3fbLMv@q z(*n2|g*1#(Dx65`wa{@BDk^n2J{BsF<8w}9XhX&JXEOdMO{soBV=dfqVvZ5Pqz^b%Z^90=e<@z zgzl{b63*uwjwxjR7D+TfzlBi*Bhcmkd-ew2#SYdG4rT>iv}PhNtOi|5>R1fCUs^i% zv*y^TzIp?>@xHvos&Hwrnd70hhfzJz{2H;rt2Otgnc!^44K4%<%eYyfZ_N4j2#%AD z0r$+pHL457!M#$pwoQ^N@wqE~nb2zRon1?l`Vd@;eqx zN+K*O;$eR7m+7!mHmT+{qh2u@f>m$(n0*l)IW<{AU)4B3r^;+_{^>AVkk^6t&W|Mn zUJEAd-RZ-`l#CD7xWI7)k8F^H9w&cp^y(yJJJ#j6M!eRg8I-9IBYj7ZJQ_4^XLly& zF@Wz;PQJu%rcA`YFGMyci!O@{RJ6vF9MfDb-!Dy>P$pW(JN!no1r6~ACrhv#{(>%a zo|uAkgL?)&CrYQicx1luWfI$JZ>H7u0`7WC8Ncjz29LZ_;K*bfx^DDea()V`9>tdf zs@Cq+GnVn)m_-U1IT0x;NHd@7@5_Hoqny00uR@#j$r-5FY~1}EJDi?3PO8(@5J!D= zBP%}FUjUhjKjyL_KqJ5gJxc9fp@kV?w!;ezmC?Ek zvMNT))@^GmnHzBw#RCYr?~N%a9qyI&w(1&+AogLrx$R2lV(!J!iXr<7!ZdZ|&XJ0G zv-l+A8{|^FruSn0s!>oK@opEbm#c{epG_5KV!yO~WK-s2Dg_SANX9iC#fLO9MLQi? z1^?AJiOQ#3V1eytxSWO%o{h7DHq`y${F2Xp@=dT8f;t#TQW}PH>Az26a((Pe2Xc}8nWK$OezMgrIpa}R z?de_A0V;ZiC$t#}8YtGtvw`rbs8R@Og%8$zUW%;oYTX|F0OV%BwYn>leGWcp$DOF! zKhO}l>$yM28RkzC{el1Iy`-J%Mdr2l%vX_QRZPDGNf3OXO;wrY@sb$Q!46B~{a z!k?b-LhuITdp!8`D0fH8@}IP8jBgHj`$)dTGC$>kNE~|Q*Hy#s=X_~?ev3`Oyy(X) zI-mP#Zfl}j+lz_>Z5#Ix6wx;{xRhJ8YkYD=OqM_)r-Vp!^8xO9Et)moP+&wT9l} z-fj{mozH_jn4mt^b!_kCH0Yc}_`jT_2ymetGpuEocf{iGQ?(cw&PHqxkVhZ3jUH~U z6}}d57F@<`SG1_OI3uo)7p=E`VUm1}PWx(fG79PYIFJ^Rs~8QfL}pDI8~{S`v@q|Y z@@-5M5*K6cEnF)BpzqUiPE7q9U{)LmifC_qp84N#`X!-#H0D|U8Jg>S*9W<|z7@OJ z4&tYsFXiy6l;uhhlV?wtxIC5VI$zNk%1SfKp4#j@++v_$Dv`Gczy!QpB^RQYzL#yQ zn2c~+E@^dS%lL|L_Y7kAv~L!!*E|1l!zSvr8Pmb2?bU)Bxu{4GXC4qaWCi ziO-cEr;}uevEbaUuOz+9vxq{7&lHUDRks2scPb0PD;V4#KPNzeSoF85$|J#K$x5C- z=wLxg@%g-n95@Fq9td1Zt~*OYw&s#1IJGO@+2k@TD|*q{6owHlvbG-AzILl=dNxV1 z+CZ9X%pHdKObZtk1f$sIdR_Ah>g!sYokTFv06&-j0#{ZFUhPFTnf<1O*#r;fo?5TN zIa8ut*|tu&mhK+gt{{+4>h=;1kuT)RzK>KcaLB%tC1#)lrEh0G0?|NEg=`{Cs1aLH zDkEP033ERAWWtRj9KPA4!FU~^VztoOf@;9Ex}|myc6|%N67zDQy9ACjP4iaQw!#>^ z{QN9Ct0SL|m{g?Y>Jp1<_3^h&p0p1MkD-h>R0R-=_#a%V5<{mWI8<8xjcE{-*1OYVMsN|3zv99@x$rzgIduMV$NiVF2x9tazaS#r=ApK2Vj{*@Q`^Lh36DZDA3;$+)d;rX z_%=)MyHGGqXliaAce{e}m0UUn`Mz}>4Y-3lC&GJRl1!2m@MjJYIY56ZBpa>AVDI3# z9d_F12Gm?s*a8`^E<|jRMt(ji!IK!!>!(Exfbw5yB~xPzaa=LuVwpc!SJmv1RjlS% zaZ4_0nvJb5x2m9kY1Mr+hHuX%=>ngtRc=eqa7mH}m=(Q*Vh-cW0bP4zoq5`t)=T1F zyNWps*Ry+-xn$?Z#XK$7zAMb*anO!s;~dDW4;@;nfNsrfC3C=l7vug~{wE=ollS;J zoxBqD#&en1Yyng!!g8qzsboGwdMY0mOf$W`jDCT7o{EFq1z-|s ziUFg<5PBCxDbl1w5GjLFj2IP>P>m6SAVZ0O0V&d@DM$&?pa!X83`8M4h-ScZaXE*m4H zW0gdikan$)C!Llu14TB=VahZ_`CR7wzK)E_At;CuHTURov}v#a9h4x|u(fhIk1wB=Sik){2WF%PVabfr`=`tUbJmnQFKK(C*d%bYvq!D0Xu(a!`J;rjYHnRRpEA6fET zSK**v_`~|+k!pRrpCNYIC(Mpi@I`p;+EAq`t(>70?!)BS$*rBX&%FW8_VNqu&OCT; zkDxQn%x|zN0@(!-9d-YWe5@trmKGYaV2j+MMd@USD(G5KWki{2fGdqW*P>pGLB#328|oPe?K*no#UTUTeD%Zc`N-=3l$1a#AW-*AtB~~dgO_E z9mDzTettBxV}WM#TIWWgBbP10$}aM5Yt@UDOxJEw+#H?bo>mGrwgwIOM&;;FJsGjL zH*CAvPMe^wuH>H)OsCQr_;2F!F-w0hl<8rhRt-lNuS@8gPQ>ql0Cj=vS*Mm|v>k7? zYvU04!rcN`zZuYPOm+AjY%q55&pob8n&I%SN}qW`5utdeY_?)CE!o+*z9RpR8HQM# zu*WQOJxQn(Lzf7wFZj06P@2%s3vw0(4q?lUSP2OLqc{e7aNb;WZwH{mB_suiV!V!7 zEL)HTyyw@kC;Ypcqe$`YllYVd*_Cv;D{2Nk8PTN|()T-XSu+s_#;(PK{oe`RskFNs zk*c%hB1n6ceEayux2!B16ftC_$e5sW)TEFz6Nd@kX3~>AMm|5DL8fat2?qMSA1IXu zuz!~6eDGZR1!Lh|BK@;CnhEg;1@@F)sRg(|S3Y%{ZMuUtc~7aLYOph`$HPAq=alRj z9e9B~vC#le?n>W&AWgzBg!N9nVh`D=w{^Qy9k1Dg$)#912C?n*ZSQrRz2Vu zat;3M@)TEJlY{p!N;4)$0iuDsLO1;0A|Y4z%RBtt&}=)_m{My#=`5dfGZ2FfGyY4{ zZzyODU^IxlVcDt@uM`c|>Ii1Hk%04PL>E!nr;*cu{+|H=lsgG`T7oVL(Ja1<8SVwJU40puJl`Ja8Ik@^3vPQQ5e*#6504gNaPt%G5b76(69EdF~nYd z#J@0SGGMf)4=JopkxEk??o(!zFaM1s#BCb^i+IPeLSbz z7f@S_m4d6Z-@qH+dZj=1tERvA7uv)jBWM$KcC1OvqUzKr#%hV^3#oB87xhbid^>#X zqrb%xGaQqPARL-_3xym3f|R?H+d85Bk_LB1Kv&G9?YyUlzblqQqF|AuN5yJyV&bbc z&^{PF4w>)kYdJW>+T)xR%{&$|0AxD4^iukEV`?R(T~ssKip* zwVI7!gA^*Dx`jx571(y`wyO7$iZ1*#1K1=OzBUMv6wH({xpV7=Wrx}BRoERwes#xF zY>m6?Ck-IE0aIfbeb8D)CXd@IG<)ilc_r0h3vucddFcvX%Jy%s)(xB&rQl^WttT@0i zCmHbObe`|){_rWWJ(<)iADI57Xplk6shGum|6<6DuSh^xy`*+}-h& zdYQ_rq{FVv?ki)XNvW-@>|#ZC$gRFtTN3^AXDzwRmn-`@Qc%yhe{vu_u<$n-?wZ-8 z&Ht2mlysXB{t;#v7*sw@b1HL1Ft9i8oG-7^Dr2jkni3#7%q>L%i%Ye$=YpRTwdEyA6HP5#Je`SC~R zNp%Z=lOt$8P)2IM_%aVh6kSd6xf&0wEYc`jsWq)nj&X8{k{1r4h^2?;uL-Z`N?;?1 zV5uRGKq(vQL75_i=kl-9hY$7KlH{UlFJ<83ws}XYkh^)=7^0(YwA)81(C~wQ8KuT} z>h(66^5yA=;f+1Jok#|n?=25mXjJ3@jw5-C2^w!A_-3RHBGKrFLd@05_AY9V~nLe#j%Jw}J)x<#@6)AY?Ju zp#6^}(mFv<)beozgO|2GQF|#H7l*QS4L8(Gvtf|l;H?J};|Yylln>d{s{7}DMk^@R z>X`NHB^LywWi`kpwwB!xfMuJC?5IK`cLwiq1vaaj0%8J&x+(!F^5UYcWt^iTY?YEdNXJt6H zlLUKIXcDttf^w6%{ip^1>4doTKJc|>Rm@1(#1J{?Yvbtr;8`Zd;E6iht)K@H?Rkyj z^L8>A|8iXM%JbS1!yljfzvy3ZK4_%E83N`OftocRTm{>RbAN%^9lh-{@DM(zU_?(q zsW!2O$r?S>rf!;wt0)^mFwJp8dWl^+@3zwNZ-1N1SEn6EmB!3uH}|MW9=&BI^tbAb z@&9UWNpfq~tpf}>`rsS89;DXa8K<^APnD#fk7z^%1+8$|%rW%hIfk*9%JO*KC2A+} zN0#WmkQXB2!QmxZ_ixF;I08cYwfeT?1Ppmvn6t6-p_>q#eay{Dh>YXMLV{LT`1k6E zns#wmLgaz^(b&*NSCHk!5mjVqUhGfGVk}YQJKwc*`P2M?EGs&>H*&g{>UEyoQ~fgT z%nLqW68^6Nw>^Vy*#7@>=YTK(<@o>3D87Z?J5C#^^Y>y0)VF8XI@-C|*4TK*{|7x1 BX_o*1 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_8.png b/templates/object3d/assets/Character Orange_Stand_8.png new file mode 100644 index 0000000000000000000000000000000000000000..09b995d0d6ada93e9885846f3cb4fafa2b10adba GIT binary patch literal 22296 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 AD*ylh literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Stand_9.png b/templates/object3d/assets/Character Orange_Stand_9.png new file mode 100644 index 0000000000000000000000000000000000000000..4be9ffbd49f19ba2236cd0a8955a08acd3b30b88 GIT binary patch literal 22230 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Walk_1.png b/templates/object3d/assets/Character Orange_Walk_1.png new file mode 100644 index 0000000000000000000000000000000000000000..de4727b288a2037cd46b308579fb12be1719f65a GIT binary patch literal 16439 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Walk_4.png b/templates/object3d/assets/Character Orange_Walk_4.png new file mode 100644 index 0000000000000000000000000000000000000000..520076f9d4ca598f63df17f3c1d71294c8fcc3b5 GIT binary patch literal 19255 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 literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Walk_5.png b/templates/object3d/assets/Character Orange_Walk_5.png new file mode 100644 index 0000000000000000000000000000000000000000..6bcc9816ff834db1452783a21796d7206dd1e8f5 GIT binary patch literal 16350 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 z z_4(#|wT?Df!o4{!NPlK$X5aVI#m=xwV%CzCuVFTC$QR+j)#Op1(fInZT;+WOrxV!h zd>y-8h>MNU-J^19vCEOd0NJ0`Ha^F8RbR61(QH+AT_qw8laWIn*xf?|(a|z-#KClF z#fO5*2W7YaOe6c;SK0K@6lC^uv@4i6+#R(UDPXYRR?BgG=}d`@y35cToHzPOECWrR z6H;*DkPXx;^yt@A?Y*5(Bw;?Z?oD_9S zSOWa$MFeJ}hC8K?i9bowkSnv7hmBuKJR_EKjf3MQZ;G#uWU_Piupi6%r$F_#&2)6! zqGdiQ%^w{cBA+(sRF+ToTZ-BLB%zaecCgA*M-vI*>0xfUT_ZiFujCK6+j}zSv@obO zZC}OXaW~Aa7xB{9=bvdG?$yng0XF(!2<^tMWEK%Y2--P0E561K%MqV|>eu!w8zu!O zoIWNr(W_Z3uM)?HQAXd*!(dJHL|;RBWWrYZ_-dOZ|6?(oZpEWn>K@-HlcBuP2Wy;< zl+Q;u{vd!rAxuN7WT0Q-Q5+x;9Wb%?-;e)a;lnYB-Z$Cfk>!@=`G4T++%vpeamOL* Fe*n6)(4hbT literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Walk_6.png b/templates/object3d/assets/Character Orange_Walk_6.png new file mode 100644 index 0000000000000000000000000000000000000000..424ef709ada08b99265c477abfb99b6075ba3812 GIT binary patch literal 16350 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 F{{!{X(R2U+ literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Character Orange_Walk_7.png b/templates/object3d/assets/Character Orange_Walk_7.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f063ffe8c6ead77b384e3d79edb392beec4f08 GIT binary patch literal 19525 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%0DdEAGq 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�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 G{r>=tjr>jk literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Flat light joystick border.png b/templates/object3d/assets/Flat light joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..24e1cfe6abb42dbfae2c85321835caeddd4f5b0f GIT binary patch literal 1693 zcmV;O24eY%P)005u}1^@s6i_d2*00009a7bBm000XT z000XT0n*)m`~Uz3Pf0{URCwC$o$YPnN)(3O!7bsIkP>bQDS;9w!6i@vC8PvO;15EI zgg}u{q)1WrPef#e#LLUI_l8`80grv=<9Vc!R@#qvJrC#1nK?FD1_!*qzyG80@$oU- zjl3F@D@XnJhxNb99fmzcQQT~|+uK^O&(F_aWl!vW?y444*YNiC_BS(3G+3|wG{GB>6#h#v~W>T8*-{rZLR2tDbPtQ zA08g|L%$9*8s?I37UgU<+YkLZUah~7ujboKB1_`TZ7@ve87aKK?kB^P=#Uf!;#fjvLVSjHvpPwzDMo|>O z?-wE;AYscjALqH@OPEt|0EG$iAtC#GU@f8F=g0b#FimmeZG)>m9ZXOB=)}Z333WlV zQzey(SKc%*RC|3ZrX{)UnF)J+U@hUuT0WlBB^}#T#_H+g_Jh{`z4sDU-7ORyP)EUO zuL6eNS_J{G2ifm~pXhvlkkktesd&XXFIcDIoT?X0>7**Avl%Yfnz^IP1x#`FA|%dw z;mU$!%5fW5OE_TL1;X8yA^L%76lCoOW>JvJ7fhod(GScjVop84H5WB1&~62;Ir}{` z+Ir!3fors#NAUsv7b8671|3Gh(@hF$qv19|mz;c{UEfN{EdsMNO!@`0G)(mieZkXi zV4a3 zxucPzIo4czC7>>7u~?L|*-TG8F-wu6xz!wNu3br(xs*@i>FJ4?iWJRlJwA^>}`M?oYs? zD9ZVKj(`ZbA97){+4P%&^#hMdh=6Gc*haqAMaVG;5ilJA+sd~WuAp5t0TUP=Te>|atuOFkG1nDbg*uoQ5}W0_#a z{;^Enj1N}GJzmWLX7F}YFyr9mM7*923<{7jFQ^3D3Yb^)f@uZ(6>bTb6d)8LU|N9i zMKxfs{u}XCUEt69k1wkM)Ab+wfzTHxzcroC80caBH~djR8WW&v{xl%`1luvtVf341 zO^}A6D|W$c&?q3)Fm#37%Fcmm7&=J5S3vG%*o`hc!!=r#3{iorbf zl8T}Cs+Z1bI3xAunH37VG_EEs-z2l9D2f|SNs_F1SG}+MPE^GMrX;PRLxCsr2^tpI z@AE;zG1C*he1ptqI4_R6=on|dQ&q;Clpr4xLW1&rm5_8Cg?ytdWGGB1IFJz1l@AG# z4+#PJz8>3!cy_#8F3Z_$cGl3J4N$z5Sz8qi49(o%-=8hud_E6NzNt5j1?&|bXS3Pt z#X3hm{aN<-0+BGJrq(721C%e%;NOSdLrKX$Nf?rR$~@k+Q(2=2okB^;-z5x5KBe5` z)_XBl$+d)`$fqiosCQYF%mYtEJ=TVSZz{9ab9912yZ;5~L+fqZe8^ii9OX5Orw=RX zw&QA9B9fX93k-?Z_*JOjJR*)#7O@r&8|;tt1}QxPpiXnvc%E+GC@RMIx)9QAV5qf7 zYsHXdR8*IAY^B6exD0)NNJ{HjZNTeVsbu3%)e>@SDW!gPwPYBOT9NXmO51rgB*&yp nm0j)2O{%f~cl9$!ssHgCVy9DWnuW~g00000NkvXXu0mjfYE~d} literal 0 HcmV?d00001 diff --git a/templates/object3d/assets/Flat light joystick thumb.png b/templates/object3d/assets/Flat light joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d21ac519cecca59c8b4df8ad0385a33b33c6130e GIT binary patch literal 1044 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 X9}+7w6Qee0quCOkjBI3fdnn=$^qv~t literal 0 HcmV?d00001 diff --git a/templates/object3d/game.json b/templates/object3d/game.json new file mode 100644 index 0000000..27716a0 --- /dev/null +++ b/templates/object3d/game.json @@ -0,0 +1,13714 @@ +{ + "firstLayout": "", + "gdVersion": { + "build": 99, + "major": 4, + "minor": 0, + "revision": 0 + }, + "properties": { + "adaptGameResolutionAtRuntime": true, + "folderProject": false, + "orientation": "landscape", + "packageName": "com.example.platformertutorial3d", + "pixelsRounding": false, + "projectUuid": "f1f1c1c9-25ab-4ff5-89af-7061d8c42bf0", + "scaleMode": "linear", + "sizeOnStartupMode": "adaptWidth", + "templateSlug": "", + "useExternalSourceFiles": false, + "version": "1.0.0", + "name": "3d Object lesson", + "description": "3D platformer tutorial example designed to teach people how to set up 3D cube objects and 3D scenes.", + "author": "", + "windowWidth": 1280, + "windowHeight": 720, + "latestCompilationDirectory": "", + "maxFPS": 60, + "minFPS": 20, + "verticalSync": false, + "platformSpecificAssets": {}, + "loadingScreen": { + "backgroundColor": 0, + "backgroundFadeInDuration": 0.2, + "backgroundImageResourceName": "", + "gdevelopLogoStyle": "light", + "logoAndProgressFadeInDuration": 0.2, + "logoAndProgressLogoFadeInDelay": 0.2, + "minDuration": 1.5, + "progressBarColor": 16777215, + "progressBarHeight": 20, + "progressBarMaxWidth": 200, + "progressBarMinWidth": 40, + "progressBarWidthPercent": 30, + "showGDevelopSplash": true, + "showProgressBar": true + }, + "watermark": { + "placement": "bottom-left", + "showWatermark": true + }, + "authorIds": [], + "authorUsernames": [], + "categories": [], + "playableDevices": [], + "extensionProperties": [], + "platforms": [ + { + "name": "GDevelop JS platform" + } + ], + "currentPlatform": "GDevelop JS platform" + }, + "resources": { + "resources": [ + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_1.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_1.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_2.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_2.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_3.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_3.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_4.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_4.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_5.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_5.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_6.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_6.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_7.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_7.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_8.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_8.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_9.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_9.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_10.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_10.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_11.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_11.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Stand_12.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Stand_12.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_1.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_1.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_2.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_2.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_3.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_3.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_4.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_4.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_5.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_5.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_6.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_6.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_7.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_7.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Walk_8.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Walk_8.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Jump_7.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Jump_7.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Jump_8.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Jump_8.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Jump_9.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Jump_9.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Jump_10.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Jump_10.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Jump_11.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Jump_11.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Fall_1.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Fall_1.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Fall_2.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Fall_2.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Fall_3.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Fall_3.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Fall_4.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Fall_4.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Button_Open_1.png", + "kind": "image", + "metadata": "", + "name": "Button_Open_1.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Button_Open_2.png", + "kind": "image", + "metadata": "", + "name": "Button_Open_2.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Button_Open_3.png", + "kind": "image", + "metadata": "", + "name": "Button_Open_3.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Jump_8.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Jump_82.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Character Orange_Ledge Grab_1.png", + "kind": "image", + "metadata": "", + "name": "Character Orange_Ledge Grab_1.png", + "smoothed": true, + "userAdded": true + }, + { + "file": "assets/WinGame.wav", + "kind": "audio", + "metadata": "{\"extension\":\".wav\",\"jfxr\":{\"data\":\"{\\\"_version\\\":1,\\\"_name\\\":\\\"Jump 1\\\",\\\"_locked\\\":[],\\\"sampleRate\\\":44100,\\\"attack\\\":0,\\\"sustain\\\":0.18,\\\"sustainPunch\\\":0,\\\"decay\\\":0.39,\\\"tremoloDepth\\\":0,\\\"tremoloFrequency\\\":10,\\\"frequency\\\":700,\\\"frequencySweep\\\":600,\\\"frequencyDeltaSweep\\\":800,\\\"repeatFrequency\\\":7.5,\\\"frequencyJump1Onset\\\":33,\\\"frequencyJump1Amount\\\":0,\\\"frequencyJump2Onset\\\":66,\\\"frequencyJump2Amount\\\":0,\\\"harmonics\\\":0,\\\"harmonicsFalloff\\\":0.5,\\\"waveform\\\":\\\"triangle\\\",\\\"interpolateNoise\\\":true,\\\"vibratoDepth\\\":0,\\\"vibratoFrequency\\\":10,\\\"squareDuty\\\":45,\\\"squareDutySweep\\\":-20,\\\"flangerOffset\\\":0,\\\"flangerOffsetSweep\\\":0,\\\"bitCrush\\\":16,\\\"bitCrushSweep\\\":0,\\\"lowPassCutoff\\\":22050,\\\"lowPassCutoffSweep\\\":0,\\\"highPassCutoff\\\":0,\\\"highPassCutoffSweep\\\":0,\\\"compression\\\":1,\\\"normalization\\\":true,\\\"amplification\\\":100}\",\"name\":\"WinGame\"}}", + "name": "WinGame", + "preloadAsMusic": false, + "preloadAsSound": false, + "preloadInCache": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Orange Arrow.png", + "kind": "image", + "metadata": "", + "name": "Orange Arrow.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Flat light joystick border.png", + "kind": "image", + "metadata": "", + "name": "Flat light joystick border.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/ab72105ef4577d93b002f4b6f9b6095f7db7e346da37bcffa2977edf61ac231d_Flat light joystick border.png", + "name": "Flat light joystick border.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Flat light joystick thumb.png", + "kind": "image", + "metadata": "", + "name": "Flat light joystick thumb.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/0acabda67390a4e4aa8b1023454400432c202efb1a525070784c756f61de7e81_Flat light joystick thumb.png", + "name": "Flat light joystick thumb.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/A Button.png", + "kind": "image", + "metadata": "", + "name": "A Button.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Controller And Input Icons/Button/Button/x128/Light Dark/67eb208b2a0557aa6bf791a9a6bc1404b17203406faeb4cfa93ddea284890237_A Button.png", + "name": "A Button.png" + } + }, + { + "file": "assets/Death.wav", + "kind": "audio", + "metadata": "{\"extension\":\".wav\",\"jfxr\":{\"data\":\"{\\\"_version\\\":1,\\\"_name\\\":\\\"Jump 1\\\",\\\"_locked\\\":[],\\\"sampleRate\\\":44100,\\\"attack\\\":0,\\\"sustain\\\":0.08,\\\"sustainPunch\\\":30,\\\"decay\\\":0.33,\\\"tremoloDepth\\\":32,\\\"tremoloFrequency\\\":57,\\\"frequency\\\":10000,\\\"frequencySweep\\\":-4500,\\\"frequencyDeltaSweep\\\":-4400,\\\"repeatFrequency\\\":0,\\\"frequencyJump1Onset\\\":33,\\\"frequencyJump1Amount\\\":0,\\\"frequencyJump2Onset\\\":66,\\\"frequencyJump2Amount\\\":0,\\\"harmonics\\\":0,\\\"harmonicsFalloff\\\":0.5,\\\"waveform\\\":\\\"brownnoise\\\",\\\"interpolateNoise\\\":true,\\\"vibratoDepth\\\":0,\\\"vibratoFrequency\\\":10,\\\"squareDuty\\\":50,\\\"squareDutySweep\\\":0,\\\"flangerOffset\\\":0,\\\"flangerOffsetSweep\\\":0,\\\"bitCrush\\\":16,\\\"bitCrushSweep\\\":0,\\\"lowPassCutoff\\\":22050,\\\"lowPassCutoffSweep\\\":0,\\\"highPassCutoff\\\":0,\\\"highPassCutoffSweep\\\":0,\\\"compression\\\":1.4000000000000001,\\\"normalization\\\":true,\\\"amplification\\\":100}\",\"name\":\"Death\"}}", + "name": "Death", + "preloadAsMusic": false, + "preloadAsSound": false, + "preloadInCache": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/BlackCheckered.png", + "kind": "image", + "metadata": "", + "name": "BlackCheckered.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/RedCheckered.png", + "kind": "image", + "metadata": "", + "name": "assets\\RedCheckered.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/WhiteCheckered.png", + "kind": "image", + "metadata": "", + "name": "WhiteCheckered.png", + "smoothed": true, + "userAdded": true + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 209, + "disableInputWhenNotFocused": true, + "mangledName": "GameScene", + "name": "GameScene", + "r": 209, + "standardSortMethod": true, + "stopSoundsOnStartup": false, + "title": "", + "v": 209, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": true, + "zoomFactor": 0.23867758270258088, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": true, + "height": 248, + "layer": "", + "locked": true, + "name": "Player", + "persistentUuid": "17cd86c8-c414-4f1a-8882-222df2e1fb96", + "sealed": true, + "width": 253, + "x": -32, + "y": 168, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 50, + "layer": "", + "locked": true, + "name": "Goal", + "persistentUuid": "5978a44b-9b96-4b35-9804-b0056e917de9", + "sealed": true, + "width": 100, + "x": 1532, + "y": 540, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 736, + "layer": "Background", + "locked": true, + "name": "Background", + "persistentUuid": "824bc678-324f-48ff-aca1-99016ce82937", + "sealed": true, + "width": 1312, + "x": 0, + "y": -832, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 64, + "layer": "", + "locked": true, + "name": "FailLine", + "persistentUuid": "61426111-f54f-421a-baaf-76508bfbf3d4", + "sealed": true, + "width": 1856, + "x": -448, + "y": 832, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 128, + "layer": "", + "locked": true, + "name": "FailMarker", + "persistentUuid": "111bbf51-8d30-4ee2-88aa-d5e901ffe123", + "sealed": true, + "width": 1536, + "x": -320, + "y": 832, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "81f70a3b-c715-40a2-a429-3120543f8dd8", + "sealed": true, + "width": 0, + "x": 736, + "y": 512, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "8be476ed-5106-4e10-92e5-3f5c888f2136", + "sealed": true, + "width": 0, + "x": 736, + "y": 613, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "c01ec8b1-73d1-4e1f-8935-4083ebd932d2", + "sealed": true, + "width": 0, + "x": 736, + "y": 411, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "98e274b4-c896-4a0d-87a3-7c18feb8d39c", + "sealed": true, + "width": 0, + "x": 1760, + "y": 96, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "96161c03-f483-4e22-8a73-8ac6fdc70855", + "sealed": true, + "width": 0, + "x": 1760, + "y": 197, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "600b2d16-fa18-4a30-baa2-14e191f93918", + "sealed": true, + "width": 0, + "x": 1760, + "y": -5, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "9296c572-0b3d-4b52-a358-d00d35ecf65c", + "sealed": true, + "width": 0, + "x": 384, + "y": 96, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "106a1cee-3ecc-4e74-8b90-8abf5512b3eb", + "sealed": true, + "width": 0, + "x": 384, + "y": 197, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "3235a77a-f507-4b2c-9ff6-2f64923f3b8e", + "sealed": true, + "width": 0, + "x": 384, + "y": -5, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "d9fe1ccb-2e42-45bf-8ba2-5e0bb29a03b8", + "sealed": true, + "width": 0, + "x": 1088, + "y": 96, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "62fc5177-13de-47b8-b190-bb8b11ce0607", + "sealed": true, + "width": 0, + "x": 1088, + "y": 197, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "1f72dd43-6e19-42f2-a35e-f6980e188c36", + "sealed": true, + "width": 0, + "x": 1088, + "y": -5, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Arrow", + "persistentUuid": "0b489c55-dac1-44a4-85be-cca12f8a0c25", + "sealed": true, + "width": 0, + "x": 34, + "y": 96, + "zOrder": -20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "MobileUI", + "locked": true, + "name": "FlatLightJoystick", + "persistentUuid": "c51d2f52-5891-4f51-b03e-a2d73bb83619", + "sealed": true, + "width": 0, + "x": 144, + "y": 592, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "MobileUI", + "locked": true, + "name": "AButton", + "persistentUuid": "1f2f4b77-1281-4d99-a0af-133d458d38f2", + "sealed": true, + "width": 0, + "x": 1088, + "y": 544, + "zOrder": 8, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "77eef8a8-9b51-4b28-a234-e064a32dda1b", + "sealed": true, + "width": 0, + "x": 1760, + "y": 601, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "bf70890a-de2e-4416-93d9-81e9ea3d19ab", + "sealed": true, + "width": 0, + "x": 1760, + "y": 298, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "18739e85-8f50-452a-b05b-020b1b225871", + "sealed": true, + "width": 0, + "x": 1760, + "y": 399, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 45, + "customSize": false, + "height": 0, + "layer": "", + "locked": true, + "name": "Danger", + "persistentUuid": "4c1a547f-5822-4cc7-a9db-39e6b5386bba", + "sealed": true, + "width": 0, + "x": 1760, + "y": 500, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Player", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "PlatformerCharacterAnimator", + "type": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "EnableAnimationChanges": true, + "EnableHorizontalFlipping": true, + "IdleAnimationName": "Idle", + "RunAnimationName": "Run", + "JumpAnimationName": "Jump", + "FallAnimationName": "Fall", + "ClimbAnimationName": "Climb", + "PlatformerBehavior": "PlatformerObject" + }, + { + "name": "PlatformerMultitouchMapper", + "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "Property": "PlatformerObject", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "JumpButton": "A" + }, + { + "name": "PlatformerObject", + "type": "PlatformBehavior::PlatformerObjectBehavior", + "acceleration": 1500, + "canGoDownFromJumpthru": true, + "canGrabPlatforms": false, + "canGrabWithoutMoving": true, + "deceleration": 1500, + "gravity": 1000, + "ignoreDefaultControls": false, + "jumpSpeed": 600, + "jumpSustainTime": 0.2, + "ladderClimbingSpeed": 150, + "maxFallingSpeed": 700, + "maxSpeed": 250, + "slopeMaxAngle": 60, + "useLegacyTrajectory": false, + "xGrabTolerance": 10, + "yGrabOffset": 0 + }, + { + "name": "SmoothCamera", + "type": "SmoothCamera::SmoothCamera", + "LeftwardSpeed": 0.9, + "RightwardSpeed": 0.9, + "UpwardSpeed": 0.9, + "DownwardSpeed": 0.9, + "FollowOnX": true, + "FollowOnY": true, + "FollowFreeAreaLeft": 0, + "FollowFreeAreaRight": 0, + "FollowFreeAreaTop": 0, + "FollowFreeAreaBottom": 0, + "CameraOffsetX": 0, + "CameraOffsetY": -32, + "CameraDelay": 0, + "ForecastTime": 0, + "ForecastHistoryDuration": 0, + "LogLeftwardSpeed": 0, + "LogRightwardSpeed": 0, + "LogDownwardSpeed": 0, + "LogUpwardSpeed": 0, + "DelayedCenterX": 0, + "DelayedCenterY": 0, + "ForecastHistoryMeanX": 0, + "ForecastHistoryMeanY": 0, + "ForecastHistoryVarianceX": 0, + "ForecastHistoryCovariance": 0, + "ForecastHistoryLinearA": 0, + "ForecastHistoryLinearB": 0, + "ForecastedX": 0, + "ForecastedY": 0, + "ProjectedNewestX": 0, + "ProjectedNewestY": 0, + "ProjectedOldestX": 0, + "ProjectedOldestY": 0, + "ForecastHistoryVarianceY": 0, + "Index": 0, + "CameraDelayCatchUpSpeed": 0, + "CameraExtraDelay": 0, + "WaitingSpeedXMax": 0, + "WaitingSpeedYMax": 0, + "WaitingEnd": 0, + "CameraDelayCatchUpDuration": 0, + "LeftwardSpeedMax": 9000, + "RightwardSpeedMax": 9000, + "UpwardSpeedMax": 9000, + "DownwardSpeedMax": 9000, + "OldX": 9000, + "OldY": 9000, + "IsCalledManually": false + }, + { + "name": "SmoothPlatformerCamera", + "type": "SmoothCamera::SmoothPlatformerCamera", + "PlatformerCharacter": "PlatformerObject", + "SmoothCamera": "SmoothCamera", + "JumpOriginY": 1.758268736427497e-308, + "AirFollowFreeAreaTop": 0, + "AirFollowFreeAreaBottom": 0, + "FloorFollowFreeAreaTop": 0, + "FloorFollowFreeAreaBottom": 0, + "AirUpwardSpeed": 0.95, + "AirDownwardSpeed": 0.95, + "FloorUpwardSpeed": 0.9, + "FloorDownwardSpeed": 0.9, + "AirUpwardSpeedMax": 9000, + "AirDownwardSpeedMax": 9000, + "FloorUpwardSpeedMax": 9000, + "FloorDownwardSpeedMax": 9000 + } + ], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_11.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Stand_12.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Run", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Walk_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Jump", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_11.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Fall", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_82.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Jump_82.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Fall_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Fall_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Fall_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Fall_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + } + ] + } + ] + }, + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Character Orange_Ledge Grab_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 180, + "y": 185 + }, + { + "x": 300, + "y": 185 + }, + { + "x": 300, + "y": 413 + }, + { + "x": 180, + "y": 413 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Goal", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Up", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Button_Open_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Down", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.2, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Button_Open_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + }, + { + "hasCustomCollisionMask": false, + "image": "Button_Open_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Background", + "tags": "", + "texture": "BlackCheckered.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "height": 128, + "name": "FailMarker", + "tags": "", + "texture": "assets\\RedCheckered.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "height": 128, + "name": "Danger", + "tags": "", + "texture": "assets\\RedCheckered.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "name": "Arrow", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Orange Arrow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "c7a381f15f0bb07adc63d78850702df44e8328a15db1ecb10ca1503491ed22a0", + "name": "FlatLightJoystick", + "tags": "", + "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "Border": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Flat light joystick border.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + "Thumb": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Flat light joystick thumb.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "a9518cbba640f8287edf6c5eb05df6e2f825343bc6440e8d4afe9623831a3afc", + "name": "AButton", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 0, + "leftEdgeAnchor": 0, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 0, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "MultitouchButton", + "type": "SpriteMultitouchJoystick::MultitouchButton", + "ControllerIdentifier": 1, + "ButtonIdentifier": "A", + "TouchId": 0, + "TouchIndex": 0, + "IsReleased": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "A Button.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + ], + "events": [ + { + "colorB": 116, + "colorG": 116, + "colorR": 116, + "creationTime": 0, + "folded": true, + "name": "Game Logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "CentreCamera" + }, + "parameters": ["", "Background", "", "\"Background\"", ""] + }, + { + "type": { + "value": "CentreCamera" + }, + "parameters": ["", "Player", "", "", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::XOffset" + }, + "parameters": ["Background", "=", "CameraCenterX()/3"] + }, + { + "type": { + "value": "TiledSpriteObject::YOffset" + }, + "parameters": ["Background", "=", "CameraCenterY()/3"] + }, + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "FailMarker", + "=", + "Player.CenterX()-(FailMarker.Width()/2)" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Fail Game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Player.CenterY()", + ">", + "FailMarker.Y()" + ] + }, + { + "type": { + "value": "CollisionNP" + }, + "parameters": ["Player", "Danger", "", "", ""] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": ["", "\"GameScene\"", ""] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": ["", "Death", "", "50", "1"] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Win Game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": ["Player", "Goal", "", "", ""] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlaySound" + }, + "parameters": ["", "WinGame", "", "50", "1"] + }, + { + "type": { + "value": "SetAnimationName" + }, + "parameters": ["Goal", "\"Down\""] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Mobile Controls", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SystemInfo::IsMobile" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ShowLayer" + }, + "parameters": ["", "\"MobileUI\""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": ["AButton", "MultitouchButton", ""] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateJumpKey" + }, + "parameters": ["Player", "PlatformerObject"] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SystemInfo::IsMobile" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": ["FlatLightJoystick", ""] + }, + { + "type": { + "value": "Delete" + }, + "parameters": ["AButton", ""] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "At the beginning of scene, adjust z(Elevation) of the 3D cubes" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [""] + } + ], + "actions": [] + } + ], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Background", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "MobileUI", + "renderingType": "", + "visibility": false, + "cameras": [], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior" + }, + { + "name": "MultitouchButton", + "type": "SpriteMultitouchJoystick::MultitouchButton" + }, + { + "name": "PlatformerCharacterAnimator", + "type": "PlatformerCharacterAnimator::PlatformerCharacterAnimator" + }, + { + "name": "PlatformerMultitouchMapper", + "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper" + }, + { + "name": "PlatformerObject", + "type": "PlatformBehavior::PlatformerObjectBehavior" + }, + { + "name": "SmoothCamera", + "type": "SmoothCamera::SmoothCamera" + }, + { + "name": "SmoothPlatformerCamera", + "type": "SmoothCamera::SmoothPlatformerCamera" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "", + "category": "Input", + "extensionNamespace": "", + "fullName": "Multitouch joystick and buttons (sprite)", + "helpPath": "/objects/multitouch-joystick", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTMiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjI4LjQsMTIgMjAsMTIgMjAsMy42ICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjAsMjguNCAyMCwyMCAyOC40LDIwICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMy42LDIwIDEyLDIwIDEyLDI4LjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwzLjYgMTIsMTIgMy42LDEyICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNiw2IDE2LjcsNyAxNS4zLDcgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjE2LDI2IDE1LjMsMjUgMTYuNywyNSAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwxNiA3LDE1LjMgNywxNi43ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyNiwxNiAyNSwxNi43IDI1LDE1LjMgIi8+DQo8L3N2Zz4NCg==", + "name": "SpriteMultitouchJoystick", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg", + "shortDescription": "Joysticks or buttons for touchscreens.", + "version": "1.2.2", + "description": [ + "Multitouch joysticks can be used the same way as physical gamepads:", + "- 4 or 8 directions", + "- Analogus pads", + "- Player selection", + "- Controls mapping for top-down movement and platformer characters", + "", + "There are ready-to-use joysticks in the asset-store [multitouch joysticks pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=multitouch-joysticks-multitouch-joysticks)." + ], + "origin": { + "identifier": "SpriteMultitouchJoystick", + "name": "gdevelop-extension-store" + }, + "tags": [ + "multitouch", + "joystick", + "thumbstick", + "controller", + "touchscreen", + "twin stick", + "shooter", + "virtual" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "1OgYzWp5UeVPbiWGJwI6vqfgZLC3", + "v0YRpdAnIucZFgiRCCecqVnGKno2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if a button is pressed on a gamepad.", + "fullName": "Multitouch controller button pressed", + "functionType": "Condition", + "name": "IsButtonPressed", + "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a button is released on a gamepad.", + "fullName": "Multitouch controller button released", + "functionType": "Condition", + "name": "IsButtonReleased", + "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "\"Released\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Change a button state for a multitouch controller.", + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarSceneTxt" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Buttons[GetArgumentAsString(\"Button\")].State", + "=", + "GetArgumentAsString(\"ButtonState\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Button name", + "name": "Button", + "type": "string" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "Action", + "name": "SetDeadZone", + "private": true, + "sentence": "Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].DeadZone", + "=", + "GetArgumentAsNumber(\"DeadZoneRadius\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Dead zone radius", + "name": "DeadZoneRadius", + "supplementaryInformation": "[]", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "Expression", + "name": "DeadZone", + "private": true, + "sentence": "Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].DeadZone)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).", + "fullName": "Angle to 4-way index", + "functionType": "ExpressionAndCondition", + "name": "AngleTo4Way", + "private": true, + "sentence": "The angle _PARAM1_ 4-way index", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "mod(round(GetArgumentAsNumber(\"Angle\") * 4 / 360), 4)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).", + "fullName": "Angle to 8-way index", + "functionType": "ExpressionAndCondition", + "name": "AngleTo8Way", + "private": true, + "sentence": "The angle _PARAM1_ 8-way index", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "mod(round(GetArgumentAsNumber(\"Angle\") * 8 / 360), 8)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if angle is in a given direction.", + "fullName": "Angle 4-way direction", + "functionType": "Condition", + "name": "IsAngleIn4WayDirection", + "private": true, + "sentence": "The angle _PARAM1_ is the 4-way direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Right\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "0", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Down\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "1", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Left\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "2", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Up\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo4Way" + }, + "parameters": [ + "", + "=", + "3", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if angle is in a given direction.", + "fullName": "Angle 8-way direction", + "functionType": "Condition", + "name": "IsAngleIn8WayDirection", + "private": true, + "sentence": "The angle _PARAM1_ is the 8-way direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Right\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "0", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"DownRight\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "1", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Down\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "2", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"DownLeft\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "3", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Left\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "4", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"UpLeft\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "5", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"Up\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "6", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "GetArgumentAsString(\"Direction\")", + "=", + "\"UpRight\"" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::AngleTo8Way" + }, + "parameters": [ + "", + "=", + "7", + "GetArgumentAsNumber(\"Angle\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force (deprecated)", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "private": true, + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "SpriteMultitouchJoystick::StickForce(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the force of multitouch contoller stick (from 0 to 1).", + "fullName": "Stick force", + "functionType": "ExpressionAndCondition", + "name": "StickForce", + "sentence": "multitouch controller _PARAM1_ _PARAM2_ stick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Stick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "Action", + "name": "SetJoystickForce", + "private": true, + "sentence": "Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle (deprecated)", + "functionType": "Expression", + "name": "JoystickAngle", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "SpriteMultitouchJoystick::StickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).", + "fullName": "Stick angle", + "functionType": "Expression", + "name": "StickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).", + "fullName": "Stick X force", + "functionType": "Expression", + "name": "StickForceX", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "SpriteMultitouchJoystick::JoystickForce(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\")) * cos(ToRad(SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).", + "fullName": "Stick Y force", + "functionType": "Expression", + "name": "StickForceY", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "SpriteMultitouchJoystick::JoystickForce(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\")) * sin(ToRad(SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Joystick that can be controlled by interacting with a touchscreen.", + "fullName": "Multitouch Joystick", + "name": "MultitouchJoystick", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetDeadZone" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyDeadZoneRadius()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasGameJustResumed" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Manage touches", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": ["Object", "Behavior", "+", "1"] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update joystick position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(2 * DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)) / Object.Width(), 0, 1)", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (from 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": ["Object.Behavior::PropertyJoystickForce()"] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickForce", + "name": "SetJoystickForce", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickForce()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": ["Object.Behavior::PropertyJoystickAngle()"] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the joystick angle of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickAngle()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Angle", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the stick force on X axis (from -1 at the left to 1 at the right).", + "fullName": "Stick X force", + "functionType": "Expression", + "name": "StickForceX", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::JoystickForce() * cos(ToRad(Object.Behavior::JoystickAngle()))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the stick force on Y axis (from -1 at the top to 1 at the bottom).", + "fullName": "Stick Y force", + "functionType": "Expression", + "name": "StickForceY", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::JoystickForce() * sin(ToRad(Object.Behavior::JoystickAngle()))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the joystick values (except for angle, which stays the same)", + "fullName": "Reset", + "functionType": "Action", + "name": "Reset", + "private": true, + "sentence": "Reset the joystick of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": ["Object", "Behavior", "=", "0", ""] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier.", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyControllerIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDeadZoneRadius()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyDeadZoneRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "String", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick angle (range: -180 to 180)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickAngle" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick force (range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickForce" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Detect button presses made on a touchscreen.", + "fullName": "Multitouch button", + "name": "MultitouchButton", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased" + }, + "parameters": ["Object", "Behavior", ""] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": ["Object", "Behavior", "no"] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": ["Object", "Behavior", "\"Idle\"", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [""] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Pressed\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": ["Object", "Behavior", "+", "1"] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": ["", "Object.Behavior::PropertyTouchId()"] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": ["Object", "Behavior", "\"Released\"", ""] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": ["Object", "Behavior", "yes"] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if button is released.", + "fullName": "Button released", + "functionType": "Condition", + "name": "IsReleased", + "sentence": "Button _PARAM0_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if button is pressed.", + "fullName": "Button pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Button _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark the button _PARAM0_ as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetButtonState" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyButtonIdentifier()", + "GetArgumentAsString(\"ButtonState\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Button identifier", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ButtonIdentifier" + }, + { + "value": "0", + "type": "Number", + "label": "TouchID", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + }, + { + "value": "", + "type": "Boolean", + "label": "Button released", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsReleased" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a platformer character with a multitouch controller.", + "fullName": "Platformer multitouch controller mapper", + "name": "PlatformerMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateLeftKey" + }, + "parameters": ["Object", "Property"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateRightKey" + }, + "parameters": ["Object", "Property"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateUpKey" + }, + "parameters": ["Object", "Property"] + }, + { + "type": { + "value": "PlatformBehavior::SimulateLadderKey" + }, + "parameters": ["Object", "Property"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateDownKey" + }, + "parameters": ["Object", "Property"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsButtonPressed" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJumpButton()", + "\"Down\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateJumpKey" + }, + "parameters": ["Object", "Property"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Platform character behavior", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "Property" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "Controls", + "extraInformation": ["Primary", "Secondary"], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Jump button name", + "description": "", + "group": "Controls", + "extraInformation": [], + "hidden": false, + "name": "JumpButton" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a top-down character with a multitouch controller.", + "fullName": "Top-down multitouch controller mapper", + "name": "TopDownMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": ["Object", "Behavior", "=", "\"Analog\""] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::StickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "SpriteMultitouchJoystick::StickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": ["Object", "Behavior", "=", "\"360°\""] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::StickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "sign(SpriteMultitouchJoystick::StickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier()))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"8 Directions\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": ["Object", "TopDownMovement"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": ["Object", "TopDownMovement"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"UpLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": ["Object", "TopDownMovement"] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"UpRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": ["Object", "TopDownMovement"] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"DownLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": ["Object", "TopDownMovement"] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"DownRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": ["Object", "TopDownMovement"] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": ["Object", "TopDownMovement"] + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::TopDownMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Top-down movement behavior", + "description": "", + "group": "", + "extraInformation": [ + "TopDownMovementBehavior::TopDownMovementBehavior" + ], + "hidden": false, + "name": "TopDownMovement" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": ["Primary", "Secondary"], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "Analog", + "type": "Choice", + "label": "Stick mode", + "description": "", + "group": "Controls", + "extraInformation": ["Analog", "360°", "8 Directions"], + "hidden": false, + "name": "StickMode" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "Joystick", + "description": "Joystick for touchscreens.", + "fullName": "Multitouch Joystick", + "name": "SpriteMultitouchJoystick", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": ["", "Border", "0", "0", ""] + }, + { + "type": { + "value": "Create" + }, + "parameters": ["", "Thumb", "0", "0", ""] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": ["Border", "=", "1"] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": ["Thumb", "=", "2"] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": ["Border", "=", "0", "=", "0"] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": ["Thumb", "=", "0", "=", "0"] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": ["Object", ""] + }, + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": ["Thumb", ""] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreAutour" + }, + "parameters": [ + "Thumb", + "Border", + "Border.MultitouchJoystick::JoystickForce() * Border.Width() / 2", + "Border.MultitouchJoystick::JoystickAngle()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": ["Object", ""] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Pass the object property values to the behavior.", + "fullName": "Update configuration", + "functionType": "Action", + "name": "UpdateConfiguration", + "private": true, + "sentence": "Update the configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyControllerIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyJoystickIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyDeadZoneRadius()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate control of the joystick.", + "fullName": "De/activate control", + "functionType": "Action", + "name": "ActivateControl", + "sentence": "Activate control of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": ["\"ShouldActivate\""] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": ["Border", "MultitouchJoystick", "no"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": ["\"ShouldActivate\""] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": ["Border", "MultitouchJoystick", "yes"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a stick is pressed.", + "fullName": "Stick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Stick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed" + }, + "parameters": ["Border", "MultitouchJoystick", "!="] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (from 0 to 1).", + "fullName": "Joystick force (deprecated)", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "private": true, + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::JoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the strick force (from 0 to 1).", + "fullName": "Stick force", + "functionType": "ExpressionAndCondition", + "name": "StickForce", + "sentence": "the stick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::JoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the stick force on X axis (from -1 at the left to 1 at the right).", + "fullName": "Stick X force", + "functionType": "ExpressionAndCondition", + "name": "StickForceX", + "sentence": "the stick X force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": ["Border.MultitouchJoystick::StickForceX()"] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the stick force on Y axis (from -1 at the top to 1 at the bottom).", + "fullName": "Stick Y force", + "functionType": "ExpressionAndCondition", + "name": "StickForceY", + "sentence": "the stick Y force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": ["Border.MultitouchJoystick::StickForceY()"] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (from -180 to 180).", + "fullName": "Joystick angle (deprecated)", + "functionType": "Expression", + "name": "JoystickAngle", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::JoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the stick is pointing towards (from -180 to 180).", + "fullName": "Stick angle", + "functionType": "Expression", + "name": "StickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::JoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier (1, 2, 3, 4...).", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name of the object.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsString(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyDeadZoneRadius()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "Choice", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": ["Primary", "Secondary"], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": ["Thumb"], + "hidden": true, + "name": "ThumbAnchorOrigin" + }, + { + "value": "Center-center", + "type": "Number", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbAnchorTarget" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": ["Thumb"], + "hidden": true, + "name": "ThumbIsScaledProportionally" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ParentOrigin" + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Thumb", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "Border", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "MultitouchJoystick", + "type": "SpriteMultitouchJoystick::MultitouchJoystick", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "FloatingEnabled": false, + "DeadZoneRadius": 0.4, + "JoystickAngle": 0, + "JoystickForce": 0, + "TouchId": 0, + "TouchIndex": 0 + } + ], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "author": "", + "category": "Movement", + "extensionNamespace": "", + "fullName": "Platformer character animator", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggZD0iTTIzLDExYzIuMiwwLDQtMS44LDQtNHMtMS44LTQtNC00cy00LDEuOC00LDRTMjAuOCwxMSwyMywxMXoiLz4NCgk8cGF0aCBkPSJNMzAuOCwxMi40Yy0wLjMtMC40LTEtMC41LTEuNC0wLjJsLTIuOSwyLjNjLTAuOCwwLjctMiwwLjYtMi43LTAuMmwtNy45LTcuOWMtMS42LTEuNi00LjEtMS42LTUuNywwTDcuMyw5LjMNCgkJYy0wLjQsMC40LTAuNCwxLDAsMS40czEsMC40LDEuNCwwbDIuOC0yLjhjMC44LTAuOCwyLjEtMC44LDIuOSwwbDEuNiwxLjZMMTEuNiwxNGMtMSwxLTEuNCwyLjMtMS4xLDMuN2MwLjIsMS4xLDAuOSwyLDEuOCwyLjYNCgkJbC0xLjYsMS42Yy0wLjQsMC40LTEsMC40LTEuNCwwbC0zLjYtMy42Yy0wLjQtMC40LTEtMC40LTEuNCwwcy0wLjQsMSwwLDEuNGwzLjYsMy42YzAuNiwwLjYsMS4zLDAuOSwyLjEsMC45czEuNi0wLjMsMi4xLTAuOQ0KCQlsMi4xLTIuMWwyLjUsMWMwLjcsMC4zLDEuMiwxLDEuMiwxLjh2NmMwLDAuNiwwLjQsMSwxLDFzMS0wLjQsMS0xdi02YzAtMS42LTEtMy4xLTIuNS0zLjdsLTEuNy0wLjdsNS4yLTUuMmwxLjQsMS40DQoJCWMwLjgsMC44LDEuOCwxLjIsMi45LDEuMmMwLjksMCwxLjgtMC4zLDIuNS0wLjlsMi45LTIuM0MzMS4xLDEzLjQsMzEuMSwxMi44LDMwLjgsMTIuNHoiLz4NCjwvZz4NCjwvc3ZnPg0K", + "name": "PlatformerCharacterAnimator", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Sports and Fitness/Sports and Fitness_training_running_run.svg", + "shortDescription": "Change animations and horizontal flipping of a platformer character automatically.", + "version": "1.0.1", + "description": [ + "Automatically change the animations and horizontal flipping of a platformer character based on movement and interaction with platform objects.", + "", + "The platformer example uses this extension ([open the project online](https://editor.gdevelop.io/?project=example://platformer))." + ], + "origin": { + "identifier": "PlatformerCharacterAnimator", + "name": "gdevelop-extension-store" + }, + "tags": ["animations", "platformer", "flipping", "automatic"], + "authorIds": ["gqDaZjCfevOOxBYkK6zlhtZnXCg1"], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Change animations and horizontal flipping of a platformer character automatically.", + "fullName": "Platformer character animator", + "name": "PlatformerCharacterAnimator", + "objectType": "Sprite", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Flip character based on input from controls", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableHorizontalFlipping" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": ["Object", "yes"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": ["Object", ""] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Change animations", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableAnimationChanges" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyJumpAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsFalling" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyFallAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnFloor" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyRunAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyIdleAnimationName()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyClimbAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": ["Object"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PauseAnimation" + }, + "parameters": ["Object"] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": ["Object", "PlatformerBehavior"] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": ["Object"] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onActivate", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Flip character based on input from controls", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableHorizontalFlipping" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": ["Object", "yes"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Right\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl" + }, + "parameters": [ + "Object", + "PlatformerBehavior", + "\"Left\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FlipX" + }, + "parameters": ["Object", ""] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Change animations", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableAnimationChanges" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyJumpAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsFalling" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyFallAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnFloor" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyRunAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyIdleAnimationName()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyClimbAnimationName()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": ["Object"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "PauseAnimation" + }, + "parameters": ["Object"] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsOnLadder" + }, + "parameters": ["Object", "PlatformerBehavior"] + } + ], + "actions": [ + { + "type": { + "value": "PlayAnimation" + }, + "parameters": ["Object"] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.", + "fullName": "Enable (or disable) automated animation changes", + "functionType": "Action", + "name": "EnableChangingAnimations", + "sentence": "Enable automated animation changes on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableAnimationChanges" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": ["\"EnableAnimationChanges\""] + } + ], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableAnimationChanges" + }, + "parameters": ["Object", "Behavior", "yes"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Change animations automatically", + "name": "EnableAnimationChanges", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automated horizontal flipping of a platform character.", + "fullName": "Enable (or disable) automated horizontal flipping", + "functionType": "Action", + "name": "EnableHorizontalFlipping", + "sentence": "Enable automated horizontal flipping on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableHorizontalFlipping" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": ["\"EnableHorizontalFlipping\""] + } + ], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableHorizontalFlipping" + }, + "parameters": ["Object", "Behavior", "yes"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Enable horizontal flipping", + "name": "EnableHorizontalFlipping", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Idle\" animation name. Do not use quotation marks.", + "fullName": "\"Idle\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetIdleAnimationName", + "sentence": "Set \"Idle\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyIdleAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Move\" animation name. Do not use quotation marks.", + "fullName": "\"Move\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetMoveAnimationName", + "sentence": "Set \"Move\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyRunAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Jump\" animation name. Do not use quotation marks.", + "fullName": "\"Jump\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetJumpAnimationName", + "sentence": "Set \"Jump\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyJumpAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Fall\" animation name. Do not use quotation marks.", + "fullName": "\"Fall\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetFallAnimationName", + "sentence": "Set \"Fall\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyFallAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Set the \"Climb\" animation name. Do not use quotation marks.", + "fullName": "\"Climb\" animation name", + "functionType": "Action", + "group": "Configure animations", + "name": "SetClimbAnimationName", + "sentence": "Set \"Climb\" animation of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyClimbAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"AnimationName\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PlatformerCharacterAnimator::PlatformerCharacterAnimator", + "type": "behavior" + }, + { + "description": "Animation name", + "name": "AnimationName", + "type": "string" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "Enable animation changes", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EnableAnimationChanges" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable horizontal flipping", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EnableHorizontalFlipping" + }, + { + "value": "Idle", + "type": "String", + "label": "\"Idle\" animation name ", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "IdleAnimationName" + }, + { + "value": "Run", + "type": "String", + "label": "\"Run\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "RunAnimationName" + }, + { + "value": "Jump", + "type": "String", + "label": "\"Jump\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "JumpAnimationName" + }, + { + "value": "Fall", + "type": "String", + "label": "\"Fall\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "FallAnimationName" + }, + { + "value": "Climb", + "type": "String", + "label": "\"Climb\" animation name", + "description": "", + "group": "Animation names", + "extraInformation": [], + "hidden": false, + "name": "ClimbAnimationName" + }, + { + "value": "", + "type": "Behavior", + "label": "Platformer character", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "PlatformerBehavior" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "", + "category": "Camera", + "extensionNamespace": "", + "fullName": "Smooth Camera", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQsMTNoLTZjLTEuMSwwLTItMC45LTItMlY1YzAtMS4xLDAuOS0yLDItMmg2YzEuMSwwLDIsMC45LDIsMnY2QzI2LDEyLjEsMjUuMSwxMywyNCwxM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNiw4djEwYzAsMS4xLTAuOSwyLTIsMkg4Yy0xLjEsMC0yLTAuOS0yLTJWOGMwLTEuMSwwLjktMiwyLTJoOCIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjEiIGN5PSI4IiByPSIyIi8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSIxMSIgY3k9IjE2IiByPSIxIi8+DQo8cmVjdCB4PSI5IiB5PSI5IiBjbGFzcz0ic3QwIiB3aWR0aD0iNCIgaGVpZ2h0PSIzIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIyMSwyOSAyMSwyOSAxMSwyOSAxMSwyOSAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjE4LDIwIDE4LDI5IDE0LDI5IDE0LDIwICIvPg0KPHJlY3QgeD0iNyIgeT0iMyIgY2xhc3M9InN0MCIgd2lkdGg9IjQiIGhlaWdodD0iMyIvPg0KPC9zdmc+DQo=", + "name": "SmoothCamera", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Computers and Hardware/Computers and Hardware_camcoder_gopro_go_pro_camera.svg", + "shortDescription": "Smoothly scroll to follow an object.", + "version": "0.3.0", + "description": [ + "The camera follows an object according to:", + "- a frame rate independent catch-up speed to make the scrolling from smooth to strong", + "- a maximum speed to do linear following ([open the project online](https://editor.gdevelop.io/?project=example://platformer-with-tilemap)) or slow down the camera when teleporting the object", + "- a follow-free zone to avoid scrolling on small movements", + "- an offset to see further in one direction", + "- an extra delay and catch-up speed to give an impression of speed (useful for dash)", + "- position forecasting and delay to simulate a cameraman response time", + "", + "A platformer dedicated behavior allows to switch of settings when the character is in air or on the floor. This can be used to stabilize the camera when jumping." + ], + "origin": { + "identifier": "SmoothCamera", + "name": "gdevelop-extension-store" + }, + "tags": ["camera", "scrolling", "follow", "smooth"], + "authorIds": ["IWykYNRvhCZBN3vEgKEbBPOR3Oc2"], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Smoothly scroll to follow an object.", + "fullName": "Smooth Camera", + "name": "SmoothCamera", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update private properties through setters to check their values and initialize state." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetLeftwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyLeftwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetRightwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyRightwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyUpwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyDownwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetLeftwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyLeftwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetRightwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyRightwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyUpwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyDownwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaLeft" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaLeft()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaRight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaRight()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaTop()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaBottom()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyCameraDelay()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::PropertyIsCalledManually" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Move the camera closer to the object. This action must be called after the object has moved for the frame.", + "fullName": "Move the camera closer", + "functionType": "Action", + "name": "MoveCameraCloser", + "sentence": "Move the camera closer to _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The camera following is called with an action, the call from doStepPreEvents must be disabled to avoid to do it twice." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIsCalledManually" + }, + "parameters": ["Object", "Behavior", "yes"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Move the camera closer to the object.", + "fullName": "Do move the camera closer", + "functionType": "Action", + "name": "DoMoveCameraCloser", + "private": true, + "sentence": "Do move the camera closer _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Delaying and forecasting can be used at the same time.\nForecasting only use the positions that are older than the one used for delaying.\nThe behavior uses a position history that is split in 2 arrays:\n- one for delaying the position (from TimeFromStart to TimeFromStart - CamearDelay)\n- one for forecasting the position (from TimeFromStart - CamearDelay to TimeFromStart - CamearDelay - ForecastHistoryDuration" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::UpdateDelayedPosition" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::UpdateForecastedPosition" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "At each frame, the camera must catchup the target by a given ratio (speed)\ncameraX(t) - targetX = (cameraX(t - 1) - targetX) * speed\n\nThe frame rate must not impact on the catch-up speed, we don't want a speed in ratio per frame but a speed ratio per second, like this:\ncameraX(t) - targetX = (cameraX(t - 1s) - targetX) * speed\n\nOk, but we still need to process each frame, we can use a exponent for this:\ncameraX(t) - targetX = (cameraX(t - timeDelta) - targetX) * speed^timeDelta\ncameraX(t) = targetX + (cameraX(t - timeDelta) - targetX) * exp(timeDelta * ln(speed))\n\npow is probably more efficient than precalculated log if the speed is changed continuously but this might be rare enough." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowOnX" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyOldX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "CameraX(Object.Layer(), 0)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + ">", + "Object.Behavior::FreeAreaRight()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaRight()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaRight())\n* exp(TimeDelta() * Object.Behavior::PropertyLogLeftwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + "<", + "Object.Behavior::PropertyOldX() - Object.Behavior::PropertyLeftwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldX() - Object.Behavior::PropertyLeftwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + "<", + "Object.Behavior::FreeAreaLeft()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaLeft()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaLeft())\n* exp(TimeDelta() * Object.Behavior::PropertyLogRightwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + ">", + "Object.Behavior::PropertyOldX() + Object.Behavior::PropertyRightwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldX() + Object.Behavior::PropertyRightwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowOnY" + }, + "parameters": ["Object", "Behavior"] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyOldY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "CameraY(Object.Layer(), 0)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + ">", + "Object.Behavior::FreeAreaBottom()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaBottom()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaBottom())\n* exp(TimeDelta() * Object.Behavior::PropertyLogUpwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + "<", + "Object.Behavior::PropertyOldY() - Object.Behavior::PropertyUpwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldY() - Object.Behavior::PropertyUpwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + "<", + "Object.Behavior::FreeAreaTop()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaTop()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaTop())\n* exp(TimeDelta() * Object.Behavior::PropertyLogDownwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + ">", + "Object.Behavior::PropertyOldY() + Object.Behavior::PropertyDownwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldY() + Object.Behavior::PropertyDownwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay the camera according to a maximum speed and catch up the delay.", + "fullName": "Wait and catch up", + "functionType": "Action", + "name": "WaitAndCatchUp", + "sentence": "Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Maybe the catch-up show be done in constant pixel speed instead of constant time speed." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingEnd" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "TimeFromStart() + GetArgumentAsNumber(\"WaitingDuration\")" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedXMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"WaitingSpeedXMax\")" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedYMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"WaitingSpeedYMax\")" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"CatchUpDuration\")" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Wait and catch up\"", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Waiting duration (in seconds)", + "name": "WaitingDuration", + "type": "expression" + }, + { + "description": "Waiting maximum camera target speed X", + "name": "WaitingSpeedXMax", + "type": "expression" + }, + { + "description": "Waiting maximum camera target speed Y", + "name": "WaitingSpeedYMax", + "type": "expression" + }, + { + "description": "Catch up duration (in seconds)", + "name": "CatchUpDuration", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Draw the targeted and actual camera position.", + "fullName": "Draw debug", + "functionType": "Action", + "name": "DrawDebug", + "sentence": "Draw targeted and actual camera position for _PARAM0_ on _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": ["ShapePainter", "=", "0"] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Path used by the forecasting", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineColor" + }, + "parameters": ["ShapePainter", "\"245;166;35\""] + }, + { + "type": { + "value": "PrimitiveDrawing::BeginFillPath" + }, + "parameters": [ + "ShapePainter", + "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[0])" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::PathLineTo" + }, + "parameters": [ + "ShapePainter", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "+", "1"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::EndFillPath" + }, + "parameters": ["ShapePainter"] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Follow-free area.", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaLeft" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaRight" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaTop" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaBottom" + }, + "parameters": ["Object", "Behavior", "!=", "0"] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::OutlineColor" + }, + "parameters": ["ShapePainter", "\"126;211;33\""] + }, + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "ShapePainter", + "Object.Behavior::FreeAreaLeft() - 1", + "Object.Behavior::FreeAreaTop() - 1", + "Object.Behavior::FreeAreaRight() + 1", + "Object.Behavior::FreeAreaBottom() + 1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Linear regression vector used by the forecasting.", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::OutlineColor" + }, + "parameters": ["ShapePainter", "\"208;2;27\""] + }, + { + "type": { + "value": "PrimitiveDrawing::LineV2" + }, + "parameters": [ + "ShapePainter", + "Object.Behavior::PropertyProjectedOldestX()", + "Object.Behavior::PropertyProjectedOldestY()", + "Object.Behavior::PropertyProjectedNewestX()", + "Object.Behavior::PropertyProjectedNewestY()", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Targeted and actual camera position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "ShapePainter", + "Object.Behavior::PropertyForecastedX()", + "Object.Behavior::PropertyForecastedY()", + "3" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::LineV2" + }, + "parameters": [ + "ShapePainter", + "CameraX(Object.Layer(), 0)", + "CameraY(Object.Layer(), 0) - 4", + "CameraX(Object.Layer(), 0)", + "CameraY(Object.Layer(), 0) + 4", + "1" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::LineV2" + }, + "parameters": [ + "ShapePainter", + "CameraX(Object.Layer(), 0) - 4", + "CameraY(Object.Layer(), 0)", + "CameraX(Object.Layer(), 0) + 4", + "CameraY(Object.Layer(), 0)", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Shape painter", + "name": "ShapePainter", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the following on X axis.", + "fullName": "Follow on X", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowOnX", + "sentence": "The camera follows _PARAM0_ on X axis: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": ["\"FollowOnX\""] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX" + }, + "parameters": ["Object", "Behavior", "yes"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow on X axis", + "name": "FollowOnX", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the following on Y axis.", + "fullName": "Follow on Y", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowOnY", + "sentence": "The camera follows _PARAM0_ on Y axis: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": ["\"FollowOnY\""] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY" + }, + "parameters": ["Object", "Behavior", "yes"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow on Y axis", + "name": "FollowOnY", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area right border.", + "fullName": "Follow free area right border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaRight", + "sentence": "Change the camera follow free area right border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"SetFollowFreeAreaRight\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area right border", + "name": "SetFollowFreeAreaRight", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area left border.", + "fullName": "Follow free area left border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaLeft", + "sentence": "Change the camera follow free area left border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"SetFollowFreeAreaLeft\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area left border", + "name": "SetFollowFreeAreaLeft", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area top border.", + "fullName": "Follow free area top border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaTop", + "sentence": "Change the camera follow free area top border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"FollowFreeAreaTop\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area top border", + "name": "FollowFreeAreaTop", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area bottom border.", + "fullName": "Follow free area bottom border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaBottom", + "sentence": "Change the camera follow free area bottom border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"SetFollowFreeAreaBottom\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area bottom border", + "name": "SetFollowFreeAreaBottom", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera leftward maximum speed (in pixels per second).", + "fullName": "Leftward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetLeftwardSpeedMax", + "sentence": "Change the camera leftward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Leftward maximum speed (in ratio per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera rightward maximum speed (in pixels per second).", + "fullName": "Rightward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetRightwardSpeedMax", + "sentence": "Change the camera rightward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Rightward maximum speed (in pixels per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera upward maximum speed (in pixels per second).", + "fullName": "Upward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetUpwardSpeedMax", + "sentence": "Change the camera upward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Upward maximum speed (in pixels per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera downward maximum speed (in pixels per second).", + "fullName": "Downward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetDownwardSpeedMax", + "sentence": "Change the camera downward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Downward maximum speed (in pixels per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera leftward catch-up speed (in ratio per second).", + "fullName": "Leftward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetLeftwardSpeed", + "sentence": "Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"LeftwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogLeftwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyLeftwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Leftward catch-up speed (in ratio per second)", + "name": "LeftwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera rightward catch-up speed (in ratio per second).", + "fullName": "Rightward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetRightwardSpeed", + "sentence": "Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyRightwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"RightwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogRightwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyRightwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Rightward catch-up speed (in ratio per second)", + "name": "RightwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera downward catch-up speed (in ratio per second).", + "fullName": "Downward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetDownwardSpeed", + "sentence": "Change the camera downward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"DownwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogDownwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyDownwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Downward catch-up speed (in ratio per second)", + "name": "DownwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera upward catch-up speed (in ratio per second).", + "fullName": "Upward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetUpwardSpeed", + "sentence": "Change the camera upward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"UpwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogUpwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyUpwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Upward catch-up speed (in ratio per second)", + "name": "UpwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the camera offset on X axis of the object. This is not the current difference between the object and the camera position.", + "fullName": "Camera offset X", + "functionType": "ExpressionAndCondition", + "group": "Camera configuration", + "name": "OffsetX", + "sentence": "the camera offset on X axis", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": ["Object.Behavior::PropertyCameraOffsetX()"] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OffsetX", + "name": "SetOffsetXOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera offset on X axis of an object.", + "fullName": "Camera Offset X", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetOffsetX", + "private": true, + "sentence": "Change the camera offset on X axis of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Deprecated use SetOffsetXOp instead." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetOffsetXOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"CameraOffsetX\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Camera offset X", + "name": "CameraOffsetX", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.", + "fullName": "Camera offset Y", + "functionType": "ExpressionAndCondition", + "group": "Camera configuration", + "name": "OffsetY", + "sentence": "the camera offset on Y axis", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": ["Object.Behavior::PropertyCameraOffsetY()"] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OffsetY", + "name": "SetOffsetYOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Deprecated use SetOffsetYOp instead." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera offset on Y axis of an object.", + "fullName": "Camera Offset Y", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetOffsetY", + "private": true, + "sentence": "Change the camera offset on Y axis of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetOffsetYOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"CameraOffsetY\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Camera offset Y", + "name": "CameraOffsetY", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera forecast time (in seconds).", + "fullName": "Forecast time", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetForecastTime", + "sentence": "Change the camera forecast time of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(0, GetArgumentAsNumber(\"ForecastTime\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Forecast time", + "name": "ForecastTime", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera delay (in seconds).", + "fullName": "Camera delay", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetCameraDelay", + "sentence": "Change the camera delay of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(0, GetArgumentAsNumber(\"CameraDelay\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Camera delay", + "name": "CameraDelay", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area left border X.", + "fullName": "Free area left", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaLeft", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedX() + Object.Behavior::PropertyCameraOffsetX() - Object.Behavior::PropertyFollowFreeAreaLeft()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area right border X.", + "fullName": "Free area right", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaRight", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedX() + Object.Behavior::PropertyCameraOffsetX() + Object.Behavior::PropertyFollowFreeAreaRight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area bottom border Y.", + "fullName": "Free area bottom", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaBottom", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedY() + Object.Behavior::PropertyCameraOffsetY() + Object.Behavior::PropertyFollowFreeAreaBottom()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area top border Y.", + "fullName": "Free area top", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaTop", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedY() + Object.Behavior::PropertyCameraOffsetY() - Object.Behavior::PropertyFollowFreeAreaTop()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Update delayed position and delayed history. This is called in doStepPreEvents.", + "fullName": "Update delayed position", + "functionType": "Action", + "group": "Private", + "name": "UpdateDelayedPosition", + "private": true, + "sentence": "Update delayed position and delayed history of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add the previous position to have enough (2) positions to evaluate the extra delay for waiting mode." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ObjectTime)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime", + "TimeFromStart()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX", + "Object.Behavior::PropertyDelayedCenterX()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY", + "Object.Behavior::PropertyDelayedCenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use the object center when no delay is asked." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.CenterX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.CenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsDelayed" + }, + "parameters": ["Object", "Behavior", ""] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition" + }, + "parameters": [ + "Object", + "Behavior", + "TimeFromStart()", + "Object.CenterX()", + "Object.CenterY()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsDelayed" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": ["Object", "Behavior", ""] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime", + "TimeFromStart()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX", + "Object.CenterX()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY", + "Object.CenterY()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Remove history entries that are too old to be useful for delaying and pass it to the history for forecasting." + }, + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ObjectTime)", + ">=", + "2" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime[1]", + "<", + "TimeFromStart() - Object.Behavior::CurrentDelay()" + ] + } + ], + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Variable(__SmoothCamera.ObjectTime[0])", + "Object.Variable(__SmoothCamera.ObjectX[0])", + "Object.Variable(__SmoothCamera.ObjectY[0])", + "" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Don't move the camera if there is not enough history." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Variable(__SmoothCamera.ObjectX[0])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Variable(__SmoothCamera.ObjectY[0])" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ObjectTime)", + ">=", + "2" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime[0]", + "<", + "TimeFromStart() - Object.Behavior::CurrentDelay()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add the extra delay that could be needed to respect the speed limit in waiting mode.\n\nspeedRatio = min(speedMaxX / historySpeedX, speedMaxY / historySpeedY)\ndelay += min(0, timeDelta * (1 - speedRatio))" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": ["Object", "Behavior", ""] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "max(0, TimeDelta() * (1 - min(Object.Behavior::PropertyWaitingSpeedXMax() * abs(Object.Variable(__SmoothCamera.ObjectX[1]) - Object.Variable(__SmoothCamera.ObjectX[0])), Object.Behavior::PropertyWaitingSpeedYMax() * abs(Object.Variable(__SmoothCamera.ObjectY[1]) - Object.Variable(__SmoothCamera.ObjectY[0]))) / (Object.Variable(__SmoothCamera.ObjectTime[1]) - Object.Variable(__SmoothCamera.ObjectTime[0]))))" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Extra delay: \" + ToString(Object.Behavior::PropertyCameraExtraDelay())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The time with delay is now between the first 2 indexes" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Variable(__SmoothCamera.ObjectX[1]), Object.Variable(__SmoothCamera.ObjectX[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Variable(__SmoothCamera.ObjectY[1]), Object.Variable(__SmoothCamera.ObjectY[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsDelayed" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": ["Object", "Behavior", ""] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariableClearChildren" + }, + "parameters": ["Object", "__SmoothCamera.ObjectTime"] + }, + { + "type": { + "value": "ObjectVariableClearChildren" + }, + "parameters": ["Object", "__SmoothCamera.ObjectX"] + }, + { + "type": { + "value": "ObjectVariableClearChildren" + }, + "parameters": ["Object", "__SmoothCamera.ObjectY"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyCameraExtraDelay() / Object.Behavior::PropertyCameraDelayCatchUpDuration()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Start to catch up\"", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": ["Object", "Behavior", ""] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyCameraExtraDelay" + }, + "parameters": ["Object", "Behavior", ">", "0"] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Object.Behavior::PropertyCameraExtraDelay() -Object.Behavior::PropertyCameraDelayCatchUpSpeed() * TimeDelta())" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Catching up delay: \" + ToString(Object.Behavior::PropertyCameraExtraDelay())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the camera following target is delayed from the object.", + "fullName": "Camera is delayed", + "functionType": "Condition", + "name": "IsDelayed", + "private": true, + "sentence": "The camera of _PARAM0_ is delayed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::CurrentDelay()", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the current camera delay.", + "fullName": "Current delay", + "functionType": "Expression", + "name": "CurrentDelay", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCameraDelay() + Object.Behavior::PropertyCameraExtraDelay()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the camera following is waiting at a reduced speed.", + "fullName": "Camera is waiting", + "functionType": "Condition", + "name": "IsWaiting", + "private": true, + "sentence": "The camera of _PARAM0_ is waiting", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyWaitingEnd" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "TimeFromStart()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": ["True"] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.", + "fullName": "Add forecast history position", + "functionType": "Action", + "group": "Private", + "name": "AddForecastHistoryPosition", + "private": true, + "sentence": "Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration" + }, + "parameters": ["Object", "Behavior", ">", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastTime" + }, + "parameters": ["Object", "Behavior", ">", "0"] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryTime", + "GetArgumentAsNumber(\"Time\")" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryX", + "GetArgumentAsNumber(\"ObjectX\")" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryY", + "GetArgumentAsNumber(\"ObjectY\")" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Remove history entries that are too old to be useful.\nKeep at least 2 positions because no forecast can be done with less positions." + }, + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", + ">=", + "3" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryTime[0]", + "<", + "TimeFromStart() - Object.Behavior::PropertyCameraDelay() - Object.Behavior::PropertyCameraExtraDelay() - Object.Behavior::PropertyForecastHistoryDuration()" + ] + } + ], + "conditions": [], + "actions": [ + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryTime", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryX", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryY", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Time", + "name": "Time", + "type": "expression" + }, + { + "description": "Object X", + "name": "ObjectX", + "type": "expression" + }, + { + "description": "Object Y", + "name": "ObjectY", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Update forecasted position. This is called in doStepPreEvents.", + "fullName": "Update forecasted position", + "functionType": "Action", + "group": "Private", + "name": "UpdateForecastedPosition", + "private": true, + "sentence": "Update forecasted position of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Simple linear regression\ny = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX\n\nNote than we could use only one position every N positions to reduce the process time,\nbut if we really need efficient process JavaScript and circular queues are a must." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", + ">=", + "2" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration" + }, + "parameters": ["Object", "Behavior", ">", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastTime" + }, + "parameters": ["Object", "Behavior", ">", "0"] + } + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Mean X", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "+", "1"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX" + }, + "parameters": [ + "Object", + "Behavior", + "/", + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Mean Y", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "+", "1"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY" + }, + "parameters": [ + "Object", + "Behavior", + "/", + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Mean: \" + ToString(Object.Behavior::PropertyForecastHistoryMeanX()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryMeanY())", + "", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Variance and Covariance", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "VarianceX = sum((X[i] - MeanX)²)\nVarianceY = sum((Y[i] - MeanY)²)\nCovariance = sum((X[i] - MeanX) * (Y[i] - MeanY))" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance" + }, + "parameters": ["Object", "Behavior", "=", "0"] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "=", "0"] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "pow(Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanX(), 2)" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "pow(Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanY(), 2)" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "(Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanX())\n*\n(Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanY())" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": ["Object", "Behavior", "+", "1"] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Variances: \" + ToString(Object.Behavior::PropertyForecastHistoryVarianceX()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryVarianceY()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryCovariance())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + "<", + "1" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + ">=", + "1" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())", + ">=", + "1" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Linear function parameters", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "y = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + ">=", + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryCovariance() / Object.Behavior::PropertyForecastHistoryVarianceX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryMeanY() - Object.Behavior::PropertyForecastHistoryLinearA() * Object.Behavior::PropertyForecastHistoryMeanX()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Linear: \" + ToString(Object.Behavior::PropertyForecastHistoryLinearA()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryLinearB())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Projection", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])", + "" + ] + } + ] + } + ], + "parameters": [] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Axis permutation to avoid a ratio between 2 numbers near 0." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + "<", + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryCovariance() / Object.Behavior::PropertyForecastHistoryVarianceY()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryMeanX() - Object.Behavior::PropertyForecastHistoryLinearA() * Object.Behavior::PropertyForecastHistoryMeanY()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Linear: \" + ToString(Object.Behavior::PropertyForecastHistoryLinearA()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryLinearB())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Projection", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Variable(__SmoothCamera.ForecastHistoryY[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Permute back axis" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedOldestX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedOldestY()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyIndex()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestY()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyIndex()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Oldest: \" + ToString(Object.Behavior::PropertyProjectedOldestX()) + \" \" + ToString(Object.Behavior::PropertyProjectedOldestY())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Newest: \" + ToString(Object.Behavior::PropertyProjectedNewestX()) + \" \" + ToString(Object.Behavior::PropertyProjectedNewestY())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Forecasted position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestX() + ( Object.Behavior::PropertyProjectedNewestX() - Object.Behavior::PropertyProjectedOldestX()) * Object.Behavior::ForecastTimeRatio()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestY() + ( Object.Behavior::PropertyProjectedNewestY() - Object.Behavior::PropertyProjectedOldestY()) * Object.Behavior::ForecastTimeRatio()" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Forecasted: \" + ToString(Object.Behavior::PropertyForecastedX()) + \" \" + ToString(Object.Behavior::PropertyForecastedY())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.", + "fullName": "Project history ends", + "functionType": "Action", + "group": "Private", + "name": "ProjectHistoryEnds", + "private": true, + "sentence": "Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Perpendicular line:\npA = -1/a; \npB = -pA * x + y\n\nIntersection:\n/ ProjectedY = a * ProjectedX + b\n\\ ProjectedY = pA * ProjectedX + b\n\nSolution that is cleaned out from indeterminism (like 0 / 0 or infinity / infinity):\nProjectedX= (x + (y - b) * a) / (a² + 1)\nProjectedY = y + (x * a - y + b) / (a² + 1)" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "(GetArgumentAsNumber(\"NewestX\") + (GetArgumentAsNumber(\"NewestY\") - Object.Behavior::PropertyForecastHistoryLinearB()) * Object.Behavior::PropertyForecastHistoryLinearA()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"NewestY\") + (GetArgumentAsNumber(\"NewestX\") * Object.Behavior::PropertyForecastHistoryLinearA() - GetArgumentAsNumber(\"NewestY\") \n+ Object.Behavior::PropertyForecastHistoryLinearB()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "(GetArgumentAsNumber(\"OldestX\") + (GetArgumentAsNumber(\"OldestY\") - Object.Behavior::PropertyForecastHistoryLinearB()) * Object.Behavior::PropertyForecastHistoryLinearA()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"OldestY\") + (GetArgumentAsNumber(\"OldestX\") * Object.Behavior::PropertyForecastHistoryLinearA() - GetArgumentAsNumber(\"OldestY\") \n+ Object.Behavior::PropertyForecastHistoryLinearB()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "OldestX", + "name": "OldestX", + "type": "expression" + }, + { + "description": "OldestY", + "name": "OldestY", + "type": "expression" + }, + { + "description": "Newest X", + "name": "NewestX", + "type": "expression" + }, + { + "description": "Newest Y", + "name": "NewestY", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.", + "fullName": "Forecast time ratio", + "functionType": "Expression", + "group": "Private", + "name": "ForecastTimeRatio", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "- Object.Behavior::PropertyForecastTime() / (Object.Variable(__SmoothCamera.ForecastHistoryTime[0]) - Object.Variable(__SmoothCamera.ForecastHistoryTime[Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime) - 1]))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0.9", + "type": "Number", + "label": "Leftward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "LeftwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Rightward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "RightwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Upward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "UpwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Downward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "DownwardSpeed" + }, + { + "value": "true", + "type": "Boolean", + "label": "Follow on X axis", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "FollowOnX" + }, + { + "value": "true", + "type": "Boolean", + "label": "Follow on Y axis", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "FollowOnY" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area left border", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "FollowFreeAreaLeft" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area right border", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "FollowFreeAreaRight" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area top border", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "FollowFreeAreaTop" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area bottom border", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "FollowFreeAreaBottom" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Camera offset X", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "CameraOffsetX" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Camera offset Y", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "CameraOffsetY" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Camera delay", + "description": "", + "group": "Timing", + "extraInformation": [], + "hidden": false, + "name": "CameraDelay" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Forecast time", + "description": "", + "group": "Timing", + "extraInformation": [], + "hidden": false, + "name": "ForecastTime" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Forecast history duration", + "description": "", + "group": "Timing", + "extraInformation": [], + "hidden": false, + "name": "ForecastHistoryDuration" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogLeftwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogRightwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogDownwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogUpwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "DelayedCenterX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "DelayedCenterY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryMeanX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryMeanY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryVarianceX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryCovariance" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryLinearA" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryLinearB" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastedX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastedY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedNewestX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedNewestY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedOldestX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedOldestY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryVarianceY" + }, + { + "value": "", + "type": "Number", + "label": "Index (local variable)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Index" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CameraDelayCatchUpSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CameraExtraDelay" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WaitingSpeedXMax" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WaitingSpeedYMax" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WaitingEnd" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CameraDelayCatchUpDuration" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Leftward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "LeftwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Rightward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "RightwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Upward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "UpwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Downward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "DownwardSpeedMax" + }, + { + "value": "", + "type": "Number", + "label": "OldX (local variable)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "OldX" + }, + { + "value": "", + "type": "Number", + "label": "OldY (local variable)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "OldY" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsCalledManually" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Smoothly scroll to follow a character and stabilize the camera when jumping.", + "fullName": "Smooth platformer camera", + "name": "SmoothPlatformerCamera", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsJumping" + }, + "parameters": ["Object", "PlatformerCharacter"] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsFalling" + }, + "parameters": ["Object", "PlatformerCharacter"] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorFollowFreeAreaTop()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorFollowFreeAreaBottom()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorUpwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorDownwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorUpwardSpeedMax()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorDownwardSpeedMax()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": ["Object", "PlatformerCharacter"] + }, + { + "type": { + "value": "PlatformBehavior::IsFalling" + }, + "parameters": ["Object", "PlatformerCharacter"] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirFollowFreeAreaTop()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirFollowFreeAreaBottom()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirUpwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirDownwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirUpwardSpeedMax()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirDownwardSpeedMax()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothPlatformerCamera", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Platformer character behavior", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "PlatformerCharacter" + }, + { + "value": "", + "type": "Behavior", + "label": "Smooth camera behavior", + "description": "", + "group": "", + "extraInformation": ["SmoothCamera::SmoothCamera"], + "hidden": false, + "name": "SmoothCamera" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JumpOriginY" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area top in the air", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "AirFollowFreeAreaTop" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area bottom in the air", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "AirFollowFreeAreaBottom" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area top on the floor", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "FloorFollowFreeAreaTop" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area bottom on the floor", + "description": "", + "group": "Position", + "extraInformation": [], + "hidden": false, + "name": "FloorFollowFreeAreaBottom" + }, + { + "value": "0.95", + "type": "Number", + "label": "Upward speed in the air (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "AirUpwardSpeed" + }, + { + "value": "0.95", + "type": "Number", + "label": "Downward speed in the air (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "AirDownwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Upward speed on the floor (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "FloorUpwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Downward speed on the floor (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "hidden": false, + "name": "FloorDownwardSpeed" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Upward maximum speed in the air", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "AirUpwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Downward maximum speed in the air", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "AirDownwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Upward maximum speed on the floor", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "FloorUpwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Downward maximum speed on the floor", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "hidden": false, + "name": "FloorDownwardSpeedMax" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + } + ], + "externalLayouts": [], + "externalSourceFiles": [] +} diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json new file mode 100644 index 0000000..0c5e019 --- /dev/null +++ b/tutorials/in-app/object3d.json @@ -0,0 +1,801 @@ +{ + "id": "object3d", + "editorSwitches": { + "Start": { + "editor": "Scene", + "scene": "gameScene" + }, + "SwitchToEvents1": { + "editor": "EventsSheet", + "scene": "gameScene" + }, + "SwitchToScene1": { + "editor": "Scene", + "scene": "gameScene" + } + }, + "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/object3d/game.json", + "initialProjectData": { + "gameScene": "GameScene" + }, + "endDialog": { + "content": [ + { + "messageByLocale": { + "en": "# You've finished this lesson!", + "fr": "# Vous avez terminé cette leçon !", + "es": "# ¡Has terminado esta lección!", + "pt": "# Você terminou esta lição!", + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", + "ar": "# لقد أنهيت هذا الدرس!" + } + }, + { + "messageByLocale": { + "en": "Well done, in this tutorial you've learned how to:", + "fr": "Bien joué, voici ce que vous avez appris :", + "es": "¡Bien hecho! En este tutorial, has aprendido:", + "pt": "Bom trabalho, neste tutorial você aprendeu:", + "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + } + }, + { + "messageByLocale": { + "en": "- Create a 3D Box\n\n- Add a behavior\n\n- Update the elevation of a 3D box", + "fr": "- Créer une boîte 3D\n\n- Ajouter un comportement\n\n- Mettre à jour l'élévation d'une boîte 3D", + "es": "- Crear una caja 3D\n\n- Agregar un comportamiento\n\n- Actualizar la elevación de una caja 3D", + "pt": "- Criar uma caixa 3D\n\n- Adicionar um comportamento\n\n- Atualizar a elevação de uma caixa 3D", + "th": "- สร้างกล่อง 3D\n\n- เพิ่มพฤติกรรม\n\n- อัปเดตความสูงของกล่อง 3D", + "ar": "- إنشاء مربع ثلاثي الأبعاد\n\n- إضافة سلوك\n\n- تحديث ارتفاع مربع ثلاثي الأبعاد" + } + }, + { + "messageByLocale": { + "en": "Now try to get the character to the goal button, while avoiding the red objects!", + "fr": "Maintenant, essayez d'amener le personnage jusqu'au bouton objectif, tout en évitant les objets rouges !", + "es": "¡Ahora intenta llevar al personaje al botón de objetivo, evitando los objetos rojos!", + "pt": "Agora tente levar o personagem até o botão de objetivo, evitando os objetos vermelhos!", + "th": "ลองพยายามนำตัวละครไปยังปุ่มเป้าหมาย โดยหลีกเลี่ยงวัตถุสีแดง!", + "ar": "الآن حاول الوصول بالشخصية إلى زر الهدف، مع تجنب الأشياء الحمراء!" + } + } + ] + }, + "flow": [ + { + "id": "Start", + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "Let's go!", + "fr": "C'est parti !", + "es": "¡Vamos!", + "pt": "Vamos lá!", + "th": "ไปกันเลย!", + "ar": "لنبدأ!" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "This game is a platformer, where you have to get the character to the goal button, while avoiding the red objects.\n\nBut it's not finished yet, so let's complete it!", + "fr": "Ce jeu est un jeu de plateforme, où vous devez amener le personnage jusqu'au bouton objectif, tout en évitant les objets rouges.\n\nMais il n'est pas encore terminé, alors terminons-le !", + "es": "Este juego es un juego de plataformas, donde tienes que llevar al personaje al botón de objetivo, evitando los objetos rojos.\n\nPero aún no está terminado, ¡así que vamos a completarlo!", + "pt": "Este jogo é um jogo de plataforma, onde você tem que levar o personagem até o botão de objetivo, evitando os objetos vermelhos.\n\nMas ainda não está terminado, então vamos completá-lo!", + "th": "เกมนี้เป็นเกมแพลตฟอร์มเมอร์ ที่คุณต้องพาตัวละครไปยังปุ่มเป้าหมาย โดยหลีกเลี่ยงวัตถุสีแดง\n\nแต่ยังไม่เสร็จสิ้น ดังนั้นเรามาทำให้เสร็จสิ้นกันเถอะ!", + "ar": "هذه اللعبة هي لعبة منصات، حيث يجب عليك الوصول بالشخصية إلى زر الهدف، مع تجنب الأشياء الحمراء.\n\nولكنها لم تنته بعد، لذا دعنا نكملها!" + } + } + } + }, + { + "elementToHighlightId": "#toolbar-open-objects-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-new-object-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **Objects** panel.", + "fr": "Ouvrez le panneau des **objets**.", + "es": "Abre el panel de **objetos**.", + "pt": "Abra o painel de **objetos**.", + "th": "เปิดแผงควบคุม **วัตถุ**", + "ar": "فتح لوحة **الكائنات**." + } + }, + "placement": "bottom" + }, + "skippable": true + }, + { + "elementToHighlightId": "#add-new-object-button", + "nextStepTrigger": { + "presenceOfElement": "#new-object-dialog" + }, + "tooltip": { + "placement": "top", + "description": { + "messageByLocale": { + "en": "This game does not have any platforms for our character, so let's add multiple **3D boxes** to create a platform!", + "fr": "Ce jeu n'a pas de plateformes pour notre personnage, alors ajoutons plusieurs **boîtes 3D** pour créer une plateforme !", + "es": "Este juego no tiene ninguna plataforma para nuestro personaje, ¡así que agreguemos varias **cajas 3D** para crear una plataforma!", + "pt": "Este jogo não tem nenhuma plataforma para o nosso personagem, então vamos adicionar várias **caixas 3D** para criar uma plataforma!", + "th": "เกมนี้ไม่มีแพลตฟอร์มสำหรับตัวละครของเรา ดังนั้นเรามาเพิ่ม **กล่อง 3D** หลาย ๆ กล่องเพื่อสร้างแพลตฟอร์ม!", + "ar": "هذه اللعبة ليس لديها أي منصات لشخصيتنا، لذا دعنا نضيف عدة **صناديق ثلاثية الأبعاد** لإنشاء منصة!" + } + } + } + }, + { + "elementToHighlightId": "#new-object-from-scratch-tab", + "nextStepTrigger": { + "presenceOfElement": "#object-category-Scene3D--Cube3DObject" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We'll create a 3D Box from scratch.", + "fr": "Nous allons créer une boîte 3D à partir de zéro.", + "es": "Crearemos una caja 3D desde cero.", + "pt": "Vamos criar uma caixa 3D do zero.", + "th": "เราจะสร้างกล่อง 3D จากต้นฉบับ", + "ar": "سنقوم بإنشاء صندوق ثلاثي الأبعاد من البداية." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#object-category-Scene3D--Cube3DObject", + "nextStepTrigger": { + "presenceOfElement": "#object-name" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **3D Box** object", + "fr": "Sélectionnez l'objet **Boîte 3D**", + "es": "Selecciona el objeto **Caja 3D**", + "pt": "Selecione o objeto **Caixa 3D**", + "th": "เลือกวัตถุ **กล่อง 3D**", + "ar": "حدد كائن **صندوق ثلاثي الأبعاد**" + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#object-name", + "nextStepTrigger": { + "valueEquals": "Platform" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the object name to **Platform**.", + "fr": "Utilisez **Platform** comme nom d'objet.", + "es": "Cambia el nombre del objeto a **Platform**.", + "pt": "Altere o nome do objeto para **Plataforma**.", + "th": "เปลี่ยนชื่อวัตถุเป็น **แพลตฟอร์ม**", + "ar": "غير اسم الكائن إلى **Platform**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-width", + "nextStepTrigger": { + "valueEquals": "128" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the width to **128**.", + "fr": "Changez la largeur à **128**.", + "es": "Cambia el ancho a **128**.", + "pt": "Altere a largura para **128**.", + "th": "เปลี่ยนความกว้างเป็น **128**", + "ar": "غير العرض إلى **128**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-height", + "nextStepTrigger": { + "valueEquals": "128" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the height to **128**.", + "fr": "Changez la hauteur à **128**.", + "es": "Cambia la altura a **128**.", + "pt": "Altere a altura para **128**.", + "th": "เปลี่ยนความสูงเป็น **128**", + "ar": "غير الارتفاع إلى **128**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-depth", + "nextStepTrigger": { + "valueEquals": "128" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Change the depth to **128**.", + "fr": "Changez la profondeur à **128**.", + "es": "Cambia la profundidad a **128**.", + "pt": "Altere a profundidade para **128**.", + "th": "เปลี่ยนความลึกเป็น **128**", + "ar": "غير العمق إلى **128**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-frontFaceResourceName", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the front face of the box with the image **BlackCheckered.png**.", + "fr": "Mettez à jour la face avant de la boîte avec l'image **BlackCheckered.png**.", + "es": "Actualicemos la cara frontal de la caja con la imagen **BlackCheckered.png**.", + "pt": "Vamos atualizar a face frontal da caixa com a imagem **BlackCheckered.png**.", + "th": "มาอัปเดตหน้าด้านหน้าของกล่องด้วยภาพ **BlackCheckered.png**", + "ar": "لنقم بتحديث الوجه الأمامي للصندوق بالصورة **BlackCheckered.png**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-frontFaceResourceRepeat", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "**Check** the box to repeat the image.", + "fr": "**Cochez** la case pour répéter l'image.", + "es": "**Marca** la casilla para repetir la imagen.", + "pt": "**Marque** a caixa para repetir a imagem.", + "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", + "ar": "**حدد** الخانة لتكرار الصورة." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-backFaceResourceName", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the back face of the box with the image **WhiteCheckered.png**.", + "fr": "Mettez à jour la face arrière de la boîte avec l'image **WhiteCheckered.png**.", + "es": "Actualicemos la cara trasera de la caja con la imagen **WhiteCheckered.png**.", + "pt": "Vamos atualizar a face traseira da caixa com a imagem **WhiteCheckered.png**.", + "th": "มาอัปเดตหน้าด้านหลังของกล่องด้วยภาพ **WhiteCheckered.png**", + "ar": "لنقم بتحديث الوجه الخلفي للصندوق بالصورة **WhiteCheckered.png**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-backFaceResourceRepeat", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "**Check** the box to repeat the image.", + "fr": "**Cochez** la case pour répéter l'image.", + "es": "**Marca** la casilla para repetir la imagen.", + "pt": "**Marque** a caixa para repetir a imagem.", + "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", + "ar": "**حدد** الخانة لتكرار الصورة." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-leftFaceResourceName", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the left face of the box with the image **WhiteCheckered.png**.", + "fr": "Mettez à jour la face gauche de la boîte avec l'image **WhiteCheckered.png**.", + "es": "Actualicemos la cara izquierda de la caja con la imagen **WhiteCheckered.png**.", + "pt": "Vamos atualizar a face esquerda da caixa com a imagem **WhiteCheckered.png**.", + "th": "มาอัปเดตหน้าด้านซ้ายของกล่องด้วยภาพ **WhiteCheckered.png**", + "ar": "لنقم بتحديث الوجه الأيسر للصندوق بالصورة **WhiteCheckered.png**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-leftFaceResourceRepeat", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "**Check** the box to repeat the image.", + "fr": "**Cochez** la case pour répéter l'image.", + "es": "**Marca** la casilla para repetir la imagen.", + "pt": "**Marque** a caixa para repetir a imagem.", + "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", + "ar": "**حدد** الخانة لتكرار الصورة." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-rightFaceResourceName", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the right face of the box with the image **WhiteCheckered.png**.", + "fr": "Mettez à jour la face droite de la boîte avec l'image **WhiteCheckered.png**.", + "es": "Actualicemos la cara derecha de la caja con la imagen **WhiteCheckered.png**.", + "pt": "Vamos atualizar a face direita da caixa com a imagem **WhiteCheckered.png**.", + "th": "มาอัปเดตหน้าด้านขวาของกล่องด้วยภาพ **WhiteCheckered.png**", + "ar": "لنقم بتحديث الوجه الأيمن للصندوق بالصورة **WhiteCheckered.png**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-rightFaceResourceRepeat", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "**Check** the box to repeat the image.", + "fr": "**Cochez** la case pour répéter l'image.", + "es": "**Marca** la casilla para repetir la imagen.", + "pt": "**Marque** a caixa para repetir a imagem.", + "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", + "ar": "**حدد** الخانة لتكرار الصورة." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-topFaceResourceName", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the top face of the box with the image **WhiteCheckered.png**.", + "fr": "Mettez à jour la face du dessus de la boîte avec l'image **WhiteCheckered.png**.", + "es": "Actualicemos la cara superior de la caja con la imagen **WhiteCheckered.png**.", + "pt": "Vamos atualizar a face superior da caixa com a imagem **WhiteCheckered.png**.", + "th": "มาอัปเดตหน้าด้านบนของกล่องด้วยภาพ **WhiteCheckered.png**", + "ar": "لنقم بتحديث الوجه العلوي للصندوق بالصورة **WhiteCheckered.png**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-topFaceResourceRepeat", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "**Check** the box to repeat the image.", + "fr": "**Cochez** la case pour répéter l'image.", + "es": "**Marca** la casilla para repetir la imagen.", + "pt": "**Marque** a caixa para repetir a imagem.", + "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", + "ar": "**حدد** الخانة لتكرار الصورة." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-bottomFaceResourceName", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's update the bottom face of the box with the image **WhiteCheckered.png**.", + "fr": "Mettez à jour la face du dessous de la boîte avec l'image **WhiteCheckered.png**.", + "es": "Actualicemos la cara inferior de la caja con la imagen **WhiteCheckered.png**.", + "pt": "Vamos atualizar a face inferior da caixa com a imagem **WhiteCheckered.png**.", + "th": "มาอัปเดตหน้าด้านล่างของกล่องด้วยภาพ **WhiteCheckered.png**", + "ar": "لنقم بتحديث الوجه السفلي للصندوق بالصورة **WhiteCheckered.png**." + } + }, + "placement": "top" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#cube3d-object-bottomFaceResourceRepeat", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "**Check** the box to repeat the image.", + "fr": "**Cochez** la case pour répéter l'image.", + "es": "**Marca** la casilla para repetir la imagen.", + "pt": "**Marque** a caixa para repetir a imagem.", + "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", + "ar": "**حدد** الخانة لتكرار الصورة." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#behaviors-tab", + "nextStepTrigger": { + "presenceOfElement": "#add-behavior-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Perfect! Now let's make this object a platform by adding a **behavior**.", + "fr": "Parfait ! Maintenant, faisons de cet objet une plateforme en ajoutant un **comportement**.", + "es": "¡Perfecto! Ahora hagamos de este objeto una plataforma añadiendo un **comportamiento**.", + "pt": "Perfeito! Agora vamos fazer deste objeto uma plataforma adicionando um **comportamento**.", + "th": "ดีมาก! มาทำให้วัตถุนี้เป็นแพลตฟอร์มโดยการเพิ่ม **พฤติกรรม**", + "ar": "ممتاز! الآن لنجعل هذا الكائن منصة عن طريق إضافة **سلوك**." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#add-behavior-button", + "nextStepTrigger": { + "presenceOfElement": "#behavior-item-SmoothCamera--SmoothCamera" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's add a new behavior", + "fr": "Ajoutons un nouveau comportement", + "es": "Añadamos un nuevo comportamiento", + "pt": "Vamos adicionar um novo comportamento", + "th": "มาเพิ่มพฤติกรรมใหม่", + "ar": "لنضيف سلوكًا جديدًا" + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#behavior-item-PlatformBehavior--PlatformBehavior", + "nextStepTrigger": { + "presenceOfElement": "#behavior-parameters-Platform" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Platform** behavior.", + "fr": "Sélectionnez le comportement **Plateforme**.", + "es": "Selecciona el comportamiento **Plataforma**.", + "pt": "Selecione o comportamento **Plataforma**.", + "th": "เลือกพฤติกรรม **แพลตฟอร์ม**", + "ar": "حدد سلوك **منصة**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#object-editor-dialog #apply-button", + "nextStepTrigger": { + "absenceOfElement": "#object-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "That's it! Now our 3D platform is ready!", + "fr": "C'est tout ! Maintenant notre plateforme 3D est prête !", + "es": "¡Eso es! ¡Ahora nuestra plataforma 3D está lista!", + "pt": "É isso aí! Agora nossa plataforma 3D está pronta!", + "th": "เสร็จแล้ว! ตอนนี้แพลตฟอร์ม 3D ของเราพร้อมแล้ว!", + "ar": "هذا كل شيء! الآن منصتنا ثلاثية الأبعاد جاهزة!" + } + } + }, + "isOnClosableDialog": true, + "mapProjectData": { + "platform": "sceneLastObjectName:gameScene" + } + }, + { + "elementToHighlightId": "editorTab:gameScene:EventsSheet", + "nextStepTrigger": { + "presenceOfElement": "#events-editor[data-active]" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Finally, let's ensure that the platform is exactly below the character. Open the **Events Sheet** of the $(gameScene) scene.", + "fr": "Enfin, assurons-nous que la plateforme est exactement en dessous du personnage. Ouvrez la **Feuille d'événements** de la scène $(gameScene).", + "es": "Finalmente, asegurémonos de que la plataforma esté exactamente debajo del personaje. Abre la **Hoja de eventos** de la escena $(gameScene).", + "pt": "Finalmente, vamos garantir que a plataforma esteja exatamente abaixo do personagem. Abra a **Planilha de eventos** da cena $(gameScene).", + "th": "ในที่สุด มาตรวจสอบให้แน่ใจว่าแพลตฟอร์มอยู่ใต้ตัวละครอย่างแน่นอน ให้เปิด **แผ่นงานเหตุการณ์** ของฉาก $(gameScene)", + "ar": "أخيرًا ، دعونا نتأكد من أن المنصة تقع تحت الشخصية بالضبط. افتح **ورقة الأحداث** من مشهد $(gameScene)." + } + }, + "placement": "bottom" + } + }, + { + "id": "SwitchToEvents1", + "elementToHighlightId": "#events-editor[data-active] #event-2-actions #add-action-button-empty", + "nextStepTrigger": { + "presenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's set the depth of the platform at the beginning of the scene. Click on the **Add an action** button.", + "fr": "Définissons la profondeur de la plateforme au début de la scène. Cliquez sur le bouton **Ajouter une action**.", + "es": "Establezcamos la profundidad de la plataforma al comienzo de la escena. Haz clic en el botón **Añadir una acción**.", + "pt": "Vamos definir a profundidade da plataforma no início da cena. Clique no botão **Adicionar uma ação**.", + "th": "มาตั้งค่าความลึกของแพลตฟอร์มตอนเริ่มต้นของฉาก ให้คลิกที่ปุ่ม **เพิ่มการกระทำ**", + "ar": "دعونا نضبط عمق المنصة في بداية المشهد. انقر على زر **إضافة إجراء**." + } + } + } + }, + { + "elementToHighlightId": "objectInObjectOrResourceSelector:platform", + "nextStepTrigger": { + "presenceOfElement": "#instruction-item-Scene3D--Cube3DObject--SetZ" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select **$(platform)**.", + "fr": "Sélectionnez **$(platform)**.", + "es": "Seleccione **$(platform)**.", + "pt": "Selecione **$(platform)**.", + "th": "เลือก **$(platform)**", + "ar": "تحديد **$(platform)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-item-Scene3D--Cube3DObject--SetZ", + "nextStepTrigger": { + "presenceOfElement": "#parameter-1-operator-field" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the action **Z (elevation)**.", + "fr": "Sélectionnez l'action **Z (élévation)**.", + "es": "Selecciona la acción **Z (elevación)**.", + "pt": "Selecione a ação **Z (elevação)**.", + "th": "เลือกการกระทำ **Z (ความสูง)**", + "ar": "حدد الإجراء **Z (الارتفاع)**." + } + } + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-1-operator-field", + "nextStepTrigger": { + "valueHasChanged": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We want to update the elevation, so let's select **= (set to)**.", + "fr": "Nous voulons mettre à jour l'élévation, sélectionnons donc **= (définir à)**.", + "es": "Queremos actualizar la elevación, así que seleccionemos **= (establecer en)**.", + "pt": "Queremos atualizar a elevação, então vamos selecionar **= (definir para)**.", + "th": "เราต้องการอัปเดตความสูง ดังนั้นให้เลือก **= (ตั้งค่าเป็น)**", + "ar": "نريد تحديث الارتفاع ، لذلك دعونا نختار **= (تعيين إلى)**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#parameter-2-expression-field", + "nextStepTrigger": { + "valueEquals": "-64" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's set the elevation to **-64**.", + "fr": "Définissons l'élévation à **-64**.", + "es": "Establezcamos la elevación en **-64**.", + "pt": "Vamos definir a elevação para **-64**.", + "th": "มาตั้งค่าความสูงเป็น **-64**", + "ar": "دعونا نضبط الارتفاع على **-64**." + } + }, + "placement": "bottom" + }, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#instruction-editor-dialog #ok-button", + "nextStepTrigger": { + "absenceOfElement": "#instruction-editor-dialog" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Nice! Now let's save this.", + "fr": "Bien ! Enregistrons maintenant cela.", + "es": "¡Bien! Ahora guardemos esto.", + "pt": "Legal! Agora vamos salvar isso.", + "th": "ดีมาก! มาบันทึกกันเถอะ", + "ar": "جميل! الآن دعنا نحفظ هذا." + } + }, + "placement": "top" + } + }, + { + "elementToHighlightId": "editorTab:gameScene:Scene", + "nextStepTrigger": { + "editorIsActive": "gameScene:Scene" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's get back to the **scene** to create our platform.", + "fr": "Retournons à la **scène** pour ajouter notre plateforme.", + "es": "Regresemos a la **escena** para crear nuestra plataforma.", + "pt": "Vamos voltar para a **cena** para criar nossa plataforma.", + "th": "มากลับไปที่ **ฉาก** เพื่อสร้างแพลตฟอร์มของเรา", + "ar": "لنعد إلى **المشهد** لإنشاء منصتنا." + } + } + } + }, + { + "id": "SwitchToScene1", + "elementToHighlightId": "objectInObjectsList:platform", + "nextStepTrigger": { + "instanceAddedOnScene": "platform" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Drag $(platform) from the menu to the canvas.", + "fr": "Faites glisser $(platform) du menu au canvas.", + "es": "Arrastra $(platform) desde el menú al lienzo.", + "pt": "Arraste $(platform) do menu para o canvas.", + "th": "ลาก $(platform) จากเมนูไปยังแคนวาส" + } + }, + "placement": "left" + } + }, + { + "nextStepTrigger": { + "clickOnTooltipButton": { + "messageByLocale": { + "en": "I'm done", + "fr": "J'ai terminé", + "es": "He terminado", + "pt": "Eu terminei", + "th": "เสร็จแล้ว" + } + } + }, + "tooltip": { + "standalone": true, + "description": { + "messageByLocale": { + "en": "Let's place $(platform) below our character.", + "fr": "Plaçons $(platform) en dessous de notre personnage.", + "es": "Coloquemos $(platform) debajo de nuestro personaje.", + "pt": "Vamos colocar $(platform) abaixo do nosso personagem.", + "th": "มาวาง $(platform) ใต้ตัวละครของเรา", + "ar": "لنضع $(platform) أسفل شخصيتنا." + } + }, + "touchDescription": { + "messageByLocale": { + "en": "**Select** then **drag** $(platform) into the **scene**.", + "fr": "**Sélectionnez** puis **faites glisser** $(platform) du menu au canvas.", + "es": "**Seleccione** y **arrastrar** $(platform) al **escenario**.", + "pt": "**Selecione** e **arraste** $(platform) para a **cena**.", + "th": "**เลือก** แล้ว **ลาก** $(platform) ไปยัง **ฉาก**", + "ar": "**تحديد** ثم **سحب** الـ $(platform) إلى **المشهد**." + } + }, + "image": { + "dataUrl": "data:image/png;base64,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" + } + } + }, + { + "elementToHighlightId": "#toolbar-preview-button", + "nextStepTrigger": { + "previewLaunched": true + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + } + }, + "placement": "bottom" + } + } + ] +} From 96f2d698b1a0291d447fff6bd90e9e1802334211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 8 Jun 2023 10:37:46 +0200 Subject: [PATCH 073/208] Spaces --- tutorials/in-app/flingGame.json | 6 +++--- tutorials/in-app/joystick.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 7549d8f..e3154bd 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -3449,7 +3449,7 @@ "es": "## ¡Felicidades!", "pt": "## Parabéns!", "th": "## ยินดีด้วย!", - "ar": "## تهانينا!" + "ar": "## تهانينا!" } }, { @@ -3459,7 +3459,7 @@ "es": "Has terminado la segunda parte de tu juego.", "pt": "Você terminou a segunda parte do seu jogo.", "th": "ส่วนแรกของเกม Fling ของคุณเสร็จแล้ว", - "ar": "لقد انهيت الجزء الثاني من لعبة القذف." + "ar": "لقد انهيت الجزء الثاني من لعبة القذف." } }, { @@ -3479,7 +3479,7 @@ "es": "Ahora puedes hacer una pausa antes de comenzar el próximo capítulo para agregar una tabla de clasificación.", "pt": "Agora você pode fazer uma pausa antes de começar o próximo capítulo para adicionar uma tabela de classificação.", "th": "คุณสามารถหยุดพักบทเรียนตรงนี้ หรือเข้าสู่บทเรียนถัดไปเพื่อเพิ่มกระดานคะแนนเลยก็ได้", - "ar": "يمكنك الآن أخذ استراحة من البرنامج التعليمي، أو إضافة لوحة صدارة في الفصل التالي." + "ar": "يمكنك الآن أخذ استراحة من البرنامج التعليمي، أو إضافة لوحة صدارة في الفصل التالي." } } ] diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 814dde5..fe9cfe1 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -392,7 +392,7 @@ "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "إدراج الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." + "ar": "إدراج الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." } }, "placement": "top", From efc4b32c5ed90647a75c7b4d555fbf20b02e1748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 9 Jun 2023 17:34:49 +0200 Subject: [PATCH 074/208] Update some steps to match exact value --- tutorials/in-app/cameraParallax.json | 4 ++-- tutorials/in-app/flingGame.json | 12 ++++++------ tutorials/in-app/healthBar.json | 2 +- tutorials/in-app/joystick.json | 2 +- tutorials/in-app/object3d.json | 14 +++++++------- tutorials/in-app/plinkoMultiplier.json | 8 ++++---- tutorials/in-app/timer.json | 2 +- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 6a92615..a941cf1 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -709,7 +709,7 @@ { "elementToHighlightId": "#parameter-1-operator-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { @@ -824,7 +824,7 @@ { "elementToHighlightId": "#parameter-1-operator-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index e3154bd..f654a82 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -1002,7 +1002,7 @@ { "elementToHighlightId": "#physics2-parameter-body-type", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Static" }, "tooltip": { "description": { @@ -1118,7 +1118,7 @@ { "elementToHighlightId": "#physics2-parameter-shape", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Circle" }, "tooltip": { "description": { @@ -1873,7 +1873,7 @@ { "elementToHighlightId": "#instance-properties-editor [id=\"Z Order\"]", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "-1" }, "tooltip": { "description": { @@ -2105,7 +2105,7 @@ { "elementToHighlightId": "#physics2-parameter-body-type", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Static" }, "tooltip": { "description": { @@ -4107,7 +4107,7 @@ { "elementToHighlightId": "#instruction-parameters-container select", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "Left" }, "tooltip": { "description": { @@ -4723,7 +4723,7 @@ { "elementToHighlightId": "#instruction-parameters-container select", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 7ffee6f..4fec6b9 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -504,7 +504,7 @@ { "elementToHighlightId": "#parameter-1-operator-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index fe9cfe1..b7617a0 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -492,7 +492,7 @@ { "elementToHighlightId": "#behavior-parameters-TopDownMultitouchMapper #StickMode", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "360°" }, "tooltip": { "description": { diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index 0c5e019..babb023 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -255,7 +255,7 @@ { "elementToHighlightId": "#cube3d-object-frontFaceResourceName", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "BlackCheckered.png" }, "tooltip": { "description": { @@ -294,7 +294,7 @@ { "elementToHighlightId": "#cube3d-object-backFaceResourceName", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "WhiteCheckered.png" }, "tooltip": { "description": { @@ -333,7 +333,7 @@ { "elementToHighlightId": "#cube3d-object-leftFaceResourceName", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "WhiteCheckered.png" }, "tooltip": { "description": { @@ -372,7 +372,7 @@ { "elementToHighlightId": "#cube3d-object-rightFaceResourceName", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "WhiteCheckered.png" }, "tooltip": { "description": { @@ -411,7 +411,7 @@ { "elementToHighlightId": "#cube3d-object-topFaceResourceName", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "WhiteCheckered.png" }, "tooltip": { "description": { @@ -450,7 +450,7 @@ { "elementToHighlightId": "#cube3d-object-bottomFaceResourceName", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "WhiteCheckered.png" }, "tooltip": { "description": { @@ -646,7 +646,7 @@ { "elementToHighlightId": "#parameter-1-operator-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 4ced588..0077b6c 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -335,7 +335,7 @@ { "elementToHighlightId": "#scene-variables-dialog #variable-0-type", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "1" }, "tooltip": { "description": { @@ -658,7 +658,7 @@ { "elementToHighlightId": "#parameter-1-audio-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "ClickerBeep2.wav" }, "tooltip": { "description": { @@ -773,7 +773,7 @@ { "elementToHighlightId": "#parameter-1-operator-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "+" }, "tooltip": { "description": { @@ -1041,7 +1041,7 @@ { "elementToHighlightId": "#parameter-1-operator-field", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 3c56a74..3d37c93 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -559,7 +559,7 @@ { "elementToHighlightId": "#instruction-parameters-container select", "nextStepTrigger": { - "valueHasChanged": true + "valueEquals": "=" }, "tooltip": { "description": { From 29b88e0ec8193df2598feee919d4d6f64f710648 Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Tue, 20 Jun 2023 17:09:39 +0200 Subject: [PATCH 075/208] Simplify box 3d tuto (#34) --- templates/object3d/game.json | 36 +++++++++++++++--------------- tutorials/in-app/object3d.json | 40 +--------------------------------- 2 files changed, 19 insertions(+), 57 deletions(-) diff --git a/templates/object3d/game.json b/templates/object3d/game.json index 27716a0..3c6d2b9 100644 --- a/templates/object3d/game.json +++ b/templates/object3d/game.json @@ -62,6 +62,24 @@ }, "resources": { "resources": [ + { + "alwaysLoaded": false, + "file": "assets/BlackCheckered.png", + "kind": "image", + "metadata": "", + "name": "BlackCheckered.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/WhiteCheckered.png", + "kind": "image", + "metadata": "", + "name": "WhiteCheckered.png", + "smoothed": true, + "userAdded": true + }, { "alwaysLoaded": false, "file": "assets/Character Orange_Stand_1.png", @@ -436,15 +454,6 @@ "preloadInCache": false, "userAdded": true }, - { - "alwaysLoaded": false, - "file": "assets/BlackCheckered.png", - "kind": "image", - "metadata": "", - "name": "BlackCheckered.png", - "smoothed": true, - "userAdded": true - }, { "alwaysLoaded": false, "file": "assets/RedCheckered.png", @@ -453,15 +462,6 @@ "name": "assets\\RedCheckered.png", "smoothed": true, "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/WhiteCheckered.png", - "kind": "image", - "metadata": "", - "name": "WhiteCheckered.png", - "smoothed": true, - "userAdded": true } ], "resourceFolders": [] diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index babb023..6d86fae 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -291,45 +291,6 @@ }, "isOnClosableDialog": true }, - { - "elementToHighlightId": "#cube3d-object-backFaceResourceName", - "nextStepTrigger": { - "valueEquals": "WhiteCheckered.png" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the back face of the box with the image **WhiteCheckered.png**.", - "fr": "Mettez à jour la face arrière de la boîte avec l'image **WhiteCheckered.png**.", - "es": "Actualicemos la cara trasera de la caja con la imagen **WhiteCheckered.png**.", - "pt": "Vamos atualizar a face traseira da caixa com a imagem **WhiteCheckered.png**.", - "th": "มาอัปเดตหน้าด้านหลังของกล่องด้วยภาพ **WhiteCheckered.png**", - "ar": "لنقم بتحديث الوجه الخلفي للصندوق بالصورة **WhiteCheckered.png**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-backFaceResourceRepeat", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "**Check** the box to repeat the image.", - "fr": "**Cochez** la case pour répéter l'image.", - "es": "**Marca** la casilla para repetir la imagen.", - "pt": "**Marque** a caixa para repetir a imagem.", - "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**حدد** الخانة لتكرار الصورة." - } - } - }, - "isOnClosableDialog": true - }, { "elementToHighlightId": "#cube3d-object-leftFaceResourceName", "nextStepTrigger": { @@ -661,6 +622,7 @@ }, "placement": "bottom" }, + "skippable": true, "isOnClosableDialog": true }, { From c5dc8be308de7ee6a4f9fe409639515af60b2afa Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Wed, 21 Jun 2023 14:41:26 +0200 Subject: [PATCH 076/208] Improve fling lesson on mobile (#35) --- tutorials/in-app/cameraParallax.json | 2 ++ tutorials/in-app/flingGame.json | 42 +++++++++++++++++++++++--- tutorials/in-app/healthBar.json | 1 + tutorials/in-app/plinkoMultiplier.json | 1 + tutorials/in-app/timer.json | 1 + 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index a941cf1..50e9d1e 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -711,6 +711,7 @@ "nextStepTrigger": { "valueEquals": "=" }, + "skippable": true, "tooltip": { "description": { "messageByLocale": { @@ -826,6 +827,7 @@ "nextStepTrigger": { "valueEquals": "=" }, + "skippable": true, "tooltip": { "description": { "messageByLocale": { diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index f654a82..818c826 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -319,6 +319,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "First, let's find a border for our **scene**.", @@ -508,6 +509,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Now let's find an **object** that we can throw.", @@ -652,6 +654,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Now let's find a target to aim.", @@ -795,6 +798,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Finally let's find something to protect $(target).", @@ -1473,7 +1477,8 @@ "ar": "تثبيت الملحق في مشروعك." } }, - "placement": "left" + "placement": "left", + "mobilePlacement": "top" }, "isOnClosableDialog": true }, @@ -1685,6 +1690,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Let's find a background for our game.", @@ -1870,6 +1876,26 @@ } } }, + { + "elementToHighlightId": "#toolbar-open-properties-panel-button", + "skippable": true, + "nextStepTrigger": { + "presenceOfElement": "#instance-properties-editor" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Open the **instance** properties editor panel and select the instance of $(grabArea) on the scene.", + "fr": "Ouvrez le panneau d'édition des propriétés de **l'instance** et sélectionnez l'instance de $(grabArea) sur la scène.", + "es": "Abre el panel de edición de propiedades de **la instancia** y selecciona la instancia de $(grabArea) en la escena.", + "pt": "Abra o painel de edição de propriedades da **instância** e selecione a instância de $(grabArea) na cena.", + "th": "เปิดแผงควบคุมสำหรับแก้ไขคุณสมบัติ **instance** และเลือก instance ของ $(grabArea) ใน scence", + "ar": "فتح لوحة خصائص **المثيل** وتحديد مثيل الـ $(grabArea) على الشاشة." + } + }, + "placement": "bottom" + } + }, { "elementToHighlightId": "#instance-properties-editor [id=\"Z Order\"]", "nextStepTrigger": { @@ -1886,7 +1912,8 @@ "ar": "تغيير ترتيب $(background) إلى **-1** حيث يكون خلف كل **المثيلات** الأخرى في **المشهد**." } }, - "placement": "right" + "placement": "right", + "mobilePlacement": "top" } }, { @@ -1917,6 +1944,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Let's add some protection for $(target).", @@ -2186,6 +2214,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Now let's create a winning message!", @@ -2953,7 +2982,8 @@ "ar": "التحقق أنه تم تحديد $(grabArea) مع تغيير قيمته إلى **0**." } }, - "placement": "right" + "placement": "right", + "mobilePlacement": "top" } }, { @@ -3539,7 +3569,8 @@ "ar": "النقر هنا." } }, - "placement": "right" + "placement": "right", + "mobilePlacement": "bottom" }, "mapProjectData": { "startScene": "projectLastSceneName" @@ -3642,6 +3673,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Now let's create a title!", @@ -4284,6 +4316,7 @@ }, "tooltip": { "placement": "left", + "mobilePlacement": "top", "description": { "messageByLocale": { "en": "Let's create a text that will display the player score.", @@ -4725,6 +4758,7 @@ "nextStepTrigger": { "valueEquals": "=" }, + "skippable": true, "tooltip": { "description": { "messageByLocale": { diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 4fec6b9..94d89d7 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -506,6 +506,7 @@ "nextStepTrigger": { "valueEquals": "=" }, + "skippable": true, "tooltip": { "description": { "messageByLocale": { diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 0077b6c..de08c77 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -1043,6 +1043,7 @@ "nextStepTrigger": { "valueEquals": "=" }, + "skippable": true, "tooltip": { "description": { "messageByLocale": { diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 3d37c93..170434b 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -561,6 +561,7 @@ "nextStepTrigger": { "valueEquals": "=" }, + "skippable": true, "tooltip": { "description": { "messageByLocale": { From bddc5bb0b3c1b1fec7914250628fc96bd83b88b4 Mon Sep 17 00:00:00 2001 From: EyadMahm0ud <77191515+EyadMahm0ud@users.noreply.github.com> Date: Fri, 9 Jun 2023 22:30:26 +0300 Subject: [PATCH 077/208] Finishing Arabic translations improvements --- tutorials/in-app/cameraParallax.json | 42 +++---- tutorials/in-app/flingGame.json | 150 ++++++++++++------------- tutorials/in-app/healthBar.json | 20 ++-- tutorials/in-app/joystick.json | 24 ++-- tutorials/in-app/object3d.json | 56 ++++----- tutorials/in-app/plinkoMultiplier.json | 76 ++++++------- tutorials/in-app/timer.json | 16 +-- 7 files changed, 193 insertions(+), 191 deletions(-) diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 50e9d1e..c831bb9 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -77,7 +77,7 @@ "es": "¡Mejoremos este juego de plataforma siguiendo al personaje con la cámara!", "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!", "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ", - "ar": "دعنا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!" + "ar": "هيّا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!" } }, "description": { @@ -87,7 +87,7 @@ "es": "Para esto, instalaremos una **extensión**.\n\nAbre el **Administrador de proyectos**.", "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**", - "ar": "لفعل هذا، سوف نثبت **ملحقًا**.\n\nفتح **مدير المشروع**." + "ar": "لفعل هذا، سوف نقوم بتثبيت **ملحق**.\n\nفتح **مدير المشروع**." } } } @@ -204,7 +204,7 @@ "es": "Cerramos esta ventana.", "pt": "Vamos fechar esta janela.", "th": "ปิดหน้าต่างนี้", - "ar": "دعنا نغلق هذا." + "ar": "هيّا نغلق هذا." } } }, @@ -223,7 +223,7 @@ "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", "th": "ปิดเมนู", - "ar": "دعنا نغلق هذه القائمة." + "ar": "لنغلق هذه القائمة." } } }, @@ -263,7 +263,7 @@ "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(player)** وتحديد **تحرير السلوكيات**." + "ar": "هيّا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(player)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { @@ -273,7 +273,7 @@ "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nSelecciona y pulsa largo **$(player)** y selecciona **Editar comportamientos**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nSelecione e pressione por um longo tempo **$(player)** e selecione **Editar comportamentos**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **$(player)** وتحديد **تحرير السلوكيات**." + "ar": "هيّا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **$(player)** وتحديد **تحرير السلوكيات**." } } } @@ -312,7 +312,7 @@ "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar.", "th": "เพิ่มพฤติกรรม **Smooth Camera** ที่เพิ่งได้ติดตั้ง", - "ar": "دعنا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو." + "ar": "هيّا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو." } } }, @@ -407,7 +407,7 @@ "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", "pt": "Vamos **adicionar uma nova camada** para nosso fundo.", "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง", - "ar": "لنقم ب**إضافة طبقة** لخلفيتنا." + "ar": "هيّا نقوم ب**إضافة طبقة** لخلفيتنا." } }, "placement": "top" @@ -503,7 +503,7 @@ "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego arrastrándolo al centro.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro.", "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง", - "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز." + "ar": "ممتاز! الآن هيّا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز." } }, "touchDescription": { @@ -513,7 +513,7 @@ "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego **seleccionándolo** y luego arrastrándolo al centro.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, **selecionando** e depois arrastando-o para o centro.", "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดย **เลือก** แล้ว **ลาก** มันไปวางตรงกลาง", - "ar": "ممتاز! الآن دعنا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز." + "ar": "ممتاز! الآن هيّا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز." } }, "placement": "top" @@ -541,7 +541,7 @@ "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.", "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", - "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." + "ar": "هل يمكنك رؤية **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." } }, "placement": "top", @@ -583,7 +583,7 @@ "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! Arrastre **$(midBackground)** desde el menú a la escena.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena.", "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene", - "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة." + "ar": "هيّا نقوم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة." } }, "touchDescription": { @@ -593,7 +593,7 @@ "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! **Seleccione**, luego **arrastre** **$(midBackground)** desde el menú a la escena.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! **Selecione**, em seguida, **arraste** **$(midBackground)** do menu para a cena.", "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! **เลือก** แล้ว **ลาก** **$(midBackground)** จากเมนูไปยัง scene", - "ar": "دعنا نقم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة." + "ar": "هيّا نقوم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة." } }, "placement": "top" @@ -643,7 +643,7 @@ "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de tu escena $(cameraScene).", "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** de tua cena $(cameraScene).", "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)", - "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! دعنا **نفتح صفحة أحداث** المشهد $(cameraScene)." + "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! هيّا **نفتح صفحة أحداث** المشهد $(cameraScene)." } }, "placement": "bottom" @@ -663,7 +663,7 @@ "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover.", "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่", - "ar": "دعنا نقوم ب**إضافة إجراء** لجعل الخلفية الأولى تتحرك." + "ar": "هيّا نقوم ب**إضافة إجراء** لجعل الخلفية الأولى تتحرك." } } } @@ -720,7 +720,7 @@ "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك هيّا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -740,7 +740,7 @@ "es": "Hagamos que el fondo lejano se mueva,\n\n La forma de hacerlo es hacer que se mueva en relación con la posición de la cámara.\n\n Si el jugador se mueve, la cámara también se mueve, por lo que hacemos que el fondo siga el centro de la cámara horizontalmente (X), pero **mucho más lento** para dar un efecto de profundidad.\n\n Escribe la fórmula `CameraCenterX()/8`.", "pt": "Vamos fazer o fundo distante se mover,\n\n A maneira como fazemos isso é fazendo com que ele se mova em relação à posição da câmera.\n\n Se o jogador se mover, a câmera também se move, então fazemos o fundo seguir o centro da câmera horizontalmente (X), mas **muito mais devagar** para dar um efeito de profundidade.\n\n Digite a fórmula `CameraCenterX()/8`.", "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`", - "ar": "دعنا نجعل الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى موضع الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، إدخال الصيغة `CameraCenterX()/8`." + "ar": "هيّا نجعل الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى إحداثية الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، إدخال الصيغة `CameraCenterX()/8`." } }, "placement": "bottom" @@ -760,7 +760,7 @@ "es": "¡Bien! Ahora guardemos esto.", "pt": "Legal! Agora vamos salvar isso.", "th": "ดีมาก! มาบันทึกกันเถอะ", - "ar": "جميل! الآن دعنا نحفظ هذا." + "ar": "جميل! الآن هيّا نحفظ هذا." } }, "placement": "top" @@ -779,7 +779,7 @@ "es": "¡Creemos la misma acción para **$(midBackground)**!", "pt": "Vamos criar a mesma ação para **$(midBackground)**!", "th": "สร้างการกระทำเหมือนเดิมสำหรับ **$(midBackground)**!", - "ar": "دعنا نقوم بنفس الشيء مع **$(midBackground)**!" + "ar": "هيّا نقوم بنفس الشيء مع **$(midBackground)**!" } } } @@ -836,7 +836,7 @@ "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك هيّا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -856,7 +856,7 @@ "es": "Esta vez, hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\nasí que hagamos que el fondo se mueva **3 veces más lento** que la cámara.\n\nIngrese `CameraCenterX()/3`.", "pt": "Desta vez, vamos fazer com que este fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\nentão vamos fazer com que o fundo se mova **3 vezes mais devagar** que a câmera.\n\nDigite `CameraCenterX()/3`.", "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`", - "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n دعنا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`." + "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n هيّا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`." } }, "placement": "bottom" diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 818c826..559fe8f 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -73,7 +73,7 @@ "es": "¡Compártelo con tus amigos y ve quién obtiene la puntuación más alta!", "pt": "Compartilhe com seus amigos e veja quem consegue a maior pontuação!", "th": "แชร์กับเพื่อนของคุณ และมาลองดูกันว่าใครจะทำคะแนนได้สูงที่สุด!", - "ar": "شاركها مع الأصدقاء وشاهد من سيحصل على أعلى نتيجة!" + "ar": "يمكنك مشاركتها مع الأصدقاء ورؤية من سيحصل على أعلى نتيجة!" } }, { @@ -83,7 +83,7 @@ "es": "¿Listo para crear un nuevo juego? ¡Haz clic para descubrir lo que puede hacer GDevelop!", "pt": "Pronto para criar um novo jogo? Clique para descobrir o que o GDevelop pode fazer!", "th": "พร้อมสร้างเกมใหม่แล้ว? คลิกเพื่อสำรวจดูว่า GDevelop สามารถทำอะไรได้บ้าง", - "ar": "هل أنت مستعد لصنع لعبة جديدة؟ النقر لإكتشاف ماذا يمكن لـ GDevelop أن يفعل!" + "ar": "هل لديك الاستعداد لصنع لعبة جديدة؟ النقر لإكتشاف ماذا يمكن لـ GDevelop أن يفعل!" } }, { @@ -128,7 +128,7 @@ "es": "¡Vamos a crear un nuevo **proyecto** para este tutorial!", "pt": "Vamos criar um novo **projeto** para este tutorial!", "th": "มาสร้าง **โปรเจกต์** ใหม่ สำหรับบทเรียนนี้กันเถอะ!", - "ar": "دعنا نقوم بإنشاء **مشروع** جديد لهذا البرنامج التعليمي!" + "ar": "هيّا نقوم بإنشاء **مشروع** جديد لهذا البرنامج التعليمي!" } } } @@ -208,7 +208,7 @@ "es": "Abre las **Propiedades** del juego.", "pt": "Abra as **Propriedades** do jogo.", "th": "เปิด **คุณสมบัติ** ของเกม", - "ar": "فتح **الخصائص** التابعة للعبة." + "ar": "فتح **خصائص** اللعبة." } } }, @@ -327,7 +327,7 @@ "es": "Primero, busquemos un borde para nuestra **escena**.", "pt": "Primeiro, vamos encontrar uma borda para nossa **cena**.", "th": "ขั้นแรก หาขอบเขตของ **scene**", - "ar": "أولًا، دعنا نعثر على حدود **مشهدنا**." + "ar": "أولًا، هيّا نعثر على حدود **مشهدنا**." } } } @@ -344,7 +344,7 @@ "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", "es": "Vamos a elegir un **objeto** de la tienda de recursos.", "th": "เลือก **วัตถุ** จาก ร้านค้า asset", - "ar": "دعنا نقوم بإختيار **كائن** من متجر العناصر" + "ar": "هيّا نقوم باختيار **كائن** من متجر العناصر" } }, "placement": "bottom" @@ -426,7 +426,7 @@ "es": "¡Agreguemos $(border) a nuestro juego!", "pt": "Vamos adicionar $(border) ao nosso jogo!", "th": "มาใส่ $(border) ในเกมกันเถอะ!", - "ar": "دعنا نقوم بإضافة الـ $(border) إلى لعبتنا" + "ar": "هيّا نقوم بإضافة الـ $(border) إلى لعبتنا" } } } @@ -517,7 +517,7 @@ "es": "Ahora, busquemos un **objeto** que podamos lanzar.", "pt": "Agora, vamos encontrar um **objeto** que possamos jogar.", "th": "ทีนี้เราจะหา **วัตถุ** ที่เราจะใช้สำหรับโยน", - "ar": "الآن دعنا نعثر على **كائن** يمكننا قذفه." + "ar": "الآن هيّا نعثر على **كائن** يمكننا قذفه." } } } @@ -535,7 +535,7 @@ "es": "Vamos a elegir un objeto de la **tienda de recursos**.", "pt": "Vamos escolher um objeto da **loja de recursos**.", "th": "เลือก **วัตถุ** จาก ร้านค้า asset", - "ar": "دعنا نقوم بإختيار كائن من **متجر العناصر**." + "ar": "هيّا نقوم باختيار كائن من **متجر العناصر**." } }, "placement": "bottom" @@ -556,7 +556,7 @@ "es": "Agrega un objeto redondo que te gustaría lanzar (intenta con **ball**).", "pt": "Adicione um objeto redondo que você gostaria de jogar (tente **ball**).", "th": "เลือกวัตถุที่กลมที่คุณอยากจะโยน (ลอง **ball**)", - "ar": "تحديد كائن مستدير تحب إلقائه (تجربة **ball**)." + "ar": "تحديد كائن مستدير قد يناسبك إلقائه (تجربة **ball**)." } } }, @@ -602,7 +602,7 @@ "es": "Perfecto, veamos cómo lanzarlo fácilmente.", "pt": "Perfeito, vamos ver como jogá-lo facilmente.", "th": "สมบูรณ์แบบ ลองมาดูวิธีโยนมันแบบง่ายๆกัน", - "ar": "ممتاز، دعنا نرى كيفية رميه بسهولة." + "ar": "ممتاز، هيّا نرى كيفية رميه بسهولة." } } } @@ -662,7 +662,7 @@ "es": "Ahora busquemos un objetivo para apuntar.", "pt": "Agora vamos encontrar um alvo para mirar.", "th": "ทีนี้เราจะหาเป้าสำหรับโยนวัตถุใส่", - "ar": "الآن دعنا نعثر على هدف لإصابته." + "ar": "الآن هيّا نعثر على هدف لإصابته." } } } @@ -680,7 +680,7 @@ "es": "Vamos a elegir un **objeto** nuevo desde la tienda de recursos.", "pt": "Vamos escolher um novo **objeto** da loja de recursos.", "th": "เลือก **วัตถุ** จาก ร้านค้า asset", - "ar": "دعنا نقوم بإختيار **كائن** جديد من متجر العناصر." + "ar": "هيّا نقوم باختيار **كائن** جديد من متجر العناصر." } }, "placement": "bottom" @@ -701,7 +701,7 @@ "es": "Busca un objeto que te gustaría usar como un objetivo para lanzar $(projectile) a.", "pt": "Selecione um objeto que você gostaria de usar como um alvo para jogar $(projectile) em.", "th": "เลือกวัตถุที่คุณอยากจะโยน $(projectile) ใส่ (ลอง **target**)", - "ar": "تحديد كائن تحب أن يتم استخدامه كهدف لقذف الـ $(projectile) عليه." + "ar": "تحديد كائن قد يناسبك استخدامه كهدف لقذف الـ $(projectile) عليه." } } }, @@ -747,7 +747,7 @@ "es": "Perfecto, agreguemoslo a la **escena**.", "pt": "Perfeito, vamos adicioná-lo à **cena**.", "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", - "ar": "ممتاز، دعنا نقوم بإضافته إلى **المشهد**." + "ar": "ممتاز، هيّا نقوم بإضافته إلى **المشهد**." } } } @@ -806,7 +806,7 @@ "es": "Finalmente, encontremos algo para proteger $(target).", "pt": "Finalmente, vamos encontrar algo para proteger $(target).", "th": "ขั้นสุดท้าย เราจะหาอะไรมาป้องกัน $(target)", - "ar": "أخيرًا وليس آخرًا، دعنا نعثر على شيء يحمي $(target)." + "ar": "أخيرًا وليس آخرًا، هيّا نعثر على شيء يحمي $(target)." } } } @@ -824,7 +824,7 @@ "es": "Vamos a elegir un nuevo objeto de la tienda de recursos.", "pt": "Vamos escolher um novo objeto da loja de recursos.", "th": "เลือก **วัตถุ** จาก ร้านค้า asset", - "ar": "دعنا نقوم بإختيار **كائن** جديد من متجر العناصر." + "ar": "هيّا نقوم باختيار **كائن** جديد من متجر العناصر." } }, "placement": "bottom" @@ -845,7 +845,7 @@ "es": "Busca un objeto que sirva como obstáculo para tus $(projectile) (busca **block**).", "pt": "Procure um objeto que sirva como obstáculo para seus $(projectile) (procure **block**).", "th": "เลือกวัตถุ **block** ที่คุณอยากจะใช้เป็นสิ่งกีดขวาง $(projectile) (ลอง **block**)", - "ar": "تحديد **كتلة** تحبها أن تكون حاجزًا للـ $(projectile) خاصتك." + "ar": "تحديد **عقبة** قد يناسبك استخدامه كحاجز لـ $(projectile) خاصتك." } } }, @@ -891,7 +891,7 @@ "es": "Perfecto, agreguemoslo a la **escena**.", "pt": "Perfeito, vamos adicioná-lo à **cena**.", "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", - "ar": "ممتاز، دعنا نقوم بإضافته إلى **المشهد**." + "ar": "ممتاز، هيّا نقوم بإضافته إلى **المشهد**." } } } @@ -928,7 +928,7 @@ "es": "Ahora, agreguemos un motor físico a nuestros **objetos**.", "pt": "Agora, vamos adicionar um motor físico aos nossos **objetos**.", "th": "ทีนี้เราจะเพิ่มฟิสิกส์ให้ **objects**", - "ar": "الآن، دعنا نقوم بإضافة بعض الفيزيائيات إلى **كائننا**." + "ar": "الآن، هيّا نقوم بإضافة بعض الفيزيائيات إلى **كائننا**." } }, "placement": "left", @@ -1367,7 +1367,7 @@ "es": "Ahora vamos a hacer que el jugador pueda arrastrar $(projectile) con el ratón.", "pt": "Agora vamos fazer com que o jogador possa arrastar $(projectile) com o mouse.", "th": "ทีนี้เราจะทำให้ผู้เล่นสามารถลาก $(projectile)", - "ar": "الآن دعنا نقوم بجعل اللاعبين قادرين على سحب الـ $(projectile)." + "ar": "الآن هيّا نجعل اللاعبين قادرين على سحب الـ $(projectile)." } }, "description": { @@ -1435,7 +1435,7 @@ "es": "Busca la extensión **draggable**.", "pt": "Procure pela extensão **draggable**.", "th": "ค้นหา **draggable** extension (สำหรับวัตถุฟิสิกส์)", - "ar": "البحث عن الملحق **draggable (for physics object)**." + "ar": "البحث عن الملحق\n\n**draggable** (for physics objects)" } } }, @@ -1698,7 +1698,7 @@ "es": "Busquemos un fondo para nuestro juego.", "pt": "Vamos encontrar um fundo para o nosso jogo.", "th": "หาพื้นหลังสำหรับเกม", - "ar": "دعنا نعثر على خلفية للعبتنا." + "ar": "هيّا نعثر على خلفية للعبتنا." } } } @@ -1716,7 +1716,7 @@ "es": "Vamos a elegir un **objeto** de la tienda de recursos.", "pt": "Vamos escolher um **objeto** na loja de recursos.", "th": "ค้นหา **วัตถุ** จาก ร้านค้า asset", - "ar": "دعنا نقوم بإختيار **كائن** من متجر العناصر." + "ar": "هيّا نقوم باختيار **كائن** من متجر العناصر." } }, "placement": "bottom" @@ -1783,7 +1783,7 @@ "es": "Perfecto, añádelo a la **escena**.", "pt": "Perfeito, vamos usá-lo na nossa **cena**.", "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", - "ar": "ممتاز، دعنا نستخدمه في **مشهدنا**." + "ar": "ممتاز، هيّا نستخدمه في **مشهدنا**." } } } @@ -1816,7 +1816,7 @@ "es": "He terminado", "pt": "Eu terminei", "th": "เสร็จแล้ว", - "ar": "انتهيت!" + "ar": "انتهيت" } } }, @@ -1952,7 +1952,7 @@ "es": "Agreguemos un objeto para proteger a $(target).", "pt": "Vamos adicionar um objeto para proteger $(target).", "th": "เพิ่มวัตถุป้องกันให้ $(target)", - "ar": "دعنا نقوم بإضافة بعض الحماية لصالح $(target)." + "ar": "هيّا نقوم بإضافة بعض الحماية لصالح $(target)." } } } @@ -1970,7 +1970,7 @@ "es": "Vamos a elegir un **objeto** de la tienda de recursos.", "pt": "Vamos escolher um **objeto** na loja de recursos.", "th": "เพิ่ม **วัตถุ** จาก ร้านค้า asset", - "ar": "دعنا نقوم بإختيار **كائن** من متجر العناصر." + "ar": "هيّا نقوم باختيار **كائن** من متجر العناصر." } }, "placement": "bottom" @@ -2037,7 +2037,7 @@ "es": "Perfecto, agreguemoslo a la **escena**.", "pt": "Perfeito, vamos adicioná-lo à **cena**.", "th": "สมบูรณ์แบบ ใส่มันลงไปใน **scene**", - "ar": "ممتاز، دعنا نقوم بإضافته إلى **المشهد**." + "ar": "ممتاز، هيّا نقوم بإضافته إلى **المشهد**." } } } @@ -2056,7 +2056,7 @@ "es": "Hagamos que se mantengan estáticos como una pared.", "pt": "Vamos mantê-los estáticos como uma parede.", "th": "ทำให้คงที่เพื่อใช้ทำหน้าที่เป็นผนัง", - "ar": "دعنا نعينه ككائن ثابت حيث سيمثل الجدار." + "ar": "هيّا نعينه ككائن ثابت حيث سيمثل الجدار." } }, "description": { @@ -2222,7 +2222,7 @@ "es": "¡Ahora creemos un mensaje de victoria!", "pt": "Agora vamos criar uma mensagem de vitória!", "th": "ทีนี้เราจะสร้างข้อความแสดงชัยชนะ!", - "ar": "الآن دعنا نقوم بإنشاء رسالة الفوز!" + "ar": "الآن هيّا نقوم بإنشاء رسالة الفوز!" } } } @@ -2321,7 +2321,7 @@ "es": "Cambia el texto a “**¡Ganaste!**”", "pt": "Mude o texto para “**Você Venceu!**”", "th": "แก้ไขข้อความเป็น “**คุณชนะ!**”", - "ar": "إدخال أي نص يدل على فوز اللاعبين\n(على سبيل المثال:** لقد فزت**)." + "ar": "إدخال أي نص يدل على فوز اللاعبين\n\n(على سبيل المثال: **لقد فزت**)." } }, "placement": "bottom" @@ -2466,7 +2466,7 @@ "es": "Ahora selecciona la **instancia** de $(youWinText) en la **escena** y cambia su **capa** usando el **panel de propiedades**.\n\n¡Debería haber desaparecido!", "pt": "Agora selecione a **instância** de $(youWinText) na **cena** e altere sua **camada** usando o **painel de propriedades**.\n\nEle deve ter desaparecido!", "th": "ทีนี้เลือก $(youWinText) **instance** บน **scence** และเปลี่ยน **เลเยอร์** โดยใช้ **แผงควบคุมคุณสมบัติ**\n\nมันควรจะหายไป!", - "ar": "الآن تحديد **المثيل** $(youWinText) **بالمشهد** وتغيير طبقته باستخدام **لوحة الخصائص**.\n\nمن المفترض أن تختفي!" + "ar": "الآن تحديد **المثيل** $(youWinText) **بالمشهد** وتغيير طبقته باستخدام **لوحة الخصائص**.\n\nمن المفترض أن يختفي!" } }, "standalone": true @@ -2504,7 +2504,7 @@ "es": "¡Añadamos nuestro primer **evento**!", "pt": "Vamos adicionar nosso primeiro **evento**!", "th": "มาเพิ่ม **อีเวนท์** แรกกันเถอะ!", - "ar": "دعنا نقوم بإضافة أول **حدث** لنا!" + "ar": "هيّا نقوم بإضافة أول **حدث** لنا!" } } } @@ -2617,7 +2617,7 @@ "es": "Añade una **acción** ahora.", "pt": "Adicione uma **ação** agora.", "th": "เพิ่ม **การกระทำ**", - "ar": "دعنا نقوم بإضافة **إجراء** الآن." + "ar": "هيّا نقوم بإضافة **إجراء** الآن." } } } @@ -2692,7 +2692,7 @@ "es": "Añade otra **acción** que se ejecutará para la misma **condición**.", "pt": "Adicione outra **ação** que será executada para a mesma **condição**.", "th": "สร้าง **การกระทำ** เพิ่มอีก ซึ่งจะใช้ในกรณี **เงื่อนไข** เดียวกัน", - "ar": "دعنا نقوم بإضافة **إجراء** آخر حيث سيتم تنفيذه بواسطة نفس **الشرط**." + "ar": "هيّا نقوم بإضافة **إجراء** آخر حيث سيتم تنفيذه بواسطة نفس **الشرط**." } } } @@ -2748,7 +2748,7 @@ "es": "Selecciona la **capa** que has creado.", "pt": "Selecione a **camada** que você criou.", "th": "เลือก **เลเยอร์** ที่คุณสร้าง", - "ar": "تحديد **الطبقة** التي قمتَ بإنشائها." + "ar": "تحديد **الطبقة** التي قمت بإنشائها." } }, "placement": "top" @@ -2787,7 +2787,7 @@ "es": "Volvamos a la **escena** para crear algunas restricciones para el jugador.", "pt": "Vamos voltar para a **cena** para criar algumas restrições para o jogador.", "th": "กลับไปยัง **scene** เพื่อสร้างขีดจำกัดให้ผู้เล่น ", - "ar": "دعنا نعود إلى **المشهد** لفرض بعض القيود على اللاعبين." + "ar": "هيّا نعود إلى **المشهد** لفرض بعض القيود على اللاعبين." } } } @@ -2845,7 +2845,7 @@ "es": "Vamos a elegir un objeto de la tienda de recursos.", "pt": "Vamos escolher um objeto da loja de recursos.", "th": "เลือกวัตถุจากร้านค้า asset", - "ar": "دعنا نقوم بإختيار كائن من متجر العناصر" + "ar": "هيّا نقوم باختيار كائن من متجر العناصر" } }, "placement": "bottom" @@ -2912,7 +2912,7 @@ "es": "¡Vamos a usarla ahora!", "pt": "Vamos usá-la agora!", "th": "เอาไปใช้เลย!", - "ar": "دعنا نقوم باستخدام هذا الآن!" + "ar": "لنستخدم هذا الآن!" } } } @@ -2999,7 +2999,7 @@ "es": "Ahora, desactivemos el **comportamiento** “draggable” cuando los $(projectile)s estén fuera de la zona $(grabArea).", "pt": "Agora, desative o **comportamento** “draggable” quando os $(projectile)s estiverem fora da área $(grabArea).", "th": "ปิดฟังก์ชันในการสามารถถูกลาก **พฤติกรรม** ของ $(projectile) เมื่ออยู่ภายนอก $(grabArea)", - "ar": "دعنا نقوم بإلغاء تفعيل السلوك (Draggable) الخاص بكل الـ $(projectile) عندما يكون خارج الـ $(grabArea)." + "ar": "هيّا نقوم بإلغاء تفعيل السلوك (Draggable) الخاص بكل الـ $(projectile) عندما يكون خارج الـ $(grabArea)." } } } @@ -3019,7 +3019,7 @@ "es": "¡Creemos un nuevo evento!", "pt": "Vamos criar um novo evento!", "th": "สร้างอีเวนท์ใหม่กันเถอะ!", - "ar": "دعنا نقوم بإنشاء حدث جديد!" + "ar": "هيّا نقوم بإنشاء حدث جديد!" } } } @@ -3226,7 +3226,7 @@ "es": "Volvamos a la **escena** para colocar los $(projectile)s correctamente.", "pt": "Vamos voltar para a **cena** para colocar os $(projectile)s corretamente.", "th": "กลับไปยัง **scene** เพื่อวาง $(projectile) ให้ถูกต้อง", - "ar": "دعنا نعود إلى **المشهد** لإدراج كل الـ $(projectile) بشكل صحيح." + "ar": "هيّا نعود إلى **المشهد** لإدراج كل الـ $(projectile) بشكل صحيح." } } } @@ -3293,7 +3293,7 @@ "es": "Configura la protección de $(target).", "pt": "Configure a proteção de $(target).", "th": "ตั้งที่ป้องกัน $(target)", - "ar": "إعداد حماية الـ $(target)." + "ar": "إعداد حماية $(target)." } }, "description": { @@ -3303,7 +3303,7 @@ "es": "Coloca las instancias de $(block) y $(obstacle) de manera que protejan a $(target).", "pt": "Coloque as instâncias de $(block) e $(obstacle) de forma a proteger $(target).", "th": "จัดวาง $(block) และ $(obstacle) โดยมีเป้าหมายเพื่อปกป้อง $(target)", - "ar": "ترتيب كلًا من الـ $(block) والـ $(obstacle) بحيث تحمي الـ $(target)." + "ar": "ترتيب كلًا من الـ $(block) والـ $(obstacle) بحيث تحمي $(target)." } } } @@ -3393,7 +3393,7 @@ "es": "Rellena el formulario y luego haz clic aquí.", "pt": "Preencha o formulário e clique aqui.", "th": "กรอกฟอร์มแล้วกดตรงนี้", - "ar": "كتابة المعلومات وثم النقر هنا." + "ar": "ملء النموذج وثم النقر هنا." } }, "placement": "bottom" @@ -3461,7 +3461,7 @@ "es": "Haz clic aquí para abrir tu juego en tu navegador. ¡Recuerda compartir el enlace para que otros puedan jugar tu juego!\n\nUna vez que hayas terminado, cierra esta ventana.", "pt": "Clique aqui para abrir o seu jogo no seu navegador. Lembre-se de compartilhar o link para que outros possam jogar o seu jogo!\n\nUma vez que você terminar, feche esta janela.", "th": "คลิกที่นี่เพื่อเปิดเกมของคุณบนเบราวเซอร์ อย่าลืมแชร์ลิงค์เพื่อให้ผู้เล่นคนอื่นสามารถเล่นเกมของคุณได้!\n\nหลังจากเสร็จแล้ว ปิดหน้าต่างนี้", - "ar": "النقر هنا لفتح لعبتك على متصفحك، تذكر مشاركة الرابط حتى يتنسى للآخرين إمكانية لعب لعبتك!\n\nيمكنك الإغلاق بمجرد الانتهاء." + "ar": "النقر هنا لفتح لعبتك على متصفحك، يمكنك مشاركة الرابط حتى يتنسى للآخرين إمكانية لعب لعبتك!\n\nيمكنك الإغلاق بمجرد الانتهاء." } }, "placement": "top" @@ -3499,7 +3499,7 @@ "es": "Has descubierto otros conceptos básicos de GDevelop:\n- [Eventos](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Objetos de texto](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Capas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Acciones y condiciones](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", "pt": "Você descobriu outros conceitos básicos do GDevelop:\n- [Eventos](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Objetos de texto](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Camadas](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Ações e Condições](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", "th": "คุณได้เรียนรู้พื้นฐานของ GDevelop:\n- [Events](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [Text objects](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [Layers](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [Actions and Conditions](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)", - "ar": "لقد اكتشفت المزيد من أساسياتGDevelop:\n- [أحداث](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [كائنات نصية](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [طبقات](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [شروط وإجراءات](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" + "ar": "لقد اكتشفت المزيد من أساسيات GDevelop:\n- [أحداث](https://wiki.gdevelop.io/gdevelop5/events#:~:text=In%20GDevelop%2C%20events%20define%20the,events%20via%20the%20Events%20editor)\n- [كائنات نصية](https://wiki.gdevelop.io/gdevelop5/objects/text#:~:text=Text%20objects%20display%20text%20on,properties%20during%20gameplay%20using%20events)\n- [طبقات](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layers-and-cameras#:~:text=A%20layer%20acts%20as%20a,scene%20can%20have%20multiple%20layers)\n- [شروط وإجراءات](https://wiki.gdevelop.io/gdevelop5/events#:~:text=If%20an%20event%20does%20not,the%20value%20of%20a%20variable)" } }, { @@ -3547,7 +3547,7 @@ "es": "Ahora creemos una nueva **escena** para nuestra pantalla de inicio.", "pt": "Agora vamos criar uma nova **cena** para a nossa tela inicial.", "th": "ทีนี้สร้าง **scene** ใหม่ สำหรับฉากเริ่มต้น", - "ar": "الآن دعنا نقوم بإنشاء **مشهد** جديد لشاشة البداية خاصتنا." + "ar": "الآن هيّا نقوم بإنشاء **مشهد** جديد لشاشة البداية خاصتنا." } }, "placement": "right" @@ -3589,7 +3589,7 @@ "es": "Haga clic derecho en la nueva escena y cambie su nombre a “**PantallaInicio**”.\n\nUna vez terminado, haga clic en el elemento para abrir la escena.", "pt": "Clique com o botão direito na nova cena e altere o nome para “**TelaInicial**”.\n\nUma vez terminado, clique no item para abrir a nova cena.", "th": "คลิกขวาที่ scene ใหม่และเปลี่ยนชื่อเป็น “**StartScreen**”\n\nเมื่อเสร็จแล้ว คลิกที่ไอเทมเพื่อเปิด scene ใหม่", - "ar": "نقرة بزر الفأرة الأيمن على المشهد الجديد وإعادة تسميته إلى **StartScreen**.\n\nبمجرد الإنتهاء، النقر عليه لفتح المشهد الجديد." + "ar": "نقرة بزر الفأرة الأيمن على المشهد الجديد وإعادة تسميته إلى **StartScreen**.\n\nبمجرد الانتهاء، النقر عليه لفتح المشهد الجديد." } }, "placement": "right" @@ -3681,7 +3681,7 @@ "es": "¡Ahora creemos un título!", "pt": "Agora, vamos criar um título!", "th": "ทีนี้ได้เวลาสร้าง title!", - "ar": "الآن دعنا نقوم بإنشاء عنوان!" + "ar": "الآن هيّا نقوم بإنشاء عنوان!" } } } @@ -3699,7 +3699,7 @@ "es": "Vamos a crear un texto desde cero.", "pt": "Vamos criar um texto do zero.", "th": "สร้างข้อความเอง", - "ar": "الآن دعنا نقوم بإنشاء نص من الصفر." + "ar": "الآن هيّا نقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -3921,7 +3921,7 @@ "es": "Define el texto del objeto como “Jugar”.", "pt": "Defina o texto do objeto como “Jogar”.", "th": "เปลี่ยนข้อความเริ่มต้นเป็น “Start Game”", - "ar": "تغيير نص المثيل إلى أي شيء يدل على أن اللعبة ستبدأ بمجرد الضغط عليه.\n(على سبيل المثال: بدء اللعبة)" + "ar": "تغيير نص المثيل إلى أي شيء يدل على أن اللعبة ستبدأ بمجرد الضغط عليه.\n\n(على سبيل المثال: بدء اللعبة)" } }, "placement": "bottom" @@ -3981,7 +3981,7 @@ "es": "Ahora, hagamos que se pueda hacer clic en el texto.", "pt": "Agora, vamos fazer com que seja possível clicar no texto.", "th": "โต้ตอบกับข้อความ", - "ar": "الآن دعنا نتفاعل مع ذلك العنوانين." + "ar": "الآن هيّا نتفاعل مع تلك العنوانين." } } } @@ -4000,7 +4000,7 @@ "es": "Crea un nuevo **evento**.", "pt": "Crie um novo **evento**.", "th": "สร้าง **event** ใหม่", - "ar": "دعنا نقوم بإنشاء **حدث** جديد." + "ar": "هيّا نقوم بإنشاء **حدث** جديد." } } } @@ -4188,7 +4188,7 @@ "es": "Agreguemos una **acción** ahora.", "pt": "Vamos adicionar uma **ação** agora.", "th": "เพิ่ม **การกระทำ**", - "ar": "دعنا نقوم بإضافة **إجراء** الآن." + "ar": "هيّا نقوم بإضافة **إجراء** الآن." } } } @@ -4283,7 +4283,7 @@ "es": "Volvamos a la **escena** para mostrar el puntaje.", "pt": "Vamos voltar para a **cena** para adicionar um score.", "th": "กลับไปยัง **scene** เพื่อเพิ่มคะแนน", - "ar": "دعنا نعود إلى **المشهد** لإضافة النتيجة." + "ar": "هيّا نعود إلى **المشهد** لإضافة النتيجة." } } } @@ -4324,7 +4324,7 @@ "es": "Crea un objeto de texto que muestre la puntuación del jugador o jugadora.", "pt": "Vamos criar um texto que irá exibir o score do jogador.", "th": "สร้างข้อความสำหรับแสดงคะแนนผู้เล่น", - "ar": "دعنا نقوم بإنشاء نص ليعرض نتيجة اللاعبين." + "ar": "هيّا نقوم بإنشاء نص ليعرض النتيجة للاعبين." } } } @@ -4342,7 +4342,7 @@ "es": "Vamos a crear un objeto de texto desde cero.", "pt": "Vamos criar um texto do zero.", "th": "สร้างข้อความเอง", - "ar": "دعنا نقوم بإنشاء نص من الصفر." + "ar": "هيّا نقوم بإنشاء نص من الصفر." } }, "placement": "bottom" @@ -4464,7 +4464,7 @@ "es": "Arrastra $(scoreText) desde el menú al lienzo y colócalo en la esquina superior izquierda de la pantalla de juego.", "pt": "Arraste $(scoreText) do menu para o canvas e coloque-o no canto superior esquerdo da tela de jogo.", "th": "ลาก $(scoreText) ไปยังมุมซ้ายบนของหน้าจอ", - "ar": "سحب $(scoreText) إلى أعلى يسار الشاشة." + "ar": "سحب $(scoreText) إلى الشاشة." } }, "placement": "left" @@ -4483,7 +4483,7 @@ "es": "Ahora, cambiemos la puntuación del jugador o jugadora en función del tiempo transcurrido.", "pt": "Agora, vamos mudar a pontuação do jogador ou jogadora de acordo com o tempo decorrido.", "th": "เปลี่ยนแปลงคะแนนแบบไดนามิก", - "ar": "دعنا نقوم بتغيير النتيجة بفعالية." + "ar": "هيّا نقوم بتغيير النتيجة بفعالية." } } } @@ -4577,7 +4577,7 @@ "es": "Ahora creemos el temporizador.", "pt": "Agora, vamos criar o cronômetro.", "th": "สร้างนาฬืกาจับเวลา", - "ar": "دعنا نقوم بإنشاء مؤقت الآن." + "ar": "هيّا نقوم بإنشاء مؤقت الآن." } }, "placement": "top" @@ -4691,7 +4691,7 @@ "es": "Ahora, muestremos el marcador.", "pt": "Agora, vamos exibir a pontuação.", "th": "แสดงคะแนน", - "ar": "الآن دعنا نقوم بعرض النتيجة." + "ar": "الآن هيّا نقوم بعرض النتيجة." } } }, @@ -4710,7 +4710,7 @@ "es": "Hagamos que el marcador sea dinámico.", "pt": "Vamos tornar a pontuação dinâmica.", "th": "เปลี่ยนแปลงคะแนนให้เป็นแบบไดนามิก", - "ar": "دعنا نقوم بجعل النتيجة متفاعلة." + "ar": "هيّا نقوم بجعل النتيجة متفاعلة." } } } @@ -4747,7 +4747,7 @@ "es": "Cambiamos el texto.", "pt": "Vamos alterar o texto.", "th": "เราจะแก้ไขข้อความ", - "ar": "سوف نقوم بتغيير النص." + "ar": "سوف نقوم بتعديل النص." } } }, @@ -4826,7 +4826,7 @@ "es": "Ahora, guardemos la puntuación del jugador o jugadora.", "pt": "Agora, vamos salvar a pontuação do jogador ou jogadora.", "th": "ทีนี้ เราจะบันทึกคะแนนของผู้เล่น", - "ar": "الآن دعنا نقوم بحفظ نتيجة اللاعبين." + "ar": "الآن هيّا نقوم بحفظ نتيجة اللاعبين." } }, "description": { @@ -4930,7 +4930,7 @@ "es": "Cambiamos su nombre.", "pt": "Vamos mudar o nome.", "th": "เปลี่ยนชื่อ", - "ar": "دعنا نقوم بتغيير اسمه." + "ar": "هيّا نقوم بتغيير اسمه." } } }, @@ -4968,7 +4968,7 @@ "es": "Guarda cuando hayas terminado.", "pt": "Salve quando terminar.", "th": "บันทึกการเปลี่ยนแปลงหลังจากเสร็จแล้ว", - "ar": "حفظ التغييرات عند الإنتهاء." + "ar": "حفظ التغييرات عند الانتهاء." } } }, @@ -5209,7 +5209,7 @@ "es": "Haz clic en la acción *Esperar X segundos*.", "pt": "Clique em *Esperar X segundos*.", "th": "เลือกการกระทำ *รอ X วินาที*", - "ar": "تحديد الإجراء *انتظار لثوان*." + "ar": "تحديد الإجراء *الانتظار لثوان*." } } }, @@ -5371,7 +5371,7 @@ "es": "Ahora, la tabla de clasificación debería mostrarse cuando $(projectile) llegue a $(target).", "pt": "Agora, a classificação deve ser exibida quando $(projectile) atingir $(target).", "th": "leaderboard ควรจะแสดง เมื่อ $(projectile) ไปถึง $(target)", - "ar": "الآن من المفترض أن يتم عرض لوحة الصدارة وقتما يصل $(projectile) إلى $(target)." + "ar": "الآن من المفترض أن يتم عرض لوحة الصدارة بعدما يصل $(projectile) إلى $(target)." } }, "placement": "top" @@ -5390,7 +5390,7 @@ "es": "Ahora, pediremos al jugador que se autentique al abrir el juego.", "pt": "Agora, pediremos ao jogador que se autentique ao abrir o jogo.", "th": "ทีนี้เราจะถามผู้เล่นให้ยืนยันตอนที่เปิดเกม", - "ar": "الآن سوف نطلب من اللاعبين المصادقة في بداية اللعبة." + "ar": "الآن سوف نطالب اللاعبين بالمصادقة في بداية اللعبة." } } } @@ -5511,7 +5511,7 @@ "es": "Vamos a elegir una **acción**.", "pt": "Vamos escolher uma **ação**.", "th": "เลือก **การกระทำ**", - "ar": "دعنا نقوم بإختيار **إجراء**." + "ar": "هيّا نقوم باختيار **إجراء**." } } } @@ -5548,7 +5548,7 @@ "es": "Selecciona *Mostrar banner de autenticación*.", "pt": "Selecione *Mostrar banner de autenticação*.", "th": "เลือก *แสดงแบนเนอร์ authentication*", - "ar": "تحديد *عرض لافتة المصادقة**." + "ar": "تحديد *عرض لافتة المصادقة*." } } }, @@ -5567,7 +5567,7 @@ "es": "Ahora, los jugadores podrán iniciar sesión.", "pt": "Agora, os jogadores poderão fazer login.", "th": "เอาล่ะ ทีนี้ผู้เล่นจะถูกขอให้ล็อกอิน", - "ar": "حسنًا، الآن سوف يتم طلب اللاعبين تسجيل الدخول." + "ar": "حسنًا، الآن سوف يتم مطالبة اللاعبين بتسجيل الدخول." } }, "placement": "top" @@ -5586,7 +5586,7 @@ "es": "Vamos a asegurarnos de que el jugador vuelva a la pantalla de inicio después de cerrar el **tablero de clasificación**.", "pt": "Vamos garantir que o jogador volte para a tela inicial depois de fechar o **quadro de classificação**.", "th": "ทำให้มั่นใจว่าผู้เล่นจะกลับมาที่หน้าเริ่มต้นหลังกดปิด **leaderboard**", - "ar": "دعنا نتحقق أن اللاعبين سيعودون إلى شاشة البداية بعد إغلاق **لوحة الصدارة**." + "ar": "هيّا نتحقق أن اللاعبين سيعودون إلى شاشة البداية بعد إغلاق **لوحة الصدارة**." } } } diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 94d89d7..268ad5d 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -142,7 +142,7 @@ "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", - "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" + "ar": "هيّا نختار **كائن جاهز للاستخدام** من متجر العناصر" } }, "placement": "bottom" @@ -204,7 +204,7 @@ "es": "Vamos a usar una barra de recursos que se puede llenar o vaciar.", "pt": "Vamos usar uma barra de recursos que pode ser preenchida ou esvaziada.", "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้", - "ar": "سوف نستخدم شريط موارد يمكن أن يكون ممتلئًا أو فارغًا." + "ar": "سوف نستخدم شريط موارد يمكن ملؤه أو إفراغه." } } }, @@ -223,7 +223,7 @@ "es": "Elegimos la barra de corazones.", "pt": "Vamos escolher a barra de corações.", "th": "มาเลือก hearts bar กัน", - "ar": "دعنا نختار شريط القلوب." + "ar": "هيّا نختار شريط القلوب." } } } @@ -244,7 +244,7 @@ "es": "Agreguemosla a la escena.", "pt": "Vamos adicioná-la à cena.", "th": "เพิ่มลงไปใน scene", - "ar": "دعنا نقوم بإضافتها إلى المشهد." + "ar": "هيّا نقوم بإضافته إلى المشهد." } }, "placement": "top" @@ -263,7 +263,7 @@ "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", "th": "ปิดร้านค้า asset", - "ar": "دعنا نغلق متجر العناصر." + "ar": "هيّا نغلق متجر العناصر." } }, "placement": "top" @@ -340,7 +340,7 @@ "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", - "ar": "تحديد هذه **الطبقة** لنتمكن من إدراج القلوب الخاصة بنا داخلها." + "ar": "تحديد هذه **الطبقة** لنتمكن من إدراج القلوب داخلها." } }, "placement": "top" @@ -416,7 +416,7 @@ "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.", "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง", - "ar": "هل ترى **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإدراج الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." + "ar": "هل يمكنك رؤية **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإدراج الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." } }, "placement": "top", @@ -458,7 +458,7 @@ "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)", - "ar": "دعنا نقوم ب**إضافة إجراء** لتعريف عدد المحاولات التي ستُعرض على $(resourceBar)." + "ar": "هيّا نقوم ب**إضافة إجراء** لتعريف عدد المحاولات التي سيتم عرضها على $(resourceBar)." } } } @@ -515,7 +515,7 @@ "es": "Queremos que el valor de la barra de vida coincida con la salud de $(player), así que seleccionemos **= (establecer en)**.", "pt": "Queremos que o valor da barra de vida corresponda à saúde de $(player), então vamos selecionar **= (definir como)**.", "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد أن يكون قيمة الشريط متصلًا بصحة الـ $(player)، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نريد أن يكون قيمة الشريط متصلًا بصحة الـ $(player)، لذلك هيّا نحدد **= (تعيين إلى)**." } }, "placement": "top" @@ -535,7 +535,7 @@ "es": "Encontremos dónde está almacenada la salud de $(player).", "pt": "Vamos encontrar onde está armazenada a saúde de $(player).", "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน", - "ar": "والآن، دعنا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة." + "ar": "والآن، هيّا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة." } }, "placement": "bottom" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index b7617a0..9eb7420 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -81,7 +81,7 @@ "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", "pt": "Este jogo é um jogo de tiro em espaço em vista superior! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!", - "ar": "هذه لعبة إطلاق نار فضائية! الضغط على زر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!" + "ar": "هذه لعبة إطلاق نار فضائية! الضغط على الزر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!" } } } @@ -99,7 +99,7 @@ "es": "Primero, abramos el panel de **Capas**.", "pt": "Primeiro, vamos abrir o painel de **Camadas**.", "th": "เปิดแผงควบคุม **เลเยอร์**", - "ar": "أولًا، دعنا نفتح لوحة **الطبقات**." + "ar": "أولًا، هيّا نفتح لوحة **الطبقات**." } }, "placement": "bottom" @@ -157,7 +157,7 @@ "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น", - "ar": "حدد هذه **الطبقة** لنتمكن من إدراج عصا التحكم الخاصة بنا داخلها." + "ar": "تحديد هذه **الطبقة** لنتمكن من إدراج عصا التحكم الخاصة بنا داخلها." } }, "placement": "top" @@ -197,7 +197,7 @@ "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store", - "ar": "هذه اللعبة يمكن أن تُلعب بواسطة لوحة المفاتيح فقط، لذلك دعنا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصر للعثور على عصا تحكم جاهزة للاستخدام!" + "ar": "يمكن لعب هذه اللعبة بواسطة لوحة المفاتيح فقط، لذلك هيّا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصر للعثور على عصا تحكم جاهزة للاستخدام!" } } } @@ -215,7 +215,7 @@ "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", - "ar": "دعنا نختار **كائن جاهز للاستخدام** من متجر العناصر" + "ar": "هيّا نختار **كائن جاهز للاستخدام** من متجر العناصر" } }, "placement": "bottom" @@ -296,7 +296,7 @@ "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง", - "ar": "دعنا نختار هذه البيضاء، سوف تتناسب جيدًا مع خلفيتنا." + "ar": "هيّا نختار هذه البيضاء، سوف تتناسب جيدًا مع خلفيتنا." } } } @@ -317,7 +317,7 @@ "es": "Agreguemoslo a la escena.", "pt": "Adicionemos-o à cena.", "th": "เพิ่มวัตถุในฉาก", - "ar": "دعنا نقوم بإضافتها إلى المشهد." + "ar": "هيّا نقوم بإضافتها إلى المشهد." } }, "placement": "top" @@ -336,7 +336,7 @@ "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", "th": "ปิดร้านค้า asset", - "ar": "دعنا نغلق متجر العناصر." + "ar": "هيّا نغلق متجر العناصر." } }, "placement": "top" @@ -415,7 +415,7 @@ "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } }, "touchDescription": { @@ -425,7 +425,7 @@ "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "دعنا نربط $(joystick) و$(ship) الخاصان بنا بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**." } } } @@ -464,7 +464,7 @@ "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้", - "ar": "دعنا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته." + "ar": "هيّا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته." } } }, @@ -502,7 +502,7 @@ "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**", - "ar": "دعنا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**" + "ar": "هيّا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**" } } }, diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index 6d86fae..a3cc12a 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -48,7 +48,7 @@ "es": "- Crear una caja 3D\n\n- Agregar un comportamiento\n\n- Actualizar la elevación de una caja 3D", "pt": "- Criar uma caixa 3D\n\n- Adicionar um comportamento\n\n- Atualizar a elevação de uma caixa 3D", "th": "- สร้างกล่อง 3D\n\n- เพิ่มพฤติกรรม\n\n- อัปเดตความสูงของกล่อง 3D", - "ar": "- إنشاء مربع ثلاثي الأبعاد\n\n- إضافة سلوك\n\n- تحديث ارتفاع مربع ثلاثي الأبعاد" + "ar": "- إنشاء صندوق ثلاثي الأبعاد\n\n- إضافة سلوك\n\n- تحديث ارتفاع الصندوق الثلاثي الأبعاد" } }, { @@ -58,7 +58,7 @@ "es": "¡Ahora intenta llevar al personaje al botón de objetivo, evitando los objetos rojos!", "pt": "Agora tente levar o personagem até o botão de objetivo, evitando os objetos vermelhos!", "th": "ลองพยายามนำตัวละครไปยังปุ่มเป้าหมาย โดยหลีกเลี่ยงวัตถุสีแดง!", - "ar": "الآن حاول الوصول بالشخصية إلى زر الهدف، مع تجنب الأشياء الحمراء!" + "ar": "الآن حاول الوصول بالشخصية إلى زر الهدف، مع تجنب الكائنات الحمراء!" } } ] @@ -87,7 +87,7 @@ "es": "Este juego es un juego de plataformas, donde tienes que llevar al personaje al botón de objetivo, evitando los objetos rojos.\n\nPero aún no está terminado, ¡así que vamos a completarlo!", "pt": "Este jogo é um jogo de plataforma, onde você tem que levar o personagem até o botão de objetivo, evitando os objetos vermelhos.\n\nMas ainda não está terminado, então vamos completá-lo!", "th": "เกมนี้เป็นเกมแพลตฟอร์มเมอร์ ที่คุณต้องพาตัวละครไปยังปุ่มเป้าหมาย โดยหลีกเลี่ยงวัตถุสีแดง\n\nแต่ยังไม่เสร็จสิ้น ดังนั้นเรามาทำให้เสร็จสิ้นกันเถอะ!", - "ar": "هذه اللعبة هي لعبة منصات، حيث يجب عليك الوصول بالشخصية إلى زر الهدف، مع تجنب الأشياء الحمراء.\n\nولكنها لم تنته بعد، لذا دعنا نكملها!" + "ar": "هذه لعبة منصات، حيث يتوجب عليك الوصول بالشخصية إلى زر الهدف، مع تجنب الكائنات الحمراء.\n\nولكنها لم تنته بعد، لذا هيّا نكملها!" } } } @@ -126,7 +126,7 @@ "es": "Este juego no tiene ninguna plataforma para nuestro personaje, ¡así que agreguemos varias **cajas 3D** para crear una plataforma!", "pt": "Este jogo não tem nenhuma plataforma para o nosso personagem, então vamos adicionar várias **caixas 3D** para criar uma plataforma!", "th": "เกมนี้ไม่มีแพลตฟอร์มสำหรับตัวละครของเรา ดังนั้นเรามาเพิ่ม **กล่อง 3D** หลาย ๆ กล่องเพื่อสร้างแพลตฟอร์ม!", - "ar": "هذه اللعبة ليس لديها أي منصات لشخصيتنا، لذا دعنا نضيف عدة **صناديق ثلاثية الأبعاد** لإنشاء منصة!" + "ar": "هذه اللعبة ليس لديها أي منصات لشخصيتنا، لذا هيّا نقوم بإضافة عدة **صناديق ثلاثية الأبعاد** لإنشاء منصة!" } } } @@ -144,7 +144,7 @@ "es": "Crearemos una caja 3D desde cero.", "pt": "Vamos criar uma caixa 3D do zero.", "th": "เราจะสร้างกล่อง 3D จากต้นฉบับ", - "ar": "سنقوم بإنشاء صندوق ثلاثي الأبعاد من البداية." + "ar": "سنقوم بإنشاء صندوق ثلاثي الأبعاد من الصفر." } }, "placement": "bottom" @@ -165,7 +165,7 @@ "es": "Selecciona el objeto **Caja 3D**", "pt": "Selecione o objeto **Caixa 3D**", "th": "เลือกวัตถุ **กล่อง 3D**", - "ar": "حدد كائن **صندوق ثلاثي الأبعاد**" + "ar": "تحديد الكائن **صندوق ثلاثي الأبعاد**" } }, "placement": "bottom" @@ -185,7 +185,7 @@ "es": "Cambia el nombre del objeto a **Platform**.", "pt": "Altere o nome do objeto para **Plataforma**.", "th": "เปลี่ยนชื่อวัตถุเป็น **แพลตฟอร์ม**", - "ar": "غير اسم الكائن إلى **Platform**." + "ar": "تغيير اسم الكائن إلى **Platform**." } }, "placement": "bottom" @@ -205,7 +205,7 @@ "es": "Cambia el ancho a **128**.", "pt": "Altere a largura para **128**.", "th": "เปลี่ยนความกว้างเป็น **128**", - "ar": "غير العرض إلى **128**." + "ar": "تغيير العرض إلى **128**." } }, "placement": "bottom" @@ -225,7 +225,7 @@ "es": "Cambia la altura a **128**.", "pt": "Altere a altura para **128**.", "th": "เปลี่ยนความสูงเป็น **128**", - "ar": "غير الارتفاع إلى **128**." + "ar": "تغيير الارتفاع إلى **128**." } }, "placement": "bottom" @@ -245,7 +245,7 @@ "es": "Cambia la profundidad a **128**.", "pt": "Altere a profundidade para **128**.", "th": "เปลี่ยนความลึกเป็น **128**", - "ar": "غير العمق إلى **128**." + "ar": "تغيير العمق إلى **128**." } }, "placement": "bottom" @@ -285,7 +285,7 @@ "es": "**Marca** la casilla para repetir la imagen.", "pt": "**Marque** a caixa para repetir a imagem.", "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**حدد** الخانة لتكرار الصورة." + "ar": "**تحديد** الخانة لتكرار الصورة." } } }, @@ -324,7 +324,7 @@ "es": "**Marca** la casilla para repetir la imagen.", "pt": "**Marque** a caixa para repetir a imagem.", "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**حدد** الخانة لتكرار الصورة." + "ar": "**تحديد** الخانة لتكرار الصورة." } } }, @@ -363,7 +363,7 @@ "es": "**Marca** la casilla para repetir la imagen.", "pt": "**Marque** a caixa para repetir a imagem.", "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**حدد** الخانة لتكرار الصورة." + "ar": "**تحديد** الخانة لتكرار الصورة." } } }, @@ -402,7 +402,7 @@ "es": "**Marca** la casilla para repetir la imagen.", "pt": "**Marque** a caixa para repetir a imagem.", "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**حدد** الخانة لتكرار الصورة." + "ar": "**تحديد** الخانة لتكرار الصورة." } } }, @@ -441,7 +441,7 @@ "es": "**Marca** la casilla para repetir la imagen.", "pt": "**Marque** a caixa para repetir a imagem.", "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**حدد** الخانة لتكرار الصورة." + "ar": "**تحديد** الخانة لتكرار الصورة." } } }, @@ -481,7 +481,7 @@ "es": "Añadamos un nuevo comportamiento", "pt": "Vamos adicionar um novo comportamento", "th": "มาเพิ่มพฤติกรรมใหม่", - "ar": "لنضيف سلوكًا جديدًا" + "ar": "هيّا نقوم بإضافة سلوك جديد." } } }, @@ -500,7 +500,7 @@ "es": "Selecciona el comportamiento **Plataforma**.", "pt": "Selecione o comportamento **Plataforma**.", "th": "เลือกพฤติกรรม **แพลตฟอร์ม**", - "ar": "حدد سلوك **منصة**." + "ar": "تحديد السلوك **منصة**." } } }, @@ -541,7 +541,7 @@ "es": "Finalmente, asegurémonos de que la plataforma esté exactamente debajo del personaje. Abre la **Hoja de eventos** de la escena $(gameScene).", "pt": "Finalmente, vamos garantir que a plataforma esteja exatamente abaixo do personagem. Abra a **Planilha de eventos** da cena $(gameScene).", "th": "ในที่สุด มาตรวจสอบให้แน่ใจว่าแพลตฟอร์มอยู่ใต้ตัวละครอย่างแน่นอน ให้เปิด **แผ่นงานเหตุการณ์** ของฉาก $(gameScene)", - "ar": "أخيرًا ، دعونا نتأكد من أن المنصة تقع تحت الشخصية بالضبط. افتح **ورقة الأحداث** من مشهد $(gameScene)." + "ar": "أخيرًا ، هيّا نتأكد من أن المنصة تقع تحت الشخصية بالضبط. فتح **صفحة أحداث** المشهد $(gameScene)." } }, "placement": "bottom" @@ -561,7 +561,7 @@ "es": "Establezcamos la profundidad de la plataforma al comienzo de la escena. Haz clic en el botón **Añadir una acción**.", "pt": "Vamos definir a profundidade da plataforma no início da cena. Clique no botão **Adicionar uma ação**.", "th": "มาตั้งค่าความลึกของแพลตฟอร์มตอนเริ่มต้นของฉาก ให้คลิกที่ปุ่ม **เพิ่มการกระทำ**", - "ar": "دعونا نضبط عمق المنصة في بداية المشهد. انقر على زر **إضافة إجراء**." + "ar": "هيّا نضبط عمق المنصة في بداية المشهد. النقر على الزر **إضافة إجراء**." } } } @@ -598,7 +598,7 @@ "es": "Selecciona la acción **Z (elevación)**.", "pt": "Selecione a ação **Z (elevação)**.", "th": "เลือกการกระทำ **Z (ความสูง)**", - "ar": "حدد الإجراء **Z (الارتفاع)**." + "ar": "تحديد الإجراء **Z (الارتفاع)**." } } }, @@ -617,7 +617,7 @@ "es": "Queremos actualizar la elevación, así que seleccionemos **= (establecer en)**.", "pt": "Queremos atualizar a elevação, então vamos selecionar **= (definir para)**.", "th": "เราต้องการอัปเดตความสูง ดังนั้นให้เลือก **= (ตั้งค่าเป็น)**", - "ar": "نريد تحديث الارتفاع ، لذلك دعونا نختار **= (تعيين إلى)**." + "ar": "نريد تحديث الارتفاع ، لذلك هيّا نختار **= (تعيين إلى)**." } }, "placement": "bottom" @@ -638,7 +638,7 @@ "es": "Establezcamos la elevación en **-64**.", "pt": "Vamos definir a elevação para **-64**.", "th": "มาตั้งค่าความสูงเป็น **-64**", - "ar": "دعونا نضبط الارتفاع على **-64**." + "ar": "هيّا نضبط الارتفاع على **-64**." } }, "placement": "bottom" @@ -658,7 +658,7 @@ "es": "¡Bien! Ahora guardemos esto.", "pt": "Legal! Agora vamos salvar isso.", "th": "ดีมาก! มาบันทึกกันเถอะ", - "ar": "جميل! الآن دعنا نحفظ هذا." + "ar": "جميل! الآن هيّا نحفظ هذا." } }, "placement": "top" @@ -695,7 +695,8 @@ "fr": "Faites glisser $(platform) du menu au canvas.", "es": "Arrastra $(platform) desde el menú al lienzo.", "pt": "Arraste $(platform) do menu para o canvas.", - "th": "ลาก $(platform) จากเมนูไปยังแคนวาส" + "th": "ลาก $(platform) จากเมนูไปยังแคนวาส", + "ar": "سحب $(platform) من القائمة إلى المشهد." } }, "placement": "left" @@ -709,7 +710,8 @@ "fr": "J'ai terminé", "es": "He terminado", "pt": "Eu terminei", - "th": "เสร็จแล้ว" + "th": "เสร็จแล้ว", + "ar": "انتهيت" } } }, @@ -722,7 +724,7 @@ "es": "Coloquemos $(platform) debajo de nuestro personaje.", "pt": "Vamos colocar $(platform) abaixo do nosso personagem.", "th": "มาวาง $(platform) ใต้ตัวละครของเรา", - "ar": "لنضع $(platform) أسفل شخصيتنا." + "ar": "هيّا نقوم بإدراج $(platform) أسفل شخصيتنا." } }, "touchDescription": { @@ -753,7 +755,7 @@ "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على زر **معاينة**." + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." } }, "placement": "bottom" diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index de08c77..d616a94 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -82,7 +82,7 @@ "es": "¡Este juego usa una tabla de clasificación! ¡**Inicia sesión** para que podamos configurarlo automáticamente!\n\nPuedes omitir este paso si no quieres usar una tabla de clasificación, cerrando el cuadro de diálogo de la tabla de clasificación.", "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!\n\nVocê pode pular esta etapa se não quiser usar uma tabela de classificação, fechando a caixa de diálogo da tabela de classificação.", "th": "เกมนี้ใช้ leaderboard! ให้เรา **เข้าสู่ระบบ** เพื่อที่จะตั้งค่า leaderboard ให้เราอัตโนมัติ!\n\nคุณสามารถข้ามขั้นตอนนี้ได้หากคุณไม่ต้องการใช้ leaderboard โดยการปิดกล่องโต้ตอบ leaderboard", - "ar": "هذه اللعبة تستخدم لوحة صدارة! دعنا نقوم ب**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا كنت لا ترغب في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة." + "ar": "هذه اللعبة تستخدم لوحة صدارة! هيّا نقوم ب**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا لم يكن لديك الرغبة في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة." } }, "placement": "top" @@ -102,7 +102,7 @@ "es": "Primero, **creemos una tabla de clasificación** porque este juego la necesitará. ¡Tienes suerte, todo se configurará automáticamente para ti!", "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!", "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!", - "ar": "أولًا، دعنا نقوم ب**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. أنت محظوظ، فكل شيء سيتم إعداده تلقائيًا لأجلك!" + "ar": "أولًا، هيّا نقوم ب**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. لحسن حظك، كل شيء سيتم إعداده تلقائيًا لأجلك!" } }, "placement": "top" @@ -121,7 +121,7 @@ "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", "th": "ปิดเมนู", - "ar": "دعنا نغلق القائمة." + "ar": "هيّا نغلق القائمة." } } }, @@ -218,7 +218,7 @@ "es": "Una vez que hayas terminado, coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", "pt": "Uma vez que você terminou, coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", - "ar": "بمجرد أن تنتهي، إدراج **$(scoreMultiplier)* أسفل *Score* لعرض نقاط المضاعِفات!" + "ar": "بمجرد الانتهاء، إدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" } }, "touchDescription": { @@ -228,7 +228,7 @@ "es": "Una vez que hayas terminado, selecciona y coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", "pt": "Uma vez que você terminou, selecione e coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", "th": "เมื่อทำเสร็จแล้ว ให้เลือกและใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", - "ar": "بمجرد أن تنتهي، تحديد وإدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" + "ar": "بمجرد الانتهاء، تحديد وإدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" } }, "placement": "bottom" @@ -248,7 +248,7 @@ "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una variable de escena! Abre el **Project Manager**", "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**", "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**", - "ar": "نحتاج إلى تخزين النقاط في مكان ما، دعنا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**" + "ar": "نحتاج إلى تخزين النقاط في مكان ما، هيّا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**" } }, "placement": "bottom" @@ -306,7 +306,7 @@ "es": "¡Agreguemos nuestra primera **variable**!", "pt": "Vamos adicionar nossa primeira **variável**!", "th": "มาเพิ่ม **ตัวแปร** แรกของเรากันเถอะ!", - "ar": "دعنا نقوم بإضافة أول **متغير** لنا!" + "ar": "هيّا نقوم بإضافة أول **متغير** لنا!" } } }, @@ -325,7 +325,7 @@ "es": "Nombramos esta variable `Multiplier`.", "pt": "Vamos nomear esta variável `Multiplier`.", "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multiplier`", - "ar": "دعنا نقوم بتسمية هذا المتغير `Multiplier`." + "ar": "هيّا نقوم بتسمية هذا المتغير `Multiplier`." } }, "placement": "bottom" @@ -345,7 +345,7 @@ "es": "Cambiamos su tipo a **Número**.", "pt": "Vamos mudar seu tipo para **Número**.", "th": "เปลี่ยนประเภทเป็น **ตัวเลข**", - "ar": "دعنا نقوم بتغيير النوع إلى **عدد**." + "ar": "هيّا نقوم بتغيير النوع إلى **عدد**." } }, "placement": "bottom" @@ -365,7 +365,7 @@ "es": "Y finalmente, cambiemos su valor inicial a **1**.", "pt": "E finalmente, vamos mudar seu valor inicial para **1**.", "th": "และสุดท้าย เปลี่ยนค่าเริ่มต้นเป็น **1**", - "ar": "وأخيرًا وليس آخرًا، دعنا نقوم بتغيير القيمة إلى **1**." + "ar": "وأخيرًا وليس آخرًا، هيّا نقوم بتغيير القيمة إلى **1**." } }, "placement": "bottom" @@ -385,7 +385,7 @@ "es": "¡Y listo! Cerramos esta ventana.", "pt": "E acabamos! Vamos fechar esta janela.", "th": "เสร็จแล้ว! ปิดหน้าต่างได้เลย", - "ar": "وها قد انتهينا! دعنا نغلق هذه." + "ar": "وها قد انتهينا! لنغلق هذه." } } } @@ -403,7 +403,7 @@ "es": "Cerramos el menú.", "pt": "Vamos fechar o menu.", "th": "ปิดเมนู", - "ar": "دعنا نغلق القائمة." + "ar": "هيّا نغلق القائمة." } } }, @@ -422,7 +422,7 @@ "es": "Ahora activemos esos multiplicadores. Abre la **Hoja de eventos** de la escena $(gameScene).", "pt": "Agora vamos ativar esses multiplicadores. Vamos abra a **Folha de eventos** da cena $(gameScene).", "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)", - "ar": "الآن دعنا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene). " + "ar": "الآن هيّا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene). " } }, "placement": "bottom" @@ -518,7 +518,7 @@ "es": "Bien, nuestra **condición** está lista. Será **verdadera** cuando **$(ball) golpee el $(multiplier)**.", "pt": "Bem, nossa **condição** está pronta. Ela será **verdadeira** quando **$(ball) bater no $(multiplier)**.", "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**", - "ar": "حسنًا، إن **شرطنا** مستعد، هذا ***الشرط** سيكون **صحيحًا** عندما ** تلمس الـ $(ball) الـ $(multiplier)**." + "ar": "حسنًا، إن **شرطنا** مستعد، هذا **الشرط** سيكون **محققًا** عندما **تلمس الـ $(ball) الـ $(multiplier)**." } }, "placement": "top" @@ -537,7 +537,7 @@ "es": "Hagamos que nuestro multiplicador desaparezca con una **acción** ahora.", "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora.", "th": "ทำให้ multiplier หายไป โดยใช้ **การกระทำ**", - "ar": "دعنا نقوم بجعل مضاعِفاتنا الآن تختفي بواسطة **إجراء**." + "ar": "هيّا نقوم بجعل مضاعِفاتنا تختفي بواسطة **إجراء** الآن." } } } @@ -574,7 +574,7 @@ "es": "Haremos que **$(multiplier)** desaparezca en caso de colisión.", "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão.", "th": "เราจะทำให้ **$(multiplier)** หายไปเมื่อมีการชนกัน", - "ar": "سوف نجعل **$(multiplier) تختفي مع التصادم." + "ar": "سوف نجعل **$(multiplier)** تختفي مع التصادم." } } }, @@ -593,7 +593,7 @@ "es": "Es importante tomar en cuenta que solo el $(multiplier) que sea tocado por la $(ball) (coincida con nuestra condición) será eliminado. Este principio se llama **elección de objeto**.\n\nCerraremos esta ventana.", "pt": "É importante notar que apenas o $(multiplier) que for atingido pela $(ball) (que corresponder à nossa condição) será excluído. Esse princípio é chamado de **escolha de objeto**.\n\nVamos fechar esta janela.", "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้", - "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nدعنا نغلق هذه." + "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nلنغلق هذه." } }, "placement": "top" @@ -612,7 +612,7 @@ "es": "¡Ahora, **reproducimos un sonido** cuando se recolecta!", "pt": "Agora, **reproduzimos um som** quando é coletado!", "th": "ทีนี้มาเพิ่มการ **เล่นเสียง** เมื่อมีการเก็บ!", - "ar": "الآن دعنا نقوم ب**تشغيل صوت** عندما يتم جمع المضاعِفات!" + "ar": "الآن سوف نقوم ب**تشغيل صوت** عندما يتم جمع المضاعِفات!" } } } @@ -707,7 +707,7 @@ "es": "Actualicemos nuestra **variable** en consecuencia.", "pt": "Atualizemos nossa **variável** em conformidade.", "th": "ทำการ **อัพเดทตัวแปร**", - "ar": "دعنا نقوم ب**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها." + "ar": "هيّا نقوم ب**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها." } } } @@ -744,7 +744,7 @@ "es": "Nuestro multiplicador es un número, por lo que seleccionemos la acción **Cambiar variable numérica**.", "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**.", "th": "multiplier ของเราเป็นตัวเลข ดังนั้นเลือกการกระทำ **เปลี่ยนตัวเลขตัวแปร**", - "ar": "مضاعِفاتنا عبارة عن عدد، لذلك دعنا نقوم بتحديد الإجراء **تغيير متغير عدد**." + "ar": "مضاعِفاتنا عبارة عن عدد، لذلك هيّا نقوم بتحديد الإجراء **تغيير متغير عدد**." } } }, @@ -783,7 +783,7 @@ "es": "Queremos aumentar el multiplicador, así que seleccionemos **+ (agregar)**.", "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**.", "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**", - "ar": "نحن نريد أن نزيد المضاعِفات، لذلك دعنا نقوم بتحديد **+ (زائد)**." + "ar": "نحن نريد أن نزيد المضاعِفات، لذلك هيّا نقوم بتحديد **+ (زائد)**." } }, "placement": "bottom" @@ -803,7 +803,7 @@ "es": "Ingrese **1**.", "pt": "Digite **1**.", "th": "ใส่ **1**", - "ar": "دعنا نقوم بإدخال **1**." + "ar": "هيّا نقوم بإدخال **1**." } }, "placement": "bottom" @@ -842,7 +842,7 @@ "es": "Agreguemos un poco de sabor y **creemos partículas** cuando el **$(multiplier)** es recolectado.", "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado.", "th": "เพิ่มความน่าตื่นเต้นโดย **สร้าง particles** เมื่อ **$(multiplier)** ถูกเก็บ", - "ar": "دعنا نقوم بإضافة بعض المؤثرات و**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**." + "ar": "هيّا ننعش أجواء اللعبة ونقوم ب**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**." } } } @@ -879,7 +879,7 @@ "es": "Vamos a **crear algunas partículas** que hemos preparado para usted, elija la acción **Crear un objeto**.", "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**.", "th": "เราจะ **สร้าง some particles** เราเตรียมเอาไว้ให้คุณแล้ว เลือกการกระทำ **สร้างวัตถุ**", - "ar": "سوف نقوم بـ**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن جديد**." + "ar": "سوف نقوم ب**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن**." } } }, @@ -918,7 +918,7 @@ "es": "Hagamos que aparezcan donde estaba el multiplicador,\n\ningrese `$(multiplier).X()`.", "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`.", "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`", - "ar": "دعنا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X`." + "ar": "هيّا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X()`." } }, "placement": "bottom" @@ -938,7 +938,7 @@ "es": "Y `$(multiplier).Y()`.", "pt": "E `$(multiplier).Y()`.", "th": "และ `$(multiplier).Y()`", - "ar": "و`$(multiplier).Y`." + "ar": "و `$(multiplier).Y()`." } }, "placement": "bottom" @@ -958,7 +958,7 @@ "es": "¡Bien! Nuestras **$(particles)** serán **creadas** exactamente donde estaba el **$(multiplier)**, ¡lo que dará un buen efecto!", "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!", "th": "ดีมาก! **$(particles)** ของเราจะ **ถูกสร้าง** ที่ตำแหน่งของ **$(multiplier)** เป็นเอฟเฟกต์ที่เพิ่มคุณภาพกราฟฟิกได้!", - "ar": "جميل! الـ **$(particles)** خاصتنا سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!" + "ar": "جميل! الـ **$(particles)** سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!" } }, "placement": "top" @@ -1052,7 +1052,7 @@ "es": "Queremos actualizar el texto por completo, así que seleccionemos **= (establecer en)**.", "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**.", "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نحن نريد تحديث النص بالكامل، لذلك دعنا نحدد **= (تعيين إلى)**." + "ar": "نحن نريد تحديث النص بالكامل، لذلك هيّا نحدد **= (تعيين إلى)**." } }, "placement": "bottom" @@ -1072,7 +1072,7 @@ "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+VariableString(Multiplier)`.", "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`.", "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`", - "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x1، x2، إلخ... لذلك دعنا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+VariableString(Multiplier)`." + "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x2، x1، إلخ... لذلك هيّا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+VariableString(Multiplier)`." } }, "placement": "bottom" @@ -1092,7 +1092,7 @@ "es": "¡Bien! ¡nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!", "th": "ดีมาก! **$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ", - "ar": "جميل! الـ **$(scoreMultiplier)** خاصتنا سوف يتم تحديثها بفضل **المتغير Multiplier** الذي حولناه إلى نص!" + "ar": "جميل! سيتم تحديث الـ **$(scoreMultiplier)** بفضل **المتغير Multiplier** الذي حولناه إلى نص!" } }, "placement": "top" @@ -1111,7 +1111,7 @@ "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. **Cerramos el grupo Multiplicador de puntuación** con la flecha a la izquierda.", "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **fechar o grupo Multiplicador de pontuação** com a seta à esquerda.", "th": "สุดท้ายเราจะนำตัวแปร Multiplier มาใช้ในการคำนวณคะแนน ให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", - "ar": "وأخيرًا وليس آخرًا، نحن نحتاج من مضاعِفاتنا أن تُحصى عندما يتم حساب النتيجة، دعنا **نطوي المجموعة Score multiplier** بواسطة السهم على اليسار." + "ar": "وأخيرًا وليس آخرًا، نحن نحتاج من مضاعِفاتنا أن تُحصى عندما يتم حساب النتيجة، هيّا **نطوي المجموعة Score multiplier** بواسطة السهم على اليسار." } }, "placement": "bottom" @@ -1130,7 +1130,7 @@ "es": "Y **desplegamos el grupo Tocando plots** con la flecha a la izquierda.", "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda.", "th": "และให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", - "ar": "ودعنا نقوم ب**توسيع المجموعة Hitting pegs** بواسطة السهم على اليسار." + "ar": "وهيّا نقوم ب**توسيع المجموعة Hitting pegs** بواسطة السهم على اليسار." } }, "placement": "bottom" @@ -1149,7 +1149,7 @@ "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **dando doble clic en ella**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!", - "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه**!" + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. هيّا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه**!" } }, "touchDescription": { @@ -1159,7 +1159,7 @@ "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", - "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. دعنا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين**!" + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. هيّا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين**!" } } } @@ -1177,7 +1177,7 @@ "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Variable(Multiplier)`.", "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`.", "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`", - "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nدعنا نقوم بإدخال `1*Variable(Multiplier)`." + "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nهيّا نقوم بإدخال `1*Variable(Multiplier)`." } }, "placement": "bottom" @@ -1216,7 +1216,7 @@ "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง", - "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه** مجددًا." + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، هيّا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه** مجددًا." } }, "touchDescription": { @@ -1226,7 +1226,7 @@ "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", - "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، دعنا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين** مجددًا." + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، هيّا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين** مجددًا." } } } @@ -1264,7 +1264,7 @@ "es": "¡Ahora cerramos esto!", "pt": "Agora vamos fechar isso!", "th": "ปิดหน้าต่างได้เลย!", - "ar": "الآن دعنا نغلق هذا." + "ar": "الآن هيّا نغلق هذا." } }, "placement": "top" diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 170434b..24d7518 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -122,7 +122,7 @@ "es": "Primero, creemos un texto para mostrar el tiempo que se ha pasado jugando al nivel. Haga clic en el botón **Agregar nuevo objeto**.", "pt": "Primeiro, vamos criar um texto para exibir o tempo gasto jogando o nível. Clique no botão **Adicionar novo objeto**.", "th": "เริ่มต้นกันด้วยการสร้างข้อความเพื่อแสดงเวลาที่ใช้ในการเล่นเกม คลิกที่ปุ่ม **เพิ่มวัตถุใหม่**", - "ar": "أولًا، دعنا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضي في لعب هذه المرحلة. الضغط على الزر **إضافة كائن جديد**. " + "ar": "أولًا، هيّا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضي في لعب هذه المرحلة. الضغط على الزر **إضافة كائن جديد**. " } }, "placement": "top" @@ -301,7 +301,7 @@ "es": "Coloque $(scoreText) en la parte superior derecha de la pantalla, para que el jugador pueda ver su puntuación mientras juega.\n\nCuando hayas terminado, haz clic en el botón de abajo.", "pt": "Coloque $(scoreText) no canto superior direito da tela, para que o jogador possa ver sua pontuação enquanto joga.\n\nQuando terminar, clique no botão abaixo.", "th": "วาง $(scoreText) ที่ด้านบนขวาของหน้าจอ เพื่อให้ผู้เล่นสามารถเห็นคะแนนของตนเองขณะเล่นได้\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "إدراج الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية وقتهم الذي قضوه في اللعب. \n\nعندما تنتهي، الضغط على الزر أدناه." + "ar": "إدراج الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية وقتهم الذي قضوه في اللعب. \n\nعند الانتهاء، الضغط على الزر أدناه." } }, "placement": "top", @@ -323,7 +323,7 @@ "es": "¡Ahora, **actualicemos este texto con un temporizador**! **Abramos la hoja de eventos** de su escena $(gameScene).", "pt": "Agora, **atualizemos este texto com um temporizador**! **Abra a Planilha de Eventos** de sua cena $(gameScene).", "th": "ตอนนี้ **อัปเดตข้อความนี้ด้วยตัวจับเวลา**! **เปิดแผ่นงานเหตุการณ์** ของฉากของคุณ $(gameScene)", - "ar": "الآن دعنا نقوم ب**تحديث هذا النص مع المؤقت**! دعنا نقوم ب**فتح صفحة الأحداث** لمشهدك $(gameScene)." + "ar": "الآن هيّا نقوم ب**تحديث هذا النص مع المؤقت**! هيّا نقوم ب**فتح صفحة الأحداث** لمشهدك $(gameScene)." } }, "placement": "bottom" @@ -343,7 +343,7 @@ "es": "Agreguemos una **condición** para detectar cuando comienza el juego.", "pt": "Vamos **adicionar uma condição** para detectar quando o jogo começa.", "th": "เพิ่ม **เงื่อนไข** เพื่อตรวจสอบเมื่อเกมเริ่มต้น", - "ar": "دعنا نقوم ب**إضافة شرط** لكشف وقت بدء اللعبة." + "ar": "هيّا نقوم ب**إضافة شرط** لكشف وقت بدء اللعبة." } } } @@ -513,7 +513,7 @@ "es": "Ahora actualicemos la puntuación gracias al temporizador.", "pt": "Agora vamos atualizar a pontuação graças ao cronômetro.", "th": "ตอนนี้เราจะอัปเดตคะแนนของเราโดยใช้ตัวจับเวลา", - "ar": "الآن دعنا نقوم بتحديث النص بفضل المؤقت." + "ar": "الآن هيّا نقوم بتحديث النص بفضل المؤقت." } } } @@ -550,7 +550,7 @@ "es": "Cambiamos el texto.", "pt": "Vamos alterar o texto.", "th": "เราจะเปลี่ยนข้อความ", - "ar": "سوف نقوم بتغيير النص." + "ar": "سوف نقوم بتعديل النص." } } }, @@ -590,7 +590,7 @@ "es": "Ahora, usemos el valor del temporizador.", "pt": "Agora, vamos usar o valor do cronômetro.", "th": "ตอนนี้เราจะใช้ค่าของตัวจับเวลา", - "ar": "والآن، دعنا نستخدم قيمة المؤقت." + "ar": "والآن، هيّا نستخدم قيمة المؤقت." } }, "placement": "bottom" @@ -690,7 +690,7 @@ "es": "¡Bien, detalle final! Si lo dejamos así, el texto de la puntuación mostrará los decimales de nuestro temporizador y solo queremos los segundos.\n\n¡**Redondeemos** ese número!\n\nAgreguemos la función `round()` alrededor del valor para que podamos redondear el valor del temporizador. El resultado se verá así:\n\n`\"ToString(round( TimerElapsedTime(\"GameTimer\")))`", "pt": "Bem, detalhe final! Se deixarmos assim, o texto da pontuação exibirá os decimais do nosso cronômetro e só queremos os segundos!\n\nVamos **arredondar** esse número.\n\nVamos adicionar a função `round()` ao redor do valor para que possamos arredondar o valor do cronômetro. O resultado será assim:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", "th": "ดี รายละเอียดสุดท้าย! ถ้าเราเหลืออย่างนี้ ข้อความคะแนนจะแสดงทศนิยมของตัวจับเวลาของเราและเราต้องการเฉพาะวินาที!\n\nเราจะ **ปัดเศษ** ตัวเลขนั้น\n\nเราจะเพิ่มการใช้ฟังก์ชัน `round()` รอบค่าเพื่อที่เราจะปัดเศษค่าของตัวจับเวลา ผลลัพธ์จะเป็นแบบนี้\n\n`ToString(round(TimerElapsedTime(\"GameTimer\")))`", - "ar": "حسنًا، نحن في التفاصيل النهائية! إذا تركناها هكذا، سيعرض النص أرقامًا عشرية ونحن نريد الثواني فقط!\n\nدعنا نقوم ب**تقريب** ذاك الرقم.\n\nدعنا نستخدم التعبير `round()` حول القيمة حتى يتم تقريب قيمة المؤقت. سوف تصبح هكذا:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" + "ar": "حسنًا، نحن في التفاصيل النهائية! إذا تركناها هكذا، سيعرض النص أرقامًا عشرية ونحن نريد الثواني فقط!\n\nهيّا نقوم ب**تقريب** ذاك الرقم.\n\nلنستخدم التعبير `round()` حول القيمة حتى يتم تقريب قيمة المؤقت. سوف يصبح هكذا:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" } }, "placement": "top" From 7f76f80abde8a99ba9b4eea6f961b2a83bae9051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 1 Sep 2023 16:27:34 +0200 Subject: [PATCH 078/208] Fix for 3D object --- tutorials/in-app/object3d.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index a3cc12a..81ffd09 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -569,7 +569,7 @@ { "elementToHighlightId": "objectInObjectOrResourceSelector:platform", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-Scene3D--Cube3DObject--SetZ" + "presenceOfElement": "#instruction-item-Scene3D--Base3DBehavior--SetZ" }, "tooltip": { "description": { @@ -586,7 +586,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-Scene3D--Cube3DObject--SetZ", + "elementToHighlightId": "#instruction-item-Scene3D--Base3DBehavior--SetZ", "nextStepTrigger": { "presenceOfElement": "#parameter-1-operator-field" }, @@ -605,7 +605,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#parameter-1-operator-field", + "elementToHighlightId": "#parameter-2-operator-field", "nextStepTrigger": { "valueEquals": "=" }, @@ -626,7 +626,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#parameter-2-expression-field", + "elementToHighlightId": "#parameter-3-expression-field", "nextStepTrigger": { "valueEquals": "-64" }, From df9515159b5463bc2cbcebfb550cbed0b0225ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 1 Sep 2023 16:41:46 +0200 Subject: [PATCH 079/208] Fix exposing resources --- scripts/generate-database.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate-database.js b/scripts/generate-database.js index 4bd23c2..33221f2 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -104,7 +104,7 @@ const updateResources = (gd, project, baseUrl) => { return baseUrl + '/' + file; }; - project.exposeResources(worker); + gd.ResourceExposer.exposeWholeProjectResources(project, worker); }; /** From 691ba545ba5f8cbe839dc7ff22fb2222cfe861f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 1 Sep 2023 19:00:21 +0200 Subject: [PATCH 080/208] Clear cache too --- scripts/deploy.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/deploy.js b/scripts/deploy.js index 71be28f..a6120b4 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -79,6 +79,8 @@ axios 'https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json', 'https://resources.gdevelop-app.com/in-app-tutorials/timer.json', 'https://resources.gdevelop-app.com/in-app-tutorials/templates/timer/game.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/object3d.json', + 'https://resources.gdevelop-app.com/in-app-tutorials/templates/object3d/game.json', ], }, { From e6769b417b5b6da590b049d2e8661ba8c49421b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 1 Sep 2023 19:29:04 +0200 Subject: [PATCH 081/208] Fix wrong selector --- tutorials/in-app/object3d.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index 81ffd09..ac86f85 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -588,7 +588,7 @@ { "elementToHighlightId": "#instruction-item-Scene3D--Base3DBehavior--SetZ", "nextStepTrigger": { - "presenceOfElement": "#parameter-1-operator-field" + "presenceOfElement": "#parameter-2-operator-field" }, "tooltip": { "description": { From 3100f9ee83a7a1bed92487e1211595600e18b937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 4 Sep 2023 10:12:55 +0200 Subject: [PATCH 082/208] Move touch action into the right step --- tutorials/in-app/object3d.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index ac86f85..5ed659b 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -699,6 +699,16 @@ "ar": "سحب $(platform) من القائمة إلى المشهد." } }, + "touchDescription": { + "messageByLocale": { + "en": "**Select** then **drag** $(platform) into the **scene**.", + "fr": "**Sélectionnez** puis **faites glisser** $(platform) du menu au canvas.", + "es": "**Seleccione** y **arrastrar** $(platform) al **escenario**.", + "pt": "**Selecione** e **arraste** $(platform) para a **cena**.", + "th": "**เลือก** แล้ว **ลาก** $(platform) ไปยัง **ฉาก**", + "ar": "**تحديد** ثم **سحب** الـ $(platform) إلى **المشهد**." + } + }, "placement": "left" } }, @@ -727,16 +737,6 @@ "ar": "هيّا نقوم بإدراج $(platform) أسفل شخصيتنا." } }, - "touchDescription": { - "messageByLocale": { - "en": "**Select** then **drag** $(platform) into the **scene**.", - "fr": "**Sélectionnez** puis **faites glisser** $(platform) du menu au canvas.", - "es": "**Seleccione** y **arrastrar** $(platform) al **escenario**.", - "pt": "**Selecione** e **arraste** $(platform) para a **cena**.", - "th": "**เลือก** แล้ว **ลาก** $(platform) ไปยัง **ฉาก**", - "ar": "**تحديد** ثم **سحب** الـ $(platform) إلى **المشهد**." - } - }, "image": { "dataUrl": "data:image/png;base64,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" } From 82f383de1859856700b388ded7343c834a12c05f Mon Sep 17 00:00:00 2001 From: Hektor_ <128101580+Hekt000r@users.noreply.github.com> Date: Sun, 1 Oct 2023 22:20:25 +0200 Subject: [PATCH 083/208] add albanian to joystick tutorial --- tutorials/in-app/joystick.json | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 9eb7420..f295fd7 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -6,7 +6,7 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "availableLocales": ["en", "fr", "es", "pt", "th", "ar", "sq"], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -17,6 +17,7 @@ { "messageByLocale": { "en": "# You've finished this lesson!", + "sq": "# Ju keni perfunduar kete mesim!", "fr": "# Vous avez terminé cette leçon !", "es": "# ¡Has terminado esta lección!", "pt": "# Você terminou esta lição!", @@ -27,6 +28,7 @@ { "messageByLocale": { "en": "Well done, in this tutorial you've learned how to:", + "sq": "Bravo, ne kete mesim ju keni mesuar si te:", "fr": "Bien joué, voici ce que vous avez appris :", "es": "¡Bien hecho! En este tutorial, has aprendido:", "pt": "Bom trabalho, neste tutorial você aprendeu:", @@ -37,6 +39,7 @@ { "messageByLocale": { "en": "- Create a layer\n\n- Add and use a prefab object\n\n- Use a behavior", + "sq": "- Krijo nje layer\n\n- Shto dhe perdor nje objekt prefab\n\n- Perdor nje veprim", "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué\n\n- Comment utiliser un comportement", "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab\n\n- Cómo usar un comportamiento", "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab\n\n- Como usar um comportamento", @@ -47,6 +50,7 @@ { "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", + "sq": "Ju mund te vazhdoni te shtoni gjera te kete loje, ose publikoje!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", @@ -64,6 +68,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "Let's go!", + "sq": "Hajde shkojme!", "fr": "C'est parti !", "es": "¡Vamos!", "pt": "Vamos lá!", @@ -77,6 +82,7 @@ "description": { "messageByLocale": { "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!", + "sq": "Kjo loje eshte nje Top-down (larte poshte) gjuajes ! Shtype buttoni qe shkruan **preview** per te luajtur.\n Ju mund te levizni anijen me taste shigjetat, provo mos t`i prekesh guret!", "fr": "Ce jeu est un jeu de tir dans l'espace en vue du dessus ! Clique sur le bouton **prévisualiser** pour jouer.\nTu peux déplacer le vaisseau avec les flèches du clavier, essaie d'éviter de toucher les rochers !", "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", "pt": "Este jogo é um jogo de tiro em espaço em vista superior! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", @@ -95,6 +101,7 @@ "description": { "messageByLocale": { "en": "First, let's open the **Layers** panel.", + "sq": "Se fillimi, e hapim **Layers** panel.", "fr": "Premièrement, ouvrons le panneau des **calques**.", "es": "Primero, abramos el panel de **Capas**.", "pt": "Primeiro, vamos abrir o painel de **Camadas**.", @@ -115,6 +122,7 @@ "description": { "messageByLocale": { "en": "We will first create a layer for the User Interface (UI) elements.", + "sq": "Se pari do the krijojme nje layer per elementet se nderfaqen te perdoruesit", "fr": "Nous allons d'abord créer un calque qui contiendra l'interface utilisateur (IU).", "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", @@ -134,6 +142,7 @@ "description": { "messageByLocale": { "en": "Change the name to **Interface**.", + "sq": "Ndroje emrin ne **Nderfaqe**", "fr": "Changeons son nom en **Interface**.", "es": "Cambiamos su nombre a **Interface**.", "pt": "Mudamos o nome para **Interface**.", @@ -153,6 +162,7 @@ "description": { "messageByLocale": { "en": "Select this **layer** so we can place our joystick inside of it.", + "sq": "Selekto kete **layer** qe te vendojme joystikun mbrenda saj.", "fr": "Sélectionnons ce **calque** pour y placer notre joystick.", "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", @@ -172,6 +182,7 @@ "description": { "messageByLocale": { "en": "Open the **Objects** panel.", + "sq": "Hape panelin **Objekte**", "fr": "Ouvrez le panneau des **objets**.", "es": "Abre el panel de **objetos**.", "pt": "Abra o painel de **objetos**.", @@ -193,6 +204,7 @@ "description": { "messageByLocale": { "en": "This game can only be played with a keyboard, so let's add **joystick controllers**, so that we can play on **mobile**!\n\nLet's go to the asset store to find a joystick prefab!", + "sq": "Kjo loje mund the luhet vetem me nje tastjer, le te shtojme nje**kontroller joystiki**, qe te mund te luajme ne **mobil**!\n\n Hajde shkojme ne dyqan per asseta qe te gjejme nje joystik prefab!", "fr": "Ce jeu ne peut être joué qu'avec un clavier, alors ajoutons un **joystick** pour pouvoir y jouer sur **mobile** !\n\nAllons dans le magasin de ressources pour trouver un joystick préfabriqué !", "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", @@ -211,6 +223,7 @@ "description": { "messageByLocale": { "en": "Let's choose a **prefab object** from the asset store", + "sq": "Hajde te zgjedhim nje **prefab objekt** prej asset storit", "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", @@ -232,6 +245,7 @@ "description": { "messageByLocale": { "en": "Let's go back to the store home page.", + "sq": "Hajde shkojme prap te homi e faqes.", "fr": "Retournons à la page d'accueil du magasin.", "es": "Volvamos a la página de inicio de la tienda.", "pt": "Vamos voltar para a página inicial da loja.", @@ -254,6 +268,7 @@ "description": { "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", + "sq": "Do te perdorim nje objekt e cila vjen me aktion dhe konditione te bere gati. Ne e thirrim kete nje **Gati per perdorim objekt**.", "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", @@ -273,6 +288,7 @@ "description": { "messageByLocale": { "en": "We will use a joystick.", + "sq": "Do te perdorim nje joystik.", "fr": "Nous allons utiliser un joystick.", "es": "Vamos a usar un joystick.", "pt": "Vamos usar um joystick.", @@ -292,6 +308,7 @@ "description": { "messageByLocale": { "en": "Let's choose this white joystick, it will match well with our background.", + "sq": "Hajde te zgjedhim kete joystik te bardhe, ajo do te ngjaje me backgroundin tone.", "fr": "Choisissons ce joystick blanc, il s'accordera bien avec notre fond.", "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", @@ -313,6 +330,7 @@ "description": { "messageByLocale": { "en": "Let's add it to the scene.", + "sq": "Hajde te shtojme ate te skena.", "fr": "Ajoutons le à la scène.", "es": "Agreguemoslo a la escena.", "pt": "Adicionemos-o à cena.", @@ -332,6 +350,7 @@ "description": { "messageByLocale": { "en": "Let's close the asset store.", + "sq": "Hajde ta mbyllim asset storin.", "fr": "Fermons le magasin de ressources", "es": "Cerramos la tienda de recursos.", "pt": "Vamos fechar a loja de recursos.", @@ -351,6 +370,7 @@ "description": { "messageByLocale": { "en": "Drag the **$(joystick)** to the scene.", + "sq": "Vendose ate **$(joystick)** te skena", "fr": "Faites glisser **$(joystick)** du menu à la scène.", "es": "Arrastra **$(joystick)** desde el menú a la escena.", "pt": "Arraste **$(joystick)** do menu para a cena.", @@ -361,6 +381,7 @@ "touchDescription": { "messageByLocale": { "en": "Select the **$(joystick)**, then drag it to the scene.", + "sq": "Selektoje ate **$(joystick)**, pastaj vendose ne skene.", "fr": "Sélectionnez **$(joystick)**, puis faites-le glisser à la scène.", "es": "Selecciona **$(joystick)**, luego arrástralo a la escena.", "pt": "Selecione **$(joystick)**, em seguida, arraste-o para a cena.", @@ -375,6 +396,7 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", + "sq": "Une mbarova", "fr": "J'ai terminé", "es": "He terminado", "pt": "Terminei", @@ -388,6 +410,7 @@ "description": { "messageByLocale": { "en": "Place the $(joystick) below the ship on the screen, so that the player can use their thumb to control it easily.", + "sq": "Vendose ate $(joystick) nder anijen ne ekran, qe te mund lojtari te perdore gishtin e madh per te kontrolluar ate lehte.", "fr": "Placez le $(joystick) en dessous du vaisseau à l'écran, de façon à ce que le joueur puisse utiliser son pouce pour le contrôler facilement.", "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", @@ -411,6 +434,7 @@ "description": { "messageByLocale": { "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nclick on the 3 dot menu, or right click on **$(ship)**, and select **Edit behaviors**.", + "sq": "Ec te linkojme $(joystick) dhe $(ship) tone fale te **veprimet** qe erdhen me prefabin:\n\nshtype ne 3 pikat menu, ose shtype me anen te djatht ne **$(ship)** dhe selekto **Ndrysho veprimet**", "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\ncliquez sur le menu à 3 points, ou faites un clic droit sur **$(ship)**, et sélectionnez **Modifier les comportements**.", "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", @@ -421,6 +445,7 @@ "touchDescription": { "messageByLocale": { "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nSelect, then long press on **$(ship)**, then select **Edit behaviors**.", + "sq": "Hajde te linkojme $(joystick) dhe $(ship) tone fale te **veprimve** qe erdhen me prefabin:\n\nSelekto, pastaj mbaje gjate gishtin ne **$(ship)**, pastaj selekto **Ndrysho veprimet**", "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\nSélectionnez, puis appuyez longuement sur **$(ship)**, puis sélectionnez **Modifier les comportements**.", "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", @@ -439,6 +464,7 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", + "sq": "Shikoje **veprimet** te **objektit** ketu.", "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", @@ -460,6 +486,7 @@ "description": { "messageByLocale": { "en": "Let's add the **Top down multi-touch controller mapper** behavior that was installed.", + "sq": "Hajde te shtojme **Top down multi-touch controller mapper** verpim qe ishte installuar", "fr": "Ajoutons le comportement **Top down multi-touch controller mapper** qui a été installé.", "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", @@ -479,6 +506,7 @@ "description": { "messageByLocale": { "en": "Select the **Top down multi-touch controller mapper** behavior.", + "sq": "Selekto **Top down multi-touch controller mapper** veprim.", "fr": "Sélectionnez le comportement **Top down multi-touch controller mapper**.", "es": "Selecciona el comportamiento **Top down multi-touch controller mapper**.", "pt": "Selecione o comportamento **Top down multi-touch controller mapper**.", @@ -498,6 +526,7 @@ "description": { "messageByLocale": { "en": "Let's update the stick mode, so that it can be controlled at **360°**.", + "sq": "Hajde te ndryshojme stik modin, qe te kontrollohet ne **360°** ", "fr": "Changeons le mode de la manette, pour qu'elle puisse être contrôlée à **360°**.", "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", @@ -517,6 +546,7 @@ "description": { "messageByLocale": { "en": "That's it! Now the joystick will control the ship!", + "sq": "C' ajo! Tash joystiku do te kontrolloje anijen!", "fr": "C'est tout ! Maintenant, la manette contrôlera le vaisseau !", "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", "pt": "É isso aí! Agora o joystick controlará o navio!", @@ -535,6 +565,7 @@ "description": { "messageByLocale": { "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "sq": "Ne regull, jemi gati! Hajde te testojme lojen tone te shohim ndryshimet qe kemi be! Shtype buttonin **Preview** ", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", From 7444a808de4a06ac51f3180df7585e2c96786c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:04:17 +0100 Subject: [PATCH 084/208] Fix plinko selectors --- tutorials/in-app/plinkoMultiplier.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index d616a94..81a6c3b 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -985,24 +985,24 @@ { "elementToHighlightId": "#instruction-editor-dialog #search-bar", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-TextObject--String" + "presenceOfElement": "#instruction-item-TextContainerCapability--TextContainerBehavior--SetValue" }, "tooltip": { "description": { "messageByLocale": { - "en": "Search for **Modify**.", - "fr": "Recherchez **Modifier**.", - "es": "Busque **Modificar**.", - "pt": "Procure por **Modificar**.", - "th": "ค้นหา **แก้ไข**", - "ar": "البحث عن **تعديل**." + "en": "Search for **Text**.", + "fr": "Recherchez **Texte**.", + "es": "Busque **Texto**.", + "pt": "Procure **Texto**.", + "th": "ค้นหา **Text**", + "ar": "البحث عن **نص**." } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-TextObject--String", + "elementToHighlightId": "#instruction-item-TextContainerCapability--TextContainerBehavior--SetValue", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, @@ -1039,7 +1039,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#parameter-1-operator-field", + "elementToHighlightId": "#parameter-2-operator-field", "nextStepTrigger": { "valueEquals": "=" }, @@ -1060,7 +1060,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#parameter-2-string-field", + "elementToHighlightId": "#parameter-3-string-field", "nextStepTrigger": { "valueEquals": "\"x\"+VariableString(Multiplier)" }, From 5baf1fff5a9e5ef07a9157fc21e6039698b7cb32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:33:18 +0100 Subject: [PATCH 085/208] Fix fling and timer too --- tutorials/in-app/flingGame.json | 4 ++-- tutorials/in-app/timer.json | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 559fe8f..12bbfd9 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -4718,7 +4718,7 @@ { "elementToHighlightId": "objectInObjectOrResourceSelector:scoreText", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-TextObject--String" + "presenceOfElement": "#instruction-item-TextContainerCapability--TextContainerBehavior--SetValue" }, "tooltip": { "description": { @@ -4735,7 +4735,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-TextObject--String", + "elementToHighlightId": "#instruction-item-TextContainerCapability--TextContainerBehavior--SetValue", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 24d7518..806add4 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -521,7 +521,7 @@ { "elementToHighlightId": "objectInObjectOrResourceSelector:scoreText", "nextStepTrigger": { - "presenceOfElement": "#instruction-item-TextObject--String" + "presenceOfElement": "#instruction-item-TextContainerCapability--TextContainerBehavior--SetValue" }, "tooltip": { "description": { @@ -538,7 +538,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-TextObject--String", + "elementToHighlightId": "#instruction-item-TextContainerCapability--TextContainerBehavior--SetValue", "nextStepTrigger": { "presenceOfElement": "#instruction-parameters-container" }, @@ -678,7 +678,7 @@ "isOnClosableDialog": true }, { - "elementToHighlightId": "#parameter-2-string-field", + "elementToHighlightId": "#parameter-3-string-field", "nextStepTrigger": { "valueEquals": "ToString(round(TimerElapsedTime(\"GameTimer\")))" }, From 27c78fafa52dd3a327586c37fe15ea05b3f1d887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 28 Nov 2023 11:10:08 +0100 Subject: [PATCH 086/208] Fix fling game with new publish dialog --- tutorials/in-app/flingGame.json | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 12bbfd9..1e32bda 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -3346,6 +3346,48 @@ "placement": "bottom" } }, + { + "elementToHighlightId": "#publish-tab", + "nextStepTrigger": { + "presenceOfElement": "#publish-gd-games" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Let's head to the publish section.", + "fr": "Allons dans la section publier.", + "es": "Vamos a la sección de publicación.", + "pt": "Vamos para a seção de publicação.", + "th": "ไปที่ส่วนการเผยแพร่", + "ar": "هيّا نتوجه إلى قسم النشر." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, + { + "elementToHighlightId": "#publish-gd-games", + "nextStepTrigger": { + "presenceOfElement": "#export-dialog #create-account-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "We will publish this game to gd.games, GDevelop's gaming platform.", + "fr": "Nous allons publier ce jeu sur gd.games, la plateforme de jeux de GDevelop.", + "es": "Publicaremos este juego en gd.games, la plataforma de juegos de GDevelop.", + "pt": "Vamos publicar este jogo no gd.games, a plataforma de jogos do GDevelop.", + "th": "เราจะเผยแพร่เกมนี้ไปยัง gd.games แพลตฟอร์มเกมของ GDevelop", + "ar": "سوف نقوم بنشر هذه اللعبة على gd.games، منصة ألعاب GDevelop." + } + }, + "placement": "bottom" + }, + "skippable": true, + "isOnClosableDialog": true + }, { "elementToHighlightId": "#export-dialog #create-account-button", "nextStepTrigger": { From 50c89eebe4e83d1a1800690c230efd09724aaa3f Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:32:30 +0200 Subject: [PATCH 087/208] Add new trigger for object addition to scene --- docs/inAppTutorial/REFERENCE.md | 3 ++- tutorials/in-app/flingGame.json | 30 +++++++++++++++--------------- tutorials/in-app/healthBar.json | 2 +- tutorials/in-app/joystick.json | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index 792f752..601cbab 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -106,7 +106,7 @@ Here is the structure of a step (all fields are optional): - `isTriggerFlickering`(true): useful when a DOM mutation is not caught and the presence trigger is not fired. - `shortcuts`: list of steps that the flow can use as shortcuts. - `stepId`: id of the step to jump to - - `trigger`: DOM trigger (presence of absence of element) + - `trigger`: DOM trigger (presence of absence of element) or objectAddedInLayout trigger. - `skippable` (true): if the step can be skipped (useful when the user interaction can result in this step not being mandatory) - `isOnClosableDialog` (true): if the step is on a closable dialog, if the element to highlight is missing (meaning the dialog has been closed), the flow will go back to the previous step that is not on a closable dialog. - `mapProjectData` (object): allow to read data in the GDevelop project object and store it during the duration of the tutorial. This data can then be used in the tooltips. See [Available Project Data](#available-project-data) @@ -119,6 +119,7 @@ At the moment, only one trigger can be specified to go the next step. Here is th - `absenceOfElement` (string): the CSS selector of an element absent from the DOM or a custom selector - `valueHasChanged` (true): the CSS selector of an input whose value has changed - `valueEquals` (string): the CSS selector of an input whose value is equal to the string (even for numbers, it has to be a string, ex: "2") +- `objectAddedInLayout` (true): an object has been added to the scene (from scratch, duplication or the asset store) - `instanceAddedOnScene` (string): the name of an object for which an instance has been added on the scene - `instancesCount` (number): the number of instances that should be present on the scene (to be used with `instanceAddedOnScene`) - `previewLaunched` (true): a preview has been launched diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 1e32bda..12cfd67 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -393,7 +393,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-0" + "objectAddedInLayout": true }, "tooltip": { "description": { @@ -565,7 +565,7 @@ { "stepId": "CloseAssetStoreForProjectile", "trigger": { - "presenceOfElement": "#object-item-1" + "objectAddedInLayout": true } } ] @@ -581,7 +581,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-1" + "objectAddedInLayout": true }, "mapProjectData": { "projectile": "sceneLastObjectName:playScene" @@ -710,7 +710,7 @@ { "stepId": "CloseAssetStoreForTarget", "trigger": { - "presenceOfElement": "#object-item-2" + "objectAddedInLayout": true } } ] @@ -726,7 +726,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-2" + "objectAddedInLayout": true }, "mapProjectData": { "target": "sceneLastObjectName:playScene" @@ -854,7 +854,7 @@ { "stepId": "CloseAssetStoreForBlock", "trigger": { - "presenceOfElement": "#object-item-3" + "objectAddedInLayout": true } } ] @@ -870,7 +870,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-3" + "objectAddedInLayout": true }, "mapProjectData": { "block": "sceneLastObjectName:playScene" @@ -1746,7 +1746,7 @@ { "stepId": "CloseAssetStoreForBackground", "trigger": { - "presenceOfElement": "#object-item-4" + "objectAddedInLayout": true } } ] @@ -1762,7 +1762,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-4" + "objectAddedInLayout": true }, "mapProjectData": { "background": "sceneLastObjectName:playScene" @@ -2000,7 +2000,7 @@ { "stepId": "CloseAssetStoreForObstacle", "trigger": { - "presenceOfElement": "#object-item-5" + "objectAddedInLayout": true } } ] @@ -2016,7 +2016,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-5" + "objectAddedInLayout": true }, "mapProjectData": { "obstacle": "sceneLastObjectName:playScene" @@ -2874,7 +2874,7 @@ { "stepId": "CloseAssetStoreForGrabArea", "trigger": { - "presenceOfElement": "#object-item-7" + "objectAddedInLayout": true } } ], @@ -2891,7 +2891,7 @@ "elementToHighlightId": "#add-asset-button", "isTriggerFlickering": true, "nextStepTrigger": { - "presenceOfElement": "#object-item-7" + "objectAddedInLayout": true }, "mapProjectData": { "grabArea": "sceneLastObjectName:playScene" @@ -3560,7 +3560,7 @@ { "elementToHighlightId": "objectInObjectsList:background", "nextStepTrigger": { - "presenceOfElement": "#objects-list [id^=object-item][data-global=true]" + "presenceOfElement": "#objects-list [data-global=true]" }, "tooltip": { "description": { @@ -3872,7 +3872,7 @@ { "elementToHighlightId": "objectInObjectsList:title", "nextStepTrigger": { - "presenceOfElement": "#scene-editor[data-active=true] #object-item-2" + "objectAddedInLayout": true }, "tooltip": { "description": { diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 268ad5d..fdb2ef8 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -231,7 +231,7 @@ { "elementToHighlightId": "#add-asset-button", "nextStepTrigger": { - "presenceOfElement": "#object-item-8" + "objectAddedInLayout": true }, "mapProjectData": { "resourceBar": "sceneLastObjectName:level" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index f295fd7..6134487 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -321,7 +321,7 @@ { "elementToHighlightId": "#add-asset-button", "nextStepTrigger": { - "presenceOfElement": "#object-item-8" + "objectAddedInLayout": true }, "mapProjectData": { "joystick": "sceneLastObjectName:level" From 298a53a1dc377592c649e5742a317d5d815d19ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 7 Dec 2023 10:38:00 +0100 Subject: [PATCH 088/208] Fix loading resources correctly --- scripts/generate-database.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/generate-database.js b/scripts/generate-database.js index 33221f2..1559728 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -87,7 +87,9 @@ const generateFolderStructure = () => { * @param {string} baseUrl */ const updateResources = (gd, project, baseUrl) => { - const worker = new gd.ArbitraryResourceWorkerJS(); + const worker = new gd.ArbitraryResourceWorkerJS( + project.getResourcesManager() + ); /** @param {string} file */ worker.exposeImage = (file) => { // Don't do anything From 6d4526340feeb39fb2ed496d82c05e406a34da10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:21:11 +0100 Subject: [PATCH 089/208] Improve joystick-in-app-tutorial --- templates/joystick/game.json | 126 ++++++--- tutorials/in-app/joystick.json | 470 +++++++++++++++++++++++---------- 2 files changed, 418 insertions(+), 178 deletions(-) diff --git a/templates/joystick/game.json b/templates/joystick/game.json index 1ed3924..d85c2d4 100644 --- a/templates/joystick/game.json +++ b/templates/joystick/game.json @@ -8,6 +8,8 @@ }, "properties": { "adaptGameResolutionAtRuntime": true, + "antialiasingMode": "MSAA", + "antialisingEnabledOnMobile": false, "folderProject": false, "orientation": "portrait", "packageName": "com.example.JoystickLesson", @@ -163,6 +165,9 @@ "resourceFolders": [] }, "objects": [], + "objectsFolderStructure": { + "folderName": "__ROOT" + }, "objectsGroups": [], "variables": [], "layouts": [ @@ -330,9 +335,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": true, "assetStoreId": "911c6f50a4c05507c6fc1df967493f61a7ce9bad9e144cec92f6ff32be42749a", "name": "BigBrownMeteor1", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -365,20 +370,20 @@ "customCollisionMask": [ [ { - "x": 12, - "y": 10 + "x": 0, + "y": 0 }, { - "x": 87, - "y": 10 + "x": 101, + "y": 0 }, { - "x": 87, - "y": 72 + "x": 101, + "y": 83 }, { - "x": 12, - "y": 72 + "x": 0, + "y": 83 } ] ] @@ -390,9 +395,9 @@ ] }, { + "adaptCollisionMaskAutomatically": true, "assetStoreId": "ca0633aaa11c9973eff808d10322e7c3142144c53b0c4747cd55b303acdc81f6", "name": "BigGreyMeteor1", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -425,20 +430,20 @@ "customCollisionMask": [ [ { - "x": 12, - "y": 5 + "x": 0, + "y": 0 }, { - "x": 87, - "y": 5 + "x": 101, + "y": 0 }, { - "x": 87, - "y": 74 + "x": 101, + "y": 83 }, { - "x": 12, - "y": 74 + "x": 0, + "y": 83 } ] ] @@ -450,9 +455,9 @@ ] }, { + "adaptCollisionMaskAutomatically": true, "assetStoreId": "829045c7d03f177ede71c000a4fc81b0ddbdc73a91144b7fa32ad0b557e4b020", "name": "MediumBrownMeteor1", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -485,20 +490,20 @@ "customCollisionMask": [ [ { - "x": 4, - "y": 5 + "x": 0, + "y": 1 }, { - "x": 38, - "y": 5 + "x": 43, + "y": 1 }, { - "x": 38, - "y": 36 + "x": 43, + "y": 43 }, { - "x": 4, - "y": 36 + "x": 0, + "y": 43 } ] ] @@ -510,9 +515,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "2dfe5abcf8449b36588904833bd4d48556da3e9cb3770285e4f8aa6ad3bd3b96", "name": "OrangePlayerShip3", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -586,9 +591,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Walls", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -630,7 +635,6 @@ "assetStoreId": "2d701679df0e067e63e657f3a7de8b0c076c1c0db19e7c6070c186b28a611df2", "height": 128, "name": "BlackSpace", - "tags": "", "texture": "tiled_black space.png", "type": "TiledSpriteObject::TiledSprite", "width": 128, @@ -642,7 +646,6 @@ "assetStoreId": "c20fe4657b50f46f901b666ddae13412211ef388c101136bacecd5bee34520b4", "height": 128, "name": "StarryBackgroundStars2", - "tags": "", "texture": "tiled_Starry Background Stars 2.png", "type": "TiledSpriteObject::TiledSprite", "width": 128, @@ -659,6 +662,7 @@ "emitterForceMax": 250, "emitterForceMin": 175, "flow": 30, + "jumpForwardInTimeOnCreation": 0, "maxParticleNb": 300, "name": "Trail", "particleAlpha1": 255, @@ -686,7 +690,6 @@ "rendererParam1": 10, "rendererParam2": 1, "rendererType": "Point", - "tags": "", "tank": -1, "textureParticleName": "", "type": "ParticleSystem::ParticleEmitter", @@ -696,6 +699,35 @@ "behaviors": [] } ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "BigBrownMeteor1" + }, + { + "objectName": "BigGreyMeteor1" + }, + { + "objectName": "MediumBrownMeteor1" + }, + { + "objectName": "OrangePlayerShip3" + }, + { + "objectName": "Walls" + }, + { + "objectName": "BlackSpace" + }, + { + "objectName": "StarryBackgroundStars2" + }, + { + "objectName": "Trail" + } + ] + }, "events": [ { "colorB": 116, @@ -1116,9 +1148,15 @@ "ambientLightColorB": 0, "ambientLightColorG": 22239848, "ambientLightColorR": 16, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, + "isLocked": false, "name": "", + "renderingType": "", "visibility": true, "cameras": [ { @@ -1136,6 +1174,30 @@ } ], "behaviorsSharedData": [ + { + "name": "Animation", + "type": "AnimatableCapability::AnimatableBehavior" + }, + { + "name": "Effect", + "type": "EffectCapability::EffectBehavior" + }, + { + "name": "Flippable", + "type": "FlippableCapability::FlippableBehavior" + }, + { + "name": "Opacity", + "type": "OpacityCapability::OpacityBehavior" + }, + { + "name": "Resizable", + "type": "ResizableCapability::ResizableBehavior" + }, + { + "name": "Scale", + "type": "ScalableCapability::ScalableBehavior" + }, { "name": "TopDownMovement", "type": "TopDownMovementBehavior::TopDownMovementBehavior" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 6134487..7bb51a0 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -6,7 +6,24 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar", "sq"], + "availableLocales": [ + "en", + "fr", + "ar", + "de", + "es", + "it", + "ja", + "ko", + "pl", + "pt", + "th", + "ru", + "sl", + "sq", + "uk", + "zh" + ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/joystick/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -17,45 +34,81 @@ { "messageByLocale": { "en": "# You've finished this lesson!", - "sq": "# Ju keni perfunduar kete mesim!", "fr": "# Vous avez terminé cette leçon !", + "ar": "# لقد أنهيت هذا الدرس!", + "de": "# Du hast diese Lektion abgeschlossen!", "es": "# ¡Has terminado esta lección!", + "it": "# Hai finito questa lezione!", + "ja": "# このレッスンは終了しました!", + "ko": "# 이 레슨을 완료했습니다!", + "pl": "# Ukończyłeś tę lekcję!", "pt": "# Você terminou esta lição!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "ru": "# Вы завершили этот урок!", + "sl": "# Končali ste to lekcijo!", + "sq": "# Ju keni perfunduar kete mesim!", + "uk": "# Ви завершили цей урок!", + "zh": "# 你完成了这节课!" } }, { "messageByLocale": { "en": "Well done, in this tutorial you've learned how to:", - "sq": "Bravo, ne kete mesim ju keni mesuar si te:", "fr": "Bien joué, voici ce que vous avez appris :", - "es": "¡Bien hecho! En este tutorial, has aprendido:", - "pt": "Bom trabalho, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:", + "de": "Gut gemacht, in diesem Tutorial hast du geler:", + "es": "¡Bien hecho, en este tutorial has aprendido cómo:", + "it": "Ben fatto, in questo tutorial hai imparato come:", + "ja": "このチュートリアルでは、次のことを学びました:", + "ko": "이 튜토리얼에서 다음을 배웠습니다.", + "pl": "Dobrze, w tym samouczku nauczyłeś się, jak:", + "pt": "Bom trabalho, neste tutorial você aprendeu como:", + "ru": "Хорошо, в этом уроке вы узнали, как:", + "sl": "Bravo, v tem vadnem programu ste se naučili, kako:", + "sq": "Bravo, ne kete mesim ju keni mesuar si te:", + "th": "ทำได้ดีเยี่ยม, ในบทเรียนนี้คุณได้เรียนรู้วิธี:", + "uk": "Добре, в цьому уроці ви дізналися, як:", + "zh": "做得好,在本教程中,您学会了如何:" } }, { "messageByLocale": { - "en": "- Create a layer\n\n- Add and use a prefab object\n\n- Use a behavior", - "sq": "- Krijo nje layer\n\n- Shto dhe perdor nje objekt prefab\n\n- Perdor nje veprim", - "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué\n\n- Comment utiliser un comportement", - "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab\n\n- Cómo usar un comportamiento", - "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab\n\n- Como usar um comportamento", - "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab\n\n- วิธีใช้งานพฤติกรรม", - "ar": "- إنشاء طبقة\n\n- إضافة واستخدام عناصر كائنات جاهزة للاستخدام\n\n- استخدام سلوك" + "en": "- Add and use a prefab object\n\n- Use a behavior", + "fr": "- Comment ajouter et utiliser un objet préfabriqué\n\n- Comment utiliser un comportement", + "ar": "- إضافة واستخدام عناصر كائنات جاهزة للاستخدام\n\n- استخدام سلوك", + "de": "- Ein Prefab-Objekt hinzufügen und verwenden\n\n- Ein Verhalten verwenden", + "es": "- Cómo agregar y usar un objeto prefab\n\n- Cómo usar un comportamiento", + "it": "- Aggiungere e utilizzare un oggetto prefab\n\n- Utilizzare un comportamento", + "ja": "- プレハブオブジェクトを追加して使用する\n\n- ビヘイビアを使用する", + "ko": "- 프리팹 오브젝트를 추가하고 사용하는 방법\n\n- 행동 사용하기", + "pl": "- Dodawanie i używanie obiektu prefab\n\n- Używanie zachowania", + "pt": "- Como adicionar e usar um objeto prefab\n\n- Como usar um comportamento", + "ru": "- Добавить и использовать объект prefab\n\n- Использовать поведение", + "sl": "- Dodajanje in uporaba predloge objekta\n\n- Uporaba vedenja", + "sq": "- Shto dhe perdor nje objekt prefab\n\n- Perdor nje veprim", + "th": "- วิธีเพิ่มและวิธีใช้วัตถุ prefab\n\n- วิธีใช้งานพฤติกรรม", + "uk": "- Додавання та використання об'єкта prefab\n\n- Використання поведінки", + "zh": "- 添加和使用预制对象\n\n- 使用行为" } }, { "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", - "sq": "Ju mund te vazhdoni te shtoni gjera te kete loje, ose publikoje!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!", + "de": "Sie können weiterhin Dinge zu diesem Spiel hinzufügen oder es veröffentlichen!", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", + "it": "Puoi continuare ad aggiungere cose a questo gioco o pubblicarlo!", + "ja": "このゲームにさらに要素を追加するか、公開することができます!", + "ko": "이 게임에 더 많은 것을 추가하거나 게시할 수 있습니다!", + "pl": "Możesz dalej dodawać rzeczy do tej gry lub ją opublikować!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "ru": "Вы можете продолжать добавлять вещи в эту игру или опубликовать ее!", + "sl": "Lahko še naprej dodajate stvari v to igro ali jo objavite!", + "sq": "Ju mund te vazhdoni te shtoni gjera te kete loje, ose publikoje!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "uk": "Ви можете продовжувати додавати речі до цієї гри або опублікувати її!", + "zh": "您可以继续为这个游戏添加东西,或者发布它!" } } ] @@ -68,12 +121,21 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "Let's go!", - "sq": "Hajde shkojme!", "fr": "C'est parti !", + "ar": "لنبدأ!", + "de": "Los geht's!", "es": "¡Vamos!", + "it": "Andiamo!", + "ja": "さあ、始めましょう!", + "ko": "출발!", + "pl": "Zaczynamy!", "pt": "Vamos lá!", + "ru": "Поехали!", + "sl": "Gremo!", + "sq": "Hajde shkojme!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "uk": "Почнемо!", + "zh": "让我们开始吧!" } } }, @@ -82,97 +144,25 @@ "description": { "messageByLocale": { "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!", - "sq": "Kjo loje eshte nje Top-down (larte poshte) gjuajes ! Shtype buttoni qe shkruan **preview** per te luajtur.\n Ju mund te levizni anijen me taste shigjetat, provo mos t`i prekesh guret!", "fr": "Ce jeu est un jeu de tir dans l'espace en vue du dessus ! Clique sur le bouton **prévisualiser** pour jouer.\nTu peux déplacer le vaisseau avec les flèches du clavier, essaie d'éviter de toucher les rochers !", + "ar": "هذه لعبة إطلاق نار فضائية! الضغط على الزر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!", + "de": "Dieses Spiel ist ein Top-Down-Weltraum-Shooter! Klicken Sie auf die **Vorschau**-Schaltfläche, um zu spielen.\nSie können das Schiff mit den Pfeiltasten bewegen, versuchen Sie, die Felsen zu vermeiden!", "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", - "pt": "Este jogo é um jogo de tiro em espaço em vista superior! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", + "it": "Questo gioco è uno sparatutto spaziale dall'alto verso il basso! Clicca sul pulsante **anteprima** per giocare.\nPuoi muovere la nave con i tasti freccia, cerca di evitare di toccare le rocce!", + "ja": "このゲームは、上から見た宇宙シューティングゲームです! **プレビュー** ボタンをクリックしてプレイしてください。\n矢印キーで宇宙船を動かすことができます。岩に触れないようにしてください!", + "ko": "이 게임은 탑다운 우주 슈팅 게임입니다! **미리보기** 버튼을 클릭하여 플레이하세요.\n화살표 키로 우주선을 움직일 수 있습니다. 돌에 닿지 않도록 하세요!", + "pl": "Ta gra to strzelanka kosmiczna z widokiem z góry! Kliknij przycisk **podgląd**, aby zagrać.\nMożesz poruszać statkiem za pomocą klawiszy strzałek, spróbuj unikać dotykania skał!", + "pt": "Este jogo é um jogo de tiro espacial de cima para baixo! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", + "ru": "Эта игра - космический шутер сверху вниз! Нажмите на кнопку **предпросмотр**, чтобы играть.\nВы можете перемещать корабль с помощью стрелок, попробуйте избегать касания камней!", + "sl": "Ta igra je vesoljski strelec zgoraj navzdol! Klikni na gumb **predogled** za igranje.\nLahko premikaš ladjo s puščičnimi tipkami, poskusi se izogniti dotikanju kamnov!", + "sq": "Kjo loje eshte nje Top-down (larte poshte) gjuajes ! Shtype buttoni qe shkruan **preview** per te luajtur.\n Ju mund te levizni anijen me taste shigjetat, provo mos t`i prekesh guret!", "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!", - "ar": "هذه لعبة إطلاق نار فضائية! الضغط على الزر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!" + "uk": "Ця гра - космічний шутер зверху вниз! Натисніть на кнопку **попередній перегляд**, щоб грати.\nВи можете переміщати корабель за допомогою стрілок, спробуйте уникати дотику до каменів!", + "zh": "这个游戏是一个自上而下的太空射击游戏!点击 **预览** 按钮进行游戏。\n你可以用方向键移动飞船,试着避免碰到岩石!" } } } }, - { - "elementToHighlightId": "#toolbar-open-layers-panel-button", - "nextStepTrigger": { - "presenceOfElement": "#add-layer-button" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "First, let's open the **Layers** panel.", - "sq": "Se fillimi, e hapim **Layers** panel.", - "fr": "Premièrement, ouvrons le panneau des **calques**.", - "es": "Primero, abramos el panel de **Capas**.", - "pt": "Primeiro, vamos abrir o painel de **Camadas**.", - "th": "เปิดแผงควบคุม **เลเยอร์**", - "ar": "أولًا، هيّا نفتح لوحة **الطبقات**." - } - }, - "placement": "bottom" - }, - "skippable": true - }, - { - "elementToHighlightId": "#add-layer-button", - "nextStepTrigger": { - "presenceOfElement": "#layer-1" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We will first create a layer for the User Interface (UI) elements.", - "sq": "Se pari do the krijojme nje layer per elementet se nderfaqen te perdoruesit", - "fr": "Nous allons d'abord créer un calque qui contiendra l'interface utilisateur (IU).", - "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", - "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", - "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ", - "ar": "سنبدأ أولًا بإنشاء طبقة لعناصر واجهة المستخدم." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-1 #layer-name", - "nextStepTrigger": { - "valueEquals": "Interface" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the name to **Interface**.", - "sq": "Ndroje emrin ne **Nderfaqe**", - "fr": "Changeons son nom en **Interface**.", - "es": "Cambiamos su nombre a **Interface**.", - "pt": "Mudamos o nome para **Interface**.", - "th": "เปลี่ยนชื่อเป็น **Interface**", - "ar": "تغيير الاسم إلى **Interface**." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-1 #layer-selected-unchecked", - "nextStepTrigger": { - "presenceOfElement": "#layer-1 #layer-selected-checked" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select this **layer** so we can place our joystick inside of it.", - "sq": "Selekto kete **layer** qe te vendojme joystikun mbrenda saj.", - "fr": "Sélectionnons ce **calque** pour y placer notre joystick.", - "es": "Seleccionemos esta **capa** para colocar nuestro joystick dentro de ella.", - "pt": "Selecione esta **camada** para colocar nosso joystick dentro dela.", - "th": "เลือก **เลเยอร์** นี้เพื่อวาง joystick ลงไปในนั้น", - "ar": "تحديد هذه **الطبقة** لنتمكن من إدراج عصا التحكم الخاصة بنا داخلها." - } - }, - "placement": "top" - } - }, { "elementToHighlightId": "#toolbar-open-objects-panel-button", "nextStepTrigger": { @@ -182,12 +172,21 @@ "description": { "messageByLocale": { "en": "Open the **Objects** panel.", - "sq": "Hape panelin **Objekte**", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト** パネルを開いてください。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **obiektów**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **объектов**.", + "sl": "Odpri ploščo **objektov**.", + "sq": "Hape panelin **Objekte**", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **об'єктів**.", + "zh": "打开 **对象** 面板。" } }, "placement": "bottom" @@ -204,12 +203,21 @@ "description": { "messageByLocale": { "en": "This game can only be played with a keyboard, so let's add **joystick controllers**, so that we can play on **mobile**!\n\nLet's go to the asset store to find a joystick prefab!", - "sq": "Kjo loje mund the luhet vetem me nje tastjer, le te shtojme nje**kontroller joystiki**, qe te mund te luajme ne **mobil**!\n\n Hajde shkojme ne dyqan per asseta qe te gjejme nje joystik prefab!", "fr": "Ce jeu ne peut être joué qu'avec un clavier, alors ajoutons un **joystick** pour pouvoir y jouer sur **mobile** !\n\nAllons dans le magasin de ressources pour trouver un joystick préfabriqué !", + "ar": "يمكن لعب هذه اللعبة بواسطة لوحة المفاتيح فقط، لذلك هيّا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصر للعثور على عصا تحكم جاهزة للاستخدام!", + "de": "Dieses Spiel kann nur mit einer Tastatur gespielt werden, also fügen wir **Joystick-Controller** hinzu, damit wir es auf **Mobilgeräten** spielen können!\n\nLass uns zum Asset-Store gehen, um ein Joystick-Prefab zu finden!", "es": "Este juego solo se puede jugar con un teclado, así que añadamos un **joystick** para poder jugar en **móvil**!\n\n¡Vamos al almacén de recursos para encontrar un joystick prefab!", + "it": "Questo gioco può essere giocato solo con una tastiera, quindi aggiungiamo un **joystick** per poterlo giocare su **mobile**!\n\nAndiamo al negozio di risorse per trovare un joystick prefab!", + "ja": "このゲームはキーボードでしかプレイできません。**ジョイスティックコントローラ**を追加して、**モバイル**でプレイできるようにしましょう!\n\nジョイスティックのプレハブを見つけるためにアセットストアに行きましょう!", + "ko": "이 게임은 키보드로만 플레이할 수 있습니다. **조이스틱 컨트롤러**를 추가하여 **모바일**에서 플레이할 수 있도록 합시다!\n\n조이스틱 프리팹을 찾기 위해 에셋 스토어로 가봅시다!", + "pl": "Ta gra może być grana tylko za pomocą klawiatury, więc dodajmy **kontrolery joysticka**, abyśmy mogli grać na **urządzeniach mobilnych**!\n\nChodźmy do sklepu z zasobami, aby znaleźć prefabrykat joysticka!", "pt": "Este jogo só pode ser jogado com um teclado, então vamos adicionar **joysticks** para poder jogar no **móvel**!\n\nVamos à loja de recursos para encontrar um joystick prefab!", + "ru": "Эту игру можно играть только с клавиатуры, поэтому давайте добавим **джойстик-контроллеры**, чтобы мы могли играть на **мобильных устройствах**!\n\nПойдем в магазин ресурсов, чтобы найти джойстик-префаб!", + "sl": "To igro lahko igrate samo s tipkovnico, zato dodajmo **joystick kontrolerje**, da jo lahko igramo na **mobilnih napravah**!\n\nPojdimo v trgovino z viri, da najdemo joystick prefab!", + "sq": "Kjo loje mund the luhet vetem me nje tastjer, le te shtojme nje**kontroller joystiki**, qe te mund te luajme ne **mobil**!\n\n Hajde shkojme ne dyqan per asseta qe te gjejme nje joystik prefab!", "th": "เกมนี้สามารถเล่นได้เฉพาะด้วยคีย์บอร์ด เราจึงจะเพิ่ม **joystick controllers** เพื่อให้เล่นได้บน **mobile**!\n\nเราจะไปหา joystick prefab ใน asset store", - "ar": "يمكن لعب هذه اللعبة بواسطة لوحة المفاتيح فقط، لذلك هيّا نقوم بإضافة **عصا التحكم**، حتى نتمكن من لعبها على **الأجهزة المحمولة**!\n\nهيّا نذهب إلى متجر العناصر للعثور على عصا تحكم جاهزة للاستخدام!" + "uk": "Цю гру можна грати тільки з клавіатури, тому давайте додамо **джойстик-контролери**, щоб ми могли грати на **мобільних пристроях**!\n\nПідемо в магазин ресурсів, щоб знайти джойстик-префаб!", + "zh": "这个游戏只能用键盘玩,所以让我们添加 **手柄控制器**,这样我们就可以在 **移动设备** 上玩!\n\n让我们去资源商店找一个手柄预制对象!" } } } @@ -223,12 +231,21 @@ "description": { "messageByLocale": { "en": "Let's choose a **prefab object** from the asset store", - "sq": "Hajde te zgjedhim nje **prefab objekt** prej asset storit", "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", + "ar": "هيّا نختار **كائن جاهز للاستخدام** من متجر العناصر", + "de": "Wählen wir ein **Prefab-Objekt** aus dem Asset-Store aus", "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", + "it": "Scegliamo un **oggetto prefab** dal negozio di risorse", + "ja": "アセットストアから **プレハブオブジェクト** を選びましょう", + "ko": "에셋 스토어에서 **프리팹 오브젝트**를 선택해 봅시다", + "pl": "Wybierzmy **obiekt prefab** ze sklepu z zasobami", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", + "ru": "Давайте выберем **объект prefab** из магазина ресурсов", + "sl": "Izberimo **predlogo objekta** iz trgovine z viri", + "sq": "Hajde te zgjedhim nje **prefab objekt** prej asset storit", "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", - "ar": "هيّا نختار **كائن جاهز للاستخدام** من متجر العناصر" + "uk": "Давайте виберемо **об'єкт prefab** з магазину ресурсів", + "zh": "让我们从资源商店中选择一个 **预制对象**" } }, "placement": "bottom" @@ -245,12 +262,21 @@ "description": { "messageByLocale": { "en": "Let's go back to the store home page.", - "sq": "Hajde shkojme prap te homi e faqes.", "fr": "Retournons à la page d'accueil du magasin.", + "ar": "هيّا نعود إلى صفحة المتجر الرئيسية.", + "de": "Gehen wir zurück zur Startseite des Stores.", "es": "Volvamos a la página de inicio de la tienda.", + "it": "Torniamo alla pagina iniziale del negozio.", + "ja": "ストアのホームページに戻りましょう。", + "ko": "스토어 홈페이지로 돌아가 봅시다.", + "pl": "Wróćmy do strony głównej sklepu.", "pt": "Vamos voltar para a página inicial da loja.", + "ru": "Вернемся на домашнюю страницу магазина.", + "sl": "Pojdimo nazaj na domačo stran trgovine.", + "sq": "Hajde shkojme prap te homi e faqes.", "th": "กลับไปยังหน้าโฮมเพจของร้านค้า", - "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." + "uk": "Повернемося на домашню сторінку магазину.", + "zh": "让我们回到商店首页。" } }, "placement": "bottom" @@ -268,12 +294,21 @@ "description": { "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", - "sq": "Do te perdorim nje objekt e cila vjen me aktion dhe konditione te bere gati. Ne e thirrim kete nje **Gati per perdorim objekt**.", "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميه **كائن جاهز للاستخدام**.", + "de": "Wir werden ein Objekt verwenden, das mit vorgefertigten Aktionen und Bedingungen geliefert wird. Wir nennen dies ein **Fertiges Objekt**.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", + "it": "Useremo un oggetto prefab. È un oggetto che viene con le sue azioni e condizioni predefinite, semplificandone l'uso.", + "ja": "事前に作成されたアクションと条件が付属しているオブジェクトを使用します。これを **使用可能なオブジェクト** と呼びます。", + "ko": "미리 만들어진 액션과 조건이 포함된 오브젝트를 사용할 것입니다. 이것을 **사용 가능한 오브젝트**라고 부릅니다.", + "pl": "Będziemy używać obiektu, który jest dostarczany z gotowymi akcjami i warunkami. Nazywamy to **Gotowy do użycia obiekt**.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", + "ru": "Мы будем использовать объект, который поставляется с готовыми действиями и условиями. Мы называем это **Готовый к использованию объект**.", + "sl": "Uporabili bomo objekt, ki prihaja z že pripravljenimi dejanji in pogoji. Imenujemo ga **Pripravljen za uporabo objekt**.", + "sq": "Do te perdorim nje objekt e cila vjen me aktion dhe konditione te bere gati. Ne e thirrim kete nje **Gati per perdorim objekt**.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", - "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميه **كائن جاهز للاستخدام**." + "uk": "Ми будемо використовувати об'єкт, який постачається з готовими діями та умовами. Ми називаємо це **Готовий до використання об'єкт**.", + "zh": "我们将使用一个带有预先制作的动作和条件的对象。我们称之为 **准备好使用的对象**。" } } }, @@ -288,12 +323,21 @@ "description": { "messageByLocale": { "en": "We will use a joystick.", - "sq": "Do te perdorim nje joystik.", "fr": "Nous allons utiliser un joystick.", + "ar": "سوف نستخدم عصا تحكم.", + "de": "Wir werden einen Joystick verwenden.", "es": "Vamos a usar un joystick.", + "it": "Useremo un joystick.", + "ja": "ジョイスティックを使用します。", + "ko": "조이스틱을 사용할 것입니다.", + "pl": "Będziemy używać joysticka.", "pt": "Vamos usar um joystick.", + "ru": "Мы будем использовать джойстик.", + "sl": "Uporabili bomo joystick.", + "sq": "Do te perdorim nje joystik.", "th": "เราจะใช้ joystick", - "ar": "سوف نستخدم عصا تحكم." + "uk": "Ми будемо використовувати джойстик.", + "zh": "我们将使用一个手柄。" } } }, @@ -308,12 +352,21 @@ "description": { "messageByLocale": { "en": "Let's choose this white joystick, it will match well with our background.", - "sq": "Hajde te zgjedhim kete joystik te bardhe, ajo do te ngjaje me backgroundin tone.", "fr": "Choisissons ce joystick blanc, il s'accordera bien avec notre fond.", + "ar": "هيّا نختار هذه البيضاء، سوف تتناسب جيدًا مع خلفيتنا.", + "de": "Wählen wir diesen weißen Joystick, er passt gut zu unserem Hintergrund.", "es": "Elegimos este joystick blanco, se ajustará bien con nuestro fondo.", + "it": "Scegliamo questo joystick bianco, si abbina bene con il nostro sfondo.", + "ja": "この白いジョイスティックを選びましょう。背景によく合います。", + "ko": "이 흰색 조이스틱을 선택해 봅시다. 배경과 잘 어울릴 것입니다.", + "pl": "Wybierzmy ten biały joystick, będzie pasował do naszego tła.", "pt": "Escolhamos este joystick branco, ele se ajustará bem com nosso fundo.", + "ru": "Давайте выберем этот белый джойстик, он хорошо подойдет к нашему фону.", + "sl": "Izberimo ta bel joystick, dobro se bo ujemal z našim ozadjem.", + "sq": "Hajde te zgjedhim kete joystik te bardhe, ajo do te ngjaje me backgroundin tone.", "th": "เลือก joystick สีขาว มันจะเหมาะกับพื้นหลัง", - "ar": "هيّا نختار هذه البيضاء، سوف تتناسب جيدًا مع خلفيتنا." + "uk": "Оберемо цей білий джойстик, він підійде до нашого фону.", + "zh": "让我们选择这个白色手柄,它会很好地搭配我们的背景。" } } } @@ -330,12 +383,20 @@ "description": { "messageByLocale": { "en": "Let's add it to the scene.", - "sq": "Hajde te shtojme ate te skena.", "fr": "Ajoutons le à la scène.", + "ar": "هيّا نقوم بإضافتها إلى المشهد.", "es": "Agreguemoslo a la escena.", + "it": "Aggiungiamolo alla scena.", + "ja": "シーンに追加しましょう。", + "ko": "씬에 추가해 봅시다.", + "pl": "Dodajmy to do sceny.", "pt": "Adicionemos-o à cena.", + "ru": "Добавим его в сцену.", + "sl": "Dodajmo ga v sceno.", + "sq": "Hajde te shtojme ate te skena.", "th": "เพิ่มวัตถุในฉาก", - "ar": "هيّا نقوم بإضافتها إلى المشهد." + "uk": "Додаймо його до сцени.", + "zh": "让我们把它添加到场景中。" } }, "placement": "top" @@ -350,12 +411,21 @@ "description": { "messageByLocale": { "en": "Let's close the asset store.", - "sq": "Hajde ta mbyllim asset storin.", "fr": "Fermons le magasin de ressources", + "ar": "هيّا نغلق متجر العناصر.", + "de": "Schließen wir den Asset-Store.", "es": "Cerramos la tienda de recursos.", + "it": "Chiudiamo il negozio di risorse.", + "ja": "アセットストアを閉じましょう。", + "ko": "에셋 스토어를 닫아 봅시다.", + "pl": "Zamknijmy sklep z zasobami.", "pt": "Vamos fechar a loja de recursos.", + "ru": "Давайте закроем магазин ресурсов.", + "sl": "Zaprimo trgovino z viri.", + "sq": "Hajde ta mbyllim asset storin.", "th": "ปิดร้านค้า asset", - "ar": "هيّا نغلق متجر العناصر." + "uk": "Давайте закриємо магазин ресурсів.", + "zh": "让我们关闭资源商店。" } }, "placement": "top" @@ -370,23 +440,41 @@ "description": { "messageByLocale": { "en": "Drag the **$(joystick)** to the scene.", - "sq": "Vendose ate **$(joystick)** te skena", "fr": "Faites glisser **$(joystick)** du menu à la scène.", + "ar": "سحب الـ **$(joystick)** إلى المشهد.", + "de": "Ziehen Sie **$(joystick)** in die Szene.", "es": "Arrastra **$(joystick)** desde el menú a la escena.", + "it": "Trascina **$(joystick)** nella scena.", + "ja": " **$(joystick)** をシーンにドラッグしてください。", + "ko": " **$(joystick)**를 씬으로 드래그하세요.", + "pl": "Przeciągnij **$(joystick)** do sceny.", "pt": "Arraste **$(joystick)** do menu para a cena.", + "ru": "Перетащите **$(joystick)** на сцену.", + "sl": "Povlecite **$(joystick)** v sceno.", + "sq": "Vendose ate **$(joystick)** te skena", "th": "ลาก **$(joystick)** ใส่ลงใน scene", - "ar": "سحب الـ **$(joystick)** إلى المشهد." + "uk": "Перетягніть **$(joystick)** на сцену.", + "zh": "将 **$(joystick)** 拖到场景中。" } }, "touchDescription": { "messageByLocale": { "en": "Select the **$(joystick)**, then drag it to the scene.", - "sq": "Selektoje ate **$(joystick)**, pastaj vendose ne skene.", "fr": "Sélectionnez **$(joystick)**, puis faites-le glisser à la scène.", + "ar": "تحديد الـ **$(joystick)** ثم سحبه إلى المشهد.", + "de": "Wählen Sie **$(joystick)** aus und ziehen Sie es dann in die Szene.", "es": "Selecciona **$(joystick)**, luego arrástralo a la escena.", + "it": "Seleziona **$(joystick)**, quindi trascinalo nella scena.", + "ja": "**$(joystick)** を選択し、シーンにドラッグしてください。", + "ko": "**$(joystick)**를 선택한 다음 씬으로 드래그하세요.", + "pl": "Wybierz **$(joystick)**, a następnie przeciągnij go do sceny.", "pt": "Selecione **$(joystick)**, em seguida, arraste-o para a cena.", + "ru": "Выберите **$(joystick)**, затем перетащите его на сцену.", + "sl": "Izberite **$(joystick)**, nato ga povlecite v sceno.", + "sq": "Selektoje ate **$(joystick)**, pastaj vendose ne skene.", "th": "เลือก **$(joystick)** แล้วลากมันเข้า scene", - "ar": "تحديد الـ **$(joystick)** ثم سحبه إلى المشهد." + "uk": "Виберіть **$(joystick)**, а потім перетягніть його на сцену.", + "zh": "选择 **$(joystick)**,然后将它拖到场景中。" } } } @@ -396,12 +484,21 @@ "clickOnTooltipButton": { "messageByLocale": { "en": "I'm done", - "sq": "Une mbarova", "fr": "J'ai terminé", + "ar": "انتهيت", + "de": "Ich bin fertig", "es": "He terminado", + "it": "Ho finito", + "ja": "完了", + "ko": "완료", + "pl": "Zakończono", "pt": "Terminei", + "ru": "Я закончил", + "sl": "Končano", + "sq": "Une mbarova", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "uk": "Закінчено", + "zh": "我完成了" } } }, @@ -410,12 +507,21 @@ "description": { "messageByLocale": { "en": "Place the $(joystick) below the ship on the screen, so that the player can use their thumb to control it easily.", - "sq": "Vendose ate $(joystick) nder anijen ne ekran, qe te mund lojtari te perdore gishtin e madh per te kontrolluar ate lehte.", "fr": "Placez le $(joystick) en dessous du vaisseau à l'écran, de façon à ce que le joueur puisse utiliser son pouce pour le contrôler facilement.", + "ar": "إدراج الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة.", + "de": "Platzieren Sie den **$(joystick)** unter dem Schiff auf dem Bildschirm, damit der Spieler es leicht mit dem Daumen steuern kann.", "es": "Coloca el $(joystick) debajo de la nave en la pantalla, de manera que el jugador pueda usar su pulgar para controlarlo fácilmente.", + "it": "Posiziona il **$(joystick)** sotto la nave sullo schermo, in modo che il giocatore possa usarlo facilmente con il pollice.", + "ja": "画面上の宇宙船の下に **$(joystick)** を配置し、プレイヤーが親指で簡単に操作できるようにします。", + "ko": "화면에서 우주선 아래에 **$(joystick)**를 배치하여 플레이어가 쉽게 엄지로 제어할 수 있도록 합니다.", + "pl": "Umieść **$(joystick)** poniżej statku na ekranie, aby gracz mógł łatwo nim sterować kciukiem.", "pt": "Coloque o $(joystick) abaixo da nave na tela, de forma que o jogador possa usar o polegar para controlá-lo facilmente.", + "ru": "Разместите **$(joystick)** под кораблем на экране, чтобы игрок мог легко управлять им большим пальцем.", + "sl": "Postavite **$(joystick)** pod ladjo na zaslonu, tako da ga lahko igralec enostavno upravlja s palcem.", + "sq": "Vendose ate $(joystick) nder anijen ne ekran, qe te mund lojtari te perdore gishtin e madh per te kontrolluar ate lehte.", "th": "วาง $(joystick) ใต้เรือในฉาก ให้ผู้เล่นสามารถใช้นิ้วกลางเพื่อควบคุมได้ง่าย\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "إدراج الـ **$(joystick)** أسفل السفينة الفضائية حتى يتمكن اللاعبون من استخدام إبهامهم للتحكم بها بسهولة." + "uk": "Розмістіть **$(joystick)** під кораблем на екрані, щоб гравець міг легко керувати ним великим пальцем.", + "zh": "将 $(joystick) 放在屏幕上的飞船下方,这样玩家就可以用拇指轻松控制它。" } }, "placement": "top", @@ -434,23 +540,41 @@ "description": { "messageByLocale": { "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nclick on the 3 dot menu, or right click on **$(ship)**, and select **Edit behaviors**.", - "sq": "Ec te linkojme $(joystick) dhe $(ship) tone fale te **veprimet** qe erdhen me prefabin:\n\nshtype ne 3 pikat menu, ose shtype me anen te djatht ne **$(ship)** dhe selekto **Ndrysho veprimet**", "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\ncliquez sur le menu à 3 points, ou faites un clic droit sur **$(ship)**, et sélectionnez **Modifier les comportements**.", + "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**.", + "de": "Verknüpfen wir unser **$(joystick)** und unser **$(ship)** dank der **Verhaltensweisen**, die mit dem Prefab geliefert wurden:\n\nKlicken Sie auf das Menü mit den 3 Punkten oder klicken Sie mit der rechten Maustaste auf **$(ship)** und wählen Sie **Verhaltensweisen bearbeiten**.", "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", + "it": "Colleghiamo il nostro **$(joystick)** e il nostro **$(ship)** grazie ai **comportamenti** che sono venuti con il prefab:\n\nclicca sul menu a 3 punti, o fai clic destro su **$(ship)**, e seleziona **Modifica comportamenti**.", + "ja": "プレハブに付属している **$(joystick)** と **$(ship)** の **動作** のおかげでリンクしましょう。\n\n3点メニューをクリックするか、**$(ship)** を右クリックして **動作の編集** を選択します。", + "ko": "프리팹에 포함된 **동작** 덕분에 $(joystick)와 $(ship)를 연결해 봅시다:\n\n3 점 메뉴를 클릭하거나 **$(ship)**를 마우스 오른쪽 버튼으로 클릭한 다음 **동작 편집**을 선택하세요.", + "pl": "Połączmy nasz **$(joystick)** i nasz **$(ship)** dzięki **akcjom**, które zostały dostarczone z prefabrykatem:\n\nkliknij menu 3 kropek lub kliknij prawym przyciskiem myszy **$(ship)**, a następnie wybierz **Edytuj zachowania**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", + "ru": "Свяжем наш **$(joystick)** и наш **$(ship)** благодаря **поведениям**, которые поставляются с префабом:\n\nнажмите на меню из 3 точек или щелкните правой кнопкой мыши на **$(ship)** и выберите **Изменить поведение**.", + "sl": "Povežimo naš **$(joystick)** in naš **$(ship)** zahvaljujoč **vedenjem**, ki so prišla s predlogo:\n\nkliknite na meni z 3 pikami ali z desno miškino tipko kliknite **$(ship)** in izberite **Uredi vedenja**.", + "sq": "Ec te linkojme $(joystick) dhe $(ship) tone fale te **veprimet** qe erdhen me prefabin:\n\nshtype ne 3 pikat menu, ose shtype me anen te djatht ne **$(ship)** dhe selekto **Ndrysho veprimet**", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", - "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "uk": "Зв'яжемо наш **$(joystick)** і наш **$(ship)** завдяки **поведінці**, яка поставляється з префабом:\n\nнатисніть на меню з 3 крапками або клацніть правою кнопкою миші на **$(ship)** і виберіть **Змінити поведінку**.", + "zh": "让我们通过预制的 **动作** 来连接我们的 $(joystick) 和 $(ship):\n\n点击 3 点菜单,或右键点击 **$(ship)**,然后选择 **编辑动作**。" } }, "touchDescription": { "messageByLocale": { "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nSelect, then long press on **$(ship)**, then select **Edit behaviors**.", - "sq": "Hajde te linkojme $(joystick) dhe $(ship) tone fale te **veprimve** qe erdhen me prefabin:\n\nSelekto, pastaj mbaje gjate gishtin ne **$(ship)**, pastaj selekto **Ndrysho veprimet**", "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\nSélectionnez, puis appuyez longuement sur **$(ship)**, puis sélectionnez **Modifier les comportements**.", + "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**.", + "de": "Verknüpfen wir unser **$(joystick)** und unser **$(ship)** dank der **Verhaltensweisen**, die mit dem Prefab geliefert wurden:\n\nWählen Sie aus, dann lange drücken Sie auf **$(ship)**, dann wählen Sie **Verhaltensweisen bearbeiten**.", "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", + "it": "Colleghiamo il nostro **$(joystick)** e il nostro **$(ship)** grazie ai **comportamenti** che sono venuti con il prefab:\n\nSeleziona, poi tieni premuto a lungo su **$(ship)**, poi seleziona **Modifica comportamenti**.", + "ja": "プレハブに付属している **$(joystick)** と **$(ship)** の **動作** のおかげでリンクしましょう。\n\n選択し、**$(ship)** を長押しして、**動作の編集** を選択します。", + "ko": "프리팹에 포함된 **동작** 덕분에 $(joystick)와 $(ship)를 연결해 봅시다:\n\n선택한 다음 **$(ship)**를 길게 누른 다음 **동작 편집**을 선택하세요.", + "pl": "Połączmy nasz **$(joystick)** i nasz **$(ship)** dzięki **akcjom**, które zostały dostarczone z prefabrykatem:\n\nWybierz, a następnie przytrzymaj długo **$(ship)**, a następnie wybierz **Edytuj zachowania**.", "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", + "ru": "Свяжем наш **$(joystick)** и наш **$(ship)** благодаря **поведениям**, которые поставляются с префабом:\n\nВыберите, затем долго нажмите на **$(ship)**, затем выберите **Изменить поведение**.", + "sl": "Povežimo naš **$(joystick)** in naš **$(ship)** zahvaljujoč **vedenjem**, ki so prišla s predlogo:\n\nIzberite, nato dolgo pritisnite na **$(ship)**, nato izberite **Uredi vedenja**.", + "sq": "Hajde te linkojme $(joystick) dhe $(ship) tone fale te **veprimve** qe erdhen me prefabin:\n\nSelekto, pastaj mbaje gjate gishtin ne **$(ship)**, pastaj selekto **Ndrysho veprimet**", "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**." + "uk": "Зв'яжемо наш **$(joystick)** і наш **$(ship)** завдяки **поведінці**, яка поставляється з префабом:\n\nВиберіть, а потім тримайте довго на **$(ship)**, а потім виберіть **Змінити поведінку**.", + "zh": "让我们通过预制的 **动作** 来连接我们的 $(joystick) 和 $(ship):\n\n选择,然后长按 **$(ship)**,然后选择 **编辑动作**。" } } } @@ -464,12 +588,21 @@ "description": { "messageByLocale": { "en": "See the **behaviors** of the **object** here.", - "sq": "Shikoje **veprimet** te **objektit** ketu.", "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "ar": "رؤية **سلوكيات الكائن** من هنا.", + "de": "Sehen Sie sich die **Verhaltensweisen** des **Objekts** hier an.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", - "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "it": "Vedi i **comportamenti** dell'**oggetto** qui.", + "ja": "ここに **オブジェクト** の **動作** を見る。", + "ko": "여기서 **객체**의 **동작**을 확인하세요.", + "pl": "Zobacz **akcje** **obiektu** tutaj.", + "pt": "Veja os **comportamentos** do **objeto** aqui.", + "ru": "Смотрите **поведение** **объекта** здесь.", + "sl": "Oglejte si **vedenja** **predmeta** tukaj.", + "sq": "Shikoje **veprimet** te **objektit** ketu.", "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "ar": "رؤية **سلوكيات الكائن** من هنا." + "uk": "Дивіться **поведінку** **об'єкта** тут.", + "zh": "在这里查看 **对象** 的 **动作**。" } }, "placement": "bottom" @@ -486,12 +619,21 @@ "description": { "messageByLocale": { "en": "Let's add the **Top down multi-touch controller mapper** behavior that was installed.", - "sq": "Hajde te shtojme **Top down multi-touch controller mapper** verpim qe ishte installuar", "fr": "Ajoutons le comportement **Top down multi-touch controller mapper** qui a été installé.", + "ar": "هيّا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته.", + "de": "Fügen wir das **Top down multi-touch controller mapper**-Verhalten hinzu, das installiert wurde.", "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", + "it": "Aggiungiamo il comportamento **Top down multi-touch controller mapper** che è stato installato.", + "ja": "インストールされた **Top down multi-touch controller mapper** の動作を追加しましょう。", + "ko": "설치된 **Top down multi-touch controller mapper** 동작을 추가해 봅시다.", + "pl": "Dodajmy zachowanie **Top down multi-touch controller mapper**, które zostało zainstalowane.", "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", + "ru": "Добавим **поведение Top down multi-touch controller mapper**, которое было установлено.", + "sl": "Dodajmo **vedenje Top down multi-touch controller mapper**, ki je bilo nameščeno.", + "sq": "Hajde te shtojme **Top down multi-touch controller mapper** verpim qe ishte installuar", "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้", - "ar": "هيّا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته." + "uk": "Додайте **поведінку Top down multi-touch controller mapper**, яка була встановлена.", + "zh": "添加已安装的 **Top down multi-touch controller mapper** 动作。" } } }, @@ -506,12 +648,21 @@ "description": { "messageByLocale": { "en": "Select the **Top down multi-touch controller mapper** behavior.", - "sq": "Selekto **Top down multi-touch controller mapper** veprim.", "fr": "Sélectionnez le comportement **Top down multi-touch controller mapper**.", + "ar": "تحديد السلوك **Top down multi-touch controller mapper**.", + "de": "Wählen Sie das **Top down multi-touch controller mapper**-Verhalten aus.", "es": "Selecciona el comportamiento **Top down multi-touch controller mapper**.", + "it": "Seleziona il comportamento **Top down multi-touch controller mapper**.", + "ja": "**Top down multi-touch controller mapper** の動作を選択します。", + "ko": "**Top down multi-touch controller mapper** 동작을 선택하세요.", + "pl": "Wybierz zachowanie **Top down multi-touch controller mapper**.", "pt": "Selecione o comportamento **Top down multi-touch controller mapper**.", + "ru": "Выберите поведение **Top down multi-touch controller mapper**.", + "sl": "Izberite **vedenje Top down multi-touch controller mapper**.", + "sq": "Selekto **Top down multi-touch controller mapper** veprim.", "th": "เลือกพฤติกรรม **Top down multi-touch controller mapper**", - "ar": "تحديد السلوك **Top down multi-touch controller mapper**." + "uk": "Виберіть **поведінку Top down multi-touch controller mapper**.", + "zh": "选择 **Top down multi-touch controller mapper** 动作。" } } }, @@ -526,12 +677,21 @@ "description": { "messageByLocale": { "en": "Let's update the stick mode, so that it can be controlled at **360°**.", - "sq": "Hajde te ndryshojme stik modin, qe te kontrollohet ne **360°** ", "fr": "Changeons le mode de la manette, pour qu'elle puisse être contrôlée à **360°**.", + "ar": "هيّا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**", + "de": "Aktualisieren wir den Stick-Modus, damit er bei **360°** gesteuert werden kann.", "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", + "it": "Aggiorniamo la modalità del joystick, in modo che possa essere controllata a **360°**.", + "ja": "スティックモードを更新して、**360°** で制御できるようにしましょう。", + "ko": "스틱 모드를 업데이트하여 **360°**에서 제어할 수 있도록 합시다.", + "pl": "Zaktualizujmy tryb joysticka, aby można go było sterować na **360°**.", "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", + "ru": "Обновим режим джойстика, чтобы его можно было управлять на **360°**.", + "sl": "Posodobimo način palice, tako da jo lahko upravljamo pri **360°**.", + "sq": "Hajde te ndryshojme stik modin, qe te kontrollohet ne **360°** ", "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**", - "ar": "هيّا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**" + "uk": "Оновимо режим джойстика, щоб його можна було керувати на **360°**.", + "zh": "更新摇杆模式,使其可以在 **360°** 下控制。" } } }, @@ -546,12 +706,21 @@ "description": { "messageByLocale": { "en": "That's it! Now the joystick will control the ship!", - "sq": "C' ajo! Tash joystiku do te kontrolloje anijen!", "fr": "C'est tout ! Maintenant, la manette contrôlera le vaisseau !", + "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!", + "de": "Das ist es! Jetzt wird der Joystick das Schiff steuern!", "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", + "it": "Ecco fatto! Ora il joystick controllerà la nave!", + "ja": "完了です!これでジョイスティックが宇宙船を制御します!", + "ko": "이것이죠! 이제 조이스틱이 우주선을 제어할 겁니다!", + "pl": "To wszystko! Teraz joystick będzie sterował statkiem!", "pt": "É isso aí! Agora o joystick controlará o navio!", + "ru": "Вот и всё! Теперь джойстик будет управлять кораблем!", + "sl": "To je to! Zdaj bo joystick nadzoroval ladjo!", + "sq": "C' ajo! Tash joystiku do te kontrolloje anijen!", "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!", - "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!" + "uk": "Ось і все! Тепер джойстик буде керувати кораблем!", + "zh": "就是这样!现在摇杆将控制飞船!" } } } @@ -565,12 +734,21 @@ "description": { "messageByLocale": { "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "sq": "Ne regull, jemi gati! Hajde te testojme lojen tone te shohim ndryshimet qe kemi be! Shtype buttonin **Preview** ", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", + "de": "Gut, wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die Schaltfläche **Vorschau**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "Bene, abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "よし、完了です!変更点を確認するためにゲームをテストしましょう! **プレビュー** ボタンをクリックします。", + "ko": "좋아요, 끝났어요! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭하세요.", + "pl": "Dobrze, skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Хорошо, мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "V redu, končali smo! Preizkusimo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Ne regull, jemi gati! Hajde te testojme lojen tone te shohim ndryshimet qe kemi be! Shtype buttonin **Preview** ", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." + "uk": "Добре, ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "好的,我们完成了!让我们测试一下我们的游戏,看看我们所做的更改!点击 **预览** 按钮。" } }, "placement": "bottom" From 8be365ff1571b53d9caa36632b42d7462a628e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:01:03 +0100 Subject: [PATCH 090/208] Simplify health bar --- templates/healthBar/game.json | 1870 +++++++------------------------ templates/joystick/game.json | 17 + tutorials/in-app/healthBar.json | 566 +++++++--- tutorials/in-app/joystick.json | 59 + 4 files changed, 933 insertions(+), 1579 deletions(-) diff --git a/templates/healthBar/game.json b/templates/healthBar/game.json index d78a8f7..9c1832f 100644 --- a/templates/healthBar/game.json +++ b/templates/healthBar/game.json @@ -8,6 +8,8 @@ }, "properties": { "adaptGameResolutionAtRuntime": true, + "antialiasingMode": "MSAA", + "antialisingEnabledOnMobile": false, "folderProject": false, "orientation": "landscape", "packageName": "com.example.HealthBarLesson", @@ -575,6 +577,9 @@ "resourceFolders": [] }, "objects": [], + "objectsFolderStructure": { + "folderName": "__ROOT" + }, "objectsGroups": [], "variables": [], "layouts": [ @@ -832,9 +837,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Player", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2395,7 +2400,6 @@ "leftMargin": 16, "name": "Ground_And_Walls", "rightMargin": 16, - "tags": "", "texture": "9patch castle.png", "tiled": true, "topMargin": 16, @@ -2414,9 +2418,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Trap", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2592,9 +2596,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Trap2", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2652,9 +2656,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Trap3", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2833,7 +2837,6 @@ "assetStoreId": "", "height": 64, "name": "Background", - "tags": "", "texture": "Brown.png", "type": "TiledSpriteObject::TiledSprite", "width": 64, @@ -2844,7 +2847,6 @@ { "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d", "name": "FlatDarkJoystick", - "tags": "", "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", "variables": [], "effects": [], @@ -2852,6 +2854,7 @@ "content": {}, "childrenContent": { "Border": { + "adaptCollisionMaskAutomatically": false, "updateIfNotVisible": false, "animations": [ { @@ -2886,6 +2889,7 @@ ] }, "Thumb": { + "adaptCollisionMaskAutomatically": false, "updateIfNotVisible": false, "animations": [ { @@ -2922,9 +2926,9 @@ } }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06", "name": "TopArrowButton", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2973,6 +2977,35 @@ ] } ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Player" + }, + { + "objectName": "Ground_And_Walls" + }, + { + "objectName": "Trap" + }, + { + "objectName": "Trap2" + }, + { + "objectName": "Trap3" + }, + { + "objectName": "Background" + }, + { + "objectName": "FlatDarkJoystick" + }, + { + "objectName": "TopArrowButton" + } + ] + }, "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -2984,8 +3017,7 @@ "textG": 0, "textR": 0 }, - "comment": "Set up for health bar", - "comment2": "" + "comment": "Set up for health bar" }, { "type": "BuiltinCommonInstructions::Standard", @@ -3009,9 +3041,7 @@ "type": { "value": "DepartScene" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -3019,24 +3049,13 @@ "type": { "value": "ZoomCamera" }, - "parameters": [ - "", - "2", - "", - "" - ] + "parameters": ["", "2", "", ""] }, { "type": { "value": "CentreCamera" }, - "parameters": [ - "", - "Background", - "", - "", - "" - ] + "parameters": ["", "Background", "", "", ""] } ], "events": [ @@ -3048,9 +3067,7 @@ "inverted": true, "value": "SystemInfo::HasTouchScreen" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -3058,10 +3075,7 @@ "type": { "value": "HideLayer" }, - "parameters": [ - "TopArrowButton", - "\"Joysticks\"" - ] + "parameters": ["TopArrowButton", "\"Joysticks\""] } ] } @@ -3086,8 +3100,7 @@ "textG": 0, "textR": 0 }, - "comment": "Getting hit by the saw", - "comment2": "" + "comment": "Getting hit by the saw" }, { "type": "BuiltinCommonInstructions::Standard", @@ -3096,45 +3109,28 @@ "type": { "value": "CollisionNP" }, - "parameters": [ - "Player", - "Traps", - "", - "", - "" - ] + "parameters": ["Player", "Traps", "", "", ""] }, { "type": { "inverted": true, "value": "AnimationName" }, - "parameters": [ - "Player", - "\"hurt\"" - ] + "parameters": ["Player", "\"hurt\""] }, { "type": { "inverted": true, "value": "Health::Health::IsDead" }, - "parameters": [ - "Player", - "Health", - "" - ] + "parameters": ["Player", "Health", ""] }, { "type": { "inverted": true, "value": "Health::Health::IsDamageCooldownActive" }, - "parameters": [ - "Player", - "Health", - "" - ] + "parameters": ["Player", "Health", ""] }, { "type": { @@ -3148,14 +3144,7 @@ "type": { "value": "Health::Health::Hit" }, - "parameters": [ - "Player", - "Health", - "1", - "", - "", - "" - ] + "parameters": ["Player", "Health", "1", "", "", ""] } ], "events": [ @@ -3166,11 +3155,7 @@ "type": { "value": "Health::Health::IsJustDamaged" }, - "parameters": [ - "Player", - "Health", - "" - ] + "parameters": ["Player", "Health", ""] } ], "actions": [ @@ -3190,10 +3175,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "Player", - "\"hurt\"" - ] + "parameters": ["Player", "\"hurt\""] } ], "events": [ @@ -3207,8 +3189,7 @@ "textG": 0, "textR": 0 }, - "comment": "Platformer behavior", - "comment2": "" + "comment": "Platformer behavior" }, { "type": "BuiltinCommonInstructions::Standard", @@ -3218,20 +3199,13 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::AbortJump" }, - "parameters": [ - "Player", - "PlatformerObject" - ] + "parameters": ["Player", "PlatformerObject"] }, { "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Player", - "PlatformerObject", - "" - ] + "parameters": ["Player", "PlatformerObject", ""] }, { "type": { @@ -3266,8 +3240,7 @@ "textG": 0, "textR": 0 }, - "comment": "Timer", - "comment2": "" + "comment": "Timer" }, { "type": "BuiltinCommonInstructions::Standard", @@ -3277,27 +3250,19 @@ "type": { "value": "ChangeTimeScale" }, - "parameters": [ - "", - "0.1" - ] + "parameters": ["", "0.1"] }, { "type": { "value": "Wait" }, - "parameters": [ - "0.02" - ] + "parameters": ["0.02"] }, { "type": { "value": "ChangeTimeScale" }, - "parameters": [ - "", - "1" - ] + "parameters": ["", "1"] } ] } @@ -3315,8 +3280,7 @@ "textG": 0, "textR": 0 }, - "comment": "Return to normal", - "comment2": "" + "comment": "Return to normal" }, { "type": "BuiltinCommonInstructions::Standard", @@ -3325,29 +3289,20 @@ "type": { "value": "AnimationName" }, - "parameters": [ - "Player", - "\"hurt\"" - ] + "parameters": ["Player", "\"hurt\""] }, { "type": { "value": "AnimationEnded" }, - "parameters": [ - "Player" - ] + "parameters": ["Player"] }, { "type": { "inverted": true, "value": "Health::Health::IsDead" }, - "parameters": [ - "Player", - "Health", - "" - ] + "parameters": ["Player", "Health", ""] } ], "actions": [ @@ -3355,19 +3310,13 @@ "type": { "value": "Arreter" }, - "parameters": [ - "Player" - ] + "parameters": ["Player"] }, { "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Player", - "PlatformerObject", - "yes" - ] + "parameters": ["Player", "PlatformerObject", "yes"] }, { "type": { @@ -3391,8 +3340,7 @@ "textG": 0, "textR": 0 }, - "comment": "Death", - "comment2": "" + "comment": "Death" }, { "type": "BuiltinCommonInstructions::Standard", @@ -3401,28 +3349,19 @@ "type": { "value": "Health::Health::IsDead" }, - "parameters": [ - "Player", - "Health", - "" - ] + "parameters": ["Player", "Health", ""] }, { "type": { "value": "AnimationName" }, - "parameters": [ - "Player", - "\"hurt\"" - ] + "parameters": ["Player", "\"hurt\""] }, { "type": { "value": "AnimationEnded" }, - "parameters": [ - "Player" - ] + "parameters": ["Player"] }, { "type": { @@ -3436,11 +3375,7 @@ "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Player", - "PlatformerObject", - "" - ] + "parameters": ["Player", "PlatformerObject", ""] }, { "type": { @@ -3456,22 +3391,13 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "Player", - "\"dead\"" - ] + "parameters": ["Player", "\"dead\""] }, { "type": { "value": "PlaySound" }, - "parameters": [ - "", - "DeathSound", - "", - "50", - "1.2" - ] + "parameters": ["", "DeathSound", "", "50", "1.2"] } ] }, @@ -3482,18 +3408,13 @@ "type": { "value": "AnimationName" }, - "parameters": [ - "Player", - "\"dead\"" - ] + "parameters": ["Player", "\"dead\""] }, { "type": { "value": "AnimationEnded" }, - "parameters": [ - "Player" - ] + "parameters": ["Player"] } ], "actions": [ @@ -3501,10 +3422,7 @@ "type": { "value": "Delete" }, - "parameters": [ - "Player", - "" - ] + "parameters": ["Player", ""] } ] } @@ -3520,9 +3438,15 @@ "ambientLightColorB": 0, "ambientLightColorG": 8947536, "ambientLightColorR": 16, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, + "isLocked": false, "name": "", + "renderingType": "", "visibility": true, "cameras": [ { @@ -3542,9 +3466,32 @@ "ambientLightColorB": 12194504, "ambientLightColorG": 6068784, "ambientLightColorR": 12709544, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, + "isLocked": false, "name": "Joysticks", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Interface", + "renderingType": "", "visibility": true, "cameras": [], "effects": [] @@ -3652,9 +3599,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -3700,9 +3645,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -3961,9 +3904,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -3998,9 +3939,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4035,9 +3974,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4072,9 +4009,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -4133,9 +4068,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4170,9 +4103,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4207,9 +4138,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4244,9 +4173,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4281,9 +4208,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4318,9 +4243,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4355,9 +4278,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -4392,9 +4313,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -4431,8 +4350,7 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure the joystick has moved from center", - "comment2": "" + "comment": "Make sure the joystick has moved from center" }, { "type": "BuiltinCommonInstructions::Standard", @@ -4467,9 +4385,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -4512,8 +4428,7 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure the joystick has moved from center", - "comment2": "" + "comment": "Make sure the joystick has moved from center" }, { "type": "BuiltinCommonInstructions::Standard", @@ -4548,9 +4463,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -4779,11 +4692,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -4817,11 +4726,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -4854,9 +4759,7 @@ "type": { "value": "HasGameJustResumed" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -4864,21 +4767,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "DebuggerTools::ConsoleLog" }, - "parameters": [ - "\"Resumed!!!\"", - "", - "" - ] + "parameters": ["\"Resumed!!!\"", "", ""] } ] }, @@ -4898,9 +4793,7 @@ "type": { "value": "HasAnyTouchOrMouseStarted" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -4908,12 +4801,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "events": [ @@ -4930,12 +4818,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] }, { "type": { @@ -4970,12 +4853,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] + "parameters": ["Object", "Behavior", "+", "1"] } ] } @@ -4993,8 +4871,7 @@ "textG": 0, "textR": 0 }, - "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)", - "comment2": "" + "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)" }, { "type": "BuiltinCommonInstructions::Standard", @@ -5014,11 +4891,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -5041,12 +4914,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] } ], "actions": [ @@ -5109,9 +4977,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyJoystickForce()" - ] + "parameters": ["Object.Behavior::PropertyJoystickForce()"] } ] } @@ -5202,9 +5068,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyJoystickAngle()" - ] + "parameters": ["Object.Behavior::PropertyJoystickAngle()"] } ] } @@ -5323,9 +5187,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -5389,9 +5251,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -5431,12 +5291,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] } ], "actions": [ @@ -5444,9 +5299,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -5482,24 +5335,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0", - "" - ] + "parameters": ["Object", "Behavior", "=", "0", ""] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -5771,7 +5613,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -5781,7 +5622,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "JoystickIdentifier" }, { @@ -5791,7 +5631,6 @@ "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", "group": "", "extraInformation": [], - "hidden": false, "name": "DeadZoneRadius" }, { @@ -5856,11 +5695,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -5868,22 +5703,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" }, - "parameters": [ - "Object", - "Behavior", - "\"Idle\"", - "" - ] + "parameters": ["Object", "Behavior", "\"Idle\"", ""] } ] }, @@ -5895,19 +5721,13 @@ "inverted": true, "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "HasAnyTouchOrMouseStarted" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -5915,12 +5735,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "events": [ @@ -5977,12 +5792,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] + "parameters": ["Object", "Behavior", "+", "1"] } ] } @@ -5997,20 +5807,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "HasTouchEnded" }, - "parameters": [ - "", - "Object.Behavior::PropertyTouchId()" - ] + "parameters": ["", "Object.Behavior::PropertyTouchId()"] } ], "actions": [ @@ -6018,33 +5821,19 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" }, - "parameters": [ - "Object", - "Behavior", - "\"Released\"", - "" - ] + "parameters": ["Object", "Behavior", "\"Released\"", ""] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -6078,10 +5867,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -6089,9 +5875,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -6125,12 +5909,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] } ], "actions": [ @@ -6138,9 +5917,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -6216,7 +5993,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -6226,7 +6002,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ButtonIdentifier" }, { @@ -6295,10 +6070,7 @@ "type": { "value": "PlatformBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -6323,10 +6095,7 @@ "type": { "value": "PlatformBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -6351,19 +6120,13 @@ "type": { "value": "PlatformBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] }, { "type": { "value": "PlatformBehavior::SimulateLadderKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -6388,10 +6151,7 @@ "type": { "value": "PlatformBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -6415,10 +6175,7 @@ "type": { "value": "PlatformBehavior::SimulateJumpKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] } @@ -6449,7 +6206,6 @@ "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], - "hidden": false, "name": "Property" }, { @@ -6459,7 +6215,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -6468,11 +6223,7 @@ "label": "Joystick name", "description": "", "group": "Controls", - "extraInformation": [ - "Primary", - "Secondary" - ], - "hidden": false, + "extraInformation": ["Primary", "Secondary"], "name": "JoystickIdentifier" }, { @@ -6482,7 +6233,6 @@ "description": "", "group": "Controls", "extraInformation": [], - "hidden": false, "name": "JumpButton" } ], @@ -6507,12 +6257,7 @@ "type": { "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Analog\"" - ] + "parameters": ["Object", "Behavior", "=", "\"Analog\""] } ], "actions": [ @@ -6536,12 +6281,7 @@ "type": { "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"360°\"" - ] + "parameters": ["Object", "Behavior", "=", "\"360°\""] } ], "actions": [ @@ -6583,10 +6323,7 @@ "inverted": true, "value": "TopDownMovementBehavior::DiagonalsAllowed" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ], "actions": [], @@ -6612,10 +6349,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6640,10 +6374,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6668,10 +6399,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6696,10 +6424,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] } @@ -6712,10 +6437,7 @@ "type": { "value": "TopDownMovementBehavior::DiagonalsAllowed" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ], "actions": [], @@ -6741,10 +6463,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6769,10 +6488,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6797,10 +6513,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6825,10 +6538,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6853,19 +6563,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6890,19 +6594,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6927,19 +6625,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -6964,19 +6656,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] } @@ -7011,7 +6697,6 @@ "extraInformation": [ "TopDownMovementBehavior::TopDownMovementBehavior" ], - "hidden": false, "name": "TopDownMovement" }, { @@ -7021,7 +6706,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -7030,11 +6714,7 @@ "label": "Joystick name", "description": "", "group": "", - "extraInformation": [ - "Primary", - "Secondary" - ], - "hidden": false, + "extraInformation": ["Primary", "Secondary"], "name": "JoystickIdentifier" }, { @@ -7043,12 +6723,7 @@ "label": "Stick mode", "description": "", "group": "Controls", - "extraInformation": [ - "Analog", - "360°", - "8 Directions" - ], - "hidden": false, + "extraInformation": ["Analog", "360°", "8 Directions"], "name": "StickMode" } ], @@ -7076,87 +6751,49 @@ "type": { "value": "Create" }, - "parameters": [ - "", - "Border", - "0", - "0", - "" - ] + "parameters": ["", "Border", "0", "0", ""] }, { "type": { "value": "Create" }, - "parameters": [ - "", - "Thumb", - "0", - "0", - "" - ] + "parameters": ["", "Thumb", "0", "0", ""] }, { "type": { "value": "ChangePlan" }, - "parameters": [ - "Border", - "=", - "1" - ] + "parameters": ["Border", "=", "1"] }, { "type": { "value": "ChangePlan" }, - "parameters": [ - "Thumb", - "=", - "2" - ] + "parameters": ["Thumb", "=", "2"] }, { "type": { "value": "SetCenter" }, - "parameters": [ - "Border", - "=", - "0", - "=", - "0" - ] + "parameters": ["Border", "=", "0", "=", "0"] }, { "type": { "value": "SetCenter" }, - "parameters": [ - "Thumb", - "=", - "0", - "=", - "0" - ] + "parameters": ["Thumb", "=", "0", "=", "0"] }, { "type": { "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" }, - "parameters": [ - "Object", - "" - ] + "parameters": ["Object", ""] }, { "type": { "value": "SetIncludedInParentCollisionMask" }, - "parameters": [ - "Thumb", - "" - ] + "parameters": ["Thumb", ""] } ] } @@ -7219,10 +6856,7 @@ "type": { "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" }, - "parameters": [ - "Object", - "" - ] + "parameters": ["Object", ""] } ] } @@ -7313,9 +6947,7 @@ "inverted": true, "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"ShouldActivate\"" - ] + "parameters": ["\"ShouldActivate\""] } ], "actions": [ @@ -7323,11 +6955,7 @@ "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Border", - "MultitouchJoystick", - "no" - ] + "parameters": ["Border", "MultitouchJoystick", "no"] } ] }, @@ -7338,9 +6966,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"ShouldActivate\"" - ] + "parameters": ["\"ShouldActivate\""] } ], "actions": [ @@ -7348,11 +6974,7 @@ "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Border", - "MultitouchJoystick", - "yes" - ] + "parameters": ["Border", "MultitouchJoystick", "yes"] } ] } @@ -7386,11 +7008,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed" }, - "parameters": [ - "Border", - "MultitouchJoystick", - "!=" - ] + "parameters": ["Border", "MultitouchJoystick", "!="] } ], "actions": [ @@ -7398,9 +7016,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -7512,9 +7128,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -7562,9 +7176,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -7810,7 +7422,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -7819,11 +7430,7 @@ "label": "Joystick name", "description": "", "group": "", - "extraInformation": [ - "Primary", - "Secondary" - ], - "hidden": false, + "extraInformation": ["Primary", "Secondary"], "name": "JoystickIdentifier" }, { @@ -7833,7 +7440,6 @@ "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", "group": "", "extraInformation": [], - "hidden": false, "name": "DeadZoneRadius" }, { @@ -7842,9 +7448,7 @@ "label": "", "description": "Only used by the scene editor.", "group": "", - "extraInformation": [ - "Thumb" - ], + "extraInformation": ["Thumb"], "hidden": true, "name": "ThumbAnchorOrigin" }, @@ -7864,9 +7468,7 @@ "label": "", "description": "Only used by the scene editor.", "group": "", - "extraInformation": [ - "Thumb" - ], + "extraInformation": ["Thumb"], "hidden": true, "name": "ThumbIsScaledProportionally" }, @@ -7883,9 +7485,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Thumb", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -7906,9 +7508,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Border", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -7941,7 +7543,18 @@ } ] } - ] + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Thumb" + }, + { + "objectName": "Border" + } + ] + } } ] }, @@ -7965,15 +7578,8 @@ "identifier": "PlatformerCharacterAnimator", "name": "gdevelop-extension-store" }, - "tags": [ - "animations", - "platformer", - "flipping", - "automatic" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], + "tags": ["animations", "platformer", "flipping", "automatic"], + "authorIds": ["gqDaZjCfevOOxBYkK6zlhtZnXCg1"], "dependencies": [], "eventsFunctions": [], "eventsBasedBehaviors": [ @@ -8005,10 +7611,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableHorizontalFlipping" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [], @@ -8049,10 +7652,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "Object", - "yes" - ] + "parameters": ["Object", "yes"] } ] }, @@ -8092,10 +7692,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "Object", - "" - ] + "parameters": ["Object", ""] } ] } @@ -8120,10 +7717,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableAnimationChanges" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [], @@ -8135,10 +7729,7 @@ "type": { "value": "PlatformBehavior::IsJumping" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8166,10 +7757,7 @@ "type": { "value": "PlatformBehavior::IsFalling" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8197,10 +7785,7 @@ "type": { "value": "PlatformBehavior::IsOnFloor" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [], @@ -8212,10 +7797,7 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8244,10 +7826,7 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8277,10 +7856,7 @@ "type": { "value": "PlatformBehavior::IsOnLadder" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [], @@ -8314,10 +7890,7 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8331,9 +7904,7 @@ "type": { "value": "PlayAnimation" }, - "parameters": [ - "Object" - ] + "parameters": ["Object"] } ] }, @@ -8345,10 +7916,7 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8362,9 +7930,7 @@ "type": { "value": "PauseAnimation" }, - "parameters": [ - "Object" - ] + "parameters": ["Object"] } ] } @@ -8378,10 +7944,7 @@ "inverted": true, "value": "PlatformBehavior::IsOnLadder" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] }, { "type": { @@ -8395,9 +7958,7 @@ "type": { "value": "PlayAnimation" }, - "parameters": [ - "Object" - ] + "parameters": ["Object"] } ] } @@ -8445,10 +8006,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableHorizontalFlipping" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [], @@ -8483,10 +8041,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "Object", - "yes" - ] + "parameters": ["Object", "yes"] } ] }, @@ -8520,10 +8075,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "Object", - "" - ] + "parameters": ["Object", ""] } ] } @@ -8548,10 +8100,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::PropertyEnableAnimationChanges" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [], @@ -8563,10 +8112,7 @@ "type": { "value": "PlatformBehavior::IsJumping" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8588,10 +8134,7 @@ "type": { "value": "PlatformBehavior::IsFalling" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8613,10 +8156,7 @@ "type": { "value": "PlatformBehavior::IsOnFloor" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [], @@ -8628,10 +8168,7 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8654,10 +8191,7 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8681,10 +8215,7 @@ "type": { "value": "PlatformBehavior::IsOnLadder" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [], @@ -8711,10 +8242,7 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8722,9 +8250,7 @@ "type": { "value": "PlayAnimation" }, - "parameters": [ - "Object" - ] + "parameters": ["Object"] } ] }, @@ -8736,10 +8262,7 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8747,9 +8270,7 @@ "type": { "value": "PauseAnimation" }, - "parameters": [ - "Object" - ] + "parameters": ["Object"] } ] } @@ -8763,10 +8284,7 @@ "inverted": true, "value": "PlatformBehavior::IsOnLadder" }, - "parameters": [ - "Object", - "PlatformerBehavior" - ] + "parameters": ["Object", "PlatformerBehavior"] } ], "actions": [ @@ -8774,9 +8292,7 @@ "type": { "value": "PlayAnimation" }, - "parameters": [ - "Object" - ] + "parameters": ["Object"] } ] } @@ -8817,11 +8333,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableAnimationChanges" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] }, @@ -8832,9 +8344,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"EnableAnimationChanges\"" - ] + "parameters": ["\"EnableAnimationChanges\""] } ], "actions": [ @@ -8842,11 +8352,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableAnimationChanges" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -8889,11 +8395,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableHorizontalFlipping" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] }, @@ -8904,9 +8406,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"EnableHorizontalFlipping\"" - ] + "parameters": ["\"EnableHorizontalFlipping\""] } ], "actions": [ @@ -8914,11 +8414,7 @@ "type": { "value": "PlatformerCharacterAnimator::PlatformerCharacterAnimator::SetPropertyEnableHorizontalFlipping" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -9190,7 +8686,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "EnableAnimationChanges" }, { @@ -9200,7 +8695,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "EnableHorizontalFlipping" }, { @@ -9210,7 +8704,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "IdleAnimationName" }, { @@ -9220,7 +8713,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "RunAnimationName" }, { @@ -9230,7 +8722,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "JumpAnimationName" }, { @@ -9240,7 +8731,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "FallAnimationName" }, { @@ -9250,7 +8740,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "ClimbAnimationName" }, { @@ -9262,7 +8751,6 @@ "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], - "hidden": false, "name": "PlatformerBehavior" } ], @@ -9364,10 +8852,7 @@ "type": { "value": "ResetObjectTimer" }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] + "parameters": ["Object", "\"__Health.TimeSinceLastHit\""] }, { "type": { @@ -9432,8 +8917,7 @@ "textG": 0, "textR": 0 }, - "comment": "Health", - "comment2": "" + "comment": "Health" }, { "type": "BuiltinCommonInstructions::Standard", @@ -9442,12 +8926,7 @@ "type": { "value": "Health::Health::PropertyHealthRegenRate" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] }, { "type": { @@ -9496,8 +8975,7 @@ "textG": 0, "textR": 0 }, - "comment": "Correct any values above maximum limits", - "comment2": "" + "comment": "Correct any values above maximum limits" }, { "type": "BuiltinCommonInstructions::Standard", @@ -9550,31 +9028,19 @@ "type": { "value": "Health::Health::SetPropertyIsHealthJustDamaged" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] }, { "type": { "value": "Health::Health::SetPropertyIsJustHealed" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] }, { "type": { "value": "Health::Health::SetPropertyIsJustDodged" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] } @@ -9612,8 +9078,7 @@ "textG": 0, "textR": 0 }, - "comment": "Shield", - "comment2": "" + "comment": "Shield" }, { "type": "BuiltinCommonInstructions::Standard", @@ -9622,12 +9087,7 @@ "type": { "value": "Health::Health::PropertyShieldRegenRate" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] }, { "type": { @@ -9661,12 +9121,7 @@ "type": { "value": "Health::Health::PropertyCurrentShieldPoints" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "actions": [ @@ -9674,11 +9129,7 @@ "type": { "value": "Health::Health::RenewShieldDuration" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] }, @@ -9709,8 +9160,7 @@ "textG": 0, "textR": 0 }, - "comment": "Correct any values above maximum limits", - "comment2": "" + "comment": "Correct any values above maximum limits" }, { "type": "BuiltinCommonInstructions::Standard", @@ -9763,11 +9213,7 @@ "inverted": true, "value": "Health::Health::IsShieldActive" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { @@ -9781,12 +9227,7 @@ "type": { "value": "Health::Health::SetPropertyCurrentShieldPoints" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -9810,11 +9251,7 @@ "type": { "value": "Health::Health::SetPropertyIsShieldJustDamaged" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] } @@ -9867,8 +9304,7 @@ "textG": 0, "textR": 0 }, - "comment": "Only consider incoming damage when damage cooldown is not active", - "comment2": "" + "comment": "Only consider incoming damage when damage cooldown is not active" }, { "type": "BuiltinCommonInstructions::Standard", @@ -9878,11 +9314,7 @@ "inverted": true, "value": "Health::Health::IsDamageCooldownActive" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -9918,8 +9350,7 @@ "textG": 0, "textR": 0 }, - "comment": "No damage will be applied when dodged", - "comment2": "" + "comment": "No damage will be applied when dodged" }, { "type": "BuiltinCommonInstructions::Standard", @@ -9940,22 +9371,13 @@ "type": { "value": "Health::Health::SetPropertyIsJustDodged" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] }, { "type": { "value": "Health::Health::SetPropertyDamageToBeApplied" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -9978,20 +9400,13 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"UseArmor\"" - ] + "parameters": ["\"UseArmor\""] }, { "type": { "value": "Health::Health::PropertyDamageToBeApplied" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [], @@ -10101,8 +9516,7 @@ "textG": 0, "textR": 0 }, - "comment": "If shield is active, damage the shield first", - "comment2": "" + "comment": "If shield is active, damage the shield first" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10111,30 +9525,19 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"UseShield\"" - ] + "parameters": ["\"UseShield\""] }, { "type": { "value": "Health::Health::IsShieldActive" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "Health::Health::PropertyDamageToBeApplied" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [ @@ -10142,21 +9545,13 @@ "type": { "value": "Health::Health::SetPropertyIsShieldJustDamaged" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] }, { "type": { "value": "Health::Health::TriggerDamageCooldown" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "events": [ @@ -10170,8 +9565,7 @@ "textG": 0, "textR": 0 }, - "comment": "If damage is less than shield, subtract damage from shield.", - "comment2": "" + "comment": "If damage is less than shield, subtract damage from shield." }, { "type": "BuiltinCommonInstructions::Standard", @@ -10234,8 +9628,7 @@ "textG": 0, "textR": 0 }, - "comment": "If damage is greater than shield, conditionally apply excess damage based on property", - "comment2": "" + "comment": "If damage is greater than shield, conditionally apply excess damage based on property" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10273,10 +9666,7 @@ "type": { "value": "Health::Health::PropertyBlockExcessDamage" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -10314,8 +9704,7 @@ "textG": 0, "textR": 0 }, - "comment": "Apply excess damage only if shield does not block excess damage", - "comment2": "" + "comment": "Apply excess damage only if shield does not block excess damage" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10325,10 +9714,7 @@ "inverted": true, "value": "Health::Health::PropertyBlockExcessDamage" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -10379,12 +9765,7 @@ "type": { "value": "Health::Health::PropertyDamageToBeApplied" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [ @@ -10403,11 +9784,7 @@ "type": { "value": "Health::Health::TriggerDamageCooldown" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "events": [ @@ -10508,8 +9885,7 @@ "textG": 0, "textR": 0 }, - "comment": "If MaxHealth is set, prevent health from going above it", - "comment2": "" + "comment": "If MaxHealth is set, prevent health from going above it" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10518,12 +9894,7 @@ "type": { "value": "Health::Health::PropertyMaxHealth" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [ @@ -10635,8 +10006,7 @@ "textG": 0, "textR": 0 }, - "comment": "If Max Health is not set, do not enforce Max Health", - "comment2": "" + "comment": "If Max Health is not set, do not enforce Max Health" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10645,12 +10015,7 @@ "type": { "value": "Health::Health::PropertyMaxHealth" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "actions": [ @@ -10677,8 +10042,7 @@ "textG": 0, "textR": 0 }, - "comment": "If Max Health is set and Overhealing is not allowed", - "comment2": "" + "comment": "If Max Health is set and Overhealing is not allowed" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10687,22 +10051,14 @@ "type": { "value": "Health::Health::PropertyMaxHealth" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] }, { "type": { "inverted": true, "value": "Health::Health::PropertyAllowOverHealing" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -10729,8 +10085,7 @@ "textG": 0, "textR": 0 }, - "comment": "Perform heal", - "comment2": "" + "comment": "Perform heal" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10759,8 +10114,7 @@ "textG": 0, "textR": 0 }, - "comment": "Update healing trigger", - "comment2": "" + "comment": "Update healing trigger" }, { "type": "BuiltinCommonInstructions::Standard", @@ -10770,11 +10124,7 @@ "type": { "value": "Health::Health::SetPropertyIsJustHealed" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -10837,8 +10187,7 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure Current Health does not exceed new Max Health", - "comment2": "" + "comment": "Make sure Current Health does not exceed new Max Health" }, { "type": "BuiltinCommonInstructions::Standard", @@ -11182,11 +10531,7 @@ "type": { "value": "Health::Health::SetPropertyAllowOverHealing" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] }, @@ -11197,9 +10542,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -11207,11 +10550,7 @@ "type": { "value": "Health::Health::SetPropertyAllowOverHealing" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -11253,11 +10592,7 @@ "type": { "value": "Health::Health::SetPropertyHitAtLeastOnce" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] }, @@ -11268,9 +10603,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -11278,11 +10611,7 @@ "type": { "value": "Health::Health::SetPropertyHitAtLeastOnce" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -11324,11 +10653,7 @@ "type": { "value": "Health::Health::SetPropertyIsHealthJustDamaged" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] }, @@ -11339,9 +10664,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -11349,11 +10672,7 @@ "type": { "value": "Health::Health::SetPropertyIsHealthJustDamaged" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -11396,8 +10715,7 @@ "textG": 0, "textR": 0 }, - "comment": "Mark that the object was hit at least once (used for initial state of damage cooldown)", - "comment2": "" + "comment": "Mark that the object was hit at least once (used for initial state of damage cooldown)" }, { "type": "BuiltinCommonInstructions::Standard", @@ -11407,11 +10725,7 @@ "inverted": true, "value": "Health::Health::HitAtLeastOnce" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -11419,12 +10733,7 @@ "type": { "value": "Health::Health::SetHitAtLeastOnce" }, - "parameters": [ - "Object", - "Behavior", - "yes", - "" - ] + "parameters": ["Object", "Behavior", "yes", ""] } ] }, @@ -11436,10 +10745,7 @@ "type": { "value": "ResetObjectTimer" }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] + "parameters": ["Object", "\"__Health.TimeSinceLastHit\""] } ] } @@ -11478,8 +10784,7 @@ "textG": 0, "textR": 0 }, - "comment": "This condition is used to prevent \"damage cooldown\" from being active when the game starts.", - "comment2": "" + "comment": "This condition is used to prevent \"damage cooldown\" from being active when the game starts." }, { "type": "BuiltinCommonInstructions::Standard", @@ -11489,9 +10794,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -11502,10 +10805,7 @@ "type": { "value": "Health::Health::PropertyHitAtLeastOnce" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -11513,9 +10813,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11551,9 +10849,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -11564,10 +10860,7 @@ "type": { "value": "Health::Health::PropertyIsHealthJustDamaged" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -11575,9 +10868,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11613,9 +10904,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -11626,10 +10915,7 @@ "type": { "value": "Health::Health::PropertyIsJustHealed" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -11637,9 +10923,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11675,9 +10959,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -11688,21 +10970,13 @@ "type": { "value": "Health::Health::PropertyHitAtLeastOnce" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "Health::Health::PropertyDamageCooldown" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] }, { "type": { @@ -11721,9 +10995,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11759,9 +11031,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -11772,12 +11042,7 @@ "type": { "value": "Health::Health::PropertyCurrentHealth" }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] + "parameters": ["Object", "Behavior", "<=", "0"] } ], "actions": [ @@ -11785,9 +11050,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -11822,10 +11085,8 @@ { "type": { "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxHealth()" - ] + }, + "parameters": ["Object.Behavior::PropertyMaxHealth()"] } ] } @@ -11905,9 +11166,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyCurrentHealth()" - ] + "parameters": ["Object.Behavior::PropertyCurrentHealth()"] } ] } @@ -12028,9 +11287,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "0" - ] + "parameters": ["0"] } ] }, @@ -12041,11 +11298,7 @@ "type": { "value": "Health::Health::IsDamageCooldownActive" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -12135,9 +11388,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyChanceToDodge()" - ] + "parameters": ["Object.Behavior::PropertyChanceToDodge()"] } ] } @@ -12529,10 +11780,7 @@ "type": { "value": "ResetObjectTimer" }, - "parameters": [ - "Object", - "\"__Health.ShieldDuration\"" - ] + "parameters": ["Object", "\"__Health.ShieldDuration\""] } ] } @@ -12584,12 +11832,7 @@ "type": { "value": "Health::Health::PropertyMaxShieldPoints" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [ @@ -12613,9 +11856,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"RenewShieldDuration\"" - ] + "parameters": ["\"RenewShieldDuration\""] } ], "actions": [ @@ -12623,11 +11864,7 @@ "type": { "value": "Health::Health::RenewShieldDuration" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -12721,11 +11958,7 @@ "type": { "value": "Health::Health::SetPropertyBlockExcessDamage" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] }, @@ -12736,9 +11969,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -12746,11 +11977,7 @@ "type": { "value": "Health::Health::SetPropertyBlockExcessDamage" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -12791,9 +12018,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -12804,10 +12029,7 @@ "type": { "value": "Health::Health::PropertyIsShieldJustDamaged" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -12815,9 +12037,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -12853,9 +12073,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -12866,10 +12084,7 @@ "type": { "value": "Health::Health::PropertyIsJustDodged" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -12877,9 +12092,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -12915,9 +12128,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "False" - ] + "parameters": ["False"] } ] }, @@ -12931,8 +12142,7 @@ "textG": 0, "textR": 0 }, - "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration", - "comment2": "" + "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration" }, { "type": "BuiltinCommonInstructions::Standard", @@ -12941,12 +12151,7 @@ "type": { "value": "Health::Health::PropertyCurrentShieldPoints" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [], @@ -12961,8 +12166,7 @@ "textG": 0, "textR": 0 }, - "comment": "Don't check the timer when duration is zero (or negative)", - "comment2": "" + "comment": "Don't check the timer when duration is zero (or negative)" }, { "type": "BuiltinCommonInstructions::Standard", @@ -12971,12 +12175,7 @@ "type": { "value": "Health::Health::PropertyShieldDuration" }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] + "parameters": ["Object", "Behavior", "<=", "0"] } ], "actions": [ @@ -12984,9 +12183,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -12997,12 +12194,7 @@ "type": { "value": "Health::Health::PropertyShieldDuration" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] }, { "type": { @@ -13021,9 +12213,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -13225,9 +12415,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "0" - ] + "parameters": ["0"] } ] }, @@ -13238,12 +12426,7 @@ "type": { "value": "Health::Health::PropertyShieldDuration" }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "parameters": ["Object", "Behavior", ">", "0"] } ], "actions": [ @@ -13408,7 +12591,6 @@ "description": "", "group": "Health", "extraInformation": [], - "hidden": false, "name": "Health" }, { @@ -13428,7 +12610,6 @@ "description": "", "group": "Health", "extraInformation": [], - "hidden": false, "name": "MaxHealth" }, { @@ -13438,7 +12619,6 @@ "description": "", "group": "Health", "extraInformation": [], - "hidden": false, "name": "DamageCooldown" }, { @@ -13458,7 +12638,6 @@ "description": "", "group": "Health regeneration", "extraInformation": [], - "hidden": false, "name": "HealthRegenRate" }, { @@ -13468,7 +12647,6 @@ "description": "", "group": "Health regeneration", "extraInformation": [], - "hidden": false, "name": "HealthRegenDelay" }, { @@ -13478,7 +12656,6 @@ "description": "", "group": "Health", "extraInformation": [], - "hidden": false, "name": "AllowOverHealing" }, { @@ -13518,7 +12695,6 @@ "description": "", "group": "Shield", "extraInformation": [], - "hidden": false, "name": "MaxShieldPoints" }, { @@ -13528,7 +12704,6 @@ "description": "", "group": "Shield", "extraInformation": [], - "hidden": false, "name": "ShieldDuration" }, { @@ -13538,7 +12713,6 @@ "description": "", "group": "Shield regeneration", "extraInformation": [], - "hidden": false, "name": "ShieldRegenRate" }, { @@ -13548,7 +12722,6 @@ "description": "", "group": "Shield", "extraInformation": [], - "hidden": false, "name": "BlockExcessDamage" }, { @@ -13558,7 +12731,6 @@ "description": "", "group": "Shield regeneration", "extraInformation": [], - "hidden": false, "name": "ShieldRegenDelay" }, { @@ -13578,7 +12750,6 @@ "description": "", "group": "Health configuration", "extraInformation": [], - "hidden": false, "name": "ChanceToDodge" }, { @@ -13598,7 +12769,6 @@ "description": "", "group": "Armor", "extraInformation": [], - "hidden": false, "name": "FlatDamageReduction" }, { @@ -13608,7 +12778,6 @@ "description": "", "group": "Armor", "extraInformation": [], - "hidden": false, "name": "PercentDamageReduction" }, { @@ -13707,23 +12876,13 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyOldX" }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.X()" - ] + "parameters": ["Object", "Behavior", "=", "Object.X()"] }, { "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyOldY" }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Y()" - ] + "parameters": ["Object", "Behavior", "=", "Object.Y()"] } ] }, @@ -13737,8 +12896,7 @@ "textG": 0, "textR": 0 }, - "comment": "Set the initial state according to the configuration.", - "comment2": "" + "comment": "Set the initial state according to the configuration." }, { "type": "BuiltinCommonInstructions::Standard", @@ -13887,8 +13045,7 @@ "textG": 0, "textR": 0 }, - "comment": "Update the rectangle when the object is moved outside of the behavior.", - "comment2": "" + "comment": "Update the rectangle when the object is moved outside of the behavior." }, { "type": "BuiltinCommonInstructions::Standard", @@ -13928,8 +13085,7 @@ "textG": 0, "textR": 0 }, - "comment": "Move the object on the rectangular path.", - "comment2": "" + "comment": "Move the object on the rectangular path." }, { "type": "BuiltinCommonInstructions::Standard", @@ -13959,8 +13115,7 @@ "textG": 0, "textR": 0 }, - "comment": "Save the position to detect when the object is moved outside of the behavior.", - "comment2": "" + "comment": "Save the position to detect when the object is moved outside of the behavior." }, { "type": "BuiltinCommonInstructions::Standard", @@ -13970,23 +13125,13 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyOldX" }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.X()" - ] + "parameters": ["Object", "Behavior", "=", "Object.X()"] }, { "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyOldY" }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Y()" - ] + "parameters": ["Object", "Behavior", "=", "Object.Y()"] } ] } @@ -14022,8 +13167,7 @@ "textG": 0, "textR": 0 }, - "comment": "Step on the path.", - "comment2": "" + "comment": "Step on the path." }, { "type": "BuiltinCommonInstructions::Standard", @@ -14032,10 +13176,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -14060,10 +13201,7 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -14122,12 +13260,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyProgress" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] }, @@ -14414,9 +13547,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyWidth()" - ] + "parameters": ["Object.Behavior::PropertyWidth()"] } ] } @@ -14455,9 +13586,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyHeight()" - ] + "parameters": ["Object.Behavior::PropertyHeight()"] } ] } @@ -14496,9 +13625,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyLeft()" - ] + "parameters": ["Object.Behavior::PropertyLeft()"] } ] } @@ -14537,9 +13664,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyTop()" - ] + "parameters": ["Object.Behavior::PropertyTop()"] } ] } @@ -14957,9 +14082,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -14967,11 +14090,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] }, @@ -14983,9 +14102,7 @@ "inverted": true, "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"Value\"" - ] + "parameters": ["\"Value\""] } ], "actions": [ @@ -14993,11 +14110,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] } @@ -15083,10 +14196,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -15094,11 +14204,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyToogleClockwise" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] }, @@ -15110,10 +14216,7 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -15121,11 +14224,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyToogleClockwise" }, - "parameters": [ - "Object", - "Behavior", - "=" - ] + "parameters": ["Object", "Behavior", "="] } ] }, @@ -15136,10 +14235,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyToogleClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -15147,11 +14243,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] } ] }, @@ -15163,10 +14255,7 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyToogleClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -15174,11 +14263,7 @@ "type": { "value": "RectangleMovement::RectangleMovement::SetPropertyClockwise" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] } ] } @@ -15213,20 +14298,13 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnTop" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15234,9 +14312,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -15247,20 +14323,13 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnBottom" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15268,9 +14337,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15304,20 +14371,13 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnLeft" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15325,9 +14385,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -15339,20 +14397,13 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnRight" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15360,9 +14411,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15396,20 +14445,13 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnTop" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15417,9 +14459,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -15431,20 +14471,13 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnBottom" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15452,9 +14485,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15488,20 +14519,13 @@ "type": { "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnRight" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15509,9 +14533,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -15523,20 +14545,13 @@ "inverted": true, "value": "RectangleMovement::RectangleMovement::PropertyClockwise" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] }, { "type": { "value": "RectangleMovement::RectangleMovement::IsOnLeft" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -15544,9 +14559,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15592,9 +14605,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15640,9 +14651,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15698,9 +14707,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -15756,9 +14763,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -16004,9 +15009,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyWidth()" - ] + "parameters": ["Object.Behavior::PropertyWidth()"] } ] } @@ -16066,9 +15069,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyHeight()" - ] + "parameters": ["Object.Behavior::PropertyHeight()"] } ] } @@ -16128,9 +15129,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyHeight()" - ] + "parameters": ["Object.Behavior::PropertyHeight()"] } ] } @@ -16180,9 +15179,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyWidth()" - ] + "parameters": ["Object.Behavior::PropertyWidth()"] } ] } @@ -16378,7 +15375,6 @@ "description": "", "group": "Dimension", "extraInformation": [], - "hidden": false, "name": "Width" }, { @@ -16388,7 +15384,6 @@ "description": "", "group": "Dimension", "extraInformation": [], - "hidden": false, "name": "Height" }, { @@ -16398,7 +15393,6 @@ "description": "", "group": "Speed", "extraInformation": [], - "hidden": false, "name": "Clockwise" }, { @@ -16408,7 +15402,6 @@ "description": "", "group": "Speed", "extraInformation": [], - "hidden": false, "name": "HorizontalEdgeDuration" }, { @@ -16418,7 +15411,6 @@ "description": "", "group": "Speed", "extraInformation": [], - "hidden": false, "name": "VerticalEdgeDuration" }, { @@ -16512,7 +15504,6 @@ "easeFrom", "easeTo" ], - "hidden": false, "name": "Easing" }, { @@ -16527,7 +15518,6 @@ "Bottom-right corner", "Bottom-left corner" ], - "hidden": false, "name": "InitialPosition" }, { @@ -16549,4 +15539,4 @@ ], "externalLayouts": [], "externalSourceFiles": [] -} \ No newline at end of file +} diff --git a/templates/joystick/game.json b/templates/joystick/game.json index d85c2d4..5ccc1cc 100644 --- a/templates/joystick/game.json +++ b/templates/joystick/game.json @@ -1171,6 +1171,23 @@ } ], "effects": [] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Interface", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [] } ], "behaviorsSharedData": [ diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index fdb2ef8..4a36e62 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -10,7 +10,24 @@ "scene": "level" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "availableLocales": [ + "en", + "fr", + "ar", + "de", + "es", + "it", + "ja", + "ko", + "pl", + "pt", + "th", + "ru", + "sl", + "sq", + "uk", + "zh" + ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/healthBar/game.json", "initialProjectData": { "level": "Level", @@ -22,40 +39,80 @@ "messageByLocale": { "en": "# You've finished this lesson!", "fr": "# Vous avez terminé cette leçon !", + "ar": "# لقد أنهيت هذا الدرس!", + "de": "# Du hast diese Lektion abgeschlossen!", "es": "# ¡Has terminado esta lección!", + "it": "# Hai finito questa lezione!", + "ja": "# このレッスンは終了しました!", + "ko": "# 이 레슨을 완료했습니다!", + "pl": "# Ukończyłeś tę lekcję!", "pt": "# Você terminou esta lição!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "ru": "# Вы завершили этот урок!", + "sl": "# Končali ste to lekcijo!", + "sq": "# Ju keni perfunduar kete mesim!", + "uk": "# Ви завершили цей урок!", + "zh": "# 你完成了这节课!" } }, { "messageByLocale": { "en": "Well done, in this tutorial you've learned how to:", "fr": "Bien joué, voici ce que vous avez appris :", - "es": "¡Bien hecho! En este tutorial, has aprendido:", - "pt": "Bom trabalho, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:", + "de": "Gut gemacht, in diesem Tutorial hast du geler:", + "es": "¡Bien hecho, en este tutorial has aprendido cómo:", + "it": "Ben fatto, in questo tutorial hai imparato come:", + "ja": "このチュートリアルでは、次のことを学びました:", + "ko": "이 튜토리얼에서 다음을 배웠습니다.", + "pl": "Dobrze, w tym samouczku nauczyłeś się, jak:", + "pt": "Bom trabalho, neste tutorial você aprendeu como:", + "ru": "Хорошо, в этом уроке вы узнали, как:", + "sl": "Bravo, v tem vadnem programu ste se naučili, kako:", + "sq": "Bravo, ne kete mesim ju keni mesuar si te:", + "th": "ทำได้ดีเยี่ยม, ในบทเรียนนี้คุณได้เรียนรู้วิธี:", + "uk": "Добре, в цьому уроці ви дізналися, як:", + "zh": "做得好,在本教程中,您学会了如何:" } }, { "messageByLocale": { - "en": "- Create a layer\n\n- Add and use a prefab object", - "fr": "- Comment créer un calque\n\n- Comment ajouter et utiliser un objet préfabriqué", - "es": "- Cómo crear una capa\n\n- Cómo agregar y usar un objeto prefab", - "pt": "- Como criar uma camada\n\n- Como adicionar e usar um objeto prefab", - "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่มและวิธีใช้วัตถุ prefab", - "ar": "- إنشاء طبقة\n\n- إضافة واستخدام عناصر كائنات جاهزة للاستخدام" + "en": "- Use a prefab for a health bar\n\n- Update the health bar based on the player's health", + "fr": "- Ajouter et utiliser un objet préfabriqué\n\n- Mettre à jour la barre de vie en fonction de la vie du joueur", + "ar": "- استخدام كائن جاهز للاستخدام لشريط الصحة\n\n- تحديث شريط الصحة استنادًا إلى صحة اللاعب", + "de": "- Verwenden Sie ein Prefab für eine Gesundheitsleiste\n\n- Aktualisieren Sie die Gesundheitsleiste basierend auf der Gesundheit des Spielers", + "es": "- Usar un objeto prefab para una barra de salud\n\n- Actualizar la barra de salud en función de la salud del jugador", + "it": "- Utilizzare un prefab per una barra della salute\n\n- Aggiornare la barra della salute in base alla salute del giocatore", + "ja": "- プレハブを使用してヘルスバーを作成する\n\n- プレイヤーのヘルスに基づいてヘルスバーを更新する", + "ko": "- 건강 막대에 프리팹 사용\n\n- 플레이어의 건강에 따라 건강 막대 업데이트", + "pl": "- Użyj prefabrykatu do paska zdrowia\n\n- Zaktualizuj pasek zdrowia na podstawie zdrowia gracza", + "pt": "- Usar um prefab para uma barra de saúde\n\n- Atualizar a barra de saúde com base na saúde do jogador", + "ru": "- Использовать префаб для полосы здоровья\n\n- Обновлять полосу здоровья на основе здоровья игрока", + "sl": "- Uporabite predlogo za zdravstveno vrstico\n\n- Posodobite zdravstveno vrstico na podlagi zdravja igralca", + "sq": "- Përdor një prefab për një shirit të shëndetit\n\n- Përditëso shiritin e shëndetit bazuar në shëndetin e lojtarit", + "th": "- ใช้ prefab สำหรับ health bar\n\n- อัพเดท health bar ตามค่าเลือดของผู้เล่น", + "uk": "- Використовуйте префаб для смуги здоров'я\n\n- Оновлюйте смугу здоров'я на основі здоров'я гравця", + "zh": "- 使用预制件制作健康条\n\n- 根据玩家的健康状况更新健康条" } }, { "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!", + "de": "Sie können weiterhin Dinge zu diesem Spiel hinzufügen oder es veröffentlichen!", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", + "it": "Puoi continuare ad aggiungere cose a questo gioco o pubblicarlo!", + "ja": "このゲームにさらに要素を追加するか、公開することができます!", + "ko": "이 게임에 더 많은 것을 추가하거나 게시할 수 있습니다!", + "pl": "Możesz dalej dodawać rzeczy do tej gry lub ją opublikować!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "ru": "Вы можете продолжать добавлять вещи в эту игру или опубликовать ее!", + "sl": "Lahko še naprej dodajate stvari v to igro ali jo objavite!", + "sq": "Ju mund te vazhdoni te shtoni gjera te kete loje, ose publikoje!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "uk": "Ви можете продовжувати додавати речі до цієї гри або опублікувати її!", + "zh": "您可以继续为这个游戏添加东西,或者发布它!" } } ] @@ -69,10 +126,20 @@ "messageByLocale": { "en": "Let's go!", "fr": "C'est parti !", + "ar": "لنبدأ!", + "de": "Los geht's!", "es": "¡Vamos!", + "it": "Andiamo!", + "ja": "さあ、始めましょう!", + "ko": "출발!", + "pl": "Zaczynamy!", "pt": "Vamos lá!", + "ru": "Поехали!", + "sl": "Gremo!", + "sq": "Hajde shkojme!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "uk": "Почнемо!", + "zh": "让我们开始吧!" } } }, @@ -82,14 +149,83 @@ "messageByLocale": { "en": "This game is a Platformer. Click on the **preview** button to play.\nYou can move the player with the arrow keys, and jump with space.", "fr": "Ce jeu est un jeu de plateforme. Cliquez sur le bouton **Aperçu** pour y jouer.\nVous pouvez déplacer le joueur avec les flèches et sauter avec Espace.", + "ar": "هذه لعبة منصات. الضغط على الزر **معاينة** للعب.\nيمكنك تحريك الشخصية بواسطة مفاتيح الأسهم، والقفز بواسطة مفتاح المسافة.", + "de": "Dieses Spiel ist ein Plattformer. Klicken Sie auf die **Vorschau**-Schaltfläche, um zu spielen.\nSie können den Spieler mit den Pfeiltasten bewegen und mit der Leertaste springen.", "es": "Este juego es un plataformero.\nPuedes mover al jugador con las flechas y saltar con la barra espaciadora.\n\n**Pruébalo** con el botón de **Previsualización**.", + "it": "Questo gioco è un platformer. Clicca sul pulsante **Anteprima** per giocare.\nPuoi muovere il giocatore con i tasti freccia e saltare con lo spazio.", + "ja": "このゲームはプラットフォーマーです。**プレビュー**ボタンをクリックしてプレイしてください。\n矢印キーでプレイヤーを動かし、スペースでジャンプできます。", + "ko": "이 게임은 플랫포머입니다. **미리보기** 버튼을 클릭하여 플레이하세요.\n화살표 키로 플레이어를 이동하고, 스페이스로 점프할 수 있습니다.", + "pl": "Ta gra to platformówka. Kliknij przycisk **Podgląd**, aby zagrać.\nMożesz poruszać się graczem za pomocą strzałek i skakać za pomocą spacji.", "pt": "Este jogo é um plataforma.\nVocê pode mover o jogador com as teclas de seta e pular com espaço.\n\n**Teste-o** com o botão **pré-visualização**.", + "ru": "Эта игра - платформер. Нажмите на кнопку **предпросмотр**, чтобы поиграть.\nВы можете перемещать игрока с помощью стрелок и прыгать с помощью пробела.", + "sl": "Ta igra je platformer. Kliknite na gumb **predogled** za predvajanje.\nIgralca lahko premikate s puščičnimi tipkami in skočite s preslednico.", + "sq": "Ky lojë është një platformë. Klikoni në butonin **parashikim** për të luajtur.\nJu mund të lëvizni lojtarin me tastet e shigjetave dhe të kryeni një hop me hapësirën.", "th": "นี่เป็นเกม platformer แบบเรียบง่าย\nคุณสามารถเคลื่อนที่ผู้เล่นด้วยปุ่มลูกศรและกระโดดด้วย space bar\n\n**ลดลองเล่นเกม** โดยกดปุ่ม **ดูตัวอย่าง**\n\nเมื่อพร้อมแล้ว กดปุ่มนี้เพื่อไปต่อ", - "ar": "هذه لعبة منصات. الضغط على الزر **معاينة** للعب.\nيمكنك تحريك الشخصية بواسطة مفاتيح الأسهم، والقفز بواسطة مفتاح المسافة." + "uk": "Ця гра - платформер. Натисніть кнопку **попередній перегляд**, щоб грати.\nВи можете переміщати гравця за допомогою стрілок і стрибати за допомогою пробіла.", + "zh": "这个游戏是一个平台游戏。点击**预览**按钮进行游戏。\n你可以用方向键移动玩家,用空格键跳跃。" } } } }, + { + "elementToHighlightId": "#toolbar-open-layers-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-layer-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "First, let's open the **Layers** panel.", + "fr": "Premièrement, ouvrons le panneau des **calques**.", + "ar": "أولًا، هيّا نفتح لوحة **الطبقات**.", + "de": "Zuerst öffnen wir das **Ebenen**-Panel.", + "es": "Primero, abramos el panel de **Capas**.", + "it": "Prima di tutto, apriamo il pannello **Livelli**.", + "ja": "まず、**レイヤー** パネルを開きましょう。", + "ko": "먼저 **레이어** 패널을 엽니다.", + "pl": "Najpierw otwórzmy panel **Warstwy**.", + "pt": "Primeiro, vamos abrir o painel de **Camadas**.", + "ru": "Сначала давайте откроем панель **Слои**.", + "sl": "Najprej odprite ploščo **Plasti**.", + "sq": "Se fillimi, e hapim **Layers** panel.", + "th": "เปิดแผงควบคุม **เลเยอร์**", + "uk": "Спочатку давайте відкриємо панель **Шари**.", + "zh": "首先,让我们打开 **图层** 面板。" + } + }, + "placement": "bottom" + }, + "skippable": true + }, + { + "elementToHighlightId": "#layer-2 #layer-selected-unchecked", + "nextStepTrigger": { + "presenceOfElement": "#layer-2 #layer-selected-checked" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Interface** layer so we can place our health bar inside of it.", + "fr": "Sélectionnons le calque **Interface** pour y placer notre barre de vie.", + "ar": "حدد طبقة **الواجهة** حتى نتمكن من وضع شريط الصحة بداخلها.", + "de": "Wählen Sie die **Interface**-Ebene aus, damit wir unsere Gesundheitsleiste darin platzieren können.", + "es": "Selecciona la capa **Interface** para que podamos colocar nuestra barra de salud dentro de ella.", + "it": "Seleziona il livello **Interface** in modo da poter posizionare la nostra barra della salute al suo interno.", + "ja": "**Interface** レイヤーを選択して、ヘルスバーをその中に配置しましょう。", + "ko": "**Interface** 레이어를 선택하여 건강 막대를 그 안에 배치할 수 있도록 합니다.", + "pl": "Wybierz warstwę **Interface**, abyśmy mogli umieścić nasz pasek zdrowia wewnątrz niej.", + "pt": "Selecione a camada **Interface** para que possamos colocar nossa barra de saúde dentro dela.", + "ru": "Выберите слой **Interface**, чтобы мы могли поместить нашу полосу здоровья внутри него.", + "sl": "Izberite **Interface** plast, da lahko vanjo postavimo našo zdravstveno vrstico.", + "sq": "Zgjidh **Interface** layer që të vendosim shiritin e shëndetit brenda tij.", + "th": "เลือก **Interface** เพื่อที่เราจะสามารถวาง health bar ไว้ในนั้น", + "uk": "Виберіть **Interface** шар, щоб ми могли розмістити нашу смугу здоров'я всередині нього.", + "zh": "选择 **Interface** 图层,这样我们就可以把健康条放在里面。" + } + }, + "placement": "top" + } + }, { "elementToHighlightId": "#toolbar-open-objects-panel-button", "nextStepTrigger": { @@ -100,10 +236,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト** パネルを開いてください。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **obiektów**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **объектов**.", + "sl": "Odpri ploščo **objektov**.", + "sq": "Hape panelin **Objekte**", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **об'єктів**.", + "zh": "打开 **对象** 面板。" } }, "placement": "bottom" @@ -121,10 +267,20 @@ "messageByLocale": { "en": "Let's show players how much health they have left with a health bar.", "fr": "Ajoutons une barre de vie pour que le joueur ou la joueuse puisse voir combien de vie il lui reste.", + "ar": "هيّا نظهر للاعبين كم تبقى من الصحة لديهم بواسطة شريط الصحة.", + "de": "Zeigen wir den Spielern, wie viel Gesundheit sie noch haben, mit einer Gesundheitsleiste.", "es": "Agreguemos una barra de salud para que el jugador pueda ver cuánta salud le queda.", - "pt": "Vamos adicionar uma barra de saúde para que o jogador veja quanto de sua saúde resta.", + "it": "Mostriamo ai giocatori quanta salute gli rimane con una barra della salute.", + "ja": "プレイヤーがどれだけの体力を残しているかをヘルスバーで表示しましょう。", + "ko": "건강 막대로 플레이어에게 얼마나 많은 체력이 남았는지 보여줍시다.", + "pl": "Pokażmy graczom, ile zdrowia im zostało, za pomocą paska zdrowia.", + "pt": "Vamos mostrar aos jogadores quanto de saúde eles têm com uma barra de saúde.", + "ru": "Давайте покажем игрокам, сколько у них осталось здоровья, с помощью полосы здоровья.", + "sl": "Pokažimo igralcem, koliko zdravja jim je ostalo, s pomočjo zdravstvene vrstice.", + "sq": "Të tregojmë lojtarëve sa shëndet u ka mbetur me një shirit të shëndetit.", "th": "เพิ่ม health bar ให้กับผู้เล่น เพื่อให้สามารถดูได้ว่าเหลือเลือดอยู่เท่าไร", - "ar": "هيّا نظهر للاعبين كم تبقى من الصحة لديهم بواسطة شريط الصحة." + "uk": "Давайте покажемо гравцям, скільки у них залишилося здоров'я, за допомогою смуги здоров'я.", + "zh": "让我们用健康条来显示玩家还剩下多少生命值。" } } } @@ -139,10 +295,20 @@ "messageByLocale": { "en": "Let's choose a **prefab object** from the asset store", "fr": "Nous allons choisir un **objet préfabriqué** dans le magasin de ressources.", + "ar": "هيّا نختار **كائن جاهز للاستخدام** من متجر العناصر", + "de": "Wählen wir ein **Prefab-Objekt** aus dem Asset-Store aus.", "es": "Vamos a elegir un **objeto prefab** de la tienda de recursos.", + "it": "Scegliamo un **oggetto prefabbricato** dal negozio di risorse.", + "ja": "アセットストアから**プレハブオブジェクト**を選びましょう", + "ko": "자산 상점에서 **프리팹 오브젝트**를 선택해봅시다.", + "pl": "Wybierzmy **obiekt prefabrykowany** ze sklepu zasobów.", "pt": "Vamos escolher um **objeto prefab** da loja de recursos.", + "ru": "Давайте выберем **префаб-объект** из магазина ресурсов.", + "sl": "Izberimo **predlogo** iz trgovine z viri.", + "sq": "Të zgjedhim një **objekt prefab** nga dyqani i burimeve.", "th": "เลือก **วัตถุ prefab** จากร้านค้า asset", - "ar": "هيّا نختار **كائن جاهز للاستخدام** من متجر العناصر" + "uk": "Оберемо **префаб-об'єкт** з магазину ресурсів.", + "zh": "让我们从资源商店中选择一个**预制对象**。" } }, "placement": "bottom" @@ -160,10 +326,20 @@ "messageByLocale": { "en": "Let's go back to the store home page.", "fr": "Retournons à la page d'accueil du magasin.", + "ar": "هيّا نعود إلى صفحة المتجر الرئيسية.", + "de": "Gehen wir zurück zur Startseite des Stores.", "es": "Volvamos a la página de inicio de la tienda.", + "it": "Torniamo alla pagina iniziale del negozio.", + "ja": "ストアのホームページに戻りましょう。", + "ko": "상점 홈페이지로 돌아가봅시다.", + "pl": "Wróćmy do strony głównej sklepu.", "pt": "Vamos voltar para a página inicial da loja.", + "ru": "Вернемся на главную страницу магазина.", + "sl": "Pojdimo nazaj na domačo stran trgovine.", + "sq": "Të kthehemi në faqen kryesore të dyqanit.", "th": "กลับไปยังหน้าโฮมเพจของร้านค้า", - "ar": "هيّا نعود إلى صفحة المتجر الرئيسية." + "uk": "Повернемося на головну сторінку магазину.", + "zh": "让我们回到商店的主页。" } }, "placement": "bottom" @@ -182,10 +358,20 @@ "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", "fr": "Nous allons utiliser un objet préfabriqué. C'est un objet qui vient avec ses propres actions et conditions, ce qui simplifie son utilisation.", + "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميه **كائن جاهز للاستخدام**.", + "de": "Wir werden ein Objekt verwenden, das mit vorgefertigten Aktionen und Bedingungen geliefert wird. Wir nennen dies ein **Fertig zum Verwenden-Objekt**.", "es": "Vamos a usar un objeto prefab. Es un objeto que viene con sus propias acciones y condiciones, lo que simplifica su uso.", + "it": "Useremo un oggetto che viene fornito con azioni e condizioni predefinite. Lo chiamiamo **Oggetto pronto all'uso**.", + "ja": "事前に作成されたアクションと条件が付属しているオブジェクトを使用します。これを**使用準備完了オブジェクト**と呼びます。", + "ko": "미리 만들어진 액션과 조건이 포함된 객체를 사용할 것입니다. 이것을 **사용 준비된 객체**라고 부릅니다.", + "pl": "Będziemy używać obiektu, który jest dostarczany z gotowymi akcjami i warunkami. Nazywamy to **Gotowy do użycia obiekt**.", "pt": "Vamos usar um objeto prefab. É um objeto que vem com suas próprias ações e condições, o que simplifica seu uso.", + "ru": "Мы будем использовать объект, который поставляется с готовыми действиями и условиями. Мы называем это **Готовый к использованию объект**.", + "sl": "Uporabili bomo predmet, ki prihaja s predhodno pripravljenimi dejanji in pogoji. Imenujemo ga **Pripravljen za uporabo predmet**.", + "sq": "Do të përdorim një objekt që vjen me veprime dhe kushte të parapërgatitura. Ne e quajmë këtë **Objekt gati për përdorim**.", "th": "เราจะใช้วัตถุ prefab มันเป็นวัตถุที่มีการกระทำและเงื่อนไขแบบพิเศษ", - "ar": "سوف نستخدم كائن يأتي مع إجراءات وشروط معدّة مسبقًا. نحن نسميه **كائن جاهز للاستخدام**." + "uk": "Ми будемо використовувати об'єкт, який постачається з готовими діями та умовами. Ми називаємо це **Готовий до використання об'єкт**.", + "zh": "我们将使用一个带有预先制作的动作和条件的对象。我们称之为**准备好使用的对象**。" } } }, @@ -201,10 +387,20 @@ "messageByLocale": { "en": "We will use a resource bar that can be filled or emptied.", "fr": "Nous allons utiliser une barre de ressource. Elle peut être remplie ou vidée.", + "ar": "سوف نستخدم شريط موارد يمكن ملؤه أو إفراغه.", + "de": "Wir werden eine Ressourcenleiste verwenden, die gefüllt oder geleert werden kann.", "es": "Vamos a usar una barra de recursos que se puede llenar o vaciar.", + "it": "Useremo una barra delle risorse che può essere riempita o svuotata.", + "ja": "満たすことも空にすることもできるリソースバーを使用します。", + "ko": "채울 수도 비울 수도 있는 자원 막대를 사용할 것입니다.", + "pl": "Będziemy używać paska zasobów, który można wypełnić lub opróżnić.", "pt": "Vamos usar uma barra de recursos que pode ser preenchida ou esvaziada.", + "ru": "Мы будем использовать полосу ресурсов, которую можно заполнить или опустошить.", + "sl": "Uporabili bomo vrstico virov, ki jo je mogoče napolniti ali izprazniti.", + "sq": "Do të përdorim një shirit burimesh që mund të mbushet ose zbrazet.", "th": "เราจะใช้ resource bar ที่สามารถเติมให้เต็มหรือล้างให้เกลี้ยงได้", - "ar": "سوف نستخدم شريط موارد يمكن ملؤه أو إفراغه." + "uk": "Ми будемо використовувати смугу ресурсів, яку можна заповнити або опорожнити.", + "zh": "我们将使用一个可以填充或清空的资源条。" } } }, @@ -220,10 +416,20 @@ "messageByLocale": { "en": "Let's choose the hearts bar.", "fr": "Choisissons la barre de coeurs.", + "ar": "هيّا نختار شريط القلوب.", + "de": "Wählen wir die Herzleiste.", "es": "Elegimos la barra de corazones.", + "it": "Scegliamo la barra dei cuori.", + "ja": "ハートバーを選びましょう。", + "ko": "하트 바를 선택해봅시다.", + "pl": "Wybierzmy pasek serc.", "pt": "Vamos escolher a barra de corações.", + "ru": "Давайте выберем полосу сердец.", + "sl": "Izberimo vrstico src.", + "sq": "Të zgjedhim shiritin e zemrave.", "th": "มาเลือก hearts bar กัน", - "ar": "هيّا نختار شريط القلوب." + "uk": "Оберемо смугу сердець.", + "zh": "让我们选择心形条。" } } } @@ -241,10 +447,20 @@ "messageByLocale": { "en": "Let's add it to the scene.", "fr": "Ajoutons la à la scène.", + "ar": "هيّا نقوم بإضافته إلى المشهد.", + "de": "Fügen wir es zur Szene hinzu.", "es": "Agreguemosla a la escena.", + "it": "Aggiungiamola alla scena.", + "ja": "シーンに追加しましょう。", + "ko": "씬에 추가해봅시다.", + "pl": "Dodajmy to do sceny.", "pt": "Vamos adicioná-la à cena.", + "ru": "Добавим его в сцену.", + "sl": "Dodajmo ga v sceno.", + "sq": "Të shtojmë në skenë.", "th": "เพิ่มลงไปใน scene", - "ar": "هيّا نقوم بإضافته إلى المشهد." + "uk": "Додамо його до сцени.", + "zh": "让我们把它添加到场景中。" } }, "placement": "top" @@ -260,87 +476,20 @@ "messageByLocale": { "en": "Let's close the asset store.", "fr": "Fermons le magasin de ressources", + "ar": "هيّا نغلق متجر العناصر.", + "de": "Schließen wir den Asset-Store.", "es": "Cerramos la tienda de recursos.", + "it": "Chiudiamo il negozio di risorse.", + "ja": "アセットストアを閉じましょう。", + "ko": "자산 상점을 닫아봅시다.", + "pl": "Zamknijmy sklep zasobów.", "pt": "Vamos fechar a loja de recursos.", + "ru": "Давайте закроем магазин ресурсов.", + "sl": "Zaprimo trgovino z viri.", + "sq": "Të mbyjmë dyqanin e burimeve.", "th": "ปิดร้านค้า asset", - "ar": "هيّا نغلق متجر العناصر." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#toolbar-open-layers-panel-button", - "nextStepTrigger": { - "presenceOfElement": "#add-layer-button" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Open the **Layers** panel.", - "fr": "Ouvrez le panneau des **calques**.", - "es": "Abre el panel de **Capas**.", - "pt": "Abra o painel de **Camadas**.", - "th": "เปิดแผงควบคุม **เลเยอร์**", - "ar": "فتح لوحة **الطبقات**." - } - }, - "placement": "bottom" - }, - "skippable": true - }, - { - "elementToHighlightId": "#add-layer-button", - "nextStepTrigger": { - "presenceOfElement": "#layer-2" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We will create a layer for the User Interface (UI) elements.", - "fr": "Nous allons créer un calque qui contiendra l'interface utilisateur (IU).", - "es": "Vamos a crear una capa que contendrá los elementos de la interfaz de usuario (IU).", - "pt": "Vamos criar uma camada que conterá os elementos da interface do usuário (IU).", - "th": "เราจะสร้างเลเยอร์ที่จะประกอบไปด้วย User Interface (UI) ต่างๆ", - "ar": "سنبدأ بإنشاء طبقة لعناصر واجهة المستخدم." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-2 #layer-name", - "nextStepTrigger": { - "valueEquals": "Interface" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the name to **Interface**.", - "fr": "Changeons son nom en **Interface**.", - "es": "Cambiamos su nombre a **Interface**.", - "pt": "Mudamos o nome para **Interface**.", - "th": "เปลี่ยนชื่อเป็น **Interface**", - "ar": "تغيير الاسم إلى **Interface**." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-2 #layer-selected-unchecked", - "nextStepTrigger": { - "presenceOfElement": "#layer-2 #layer-selected-checked" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select this **layer** so we can place our hearts inside of it.", - "fr": "Sélectionnons ce **calque** pour y placer $(resourceBar).", - "es": "Seleccionemos esta capa como la **capa predeterminada** para agregar objetos.", - "pt": "Vamos selecionar esta camada como a **camada padrão** para adicionar objetos.", - "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", - "ar": "تحديد هذه **الطبقة** لنتمكن من إدراج القلوب داخلها." + "uk": "Давайте закриємо магазин ресурсів.", + "zh": "让我们关闭资源商店。" } }, "placement": "top" @@ -356,10 +505,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト** パネルを開いてください。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **obiektów**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **объектов**.", + "sl": "Odpri ploščo **objektov**.", + "sq": "Hape panelin **Objekte**", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **об'єктів**.", + "zh": "打开 **对象** 面板。" } }, "placement": "bottom" @@ -376,20 +535,40 @@ "messageByLocale": { "en": "Drag the **$(resourceBar)** to the scene.", "fr": "Faites glisser **$(resourceBar)** du menu à la scène.", + "ar": "سحب الـ **$(resourceBar)** إلى المشهد.", + "de": "Ziehen Sie **$(resourceBar)** in die Szene.", "es": "Arrastra **$(resourceBar)** desde el menú a la escena.", + "it": "Trascina **$(resourceBar)** nella scena.", + "ja": "**$(resourceBar)** をシーンにドラッグしてください。", + "ko": "**$(resourceBar)**를 씬으로 끌어다 놓습니다.", + "pl": "Przeciągnij **$(resourceBar)** na scenę.", "pt": "Arraste **$(resourceBar)** do menu para a cena.", + "ru": "Перетащите **$(resourceBar)** на сцену.", + "sl": "Povlecite **$(resourceBar)** v sceno.", + "sq": "Tërhiqni **$(resourceBar)** në skenë.", "th": "ลาก **$(resourceBar)** ใส่ลงใน scene", - "ar": "سحب الـ **$(resourceBar)** إلى المشهد." + "uk": "Перетягніть **$(resourceBar)** на сцену.", + "zh": "将 **$(resourceBar)** 拖到场景中。" } }, "touchDescription": { "messageByLocale": { "en": "Select the **$(resourceBar)**, then drag it to the scene.", "fr": "Sélectionnez **$(resourceBar)**, puis faites-le glisser à la scène.", + "ar": "تحديد الـ **$(resourceBar)** ثم سحبه إلى المشهد.", + "de": "Wählen Sie **$(resourceBar)** aus und ziehen Sie es dann in die Szene.", "es": "Selecciona **$(resourceBar)**, luego arrástralo a la escena.", + "it": "Seleziona **$(resourceBar)**, quindi trascinalo nella scena.", + "ja": "**$(resourceBar)** を選択し、シーンにドラッグしてください。", + "ko": "**$(resourceBar)**를 선택한 다음 씬으로 끌어다 놓습니다.", + "pl": "Wybierz **$(resourceBar)**, a następnie przeciągnij go na scenę.", "pt": "Selecione **$(resourceBar)**, em seguida, arraste-o para a cena.", + "ru": "Выберите **$(resourceBar)**, затем перетащите его на сцену.", + "sl": "Izberite **$(resourceBar)**, nato ga povlecite v sceno.", + "sq": "Zgjidh **$(resourceBar)**, pastaj tërhiqeni në skenë.", "th": "เลือก **$(resourceBar)** แล้วลากมันเข้า scene", - "ar": "تحديد الـ **$(resourceBar)** ثم سحبه إلى المشهد." + "uk": "Виберіть **$(resourceBar)**, а потім перетягніть його на сцену.", + "zh": "选择 **$(resourceBar)**,然后将其拖到场景中。" } } } @@ -400,10 +579,20 @@ "messageByLocale": { "en": "I'm done", "fr": "J'ai terminé", + "ar": "انتهيت", + "de": "Ich bin fertig", "es": "He terminado", + "it": "Ho finito", + "ja": "完了", + "ko": "완료", + "pl": "Zakończono", "pt": "Terminei", + "ru": "Я закончил", + "sl": "Končano", + "sq": "Une mbarova", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "uk": "Закінчено", + "zh": "我完成了" } } }, @@ -413,10 +602,20 @@ "messageByLocale": { "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nPlace the $(resourceBar) on the top left corner of the **camera view**.", "fr": "Vous voyez le **rectangle noir** au milieu de la scène ? C'est la **vue de la caméra**. C'est le point de vue à partir duquel le joueur verra le jeu.\n\nPlacez $(resourceBar) dans le coin en haut à gauche du rectangle.", + "ar": "هل يمكنك رؤية **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإدراج الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**.", + "de": "Siehst du den **schwarzen rechteckigen Rahmen** in der Mitte der Szene? Das ist die **Kameraperspektive**. Sie umrahmt den Teil des Spiels, den der Spieler sehen wird.\n\nPlatziere $(resourceBar) in der oberen linken Ecke der **Kameraperspektive**.", "es": "¿Ves el **rectángulo negro** en el centro de la escena? Esta es la **vista de la cámara**. Es el punto de vista desde el que el jugador verá el juego.\n\nColoca $(resourceBar) en la esquina superior izquierda del rectángulo.", + "it": "Vedi il cornice rettangolare nero al centro della scena? Questa è la visuale della telecamera. Incornicia la parte del gioco che il giocatore vedrà.\n\nPosiziona $(resourceBar) nell'angolo in alto a sinistra della visuale della telecamera.", + "ja": "シーンの中央にある黒い長方形の枠を見てください。それがカメラビューです。プレイヤーが見るゲームの一部をフレーム内に収めます。\n\n$(resourceBar)をカメラビューの左上隅に配置してください。", + "ko": "장면 중앙에 있는 검은 직사각형 프레임을(를) 보세요? 이것이 카메라 뷰입니다. 플레이어가 볼 게임의 일부를 프레임 안에 포함시킵니다.\n\n$(resourceBar)을(를) 카메라 뷰의 왼쪽 상단 모서리에 배치하세요.", + "pl": "Zauważ czarną prostokątną ramkę pośrodku sceny? To widok kamery. Ogranicza on część gry, którą gracz będzie widział.\n\nUmieść $(resourceBar) w lewym górnym rogu widoku kamery.", "pt": "Você vê o **retângulo preto** no meio da cena? Esta é a **visão da câmera**. É o ponto de vista a partir do qual o jogador verá o jogo.\n\nColoque $(resourceBar) no canto superior esquerdo do retângulo.", + "ru": "Заметьте **черный прямоугольный кадр** посередине сцены? Это **вид камеры**. Он ограничивает часть игры, которую увидит игрок.\n\nРазместите $(resourceBar) в левом верхнем углу **вида камеры**.", + "sl": "Vidite **črni pravokotni okvir** v sredini prizora? To je **pogled kamere**. Okvirja del igre, ki ga bo igralec videl.\n\nPostavite $(resourceBar) v zgornji levi kot **pogleda kamere**.", + "sq": "Shihni **kornizën e zezë drejtkëndëshe** në mes të skenës? Kjo është **pamja e kamerës**. Ajo përcakton pjesën e lojës që lojtari do të shohë.\n\nVendos $(resourceBar) në cepin e sipërm majtë të **pamjes së kamerës**.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nจัดวาง $(resourceBar) ให้อยู่ในมุมซ้ายบนของสี่เหลี่ยม\n\nเมื่อเสร็จแล้ว คลิกด้านล่าง", - "ar": "هل يمكنك رؤية **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإدراج الـ $(resourceBar) في أعلى يسار زاوية **رؤية الكاميرا**." + "uk": "Бачите **чорний прямокутний кадр** посередині сцени? Це **вид камери**. Він обмежує частину гри, яку побачить гравець.\n\nРозмістіть $(resourceBar) в лівому верхньому куті **виду камери**.", + "zh": "看到场景中间的**黑色矩形框**了吗?那是**相机视图**。它框住了玩家将看到的游戏部分。\n\n将 $(resourceBar) 放在**相机视图**的左上角。" } }, "placement": "top", @@ -435,10 +634,20 @@ "messageByLocale": { "en": "Now we'll link the health of the **$(player)** to **$(resourceBar)**! Click on the tab Events to go to the **Events Sheet** of your $(level) scene.", "fr": "Maintenant, branchons la vie du **$(player)** avec **$(resourceBar)** ! Cliquez sur l'onglet Évènements de la scène $(level) pour accéder à la **feuille d'événements**.", + "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على نافذة الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level).", + "de": "Jetzt verknüpfen wir die Gesundheit des **$(player)** mit **$(resourceBar)**! Klicken Sie auf die Registerkarte Ereignisse, um zum **Ereignisblatt** Ihrer Szene $(level) zu gelangen.", "es": "Ahora, conectemos la vida del **$(player)** con **$(resourceBar)**! Abramos la **hoja de eventos** de la escena $(level).", + "it": "Ora collegheremo la vita del **$(player)** a **$(resourceBar)**! Clicca sulla scheda Eventi per andare alla **scheda Eventi** della tua scena $(level).", + "ja": "今度は **$(player)** の体力を **$(resourceBar)** にリンクしましょう! イベントタブをクリックして、$(level) シーンの **イベントシート** に移動します。", + "ko": "이제 **$(player)**의 체력을 **$(resourceBar)**에 연결해 보겠습니다! **이벤트** 탭을 클릭하여 $(level) 씬의 **이벤트 시트**로 이동합니다.", + "pl": "Teraz połączymy zdrowie **$(player)** z **$(resourceBar)**! Kliknij kartę Wydarzenia, aby przejść do **arkusza wydarzeń** sceny $(level).", "pt": "Agora, vamos conectar a vida do **$(player)** com **$(resourceBar)**! Vamos **abrir a Folha de Eventos** da cena $(level).", + "ru": "Теперь мы свяжем здоровье **$(player)** с **$(resourceBar)**! Нажмите на вкладку События, чтобы перейти к **таблице событий** вашей сцены $(level).", + "sl": "Zdaj bomo povezali zdravje **$(player)** z **$(resourceBar)**! Kliknite na zavihek Dogodki, da odprete **preglednico dogodkov** vaše scene $(level).", + "sq": "Tani do të lidhim shëndetin e **$(player)** me **$(resourceBar)**! Kliko në skedën Ngjarje për të shkuar te **Fletë e Ngjarjeve** të skenës $(level).", "th": "ทีนี้ มาเชื่อมเลือดของ **$(player)** กับ **$(resourceBar)**กันเถอะ! ให้ **เปิดชี้ทอีเวนต์** จาก scene $(level)", - "ar": "الآن سوف نربط صحة الـ **$(player)** بالـ **$(resourceBar)**! الضغط على نافذة الأحداث للذهاب إلى **صفحة الأحداث** الخاصة بالمشهد $(level)." + "uk": "Тепер ми зв'яжемо здоров'я **$(player)** з **$(resourceBar)**! Натисніть на вкладку Події, щоб перейти до **таблиці подій** вашої сцени $(level).", + "zh": "现在我们将把 **$(player)** 的生命值与 **$(resourceBar)** 连接起来!点击事件标签,进入你的 $(level) 场景的 **事件表**。" } }, "placement": "bottom" @@ -455,10 +664,20 @@ "messageByLocale": { "en": "Let's **add an action** to define the number of lifes that will be displayed on $(resourceBar).", "fr": "**Ajoutons une action** pour changer le nombre de vies affichées par $(resourceBar).", + "ar": "هيّا نقوم ب**إضافة إجراء** لتعريف عدد المحاولات التي سيتم عرضها على $(resourceBar).", + "de": "**Fügen wir eine Aktion hinzu**, um die Anzahl der Leben zu definieren, die auf $(resourceBar) angezeigt werden.", "es": "**Agreguemos una acción** para cambiar el valor de relleno de $(resourceBar).", + "it": "**Aggiungiamo un'azione** per definire il numero di vite che verrà visualizzato su $(resourceBar).", + "ja": "$(resourceBar) に表示されるライフの数を定義するために **アクションを追加** しましょう。", + "ko": "$(resourceBar)에 표시될 라이프의 수를 정의하기 위해 **액션을 추가**해 보겠습니다.", + "pl": "Dodajmy **akcję**, aby zdefiniować liczbę żyć, która będzie wyświetlana na $(resourceBar).", "pt": "**Adicionemos uma ação** para alterar o valor de preenchimento de $(resourceBar).", + "ru": "Добавим **действие**, чтобы определить количество жизней, которое будет отображаться на $(resourceBar).", + "sl": "Dodajmo **dejanje**, da določimo število življenj, ki se bodo prikazala na $(resourceBar).", + "sq": "Le të **shtojmë një veprim** për të përcaktuar numrin e jetëve që do të shfaqen në $(resourceBar).", "th": "ให้ **เพิ่มการกระทำ** เพื่อเปลี่ยนค่าที่จะเพิ่มขึ้นของ $(resourceBar)", - "ar": "هيّا نقوم ب**إضافة إجراء** لتعريف عدد المحاولات التي سيتم عرضها على $(resourceBar)." + "uk": "Додаймо **дію**, щоб визначити кількість життів, які будуть відображатися на $(resourceBar).", + "zh": "让我们**添加一个动作**来定义在 $(resourceBar) 上显示的生命值的数量。" } } } @@ -473,10 +692,20 @@ "messageByLocale": { "en": "Select **$(resourceBar)**.", "fr": "Sélectionnez **$(resourceBar)**.", + "ar": "تحديد **$(resourceBar)**.", + "de": "Wähle **$(resourceBar)**.", "es": "Seleccione **$(resourceBar)**.", + "it": "Seleziona **$(resourceBar)**.", + "ja": "**$(resourceBar)** を選択します。", + "ko": "**$(resourceBar)**를 선택합니다.", + "pl": "Wybierz **$(resourceBar)**.", "pt": "Selecione **$(resourceBar)**.", + "ru": "Выберите **$(resourceBar)**.", + "sl": "Izberi **$(resourceBar)**.", + "sq": "Zgjidh **$(resourceBar)**.", "th": "เลือก **$(resourceBar)**", - "ar": "تحديد **$(resourceBar)**." + "uk": "Виберіть **$(resourceBar)**.", + "zh": "选择 **$(resourceBar)**。" } } }, @@ -492,36 +721,25 @@ "messageByLocale": { "en": "Select the action **Value**.", "fr": "Sélectionnez l'action **Value**.", + "ar": "تحديد الإجراء **Value**.", + "de": "Wähle die Aktion **Value**.", "es": "Seleccione la acción **Value**.", + "it": "Seleziona l'azione **Value**.", + "ja": "アクション **Value** を選択します。", + "ko": "액션 **Value**를 선택합니다.", + "pl": "Wybierz akcję **Value**.", "pt": "Selecione a ação **Value**.", + "ru": "Выберите действие **Value**.", + "sl": "Izberi dejanje **Value**.", + "sq": "Zgjidh veprimin **Value**.", "th": "เลือกการกระทำ **Value**", - "ar": "تحديد الإجراء **Value**." + "uk": "Виберіть дію **Value**.", + "zh": "选择动作 **Value**。" } } }, "isOnClosableDialog": true }, - { - "elementToHighlightId": "#parameter-1-operator-field", - "nextStepTrigger": { - "valueEquals": "=" - }, - "skippable": true, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We want the value of the bar to match the health of $(player), so let's select **= (set to)**.", - "fr": "Nous voulons que la barre de vie représente la santé de $(player), donc sélectionnons **= (définir à)**.", - "es": "Queremos que el valor de la barra de vida coincida con la salud de $(player), así que seleccionemos **= (establecer en)**.", - "pt": "Queremos que o valor da barra de vida corresponda à saúde de $(player), então vamos selecionar **= (definir como)**.", - "th": "เราต้องการให้ค่าของ bar เชื่อมกันกับเลือกของ $(player) ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد أن يكون قيمة الشريط متصلًا بصحة الـ $(player)، لذلك هيّا نحدد **= (تعيين إلى)**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, { "elementToHighlightId": "#open-number-expression-popover-button", "nextStepTrigger": { @@ -532,10 +750,20 @@ "messageByLocale": { "en": "Now, let's use the value where the health of $(player) is saved.", "fr": "Trouvons où est stockée la santé de $(player).", + "ar": "والآن، هيّا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة.", + "de": "Lassen Sie uns jetzt den Wert verwenden, in dem die Gesundheit von $(player) gespeichert ist.", "es": "Encontremos dónde está almacenada la salud de $(player).", + "it": "Ora, usiamo il valore in cui è salvata la vita di $(player).", + "ja": "$(player) の体力が保存されている値を使いましょう。", + "ko": "$(player)의 체력이 저장된 곳의 값을 사용해 보겠습니다.", + "pl": "Teraz użyjmy wartości, w której jest zapisane zdrowie $(player).", "pt": "Vamos encontrar onde está armazenada a saúde de $(player).", + "ru": "Теперь давайте используем значение, в котором сохранено здоровье $(player).", + "sl": "Zdaj uporabimo vrednost, kjer je shranjeno zdravje $(player).", + "sq": "Tani, le të përdorim vlerën ku është ruajtur shëndeti i $(player).", "th": "มาดูกันว่าค่าเลือดของผู้เล่นเก็บไว้ที่ไหน", - "ar": "والآن، هيّا نستخدم القيمة التي تكون فيها صحة الـ $(player) محفوظة." + "uk": "Тепер давайте використаємо значення, де зберігається здоров'я $(player).", + "zh": "现在,让我们使用保存 $(player) 生命值的值。" } }, "placement": "bottom" @@ -552,10 +780,20 @@ "messageByLocale": { "en": "A **Health extension** has been applied to $(player) to store its lives. Search **Health** to use that value.", "fr": "L'**extension Health** (Santé) a été appliquée à $(player) pour stocker son nombre de vies. Cherchez **Health** pour utiliser cette valeur.", + "ar": "تم تطبيق الملحق **Health** على الـ $(player) لتخزين صحته. البحث عن **Health** لاستخدام تلك القيمة.", + "de": "$(player) wurde die **Health-Erweiterung** zugewiesen, um seine Leben zu speichern. Suchen Sie nach **Health**, um diesen Wert zu verwenden.", "es": "$(player) está configurado para usar la **extensión Health**. Busque **Health**.", + "it": "A $(player) è stata applicata l'estensione **Health** per memorizzare le sue vite. Cerca **Health** per usare quel valore.", + "ja": "$(player) には **Health 拡張機能** が適用され、そのライフを保存します。その値を使うために **Health** を検索します。", + "ko": "$(player)에 **Health 확장 기능**이 적용되어 라이프를 저장합니다. 그 값을 사용하려면 **Health**를 검색하세요.", + "pl": "$(player) został zastosowany **rozszerzenie Health**, aby przechowywać swoje życia. Wyszukaj **Health**, aby użyć tej wartości.", "pt": "$(player) está configurado para usar a **extensão Health**. Procure por **Health**.", + "ru": "К $(player) применено расширение **Health** для хранения его жизней. Найдите **Health**, чтобы использовать это значение.", + "sl": "$(player) je bila dodeljena **razširitev Health**, da shrani svoje življenje. Poiščite **Health**, da uporabite to vrednost.", + "sq": "$(player) është aplikuar **shtesës së Shëndetit** për të ruajtur jetën e tij. Kërkoni **Shëndet** për të përdorur atë vlerë.", "th": "$(player) ตั้งค่าให้ใช้ **Health extension** ค้นหา **Health**", - "ar": "تم تطبيق الملحق **Health** على الـ $(player) لتخزين صحته. البحث عن **Health** لاستخدام تلك القيمة." + "uk": "$(player) було застосовано розширення **Health**, щоб зберігати свої життя. Знайдіть **Health**, щоб використати це значення.", + "zh": "$(player) 已应用 **Health 扩展** 来存储它的生命。搜索 **Health** 来使用该值。" } }, "placement": "top" @@ -572,10 +810,20 @@ "messageByLocale": { "en": "Select **Health points**.", "fr": "Sélectionnez **Health points**.", + "ar": "تحديد **Health points**.", + "de": "Wählen Sie **Health points**.", "es": "Seleccione **Health points**.", + "it": "Seleziona **Health points**.", + "ja": "**Health points** を選択します。", + "ko": "**Health points**를 선택합니다.", + "pl": "Wybierz **Health points**.", "pt": "Selecione **Health points**.", + "ru": "Выберите **Health points**.", + "sl": "Izberi **Health points**.", + "sq": "Zgjidh **Health points**.", "th": "เลือก **Health points**", - "ar": "تحديد **Health points**." + "uk": "Виберіть **Health points**.", + "zh": "选择 **Health points**。" } }, "placement": "bottom" @@ -592,10 +840,20 @@ "messageByLocale": { "en": "Select **$(player)**.", "fr": "Sélectionnez **$(player)**.", + "ar": "تحديد **$(player)**.", + "de": "Wählen Sie **$(player)**.", "es": "Seleccione **$(player)**.", + "it": "Seleziona **$(player)**.", + "ja": "**$(player)** を選択します。", + "ko": "**$(player)**를 선택합니다.", + "pl": "Wybierz **$(player)**.", "pt": "Selecione **$(player)**.", + "ru": "Выберите **$(player)**.", + "sl": "Izberi **$(player)**.", + "sq": "Zgjidh **$(player)**.", "th": "เลือก **$(player)**", - "ar": "تحديد **$(player)**." + "uk": "Виберіть **$(player)**.", + "zh": "选择 **$(player)**。" } }, "placement": "top" @@ -612,10 +870,20 @@ "messageByLocale": { "en": "We're good.", "fr": "On est bon.", + "ar": "نحن على الطريق الصحيح.", + "de": "Wir sind fertig.", "es": "Estamos bien.", + "it": "Siamo a posto.", + "ja": "完了です。", + "ko": "준비 완료!", + "pl": "Jesteśmy gotowi.", "pt": "Estamos bem.", + "ru": "Мы готовы.", + "sl": "V redu smo.", + "sq": "Jemi mirë.", "th": "เรียบร้อยแล้ว", - "ar": "نحن على الطريق الصحيح." + "uk": "Ми готові.", + "zh": "我们好了。" } }, "placement": "top" @@ -632,10 +900,20 @@ "messageByLocale": { "en": "Everything is all set.", "fr": "Tout est bien configuré.", + "ar": "تم ضبط كل شيء.", + "de": "Alles ist bereit.", "es": "Todo está bien configurado.", + "it": "Tutto è pronto.", + "ja": "すべてが設定されました。", + "ko": "모든 것이 준비되었습니다.", + "pl": "Wszystko jest gotowe.", "pt": "Tudo está configurado.", + "ru": "Все готово.", + "sl": "Vse je pripravljeno.", + "sq": "Gjithçka është e përgatitur.", "th": "ทุกอย่างเรียบร้อยแล้ว", - "ar": "تم ضبط كل شيء." + "uk": "Все готово.", + "zh": "一切都准备好了。" } }, "placement": "top" @@ -651,10 +929,20 @@ "messageByLocale": { "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", + "de": "Gut, wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die Schaltfläche **Vorschau**.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "Bene, abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "よし、完了です!変更を確認するためにゲームをテストしましょう! **プレビュー** ボタンをクリックします。", + "ko": "좋아요, 준비되었습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 보겠습니다! **미리보기** 버튼을 클릭하세요.", + "pl": "Dobrze, skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Хорошо, мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "V redu, končali smo! Preizkusimo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Mirë, kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." + "uk": "Добре, ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми внесли! Натисніть на кнопку **Попередній перегляд**.", + "zh": "好了,我们完成了!让我们测试一下我们的游戏,看看我们所做的更改!点击 **预览** 按钮。" } }, "placement": "bottom" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 7bb51a0..a08a296 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -163,6 +163,65 @@ } } }, + { + "elementToHighlightId": "#toolbar-open-layers-panel-button", + "nextStepTrigger": { + "presenceOfElement": "#add-layer-button" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "First, let's open the **Layers** panel.", + "fr": "Premièrement, ouvrons le panneau des **calques**.", + "ar": "أولًا، هيّا نفتح لوحة **الطبقات**.", + "de": "Zuerst öffnen wir das **Ebenen**-Panel.", + "es": "Primero, abramos el panel de **Capas**.", + "it": "Prima di tutto, apriamo il pannello **Livelli**.", + "ja": "まず、**レイヤー** パネルを開きましょう。", + "ko": "먼저 **레이어** 패널을 엽니다.", + "pl": "Najpierw otwórzmy panel **Warstwy**.", + "pt": "Primeiro, vamos abrir o painel de **Camadas**.", + "ru": "Сначала давайте откроем панель **Слои**.", + "sl": "Najprej odprite ploščo **Plasti**.", + "sq": "Se fillimi, e hapim **Layers** panel.", + "th": "เปิดแผงควบคุม **เลเยอร์**", + "uk": "Спочатку давайте відкриємо панель **Шари**.", + "zh": "首先,让我们打开 **图层** 面板。" + } + }, + "placement": "bottom" + }, + "skippable": true + }, + { + "elementToHighlightId": "#layer-1 #layer-selected-unchecked", + "nextStepTrigger": { + "presenceOfElement": "#layer-1 #layer-selected-checked" + }, + "tooltip": { + "description": { + "messageByLocale": { + "en": "Select the **Interface** layer so we can place our joystick inside of it.", + "fr": "Sélectionnons le calque **Interface** pour y placer notre joystick.", + "ar": "حدد الطبقة **الواجهة** حتى نتمكن من وضع عصا التحكم بداخلها.", + "de": "Wählen Sie die **Interface**-Ebene aus, damit wir unseren Joystick darin platzieren können.", + "es": "Selecciona la capa **Interface** para que podamos colocar nuestro joystick dentro de ella.", + "it": "Seleziona il livello **Interface** in modo da poter posizionare il nostro joystick al suo interno.", + "ja": "**インターフェース** レイヤーを選択して、その中にジョイスティックを配置しましょう。", + "ko": "**인터페이스** 레이어를 선택하여 그 안에 조이스틱을 배치할 수 있도록 합시다.", + "pl": "Wybierz warstwę **Interface** tak, abyśmy mogli umieścić w niej naszego joysticka.", + "pt": "Selecione a camada **Interface** para que possamos colocar nosso joystick dentro dela.", + "ru": "Выберите слой **Interface**, чтобы мы могли поместить в него наш джойстик.", + "sl": "Izberite plast **Interface**, da lahko vanj postavimo naš joystick.", + "sq": "Zgjidh **Interface** layer qe te vendosim joystickun brenda tij.", + "th": "เลือก **Interface** เลเยอร์ เพื่อที่เราจะวาง joystick ในนั้น", + "uk": "Виберіть шар **Interface**, щоб ми могли помістити наш джойстик всередину.", + "zh": "选择 **界面** 层,这样我们就可以把手柄放在里面。" + } + }, + "placement": "top" + } + }, { "elementToHighlightId": "#toolbar-open-objects-panel-button", "nextStepTrigger": { From 7e5ed0e7bf609f7b033add80a786e20119a51f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:39:54 +0100 Subject: [PATCH 091/208] Improve Camera Parralax --- templates/cameraParallax/game.json | 734 ++++++++------------------- tutorials/in-app/cameraParallax.json | 704 ++++++++++++++++++------- 2 files changed, 725 insertions(+), 713 deletions(-) diff --git a/templates/cameraParallax/game.json b/templates/cameraParallax/game.json index 8178f2a..d5afe65 100644 --- a/templates/cameraParallax/game.json +++ b/templates/cameraParallax/game.json @@ -8,6 +8,8 @@ }, "properties": { "adaptGameResolutionAtRuntime": true, + "antialiasingMode": "MSAA", + "antialisingEnabledOnMobile": false, "folderProject": false, "orientation": "landscape", "packageName": "com.example.CameraParallaxLesson", @@ -276,6 +278,9 @@ "resourceFolders": [] }, "objects": [], + "objectsFolderStructure": { + "folderName": "__ROOT" + }, "objectsGroups": [], "variables": [], "layouts": [ @@ -398,9 +403,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "PlayerObject", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -906,7 +911,6 @@ "assetStoreId": "", "height": 320, "name": "FarBackground", - "tags": "", "texture": "clouds-1.png", "type": "TiledSpriteObject::TiledSprite", "width": 320, @@ -918,7 +922,6 @@ "assetStoreId": "", "height": 640, "name": "MidBackground", - "tags": "", "texture": "town-1.png", "type": "TiledSpriteObject::TiledSprite", "width": 640, @@ -930,7 +933,6 @@ "assetStoreId": "", "height": 32, "name": "Floor", - "tags": "", "texture": "assets\\Ground.png", "type": "TiledSpriteObject::TiledSprite", "width": 32, @@ -950,7 +952,6 @@ "assetStoreId": "", "height": 32, "name": "WallRight", - "tags": "", "texture": "assets\\WallRight.png", "type": "TiledSpriteObject::TiledSprite", "width": 32, @@ -970,7 +971,6 @@ "assetStoreId": "", "height": 32, "name": "WallLeft", - "tags": "", "texture": "assets\\WallLeft.png", "type": "TiledSpriteObject::TiledSprite", "width": 32, @@ -987,9 +987,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06", "name": "TopArrowButton", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -1040,7 +1040,6 @@ { "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d", "name": "FlatDarkJoystick", - "tags": "", "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", "variables": [], "effects": [], @@ -1048,6 +1047,7 @@ "content": {}, "childrenContent": { "Border": { + "adaptCollisionMaskAutomatically": false, "updateIfNotVisible": false, "animations": [ { @@ -1082,6 +1082,7 @@ ] }, "Thumb": { + "adaptCollisionMaskAutomatically": false, "updateIfNotVisible": false, "animations": [ { @@ -1118,6 +1119,35 @@ } } ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "PlayerObject" + }, + { + "objectName": "FarBackground" + }, + { + "objectName": "MidBackground" + }, + { + "objectName": "Floor" + }, + { + "objectName": "WallRight" + }, + { + "objectName": "WallLeft" + }, + { + "objectName": "TopArrowButton" + }, + { + "objectName": "FlatDarkJoystick" + } + ] + }, "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -1129,8 +1159,7 @@ "textG": 0, "textR": 0 }, - "comment": "Set the offset of the background", - "comment2": "" + "comment": "Set the offset of the background" }, { "type": "BuiltinCommonInstructions::Standard", @@ -1157,8 +1186,7 @@ "textG": 0, "textR": 0 }, - "comment": "Change default background color", - "comment2": "" + "comment": "Change default background color" }, { "type": "BuiltinCommonInstructions::Standard", @@ -1167,9 +1195,7 @@ "type": { "value": "DepartScene" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -1177,10 +1203,7 @@ "type": { "value": "SceneBackground" }, - "parameters": [ - "", - "\"24;18;32\"" - ] + "parameters": ["", "\"24;18;32\""] } ], "events": [ @@ -1192,9 +1215,7 @@ "inverted": true, "value": "SystemInfo::HasTouchScreen" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -1202,10 +1223,7 @@ "type": { "value": "HideLayer" }, - "parameters": [ - "TopArrowButton", - "\"Joysticks\"" - ] + "parameters": ["TopArrowButton", "\"Joysticks\""] } ] } @@ -1221,8 +1239,7 @@ "textG": 0, "textR": 0 }, - "comment": "Player animations", - "comment2": "" + "comment": "Player animations" }, { "type": "BuiltinCommonInstructions::Standard", @@ -1231,10 +1248,7 @@ "type": { "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [], @@ -1246,10 +1260,7 @@ "type": { "value": "PlatformBehavior::IsOnFloor" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [ @@ -1257,10 +1268,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "PlayerObject", - "\"Run\"" - ] + "parameters": ["PlayerObject", "\"Run\""] } ] }, @@ -1271,10 +1279,7 @@ "type": { "value": "PlatformBehavior::IsJumping" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [ @@ -1282,10 +1287,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "PlayerObject", - "\"Jump\"" - ] + "parameters": ["PlayerObject", "\"Jump\""] } ] } @@ -1299,10 +1301,7 @@ "inverted": true, "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle" }, - "parameters": [ - "PlayerObject", - "PlatformerObject" - ] + "parameters": ["PlayerObject", "PlatformerObject"] } ], "actions": [ @@ -1310,10 +1309,7 @@ "type": { "value": "SetAnimationName" }, - "parameters": [ - "PlayerObject", - "\"Idle\"" - ] + "parameters": ["PlayerObject", "\"Idle\""] } ] }, @@ -1324,12 +1320,7 @@ "type": { "value": "PlatformBehavior::CurrentSpeed" }, - "parameters": [ - "PlayerObject", - "PlatformerObject", - "<", - "0" - ] + "parameters": ["PlayerObject", "PlatformerObject", "<", "0"] }, { "type": { @@ -1343,10 +1334,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "PlayerObject", - "yes" - ] + "parameters": ["PlayerObject", "yes"] } ] }, @@ -1357,12 +1345,7 @@ "type": { "value": "PlatformBehavior::CurrentSpeed" }, - "parameters": [ - "PlayerObject", - "PlatformerObject", - ">", - "0" - ] + "parameters": ["PlayerObject", "PlatformerObject", ">", "0"] }, { "type": { @@ -1376,10 +1359,7 @@ "type": { "value": "FlipX" }, - "parameters": [ - "PlayerObject", - "no" - ] + "parameters": ["PlayerObject", "no"] } ] }, @@ -1393,8 +1373,7 @@ "textG": 0, "textR": 0 }, - "comment": "Force camera to stay within the boundaries", - "comment2": "" + "comment": "Force camera to stay within the boundaries" }, { "type": "BuiltinCommonInstructions::Standard", @@ -1421,13 +1400,36 @@ } ], "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Background", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [] + }, { "ambientLightColorB": 0, "ambientLightColorG": 8823888, "ambientLightColorR": 16, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, + "isLocked": false, "name": "", + "renderingType": "", "visibility": true, "cameras": [ { @@ -1447,9 +1449,15 @@ "ambientLightColorB": 12053944, "ambientLightColorG": 6068784, "ambientLightColorR": 12533720, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, + "isLocked": false, "name": "Joysticks", + "renderingType": "", "visibility": true, "cameras": [], "effects": [] @@ -1545,9 +1553,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -1593,9 +1599,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -1854,9 +1858,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -1891,9 +1893,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -1928,9 +1928,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -1965,9 +1963,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -2026,9 +2022,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2063,9 +2057,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2100,9 +2092,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2137,9 +2127,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2174,9 +2162,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2211,9 +2197,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2248,9 +2232,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] }, @@ -2285,9 +2267,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -2324,8 +2304,7 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure the joystick has moved from center", - "comment2": "" + "comment": "Make sure the joystick has moved from center" }, { "type": "BuiltinCommonInstructions::Standard", @@ -2360,9 +2339,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -2405,8 +2382,7 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure the joystick has moved from center", - "comment2": "" + "comment": "Make sure the joystick has moved from center" }, { "type": "BuiltinCommonInstructions::Standard", @@ -2441,9 +2417,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -2672,11 +2646,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -2710,11 +2680,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -2747,9 +2713,7 @@ "type": { "value": "HasGameJustResumed" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -2757,21 +2721,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "DebuggerTools::ConsoleLog" }, - "parameters": [ - "\"Resumed!!!\"", - "", - "" - ] + "parameters": ["\"Resumed!!!\"", "", ""] } ] }, @@ -2791,9 +2747,7 @@ "type": { "value": "HasAnyTouchOrMouseStarted" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -2801,12 +2755,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "events": [ @@ -2823,12 +2772,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] }, { "type": { @@ -2863,12 +2807,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] + "parameters": ["Object", "Behavior", "+", "1"] } ] } @@ -2886,8 +2825,7 @@ "textG": 0, "textR": 0 }, - "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)", - "comment2": "" + "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)" }, { "type": "BuiltinCommonInstructions::Standard", @@ -2907,11 +2845,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ] } @@ -2934,12 +2868,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] } ], "actions": [ @@ -3002,9 +2931,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyJoystickForce()" - ] + "parameters": ["Object.Behavior::PropertyJoystickForce()"] } ] } @@ -3095,9 +3022,7 @@ "type": { "value": "SetReturnNumber" }, - "parameters": [ - "Object.Behavior::PropertyJoystickAngle()" - ] + "parameters": ["Object.Behavior::PropertyJoystickAngle()"] } ] } @@ -3216,9 +3141,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -3282,9 +3205,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -3324,12 +3245,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] } ], "actions": [ @@ -3337,9 +3253,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -3375,24 +3289,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0", - "" - ] + "parameters": ["Object", "Behavior", "=", "0", ""] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -3664,7 +3567,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -3674,7 +3576,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "JoystickIdentifier" }, { @@ -3684,7 +3585,6 @@ "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", "group": "", "extraInformation": [], - "hidden": false, "name": "DeadZoneRadius" }, { @@ -3749,11 +3649,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] } ], "actions": [ @@ -3761,22 +3657,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" }, - "parameters": [ - "Object", - "Behavior", - "no" - ] + "parameters": ["Object", "Behavior", "no"] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" }, - "parameters": [ - "Object", - "Behavior", - "\"Idle\"", - "" - ] + "parameters": ["Object", "Behavior", "\"Idle\"", ""] } ] }, @@ -3788,19 +3675,13 @@ "inverted": true, "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "HasAnyTouchOrMouseStarted" }, - "parameters": [ - "" - ] + "parameters": [""] } ], "actions": [ @@ -3808,12 +3689,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ], "events": [ @@ -3870,12 +3746,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] + "parameters": ["Object", "Behavior", "+", "1"] } ] } @@ -3890,20 +3761,13 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" }, - "parameters": [ - "Object", - "Behavior", - "" - ] + "parameters": ["Object", "Behavior", ""] }, { "type": { "value": "HasTouchEnded" }, - "parameters": [ - "", - "Object.Behavior::PropertyTouchId()" - ] + "parameters": ["", "Object.Behavior::PropertyTouchId()"] } ], "actions": [ @@ -3911,33 +3775,19 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" }, - "parameters": [ - "Object", - "Behavior", - "\"Released\"", - "" - ] + "parameters": ["Object", "Behavior", "\"Released\"", ""] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": ["Object", "Behavior", "yes"] }, { "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "parameters": ["Object", "Behavior", "=", "0"] } ] } @@ -3971,10 +3821,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased" }, - "parameters": [ - "Object", - "Behavior" - ] + "parameters": ["Object", "Behavior"] } ], "actions": [ @@ -3982,9 +3829,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -4018,12 +3863,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId" }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] + "parameters": ["Object", "Behavior", "!=", "0"] } ], "actions": [ @@ -4031,9 +3871,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -4109,7 +3947,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -4119,7 +3956,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ButtonIdentifier" }, { @@ -4188,10 +4024,7 @@ "type": { "value": "PlatformBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -4216,10 +4049,7 @@ "type": { "value": "PlatformBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -4244,19 +4074,13 @@ "type": { "value": "PlatformBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] }, { "type": { "value": "PlatformBehavior::SimulateLadderKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -4281,10 +4105,7 @@ "type": { "value": "PlatformBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] }, @@ -4308,10 +4129,7 @@ "type": { "value": "PlatformBehavior::SimulateJumpKey" }, - "parameters": [ - "Object", - "Property" - ] + "parameters": ["Object", "Property"] } ] } @@ -4342,7 +4160,6 @@ "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], - "hidden": false, "name": "Property" }, { @@ -4352,7 +4169,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -4361,11 +4177,7 @@ "label": "Joystick name", "description": "", "group": "Controls", - "extraInformation": [ - "Primary", - "Secondary" - ], - "hidden": false, + "extraInformation": ["Primary", "Secondary"], "name": "JoystickIdentifier" }, { @@ -4375,7 +4187,6 @@ "description": "", "group": "Controls", "extraInformation": [], - "hidden": false, "name": "JumpButton" } ], @@ -4400,12 +4211,7 @@ "type": { "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Analog\"" - ] + "parameters": ["Object", "Behavior", "=", "\"Analog\""] } ], "actions": [ @@ -4429,12 +4235,7 @@ "type": { "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"360°\"" - ] + "parameters": ["Object", "Behavior", "=", "\"360°\""] } ], "actions": [ @@ -4476,10 +4277,7 @@ "inverted": true, "value": "TopDownMovementBehavior::DiagonalsAllowed" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ], "actions": [], @@ -4505,10 +4303,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4533,10 +4328,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4561,10 +4353,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4589,10 +4378,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] } @@ -4605,10 +4391,7 @@ "type": { "value": "TopDownMovementBehavior::DiagonalsAllowed" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ], "actions": [], @@ -4634,10 +4417,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4662,10 +4442,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4690,10 +4467,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4718,10 +4492,7 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4746,19 +4517,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4783,19 +4548,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateUpKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4820,19 +4579,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateLeftKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] }, @@ -4857,19 +4610,13 @@ "type": { "value": "TopDownMovementBehavior::SimulateDownKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] }, { "type": { "value": "TopDownMovementBehavior::SimulateRightKey" }, - "parameters": [ - "Object", - "TopDownMovement" - ] + "parameters": ["Object", "TopDownMovement"] } ] } @@ -4904,7 +4651,6 @@ "extraInformation": [ "TopDownMovementBehavior::TopDownMovementBehavior" ], - "hidden": false, "name": "TopDownMovement" }, { @@ -4914,7 +4660,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -4923,11 +4668,7 @@ "label": "Joystick name", "description": "", "group": "", - "extraInformation": [ - "Primary", - "Secondary" - ], - "hidden": false, + "extraInformation": ["Primary", "Secondary"], "name": "JoystickIdentifier" }, { @@ -4936,12 +4677,7 @@ "label": "Stick mode", "description": "", "group": "Controls", - "extraInformation": [ - "Analog", - "360°", - "8 Directions" - ], - "hidden": false, + "extraInformation": ["Analog", "360°", "8 Directions"], "name": "StickMode" } ], @@ -4969,87 +4705,49 @@ "type": { "value": "Create" }, - "parameters": [ - "", - "Border", - "0", - "0", - "" - ] + "parameters": ["", "Border", "0", "0", ""] }, { "type": { "value": "Create" }, - "parameters": [ - "", - "Thumb", - "0", - "0", - "" - ] + "parameters": ["", "Thumb", "0", "0", ""] }, { "type": { "value": "ChangePlan" }, - "parameters": [ - "Border", - "=", - "1" - ] + "parameters": ["Border", "=", "1"] }, { "type": { "value": "ChangePlan" }, - "parameters": [ - "Thumb", - "=", - "2" - ] + "parameters": ["Thumb", "=", "2"] }, { "type": { "value": "SetCenter" }, - "parameters": [ - "Border", - "=", - "0", - "=", - "0" - ] + "parameters": ["Border", "=", "0", "=", "0"] }, { "type": { "value": "SetCenter" }, - "parameters": [ - "Thumb", - "=", - "0", - "=", - "0" - ] + "parameters": ["Thumb", "=", "0", "=", "0"] }, { "type": { "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" }, - "parameters": [ - "Object", - "" - ] + "parameters": ["Object", ""] }, { "type": { "value": "SetIncludedInParentCollisionMask" }, - "parameters": [ - "Thumb", - "" - ] + "parameters": ["Thumb", ""] } ] } @@ -5112,10 +4810,7 @@ "type": { "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" }, - "parameters": [ - "Object", - "" - ] + "parameters": ["Object", ""] } ] } @@ -5206,9 +4901,7 @@ "inverted": true, "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"ShouldActivate\"" - ] + "parameters": ["\"ShouldActivate\""] } ], "actions": [ @@ -5216,11 +4909,7 @@ "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Border", - "MultitouchJoystick", - "no" - ] + "parameters": ["Border", "MultitouchJoystick", "no"] } ] }, @@ -5231,9 +4920,7 @@ "type": { "value": "GetArgumentAsBoolean" }, - "parameters": [ - "\"ShouldActivate\"" - ] + "parameters": ["\"ShouldActivate\""] } ], "actions": [ @@ -5241,11 +4928,7 @@ "type": { "value": "ActivateBehavior" }, - "parameters": [ - "Border", - "MultitouchJoystick", - "yes" - ] + "parameters": ["Border", "MultitouchJoystick", "yes"] } ] } @@ -5279,11 +4962,7 @@ "type": { "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed" }, - "parameters": [ - "Border", - "MultitouchJoystick", - "!=" - ] + "parameters": ["Border", "MultitouchJoystick", "!="] } ], "actions": [ @@ -5291,9 +4970,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -5405,9 +5082,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -5455,9 +5130,7 @@ "type": { "value": "SetReturnBoolean" }, - "parameters": [ - "True" - ] + "parameters": ["True"] } ] } @@ -5703,7 +5376,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -5712,11 +5384,7 @@ "label": "Joystick name", "description": "", "group": "", - "extraInformation": [ - "Primary", - "Secondary" - ], - "hidden": false, + "extraInformation": ["Primary", "Secondary"], "name": "JoystickIdentifier" }, { @@ -5726,7 +5394,6 @@ "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", "group": "", "extraInformation": [], - "hidden": false, "name": "DeadZoneRadius" }, { @@ -5735,9 +5402,7 @@ "label": "", "description": "Only used by the scene editor.", "group": "", - "extraInformation": [ - "Thumb" - ], + "extraInformation": ["Thumb"], "hidden": true, "name": "ThumbAnchorOrigin" }, @@ -5757,9 +5422,7 @@ "label": "", "description": "Only used by the scene editor.", "group": "", - "extraInformation": [ - "Thumb" - ], + "extraInformation": ["Thumb"], "hidden": true, "name": "ThumbIsScaledProportionally" }, @@ -5776,9 +5439,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Thumb", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -5799,9 +5462,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Border", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -5834,11 +5497,22 @@ } ] } - ] + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Thumb" + }, + { + "objectName": "Border" + } + ] + } } ] } ], "externalLayouts": [], "externalSourceFiles": [] -} \ No newline at end of file +} diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index c831bb9..35611ce 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -10,7 +10,24 @@ "scene": "cameraScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "availableLocales": [ + "en", + "fr", + "ar", + "de", + "es", + "it", + "ja", + "ko", + "pl", + "pt", + "th", + "ru", + "sl", + "sq", + "uk", + "zh" + ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/cameraParallax/game.json", "initialProjectData": { "cameraScene": "CameraScene", @@ -24,40 +41,80 @@ "messageByLocale": { "en": "# You've finished this lesson!", "fr": "# Vous avez terminé cette leçon !", + "ar": "# لقد أنهيت هذا الدرس!", + "de": "# Du hast diese Lektion abgeschlossen!", "es": "# ¡Has terminado esta lección!", + "it": "# Hai finito questa lezione!", + "ja": "# このレッスンは終了しました!", + "ko": "# 이 레슨을 완료했습니다!", + "pl": "# Ukończyłeś tę lekcję!", "pt": "# Você terminou esta lição!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "ru": "# Вы завершили этот урок!", + "sl": "# Končali ste to lekcijo!", + "sq": "# Ju keni perfunduar kete mesim!", + "uk": "# Ви завершили цей урок!", + "zh": "# 你完成了这节课!" } }, { "messageByLocale": { - "en": "Well done, in this tutorial you've learned:", - "fr": "Bien joué, dans ce tutoriel vous avez appris :", - "es": "¡Bien hecho, en este tutorial aprendiste:", - "pt": "Bem feito, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "en": "Well done, in this tutorial you've learned how to:", + "fr": "Bien joué, voici ce que vous avez appris :", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:", + "de": "Gut gemacht, in diesem Tutorial hast du geler:", + "es": "¡Bien hecho, en este tutorial has aprendido cómo:", + "it": "Ben fatto, in questo tutorial hai imparato come:", + "ja": "このチュートリアルでは、次のことを学びました:", + "ko": "이 튜토리얼에서 다음을 배웠습니다.", + "pl": "Dobrze, w tym samouczku nauczyłeś się, jak:", + "pt": "Bom trabalho, neste tutorial você aprendeu como:", + "ru": "Хорошо, в этом уроке вы узнали, как:", + "sl": "Bravo, v tem vadnem programu ste se naučili, kako:", + "sq": "Bravo, ne kete mesim ju keni mesuar si te:", + "th": "ทำได้ดีเยี่ยม, ในบทเรียนนี้คุณได้เรียนรู้วิธี:", + "uk": "Добре, в цьому уроці ви дізналися, як:", + "zh": "做得好,在本教程中,您学会了如何:" } }, { "messageByLocale": { - "en": "- How to create a layer\n\n- How to add an extension\n\n- How to control the camera\n\n- How to make Tiled Sprites move at different speeds", - "fr": "- Comment créer un calque\n\n- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", - "es": "- Cómo crear una capa\n\n- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", - "pt": "- Como criar uma camada\n\n- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades", - "th": "- วิธีสร้างเลเยอร์\n\n- วิธีเพิ่ม extension\n\n- วิธีควบคุมกล้อง\n\n- วิธีทำให้ Tiled Sprites เคลื่อนที่ด้วยค่าความเร็วต่างๆ", - "ar": "- إنشاء طبقة\n\n- إضافة ملحق\n\n- التحكم في الكاميرا\n\n- إنشاء كائنات مبلطة تتحرك بسرعات مختلفة" + "en": "- How to add an extension\n\n- How to control the camera\n\n- How to make Tiled Sprites move at different speeds", + "fr": "- Comment ajouter une extension\n\n- Comment contrôler la caméra\n\n- Comment faire bouger des Tiled Sprites à différentes vitesses", + "ar": "- إضافة ملحق\n\n- التحكم في الكاميرا\n\n- إنشاء كائنات مبلطة تتحرك بسرعات مختلفة", + "de": "- Eine Erweiterung hinzufügen\n\n- Die Kamera steuern\n\n- Tiled Sprites mit unterschiedlichen Geschwindigkeiten bewegen", + "es": "- Cómo agregar una extensión\n\n- Cómo controlar la cámara\n\n- Cómo hacer que los Tiled Sprites se muevan a diferentes velocidades", + "it": "- Come aggiungere un'estensione\n\n- Come controllare la telecamera\n\n- Come fare in modo che i Tiled Sprites si muovano a diverse velocità", + "ja": "- 拡張機能の追加方法\n\n- カメラの制御方法\n\n- タイルスプライトを異なる速度で動かす方法", + "ko": "- 확장 기능 추가 방법\n\n- 카메라 제어 방법\n\n- 타일 스프라이트를 다른 속도로 움직이게 하는 방법", + "pl": "- Jak dodać rozszerzenie\n\n- Jak kontrolować kamerę\n\n- Jak sprawić, by kafelkowe obiekty poruszały się z różnymi prędkościami", + "pt": "- Como adicionar uma extensão\n\n- Como controlar a câmera\n\n- Como fazer Tiled Sprites se movem a diferentes velocidades", + "ru": "- Как добавить расширение\n\n- Как управлять камерой\n\n- Как заставить Tiled Sprites двигаться с разной скоростью", + "sl": "- Kako dodati razširitev\n\n- Kako nadzirati kamero\n\n- Kako narediti, da se Tiled Sprites premikajo z različnimi hitrostmi", + "sq": "- Si te shtosh nje zgjerim\n\n- Si te kontrollosh kameren\n\n- Si te besh qe Tiled Sprites te levizin me shpejtesi te ndryshme", + "th": "- วิธีเพิ่ม extension\n\n- วิธีควบคุมกล้อง\n\n- วิธีทำให้ Tiled Sprites เคลื่อนที่ด้วยค่าความเร็วต่างๆ", + "uk": "- Як додати розширення\n\n- Як керувати камерою\n\n- Як зробити, щоб Tiled Sprites рухалися з різною швидкістю", + "zh": "- 如何添加扩展\n\n- 如何控制摄像机\n\n- 如何使平铺精灵以不同速度移动" } }, { "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", - "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!", + "de": "Sie können weiterhin Dinge zu diesem Spiel hinzufügen oder es veröffentlichen!", + "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", + "it": "Puoi continuare ad aggiungere cose a questo gioco o pubblicarlo!", + "ja": "このゲームにさらに要素を追加するか、公開することができます!", + "ko": "이 게임에 더 많은 것을 추가하거나 게시할 수 있습니다!", + "pl": "Możesz dalej dodawać rzeczy do tej gry lub ją opublikować!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "ru": "Вы можете продолжать добавлять вещи в эту игру или опубликовать ее!", + "sl": "Lahko še naprej dodajate stvari v to igro ali jo objavite!", + "sq": "Ju mund te vazhdoni te shtoni gjera te kete loje, ose publikoje!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "uk": "Ви можете продовжувати додавати речі до цієї гри або опублікувати її!", + "zh": "您可以继续为这个游戏添加东西,或者发布它!" } } ] @@ -74,44 +131,44 @@ "messageByLocale": { "en": "Let's improve this platformer game by following the character with the camera!", "fr": "Améliorons ce jeu de plateforme en suivant le personnage avec la caméra !", + "ar": "هيّا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!", + "de": "Verbessern wir dieses Plattformspiel, indem wir dem Charakter mit der Kamera folgen!", "es": "¡Mejoremos este juego de plataforma siguiendo al personaje con la cámara!", + "it": "Miglioriamo questo gioco platform seguendo il personaggio con la telecamera!", + "ja": "キャラクターをカメラで追いかけることで、このプラットフォーマーゲームを改善しましょう!", + "ko": "캐릭터를 카메라로 따라가면서 이 플랫포머 게임을 개선해 봅시다!", + "pl": "Ulepszmy tę grę platformową, śledząc postać za pomocą kamery!", "pt": "Melhore este jogo de plataforma seguindo o personagem com a câmera!", + "ru": "Улучшим эту платформенную игру, следуя за персонажем с помощью камеры!", + "sl": "Izboljšajmo to platformno igro, tako da sledimo liku s kamero!", + "sq": "Përmirësojmë këtë lojë platforme duke ndjekur personazhin me kamerën!", "th": "มาทำให้เกม platformer เกมนี้ดีขึ้นจากการติดตามตัวละครด้วยกล้องกันเถอะ", - "ar": "هيّا نحسن لعبة المنصات هذه بمتابعة الشخصية بواسطة الكاميرا!" + "uk": "Покращимо цю платформенну гру, слідуючи за персонажем за допомогою камери!", + "zh": "让我们通过用摄像机跟随角色来改进这个平台游戏!" } }, "description": { "messageByLocale": { "en": "For this, we will install an **extension**.\n\nOpen the **Project Manager**.", "fr": "Pour cela, nous allons installer une **extension**.\n\nOuvrez le **Gestionnaire de projet**.", + "ar": "لفعل هذا، سوف نقوم بتثبيت **ملحق**.\n\nفتح **مدير المشروع**.", + "de": "Dafür werden wir eine **Erweiterung** installieren.\n\nÖffnen Sie den **Projekt-Manager**.", "es": "Para esto, instalaremos una **extensión**.\n\nAbre el **Administrador de proyectos**.", + "it": "Per questo, installeremo un **estensione**.\n\nApri il **Gestore del progetto**.", + "ja": "そのために、**拡張機能**をインストールします。\n\n**プロジェクトマネージャ**を開きます。", + "ko": "이를 위해 **확장 기능**을 설치할 것입니다.\n\n**프로젝트 관리자**를 엽니다.", + "pl": "W tym celu zainstalujemy **rozszerzenie**.\n\nOtwórz **Menedżera projektu**.", "pt": "Para isso, instalaremos uma **extensão**.\n\nAbra o **Gerenciador de projetos**.", + "ru": "Для этого мы установим **расширение**.\n\nОткройте **Менеджер проектов**.", + "sl": "Za to bomo namestili **razširitev**.\n\nOdpri **Upravitelj projekta**.", + "sq": "Për këtë, ne do të instalojmë një **zgjerim**.\n\nHapni **Menaxherin e Projektit**.", "th": "โดยเราจะติดตั้ง **extension**.\n\nเปิด **โปรเจกต์เมเนเจอร์**", - "ar": "لفعل هذا، سوف نقوم بتثبيت **ملحق**.\n\nفتح **مدير المشروع**." + "uk": "Для цього ми встановимо **розширення**.\n\nВідкрийте **Менеджер проектів**.", + "zh": "为此,我们将安装一个**扩展**。\n\n打开**项目管理器**。" } } } }, - { - "elementToHighlightId": "div[role=\"presentation\"]:is([data-open=true], :not([aria-hidden=true])) #project-manager-tab-extensions", - "nextStepTrigger": { - "presenceOfElement": "#project-manager-extension-search-or-create" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Open the **Extensions** tab.", - "fr": "Ouvrez l'onglet **Extensions**.", - "es": "Abre la pestaña **Extensiones**.", - "pt": "Abra a guia **Extensões**.", - "th": "เปิด **แท็บ Extensions**", - "ar": "فتح نافذة **الملحقات**." - } - } - }, - "isOnClosableDialog": true, - "skippable": true - }, { "elementToHighlightId": "#project-manager-extension-search-or-create", "nextStepTrigger": { @@ -120,12 +177,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Open the extension store", - "fr": "Ouvrez le **Magasin d'extension**.", - "es": "Abre la **tienda de extensiones**", - "pt": "Abra a **loja de extensões**", - "th": "เปิด **ร้านค้า extension**", - "ar": "فتح متجر الملحقات." + "en": "Let's add an **Extension**.", + "fr": "Ajoutons une **extension**.", + "ar": "هيّا نضيف **ملحق**.", + "de": "Fügen wir eine **Erweiterung** hinzu.", + "es": "Agreguemos una **extensión**.", + "it": "Aggiungiamo un **estensione**.", + "ja": "**拡張機能**を追加しましょう。", + "ko": "**확장 기능**을 추가해 봅시다.", + "pl": "Dodajmy **rozszerzenie**.", + "pt": "Vamos adicionar uma **extensão**.", + "ru": "Добавим **расширение**.", + "sl": "Dodajmo **razširitev**.", + "sq": "Le të shtojmë një **zgjerim**.", + "th": "เรามาเพิ่ม **extension**", + "uk": "Додамо **розширення**.", + "zh": "让我们添加一个**扩展**。" } }, "placement": "top" @@ -142,10 +209,20 @@ "messageByLocale": { "en": "Search for the **smooth camera** extension.", "fr": "Cherchez l'extension **smooth camera**.", + "ar": "البحث عن الملحق **smooth camera**.", + "de": "Suchen Sie nach der **smooth camera**-Erweiterung.", "es": "Busca la extensión **smooth camera**.", + "it": "Cerca l'estensione **smooth camera**.", + "ja": "**smooth camera** 拡張機能を検索します。", + "ko": "**smooth camera** 확장 기능을 검색합니다.", + "pl": "Wyszukaj rozszerzenie **smooth camera**.", "pt": "Procure pela extensão **smooth camera**.", + "ru": "Ищите расширение **smooth camera**.", + "sl": "Iščite po **smooth camera** razširitvi.", + "sq": "Kërkoni për zgjerimin **smooth camera**.", "th": "ค้นหา extension **smooth camera**", - "ar": "البحث عن الملحق **smooth camera**." + "uk": "Шукайте розширення **smooth camera**.", + "zh": "搜索**smooth camera**扩展。" } } }, @@ -162,10 +239,20 @@ "messageByLocale": { "en": "Click on the extension **Smooth Camera**.", "fr": "Cliquez sur l'extension **Smooth Camera**.", + "ar": "الضغط على الملحق **Smooth Camera**.", + "de": "Klicken Sie auf die **Smooth Camera**-Erweiterung.", "es": "Haz clic en la extensión **Smooth Camera**.", + "it": "Fai clic sull'estensione **Smooth Camera**.", + "ja": "拡張機能 **Smooth Camera** をクリックします。", + "ko": "확장 기능 **Smooth Camera**을 클릭합니다.", + "pl": "Kliknij rozszerzenie **Smooth Camera**.", "pt": "Clique na extensão **Smooth Camera**.", + "ru": "Нажмите на расширение **Smooth Camera**.", + "sl": "Kliknite na razširitev **Smooth Camera**.", + "sq": "Klikoni në zgjerimin **Smooth Camera**.", "th": "คลิกที่ extension **Smooth Camera**", - "ar": "الضغط على الملحق **Smooth Camera**." + "uk": "Клацніть на розширення **Smooth Camera**.", + "zh": "点击**Smooth Camera**扩展。" } } }, @@ -181,10 +268,20 @@ "messageByLocale": { "en": "Install the extension in your project.", "fr": "Installez l'extension au projet.", + "ar": "تثبيت الملحق في مشروعك.", + "de": "Installieren Sie die Erweiterung in Ihrem Projekt.", "es": "Instala la extensión en tu proyecto.", + "it": "Installa l'estensione nel tuo progetto.", + "ja": "プロジェクトに拡張機能をインストールします。", + "ko": "프로젝트에 확장 기능을 설치합니다.", + "pl": "Zainstaluj rozszerzenie w swoim projekcie.", "pt": "Instale a extensão no seu projeto.", + "ru": "Установите расширение в свой проект.", + "sl": "Namestite razširitev v svojem projektu.", + "sq": "Instaloni zgjerimin në projektin tuaj.", "th": "ติดตั้ง extension ในโปรเจกต์ของคุณ", - "ar": "تثبيت الملحق في مشروعك." + "uk": "Встановіть розширення в свій проект.", + "zh": "在您的项目中安装扩展。" } }, "placement": "top" @@ -201,10 +298,20 @@ "messageByLocale": { "en": "Let's close this dialog.", "fr": "Fermons cette fenêtre.", + "ar": "هيّا نغلق هذا.", + "de": "Schließen wir diesen Dialog.", "es": "Cerramos esta ventana.", + "it": "Chiudiamo questo dialogo.", + "ja": "このダイアログを閉じましょう。", + "ko": "이 대화 상자를 닫아 봅시다.", + "pl": "Zamknijmy to okno dialogowe.", "pt": "Vamos fechar esta janela.", + "ru": "Давайте закроем это диалоговое окно.", + "sl": "Zaprimo ta pogovorno okno.", + "sq": "Le të mbyejmë këtë dialog.", "th": "ปิดหน้าต่างนี้", - "ar": "هيّا نغلق هذا." + "uk": "Давайте закриємо це діалогове вікно.", + "zh": "让我们关闭这个对话框。" } } }, @@ -220,10 +327,20 @@ "messageByLocale": { "en": "Let's close the menu.", "fr": "Fermons le menu.", + "ar": "لنغلق هذه القائمة.", + "de": "Schließen wir das Menü.", "es": "Cerramos el menú.", + "it": "Chiudiamo il menu.", + "ja": "メニューを閉じましょう。", + "ko": "메뉴를 닫아 봅시다.", + "pl": "Zamknijmy menu.", "pt": "Vamos fechar o menu.", + "ru": "Давайте закроем меню.", + "sl": "Zaprimo meni.", + "sq": "Le të mbyejmë menunë.", "th": "ปิดเมนู", - "ar": "لنغلق هذه القائمة." + "uk": "Давайте закриємо меню.", + "zh": "让我们关闭菜单。" } } }, @@ -239,10 +356,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello degli **oggetti**.", + "ja": "**オブジェクト**パネルを開きます。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **Obiektów**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **Объекты**.", + "sl": "Odpri **Objekte** ploščo.", + "sq": "Hapni panelin e **Objekteve**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **Об'єкти**.", + "zh": "打开**对象**面板。" } }, "placement": "bottom" @@ -260,20 +387,40 @@ "messageByLocale": { "en": "Let's attach the Camera to our player with the help of **behaviors**:\n\nclick on the 3 dot menu, or right click on **$(player)**, and select **Edit behaviors**.", "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nCliquez droit sur **$(player)** ou utilisez le menu à 3 points et sélectionnez **Modifier les comportements**.", + "ar": "هيّا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(player)** وتحديد **تحرير السلوكيات**.", + "de": "Lassen Sie uns die Kamera mit Hilfe von **Verhalten** an unseren Charakter anhängen:\n\nKlicken Sie auf das 3-Punkte-Menü oder klicken Sie mit der rechten Maustaste auf **$(player)** und wählen Sie **Verhalten bearbeiten**.", "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nHaz clic derecho en **$(player)** o usa el menú de 3 puntos y selecciona **Editar comportamientos**.", + "it": "Attacchiamo la telecamera al nostro giocatore con l'aiuto dei **comportamenti**:\n\nclicca sul menu a 3 punti, o fai clic con il tasto destro su **$(player)** e seleziona **Modifica comportamenti**.", + "ja": "キャラクターにカメラを**振る舞い**のヘルプで取り付けましょう:\n\n3点メニューをクリックするか、**$(player)** を右クリックして **振る舞いの編集** を選択します。", + "ko": "플레이어에 카메라를 **행동**의 도움으로 부착해 봅시다:\n\n3 점 메뉴를 클릭하거나 **$(player)**을 마우스 오른쪽 버튼으로 클릭하고 **행동 편집**을 선택합니다.", + "pl": "Załączmy kamerę do naszego gracza za pomocą **zachowań**:\n\nkliknij menu 3 kropek lub kliknij prawym przyciskiem myszy na **$(player)** i wybierz **Edytuj zachowania**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nClique com o botão direito em **$(player)** ou use o menu de 3 pontos e selecione **Editar comportamentos**.", + "ru": "Прикрепим камеру к нашему игроку с помощью **поведения**:\n\nнажмите на меню 3 точки или щелкните правой кнопкой мыши на **$(player)** и выберите **Изменить поведение**.", + "sl": "Pripnimo kamero našemu igralcu s pomočjo **vedenj**:\n\nkliknite na meni 3 pik ali z desno miškino tipko kliknite na **$(player)** in izberite **Uredi vedenja**.", + "sq": "Le të bashkëngjisim kamerën me lojtarin tonë me ndihmën e **sjelljeve**:\n\nklikoni në menunë 3 pikë ose klikoni me të djathtën në **$(player)** dhe zgjidhni **Ndrysho sjelljet**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nคลิกขวาที่ **$(player)** หรือกดเมนู 3 จุด แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "هيّا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nالضغط على الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(player)** وتحديد **تحرير السلوكيات**." + "uk": "Прикріпимо камеру до нашого гравця за допомогою **поведінки**:\n\nнатисніть на меню 3 крапки або клацніть правою кнопкою миші на **$(player)** і виберіть **Редагувати поведінку**.", + "zh": "让我们通过**行为**将摄像机附加到我们的角色上:\n\n点击3点菜单,或右键单击**$(player)**,然后选择**编辑行为**。" } }, "touchDescription": { "messageByLocale": { "en": "Let's attach the Camera to our player with the help of **behaviors**:\n\nSelect then long-press **$(player)**, and select **Edit behaviors**.", "fr": "Ajoutons maintenant l'extension à notre joueur.\n\nSélectionnez puis appuyez longuement sur **$(player)** et sélectionnez **Modifier les comportements**.", + "ar": "هيّا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **$(player)** وتحديد **تحرير السلوكيات**.", + "de": "Lassen Sie uns die Kamera mit Hilfe von **Verhalten** an unseren Charakter anhängen:\n\nWählen und halten Sie **$(player)** und wählen Sie **Verhalten bearbeiten**.", "es": "Sigamos nuestro jugador con la Cámara con la ayuda de los **comportamientos**.\n\nSelecciona y pulsa largo **$(player)** y selecciona **Editar comportamientos**.", + "it": "Attacchiamo la telecamera al nostro giocatore con l'aiuto dei **comportamenti**:\n\nSeleziona e tieni premuto **$(player)** e seleziona **Modifica comportamenti**.", + "ja": "キャラクターにカメラを**振る舞い**のヘルプで取り付けましょう:\n\n**$(player)** を選択して長押しし、**振る舞いの編集** を選択します。", + "ko": "플레이어에 카메라를 **행동**의 도움으로 부착해 봅시다:\n\n선택하고 길게 눌러 **$(player)**을 선택하고 **행동 편집**을 선택합니다.", + "pl": "Załączmy kamerę do naszego gracza za pomocą **zachowań**:\n\nwybierz i przytrzymaj **$(player)**, a następnie wybierz **Edytuj zachowania**.", "pt": "Vamos seguir nosso jogador com a Câmera com a ajuda de **comportamentos**.\n\nSelecione e pressione por um longo tempo **$(player)** e selecione **Editar comportamentos**.", + "ru": "Прикрепим камеру к нашему игроку с помощью **поведения**:\n\nвыберите и удерживайте **$(player)**, и выберите **Изменить поведение**.", + "sl": "Pripnimo kamero našemu igralcu s pomočjo **vedenj**:\n\nizberite in dolgo pritisnite **$(player)** in izberite **Uredi vedenja**.", + "sq": "Le të bashkëngjisim kamerën me lojtarin tonë me ndihmën e **sjelljeve**:\n\nzgjidhni dhe mbani shtypur **$(player)**, dhe zgjidhni **Ndrysho sjelljet**.", "th": "ทีนี้ เพิ่ม extension ใส่ลงในผู้เล่น\n\nเลือกแล้วกดค้างที่ **$(player)** แล้วเลือก **แก้ไขพฤติกรรม**", - "ar": "هيّا نصل الكاميرا بشخصيتنا بمساعدة **السلوكيات**:\n\nتحديد، ثم ضغطة مطولة على الـ **$(player)** وتحديد **تحرير السلوكيات**." + "uk": "Прикріпимо камеру до нашого гравця за допомогою **поведінки**:\n\nвиберіть і утримуйте **$(player)**, і виберіть **Редагувати поведінку**.", + "zh": "让我们通过**行为**将摄像机附加到我们的角色上:\n\n选择并长按**$(player)**,然后选择**编辑行为**。" } } } @@ -288,10 +435,20 @@ "messageByLocale": { "en": "See the **behaviors** of the **object** here.", "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + "ar": "رؤية **سلوكيات الكائن** من هنا.", + "de": "Hier sehen Sie die **Verhalten** des **Objekts**.", "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", + "it": "Vedi i **comportamenti** dell'**oggetto** qui.", + "ja": "ここに**オブジェクト**の**振る舞い**があります。", + "ko": "여기서 **오브젝트**의 **행동**을 볼 수 있습니다.", + "pl": "Zobacz **zachowania** **obiektu** tutaj.", "pt": "Os **comportamentos** do **objeto** estão nesta guia.", + "ru": "Здесь вы увидите **поведение** **объекта**.", + "sl": "Tukaj vidite **vedenja** **objekta**.", + "sq": "Shihni **sjelljet** e **objektit** këtu.", "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "ar": "رؤية **سلوكيات الكائن** من هنا." + "uk": "Тут ви побачите **поведінку** **об'єкта**.", + "zh": "在这里查看**对象**的**行为**。" } }, "placement": "bottom" @@ -309,10 +466,20 @@ "messageByLocale": { "en": "Let's add the **Smooth Camera** behavior that we've just installed.", "fr": "Ajoutons le comportement **Smooth Camera** que nous venons d'installer.", + "ar": "هيّا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو.", + "de": "Fügen wir das **Smooth Camera**-Verhalten hinzu, das wir gerade installiert haben.", "es": "Añadamos el comportamiento **Smooth Camera** que acabamos de instalar.", + "it": "Aggiungiamo il comportamento **Smooth Camera** che abbiamo appena installato.", + "ja": "さっきインストールした**Smooth Camera**の振る舞いを追加しましょう。", + "ko": "방금 설치한 **Smooth Camera** 행동을 추가해 봅시다.", + "pl": "Dodajmy zachowanie **Smooth Camera**, które właśnie zainstalowaliśmy.", "pt": "Vamos adicionar o comportamento **Smooth Camera** que acabamos de instalar.", + "ru": "Добавим поведение **Smooth Camera**, которое мы только что установили.", + "sl": "Dodajmo **Smooth Camera** vedenje, ki smo ga pravkar namestili.", + "sq": "Le të shtojmë sjelljen **Smooth Camera** që sapo instaluam.", "th": "เพิ่มพฤติกรรม **Smooth Camera** ที่เพิ่งได้ติดตั้ง", - "ar": "هيّا نقوم بإضافة السلوك **Smooth Camera** الذي قمنا بتثبيته للتو." + "uk": "Додамо поведінку **Smooth Camera**, яку ми щойно встановили.", + "zh": "让我们添加刚刚安装的**Smooth Camera**行为。" } } }, @@ -328,10 +495,20 @@ "messageByLocale": { "en": "Select the **Smooth Camera** behavior.", "fr": "Sélectionnez le comportement **Smooth Camera**.", + "ar": "تحديد السلوك **Smooth Camera**.", + "de": "Wählen Sie das **Smooth Camera**-Verhalten aus.", "es": "Selecciona el comportamiento **Smooth Camera**.", + "it": "Seleziona il comportamento **Smooth Camera**.", + "ja": "**Smooth Camera**の振る舞いを選択します。", + "ko": "**Smooth Camera** 행동을 선택합니다.", + "pl": "Wybierz zachowanie **Smooth Camera**.", "pt": "Selecione o comportamento **Smooth Camera**.", + "ru": "Выберите поведение **Smooth Camera**.", + "sl": "Izberite **Smooth Camera** vedenje.", + "sq": "Zgjidhni sjelljen **Smooth Camera**.", "th": "เลือกพฤติกรรม **Smooth Camera**", - "ar": "تحديد السلوك **Smooth Camera**." + "uk": "Виберіть поведінку **Smooth Camera**.", + "zh": "选择**Smooth Camera**行为。" } } }, @@ -347,10 +524,20 @@ "messageByLocale": { "en": "**Uncheck** the Y axis (vertical) checkbox, to make the camera follow the character only horizontally (X axis).", "fr": "**Décochez** la case de l'axe Y (vertical), pour que la caméra suive le personnage uniquement horizontalement (axe X).", + "ar": "**إلغاء تحديد** خيار الـ Y axis (العمودية)، لجعل الكاميرا تتتبع الشخصية أفقيًا فقط (X axis).", + "de": "**Deaktivieren** Sie das Kontrollkästchen für die Y-Achse (vertikal), um die Kamera nur horizontal (X-Achse) dem Charakter folgen zu lassen.", "es": "**Desactiva** la casilla del eje Y (vertical) para que la cámara siga el personaje solamente de manera horizontal (eje X).", + "it": "**Deseleziona** la casella dell'asse Y (verticale), per far sì che la telecamera segua il personaggio solo orizzontalmente (asse X).", + "ja": "カメラがキャラクターを水平方向(X軸)のみ追うようにするために、Y軸(垂直)のチェックボックスを**外します**。", + "ko": "카메라가 캐릭터를 수평적으로만(X축) 따르도록 하려면, Y축(수직) 체크박스를 **해제**합니다.", + "pl": "**Odznacz** pole wyboru osi Y (pionowej), aby kamera śledziła postać tylko poziomo (osi X).", "pt": "Desmarque** a caixa do eixo Y (vertical), para que a câmera siga o personagem apenas na horizontal (eixo X).", + "ru": "**Снимите флажок** с оси Y (вертикальной), чтобы камера следила за персонажем только горизонтально (по оси X).", + "sl": "**Odkljukajte** polje za os Y (navpično), da bo kamera sledila osebi samo vodoravno (os X).", + "sq": "**Hiqni zgjedhjen** e boshtit Y (vertikal), që kamera të ndjekë personazhin vetëm horizontalisht (boshti X).", "th": "ทำให้กล้องติดตามเฉพาะแกน X (แนวนอน) เท่านั้น โดย **เอาเครื่องหมายเช็คออก** จาก checkbox นี้", - "ar": "**إلغاء تحديد** خيار الـ Y axis (العمودية)، لجعل الكاميرا تتتبع الشخصية أفقيًا فقط (X axis)." + "uk": "**Зняти позначку** з осі Y (вертикальної), щоб камера слідкувала за персонажем тільки горизонтально (по осі X).", + "zh": "取消 Y 轴(垂直)复选框,使摄像机只在水平方向(X 轴)上跟随角色。" } } }, @@ -366,10 +553,20 @@ "messageByLocale": { "en": "That's it! Now the camera will **follow our player only horizontally**!", "fr": "C'est tout ! La caméra va **suivre notre joueur horizontalement** !", + "ar": "هذا كل شيء، الآن ستقوم الكاميرا ب**متابعة الشخصية أفقيًا فقط**!", + "de": "Das ist es! Jetzt wird die Kamera **nur horizontal unserem Charakter folgen**!", "es": "¡Eso es todo! ¡Ahora la cámara **seguirá a nuestro jugador unicamente de manera horizontal**!", + "it": "Ecco fatto! Ora la telecamera **seguirà il nostro giocatore solo orizzontalmente**!", + "ja": "以上です!これでカメラは**キャラクターを水平方向のみ追う**ようになります!", + "ko": "이것으로 끝났습니다! 이제 카메라는 **플레이어를 수평적으로만 따를 것**입니다!", + "pl": "To wszystko! Teraz kamera będzie **śledzić naszego gracza tylko poziomo**!", "pt": "É isso aí! Agora a câmera **seguirá nosso jogador unicamente de jeito horizontal**!", + "ru": "Вот и всё! Теперь камера будет **следовать за нашим игроком только горизонтально**!", + "sl": "To je to! Zdaj bo kamera **sledila našemu igralcu samo vodoravno**!", + "sq": "Kështu është! Tani kamera do të **ndjekë lojtarin tonë vetëm horizontalisht**!", "th": "เรียบร้อยแล้ว! กล้องจะ **ติดตามผู้เล่นในแนวนอน**!", - "ar": "هذا كل شيء، الآن ستقوم الكاميرا ب**متابعة الشخصية أفقيًا فقط**!" + "uk": "Ось і все! Тепер камера буде **слідкувати за нашим гравцем тільки горизонтально**!", + "zh": "就是这样!现在摄像机将**只在水平方向上跟随我们的角色**!" } } } @@ -384,10 +581,20 @@ "messageByLocale": { "en": "Next we will add the background. Open the **Layers** panel.", "fr": "Ensuite, nous allons ajouter le background, ouvrez le panneau des **calques**.", + "ar": "وفي المرحلة الثانية سنقوم بإضافة الخلفية، فتح لوحة **الطبقات**.", + "de": "Als nächstes fügen wir den Hintergrund hinzu. Öffnen Sie das **Ebenen**-Panel.", "es": "A continuación, agregaremos el fondo. Abre el panel de **Capas**.", + "it": "Successivamente aggiungeremo lo sfondo. Apri il pannello **Livelli**.", + "ja": "次に背景を追加します。**レイヤー**パネルを開きます。", + "ko": "다음으로 배경을 추가할 것입니다. **레이어** 패널을 엽니다.", + "pl": "Następnie dodamy tło. Otwórz panel **Warstwy**.", "pt": "Em seguida, vamos adicionar o fundo. Abra o painel de **Camadas**.", + "ru": "Затем мы добавим фон. Откройте панель **Слои**.", + "sl": "Naslednjič bomo dodali ozadje. Odpri **Plasti** ploščo.", + "sq": "Pastaj do të shtojmë sfondin. Hapni panelin e **Shtresave**.", "th": "ต่อไปเราจะเพิ่มพื้นหลัง เปิดแผงควบคุม **Layers**", - "ar": "وفي المرحلة الثانية سنقوم بإضافة الخلفية، فتح لوحة **الطبقات**." + "uk": "Далі ми додамо фон. Відкрийте панель **Шари**.", + "zh": "接下来我们将添加背景。打开**图层**面板。" } }, "placement": "bottom" @@ -395,76 +602,29 @@ "skippable": true }, { - "elementToHighlightId": "#add-layer-button", + "elementToHighlightId": "#layer-0 #layer-selected-unchecked", "nextStepTrigger": { - "presenceOfElement": "#layer-2" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's **add a new layer** for our background.", - "fr": "Créons un **nouveau calque** pour notre fond.", - "es": "Vamos a **agregar una nueva capa** para nuestro fondo.", - "pt": "Vamos **adicionar uma nova camada** para nosso fundo.", - "th": "**เพิ่มเลเยอร์ใหม่** สำหรับพื้นหลัง", - "ar": "هيّا نقوم ب**إضافة طبقة** لخلفيتنا." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-2 #layer-name", - "nextStepTrigger": { - "valueEquals": "Background" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the name of the layer to **Background**.", - "fr": "Changez le nom du calque pour **Background**.", - "es": "Cambia el nombre de la capa por **Background**.", - "pt": "Mude o nome da camada para **Background**.", - "th": "เปลี่ยนชื่อเป็น **Background**", - "ar": "تغيير اسم الطبقة إلى **Background**." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-2 #layer-selected-unchecked", - "nextStepTrigger": { - "presenceOfElement": "#layer-2 #layer-selected-checked" + "presenceOfElement": "#layer-0 #layer-selected-checked" }, "tooltip": { "description": { "messageByLocale": { - "en": "Now select this Background **layer** so we can start adding objects to it.", + "en": "Now select the Background **layer** so we can start adding objects to it.", "fr": "Sélectionnez maintenant le **calque** Background afin que nous puissions commencer à y ajouter des objets.", + "ar": "والآن تحديد هذه **الطبقة** حتى نتمكن من بدء إضافة كائنات فيه.", + "de": "Wählen Sie jetzt diese Hintergrund-**Ebene** aus, damit wir anfangen können, Objekte hinzuzufügen.", "es": "Ahora selecciona la **capa** Background para que podamos empezar a agregarle objetos.", + "it": "Seleziona ora questo **livello** di sfondo in modo che possiamo iniziare ad aggiungervi degli oggetti.", + "ja": "次にこの背景の**レイヤー**を選択して、そこにオブジェクトを追加できるようにします。", + "ko": "이제 이 배경 **레이어**를 선택하여 여기에 오브젝트를 추가할 수 있도록 합시다.", + "pl": "Teraz wybierz ten **poziom** tła, abyśmy mogli zacząć dodawać do niego obiekty.", "pt": "Agora selecione a **camada** Background para que possamos começar a adicionar objetos a ela.", + "ru": "Теперь выберите этот **слой** фона, чтобы мы могли начать добавлять объекты.", + "sl": "Zdaj izberite ta **sloj** ozadja, da lahko začnemo dodajati predmete nanj.", + "sq": "Tani zgjidhni këtë **shtresë** sfondi që të mund të fillojmë të shtojmë objekte në të.", "th": "เลือกเลเยอร์นี้เป็น **เลเยอร์เริ่มต้น** เอาไว้สำหรับเพิ่มวัตถุเข้าไป", - "ar": "والآن تحديد هذه **الطبقة** حتى نتمكن من بدء إضافة كائنات فيه." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "#layer-2 #layer-drag-handle", - "nextStepTrigger": { - "presenceOfElement": "#layer-0 #layer-selected-checked" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Now let's make sure the background decoration will appear behind the player. **Drag** this Background layer **under** Base Layer. \n\nUse this handle to **drag it below base layer**", - "fr": "Assurons-nous maintenant que l'arrière-plan apparaîtra derrière le personnage. **Faites glisser** ce calque d'arrière-plan **sous** Couche de base.\n\nGlissez le curseur **en dessous de Calque de base**", - "es": "Ahora asegurémonos de que la decoración del fondo aparezca detrás del jugador. **Arrastra** esta capa de fondo **debajo** de la capa base.\n\nUsa este control para **arrastrarla debajo de la capa base**", - "pt": "Agora vamos nos certificar de que a decoração do fundo aparecerá atrás do jogador. **Arraste** esta camada de fundo **abaixo** da camada base.\n\nUse este controle para **arrastá-la abaixo da camada base**", - "th": "ตรวจสอบว่าพื้นหลังจะแสดงอยู่หลังจากผู้เล่น ลากเลเยอร์นี้ไป **ล่างสุด** ของเลเยอร์เริ่มต้น", - "ar": "والآن لنتأكد من أن الخلفية ستظهر خلف الشخصية. **سحب** هذه الطبقة إلى **أسفل** الطبقة الأساسية. \n\n استخدام هذا المقبض **لسحبها أسفل الطبقة الأساسية**." + "uk": "Тепер виберіть цей **шар** фону, щоб ми могли почати додавати об'єкти.", + "zh": "现在选择这个背景**图层**,这样我们就可以开始向其中添加对象。" } }, "placement": "top" @@ -480,10 +640,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト**パネルを開きます。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **Obiekty**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **Объекты**.", + "sl": "Odpri **Predmete** ploščo.", + "sq": "Hapni panelin e **Objekteve**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **Об'єкти**.", + "zh": "打开**对象**面板。" } }, "placement": "bottom" @@ -500,20 +670,40 @@ "messageByLocale": { "en": "Perfect! Now let's add **$(farBackground)** to our game by dragging it to the center.", "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le faisant glisser au centre.", + "ar": "ممتاز! الآن هيّا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز.", + "de": "Perfekt! Fügen wir **$(farBackground)** jetzt unserem Spiel hinzu, indem wir es in die Mitte ziehen.", "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego arrastrándolo al centro.", + "it": "Perfetto! Ora aggiungiamo **$(farBackground)** al nostro gioco trascinandolo al centro.", + "ja": "完璧です!**$(farBackground)** を中央にドラッグしてゲームに追加しましょう。", + "ko": "완벽합니다! 이제 **$(farBackground)**를 가운데로 끌어서 게임에 추가해 봅시다.", + "pl": "Doskonale! Teraz dodajmy **$(farBackground)** do naszej gry, przeciągając go do środka.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, arrastando-o para o centro.", + "ru": "Отлично! Теперь добавим **$(farBackground)** в нашу игру, перетащив его в центр.", + "sl": "Odlično! Sedaj dodajmo **$(farBackground)** v našo igro tako, da ga povlečemo v sredino.", + "sq": "E shkëlqyer! Tani le të shtojmë **$(farBackground)** në lojën tonë duke e tërhequr në qendër.", "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดยลากมันไปวางตรงกลาง", - "ar": "ممتاز! الآن هيّا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بسحبه إلى المركز." + "uk": "Чудово! Тепер додамо **$(farBackground)** до нашої гри, перетягнувши його в центр.", + "zh": "完美!现在让我们把**$(farBackground)**拖到中间,添加到我们的游戏中。" } }, "touchDescription": { "messageByLocale": { "en": "Perfect! Now let's add **$(farBackground)** to our game by **selecting** then **dragging** it to the center.", "fr": "Parfait ! Ajoutons maintenant **$(farBackground)** à notre jeu en le **sélectionnant** puis en le faisant glisser au centre.", + "ar": "ممتاز! الآن هيّا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز.", + "de": "Perfekt! Fügen wir **$(farBackground)** jetzt unserem Spiel hinzu, indem wir es **auswählen** und dann in die Mitte **ziehen**.", "es": "¡Perfecto! Ahora agreguemos **$(farBackground)** a nuestro juego **seleccionándolo** y luego arrastrándolo al centro.", + "it": "Perfetto! Ora aggiungiamo **$(farBackground)** al nostro gioco **selezionandolo** e poi trascinandolo al centro.", + "ja": "完璧です!**$(farBackground)** を**選択**してから中央に**ドラッグ**してゲームに追加しましょう。", + "ko": "완벽합니다! 이제 **$(farBackground)**를 **선택**한 다음 가운데로 **끌어서** 게임에 추가해 봅시다.", + "pl": "Doskonale! Teraz dodajmy **$(farBackground)** do naszej gry, **wybierając** go, a następnie **przeciągając** do środka.", "pt": "Perfeito! Agora vamos adicionar **$(farBackground)** ao nosso jogo, **selecionando** e depois arrastando-o para o centro.", + "ru": "Отлично! Теперь добавим **$(farBackground)** в нашу игру, **выбрав** его и затем **перетащив** в центр.", + "sl": "Odlično! Sedaj dodajmo **$(farBackground)** v našo igro tako, da ga **izberemo** in nato **povlečemo** v sredino.", + "sq": "E shkëlqyer! Tani le të shtojmë **$(farBackground)** në lojën tonë duke e **zgjedhur** atë, pastaj duke e **tërhequr** në qendër.", "th": "สมบูรณ์แบบ! ทีนี้เพิ่ม **$(farBackground)** ไปยังเกมของเราโดย **เลือก** แล้ว **ลาก** มันไปวางตรงกลาง", - "ar": "ممتاز! الآن هيّا نقوم بإضافة الـ **$(farBackground)** إلى لعبتنا بـ**تحديده** ثم **سحبه** إلى المركز." + "uk": "Чудово! Тепер додамо **$(farBackground)** до нашої гри, **вибравши** його, а потім **перетягнувши** в центр.", + "zh": "完美!现在让我们通过**选择**然后**拖动**到中间,把**$(farBackground)**添加到我们的游戏中。" } }, "placement": "top" @@ -525,10 +715,20 @@ "messageByLocale": { "en": "I'm done", "fr": "J'ai terminé", + "ar": "انتهيت", + "de": "Fertig", "es": "Ya terminé", + "it": "Ho finito", + "ja": "完了", + "ko": "완료", + "pl": "Zakończono", "pt": "Terminei", + "ru": "Я закончил", + "sl": "Končano", + "sq": "Përfundoa", "th": "ฉันทำเสร็จแล้ว", - "ar": "انتهيت" + "uk": "Закінчено", + "zh": "我完成了" } } }, @@ -538,10 +738,20 @@ "messageByLocale": { "en": "See the **black rectangular frame** in the middle of the scene? That is the **camera view**. It frames the part of the game that the player will see.\n\nResize the **$(farBackground)** object so it covers the whole camera view.", "fr": "Vous voyez le **cadre rectangulaire noir** au milieu de la scène ? C'est la **vue de la caméra**. Il encadre la partie du jeu que le joueur verra.\n\nRedimensionnez l'objet **$(farBackground)** afin qu'il couvre toute la vue de la caméra.", + "ar": "هل يمكنك رؤية **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل.", + "de": "Siehst du den **schwarzen rechteckigen Rahmen** in der Mitte der Szene? Das ist die **Kameraperspektive**. Sie umrahmt den Teil des Spiels, den der Spieler sehen wird.\n\nÄndere die Größe des Objekts **$(farBackground)**, damit es die gesamte Kameraperspektive abdeckt.", "es": "¿Ves el **marco rectangular negro** en el medio de la escena? Esa es la **vista de la cámara**. Sirve para enmarcar la parte del juego que verá el jugador.\n\nCambia el tamaño del objeto **$(farBackground)** para que cubra toda la vista de la cámara.", + "it": "Vedi il **cornice rettangolare nero** al centro della scena? Questa è la **visuale della telecamera**. Incornicia la parte del gioco che il giocatore vedrà.\n\nRidimensiona l'oggetto **$(farBackground)** in modo che copra l'intera vista della telecamera.", + "ja": "シーンの中央にある**黒い長方形の枠**を見てください。それが**カメラビュー**です。プレイヤーが見るゲームの一部をフレーム内に収めます。\n\n**$(farBackground)**オブジェクトをリサイズして、カメラビュー全体を覆うようにします。", + "ko": "장면 중앙에 있는 **검은 직사각형 프레임**을(를) 보세요? 이것이 **카메라 뷰**입니다. 플레이어가 볼 게임의 일부를 프레임 안에 포함시킵니다.\n\n**$(farBackground)** 객체의 크기를 조정하여 전체 카메라 뷰를 덮도록 합니다.", + "pl": "Zauważ **czarną prostokątną ramkę** pośrodku sceny? To **widok kamery**. Ogranicza on część gry, którą gracz będzie widział.\n\nZmień rozmiar obiektu **$(farBackground)** tak, aby pokrywał całą widok kamery.", "pt": "Você ve a **moldura retangular preta** no meio da cena? Essa é a **visão da câmera**. Ela enquadra a parte do jogo que o jogador verá.\n\nVamos redimensionar o objeto **$(farBackground)** para que ele cubra todo o retângulo preto.", + "ru": "Видите **черный прямоугольный кадр** посередине сцены? Это **вид камеры**. Он ограничивает часть игры, которую увидит игрок.\n\nИзмените размер объекта **$(farBackground)** так, чтобы он покрывал весь вид камеры.", + "sl": "Vidite **črni pravokotni okvir** na sredini prizora? To je **kamerna perspektiva**. Okvirja del igre, ki ga bo igralec videl.\n\nSpremenite velikost predmeta **$(farBackground)**, da pokrije celotno kamerno perspektivo.", + "sq": "Shihni **kornizën e zezë e drejtkëndëshit** në mes të skenës? Kjo është **pamja e kamerës**. Ajo përcakton pjesën e lojës që lojtari do të shohë.\n\nRregulloni madhësinë e objektit **$(farBackground)** që të mbulojë tërë pamjen e kamerasë.", "th": "เห็น **สี่เหลี่ยมสีดำ** ตรงกลางของ scene ไหม? นั่นคือ**มุมมองกล้อง** เป็นมุมมองที่ผู้เล่นจะมองเห็นเกม\n\nปรับขนาดวัตถุ **$(farBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", - "ar": "هل يمكنك رؤية **الإطار المستطيلي الأسود** في منتصف المشهد؟ ها هو **رؤية الكاميرا**. إنه يحيط بالجزء الذي يمكن للاعبين رؤيته من اللعبة.\n\nإعادة ضبط حجم الـ **$(farBackground)** لتغطى رؤية الكاميرا بالكامل." + "uk": "Бачите **чорний прямокутний кадр** посередині сцени? Це **вид камери**. Він обмежує частину гри, яку побачить гравець.\n\nЗмініть розмір об'єкта **$(farBackground)** так, щоб він покривав весь вид камери.", + "zh": "看到场景中间的**黑色矩形框**了吗?那是**摄像机视图**。它框住了玩家将看到的游戏部分。\n\n调整**$(farBackground)**对象的大小,使其覆盖整个摄像机视图。" } }, "placement": "top", @@ -560,10 +770,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト**パネルを開きます。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **Obiekty**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **Объекты**.", + "sl": "Odpri **Predmete** ploščo.", + "sq": "Hapni panelin e **Objekteve**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **Об'єкти**.", + "zh": "打开**对象**面板。" } }, "placement": "bottom" @@ -580,20 +800,40 @@ "messageByLocale": { "en": "Let's do the same with another background to give a parallax effect! Drag **$(midBackground)** from the menu to the canvas.", "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! Glissez **$(midBackground)** depuis le menu vers la scène.", + "ar": "هيّا نقوم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة.", + "de": "Machen wir das Gleiche mit einem anderen Hintergrund, um einen Parallax-Effekt zu erzielen! Ziehen Sie **$(midBackground)** aus dem Menü auf die Leinwand.", "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! Arrastre **$(midBackground)** desde el menú a la escena.", + "it": "Facciamo la stessa cosa con un altro sfondo per dare un effetto parallasse! Trascina **$(midBackground)** dal menu alla scena.", + "ja": "パララックス効果を与えるために、別の背景にも同じことをしましょう!メニューから**$(midBackground)**をキャンバスにドラッグします。", + "ko": "패럴랙스 효과를 주기 위해 다른 배경에도 같은 작업을 해 봅시다! 메뉴에서 **$(midBackground)**를 캔버스로 끌어서 추가합니다.", + "pl": "Zróbmy to samo z innym tłem, aby nadać efekt paralaksy! Przeciągnij **$(midBackground)** z menu na płótno.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! Arraste **$(midBackground)** do menu para a cena.", + "ru": "Сделаем то же самое с другим фоном, чтобы создать эффект параллакса! Перетащите **$(midBackground)** из меню на холст.", + "sl": "Naredimo enako z drugim ozadjem, da dobimo paralaksni učinek! Povlecite **$(midBackground)** iz menija na platno.", + "sq": "Le të bëjmë të njëjtën gjë me një sfond tjetër për të dhënë një efekt paralaks! Tërhiqni **$(midBackground)** nga menuja në kanavacë.", "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! ลาก **$(midBackground)** จากเมนูไปยัง scene", - "ar": "هيّا نقوم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! سحب **$(midBackground)** من القائمة إلى اللوحة." + "uk": "Зробимо те ж саме з іншим фоном, щоб створити ефект паралаксу! Перетягніть **$(midBackground)** з меню на полотно.", + "zh": "让我们用另一个背景做同样的事情,给出视差效果!从菜单中拖动**$(midBackground)**到画布上。" } }, "touchDescription": { "messageByLocale": { "en": "Let's do the same with another background to give a parallax effect! **Select**, then **drag** **$(midBackground)** from the menu to the canvas.", "fr": "Faisons la même chose avec un autre fond pour donner un effet de parallaxe ! **Sélectionnez**, puis **glissez** **$(midBackground)** depuis le menu vers la scène.", + "ar": "هيّا نقوم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة.", + "de": "Machen wir das Gleiche mit einem anderen Hintergrund, um einen Parallax-Effekt zu erzielen! **Wählen** und dann **ziehen** Sie **$(midBackground)** aus dem Menü auf die Leinwand.", "es": "¡Hagamos lo mismo con otro fondo para dar un efecto de paralaje! **Seleccione**, luego **arrastre** **$(midBackground)** desde el menú a la escena.", + "it": "Facciamo la stessa cosa con un altro sfondo per dare un effetto parallasse! **Seleziona**, poi **trascina** **$(midBackground)** dal menu alla scena.", + "ja": "パララックス効果を与えるために、別の背景にも同じことをしましょう!**選択**してから**ドラッグ**して**$(midBackground)**をメニューからキャンバスに追加します。", + "ko": "패럴랙스 효과를 주기 위해 다른 배경에도 같은 작업을 해 봅시다! **선택**한 다음 **끌어서** 메뉴에서 **$(midBackground)**를 캔버스로 추가합니다.", + "pl": "Zróbmy to samo z innym tłem, aby nadać efekt paralaksy! **Wybierz**, a następnie **przeciągnij** **$(midBackground)** z menu na płótno.", "pt": "Vamos fazer o mesmo com outro fundo para dar um efeito de paralaxe! **Selecione**, em seguida, **arraste** **$(midBackground)** do menu para a cena.", + "ru": "Сделаем то же самое с другим фоном, чтобы создать эффект параллакса! **Выберите**, затем **перетащите** **$(midBackground)** из меню на холст.", + "sl": "Naredimo enako z drugim ozadjem, da dobimo paralaksni učinek! **Izberite** in nato **povlecite** **$(midBackground)** iz menija na platno.", + "sq": "Le të bëjmë të njëjtën gjë me një sfond tjetër për të dhënë një efekt paralaks! **Zgjidhni**, pastaj **tërhiqni** **$(midBackground)** nga menuja në kanavacë.", "th": "ทำอย่างเดียวกันกับพื้นหลังอื่นจะทำให้เกิดเอฟเฟกต์พารัลแลกซ์! **เลือก** แล้ว **ลาก** **$(midBackground)** จากเมนูไปยัง scene", - "ar": "هيّا نقوم بنفس الشيء مع الخلفية الأخرى لإعطاء تأثير المنظور! **تحديد** و**سحب** الـ **$(midBackground)** من القائمة إلى اللوحة." + "uk": "Зробимо те ж саме з іншим фоном, щоб створити ефект паралаксу! **Виберіть**, а потім **перетягніть** **$(midBackground)** з меню на полотно.", + "zh": "让我们用另一个背景做同样的事情,给出视差效果!**选择**,然后**拖动** **$(midBackground)**从菜单到画布上。" } }, "placement": "top" @@ -605,10 +845,20 @@ "messageByLocale": { "en": "I'm done", "fr": "J'ai terminé", + "ar": "انتهيت", + "de": "Fertig", "es": "Ya terminé", + "it": "Ho finito", + "ja": "完了", + "ko": "완료", + "pl": "Zakończono", "pt": "Terminei", + "ru": "Я закончил", + "sl": "Končano", + "sq": "Përfundoa", "th": "ฉันทำเสร็จแล้ว", - "ar": "انتهيت" + "uk": "Закінчено", + "zh": "我完成了" } } }, @@ -618,10 +868,20 @@ "messageByLocale": { "en": "Same as for the $(farBackground) object, resize the **$(midBackground)** object so that it covers the whole black rectangle.", "fr": "Comme pour l'objet $(farBackground), redimensionnez l'objet **$(midBackground)** de sorte qu'il couvre tout le rectangle noir.", + "ar": "نفس الشيء مع الكائن $(farBackground)، إعادة ضبط حجم الـ **$(midBackground)** لتغطي المستطيل الأسود بالكامل.", + "de": "Genauso wie beim $(farBackground)-Objekt, ändern Sie die Größe des **$(midBackground)**-Objekts, damit es das gesamte schwarze Rechteck abdeckt.", "es": "Al igual que con el objeto $(farBackground), redimensiona el objeto **$(midBackground)** para que cubra todo el rectángulo negro.", + "it": "Stesso procedimento per l'oggetto $(farBackground), ridimensionare l'oggetto $(midBackground) in modo che copra l'intero rettangolo nero.", + "ja": "$(farBackground)オブジェクトと同様に、**$(midBackground)**オブジェクトをリサイズして、黒い長方形全体を覆うようにしてください。", + "ko": "$(farBackground) 객체와 동일하게 $(midBackground) 객체의 크기를 조정하여 전체 검은 직사각형을 덮도록 합니다.", + "pl": "Tak samo jak dla obiektu $(farBackground), zmień rozmiar obiektu $(midBackground) tak, aby pokrywał cały czarny prostokąt.", "pt": "Da mesma forma que o objeto $(farBackground), redimensione o objeto **$(midBackground)** para que ele cubra todo o retângulo preto.", + "ru": "То же самое, что и для объекта $(farBackground), измените размер объекта **$(midBackground)** так, чтобы он покрывал весь черный прямоугольник.", + "sl": "Isto velja za objekt $(farBackground), spremenite velikost objekta **$(midBackground)**, da pokrije celoten črn pravokotnik.", + "sq": "Njësoj si për objektin $(farBackground), ri-dimensiononi objektin **$(midBackground)** në mënyrë që të mbulojë tërësi pranë e hollit të zi.", "th": "เช่นเดียวกันกับวัตถุ $(farBackground), ปรับขนาดวัตถุ **$(midBackground)** เพื่อให้ครอบคลุมสี่เหลี่ยมสีดำทั้งหมด", - "ar": "نفس الشيء مع الكائن $(farBackground)، إعادة ضبط حجم الـ **$(midBackground)** لتغطي المستطيل الأسود بالكامل." + "uk": "Те саме, що й для об'єкта $(farBackground), змініть розмір об'єкта **$(midBackground)** так, щоб він покривав весь чорний прямокутник.", + "zh": "与$(farBackground)对象一样,调整**$(midBackground)**对象的大小,使其覆盖整个黑色矩形。" } }, "placement": "top", @@ -640,10 +900,20 @@ "messageByLocale": { "en": "Now let's make those **Backgrounds move**! Let's **open the Events Sheet** of your scene $(cameraScene).", "fr": "Maintenant, faisons en sorte que ces **fonds se déplacent** ! Ouvrons la **feuille d'événements** de la scène $(cameraScene).", + "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! هيّا **نفتح صفحة أحداث** المشهد $(cameraScene).", + "de": "Lassen Sie uns jetzt diese **Hintergründe bewegen**! Öffnen Sie das **Ereignisblatt** Ihrer Szene $(cameraScene).", "es": "¡Ahora hagamos que esos **fondos se muevan**! Abramos la **hoja de eventos** de tu escena $(cameraScene).", + "it": "Ora facciamo muovere quei **sfondi**! Apriamo il **foglio eventi** della tua scena $(cameraScene).", + "ja": "それでは、**背景を動かしましょう**!**$(cameraScene)**の**イベントシート**を開きます。", + "ko": "이제 **배경을 움직이게** 해 봅시다! **$(cameraScene)**의 **이벤트 시트**를 엽니다.", + "pl": "Teraz sprawmy, że te **tła się poruszają**! Otwórz **arkusz zdarzeń** sceny $(cameraScene).", "pt": "Agora vamos fazer com que esses **fundos se movam**! Vamos **abrir a Folha de Eventos** de tua cena $(cameraScene).", + "ru": "Теперь давайте заставим эти **фоны двигаться**! Откройте **таблицу событий** вашей сцены $(cameraScene).", + "sl": "Sedaj bomo naredili, da se **ozadja premikajo**! Odprite **tabelo dogodkov** vaše scene $(cameraScene).", + "sq": "Tani le të bëjmë që **sfondot të lëvizin**! Hapni **tabelën e ngjarjeve** të skenës $(cameraScene).", "th": "ทีนี้มาทำให้ **พึ้นหลังเคลื่อนที่** กันเถอะ! โดย **เปิดชี้ทอีเวนต์** ของ scene $(cameraScene)", - "ar": "الآن لنجعل تلك **الخلفيات تتحرك**! هيّا **نفتح صفحة أحداث** المشهد $(cameraScene)." + "uk": "Тепер давайте зробимо, щоб ці **фони рухалися**! Відкрийте **таблицю подій** вашої сцени $(cameraScene).", + "zh": "现在让我们让这些**背景移动**!让我们打开你的场景$(cameraScene)的**事件表**。" } }, "placement": "bottom" @@ -660,10 +930,20 @@ "messageByLocale": { "en": "Let's **add an action** to make the first background move.", "fr": "**Ajoutons une action** pour faire bouger le premier fond.", + "ar": "هيّا نقوم ب**إضافة إجراء** لجعل الخلفية الأولى تتحرك.", + "de": "**Fügen wir eine Aktion hinzu**, um den ersten Hintergrund zu bewegen.", "es": "**Agreguemos una acción** para hacer que el primer fondo se mueva.", + "it": "**Aggiungiamo un'azione** per far muovere il primo sfondo.", + "ja": "最初の背景を動かすために**アクションを追加**しましょう。", + "ko": "첫 번째 배경을 움직이게 하기 위해 **동작을 추가**해 봅시다.", + "pl": "Dodajmy **akcję**, aby pierwsze tło się poruszało.", "pt": "**Adicione uma ação** para fazer o primeiro plano de fundo se mover.", + "ru": "Добавим **действие**, чтобы заставить первый фон двигаться.", + "sl": "**Dodajmo dejanje**, da se premakne prvo ozadje.", + "sq": "Le të **shtojmë një veprim** për të bërë sfondin e parë të lëvizë.", "th": "**เพิ่มการกระทำ** เพื่อทำให้พื้นหลังแรกเคลื่อนที่", - "ar": "هيّا نقوم ب**إضافة إجراء** لجعل الخلفية الأولى تتحرك." + "uk": "Додаймо **дію**, щоб зробити перший фон рухливим.", + "zh": "让我们**添加一个动作**来让第一个背景移动。" } } } @@ -678,10 +958,20 @@ "messageByLocale": { "en": "Select **$(farBackground)**.", "fr": "Sélectionnez **$(farBackground)**.", + "ar": "تحديد **$(farBackground)**.", + "de": "Wählen Sie **$(farBackground)**.", "es": "Seleccione **$(farBackground)**.", + "it": "Seleziona **$(farBackground)**.", + "ja": "**$(farBackground)**を選択します。", + "ko": "**$(farBackground)**를 선택합니다.", + "pl": "Wybierz **$(farBackground)**.", "pt": "Selecione **$(farBackground)**.", + "ru": "Выберите **$(farBackground)**.", + "sl": "Izberite **$(farBackground)**.", + "sq": "Zgjidh **$(farBackground)**.", "th": "เลือก **$(farBackground)**", - "ar": "تحديد **$(farBackground)**." + "uk": "Виберіть **$(farBackground)**.", + "zh": "选择**$(farBackground)**。" } } }, @@ -697,36 +987,25 @@ "messageByLocale": { "en": "Select the action **Image X offset**.", "fr": "Sélectionnez l'action **Décalage X de l'image**.", + "ar": "تحديد الإجراء **إزاحة الصورة أفقيًا**.", + "de": "Wählen Sie die Aktion **Bild-X-Versatz**.", "es": "Seleccione la acción **Desplazamiento X de la imagen**.", + "it": "Seleziona l'azione **Spostamento X dell'immagine**.", + "ja": "アクション **Image X offset**を選択します。", + "ko": "동작 **이미지 X 오프셋**을 선택합니다.", + "pl": "Wybierz akcję **Przesunięcie X obrazu**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", + "ru": "Выберите действие **Смещение изображения по X**.", + "sl": "Izberite dejanje **Slikovni X zamik**.", + "sq": "Zgjidh veprimin **Offset i X i imazhit**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", - "ar": "تحديد الإجراء **إزاحة الصورة أفقيًا**." + "uk": "Виберіть дію **Зміщення зображення по X**.", + "zh": "选择动作**图像X偏移**。" } } }, "isOnClosableDialog": true }, - { - "elementToHighlightId": "#parameter-1-operator-field", - "nextStepTrigger": { - "valueEquals": "=" - }, - "skippable": true, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We want the background to follow the camera, so let's select **= (set to)**.", - "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", - "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", - "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك هيّا نحدد **= (تعيين إلى)**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, { "elementToHighlightId": "#parameter-2-expression-field", "nextStepTrigger": { @@ -737,10 +1016,20 @@ "messageByLocale": { "en": "Let's make the far background move,\n\n The way we do it is by making it move relatively to the position of the camera.\n\n If the player moves, the camera moves too, so we make the background follow the camera center horizontally (X), but **way slower** to give an effect of depth.\n\n Type the formula `CameraCenterX()/8`.", "fr": "Faisons bouger le fond lointain,\n\n La façon de le faire est de le faire bouger par rapport à la position de la caméra.\n\n Si le joueur se déplace, la caméra se déplace aussi, donc nous faisons en sorte que le fond suive le centre de la caméra horizontalement (X), mais **beaucoup plus lentement** pour donner un effet de profondeur.\n\n Tapez la formule `CameraCenterX()/8`.", + "ar": "هيّا نجعل الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى إحداثية الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، إدخال الصيغة `CameraCenterX()/8`.", + "de": "Lassen Sie uns den fernen Hintergrund bewegen,\n\n Die Art und Weise, wie wir das machen, ist, dass er sich relativ zur Position der Kamera bewegt.\n\n Wenn der Spieler sich bewegt, bewegt sich auch die Kamera, also machen wir den Hintergrund, dass er dem Kameramittelpunkt horizontal (X) folgt, aber **viel langsamer**, um einen Tiefeneffekt zu erzielen.\n\n Geben Sie die Formel `CameraCenterX()/8` ein.", "es": "Hagamos que el fondo lejano se mueva,\n\n La forma de hacerlo es hacer que se mueva en relación con la posición de la cámara.\n\n Si el jugador se mueve, la cámara también se mueve, por lo que hacemos que el fondo siga el centro de la cámara horizontalmente (X), pero **mucho más lento** para dar un efecto de profundidad.\n\n Escribe la fórmula `CameraCenterX()/8`.", + "it": "Facciamo muovere lo sfondo lontano,\n\n Il modo in cui lo facciamo è facendolo muovere relativamente alla posizione della telecamera.\n\n Se il giocatore si muove, la telecamera si muove anche, quindi facciamo in modo che lo sfondo segua il centro della telecamera orizzontalmente (X), ma **molto più lentamente** per dare un effetto di profondità.\n\n Scrivi la formula `CameraCenterX()/8`.", + "ja": "遠景を動かしましょう\n\n 移動させる方法は、カメラの位置に対して相対的に動かすことです。\n\n プレイヤーが動くと、カメラも動くので、背景をカメラの中心に水平方向(X)に追従させますが、**非常に遅く**して奥行きの効果を与えます。\n\n 式に`CameraCenterX()/8`を入力します。", + "ko": "먼 배경을 움직이게 합시다,\n\n 이를 하는 방법은 카메라의 위치에 상대적으로 움직이도록 하는 것입니다.\n\n 플레이어가 움직이면 카메라도 움직이기 때문에 배경이 카메라 중앙을 수평(X)으로 따라가지만 **훨씬 느리게** 하여 깊이 효과를 줍니다.\n\n 식에 `CameraCenterX()/8`를 입력합니다.", + "pl": "Pozwólmy dalekiemu tłu poruszać się,\n\n Sposób, w jaki to robimy, polega na tym, że porusza się on względem pozycji kamery.\n\n Jeśli gracz się porusza, kamera też się porusza, więc sprawiamy, że tło podąża za środkiem kamery w poziomie (X), ale **dużo wolniej**, aby uzyskać efekt głębi.\n\n Wpisz wzór `CameraCenterX()/8`.", "pt": "Vamos fazer o fundo distante se mover,\n\n A maneira como fazemos isso é fazendo com que ele se mova em relação à posição da câmera.\n\n Se o jogador se mover, a câmera também se move, então fazemos o fundo seguir o centro da câmera horizontalmente (X), mas **muito mais devagar** para dar um efeito de profundidade.\n\n Digite a fórmula `CameraCenterX()/8`.", + "ru": "Давайте заставим дальний фон двигаться,\n\n Способ сделать это - заставить его двигаться относительно положения камеры.\n\n Если игрок двигается, камера тоже двигается, поэтому мы заставляем фон следовать за центром камеры по горизонтали (X), но **намного медленнее**, чтобы создать эффект глубины.\n\n Введите формулу `CameraCenterX()/8`.", + "sl": "Naj bo daleč ozadje premaknjeno,\n\n Način, kako to storimo, je, da se premika glede na položaj kamere.\n\n Če se igralec premika, se premika tudi kamera, zato naredimo, da ozadje sledi središču kamere vodoravno (X), vendar **veliko počasneje**, da ustvari učinek globine.\n\n Vnesite formulo `CameraCenterX()/8`.", + "sq": "Le të bëjmë që sfondi i largët të lëvizë,\n\n Mënyra se si e bëjmë këtë është duke e bërë atë të lëvizë në raport me pozicionin e kamerës.\n\n Nëse lojtari lëviz, kamera lëviz gjithashtu, kështu që bëjmë që sfondi të ndjekë qendrën e kamerës horizontalisht (X), por **shumë më ngadalë** për të dhënë një efekt thellësie.\n\n Shkruani formulën `CameraCenterX()/8`.", "th": "มาทำให้พื้นหลังไกลเคลื่อนที่\n\nวิธีที่เราทำคือทำให้พื้นหลังเคลื่อนที่เทียบเท่ากับตำแหน่งของกล้อง\n\nถ้าผู้เล่นเคลื่อนที่กล้องก็จะเคลื่อนที่ด้วย ดังนั้นเราจึงทำให้พื้นหลังติดตามตำแหน่งกล้องแนวนอน (X) แต่**เร็วมากกว่า** เพื่อให้มีความลึกลับ\n\nพิมพ์สูตร `CameraCenterX()/8`", - "ar": "هيّا نجعل الخلفية البعيدة تتحرك، طريقة فعل ذلك هي بجعلها تتحرك نسبيًا إلى إحداثية الكاميرا.\n\n إذا تحركت الشخصية فستتحرك الكاميرا أيضًا، لذلك نجعل الخلفية تتتبع مركز الكاميرا أفقيًا، ولكن **أبطأ** لمنح شعور العمق، إدخال الصيغة `CameraCenterX()/8`." + "uk": "Давайте зробимо, щоб далекий фон рухався,\n\n Спосіб зробити це - зробити його рухатися відносно положення камери.\n\n Якщо гравець рухається, камера також рухається, тому ми робимо фон слідувати за центром камери горизонтально (X), але **набагато повільніше**, щоб створити ефект глибини.\n\n Введіть формулу `CameraCenterX()/8`.", + "zh": "让我们让远景移动\n\n 我们的做法是相对于相机的位置使其移动。\n\n 如果玩家移动,相机也会移动,所以我们让背景水平(X)跟随相机中心,但**慢得多**,以产生深度效果。\n\n 输入公式`CameraCenterX()/8`。" } }, "placement": "bottom" @@ -757,10 +1046,20 @@ "messageByLocale": { "en": "Nice! Now let's save this.", "fr": "Bien ! Enregistrons maintenant cela.", + "ar": "جميل! الآن هيّا نحفظ هذا.", + "de": "Schön! Lassen Sie uns das jetzt speichern.", "es": "¡Bien! Ahora guardemos esto.", + "it": "Bene! Ora salviamo questo.", + "ja": "素晴らしい!これを保存しましょう。", + "ko": "좋아요! 이제 이것을 저장해 봅시다.", + "pl": "Świetnie! Teraz zapiszmy to.", "pt": "Legal! Agora vamos salvar isso.", + "ru": "Отлично! Теперь давайте сохраним это.", + "sl": "Lepo! Sedaj to shranimo.", + "sq": "E mirë! Tani le të ruajmë këtë.", "th": "ดีมาก! มาบันทึกกันเถอะ", - "ar": "جميل! الآن هيّا نحفظ هذا." + "uk": "Чудово! Тепер давайте збережемо це.", + "zh": "很好!现在让我们保存这个。" } }, "placement": "top" @@ -776,10 +1075,20 @@ "messageByLocale": { "en": "Let's create the same action for **$(midBackground)**!", "fr": "Créons la même action pour **$(midBackground)** !", + "ar": "هيّا نقوم بنفس الشيء مع **$(midBackground)**!", + "de": "Lassen Sie uns die gleiche Aktion für **$(midBackground)** erstellen!", "es": "¡Creemos la misma acción para **$(midBackground)**!", + "it": "Creiamo la stessa azione per **$(midBackground)**!", + "ja": "**$(midBackground)**にも同じアクションを作りましょう!", + "ko": "**$(midBackground)**에 대해 동일한 동작을 만들어 봅시다!", + "pl": "Stwórzmy tę samą akcję dla **$(midBackground)**!", "pt": "Vamos criar a mesma ação para **$(midBackground)**!", + "ru": "Создадим такое же действие для **$(midBackground)**!", + "sl": "Ustvarimo enako dejanje za **$(midBackground)**!", + "sq": "Le të krijojmë veprimin e njëjtë për **$(midBackground)**!", "th": "สร้างการกระทำเหมือนเดิมสำหรับ **$(midBackground)**!", - "ar": "هيّا نقوم بنفس الشيء مع **$(midBackground)**!" + "uk": "Створимо таку саму дію для **$(midBackground)**!", + "zh": "让我们为**$(midBackground)**创建相同的动作!" } } } @@ -794,10 +1103,20 @@ "messageByLocale": { "en": "Select **$(midBackground)**.", "fr": "Sélectionnez **$(midBackground)**.", + "ar": "تحديد **$(midBackground)**.", + "de": "Wählen Sie **$(midBackground)**.", "es": "Selecciona **$(midBackground)**.", + "it": "Seleziona **$(midBackground)**.", + "ja": "**$(midBackground)**を選択します。", + "ko": "**$(midBackground)**를 선택합니다.", + "pl": "Wybierz **$(midBackground)**.", "pt": "Selecione **$(midBackground)**.", + "ru": "Выберите **$(midBackground)**.", + "sl": "Izberite **$(midBackground)**.", + "sq": "Zgjidh **$(midBackground)**.", "th": "เลือก **$(midBackground)**", - "ar": "تحديد **$(midBackground)**." + "uk": "Виберіть **$(midBackground)**.", + "zh": "选择**$(midBackground)**。" } } }, @@ -813,36 +1132,25 @@ "messageByLocale": { "en": "Select the action **Image X offset**.", "fr": "Sélectionnez l'action **Décalage X de l'image**.", + "ar": "تحديد الإجراء **إزاحة الصورة أفقيًا**.", + "de": "Wählen Sie die Aktion **Bild-X-Versatz**.", "es": "Selecciona la acción **Desplazamiento X de la imagen**.", + "it": "Seleziona l'azione **Spostamento X dell'immagine**.", + "ja": "アクション **Image X offset**を選択します。", + "ko": "동작 **이미지 X 오프셋**을 선택합니다.", + "pl": "Wybierz akcję **Przesunięcie X obrazu**.", "pt": "Selecione a ação **Deslocamento X da imagem**.", + "ru": "Выберите действие **Смещение изображения по X**.", + "sl": "Izberite dejanje **Slikovni X zamik**.", + "sq": "Zgjidh veprimin **Offset i X i imazhit**.", "th": "เลือกการกระทำ **Image X ออฟเซ็ท**", - "ar": "تحديد الإجراء **إزاحة الصورة أفقيًا**." + "uk": "Виберіть дію **Зміщення зображення по X**.", + "zh": "选择动作**图像X偏移**。" } } }, "isOnClosableDialog": true }, - { - "elementToHighlightId": "#parameter-1-operator-field", - "nextStepTrigger": { - "valueEquals": "=" - }, - "skippable": true, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We want the background to follow the camera, so let's select **= (set to)**.", - "fr": "Nous voulons que le fond suive la caméra, donc sélectionnons **= (définir à)**.", - "es": "Queremos que el fondo siga la cámara, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos que o fundo siga a câmera, então vamos selecionar **= (definir como)**.", - "th": "เราต้องการให้พื้นหลังติดตามกล้อง ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نريد من الخلفية أن تتبع الكاميرا، لذلك هيّا نحدد **= (تعيين إلى)**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, { "elementToHighlightId": "#parameter-2-expression-field", "nextStepTrigger": { @@ -853,10 +1161,20 @@ "messageByLocale": { "en": "This time let's make this background move **faster**, to give the effect that it is closer to the player,\n\nso let's make the background move **3 times slower** than the camera.\n\n Enter `CameraCenterX()/3`.", "fr": "Cette fois, faisons en sorte que ce fond se déplace **plus vite**, pour donner l'effet qu'il est plus proche du joueur,\n\nalors faisons en sorte que le fond se déplace **3 fois plus lentement** que la caméra.\n\nEntrez `CameraCenterX()/3`.", + "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n هيّا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`.", + "de": "Dieses Mal lassen Sie uns diesen Hintergrund **schneller** bewegen, um den Effekt zu erzielen, dass er näher am Spieler ist,\n\nalso lassen Sie uns den Hintergrund **3-mal langsamer** als die Kamera bewegen.\n\nGeben Sie `CameraCenterX()/3` ein.", "es": "Esta vez, hagamos que este fondo se mueva **más rápido**, para dar el efecto de que está más cerca del jugador,\n\nasí que hagamos que el fondo se mueva **3 veces más lento** que la cámara.\n\nIngrese `CameraCenterX()/3`.", + "it": "Questa volta facciamo muovere questo sfondo **più velocemente**, per dare l'effetto che è più vicino al giocatore,\n\nquindi facciamo muovere lo sfondo **3 volte più lentamente** della telecamera.\n\nInserisci `CameraCenterX()/3`.", + "ja": "今度はこの背景を**速く**動かし、プレイヤーに近い効果を与えましょう\n\nそのためにカメラより**3倍遅く**背景を動かします。\n\n`CameraCenterX()/3`を入力します。", + "ko": "이번에는 이 배경을 **더 빨리** 움직이게 해서 플레이어에게 더 가까운 효과를 주도록 하겠습니다,\n\n그래서 배경을 카메라보다 **3배 더 느리게** 움직이도록 합시다.\n\n`CameraCenterX()/3`를 입력합니다.", + "pl": "Tym razem pozwólmy temu tłu poruszać się **szybciej**, aby uzyskać efekt, że jest bliżej gracza,\n\nwięc pozwólmy tłu poruszać się **3 razy wolniej** niż kamera.\n\nWpisz `CameraCenterX()/3`.", "pt": "Desta vez, vamos fazer com que este fundo se mova **mais rápido**, para dar o efeito de que está mais perto do jogador,\n\nentão vamos fazer com que o fundo se mova **3 vezes mais devagar** que a câmera.\n\nDigite `CameraCenterX()/3`.", + "ru": "На этот раз давайте заставим этот фон двигаться **быстрее**, чтобы создать эффект, что он ближе к игроку,\n\nпоэтому давайте заставим фон двигаться **в 3 раза медленнее** камеры.\n\nВведите `CameraCenterX()/3`.", + "sl": "Tokrat naj bo to ozadje premaknjeno **hitreje**, da ustvari učinek, da je bližje igralcu,\n\nzato naj bo ozadje premaknjeno **3-krat počasneje** kot kamera.\n\nVnesite `CameraCenterX()/3`.", + "sq": "Kësaj radhe le të bëjmë që ky sfond të lëvizë **më shpejt**, për të dhënë efektin që është më afër lojtarit,\n\npra le të bëjmë që sfondi të lëvizë **3 herë më ngadalë** se kamera.\n\nShkruani `CameraCenterX()/3`.", "th": "ในครั้งนี้เราจะทำให้พื้นหลังเคลื่อนที่ **เร็วขึ้น** เพื่อให้มีผลลัพธ์ที่เห็นได้ชัดว่ามันอยู่ใกล้กับผู้เล่นมากขึ้น\n\nดังนั้นเราจะทำให้พื้นหลังเคลื่อนที่ **ช้าลง 3 เท่า** กว่ากล้อง\n\nใส่ `CameraCenterX()/3`", - "ar": "هذه المرة سنجعل الخلفية تتحرك **أسرع**، لإعطاء الشعور أنه قريب من الشخصية، \n\n هيّا نجعل الخلفية تتحرك **أسرع بثلاث مرات** من الكاميرا.\n\n إدخال `CameraCenterX()/3`." + "uk": "Цього разу давайте зробимо, щоб цей фон рухався **швидше**, щоб створити ефект, що він ближчий до гравця,\n\nтому давайте зробимо, щоб фон рухався **в 3 рази повільніше** за камерою.\n\nВведіть формулу `CameraCenterX()/3`.", + "zh": "这次让我们让这个背景移动**更快**,以产生更接近玩家的效果,\n\n所以让我们让背景移动**比相机慢3倍**。输入`CameraCenterX()/3`。" } }, "placement": "bottom" @@ -873,10 +1191,20 @@ "messageByLocale": { "en": "Nice! Let's close this.", "fr": "Bien ! Fermons cela.", + "ar": "جميل! لنغلق هذا.", + "de": "Schön! Lassen Sie uns das schließen.", "es": "¡Bien! Cerrémoslo.", + "it": "Bene! Chiudiamo questo.", + "ja": "素晴らしい!これを閉じましょう。", + "ko": "좋아요! 이것을 닫아 봅시다.", + "pl": "Świetnie! Zamknijmy to.", "pt": "Legal! Vamos fechar isso.", + "ru": "Отлично! Давайте закроем это.", + "sl": "Lepo! Zaprimo to.", + "sq": "E mirë! Le të mbyllim këtë.", "th": "ดีมาก! มาปิดกันเถอะ", - "ar": "جميل! لنغلق هذا." + "uk": "Чудово! Давайте закриємо це.", + "zh": "很好!让我们关闭这个。" } }, "placement": "top" @@ -892,10 +1220,20 @@ "messageByLocale": { "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", + "de": "Gut, wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "Bene, abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "よし、完了です!変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "좋아요, 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Dobrze, skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Хорошо, мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "V redu, končali smo! Preizkusimo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Mirë, kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." + "uk": "Добре, ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Клацніть на кнопку **Попередній перегляд**.", + "zh": "好的,我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" From b78829b0ef399d8f9a8ac9f154ff09525ff33f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:31:26 +0100 Subject: [PATCH 092/208] Update all tutorials --- __tests__/post-build.spec.js | 27 + templates/object3d/game.json | 200 +++-- templates/plinkoMultiplier/game.json | 1 - tutorials/in-app/cameraParallax.json | 90 +-- tutorials/in-app/flingGame.json | 4 +- tutorials/in-app/healthBar.json | 30 +- tutorials/in-app/joystick.json | 31 +- tutorials/in-app/object3d.json | 784 ++++++------------ tutorials/in-app/plinkoMultiplier.json | 1024 +++++++++++++++++++----- tutorials/in-app/timer.json | 528 ++++++++++-- 10 files changed, 1776 insertions(+), 943 deletions(-) diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index 02e9e65..75b0456 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -80,6 +80,33 @@ describe('In app tutorials content checks', () => { } }); + test('all translations have all the defined locales', () => { + /** @type {{ tutorialId: string, missingLocale: string, messageByLocale: Object} []} */ + const errors = []; + allInAppTutorials.forEach((tutorial) => { + const allMessagesByLocale = getAllMessagesByLocale(tutorial); + const availableLocales = tutorial.availableLocales; + allMessagesByLocale.forEach((messageByLocale) => { + for (const locale of availableLocales) { + if (!messageByLocale[locale]) { + errors.push({ + tutorialId: tutorial.id, + missingLocale: locale, + messageByLocale, + }); + } + } + }); + }); + + if (errors.length > 0) { + console.error(errors); + throw new Error( + 'There are missing translations in some tutorials, check the console for more details' + ); + } + }); + test('references to project data are not corrupt', () => { /** @type {Record>} */ const messagesWithCorruptProjectDataByTutorial = {}; diff --git a/templates/object3d/game.json b/templates/object3d/game.json index 3c6d2b9..8f5ac38 100644 --- a/templates/object3d/game.json +++ b/templates/object3d/game.json @@ -8,6 +8,8 @@ }, "properties": { "adaptGameResolutionAtRuntime": true, + "antialiasingMode": "MSAA", + "antialisingEnabledOnMobile": false, "folderProject": false, "orientation": "landscape", "packageName": "com.example.platformertutorial3d", @@ -467,6 +469,9 @@ "resourceFolders": [] }, "objects": [], + "objectsFolderStructure": { + "folderName": "__ROOT" + }, "objectsGroups": [], "variables": [], "layouts": [ @@ -907,9 +912,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Player", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2243,9 +2248,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Goal", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2333,7 +2338,6 @@ "assetStoreId": "", "height": 32, "name": "Background", - "tags": "", "texture": "BlackCheckered.png", "type": "TiledSpriteObject::TiledSprite", "width": 32, @@ -2345,7 +2349,6 @@ "assetStoreId": "", "height": 128, "name": "FailMarker", - "tags": "", "texture": "assets\\RedCheckered.png", "type": "TiledSpriteObject::TiledSprite", "width": 128, @@ -2357,7 +2360,6 @@ "assetStoreId": "", "height": 128, "name": "Danger", - "tags": "", "texture": "assets\\RedCheckered.png", "type": "TiledSpriteObject::TiledSprite", "width": 128, @@ -2366,9 +2368,9 @@ "behaviors": [] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Arrow", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2409,7 +2411,6 @@ { "assetStoreId": "c7a381f15f0bb07adc63d78850702df44e8328a15db1ecb10ca1503491ed22a0", "name": "FlatLightJoystick", - "tags": "", "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", "variables": [], "effects": [], @@ -2417,6 +2418,7 @@ "content": {}, "childrenContent": { "Border": { + "adaptCollisionMaskAutomatically": false, "updateIfNotVisible": false, "animations": [ { @@ -2451,6 +2453,7 @@ ] }, "Thumb": { + "adaptCollisionMaskAutomatically": false, "updateIfNotVisible": false, "animations": [ { @@ -2487,9 +2490,9 @@ } }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "a9518cbba640f8287edf6c5eb05df6e2f825343bc6440e8d4afe9623831a3afc", "name": "AButton", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -2546,8 +2549,75 @@ ] } ] + }, + { + "assetStoreId": "", + "name": "Platform", + "type": "Scene3D::Cube3DObject", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "width": 128, + "height": 128, + "depth": 128, + "enableTextureTransparency": false, + "facesOrientation": "Y", + "frontFaceResourceName": "BlackCheckered.png", + "backFaceResourceName": "", + "backFaceUpThroughWhichAxisRotation": "X", + "leftFaceResourceName": "WhiteCheckered.png", + "rightFaceResourceName": "WhiteCheckered.png", + "topFaceResourceName": "WhiteCheckered.png", + "bottomFaceResourceName": "WhiteCheckered.png", + "frontFaceVisible": true, + "backFaceVisible": false, + "leftFaceVisible": true, + "rightFaceVisible": true, + "topFaceVisible": true, + "bottomFaceVisible": true, + "frontFaceResourceRepeat": true, + "backFaceResourceRepeat": false, + "leftFaceResourceRepeat": true, + "rightFaceResourceRepeat": true, + "topFaceResourceRepeat": true, + "bottomFaceResourceRepeat": true, + "materialType": "Basic" + } } ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Player" + }, + { + "objectName": "Goal" + }, + { + "objectName": "Background" + }, + { + "objectName": "FailMarker" + }, + { + "objectName": "Danger" + }, + { + "objectName": "Arrow" + }, + { + "objectName": "FlatLightJoystick" + }, + { + "objectName": "AButton" + }, + { + "objectName": "Platform" + } + ] + }, "events": [ { "colorB": 116, @@ -2839,7 +2909,14 @@ "parameters": [""] } ], - "actions": [] + "actions": [ + { + "type": { + "value": "Scene3D::Base3DBehavior::SetZ" + }, + "parameters": ["Platform", "Object3D", "=", "-64"] + } + ] } ], "layers": [ @@ -2850,6 +2927,7 @@ "camera3DFarPlaneDistance": 10000, "camera3DFieldOfView": 45, "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, "isLocked": false, @@ -2866,6 +2944,7 @@ "camera3DFarPlaneDistance": 10000, "camera3DFieldOfView": 45, "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, "isLocked": false, @@ -2893,6 +2972,7 @@ "camera3DFarPlaneDistance": 10000, "camera3DFieldOfView": 45, "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", "followBaseLayerCamera": false, "isLightingLayer": false, "isLocked": false, @@ -2908,10 +2988,30 @@ "name": "Anchor", "type": "AnchorBehavior::AnchorBehavior" }, + { + "name": "Animation", + "type": "AnimatableCapability::AnimatableBehavior" + }, + { + "name": "Effect", + "type": "EffectCapability::EffectBehavior" + }, + { + "name": "Flippable", + "type": "FlippableCapability::FlippableBehavior" + }, { "name": "MultitouchButton", "type": "SpriteMultitouchJoystick::MultitouchButton" }, + { + "name": "Object3D", + "type": "Scene3D::Base3DBehavior" + }, + { + "name": "Opacity", + "type": "OpacityCapability::OpacityBehavior" + }, { "name": "PlatformerCharacterAnimator", "type": "PlatformerCharacterAnimator::PlatformerCharacterAnimator" @@ -2924,6 +3024,14 @@ "name": "PlatformerObject", "type": "PlatformBehavior::PlatformerObjectBehavior" }, + { + "name": "Resizable", + "type": "ResizableCapability::ResizableBehavior" + }, + { + "name": "Scale", + "type": "ScalableCapability::ScalableBehavior" + }, { "name": "SmoothCamera", "type": "SmoothCamera::SmoothCamera" @@ -5255,7 +5363,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -5265,7 +5372,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "JoystickIdentifier" }, { @@ -5275,7 +5381,6 @@ "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", "group": "", "extraInformation": [], - "hidden": false, "name": "DeadZoneRadius" }, { @@ -5638,7 +5743,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -5648,7 +5752,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ButtonIdentifier" }, { @@ -5853,7 +5956,6 @@ "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], - "hidden": false, "name": "Property" }, { @@ -5863,7 +5965,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -5873,7 +5974,6 @@ "description": "", "group": "Controls", "extraInformation": ["Primary", "Secondary"], - "hidden": false, "name": "JoystickIdentifier" }, { @@ -5883,7 +5983,6 @@ "description": "", "group": "Controls", "extraInformation": [], - "hidden": false, "name": "JumpButton" } ], @@ -6348,7 +6447,6 @@ "extraInformation": [ "TopDownMovementBehavior::TopDownMovementBehavior" ], - "hidden": false, "name": "TopDownMovement" }, { @@ -6358,7 +6456,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -6368,7 +6465,6 @@ "description": "", "group": "", "extraInformation": ["Primary", "Secondary"], - "hidden": false, "name": "JoystickIdentifier" }, { @@ -6378,7 +6474,6 @@ "description": "", "group": "Controls", "extraInformation": ["Analog", "360°", "8 Directions"], - "hidden": false, "name": "StickMode" } ], @@ -7215,7 +7310,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "ControllerIdentifier" }, { @@ -7225,7 +7319,6 @@ "description": "", "group": "", "extraInformation": ["Primary", "Secondary"], - "hidden": false, "name": "JoystickIdentifier" }, { @@ -7235,7 +7328,6 @@ "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", "group": "", "extraInformation": [], - "hidden": false, "name": "DeadZoneRadius" }, { @@ -7281,9 +7373,9 @@ ], "objects": [ { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Thumb", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -7304,9 +7396,9 @@ ] }, { + "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "Border", - "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], @@ -7339,7 +7431,18 @@ } ] } - ] + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Thumb" + }, + { + "objectName": "Border" + } + ] + } } ] }, @@ -8471,7 +8574,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "EnableAnimationChanges" }, { @@ -8481,7 +8583,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "EnableHorizontalFlipping" }, { @@ -8491,7 +8592,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "IdleAnimationName" }, { @@ -8501,7 +8601,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "RunAnimationName" }, { @@ -8511,7 +8610,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "JumpAnimationName" }, { @@ -8521,7 +8619,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "FallAnimationName" }, { @@ -8531,7 +8628,6 @@ "description": "", "group": "Animation names", "extraInformation": [], - "hidden": false, "name": "ClimbAnimationName" }, { @@ -8543,7 +8639,6 @@ "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], - "hidden": false, "name": "PlatformerBehavior" } ], @@ -12843,7 +12938,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "LeftwardSpeed" }, { @@ -12853,7 +12947,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "RightwardSpeed" }, { @@ -12863,7 +12956,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "UpwardSpeed" }, { @@ -12873,7 +12965,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "DownwardSpeed" }, { @@ -12883,7 +12974,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "FollowOnX" }, { @@ -12893,7 +12983,6 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, "name": "FollowOnY" }, { @@ -12904,7 +12993,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "FollowFreeAreaLeft" }, { @@ -12915,7 +13003,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "FollowFreeAreaRight" }, { @@ -12926,7 +13013,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "FollowFreeAreaTop" }, { @@ -12937,7 +13023,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "FollowFreeAreaBottom" }, { @@ -12948,7 +13033,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "CameraOffsetX" }, { @@ -12959,7 +13043,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "CameraOffsetY" }, { @@ -12970,7 +13053,6 @@ "description": "", "group": "Timing", "extraInformation": [], - "hidden": false, "name": "CameraDelay" }, { @@ -12981,7 +13063,6 @@ "description": "", "group": "Timing", "extraInformation": [], - "hidden": false, "name": "ForecastTime" }, { @@ -12992,7 +13073,6 @@ "description": "", "group": "Timing", "extraInformation": [], - "hidden": false, "name": "ForecastHistoryDuration" }, { @@ -13263,7 +13343,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "LeftwardSpeedMax" }, { @@ -13274,7 +13353,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "RightwardSpeedMax" }, { @@ -13285,7 +13363,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "UpwardSpeedMax" }, { @@ -13296,7 +13373,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "DownwardSpeedMax" }, { @@ -13551,7 +13627,6 @@ "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], - "hidden": false, "name": "PlatformerCharacter" }, { @@ -13561,7 +13636,6 @@ "description": "", "group": "", "extraInformation": ["SmoothCamera::SmoothCamera"], - "hidden": false, "name": "SmoothCamera" }, { @@ -13582,7 +13656,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "AirFollowFreeAreaTop" }, { @@ -13593,7 +13666,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "AirFollowFreeAreaBottom" }, { @@ -13604,7 +13676,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "FloorFollowFreeAreaTop" }, { @@ -13615,7 +13686,6 @@ "description": "", "group": "Position", "extraInformation": [], - "hidden": false, "name": "FloorFollowFreeAreaBottom" }, { @@ -13625,7 +13695,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "AirUpwardSpeed" }, { @@ -13635,7 +13704,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "AirDownwardSpeed" }, { @@ -13645,7 +13713,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "FloorUpwardSpeed" }, { @@ -13655,7 +13722,6 @@ "description": "", "group": "Catch-up speed", "extraInformation": [], - "hidden": false, "name": "FloorDownwardSpeed" }, { @@ -13666,7 +13732,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "AirUpwardSpeedMax" }, { @@ -13677,7 +13742,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "AirDownwardSpeedMax" }, { @@ -13688,7 +13752,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "FloorUpwardSpeedMax" }, { @@ -13699,7 +13762,6 @@ "description": "", "group": "Maximum speed", "extraInformation": [], - "hidden": false, "name": "FloorDownwardSpeedMax" } ], diff --git a/templates/plinkoMultiplier/game.json b/templates/plinkoMultiplier/game.json index b45ed3e..dbab3a7 100644 --- a/templates/plinkoMultiplier/game.json +++ b/templates/plinkoMultiplier/game.json @@ -2444,7 +2444,6 @@ "colorG": 16, "colorR": 189, "creationTime": 0, - "folded": true, "name": "**Hitting pegs", "source": "", "type": "BuiltinCommonInstructions::Group", diff --git a/tutorials/in-app/cameraParallax.json b/tutorials/in-app/cameraParallax.json index 35611ce..0b30c64 100644 --- a/tutorials/in-app/cameraParallax.json +++ b/tutorials/in-app/cameraParallax.json @@ -1044,22 +1044,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! Now let's save this.", - "fr": "Bien ! Enregistrons maintenant cela.", + "en": "Now let's save this.", + "fr": "Enregistrons maintenant cela.", "ar": "جميل! الآن هيّا نحفظ هذا.", - "de": "Schön! Lassen Sie uns das jetzt speichern.", - "es": "¡Bien! Ahora guardemos esto.", - "it": "Bene! Ora salviamo questo.", - "ja": "素晴らしい!これを保存しましょう。", - "ko": "좋아요! 이제 이것을 저장해 봅시다.", - "pl": "Świetnie! Teraz zapiszmy to.", - "pt": "Legal! Agora vamos salvar isso.", - "ru": "Отлично! Теперь давайте сохраним это.", - "sl": "Lepo! Sedaj to shranimo.", - "sq": "E mirë! Tani le të ruajmë këtë.", - "th": "ดีมาก! มาบันทึกกันเถอะ", - "uk": "Чудово! Тепер давайте збережемо це.", - "zh": "很好!现在让我们保存这个。" + "de": "Lassen Sie uns das jetzt speichern.", + "es": "Ahora guardemos esto.", + "it": "Ora salviamo questo.", + "ja": "これを保存しましょう。", + "ko": "이제 이것을 저장해 봅시다.", + "pl": "Teraz zapiszmy to.", + "pt": "Agora vamos salvar isso.", + "ru": "Теперь давайте сохраните это.", + "sl": "Sedaj shranimo to.", + "sq": "Tani le të ruajmë këtë.", + "th": "มาบันทึกสิ่งนี้", + "uk": "Тепер давайте збережемо це.", + "zh": "现在让我们保存这个。" } }, "placement": "top" @@ -1189,22 +1189,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! Let's close this.", - "fr": "Bien ! Fermons cela.", + "en": "Let's close this.", + "fr": "Fermons cela.", "ar": "جميل! لنغلق هذا.", - "de": "Schön! Lassen Sie uns das schließen.", - "es": "¡Bien! Cerrémoslo.", - "it": "Bene! Chiudiamo questo.", - "ja": "素晴らしい!これを閉じましょう。", - "ko": "좋아요! 이것을 닫아 봅시다.", - "pl": "Świetnie! Zamknijmy to.", - "pt": "Legal! Vamos fechar isso.", - "ru": "Отлично! Давайте закроем это.", - "sl": "Lepo! Zaprimo to.", - "sq": "E mirë! Le të mbyllim këtë.", - "th": "ดีมาก! มาปิดกันเถอะ", - "uk": "Чудово! Давайте закриємо це.", - "zh": "很好!让我们关闭这个。" + "de": "Lassen Sie uns das schließen.", + "es": "Cerrémoslo.", + "it": "Chiudiamo questo.", + "ja": "これを閉じましょう。", + "ko": "이것을 닫아 봅시다.", + "pl": "Zamknijmy to.", + "pt": "Vamos fechar isso.", + "ru": "Давайте закроем это.", + "sl": "Zaprimo to.", + "sq": "Le të mbyllim këtë.", + "th": "ปิดนี้", + "uk": "Давайте закриємо це.", + "zh": "让我们关闭这个。" } }, "placement": "top" @@ -1218,22 +1218,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", - "de": "Gut, wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", - "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "it": "Bene, abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", - "ja": "よし、完了です!変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", - "ko": "좋아요, 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", - "pl": "Dobrze, skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "ru": "Хорошо, мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", - "sl": "V redu, končali smo! Preizkusimo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", - "sq": "Mirë, kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", - "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "uk": "Добре, ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Клацніть на кнопку **Попередній перегляд**.", - "zh": "好的,我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" + "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", + "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", + "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", + "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", + "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 12cfd67..66f1549 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -341,8 +341,9 @@ "description": { "messageByLocale": { "en": "Let's choose an **object** from the asset store", - "fr": "Nous allons choisir un objet dans le **magasin de ressources**.", + "fr": "Nous allons choisir un **objet** dans le magasin de ressources.", "es": "Vamos a elegir un **objeto** de la tienda de recursos.", + "pt": "Vamos escolher um objeto da loja de recursos.", "th": "เลือก **วัตถุ** จาก ร้านค้า asset", "ar": "هيّا نقوم باختيار **كائن** من متجر العناصر" } @@ -2180,6 +2181,7 @@ "en": "Add a few $(obstacle) to the **scene** to protect $(target).", "fr": "Ajoutez quelques $(obstacle) à la **scène** pour protéger $(target).", "es": "Agrega algunos $(obstacle) a la **escena** para proteger a $(target).", + "pt": "Adicione alguns $(obstacle) à **cena** para proteger $(target).", "th": "เพิ่ม $(obstacle) ปริมาณนิดหน่อยลงใน **scene** เพื่อป้องกัน $(target)", "ar": "إضافة بضعة $(obstacle) إلى **المشهد** لحماية $(target)." } diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index 4a36e62..b27c304 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -927,22 +927,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", - "de": "Gut, wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die Schaltfläche **Vorschau**.", - "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "it": "Bene, abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", - "ja": "よし、完了です!変更を確認するためにゲームをテストしましょう! **プレビュー** ボタンをクリックします。", - "ko": "좋아요, 준비되었습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 보겠습니다! **미리보기** 버튼을 클릭하세요.", - "pl": "Dobrze, skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "ru": "Хорошо, мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", - "sl": "V redu, končali smo! Preizkusimo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", - "sq": "Mirë, kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "uk": "Добре, ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми внесли! Натисніть на кнопку **Попередній перегляд**.", - "zh": "好了,我们完成了!让我们测试一下我们的游戏,看看我们所做的更改!点击 **预览** 按钮。" + "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", + "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", + "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", + "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", + "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index a08a296..aab8d70 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -444,6 +444,7 @@ "en": "Let's add it to the scene.", "fr": "Ajoutons le à la scène.", "ar": "هيّا نقوم بإضافتها إلى المشهد.", + "de": "Fügen wir es der Szene hinzu.", "es": "Agreguemoslo a la escena.", "it": "Aggiungiamolo alla scena.", "ja": "シーンに追加しましょう。", @@ -792,22 +793,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", - "de": "Gut, wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die Schaltfläche **Vorschau**.", - "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "it": "Bene, abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", - "ja": "よし、完了です!変更点を確認するためにゲームをテストしましょう! **プレビュー** ボタンをクリックします。", - "ko": "좋아요, 끝났어요! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭하세요.", - "pl": "Dobrze, skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "ru": "Хорошо, мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", - "sl": "V redu, končali smo! Preizkusimo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", - "sq": "Ne regull, jemi gati! Hajde te testojme lojen tone te shohim ndryshimet qe kemi be! Shtype buttonin **Preview** ", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "uk": "Добре, ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", - "zh": "好的,我们完成了!让我们测试一下我们的游戏,看看我们所做的更改!点击 **预览** 按钮。" + "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", + "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", + "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", + "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", + "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" diff --git a/tutorials/in-app/object3d.json b/tutorials/in-app/object3d.json index 5ed659b..2136aa4 100644 --- a/tutorials/in-app/object3d.json +++ b/tutorials/in-app/object3d.json @@ -4,20 +4,30 @@ "Start": { "editor": "Scene", "scene": "gameScene" - }, - "SwitchToEvents1": { - "editor": "EventsSheet", - "scene": "gameScene" - }, - "SwitchToScene1": { - "editor": "Scene", - "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "availableLocales": [ + "en", + "fr", + "ar", + "de", + "es", + "it", + "ja", + "ko", + "pl", + "pt", + "th", + "ru", + "sl", + "sq", + "uk", + "zh" + ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/object3d/game.json", "initialProjectData": { - "gameScene": "GameScene" + "gameScene": "GameScene", + "platform": "Platform" }, "endDialog": { "content": [ @@ -25,40 +35,80 @@ "messageByLocale": { "en": "# You've finished this lesson!", "fr": "# Vous avez terminé cette leçon !", + "ar": "# لقد أنهيت هذا الدرس!", + "de": "# Du hast diese Lektion abgeschlossen!", "es": "# ¡Has terminado esta lección!", + "it": "# Hai finito questa lezione!", + "ja": "# このレッスンは終了しました!", + "ko": "# 이 레슨을 완료했습니다!", + "pl": "# Ukończyłeś tę lekcję!", "pt": "# Você terminou esta lição!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "ru": "# Вы завершили этот урок!", + "sl": "# Končali ste to lekcijo!", + "sq": "# Ju keni perfunduar kete mesim!", + "uk": "# Ви завершили цей урок!", + "zh": "# 你完成了这节课!" } }, { "messageByLocale": { "en": "Well done, in this tutorial you've learned how to:", "fr": "Bien joué, voici ce que vous avez appris :", - "es": "¡Bien hecho! En este tutorial, has aprendido:", - "pt": "Bom trabalho, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:", + "de": "Gut gemacht, in diesem Tutorial hast du geler:", + "es": "¡Bien hecho, en este tutorial has aprendido cómo:", + "it": "Ben fatto, in questo tutorial hai imparato come:", + "ja": "このチュートリアルでは、次のことを学びました:", + "ko": "이 튜토리얼에서 다음을 배웠습니다.", + "pl": "Dobrze, w tym samouczku nauczyłeś się, jak:", + "pt": "Bom trabalho, neste tutorial você aprendeu como:", + "ru": "Хорошо, в этом уроке вы узнали, как:", + "sl": "Bravo, v tem vadnem programu ste se naučili, kako:", + "sq": "Bravo, ne kete mesim ju keni mesuar si te:", + "th": "ทำได้ดีเยี่ยม, ในบทเรียนนี้คุณได้เรียนรู้วิธี:", + "uk": "Добре, в цьому уроці ви дізналися, як:", + "zh": "做得好,在本教程中,您学会了如何:" } }, { "messageByLocale": { - "en": "- Create a 3D Box\n\n- Add a behavior\n\n- Update the elevation of a 3D box", - "fr": "- Créer une boîte 3D\n\n- Ajouter un comportement\n\n- Mettre à jour l'élévation d'une boîte 3D", - "es": "- Crear una caja 3D\n\n- Agregar un comportamiento\n\n- Actualizar la elevación de una caja 3D", - "pt": "- Criar uma caixa 3D\n\n- Adicionar um comportamento\n\n- Atualizar a elevação de uma caixa 3D", - "th": "- สร้างกล่อง 3D\n\n- เพิ่มพฤติกรรม\n\n- อัปเดตความสูงของกล่อง 3D", - "ar": "- إنشاء صندوق ثلاثي الأبعاد\n\n- إضافة سلوك\n\n- تحديث ارتفاع الصندوق الثلاثي الأبعاد" + "en": "- Use a 3D Box\n\n- Add a behavior", + "fr": "- Utiliser une boîte 3D\n\n- Ajouter un comportement", + "ar": "- استخدام صندوق ثلاثي الأبعاد\n\n- إضافة سلوك", + "de": "- Verwenden Sie eine 3D-Box\n\n- Fügen Sie ein Verhalten hinzu", + "es": "- Usar una caja 3D\n\n- Añadir un comportamiento", + "it": "- Utilizzare una scatola 3D\n\n- Aggiungere un comportamento", + "ja": "- 3Dボックスを使用する\n\n- 動作を追加する", + "ko": "- 3D 상자 사용\n\n- 동작 추가", + "pl": "- Użyj pudełka 3D\n\n- Dodaj zachowanie", + "pt": "- Usar uma caixa 3D\n\n- Adicionar um comportamento", + "ru": "- Использовать 3D-бокс\n\n- Добавить поведение", + "sl": "- Uporabite 3D polje\n\n- Dodajte vedenje", + "sq": "- Përdor një kuti 3D\n\n- Shtoni një sjellje", + "th": "- ใช้กล่อง 3D\n\n- เพิ่มพฤติกรรม", + "uk": "- Використовуйте 3D-бокс\n\n- Додайте поведінку", + "zh": "- 使用3D盒子\n\n- 添加行为" } }, { "messageByLocale": { "en": "Now try to get the character to the goal button, while avoiding the red objects!", "fr": "Maintenant, essayez d'amener le personnage jusqu'au bouton objectif, tout en évitant les objets rouges !", + "ar": "الآن حاول الوصول بالشخصية إلى زر الهدف، مع تجنب الكائنات الحمراء!", + "de": "Versuchen Sie nun, die Figur zum Zielknopf zu bringen, während Sie die roten Objekte vermeiden!", "es": "¡Ahora intenta llevar al personaje al botón de objetivo, evitando los objetos rojos!", + "it": "Ora prova a portare il personaggio al pulsante obiettivo, evitando gli oggetti rossi!", + "ja": "赤いオブジェクトを避けながら、キャラクターをゴールボタンに移動させてみてください!", + "ko": "빨간 물체를 피하면서 캐릭터를 목표 버튼으로 이동시켜보세요!", + "pl": "Teraz spróbuj doprowadzić postać do przycisku celu, unikając czerwonych obiektów!", "pt": "Agora tente levar o personagem até o botão de objetivo, evitando os objetos vermelhos!", + "ru": "Теперь попробуйте довести персонажа до кнопки цели, избегая красных объектов!", + "sl": "Poskusite zdaj, da osebo pripeljete do ciljnega gumba, pri tem pa se izognete rdečim predmetom!", + "sq": "Tani provoni të merrni personazhin te butoni i qëllimit, duke shmangur objektet e kuqe!", "th": "ลองพยายามนำตัวละครไปยังปุ่มเป้าหมาย โดยหลีกเลี่ยงวัตถุสีแดง!", - "ar": "الآن حاول الوصول بالشخصية إلى زر الهدف، مع تجنب الكائنات الحمراء!" + "uk": "Тепер спробуйте довести персонажа до кнопки цілі, уникайте червоних об'єктів!", + "zh": "现在试着将角色带到目标按钮,同时避开红色物体!" } } ] @@ -71,10 +121,20 @@ "messageByLocale": { "en": "Let's go!", "fr": "C'est parti !", + "ar": "لنبدأ!", + "de": "Los geht's!", "es": "¡Vamos!", + "it": "Andiamo!", + "ja": "さあ、始めましょう!", + "ko": "출발!", + "pl": "Zaczynamy!", "pt": "Vamos lá!", + "ru": "Поехали!", + "sl": "Gremo!", + "sq": "Hajde shkojme!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "uk": "Почнемо!", + "zh": "让我们开始吧!" } } }, @@ -84,10 +144,20 @@ "messageByLocale": { "en": "This game is a platformer, where you have to get the character to the goal button, while avoiding the red objects.\n\nBut it's not finished yet, so let's complete it!", "fr": "Ce jeu est un jeu de plateforme, où vous devez amener le personnage jusqu'au bouton objectif, tout en évitant les objets rouges.\n\nMais il n'est pas encore terminé, alors terminons-le !", + "ar": "هذه لعبة منصات، حيث يتوجب عليك الوصول بالشخصية إلى زر الهدف، مع تجنب الكائنات الحمراء.\n\nولكنها لم تنته بعد، لذا هيّا نكملها!", + "de": "Dieses Spiel ist ein Plattformer, bei dem Sie die Figur zum Zielknopf bringen müssen, während Sie die roten Objekte vermeiden.\n\nAber es ist noch nicht fertig, also lass uns es fertigstellen!", "es": "Este juego es un juego de plataformas, donde tienes que llevar al personaje al botón de objetivo, evitando los objetos rojos.\n\nPero aún no está terminado, ¡así que vamos a completarlo!", + "it": "Questo gioco è un platformer, dove devi portare il personaggio al pulsante obiettivo, evitando gli oggetti rossi.\n\nMa non è ancora finito, quindi completiamolo!", + "ja": "このゲームはプラットフォーマーで、赤いオブジェクトを避けながら、キャラクターをゴールボタンに移動させる必要があります。\n\nしかし、まだ完成していないので、完成させましょう!", + "ko": "이 게임은 플랫포머 게임으로, 빨간 물체를 피하면서 캐릭터를 목표 버튼으로 이동시켜야 합니다.\n\n하지만 아직 끝나지 않았으니 완성해 보죠!", + "pl": "Ta gra to platformówka, w której musisz doprowadzić postać do przycisku celu, unikając czerwonych obiektów.\n\nAle jeszcze nie jest skończona, więc dokończmy ją!", "pt": "Este jogo é um jogo de plataforma, onde você tem que levar o personagem até o botão de objetivo, evitando os objetos vermelhos.\n\nMas ainda não está terminado, então vamos completá-lo!", + "ru": "Эта игра - платформер, в которой вам нужно довести персонажа до кнопки цели, избегая красных объектов.\n\nНо она еще не закончена, так что давайте завершим ее!", + "sl": "Ta igra je platformer, kjer morate osebo pripeljati do ciljnega gumba, pri tem pa se izogniti rdečim predmetom.\n\nAmpak še ni končano, zato ga dokončajmo!", + "sq": "Ky lojë është një platformë, ku duhet të merrni personazhin te butoni i qëllimit, duke shmangur objektet e kuqe.\n\nPor nuk është përfunduar ende, kështu që le të e përfundojmë!", "th": "เกมนี้เป็นเกมแพลตฟอร์มเมอร์ ที่คุณต้องพาตัวละครไปยังปุ่มเป้าหมาย โดยหลีกเลี่ยงวัตถุสีแดง\n\nแต่ยังไม่เสร็จสิ้น ดังนั้นเรามาทำให้เสร็จสิ้นกันเถอะ!", - "ar": "هذه لعبة منصات، حيث يتوجب عليك الوصول بالشخصية إلى زر الهدف، مع تجنب الكائنات الحمراء.\n\nولكنها لم تنته بعد، لذا هيّا نكملها!" + "uk": "Ця гра - платформер, в якій вам потрібно довести персонажа до кнопки цілі, уникайте червоних об'єктів.\n\nАле вона ще не закінчена, тому давайте завершимо її!", + "zh": "这个游戏是一个平台游戏,你必须将角色带到目标按钮,同时避开红色物体。\n\n但它还没有完成,所以让我们完成它!" } } } @@ -102,10 +172,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト**パネルを開きます。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **Obiekty**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **Объекты**.", + "sl": "Odpri **Predmete** ploščo.", + "sq": "Hapni panelin e **objekteve**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **Об'єкти**.", + "zh": "打开 **对象** 面板。" } }, "placement": "bottom" @@ -113,339 +193,53 @@ "skippable": true }, { - "elementToHighlightId": "#add-new-object-button", + "elementToHighlightId": "objectInObjectsList:platform", "nextStepTrigger": { - "presenceOfElement": "#new-object-dialog" + "presenceOfElement": "#object-editor-dialog" }, "tooltip": { "placement": "top", "description": { "messageByLocale": { - "en": "This game does not have any platforms for our character, so let's add multiple **3D boxes** to create a platform!", - "fr": "Ce jeu n'a pas de plateformes pour notre personnage, alors ajoutons plusieurs **boîtes 3D** pour créer une plateforme !", - "es": "Este juego no tiene ninguna plataforma para nuestro personaje, ¡así que agreguemos varias **cajas 3D** para crear una plataforma!", - "pt": "Este jogo não tem nenhuma plataforma para o nosso personagem, então vamos adicionar várias **caixas 3D** para criar uma plataforma!", - "th": "เกมนี้ไม่มีแพลตฟอร์มสำหรับตัวละครของเรา ดังนั้นเรามาเพิ่ม **กล่อง 3D** หลาย ๆ กล่องเพื่อสร้างแพลตฟอร์ม!", - "ar": "هذه اللعبة ليس لديها أي منصات لشخصيتنا، لذا هيّا نقوم بإضافة عدة **صناديق ثلاثية الأبعاد** لإنشاء منصة!" - } - } - } - }, - { - "elementToHighlightId": "#new-object-from-scratch-tab", - "nextStepTrigger": { - "presenceOfElement": "#object-category-Scene3D--Cube3DObject" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We'll create a 3D Box from scratch.", - "fr": "Nous allons créer une boîte 3D à partir de zéro.", - "es": "Crearemos una caja 3D desde cero.", - "pt": "Vamos criar uma caixa 3D do zero.", - "th": "เราจะสร้างกล่อง 3D จากต้นฉบับ", - "ar": "سنقوم بإنشاء صندوق ثلاثي الأبعاد من الصفر." - } - }, - "placement": "bottom" - }, - "skippable": true, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#object-category-Scene3D--Cube3DObject", - "nextStepTrigger": { - "presenceOfElement": "#object-name" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select **3D Box** object", - "fr": "Sélectionnez l'objet **Boîte 3D**", - "es": "Selecciona el objeto **Caja 3D**", - "pt": "Selecione o objeto **Caixa 3D**", - "th": "เลือกวัตถุ **กล่อง 3D**", - "ar": "تحديد الكائن **صندوق ثلاثي الأبعاد**" - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#object-name", - "nextStepTrigger": { - "valueEquals": "Platform" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the object name to **Platform**.", - "fr": "Utilisez **Platform** comme nom d'objet.", - "es": "Cambia el nombre del objeto a **Platform**.", - "pt": "Altere o nome do objeto para **Plataforma**.", - "th": "เปลี่ยนชื่อวัตถุเป็น **แพลตฟอร์ม**", - "ar": "تغيير اسم الكائن إلى **Platform**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-width", - "nextStepTrigger": { - "valueEquals": "128" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the width to **128**.", - "fr": "Changez la largeur à **128**.", - "es": "Cambia el ancho a **128**.", - "pt": "Altere a largura para **128**.", - "th": "เปลี่ยนความกว้างเป็น **128**", - "ar": "تغيير العرض إلى **128**." + "en": "We've created a 3D Box **$(platform)** for you! It's already configured with different textures\n\nLet's check it out by clicking on the 3 dot menu, or right click on **$(platform)**, and select **Edit object**.", + "fr": "Nous avons créé une boîte 3D **$(platform)** pour vous ! Elle est déjà configurée avec différentes textures\n\nAllons la voir en cliquant sur le menu à 3 points, ou en cliquant avec le bouton droit sur **$(platform)**, et en sélectionnant **Modifier l'objet**.", + "ar": "لقد قمنا بإنشاء صندوق 3D **$(platform)** لك! إنها مكونة بالفعل بمختلف القوام\n\nلنلقي نظرة عليها عن طريق النقر على القائمة المنسدلة المكونة من 3 نقاط، أو النقر بزر الفأرة الأيمن على **$(platform)**، واختيار **تحرير الكائن**.", + "de": "Wir haben eine 3D-Box **$(platform)** für Sie erstellt! Sie ist bereits mit verschiedenen Texturen konfiguriert\n\nLassen Sie uns das überprüfen, indem Sie auf das 3-Punkte-Menü klicken oder mit der rechten Maustaste auf **$(platform)** klicken und **Objekt bearbeiten** auswählen.", + "es": "¡Hemos creado una caja 3D **$(platform)** para ti! Ya está configurada con diferentes texturas\n\nVamos a verla haciendo clic en el menú de 3 puntos, o haciendo clic derecho en **$(platform)**, y seleccionando **Editar objeto**.", + "it": "Abbiamo creato una scatola 3D **$(platform)** per te! È già configurata con diverse texture\n\nDiamo un'occhiata facendo clic sul menu a 3 punti, o facendo clic con il pulsante destro su **$(platform)**, e selezionando **Modifica oggetto**.", + "ja": "3Dボックス **$(platform)** を作成しました! すでにさまざまなテクスチャで構成されています\n\n3点メニューをクリックするか、**$(platform)** を右クリックして **オブジェクトを編集** を選択して確認しましょう。", + "ko": "3D 상자 **$(platform)** 를 만들었습니다! 이미 다양한 텍스처로 구성되어 있습니다\n\n3 점 메뉴를 클릭하거나 **$(platform)**을 마우스 오른쪽 단추로 클릭하고 **객체 편집**을 선택하여 확인해 보겠습니다.", + "pl": "Stworzyliśmy dla ciebie 3D Box **$(platform)**! Jest już skonfigurowany z różnymi teksturami\n\nSprawdźmy to, klikając na menu 3 kropek lub klikając prawym przyciskiem myszy na **$(platform)** i wybierając **Edytuj obiekt**.", + "pt": "Criamos uma caixa 3D **$(platform)** para você! Já está configurada com diferentes texturas\n\nVamos dar uma olhada clicando no menu de 3 pontos, ou clicando com o botão direito em **$(platform)**, e selecionando **Editar objeto**.", + "ru": "Мы создали для вас 3D-бокс **$(platform)**! Он уже настроен с различными текстурами\n\nДавайте проверим это, нажав на меню из 3 точек или щелкнув правой кнопкой мыши на **$(platform)** и выбрав **Редактировать объект**.", + "sl": "Ustvarili smo 3D polje **$(platform)** za vas! Je že konfiguriran z različnimi teksturami\n\nPreverimo ga tako, da kliknemo na meni z 3 pikami ali z desno miškino tipko kliknemo na **$(platform)** in izberemo **Uredi predmet**.", + "sq": "Kemi krijuar një kuti 3D **$(platform)** për ju! Është tashmë e konfiguruar me tekstura të ndryshme\n\nLe të e kontrollojmë duke klikuar në menunë 3 pikësh, ose duke klikuar me të djathtën në **$(platform)**, dhe duke zgjedhur **Ndrysho objektin**.", + "th": "เราได้สร้างกล่อง 3D **$(platform)** ไว้ให้คุณแล้ว! มันถูกกำหนดค่าไว้แล้วด้วยเนื้อหาที่แตกต่าง\n\nมาดูกันโดยการคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(platform)** และเลือก **แก้ไขวัตถุ**", + "uk": "Ми створили для вас 3D-бокс **$(platform)**! Він вже налаштований з різними текстурами\n\nДавайте перевіримо це, натиснувши на меню з 3 крапками або клацнувши правою кнопкою миші на **$(platform)** і вибравши **Редагувати об'єкт**.", + "zh": "我们为您创建了一个3D Box **$(platform)**!它已经配置了不同的纹理\n\n让我们通过单击3点菜单或右键单击 **$(platform)** 并选择 **编辑对象** 来查看它。" } }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-height", - "nextStepTrigger": { - "valueEquals": "128" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the height to **128**.", - "fr": "Changez la hauteur à **128**.", - "es": "Cambia la altura a **128**.", - "pt": "Altere a altura para **128**.", - "th": "เปลี่ยนความสูงเป็น **128**", - "ar": "تغيير الارتفاع إلى **128**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-depth", - "nextStepTrigger": { - "valueEquals": "128" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Change the depth to **128**.", - "fr": "Changez la profondeur à **128**.", - "es": "Cambia la profundidad a **128**.", - "pt": "Altere a profundidade para **128**.", - "th": "เปลี่ยนความลึกเป็น **128**", - "ar": "تغيير العمق إلى **128**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-frontFaceResourceName", - "nextStepTrigger": { - "valueEquals": "BlackCheckered.png" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the front face of the box with the image **BlackCheckered.png**.", - "fr": "Mettez à jour la face avant de la boîte avec l'image **BlackCheckered.png**.", - "es": "Actualicemos la cara frontal de la caja con la imagen **BlackCheckered.png**.", - "pt": "Vamos atualizar a face frontal da caixa com a imagem **BlackCheckered.png**.", - "th": "มาอัปเดตหน้าด้านหน้าของกล่องด้วยภาพ **BlackCheckered.png**", - "ar": "لنقم بتحديث الوجه الأمامي للصندوق بالصورة **BlackCheckered.png**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-frontFaceResourceRepeat", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "**Check** the box to repeat the image.", - "fr": "**Cochez** la case pour répéter l'image.", - "es": "**Marca** la casilla para repetir la imagen.", - "pt": "**Marque** a caixa para repetir a imagem.", - "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**تحديد** الخانة لتكرار الصورة." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-leftFaceResourceName", - "nextStepTrigger": { - "valueEquals": "WhiteCheckered.png" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the left face of the box with the image **WhiteCheckered.png**.", - "fr": "Mettez à jour la face gauche de la boîte avec l'image **WhiteCheckered.png**.", - "es": "Actualicemos la cara izquierda de la caja con la imagen **WhiteCheckered.png**.", - "pt": "Vamos atualizar a face esquerda da caixa com a imagem **WhiteCheckered.png**.", - "th": "มาอัปเดตหน้าด้านซ้ายของกล่องด้วยภาพ **WhiteCheckered.png**", - "ar": "لنقم بتحديث الوجه الأيسر للصندوق بالصورة **WhiteCheckered.png**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-leftFaceResourceRepeat", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "**Check** the box to repeat the image.", - "fr": "**Cochez** la case pour répéter l'image.", - "es": "**Marca** la casilla para repetir la imagen.", - "pt": "**Marque** a caixa para repetir a imagem.", - "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**تحديد** الخانة لتكرار الصورة." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-rightFaceResourceName", - "nextStepTrigger": { - "valueEquals": "WhiteCheckered.png" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the right face of the box with the image **WhiteCheckered.png**.", - "fr": "Mettez à jour la face droite de la boîte avec l'image **WhiteCheckered.png**.", - "es": "Actualicemos la cara derecha de la caja con la imagen **WhiteCheckered.png**.", - "pt": "Vamos atualizar a face direita da caixa com a imagem **WhiteCheckered.png**.", - "th": "มาอัปเดตหน้าด้านขวาของกล่องด้วยภาพ **WhiteCheckered.png**", - "ar": "لنقم بتحديث الوجه الأيمن للصندوق بالصورة **WhiteCheckered.png**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-rightFaceResourceRepeat", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "**Check** the box to repeat the image.", - "fr": "**Cochez** la case pour répéter l'image.", - "es": "**Marca** la casilla para repetir la imagen.", - "pt": "**Marque** a caixa para repetir a imagem.", - "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**تحديد** الخانة لتكرار الصورة." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-topFaceResourceName", - "nextStepTrigger": { - "valueEquals": "WhiteCheckered.png" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the top face of the box with the image **WhiteCheckered.png**.", - "fr": "Mettez à jour la face du dessus de la boîte avec l'image **WhiteCheckered.png**.", - "es": "Actualicemos la cara superior de la caja con la imagen **WhiteCheckered.png**.", - "pt": "Vamos atualizar a face superior da caixa com a imagem **WhiteCheckered.png**.", - "th": "มาอัปเดตหน้าด้านบนของกล่องด้วยภาพ **WhiteCheckered.png**", - "ar": "لنقم بتحديث الوجه العلوي للصندوق بالصورة **WhiteCheckered.png**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-topFaceResourceRepeat", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "**Check** the box to repeat the image.", - "fr": "**Cochez** la case pour répéter l'image.", - "es": "**Marca** la casilla para repetir la imagen.", - "pt": "**Marque** a caixa para repetir a imagem.", - "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**تحديد** الخانة لتكرار الصورة." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-bottomFaceResourceName", - "nextStepTrigger": { - "valueEquals": "WhiteCheckered.png" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the bottom face of the box with the image **WhiteCheckered.png**.", - "fr": "Mettez à jour la face du dessous de la boîte avec l'image **WhiteCheckered.png**.", - "es": "Actualicemos la cara inferior de la caja con la imagen **WhiteCheckered.png**.", - "pt": "Vamos atualizar a face inferior da caixa com a imagem **WhiteCheckered.png**.", - "th": "มาอัปเดตหน้าด้านล่างของกล่องด้วยภาพ **WhiteCheckered.png**", - "ar": "لنقم بتحديث الوجه السفلي للصندوق بالصورة **WhiteCheckered.png**." - } - }, - "placement": "top" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#cube3d-object-bottomFaceResourceRepeat", - "nextStepTrigger": { - "valueHasChanged": true - }, - "tooltip": { - "description": { + "touchDescription": { "messageByLocale": { - "en": "**Check** the box to repeat the image.", - "fr": "**Cochez** la case pour répéter l'image.", - "es": "**Marca** la casilla para repetir la imagen.", - "pt": "**Marque** a caixa para repetir a imagem.", - "th": "**เลือก** กล่องเพื่อทำซ้ำภาพ", - "ar": "**تحديد** الخانة لتكرار الصورة." + "en": "We've created a 3D Box **$(platform)** for you! It's already configured with different textures\n\nLet's check it out by selecting, then long press on **$(platform)**, then select **Edit object**.", + "fr": "Nous avons créé une boîte 3D **$(platform)** pour vous ! Elle est déjà configurée avec différentes textures\n\nAllons la voir en la sélectionnant, puis en appuyant longuement sur **$(platform)**, puis en sélectionnant **Modifier l'objet**.", + "ar": "لقد قمنا بإنشاء صندوق 3D **$(platform)** لك! إنها مكونة بالفعل بمختلف القوام\n\nلنلقي نظرة عليها عن طريق تحديدها، ثم الضغط المطول على **$(platform)**، ثم اختيار **تحرير الكائن**.", + "de": "Wir haben eine 3D-Box **$(platform)** für Sie erstellt! Sie ist bereits mit verschiedenen Texturen konfiguriert\n\nLassen Sie uns das überprüfen, indem Sie **$(platform)** auswählen, dann lange drücken, und **Objekt bearbeiten** auswählen.", + "es": "¡Hemos creado una caja 3D **$(platform)** para ti! Ya está configurada con diferentes texturas\n\nVamos a verla seleccionándola, luego manteniendo presionado **$(platform)**, y seleccionando **Editar objeto**.", + "it": "Abbiamo creato una scatola 3D **$(platform)** per te! È già configurata con diverse texture\n\nDiamo un'occhiata selezionandola, quindi premendo a lungo su **$(platform)**, quindi selezionando **Modifica oggetto**.", + "ja": "3Dボックス **$(platform)** を作成しました! すでにさまざまなテクスチャで構成されています\n\n**$(platform)** を選択し、長押しして **オブジェクトを編集** を選択して確認しましょう。", + "ko": "3D 상자 **$(platform)** 를 만들었습니다! 이미 다양한 텍스처로 구성되어 있습니다\n\n**$(platform)**을 선택한 다음 길게 눌러 **객체 편집**을 선택하여 확인해 보겠습니다.", + "pl": "Stworzyliśmy dla ciebie 3D Box **$(platform)**! Jest już skonfigurowany z różnymi teksturami\n\nSprawdźmy to, wybierając, a następnie długie naciśnięcie **$(platform)**, a następnie wybierając **Edytuj obiekt**.", + "pt": "Criamos uma caixa 3D **$(platform)** para você! Já está configurada com diferentes texturas\n\nVamos dar uma olhada selecionando, em seguida, pressionando e segurando **$(platform)**, e selecionando **Editar objeto**.", + "ru": "Мы создали для вас 3D-бокс **$(platform)**! Он уже настроен с различными текстурами\n\nДавайте проверим это, выбрав, затем удерживая **$(platform)**, затем выбрав **Редактировать объект**.", + "sl": "Ustvarili smo 3D polje **$(platform)** za vas! Je že konfiguriran z različnimi teksturami\n\nPreverimo ga tako, da ga izberemo, nato pa dolgo pritisnemo **$(platform)** in izberemo **Uredi predmet**.", + "sq": "Kemi krijuar një kuti 3D **$(platform)** për ju! Është tashmë e konfiguruar me tekstura të ndryshme\n\nLe të e kontrollojmë duke zgjedhur, pastaj duke shtypur dhe mbajtur **$(platform)**, dhe duke zgjedhur **Ndrysho objektin**.", + "th": "เราได้สร้างกล่อง 3D **$(platform)** ไว้ให้คุณแล้ว! มันถูกกำหนดค่าไว้แล้วด้วยเนื้อหาที่แตกต่าง\n\nมาดูกันโดยการเลือก แล้วกดค้างที่ **$(platform)** แล้วเลือก **แก้ไขวัตถุ**", + "uk": "Ми створили для вас 3D-бокс **$(platform)**! Він вже налаштований з різними текстурами\n\nДавайте перевіримо це, вибравши, а потім утримуючи **$(platform)**, а потім вибравши **Редагувати об'єкт**.", + "zh": "我们为您创建了一个3D Box **$(platform)**!它已经配置了不同的纹理\n\n让我们通过选择,然后长按 **$(platform)**,然后选择 **编辑对象** 来查看它。" } } - }, - "isOnClosableDialog": true + } }, { "elementToHighlightId": "#behaviors-tab", @@ -455,12 +249,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Perfect! Now let's make this object a platform by adding a **behavior**.", - "fr": "Parfait ! Maintenant, faisons de cet objet une plateforme en ajoutant un **comportement**.", - "es": "¡Perfecto! Ahora hagamos de este objeto una plataforma añadiendo un **comportamiento**.", - "pt": "Perfeito! Agora vamos fazer deste objeto uma plataforma adicionando um **comportamento**.", - "th": "ดีมาก! มาทำให้วัตถุนี้เป็นแพลตฟอร์มโดยการเพิ่ม **พฤติกรรม**", - "ar": "ممتاز! الآن لنجعل هذا الكائن منصة عن طريق إضافة **سلوك**." + "en": "You can see that the box has already all faces configured! Now let's make this object a platform by adding a **behavior**.", + "fr": "Vous pouvez voir que la boîte a déjà toutes ses faces de configurées ! Maintenant, faisons de cet objet une plateforme en ajoutant un **comportement**.", + "ar": "يمكنك رؤية أن الصندوق قد تم تكوين جميع الوجوه بالفعل! الآن دعونا نجعل هذا الكائن منصة عن طريق إضافة **سلوك**.", + "de": "Sie können sehen, dass die Box bereits alle Seiten konfiguriert hat! Lassen Sie uns dieses Objekt nun zu einer Plattform machen, indem wir ein **Verhalten** hinzufügen.", + "es": "¡Puedes ver que la caja ya tiene todas las caras configuradas! Ahora hagamos de este objeto una plataforma añadiendo un **comportamiento**.", + "it": "Puoi vedere che la scatola ha già tutte le facce configurate! Ora rendiamo questo oggetto una piattaforma aggiungendo un **comportamento**.", + "ja": "ボックスにはすでにすべての面が構成されていることがわかります! これを **動作** を追加することで、このオブジェクトをプラットフォームにしましょう。", + "ko": "상자에 이미 모든 면이 구성되어 있는 것을 볼 수 있습니다! 이제 **동작**을 추가하여 이 객체를 플랫폼으로 만들어 보겠습니다.", + "pl": "Możesz zobaczyć, że pudełko ma już wszystkie strony skonfigurowane! Teraz zróbmy z tego obiektu platformę, dodając **zachowanie**.", + "pt": "Você pode ver que a caixa já tem todas as faces configuradas! Agora vamos fazer deste objeto uma plataforma adicionando um **comportamento**.", + "ru": "Вы можете видеть, что у коробки уже все грани настроены! Теперь давайте сделаем этот объект платформой, добавив **поведение**.", + "sl": "Vidite, da je škatla že vse strani konfigurirana! Sedaj naredimo ta predmet platformo z dodajanjem **vedenja**.", + "sq": "Mund të shihni se kutia ka tashmë të gjitha faqet e konfiguruara! Tani bëjmë këtë objekt një platformë duke shtuar një **sjellje**.", + "th": "คุณสามารถเห็นว่ากล่องมีทุกด้านถูกกำหนดค่าไว้แล้ว! ตอนนี้เราจะทำให้วัตถุนี้เป็นแพลตฟอร์มโดยการเพิ่ม **พฤติกรรม**", + "uk": "Ви можете побачити, що коробка вже має всі грані налаштовані! Тепер давайте зробимо цей об'єкт платформою, додавши **поведінку**.", + "zh": "您可以看到盒子已经配置了所有的面!现在让我们通过添加 **行为** 来使这个对象成为一个平台。" } }, "placement": "bottom" @@ -478,10 +282,20 @@ "messageByLocale": { "en": "Let's add a new behavior", "fr": "Ajoutons un nouveau comportement", + "ar": "هيّا نقوم بإضافة سلوك جديد.", + "de": "Lassen Sie uns ein neues Verhalten hinzufügen", "es": "Añadamos un nuevo comportamiento", + "it": "Aggiungiamo un nuovo comportamento", + "ja": "新しい動作を追加しましょう", + "ko": "새로운 동작을 추가해 보겠습니다", + "pl": "Dodajmy nowe zachowanie", "pt": "Vamos adicionar um novo comportamento", + "ru": "Добавим новое поведение", + "sl": "Dodajmo novo vedenje", + "sq": "Shtojmë një sjellje të re", "th": "มาเพิ่มพฤติกรรมใหม่", - "ar": "هيّا نقوم بإضافة سلوك جديد." + "uk": "Додамо нову поведінку", + "zh": "让我们添加一个新的行为" } } }, @@ -497,10 +311,20 @@ "messageByLocale": { "en": "Select the **Platform** behavior.", "fr": "Sélectionnez le comportement **Plateforme**.", + "ar": "تحديد السلوك **منصة**.", + "de": "Wählen Sie das **Plattform**-Verhalten aus.", "es": "Selecciona el comportamiento **Plataforma**.", + "it": "Seleziona il comportamento **Piattaforma**.", + "ja": "**プラットフォーム**動作を選択します。", + "ko": "**플랫폼** 동작을 선택해 보겠습니다.", + "pl": "Wybierz zachowanie **Platforma**.", "pt": "Selecione o comportamento **Plataforma**.", + "ru": "Выберите поведение **Платформа**.", + "sl": "Izberite vedenje **Platforma**.", + "sq": "Zgjidh sjelljen **Platformë**.", "th": "เลือกพฤติกรรม **แพลตฟอร์ม**", - "ar": "تحديد السلوك **منصة**." + "uk": "Виберіть поведінку **Платформа**.", + "zh": "选择 **平台** 行为。" } } }, @@ -516,174 +340,26 @@ "messageByLocale": { "en": "That's it! Now our 3D platform is ready!", "fr": "C'est tout ! Maintenant notre plateforme 3D est prête !", + "ar": "هذا كل شيء! الآن منصتنا ثلاثية الأبعاد جاهزة!", + "de": "Das ist es! Jetzt ist unsere 3D-Plattform bereit!", "es": "¡Eso es! ¡Ahora nuestra plataforma 3D está lista!", + "it": "È tutto! Ora la nostra piattaforma 3D è pronta!", + "ja": "それでおしまいです! これで3Dプラットフォームが完成しました!", + "ko": "그게 다입니다! 이제 3D 플랫폼이 준비되었습니다!", + "pl": "To wszystko! Teraz nasza platforma 3D jest gotowa!", "pt": "É isso aí! Agora nossa plataforma 3D está pronta!", + "ru": "Вот и все! Теперь наша 3D-платформа готова!", + "sl": "To je to! Zdaj je naša 3D platforma pripravljena!", + "sq": "Kështu është! Tani platforma jonë 3D është gati!", "th": "เสร็จแล้ว! ตอนนี้แพลตฟอร์ม 3D ของเราพร้อมแล้ว!", - "ar": "هذا كل شيء! الآن منصتنا ثلاثية الأبعاد جاهزة!" - } - } - }, - "isOnClosableDialog": true, - "mapProjectData": { - "platform": "sceneLastObjectName:gameScene" - } - }, - { - "elementToHighlightId": "editorTab:gameScene:EventsSheet", - "nextStepTrigger": { - "presenceOfElement": "#events-editor[data-active]" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Finally, let's ensure that the platform is exactly below the character. Open the **Events Sheet** of the $(gameScene) scene.", - "fr": "Enfin, assurons-nous que la plateforme est exactement en dessous du personnage. Ouvrez la **Feuille d'événements** de la scène $(gameScene).", - "es": "Finalmente, asegurémonos de que la plataforma esté exactamente debajo del personaje. Abre la **Hoja de eventos** de la escena $(gameScene).", - "pt": "Finalmente, vamos garantir que a plataforma esteja exatamente abaixo do personagem. Abra a **Planilha de eventos** da cena $(gameScene).", - "th": "ในที่สุด มาตรวจสอบให้แน่ใจว่าแพลตฟอร์มอยู่ใต้ตัวละครอย่างแน่นอน ให้เปิด **แผ่นงานเหตุการณ์** ของฉาก $(gameScene)", - "ar": "أخيرًا ، هيّا نتأكد من أن المنصة تقع تحت الشخصية بالضبط. فتح **صفحة أحداث** المشهد $(gameScene)." - } - }, - "placement": "bottom" - } - }, - { - "id": "SwitchToEvents1", - "elementToHighlightId": "#events-editor[data-active] #event-2-actions #add-action-button-empty", - "nextStepTrigger": { - "presenceOfElement": "#instruction-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's set the depth of the platform at the beginning of the scene. Click on the **Add an action** button.", - "fr": "Définissons la profondeur de la plateforme au début de la scène. Cliquez sur le bouton **Ajouter une action**.", - "es": "Establezcamos la profundidad de la plataforma al comienzo de la escena. Haz clic en el botón **Añadir una acción**.", - "pt": "Vamos definir a profundidade da plataforma no início da cena. Clique no botão **Adicionar uma ação**.", - "th": "มาตั้งค่าความลึกของแพลตฟอร์มตอนเริ่มต้นของฉาก ให้คลิกที่ปุ่ม **เพิ่มการกระทำ**", - "ar": "هيّا نضبط عمق المنصة في بداية المشهد. النقر على الزر **إضافة إجراء**." - } - } - } - }, - { - "elementToHighlightId": "objectInObjectOrResourceSelector:platform", - "nextStepTrigger": { - "presenceOfElement": "#instruction-item-Scene3D--Base3DBehavior--SetZ" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select **$(platform)**.", - "fr": "Sélectionnez **$(platform)**.", - "es": "Seleccione **$(platform)**.", - "pt": "Selecione **$(platform)**.", - "th": "เลือก **$(platform)**", - "ar": "تحديد **$(platform)**." + "uk": "Ось і все! Тепер наша 3D-платформа готова!", + "zh": "就是这样!现在我们的3D平台准备好了!" } } }, "isOnClosableDialog": true }, { - "elementToHighlightId": "#instruction-item-Scene3D--Base3DBehavior--SetZ", - "nextStepTrigger": { - "presenceOfElement": "#parameter-2-operator-field" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select the action **Z (elevation)**.", - "fr": "Sélectionnez l'action **Z (élévation)**.", - "es": "Selecciona la acción **Z (elevación)**.", - "pt": "Selecione a ação **Z (elevação)**.", - "th": "เลือกการกระทำ **Z (ความสูง)**", - "ar": "تحديد الإجراء **Z (الارتفاع)**." - } - } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#parameter-2-operator-field", - "nextStepTrigger": { - "valueEquals": "=" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We want to update the elevation, so let's select **= (set to)**.", - "fr": "Nous voulons mettre à jour l'élévation, sélectionnons donc **= (définir à)**.", - "es": "Queremos actualizar la elevación, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos atualizar a elevação, então vamos selecionar **= (definir para)**.", - "th": "เราต้องการอัปเดตความสูง ดังนั้นให้เลือก **= (ตั้งค่าเป็น)**", - "ar": "نريد تحديث الارتفاع ، لذلك هيّا نختار **= (تعيين إلى)**." - } - }, - "placement": "bottom" - }, - "skippable": true, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#parameter-3-expression-field", - "nextStepTrigger": { - "valueEquals": "-64" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's set the elevation to **-64**.", - "fr": "Définissons l'élévation à **-64**.", - "es": "Establezcamos la elevación en **-64**.", - "pt": "Vamos definir a elevação para **-64**.", - "th": "มาตั้งค่าความสูงเป็น **-64**", - "ar": "هيّا نضبط الارتفاع على **-64**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#instruction-editor-dialog #ok-button", - "nextStepTrigger": { - "absenceOfElement": "#instruction-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Nice! Now let's save this.", - "fr": "Bien ! Enregistrons maintenant cela.", - "es": "¡Bien! Ahora guardemos esto.", - "pt": "Legal! Agora vamos salvar isso.", - "th": "ดีมาก! มาบันทึกกันเถอะ", - "ar": "جميل! الآن هيّا نحفظ هذا." - } - }, - "placement": "top" - } - }, - { - "elementToHighlightId": "editorTab:gameScene:Scene", - "nextStepTrigger": { - "editorIsActive": "gameScene:Scene" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's get back to the **scene** to create our platform.", - "fr": "Retournons à la **scène** pour ajouter notre plateforme.", - "es": "Regresemos a la **escena** para crear nuestra plataforma.", - "pt": "Vamos voltar para a **cena** para criar nossa plataforma.", - "th": "มากลับไปที่ **ฉาก** เพื่อสร้างแพลตฟอร์มของเรา", - "ar": "لنعد إلى **المشهد** لإنشاء منصتنا." - } - } - } - }, - { - "id": "SwitchToScene1", "elementToHighlightId": "objectInObjectsList:platform", "nextStepTrigger": { "instanceAddedOnScene": "platform" @@ -693,20 +369,40 @@ "messageByLocale": { "en": "Drag $(platform) from the menu to the canvas.", "fr": "Faites glisser $(platform) du menu au canvas.", + "ar": "سحب $(platform) من القائمة إلى المشهد.", + "de": "Ziehen Sie $(platform) aus dem Menü auf die Leinwand.", "es": "Arrastra $(platform) desde el menú al lienzo.", + "it": "Trascina $(platform) dal menu alla tela.", + "ja": "メニューから $(platform) をキャンバスにドラッグします。", + "ko": "메뉴에서 $(platform)을 캔버스로 끌어다 놓습니다.", + "pl": "Przeciągnij $(platform) z menu na płótno.", "pt": "Arraste $(platform) do menu para o canvas.", + "ru": "Перетащите $(platform) из меню на холст.", + "sl": "Povlecite $(platform) iz menija na platno.", + "sq": "Tërhiqni $(platform) nga menuja në kanavacë.", "th": "ลาก $(platform) จากเมนูไปยังแคนวาส", - "ar": "سحب $(platform) من القائمة إلى المشهد." + "uk": "Перетягніть $(platform) з меню на полотно.", + "zh": "从菜单将 $(platform) 拖到画布上。" } }, "touchDescription": { "messageByLocale": { "en": "**Select** then **drag** $(platform) into the **scene**.", "fr": "**Sélectionnez** puis **faites glisser** $(platform) du menu au canvas.", + "ar": "**تحديد** ثم **سحب** الـ $(platform) إلى **المشهد**.", + "de": "**Wählen** und **ziehen** Sie $(platform) aus dem Menü auf die **Leinwand**.", "es": "**Seleccione** y **arrastrar** $(platform) al **escenario**.", + "it": "**Seleziona** quindi **trascina** $(platform) nella **tela**.", + "ja": "**$(platform)** を選択して **キャンバス** に**ドラッグ**します。", + "ko": "**$(platform)**을 선택한 다음 **캔버스**로 **드래그**하십시오.", + "pl": "**Wybierz** a następnie **przeciągnij** $(platform) na **płótno**.", "pt": "**Selecione** e **arraste** $(platform) para a **cena**.", + "ru": "**Выберите** и **перетащите** $(platform) в **сцену**.", + "sl": "**Izberite** in **povlecite** $(platform) v **prizorišče**.", + "sq": "**Zgjidhni** pastaj **tërhiqni** $(platform) në **skenë**.", "th": "**เลือก** แล้ว **ลาก** $(platform) ไปยัง **ฉาก**", - "ar": "**تحديد** ثم **سحب** الـ $(platform) إلى **المشهد**." + "uk": "**Виберіть** потім **перетягніть** $(platform) в **сцену**.", + "zh": "**选择** 然后 **拖动** $(platform) 到 **场景**。" } }, "placement": "left" @@ -718,10 +414,20 @@ "messageByLocale": { "en": "I'm done", "fr": "J'ai terminé", + "ar": "انتهيت", + "de": "Ich bin fertig", "es": "He terminado", + "it": "Ho finito", + "ja": "完了", + "ko": "완료", + "pl": "Skończyłem", "pt": "Eu terminei", + "ru": "Я закончил", + "sl": "Končal sem", + "sq": "Përfundoj", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "uk": "Я закінчив", + "zh": "我完成了" } } }, @@ -729,12 +435,22 @@ "standalone": true, "description": { "messageByLocale": { - "en": "Let's place $(platform) below our character.", - "fr": "Plaçons $(platform) en dessous de notre personnage.", - "es": "Coloquemos $(platform) debajo de nuestro personaje.", - "pt": "Vamos colocar $(platform) abaixo do nosso personagem.", - "th": "มาวาง $(platform) ใต้ตัวละครของเรา", - "ar": "هيّا نقوم بإدراج $(platform) أسفل شخصيتنا." + "en": "Let's place $(platform) below our character.\n\nYou can resize it by dragging the handles!", + "fr": "Plaçons $(platform) en dessous de notre personnage.\n\nVous pouvez la redimensionner en utilisant les petits carrés !", + "ar": "لنضع $(platform) أسفل شخصيتنا.\n\nيمكنك تغيير حجمها عن طريق سحب الأيادي!", + "de": "Platzieren wir $(platform) unter unserem Charakter.\n\nSie können es vergrößern, indem Sie die Griffe ziehen!", + "es": "Coloquemos $(platform) debajo de nuestro personaje.\n\n¡Puedes redimensionarla arrastrando los tiradores!", + "it": "Mettiamo $(platform) sotto il nostro personaggio.\n\nPuoi ridimensionarla trascinando le maniglie!", + "ja": "$(platform) をキャラクターの下に置きましょう。\n\nハンドルをドラッグしてサイズを変更できます!", + "ko": "$(platform)을 캐릭터 아래에 놓아 보겠습니다.\n\n손잡이를 끌어서 크기를 조절할 수 있습니다!", + "pl": "Umieśćmy $(platform) poniżej naszej postaci.\n\nMożesz zmienić jego rozmiar, przeciągając za uchwyty!", + "pt": "Vamos colocar $(platform) abaixo do nosso personagem.\n\nVocê pode redimensioná-la arrastando as alças!", + "ru": "Давайте поместим $(platform) под нашего персонажа.\n\nВы можете изменить его размер, перетаскивая за ручки!", + "sl": "Postavimo $(platform) pod naš lik.\n\nVelikost lahko spremenite tako, da povlečete ročaje!", + "sq": "Le të vendosim $(platform) poshtë personazhit tonë.\n\nMund ta rregulloni madhësinë duke e tërhequr me dorë!", + "th": "มาวาง $(platform) ด้านล่างตัวละครของเรา\n\nคุณสามารถปรับขนาดได้โดยลากจับ!", + "uk": "Давайте розмістимо $(platform) під нашим персонажем.\n\nВи можете змінити його розмір, перетягуючи за ручки!", + "zh": "让我们把 $(platform) 放在我们的角色下面。\n\n您可以通过拖动手柄来调整它的大小!" } }, "image": { @@ -750,12 +466,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", - "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." + "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", + "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", + "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", + "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", + "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", + "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" diff --git a/tutorials/in-app/plinkoMultiplier.json b/tutorials/in-app/plinkoMultiplier.json index 81a6c3b..24c6add 100644 --- a/tutorials/in-app/plinkoMultiplier.json +++ b/tutorials/in-app/plinkoMultiplier.json @@ -14,7 +14,24 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "availableLocales": [ + "en", + "fr", + "ar", + "de", + "es", + "it", + "ja", + "ko", + "pl", + "pt", + "th", + "ru", + "sl", + "sq", + "uk", + "zh" + ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/plinkoMultiplier/game.json", "initialProjectData": { "gameScene": "GameScene", @@ -27,42 +44,82 @@ "content": [ { "messageByLocale": { - "en": "# You've finished adding a score multiplier to your game!", - "fr": "# Vous avez terminé d'ajouter un multiplicateur de score à votre jeu !", - "es": "# ¡Has terminado de agregar un multiplicador de puntuación a tu juego!", - "pt": "# Você terminou de adicionar um multiplicador de pontuação ao seu jogo!", - "th": "คุณได้เพิ่ม score multiplier ในเกมของคุณสำเร็จแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "en": "# You've finished this lesson!", + "fr": "# Vous avez terminé cette leçon !", + "ar": "# لقد أنهيت هذا الدرس!", + "de": "# Du hast diese Lektion abgeschlossen!", + "es": "# ¡Has terminado esta lección!", + "it": "# Hai finito questa lezione!", + "ja": "# このレッスンは終了しました!", + "ko": "# 이 레슨을 완료했습니다!", + "pl": "# Ukończyłeś tę lekcję!", + "pt": "# Você terminou esta lição!", + "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", + "ru": "# Вы завершили этот урок!", + "sl": "# Končali ste to lekcijo!", + "sq": "# Ju keni perfunduar kete mesim!", + "uk": "# Ви завершили цей урок!", + "zh": "# 你完成了这节课!" } }, { "messageByLocale": { - "en": "Well done, in this tutorial you've learned:", - "fr": "Bien joué, dans ce tutoriel vous avez appris :", - "es": "¡Bien hecho, en este tutorial aprendiste:", - "pt": "Bem feito, neste tutorial você aprendeu:", - "th": "ทำได้ดีเยี่ยม สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "en": "Well done, in this tutorial you've learned how to:", + "fr": "Bien joué, voici ce que vous avez appris :", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:", + "de": "Gut gemacht, in diesem Tutorial hast du geler:", + "es": "¡Bien hecho, en este tutorial has aprendido cómo:", + "it": "Ben fatto, in questo tutorial hai imparato come:", + "ja": "このチュートリアルでは、次のことを学びました:", + "ko": "이 튜토리얼에서 다음을 배웠습니다.", + "pl": "Dobrze, w tym samouczku nauczyłeś się, jak:", + "pt": "Bom trabalho, neste tutorial você aprendeu como:", + "ru": "Хорошо, в этом уроке вы узнали, как:", + "sl": "Bravo, v tem vadnem programu ste se naučili, kako:", + "sq": "Bravo, ne kete mesim ju keni mesuar si te:", + "th": "ทำได้ดีเยี่ยม, ในบทเรียนนี้คุณได้เรียนรู้วิธี:", + "uk": "Добре, в цьому уроці ви дізналися, як:", + "zh": "做得好,在本教程中,您学会了如何:" } }, { "messageByLocale": { "en": "- How to create a scene variable\n\n- How to update a scene variable\n\n- How to use a scene variable in an expression", "fr": "- Comment créer une variable de scène\n\n- Comment mettre à jour une variable de scène\n\n- Comment utiliser une variable de scène dans une expression", + "ar": "- إنشاء متغير مشهد\n\n- تحديث متغير المشهد\n\n- استخدام متغير المشهد كتعبير", + "de": "- Eine Szenenvariable erstellen\n\n- Eine Szenenvariable aktualisieren\n\n- Eine Szenenvariable in einem Ausdruck verwenden", "es": "- Cómo crear una variable de escena\n\n- Cómo actualizar una variable de escena\n\n- Cómo usar una variable de escena en una expresión", + "it": "- Come creare una variabile di scena\n\n- Come aggiornare una variabile di scena\n\n- Come utilizzare una variabile di scena in un'espressione", + "ja": "- シーン変数の作成方法\n\n- シーン変数の更新方法\n\n- シーン変数を式で使用する方法", + "ko": "- 씬 변수를 만드는 방법\n\n- 씬 변수를 업데이트하는 방법\n\n- 씬 변수를 표현식에서 사용하는 방법", + "pl": "- Jak utworzyć zmienną sceny\n\n- Jak zaktualizować zmienną sceny\n\n- Jak użyć zmiennej sceny w wyrażeniu", "pt": "- Como criar uma variável de cena\n\n- Como atualizar uma variável de cena\n\n- Como usar uma variável de cena em uma expressão", + "ru": "- Как создать переменную сцены\n\n- Как обновить переменную сцены\n\n- Как использовать переменную сцены в выражении", + "sl": "- Kako ustvariti spremenljivko scene\n\n- Kako posodobiti spremenljivko scene\n\n- Kako uporabiti spremenljivko scene v izrazu", + "sq": "- Si të krijoni një variabël skene\n\n- Si të përditësoni një variabël skene\n\n- Si të përdorni një variabël skene në një shprehje", "th": "- วิธีสร้างตัวแปรของ scene\n\n- วิธีอัพเดทตัวแปรของ scene\n\n- วิธีใช้ตัวแปรของ scene ใน expression", - "ar": "- إنشاء متغير مشهد\n\n- تحديث متغير المشهد\n\n- استخدام متغير المشهد كتعبير" + "uk": "- Як створити змінну сцени\n\n- Як оновити змінну сцени\n\n- Як використовувати змінну сцени в виразі", + "zh": "- 如何创建场景变量\n\n- 如何更新场景变量\n\n- 如何在表达式中使用场景变量" } }, { "messageByLocale": { - "en": "You can keep adding stuff to this game or publish it and share it with your friends to see who gets the highest score!", - "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier et le partager avec vos amis pour voir qui obtient le meilleur score !", - "es": "¡Puedes seguir agregando cosas a este juego o publicarlo y compartirlo con tus amigos para ver quién obtiene la puntuación más alta!", - "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo e compartilhá-lo com seus amigos para ver quem obtém a pontuação mais alta!", - "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่กับเพื่อนๆของคุณเลยก็ได้ แล้วมาดูกัน ใครจะทำคะแนนได้สูงที่สุด!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "en": "You can keep adding stuff to this game or publish it!", + "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!", + "de": "Sie können weiterhin Dinge zu diesem Spiel hinzufügen oder es veröffentlichen!", + "es": "¡Puedes seguir agregando cosas a este juego o publicarlo!", + "it": "Puoi continuare ad aggiungere cose a questo gioco o pubblicarlo!", + "ja": "このゲームにさらに要素を追加するか、公開することができます!", + "ko": "이 게임에 더 많은 것을 추가하거나 게시할 수 있습니다!", + "pl": "Możesz dalej dodawać rzeczy do tej gry lub ją opublikować!", + "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "ru": "Вы можете продолжать добавлять вещи в эту игру или опубликовать ее!", + "sl": "Lahko še naprej dodajate stvari v to igro ali jo objavite!", + "sq": "Ju mund te vazhdoni te shtoni gjera te kete loje, ose publikoje!", + "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", + "uk": "Ви можете продовжувати додавати речі до цієї гри або опублікувати її!", + "zh": "您可以继续为这个游戏添加东西,或者发布它!" } } ] @@ -79,10 +136,20 @@ "messageByLocale": { "en": "This game uses a leaderboard! let's **login** so we can set it up automatically!\n\nYou can skip this step if you don't want to use a leaderboard, by closing the leaderboard dialog.", "fr": "Ce jeu utilise un classement ! Connectons-nous **pour que nous puissions le configurer automatiquement !**\n\nVous pouvez ignorer cette étape si vous ne souhaitez pas utiliser de classement, en fermant la boîte de dialogue du classement.", + "ar": "هذه اللعبة تستخدم لوحة صدارة! هيّا نقوم ب**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا لم يكن لديك الرغبة في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة.", + "de": "Dieses Spiel verwendet eine Bestenliste! Lass uns **einloggen**, damit wir sie automatisch einrichten können!\n\nDu kannst diesen Schritt überspringen, wenn du keine Bestenliste verwenden möchtest, indem du das Bestenlisten-Dialogfeld schließt.", "es": "¡Este juego usa una tabla de clasificación! ¡**Inicia sesión** para que podamos configurarlo automáticamente!\n\nPuedes omitir este paso si no quieres usar una tabla de clasificación, cerrando el cuadro de diálogo de la tabla de clasificación.", + "it": "Questo gioco utilizza una classifica! Effettua il **login** in modo da poterla configurare automaticamente!\n\nPuoi saltare questo passaggio se non vuoi utilizzare una classifica, chiudendo la finestra di dialogo della classifica.", + "ja": "このゲームはリーダーボードを使用しています!**ログイン**して自動的に設定できるようにしましょう!\n\nリーダーボードを使用したくない場合は、リーダーボードダイアログを閉じることでこのステップをスキップできます。", + "ko": "이 게임은 리더보드를 사용합니다! **로그인**하여 자동으로 설정할 수 있도록 합시다!\n\n리더보드를 사용하고 싶지 않다면 리더보드 대화 상자를 닫아 이 단계를 건너뛸 수 있습니다.", + "pl": "Ta gra wykorzystuje tablicę wyników! Zaloguj się, abyśmy mogli ją skonfigurować automatycznie!\n\nMożesz pominąć ten krok, jeśli nie chcesz korzystać z tablicy wyników, zamykając okno dialogowe tablicy wyników.", "pt": "Este jogo usa uma tabela de classificação! Vamos **entrar** para que possamos configurá-lo automaticamente!\n\nVocê pode pular esta etapa se não quiser usar uma tabela de classificação, fechando a caixa de diálogo da tabela de classificação.", + "ru": "Эта игра использует таблицу лидеров! Давайте **войдем**, чтобы мы могли настроить ее автоматически!\n\nВы можете пропустить этот шаг, если не хотите использовать таблицу лидеров, закрыв окно диалога таблицы лидеров.", + "sl": "Ta igra uporablja lestvico! Prijavimo se, da jo lahko nastavimo samodejno!\n\nČe ne želite uporabljati lestvice, lahko ta korak preskočite tako, da zaprete pogovorno okno lestvice.", + "sq": "Kjo lojë përdor një tabelë të klasifikimit! Le të **hyni** që ta mund të konfigurojmë atë automatikisht!\n\nJu mund të kaloni këtë hap nëse nuk doni të përdorni një tabelë klasifikimi, duke mbyllur dritaren e dialogut të tabelës së klasifikimit.", "th": "เกมนี้ใช้ leaderboard! ให้เรา **เข้าสู่ระบบ** เพื่อที่จะตั้งค่า leaderboard ให้เราอัตโนมัติ!\n\nคุณสามารถข้ามขั้นตอนนี้ได้หากคุณไม่ต้องการใช้ leaderboard โดยการปิดกล่องโต้ตอบ leaderboard", - "ar": "هذه اللعبة تستخدم لوحة صدارة! هيّا نقوم ب**تسجيل الدخول** حتى نتمكن من إعداده تلقائيًا!\n\nيمكنك تخطي هذه الخطوة إذا لم يكن لديك الرغبة في استخدام لوحة صدارة، من خلال إغلاق نافذة لوحات الصدارة." + "uk": "Ця гра використовує таблицю лідерів! Давайте **увійдемо**, щоб ми могли налаштувати її автоматично!\n\nВи можете пропустити цей крок, якщо не хочете використовувати таблицю лідерів, закривши вікно діалогу таблиці лідерів.", + "zh": "这个游戏使用了排行榜!让我们**登录**,这样我们就可以自动设置它!\n\n如果您不想使用排行榜,可以通过关闭排行榜对话框来跳过此步骤。" } }, "placement": "top" @@ -99,10 +166,20 @@ "messageByLocale": { "en": "First, let's **create a leaderboard** as this game will need it. You're lucky, everything will be automatically set up for you!", "fr": "Tout d'abord, créons un **classement** car ce jeu en aura besoin. Vous avez de la chance, tout sera automatiquement configuré pour vous !", + "ar": "أولًا، هيّا نقوم ب**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. لحسن حظك، كل شيء سيتم إعداده تلقائيًا لأجلك!", + "de": "Lass uns zuerst eine **Bestenliste erstellen**, da dieses Spiel sie benötigen wird. Du hast Glück, alles wird automatisch für dich eingerichtet!", "es": "Primero, **creemos una tabla de clasificación** porque este juego la necesitará. ¡Tienes suerte, todo se configurará automáticamente para ti!", + "it": "Prima di tutto, creiamo una **classifica** perché questo gioco ne avrà bisogno. Hai fortuna, tutto sarà configurato automaticamente per te!", + "ja": "まず、このゲームには必要になるため、**リーダーボードを作成**しましょう。あなたは幸運です、すべてが自動的に設定されます!", + "ko": "먼저, 이 게임은 리더보드가 필요하므로 **리더보드를 만들어** 봅시다. 당신은 운이 좋습니다, 모든 것이 자동으로 설정될 것입니다!", + "pl": "Najpierw **utwórzmy tablicę wyników**, ponieważ ta gra jej potrzebuje. Masz szczęście, wszystko zostanie dla ciebie automatycznie skonfigurowane!", "pt": "Primeiro, vamos **criar uma tabela de classificação** porque este jogo precisará dela. Você tem sorte, tudo será configurado automaticamente para você!", + "ru": "Сначала давайте **создадим таблицу лидеров**, так как эта игра ее понадобится. Вам повезло, все будет настроено автоматически!", + "sl": "Najprej **ustvarimo lestvico**, saj jo bo ta igra potrebovala. Imate srečo, vse bo samodejno nastavljeno za vas!", + "sq": "Fillimisht, le të **krijojmë një tabelë klasifikimi** sepse kjo lojë do ta ketë nevojë. Ju keni fat, gjithçka do të jetë e konfiguruar automatikisht për ju!", "th": "ขั้นแรก **สร้าง leaderboard** ให้เกมนี้เพราะเป็นเกมที่จำเป็นต้องมี เราจะติดตั้งให้คุณอัตโนมัติทั้งหมดเอง คุณโชคดีจริง!", - "ar": "أولًا، هيّا نقوم ب**إنشاء لوحة صدارة** حيث ستحتاج اللعبة إليها. لحسن حظك، كل شيء سيتم إعداده تلقائيًا لأجلك!" + "uk": "Спочатку давайте **створимо таблицю лідерів**, оскільки ця гра її потребуватиме. Вам пощастило, все буде налаштовано автоматично!", + "zh": "首先,让我们**创建一个排行榜**,因为这个游戏需要它。你很幸运,一切都将自动为你设置!" } }, "placement": "top" @@ -118,10 +195,20 @@ "messageByLocale": { "en": "Let's close the menu.", "fr": "Fermons le menu.", + "ar": "هيّا نغلق القائمة.", + "de": "Lass uns das Menü schließen.", "es": "Cerramos el menú.", + "it": "Chiudiamo il menu.", + "ja": "メニューを閉じましょう。", + "ko": "메뉴를 닫아봅시다.", + "pl": "Zamknijmy menu.", "pt": "Vamos fechar o menu.", + "ru": "Давайте закроем меню.", + "sl": "Zaprimo meni.", + "sq": "Le të mbyllim menunë.", "th": "ปิดเมนู", - "ar": "هيّا نغلق القائمة." + "uk": "Давайте закриємо меню.", + "zh": "让我们关闭菜单。" } } }, @@ -134,10 +221,20 @@ "messageByLocale": { "en": "Let's go!", "fr": "C'est parti !", + "ar": "لنبدأ!", + "de": "Los geht's!", "es": "¡Vamos!", + "it": "Andiamo!", + "ja": "さあ、始めましょう!", + "ko": "출발!", + "pl": "Zaczynamy!", "pt": "Vamos lá!", + "ru": "Поехали!", + "sl": "Gremo!", + "sq": "Hajde shkojme!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "uk": "Почнемо!", + "zh": "让我们开始吧!" } } }, @@ -147,10 +244,20 @@ "messageByLocale": { "en": "This game is called Plinko! Click on the **Preview** button to test it out and gather points depending on how many pegs you hit.", "fr": "Ce jeu s'appelle Plinko! Cliquez sur le bouton **Aperçu** pour le tester et accumuler des points en fonction du nombre de piquets que vous frappez.", + "ar": "هذه اللعبة تسمى Plinko! الضغط على الزر **معاينة** لإختبارها وجمع النقاط حسب عدد العارضات التي تضرب.", + "de": "Dieses Spiel heißt Plinko! Klicken Sie auf die **Vorschau**, um es zu testen und Punkte zu sammeln, je nachdem, wie viele Stifte Sie treffen.", "es": "¡Este juego se llama Plinko!Haz clic en el botón **Vista previa** para probarlo y gana puntos dependiendo de cuántos clavos golpees.", + "it": "Questo gioco si chiama Plinko! Clicca sul pulsante **Anteprima** per provarlo e raccogliere punti in base a quanti pioli colpisci.", + "ja": "このゲームはPlinkoと呼ばれます!**プレビュー**ボタンをクリックしてテストし、ピンを何本当てるかに応じてポイントを集めましょう。", + "ko": "이 게임은 Plinko라고 합니다! **미리보기** 버튼을 클릭하여 테스트하고 몇 개의 핀을 맞추느냐에 따라 점수를 얻으세요.", + "pl": "Ta gra nazywa się Plinko! Kliknij przycisk **Podgląd**, aby ją przetestować i zdobyć punkty w zależności od liczby pali, które trafisz.", "pt": "Este jogo se chama Plinko! Clique no botão **Visualizar** para testá-lo e ganhe pontos dependendo de quantos pinos você acerta.", + "ru": "Эта игра называется Plinko! Нажмите на кнопку **Предварительный просмотр**, чтобы протестировать ее и набрать очки в зависимости от того, сколько штырей вы попадете.", + "sl": "Ta igra se imenuje Plinko! Kliknite na gumb **Predogled**, da jo preizkusite in zberete točke glede na to, koliko žebljev zadeneš.", + "sq": "Kjo lojë quhet Plinko! Klikoni në butonin **Parashikim** për ta testuar dhe të mblidhni pikë sipas numrit të shkopëve që godisni.", "th": "เกมนี้มีชื่อว่า Plinko! คุณปล่อยลูกบอลหล่นลงมาในเขาวงกตและทำคะแนนได้เมื่อลูกบอลชนกับเป๊ก กดปุ่ม **ดูตัวอย่าง** เพื่อทดลองเล่นเกม", - "ar": "هذه اللعبة تسمى Plinko! الضغط على الزر **معاينة** لإختبارها وجمع النقاط حسب عدد العارضات التي تضرب." + "uk": "Ця гра називається Plinko! Натисніть на кнопку **Попередній перегляд**, щоб протестувати її та зібрати бали в залежності від того, скільки штирів ви влучите.", + "zh": "这个游戏叫做Plinko!点击**预览**按钮来测试它,根据你击中的钉子数量来收集积分。" } } } @@ -165,10 +272,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト**パネルを開いてください。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **Obiekty**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **Объекты**.", + "sl": "Odpri panel **Predmeti**.", + "sq": "Hapni panelin e **objekteve**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **Об'єкти**.", + "zh": "打开**对象**面板。" } }, "placement": "bottom" @@ -186,20 +303,40 @@ "messageByLocale": { "en": "Drag 3 **$(multiplier)** objects to the canvas and place them where they can be hit by the ball.", "fr": "Faites glisser 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", + "ar": "سحب 3 كائنات **$(multiplier)** إلى اللوحة وإدراجها في مكان يمكن للكرة ضربها.", + "de": "Ziehe 3 **$(multiplier)**-Objekte auf die Leinwand und platziere sie dort, wo sie von der Kugel getroffen werden können.", "es": "¡Arrastra 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", + "it": "Trascina 3 oggetti **$(multiplier)** sul canvas e posizionali dove possono essere colpiti dalla palla.", + "ja": "3つの**$(multiplier)**オブジェクトをキャンバスにドラッグして、ボールが当たる場所に配置します。", + "ko": "3개의 **$(multiplier)** 오브젝트를 캔버스로 끌어다가 공이 맞을 수 있는 곳에 놓습니다.", + "pl": "Przeciągnij 3 obiekty **$(multiplier)** na płótno i umieść je tam, gdzie mogą być trafione przez piłkę.", "pt": "Arraste 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", + "ru": "Перетащите 3 объекта **$(multiplier)** на холст и разместите их там, где их может ударить мяч.", + "sl": "Povlecite 3 objekte **$(multiplier)** na platno in jih postavite tam, kjer jih lahko zadene žoga.", + "sq": "Tërhiqni 3 objekte **$(multiplier)** në kanavas dhe vendosini atje ku mund të goditen nga topi.", "th": "มาเพิ่ม **$(multiplier)** เพื่อทำให้เกมสนุกขึ้นกันเถอะ! ลาก 3 ชิ้น จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต", - "ar": "سحب 3 كائنات **$(multiplier)** إلى اللوحة وإدراجها في مكان يمكن للكرة ضربها." + "uk": "Перетягніть 3 об'єкти **$(multiplier)** на полотно та розмістіть їх там, де їх може вдарити м'яч.", + "zh": "将3个**$(multiplier)**对象拖到画布上,并将它们放在球可以击中的地方。" } }, "touchDescription": { "messageByLocale": { "en": "**Select** then **drag** 3 **$(multiplier)** objects to the canvas and place them where they can be hit by the ball.", "fr": "**Sélectionnez** puis **faites glisser** 3 objets **$(multiplier)** sur le canevas et placez-les là où ils peuvent être touchés par la balle.", + "ar": "**تحديد** و**سحب** 3 كائنات **$(multiplier)** إلى اللوحة وإدراجها في مكان يمكن للكرة ضربها.", + "de": "**Wählen** und **ziehen** Sie 3 **$(multiplier)**-Objekte auf die Leinwand und platzieren Sie sie dort, wo sie von der Kugel getroffen werden können.", "es": "**Selecciona** y **arrastra** 3 objetos **$(multiplier)** al lienzo y colócalos donde puedan ser golpeados por la pelota.", + "it": "**Seleziona** e **trascina** 3 oggetti **$(multiplier)** sul canvas e posizionali dove possono essere colpiti dalla palla.", + "ja": "**$(multiplier)**オブジェクトを3つ選択してキャンバスにドラッグし、ボールが当たる場所に配置します。", + "ko": "**$(multiplier)** 오브젝트를 3개 선택한 후 캔버스로 끌어다가 공이 맞을 수 있는 곳에 놓습니다.", + "pl": "**Wybierz** a następnie **przeciągnij** 3 obiekty **$(multiplier)** na płótno i umieść je tam, gdzie mogą być trafione przez piłkę.", "pt": "**Selecione** e **arraste** 3 objetos **$(multiplier)** para a tela e coloque-os onde possam ser atingidos pela bola.", + "ru": "**Выберите** и **перетащите** 3 объекта **$(multiplier)** на холст и разместите их там, где их может ударить мяч.", + "sl": "**Izberite** in **povlecite** 3 objekte **$(multiplier)** na platno in jih postavite tam, kjer jih lahko zadene žoga.", + "sq": "**Zgjidhni** dhe **tërhiqni** 3 objekte **$(multiplier)** në kanavas dhe vendosini atje ku mund të goditen nga topi.", "th": "**เลือก** และ **ลาก** 3 ชิ้น **$(multiplier)** จากเมนูไปใส่ในแคนวาส และจัดวางให้พวกมันสามารถถูกลูกบอลเก็บไปได้ขณะที่กำลังผ่านเขาวงกต", - "ar": "**تحديد** و**سحب** 3 كائنات **$(multiplier)** إلى اللوحة وإدراجها في مكان يمكن للكرة ضربها." + "uk": "**Виберіть** а потім **перетягніть** 3 об'єкти **$(multiplier)** на полотно та розмістіть їх там, де їх може вдарити м'яч.", + "zh": "**选择**然后**拖动**3个**$(multiplier)**对象到画布上,并将它们放在球可以击中的地方。" } }, "placement": "top" @@ -215,20 +352,40 @@ "messageByLocale": { "en": "Once you're done, place a **$(scoreMultiplier)** under *Score* to display the point multiplier!", "fr": "Une fois que vous avez terminé, placez un **$(scoreMultiplier)** juste en dessous du *Score* pour afficher le multiplicateur de points !", + "ar": "بمجرد الانتهاء، إدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!", + "de": "Sobald Sie fertig sind, platzieren Sie ein **$(scoreMultiplier)** unter *Score*, um den Punktemultiplikator anzuzeigen!", "es": "Una vez que hayas terminado, coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", + "it": "Una volta terminato, posiziona un **$(scoreMultiplier)** sotto *Punteggio* per visualizzare il moltiplicatore di punti!", + "ja": "完了したら、**スコア**の下に**$(scoreMultiplier)**を配置して、ポイントの乗数を表示します。", + "ko": "작업을 마치면 *점수* 아래에 **$(scoreMultiplier)**를 놓아 점수 배수를 표시하세요!", + "pl": "Gdy skończysz, umieść **$(scoreMultiplier)** pod *Wynik*, aby wyświetlić mnożnik punktów!", "pt": "Uma vez que você terminou, coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", + "ru": "Как только закончите, разместите **$(scoreMultiplier)** под *Очки*, чтобы отобразить множитель очков!", + "sl": "Ko končate, postavite **$(scoreMultiplier)** pod *Točke*, da prikažete množitelj točk!", + "sq": "Kur të keni përfunduar, vendosni një **$(scoreMultiplier)** nën *Pikët* për të shfaqur shumëzuesin e pikëve!", "th": "เมื่อทำเสร็จแล้ว ให้ใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", - "ar": "بمجرد الانتهاء، إدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" + "uk": "Як тільки ви закінчите, розмістіть **$(scoreMultiplier)** під *Очки*, щоб відобразити множник очок!", + "zh": "完成后,在*分数*下方放置一个**$(scoreMultiplier)**,以显示分数乘数。" } }, "touchDescription": { "messageByLocale": { "en": "Once you're done, select and place a **$(scoreMultiplier)** under *Score* to display the point multiplier!", "fr": "Une fois que vous avez terminé, sélectionnez et placez un **$(scoreMultiplier)** juste en dessous du *Score* pour afficher le multiplicateur de points !", + "ar": "بمجرد الانتهاء، تحديد وإدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!", + "de": "Sobald Sie fertig sind, wählen und platzieren Sie ein **$(scoreMultiplier)** unter *Score*, um den Punktemultiplikator anzuzeigen!", "es": "Una vez que hayas terminado, selecciona y coloca un **$(scoreMultiplier)** debajo de *Score* para mostrar el multiplicador de puntos.", + "it": "Una volta terminato, seleziona e posiziona un **$(scoreMultiplier)** sotto *Punteggio* per visualizzare il moltiplicatore di punti!", + "ja": "完了したら、**スコア**の下に**$(scoreMultiplier)**を選択して配置して、ポイントの乗数を表示します。", + "ko": "작업을 마치면 *점수* 아래에 **$(scoreMultiplier)**를 선택하고 놓아 점수 배수를 표시하세요!", + "pl": "Gdy skończysz, wybierz i umieść **$(scoreMultiplier)** pod *Wynik*, aby wyświetlić mnożnik punktów!", "pt": "Uma vez que você terminou, selecione e coloque um **$(scoreMultiplier)** embaixo do *Score* para exibir a pontuação atual do multiplicador.", + "ru": "Как только закончите, выберите и разместите **$(scoreMultiplier)** под *Очки*, чтобы отобразить множитель очков!", + "sl": "Ko končate, izberite in postavite **$(scoreMultiplier)** pod *Točke*, da prikažete množitelj točk!", + "sq": "Kur të keni përfunduar, zgjidhni dhe vendosni një **$(scoreMultiplier)** nën *Pikët* për të shfaqur shumëzuesin e pikëve!", "th": "เมื่อทำเสร็จแล้ว ให้เลือกและใส่ **$(scoreMultiplier)** เพื่อแสดงคะแนน multiplier score ที่เวลาปัจจุบัน ใส่และจัดวางไว้ข้างล่างคะแนนเลย!", - "ar": "بمجرد الانتهاء، تحديد وإدراج **$(scoreMultiplier)** أسفل *Score* لعرض نقاط المضاعِفات!" + "uk": "Як тільки ви закінчите, виберіть і розмістіть **$(scoreMultiplier)** під *Очки*, щоб відобразити множник очок!", + "zh": "完成后,在*分数*下方选择并放置一个**$(scoreMultiplier)**,以显示分数乘数。" } }, "placement": "bottom" @@ -245,10 +402,20 @@ "messageByLocale": { "en": "We now need to store the score somewhere. Let's create a scene variable! Open the **Project Manager**", "fr": "Nous devons maintenant stocker le score quelque part. Créons une variable de scène ! Ouvrez le **Project Manager**", + "ar": "نحتاج إلى تخزين النقاط في مكان ما، هيّا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**", + "de": "Wir müssen den Punktestand jetzt irgendwo speichern. Lass uns eine Szenenvariable erstellen! Öffne den **Projekt-Manager**", "es": "Ahora necesitamos almacenar la puntuación en algún lugar. ¡Creemos una variable de escena! Abre el **Project Manager**", + "it": "Ora dobbiamo memorizzare il punteggio da qualche parte. Creiamo una variabile di scena! Apri il **Project Manager**", + "ja": "今度はスコアをどこかに保存する必要があります。**シーン変数**を作成しましょう!**プロジェクトマネージャ**を開いてください", + "ko": "이제 점수를 어딘가에 저장해야 합니다. **씬 변수**를 만들어봅시다! **프로젝트 매니저**를 엽니다", + "pl": "Teraz musimy gdzieś przechować wynik. Stwórzmy zmienną sceny! Otwórz **Menedżera projektu**", "pt": "Agora precisamos armazenar a pontuação em algum lugar. Vamos criar uma variável de cena! Abra o **Project Manager**", + "ru": "Теперь нам нужно где-то сохранить счет. Давайте создадим переменную сцены! Откройте **Менеджер проекта**", + "sl": "Zdaj moramo shraniti rezultat nekje. Ustvarimo spremenljivko scene! Odpri **Upravitelj projekta**", + "sq": "Tani duhet të ruajmë pikët në një vend. Le të krijojmë një variabël skene! Hap **Menaxherin e Projektit**", "th": "ทีนี้เราจะทำให้ข้อมูลคะแนนถูกจัดเก็บไว้ที่ไหนสักแห่ง เรามาสร้าง **ตัวแปรของ scene** กันเถอะ! เปิด **โปรเจกต์เมเนเจอร์**", - "ar": "نحتاج إلى تخزين النقاط في مكان ما، هيّا نقوم بإنشاء متغير مشهد! فتح **مدير المشروع**" + "uk": "Тепер нам потрібно десь зберегти рахунок. Давайте створимо змінну сцени! Відкрийте **Менеджер проекту**", + "zh": "现在我们需要在某处存储分数。让我们创建一个场景变量!打开**项目管理器**" } }, "placement": "bottom" @@ -272,20 +439,40 @@ "messageByLocale": { "en": "**Right click** (or click the *3 dot menu*) on $(gameScene) and select **Edit scene variables**.", "fr": "Faites un **clic droit** (ou appuyez sur le *bouton à trois points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", + "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على $(gameScene) وتحديد **تحرير متغيرات المشهد**.", + "de": "**Rechtsklick** (oder klicken Sie auf das *3-Punkte-Menü*) auf $(gameScene) und wählen Sie **Szenenvariablen bearbeiten**.", "es": "Haz **clic derecho** (o clic en el **botón de tres puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", + "it": "**Fai clic con il tasto destro** (o fai clic sul *menu a 3 punti*) su $(gameScene) e seleziona **Modifica variabili di scena**.", + "ja": "$(gameScene)を**右クリック**(または*3点メニュー*をクリック)して**シーン変数を編集**を選択します。", + "ko": "$(gameScene)에서 **마우스 오른쪽 버튼을 클릭** (또는 *3 점 메뉴*를 클릭)하여 **씬 변수 편집**을 선택합니다.", + "pl": "**Kliknij prawym przyciskiem myszy** (lub kliknij *menu 3 kropek*) na $(gameScene) i wybierz **Edytuj zmienne sceny**.", "pt": "Clique com o **botão direito** (ou toque no *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", + "ru": "**Щелкните правой кнопкой мыши** (или нажмите *меню из трех точек*) на $(gameScene) и выберите **Изменить переменные сцены**.", + "sl": "**Desni klik** (ali kliknite *meni s tremi pikami*) na $(gameScene) in izberite **Uredi spremenljivke scene**.", + "sq": "**Kliko me të djathtën** (ose kliko menynë *3 pikë*) në $(gameScene) dhe zgjidh **Ndrysho variablat e skenës**.", "th": "**คลิกขวา** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", - "ar": "النقر على *الثلاث نقاط*، أو **النقر على زر الفأرة الأيمن** على $(gameScene) وتحديد **تحرير متغيرات المشهد**." + "uk": "**Клацніть правою кнопкою миші** (або натисніть *меню з трьох крапок*) на $(gameScene) та виберіть **Редагувати змінні сцени**.", + "zh": "在$(gameScene)上**右键单击**(或单击*3点菜单*),然后选择**编辑场景变量**。" } }, "touchDescription": { "messageByLocale": { "en": "**Long press** (or use the *3 dot menu*) on $(gameScene) and select **Edit scene variables**.", "fr": "Faites un **appui long** (ou utilisez le *bouton à 3 points*) sur $(gameScene) et sélectionnez **Modifier les variables de scène**.", + "ar": "الضغط على *الثلاث نقاط*، أو **ضغطة مطولة** على $(gameScene) وتحديد **تحرير متغيرات المشهد**.", + "de": "**Langes Drücken** (oder klicken Sie auf das *3-Punkte-Menü*) auf $(gameScene) und wählen Sie **Szenenvariablen bearbeiten**.", "es": "Haz **pulsación larga** (o usa el **botón de 3 puntos**) sobre $(gameScene) y selecciona **Editar variables de escena**.", + "it": "**Premi a lungo** (o tocca il *menu a 3 punti*) su $(gameScene) e seleziona **Modifica variabili di scena**.", + "ja": "$(gameScene)を**長押し**(または*3点メニュー*を使用)して**シーン変数を編集**を選択します。", + "ko": "$(gameScene)에서 **마우스 오른쪽 버튼을 길게 누르세요** (또는 *3 점 메뉴*를 사용)하여 **씬 변수 편집**을 선택합니다.", + "pl": "**Przytrzymaj** (lub kliknij *menu 3 kropek*) na $(gameScene) i wybierz **Edytuj zmienne sceny**.", "pt": "Pressione por **muito tempo** (ou use o *botão de três pontos*) na $(gameScene) e selecione **Editar variáveis de cena**.", + "ru": "**Долгое нажатие** (или нажмите *меню из трех точек*) на $(gameScene) и выберите **Изменить переменные сцены**.", + "sl": "**Dolgo pritisnite na** (ali uporabite *meni s tremi pikami*) $(gameScene) in izberite **Uredi spremenljivke scene**.", + "sq": "**Shtypni gjatë** (ose përdorni *menynë 3 pikë*) në $(gameScene) dhe zgjidhni **Ndrysho variablat e skenës**.", "th": "**กดค้าง** ที่ $(gameScene) หรือกดที่ **ปุ่ม 3 จุด** และเลือก **แก้ไขตัวแปรของ scene**", - "ar": "الضغط على *الثلاث نقاط*، أو **ضغطة مطولة** على $(gameScene) وتحديد **تحرير متغيرات المشهد**." + "uk": "**Довго натисніть** (або натисніть *меню з трьох крапок*) на $(gameScene) та виберіть **Редагувати змінні сцени**.", + "zh": "在$(gameScene)上**长按**(或使用*3点菜单*),然后选择**编辑场景变量**。" } }, "placement": "bottom" @@ -303,10 +490,20 @@ "messageByLocale": { "en": "Let's add our first **variable**!", "fr": "Ajoutons notre première **variable** !", + "ar": "هيّا نقوم بإضافة أول **متغير** لنا!", + "de": "Lassen Sie uns unsere erste **Variable** hinzufügen!", "es": "¡Agreguemos nuestra primera **variable**!", + "it": "Aggiungiamo la nostra prima **variabile**!", + "ja": "最初の**変数**を追加しましょう!", + "ko": "첫 번째 **변수**를 추가해봅시다!", + "pl": "Dodajmy naszą pierwszą **zmienną**!", "pt": "Vamos adicionar nossa primeira **variável**!", + "ru": "Добавим нашу первую **переменную**!", + "sl": "Dodajmo naš prvi **spremenljivko**!", + "sq": "Të shtojmë **variabël** tonë të parë!", "th": "มาเพิ่ม **ตัวแปร** แรกของเรากันเถอะ!", - "ar": "هيّا نقوم بإضافة أول **متغير** لنا!" + "uk": "Додамо нашу першу **змінну**!", + "zh": "让我们添加我们的第一个**变量**!" } } }, @@ -315,17 +512,27 @@ { "elementToHighlightId": "#scene-variables-dialog #variable-0-name", "nextStepTrigger": { - "valueEquals": "Multiplier" + "valueEquals": "Multi" }, "tooltip": { "description": { "messageByLocale": { - "en": "Let's name this variable `Multiplier`.", - "fr": "Nommons cette variable `Multiplier`.", - "es": "Nombramos esta variable `Multiplier`.", - "pt": "Vamos nomear esta variável `Multiplier`.", - "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multiplier`", - "ar": "هيّا نقوم بتسمية هذا المتغير `Multiplier`." + "en": "Let's name this variable `Multi`.", + "fr": "Nommons cette variable `Multi`.", + "ar": "هيّا نقوم بتسمية هذا المتغير `Multi`.", + "de": "Nennen wir diese Variable `Multi`.", + "es": "Nombramos esta variable `Multi`.", + "it": "Chiamiamo questa variabile `Multi`.", + "ja": "この変数を`Multi`と名前を付けましょう。", + "ko": "이 변수의 이름을 `Multi`로 지어봅시다.", + "pl": "Nazwijmy tę zmienną `Multi`.", + "pt": "Vamos nomear esta variável `Multi`.", + "ru": "Давайте назовем эту переменную `Multi`.", + "sl": "Imenujmo to spremenljivko `Multi`.", + "sq": "Të japim kësaj variabël emrin `Multi`.", + "th": "ตั้งชื่อให้กับตัวแปรนี้ว่า `Multi`", + "uk": "Давайте назвемо цю змінну `Multi`.", + "zh": "让我们将这个变量命名为`Multi`。" } }, "placement": "bottom" @@ -342,10 +549,20 @@ "messageByLocale": { "en": "Let's change its type to **Number**.", "fr": "Changeons son type en **Nombre**.", + "ar": "هيّا نقوم بتغيير النوع إلى **عدد**.", + "de": "Ändern wir seinen Typ in **Zahl**.", "es": "Cambiamos su tipo a **Número**.", + "it": "Cambiamo il suo tipo in **Numero**.", + "ja": "そのタイプを**数値**に変更しましょう。", + "ko": "이 변수의 타입을 **숫자**로 변경해봅시다.", + "pl": "Zmieńmy jego typ na **Liczba**.", "pt": "Vamos mudar seu tipo para **Número**.", + "ru": "Изменим его тип на **Число**.", + "sl": "Spremenimo njegov tip v **Število**.", + "sq": "Të ndryshojmë tipin e tij në **Numër**.", "th": "เปลี่ยนประเภทเป็น **ตัวเลข**", - "ar": "هيّا نقوم بتغيير النوع إلى **عدد**." + "uk": "Змінимо його тип на **Число**.", + "zh": "让我们将其类型更改为**数字**。" } }, "placement": "bottom" @@ -362,10 +579,20 @@ "messageByLocale": { "en": "And finally let's change its initial value to **1**.", "fr": "Et enfin, changeons sa valeur initiale en **1**.", + "ar": "وأخيرًا وليس آخرًا، هيّا نقوم بتغيير القيمة إلى **1**.", + "de": "Und schließlich ändern wir seinen Anfangswert auf **1**.", "es": "Y finalmente, cambiemos su valor inicial a **1**.", + "it": "Infine, cambiamo il suo valore iniziale in **1**.", + "ja": "最後に、その初期値を**1**に変更しましょう。", + "ko": "마지막으로 초기값을 **1**로 변경해봅시다.", + "pl": "Na koniec zmieńmy jego początkową wartość na **1**.", "pt": "E finalmente, vamos mudar seu valor inicial para **1**.", + "ru": "И, наконец, изменим его начальное значение на **1**.", + "sl": "In končno, spremenimo njegovo začetno vrednost v **1**.", + "sq": "Dhe në fund, të ndryshojmë vlerën fillestare në **1**.", "th": "และสุดท้าย เปลี่ยนค่าเริ่มต้นเป็น **1**", - "ar": "وأخيرًا وليس آخرًا، هيّا نقوم بتغيير القيمة إلى **1**." + "uk": "І нарешті змінимо його початкове значення на **1**.", + "zh": "最后让我们将其初始值更改为**1**。" } }, "placement": "bottom" @@ -382,10 +609,20 @@ "messageByLocale": { "en": "And we're done! Let's close this dialog.", "fr": "Et c'est tout ! Fermons cette boîte de dialogue.", + "ar": "وها قد انتهينا! لنغلق هذه.", + "de": "Und wir sind fertig! Lassen Sie uns diesen Dialog schließen.", "es": "¡Y listo! Cerramos esta ventana.", + "it": "E siamo a posto! Chiudiamo questa finestra.", + "ja": "完了です!このダイアログを閉じましょう。", + "ko": "그리고 끝났습니다! 이 대화 상자를 닫아봅시다.", + "pl": "I skończone! Zamknijmy to okno dialogowe.", "pt": "E acabamos! Vamos fechar esta janela.", + "ru": "И мы закончили! Давайте закроем это диалоговое окно.", + "sl": "In končano! Zaprimo to okno.", + "sq": "Dhe kemi përfunduar! Le të mbyllim këtë dialog.", "th": "เสร็จแล้ว! ปิดหน้าต่างได้เลย", - "ar": "وها قد انتهينا! لنغلق هذه." + "uk": "І ми закінчили! Давайте закриємо це вікно.", + "zh": "我们完成了!让我们关闭这个对话框。" } } } @@ -400,10 +637,20 @@ "messageByLocale": { "en": "Let's close the menu.", "fr": "Fermons le menu.", + "ar": "هيّا نغلق القائمة.", + "de": "Lassen Sie uns das Menü schließen.", "es": "Cerramos el menú.", + "it": "Chiudiamo il menu.", + "ja": "メニューを閉じましょう。", + "ko": "메뉴를 닫아봅시다.", + "pl": "Zamknijmy menu.", "pt": "Vamos fechar o menu.", + "ru": "Давайте закроем меню.", + "sl": "Zaprimo meni.", + "sq": "Le të mbyllim menunë.", "th": "ปิดเมนู", - "ar": "هيّا نغلق القائمة." + "uk": "Давайте закриємо меню.", + "zh": "让我们关闭菜单。" } } }, @@ -419,10 +666,20 @@ "messageByLocale": { "en": "Now let's activate those multipliers. Open the **Events Sheet** of the $(gameScene) scene.", "fr": "Maintenant, activons ces multiplicateurs. Ouvrons la **Feuille d'événements** de la scène $(gameScene).", + "ar": "الآن هيّا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene).", + "de": "Lassen Sie uns diese Multiplikatoren aktivieren. Öffnen Sie das **Ereignisblatt** der Szene $(gameScene).", "es": "Ahora activemos esos multiplicadores. Abre la **Hoja de eventos** de la escena $(gameScene).", + "it": "Ora attiviamo quei moltiplicatori. Apri il **Foglio eventi** della scena $(gameScene).", + "ja": "それでは、その乗数を有効にしましょう。$(gameScene)の**イベントシート**を開きます。", + "ko": "이제 그 배수를 활성화해봅시다. $(gameScene)의 **이벤트 시트**를 엽니다.", + "pl": "Teraz aktywujmy te mnożniki. Otwórz **Arkusz zdarzeń** sceny $(gameScene).", "pt": "Agora vamos ativar esses multiplicadores. Vamos abra a **Folha de eventos** da cena $(gameScene).", + "ru": "Теперь давайте активируем эти множители. Откройте **Лист событий** сцены $(gameScene).", + "sl": "Sedaj aktivirajmo te množitelje. Odpri **List dogodkov** prizora $(gameScene).", + "sq": "Tani le të aktivizojmë këto shumëzues. Hap **Fletën e ngjarjeve** të skenës $(gameScene).", "th": "ทีนี้มาทำให้ multiplier ทำงานกัน เปิด **ชี้ทอีเวนต์** ของ scene $(gameScene)", - "ar": "الآن هيّا نقوم بتنشيط تلك المضاعِفات، فتح **صفحة أحداث** المشهد $(gameScene). " + "uk": "Тепер давайте активуємо ці множники. Відкрийте **Аркуш подій** сцени $(gameScene).", + "zh": "现在让我们激活这些乘数。打开$(gameScene)场景的**事件表**。" } }, "placement": "bottom" @@ -439,10 +696,20 @@ "messageByLocale": { "en": "We'll start by making the $(multiplier) disappear when it gets hitted by a $(ball). Click **add a condition** to begin.", "fr": "Nous allons commencer par faire disparaître le $(multiplier) lorsqu'il est touché par une $(ball). Cliquez sur **ajouter une condition** pour commencer.", + "ar": "سوف نبدأ بجعل الـ $(multiplier) تختفي عندما يضربها $(ball). الضغط على **إضافة شرط** للبدأ.", + "de": "Wir werden damit beginnen, dass der $(multiplier) verschwindet, wenn er von einem $(ball) getroffen wird. Klicken Sie auf **Bedingung hinzufügen**, um zu beginnen.", "es": "Comenzaremos haciendo que el $(multiplier) desaparezca cuando sea golpeado por una $(ball). Haz clic en **agregar una condición** para empezar.", + "it": "Inizieremo facendo scomparire il $(multiplier) quando viene colpito da una $(ball). Clicca su **aggiungi una condizione** per iniziare.", + "ja": "$(multiplier)が$(ball)に当たったときに消えるようにします。**条件を追加**をクリックして始めましょう。", + "ko": "$(multiplier)가 $(ball)에 맞았을 때 사라지도록 시작해봅시다. 시작하려면 **조건 추가**를 클릭하세요.", + "pl": "Zaczniemy od zrobienia $(multiplier) niewidocznym, gdy zostanie uderzony przez $(ball). Kliknij **dodaj warunek**, aby rozpocząć.", "pt": "Começaremos fazendo o $(multiplier) desaparecer ao ser atingido por uma $(ball). Clique em **adicionar uma condição** para iniciar.", + "ru": "Мы начнем с того, что сделаем $(multiplier) невидимым, когда его ударит $(ball). Нажмите **добавить условие**, чтобы начать.", + "sl": "Začnemo tako, da naredimo $(multiplier) neviden, ko ga zadene $(ball). Kliknite **dodaj pogoj**, da začnete.", + "sq": "Do të fillojmë duke bërë $(multiplier) të zhduket kur goditet nga një $(ball). Kliko **shto një kusht** për të filluar.", "th": "ขั้นแรก เราจะทำให้ $(multiplier) หายไป เมื่อถูก $(ball) ชนครั้งหนึ่ง อีเวนท์พร้อมแล้ว ให้ **เพิ่มเงื่อนไข** ลงไป", - "ar": "سوف نبدأ بجعل الـ $(multiplier) تختفي عندما يضربها $(ball). الضغط على **إضافة شرط** للبدأ." + "uk": "Ми почнемо з того, що зробимо $(multiplier) невидимим, коли його вдарить $(ball). Натисніть **додати умову**, щоб почати.", + "zh": "我们将从当$(multiplier)被$(ball)击中时消失开始。点击**添加条件**开始。" } } } @@ -457,10 +724,20 @@ "messageByLocale": { "en": "Select **$(ball)**.", "fr": "Sélectionnez **$(ball)**.", + "ar": "تحديد **$(ball)**.", + "de": "Wählen Sie **$(ball)**.", "es": "Seleccione **$(ball)**.", + "it": "Seleziona **$(ball)**.", + "ja": "**$(ball)**を選択します。", + "ko": "**$(ball)**을 선택하세요.", + "pl": "Wybierz **$(ball)**.", "pt": "Selecione **$(ball)**.", + "ru": "Выберите **$(ball)**.", + "sl": "Izberite **$(ball)**.", + "sq": "Zgjidh **$(ball)**.", "th": "เลือก **$(ball)**", - "ar": "تحديد **$(ball)**." + "uk": "Виберіть **$(ball)**.", + "zh": "选择**$(ball)**。" } } }, @@ -476,10 +753,20 @@ "messageByLocale": { "en": "Select the **Collision** condition.", "fr": "Sélectionnez la condition **Collision**.", + "ar": "تحديد الشرط **تصادم**.", + "de": "Wählen Sie die **Kollision**-Bedingung.", "es": "Seleccione la condición **Colisión**.", + "it": "Seleziona la condizione **Collisione**.", + "ja": "**衝突**条件を選択します。", + "ko": "**충돌** 조건을 선택하세요.", + "pl": "Wybierz warunek **Kolizja**.", "pt": "Selecione a condição **Colisão**.", + "ru": "Выберите условие **Столкновение**.", + "sl": "Izberite pogoj **Trk**.", + "sq": "Zgjidhni kushtin **Grusht**.", "th": "เลือกเงื่อนไข **การชนกัน**", - "ar": "تحديد الشرط **تصادم**." + "uk": "Виберіть умову **Зіткнення**.", + "zh": "选择**碰撞**条件。" } } }, @@ -495,10 +782,20 @@ "messageByLocale": { "en": "And select our **$(multiplier)**.", "fr": "Et sélectionnez notre **$(multiplier)**.", + "ar": "وتحديد الـ **$(multiplier)** خاصتنا.", + "de": "Und wählen Sie unsere **$(multiplier)**.", "es": "Y seleccione nuestro **$(multiplier)**.", + "it": "E seleziona il nostro **$(multiplier)**.", + "ja": "そして、**$(multiplier)**を選択します。", + "ko": "그리고 우리의 **$(multiplier)**을 선택하세요.", + "pl": "Wybierz nasz **$(multiplier)**.", "pt": "E selecione nosso **$(multiplier)**.", + "ru": "И выберите наш **$(multiplier)**.", + "sl": "In izberite naš **$(multiplier)**.", + "sq": "Dhe zgjidhni **$(multiplier)** tonë.", "th": "เลือก **$(multiplier)**", - "ar": "وتحديد الـ **$(multiplier)** خاصتنا." + "uk": "І виберіть наш **$(multiplier)**.", + "zh": "然后选择我们的**$(multiplier)**。" } }, "placement": "top" @@ -513,12 +810,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, our **condition** is ready. This **condition** will be **true** when the **$(ball) touches the $(multiplier)**.", - "fr": "Bien, notre **condition** est prête. Elle sera **vraie** quand **$(ball) touche le $(multiplier)**.", - "es": "Bien, nuestra **condición** está lista. Será **verdadera** cuando **$(ball) golpee el $(multiplier)**.", - "pt": "Bem, nossa **condição** está pronta. Ela será **verdadeira** quando **$(ball) bater no $(multiplier)**.", - "th": "เอาล่ะ **เงื่อนไข** ของเราพร้อมแล้วและจะให้ค่า **จริง** เมื่อ **$(ball) สัมผัสกับ $(multiplier)**", - "ar": "حسنًا، إن **شرطنا** مستعد، هذا **الشرط** سيكون **محققًا** عندما **تلمس الـ $(ball) الـ $(multiplier)**." + "en": "Our **condition** is ready. This **condition** will be **true** when the **$(ball) touches the $(multiplier)**.", + "fr": "Notre **condition** est prête. Elle sera **vraie** quand **$(ball) touche le $(multiplier)**.", + "ar": "شرطنا جاهز. سيكون **صحيحًا** عندما **$(ball) تلمس $(multiplier)**.", + "de": "Unsere **Bedingung** ist bereit. Diese **Bedingung** wird **wahr** sein, wenn der **$(ball) das $(multiplier) berührt**.", + "es": "Nuestra **condición** está lista. Será **verdadera** cuando **$(ball) golpee el $(multiplier)**.", + "it": "La nostra **condizione** è pronta. Questa **condizione** sarà **vera** quando la **$(ball) toccherà il $(multiplier)**.", + "ja": "私たちの**条件**は準備ができています。この**条件**は**$(ball)が$(multiplier)に触れたとき**に**真**になります。", + "ko": "우리의 **조건**이 준비되었습니다. 이 **조건**은 **$(ball)이 $(multiplier)에 닿았을 때** **참**이 될 것입니다.", + "pl": "Naszy **warunek** jest gotowy. Ten **warunek** będzie **prawdziwy**, gdy **$(ball) dotknie $(multiplier)**.", + "pt": "Nossa **condição** está pronta. Ela será **verdadeira** quando **$(ball) bater no $(multiplier)**.", + "ru": "Наше **условие** готово. Это **условие** будет **истинным**, когда **$(ball) коснется $(multiplier)**.", + "sl": "Naš **pogoj** je pripravljen. Ta **pogoj** bo **resničen**, ko **$(ball) zadene $(multiplier)**.", + "sq": "Kushti ynë është gati. Ky **kusht** do të jetë **i vërtetë** kur **$(ball) prek $(multiplier)**.", + "th": "เงื่อนไขของเราพร้อมแล้ว จะเป็น **จริง** เมื่อ **$(ball) ชนกับ $(multiplier)**", + "uk": "Наша **умова** готова. Ця **умова** буде **істинною**, коли **$(ball) доторкнеться $(multiplier)**.", + "zh": "我们的**条件**已准备好。当**$(ball)触碰$(multiplier)**时,这个**条件**将为**真**。" } }, "placement": "top" @@ -534,10 +841,20 @@ "messageByLocale": { "en": "Let's make our multiplier disappear with an **action** now.", "fr": "Faisons disparaître notre multiplicateur avec une **action** maintenant.", + "ar": "هيّا نقوم بجعل مضاعِفاتنا تختفي بواسطة **إجراء** الآن.", + "de": "Lassen Sie uns unseren Multiplikator jetzt mit einer **Aktion** verschwinden.", "es": "Hagamos que nuestro multiplicador desaparezca con una **acción** ahora.", + "it": "Facciamo scomparire il nostro moltiplicatore con un'**azione** ora.", + "ja": "今すぐ**アクション**で私たちの乗数を消えるようにしましょう。", + "ko": "이제 **조치**로 우리의 배수를 사라지게 해봅시다.", + "pl": "Zrobimy nasz mnożnik niewidocznym za pomocą **akcji**.", "pt": "Vamos fazer nosso multiplicador desaparecer com uma **ação** agora.", + "ru": "Давайте сделаем наш множитель невидимым с помощью **действия**.", + "sl": "Naredimo naš množitelj neviden z **akcijo**.", + "sq": "Le të bëjmë shumëzuesin tonë të zhduket me një **veprim** tani.", "th": "ทำให้ multiplier หายไป โดยใช้ **การกระทำ**", - "ar": "هيّا نقوم بجعل مضاعِفاتنا تختفي بواسطة **إجراء** الآن." + "uk": "Давайте зробимо наш множник невидимим за допомогою **дії**.", + "zh": "现在让我们用**动作**让我们的乘数消失。" } } } @@ -553,9 +870,19 @@ "en": "Select **$(multiplier)**.", "fr": "Sélectionnez **$(multiplier)**.", "es": "Seleccione **$(multiplier)**.", + "ar": "تحديد **$(multiplier)**.", + "de": "Wählen Sie **$(multiplier)**.", + "it": "Seleziona **$(multiplier)**.", + "ja": "**$(multiplier)**を選択します。", + "ko": "**$(multiplier)**을 선택하세요.", + "pl": "Wybierz **$(multiplier)**.", "pt": "Selecione **$(multiplier)**.", + "ru": "Выберите **$(multiplier)**.", + "sl": "Izberite **$(multiplier)**.", + "sq": "Zgjidhni **$(multiplier)**.", "th": "เลือก **$(multiplier)**", - "ar": "تحديد **$(multiplier)**." + "uk": "Виберіть **$(multiplier)**.", + "zh": "选择**$(multiplier)**。" } } }, @@ -571,10 +898,20 @@ "messageByLocale": { "en": "We will make **$(multiplier)** disappear on collision.", "fr": "Nous allons faire disparaître **$(multiplier)** en cas de collision.", + "ar": "سوف نجعل **$(multiplier)** تختفي مع التصادم.", + "de": "Wir werden **$(multiplier)** bei Kollision verschwinden lassen.", "es": "Haremos que **$(multiplier)** desaparezca en caso de colisión.", + "it": "Faremo scomparire **$(multiplier)** in caso di collisione.", + "ja": "衝突時に**$(multiplier)**を消えるようにします。", + "ko": "충돌 시 **$(multiplier)**을 사라지게 만들 것입니다.", + "pl": "Sprawimy, że **$(multiplier)** zniknie w przypadku kolizji.", "pt": "Vamos fazer com que **$(multiplier)** desapareça em caso de colisão.", + "ru": "Мы заставим **$(multiplier)** исчезнуть при столкновении.", + "sl": "Naredili bomo, da **$(multiplier)** izgine ob trku.", + "sq": "Do të bëjmë që **$(multiplier)** të zhduket në rast të grushtit.", "th": "เราจะทำให้ **$(multiplier)** หายไปเมื่อมีการชนกัน", - "ar": "سوف نجعل **$(multiplier)** تختفي مع التصادم." + "uk": "Ми зробимо **$(multiplier)** зникне при зіткненні.", + "zh": "我们将使**$(multiplier)**在碰撞时消失。" } } }, @@ -590,10 +927,20 @@ "messageByLocale": { "en": "It is important to note that only the $(multiplier) that is hitted by the $(ball) (matches our condition) will be deleted. This principle is called **Object picking**.\n\nLet's close this dialog.", "fr": "Il est important de noter que seul le $(multiplier) qui est touché par la $(ball) (qui correspond à notre condition) sera supprimé. On appelle ce principe le **choix d'objet**.\n\nFermons cette boîte de dialogue.", + "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nلنغلق هذه.", + "de": "Es ist wichtig zu beachten, dass nur der $(multiplier), der von der $(ball) getroffen wird (unserer Bedingung entspricht), gelöscht wird. Dieses Prinzip nennt sich **Objektauswahl**.\n\nLassen Sie uns diesen Dialog schließen.", "es": "Es importante tomar en cuenta que solo el $(multiplier) que sea tocado por la $(ball) (coincida con nuestra condición) será eliminado. Este principio se llama **elección de objeto**.\n\nCerraremos esta ventana.", + "it": "È importante notare che solo il $(multiplier) colpito dalla $(ball) (che corrisponde alla nostra condizione) verrà eliminato. Questo principio si chiama **scelta dell'oggetto**.\n\nChiudiamo questa finestra.", + "ja": "重要なことは、$(ball)によって当たられた$(multiplier)(私たちの条件に一致する)だけが削除されるということです。この原則は**オブジェクトの選択**と呼ばれます。\n\nこのダイアログを閉じましょう。", + "ko": "중요한 점은 $(ball)이 맞은 $(multiplier)만이 삭제될 것이라는 것입니다. 이 원리는 **객체 선택**이라고 합니다.\n\n이 대화 상자를 닫아봅시다.", + "pl": "Warto zauważyć, że tylko $(multiplier), który zostanie uderzony przez $(ball) (spełniający nasz warunek) zostanie usunięty. Zasada ta nazywa się **Wybór obiektu**.\n\nZamknijmy to okno dialogowe.", "pt": "É importante notar que apenas o $(multiplier) que for atingido pela $(ball) (que corresponder à nossa condição) será excluído. Esse princípio é chamado de **escolha de objeto**.\n\nVamos fechar esta janela.", + "ru": "Важно отметить, что будет удален только $(multiplier), который будет ударен $(ball) (соответствует нашему условию). Этот принцип называется **Выбор объекта**.\n\nДавайте закроем это диалоговое окно.", + "sl": "Pomembno je opozoriti, da bo izbrisan samo $(multiplier), ki ga zadene $(ball) (ustreza našemu pogoju). Ta načelo se imenuje **Izbira predmeta**.\n\nZaprimo to okno.", + "sq": "Është e rëndësishme të theksohet se vetëm $(multiplier) që goditet nga $(ball) (përputhet me kushtin tonë) do të fshihet. Ky parim quhet **Zgjedhja e objektit**.\n\nLe të mbyllim këtë dritare.", "th": "สิ่งสำคัญที่คุณควรจดจำไว้คือ มีเพียง $(multiplier) ที่ตรงกับเงื่อนไขเท่านั้นที่ถูกลบ เรียกว่า **การเลือกวัตถุ** ปิดหน้าต่างนี้", - "ar": "من المهم أن تلاحظ أن الـ $(multiplier) المضروبة بواسطة الـ $(ball) طبقًا لشرطنا هي فقط ما سيتم حذفها، هذا المبدأ يدعى **إلتقاط الكائن**.\n\nلنغلق هذه." + "uk": "Важливо відзначити, що буде видалено лише $(multiplier), який буде вдарений $(ball) (відповідає нашій умові). Цей принцип називається **Вибір об'єкта**.\n\nДавайте закриємо це вікно.", + "zh": "重要的是只有被$(ball)击中的$(multiplier)(符合我们的条件)将被删除。这个原则叫做**对象选择**。\n\n让我们关闭这个对话框。" } }, "placement": "top" @@ -609,10 +956,20 @@ "messageByLocale": { "en": "Now let's **play a sound** when it is collected!.", "fr": "Maintenant, **jouons un son** quand il est collecté !", + "ar": "الآن سوف نقوم ب**تشغيل صوت** عندما يتم جمع المضاعِفات!", + "de": "Lassen Sie uns jetzt ein **Geräusch abspielen**, wenn es gesammelt wird!", "es": "¡Ahora, **reproducimos un sonido** cuando se recolecta!", + "it": "Ora facciamo **suonare un suono** quando viene raccolto!", + "ja": "今、それが集められたときに**音を再生**しましょう!", + "ko": "이제 **수집될 때 소리를 재생**해봅시다!", + "pl": "Teraz zagramy **dźwięk** kiedy zostanie zebrany!", "pt": "Agora, **reproduzimos um som** quando é coletado!", + "ru": "Теперь давайте **воспроизведем звук**, когда он будет собран!", + "sl": "Zdaj **predvajajmo zvok**, ko je zbran!", + "sq": "Tani le të **luajmë një tingull** kur të jetë i mbledhur!", "th": "ทีนี้มาเพิ่มการ **เล่นเสียง** เมื่อมีการเก็บ!", - "ar": "الآن سوف نقوم ب**تشغيل صوت** عندما يتم جمع المضاعِفات!" + "uk": "Тепер давайте **відтворимо звук**, коли він буде зібраний!", + "zh": "现在让我们在被收集时**播放声音**!" } } } @@ -627,10 +984,20 @@ "messageByLocale": { "en": "Search for **sound**.", "fr": "Recherchez **son**.", + "ar": "البحث عن **صوت**.", + "de": "Suchen Sie nach **Geräusch**.", "es": "Busque **sonido**.", + "it": "Cerca **suono**.", + "ja": "**音**を検索します。", + "ko": "**소리**를 검색하세요.", + "pl": "Szukaj **dźwięku**.", "pt": "Procure **som**.", + "ru": "Ищите **звук**.", + "sl": "Išči **zvok**.", + "sq": "Kërkoni **tingull**.", "th": "ค้นหา **sound**", - "ar": "البحث عن **صوت**." + "uk": "Шукайте **звук**.", + "zh": "搜索**声音**。" } } }, @@ -646,10 +1013,20 @@ "messageByLocale": { "en": "Select the **Play a sound** action.", "fr": "Sélectionnez l'action **Jouer un son**.", + "ar": "تحديد الإجراء **تشغيل صوت**.", + "de": "Wählen Sie die **Geräusch abspielen**-Aktion.", "es": "Seleccione la acción **Reproducir un sonido**.", + "it": "Seleziona l'azione **Riproduci un suono**.", + "ja": "**音を再生**アクションを選択します。", + "ko": "**소리 재생** 조치를 선택하세요.", + "pl": "Wybierz akcję **Odtwórz dźwięk**.", "pt": "Selecione a ação **Reproduzir um som**.", + "ru": "Выберите действие **Воспроизвести звук**.", + "sl": "Izberite **Predvajaj zvok** akcijo.", + "sq": "Zgjidhni veprimin **Luaj një tingull**.", "th": "เลือกการกระทำ **เล่นเสียง**", - "ar": "تحديد الإجراء **تشغيل صوت**." + "uk": "Виберіть дію **Відтворити звук**.", + "zh": "选择**播放声音**动作。" } } }, @@ -665,10 +1042,20 @@ "messageByLocale": { "en": "Click on the field to see the options, and select **ClickerBeep2.wav**.", "fr": "Cliquez sur le champ pour voir les options, et sélectionnez **ClickerBeep2.wav**.", + "ar": "الضغط على الحقل لرؤية الخيارات، وتحديد **ClickerBeep2.wav**.", + "de": "Klicken Sie auf das Feld, um die Optionen zu sehen, und wählen Sie **ClickerBeep2.wav**.", "es": "Haga clic en el campo para ver las opciones y seleccione **ClickerBeep2.wav**.", + "it": "Clicca sul campo per vedere le opzioni e seleziona **ClickerBeep2.wav**.", + "ja": "フィールドをクリックしてオプションを表示し、**ClickerBeep2.wav**を選択します。", + "ko": "옵션을 보려면 필드를 클릭하고 **ClickerBeep2.wav**을 선택하세요.", + "pl": "Kliknij w pole, aby zobaczyć opcje, a następnie wybierz **ClickerBeep2.wav**.", "pt": "Clique no campo para ver as opções e selecione **ClickerBeep2.wav**.", + "ru": "Нажмите на поле, чтобы увидеть варианты, и выберите **ClickerBeep2.wav**.", + "sl": "Kliknite na polje, da vidite možnosti, in izberite **ClickerBeep2.wav**.", + "sq": "Kliko në fushë për të parë opsionet, dhe zgjidh **ClickerBeep2.wav**.", "th": "คลิกที่ field เพื่อดูตัวเลือก แล้วเลือก **ClickerBeep2.wav**", - "ar": "الضغط على الحقل لرؤية الخيارات، وتحديد **ClickerBeep2.wav**." + "uk": "Клацніть на полі, щоб побачити варіанти, і виберіть **ClickerBeep2.wav**.", + "zh": "点击字段查看选项,然后选择**ClickerBeep2.wav**。" } }, "placement": "top" @@ -683,12 +1070,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now the sound will play when the $(ball) collects a $(multiplier)!", - "fr": "Bien, maintenant le son sera joué quand $(ball) collecte un $(multiplier) !", - "es": "¡Bien, ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", - "pt": "Ótimo, agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!", - "th": "เอาล่ะ ทีนี้เสียงก็จะเล่นเมื่อ $(ball) เก็บ $(multiplier) แล้ว!", - "ar": "حسنًا، الآن سيتم تشغيل الصوت عندما تجمع الـ $(ball) الـ $(multiplier)!" + "en": "Now the sound will play when the $(ball) collects a $(multiplier)!", + "fr": "Maintenant le son sera joué quand $(ball) collecte un $(multiplier) !", + "ar": "الآن سيتم تشغيل الصوت عندما $(ball) تجمع $(multiplier)!", + "de": "Jetzt wird der Ton abgespielt, wenn $(ball) einen $(multiplier) sammelt!", + "es": "¡Ahora el sonido se reproducirá cuando la $(ball) recolecte un $(multiplier)!", + "it": "Ora il suono verrà riprodotto quando la $(ball) raccoglie un $(multiplier)!", + "ja": "今、$(ball)が$(multiplier)を集めると音が再生されます!", + "ko": "이제 $(ball)이 $(multiplier)을 수집할 때 소리가 재생될 것입니다!", + "pl": "Teraz dźwięk będzie odtwarzany, gdy $(ball) zbierze $(multiplier)!", + "pt": "Agora o som será reproduzido quando a $(ball) coletar um $(multiplier)!", + "ru": "Теперь звук будет воспроизводиться, когда $(ball) соберет $(multiplier)!", + "sl": "Zdaj bo zvok predvajan, ko $(ball) zbere $(multiplier)!", + "sq": "Tani tingulli do të luajë kur $(ball) të mblidhë një $(multiplier)!", + "th": "ตอนนี้เสียงจะเล่นเมื่อ $(ball) ได้รับ $(multiplier)!", + "uk": "Тепер звук буде відтворюватися, коли $(ball) зібере $(multiplier)!", + "zh": "现在当$(ball)收集$(multiplier)时,声音将播放!" } }, "placement": "top" @@ -704,10 +1101,20 @@ "messageByLocale": { "en": "Let's **update our variable** accordingly.", "fr": "Mettons à jour notre **variable** en conséquence.", + "ar": "هيّا نقوم ب**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها.", + "de": "Aktualisieren wir unsere **Variable** entsprechend.", "es": "Actualicemos nuestra **variable** en consecuencia.", + "it": "Aggiorniamo la nostra **variabile** di conseguenza.", + "ja": "それに応じて**変数を更新**しましょう。", + "ko": "우리의 **변수를 업데이트**해봅시다.", + "pl": "Zaktualizujmy naszą **zmienną** odpowiednio.", "pt": "Atualizemos nossa **variável** em conformidade.", + "ru": "Давайте **обновим нашу переменную** соответственно.", + "sl": "Posodobimo naš **spremenljivko** ustrezno.", + "sq": "Le të **përditësojmë variablën tonë** në përputhje.", "th": "ทำการ **อัพเดทตัวแปร**", - "ar": "هيّا نقوم ب**تحديث متغيرنا** لتوافق المضاعِفات التي تم جمعها." + "uk": "Давайте **оновимо нашу змінну** відповідно.", + "zh": "让我们**根据情况更新我们的变量**。" } } } @@ -722,10 +1129,20 @@ "messageByLocale": { "en": "Search for **scene variable**.", "fr": "Recherchez **variable de scène**.", + "ar": "البحث عن **متغير المشهد**.", + "de": "Suchen Sie nach **Szenevariable**.", "es": "Busque **variable de escena**.", + "it": "Cerca **variabile di scena**.", + "ja": "**シーン変数**を検索します。", + "ko": "**씬 변수**를 검색하세요.", + "pl": "Szukaj **zmiennej sceny**.", "pt": "Procure **variável de cena**.", + "ru": "Ищите **переменную сцены**.", + "sl": "Išči **spremenljivko prizorišča**.", + "sq": "Kërkoni **variabël e skenës**.", "th": "ค้นหา **ตัวแปรของ scene", - "ar": "البحث عن **متغير المشهد**." + "uk": "Шукайте **змінну сцени**.", + "zh": "搜索**场景变量**。" } } }, @@ -741,10 +1158,20 @@ "messageByLocale": { "en": "Our multiplier is a number, so let's select **Change number variable** action.", "fr": "Notre multiplicateur est un nombre, donc sélectionnons l'action **Modifier une variable numérique**.", + "ar": "مضاعِفاتنا عبارة عن عدد، لذلك هيّا نقوم بتحديد الإجراء **تغيير متغير عدد**.", + "de": "Unser Multiplikator ist eine Zahl, also wählen wir die **Zahlvariable ändern**-Aktion.", "es": "Nuestro multiplicador es un número, por lo que seleccionemos la acción **Cambiar variable numérica**.", + "it": "Il nostro moltiplicatore è un numero, quindi selezioniamo l'azione **Modifica variabile numerica**.", + "ja": "私たちの乗数は数字なので、**数値変数を変更**アクションを選択しましょう。", + "ko": "우리의 배수는 숫자이므로 **숫자 변수 변경** 조치를 선택해봅시다.", + "pl": "Nasz mnożnik to liczba, więc wybierzmy akcję **Zmień zmienną liczbową**.", "pt": "Nosso multiplicador é um número, então vamos selecionar a ação **Alterar variável numérica**.", + "ru": "Наш множитель - это число, поэтому давайте выберем действие **Изменить числовую переменную**.", + "sl": "Naš množitelj je število, zato izberimo akcijo **Spremeni številsko spremenljivko**.", + "sq": "Shumëzuesi ynë është një numër, kështu që le të zgjedhim veprimin **Ndrysho variablën numër**.", "th": "multiplier ของเราเป็นตัวเลข ดังนั้นเลือกการกระทำ **เปลี่ยนตัวเลขตัวแปร**", - "ar": "مضاعِفاتنا عبارة عن عدد، لذلك هيّا نقوم بتحديد الإجراء **تغيير متغير عدد**." + "uk": "Наш множник - це число, тому давайте виберемо дію **Змінити числову змінну**.", + "zh": "我们的乘数是一个数字,所以让我们选择**更改数字变量**动作。" } } }, @@ -753,17 +1180,27 @@ { "elementToHighlightId": "#parameter-0-scene-variable-field", "nextStepTrigger": { - "valueEquals": "Multiplier" + "valueEquals": "Multi" }, "tooltip": { "description": { "messageByLocale": { - "en": "Select the variable we created earlier, **Multiplier**.", - "fr": "Sélectionnez la variable que nous avons créée précédemment, **Multiplier**.", - "es": "Seleccione la variable que creamos anteriormente, **Multiplier**.", - "pt": "Selecione a variável que criamos anteriormente, **Multiplier**.", - "th": "เลือกตัวแปรที่เราสร้าง **Multiplier**", - "ar": "تحديد المتغير الذي قمنا بإنشائه في البداية (**Multiplier**)." + "en": "Select the variable we created earlier, **Multi**.", + "fr": "Sélectionnez la variable que nous avons créée précédemment, **Multi**.", + "ar": "تحديد المتغير الذي قمنا بإنشائه في البداية (**Multi**).", + "de": "Wählen Sie die Variable, die wir zuvor erstellt haben, **Multi**.", + "es": "Seleccione la variable que creamos anteriormente, **Multi**.", + "it": "Seleziona la variabile che abbiamo creato in precedenza, **Multi**.", + "ja": "先ほど作成した変数**Multi**を選択します。", + "ko": "이전에 만든 변수 **Multi**를 선택하세요.", + "pl": "Wybierz zmienną, którą wcześniej utworzyliśmy, **Multi**.", + "pt": "Selecione a variável que criamos anteriormente, **Multi**.", + "ru": "Выберите переменную, которую мы создали ранее, **Multi**.", + "sl": "Izberite spremenljivko, ki smo jo ustvarili prej, **Multi**.", + "sq": "Zgjidhni variablën që krijuam më parë, **Multi**.", + "th": "เลือกตัวแปรที่เราสร้าง **Multi**", + "uk": "Виберіть змінну, яку ми створили раніше, **Multi**.", + "zh": "选择我们之前创建的变量**Multi**。" } }, "placement": "top" @@ -780,10 +1217,20 @@ "messageByLocale": { "en": "We want to increase the multiplier, so let's select **+ (add)**.", "fr": "Nous voulons augmenter le multiplicateur, donc sélectionnons **+ (ajouter)**.", + "ar": "نحن نريد أن نزيد المضاعِفات، لذلك هيّا نقوم بتحديد **+ (زائد)**.", + "de": "Wir wollen den Multiplikator erhöhen, also wählen wir **+ (hinzufügen)**.", "es": "Queremos aumentar el multiplicador, así que seleccionemos **+ (agregar)**.", + "it": "Vogliamo aumentare il moltiplicatore, quindi selezioniamo **+ (aggiungi)**.", + "ja": "私たちは乗数を増やしたいので、**+ (加算)**を選択しましょう。", + "ko": "우리는 배수를 증가시키고 싶으므로 **+ (더하기)**를 선택하세요.", + "pl": "Chcemy zwiększyć mnożnik, więc wybierzmy **+ (dodaj)**.", "pt": "Queremos aumentar o multiplicador, então vamos selecionar **+ (adicionar)**.", + "ru": "Мы хотим увеличить множитель, поэтому выберем **+ (добавить)**.", + "sl": "Želimo povečati množitelj, zato izberimo **+ (dodaj)**.", + "sq": "Ne duam të rrisim shumëzuesin, kështu që le të zgjedhim **+ (shto)**.", "th": "เราต้องการเพิ่ม multiplier จึงเลือก **+ (เพิ่ม)**", - "ar": "نحن نريد أن نزيد المضاعِفات، لذلك هيّا نقوم بتحديد **+ (زائد)**." + "uk": "Ми хочемо збільшити множник, тому виберемо **+ (додати)**.", + "zh": "我们想增加乘数,所以让我们选择**+(加)**。" } }, "placement": "bottom" @@ -800,10 +1247,20 @@ "messageByLocale": { "en": "Let's enter **1**.", "fr": "Entrez **1**.", + "ar": "هيّا نقوم بإدخال **1**.", + "de": "Geben wir **1** ein.", "es": "Ingrese **1**.", + "it": "Inseriamo **1**.", + "ja": "**1**を入力しましょう。", + "ko": "**1**을 입력하세요.", + "pl": "Wprowadźmy **1**.", "pt": "Digite **1**.", + "ru": "Давайте введем **1**.", + "sl": "Vnesimo **1**.", + "sq": "Le të futemi **1**.", "th": "ใส่ **1**", - "ar": "هيّا نقوم بإدخال **1**." + "uk": "Введемо **1**.", + "zh": "输入**1**。" } }, "placement": "bottom" @@ -818,12 +1275,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, now our scene variable **Multiplier** will **increase by 1** every time **$(ball) collects a $(multiplier)**.", - "fr": "Bien, maintenant notre variable de scène **Multiplier** **augmentera de 1** à chaque fois que $(ball) collecte un $(multiplier).", - "es": "¡Bien, ahora nuestra variable de escena **Multiplier** **aumentará en 1** cada vez que la $(ball) recolecte un $(multiplier)!", - "pt": "Ótimo, agora nossa variável de cena **Multiplier** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!", - "th": "เอาล่ะ ทีนี้ตัวแปร scene **Multiplier** ก็จะ **เพิ่มขึ้นทีละ 1** ทุกครั้งที่ **$(ball) เก็บ $(multiplier)**", - "ar": "حسنًا، الآن متغير المشهد **Multiplier** سوف **يزداد بمقدار 1** في كل مرة **تقوم الـ $(ball) بجمع الـ $(multiplier)**." + "en": "Now our scene variable **Multi** will **increase by 1** every time **$(ball) collects a $(multiplier)**.", + "fr": "Maintenant notre variable de scène **Multi** **augmentera de 1** à chaque fois que $(ball) collecte un $(multiplier).", + "ar": "الآن سيقوم متغير المشهد **Multi** ب**زيادة بمقدار 1** في كل مرة **$(ball) تجمع $(multiplier)**.", + "de": "Jetzt wird unsere Szenevariable **Multi** **um 1 erhöht** jedes Mal, wenn **$(ball) einen $(multiplier) sammelt**.", + "es": "¡Ahora nuestra variable de escena **Multi** **aumentará en 1** cada vez que la $(ball) recolecte un $(multiplier)!", + "it": "Ora la nostra variabile di scena **Multi** **aumenterà di 1** ogni volta che la $(ball) raccoglie un $(multiplier)!", + "ja": "今、私たちのシーン変数**Multi**は**$(ball)が$(multiplier)を集めるたびに1ずつ増加**します。", + "ko": "이제 우리의 씬 변수 **Multi**는 **$(ball)이 $(multiplier)을 수집할 때마다 1씩 증가**할 것입니다.", + "pl": "Teraz nasza zmienna sceny **Multi** **zwiększy się o 1** za każdym razem, gdy **$(ball) zbierze $(multiplier)**.", + "pt": "Agora nossa variável de cena **Multi** **aumentará em 1** toda vez que a $(ball) coletar um $(multiplier)!", + "ru": "Теперь наша переменная сцены **Multi** будет **увеличиваться на 1** каждый раз, когда **$(ball) соберет $(multiplier)**.", + "sl": "Zdaj bo naša spremenljivka prizorišča **Multi** **povečana za 1** vsakič, ko **$(ball) zbere $(multiplier)**.", + "sq": "Tani variabla jonë e skenës **Multi** do të **rritet me 1** çdo herë që **$(ball) të mblidhë një $(multiplier)**.", + "th": "ตอนนี้ตัวแปรของเรา **Multi** จะ **เพิ่มขึ้น 1** ทุกครั้งที่ **$(ball) ได้รับ $(multiplier)**", + "uk": "Тепер наша змінна сцени **Multi** буде **збільшуватися на 1** кожен раз, коли **$(ball) зібере $(multiplier)**.", + "zh": "现在我们的场景变量**Multi**将在**$(ball)收集$(multiplier)时每次增加1**。" } }, "placement": "top" @@ -839,10 +1306,20 @@ "messageByLocale": { "en": "Let's add some juice and **create particles** when the **$(multiplier)** is collected.", "fr": "Ajoutons un peu de piquant et **créons des particules** quand le **$(multiplier)** est collecté.", + "ar": "هيّا ننعش أجواء اللعبة ونقوم ب**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**.", + "de": "Lassen Sie uns etwas Saft hinzufügen und **Partikel erstellen**, wenn der **$(multiplier)** gesammelt wird.", "es": "Agreguemos un poco de sabor y **creemos partículas** cuando el **$(multiplier)** es recolectado.", + "it": "Aggiungiamo un po' di succo e **creiamo delle particelle** quando il **$(multiplier)** viene raccolto.", + "ja": "**$(multiplier)**が集められたときに、ジュースを加えて**粒子を作成**しましょう。", + "ko": "**$(multiplier)**이 수집될 때 약간의 즐거움을 더하고 **파티클을 생성**해봅시다.", + "pl": "Dodajmy trochę soku i **stwórzmy cząsteczki** kiedy **$(multiplier)** zostanie zebrany.", "pt": "Vamos adicionar um pouco de sabor e **criar partículas** quando o **$(multiplier)** for coletado.", + "ru": "Давайте добавим немного сока и **создадим частицы**, когда **$(multiplier)** будет собран.", + "sl": "Dodajmo nekaj soka in **ustvarimo delce**, ko bo **$(multiplier)** zbran.", + "sq": "Le të shtojmë pak lëng dhe **të krijojmë pjesë** kur **$(multiplier)** të jetë i mbledhur.", "th": "เพิ่มความน่าตื่นเต้นโดย **สร้าง particles** เมื่อ **$(multiplier)** ถูกเก็บ", - "ar": "هيّا ننعش أجواء اللعبة ونقوم ب**إنشاء جسيمات** عندما يتم جمع الـ **$(multiplier)**." + "uk": "Давайте додамо трохи соку та **створимо частинки**, коли **$(multiplier)** буде зібрано.", + "zh": "让我们在**$(multiplier)**被收集时添加一些元素,**创建粒子**。" } } } @@ -857,10 +1334,20 @@ "messageByLocale": { "en": "Search for **Create**.", "fr": "Recherchez **Créer**.", + "ar": "البحث عن **إنشاء**.", + "de": "Suchen Sie nach **Erstellen**.", "es": "Busque **Crear**.", + "it": "Cerca **Crea**.", + "ja": "**作成**を検索します。", + "ko": "**생성**을 검색하세요.", + "pl": "Szukaj **Utwórz**.", "pt": "Procure por **Criar**.", + "ru": "Ищите **Создать**.", + "sl": "Išči **Ustvari**.", + "sq": "Kërkoni **Krijo**.", "th": "ค้นหา **สร้าง**", - "ar": "البحث عن **إنشاء**." + "uk": "Шукайте **Створити**.", + "zh": "搜索**创建**。" } } }, @@ -876,10 +1363,20 @@ "messageByLocale": { "en": "We will **create some particles** we've prepared for you, pick the **Create an object** action.", "fr": "Nous allons **créer des particules** que nous avons préparées pour vous, choisissez l'action **Créer un objet**.", + "ar": "سوف نقوم ب**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن**.", + "de": "Wir werden **einige Partikel erstellen**, die wir für Sie vorbereitet haben, wählen Sie die Aktion **Objekt erstellen**.", "es": "Vamos a **crear algunas partículas** que hemos preparado para usted, elija la acción **Crear un objeto**.", + "it": "Creeremo **alcune particelle** che abbiamo preparato per te, scegli l'azione **Crea un oggetto**.", + "ja": "私たちが用意した**粒子を作成**しましょう。**オブジェクトを作成**アクションを選択します。", + "ko": "우리가 준비한 **파티클을 생성**해봅시다. **객체 생성** 조치를 선택하세요.", + "pl": "Utworzymy **kilka cząsteczek**, które dla ciebie przygotowaliśmy, wybierz akcję **Utwórz obiekt**.", "pt": "Vamos **criar algumas partículas** que preparamos para você, escolha a ação **Criar um objeto**.", + "ru": "Мы **создадим несколько частиц**, которые мы для вас подготовили, выберите действие **Создать объект**.", + "sl": "Ustvarili bomo **nekaj delcev**, ki smo jih pripravili za vas, izberite akcijo **Ustvari predmet**.", + "sq": "Do të **krijojmë disa pjesë** që kemi përgatitur për ju, zgjidhni veprimin **Krijo një objekt**.", "th": "เราจะ **สร้าง some particles** เราเตรียมเอาไว้ให้คุณแล้ว เลือกการกระทำ **สร้างวัตถุ**", - "ar": "سوف نقوم ب**إنشاء بعض الجسيمات** قمنا بتحضيرها لأجلك، إلتقاط الإجراء **إنشاء كائن**." + "uk": "Ми **створимо декілька частинок**, які ми підготували для вас, виберіть дію **Створити об'єкт**.", + "zh": "我们将**创建一些粒子**,我们已经为您准备好了,选择**创建一个对象**动作。" } } }, @@ -895,10 +1392,20 @@ "messageByLocale": { "en": "Select the particles we've prepared, **$(particles)**.", "fr": "Sélectionnez les particules que nous avons préparées, **$(particles)**.", + "ar": "تحديد الجسيمات التي حضرناها (**$(particles)**).", + "de": "Wählen Sie die Partikel aus, die wir für Sie vorbereitet haben, **$(particles)**.", "es": "Seleccione las partículas que hemos preparado, **$(particles)**.", + "it": "Seleziona le particelle che abbiamo preparato, **$(particles)**.", + "ja": "私たちが用意した粒子**$(particles)**を選択します。", + "ko": "우리가 준비한 파티클 **$(particles)**를 선택하세요.", + "pl": "Wybierz cząsteczki, które dla ciebie przygotowaliśmy, **$(particles)**.", "pt": "Selecione as partículas que preparamos, **$(particles)**.", + "ru": "Выберите частицы, которые мы для вас подготовили, **$(particles)**.", + "sl": "Izberite delce, ki smo jih pripravili za vas, **$(particles)**.", + "sq": "Zgjidhni pjesët që kemi përgatitur për ju, **$(particles)**.", "th": "เลือก **$(particles)** ที่เตรียมไว้", - "ar": "تحديد الجسيمات التي حضرناها (**$(particles)**)." + "uk": "Виберіть частинки, які ми підготували для вас, **$(particles)**.", + "zh": "选择我们准备好的粒子**$(particles)**。" } }, "placement": "top" @@ -915,10 +1422,20 @@ "messageByLocale": { "en": "Let's make it spawn where the multiplier was,\n\nenter `$(multiplier).X()`.", "fr": "Faisons en sorte qu'elles apparaissent là où le multiplicateur était,\n\nentrez `$(multiplier).X()`.", + "ar": "هيّا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X()`.", + "de": "Lassen Sie es dort erscheinen, wo der Multiplikator war,\n\ngeben Sie `$(multiplier).X()` ein.", "es": "Hagamos que aparezcan donde estaba el multiplicador,\n\ningrese `$(multiplier).X()`.", + "it": "Facciamolo apparire dove era il moltiplicatore,\n\ninserisci `$(multiplier).X()`.", + "ja": "乗数があった場所に出現させましょう。\n\n`$(multiplier).X()`を入力します。", + "ko": "배수가 있던 곳에 생성되도록 만들어봅시다.\n\n`$(multiplier).X()`를 입력하세요.", + "pl": "Sprawmy, żeby pojawiły się tam, gdzie był mnożnik,\n\nwprowadź `$(multiplier).X()`.", "pt": "Vamos fazer com que elas apareçam onde o multiplicador estava,\n\ndigite `$(multiplier).X()`.", + "ru": "Давайте сделаем так, чтобы они появлялись там, где был множитель,\n\nвведите `$(multiplier).X()`.", + "sl": "Naredimo, da se pojavijo tam, kjer je bil množitelj,\n\nvnesite `$(multiplier).X()`.", + "sq": "Le të bëjmë që të shfaqen atje ku ishte shumëzuesi,\n\nfutni `$(multiplier).X()`.", "th": "ตั้งจุดกำเนิดไว้ที่ตำแหน่งของ multiplier\n\nใส่ `$(multiplier).X()`", - "ar": "هيّا نقوم بجعلها تتوالد أينما كان المضاعِف،\n\nإدخال `$(multiplier).X()`." + "uk": "Давайте зробимо, щоб вони з'являлися там, де був множник,\n\nвведіть `$(multiplier).X()`.", + "zh": "让它在乘数的位置生成,\n\n输入`$(multiplier).X()`。" } }, "placement": "bottom" @@ -935,10 +1452,20 @@ "messageByLocale": { "en": "And `$(multiplier).Y()`.", "fr": "Et `$(multiplier).Y()`.", + "ar": "و `$(multiplier).Y()`.", + "de": "Und `$(multiplier).Y()`.", "es": "Y `$(multiplier).Y()`.", + "it": "E `$(multiplier).Y()`.", + "ja": "そして`$(multiplier).Y()`。", + "ko": "그리고 `$(multiplier).Y()`.", + "pl": "I `$(multiplier).Y()`.", "pt": "E `$(multiplier).Y()`.", + "ru": "И `$(multiplier).Y()`.", + "sl": "In `$(multiplier).Y()`.", + "sq": "Dhe `$(multiplier).Y()`.", "th": "และ `$(multiplier).Y()`", - "ar": "و `$(multiplier).Y()`." + "uk": "І `$(multiplier).Y()`.", + "zh": "和`$(multiplier).Y()`。" } }, "placement": "bottom" @@ -955,10 +1482,20 @@ "messageByLocale": { "en": "Nice! Our **$(particles)** will be **created** exactly where the **$(multiplier)** was, giving a nice effect!", "fr": "Bien! Nos **$(particles)** seront **créées** exactement là où se trouvait le **$(multiplier)**, ce qui donnera un bel effet !", + "ar": "جميل! الـ **$(particles)** سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!", + "de": "Schön! Unsere **$(particles)** werden **genau dort erstellt**, wo der **$(multiplier)** war, was einen schönen Effekt ergibt!", "es": "¡Bien! Nuestras **$(particles)** serán **creadas** exactamente donde estaba el **$(multiplier)**, ¡lo que dará un buen efecto!", + "it": "Bene! Le nostre **$(particles)** saranno **create** esattamente dove era il **$(multiplier)**, dandoci un bel effetto!", + "ja": "素晴らしい!**$(particles)**は**$(multiplier)**があった場所に**作成**されます。", + "ko": "좋아요! 우리의 **$(particles)**는 **$(multiplier)**가 있던 곳에 **생성**될 것입니다. 멋진 효과를 줄 거에요!", + "pl": "Świetnie! Nasze **$(particles)** zostaną **utworzone** dokładnie tam, gdzie był **$(multiplier)**, co da ładny efekt!", "pt": "Legal! Nossas **$(particles)** serão **criadas** exatamente onde o **$(multiplier)** estava, dando um efeito legal!", + "ru": "Отлично! Наши **$(particles)** будут **созданы** именно там, где был **$(multiplier)**, что создаст красивый эффект!", + "sl": "Lepo! Naše **$(particles)** bodo **ustvarjene** točno tam, kjer je bil **$(multiplier)**, kar bo dalo lep učinek!", + "sq": "E mirë! **$(particles)** tanë do të **krijohen** pikërisht aty ku ishte **$(multiplier)**, duke dhënë një efekt të bukur!", "th": "ดีมาก! **$(particles)** ของเราจะ **ถูกสร้าง** ที่ตำแหน่งของ **$(multiplier)** เป็นเอฟเฟกต์ที่เพิ่มคุณภาพกราฟฟิกได้!", - "ar": "جميل! الـ **$(particles)** سوف **تتوالد** تمامًا أينما كان الـ **$(multiplier)** موجودًا!" + "uk": "Чудово! Наші **$(particles)** будуть **створені** саме там, де був **$(multiplier)**, що створить гарний ефект!", + "zh": "很棒!我们的**$(particles)**将会**在$(multiplier)的位置创建**,产生一个很棒的效果!" } }, "placement": "top" @@ -974,10 +1511,20 @@ "messageByLocale": { "en": "Finally, we need to ensure that the **$(scoreMultiplier)** we've placed on the scene gets updated accordingly!", "fr": "Enfin, nous devons nous assurer que le **$(scoreMultiplier)** que nous avons placé sur la scène est mis à jour en conséquence !", + "ar": "وأخيرًا وليس آخرًا، نحتاج أن نتحقق أن الـ **$(scoreMultiplier)** التي أدرجناها في المشهد سيتم تحديثها متوافقةً مع المضاعِفات التي تم جمعها!", + "de": "Schließlich müssen wir sicherstellen, dass der **$(scoreMultiplier)**, den wir in der Szene platziert haben, entsprechend aktualisiert wird!", "es": "¡Finalmente, debemos asegurarnos de que el **$(scoreMultiplier)** que hemos colocado en la escena se actualice en consecuencia!", + "it": "Infine, dobbiamo assicurarci che il **$(scoreMultiplier)** che abbiamo posizionato nella scena venga aggiornato di conseguenza!", + "ja": "最後に、シーンに配置した**$(scoreMultiplier)**が適切に更新されるようにしましょう!", + "ko": "마지막으로, 씬에 배치한 **$(scoreMultiplier)**가 적절하게 업데이트되도록 해야 합니다!", + "pl": "Wreszcie musimy upewnić się, że **$(scoreMultiplier)**, który umieściliśmy na scenie, zostanie odpowiednio zaktualizowany!", "pt": "Finalmente, precisamos nos certificar de que o **$(scoreMultiplier)** que colocamos na cena seja atualizado de acordo!", + "ru": "Наконец, нам нужно убедиться, что **$(scoreMultiplier)**, который мы разместили на сцене, будет обновлен соответственно!", + "sl": "Nazadnje moramo zagotoviti, da se **$(scoreMultiplier)**, ki smo ga postavili na prizorišče, ustrezno posodobi!", + "sq": "Përfundimisht, duhet të sigurohemi që **$(scoreMultiplier)** që kemi vendosur në skenë të azhurnohet në përputhje!", "th": "ขั้นสุดท้าย เราต้องการที่จะแน่ใจว่า **$(scoreMultiplier)** ที่เราใส่ใน scene จะต้องอัพเดทอย่างสอดคล้อง!", - "ar": "وأخيرًا وليس آخرًا، نحتاج أن نتحقق أن الـ **$(scoreMultiplier)** التي أدرجناها في المشهد سيتم تحديثها متوافقةً مع المضاعِفات التي تم جمعها!" + "uk": "Нарешті, нам потрібно переконатися, що **$(scoreMultiplier)**, який ми розмістили на сцені, буде відповідно оновлений!", + "zh": "最后,我们需要确保我们放在场景中的**$(scoreMultiplier)**得到相应的更新!" } } } @@ -992,10 +1539,20 @@ "messageByLocale": { "en": "Search for **Text**.", "fr": "Recherchez **Texte**.", + "ar": "البحث عن **نص**.", + "de": "Suchen Sie nach **Text**.", "es": "Busque **Texto**.", + "it": "Cerca **Testo**.", + "ja": "**テキスト**を検索します。", + "ko": "**텍스트**를 검색하세요.", + "pl": "Szukaj **Tekst**.", "pt": "Procure **Texto**.", + "ru": "Ищите **Текст**.", + "sl": "Išči **Besedilo**.", + "sq": "Kërkoni **Tekst**.", "th": "ค้นหา **Text**", - "ar": "البحث عن **نص**." + "uk": "Шукайте **Текст**.", + "zh": "搜索**文本**。" } } }, @@ -1011,10 +1568,20 @@ "messageByLocale": { "en": "We will **Modify the text** that we placed on the screen earlier.", "fr": "Nous allons **Modifier le texte** que nous avons placé à l'écran plus tôt.", + "ar": "سوف نقوم ب**تعديل النص** الذي أدرجناه في الشاشة بالبداية.", + "de": "Wir werden den Text **ändern**, den wir zuvor auf dem Bildschirm platziert haben.", "es": "Vamos a **Modificar el texto** que colocamos en la pantalla anteriormente.", + "it": "Modificheremo il testo che abbiamo posizionato sullo schermo in precedenza.", + "ja": "前の画面に配置した**テキストを変更**します。", + "ko": "이전에 화면에 배치한 **텍스트를 수정**할 것입니다.", + "pl": "Zmodyfikujemy **tekst**, który wcześniej umieściliśmy na ekranie.", "pt": "Vamos **Modificar o texto** que colocamos na tela anteriormente.", + "ru": "Мы **изменим текст**, который мы ранее разместили на экране.", + "sl": "Spremenili bomo **besedilo**, ki smo ga prej postavili na zaslon.", + "sq": "Do të **Modifikojmë tekstin** që vendosëm më parë në ekran.", "th": "เราจะ **แก้ไขข้อความ** ที่เราวางไว้ใน scene ก่อนหน้านี้", - "ar": "سوف نقوم ب**تعديل النص** الذي أدرجناه في الشاشة بالبداية." + "uk": "Ми **змінимо текст**, який ми раніше розмістили на екрані.", + "zh": "我们将**修改**我们之前放在屏幕上的文本。" } } }, @@ -1030,29 +1597,20 @@ "messageByLocale": { "en": "Select the text object **$(scoreMultiplier)**.", "fr": "Sélectionnez l'objet texte **$(scoreMultiplier)**.", + "ar": "تحديد الكائن النصي **$(scoreMultiplier)**.", + "de": "Wählen Sie das Textobjekt **$(scoreMultiplier)**.", + "es": "Seleccione el objeto de texto **$(scoreMultiplier)**.", + "it": "Seleziona l'oggetto testo **$(scoreMultiplier)**.", + "ja": "テキストオブジェクト**$(scoreMultiplier)**を選択します。", + "ko": "텍스트 객체 **$(scoreMultiplier)**를 선택하세요.", + "pl": "Wybierz obiekt tekstowy **$(scoreMultiplier)**.", + "pt": "Selecione o objeto de texto **$(scoreMultiplier)**.", + "ru": "Выберите текстовый объект **$(scoreMultiplier)**.", + "sl": "Izberite besedilni predmet **$(scoreMultiplier)**.", + "sq": "Zgjidh objektin e tekstit **$(scoreMultiplier)**.", "th": "เลือกวัตถุข้อความ **$(scoreMultiplier)**", - "ar": "تحديد الكائن النصي **$(scoreMultiplier)**." - } - }, - "placement": "bottom" - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#parameter-2-operator-field", - "nextStepTrigger": { - "valueEquals": "=" - }, - "skippable": true, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We want to update the text completely, so let's select **= (set to)**.", - "fr": "Nous voulons mettre à jour le texte complètement, alors sélectionnons **= (définir à)**.", - "es": "Queremos actualizar el texto por completo, así que seleccionemos **= (establecer en)**.", - "pt": "Queremos atualizar o texto completamente, então vamos selecionar **= (definir como)**.", - "th": "เราต้องการอัพเดทข้อความใหม่ทั้งหมด ดังนั้นเลือก **= (ตั้งเป็น)**", - "ar": "نحن نريد تحديث النص بالكامل، لذلك هيّا نحدد **= (تعيين إلى)**." + "uk": "Виберіть текстовий об'єкт **$(scoreMultiplier)**.", + "zh": "选择文本对象**$(scoreMultiplier)**。" } }, "placement": "bottom" @@ -1062,17 +1620,27 @@ { "elementToHighlightId": "#parameter-3-string-field", "nextStepTrigger": { - "valueEquals": "\"x\"+VariableString(Multiplier)" + "valueEquals": "\"x\"+Multi" }, "tooltip": { "description": { "messageByLocale": { - "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so.\n\nEnter `\"x\"+VariableString(Multiplier)`.", - "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela.\n\nEntrez `\"x\"+VariableString(Multiplier)`.", - "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+VariableString(Multiplier)`.", - "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+VariableString(Multiplier)`.", - "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+VariableString(Multiplier)`", - "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x2، x1، إلخ... لذلك هيّا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+VariableString(Multiplier)`." + "en": "Now, we need to ensure the text displayed will show x1, x2, etc... so let's use our variable to do so.\n\nEnter `\"x\"+Multi`.", + "fr": "Maintenant, nous devons nous assurer que le texte affiché affichera x1, x2, etc ... alors utilisons notre variable pour cela.\n\nEntrez `\"x\"+Multi`.", + "ar": "الآن، نحتاج إلى التحقق أن النص المعروض سوف يعرض x2، x1، إلخ... لذلك هيّا نقوم باستخدام متغيرنا للقيام بذلك.\n\nإدخال `\"x\"+Multi`.", + "de": "Jetzt müssen wir sicherstellen, dass der angezeigte Text x1, x2, usw. anzeigt ... also verwenden wir unsere Variable dafür.\n\nGeben Sie `\"x\"+Multi` ein.", + "es": "Ahora, debemos asegurarnos de que el texto que se muestra muestre x1, x2, etc ... así que usemos nuestra variable para ello.\n\nIngrese `\"x\"+Multi`.", + "it": "Ora dobbiamo assicurarci che il testo visualizzato mostri x1, x2, ecc... quindi usiamo la nostra variabile per farlo.\n\nInserisci `\"x\"+Multi`.", + "ja": "今、表示されるテキストがx1、x2、などを表示するようにしましょう。そのために変数を使用しましょう。\n\n`\"x\"+Multi`を入力します。", + "ko": "이제 표시된 텍스트가 x1, x2 등을 표시하도록 해야 합니다. 그래서 변수를 사용해봅시다.\n\n`\"x\"+Multi`를 입력하세요.", + "pl": "Teraz musimy upewnić się, że wyświetlany tekst pokaże x1, x2, itp... więc użyjmy naszej zmiennej do tego.\n\nWprowadź `\"x\"+Multi`.", + "pt": "Agora, precisamos nos certificar de que o texto exibido exiba x1, x2, etc ... então vamos usar nossa variável para isso.\n\nDigite `\"x\"+Multi`.", + "ru": "Теперь нам нужно убедиться, что отображаемый текст будет показывать x1, x2 и т. д. ... поэтому давайте используем нашу переменную для этого.\n\nВведите `\"x\"+Multi`.", + "sl": "Zdaj moramo zagotoviti, da bo prikazano besedilo prikazalo x1, x2, itd ... zato uporabimo našo spremenljivko za to.\n\nVnesite `\"x\"+Multi`.", + "sq": "Tani, duhet të sigurohemi që teksti i shfaqur do të tregojë x1, x2, etj... kështu që le të përdorim variablën tonë për këtë.\n\nFutni `\"x\"+Multi`.", + "th": "ทีนี้เราแน่ใจแล้วว่าข้อความจะแสดง x1, x2, ... ไปเรื่อยๆ ใช้ตัวแปรเพื่อทำเช่นนั้น\n\nใส่ `\"x\"+Multi`", + "uk": "Тепер нам потрібно переконатися, що відображений текст буде показувати x1, x2, і т. д. ... тому давайте використаємо нашу змінну для цього.\n\nВведіть `\"x\"+Multi`.", + "zh": "现在,我们需要确保显示的文本将显示x1、x2等...所以让我们使用我们的变量来做到这一点。\n\n输入`\"x\"+Multi`。" } }, "placement": "bottom" @@ -1087,55 +1655,27 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Nice! our **$(scoreMultiplier)** will now be updated thanks to the **Multiplier variable** that we converted to a text!", - "fr": "Bien ! notre **$(scoreMultiplier)** sera maintenant mis à jour grâce à la **variable Multiplier** que nous avons convertie en texte !", - "es": "¡Bien! ¡nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", - "pt": "Legal! nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!", - "th": "ดีมาก! **$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ", - "ar": "جميل! سيتم تحديث الـ **$(scoreMultiplier)** بفضل **المتغير Multiplier** الذي حولناه إلى نص!" + "en": "Our **$(scoreMultiplier)** will now be updated thanks to the **Multiplier variable** that we converted to a text!", + "fr": "Notre **$(scoreMultiplier)** sera maintenant mis à jour grâce à la **variable Multiplier** que nous avons convertie en texte !", + "ar": "جميل! سيتم تحديث الـ **$(scoreMultiplier)** بفضل **المتغير Multiplier** الذي حولناه إلى نص!", + "de": "Unser **$(scoreMultiplier)** wird jetzt dank der **Multiplikator-Variable**, die wir in einen Text umgewandelt haben, aktualisiert!", + "es": "¡Nuestra **$(scoreMultiplier)** ahora se actualizará gracias a la **variable Multiplicador** que convertimos en texto!", + "it": "Il nostro **$(scoreMultiplier)** sarà ora aggiornato grazie alla **variabile Moltiplicatore** che abbiamo convertito in testo!", + "ja": "私たちの**$(scoreMultiplier)**は、**テキストに変換した乗数変数**のおかげで更新されるようになります!", + "ko": "이제 **텍스트로 변환한 배수 변수** 덕분에 **$(scoreMultiplier)**가 업데이트될 것입니다!", + "pl": "Nasze **$(scoreMultiplier)** zostanie teraz zaktualizowane dzięki **zmiennej mnożnika**, którą zamieniliśmy na tekst!", + "pt": "Nosso **$(scoreMultiplier)** agora será atualizado graças à **variável Multiplicador** que convertemos em texto!", + "ru": "Теперь наш **$(scoreMultiplier)** будет обновлен благодаря **переменной Множитель**, которую мы преобразовали в текст!", + "sl": "Naš **$(scoreMultiplier)** bo zdaj posodobljen zahvaljujoč **spremenljivki Množitelj**, ki smo jo pretvorili v besedilo!", + "sq": "Tani **$(scoreMultiplier)** ynë do të azhurnohet falë **variablës Multiplikues** që e kemi konvertuar në një tekst!", + "th": "**$(scoreMultiplier)** ของเราจะอัพเดทได้อย่างที่ควรจะเป็นเพราะว่าเราได้แปลง **ตัวแปร Multiplier** เป็นข้อความ", + "uk": "Тепер наш **$(scoreMultiplier)** буде оновлено завдяки **змінній Множник**, яку ми перетворили в текст!", + "zh": "我们的**$(scoreMultiplier)**现在将会得到更新,这要感谢我们将**乘数变量**转换为文本!" } }, "placement": "top" } }, - { - "elementToHighlightId": "#event-2-group-unfolded", - "nextStepTrigger": { - "presenceOfElement": "#event-2-group-folded" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Finally, we need to take our multiplier into account when calculating the score. Let's **fold the Score multiplier** group with the arrow on the left.", - "fr": "Enfin, nous devons prendre en compte notre multiplicateur lors du calcul du score. **Fermons le groupe Multiplicateur de score** avec la flèche à gauche.", - "es": "Finalmente, debemos tener en cuenta nuestro multiplicador al calcular la puntuación. **Cerramos el grupo Multiplicador de puntuación** con la flecha a la izquierda.", - "pt": "Finalmente, precisamos levar em conta nosso multiplicador ao calcular a pontuação. Vamos **fechar o grupo Multiplicador de pontuação** com a seta à esquerda.", - "th": "สุดท้ายเราจะนำตัวแปร Multiplier มาใช้ในการคำนวณคะแนน ให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", - "ar": "وأخيرًا وليس آخرًا، نحن نحتاج من مضاعِفاتنا أن تُحصى عندما يتم حساب النتيجة، هيّا **نطوي المجموعة Score multiplier** بواسطة السهم على اليسار." - } - }, - "placement": "bottom" - } - }, - { - "elementToHighlightId": "#event-1-group-folded", - "nextStepTrigger": { - "presenceOfElement": "#event-1-group-unfolded" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "And let's **unfold the Hitting pegs** group with the arrow on the left.", - "fr": "Et **déplions le groupe Toucher des plots** avec la flèche à gauche.", - "es": "Y **desplegamos el grupo Tocando plots** con la flecha a la izquierda.", - "pt": "E vamos **desdobrar o grupo Tocando plots** com a seta à esquerda.", - "th": "และให้ **ยุบกลุ่มคะแนน** ด้วยลูกศรที่ด้านซ้าย", - "ar": "وهيّا نقوم ب**توسيع المجموعة Hitting pegs** بواسطة السهم على اليسار." - } - }, - "placement": "bottom" - } - }, { "elementToHighlightId": "#event-1-1-action-0", "nextStepTrigger": { @@ -1146,20 +1686,40 @@ "messageByLocale": { "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **double-clicking on it**!", "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **double-cliquant dessus** !", + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. هيّا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه**!", + "de": "Dieses erste Ereignis steuert die Logik, wenn der Spieler einen Stift trifft. Lassen Sie uns die Punktzahlaktion **durch Doppelklick darauf** ändern!", "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **dando doble clic en ella**!", + "it": "Questo primo evento gestisce la logica quando il giocatore colpisce un piolo. Modifichiamo l'azione del punteggio **facendo doppio clic su di essa**!", + "ja": "この最初のイベントは、プレイヤーがピンに当たったときのロジックを管理します。**ダブルクリックして**スコアアクションを変更しましょう!", + "ko": "이 첫 번째 이벤트는 플레이어가 핀을 맞출 때의 로직을 관리합니다. **더블 클릭하여** 점수 액션을 수정해봅시다!", + "pl": "To pierwsze wydarzenie zarządza logiką, gdy gracz trafia w kołek. Zmodyfikujmy akcję punktacji **podwójnym kliknięciem**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **clicando duas vezes nela**!", + "ru": "Это первое событие управляет логикой, когда игрок попадает в колышек. Давайте изменим действие оценки **двойным щелчком по нему**!", + "sl": "To prvo dogodek upravlja logiko, ko igralec zadene zatič. Spremenimo akcijo rezultata **z dvojnim klikom nanj**!", + "sq": "Ky ngjarje i pari menaxhon logjikën kur lojtari godet një penxhere. Le të modifikojmë veprimin e rezultatit **duke bërë dy herë klik mbi të**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** กันเถอะ!", - "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. هيّا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه**!" + "uk": "Це перше подія керує логікою, коли гравець влучає в колодку. Давайте змінимо дію оцінки **подвійним кліком на ньому**!", + "zh": "这个第一个事件管理了玩家击中钉子时的逻辑。让我们**双击**修改分数动作!" } }, "touchDescription": { "messageByLocale": { "en": "This first event manages the logic when the player hits a peg. Let's modify the score action by **pressing 2 times on it**!", "fr": "Cet événement gère la logique lorsque le joueur touche un plot. Modifions l'action de score en **appuyant 2 fois dessus** !", + "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. هيّا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين**!", + "de": "Dieses erste Ereignis steuert die Logik, wenn der Spieler einen Stift trifft. Lassen Sie uns die Punktzahlaktion **durch zweimaliges Drücken darauf** ändern!", "es": "Este primer evento gestiona la lógica cuando el jugador toca un plot. ¡Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**!", + "it": "Questo primo evento gestisce la logica quando il giocatore colpisce un piolo. Modifichiamo l'azione del punteggio **premendo 2 volte su di essa**!", + "ja": "この最初のイベントは、プレイヤーがピンに当たったときのロジックを管理します。**2回押して**スコアアクションを変更しましょう!", + "ko": "이 첫 번째 이벤트는 플레이어가 핀을 맞출 때의 로직을 관리합니다. **2번 눌러** 점수 액션을 수정해봅시다!", + "pl": "To pierwsze wydarzenie zarządza logiką, gdy gracz trafia w kołek. Zmodyfikujmy akcję punktacji **naciskając na niego 2 razy**!", "pt": "Este primeiro evento gerencia a lógica quando o jogador toca um plot. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**!", + "ru": "Это первое событие управляет логикой, когда игрок попадает в колышек. Давайте изменим действие оценки **нажав на него 2 раза**!", + "sl": "To prvo dogodek upravlja logiko, ko igralec zadene zatič. Spremenimo akcijo rezultata **s pritiskom nanj 2-krat**!", + "sq": "Ky ngjarje i pari menaxhon logjikën kur lojtari godet një penxhere. Le të modifikojmë veprimin e rezultatit **duke shtypur 2 herë mbi të**!", "th": "อีเวนท์แรกนี้ จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก มาแก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", - "ar": "هذا أول حدث يدير منطق ضرب اللاعبين للعارضات. هيّا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين**!" + "uk": "Це перше подія керує логікою, коли гравець влучає в колодку. Давайте змінимо дію оцінки **натиснувши на нього 2 рази**!", + "zh": "这个第一个事件管理了玩家击中钉子时的逻辑。让我们**按2次**修改分数动作!" } } } @@ -1167,17 +1727,27 @@ { "elementToHighlightId": "#parameter-2-expression-field", "nextStepTrigger": { - "valueEquals": "1*Variable(Multiplier)" + "valueEquals": "1*Multi" }, "tooltip": { "description": { "messageByLocale": { - "en": "We want to multiply the score added by the multiplier,\n\nlet's enter `1*Variable(Multiplier)`.", - "fr": "Nous voulons multiplier le score ajouté par le multiplicateur,\n\nentrons `1*Variable(Multiplier)`.", - "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Variable(Multiplier)`.", - "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Variable(Multiplier)`.", - "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Variable(Multiplier)`", - "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nهيّا نقوم بإدخال `1*Variable(Multiplier)`." + "en": "We want to multiply the score added by the multiplier,\n\nlet's enter `1*Multi`.", + "fr": "Nous voulons multiplier le score ajouté par le multiplicateur,\n\nentrons `1*Multi`.", + "ar": "نحن نحتاج إلى مضاعفة النتيجة المضافة عن طريق المضاعِفات،\n\nهيّا نقوم بإدخال `1*Multi`.", + "de": "Wir möchten das hinzugefügte Ergebnis mit dem Multiplikator multiplizieren,\n\ngeben wir `1*Multi` ein.", + "es": "Queremos multiplicar la puntuación agregada por el multiplicador,\n\ningresamos `1*Multi`.", + "it": "Vogliamo moltiplicare il punteggio aggiunto dal moltiplicatore,\n\ninseriamo `1*Multi`.", + "ja": "私たちは乗数によって追加されたスコアを掛けたいので、`1*Multi`を入力します。", + "ko": "우리는 배수에 의해 추가된 점수를 곱하고 싶습니다.\n\n`1*Multi`를 입력하세요.", + "pl": "Chcemy pomnożyć wynik dodany przez mnożnik,\n\nwprowadźmy `1*Multi`.", + "pt": "Queremos multiplicar a pontuação adicionada pelo multiplicador,\n\ndigitar `1*Multi`.", + "ru": "Мы хотим умножить добавленный результат на множитель,\n\nдавайте введем `1*Multi`.", + "sl": "Želimo pomnožiti rezultat, ki ga je dodal množitelj,\n\nvnesimo `1*Multi`.", + "sq": "Ne duam të shumëzojmë rezultatin e shtuar nga multiplikuesi,\n\nle të futim `1*Multi`.", + "th": "เราต้องการคูณคะแนนที่ถูกเพิ่มโดย multiplier \n\nใส่ `1*Multi`", + "uk": "Ми хочемо помножити результат, який додав множник,\n\nвведемо `1*Multi`.", + "zh": "我们想要将乘数添加的分数相乘,\n\n让我们输入`1*Multi`。" } }, "placement": "bottom" @@ -1194,10 +1764,20 @@ "messageByLocale": { "en": "This will make our score update according to the multiplier! Let's save.", "fr": "Cela fera en sorte que notre score se mette à jour en fonction du multiplicateur ! Enregistrons.", + "ar": "هذا سيجعل نتيجتنا تُحدّث وفقًا للمضاعِفات! هيّا نحفظ.", + "de": "Das wird dazu führen, dass unser Ergebnis entsprechend dem Multiplikator aktualisiert wird! Lassen Sie uns speichern.", "es": "¡Esto hará que nuestra puntuación se actualice de acuerdo con el multiplicador! Guardemos.", + "it": "Questo farà sì che il nostro punteggio si aggiorni in base al moltiplicatore! Salviamo.", + "ja": "これにより、私たちのスコアが乗数に従って更新されるようになります!保存しましょう。", + "ko": "이렇게 하면 우리의 점수가 배수에 따라 업데이트될 것입니다! 저장합시다.", + "pl": "Spowoduje to, że nasz wynik zostanie zaktualizowany zgodnie z mnożnikiem! Zapiszmy.", "pt": "Isso fará com que nossa pontuação seja atualizada de acordo com o multiplicador! Salve.", + "ru": "Это позволит нашему результату обновляться в соответствии с множителем! Давайте сохранить.", + "sl": "To bo omogočilo, da se naš rezultat posodobi glede na množitelj! Shrani.", + "sq": "Kjo do të bëjë që rezultati ynë të azhurnohet sipas multiplikuesit! Të ruajmë.", "th": "ทีนี้คะแนนของเราจะอัพเดทได้อย่างสอดคล้องแล้ว! มาบันทึกกันเถอะ", - "ar": "هذا سيجعل نتيجتنا تُحدّث وفقًا للمضاعِفات! هيّا نحفظ." + "uk": "Це зробить наш результат оновленим відповідно до множника! Давайте збережемо.", + "zh": "这将使我们的分数根据乘数更新!让我们保存。" } }, "placement": "top" @@ -1213,20 +1793,40 @@ "messageByLocale": { "en": "This event here manages the logic when the player hits a *bigger* peg. Let's modify the score action by **double-clicking on it** again.", "fr": "Cet événement gère la logique lorsque le joueur touche un plot *plus gros*. Modifions l'action de score en **double-cliquant dessus** à nouveau.", + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، هيّا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه** مجددًا.", + "de": "Dieses Ereignis hier steuert die Logik, wenn der Spieler einen *größeren* Stift trifft. Lassen Sie uns die Punktzahlaktion **durch Doppelklick darauf** erneut ändern.", "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **dando doble clic en ella** nuevamente.", + "it": "Questo evento gestisce la logica quando il giocatore colpisce un piolo *più grande*. Modifichiamo l'azione del punteggio **facendo doppio clic su di essa** di nuovo.", + "ja": "このイベントは、プレイヤーが**大きな**ピンに当たったときのロジックを管理します。**ダブルクリックして**スコアアクションを再度変更しましょう。", + "ko": "이 이벤트는 플레이어가 *더 큰* 핀을 맞출 때의 로직을 관리합니다. **더블 클릭하여** 점수 액션을 다시 수정해봅시다.", + "pl": "To wydarzenie zarządza logiką, gdy gracz trafia w **większy** kołek. Zmodyfikujmy akcję punktacji **podwójnym kliknięciem na niej** ponownie.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **clicando duas vezes nela** novamente.", + "ru": "Это событие здесь управляет логикой, когда игрок попадает в *больший* колышек. Давайте изменим действие оценки **двойным щелчком по нему** снова.", + "sl": "To dogodek tukaj upravlja logiko, ko igralec zadene *večji* zatič. Spremenimo akcijo rezultata **z dvojnim klikom nanj** znova.", + "sq": "Ky ngjarje këtu menaxhon logjikën kur lojtari godet një penxhere *më të madhe*. Le të modifikojmë veprimin e rezultatit **duke bërë dy herë klik mbi të** përsëri.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **ดับเบิลคลิก** อีกครั้ง", - "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، هيّا نقوم بتعديل إجراء النتيجة عن طريق **النقر المزدوج عليه** مجددًا." + "uk": "Це подія тут керує логікою, коли гравець влучає в **більший** колодку. Давайте змінимо дію оцінки **подвійним кліком на ньому** знову.", + "zh": "这个事件管理了玩家击中*更大*的钉子时的逻辑。让我们**双击**再次修改分数动作!" } }, "touchDescription": { "messageByLocale": { "en": "This event here manages the logic when the player hits a *bigger* peg. Let's modify the score action by **pressing twice on it**.", "fr": "Cet événement gère la logique lorsque le joueur touche un plot *plus gros*. Modifions l'action de score en **appyant 2 fois dessus**.", + "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، هيّا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين** مجددًا.", + "de": "Dieses Ereignis hier steuert die Logik, wenn der Spieler einen *größeren* Stift trifft. Lassen Sie uns die Punktzahlaktion **durch zweimaliges Drücken darauf** erneut ändern.", "es": "Este evento gestiona la lógica cuando el jugador toca un plot *más grande*. Modifiquemos la acción de puntuación **presionando 2 veces sobre ella**.", + "it": "Questo evento gestisce la logica quando il giocatore colpisce un piolo *più grande*. Modifichiamo l'azione del punteggio **premendo 2 volte su di essa**.", + "ja": "このイベントは、プレイヤーが**大きな**ピンに当たったときのロジックを管理します。**2回押して**スコアアクションを再度変更しましょう。", + "ko": "이 이벤트는 플레이어가 *더 큰* 핀을 맞출 때의 로직을 관리합니다. **2번 눌러** 점수 액션을 다시 수정해봅시다.", + "pl": "To wydarzenie zarządza logiką, gdy gracz trafia w **większy** kołek. Zmodyfikujmy akcję punktacji **naciskając na niego 2 razy**.", "pt": "Este evento gerencia a lógica quando o jogador toca um plot *maior*. Vamos modificar a ação de pontuação **pressionando 2 vezes nela**.", + "ru": "Это событие здесь управляет логикой, когда игрок попадает в *больший* колышек. Давайте изменим действие оценки **нажав на него 2 раза** снова.", + "sl": "To dogodek tukaj upravlja logiko, ko igralec zadene *večji* zatič. Spremenimo akcijo rezultata **s pritiskom nanj 2-krat**.", + "sq": "Ky ngjarje këtu menaxhon logjikën kur lojtari godet një penxhere *më të madhe*. Le të modifikojmë veprimin e rezultatit **duke shtypur 2 herë mbi të**.", "th": "อีเวนท์นี้จัดการกับโลจิกเมื่อผู้เล่นชนกับเป๊ก แก้ไขการกระทำของคะแนนโดย **กด 2 ครั้ง** กันเถอะ!", - "ar": "هذا الحدث هنا يدير منطق ضرب اللاعبين للعارضات **الكبيرة**، هيّا نقوم بتعديل إجراء النتيجة عن طريق **الضغط عليه مرتين** مجددًا." + "uk": "Це подія тут керує логікою, коли гравець влучає в **більший** колодку. Давайте змінимо дію оцінки **натиснувши на нього 2 рази**!", + "zh": "这个事件管理了玩家击中*更大*的钉子时的逻辑。让我们**按2次**再次修改分数动作!" } } } @@ -1234,17 +1834,27 @@ { "elementToHighlightId": "#parameter-2-expression-field", "nextStepTrigger": { - "valueEquals": "2*Variable(Multiplier)" + "valueEquals": "2*Multi" }, "tooltip": { "description": { "messageByLocale": { - "en": "Now we'll do exactly the same, except that the score given will be 2,\n\nenter `2 * Variable(Multiplier)`.", - "fr": "Nous allons faire exactement la même chose, sauf que le score donné sera 2,\n\nentrons `2 * Variable(Multiplier)`.", - "es": "Ahora vamos a hacer exactamente lo mismo, excepto que la puntuación dada sera 2,\n\ningresamos `2 * Variable(Multiplier)`.", - "pt": "Hora faremos exatamente a mesma coisa, exceto que a pontuação dada sera 2,\n\ndigitar `2 * Variable(Multiplier)`.", - "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Variable(Multiplier)`", - "ar": "الآن سوف نقوم بنفس الشيء تمامًا، باستثناء أن النتيجة المعطاة ستكون الضعف،\n\nإدخال `2 * Variable(Multiplier)`." + "en": "Now we'll do exactly the same, except that the score given will be 2,\n\nenter `2 * Multi`.", + "fr": "Nous allons faire exactement la même chose, sauf que le score donné sera 2,\n\nentrons `2 * Multi`.", + "ar": "الآن سوف نقوم بنفس الشيء تمامًا، باستثناء أن النتيجة المعطاة ستكون الضعف،\n\nإدخال `2 * Multi`.", + "de": "Jetzt machen wir genau dasselbe, außer dass der gegebene Wert 2 sein wird,\n\ngeben wir `2 * Multi` ein.", + "es": "Ahora vamos a hacer exactamente lo mismo, excepto que la puntuación dada sera 2,\n\ningresamos `2 * Multi`.", + "it": "Ora faremo esattamente la stessa cosa, tranne che il punteggio dato sarà 2,\n\ninseriamo `2 * Multi`.", + "ja": "今度は同じことをしますが、与えられるスコアは2になります。\n\n`2 * Multi`を入力します。", + "ko": "이제 우리는 정확히 같은 일을 할 것입니다. 다만 주어진 점수는 2가 될 것입니다.\n\n`2 * Multi`를 입력하세요.", + "pl": "Teraz zrobimy dokładnie to samo, z tym że wynik wyniesie 2,\n\nwprowadźmy `2 * Multi`.", + "pt": "Hora faremos exatamente a mesma coisa, exceto que a pontuação dada sera 2,\n\ndigitar `2 * Multi`.", + "ru": "Теперь мы сделаем точно то же самое, за исключением того, что данное значение будет 2,\n\nвведем `2 * Multi`.", + "sl": "Zdaj bomo naredili natanko isto, razen da bo dana ocena 2,\n\nvnesimo `2 * Multi`.", + "sq": "Tani do të bëjmë saktësisht të njëjtën gjë, përveç se rezultati i dhënë do të jetë 2,\n\nle të futim `2 * Multi`.", + "th": "เราจะทำเหมือนเดิม ยกเว้นอย่างหนึ่ง คะแนนจะใส่เป็น 2\n\nใส่ `2 * Multi`", + "uk": "Тепер ми зробимо точно те саме, за винятком того, що дане значення буде 2,\n\nвведемо `2 * Multi`.", + "zh": "现在我们将做完全相同的事情,只是给出的分数将是2,\n\n输入`2 * Multi`。" } }, "placement": "bottom" @@ -1261,10 +1871,20 @@ "messageByLocale": { "en": "Now let's close this!.", "fr": "Maintenant, fermons ceci !", + "ar": "الآن هيّا نغلق هذا.", + "de": "Lassen Sie uns das jetzt schließen!", "es": "¡Ahora cerramos esto!", + "it": "Ora chiudiamo questo!", + "ja": "さて、これで閉じましょう!", + "ko": "이제 이것을 닫아봅시다!", + "pl": "Teraz zamykamy to!", "pt": "Agora vamos fechar isso!", + "ru": "Теперь давайте закроем это!", + "sl": "Sedaj zaprimo to!", + "sq": "Tani le të mbyllim këtë!", "th": "ปิดหน้าต่างได้เลย!", - "ar": "الآن هيّا نغلق هذا." + "uk": "Тепер давайте закриємо це!", + "zh": "现在让我们关闭这个!" } }, "placement": "top" @@ -1278,12 +1898,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", - "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จเรียบร้อยแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." + "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", + "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", + "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", + "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", + "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", + "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index 806add4..d71285a 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -10,7 +10,24 @@ "scene": "gameScene" } }, - "availableLocales": ["en", "fr", "es", "pt", "th", "ar"], + "availableLocales": [ + "en", + "fr", + "ar", + "de", + "es", + "it", + "ja", + "ko", + "pl", + "pt", + "th", + "ru", + "sl", + "sq", + "uk", + "zh" + ], "initialTemplateUrl": "https://resources.gdevelop-app.com/in-app-tutorials/templates/timer/game.json", "initialProjectData": { "gameScene": "GameScene" @@ -21,40 +38,80 @@ "messageByLocale": { "en": "# You've finished this lesson!", "fr": "# Vous avez terminé cette leçon !", + "ar": "# لقد أنهيت هذا الدرس!", + "de": "# Du hast diese Lektion abgeschlossen!", "es": "# ¡Has terminado esta lección!", + "it": "# Hai finito questa lezione!", + "ja": "# このレッスンは終了です!", + "ko": "# 이 레슨을 완료했습니다!", + "pl": "# Ukończyłeś tę lekcję!", "pt": "# Você terminou esta lição!", + "ru": "# Вы завершили этот урок!", + "sl": "# Končali ste to lekcijo!", + "sq": "# Keni përfunduar këtë mësim!", "th": "# คุณเรียนบทเรียนนี้จบแล้ว!", - "ar": "# لقد أنهيت هذا الدرس!" + "uk": "# Ви завершили цей урок!", + "zh": "# 你完成了这节课!" } }, { "messageByLocale": { "en": "Well done, in this tutorial you've learned:", "fr": "Bien joué, dans ce tutoriel vous avez appris :", + "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:", + "de": "Gut gemacht, in diesem Tutorial hast du gelernt:", "es": "¡Bien hecho, en este tutorial aprendiste:", + "it": "Ben fatto, in questo tutorial hai imparato:", + "ja": "このチュートリアルでは、次のことを学びました:", + "ko": "이 튜토리얼에서 다음을 배웠습니다:", + "pl": "Dobrze zrobiłeś, w tym samouczku nauczyłeś się:", "pt": "Bem feito, neste tutorial você aprendeu:", + "ru": "Молодец, в этом уроке вы узнали:", + "sl": "Bravo, v tem vadnici ste se naučili:", + "sq": "Mirë, në këtë tutorial ju keni mësuar:", "th": "ทำได้ดีเยี่ยม, สิ่งที่คุณได้เรียนรู้จากบทเรียนนี้:", - "ar": "أحسنت، تعلمنا في هذا البرنامج التعليمي كيفية:" + "uk": "Молодець, в цьому уроці ви дізналися:", + "zh": "做得好,通过这个教程,你学到了:" } }, { "messageByLocale": { "en": "- Create a text\n\n- Create and start a timer\n\n- Use a timer's value to update a text", "fr": "- Créer un texte\n\n- Créer et démarrer un chronomètre\n\n- Utiliser la valeur d'un chronomètre pour mettre à jour un texte", + "ar": "- إنشاء نص\n\n- إنشاء وتشغيل مؤقت\n\n- استخدام قيمة المؤقت لتحديث النص", + "de": "- Erstellen Sie einen Text\n\n- Erstellen und starten Sie einen Timer\n\n- Verwenden Sie den Wert eines Timers, um einen Text zu aktualisieren", "es": "- Crear un texto\n\n- Crear y comenzar un temporizador\n\n- Utilizar el valor de un temporizador para actualizar un texto", + "it": "- Creare un testo\n\n- Creare e avviare un timer\n\n- Utilizzare il valore di un timer per aggiornare un testo", + "ja": "- テキストを作成する\n\n- タイマーを作成して開始する\n\n- タイマーの値を使用してテキストを更新する", + "ko": "- 텍스트 만들기\n\n- 타이머 만들고 시작하기\n\n- 타이머의 값 사용하여 텍스트 업데이트하기", + "pl": "- Utwórz tekst\n\n- Utwórz i uruchom minutnik\n\n- Użyj wartości minutnika do aktualizacji tekstu", "pt": "- Crie um texto\n\n- Crie e inicie um cronômetro\n\n- Use o valor de um cronômetro para atualizar um texto", + "ru": "- Создать текст\n\n- Создать и запустить таймер\n\n- Использовать значение таймера для обновления текста", + "sl": "- Ustvarite besedilo\n\n- Ustvarite in začnite štoparico\n\n- Uporabite vrednost štoparice za posodobitev besedila", + "sq": "- Krijo një tekst\n\n- Krijo dhe fillo një kohëmatës\n\n- Përdor vlerën e një kohëmatësi për të përditësuar një tekst", "th": "- สร้างข้อความ\n\n- สร้างและเริ่มต้นตัวจับเวลา\n\n- ใช้ค่าของตัวจับเวลาเพื่ออัปเดตข้อความ", - "ar": "- إنشاء نص\n\n- إنشاء وتشغيل مؤقت\n\n- استخدام قيمة المؤقت لتحديث النص" + "uk": "- Створити текст\n\n- Створити та запустити таймер\n\n- Використовувати значення таймера для оновлення тексту", + "zh": "- 创建文本\n\n- 创建并启动计时器\n\n- 使用计时器的值更新文本" } }, { "messageByLocale": { "en": "You can keep adding stuff to this game or publish it!", "fr": "Vous pouvez continuer à ajouter des choses à ce jeu ou le publier !", + "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!", + "de": "Sie können weiterhin Dinge zu diesem Spiel hinzufügen oder es veröffentlichen!", "es": "¡Puedes seguir agregando cosas a este juego o publicarlo !", + "it": "Puoi continuare ad aggiungere cose a questo gioco o pubblicarlo!", + "ja": "このゲームにさらに要素を追加するか、公開することができます!", + "ko": "이 게임에 계속해서 새로운 것을 추가하거나 게임을 게시할 수 있습니다!", + "pl": "Możesz dalej dodawać rzeczy do tej gry lub ją opublikować!", "pt": "Você pode continuar adicionando coisas a este jogo ou publicá-lo!", + "ru": "Вы можете продолжать добавлять в эту игру новые элементы или опубликовать её!", + "sl": "Lahko še naprej dodajate stvari v to igro ali jo objavite!", + "sq": "Mund të vazhdoni të shtoni gjëra në këtë lojë ose ta publikoni!", "th": "คุณสามารถพัฒนาเกมนี้ต่อไปหรือจะเผยแพร่เลยก็ได้!", - "ar": "يمكنك الاستمرار في إضافة أشياء إلى هذه اللعبة أو نشرها!" + "uk": "Ви можете продовжувати додавати речі до цієї гри або опублікувати її!", + "zh": "您可以继续为这个游戏添加东西,或者发布它!" } } ] @@ -68,10 +125,20 @@ "messageByLocale": { "en": "Let's go!", "fr": "C'est parti !", + "ar": "لنبدأ!", + "de": "Los geht's!", "es": "¡Vamos!", + "it": "Andiamo!", + "ja": "さあ、始めましょう!", + "ko": "시작합시다!", + "pl": "Zaczynajmy!", "pt": "Vamos lá!", + "ru": "Поехали!", + "sl": "Gremo!", + "sq": "Le të fillojmë!", "th": "ไปกันเลย!", - "ar": "لنبدأ!" + "uk": "Почнемо!", + "zh": "让我们开始吧!" } } }, @@ -81,10 +148,20 @@ "messageByLocale": { "en": "This game is quite simple! Use your mouse or finger to drag the key to the keyhole, whilst staying inside the pathway! Click on the **preview** button to try it out.", "fr": "Ce jeu est assez simple ! Utilisez votre souris ou votre doigt pour faire glisser la clé dans la serrure, tout en restant dans le chemin ! Cliquez sur le bouton **aperçu** pour l'essayer.", + "ar": "هذه اللعبة بسيطة قليلًا! استخدام الفأرة أو إصبعك لسحب المفتاح إلى الفوهة مع البقاء داخل المسار! الضغط على الزر **معاينة** للتجربة.", + "de": "Dieses Spiel ist ziemlich einfach! Verwenden Sie Ihre Maus oder Ihren Finger, um den Schlüssel in das Schlüsselloch zu ziehen, während Sie sich im Pfad aufhalten! Klicken Sie auf die **Vorschau**-Schaltfläche, um es auszuprobieren.", "es": "¡Este juego es bastante simple! Utiliza tu ratón o dedo para arrastrar la llave al agujero de la llave, ¡mientras te mantienes dentro del camino! Haz clic en el botón **previsualización** para probarlo.", + "it": "Questo gioco è piuttosto semplice! Usa il mouse o il dito per trascinare la chiave nella serratura, rimanendo all'interno del percorso! Clicca sul pulsante **anteprima** per provarlo.", + "ja": "このゲームはかなりシンプルです! マウスまたは指を使用して、パス内にとどまりながら鍵を鍵穴にドラッグします! **プレビュー** ボタンをクリックして試してみてください。", + "ko": "이 게임은 꽤 간단합니다! 마우스 또는 손가락을 사용하여 키를 키홀에 드래그하면서 경로 안에 머무르십시오! **미리보기** 버튼을 클릭하여 시도해보세요.", + "pl": "Ta gra jest dość prosta! Użyj myszki lub palca, aby przeciągnąć klucz do zamka, pozostając w ścieżce! Kliknij przycisk **podgląd**, aby to wypróbować.", "pt": "Este jogo é bastante simples! Use seu mouse ou dedo para arrastar a chave para a fechadura, enquanto permanece dentro do caminho! Clique no botão **pré-visualização** para experimentá-lo.", + "ru": "Эта игра довольно проста! Используйте мышь или палец, чтобы перетащить ключ в замочную скважину, находясь внутри пути! Нажмите на кнопку **предпросмотр**, чтобы попробовать.", + "sl": "Ta igra je precej preprosta! Uporabite miško ali prst, da ključ povlečete v ključavnico, medtem ko ostanete v notranjosti poti! Kliknite na gumb **predogled**, da ga preizkusite.", + "sq": "Kjo lojë është mjaft e thjeshtë! Përdorni mousen ose gishtin tuaj për të tërhequr çelësin në çelësin, duke qëndruar brenda rrugës! Klikoni në butonin **parashikim** për ta provuar.", "th": "เกมนี้เป็นเกมง่ายๆ! ใช้เมาส์หรือนิ้วเพื่อลากกุญแจไปยังช่องกุญแจในขณะที่ยังอยู่ในเส้นทาง! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อลองเล่น", - "ar": "هذه اللعبة بسيطة قليلًا! استخدام الفأرة أو إصبعك لسحب المفتاح إلى الفوهة مع البقاء داخل المسار! الضغط على الزر **معاينة** للتجربة." + "uk": "Ця гра досить проста! Використовуйте мишу або палець, щоб перетягнути ключ у замковий отвір, перебуваючи всередині шляху! Натисніть на кнопку **попередній перегляд**, щоб спробувати.", + "zh": "这个游戏相当简单! 使用鼠标或手指将钥匙拖到钥匙孔中,同时保持在路径内! 点击 **预览** 按钮试试看。" } } } @@ -99,10 +176,20 @@ "messageByLocale": { "en": "Open the **Objects** panel.", "fr": "Ouvrez le panneau des **objets**.", + "ar": "فتح لوحة **الكائنات**.", + "de": "Öffnen Sie das **Objekte**-Panel.", "es": "Abre el panel de **objetos**.", + "it": "Apri il pannello **Oggetti**.", + "ja": "**オブジェクト** パネルを開きます。", + "ko": "**오브젝트** 패널을 엽니다.", + "pl": "Otwórz panel **Obiekty**.", "pt": "Abra o painel de **objetos**.", + "ru": "Откройте панель **Объекты**.", + "sl": "Odpri panel **Predmeti**.", + "sq": "Hapni panelin e **objekteve**.", "th": "เปิดแผงควบคุม **วัตถุ**", - "ar": "فتح لوحة **الكائنات**." + "uk": "Відкрийте панель **Об'єкти**.", + "zh": "打开 **对象** 面板。" } }, "placement": "bottom" @@ -119,10 +206,20 @@ "messageByLocale": { "en": "First, let's create some text to display the time spent playing the level. Click on the **Add new object** button.", "fr": "Tout d'abord, créons du texte pour afficher le temps passé à jouer au niveau. Cliquez sur le bouton **Ajouter un nouvel objet**.", + "ar": "أولًا، هيّا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضي في لعب هذه المرحلة. الضغط على الزر **إضافة كائن جديد**. ", + "de": "Zuerst erstellen wir einen Text, um die verbrachte Zeit beim Spielen des Levels anzuzeigen. Klicken Sie auf die Schaltfläche **Neues Objekt hinzufügen**.", "es": "Primero, creemos un texto para mostrar el tiempo que se ha pasado jugando al nivel. Haga clic en el botón **Agregar nuevo objeto**.", + "it": "Innanzitutto, creiamo un testo per visualizzare il tempo trascorso a giocare al livello. Clicca sul pulsante **Aggiungi nuovo oggetto**.", + "ja": "まず、レベルをプレイした時間を表示するためのテキストを作成しましょう。 **新しいオブジェクトを追加** ボタンをクリックします。", + "ko": "먼저, 레벨을 플레이한 시간을 표시할 텍스트를 만들어 보겠습니다. **새 오브젝트 추가** 버튼을 클릭하세요.", + "pl": "Najpierw stwórzmy jakiś tekst, aby wyświetlić czas spędzony na graniu w poziomie. Kliknij przycisk **Dodaj nowy obiekt**.", "pt": "Primeiro, vamos criar um texto para exibir o tempo gasto jogando o nível. Clique no botão **Adicionar novo objeto**.", + "ru": "Сначала создадим текст для отображения времени, проведенного в игре. Нажмите на кнопку **Добавить новый объект**.", + "sl": "Najprej ustvarimo nekaj besedila, da prikažemo preživeti čas igranja ravni. Kliknite na gumb **Dodaj nov predmet**.", + "sq": "Fillimisht, le të krijojmë disa tekst për të shfaqur kohën e kaluar duke luajtur nivelin. Klikoni në butonin **Shto një objekt të ri**.", "th": "เริ่มต้นกันด้วยการสร้างข้อความเพื่อแสดงเวลาที่ใช้ในการเล่นเกม คลิกที่ปุ่ม **เพิ่มวัตถุใหม่**", - "ar": "أولًا، هيّا نقوم بإنشاء بعض النصوص لعرض الوقت المنقضي في لعب هذه المرحلة. الضغط على الزر **إضافة كائن جديد**. " + "uk": "Спочатку створимо деякий текст для відображення часу, проведеного в грі. Натисніть на кнопку **Додати новий об'єкт**.", + "zh": "首先,让我们创建一些文本来显示在游戏中花费的时间。 点击 **添加新对象** 按钮。" } }, "placement": "top" @@ -138,10 +235,20 @@ "messageByLocale": { "en": "We'll create a text from scratch.", "fr": "Nous allons créer un texte à partir de zéro.", + "ar": "سوف نقوم بإنشاء نص من الصفر.", + "de": "Wir erstellen einen Text von Grund auf.", "es": "Vamos a crear un texto desde cero.", + "it": "Creeremo un testo da zero.", + "ja": "ゼロからテキストを作成します。", + "ko": "처음부터 텍스트를 만들어 보겠습니다.", + "pl": "Stworzymy tekst od zera.", "pt": "Vamos criar um texto do zero.", + "ru": "Мы создадим текст с нуля.", + "sl": "Ustvarili bomo besedilo od začetka.", + "sq": "Do të krijojmë një tekst nga e para.", "th": "เราจะสร้างข้อความใหม่", - "ar": "سوف نقوم بإنشاء نص من الصفر." + "uk": "Ми створимо текст з нуля.", + "zh": "我们将从头开始创建一个文本。" } }, "placement": "bottom" @@ -159,10 +266,20 @@ "messageByLocale": { "en": "Select **Text** object", "fr": "Sélectionnez l'objet **Texte**", + "ar": "تحديد الكائن **نص**", + "de": "Wählen Sie das **Text**-Objekt aus", "es": "Seleccione el objeto **Texto**", + "it": "Seleziona l'oggetto **Testo**", + "ja": "**テキスト** オブジェクトを選択します", + "ko": "**텍스트** 오브젝트를 선택하세요", + "pl": "Wybierz obiekt **Tekst**", "pt": "Selecione o objeto **Texto**", + "ru": "Выберите объект **Текст**", + "sl": "Izberite **Besedilo** predmet", + "sq": "Zgjidh **Tekstin** objekt", "th": "เลือกวัตถุ **ข้อความ**", - "ar": "تحديد الكائن **نص**" + "uk": "Виберіть об'єкт **Текст**", + "zh": "选择 **文本** 对象" } }, "placement": "bottom" @@ -179,10 +296,20 @@ "messageByLocale": { "en": "Change the object name to **Score**.", "fr": "Utilisez **Score** comme nom d'objet.", + "ar": "تغيير اسم الكائن إلى **Score**.", + "de": "Ändern Sie den Objektnamen in **Score**.", "es": "Cambie el nombre del objeto a **Score**.", + "it": "Cambia il nome dell'oggetto in **Punteggio**.", + "ja": "オブジェクト名を **スコア** に変更します。", + "ko": "객체 이름을 **점수**로 변경하세요.", + "pl": "Zmień nazwę obiektu na **Wynik**.", "pt": "Mude o nome do objeto para **Score**.", + "ru": "Измените имя объекта на **Счет**.", + "sl": "Spremenite ime predmeta v **Rezultat**.", + "sq": "Ndryshoni emrin e objektit në **Pikë**.", "th": "เปลี่ยนชื่อวัตถุเป็น **Score**", - "ar": "تغيير اسم الكائن إلى **Score**." + "uk": "Змініть назву об'єкта на **Рахунок**.", + "zh": "将对象名称更改为 **分数**。" } }, "placement": "bottom" @@ -199,10 +326,20 @@ "messageByLocale": { "en": "Change the font size to **50**.", "fr": "Utilisez une taille de **50**.", + "ar": "تغيير حجم الخط إلى **50**.", + "de": "Ändern Sie die Schriftgröße auf **50**.", "es": "Cambie el tamaño de fuente a **50**.", + "it": "Cambia la dimensione del carattere in **50**.", + "ja": "フォントサイズを **50** に変更します。", + "ko": "글꼴 크기를 **50**으로 변경하세요.", + "pl": "Zmień rozmiar czcionki na **50**.", "pt": "Mude o tamanho da fonte para **50**.", + "ru": "Измените размер шрифта на **50**.", + "sl": "Spremenite velikost pisave v **50**.", + "sq": "Ndryshoni madhësinë e shkronjave në **50**.", "th": "เปลี่ยนขนาดตัวอักษรเป็น **50**", - "ar": "تغيير حجم الخط إلى **50**." + "uk": "Змініть розмір шрифту на **50**.", + "zh": "将字体大小更改为 **50**。" } }, "placement": "bottom" @@ -219,10 +356,20 @@ "messageByLocale": { "en": "Change the initial text to **0**, and we'll update it later!", "fr": "Changeons la valeur initiale à **0**, et nous allons le mettre à jour ensuite !", + "ar": "تغيير حالة النص إلى **0**، وسنقوم بتحديثها لاحقًا!", + "de": "Ändern Sie den Anfangstext in **0**, und wir werden ihn später aktualisieren!", "es": "Cambie el texto inicial a **0**, ¡y lo actualizaremos más tarde!", + "it": "Cambia il testo iniziale in **0**, e lo aggiorneremo più tardi!", + "ja": "初期テキストを **0** に変更し、後で更新します!", + "ko": "초기 텍스트를 **0**으로 변경하고 나중에 업데이트하겠습니다!", + "pl": "Zmień początkowy tekst na **0**, a my go później zaktualizujemy!", "pt": "Mude o texto inicial para **0**, e atualizaremos mais tarde!", + "ru": "Измените начальный текст на **0**, и мы обновим его позже!", + "sl": "Spremenite začetno besedilo v **0**, in ga bomo kasneje posodobili!", + "sq": "Ndryshoni tekstin fillestar në **0**, dhe ne do ta përditësojmë më vonë!", "th": "เปลี่ยนข้อความเริ่มต้นเป็น **0** และเราจะอัปเดตมันในภายหลัง!", - "ar": "تغيير حالة النص إلى **0**، وسنقوم بتحديثها لاحقًا!" + "uk": "Змініть початковий текст на **0**, і ми оновимо його пізніше!", + "zh": "将初始文本更改为 **0**,我们稍后会更新它!" } }, "placement": "bottom" @@ -239,10 +386,20 @@ "messageByLocale": { "en": "We're done.", "fr": "Nous avons terminé.", + "ar": "انتهينا.", + "de": "Wir sind fertig.", "es": "Hemos terminado.", + "it": "Abbiamo finito.", + "ja": "完了です。", + "ko": "끝났습니다.", + "pl": "Skończyliśmy.", "pt": "Terminamos.", + "ru": "Мы закончили.", + "sl": "Končali smo.", + "sq": "Kemi përfunduar.", "th": "เราเสร็จแล้ว", - "ar": "انتهينا." + "uk": "Ми закінчили.", + "zh": "我们完成了。" } } }, @@ -260,20 +417,40 @@ "messageByLocale": { "en": "Drag $(scoreText) into the **scene**.", "fr": "Faites glisser $(scoreText) du menu au canvas.", + "ar": "سحب $(scoreText) إلى **المشهد**.", + "de": "Ziehen Sie $(scoreText) in die **Szene**.", "es": "Arrastre $(scoreText) al **escenario**.", + "it": "Trascina $(scoreText) nella **scena**.", + "ja": "$(scoreText) を **シーン** にドラッグします。", + "ko": "$(scoreText)를 **씬**으로 드래그하세요.", + "pl": "Przeciągnij $(scoreText) na **poziom**.", "pt": "Arraste $(scoreText) para a **cena**.", + "ru": "Перетащите $(scoreText) в **сцену**.", + "sl": "Povlecite $(scoreText) v **prizorišče**.", + "sq": "Tërhiqni $(scoreText) në **skenë**.", "th": "ลาก $(scoreText) ไปยัง **ฉาก**", - "ar": "سحب $(scoreText) إلى **المشهد**." + "uk": "Перетягніть $(scoreText) в **сцену**.", + "zh": "将 $(scoreText) 拖到 **场景** 中。" } }, "touchDescription": { "messageByLocale": { "en": "**Select** then **drag** $(scoreText) into the **scene**.", "fr": "**Sélectionnez** puis **faites glisser** $(scoreText) du menu au canvas.", + "ar": "**تحديد** ثم **سحب** الـ $(scoreText) إلى **المشهد**.", + "de": "**Wählen** und **ziehen** Sie $(scoreText) in die **Szene**.", "es": "**Seleccione** y **arrastrar** $(scoreText) al **escenario**.", + "it": "**Seleziona** e **trascina** $(scoreText) nella **scena**.", + "ja": "**$(scoreText)** を **シーン** に **選択** して **ドラッグ** します。", + "ko": "**$(scoreText)**를 **씬**으로 **선택**한 후 **드래그**하세요.", + "pl": "**Wybierz** a następnie **przeciągnij** $(scoreText) na **poziom**.", "pt": "**Selecione** e **arraste** $(scoreText) para a **cena**.", + "ru": "**Выберите** и **перетащите** $(scoreText) в **сцену**.", + "sl": "**Izberite** in **povlecite** $(scoreText) v **prizorišče**.", + "sq": "**Zgjidhni** dhe **tërhiqni** $(scoreText) në **skenë**.", "th": "**เลือก** แล้ว **ลาก** $(scoreText) ไปยัง **ฉาก**", - "ar": "**تحديد** ثم **سحب** الـ $(scoreText) إلى **المشهد**." + "uk": "**Виберіть** та **перетягніть** $(scoreText) в **сцену**.", + "zh": "**选择** 然后 **拖动** $(scoreText) 到 **场景** 中。" } }, "placement": "top" @@ -285,10 +462,20 @@ "messageByLocale": { "en": "I'm done", "fr": "J'ai terminé", + "ar": "انتهيت", + "de": "Ich bin fertig", "es": "He terminado", + "it": "Ho finito", + "ja": "完了", + "ko": "완료", + "pl": "Skończyłem", "pt": "Terminei", + "ru": "Я закончил", + "sl": "Končal sem", + "sq": "Përfundova", "th": "เสร็จแล้ว", - "ar": "انتهيت" + "uk": "Я закінчив", + "zh": "我完成了" } } }, @@ -298,10 +485,20 @@ "messageByLocale": { "en": "Place the $(scoreText) at the top right of the screen, so that the player can see their score while they play.\n\nWhen you're done, click on the button below.", "fr": "Placez $(scoreText) en haut à droite de l'écran, de sorte que le joueur puisse voir son score pendant qu'il joue.\n\nQuand vous avez terminé, cliquez sur le bouton ci-dessous.", + "ar": "إدراج الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية وقتهم الذي قضوه في اللعب. \n\nعند الانتهاء، الضغط على الزر أدناه.", + "de": "Platzieren Sie $(scoreText) oben rechts auf dem Bildschirm, damit der Spieler seine Punktzahl sehen kann, während er spielt.\n\nWenn Sie fertig sind, klicken Sie auf die Schaltfläche unten.", "es": "Coloque $(scoreText) en la parte superior derecha de la pantalla, para que el jugador pueda ver su puntuación mientras juega.\n\nCuando hayas terminado, haz clic en el botón de abajo.", + "it": "Posiziona $(scoreText) in alto a destra dello schermo, in modo che il giocatore possa vedere il suo punteggio mentre gioca.\n\nQuando hai finito, clicca sul pulsante qui sotto.", + "ja": "$(scoreText) を画面の右上に配置して、プレイヤーがプレイ中にスコアを見ることができるようにします。\n\n完了したら、下のボタンをクリックします。", + "ko": "화면 오른쪽 상단에 $(scoreText)를 배치하여 플레이어가 플레이하는 동안 점수를 볼 수 있도록합니다.\n\n완료되면 아래 버튼을 클릭하세요.", + "pl": "Umieść $(scoreText) w prawym górnym rogu ekranu, aby gracz mógł zobaczyć swój wynik podczas gry.\n\nGdy skończysz, kliknij przycisk poniżej.", "pt": "Coloque $(scoreText) no canto superior direito da tela, para que o jogador possa ver sua pontuação enquanto joga.\n\nQuando terminar, clique no botão abaixo.", + "ru": "Разместите $(scoreText) в верхнем правом углу экрана, чтобы игрок мог видеть свой счет во время игры.\n\nКогда закончите, нажмите на кнопку ниже.", + "sl": "Postavite $(scoreText) v zgornjem desnem kotu zaslona, tako da lahko igralec vidi svoj rezultat med igranjem.\n\nKo končate, kliknite na spodnji gumb.", + "sq": "Vendosni $(scoreText) në këndin e djathtë të ekranit, që lojtari të mund të shohë pikët e tyre gjatë lojës.\n\nKur të keni përfunduar, klikoni në butonin më poshtë.", "th": "วาง $(scoreText) ที่ด้านบนขวาของหน้าจอ เพื่อให้ผู้เล่นสามารถเห็นคะแนนของตนเองขณะเล่นได้\n\nเมื่อคุณเสร็จแล้ว ให้คลิกที่ปุ่มด้านล่าง", - "ar": "إدراج الـ $(scoreText) في أعلى يمين الشاشة، حتى يتمكن اللاعبون من رؤية وقتهم الذي قضوه في اللعب. \n\nعند الانتهاء، الضغط على الزر أدناه." + "uk": "Розмістіть $(scoreText) в правому верхньому куті екрану, щоб гравець міг бачити свій рахунок під час гри.\n\nКоли закінчите, натисніть на кнопку нижче.", + "zh": "将 $(scoreText) 放在屏幕的右上角,这样玩家在游戏时就可以看到他们的分数。\n\n完成后,点击下面的按钮。" } }, "placement": "top", @@ -320,10 +517,20 @@ "messageByLocale": { "en": "Now let's **update this text with a timer**! Let's **open the Events Sheet** of your scene $(gameScene).", "fr": "Maintenant, **mettons à jour ce texte avec un chronomètre** ! **Ouvrons la feuille d'événements** de votre scène $(gameScene).", + "ar": "الآن هيّا نقوم ب**تحديث هذا النص مع المؤقت**! هيّا نقوم ب**فتح صفحة الأحداث** لمشهدك $(gameScene).", + "de": "Lassen Sie uns diesen Text jetzt mit einem Timer **aktualisieren**! Öffnen Sie das **Ereignisblatt** Ihrer Szene $(gameScene).", "es": "¡Ahora, **actualicemos este texto con un temporizador**! **Abramos la hoja de eventos** de su escena $(gameScene).", + "it": "Ora **aggiorniamo questo testo con un timer**! **Apriamo il foglio eventi** della tua scena $(gameScene).", + "ja": "今度は **タイマーを使ってこのテキストを更新しましょう**! **$(gameScene) シーン** の **イベントシート** を開きます。", + "ko": "이제 **타이머로 이 텍스트를 업데이트**해 보겠습니다! **$(gameScene) 씬**의 **이벤트 시트**를 엽니다.", + "pl": "Teraz **zaktualizujmy ten tekst za pomocą stopera**! **Otwórzmy Arkusz Zdarzeń** twojej sceny $(gameScene).", "pt": "Agora, **atualizemos este texto com um temporizador**! **Abra a Planilha de Eventos** de sua cena $(gameScene).", + "ru": "Теперь давайте **обновим этот текст с помощью таймера**! **Откроем Лист событий** вашей сцены $(gameScene).", + "sl": "Zdaj **posodobimo ta besedilo s časovnikom**! **Odpri list dogodkov** svoje scene $(gameScene).", + "sq": "Tani le të **përditësojmë këtë tekst me një kohëmatës**! **Hapim fletën e ngjarjeve** të skenës suaj $(gameScene).", "th": "ตอนนี้ **อัปเดตข้อความนี้ด้วยตัวจับเวลา**! **เปิดแผ่นงานเหตุการณ์** ของฉากของคุณ $(gameScene)", - "ar": "الآن هيّا نقوم ب**تحديث هذا النص مع المؤقت**! هيّا نقوم ب**فتح صفحة الأحداث** لمشهدك $(gameScene)." + "uk": "Тепер давайте **оновимо цей текст за допомогою таймера**! **Відкриємо Лист подій** вашої сцени $(gameScene).", + "zh": "现在让我们用一个计时器**更新这个文本**!让我们**打开你的场景 $(gameScene) 的事件表**。" } }, "placement": "bottom" @@ -340,10 +547,20 @@ "messageByLocale": { "en": "Let's **add a condition** to detect when the game starts.", "fr": "Ajoutons une **condition** pour détecter quand le jeu commence.", + "ar": "هيّا نقوم ب**إضافة شرط** لكشف وقت بدء اللعبة.", + "de": "Lassen Sie uns eine **Bedingung hinzufügen**, um zu erkennen, wann das Spiel beginnt.", "es": "Agreguemos una **condición** para detectar cuando comienza el juego.", + "it": "Aggiungiamo una **condizione** per rilevare quando inizia il gioco.", + "ja": "ゲームが開始されたときを検出するために **条件を追加**しましょう。", + "ko": "게임이 시작될 때를 감지하기 위해 **조건을 추가**해 보겠습니다.", + "pl": "Dodajmy **warunek**, aby wykryć, kiedy gra się zaczyna.", "pt": "Vamos **adicionar uma condição** para detectar quando o jogo começa.", + "ru": "Добавим **условие** для определения начала игры.", + "sl": "Dodajmo **pogoj**, da ugotovimo, kdaj se igra začne.", + "sq": "Le të **shtojmë një kusht** për të zbuluar kur fillon loja.", "th": "เพิ่ม **เงื่อนไข** เพื่อตรวจสอบเมื่อเกมเริ่มต้น", - "ar": "هيّا نقوم ب**إضافة شرط** لكشف وقت بدء اللعبة." + "uk": "Давайте **додамо умову**, щоб виявити, коли гра починається.", + "zh": "让我们**添加一个条件**来检测游戏何时开始。" } } } @@ -358,10 +575,20 @@ "messageByLocale": { "en": "Search for **Scene**.", "fr": "Cherchez **Scène**.", + "ar": "البحث عن **مشهد**.", + "de": "Suchen Sie nach **Szene**.", "es": "Busque **Escena**.", + "it": "Cerca **Scena**.", + "ja": "**シーン** を検索します。", + "ko": "**씬**을 검색합니다.", + "pl": "Wyszukaj **Poziom**.", "pt": "Procure por **Cena**.", + "ru": "Ищите **Сцена**.", + "sl": "Iščite **Prizorišče**.", + "sq": "Kërkoni **Skenë**.", "th": "ค้นหา **ฉาก**", - "ar": "البحث عن **مشهد**." + "uk": "Шукайте **Сцена**.", + "zh": "搜索 **场景**。" } } }, @@ -377,10 +604,20 @@ "messageByLocale": { "en": "We will start our timer when the scene starts, thanks to the **At the beginning of the scene** condition.", "fr": "Nous allons démarrer notre chronomètre quand la scène commence, grâce à la condition **Au début de la scène**.", + "ar": "سوف يبدأ مؤقتنا عندما يبدأ المشهد، بفضل الشرط **في بداية المشهد**.", + "de": "Wir starten unseren Timer, wenn die Szene beginnt, dank der Bedingung **Am Anfang der Szene**.", "es": "Comenzaremos nuestro temporizador cuando comience la escena, gracias a la condición **Al comienzo de la escena**.", + "it": "Inizieremo il nostro timer quando la scena inizia, grazie alla condizione **All'inizio della scena**.", + "ja": "シーンが開始されたときに **シーンの開始時** 条件によってタイマーを開始します。", + "ko": "씬이 시작될 때 **씬 시작 시** 조건으로 타이머를 시작합니다.", + "pl": "Uruchomimy nasz stoper, gdy poziom się zacznie, dzięki warunkowi **Na początku poziomu**.", "pt": "Vamos iniciar nosso temporizador quando a cena começar, graças à condição **No início da cena**.", + "ru": "Мы начнем наш таймер, когда сцена начнется, благодаря условию **В начале сцены**.", + "sl": "Zagnali bomo naš štopar, ko se prizorišče začne, zahvaljujoč pogoj **Na začetku prizorišča**.", + "sq": "Do të fillojmë kohëmatësin tonë kur skena fillon, falë kushtit **Në fillim të skenës**.", "th": "เราจะเริ่มต้นตัวจับเวลาเมื่อฉากเริ่มต้น โดยขอบคุณเงื่อนไข **เริ่มต้นฉาก**", - "ar": "سوف يبدأ مؤقتنا عندما يبدأ المشهد، بفضل الشرط **في بداية المشهد**." + "uk": "Ми почнемо наш таймер, коли сцена почнеться, завдяки умові **На початку сцени**.", + "zh": "我们将在场景开始时启动我们的计时器,这要归功于 **在场景开始时** 条件。" } } }, @@ -396,10 +633,20 @@ "messageByLocale": { "en": "Let's create the timer now.", "fr": "Nous allons maintenant créer le chronomètre.", + "ar": "سوف نقوم بإنشاء المؤقت الآن.", + "de": "Lassen Sie uns den Timer jetzt erstellen.", "es": "Ahora creemos el temporizador.", + "it": "Creiamo il timer ora.", + "ja": "タイマーを作成しましょう。", + "ko": "이제 타이머를 만들어 보겠습니다.", + "pl": "Teraz utwórzmy stoper.", "pt": "Vamos criar o temporizador agora.", + "ru": "Давайте создадим таймер сейчас.", + "sl": "Sedaj bomo ustvarili štopar.", + "sq": "Le të krijojmë kohëmatësin tani.", "th": "เราจะสร้างตัวจับเวลาตอนนี้", - "ar": "سوف نقوم بإنشاء المؤقت الآن." + "uk": "Давайте створимо таймер зараз.", + "zh": "现在让我们创建计时器。" } }, "placement": "top" @@ -415,10 +662,20 @@ "messageByLocale": { "en": "Create an **action**.", "fr": "Créez une **action**.", + "ar": "إضافة **إجراء**.", + "de": "Erstellen Sie eine **Aktion**.", "es": "Crea una **acción**.", + "it": "Crea un'**azione**.", + "ja": "**アクション** を作成します。", + "ko": "**액션**을 만듭니다.", + "pl": "Utwórz **akcję**.", "pt": "Crie uma **ação**.", + "ru": "Создайте **действие**.", + "sl": "Ustvarite **dejanje**.", + "sq": "Krijo një **veprim**.", "th": "สร้าง **การกระทำ**", - "ar": "إضافة **إجراء**." + "uk": "Створіть **дію**.", + "zh": "创建一个**动作**。" } } } @@ -433,10 +690,20 @@ "messageByLocale": { "en": "Search for **Scene timer**.", "fr": "Cherchez **chrono**.", + "ar": "البحث عن **مؤقت المشهد**.", + "de": "Suchen Sie nach **Szene-Timer**.", "es": "Busque **temporizador**.", + "it": "Cerca **timer di scena**.", + "ja": "**シーンタイマー** を検索します。", + "ko": "**씬 타이머**를 검색합니다.", + "pl": "Wyszukaj **stoper poziomu**.", "pt": "Procure por **Cronômetro**.", + "ru": "Ищите **таймер сцены**.", + "sl": "Iščite **časovnik prizorišča**.", + "sq": "Kërkoni **kohëmatës skene**.", "th": "ค้นหา **ตัวจับเวลาฉาก**", - "ar": "البحث عن **مؤقت المشهد**." + "uk": "Шукайте **таймер сцени**.", + "zh": "搜索 **场景计时器**。" } } }, @@ -452,10 +719,20 @@ "messageByLocale": { "en": "Select the **Start (or reset) a scene timer** action.", "fr": "Cliquez sur l'action **Démarrer (ou réinitialiser) un chronomètre de scène**.", + "ar": "تحديد الإجراء **بدء (أو إعادة تعيين) مؤقت المشهد**.", + "de": "Wählen Sie die **Szene-Timer starten (oder zurücksetzen)**-Aktion.", "es": "Seleccione la acción **Iniciar (o reiniciar) un temporizador de escena**.", + "it": "Seleziona l'azione **Avvia (o reimposta) un timer di scena**.", + "ja": "**シーンタイマーを開始(またはリセット)**するアクションを選択します。", + "ko": "**씬 타이머 시작 (또는 재설정)** 액션을 선택합니다.", + "pl": "Wybierz **Uruchom (lub zresetuj) stoper poziomu**.", "pt": "Selecione a ação **Iniciar (ou reiniciar) um cronômetro de cena**.", + "ru": "Выберите действие **Запустить (или сбросить) таймер сцены**.", + "sl": "Izberite **Začni (ali ponastavi) časovnik prizorišča**.", + "sq": "Zgjidh veprimin **Fillo (ose rivendos) një kohëmatës skene**.", "th": "เลือก **เริ่มต้น (หรือรีเซ็ต) ตัวจับเวลาฉาก**", - "ar": "تحديد الإجراء **بدء (أو إعادة تعيين) مؤقت المشهد**." + "uk": "Виберіть дію **Запустити (або скинути) таймер сцени**.", + "zh": "选择 **开始(或重置)场景计时器** 动作。" } } }, @@ -471,10 +748,20 @@ "messageByLocale": { "en": "This timer will be created, let's name it **\"GameTimer\"** (in quotations).", "fr": "Ce chronomètre sera créé, nommons-le **\"GameTimer\"** (entre guillemets).", + "ar": "سوف يتم إنشاء المؤقت، فلنسميه **\"GameTimer\"** (داخل علامتا تنصيص).", + "de": "Dieser Timer wird erstellt, nennen wir ihn **\"GameTimer\"** (in Anführungszeichen).", "es": "Este temporizador se creará, llamémoslo **\"GameTimer\"** (entre comillas).", + "it": "Questo timer verrà creato, chiamiamolo **\"GameTimer\"** (tra virgolette).", + "ja": "このタイマーは作成されます。**\"GameTimer\"**(引用符内)と名前を付けましょう。", + "ko": "이 타이머가 생성될 것입니다. **\"GameTimer\"** (따옴표 안)이라고 이름을 지어 보겠습니다.", + "pl": "Ten stoper zostanie utworzony, nazwijmy go **\"GameTimer\"** (w cudzysłowie).", "pt": "Este cronômetro será criado, vamos chamá-lo de **\"GameTimer\"** (entre aspas).", + "ru": "Этот таймер будет создан, давайте назовем его **\"GameTimer\"** (в кавычках).", + "sl": "Ta časovnik bo ustvarjen, poimenujmo ga **\"GameTimer\"** (v narekovajih).", + "sq": "Kjo kohëmatës do të krijohet, le të quajmë **\"GameTimer\"** (në thonjza).", "th": "ตัวจับเวลานี้จะถูกสร้าง ให้เราตั้งชื่อว่า **\"GameTimer\"** (ในเครื่องหมายคำพูด)", - "ar": "سوف يتم إنشاء المؤقت، فلنسميه **\"GameTimer\"** (داخل علامتا تنصيص)." + "uk": "Цей таймер буде створений, давайте назвемо його **\"GameTimer\"** (у лапках).", + "zh": "这个计时器将被创建,让我们给它命名为 **\"GameTimer\"**(在引号内)。" } } }, @@ -491,10 +778,20 @@ "messageByLocale": { "en": "We're done! Our timer will start when the scene starts.", "fr": "Nous avons terminé ! Notre chronomètre démarrera lorsque la scène commencera.", + "ar": "انتهينا! مؤقتنا سوف يبدأ وقتما يبدأ المشهد.", + "de": "Wir sind fertig! Unser Timer wird starten, wenn die Szene beginnt.", "es": "¡Hemos terminado! Nuestro temporizador comenzará cuando comience la escena.", + "it": "Abbiamo finito! Il nostro timer inizierà quando la scena inizia.", + "ja": "完了です!シーンが開始されたときにタイマーが開始します。", + "ko": "완료되었습니다! 씬이 시작될 때 타이머가 시작됩니다.", + "pl": "Skończone! Nasz stoper rozpocznie się, gdy poziom się zacznie.", "pt": "Terminamos! Nosso cronômetro começará quando a cena começar.", + "ru": "Мы закончили! Наш таймер начнется, когда сцена начнется.", + "sl": "Končali smo! Naš štopar se bo začel, ko se prizorišče začne.", + "sq": "Kemi përfunduar! Kohëmatësi ynë do të fillojë kur skena fillon.", "th": "เราจบแล้ว! ตัวจับเวลาของเราจะเริ่มต้นเมื่อฉากเริ่มต้น", - "ar": "انتهينا! مؤقتنا سوف يبدأ وقتما يبدأ المشهد." + "uk": "Ми закінчили! Наш таймер почнеться, коли сцена почнеться.", + "zh": "我们完成了!我们的计时器将在场景开始时启动。" } }, "placement": "top" @@ -510,10 +807,20 @@ "messageByLocale": { "en": "Now let's update the score thanks to the timer.", "fr": "Maintenant, mettons à jour le score grâce au chronomètre.", + "ar": "الآن هيّا نقوم بتحديث النص بفضل المؤقت.", + "de": "Lassen Sie uns den Timer verwenden, um die Punktzahl zu aktualisieren.", "es": "Ahora actualicemos la puntuación gracias al temporizador.", + "it": "Ora aggiorniamo il punteggio grazie al timer.", + "ja": "今度はタイマーを使ってスコアを更新しましょう。", + "ko": "이제 타이머로 점수를 업데이트해 보겠습니다.", + "pl": "Teraz zaktualizujmy wynik za pomocą stopera.", "pt": "Agora vamos atualizar a pontuação graças ao cronômetro.", + "ru": "Теперь давайте обновим счет благодаря таймеру.", + "sl": "Zdaj bomo posodobili rezultat zahvaljujoč časovniku.", + "sq": "Tani le të përditësojmë rezultatin falë kohëmatësit.", "th": "ตอนนี้เราจะอัปเดตคะแนนของเราโดยใช้ตัวจับเวลา", - "ar": "الآن هيّا نقوم بتحديث النص بفضل المؤقت." + "uk": "Тепер давайте оновимо рахунок завдяки таймеру.", + "zh": "现在让我们用计时器更新分数。" } } } @@ -528,10 +835,20 @@ "messageByLocale": { "en": "Select $(scoreText).", "fr": "Cliquez sur $(scoreText).", + "ar": "تحديد $(scoreText).", + "de": "Wählen Sie $(scoreText).", "es": "Seleccione $(scoreText).", + "it": "Seleziona $(scoreText).", + "ja": "$(scoreText) を選択します。", + "ko": "$(scoreText)를 선택합니다.", + "pl": "Wybierz $(scoreText).", "pt": "Selecione $(scoreText).", + "ru": "Выберите $(scoreText).", + "sl": "Izberite $(scoreText).", + "sq": "Zgjidh $(scoreText).", "th": "เลือก $(scoreText)", - "ar": "تحديد $(scoreText)." + "uk": "Виберіть $(scoreText).", + "zh": "选择 $(scoreText)。" } } }, @@ -547,36 +864,25 @@ "messageByLocale": { "en": "We will change the text.", "fr": "Nous allons changer le contenu du texte.", + "ar": "سوف نقوم بتعديل النص.", + "de": "Wir werden den Text ändern.", "es": "Cambiamos el texto.", + "it": "Modificheremo il testo.", + "ja": "テキストを変更します。", + "ko": "텍스트를 변경해 보겠습니다.", + "pl": "Zmienimy tekst.", "pt": "Vamos alterar o texto.", + "ru": "Мы изменим текст.", + "sl": "Spremenili bomo besedilo.", + "sq": "Do të ndryshojmë tekstin.", "th": "เราจะเปลี่ยนข้อความ", - "ar": "سوف نقوم بتعديل النص." + "uk": "Ми змінимо текст.", + "zh": "我们将更改文本。" } } }, "isOnClosableDialog": true }, - { - "elementToHighlightId": "#instruction-parameters-container select", - "nextStepTrigger": { - "valueEquals": "=" - }, - "skippable": true, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select **= (set to)**.", - "fr": "Cliquez sur **= (définir à)**.", - "es": "Seleccione **= (establecer en)**.", - "pt": "Selecione **= (definir como)**.", - "th": "เลือก **= (ตั้งค่าเป็น)**", - "ar": "تحديد **= (تعيين إلى)**." - } - } - }, - "placement": "left", - "isOnClosableDialog": true - }, { "elementToHighlightId": "#open-string-expression-popover-button", "nextStepTrigger": { @@ -588,9 +894,19 @@ "en": "Now, let's use the value of the timer.", "fr": "Maintenant, utilisons la valeur du chronomètre.", "es": "Ahora, usemos el valor del temporizador.", + "ar": "والآن، هيّا نستخدم قيمة المؤقت.", + "de": "Lassen Sie uns den Wert des Timers verwenden.", + "it": "Ora, usiamo il valore del timer.", + "ja": "今度はタイマーの値を使いましょう。", + "ko": "이제 타이머의 값을 사용해 보겠습니다.", + "pl": "Teraz użyjmy wartości stopera.", "pt": "Agora, vamos usar o valor do cronômetro.", + "ru": "Теперь давайте используем значение таймера.", + "sl": "Sedaj bomo uporabili vrednost štoparja.", + "sq": "Tani, le të përdorim vlerën e kohëmatësit.", "th": "ตอนนี้เราจะใช้ค่าของตัวจับเวลา", - "ar": "والآن، هيّا نستخدم قيمة المؤقت." + "uk": "Тепер давайте використаємо значення таймера.", + "zh": "现在,让我们使用计时器的值。" } }, "placement": "bottom" @@ -607,10 +923,20 @@ "messageByLocale": { "en": "Search for **Timer**", "fr": "Recherchez **Chrono**", + "ar": "البحث عن **مؤقت**.", + "de": "Suchen Sie nach **Timer**", "es": "Busque **Temporizador**", + "it": "Cerca **Timer**", + "ja": "**タイマー** を検索します。", + "ko": "**타이머**를 검색합니다.", + "pl": "Wyszukaj **Stoper**", "pt": "Procure por **Cronômetro**", + "ru": "Ищите **Таймер**", + "sl": "Iščite **Časovnik**", + "sq": "Kërkoni **Kohëmatës**", "th": "ค้นหา **ตัวจับเวลา**", - "ar": "البحث عن **مؤقت**." + "uk": "Шукайте **Таймер**", + "zh": "搜索 **计时器**" } }, "placement": "top" @@ -627,10 +953,20 @@ "messageByLocale": { "en": "Select **Value of a scene timer**.", "fr": "Sélectionnez **Valeur d'un chronomètre de scène**.", + "ar": "تحديد **قيمة مؤقت المشهد**.", + "de": "Wählen Sie **Wert eines Szenentimers**.", "es": "Seleccione **Valor de un temporizador de escena**.", + "it": "Seleziona **Valore di un timer di scena**.", + "ja": "**シーンタイマーの値** を選択します。", + "ko": "**씬 타이머의 값**을 선택합니다.", + "pl": "Wybierz **Wartość stopera poziomu**.", "pt": "Selecione **Valor de um cronômetro de cena**.", + "ru": "Выберите **Значение таймера сцены**.", + "sl": "Izberite **Vrednost časovnika prizorišča**.", + "sq": "Zgjidh **Vlerën e një kohëmatësi skene**.", "th": "เลือก **ค่าของตัวจับเวลาของฉาก**", - "ar": "تحديد **قيمة مؤقت المشهد**." + "uk": "Виберіть **Значення таймера сцени**.", + "zh": "选择 **场景计时器的值**。" } }, "placement": "bottom" @@ -647,10 +983,20 @@ "messageByLocale": { "en": "Select the timer we just created, **\"GameTimer\"**.", "fr": "Sélectionnez le chronomètre que nous venons de créer, **\"GameTimer\"**.", + "ar": "تحديد المؤقت الذي قمنا بإنشائه للتو (**\"GameTimer\"**).", + "de": "Wählen Sie den Timer, den wir gerade erstellt haben, **\"GameTimer\"**.", "es": "Seleccione el temporizador que acabamos de crear, **\"GameTimer\"**.", + "it": "Seleziona il timer che abbiamo appena creato, **\"GameTimer\"**.", + "ja": "先ほど作成したタイマー **\"GameTimer\"** を選択します。", + "ko": "방금 만든 타이머 **\"GameTimer\"**을 선택합니다.", + "pl": "Wybierz stoper, który właśnie utworzyliśmy, **\"GameTimer\"**.", "pt": "Selecione o cronômetro que acabamos de criar, **\"GameTimer\"**.", + "ru": "Выберите таймер, который мы только что создали, **\"GameTimer\"**.", + "sl": "Izberite časovnik, ki smo ga pravkar ustvarili, **\"GameTimer\"**.", + "sq": "Zgjidh kohëmatësin që sapo krijuam, **\"GameTimer\"**.", "th": "เลือกตัวจับเวลาที่เราสร้างไว้เมื่อสักครู่ที่แล้ว **\"GameTimer\"**", - "ar": "تحديد المؤقت الذي قمنا بإنشائه للتو (**\"GameTimer\"**)." + "uk": "Виберіть таймер, який ми щойно створили, **\"GameTimer\"**.", + "zh": "选择我们刚刚创建的计时器 **\"GameTimer\"**。" } }, "placement": "top" @@ -667,10 +1013,20 @@ "messageByLocale": { "en": "We're good.", "fr": "On est bon.", + "ar": "نحن على الطريق الصحيح.", + "de": "Wir sind gut.", "es": "Estamos bien.", + "it": "Siamo a posto.", + "ja": "問題ありません。", + "ko": "좋습니다.", + "pl": "Jesteśmy dobrze.", "pt": "Estamos bem.", + "ru": "Мы в порядке.", + "sl": "V redu smo.", + "sq": "Jemi mirë.", "th": "เรียบร้อยแล้ว", - "ar": "نحن على الطريق الصحيح." + "uk": "Ми в порядку.", + "zh": "我们完成了。" } }, "placement": "top" @@ -685,12 +1041,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, final detail! If we leave it like this, the score text will display the decimals of our timer and we only want the seconds!\n\nLet's **round** that number.\n\nLet's use the function `round()` around the value so that we round the timer value. The result will look like this:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", - "fr": "Bien, dernier détail ! Si nous laissons comme ça, le texte du score affichera les décimales de notre chronomètre et nous ne voulons que les secondes !\n\n**Arrondissons** ce nombre.\n\nAjoutons la fonction `round()` autour de la valeur afin que nous puissions arrondir la valeur du chronomètre. Le résultat ressemblera à ceci :\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", - "es": "¡Bien, detalle final! Si lo dejamos así, el texto de la puntuación mostrará los decimales de nuestro temporizador y solo queremos los segundos.\n\n¡**Redondeemos** ese número!\n\nAgreguemos la función `round()` alrededor del valor para que podamos redondear el valor del temporizador. El resultado se verá así:\n\n`\"ToString(round( TimerElapsedTime(\"GameTimer\")))`", - "pt": "Bem, detalhe final! Se deixarmos assim, o texto da pontuação exibirá os decimais do nosso cronômetro e só queremos os segundos!\n\nVamos **arredondar** esse número.\n\nVamos adicionar a função `round()` ao redor do valor para que possamos arredondar o valor do cronômetro. O resultado será assim:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", - "th": "ดี รายละเอียดสุดท้าย! ถ้าเราเหลืออย่างนี้ ข้อความคะแนนจะแสดงทศนิยมของตัวจับเวลาของเราและเราต้องการเฉพาะวินาที!\n\nเราจะ **ปัดเศษ** ตัวเลขนั้น\n\nเราจะเพิ่มการใช้ฟังก์ชัน `round()` รอบค่าเพื่อที่เราจะปัดเศษค่าของตัวจับเวลา ผลลัพธ์จะเป็นแบบนี้\n\n`ToString(round(TimerElapsedTime(\"GameTimer\")))`", - "ar": "حسنًا، نحن في التفاصيل النهائية! إذا تركناها هكذا، سيعرض النص أرقامًا عشرية ونحن نريد الثواني فقط!\n\nهيّا نقوم ب**تقريب** ذاك الرقم.\n\nلنستخدم التعبير `round()` حول القيمة حتى يتم تقريب قيمة المؤقت. سوف يصبح هكذا:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" + "en": "Final detail! If we leave it like this, the score text will display the decimals of our timer and we only want the seconds!\n\nLet's **round** that number.\n\nLet's use the function `round()` around the value so that we round the timer value. The result will look like this:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "fr": "Dernier détail ! Si nous laissons comme ça, le texte du score affichera les décimales de notre chronomètre et nous ne voulons que les secondes !\n\n**Arrondissons** ce nombre.\n\nAjoutons la fonction `round()` autour de la valeur afin que nous puissions arrondir la valeur du chronomètre. Le résultat ressemblera à ceci :\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "ar": "تفاصيل أخيرة! إذا تركناها بهذا الشكل، سيعرض نص النقاط العشرية لمؤقتنا ونريد فقط الثواني!\n\nلنقم ب**تقريب** هذا الرقم.\n\nلنستخدم الدالة `round()` حول القيمة حتى نقوم بتقريب قيمة المؤقت. سيكون الناتج كالتالي:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "de": "Letztes Detail! Wenn wir es so lassen, zeigt der Punktzahlentext die Dezimalstellen unseres Timers an und wir wollen nur die Sekunden!\n\nLassen Sie uns diese Zahl **runden**.\n\nLassen Sie uns die Funktion `round()` um den Wert herum verwenden, damit wir den Timerwert runden. Das Ergebnis wird so aussehen:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "es": "¡Detalle final! Si lo dejamos así, el texto de la puntuación mostrará los decimales de nuestro temporizador y solo queremos los segundos.\n\n¡**Redondeemos** ese número!\n\nAgreguemos la función `round()` alrededor del valor para que podamos redondear el valor del temporizador. El resultado se verá así:\n\n`\"ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "it": "Dettaglio finale! Se lo lasciamo così, il testo del punteggio visualizzerà le cifre decimali del nostro timer e noi vogliamo solo i secondi!\n\nArrotondiamo quel numero.\n\nUsiamo la funzione `round()` intorno al valore in modo che possiamo arrotondare il valore del timer. Il risultato sarà così:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "ja": "最後の詳細です!これのままにしておくと、スコアテキストにはタイマーの小数点が表示され、私たちは秒だけが欲しいです!\n\nその数値を**丸めましょう**。\n\nタイマーの値を丸めるために、値の周りに`round()`関数を使用しましょう。結果は次のようになります:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "ko": "마지막 세부 사항입니다! 이대로 둔다면 점수 텍스트에는 타이머의 소수점이 표시되고 우리는 초만 원합니다!\n\n그 숫자를 **반올림**해 보겠습니다.\n\n타이머 값을 반올림하려면 값을 둘러싼 `round()` 함수를 사용하겠습니다. 결과는 다음과 같이 보입니다:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "pl": "Ostatni szczegół! Jeśli zostawimy to tak, tekst wyniku wyświetli dziesiętne naszego stopera, a my chcemy tylko sekundy!\n\nZaokrąglmy tę liczbę.\n\nUżyjmy funkcji `round()` wokół wartości, aby zaokrąglić wartość stopera. Wynik będzie wyglądał tak:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "pt": "Detalhe final! Se deixarmos assim, o texto da pontuação exibirá os decimais do nosso cronômetro e só queremos os segundos!\n\nVamos **arredondar** esse número.\n\nVamos adicionar a função `round()` ao redor do valor para que possamos arredondar o valor do cronômetro. O resultado será assim:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "ru": "Последняя деталь! Если мы оставим это так, текст счета будет отображать десятичные дроби нашего таймера, а мы хотим только секунды!\n\nДавайте **округлим** это число.\n\nДавайте используем функцию `round()` вокруг значения, чтобы мы могли округлить значение таймера. Результат будет выглядеть так:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "sl": "Zadnji podrobnosti! Če pustimo tako, bo besedilo rezultata prikazalo decimalna mesta našega štoparja in mi želimo samo sekunde!\n\nZaokrožimo to število.\n\nUporabimo funkcijo `round()` okoli vrednosti, da bomo zaokrožili vrednost štoparja. Rezultat bo izgledal tako:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "sq": "Detaji përfundimtar! Nëse e lëmë kështu, teksti i rezultatit do të shfaqë dhjetëralet e kohëmatësit tonë dhe ne duam vetëm sekondat!\n\nLe të **rrumbullakësojmë** atë numër.\n\nLe të përdorim funksionin `round()` rreth vlerës që të rrethojmë vlerën e kohëmatësit. Rezultati do të duket kështu:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "th": "รายละเอียดสุดท้าย! หากเราปล่อยไว้เช่นนี้ ข้อความคะแนนจะแสดงทศนิยมของตัวจับเวลาของเราและเราต้องการเฉพาะวินาทีเท่านั้น!\n\nเรามา **ปัดเศษ** ตัวเลขนั้น\n\nเราจะใช้ฟังก์ชัน `round()` รอบค่าเพื่อที่เราจะปัดค่าตัวจับเวลา ผลลัพธ์จะดูเป็นแบบนี้:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "uk": "Останній деталь! Якщо ми залишимо це так, текст рахунку буде відображати десяткові нашого таймера, а ми хочемо тільки секунди!\n\nДавайте **округлимо** це число.\n\nДавайте використаємо функцію `round()` навколо значення, щоб ми могли округлити значення таймера. Результат буде виглядати так:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`", + "zh": "最后一个细节!如果我们保持这样,分数文本将显示我们的计时器的小数位,而我们只想要秒数!\n\n让我们**四舍五入**这个数字。\n\n让我们在值周围使用`round()`函数,这样我们就可以四舍五入计时器的值。结果将如下所示:\n\n`ToString(round( TimerElapsedTime(\"GameTimer\")))`" } }, "placement": "top" @@ -707,10 +1073,20 @@ "messageByLocale": { "en": "We're all set.", "fr": "On est tout bon.", + "ar": "ضبطنا كل شيء.", + "de": "Wir sind fertig.", "es": "Estamos listos.", + "it": "Siamo pronti.", + "ja": "準備完了です。", + "ko": "모두 준비되었습니다.", + "pl": "Jesteśmy gotowi.", "pt": "Estamos prontos.", + "ru": "Мы все готовы.", + "sl": "Vse je pripravljeno.", + "sq": "Jemi të gatshëm.", "th": "เราพร้อมแล้ว", - "ar": "ضبطنا كل شيء." + "uk": "Ми готові.", + "zh": "我们都准备好了。" } }, "placement": "top" @@ -724,12 +1100,22 @@ "tooltip": { "description": { "messageByLocale": { - "en": "Alright, we're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Bien, nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", - "es": "¡Bien, hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "pt": "Bem, terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "th": "เอาล่ะ เสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราทำกันดีกว่า! คลิกที่ปุ่ม **ดูตัวอย่าง**", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**." + "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", + "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", + "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", + "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", + "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", + "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", + "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", + "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", + "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", + "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", + "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", + "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", + "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", + "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", + "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" } }, "placement": "bottom" From 0df8a97a374a8a1fdb907b14730cff7a5269ace3 Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Fri, 31 May 2024 10:31:27 +0200 Subject: [PATCH 093/208] Document how to test and integrate your in-app tutorial in GDevelop (#52) --- docs/inAppTutorial/REFERENCE.md | 79 ++++++++++++++++++++++++++++++++- tutorials/in-app/flingGame.json | 17 ++++--- tutorials/in-app/healthBar.json | 2 +- tutorials/in-app/joystick.json | 2 +- tutorials/in-app/timer.json | 8 ++-- 5 files changed, 92 insertions(+), 16 deletions(-) diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index 601cbab..54ac6d4 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -1,5 +1,7 @@ # GDevelop In-App Tutorial Documentation +"In-app tutorial" is the term used in the codebase for GDevelop. It is displayed "guided lesson" in GDevelop editor. Each term designates the same thing. + ## How is handled the translation? To display the tutorial with different languages, every text that you will specify has to be an object `messageByLocale` with locales as keys and the translated sentence as value. @@ -31,6 +33,8 @@ An in-app tutorial is a JSON with 4 fields: "editorSwitches": {...}, "endDialog": {...}, "availableLocales": [...], + "initialTemplateUrl": "https://...", + "initialProjectData": {...}, } ``` @@ -205,7 +209,7 @@ Notes: - `playScene` is the key under which the name of the scene has been stored during the tutorial. - The possible values for the expected editor are: `Scene`, `EventsSheet`, `Home` (other editors are not supported at the moment). -## `initialTemplateUrl` & `initialProjectData` +### `initialTemplateUrl` & `initialProjectData` If the tutorial does not start from scratch, we can provide a template URL to download the project from with `initialTemplateUrl`. This should match the URL of the template in the GDevelop templates S3 bucket (https://resources.gdevelop-app.com/in-app-tutorials/templates/{gameName}/game.json) This template should be available inside the `templates` folder, with the same name as the tutorial. It will get deployed to the S3 bucket when merging to master. @@ -228,3 +232,76 @@ Ex: }, } ``` + +## How to test your in-app tutorial in GDevelop + +> Available in GDevelop desktop app only. + +Starting from version 5.4.202, you can load your in-app tutorial from your computer to try it. + +To do so, go to your preferences, in the section "Contributor options", activate the toggle "Show button to load guided lesson from file and test it.". + +Once this is done, a new button "Load local lesson" should appear in the homepage's learn tab, above the guided lessons section. Select your JSON file and complete your lesson! + +Notes: + +- The editor will perform a basic schema check before actually running the tutorial. + - If errors are found, please open the developer console, they will be listed there. + - The check is not exhaustive. +- If your in-app tutorial is using an initial template, make sure to have it opened before loading the tutorial. + +## Translate your in-app tutorial + +If you can use ChatGPT, you can easily have a basic translation for your tutorial. To do so, for each object with a `en` key, you should add all needed locale keys and then you can ask ChatGPT to translate it. + +For instance, if you have the following: + +```json +"messageByLocale": { + "en": "Click on this button" +} +``` + +Transform it to this: + +```json +"messageByLocale": { + "en": "Click on this button", + "fr": "", + "de": "", + "es": "", + "th": "", + ... +} +``` + +And the ask the following to ChatGPT: + +``` +Given this JSON, can you add translations for the empty fields corresponding to the keys that represent the locale to translate to? + +{COPY PASTE THE JSON} +``` + +## Integrity tests + +Some tests are run in our Continuous Integration (CI) pipeline when you open a PR. +You can run them on your device to make sure your in-app tutorial passes the checks. + +To do so, in a terminal: + +- install the project: at the root of the repository, run `npm install` +- Build the tutorials: run `npm run build` +- Run the tests: run `npm run check-post-build` +- Read the output to see if your in-app tutorial passes the tests. + +## Final steps + +You should follow those steps if you want your in-app tutorial to be integrated in GDevelop's interface. + +Open a new PR in [GDevelop's repository](https://github.com/4ian/GDevelop) and: + +- In the file `InAppTutorial.js`: + - add your tutorial id in a constant and add it to the list `guidedLessonsIds`. + - if applicable, add your tutorial id in the list in the function `isMiniTutorial`. +- In the file `GuidedLessons.js`, add an item in the list `guidedLessonCards` with all the fields (you should have a SVG file to use in the card). diff --git a/tutorials/in-app/flingGame.json b/tutorials/in-app/flingGame.json index 66f1549..0c8a9fb 100644 --- a/tutorials/in-app/flingGame.json +++ b/tutorials/in-app/flingGame.json @@ -4698,10 +4698,10 @@ "th": "พิมพ์ **\"Score\"** (ใส่ quotations ด้วย)", "ar": "كتابة **\"Score\"** (داخل علامتا تنصيص)." } - } + }, + "placement": "top" }, - "isOnClosableDialog": true, - "placement": "top" + "isOnClosableDialog": true }, { "elementToHighlightId": "#instruction-editor-dialog #ok-button", @@ -4813,9 +4813,9 @@ "th": "เลือก “= (ตั้งเป็น)”", "ar": "تحديد **= (تعيين إلى)**." } - } + }, + "placement": "left" }, - "placement": "left", "isOnClosableDialog": true }, { @@ -4833,9 +4833,9 @@ "th": "ดับเบิ้ลคลิกเพื่อไฮไลต์ จากนั้นคัดลองและวางที่นี่: `\"Time: \" + ToString(round( TimerElapsedTime(\"Score\")))`", "ar": "نقرة مزدوجة لتحديد هذا السطر، ثم نسخ ولصق هذا هنا:\n\n`\"الوقت: \" + ToString(round( TimerElapsedTime(\"Score\")))`." } - } + }, + "placement": "left" }, - "placement": "left", "isOnClosableDialog": true }, { @@ -5710,8 +5710,7 @@ }, "placement": "top" }, - "isOnClosableDialog": true, - "placement": "top" + "isOnClosableDialog": true }, { "elementToHighlightId": "#instruction-editor-dialog #ok-button", diff --git a/tutorials/in-app/healthBar.json b/tutorials/in-app/healthBar.json index b27c304..2247cdf 100644 --- a/tutorials/in-app/healthBar.json +++ b/tutorials/in-app/healthBar.json @@ -352,8 +352,8 @@ "nextStepTrigger": { "presenceOfElement": "#asset-store-home[data-is-filtered=\"true\"] #asset-pack-resource-bars" }, - "placement": "bottom", "tooltip": { + "placement": "bottom", "description": { "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index aab8d70..41c494a 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -348,8 +348,8 @@ "nextStepTrigger": { "presenceOfElement": "#asset-store-home[data-is-filtered=\"true\"] #asset-pack-multitouch-joysticks" }, - "placement": "bottom", "tooltip": { + "placement": "bottom", "description": { "messageByLocale": { "en": "We will use an object that comes with pre-made actions and conditions. We call this a **Ready to use object**.", diff --git a/tutorials/in-app/timer.json b/tutorials/in-app/timer.json index d71285a..882cb10 100644 --- a/tutorials/in-app/timer.json +++ b/tutorials/in-app/timer.json @@ -763,10 +763,10 @@ "uk": "Цей таймер буде створений, давайте назвемо його **\"GameTimer\"** (у лапках).", "zh": "这个计时器将被创建,让我们给它命名为 **\"GameTimer\"**(在引号内)。" } - } + }, + "placement": "top" }, - "isOnClosableDialog": true, - "placement": "top" + "isOnClosableDialog": true }, { "elementToHighlightId": "#instruction-editor-dialog #ok-button", @@ -1122,4 +1122,4 @@ } } ] -} +} \ No newline at end of file From 861ece36ac83ad75660b79aafc2940f9198d1ef1 Mon Sep 17 00:00:00 2001 From: AlexandreS <32449369+AlexandreSi@users.noreply.github.com> Date: Mon, 3 Jun 2024 12:04:24 +0200 Subject: [PATCH 094/208] Introduce meta steps (#53) --- __tests__/post-build.spec.js | 5 +- docs/inAppTutorial/REFERENCE.md | 29 ++- scripts/generate-database.js | 26 ++- scripts/lib/InAppTutorial.js | 46 ++++ scripts/lib/MetaStepTranslator.js | 204 ++++++++++++++++++ scripts/types.d.ts | 54 ++++- tutorials/in-app/joystick.json | 342 +++++++++--------------------- 7 files changed, 456 insertions(+), 250 deletions(-) create mode 100644 scripts/lib/MetaStepTranslator.js diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index 75b0456..eae4b55 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -13,6 +13,8 @@ const { /** * @typedef {import('../scripts/types').InAppTutorialShortHeader} InAppTutorialShortHeader * @typedef {import('../scripts/types').InAppTutorial} InAppTutorial + * @typedef {import('../scripts/types').InAppTutorialFlowStep} InAppTutorialFlowStep + * @typedef {import('../scripts/types').InAppTutorialFlowMetaStep} InAppTutorialFlowMetaStep * @typedef {import('./utils').InAppTutorialGenericType} InAppTutorialGenericType */ @@ -119,9 +121,10 @@ describe('In app tutorials content checks', () => { const projectData = flow.reduce( /** * @param {string[]} acc - * @param {{mapProjectData?: Record}} step + * @param {InAppTutorialFlowStep | InAppTutorialFlowMetaStep} step */ (acc, step) => { + if ('metaKind' in step) return acc; if (step.mapProjectData) { acc.push(Object.keys(step.mapProjectData)[0]); } diff --git a/docs/inAppTutorial/REFERENCE.md b/docs/inAppTutorial/REFERENCE.md index 54ac6d4..a8b720d 100644 --- a/docs/inAppTutorial/REFERENCE.md +++ b/docs/inAppTutorial/REFERENCE.md @@ -24,7 +24,7 @@ Note: If the user language is not available, it will fallback to english. ## JSON Structure -An in-app tutorial is a JSON with 4 fields: +An in-app tutorial is a JSON with 7 fields: ```json { @@ -94,7 +94,7 @@ The array contains either: ### `flow` -A flow is an array of steps. +A flow is an array of steps or [meta steps](#meta-steps). A step is more or less an element to highlight plus a trigger that can be detected programmatically to decide to go to the next step. @@ -233,6 +233,19 @@ Ex: } ``` +## Meta steps + +We're introducing meta steps to speed up the process. +These meta steps should handle particular situations that are not interesting to the tutorial designer and will also bring consistency across tutorials. + +At the moment, there are 2 meta steps available (both are used in the `joystick` tutorial): + +- **LaunchPreview** +- **AddBehavior** + +TODO: add documentation about how to use those steps. +In the meantime, you can check how both are used in the `joystick` tutorial and discover the available fields in [the types declaration](../../scripts/types.d.ts). + ## How to test your in-app tutorial in GDevelop > Available in GDevelop desktop app only. @@ -249,6 +262,13 @@ Notes: - If errors are found, please open the developer console, they will be listed there. - The check is not exhaustive. - If your in-app tutorial is using an initial template, make sure to have it opened before loading the tutorial. +- If you are using meta steps in your tutorial, you need to first run the build command: + + ```bash + npm run build -- --gdevelop-root-path=/path/to/GDevelop/repository + ``` + + Then select the json file generated in the folder `dist/tutorials`. ## Translate your in-app tutorial @@ -288,10 +308,13 @@ Given this JSON, can you add translations for the empty fields corresponding to Some tests are run in our Continuous Integration (CI) pipeline when you open a PR. You can run them on your device to make sure your in-app tutorial passes the checks. +Prerequisites: +- Clone [GDevelop repository](https://github.com/4ian/GDevelop) on your computer and run `npm install` in the folder `newIDE/app/`. + To do so, in a terminal: - install the project: at the root of the repository, run `npm install` -- Build the tutorials: run `npm run build` +- Build the tutorials: run `npm run build -- --gdevelop-root-path=/path/to/GDevelop/repository` - Run the tests: run `npm run check-post-build` - Read the output to see if your in-app tutorial passes the tests. diff --git a/scripts/generate-database.js b/scripts/generate-database.js index 1559728..940a8bb 100644 --- a/scripts/generate-database.js +++ b/scripts/generate-database.js @@ -71,12 +71,7 @@ const generateFolderStructure = () => { shell.mkdir('-p', inAppTutorialsDestinationRootPath); shell.mkdir('-p', tutorialsDatabasePath); - // Copy tutorials in destination folders - shell.cp( - '-r', - inAppTutorialsSourceRootPath, - inAppTutorialsDestinationRootPath - ); + // Copy templates in destination folders shell.cp('-r', templatesSourceRootPath, templatesDestinationRootPath); }; @@ -227,8 +222,27 @@ const buildAndWriteInAppTutorialsDatabase = (databasePath, inAppTutorials) => { ); }; +/** + * @param {Array} inAppTutorials + */ +const processAndWriteInAppTutorials = (inAppTutorials) => { + inAppTutorials.forEach((inAppTutorial) => { + inAppTutorial.processFlowMetaSteps(); + }); + inAppTutorials.forEach((inAppTutorial) => { + fs.writeFile( + path.join( + inAppTutorialsDestinationRootPath, + path.basename(inAppTutorial.sourcePath) + ), + inAppTutorial.toString() + ); + }); +}; + const processInAppTutorials = async () => { const inAppTutorials = await readInAppTutorials(inAppTutorialsSourceRootPath); + processAndWriteInAppTutorials(inAppTutorials); buildAndWriteInAppTutorialsDatabase(tutorialsDatabasePath, inAppTutorials); }; diff --git a/scripts/lib/InAppTutorial.js b/scripts/lib/InAppTutorial.js index 69453ad..9fcb9d7 100644 --- a/scripts/lib/InAppTutorial.js +++ b/scripts/lib/InAppTutorial.js @@ -1,9 +1,15 @@ // @ts-check const fs = require('fs'); const path = require('path'); +const { translateMetaStep } = require('./MetaStepTranslator'); /** * @typedef {import("../types").InAppTutorialShortHeader} InAppTutorialShortHeader + * @typedef {import("../types").InAppTutorialFlowStep} InAppTutorialFlowStep + * @typedef {import("../types").InAppTutorial} InAppTutorialType + * @typedef {import("../types").InAppTutorialFlowMetaStep} InAppTutorialFlowMetaStep + * @typedef {import("../types").EditorIdentifier} EditorIdentifier + * @typedef {import("../types").InAppTutorialEndDialog} InAppTutorialEndDialog */ class InAppTutorial { @@ -17,6 +23,12 @@ class InAppTutorial { initialTemplateUrl; /** @type { Record | undefined} */ initialProjectData; + /** @type { Array } */ + flow; + /** @type {Record} */ + editorSwitches; + /** @type {InAppTutorialEndDialog} */ + endDialog; /** * @param {string} sourcePath @@ -35,6 +47,9 @@ class InAppTutorial { this.availableLocales = tutorialContent.availableLocales; this.initialTemplateUrl = tutorialContent.initialTemplateUrl; this.initialProjectData = tutorialContent.initialProjectData; + this.editorSwitches = tutorialContent.editorSwitches; + this.endDialog = tutorialContent.endDialog; + this.flow = tutorialContent.flow; } catch (error) { console.error( `An error occurred when reading tutorial file with path ${sourcePath}. The file might be corrupt.`, @@ -44,6 +59,19 @@ class InAppTutorial { } } + processFlowMetaSteps() { + /** @type {InAppTutorialFlowStep[]} */ + const newFlow = []; + this.flow.forEach((step) => { + if (!('metaKind' in step)) { + newFlow.push(step); + return; + } + newFlow.push(...translateMetaStep(step)); + }); + this.flow = newFlow; + } + /** * @returns {InAppTutorialShortHeader} */ @@ -56,6 +84,24 @@ class InAppTutorial { initialProjectData: this.initialProjectData, }; } + + toString() { + /** @type {InAppTutorialType} */ + const output = { + id: this.id, + flow: this.flow, + editorSwitches: this.editorSwitches, + endDialog: this.endDialog, + availableLocales: this.availableLocales, + }; + if (this.initialTemplateUrl) { + output.initialTemplateUrl = this.initialTemplateUrl; + } + if (this.initialProjectData) { + output.initialProjectData = this.initialProjectData; + } + return JSON.stringify(output, null, 2); + } } module.exports = { InAppTutorial }; diff --git a/scripts/lib/MetaStepTranslator.js b/scripts/lib/MetaStepTranslator.js new file mode 100644 index 0000000..859cc69 --- /dev/null +++ b/scripts/lib/MetaStepTranslator.js @@ -0,0 +1,204 @@ +// @ts-check + +/** + * @typedef {import('../types').InAppTutorialFlowMetaStep} InAppTutorialFlowMetaStep + * @typedef {import('../types').InAppTutorialFlowStep} InAppTutorialFlowStep + */ + +/** + * @param {InAppTutorialFlowMetaStep} metaStep + * @returns {InAppTutorialFlowStep[]} + */ +const translateMetaStep = (metaStep) => { + switch (metaStep.metaKind) { + case 'launch-preview': + const isStandalone = + metaStep.nextStep !== 'previewLaunched' && + !!metaStep.nextStep.clickOnTooltipButton; + return [ + { + id: metaStep.id, + elementToHighlightId: '#toolbar-preview-button', + nextStepTrigger: + metaStep.nextStep === 'previewLaunched' + ? { + previewLaunched: true, + } + : { + clickOnTooltipButton: metaStep.nextStep.clickOnTooltipButton, + }, + tooltip: { + standalone: isStandalone, + description: metaStep.description || { + messageByLocale: { + en: "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", + fr: 'Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.', + ar: 'حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.', + de: 'Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.', + es: '¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.', + it: 'abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.', + ja: '完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。', + ko: '우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.', + pl: 'Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.', + pt: 'Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.', + ru: 'Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.', + sl: 'Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.', + sq: 'Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.', + th: 'เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**', + uk: 'Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.', + zh: '我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。', + }, + }, + placement: isStandalone ? undefined : 'bottom', + }, + }, + ]; + case 'add-behavior': + return [ + { + elementToHighlightId: `objectInObjectsList:${metaStep.objectKey}`, + nextStepTrigger: { + presenceOfElement: '#object-editor-dialog', + }, + tooltip: { + placement: 'top', + description: metaStep.objectHighlightDescription, + ...(metaStep.objectHighlightTouchDescription + ? { touchDescription: metaStep.objectHighlightTouchDescription } + : undefined), + }, + }, + { + elementToHighlightId: '#behaviors-tab', + nextStepTrigger: { + presenceOfElement: '#add-behavior-button', + }, + tooltip: { + description: { + messageByLocale: { + en: 'See the **behaviors** of the **object** here.', + fr: "Les **comportements** de **l'objet** se trouvent dans cet onglet.", + ar: 'رؤية **سلوكيات الكائن** من هنا.', + de: 'Sehen Sie sich die **Verhaltensweisen** des **Objekts** hier an.', + es: 'Los **comportamientos** del **objeto** se encuentran en esta pestaña.', + it: "Vedi i **comportamenti** dell'**oggetto** qui.", + ja: 'ここに **オブジェクト** の **動作** を見る。', + ko: '여기서 **객체**의 **동작**을 확인하세요.', + pl: 'Zobacz **akcje** **obiektu** tutaj.', + pt: 'Veja os **comportamentos** do **objeto** aqui.', + ru: 'Смотрите **поведение** **объекта** здесь.', + sl: 'Oglejte si **vedenja** **predmeta** tukaj.', + sq: 'Shikoje **veprimet** te **objektit** ketu.', + th: 'ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่', + uk: "Дивіться **поведінку** **об'єкта** тут.", + zh: '在这里查看 **对象** 的 **动作**。', + }, + }, + placement: 'bottom', + }, + skippable: true, + isOnClosableDialog: true, + }, + { + elementToHighlightId: '#add-behavior-button', + nextStepTrigger: { + presenceOfElement: metaStep.behaviorListItemId, + }, + tooltip: { + description: { + messageByLocale: { + en: `Let's add the **${metaStep.behaviorDisplayName}** behavior.`, + fr: `Ajoutons le comportement **${metaStep.behaviorDisplayName}**.`, + ar: `هيّا نقوم بإضافة السلوك **${metaStep.behaviorDisplayName}**.`, + de: `Fügen wir das **${metaStep.behaviorDisplayName}**-Verhalten hinzu.`, + es: `Agreguemos el comportamiento **${metaStep.behaviorDisplayName}**.`, + it: `Aggiungiamo il comportamento **${metaStep.behaviorDisplayName}**.`, + ja: `**${metaStep.behaviorDisplayName}** の動作を追加しましょう。`, + ko: `**${metaStep.behaviorDisplayName}** 동작을 추가해 봅시다.`, + pl: `Dodajmy zachowanie **${metaStep.behaviorDisplayName}**.`, + pt: `Vamos adicionar o comportamento **${metaStep.behaviorDisplayName}**.`, + ru: `Добавим **поведение ${metaStep.behaviorDisplayName}**.`, + sl: `Dodajmo **vedenje ${metaStep.behaviorDisplayName}**.`, + sq: `Hajde te shtojme **${metaStep.behaviorDisplayName}** verpim.`, + th: `เพิ่ม **${metaStep.behaviorDisplayName}** พฤติกรรม`, + uk: `Додайте **поведінку ${metaStep.behaviorDisplayName}**.`, + zh: `添加 **${metaStep.behaviorDisplayName}** 动作。`, + }, + }, + }, + isOnClosableDialog: true, + }, + { + elementToHighlightId: metaStep.behaviorListItemId, + nextStepTrigger: { + presenceOfElement: metaStep.behaviorParameterPanelId, + }, + tooltip: { + description: { + messageByLocale: { + en: `Select the ${metaStep.behaviorDisplayName} behavior.`, + fr: `Sélectionnez le comportement ${metaStep.behaviorDisplayName}.`, + ar: `تحديد السلوك ${metaStep.behaviorDisplayName}.`, + de: `Wählen Sie das ${metaStep.behaviorDisplayName}-Verhalten aus.`, + es: `Selecciona el comportamiento ${metaStep.behaviorDisplayName}.`, + it: `Seleziona il comportamento ${metaStep.behaviorDisplayName}.`, + ja: `${metaStep.behaviorDisplayName} の動作を選択します。`, + ko: `${metaStep.behaviorDisplayName} 동작을 선택하세요.`, + pl: `Wybierz zachowanie ${metaStep.behaviorDisplayName}.`, + pt: `Selecione o comportamento ${metaStep.behaviorDisplayName}.`, + ru: `Выберите поведение ${metaStep.behaviorDisplayName}.`, + sl: `Izberite vedenje ${metaStep.behaviorDisplayName}.`, + sq: `Selekto ${metaStep.behaviorDisplayName} veprim.`, + th: `เลือกพฤติกรรม ${metaStep.behaviorDisplayName}`, + uk: `Виберіть поведінку ${metaStep.behaviorDisplayName}.`, + zh: `选择 ${metaStep.behaviorDisplayName} 动作。`, + }, + }, + }, + isOnClosableDialog: true, + }, + ...metaStep.parameters.map((parameterData) => ({ + elementToHighlightId: `${metaStep.behaviorParameterPanelId} ${parameterData.parameterId}`, + nextStepTrigger: { + valueEquals: parameterData.expectedValue, + }, + tooltip: { + description: parameterData.description, + }, + isOnClosableDialog: true, + })), + { + elementToHighlightId: '#object-editor-dialog #apply-button', + nextStepTrigger: { + absenceOfElement: '#object-editor-dialog', + }, + tooltip: { + description: metaStep.finishedConfigurationDescription || { + messageByLocale: { + en: "We're done.", + fr: 'Nous avons terminé.', + ar: 'انتهينا.', + de: 'Wir sind fertig.', + es: 'Hemos terminado.', + it: 'Abbiamo finito.', + ja: '完了です。', + ko: '끝났습니다.', + pl: 'Skończyliśmy.', + pt: 'Terminamos.', + ru: 'Мы закончили.', + sl: 'Končali smo.', + sq: 'Kemi përfunduar.', + th: 'เราเสร็จแล้ว', + uk: 'Ми закінчили.', + zh: '我们完成了。', + }, + }, + }, + }, + ]; + default: + return []; + } +}; + +exports.translateMetaStep = translateMetaStep; diff --git a/scripts/types.d.ts b/scripts/types.d.ts index db34153..83ae423 100644 --- a/scripts/types.d.ts +++ b/scripts/types.d.ts @@ -14,8 +14,11 @@ export type TranslatedText = { export type InAppTutorialTooltip = { placement?: 'bottom' | 'left' | 'right' | 'top'; + mobilePlacement?: 'bottom' | 'left' | 'right' | 'top'; title?: TranslatedText; description?: TranslatedText; + touchDescription?: TranslatedText; + standalone?: boolean; }; type InAppTutorialFlowStepDOMChangeTrigger = @@ -26,21 +29,64 @@ type InAppTutorialFlowStepDOMChangeTrigger = absenceOfElement: string; }; +type AddBehaviorMetaStep = { + metaKind: 'add-behavior'; + objectKey: string; + behaviorListItemId: string; + behaviorParameterPanelId: string; + behaviorDisplayName: string; + parameters: Array<{ + parameterId: string; + expectedValue: string; + description: TranslatedText; + }>; + objectHighlightDescription: TranslatedText; + objectHighlightTouchDescription?: TranslatedText; + finishedConfigurationDescription?: TranslatedText; +}; + +type LaunchPreviewMetaStep = { + id?: string; + metaKind: 'launch-preview'; + description?: TranslatedText; + nextStep: + | 'previewLaunched' + | { + clickOnTooltipButton: TranslatedText; + }; +}; + +type InAppTutorialFlowMetaStep = AddBehaviorMetaStep | LaunchPreviewMetaStep; + export type InAppTutorialFlowStepTrigger = | InAppTutorialFlowStepDOMChangeTrigger | { valueHasChanged: true; } + | { + valueEquals: string; + } + | { + objectAddedInLayout: true; + } | { instanceAddedOnScene: string; + instancesCount?: number; } | { previewLaunched: true; } | { - clickOnTooltipButton: string; + editorIsActive: string; + } + | { + clickOnTooltipButton: TranslatedText; }; +export type InAppTutorialFlowStepShortcutTrigger = + | InAppTutorialFlowStepDOMChangeTrigger + | { objectAddedInLayout: true }; + export type InAppTutorialFlowStep = { elementToHighlightId?: string; id?: string; @@ -50,12 +96,12 @@ export type InAppTutorialFlowStep = { shortcuts?: Array<{ stepId: string; // TODO: Adapt provider to make it possible to use other triggers as shortcuts - trigger: InAppTutorialFlowStepDOMChangeTrigger; + trigger: InAppTutorialFlowStepShortcutTrigger; }>; mapProjectData?: Record; tooltip?: InAppTutorialTooltip; skippable?: true; - isOnClosableDialog?: true; + isOnClosableDialog?: boolean; }; export type EditorIdentifier = 'Scene' | 'EventsSheet' | 'Home'; @@ -74,7 +120,7 @@ export type InAppTutorialEndDialog = { export type InAppTutorial = { id: string; - flow: Array; + flow: Array; editorSwitches: Record; endDialog: InAppTutorialEndDialog; availableLocales: Array; diff --git a/tutorials/in-app/joystick.json b/tutorials/in-app/joystick.json index 41c494a..68de025 100644 --- a/tutorials/in-app/joystick.json +++ b/tutorials/in-app/joystick.json @@ -116,8 +116,8 @@ "flow": [ { "id": "Start", - "elementToHighlightId": "#toolbar-preview-button", - "nextStepTrigger": { + "metaKind": "launch-preview", + "nextStep": { "clickOnTooltipButton": { "messageByLocale": { "en": "Let's go!", @@ -139,27 +139,24 @@ } } }, - "tooltip": { - "standalone": true, - "description": { - "messageByLocale": { - "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!", - "fr": "Ce jeu est un jeu de tir dans l'espace en vue du dessus ! Clique sur le bouton **prévisualiser** pour jouer.\nTu peux déplacer le vaisseau avec les flèches du clavier, essaie d'éviter de toucher les rochers !", - "ar": "هذه لعبة إطلاق نار فضائية! الضغط على الزر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!", - "de": "Dieses Spiel ist ein Top-Down-Weltraum-Shooter! Klicken Sie auf die **Vorschau**-Schaltfläche, um zu spielen.\nSie können das Schiff mit den Pfeiltasten bewegen, versuchen Sie, die Felsen zu vermeiden!", - "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", - "it": "Questo gioco è uno sparatutto spaziale dall'alto verso il basso! Clicca sul pulsante **anteprima** per giocare.\nPuoi muovere la nave con i tasti freccia, cerca di evitare di toccare le rocce!", - "ja": "このゲームは、上から見た宇宙シューティングゲームです! **プレビュー** ボタンをクリックしてプレイしてください。\n矢印キーで宇宙船を動かすことができます。岩に触れないようにしてください!", - "ko": "이 게임은 탑다운 우주 슈팅 게임입니다! **미리보기** 버튼을 클릭하여 플레이하세요.\n화살표 키로 우주선을 움직일 수 있습니다. 돌에 닿지 않도록 하세요!", - "pl": "Ta gra to strzelanka kosmiczna z widokiem z góry! Kliknij przycisk **podgląd**, aby zagrać.\nMożesz poruszać statkiem za pomocą klawiszy strzałek, spróbuj unikać dotykania skał!", - "pt": "Este jogo é um jogo de tiro espacial de cima para baixo! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", - "ru": "Эта игра - космический шутер сверху вниз! Нажмите на кнопку **предпросмотр**, чтобы играть.\nВы можете перемещать корабль с помощью стрелок, попробуйте избегать касания камней!", - "sl": "Ta igra je vesoljski strelec zgoraj navzdol! Klikni na gumb **predogled** za igranje.\nLahko premikaš ladjo s puščičnimi tipkami, poskusi se izogniti dotikanju kamnov!", - "sq": "Kjo loje eshte nje Top-down (larte poshte) gjuajes ! Shtype buttoni qe shkruan **preview** per te luajtur.\n Ju mund te levizni anijen me taste shigjetat, provo mos t`i prekesh guret!", - "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!", - "uk": "Ця гра - космічний шутер зверху вниз! Натисніть на кнопку **попередній перегляд**, щоб грати.\nВи можете переміщати корабель за допомогою стрілок, спробуйте уникати дотику до каменів!", - "zh": "这个游戏是一个自上而下的太空射击游戏!点击 **预览** 按钮进行游戏。\n你可以用方向键移动飞船,试着避免碰到岩石!" - } + "description": { + "messageByLocale": { + "en": "This game is a Top-down space shooter! Click on the **preview** button to play.\nYou can move the ship with the arrow keys, try to avoid touching the rocks!", + "fr": "Ce jeu est un jeu de tir dans l'espace en vue du dessus ! Clique sur le bouton **prévisualiser** pour jouer.\nTu peux déplacer le vaisseau avec les flèches du clavier, essaie d'éviter de toucher les rochers !", + "ar": "هذه لعبة إطلاق نار فضائية! الضغط على الزر **معاينة** للعب.\nيمكنك تحريك سفينة الفضاء بواسطة مفاتيح الأسهم، حاول تجنب ملامسة الصخور!", + "de": "Dieses Spiel ist ein Top-Down-Weltraum-Shooter! Klicken Sie auf die **Vorschau**-Schaltfläche, um zu spielen.\nSie können das Schiff mit den Pfeiltasten bewegen, versuchen Sie, die Felsen zu vermeiden!", + "es": "¡Este juego es un juego de disparos en el espacio en vista superior! Haz clic en el botón **previsualizar** para jugar.\n¡Puedes mover la nave con las flechas del teclado, intenta evitar tocar las rocas!", + "it": "Questo gioco è uno sparatutto spaziale dall'alto verso il basso! Clicca sul pulsante **anteprima** per giocare.\nPuoi muovere la nave con i tasti freccia, cerca di evitare di toccare le rocce!", + "ja": "このゲームは、上から見た宇宙シューティングゲームです! **プレビュー** ボタンをクリックしてプレイしてください。\n矢印キーで宇宙船を動かすことができます。岩に触れないようにしてください!", + "ko": "이 게임은 탑다운 우주 슈팅 게임입니다! **미리보기** 버튼을 클릭하여 플레이하세요.\n화살표 키로 우주선을 움직일 수 있습니다. 돌에 닿지 않도록 하세요!", + "pl": "Ta gra to strzelanka kosmiczna z widokiem z góry! Kliknij przycisk **podgląd**, aby zagrać.\nMożesz poruszać statkiem za pomocą klawiszy strzałek, spróbuj unikać dotykania skał!", + "pt": "Este jogo é um jogo de tiro espacial de cima para baixo! Clique no botão **pré-visualizar** para jogar.\nVocê pode mover a nave com as setas do teclado, tente evitar tocar nas rochas!", + "ru": "Эта игра - космический шутер сверху вниз! Нажмите на кнопку **предпросмотр**, чтобы играть.\nВы можете перемещать корабль с помощью стрелок, попробуйте избегать касания камней!", + "sl": "Ta igra je vesoljski strelec zgoraj navzdol! Klikni na gumb **predogled** za igranje.\nLahko premikaš ladjo s puščičnimi tipkami, poskusi se izogniti dotikanju kamnov!", + "sq": "Kjo loje eshte nje Top-down (larte poshte) gjuajes ! Shtype buttoni qe shkruan **preview** per te luajtur.\n Ju mund te levizni anijen me taste shigjetat, provo mos t`i prekesh guret!", + "th": "เกมนี้เป็นเกมยิงสเปซที่มีมุมมองด้านบน! คลิกที่ปุ่ม **ดูตัวอย่าง** เพื่อเล่น\nคุณสามารถเคลื่อนย้ายยานอวกาศด้วยปุ่มลูกศร ลองหลีกเลี่ยงการชนกับหิน!", + "uk": "Ця гра - космічний шутер зверху вниз! Натисніть на кнопку **попередній перегляд**, щоб грати.\nВи можете переміщати корабель за допомогою стрілок, спробуйте уникати дотику до каменів!", + "zh": "这个游戏是一个自上而下的太空射击游戏!点击 **预览** 按钮进行游戏。\n你可以用方向键移动飞船,试着避免碰到岩石!" } } }, @@ -591,228 +588,101 @@ } }, { - "elementToHighlightId": "objectInObjectsList:ship", - "nextStepTrigger": { - "presenceOfElement": "#object-editor-dialog" - }, - "tooltip": { - "placement": "top", - "description": { - "messageByLocale": { - "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nclick on the 3 dot menu, or right click on **$(ship)**, and select **Edit behaviors**.", - "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\ncliquez sur le menu à 3 points, ou faites un clic droit sur **$(ship)**, et sélectionnez **Modifier les comportements**.", - "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**.", - "de": "Verknüpfen wir unser **$(joystick)** und unser **$(ship)** dank der **Verhaltensweisen**, die mit dem Prefab geliefert wurden:\n\nKlicken Sie auf das Menü mit den 3 Punkten oder klicken Sie mit der rechten Maustaste auf **$(ship)** und wählen Sie **Verhaltensweisen bearbeiten**.", - "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", - "it": "Colleghiamo il nostro **$(joystick)** e il nostro **$(ship)** grazie ai **comportamenti** che sono venuti con il prefab:\n\nclicca sul menu a 3 punti, o fai clic destro su **$(ship)**, e seleziona **Modifica comportamenti**.", - "ja": "プレハブに付属している **$(joystick)** と **$(ship)** の **動作** のおかげでリンクしましょう。\n\n3点メニューをクリックするか、**$(ship)** を右クリックして **動作の編集** を選択します。", - "ko": "프리팹에 포함된 **동작** 덕분에 $(joystick)와 $(ship)를 연결해 봅시다:\n\n3 점 메뉴를 클릭하거나 **$(ship)**를 마우스 오른쪽 버튼으로 클릭한 다음 **동작 편집**을 선택하세요.", - "pl": "Połączmy nasz **$(joystick)** i nasz **$(ship)** dzięki **akcjom**, które zostały dostarczone z prefabrykatem:\n\nkliknij menu 3 kropek lub kliknij prawym przyciskiem myszy **$(ship)**, a następnie wybierz **Edytuj zachowania**.", - "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", - "ru": "Свяжем наш **$(joystick)** и наш **$(ship)** благодаря **поведениям**, которые поставляются с префабом:\n\nнажмите на меню из 3 точек или щелкните правой кнопкой мыши на **$(ship)** и выберите **Изменить поведение**.", - "sl": "Povežimo naš **$(joystick)** in naš **$(ship)** zahvaljujoč **vedenjem**, ki so prišla s predlogo:\n\nkliknite na meni z 3 pikami ali z desno miškino tipko kliknite **$(ship)** in izberite **Uredi vedenja**.", - "sq": "Ec te linkojme $(joystick) dhe $(ship) tone fale te **veprimet** qe erdhen me prefabin:\n\nshtype ne 3 pikat menu, ose shtype me anen te djatht ne **$(ship)** dhe selekto **Ndrysho veprimet**", - "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", - "uk": "Зв'яжемо наш **$(joystick)** і наш **$(ship)** завдяки **поведінці**, яка поставляється з префабом:\n\nнатисніть на меню з 3 крапками або клацніть правою кнопкою миші на **$(ship)** і виберіть **Змінити поведінку**.", - "zh": "让我们通过预制的 **动作** 来连接我们的 $(joystick) 和 $(ship):\n\n点击 3 点菜单,或右键点击 **$(ship)**,然后选择 **编辑动作**。" - } - }, - "touchDescription": { - "messageByLocale": { - "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nSelect, then long press on **$(ship)**, then select **Edit behaviors**.", - "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\nSélectionnez, puis appuyez longuement sur **$(ship)**, puis sélectionnez **Modifier les comportements**.", - "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**.", - "de": "Verknüpfen wir unser **$(joystick)** und unser **$(ship)** dank der **Verhaltensweisen**, die mit dem Prefab geliefert wurden:\n\nWählen Sie aus, dann lange drücken Sie auf **$(ship)**, dann wählen Sie **Verhaltensweisen bearbeiten**.", - "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", - "it": "Colleghiamo il nostro **$(joystick)** e il nostro **$(ship)** grazie ai **comportamenti** che sono venuti con il prefab:\n\nSeleziona, poi tieni premuto a lungo su **$(ship)**, poi seleziona **Modifica comportamenti**.", - "ja": "プレハブに付属している **$(joystick)** と **$(ship)** の **動作** のおかげでリンクしましょう。\n\n選択し、**$(ship)** を長押しして、**動作の編集** を選択します。", - "ko": "프리팹에 포함된 **동작** 덕분에 $(joystick)와 $(ship)를 연결해 봅시다:\n\n선택한 다음 **$(ship)**를 길게 누른 다음 **동작 편집**을 선택하세요.", - "pl": "Połączmy nasz **$(joystick)** i nasz **$(ship)** dzięki **akcjom**, które zostały dostarczone z prefabrykatem:\n\nWybierz, a następnie przytrzymaj długo **$(ship)**, a następnie wybierz **Edytuj zachowania**.", - "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", - "ru": "Свяжем наш **$(joystick)** и наш **$(ship)** благодаря **поведениям**, которые поставляются с префабом:\n\nВыберите, затем долго нажмите на **$(ship)**, затем выберите **Изменить поведение**.", - "sl": "Povežimo naš **$(joystick)** in naš **$(ship)** zahvaljujoč **vedenjem**, ki so prišla s predlogo:\n\nIzberite, nato dolgo pritisnite na **$(ship)**, nato izberite **Uredi vedenja**.", - "sq": "Hajde te linkojme $(joystick) dhe $(ship) tone fale te **veprimve** qe erdhen me prefabin:\n\nSelekto, pastaj mbaje gjate gishtin ne **$(ship)**, pastaj selekto **Ndrysho veprimet**", - "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**", - "uk": "Зв'яжемо наш **$(joystick)** і наш **$(ship)** завдяки **поведінці**, яка поставляється з префабом:\n\nВиберіть, а потім тримайте довго на **$(ship)**, а потім виберіть **Змінити поведінку**.", - "zh": "让我们通过预制的 **动作** 来连接我们的 $(joystick) 和 $(ship):\n\n选择,然后长按 **$(ship)**,然后选择 **编辑动作**。" - } - } - } - }, - { - "elementToHighlightId": "#behaviors-tab", - "nextStepTrigger": { - "presenceOfElement": "#add-behavior-button" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "See the **behaviors** of the **object** here.", - "fr": "Les **comportements** de **l'objet** se trouvent dans cet onglet.", - "ar": "رؤية **سلوكيات الكائن** من هنا.", - "de": "Sehen Sie sich die **Verhaltensweisen** des **Objekts** hier an.", - "es": "Los **comportamientos** del **objeto** se encuentran en esta pestaña.", - "it": "Vedi i **comportamenti** dell'**oggetto** qui.", - "ja": "ここに **オブジェクト** の **動作** を見る。", - "ko": "여기서 **객체**의 **동작**을 확인하세요.", - "pl": "Zobacz **akcje** **obiektu** tutaj.", - "pt": "Veja os **comportamentos** do **objeto** aqui.", - "ru": "Смотрите **поведение** **объекта** здесь.", - "sl": "Oglejte si **vedenja** **predmeta** tukaj.", - "sq": "Shikoje **veprimet** te **objektit** ketu.", - "th": "ดู **พฤติกรรม** ของ **วัตถุ** ที่นี่", - "uk": "Дивіться **поведінку** **об'єкта** тут.", - "zh": "在这里查看 **对象** 的 **动作**。" - } - }, - "placement": "bottom" - }, - "skippable": true, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#add-behavior-button", - "nextStepTrigger": { - "presenceOfElement": "#behavior-item-SpriteMultitouchJoystick--TopDownMultitouchMapper" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's add the **Top down multi-touch controller mapper** behavior that was installed.", - "fr": "Ajoutons le comportement **Top down multi-touch controller mapper** qui a été installé.", - "ar": "هيّا نقوم بإضافة السلوك **Top down multi-touch controller mapper** الذي تم تثبيته.", - "de": "Fügen wir das **Top down multi-touch controller mapper**-Verhalten hinzu, das installiert wurde.", - "es": "Agreguemos el comportamiento **Top down multi-touch controller mapper** que se instaló.", - "it": "Aggiungiamo il comportamento **Top down multi-touch controller mapper** che è stato installato.", - "ja": "インストールされた **Top down multi-touch controller mapper** の動作を追加しましょう。", - "ko": "설치된 **Top down multi-touch controller mapper** 동작을 추가해 봅시다.", - "pl": "Dodajmy zachowanie **Top down multi-touch controller mapper**, które zostało zainstalowane.", - "pt": "Vamos adicionar o comportamento **Top down multi-touch controller mapper** que foi instalado.", - "ru": "Добавим **поведение Top down multi-touch controller mapper**, которое было установлено.", - "sl": "Dodajmo **vedenje Top down multi-touch controller mapper**, ki je bilo nameščeno.", - "sq": "Hajde te shtojme **Top down multi-touch controller mapper** verpim qe ishte installuar", - "th": "เพิ่ม **Top down multi-touch controller mapper** พฤติกรรมที่ติดตั้งไว้", - "uk": "Додайте **поведінку Top down multi-touch controller mapper**, яка була встановлена.", - "zh": "添加已安装的 **Top down multi-touch controller mapper** 动作。" + "metaKind": "add-behavior", + "objectKey": "ship", + "behaviorListItemId": "#behavior-item-SpriteMultitouchJoystick--TopDownMultitouchMapper", + "behaviorParameterPanelId": "#behavior-parameters-TopDownMultitouchMapper", + "behaviorDisplayName": "Top down multi-touch controller mapper", + "parameters": [ + { + "parameterId": "#StickMode", + "expectedValue": "360°", + "description": { + "messageByLocale": { + "en": "Let's update the stick mode, so that it can be controlled at **360°**.", + "fr": "Changeons le mode de la manette, pour qu'elle puisse être contrôlée à **360°**.", + "ar": "هيّا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**", + "de": "Aktualisieren wir den Stick-Modus, damit er bei **360°** gesteuert werden kann.", + "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", + "it": "Aggiorniamo la modalità del joystick, in modo che possa essere controllata a **360°**.", + "ja": "スティックモードを更新して、**360°** で制御できるようにしましょう。", + "ko": "스틱 모드를 업데이트하여 **360°**에서 제어할 수 있도록 합시다.", + "pl": "Zaktualizujmy tryb joysticka, aby można go było sterować na **360°**.", + "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", + "ru": "Обновим режим джойстика, чтобы его можно было управлять на **360°**.", + "sl": "Posodobimo način palice, tako da jo lahko upravljamo pri **360°**.", + "sq": "Hajde te ndryshojme stik modin, qe te kontrollohet ne **360°** ", + "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**", + "uk": "Оновимо режим джойстика, щоб його можна було керувати на **360°**.", + "zh": "更新摇杆模式,使其可以在 **360°** 下控制。" + } } } - }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#behavior-item-SpriteMultitouchJoystick--TopDownMultitouchMapper", - "nextStepTrigger": { - "presenceOfElement": "#behavior-parameters-TopDownMultitouchMapper" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Select the **Top down multi-touch controller mapper** behavior.", - "fr": "Sélectionnez le comportement **Top down multi-touch controller mapper**.", - "ar": "تحديد السلوك **Top down multi-touch controller mapper**.", - "de": "Wählen Sie das **Top down multi-touch controller mapper**-Verhalten aus.", - "es": "Selecciona el comportamiento **Top down multi-touch controller mapper**.", - "it": "Seleziona il comportamento **Top down multi-touch controller mapper**.", - "ja": "**Top down multi-touch controller mapper** の動作を選択します。", - "ko": "**Top down multi-touch controller mapper** 동작을 선택하세요.", - "pl": "Wybierz zachowanie **Top down multi-touch controller mapper**.", - "pt": "Selecione o comportamento **Top down multi-touch controller mapper**.", - "ru": "Выберите поведение **Top down multi-touch controller mapper**.", - "sl": "Izberite **vedenje Top down multi-touch controller mapper**.", - "sq": "Selekto **Top down multi-touch controller mapper** veprim.", - "th": "เลือกพฤติกรรม **Top down multi-touch controller mapper**", - "uk": "Виберіть **поведінку Top down multi-touch controller mapper**.", - "zh": "选择 **Top down multi-touch controller mapper** 动作。" - } + ], + "objectHighlightDescription": { + "messageByLocale": { + "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nclick on the 3 dot menu, or right click on **$(ship)**, and select **Edit behaviors**.", + "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\ncliquez sur le menu à 3 points, ou faites un clic droit sur **$(ship)**, et sélectionnez **Modifier les comportements**.", + "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nالضغط على قائمة الثلاث نقاط، أو النقر على زر الفأرة الأيمن على الـ **$(ship)** وتحديد **تحرير السلوكيات**.", + "de": "Verknüpfen wir unser **$(joystick)** und unser **$(ship)** dank der **Verhaltensweisen**, die mit dem Prefab geliefert wurden:\n\nKlicken Sie auf das Menü mit den 3 Punkten oder klicken Sie mit der rechten Maustaste auf **$(ship)** und wählen Sie **Verhaltensweisen bearbeiten**.", + "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nhaz clic en el menú de 3 puntos, o haz clic derecho en **$(ship)**, y selecciona **Editar comportamientos**.", + "it": "Colleghiamo il nostro **$(joystick)** e il nostro **$(ship)** grazie ai **comportamenti** che sono venuti con il prefab:\n\nclicca sul menu a 3 punti, o fai clic destro su **$(ship)**, e seleziona **Modifica comportamenti**.", + "ja": "プレハブに付属している **$(joystick)** と **$(ship)** の **動作** のおかげでリンクしましょう。\n\n3点メニューをクリックするか、**$(ship)** を右クリックして **動作の編集** を選択します。", + "ko": "프리팹에 포함된 **동작** 덕분에 $(joystick)와 $(ship)를 연결해 봅시다:\n\n3 점 메뉴를 클릭하거나 **$(ship)**를 마우스 오른쪽 버튼으로 클릭한 다음 **동작 편집**을 선택하세요.", + "pl": "Połączmy nasz **$(joystick)** i nasz **$(ship)** dzięki **akcjom**, które zostały dostarczone z prefabrykatem:\n\nkliknij menu 3 kropek lub kliknij prawym przyciskiem myszy **$(ship)**, a następnie wybierz **Edytuj zachowania**.", + "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nclique no menu de 3 pontos, ou clique com o botão direito em **$(ship)**, e selecione **Editar comportamentos**.", + "ru": "Свяжем наш **$(joystick)** и наш **$(ship)** благодаря **поведениям**, которые поставляются с префабом:\n\nнажмите на меню из 3 точек или щелкните правой кнопкой мыши на **$(ship)** и выберите **Изменить поведение**.", + "sl": "Povežimo naš **$(joystick)** in naš **$(ship)** zahvaljujoč **vedenjem**, ki so prišla s predlogo:\n\nkliknite na meni z 3 pikami ali z desno miškino tipko kliknite **$(ship)** in izberite **Uredi vedenja**.", + "sq": "Ec te linkojme $(joystick) dhe $(ship) tone fale te **veprimet** qe erdhen me prefabin:\n\nshtype ne 3 pikat menu, ose shtype me anen te djatht ne **$(ship)** dhe selekto **Ndrysho veprimet**", + "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nคลิกที่เมนู 3 จุด หรือคลิกขวาที่ **$(ship)** และเลือก **แก้ไขพฤติกรรม**", + "uk": "Зв'яжемо наш **$(joystick)** і наш **$(ship)** завдяки **поведінці**, яка поставляється з префабом:\n\nнатисніть на меню з 3 крапками або клацніть правою кнопкою миші на **$(ship)** і виберіть **Змінити поведінку**.", + "zh": "让我们通过预制的 **动作** 来连接我们的 $(joystick) 和 $(ship):\n\n点击 3 点菜单,或右键点击 **$(ship)**,然后选择 **编辑动作**。" } }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#behavior-parameters-TopDownMultitouchMapper #StickMode", - "nextStepTrigger": { - "valueEquals": "360°" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "Let's update the stick mode, so that it can be controlled at **360°**.", - "fr": "Changeons le mode de la manette, pour qu'elle puisse être contrôlée à **360°**.", - "ar": "هيّا نقوم بتحديث وضع عصا التحكم حتى يمكن التحكم به في وضع **360°**", - "de": "Aktualisieren wir den Stick-Modus, damit er bei **360°** gesteuert werden kann.", - "es": "Actualicemos el modo de la palanca, para que pueda ser controlada a **360°**.", - "it": "Aggiorniamo la modalità del joystick, in modo che possa essere controllata a **360°**.", - "ja": "スティックモードを更新して、**360°** で制御できるようにしましょう。", - "ko": "스틱 모드를 업데이트하여 **360°**에서 제어할 수 있도록 합시다.", - "pl": "Zaktualizujmy tryb joysticka, aby można go było sterować na **360°**.", - "pt": "Vamos atualizar o modo do joystick, para que ele possa ser controlado a **360°**.", - "ru": "Обновим режим джойстика, чтобы его можно было управлять на **360°**.", - "sl": "Posodobimo način palice, tako da jo lahko upravljamo pri **360°**.", - "sq": "Hajde te ndryshojme stik modin, qe te kontrollohet ne **360°** ", - "th": "อัปเดตโหมดของ joystick ให้สามารถควบคุมได้ทั้ง **360°**", - "uk": "Оновимо режим джойстика, щоб його можна було керувати на **360°**.", - "zh": "更新摇杆模式,使其可以在 **360°** 下控制。" - } + "objectHighlightTouchDescription": { + "messageByLocale": { + "en": "Let's link our $(joystick) and our $(ship) thanks to the **behaviors** that came with the prefab:\n\nSelect, then long press on **$(ship)**, then select **Edit behaviors**.", + "fr": "Lions notre $(joystick) et notre $(ship) grâce aux **comportements** qui sont venus avec le prefab:\n\nSélectionnez, puis appuyez longuement sur **$(ship)**, puis sélectionnez **Modifier les comportements**.", + "ar": "هيّا نربط $(joystick) و$(ship) بواسطة **السلوكيات** التي أتت مع الكائن المجهز مسبقًا: \n\nتحديد، ثم ضغطة مطولة على الـ **$(ship)** وتحديد **تحرير السلوكيات**.", + "de": "Verknüpfen wir unser **$(joystick)** und unser **$(ship)** dank der **Verhaltensweisen**, die mit dem Prefab geliefert wurden:\n\nWählen Sie aus, dann lange drücken Sie auf **$(ship)**, dann wählen Sie **Verhaltensweisen bearbeiten**.", + "es": "Vinculemos nuestro $(joystick) y nuestro $(ship) gracias a los **comportamientos** que vinieron con el prefab:\n\nSelecciona, luego presiona por un largo tiempo en **$(ship)**, luego selecciona **Editar comportamientos**.", + "it": "Colleghiamo il nostro **$(joystick)** e il nostro **$(ship)** grazie ai **comportamenti** che sono venuti con il prefab:\n\nSeleziona, poi tieni premuto a lungo su **$(ship)**, poi seleziona **Modifica comportamenti**.", + "ja": "プレハブに付属している **$(joystick)** と **$(ship)** の **動作** のおかげでリンクしましょう。\n\n選択し、**$(ship)** を長押しして、**動作の編集** を選択します。", + "ko": "프리팹에 포함된 **동작** 덕분에 $(joystick)와 $(ship)를 연결해 봅시다:\n\n선택한 다음 **$(ship)**를 길게 누른 다음 **동작 편집**을 선택하세요.", + "pl": "Połączmy nasz **$(joystick)** i nasz **$(ship)** dzięki **akcjom**, które zostały dostarczone z prefabrykatem:\n\nWybierz, a następnie przytrzymaj długo **$(ship)**, a następnie wybierz **Edytuj zachowania**.", + "pt": "Vamos vincular nosso $(joystick) e nosso $(ship) graças aos **comportamentos** que vieram com o prefab:\n\nSelecione, depois pressione por um longo tempo em **$(ship)**, depois selecione **Editar comportamentos**.", + "ru": "Свяжем наш **$(joystick)** и наш **$(ship)** благодаря **поведениям**, которые поставляются с префабом:\n\nВыберите, затем долго нажмите на **$(ship)**, затем выберите **Изменить поведение**.", + "sl": "Povežimo naš **$(joystick)** in naš **$(ship)** zahvaljujoč **vedenjem**, ki so prišla s predlogo:\n\nIzberite, nato dolgo pritisnite na **$(ship)**, nato izberite **Uredi vedenja**.", + "sq": "Hajde te linkojme $(joystick) dhe $(ship) tone fale te **veprimve** qe erdhen me prefabin:\n\nSelekto, pastaj mbaje gjate gishtin ne **$(ship)**, pastaj selekto **Ndrysho veprimet**", + "th": "ให้เชื่อมโยง $(joystick) และ $(ship) ของเราด้วย **พฤติกรรม** ที่มาพร้อมกับ prefab:\n\nเลือก แล้วกดค้างที่ **$(ship)** แล้วเลือก **แก้ไขพฤติกรรม**", + "uk": "Зв'яжемо наш **$(joystick)** і наш **$(ship)** завдяки **поведінці**, яка поставляється з префабом:\n\nВиберіть, а потім тримайте довго на **$(ship)**, а потім виберіть **Змінити поведінку**.", + "zh": "让我们通过预制的 **动作** 来连接我们的 $(joystick) 和 $(ship):\n\n选择,然后长按 **$(ship)**,然后选择 **编辑动作**。" } }, - "isOnClosableDialog": true - }, - { - "elementToHighlightId": "#object-editor-dialog #apply-button", - "nextStepTrigger": { - "absenceOfElement": "#object-editor-dialog" - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "That's it! Now the joystick will control the ship!", - "fr": "C'est tout ! Maintenant, la manette contrôlera le vaisseau !", - "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!", - "de": "Das ist es! Jetzt wird der Joystick das Schiff steuern!", - "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", - "it": "Ecco fatto! Ora il joystick controllerà la nave!", - "ja": "完了です!これでジョイスティックが宇宙船を制御します!", - "ko": "이것이죠! 이제 조이스틱이 우주선을 제어할 겁니다!", - "pl": "To wszystko! Teraz joystick będzie sterował statkiem!", - "pt": "É isso aí! Agora o joystick controlará o navio!", - "ru": "Вот и всё! Теперь джойстик будет управлять кораблем!", - "sl": "To je to! Zdaj bo joystick nadzoroval ladjo!", - "sq": "C' ajo! Tash joystiku do te kontrolloje anijen!", - "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!", - "uk": "Ось і все! Тепер джойстик буде керувати кораблем!", - "zh": "就是这样!现在摇杆将控制飞船!" - } + "finishedConfigurationDescription": { + "messageByLocale": { + "en": "That's it! Now the joystick will control the ship!", + "fr": "C'est tout ! Maintenant, la manette contrôlera le vaisseau !", + "ar": "هذا كل شيء! الآن ستتحكم عصا التحكم بالسفينة الفضائية!", + "de": "Das ist es! Jetzt wird der Joystick das Schiff steuern!", + "es": "¡Eso es todo! ¡Ahora el joystick controlará el barco!", + "it": "Ecco fatto! Ora il joystick controllerà la nave!", + "ja": "完了です!これでジョイスティックが宇宙船を制御します!", + "ko": "이것이죠! 이제 조이스틱이 우주선을 제어할 겁니다!", + "pl": "To wszystko! Teraz joystick będzie sterował statkiem!", + "pt": "É isso aí! Agora o joystick controlará o navio!", + "ru": "Вот и всё! Теперь джойстик будет управлять кораблем!", + "sl": "To je to! Zdaj bo joystick nadzoroval ladjo!", + "sq": "C' ajo! Tash joystiku do te kontrolloje anijen!", + "th": "นั่นเอง! ตอนนี้ joystick จะควบคุมเรือ!", + "uk": "Ось і все! Тепер джойстик буде керувати кораблем!", + "zh": "就是这样!现在摇杆将控制飞船!" } } }, { - "elementToHighlightId": "#toolbar-preview-button", - "nextStepTrigger": { - "previewLaunched": true - }, - "tooltip": { - "description": { - "messageByLocale": { - "en": "We're done! Let's test our game to see the changes we've made! Click on the **Preview** button.", - "fr": "Nous avons terminé ! Testons notre jeu pour voir les changements que nous avons apportés ! Cliquez sur le bouton **Aperçu**.", - "ar": "حسنًا، لقد انتهينا! هيّا نختبر لعبتنا لنرى التغييرات التي قمنا بها! الضغط على الزر **معاينة**.", - "de": "Wir sind fertig! Lassen Sie uns unser Spiel testen, um die Änderungen zu sehen, die wir vorgenommen haben! Klicken Sie auf die **Vorschau**-Schaltfläche.", - "es": "¡Hemos terminado! ¡Probemos nuestro juego para ver los cambios que hemos hecho! Haga clic en el botón **Vista previa**.", - "it": "abbiamo finito! Proviamo il nostro gioco per vedere le modifiche che abbiamo apportato! Clicca sul pulsante **Anteprima**.", - "ja": "完了です!私たちが行った変更を確認するためにゲームをテストしましょう!**プレビュー**ボタンをクリックします。", - "ko": "우리는 끝났습니다! 우리가 한 변경 사항을 확인하기 위해 게임을 테스트해 봅시다! **미리보기** 버튼을 클릭합니다.", - "pl": "Skończyliśmy! Przetestujmy naszą grę, aby zobaczyć zmiany, jakie wprowadziliśmy! Kliknij przycisk **Podgląd**.", - "pt": "Nós terminamos! Vamos testar nosso jogo para ver as mudanças que fizemos! Clique no botão **Visualizar**.", - "ru": "Мы закончили! Давайте протестируем нашу игру, чтобы увидеть изменения, которые мы внесли! Нажмите на кнопку **Предварительный просмотр**.", - "sl": "Končali smo! Testirajmo našo igro, da vidimo spremembe, ki smo jih naredili! Kliknite na gumb **Predogled**.", - "sq": "Kemi përfunduar! Le të testojmë lojën tonë për të parë ndryshimet që kemi bërë! Kliko në butonin **Parashiko**.", - "th": "เราเสร็จแล้ว! มาทดสอบเกมของเราเพื่อดูการเปลี่ยนแปลงที่เราได้ทำ! คลิกที่ปุ่ม **ตัวอย่าง**", - "uk": "Ми закінчили! Давайте протестуємо нашу гру, щоб побачити зміни, які ми зробили! Натисніть на кнопку **Попередній перегляд**.", - "zh": "我们完成了!让我们测试游戏,看看我们所做的更改!点击**预览**按钮。" - } - }, - "placement": "bottom" - } + "metaKind": "launch-preview", + "nextStep": "previewLaunched" } ] -} +} \ No newline at end of file From ed407aa547deb7a9d4d60894b988f8cf1efd97f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Vivet?= Date: Wed, 5 Jun 2024 09:28:05 +0100 Subject: [PATCH 095/208] Add a new in-app tutorial: How to use the Platformer/Platform behaviors (#51) --- __tests__/post-build.spec.js | 6 +- scripts/lib/MetaStepTranslator.js | 22 +- templates/knightPlatformer/assets/Clouds.png | Bin 0 -> 5425 bytes templates/knightPlatformer/assets/Fire1.png | Bin 0 -> 1612 bytes templates/knightPlatformer/assets/Fire2.png | Bin 0 -> 1711 bytes templates/knightPlatformer/assets/Fire3.png | Bin 0 -> 1620 bytes templates/knightPlatformer/assets/Fire4.png | Bin 0 -> 1468 bytes templates/knightPlatformer/assets/Key.wav | Bin 0 -> 270140 bytes .../knightPlatformer/assets/Key_Sprite.png | Bin 0 -> 205 bytes .../knightPlatformer/assets/Knight-Idle1.png | Bin 0 -> 559 bytes .../knightPlatformer/assets/Knight-Idle2.png | Bin 0 -> 537 bytes .../knightPlatformer/assets/Knight-Idle3.png | Bin 0 -> 535 bytes .../knightPlatformer/assets/Knight-Idle4.png | Bin 0 -> 537 bytes .../knightPlatformer/assets/Knight-Run1.png | Bin 0 -> 551 bytes .../knightPlatformer/assets/Knight-Run10.png | Bin 0 -> 524 bytes .../knightPlatformer/assets/Knight-Run11.png | Bin 0 -> 509 bytes .../knightPlatformer/assets/Knight-Run12.png | Bin 0 -> 512 bytes .../knightPlatformer/assets/Knight-Run13.png | Bin 0 -> 531 bytes .../knightPlatformer/assets/Knight-Run14.png | Bin 0 -> 524 bytes .../knightPlatformer/assets/Knight-Run15.png | Bin 0 -> 509 bytes .../knightPlatformer/assets/Knight-Run16.png | Bin 0 -> 535 bytes .../knightPlatformer/assets/Knight-Run2.png | Bin 0 -> 530 bytes .../knightPlatformer/assets/Knight-Run3.png | Bin 0 -> 516 bytes .../knightPlatformer/assets/Knight-Run4.png | Bin 0 -> 525 bytes .../knightPlatformer/assets/Knight-Run5.png | Bin 0 -> 543 bytes .../knightPlatformer/assets/Knight-Run6.png | Bin 0 -> 535 bytes .../knightPlatformer/assets/Knight-Run7.png | Bin 0 -> 524 bytes .../knightPlatformer/assets/Knight-Run8.png | Bin 0 -> 548 bytes .../knightPlatformer/assets/Knight-Run9.png | Bin 0 -> 534 bytes .../assets/Left arrow round button.png | Bin 0 -> 1742 bytes .../knightPlatformer/assets/Locked-1.png | Bin 0 -> 516 bytes .../knightPlatformer/assets/NewSprite-1-0.png | Bin 0 -> 176 bytes .../assets/Platform_Stone1.png | Bin 0 -> 629 bytes .../assets/Platform_Stone2.png | Bin 0 -> 564 bytes .../assets/Player_Mask_Sprite-1-0.png | Bin 0 -> 112 bytes .../assets/Right arrow round button.png | Bin 0 -> 1711 bytes templates/knightPlatformer/assets/Shadow.png | Bin 0 -> 34589 bytes templates/knightPlatformer/assets/TheEnd.mp3 | Bin 0 -> 1674888 bytes .../knightPlatformer/assets/TheEnd_Sprite.png | Bin 0 -> 1205 bytes .../assets/Top arrow button.png | Bin 0 -> 962 bytes templates/knightPlatformer/assets/Unlock.wav | Bin 0 -> 117184 bytes .../knightPlatformer/assets/Unlocked-1.png | Bin 0 -> 406 bytes templates/knightPlatformer/game.json | 12417 ++++++++++++++++ tutorials/in-app/knightPlatformer.json | 405 + 44 files changed, 12837 insertions(+), 13 deletions(-) create mode 100644 templates/knightPlatformer/assets/Clouds.png create mode 100644 templates/knightPlatformer/assets/Fire1.png create mode 100644 templates/knightPlatformer/assets/Fire2.png create mode 100644 templates/knightPlatformer/assets/Fire3.png create mode 100644 templates/knightPlatformer/assets/Fire4.png create mode 100644 templates/knightPlatformer/assets/Key.wav create mode 100644 templates/knightPlatformer/assets/Key_Sprite.png create mode 100644 templates/knightPlatformer/assets/Knight-Idle1.png create mode 100644 templates/knightPlatformer/assets/Knight-Idle2.png create mode 100644 templates/knightPlatformer/assets/Knight-Idle3.png create mode 100644 templates/knightPlatformer/assets/Knight-Idle4.png create mode 100644 templates/knightPlatformer/assets/Knight-Run1.png create mode 100644 templates/knightPlatformer/assets/Knight-Run10.png create mode 100644 templates/knightPlatformer/assets/Knight-Run11.png create mode 100644 templates/knightPlatformer/assets/Knight-Run12.png create mode 100644 templates/knightPlatformer/assets/Knight-Run13.png create mode 100644 templates/knightPlatformer/assets/Knight-Run14.png create mode 100644 templates/knightPlatformer/assets/Knight-Run15.png create mode 100644 templates/knightPlatformer/assets/Knight-Run16.png create mode 100644 templates/knightPlatformer/assets/Knight-Run2.png create mode 100644 templates/knightPlatformer/assets/Knight-Run3.png create mode 100644 templates/knightPlatformer/assets/Knight-Run4.png create mode 100644 templates/knightPlatformer/assets/Knight-Run5.png create mode 100644 templates/knightPlatformer/assets/Knight-Run6.png create mode 100644 templates/knightPlatformer/assets/Knight-Run7.png create mode 100644 templates/knightPlatformer/assets/Knight-Run8.png create mode 100644 templates/knightPlatformer/assets/Knight-Run9.png create mode 100644 templates/knightPlatformer/assets/Left arrow round button.png create mode 100644 templates/knightPlatformer/assets/Locked-1.png create mode 100644 templates/knightPlatformer/assets/NewSprite-1-0.png create mode 100644 templates/knightPlatformer/assets/Platform_Stone1.png create mode 100644 templates/knightPlatformer/assets/Platform_Stone2.png create mode 100644 templates/knightPlatformer/assets/Player_Mask_Sprite-1-0.png create mode 100644 templates/knightPlatformer/assets/Right arrow round button.png create mode 100644 templates/knightPlatformer/assets/Shadow.png create mode 100644 templates/knightPlatformer/assets/TheEnd.mp3 create mode 100644 templates/knightPlatformer/assets/TheEnd_Sprite.png create mode 100644 templates/knightPlatformer/assets/Top arrow button.png create mode 100644 templates/knightPlatformer/assets/Unlock.wav create mode 100644 templates/knightPlatformer/assets/Unlocked-1.png create mode 100644 templates/knightPlatformer/game.json create mode 100644 tutorials/in-app/knightPlatformer.json diff --git a/__tests__/post-build.spec.js b/__tests__/post-build.spec.js index eae4b55..bf55f27 100644 --- a/__tests__/post-build.spec.js +++ b/__tests__/post-build.spec.js @@ -25,7 +25,7 @@ describe('In app tutorials control figures', () => { ); test('there is the right number of in app tutorials', () => { - expect(shortHeaders.length).toMatchInlineSnapshot(`7`); // To change when adding new in app tutorials + expect(shortHeaders.length).toMatchInlineSnapshot(`8`); // To change when adding new in app tutorials }); test('all in app tutorials have a different id', () => { @@ -117,7 +117,7 @@ describe('In app tutorials content checks', () => { // We don't check the tutorials with initial template, because they already have project data. .filter((tutorial) => !tutorial.initialTemplateUrl) .forEach((tutorial) => { - const { flow } = tutorial; + const { flow, initialProjectData } = tutorial; const projectData = flow.reduce( /** * @param {string[]} acc @@ -131,7 +131,7 @@ describe('In app tutorials content checks', () => { return acc; }, /** @type {string[]} */ - [] + initialProjectData ? Object.keys(initialProjectData) : [] ); const allMessagesByLocale = getAllMessagesByLocale(tutorial); diff --git a/scripts/lib/MetaStepTranslator.js b/scripts/lib/MetaStepTranslator.js index 859cc69..33e01de 100644 --- a/scripts/lib/MetaStepTranslator.js +++ b/scripts/lib/MetaStepTranslator.js @@ -157,16 +157,18 @@ const translateMetaStep = (metaStep) => { }, isOnClosableDialog: true, }, - ...metaStep.parameters.map((parameterData) => ({ - elementToHighlightId: `${metaStep.behaviorParameterPanelId} ${parameterData.parameterId}`, - nextStepTrigger: { - valueEquals: parameterData.expectedValue, - }, - tooltip: { - description: parameterData.description, - }, - isOnClosableDialog: true, - })), + ...(metaStep.parameters + ? metaStep.parameters.map((parameterData) => ({ + elementToHighlightId: `${metaStep.behaviorParameterPanelId} ${parameterData.parameterId}`, + nextStepTrigger: { + valueEquals: parameterData.expectedValue, + }, + tooltip: { + description: parameterData.description, + }, + isOnClosableDialog: true, + })) + : []), { elementToHighlightId: '#object-editor-dialog #apply-button', nextStepTrigger: { diff --git a/templates/knightPlatformer/assets/Clouds.png b/templates/knightPlatformer/assets/Clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..1956717d18410c07adb8d555696d53780f49ac87 GIT binary patch literal 5425 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 H3QzqPzyTDb literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Fire2.png b/templates/knightPlatformer/assets/Fire2.png new file mode 100644 index 0000000000000000000000000000000000000000..235c74aca020fba35489f90a75cc2df999229f09 GIT binary patch literal 1711 zcmbVMi&s+V9zB4gE>jC_Y(z~n6W5x`xlN#0`5GOh2U8A{i7BNk&B%O!uXMnnshGj6 z%dMON5+@C<6f>O2P_VZt7ql{bB-pJaF<%jqB5^-w*6I(Kv(`D^IluM$&TsF%_P2l8 zNyNK2p`0KHav{XU#DldA+#Qbg;HgZf)`0~^i^oSpVwLw81lea2VxmYzf{9@Yn{?od zhch~!h6EYlG{Pg6ZQ06%Ptmv7EQYL)3W6$MQJ-jlIduAU)J(u$Mh4VooB5u z*>%UCl@~YK9^R;#^c^x$jtt&cR!@DMq58d0rBdOHr4b?BCEz8aKxf>nE>@SM2LKHJ z=sF{68gl5#@^yZXw|;!q+wAH?C{!9|Vb!uXkg69Z;15qAf~xtV;V1cS$PQds8I2C< zw^9)FkuZ53O&)8PQ{g(|?bFfv`1K~f(YHszt$lJ!A`hAg3x8n_FlqZ4YyHb;mlRI* z!d?WA8*qvzB~gy3OG!wW;L9KFcCOQF)C;#0_Y-ybHM+jPyTJr7{BybeHI0=+Pv(+( z1r>*N22(B^{Ob5=Xt!0FT`+t)GzQXl70uVCn8$I(p%U_tHj9-DPg?z+yd&}xtPRhg z3+Kax)tW<#n`6qH+rx!rjw5?LS4RrzD`GDW+Jc$4YN|4*GICHgWzUxNt6JLHI`F_BumEsZke@<|>i3L=2b zyIbjJO1U$l&C}^l1DV9-NWaQ4#`XHQY`|?jyk%zXzNZ=R+|iSNfA48l!)NEcHOx@*gsSBe1Tqmm?D;MKrRUfP}rW18Oo{AU2LSe=`_ z|E+fPeaDDV6xi>DEgX)k`lf%&FRu8R4q9vNR; zr3<#)goEjxz7A}wR*`vAwKU+>ho`2*)G5sJ#y~%KsK#W+H?=ble1C(ts5+7;t;aEo zX^fU~UQM6+^9GHbOcUD6|{@ZZ9$1xaqj#$nzFF#5cM>KU-@_AT==yQ)I}7=U6({bRVm?eHHH6qTw5k z-VH{xW}|#u2NTWqsC()VM}curSuS|8*4bXKoqGi`V8) z2n)mZ{(Hh5Cg|Sc+H**iUD+-zzu=a~xPr(~55(TK zm7}26p1(Y}A{pUrOA9)9+IBRKOEp3IF7@oW zG)dl-Mr10j;O)$wW*k#3Z;ICpDVh%1o@{gPdl_mo=UjW&H<84`0{^^0RWn8@?Yph_ z%8O|w#@4y(ye||%1QbrQ%+n1VHEKO9mBxs6-I{NBBaE_G3w2I|Sp1M+;9H_|+uYzj z!^eg;i`3GcDixZit`6FY-lm$4{O^%u|6&lVm)QI1D~FEv9@>$U9yDh-27LI9%d}}l z#8&P~@{L;gK{Acuk>pPILyIQWT{33(GrJ26=E(|g35R9F0eB*x>J6JOc1?F~U%BMg zqK(1!M|cNT!KDpcDv{#BuSwC(#P_K9v^46OQ+zBv-&VZlRVfDrNjLg9)RQ`GE0+Nh zZ0JI`QIhvG#IjT*rrb(RG|XegoSN;z t_E0~pIG4Y<8589-6`Zd{f6AGU4qhjN&QO1w`ED`#39-Z&ar8dc{{aC}IUxW5 literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Fire3.png b/templates/knightPlatformer/assets/Fire3.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4de7adc384aa6624fb975f76d479a5e40f78a6 GIT binary patch literal 1620 zcmb7Ec~sI_6#n6s<&b$YHKI&KJ(E+~IHG8ZIap#R#4SxTO)FC?ODb~%s%hMpsB}b- zTr){+PZN=9$}>u!wlJYd9T!YPb3tUEA2Xf)pLfoC_n-Uj`@Zkq_vPbpyP>OKs{jCi zVgoQCU?hW^V{8PT+@mQs!2ltI?Dhj%dGOBwV6+;G*%@}8CixJY7ZwihnG+pLZYb}> z2Ot8YO!u4ng)PS6Yf}yV@OLh(G51-H$9pgKNB4(1dt(MJ#Z}qZn;)_GJJf%3@RkSV zQBKS{$(N}o%*IGl*T+k=jx0W{!!=9H(<(Er5N5euiRXA~t(L%}2kU_-{^yc3nSZ#z z^09*FWvU(tF%_91IFo`Ipx_1IQUZxP@HrVki`(9bDD~(E9`6@RW!HM)rB^X~eGOb@ zey{Z^i%9b~ouVRcO?1^C?j()Zl^BC}?8q<_x??`qq8*hZkY0F01xarF=*Bso}HdmgrYBA z+Wc~h=$PUFDQ!G=Q{p-^PWvFgkPsB-^S!cD4z#R73cF~mtLR}wK0T2Pup>U&>h3=z zvu=~x$i{Irx$)*vk<(^9tDb)e!rgq+f)3RQWdzL)n9O|XGot`xKw3R*OnCLxp5laF zY`+Iq5JWJNhMuYcmtq~>|0L$*4YnCZGWz(1mA>D|ImJLZ=}ON+od~llA80VE!;m07zQJ{K0_?GX7Qn zl+cfv*|JNQcOKe5l}YT@1V#+#z&ty$P8r>`ab2%`tFe@S%S;7pnxultd=sq;uYXvx zFLeW|<320na*g+UHMY_*fG&viIK@OH$%JotJp1W)9+DPoqA?;qXShTQO%7|+qMbnBX&PXEToX{1$@j4=gS-l7OVm#Z~aklDIsrC)TJyC&@)4leg zB$9+WoY#^{6LrbC!Qs^Ky^OlF&vFO-rdd{-|u+bA;M(y&aS@zh9 zlA-`gYqh7hC}uLLCvmV%b}*u_hS!@Z|d(?(pAfw6eD zQDjDF4vzRqIxdB}zBXJssxgBU6}Cc%+OyoGpiL+Q)>A&0^;csP&AK;#>)5HDQRYeh zSysesx6^{0-M<4fDQy^AE-OGlPYfMIixPr7yi%^Z;?3en*s2* zjK{Lm!YOA)DgJbcSz0A^hcgz29x`7a0+LHZ`XRBJj@Jx-u^D^d50 zX_M#G<2Bp``Fynq9h*l|u}HCQBcu5X(zk!Etvjjn6A)(ELZ759s>@-S@RR!W3Q+n+ z*heOxREB7Yk%_tp8(+z7hE}jh8=@~A7pjici1|+TVr3KLYd1;^ zX%3(7HUy`PYU}&BO@%Mps#9k6S9Ek2^Irse=4ha@4|FCv1EiV&=p3Z=y4OWN yZ7!~ng%SuPaE469#*^YxE+P-cPUJAYTa(h#ywx literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Fire4.png b/templates/knightPlatformer/assets/Fire4.png new file mode 100644 index 0000000000000000000000000000000000000000..2ace7a6928926e9e2f066f0604a84fb123547047 GIT binary patch literal 1468 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 z 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 )W%d6{7JlZ$0~Hac$+JKywWj#RKbVXv$Im@M>_ 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

    G;ic+k&Q(8ipnZ0A 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 literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Key_Sprite.png b/templates/knightPlatformer/assets/Key_Sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..d42ba693157fbe2d1dce00274fb6be103d8a06ad GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^20-k>Bh~68K&?F+2k@7y{l4T&rc!Vco$Xci^?-%e765fbL`PboFyt=akR{0Oq_! ACIA2c literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Idle1.png b/templates/knightPlatformer/assets/Knight-Idle1.png new file mode 100644 index 0000000000000000000000000000000000000000..0edcf51ed4f9c2cb49804ce8edfe9d0856c74531 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zUwXPYhE&XX zd&kiGu!BVVN0*pf_Hy>pveJwGk5pLM9qoIXcC45@e~I2BrE_{#TzXdnR}}Y6czkkp z_G+8`XO~THvCofRH+}Wj8oTwodfXqMdmI{CIzOSJ^!mY@*Vnu_dcAAjUwI>g69*Q2 zl}om&zIOOo*!k$p@((}f?XFArm!2icCMl7U5O6nH?wZ7eZ)>K_yDadwQ1?0iR|Bj3 z&4(12n|XM+zHe9&=oX(&*$QU?$^;(d*6MIy}MMu z_1fh%K&ybdHoZ>VdHzdAa*N)M-Q^wk;vF(<&vF6HGBQ|kewN*&+2I!}Z#}+T{G@Ev z;**gXd!VlPDCf5H^OoPUPanIV$-n6MVyI!$?j2tAd6g^FIUvt~-F4`*!LBy{r~7`p z_Pa+WP5?P8^?TTr($5=Xz4@cREZ0m#QuJLRTX+1v8<=HFZ{pVSI87!*ig8zd#ReEPiMj*ZrT znM;*7f|b}p_-DV24D7vsQ!Z>qBT#Yc{KG|`xBTAiU9$J^LWd_j?bUesGKwsGKYyW*0`0l3u zugWQ+KzFAk2;7S{Y<@52y6|rjRO{UJ?R)#fFZ}G6&X46^m{|JV(pKb_a5}`JSANf` zTebAL$Wyz&hd^d#JgbU$m5{IgdweG~7kzx;n@2E^PioUuwVTTS>58v^5+!PC{xWt~$(69Dm_^uPcB literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Idle3.png b/templates/knightPlatformer/assets/Knight-Idle3.png new file mode 100644 index 0000000000000000000000000000000000000000..c527e4c5ecc276e9f6d2dc2e19b1fe063c26a405 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zFM7H-hE&XX zduO8_OQ1;m$JmRv+}1m+z4}2#>!yq1!$c34=2MezxS1@v7T{&#t+{aC?9SJ>i{Ia! zShN4!xi@EiJh!kcFF#f>#V~UAlQPF=@}CzS&(2M~DgNQUghWch1&i&@{`|l7YWq5_ z*XPPK@jG zEx+53pLp8Cw@iKE_vl2R`D|>a^A8tYvV8mP)t=AAx0+vk(||g1>GusUVy?~-1sVx< z3CQe}1c7;nz3lC0o?82N(e1@+AZB~rk$0OvUq-5A{|t!gfHJ38S1 z<=gu1U7GIn{YWIlM%_;{>#puxz5IE|)7oECL8b=$sP?of4_tn{ec|`-cb3a1LA)aJ tE^+JiCg)@b@5-Zk1-{<%HQT|?vA?UGklASORR@e|22WQ%mvv4FO#q!L`-lJl literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Idle4.png b/templates/knightPlatformer/assets/Knight-Idle4.png new file mode 100644 index 0000000000000000000000000000000000000000..acd68fb6d9a8f9a0089167d21cb0aa20aae27a39 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zFMGN;hE&XX zd&f|p#ZjXDqxHpIZi_+|T+8~QqP5dS@!{bK9UcL9)fWo(uF%v_owayM!21-*{_^y1 zCqBP^^Y(3D{k=UiWjD7q_gp-rQSP;V+4{??zRzA=wY~np0R`sfww=OJRX5ycF8p(2 zd$Qi$%WDiyfP|kd7T*yS^Dapy{#H$;7ynXQliTgPQ(7I_*d!%FYURY|b}p_-DV24D7vsQ!Z>qBT#Yc{KG|`xBTAiU9$J^LWd_j?bUesGKwsGKYyW*0`0l3u zugWQ+KzFAk2;7S{Y<@52y6|rjRO{UJ?R)#fFZ}G6&X46^m{|JV(pKb_a5}`JSANf` zTebAL$Wyz&hd^d#JgbU$m5{IgdweG~7kzx;n@2E^PioUuwVTTS>58v^5+!PC{xWt~$(69Dm_^uPcB literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run1.png b/templates/knightPlatformer/assets/Knight-Run1.png new file mode 100644 index 0000000000000000000000000000000000000000..19c62516b3667bdf79639bb7377814443bd5724c GIT binary patch literal 551 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zA9}hthE&XX zdq>g#u!BVV$EgW7S>zZqSUMzssAz0rab%Kb6KY}dTv&(5qPwf2N z?{-am{(RTg^3(R)&GYlmc5TwB_7!mrw0yVzi*)St(?62uq|RHav-yuQ8=Is=h{@W- z=6?z$UYi?l1-JNT&e!HKGB|Ny!PA!P<=58izPhz#Vg2pedfv11moD3RNP)SThsW#X zVJ-1%+1FZT1y786tk#pyJKG&()Rib+Z_!nm3uj3vu6hPln^kPTW}VT8&zE&~{rK{z z>zsM*p3kp;d0*Qg!vnNOBh_B#2p{?L8eq2@xt0KJ4XF~;*3+GK(kX4E|?2dC+z;bXIcm_ P<{3O){an^LB{Ts52$=BO literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run10.png b/templates/knightPlatformer/assets/Knight-Run10.png new file mode 100644 index 0000000000000000000000000000000000000000..40a5d277ee3ffd9764734d65a35cc44786330aab GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zk9oQ{hE&XX zduO8;v!jUHLzf(1<%p;iTi5p5bxvi`VX2+Lq0|)hQ{`4iZ$$ROr3vYp8H!?(VruDW zWofOSOK+xZK79UZQTgVZA5&6|E*XV=(ZWLv`>jYkzt!bZZ1ezobM;0@xtlG(PU5=l&Mm_fKsFnhUh<)4i^1|7}k_eLtzz z0Oa3$&o-=o$@c5d>vQS;+CR5e{*cT2^lyU{*moQL|9tntvN-{&HHU9;v3O}w$%L)- z$7_FiLVY$X_VWARcQ)#WLF_y_FZyHA#%Wt8+$lbO!*-qQ9=Wh)ke5uWznx=BvTc*w ge`0ebRBIgrv!r|KZt-sqfYHm~>FVdQ&MBb@0I~1zjQ{`u literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run11.png b/templates/knightPlatformer/assets/Knight-Run11.png new file mode 100644 index 0000000000000000000000000000000000000000..dc92e49866ba5d73bf33cf6a58f68f1a972add3a GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zw|lxchE&XX zduOB9;Q)!Yhi)-%AKi1D8yow@YmV1J#|zyn74%*`nR>%D=EzM~_k(8xFF48+aj4~= zJ9$!b&-rU+3m-my{@6b{%6I!R;nMAf-&og3GdJ__-0HFTE-e@Dx+mOlj=_lo3e3$( zR%_C>+OD>>`%}Tqzi{sLv?+cihk)WdJgb!6ss4YvWW(ho(~=|&@8y<>6B-@a*p8M& zaJ-G&D0}@vW?4ih508<7MrwQOq_U`X+n!ffEBz!=5`gM%TD^JtQ*Q2_J-a-s3{RiF z{Xx@OhaF_9*SDE=TesJnT#NqC`TdCB+-EI7GbJUatUY||o7S%7wl;Q0W6nLPD7^OC zMjdGOi31BRe%oO7a9&w?ZD6%bnLzDceW-Ynl}_3EQ%5<0hJw_A-E3sAVur2Gm9qEZ zzpLV*PFei-*j9%+eM=UQ^-?+fzoXtPcpT4f$G&S){BHI44}<^NL7aB#=YCNS=jS2^ zAx3K4lym#8_v%lHTxs3m_g|_DA;IExEz$Wt_q0P0MHw6Z--~3flbhBI3Y)(S6ZM=^ UHDW|A0^^gx)78&qol`;+030gT!2kdN literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run12.png b/templates/knightPlatformer/assets/Knight-Run12.png new file mode 100644 index 0000000000000000000000000000000000000000..5cce347e445177d4abf38db67573b33abe504882 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zcX_%vhE&XX zduOB9;Q)!YhhZ^ql`O1QY+l_R*Ev~4hGp*zE~O@`O4VH*-4?GGEPn7z+)K~CW%BUx^T#T^ed^kiC;rRNd?6fR!p0^ku|?*__uZQ}pD>ntw7^dyC1FCN z<3zsM#oKq?yBcnK>u-g(`BK@aC70(IoH(Gs+bJN`1zZ0)q`*ts& z{omwL`?H+QV8Mv?t!r1muzLINp<$8L;=eBouhl`_(!BQYttGFw%szd2=k-kXi{Fc( z7KC0-yjU8l2~`F12-xXY*BlPYyzopr00M3A#sB~S literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run13.png b/templates/knightPlatformer/assets/Knight-Run13.png new file mode 100644 index 0000000000000000000000000000000000000000..873d959479e0919a539a99a5636cf938f15fdccf GIT binary patch literal 531 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%z&w9EzhE&XX zd&gd%#gU=yqwU3AZtES^F4)oLzi5)Th>+bGPnYIX>I(&XSC~!_nj7S_^hTlK_cLeC zy;D8Ees}%u+2+OhY0suztjN8SQK(%Te_)fL!HEM4t~MS2rB|`WwMT3I`b;TziL`_X zjgFSG-}2M%uFp@A`L+IU|MnX{SC`CE<}m`P4?GsN>8fI4`q`IrrrqhAU0h?G)4>Cj zS`pFyw5v2~jj*sv={%^~IegujrFTw$mi_hN&8J;2j-JuWJGA`G1}U)mC-dw!?Jd4= zePzAs+vS#r6quWNcvf9Y+*m0(ce$;N-P0JqVhdZ}Uvr>l-Fud3_|WFP3p@BCXD%cYg|5xgMnS8mry z%q^cgS0;6C{-*7>tKR%goGJlyK|oRa)VSYI&+R_c_o@rxRE15;_rIzBX1GpucLK_gU?!y28 literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run14.png b/templates/knightPlatformer/assets/Knight-Run14.png new file mode 100644 index 0000000000000000000000000000000000000000..40a5d277ee3ffd9764734d65a35cc44786330aab GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zk9oQ{hE&XX zduO8;v!jUHLzf(1<%p;iTi5p5bxvi`VX2+Lq0|)hQ{`4iZ$$ROr3vYp8H!?(VruDW zWofOSOK+xZK79UZQTgVZA5&6|E*XV=(ZWLv`>jYkzt!bZZ1ezobM;0@xtlG(PU5=l&Mm_fKsFnhUh<)4i^1|7}k_eLtzz z0Oa3$&o-=o$@c5d>vQS;+CR5e{*cT2^lyU{*moQL|9tntvN-{&HHU9;v3O}w$%L)- z$7_FiLVY$X_VWARcQ)#WLF_y_FZyHA#%Wt8+$lbO!*-qQ9=Wh)ke5uWznx=BvTc*w ge`0ebRBIgrv!r|KZt-sqfYHm~>FVdQ&MBb@0I~1zjQ{`u literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run15.png b/templates/knightPlatformer/assets/Knight-Run15.png new file mode 100644 index 0000000000000000000000000000000000000000..dc92e49866ba5d73bf33cf6a58f68f1a972add3a GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zw|lxchE&XX zduOB9;Q)!Yhi)-%AKi1D8yow@YmV1J#|zyn74%*`nR>%D=EzM~_k(8xFF48+aj4~= zJ9$!b&-rU+3m-my{@6b{%6I!R;nMAf-&og3GdJ__-0HFTE-e@Dx+mOlj=_lo3e3$( zR%_C>+OD>>`%}Tqzi{sLv?+cihk)WdJgb!6ss4YvWW(ho(~=|&@8y<>6B-@a*p8M& zaJ-G&D0}@vW?4ih508<7MrwQOq_U`X+n!ffEBz!=5`gM%TD^JtQ*Q2_J-a-s3{RiF z{Xx@OhaF_9*SDE=TesJnT#NqC`TdCB+-EI7GbJUatUY||o7S%7wl;Q0W6nLPD7^OC zMjdGOi31BRe%oO7a9&w?ZD6%bnLzDceW-Ynl}_3EQ%5<0hJw_A-E3sAVur2Gm9qEZ zzpLV*PFei-*j9%+eM=UQ^-?+fzoXtPcpT4f$G&S){BHI44}<^NL7aB#=YCNS=jS2^ zAx3K4lym#8_v%lHTxs3m_g|_DA;IExEz$Wt_q0P0MHw6Z--~3flbhBI3Y)(S6ZM=^ UHDW|A0^^gx)78&qol`;+030gT!2kdN literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run16.png b/templates/knightPlatformer/assets/Knight-Run16.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e1c9db043add30d55b1f578caf5a3475b2d461 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%zFM7H-hE&XX zdwZkT5eE^shb}pH-8O6q$c~n-71EB}An+wIOhE9;DfNqPIY*+nby>Sby&btXo)9=Y zZ>EpX)0(?#v(J7g-gzcP{b@#G$O?^R>o3pTXFk1B=6_$KBOBXU^_brmZ)rT5QhVnL zS2GWfk%7k2_Rttzz3pFvx0=PzJLH_m|8~jp$ixXC)l)gMPcEs9$U49JWu~X?nXM^m zY;2MeQ!X8zwLtFrmCIRGVXM5(Z*EUbN&qUK`*p+b-QFc1pZr*J^`KARxx>!;&)u$j zl^G_H0+L>9%fI;Awe7!lecis|IZP0!XIZ7_+~u+N?=0h4enalPdu)0u&|*o6E4OXd zcv|@Hwy<4O!&fa}D}Nf|+zbO-ozl3gqS`>GpE#hv4EDo`0}BqGIqc+{z5mMRjcXv{ zx9&t={Jz_LW!f$MG>DN?a^=3+#W~)uzf*DAWRm{s-RB=JTv7WM>b~Y!?`vP?thuv% zekaK5yxZDa`M#A+TDSh@a`~eWyW#d}+&2E(K6&X9`Ni2Mm)Wi}t$Dti8|3IO)BjE9 onSb!|Z`Zw#Wj7rHyY3gu$}f@SX15fafHBSB>FVdQ&MBb@06zijwEzGB literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run2.png b/templates/knightPlatformer/assets/Knight-Run2.png new file mode 100644 index 0000000000000000000000000000000000000000..447353481b91b757a68ec1110c176f2e6d8add7a GIT binary patch literal 530 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 literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Knight-Run8.png b/templates/knightPlatformer/assets/Knight-Run8.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b112097628115c739207ef8b4f11b0d85f236a GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yjKx9jP7LeL$-D%z?|Hg7hE&XX zduOlL;RKQPLhW_e4&HT~D_innQTQVjR(41IWlcL)Ob%bvy`y7ucVCn9(ZChW7GG3N zEARC$IraJWEED-ZmNI^aZhupoe9}o+`|nh@`>#*^sJ(NlR4jVuDf^^^35||>{}tJP zyODNw{hYXSlTF_?hDoG=guQqAmF(U%?RCi1vios|d=vT4-nyK&@sI*@GY`+J96s;2 zm7=z~E88vGMZu&~s$uP)gyy0<(s5oj$N+tzD`Up>>ZT7LJg{gON94*mOJ z@ybFQXx51X3(h^;VD)fLS#6=!SIak!CG|Q`@trRdR~CmxuK}t7yAPxo$at2<$9>iI z_tJO$sjWbRB_*a5=el0sZ|ik6WA6-6AU`D`V58-m;vIea{@eV}C{e#}#utCsH}LhZ zwGab>sv<7#T)pVI$WyDoVE<^`mT`No_v*~@umeNe$G!zK4=6MAG8i(?XK|gT;PK$FgOfqSEpzdU~^eb+21SvN;v19rgS&6bR=jT_Rl*JtW z`F4Yy5lG85E1mE)my_nsP+0kSPU3_{pz5b35k7B^=$|it@!<1nX{&p0KF8i`%fFeZ zDj|`Q5HS1vmx*uZHm_^@H}Q+jSxKPTK*5cC-D_9BuzLIOqvrFXRfj)jUMf5XG+lwY z*($pIXv^y@C%?MBExqCR<#PyByy|k|&eyAgpjLtm0o(mGO;)Vy?(e5{^G-pGzA(R9 zyXbq6j$-}v7#8Mc9v-FF23G>(AN!Ulu3zl`r8evJ58Im4f1!^1v{&V=#;S$Ix1Rmm zAjHFCWUylM^Td+7rDa7^Oz&mnZ~u1dZ(=Lh8%6C~Yu``b{f^5zD-i04iRr&i|2t!M rtoo#@0m$*2_+CG;Xa9W+>Jam@Wl>S(X(cy-5zXM~>gTe~DWM4fpCj}T literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Left arrow round button.png b/templates/knightPlatformer/assets/Left arrow round button.png new file mode 100644 index 0000000000000000000000000000000000000000..d718b5489edc4d4441933e2c5fe10abffa6efbf2 GIT binary patch literal 1742 zcmV;<1~K`GP)tP4xufyiMDrkcBX0t4GvvhUG>PhkuG3KqP~3eS%+xzuCK2HiV#tT z&^KuSTPg*PjP}cdrV@Tkr$J(bo1a;#7Xb#V{wMH@Llj$yMC@W`0w42FxNqa(4oxtR)9TA?kpiMG*4 z27CHt57`mrJCUT*)6+@B=mM4`^o2gt*ajc04{3yd8h9rsC!*8oSOX^ueZz({5UmYq zbaZiXfn+RHLSC{NacLqFHpSTtpNvDqG9U>a)zO;YbmmFemITq*QYXxLF`bt>T(b;o z*sAiwNKQn9=jZ1mYFuza!fv%%&ch1@TVb=xANZ;jA~iZxb%rGE;*d=U&^RcYA94QKeG@)Hbl&$!fZP-l2)Ac8@znVD|% zDVYjRcowY-yio8-CO}4qhnurt%w1Qo);>o13D_0YX|97NT{97YaUd zzJm$aBm$&a$>SQpY_+<&T6=)-5xy!Ic(L&4nX$>;=-RWbt!HNihi2SH!2m0CS=eW@ z>A?N{y?A|n74Prw6TQ5=SkJxinPUM)%G^gG8gMtQudiE8d1B7k0bd9>%^bn-hl$URd7V-mFh3922nm1&~5^#8tMn=1YPX7Taq>jtN-(nmiO0 zoq}f@V3-RzHvdf~2L}gzN{&L7jl`V=UKs#kAIApFqR+iUuF}TFhEwp$00;&g8!(IJ zKf%d0cx3<#hcTxKyuH1>8Sdil?yk{w-sk71$WzJy2o@Y8u$$yR?jl}Pn}UZmovnfe zdC^=RzOX^wJY4`e zR>lD4UFTH}ASFT}YkPaUaEGpyqW*vh$I2MMx<#OMfKN|Pe*++07-Nc#O4l+5k5P32 z2qrQou*1eIpR48= zfn9h8`qxDrOBoXo%h-_y3yx9rwdN3&WSKln2F!i{(*Njll}x{t%d^-n z0Zthg=iBVeCL>e)vvQL6smo$ zvaPc*X&@F|j^sHT!!ZFX_IMj!-*K{aGBpXJ&C^-%S;a$n)R)LUb2pftOwvNcF1O9e zL%~A*@eLBAin@(l7zzvD=&=v{`{CiiYVL~}jq%@%fG}3xvg-J4NL=pY7{o?jGzzJK zfNQ|!QQxuz9~A)xi+gY{ z+DQGb!a(^4$aIg_vo?W_0000jbVXQnQ*UN;cVTj60AhJAVr*}3WMp|RV{&KQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$g2_N5W&i*H literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Locked-1.png b/templates/knightPlatformer/assets/Locked-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ce66592f1e853fa239547c5f6c166bb4a77209be GIT binary patch literal 516 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR01_s7$ zo-U3d6}R5rvE@4CAkc8pwpn4`*;}h4D%|}OUb802avoFtZG3Vc|1u#*z@4YYbxjI zZ$4T3KTN>^td7Azpuv}4qug;T;}a%ECa_pTBSTA6MK%LM#Rcy7ya_A<5FHE~zO+{9 z+ekIUzyt(14y@y=t!5VxWPvLAV)12Zg1Adhg$7ilL5v~jCAX5?@}DC66d=|Bm3A;H znC@eMb6+q6xgwx&L<1k3VOAkYJZM)y;z5}Q<~uXOM5nvJnaB6*NWp~RbRWxu-;J~H xGeZUV8u=Qb%mNjLY;K9ar7$i>2?xv{Tnu&9hM literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/NewSprite-1-0.png b/templates/knightPlatformer/assets/NewSprite-1-0.png new file mode 100644 index 0000000000000000000000000000000000000000..85908c3b791a33b735cae6bf9be92aa5072b5a55 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0pkR`x zi(^Q|t+y8p1sNDP7#6;dk1DP(3TRkW>DR!($i%`Spx{6WV@DoiM9qgsj{+UCfVMGs My85}Sb4q9e0GY2PX8-^I literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Platform_Stone1.png b/templates/knightPlatformer/assets/Platform_Stone1.png new file mode 100644 index 0000000000000000000000000000000000000000..1852db4379607e9546ebf3851d71959092c10a8c GIT binary patch literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-HD>VAA(=aSW-L z^LDnaH?yNa+x^Mhfg3!ORa#vQINT42XzB!IBn!UD(fK6J!tH(f55vK0*A5-?3%Ze! zn7Hz6qf5{dj|0b?E)+DG>7_iM#B;p1=j6M~Z{Oa1ySw=PnOf_qS+b8Ss&6we{QnlH z`|DuMV+P^ptPByS;?Dm+w2&`AWUmoJ!i(?EZZW#9f5UL#!h7F0=Jy!iZJ84;XkEK& z%7v*CZ=<@cB35%=V|;a@|LLA3^R5Jb4*6_$kI`>w)b%2jmvijD-A~G`f427Q9r?G< zGpr#j@iW`ddqiy-1%?Cub%P--i9p!tiX%sC88SUnEMv0wOXR4&)IyY|Z8;>U#& z?-`^SG8r$m%;OBY*S~JlrAb_^pAXOcd(8R(n?qECNe*vB3CupH?@ZRa*`t0x{c34! zn7Lu+#-&@|zhAd?+ef|)j1$BZd{?l&F`xab>D-%tv-u(&XH2MTTFb}+Hr=Jpd`8*1 z;_I?s_V_LQwPRKS)HTAte>d!~oc-lT;Bn)7jAjg%n3izb3hS&5-y*tW&ZKpWG9mXD z+`oDY<`}(y{}!Hn`iY^zasTWW)l4tbyG))J@7%-8;Ap^ty>W`92axiYiHUXK0mJnru`mv1gH3471L-LQorGwB__Q}MPe zr|bz;>=6u0SUn!EW%PZ%N58$cYKN)gUS=JJOH4}=zcZRF&p5Yrt^bFG_ZY<(G8r#z z$-lc?&N{NtC9{43c6#tC8yXYW-vu717d3u`=Iakj&Y zs`=bkw@2!GCx7MJz~I3>L2U>Bir;qe=1|qVyV)-M*4oZ?W$(T3UsXk*irQkCU+sI} zZWq7ccx!$nq;j@B_UYLuL{=8l2IZ2KoVRKyAF7KY*cI%~n z$tieN2{MQr6>G3$`1tdvD#L@TCZR`!h2a0+RuQr>mdKI;Vst0H=cgMF0Q* literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Player_Mask_Sprite-1-0.png b/templates/knightPlatformer/assets/Player_Mask_Sprite-1-0.png new file mode 100644 index 0000000000000000000000000000000000000000..81b65dc2734ea3ad216b8ab08a8462911177efed GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^5Yah6<&oN=F-s4P*fnl$2@c!v;{6kd8JI8}L0}gs*bV z89x$xJaI<)g%pox&iQ=i%-9}ND&<(NuCAtUZ*Mp6?(Q1$w|Rem-;N{dit3z88>LAp zM@L7~KaRHqT329rX^6IHleTwvcc%&k4Tr9;uWRC5CoN!6lD^vXS%he7-rU^uBtpDA zMBkzYwu}`xF}j@>G?TcPPJ?8qNo{PdZk$ZXawc0-hN2n!s@H`1sh{+S-Z*E3RmZHffta z64+DEd&qVq-+56wJ3H$~Oj^LAL|^n7$2NShKBNi%IPgwSPrXW|VhvnS^oDL^YDCOD>j?_!PitFN~0}PXC!GChisf7jqN7C@HrKD za;07gc}?RAF9^}(AHI(SPa3J28fR7;r(qj5obkovCk%$3ai!s2k>SOG2!o+!W;wAf z$<))ty=YP3`NAiYzpzM}_v)s`WOgbXJYV=`@*5_x;QjgYXG$vf2OIH#sWsh+$SO0(@t7nU$+YH`}^Aq7Jhqpc(7&%K5Hys zq~^kEwOV8B2W5NWAlgjDHbi{an84~6KndB7R@wHNFRIvti0>K`SpAwj3>B>>@HoXL zL>Opn{+mn=4-e~-9KE3OSTx5iwjjblV*|6n``(sTX=7uFFsIfEufb0QmLwl^sAygkDfP zJ3EB}NEy{1m}smf0$>^uIMD!KUS6^TCeJ}F%JcJcCQqd`MzAZD%jH=Xi9wCJ-x)_(K8!m&e_yr62zLG+=wAoZSjyOp+^pdF zOBjvO;A_nmm4eD+Gm&fXV4$&q**}2tLtU%n`dhiI;raPbV*|5)0EP0jfwI#8vxevI z)H00D|95FgqU=yPs8N?QS?x?n;}KPy<%`AyR=@VfNT}Ae%9Fk~Mq>gib$c7H?=;z* zOkCNWh0i7)#;v|W_EkH<=4A5t_~^veHhea)Fn@eQVl+{=nG1n9xCkdIZNkIXkkJ_a z%?N~9c?VU*Z$rXzpT;0G`Uay=8t7>a*xc%ym+;XLK)uN5^NZZ$HMk0ziu|bqzM1@n zNusZnBwV{%LnPO6{z5bCnIFCxeC{UxR*okPrmK<1EuM{8HzfLo`(Fx#Ee&fb+Si&P zel|w>W>^|%hd~_o53VENwMYJ9eP(86O4dakW+zSK9EsR&@(Z8wJ(bV?$pNBXksyY_ z!`Gqn-Y5{qVTpr{*5M686azXKV3NxaeRv_ZcQS)Fm=mKQaxdx9bF*Sh7vtj!XVZY`x09rAY{h1${*NldU}uiVq_~R zkgT=1xcKT^)J5dRO&36p9XRa?w>Z%dXL`1v$%X6EXRfnr7Db$@5fM0;_6$s$3kwU) z`T6DO=WiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLk FV1n_{I+FkZ literal 0 HcmV?d00001 diff --git a/templates/knightPlatformer/assets/Shadow.png b/templates/knightPlatformer/assets/Shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..68236f9dc0dbf898874280ac491fe80b52a8e9f0 GIT binary patch literal 34589 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 IqgeFx&5vh{Un-H3cjf5s3VyFTNhAJQ^RRs$P zO{$<2k!AoXc0^G@BnRK`cgFd~J@=3M_Z{yVBN=n=v6HpdGvfqxPB7lD5f_!ohH5%~WX0_@*(8~}hB3d6~M46r-2aI{VVu;0d; z#JNzwDt*c_s-u9OhrYM|g8q!I9ZZDz+AV$v513#;K1SKYW4(;Oa3mf2FqflbTd3uS zINIEQJM#1A&%fv9-lQr)KokZM+Z5c@!T$T;{N6`;9RT!MfIJI89320WGe4qlP$v{S z**5qzKsFWD?PSrWHe1hz02Cr2QT_Bnj+eMj^sS<`7v&bS3#*1B7nH7w8;*1$`g(jC zUF(V^!o=9Sd;iM80szpS0N(|~egOyo1hB|^ce3e$*mbluz-vw|n#DmIA;OuAAZ55d z99bZS6_Ssf(yBWtZOM}80irW0_i}AHlNZZ$<#ej#1RV28Yb$BQ|UG#`_48BkPoq}POUFZ?n>jGxguVfrvST3j< zxO@)vsGFBpT-DS%a4AmIeBS}N^!)UWs%`fd^>@tUH%pJ77|*}{f3Jj10f6H>U3Hg` z{HkW%K~uK3F6;DEtJ`u>*L#f**gl~8F(0bfiZN--U+mvyL?H_Fu9cO{ISOE_&_?)d z2JqA8t-6-93LdV3bDL7??beqfvuZ0Hz8|-6apZ1_ z$+`RCyMUE-4M*TbrKT*$Q@7$RY#E)6MP!{(zlN{LxYXy81Y|G>mywGRUs{|~9CNG^ zLM-S=X&x_z_UNczC^p_KGcb)(UJezgF6&G8$v&l!i+24d5M^PYI8MTanF%rOBwhG~>(VqaYs>62 z{kpvP>xEMbynv-zn$Uhp`pnsjjER-A0cQcx-)TNsBp1x}S z1GUbrt_iB^x}3E^VqoaQW1&o#+DjOF?$4_sUi7gfp>8-Sfg+25-{^%)P#y2Xo=Bp zEq{(B%oERwEvvmbCwlCYhMall(DT<@K=ksxjkBLNq zvn`r;rt_v|KeeT=%JLuQ-D#RH?*ZmN^Y#~VHy9{8>CwOJqoxH8NyGRvdz2xHCXFz9A3;Gz2g>j?3aabkdpu zE|oUP+Y9NqedF44G#76GH{fyn?#WvsyeL{Bi2L=)4~GZyG}Sf>{$vLJp};K7HO`l; zm@vBD`>HH9*iDTHqicP&?p!}-f4J=P=8LC!ny>R5@-pngznxd%;Ojw1esV}`u}Yw} z0llPDr6EaEgyoVnpnSm(q|stimom9PYS zbxyc-C%x74-k^p)aEs`g-}Tg!Fd8$VIDth9Q?Qr<5ehyAd4Qw3?*fpVK*NA|8zs^3 z5Bu!4s;8)G>y{4HJ-sv5k2?C@PtI;X-0;7NLKjT&lZ3AL#?4*U-G-JSLk3M7PYJ_isIS{&1+qZYrU>wzf)x>O$Nj1>8XjL{G&MGE+o6z2Z80-pP~K zwN08YJec}ItUURX9k~i_0pJimAH(1jy0U^AhJwLPBTx<8w`pCI)8JdGS-M2lSdN#7 zuU*NdF?$`8C5id~oxHATeEf;ZGPoL&KcA}O)+75YXp zHK9SEfRoB%$Xx@@d5Ot$3B4UrtX6L2>=qiGNgTF`Ex2Z%ypjLZiL?yeas{rQQ`^Q(_v-Wcq2fA73d z`}1`5>%-rb*{wR_mGo(v`N8Socl4lPYgx~=Pu*KXe@VfH0&TK-CNZ79Vc%VYiq^Ik z=oc1`2)RPVX1~Qhu~Yv2PMciU9Tp9Sb(8#z3gQy{8?4W%b$RNa><{ugJE!WbV7k3A zm$?+$@=5hTWf!jSbF@@P97i* zdY%|624*{*MUV=>Y~N0~-JY%LG=rPtzpIHe7$Sa3=&OfL>_qeT7SKyeeYFXnqf=8< z@9Lh2TXi!?sIzRqayDOkAd0oL5c%76}^2sq%b$V_TKF|e<2 zqQ*K#BHaC+mvCj}rc;QOLW_XAZnM4Nti_75pk7k;aLToQ%#91Y+LEnZQFfq$ zQ&w>@Y8iMTFth?cD#^&a;wK+&dqO-s>FL7{2{ADYOL>5F-iZ z#F&g1WmRKLEKet(+*Qh_Mpl*?UmXA&qhHf6I80u{iW{@4Rdu+rAju>stv2RIPdbs2_JB} z%yNESQa_kbF|m~x@6NY9!gl*6 x8$S;2Y@>cUJqKkv#hYf{AOTV4dw&ThHV=S;x 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�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

    q}UUAoG|M`7$57 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 t#rHM8pr6S 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 KKbLh*2~7Y@coB*K literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Desappearing5.png b/templates/healthBar/assets/Desappearing5.png new file mode 100644 index 0000000000000000000000000000000000000000..6d45bd48b92ed8f9264e7e43fcfd7b627258b9da GIT binary patch literal 481 zcmV<70UrK|P)Px$n@L1LRCt{2+{;Y^F%SSy!vTpJQU(=pq9jBGh%0r_Ln=rasUcEMT(Go?0)dS^ z-dWyjz++F=8-I360RR91004e+JnZ(z!)`x1j%(bE4q&d+fxo+d*o=zh8n>eZ`0pfO zur3K$!`wX8vp>z>0g-caZ7ZUUs&!jU6Y$-yBKO$UKaNq)-=Az@5Dl$fTf?Djf}7R z6Oj3W1)J6|_*GP2Le>G<2EUZJn42b` zu5hP%mz3=JSMglzt^3pb3794!s-9<55>mW`qpYRAkK56MNx)zdzMQwOj!>+bPH}vEnu3(t?tdX(PN`}(UZ#c4O5@@3#n`0)?{U1ut>W9 z{r0~1+iyOW*mzdXVg3Ds`M19rW$P%*rSU6R^Dem0RqU|+%29K-;uo`8!e=tLyFMw{ z!T5dG+_jv6mMy-AX6Ct1+}d`hsqW8%N8wH-Z|~|SNzN{CJL{Z(Xy&Yfu(i&`2eK5u zOPp1BvVVb2|I+E}j8At*PP1YJx*h}?>i)0m+5N?91Gn|0+jrS+bX!|RodIc_hQsQM=;Dckl=!>>8_ zPl?oh4L@sZSrW^bD{Ryjzjf>KGl{K>pVXcyHrlPCe!1bKNkg5s&mjf|%Ub5$9M{*q SXt}%#z@qLn`LH zy=z_6Y#_oKF!88r@9j0p*`C`bPFc6fGH4>>=c~**(&sXB`%S+q3iPxDHLcjSPQNrZ z-fMeu@2V2!MS0EZSG|f_rJKEHO5TB+nhb^RJJ>$($YfR)eVQf9Dx12cP=9BouUNvG zt}X+eN#PkHPfD(cpH=xSa^>g7c@u)7re9oSo#-mD-E8*JekGBG`Q1KZ@yzF>id_7{ zZt_3o@!s9_fL%|1zf6JH8F59<$W6kP?{Q3KjSOx#A3U^8Lb1YYihbdxU zxDlCQd_Ha2`}fCxn=YMlZ(rTEoXeLpKXsg`I2R{>VP4wbUq5Sql|S45x#NxEgsaSJ zmb|>B)PL0W0H5ILrzxq@tEZOTKj!u0bJ^_^zCTX8ZsuA$Nu(~`Wb#QSlgEE_|GnU8 z+cfiZ_BQq{-3osy-}dm$zb$Qvd(} literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Fall (32x32).png b/templates/healthBar/assets/Fall (32x32).png new file mode 100644 index 0000000000000000000000000000000000000000..4af21e6467aad863cb56aa5f8194dbc29121cf37 GIT binary patch literal 709 zcmV;$0y_PPP)Px%e@R3^R9J=WmOp3{Q5?s=CxW;Hm$cHsQaIEYYBIUiv&*Hl;DJcGH$yYI1eY$- z#U*5k%Q@)gV2DBjcbo;e)NTPGDzULd#0*8-MY2S2I0yYbUheMQy{n`BZh86L`+nZ< z_j`YUQ=RI6ml8I(vAHGuz;$d-cJk$w)v5WPK7JU8IV(FE8CM5g06=Fn5ysxSbRGb3 z|LP6T4{;&@*Rj3opo`9E5@}4LnChS#3lR&zn*+e!hwm6yiZa}=Bw``~MCPWU;@hVm zxW0aEDn6af;JCk!bT$J3IPUKQ0Pbwt!YrJTfRr*PLxLb60C@S}rm%U10Ip+uYdgDA zHJ5=9DY68Xt|c-LgGgsHe<9w;1GtXunTCp){2ZI;sCS5RYj|P^k%Sp2w}wD#C?rn` zkqBUUWmRz<+e_6NQ{%GRFAO4433x3n&I0(e3wRy%4l$FTW53@&{}}j|c1r)*YvKID z6KY{T?*YKt&Mq7CZ^esOF2wNz0PCGEUwZ++P=JN`ym!#q#^m!`c1C1f1xv)urnl8 zYeZ%&vIlr`-c(kWuCWD-D@FMp;352Dd^t#z1zJ51KngRD1>iwawMODBSh^-OCQ09h zaiUjHQvDNvrEBbfN_uOOBGW^U)Ae%)D7S{JDXA3x+tObqIy0imAk_n}?%f3d2EhaH zFCBVx@QupHguRNTN>Hdb0RX06}Kh7GKy!00000NkvXXu0mjfT?#t~ literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit1.png b/templates/healthBar/assets/Hit1.png new file mode 100644 index 0000000000000000000000000000000000000000..2aea7e7aaecb934bcaab9d90a53d67a557df6e5a GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Q$1ZALn2z= zPI2UGFyLT0_~XC+bgt^US-T7Gek>*!snd1wqWIY}yV_SBdcKTx&jZ2EDGXBc zCf3bBD@7V5FR(5WdpX-+Qp5Wh zs*LfB*$VsZTa@ampVl9Y6Rr8wFR3Bu@ZHU;VI%h?-Wbn}$C9c7*$d8B%b5SPF}>!z RYdz3`44$rjF6*2UngGW*Q+NOX literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit2.png b/templates/healthBar/assets/Hit2.png new file mode 100644 index 0000000000000000000000000000000000000000..2aea7e7aaecb934bcaab9d90a53d67a557df6e5a GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Q$1ZALn2z= zPI2UGFyLT0_~XC+bgt^US-T7Gek>*!snd1wqWIY}yV_SBdcKTx&jZ2EDGXBc zCf3bBD@7V5FR(5WdpX-+Qp5Wh zs*LfB*$VsZTa@ampVl9Y6Rr8wFR3Bu@ZHU;VI%h?-Wbn}$C9c7*$d8B%b5SPF}>!z RYdz3`44$rjF6*2UngGW*Q+NOX literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit3.png b/templates/healthBar/assets/Hit3.png new file mode 100644 index 0000000000000000000000000000000000000000..bbfb00eff0a3060995ec422bd5947e3967a646ba GIT binary patch literal 731 zcmV<10wn#3P)Px%l}SWFR9J=WmN96PK@`V-p9s<=xU`WDEyYl6OWHueEw))|NWp+eySGEL=u%v| z6qha~i!RAvH-`okA~eK+q%m7Sh)Qh?k|@UasEOCao5rn9td>g_8Ep zol-&Q|$IElPe|DFi>yr#muhN+#P6=CpiN#k^2%{@#?p3X!!H^ve`k_!_VrGi^_9SqY zA5MuA@+C7&ES^EgWYmgZKfK>HcJk$&(!TS`bn=vhLSknk(9>Zb055+0>T27sr^jfQGWOM(tegk^TJU|rFUgZD) N002ovPDHLkV1i#HQ3e12 literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit4.png b/templates/healthBar/assets/Hit4.png new file mode 100644 index 0000000000000000000000000000000000000000..f106b839e117d99875d9874d1cc5da23d31ddff4 GIT binary patch literal 687 zcmV;g0#N;lP)Px%X-PyuR9J=WmOpF~Q5?rVXI#2mTqvf4O(UsNLLq75hLi;fO(Zdf?skwx7vkd5 zxO5>by1>xxGMHcjK^8zZ5);(aVuK-cXtZ4n3*));;r)4c9POY3-{gjS_kQpD`Mvjh z?;gxG*IfTtin-y*)0eiL8?~x7t3fQ0GNVv5@GS>vbF<90By^0PU~87-iG0Apj~Mbb+(pfoT$_qmfY8o+1BBxe42E50WjU-xf?lY%2*sluH#Yz#_2DEjV`{!cXy-44 zUXCZ>hv$ziZQ~!G4DWANRl_6xf&k_vl*v^Q3W-eg13x<+%@k{{0SkaEYyCEqWu?zr zc6^K2LdvH+cs*qom~TYpGeH2ksR5x%JZi~YXzCIaQa&Y6Cos*eP{M1o$&Evf4I z3W>zbS29<><3h@($SxwWL{b?HyN1WE??G|TVh%GDp_mDA!*ROj$@-d4z`6b#{Q)NR VGv4n;8BYKJ002ovPDHLkV1geGKehk> literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit5.png b/templates/healthBar/assets/Hit5.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e91805f42e1845a3ee2a5964b21ea53e9db206 GIT binary patch literal 686 zcmV;f0#W^mP)Px%Xh}ptR9J=WmN94=Q5eU6SGr`8F2<6fAyjOw7==JLo4BN+P@x2~H$z>TMY?ne zU9yNvyXeqt9TZxyki!T?Z8o8BZLqPyB4!9pvJ@8^I$VeJou22Nnr4fC5WIKqz5nmt z_ucm$Of=C%S6x!?#gnHmOedBKvU*XIU?{Bf*~)Bc|E~{QER2)&Dgfof&dA0~x26Di ze)qoG4>1xzsUWM#dX@5FXDnkOu_jrsnnIWY^qK?g?j6%k#KwjI*tWPg5Wvhl9d+{a z`!D8K?^zn!J#J2G``A5h08VTB06cyv8&2WcF#2)Lg`t2DKmhMI9vG6@08lE(YNS}X zP|Qbx=-0pyY%eeVm-!$FyT|0tg5ITPjC85#!67M@-#bz_ql2EtMPFRO|uZ zTl=6vm{!7OOOfVg{c6DLfMNyT@*)T21pr-mUb}3%b?<)v(Y?arG-_UL-B%Yu@H=x_~z`9$CJ$iFM2e7lgLiWrBK=urv zp=(0Ie0T3y7lu))rr0ALbxIFkDcZOWK$r`qqfRNFh^hTa7w|ePk5$YUkRlAhP*^&D zu&#zSqjc0MnYH0yC@eKwitcAMe=D=8`x=4~b3mL#Z(le2!m*m)%qV6{Cc47<3&K|| ULfu01!2kdN07*qoM6N<$g8CLaGynhq literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit6.png b/templates/healthBar/assets/Hit6.png new file mode 100644 index 0000000000000000000000000000000000000000..f106b839e117d99875d9874d1cc5da23d31ddff4 GIT binary patch literal 687 zcmV;g0#N;lP)Px%X-PyuR9J=WmOpF~Q5?rVXI#2mTqvf4O(UsNLLq75hLi;fO(Zdf?skwx7vkd5 zxO5>by1>xxGMHcjK^8zZ5);(aVuK-cXtZ4n3*));;r)4c9POY3-{gjS_kQpD`Mvjh z?;gxG*IfTtin-y*)0eiL8?~x7t3fQ0GNVv5@GS>vbF<90By^0PU~87-iG0Apj~Mbb+(pfoT$_qmfY8o+1BBxe42E50WjU-xf?lY%2*sluH#Yz#_2DEjV`{!cXy-44 zUXCZ>hv$ziZQ~!G4DWANRl_6xf&k_vl*v^Q3W-eg13x<+%@k{{0SkaEYyCEqWu?zr zc6^K2LdvH+cs*qom~TYpGeH2ksR5x%JZi~YXzCIaQa&Y6Cos*eP{M1o$&Evf4I z3W>zbS29<><3h@($SxwWL{b?HyN1WE??G|TVh%GDp_mDA!*ROj$@-d4z`6b#{Q)NR VGv4n;8BYKJ002ovPDHLkV1geGKehk> literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Hit7.png b/templates/healthBar/assets/Hit7.png new file mode 100644 index 0000000000000000000000000000000000000000..ca260e44d4a6fb5fd3495ae3a93ad46f10b2f35f GIT binary patch literal 727 zcmV;|0x127P)Px%kx4{BR9J=WmOp4(K^(`wuM~>Qql>X*NCLcTs&7=k6{3FPYopgv%d zdxh`>kW8foRgn#`RI|+UwjT|`Qwq$AM*;xOyTGimHo{75bvFK9{ps)}ozi{(nYljq zRUD55&@R=GH?^W!x9;3@_>8p?fb(=FQ)xl3Xbv0KdwOF%W@H*I%iN-!0RZ|?bHsB6 zAP@i`mTH(3a`^V{F?_c-5lrmCUL!OS9{`B%esn<0O@ThtgpKu>5sw6bMhnsHE%ck4 z050o;CUR0@sfOt8C4^mbui{THpE~BIzrR|>2SE`BL2>pB1AsksEO8eh5!sPBz>EHb z%ZFA2Q~=tp&Cf7xcZoG0_1z#o<*Xz;dh6^0DnRut2msi*(YMUI9V_e6BD;iHUPx%n@L1LR9J=WmobbIK@^7nH73S}T*G0mkdP2gB*<2F$k8Byg2aOB&*EsTh|M*Z zYitOOHe6$+#gWs5VmE}uEF2w)3DMx;24g}&lxqwP8jG=jA;a#@>@2aun z^WFgb*S{{s>EXfQ5%&Y5sT0}7)7jkG`Y%tP*=(-ME=C6K=ZfFuVLI9rgS|N;YpMT)q z{@pcue=Lft!6p2$C;;GUa0vi-bfR;ka7_YI$~kpNAt(?4ygh!vEnY5w(bP%4)sf1% z3yKv_HYNy0iNI;p~&`TY6FkuitUkmu|($ zcmUmM9VO-{vbwdqW&38@p8!~-Go8&TUr+ls8{sgbX`oR6ymdk<+Jrn0qjWZ>808}A zE^8qf53C{~D>qoz6i^5NK&!I?p?VSVt=Yf%`5W!=eAPoXo`#liDWRb1*h-(6Gw$NG zLRfkD+#Yr*09K)(O7hFyJBdbt?j8X0tqw|=6alBssJJiLLKHa{$(jbIA{0(Tt8;5F zU`201R{5%R;Wf^69BY{rv`otN`0=J@ck2}ZVE=~c_};Y!%=QW9U*03}xCpPQ$hSI3 zxJ*<>fP=#$nlB}?cT9jqC|QX{wH35h2z$R1GFNkjmqY6rw+=8`GiSddTv+K@z)H)c zgbju|o|TK6HzK#iowU|9;ob$M6$+{(ac+{txk*Anm5Ba1d6iTI*q!~gT`lzo0jy5S Tl{-nj00000NkvXXu0mjf25?Za literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Saw1.png b/templates/healthBar/assets/Saw1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3c128b50a45ecefc4d4c590da754ed03d5119b GIT binary patch literal 681 zcmV;a0#^NrP)Px%V@X6oR9J=0SUYaQKoA`x4v>N(9kLV=ND*-YdL*PsoWW9*f)tzpEhfc+t3d(&W2ikwjZjjELU?S3vJ=7kdc$d z7z*6n-qcPiT87d+Wjg!qejYqN)J6_TsY;5nTx7?@Q@u?U(2)W#6xeg30U)m}btk|g zT1o99npj(ggHc|#h4ebU@V|;~;h|@G9Uq2+5!EOM_JXXZ*6ytf!NPWD2JCQ@MEWj3ounAm@vst$# ztk2%Qtb?C-2tGdzCStGT3tkb$v~`u0MY$7Vl%#DfqhVlMCg>duPc2%8>T6FCRCNRS zy*T9AG4Zr5sLptFyt55?hn1 z1EjkYroja88JkXl&+&4$IB_BE00{n$j>oPmqe8#$zyb_%Gmq?>D0wHv=)8F P00000NkvXXu0mjfzU4E& literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Saw2.png b/templates/healthBar/assets/Saw2.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec99a465ecf793d24f353038d77735792247437 GIT binary patch literal 704 zcmV;x0zdtUP)Px%dPzhSV#o=+4+MG%Lnn)5kqb;tkVUdc7d}B3 zg@Ho%?FCF=oS8CUyc?KV%ndw?=?k(dId;>lX)-E9PvrnUO;exYv ziXqoayTGQ=xYV|-Lx6Oh5-(QPaY`NwdVPT6>G_dCIJ6Ebs`A!6UhaHWpj;}Enw~Hh zvUt)QxT&fVW-BRY&PMWe^T|xxeM%O9;T-%{hZ`*mwhNUb8J=(CZf+iS|LSU&yb{`jY7V za(~P3ZyNw+muK7mc(L-@-Cdy-S4z9C1gb5`*j=;ZBcyxw`qMRVfP><%AAcJ?Z=N!u z$p`@D6SKtV-OV`wpTGWOc6r9^`yZmoXgm8V*-kK7o+u>^A+2M~2B)holnqSu?yMz% zO(4zP*JN@oFnx_FfOxUm#56Fyy3f@OK4%!;RNX~Dge z7Ejh=N2$bR*P4M;HjORoRDw0FxLr^Jq=$ugu_^@4mh3AlabGB?zGRWW{svy!l}?XE zlaaNg2fQM^DOZi@jAMG5(v86TI}Lf(gsW3=yX5p(mM2Qj0ydys+83%4Y#$I^zO||M m&7bX)gP*sc1u!_w1@S-L*p7W-G)Jre0000Px%^hrcPR9J<@SUqdoKp1|`ZTAoe?Gj``NfQl5f1rkr0YkTj?1I`uJh)4@q<^4; zTW|~d1MLt91hS`7AOvBkU59`WbTG7o`wOm%UiozTx;v@O10Jl8({s-~@5dd30c^|V z(j^u~fyq#Xc&PKRZMguzFD}mk0Q1`r05I~7H~@BU#E29TibYEI*|22%n1m6Cl#0hvirJP6nzj636X_sUN=XcPDU(zn!?xU7Y7tZ?n6Q_l zj?zFF1&xuSakZCHglOodNYS`t7127feNu`wNuUbxijV-<+p)3V?IoPp4K&DpCrZYGlM~hS}e*&GFDt=eQ1M$!5&+=Wk_<6G3 zZe#25meOEv`XihkckyE55qi6u=uWrJ^%3s^_BTt68Zo$`-Kn9GfyDycGZiTQO25uA=gt#ayGUDS?Bpgs{QMf=?zC)HX2 z*vLD|WZwS`dBsRE=8q>_ToUq)u3wr$DiWk-t?}*^NC%5NX|cOaCD_PnBwI;m`}R+^ZnoueZ#c-@Q)(1V%an++{bb&@PBmRpz|pm$>Q7sH&@m4oG&%m4rY07*qoM6N<$ Eg6npG*8l(j literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Saw4.png b/templates/healthBar/assets/Saw4.png new file mode 100644 index 0000000000000000000000000000000000000000..4f704ea180714fc8ca2be325c3093deef0dca1ce GIT binary patch literal 733 zcmV<30wVp1P)Px%mq|oHR9J<*m_2IaKorOS3O+)5BM2c;VSEDh218(*y?~0{!dv(P&R#%;RXByt zU>|c{BQYBgy`QK$2(letz>lG;(l3xzl+;=UJXOHgl~8 zOAXPuZM+UB*ncLD|Ha z$YX8daTmtXC{Tb9%=AJSM_31|q77!KI{$?`ofl&mxAmH6;3eRA2oOt_Csi;S*pzK! zEg5AdJ@4_}1pqAkr3RPn}PQwubyFQ1N!Bu7e-nb+DnL047PhLw>OT@b~o+3tA;< z3u~)wD){+YOO>8eEc_+*8y_!Ecj{R9OVRVfII62>pI}*@IPrFe^qh(TDL(caAAgfS z+HcPfx1i@qC=-ritY8ha;5!|OyqTvRV@PXBVH~OUB5f;u#Y2EEJ=v{f z<=cC9HK;649A4ak&o)J1&N^82YD+_)=$;7&=&#lQQ1Dj|0JZKOqPER4L26(ej^E>( zhcV!!yCv(7D%XOuYDsmmz(sE-={dzZSYb%qj`9XeP`m?>N8;_SmzS-;+LqGHv?fVC zDEPx%R!KxbR9J=0SUrluP!OJo_mF@HT8JmG7X-__Knk~Ti(J4PSZJX|&L9Ya{hlCL zD2fo$EV7k1$TmBV$@u<~m#q6$`d;SEm-&4Y4=RM;8f1JeNn@|fS*3(HkkH|C4*&q? zYa;f-U{;EpQ2>>y4)B3fxlguyJQn1=?QFLS$+m`o`uG7(bA>Ab+n6(Uv#PREn@9WB>_oHWKzpx5u! zPAXcirF+VB_FIE2_;|049FkI%6lJ+c(%4hIO%>3Q0x%TVSE2zRuPt>az#>{n^&*;B zTSmiiRH%nY1BVu5-oHg!46l!{=VaopV-FQuoUPw)3IukpKYD zNYdD&elCmq>ShGO^~7%bb-hMY(WT{z{NP*OxjOGZG)d01fLIs zS-w}&f>-2V-nz=lqTCZPPSUoP@i4G06Z{T_UW=A%^|hx6s=9&vUL3L{jXiA(s8W78?{ zIVxw1Clm4xfS`ADbi1yQ(&9~yB zFpY1eEhBRy64EI(eF$_Srb`eTr8aP~7+Px%eMv+?R9J=0m_cgeFcgM=g&bk_#!yO|Mezx|HyGv;S~Lr1;R~cE$Rb%}7Cu9u zQ0TrVFj=_MQZU(+q0C}#;8`@!$f~4BmXqcOFC^R2rzhz>Ju!GH45CJ^t9K>yZP%-T zFo>GRrw0JQ^K0GK=REU<>-{r9i9ka^0l?U|0T;>BZW=%@FrBpy0m;*z^Q_UqDJ!WV z-A{+Wa-Ma{s&xne)wV*hTr2zOSS$=80B9bc9+1STvQv`DT8m_fr0YV<9=T1W&SX+|6V*pU^N&o|er0dJDQ?`u=H2CYw5J{ZU)UrXq_KkMxT*4LbIS`5tNt`zI zu4E%XeWtQewXKlEDK_&M0I-?I*vw-jaq7H*o?q)0Fbtw*MBY9OqJ|!u^+n!$Gmr66 zzT@udNBi#A&kGdGwb$+*6D^sN%C`C_-+Oni67@ZnE51XbWhXZi07p0|x>`^^W$@V) zfQN&f+)Th{Q{3La;m^xI-2MLBLfziKfzPJx=uM)4P7jqC@VP6A)TS{}s&kbs6rj%$ zzMQoP&;?T7eJ+F3fr)F30YI@_w?55wk@2v0ikK-x4n}bjIOEfW5v<;oOwM?Q zmf+kwVexD&c9Kk-cCGA4Y162pjuFf?p_Rj@Z^;=WLT`I3bk`yRZr zE43Emv#Bzr2jJ!DW$AKEtsfJ^l-LOH^-hDnmEmkMZk@Ci+XqzZYa^BVLK(sOfQa(V pO}%gaR8tQ4Sqm5d3^>jO@qhmSlq1MQEusJb002ovPDHLkV1gCJPXGV_ literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Saw7.png b/templates/healthBar/assets/Saw7.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4008436f1a24f6faccc1ca827f8d40368d3f3b GIT binary patch literal 827 zcmV-B1H}A^P)Px%^+`lQR9J<@SU+pqKpcISX6urnp;>|~FiGRV=nK?j4WtcZsMijH)LLjJ(n)9& zvn?k>s_cCLkktiN3KuQ^nl72v)NG_-ej6lp=ccZ4@5yF%d{WM;Ftdcv!gZ^XG?VZ`W7G%DOM2# zph&R1eKEn-?gkcTxuAhQ3KINY(VJ-)YE~z4NiTOCtEk$aw2y)$UM_(6swjgj-vgfYFnq9E{x7C@?cv|rY`1@ zEnG@|Fp@_~&iqADth;psG?vmG4sy>RxNlU3u7fhg03eb}4zS8|3Nt7F;mVnuTL2{< zi~S(H$+XhpTUAm(!^e}rD*QPVU1}*BCkChwj{&n2qkpVi)GKT)v_}8{002ovPDHLk FV1lu1clrPT literal 0 HcmV?d00001 diff --git a/templates/healthBar/assets/Saw8.png b/templates/healthBar/assets/Saw8.png new file mode 100644 index 0000000000000000000000000000000000000000..9ceb91b905c33ce7a44c5215c314c81853e77641 GIT binary patch literal 760 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

  • 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 literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/desktop-icon-512.png b/templates/plinkoMultiplier/assets/desktop-icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..130b7d088b63bc9c6d26a526a69401f586005b91 GIT binary patch literal 91056 zcmagGdmz+#-#5PZz3rxJg>f2(B$GoCq7^B*HO3(ogBc9NMo}ZI)xhLwgA~kxaUD(%dD3|{0r!LBWjQq`J%}H^4TjWp20_XQnrrbB){$@D*UnzNq zzu#cHYu8}QuI=BwI=5gq@YT7I2m1pQ4;DWKCTDS~QrVT2JsALc zN!&`SrmFNt9?OP}T~3SmG#$w&xi})uC9yz4USBca)C-$!pP#M9u)L zMez&V$Hz)uNT^~Q&M%j+fvQ8jfnjnnJK&BQ6`2Xn4=p*LT_yP72s?}uQ51#yUG5Nq z0;$2cGh%{vGu}tGo3eecERllD#4*Xi?4@kqk*({7(sm;UZlK<&>OpQz%|mY8hurG7 z0cJ_T`4t2RJ;?R(JX+1x23me@*=?>C;}$15Ncs3AIdcb*Q{vS~wEZWt zKUkp-9#)Cpz%LLm_eR#m*Q+3VJjdc1WMgtLITJ8Wgf%NeJoEXl3S+uN_6?dN`R)}M zancX=c#u-!+$f+6vWrs!<2E3!L1E{@{1_BteiJMc+f3^IA(Ef!R$lp>ZOGgM8ytd7 z1X;8C!0H^Pr#2W?!%%SukUl6FSEf-mQpt= z-sl(^hk_V5Rl&%gpw-awCse>TQWq+37;Ktaj@gkd;IW;w2r&mUU*>|5j)9TN5hKC- z7-p(HvN`bE-%&!QsL1RUzf8cMi@#Cyko-4L35YeoL4V(WNk~y_adNpsR%gz!8M1dW z0R&fwav89Z`mKJ#^K?C#iCK-}SD1U^mI_24(a?=NKa-s4MC8PTH4;adPp&>w{Nj9p zZNevX@rg5nFxy8p!juywN)G2-2|4mVb4K?@ETw(FvV*6=VA2$ib54kuAh|p zQ|GY6gfN6*gMVZK*>S{>5+qhS#a~mlZw&;$*Vb)@05NyH|%%20B zP(?OTfSAWQz}+uK_N&ZUR*TsyTSh{SO(`J-!cMBU`U^dV=+z(bSii9#!)6GLF+$0w zr3&LbiEJkWzQB~^0w#86HoK2$!pxAIl>G>IA<-6$5_|X+F!NLV;)EXEO{Q(pe3ZBc zSP*ossov38$4d;s(h=&0d7lLjpLH!>x7bH!n zlH+2JK#|`V-q7vs+?N5={ThkJm%*e|7PxdT8?mMHh16gp4^)*)=9BG_OxzQWUD{%1 zoFr;B@Ai6263$PZUgO2`6!*wxDcjjdB!H`eP<;anpCJ>Be+lMRRwF*5VPH>lmXUQ} z9RUP}6Ea}F$d6GU6!md_b%K3df z2)?p`U1>R3WjkL4hd6_`{9+EKeXi%^)f9{T1|vh>>SEtovpm0IOx5F~2ySod_GSxMY#KWwT{>LQPoZvWCK>$;EI+}Ducg(1 zS0=;W)~V3{4TH6X!h%S;SZl^feyA$HN{>PdQ6+SyFRm6$`09ZBRAlC|BcdDCmdv>& zVTEzNM3xiD7XXGlQv^fC_yc(P1t}N<38_DeHAZR|de%``2qYB%0+hHWaPkOBY%%{i zxRE#pne6~@z^jne19ihgtb1?TK z+_)7nMwA5XPKc4+XPO~5N^lOs4>dVX9|jh(nkHo$vLi;sx9`Ctx*Um)h(i6Q!Q%GZ zVVOC-dRVL>J}&M9S9llDYtFGwCgOLoN=1HHp&wS&LD*6%(XbO28eobg3Xxx{0VW4| zgHviYoH5qD{6g16xNz$5*b2{P<7y#L^9!xR(41vle-{TcLi`@I+qK06Dc2t z3t-)O!CYOXoxnouseVjVaboq+%5;<~&JSn?$^Ruim?-q{kq+&5-O4HPZwz;aCB`-wWIJB~0Qsmu z#?$-1j(7J{-D2;+jO3`e(S{)OK&kJ{_BVV1!pCb(%lr= z9Oq>7ld-4E565~VKc+?W#LQKsREqqJ%k^aE7d;oU3ZS@UK-L)A1(G99)AC2}yqm44 zqDg$V6K($+K}|CpWDj^vJ~&X7SdZknOG{DE8O36pDBeMsNukxidtn-(T<*B<=0rUL z_Ccg8KXezzq*&6DBIx zKMuM1)fH}6B&RpQ>Kw=9V*pka-jimJQ{qH0RUZ>TaD_D)8M3*#u~^jlV*kQAt`k-t z14V_iH!@@nC9lS`ZAh3}%?s{+7^(Qp8PY9?nCnL+_ojc=_hIK;7d_k_`m>0bHBEd& z#J*|B(L>(*rdcvUUlnWQ;vIy$J_dA(S_~pXtQj$b$y4i$tqo8rq22*E@&bOf19p=C z@csQxFgzL@>GZ!1U#lVm*dly>FCT#fD7k*-PjYBJ_elHlC9YGKK_qik=+_D80j5Eq z^R2F(xRGb8d}?7suZdP-b7#iD>iXSX%=~Iuv@8rNBidd= z+`@udT+fE8J@E2UR{sqc-sedBdmgu+Xdap|K-?0(*-o4p$()R2f+I8lsB6wK^eDtJ zH1hPL78(#siQk-+ODkFbfpA3^A~3QrKZHACv{~F#U%v%l*Td=W=Lf)$;IbDG|8E0x z{e&Kpg9np8@3CQ<q}G^^@bX%2Q-j8r@amP;-mK&ddVm9b&I z){k1)xT87AE*6nY7(@f>(rVt<{G#%^Nah^lq~c88N&X-VyTHl^3fqjoIV`C=>_?5hxcJsc@N-gC&X*HE0S6__(IP#61 zSRrajZ5OsoSP!QUthz3s95z^QvbKXt4$F<(z_0!&|1#=M;>fMP!mLup1CXN&b6FWt?>BRMsGdeJ!)i&(1 zr9UPMM6x?toR`A@xq?8H_$Y)ql~A>RZ6zAY0%H=%L@M5z5hB@TL!YF$HaF%36S1mD zISzfmj!yihssBxpYs!gp>sAYZ_^S{Nh)d$(I(S)wT>PMCb*c*MRbeG{!=2HtnF>IQ z&u2TM#arorPp`>&*{?)=wOhjw*uTryUmTI_0`oVAZU#uUVV{J0C&D!Y8-O4igkjGi zaRy7`{abRq`~Aj(2lH8f8eum#S55dLaX(>=1S2d%dGT=i%If+hOpZaeKN|LK$er5> zymtAINykV<7)_Fd1RR;IRx=#vE`ixOSyjnVLc4Hugr``-?&Rt+^z&;to|9QW>i zXM#|61I>w#faqab+BMLB4oc3S!$wDKJX8%Y%|mf3>7wZdvd+? zT8i%}vS0SMR2RMvB&3|BT#G}9ORJL9)vE2p@MeQ9t^X6+#y3m(L2C&y^wBz*i{hrX zTb#H*V(r~Ji4#L?tn@}|3*P7utXwDE!kzRO{`mbtB*!P-=CXceIm2?E;68jkd56Sl5F$Z&GyaI3&&H z0=UQ|{aLrG&qL?N)N;Y|hWQ>8C+1jV<-RYAI4mJ#tSuQkYhk;cB12rFAkWUxYbsqM zR%(KV*4{aGM}HheXAaarqO~Y7vS7JAZQXh&zd`8`zaYHf--giS#30d_>b_Y?FppH^ zF(>}~FtGk`S59i8uqCzsNKW!wZLCXH&qr)i>FSGw)S)+A+s~Jsm1%<)3DFt1JOX6Fg$PzCA|znrWg|mox6G1P5h4 zNT2#+kt+B4-n&Z;wK+@MM1DRL+Q7vNV6 zJ1zg0NcJ@~^(PMK435xY)n})6MYyaD0EcX)nZXxKo&&6%r2BWEqeYFB5(FEIkyO@f zZv4WFkrJxp-kp&A9XkNPa$(8W3BYqrY_zbO6Epa`KH~YNHuRGYRy~TTD&h)rRWhSp z)swcLXng&?>}#YS7eenRzQL{?7SF88jvoxEQ_4|3*ZXhg%{5MaM69!~?42c$EEj6YJ z8}U|_^the)svm;09Ht4h&|%8sk18wKaWwUKQ=pq))PwIjI8gYB6eV1 zTt}hBGPvpYh*@K`2)DZWBF^`}Hp{;U_$`L7N`NP5-h_qF#Uraj3c1rY11avq(Z#i! zHM9@{(hCtJGwI9ozWuTvBB{F}j%1~>BRJsL=z^?azfL5lG$7=A%%fL*9T=7~Q80b^>40mkI{i#?%aPjUoG83ckW!ISquDiq{^-T{h7hJ5KIcvaXa zdl<>=gCYr0MF6tCLc0!n0kqAqRX{Co_%cqsah>p16HAVOt2KZNK@nF!tg6_>sEL;v zF03YkGTH-l_DS+Ov5^$DKj^sR>DX6sFx?T>lcq;MpM^061V~*gGC7W{p%caG^N>!Q+Lt;NEX0qbzV0o@c zCEjxQi%@{1E0DAk&b+7J8{O#6STI7$0P=4(bh8RdadK3Mkp~#Fvhi;MDB}n$Nkj4E?nNuEkaVEWX zSeyS$xx|UV6V#JP;L+*M7vaiY5W6KGq{-o{gcVNy4*JB%mz}f(lkdZL6E(w#Hm0~W zll1}`FdHS)f@tS)lor=T!oTpk=v{m)E#ytZ-{d2fQrr)9B#}%Qj6_hcgk=&9Y^?Go zB`&qFNzM9QZq1RHf+=dP=zvv}#Dk2rZusKRDyN_jSv_8ER5bl-@ zOpBB@D#1Dr37<;fSemVRQ*nUQtAA&2^wFWm$iKn90JLvIPB|!p>S~|^W84!;VTpls z8J4cBM>!qYL8^So?Ks?KxzqHI3;O{jKzg9+D1HHfe{N62>a%7+V51F!*<1Y$-B5v( zVHKYq%SXyY$B_a7Ee)dc(Q0gHHSLff2u>rQI0^WSpfdGczdZ#Xyp_)@cd*qV*s7`!TOyeFC1wmgvJ>?Kat{?<9rcmpIS(oc0j3- zj<7{f_Vph9De5*mang(NmfK`ERfUvR!<+kK>UO6f)g6UsT7f(7#`G*FNAev);*bq2 z>hSSYC!B^jVavKJvY?Y6ih{Bx|D@Eleb3vqSDIn+efl4KW2R*E1Qmhy?k3COKtyKt zL+;2%ax^64Pf0}b9cMJOoF1rxQxzNvqgL#(bT8J`kCW8=6F6up2s9($AhX<=hvhC3HMWidUoL zdM6PCKJs@T)Y{a$7*YL^XjsEFotU8K8)UzSK-n)ZENcuLs+IZ4+>}fB6)8;l`P38Oy8=|4FWyw)#gt^pD3uOnAec$vRoAM{1>qs47gwy8<4Nu(8Uv zvlG}P(5KDKKA=?GhG-Wsk^PxLZ)yjPdzC??D`FheXs(Y~19%glJ18fP8rWE?W&#=^ z9Y`+&MF_e+P%;pNhgPOQH`eZ%~5 zW?!Be?8XN~nY{k~9puJ#S=iz3hBm6r4k%5`{8V4O%!O(LvC`{rTa$9XEAzdFQJ~9k zZ^oYy`)LN!rvOu+C_!a{gOJKb1L-?>2Eo~slhO{`?4~?*LFz0?7Z~>eohK)lNjH|T zy(>dN#}U10oauS%`@QsPp@+-Ak@%f4v;R5o|C|HKJ;|T-_qW^cTQpw#R|3UyDhPW< z>~Y|xctsW_3&RV)KKOnjf>m_j^8xnQ?XPo13 zXTjeK_Tzc6NNXYTLyL*h z?CX37h6z~UFxYNKyRz#6BGKL+X_aH38Ok-WV@$Aegv3}YUC2nLt{EbLBS$Q)Ag2K- zZKs5s5w+Y0#!}ecuGz{AiM2{}Q&sBw(Afxy!W*Ysc3fQ)f4{F}XTA8w5z`Zq|Hwv#c&0c_jX55V6*}(wZJl-TZ|IV3ctVd<5}UOK+ga(>R;9o^*GSn+~Le^h<$ElYOJR> z{D-S(@tj41xJc*`CqAe=-funqo~8`4d+z4-;zxKRWSmEcu|2mO-C~5eFW@M=IDwHf zQ{7b+zY6F|&wZm~Ta6s(TY)z85pUSLO6~pQ$n?2y9E3zw?#V=zJnkqwuhkT1D zHA52&WpG*_0b74^CFzN~k9mEd`O8a}t{*bjEG+fE;pKIPKg@rW{PPOeRay&q!sIp3 zs#ay|TWzo3|87=s)lqgBTDrNVw@oW%fHR7gGV}WTU)x_n;?(P&@Y?S}Z5Zu0Fk)hQ z*ua2;k=@ZFTASdJ$9)~TR>8=IV!H#>-?WI8wbZ*u!Y%puF}%1xA!8^8$??JX(gWMH zz?J4NHS1ZIF3Dce>b76HT&}PMQ0dXc;Vp+k zTTRcgUvxyDelV4R6eZneosnEYb-U(%Nv(l2d%emfWvFo1{s(=6-lX`#6qNh3x36i! zuYUP?ywFSi&{yk}`%O=S3-Br4q}1`26NTHp`o{*Z<~_qNfABk#gzXk;Wf9D#nhqweR)Y7mh@p%l>b$vC9tA;`o z7BFgxmJXg;B6Gx6DiAP}wHE5(1y<_kE5u1~9&g$wBs`1UKa&`9GJ%trn#i1!3Y^{F zNFO>2Yiwj>QH_n%FV{&th~cqP(J7NNb6&ZjXDiFbHdl|gQTywsMD;~jIoYuJNu~RFq+&}`C1w@{fYHbhIg@) z9hKqn+5|K~y=VPV)#%1EAKa{@A9iF{SN?;Z`VKw4 zVr)vC#3nY<%`%PLR17cAA`+e8Hzu-?vYk!UsHjAguZYU$%;jKbFjI%#Y9^SdQLi|g z+B|j^;&$i6*lU0_QTASX=k4^5AL*yzlZ z82huCO{QX_>j!Q``XBf$^y*4WDc%px>ropNHHHWMzF2jN05+)IAyc|dqIdDGUgiBC z5Wm^o+jbm0cd0Zq?rNNU%uq;@y+snoF1GCA?r)h<_B5Csh0Y%ggJ)lgIs}wl?tHAZd8?C&_gB zO3V&foY-XR23$t5GD`kqB7I1bqzLT3k4%Bt>K;~{8C1jz^)HWUm{NW@t z6yt<8=cxD2GW*`UZ;@4i-DzYO{Fr-~PJ+ofxx0~6Bj{FmVM@pW6dIq~!NhjCg`sVI z-jH%TEU7ds`N=r0YZu(ZU}E1$1q)7}kG`P&s+|Ewk?8(+0{5I&J1@#b zFU)xWv3(Tqmfd)C{$0H*_$Z+s>LT7dV?qPR*idtd|L8H!kdEtm{0j35li02+e^oNQ z7CXK6r*Z1l;8=Dv-ykYycH{u#xoS9_QGd#Or9`vDMbTi;UzfHonHiF!tf2RlBG zbFfIVzg>Dh&faq?Gb2k5s0 z#EY)WSC{{#YJAx^^Ycuqk75UpRR)h~YE;Tm*oofxoBa?B_Il@$tokFK)5)DZ5$_N) zbhq8k19oK!QDbTs(pt_hw^j zRp?HEr~;W;)~BH?i<|~hr;sQ0Ljywb4!_}*S8}@N>#I0*O!0JyS%8l zcrS@qmro#Rey=I;D(B*)4%WTPA8pg;O0xd_gq@kBFfll&0qHlO_!fRGPX@+Fy&sYJ zVHz^y&L?NX^LAb4eNR>Ni^Sy@@2f=Fd&XV8(+r96;O^d7KsGxhH;#BvZhBasn$4@S~U6sfMnfW_yEjg*-*AlUR#Nvvu!k7iP|mtmg5hXCo_| zDqhh?LrNw|l`O}V+39pcggTst-}yj_*{-RizBHtmb?}&;gaR2=u{ZPmP}Ty1iE|Vs zclfQm2(SO({&j>nlu?rh$|28w9TGenj|O1e?U|2<;{ThCa^eojmxR!AiEL++1NoTO3E+#7GHD@UI&4?NJzaU3C^x0oaT* z$0RQ$0!#UyEL)FsxlE%fG!~5*-zO|+Of)FdSZG2hL~|@;5V^Z-DN@XnVe%HeV@sS2 z`(o|OMRj(TfOV!&GQc~kNFYHSE-Sjbt;j0VlOf$`L2=BsiO>2ciAgO-VNLpV zvrLrc2DdkbsSh7}JQ9(beY<8o6j3PH$)oHY3GSje67w113YVOHi+d$`#n~ zSOS`39@a>Dl1htZ+hD@|si*|a++~c|BodvQT5BWIKnBuSutbU?5D*A}FJmEjrzUTi zFta~EAzys4D{-%f*+qT*2Y1UIfUv!^{}u|g!^S9axt+(5+qY3-T9BoQ{BT&?FcRj3 zFMj1q*MzUN7Z<6{qSwOL2j_jukDbL0lA1~6bFupv$vOzrg6*cTX;>F@AS!ox*Sa)j z-KQ&N??O##VDDym(DZUI!tK(@Cy?rM0iyjp%3l9?Jj}d1X6Syo!^R{IYWBn>1P&;w zopv(TUK^4)1Raa>F^p{{f{DSWi6o#UAy%YbLe}EOte1wpOF4{c9*dUBJ{Z`SHoFm$ zy^`grDC6`lk7k`kYAW^0iyNx;US4{2ng}4?IRBQ{4xXGO#~CIkQ*Q$TA8qHhheRP< zDC+WVk9>SpaiDZpV*6niN(cklJ%BKTb}>N^Y(X_(oY3SPmn`+`?6*lo0hcwh4-10cfs2*x-a;7zk=tIXq3%&` zHr#KTx6d0X{ufITZWeXP;Oag=;O+g}^7c_K9`@3c@3`_XRh;6dUVH0S_)ZS^Ku6>Z z-XJ&rS>z|Kt8T=|s~JKYY3boZi>lR3N zWh_u_(oZZ#OdMrz5oP}^bPO$%N(Y1>$^4A?tTB!gHwsw}%)`OsNa9tiyY}KFAa$Q;)xRsei-66Z{ z+q+r?A@@A}mHmM|ztLI&XQ9ZSx4Tg{KTkOZZs*Ro3pzQSofGYXXOuFi#rP;C>H~ef zhyZ_{Bjt7NN$X<`F!fGAxnK+6K}aA7%DEHNPu!J1In{|1dB>5S;4_&PetW; zm!s?h2LLV{jh4H=dE8;C#`l2~br$aTK7blCt)!KR;yWy*xMoI*x6lW}W5jAEXxQd; znCEe1IJvu&J$_3qk^DxpbClo>G>OL143gML&Ahu9v^i;Mie=Fs-|YA zFvJHQgQP|rIu-y_2Sk8JB1`L7TuF=|optcjyv0;_g~ZA%oVAfa-QmCXDs7!P^>vv# z36M~U()Zq#qB;?Os?KhMhDi-}T6#5Z^!gbfJeNwLu&Nf8UPTr9YbIQKD8OuOYkce+ zn$L$S1uZb6xY%Z-arrB4H>1NSDZbnPLVw!!o=6BBPsK6d&TL;R>7$XJ4^xb`=?mBlg$QaRv&g^sMpX;`8Z& z)r{xUNzNjR#m0c=Rlyd5;CwZr3u##JZbfZ<==dk@)3wy)GYWHV>jhnT*ryWL^@tg( zwoldKnkmyAnQIm6ZxEJ)EquX7*_Y=Be!B_K{<_1rNl_OOD{VOwiU6)flo;xG5|r^n zhx~(XW&Z;{(Qw4j+WL2J2nX;skpvBANvq`5Z|{zjG(A`~t~`_F;u0j}(OQdBppxPa zz^^q%@LyQ{b-o}gFoCNgRZ^=ReS1IyIP~py2Y>yG_sh>*h4TG8?o8<9WMXnq@)y({ znlOiCAN_j`clC;34Zo?l9YD9W4bzL^@q`ZP4tfP}iwekin@)o9FSWymy8UA|D-KsU zgzr=^&t?79ofRBWGnCe(rU;R}8=GFWecW-1?65_462inBl$H`8oJcPSy?!MfieZNh zBEw)od?_*GaY}FqEv-?5W5$;{iAN#^70xHK!5nTo~2G^CrT_UK) zOeb+C4WOBZ40B#}KN6QiOUJ@td|^Nzs;K zYzk8^`=bK=Vm9Njuj%|(bbd}T?^KA@HC=`c#ZR-=MnLmi4ejjUh3h6VIg!cBeWk9R zQV2=RR)_E)p_K`){MNA4${`)6%tf4Hud>DOyY}J+q(k9hic*yUHhXM-@BF-M{?c3C zeEUTEgn4r4WE}Oj1R=PidQkQuB%&^F1B7c`;x8Q$S#sK%b-%DCpfhc4l_84E!+zR0 zvbZkg7Sq$M%l}#`Z^svdUl~ff1vIKKReNMrk-W}8*zICSPK?JJ2sN?Z6%YU}hJX;1 zGzyIllKez?_5h!>+anItKYL3PuW~aT>ZAVi!n(&3lDfzu0%_t@$VrD|48BtZc%1k; z(t6@lcl}`6%wM?yh&lXBa$MxPIbVDzLyank%`9A3{NI_=j62~cv-eEzx9lUdVALs(fQXH4u<@RQ8 zZkn%{2Y5P{RoKAr6j7!xPCDUsL-3S4A~o4-1A^hdt!Z$#i0k;9r?|imAZf!2w@fa5{vsSCF2PjZw39LkZ_(_%3vg z?NjxGYxwT^9kQd@PU5+><^5UnNWy1ab<3Gl**3eBW>QST|oE4o0g%!S$0E8NKK-ml7 z&%K`_WznFgt~RUWfG(+q!#7qyeYJ2(QlnU{g6(>b9;0>FVUR3|zvG_JLsJNv_MDTo3WE*`dI zZBxlkF;kq*YaQK#d(`r~CApc{*7y^`w?UhK42*B=?9U5|w7$A=D9Lbbptz|>*932- zEplC&S`Un<9V+2X!N&`<ZT>@+lIL06%~Lnj5uBSy+IqRf{nS?AR& zpwL^In0Os77uBecV&HRuWs2R9lbBtv=^&{76>Q+P8=(rj{?rZef3kj4FCH5 z4rE`jLFJYZBvX?MeHZee60=|WAI2J7d+7X~fp|V*^>bE%?cG@y{01nD${fAs7U?M6 z)feKw2|3V!W)?wY`)FV%ApOEKLfWPr~o*@AYB)v2g z5vo0hfS!Bg2l^`&Q0NUzWEeMvx7G6ts|5`V(X3%{0v zmsS8h@D97GiY7qR2m_$4L-`7AfKebKzecBOr?OS=-le89Cakj=F`a_8>~hL?p!o|4 z@=Jh0xHtZ`jAZD;I8wIBxxV8+$0~EK#$!q7a0^( z^cb}Ju#Qq-I~ZB%h19F58f_{&749y0VTpC-pwc&1vR25}%AL|T=;>9fD&5>vfR#LF zp$(5S9>?!o3<*``+oRNX$M;=$Lxoon|YnS4UvQy2N7Vw$6w~!+1v}ph? zri$z+d|o<8R44e9FJ9Tka-_V~>}A+@)ejCOgnUcp{SKXmeYsf?RQuiL`k+z(nE~{C zMnQDdr_qqvqgyV9B#A*T0+v_gSvs$nIdbJ*sWgu|`@QXJt)m zJ`Al-+ap~1QT{OL(3RBsOs)z^7^HVBZY-kWFh>EtR>cDwl-N}Vh zb@|fz_2{rRwhIh(xP(SWXNOO}copYI#LnqC_wki~GA z8bEy_V3jSG{QCLg+KB7whh_M%vn!j{kh-*{zW&HZeypod=p!e=`mN=p^pFF>{c?h| zB9+cr{^wF)cR+8GK6J2}nziwVq-9<(ehr-XZ*n^X3;z2FbW&d)BDBa+Q{6=Q$h#mc zU?fWirJ-Kw6)=9FZ(h?C6M0^|DbL>Ypk3m<%Ynb`ioSjv%i%Zpaw1Fw+6y= z#=z^q2CasG3Sz}EK9S4fUq4Honn#l17#JC+e!?XdL zw1KJST+y8VSm{i=3kr@UTRf0eMBTjeiQmwZRXSDjkzu|J59@DEB1 za+C+yhck`o8tWMIo?V%bc~!Xn0GGD4$={c}^@TCu?%bQ2u&n+eJP$RC|wO#XPI zIR0GJ!bDkjR04^l-nmtPT91BE_4%Kxw|fI3>egYZw6f); z(aWT+Zqc)S!wKo@|5P`YzTIMcQ26P=C+p#tuc8;mpB*2=QTMwaki;eiDYPRrn+TJl z02kbI_>qrGORKtjKg*G-C5F#<#AjnvWbevcm-*{I2D#Qx z0YI?EWJQtRQt`4m;eKk-l6%qga$$^g?soqOTV!6 za-h^)SU>|2)TwR5W|_&U84XwVEgb9A(_6R7ZYRANiZ35|Gj!0?$B~;$UZ4H5B#W8# zA+*Xe8}^c{_>fn1w`uLKkvT2+_&@GB@*hnE_!&zQ)}CZ3?g%(3>@lfL_{zNcvH64P z>$5dmW!(Zs$}Mo5%tl(oZh#j}uwiyG$+1XCAWPEnM!@Om_b(>Pc=7f&nD}gA&3yKC zIo{=)L>*s!bwZF9I#H);LXpO7NV(NHFRKTSL2wWZU9}&*wUESiQqhS)zH%zW2KyP# zMMORzDG|jIlriI|&z{H3%PPd!8J4*kDoCFWxkAag5c1$x-Pkw~x)qZM{Z*z5q)hu0 zw*IKN^!ME?q-8SMDP^h1c=?^9HB=@;K;w{e_r|kt-O4ZSjw*q_w{IsN9Qd@wcuM-Y zKUZD;B40g0{sLP*Qa&wBuiyXiQv9&uAvqc4s~|lmxQI%GuqHqyR5JVse@-C3g#c;5 zFl{*;`1p8r{F-bm3pG7{e}tzZ(~@h8(W|qrt8k>gAS8F8)fL)JlD^k%&nsNdfXHwQ zaKCq{uVZEHHWl4;OK#@<{8~RKm9_DtO;U{5(+nSk526-bD6HYhav!JAa`SRiW$$@LdShE z!Q9-`E}%7-af753b)o(^BW8Z`qchU*DAWi6OUi&Cuf zb5nNaa}4QCb5M_AN2zPdMRk6Iq~ko2a<>;UEogTU~_ML9)^ZbqxdXn7z!L&-_reHjGV& z$~q={k+oEn`C>kKed+FGyo)&Cz-OuY%>2sqC|csn#2zS01$FOo;AESP%nwZ^IPOt| zOVacm724*CDOJU_KkK}#q?S-ZHB3!SOpk2QH05a;iwK7fm>r~ZgeHkzuvOB!DHl8U z(7DZ|E&lLajpE_5`&`Yln*3tH(`Q(Qa~mypKBb8oP&KZ&lfv!E2NR`mE2V?7o#CZ_ zzIK<+rr8(mHt7={Cl39pyN9nEEBnhRRzjjWOHMaKRi=`Zb(vCc?hpXrO#sJ;$%YGj z(>66O7JjO68BoX^;kmVS=cA#i#HsR;#HqwghWg8tGzMUIU#{{eeEVSdGO2t7aDIrF z8(&3l3h_ zBZ^=(0L^m9>q<*|Z6$PT_SH=YoEr*C{K=O>Ys-E6g2EApJMF0Z4x*ztit~ z+C_ZSXYS!B!O+?bG4NIyE5EZio&=9wrKg^X>Yvq20Tr_l%)~!j7V^e4eW`$lML>n- zgg#onRIl9-Tw30yN4&1@1Zu;2LJuj|ofDEkAJYN|#FjT@*kIOa*fv(b5qk3*CCM*(z@rt<;xeGO%sbc zyiEgdsUgfzin%GZDWuG3$?>cz@#9pcABjY7pYY2at*IobTgUNh+S=N*(>xum>q(^4 zdac}t&Trm6JSu%CxRGl6>Qbi;38J!TSm?7!dU+?1$v)LhS4)rUdV^IU5GAMWILA1n zte#Ni3kk^~AeNGIqx3TC0uun^d7H{%F+s~ZTN8el{~LwY;mNjBZyvXRbHxL*04Z+cE^;&fge<>$ZG3d%!3Pd?VAx#X}K*i@)tF6BqSRW#E z>qayvE-%fF+8!wHT`ZF2%IXA6U&5pWK1|M&)sv#x2Pu<*{hmcjOig=$D*rvEU=01- z3!D7&7}v$B-lh*O?}nZ1F*R+>yP(QqcxhmG_H9?3Hf+knUN*7GF5H%RXp3wQ7uy|> zTf6yW33;M}g3m1;t%0_#xVZM#e$u(8WqYr6KaHPwRbN&tIE^R46-MV=&hCe#^F2F| z7I#20d1tFMVpv#k_`r$7UR&OOr)mDjgCk}~f*VSAbE0Ku5ei1(k{Enh8~gwU=FrFr zaR|_gw!9a3d5K9gW+%%aq7w;dsIVR`d^KyG!{lqld(WK)sJryx(uW%#_8sgJJqt}= z(ttV(NxY(w@G@oPUsLjr{ZnT>=YE~jn#}Z-lU8Hjzi?ge?qCTRWf*3azw2K?y=#L@ z9>;oaErt0xx=n7tX&6i3e^;V$Qn=wh(i(+^x_1{5YFMgQ*H3Fb^P0B&a3+mYdyox@ z+rbvlnPqr0HMhCTCe|3X%^@j(oXnD?sztwW#0)Yim~mkPLJ}_A9Mw2Mfy}w?p0jBW zG+Y-$E42kIp@OSo_F`+czb7Y_E8zV?DW5U_{zwIX@x0#5wUi ze}dY2;BCsdLZeAyK{6HvoO~`WC|z=|H`PR&fbWUo3%jC4M~+_Cfe3Cs)=cCcheJ6k z`-vDb9xyf*YSM)phrMXk0Oe_1294dpDHEs|xMAnaPlX}C>W1@6o-t=nDBHmN50@s# zfz*&c?jwCvGvn2cEArxVP3K7qVsh8j6ngHcm4c+19M@f#a>_**bT~|Ol<-^|=xzba z_ZtOQ@;LR;LBo!St-Gdt_^Oz)x@+@sFzOg${+r@|0eX;C}ki78fRb-WCI z*@9Im^JAMbIqgi&O&(kM%{=hvy=%ln^_tOkJ7EVG9Ex^Z6_zIA_aOLYa{N&J=>H@u&J>%On+{l2dIzTUTWs*x&0vm*O*vZ4wQ zI->Hez4}xnEM+W{v$CwcQW(8wqdY)Q3?}-$P-RqJC0)1}h9(Oti6J~3J62;hBy>hR z5GG*3)@^`W^j|@D*Fu!3U7=N(?1HNem6_#%_oT_>ziQy=R7GY-7eIdod#!w}-7H|B zry=cf{f94Ji_9Ye-HjqgwIee6QTZw=OfYt#udBg`Fb6Rzar$pC0a)uR2G8I@SOH)Y z8!C{3XgzMK%1EmerY2bLye|v_rk?H^#ZL?geZ#5_jBkP1@*-gX@{rU2>l~M9>rd`H zdIZk#HyPbkTE&q6GKmxV>J{6?hHa<$zS9|Z$&I{=c5|Fp5BX^!Wt zxma`UnGoyVC>rm&CnGf=Mw1XYmt;s!zh7}(=bwd?l!b($h!C)}LDS4NmgEs0$g)M* z7ZOwNtLN*wDF|70QLzw1DC+7)!e}&-#S@d2fiybRXhgT?a1hEjRn!iGx0H&shoxOF z-pWfgIYl)GnFC2&yXdydJxZ5sJ=Ou|;Gn2o-xJZIA%D0YRuf$(o)5ikruOc_Hj00?y^i_>4!2#|=;#?C1km&c{Amv^PL=7TU5CzZGbu%!+60KY_ zu!}H!Xc`1kctUE? zIc%ztQ4e|KH`Bi2;=a%(^(n}{{J`!#j$Ek`qLo*GYAk|Bl8%xk?!!S^Q-QQNVE?A- zvWTT;@0D;Vk68GiJW@;3=jqd<5SgytUUNYZCXkl~;-vE)huU@KT|VJMF;_hz)7X1g z4FbJdMr|VXI`xZQtn5AZJfH20rl`3GZ3^c+oAeaC&qeX64x$6alNS6A%IZ3UX(_%~fJfEo;p z0a+Hnz>y1yBtQcXqHqQ{hd2xyJcJ;Xnht}~i}Skm82B?zwHIfrw1~vb^ASo zEAPxtb;X3Y{5>kfmI+XhY(SCosO*BZ>FUg_n&qV1aU~ciLA8_s(Fkw(fOi;PAhcW> zi1>hq2OnbO<{^u})a;;mrK$zEPXB^LecBXWDefu@Vk>%$oECxDAkPOb>M-v&sAofx z0&GSBQsbvu>YRhk6xWOV;$nFy7?68}Xdx^h6%{iTDuZlMR)B*RRC+su-Oflu3v?RD zX~Orb%w$htJ$p$&RBsn}L(T>OzVcBia&_Y`Gz2NgkN-OO>Uz55s~F(qktMGx10&o0 z??ynSYYVLX%Im$#f^c{m-H!hF@`U9fxc8><+V{H~W0yATd+{LgLMxZpmb%BfeoD{) z5S_?sKN$-mKg9Qyj8=vtC)SN5O0u)#X7R}R5J_o}RsA=?>I>xyNnBIS6srin%m^># zypho5iBE;2Qv~%8^%0&hI9a7aUlGkVoz{!Dp6eySjKyZ{5XWsp-mn%8>Z#bO1txX^ zfEou$X=qhtY=}7wOL`?#1JH5rpc-^K?opRN=C2@tjrou&x;J@tn(hsO0q*{;7hp{y zXQ%70-u7<4h=G*ob!Sz5LBSN>{3iMunieeFzCHsyFltZfMGGLzse zAO3->bEO%xYA{a>n=pkr(l7>b3HRMa`a%`;F*9;`$&*>z&b$K*v-bPi-93%eM0+!y z83)ya9A;c;nAQqbggE!2&*7mBvyHj{&ptDzNww-ux@5i6F zYeF16qCb&iteP*C4XK8!f{c0q|FRUy$*ix7|Q5}rAgA({6|uIj!(W!o?$!l zDvnSuvrc`TKeabe0adkbEg$wNTJ7J%4ve=$m@qATuz{$i^Hm9M;DvcW zePKcNxoHcd*0^QE=Y2&;C?O3^PMdOo;tYHkQGag52s(nsM&l>E2tu_f7oz zmte`b-?S7J6$hsE5p*uM--|mR77!F|6k`-0!@(y6udPI^)pQ0wJDnRJt+$M`S)x3{ zb4hp|WQ=UvU|&kK9u7~4LF2eHmqrzgj8^UN3{A>tZgKP9w_8hLqcQMotE4t}G{JQB z)~LxFvsE*uiSy{&5|>NuLtgo(hDZs7i0BD99K(1%pe!Fg!$E(4dy|r+(s0y+>oof6>Y#YXi#^e_Tq^pj-=u6Ik7Cw~B7?hCM@WS(N@wM) zZmZ2aTz)-R@J49;%Oh|6j~v}v(TiMI;=Xyur6+Bw-@Cd#^!d#9nc#6VIlLwXxb9+6oWIqHg8T zQkNQ5bZ|DJM#z{lS<~8;umfDMHV$k}ZDzh(3Zpi^D=`35ub9>5)(Y?5m28zX%Q-u{ zxe-TgN>p;##ldZZv}m^oD?$X-N)~lgB&JypjElZ~9L7FcDa_=Eae@Db!KmM~27ZqU z7>4`P#$a49voB3A%qOfnpyAowkvY!!l+0q45%1~oC4N>>#{`2J>QhOqH=bFUz&uM%9(bBY}W3O;Ol7^Z)b7^J{Yn4l=46A5@jM|LT@}jEJ ziQ(VON?Mi9-cBhwvN`$H#co#C;+#rK6=lkb}_7P(siVDz>bnBi+=5`ECDsbd%du@}&Uztq(@FMOpPbQv zC4NB8$RqgpXid!=PYz6ve_LWeq1MJw!0HT>G5F^Uk7|tJktVfS^BI11sbOxZvhCUF zY}z0$fLb}n%cE}+6cs(ux0?d@4;bGLQ#y;j4UdGzzb!V9otgP&u)ue}tp9X0r)?&w zd|CrTr*B62x6Qa37-DFhvl)M!6Y|A&gRXx)_5J&`Rmr{Ilg{3`c4Qgnld_9``fWEiIN<~$pkR=lReqf zW#1l#Id|{9yO)r3`GFq7Ung~E@#BBmW;+caY;fm8M*4J%I(!Q|CcFZJY*TduV)TZP z$6Iwhv@u-L+S7v*sl2&mme&Yr8HIh;M>Mn}^vD^#4zaG8E5TQ2>O)L%b1UKcm*7|B zg56@uN><@f2_dG;4W9DkmT~xnA-oREW{Q=DA+C)%gp1gu==47bd}I8uDN0KbjHx~F zdgb+?Fg}3A(XAtWg<%osqtYvsnC3Q3jNXU7c?msW=A@-&} zpZR(`Wu(vQcBw_e*4|EFLejUUy`9Fr$ih3jiywo3eBOKiC~4!b-}zpdH&w*i6zLTb z1q%4Gn{DR{acgMIvfm*+#BoH7-g1z}$UHLjmI@}9J;JwHrqKPKE}_CvSaD5jjc94R zOym2hJfglmzFM8flgo!-L7|Kq7zJM%oslyN=E>o>q_#sjw7EP)#R@B$#3MG0+7P3& z5k*7XLufS2**BLsQMbUDtxEfQZi{)|^7Yq2dk*qfPNsTs@k=v#jni|y&O@7{Ug8O3 z=ls(>0 zZqQ4xW3Kb{k7++XN&bkuP!OzO^<(?;C*|++N594Ctmwq=s{0OJ&}bWMP8r1Iun*Yf zr4WtJ=Ny=McsxHXZL%P3KuI!Tt8ieTGa=X6!sP1a(7VZX^W7i8XEwh(UmtrS8k4xS zGtljG`%R0ufk&HSj9xtUP|)dlL$rayicYcDt&9~^m_=5{O?==M0gJ^ps5>s?cC;PZ z?9TMdX`{$_Qru@XG7k@v#5MJo{iwz4${KYyn3N%-HMt{zE^Z|-b0bD=BJ_*dOX|@c zF{B6xA2@uQ37x%3pwqQqhAFg$g%!>CDGe7uEGhuB3-WJ>Hn?yxVWN;`i$=J0Pq}n2 zoLe&Y&kpwO4%0y|t0M?}koF^RZYp?ij=yCjI* ztA6rg{oCs^CF_4ojA_2IS=(IoEL%o`vv=A@lT7J)&#(C9 zjjSMzP8Aq=aB)FTso6zrkr=)E(_Uh28C-mbqhZAyF2-#MDU+>b734982c%B2l@w-t5(&=|}-5c3R6)ei8F$!aejIIbN#>%bQn6go!jSNO>)Db;34`zOI z{ZQzHNO&b-`u*9Jr(#7Nx=Zg)zVK zp1aw0;MZS!q-<*0XoLLBfC;J8pa#EmWs$Q-ZhsiOowPnVdEqPj!p;JHvIl$Q$mWXP zojbLdJG#toV~$R~n030>nQ(CdgTV?t*F$^=XV5l7EF9vGd)+GR@Vd3E z9>d9;Tk;z`-Q0GuVb)7K9$QGavuP<}Yog;b+XnB77qM01!`+{v<*WMD5!p1`1JcwL zWN^B{k>dLx3zhC=t%LMvLm}J}F0>UsBV{wa_!<=uP1}sSB4e6M8&>?9mno;cxqU$V zLK@KPOT%bNciqZN7EMJTgN;C22VqmRF`0z0fZi;<6cvPjIu}@+l3ei|U)M4Fbr#Gs zCKiw9&P*HIEcq$jF}bIqWU$_QWbV?+4BUL#9eHH1J~Y4`Sf+EE!@JL0eBFNX!TH*r ze|kfw}p^Q<(ttjv?j=JYOUveUPhTNqn42wPIjdY zD3frN*xBr716=p8 zh1-)aADxLS>+bKo`o&S%V&&sx?T>e7zG`3Sy!snPEC!<>-lMC)oqvt$dHY+wuVH*H zTe|J=Q!l<5JK=(j&eJ?Z5q&P;P`1Z%&B|2;z>-`-q02&1aj+4*fa0Y)wrL7n0<0Nr zC`y^U!tOu0Bpu|sVFl0vn9>o{5pRniodR}IuxCSSp$FKZmg(E@Y`+z^c@u?EXtQge zG(5wvsAGzv-4=@2(Rv=ZZ0Xl#wKbPbSHsH6R^FL)UOnx+`fZ8UGdY>G5w~E$efems z?`1+_aqWq+QO(gu5Pox`V=Pokd@ijFn|@c!xkJA*jG;%K@VLJD_4*$#hcUaQXTGIv zX`6qM*la$qg#bjnlA~hZ;M!)Nci-v$VCb(*x5}`YDAU_YlC^0Az>{(@wPR<#X2W&0 zyW@uPHO)=&&7D6_Tr1X2QMrINR5u#Ag;zF?IwV62iZ+OrHn`uEx`Z0BX`6YPN6#Qc zprfU8N19cd&PP18Xy>^;A3S~HbdACK zOUv2|yG6^v+3PD4r@RhD-@VuO@~B18E|p8`v@PSB(G&CPS-n4Ds;v>gy_6B}1i&)b1O%A%CaEdJa{P3yULaVz%eT;Sk;eAoKN&FDjYl?g@| ztWN)2-H_Q!4MYrw;1h1>fyEja#&f~9-~|nbW0Q5Ehq~Hr=HQcnBfJ@_OLO-l-(gp{H4=e%-3D-tsp4a&w5SyL1Y^2u^2H%R^d}nPqJ!=UTgTF4{Hc zqjiqI$?eJ7d&`aA`KOZBb0;^lUVY=7iTUtpQYo!*`?sCyE5_f5tMA@_{Is$$)I9R? zktAhselE~K`H;S0d;;I=<`CD$w;MIW-en%--W6{(g)(P_Lw8ZoTl+3C>q6`UTTjoFgm?vqFN!WknQ3p@b3+RiQE z&iQMiPoZ9Vh384~l1fKXhWfHPaNQKKi>4cuvd+dbakr0`8vpjt-*hW%f9bX5pW24O{nwtR_-eiCOLDlr zy8lUOWB$6}qvX9#Fzw&-Er|yYJ7+te4RG0=#qr2Zr-Xu~N-3)xYZIE2o!W`O0Xw@7 z)~%3sIo-Ll>v?_a*S(Lg_Rd=DeK)qBz|1Z`xa(YgYY8&Gdzy37<=u-H| z`QF590j<{g`{b+d+82^G{@tdi-V<^tbtvS}|K8(zyaIg;+ltvh$MQcr>J+oR49B9g zIvMl!(esgSL|hpefPP3J~MKS<^@G5i&JiBh3eLX#mv;gxt0v z{2HY!KYr!va@D4j53lpoy0rySXXQK>Qumnr_)Q_Cw=q=`(8~=&Y$VpuqhgN7^9mfz zJ-qU+r1+6@4BC11^~cH1tEQdil9BiR4u8e963(k;r7`^puDp`hOSj5gKjl@{UUGe> zozHeEi7<8Zxs<54UW8cgTcIy2F7uc8X2W0qccxCCLf!bAxI&MOGkZ_= zCX;@>b1lMmFn;^fU1yk1jD)Dd;CuxAPBCK3Xr*d}wB^_Ew6G&&LDZn_8J`#}?fYD+ z;O21;JN>Yk>^FlwKMnkJuhZn}kC{73KW5gy%qV~OGjc@Y!pT?1?nqu=yqXLAfg(bu zM;o+c)7vik3rXJ*SD}hiVuq%{7{vn!|a>Fwkxbft;SOOaU z>mx`yjAHasr6d9(o^}q--|FwAhU;V3f^yipj`~N7RpJ$wkx*x7L!Ah@^Mmi(Q zfP!bjlkMHeZ#75vXs=@Kc6`%9N9#efTk*W|sdSmt-SI6UD>$Kmojym3u&-3jFOfT) zZK~!e0^EBbJ1tG=?BInyu>s5U1JRLijw#%HH94&fn2V}iVgz1 zmU>90KZ~ZTxLm3`28PR`1wvM+?*XCnSGS1PkcL*dmnl#Q!ncgzV)%1)b72iAdWSA1 z7cvdK#=~1q5r-Xu)~H+@wJ2D;O<2OY1#Ue|g2GSGFy4O<2k?u2M$6QVU#^0CFFbzm zb(nsw30=u4E$*$c?)wMa5n!cWC2}WAKS@PS4&64n7ySp=NMzD2LZZaDzbN?h+fOGi z93S!C{15Q7?%e&ap1#`sJ@RZ}$L`uwukE(T@b3NWuFS{pq9 z9sknoWoNJt*Jc6Zp5|SXkaK;4Hh31#;bMwCb{{9?-zg6EZP*;0bJUkj7)!zF zL}yn-$7;1b^9mg9m-z7oBq5%BZTul*JlSl2XQ&4~`Sjs`>0`(Lvd4(g+((huKfDTB zeb*QD=gy9aM0~CA1+#fGi*MI|%wE_%^Y*vxKA@Ik!bsbB6(}Mdhb=_Jc%-g0v>iTN z%r5fc@<&M1b9waeLV$UCv>w)n>rG!)H;CtQk?}9{5Q;_~F?!GX#M%zgM!vQ}Fr8+! zDHH?MIXCSkkB!k=r*{;4G-ryy?C;lD@zb&KF+5mwXQpN@EH6H2aNcFhPwNzA;SmAY z#)x+V)PMffuK^X6vT(OG35*d)U;S-tmNXm#%k>;FolC-o(Ki68l00<)U~R?UzECD~}BC3r(bTVdm&O(!vN zUmvxtZWRwmcdMQz5iJaRvrY{|R1I?AzIc|_kA&AnVw#|qb~rj87-&3pjS|rxovSM} zD=jnHAT&l6TNnTyfBJ8u(R7cVGsNno&S@7*-jv2J+%0ZAuoajKOjaTKQFc5!T2|kq zf?=WzRnk?%;Iv7VG$m7smnxF2Gf@w2Wa6_sDxbTJ9(O()7ZBN8ibi8j6wodg-~OO< zw!t*&mcdxu_&X0B_4r)op^Sw5jt9Cco(Z2C&+G3s3^#kFB-9Ee|Ask6r$_#eY4>j9 zo2PNsSz2m;SpUaZa{TA={dOn*neczw|KS=U^68hdf5)e!|NEGft!?j95kZO3nIFSG zkGej$<$p|Pnfg!XqgdK32CRFsW-Im8wORG|bD+EM*5N9~DGMAN>-8%cVd+m25au&r zg+Iq7Iq~_<1Iim0J02?{c@{?s6I^9wezpsti5%vA{W&)G`D2md=hJ;U+8I+iEGt`O z*YFR?GKTs6I6qQ&lA~3&d!Kp*Y)F|^YiY6z`IuaT4&|X3>~aZF?c{d*kmF4km6PFj z`!c=9+gZU@&+4%Llh0H8!$$f`^iDhWeE4lmS8-C;V9@Fph5kdugZipBq{G!F+#QBX zj7E({W3ORK-9%j->#;>4C#&6qJH$-8vMg)YtC3VjIm5eCXAOjqOq?txj(%UdH+8B$ zIT1DjESvz{q*z%@Z0=*$3$-Y>MomAreI#kz2R{;y>>B_>_BE1pUhcb>k*>})lJ-#0un9vgba}SGDQnZj4`dm87k0V3G!IoFO=sYh z{1Ar8ru*a(qTycq@C;HXsApN%*(=MCosktBD&DI8u%&Dh%NtAapg%?srQnD$Yoe09 zmG{r`X}0!EDRSDmo9&|Ze)70F>UclN*53_;Ll%wfTAD=39gG7i)o|t(PLv{V=#!f= z%U6%H6ou}L*>qBsyEqHUm~OF@YsM-HFFhZ0#hYoNAqVvbk^blU|D~Xxdh7ReRaj{c z=EiWVN7rjqbKaR*)rc@PY8cSh|2&-{t>rt_rDYf~>O;avdq8_n#*04Ed(>KQsj$h+ zSsJnJB~3a7`we?5Y`t$j`AWY&cYR}ZPs`%>p+=Il@C2RfC%dl-EW3y-Mr&L>t5w7P z1gl;HrX7lT@B0tWy`7`q6wmya7z@v7K6-8YRo7Ta=atXDeqQ-hZ**dP;rr7rldcz` zyRWY8#s4tRfs26UQTXvxsSeK)& zy)guN1OcyM>2~;Ya-t3@&N72ymGPOzvJEk3s**d(Ek7nFYBKQB9pw!<6#rak*Rtcl zyu9i%UcOIWv|iFagf`t*ailu^VCHOZO(lcD2=PY;!6j`=DJU%_Ei@!G6g2n-4{2cw zREBj6R1|L6Qm0#>b9>6nS)s%&*-?!A@%|-!gsZFJEcI=h{@Y%W=C#1_cUN9xe$1|a zxv;l==2w=F{2f11N?t0j!D4u*(URn19iIGUjX^UdhEq-DNF;jYEQ>`s$z-)M?z7Of zlb_xk{XTc+`cAL~zogr3<&%P-<=fLP4T`K`h!O?CL!mj840bts<5=~^F@~f)E0e}h z=jnh&Fx#pcmf7RrXx=}I3!saCwnasQ089HP8F1VSUW0Q$psqoXhpu(JIsDmK+y^Ur zW!MRetk}LU5hcx2fmsO~y3_Gi?@`bu7a}SkSi!Wkq@|E?is2&)&3cNf5~~U^{b42G ztcH%*fh;kQ8aY(kcP>?{$5>n;TRMa76!b2^R5Hg_J?bsbPBA>wtwmMUFn?ODrTg;p zg3HYGV2a26I5@0D>%^02`LuG2V?8)BCMx?fY5vZC#k2C9Yygpkm9-fTZC{Cvp zHwc_QkX;EM|L4Ah_@b1wYpfePONxH1dna(;1|uEsqS{iHvd>a#pQXrQX^yDCa(wz` z`c!VYge9-*vWkS7ggiYF)|?4m`@|3T;$gR!x0NVGR#dy`fIMu?vJ|1n)79hDDnKe{ z3I#3<@1UNno(GzFmVH%^?~apkR*Lj;%i|1E2((NTUDgD@dz{XiwwB^#V8c)-GHSL^ zImmysFs3lZI9~X#@Sp)!{NdYkxAc};4msSy(3*PB9rVw*Wt%ll0X4hyTgJgTCd(#mY1#?+>lUDTS$xH;NxYxnlP!07yUb&4OSUx6)s zco{@J`?aim6AEYL;L;1)C%NMH{ zb9{9Pf=5)Xh3XOhNdby^C4)q;Q;Tb|&tUiJz?Myij1wF?Gq-z4L0j*B-W4?+)V_>; z8I@L53}5gds)>Kx-v$}Gi~(2Dtf>I)E)oC1^r*xA`dYPpn?dKCdZG^(U}(#R@HCnX zH}AL)N>Z1(ekOg!;=`K#GX5FMa{ku8fbn#7r9h$PY~YU1&hVM<=7Q?H%QDGR4e1EM zpYhkW?!1>R`DVXQUM`lg{veSl7sYr!OC*rONgy#E8c58aI*01s;j_p;bEsJ5WY}sS zo=io!3aVtt9-{T^^6i90mqrTKrGr7Gm1|~}mx&7Oq{q}+;t2AmNY*!IaYos$Y4^$O zY1I}V5$HiTPz&Lqsy8%c$ZY#cAtoY7*1RtJ5O5^-Sa~AI!}hAo8e7YT6N!#dWl?Lt zl|_~HB=jdp80d+A98VFm3lKZ+2O-6`#IMBfe5#h7O+ar$OTI#Bnd8d%B+ulQ>>IDr zY_8>kcJ0a(?RQ#g9j7Q|P z-=a7E+AF*2*vpn#_t+;*N1{mtMEwbsd}ND+X0@7*RUPy&+t?;;oP^V75umO@y{y9U z1}KXXX*$56ex^Z#dDBVDH{;WNsC}{WgtUE`$R_q<+Yo=Z&wdD=PG!cqeDcqkXQR@= zUE(YuPDCX4nNexI4dSSZ%yM^?O!Cj$st}OTqV-rm509u2DAJo64cdO|TL|tDky@D(e z3Q7N>6Z_cgIs4$)eluLKmcu2T#Ip9@U9-T7K&>9L+?%6J4(&0Et=j7_iC;9zIK7du zh+G2&8GbsuoqBqMmF_K_hTJYs_s)JU#dfi7*=DAWxys?fsb9*Nr#UBM-KudU4vEBf z%_opJ%=;3!K%(n~Z<{%ZDzO?Y`#O7yEY2K3uk?}S{JP<5H&1IvV45-_k<1spUDOjB zEMwIps+dEfHr}7T`~-Hy zL-SM{(n3RnV;|~e)F4oo7jnXSfz%yTh?TkKB1r}MG3v2O6pwhBaH)L+!tdj~VUBv@ zZY4sLkqFl71B8*4vHn>lTiVX{kgA>x;ESDV1z)$0+VABz0%D-4O+2A7jzds=mM&DX z5+frM8^lcYp4P2bz54d<)t{?S{V$KOcS%X*k=#HfY3$(9jk9NVb3skm@@mX3J2J`T zs@EJ3nyV-j#67ZYhP2$YSFKGvi+$0FXtbxpZo;? ztwdY;kapp_$B^fRB-xF%Z^sY!zTCR7S$qAj7hPB5T`Mf5#Hi&Q?tN6pAc4JI%{=t!Q8wQVift33PB(l?j`l z33`g*Jl)_C0PIzh&eH=4{T*9>t|_f5tgq+>mna$;`ih-Tg;-4YO=v#1AXa-+s{qrp z3C*AfA@b@6WMoTq6tu3it#rIgDjSWgjfcyHdtF}>6F+ayyxcoo`lM{(syRG2y>4Fm zYHIg=XxYVX_HKjYib6BlR5_^2dA_K-?J^Kai-w3rr#XnMUD=f_8uoT9`+AnWiT3t?Dbc;84Yo_| zGGa|Fjv#(GjYYBoodcIB2Hqu#5bt_;3`hE4MV7yZtkCw8ZHbcS{rWfG>+-0lkgP8v zcs1!`9@bVDJ?O~fc8?SpUIiLA=fL7n%Pq|{A-b`EO@O=*&dL*LeD&;O1iw5=cq+RT zuOU`8EyV^WE{`9PFz5*z5px?6GtiS&?kOSY$%Y#eZlqYt_QpuVAEQ*GG?2_&gSWte zkLx3kgBH!;u^YDr8Cu!rp#>>$JoK*R37f+0F1{J1)&3v<`1e2TtSyP{w#ou2HWFD3 z>PspN>{Z^M8PqRc+aEn(=j`g=v>H!>A5WY-juf5)Fivyf0ltS(b1E05wpnt(aY&u4 zMK?|vk0e04Z&)dQmSNATt`V~y15nq}5}D*X6p}|14IeI0*Ac+J#x)nF-mXw6t~g$-oBUWq zFkVUIS1?GSpqhbzzO=z(8Dj8#;a=sZjFf#nzSfJm0Xw4?=Tc^g@WJi#pC1!hBqZ^M z&hjv%v_u_0w{_{G^6`r-3!R9?n%Mk(IO0d@W!DsBZ-u>;gRQckJUKbV=4n`;N)O`t zf8d#!tJDmiH>1=OTxw|C*cI*jsQ%1Xpr7*dYm}s}RuR5aUJ|P2x z;F5L@XOByEjS@jth>KpbHm$Xng@zAxprSJ4z%N#n2MuUJ1R6{cQ+RY6H(+;HcKGSTw}-TD1P;n5U~N>h zduu}2&9j30xlX3+`cc9C`hwQApGB>#Y;H*_{1@8J3tdGkTTLcKRZKr={d@ka??2fS z*jb4(_VtVE(1{zWd409<+xIX3&b`_w3IDh!hJ*v}*x&22B`MeO2uIj;-plRMrns>uO4Q$II6WB;}W%gP0l z`K7Quqa1o#(?BVB+fp-=T%A{rCOKQ#|4gD!SMw^OvWXW-@~-vXGMId8PwCiGsPqFF zafJuDEG*L-=fFeUA*s2t(ayk!fj6j!C>^#8M_MwC_i+HE7g>z_mo%spnNhK7{QjDV#T919ZJ}>8S1&3kl@Ment%@Sc<(iyq?yoaB zxmrjOsY*Yql5Z`9dVj6{r)IgJk7nsS;bby!h#zP_!BokRNOoGRJkk=!p}y$DxniQg z5}=dNnDIH|g*CK?yEX!1SSkss6N&6{4a=*%p+@Vgt9*l4w~nbA7K>Wh!l2JWrupT@ zy)I5k4ddRAzdVON^)=enU?N8)Ci-7)S-tV$sRPN;uySeCSagxGC-&(u=z0C`Q5jRY z)N&LW$_@1LKbnkN>D|gybRRx^NvkQr6Q0rIfss$`rST!Tu2FZ^nxxukGaHj(m&2jy)`bF zaX3Em#Ud1C_5LPEMZxYIF4!=uVJBzC9&OnuWS3x-o%ql#WP<_ zP({~v_}91k8VCMcicwZZM~&2UpYtnkh`jk5n7R!HF6!lA!36et&ivh$8O29aJPNyL2izG#1u8*EN}ncM+yk zA>KHn3eqW@w6+Y{+O-~A6#;<@cJXm_#bL?I0ILnKll7nf9D6>P-qQa+ZHYm4C1Xa! zV6I)A6%+*nrp$5)May1xYI3qa*`;HJpmj@2Z)JR_@K$vqRj(?y%{nMRfAkX5u;p;h zTgEv&c|9KrhIObYjlU1{*cS`ARF6}4_80YnCx0DZM|ec#wo{$c|qi`hbFQb?1t*C5T;NR5rIz#l(&f1$`FX81a_(|?%6Kv zoM{fBQ3T=>yvZ6L6*Awea^!wq`C`pJsP!b~xB^yD@)`I!IAB2==YYfY$#MPSLQ=_& zCnlesGo%Iiis=pNT3?h`FH$>XGzMGw&F&Iw*#&t{L4$1|NICj!24%zGACqW0AmcCA z&$B_8`WH=1mS1{qqFq}d+uZJ0bpzCsLP%VLDh8<71~yE7#f7T!o+-#oExMR;X>^)$bhP0C}__3Jk>grUgpPwIvrm4=NX4t7iYQqv%)!6l{ zg37``>WuMNVI~yx3Kfd`Mk@V%#gu;?Mh<5M4u<~F7JKC#r6I5jwI%Qxj_ivf9KQY)v**(_Fm#r$a?ND>BcZpJO@Cg=IExcn z1SQHrRhF@-;1lJ3vY$~FssKqx^N5P~kc<VRsX?{>wG z!^_RbHFUxV31aof9Ne)%Ow>&aM;Y4_eN>FTj}1-*l}#q3jV{Nv$& z{$b*y+W5!&xf2O8Pq0Uh{c}ML(e|s7pE33uCu)7 z`Pv6$=8aMlD`N?mCN?e4wc`MacLOD=or&_Mwo<7D(tUod_U5); zoU(Lpjt+`3Ai&q}x8q2Y?trAN%=2lIT1x|p;jLt2c92BqI6%IWGH!!Y)V@J|r=K}A zbZ$2Aq2t{kCaxf8NGPHiFa!rIPdrEB2&7V>D89gw-O;?Sp4Ca_#DxC z{^Vj!I=ftl3YwnX*34QN@)$!kuAT;*yo}K62IlF4gCmIE`(kaY37m^vSW$aribo`S zfXq6=_SS^{?TW>4OHq4oL&gB=K9W4kcwRnxlX5q%WjI}-Mvh*n?VT405yc2{G36lQVu8LipjE{Fph^b2AcHgh z)~~)${=M8q|5Bt-M38zun{-~p&X$iqsC+?_7V)EN^ZU_nKb`q9d0k*>t^t|!HhzBB zh~+I!08aO)w^>GVv1a>N#+4|y?Gm*$l6iWg93~dXO9w#FxQirG|eKG!l|B z9%o?xhA6oAQsW(OqIvT!TE1akhJLyVamrnnihc5*lYhx9kIOD6x`@`(pmg5=OMygl zcVU~oiJC@iV?(k#;QaQn5I)Xj>{p=^=v3+?yCP!UV1a>*z_lEaizSdzH7!P&3N>MY z&!!6d)zv5Z>yD`!K0lW^i*vVCg}%LZTeYTPR$Z3uK^qwloU(vYlTugcn}1Lo2mN1` z*3j^+^Gj%5U){NrL49Ng_j$$NA&5gNn)JN37@Ai4W#@FLHLsiwPT@ z%QXuX-9)UCE9kFW*^bp7+ew4%P}@dC5>A=bjTf*Q1U}}C7CUsc4QsPnnH(9!whpWl zKFcsf2WSN{5MNu!STRq%SVs z9fxM!@>o)1{$oZStCr$nZ7$tXb^w%=pse05BH*O6=(9M!N*qxCme~+?rlz(5N8G>& z1Vih?de9u-XQ_5Z)yoa~`J{`s?D|k#H9xhSU)jQ+s+eUxe@?mhqCy*oWSctLvSmSR zh3~E?7sb!Hj8wJ!*$(tCp!Q%p@4%2ObK57b33Y-qFvHrmGD+qKc^#_5px?Kcec8Pe zYi_$}X?`lIQF&j!7TJ}|iwHxd1M8ZdHd56|w#`0fvGe}!_%D`n(rL%iRnrd?z?7fv z6Uxt~ms^d)S~kh0=~q+(6gJsXEm5bK==A-T-o5yJ;$-O#u#=mWV#i~VdKwh=f!iXP zQ#hQV#$u%_D=xM%f`aIf;mHz!OLH75>#_5{q9UNC$%#$BPc|eA#-Bge$EJmHd(mM% ztxe*q8TC!#o<+QUC#WeY@^$)wC^v%!_h-i{9NE?NPOs{=I=Ad2OptrDB^bO_T|j{wzbjBe#*CoajL8>tawp!*UYn9=D?KGw z#wpi;8i7%L5dd5)%dHs#eT%iBTHzqEHi%N=&aN+d#!_&9n<7_Hts&sdav}sb8dX9v zP=c#JZ(FP-{Y1JjF#P0eQDj=8&(%Napt2Cb%Je4oZBZ{DC4}3CdhuTh6}w*Chjc`m zBqJ!zp_sd-$>cGRtT?sm28xHIYbd`#f}dC)!P21;-=kRP;!jxnXxXnF4D5Ow182S9 z-uTS7G_kRYpM$EVyAQdw8kAn%-VO1;21n_={B6PSiTLAo9RSRIQG1WzrIT;9wMdQV|Ftf)aIUv3{UpYvxve0xg{8v1;rL zVp?U!k+EgPx0@UvjN1?B7cb|j(879eG(00eq&_}OZmkbeZ03g@;CBkpa|)WX=ye{$7fYNVBdfmqqY*Y zh9i01Y(cHT9u)`3KS^e!8*?+BM5aiQD1hdLy3-W0`G=~Wri9LH_EwbshZuc5lB`JQk-YG8Sv}DGNl4{?b7E0 zqGyK$cuW0)JDifZwbtn-O|o=>(ybd+~FSt(45PRUWr(qpu(TDgE z)SGNWy4-tp7+0Xsoz8khGPflNI8>H5AN++!f^`Q5i=N2JQzZks|NX5y;6x<1H0l&i zE?h3$vC8kTfu7&RFj>#LTj*Ap0v@uBqa~Q`%cPgQ7Ie>n+HBv7#en0sME+3TB(K=s zM#fG`2ymX^tMGmQ-!<5jZ|N;J{Ip~!^xSaWGbFn;Pp-76#m^fz<1s4NT^3`mmno931b~wsn>VDU+1wzC>|F)q|>r4kGE%B z*%;g`&kR;O(tE?OOdgYY;ZD1#FhySulCrk)v`hLEW2aOJFNnhKf|T+jqDY2uO8IbC zxoE6(O1Te>U2ZMpN0uOanRXd`yYiuwu~ZSO*EEtK~wpTO*VzGxyo;a$PFIShfjA z43T_0jZWX(+o(x8b4txEIc^dE_d4JI@9}3o+dk#;d3|25=j-`;y%`>hKkleTxAC&w_4)|Rg(*oCEt6IZ@$?|gCN1ZIkEl=X_diyDB@hjn~iivtJw z1TtlPzV!C~jTBkn&!U3Ija*(|TmE#z0qU}TGh**h zXg0-k50ZZ9{J$eVhMupMz=IMXsFK@fnr>$Ufk{fDdb=N9s0e0;V1JdM@B3N%26H?@ z3=V9=5D5BLqm{}1VFAhb^dHyCP|K?QhQ~MYym?6U~muyg^|VQ~|mI)dNzE1o+%< zP)-t7sYF*$s$BQugDoP5#}uC%@;w5TNI^CwgsN8&+=u}vx{(~r0T~6(M=TrG?-PaU z19iJ8GG}e!^Lh28Q#Wf~44rQ+j(EMdX+LnQF94}z)tq{LFJU6!=|2DG(%+t+p;Y-t ze3D)C9C`pk1r5*%pymQVn66?V1pj%Co++AUSuW&0$;&a=Q=T1a5=D)!_W~{J=$}9f zgNIFVJr6&Gj9k7raXb5#ij)OBR4}vu>$?}AXX%YixG4}6iGgzs5T8gK(Fr=Sob9Vo znBnVfDb$QURviP@31A>fjP;Cs1bY39s`#Kp2`p{ikeBO8stIC`YIO$P8h|M?w^hug zRM8%;{wYw-cR@)LvQ^NlRBd&Nk14fhvN#95+_=7ND2dO_<+( z=h|&;dwv@P2Ry1{`MsU|OKj?2M)&46)<2FJ&sn9eS>2oaa@9@(4rYDr3X z177L+2_%PZmwz>HOPyjnpFOyG$I9UjVfssH^(Qv0M$co?ZF!4 z@b|rSIEdpyp!D=H)}1Ts!;Cf5=nR;vep?wB3JX&CdayRItaFz$(Rmi)>N&;V@2V1m zG^A*#d_R%~)TkE4L6b(S!TjDD(4mZ`UAN*)2pWKcJ$Fv)bqR}LtD~75K3~q zQ1SHQU)>kuKW4f=BOh?{vR3h_0V;mM+kxnFo%ac@gve^p{lh=5_BFltNJQ(vp}nmG zm=|TaJZx?&`y_u{(rR==x`*M{2O8o4UtV(+pHwKlY7HiLoCV-p1{ihOR$cG2Z6{ARJd_K zuQ-cJ1EPfMxM_g|!g(%zoL%-7N@m!Jm10EWevSt%RJOldS9O``SHlG{jW)%gP~8$I z6dXVtAp10KlwkLGJ{Ld;?z6IDR*}5u?9#aUHuhU|+sjXzl=XX?rY~N4>mcpUEZW%? zy_v!4!jbf`n~21%1GbX;%qkvp$rW|!lG&M{OLm9H^JkN8*rt9i>HGc5(~c#x>SgbZ zhK((trS*WB#ro@xWg`|St}tSOf_SUE<*6kkJ9Vkt~Irt{up|n4FaPFIV?BND)bRRDT(EvZE-v{sow?IO zu~w#cY&mZ{B8}Ors+RAs1&KFjze zF3(o-JAS(@_7_0)ai$a_OVFciq^aKjVx2=ncHo09isz6=8cWD6&(-ywA%ZP9$+2;WO`V6 z53qQ!dIpiLw#?u34Yv&19i_sI+HM1vvtS;h!ayCFbfC{t_w0?cpa3Y{pEf_-ao%2Ns8v(Gb~w4Umi&GEs)P zqDX{xeG_R-Ivc5M3==MYe1DR4 z-;Irn;Or?hmV zA^hJ;ZfWcTs->1|q?`S~8HZExA2YOZcp6?m;AI*5ex`pG?^d8m9Q7C5JcYy>*9>?| z&w+?m`NeJ<3VOibm;yt&R^_z>Wa+Vi7qEG2ad*38b_DKC)a211hTU7s#{_ws%#R3@ z`7J!2Ns3;0Vv=^n?HJ4eGdkjsGPg4J&)J#7P2L+i;VoNi7M?gd>N1ZUzqRtJ`@x;d zco2n7mZT|u>8eeb11*0rlPEb0wtyJ$o>?yI`DfHjG=5hMsO0G{0d2@!+E+DMS6 zkmI;$z(qvWUG1&3N5PMRkNGpUOSo<%eHa$EiRg(#_4vLBq>IkmN=VlPJkAA?kj8ga ze=0GL%2`bur*6`332)DJu5bzPAOO?+a#}p!q@@1f>jq2Web7v@cYM-MVBjo>X407klko3Yt=n!4Jt{O5S;*=FC4Z=>PBK|FpOxwafp zdb=y;!&#TFTr)+}_Ozm-z&l>mroggV0=&s@qQ>`vIjITEf$u@wv}>q*e}S5#<9x7_ z5@8kHNCo=h0d)e4#95%~NdZ%rK12gyg~+(xVaTwguen!YfS?V}G^Z@NxF*dubes;6 z#*8?$g@04U{Z<_iE)>FJ_#7v-M}oC&;im}zEdjz4@akp0o~W}Tp@4@c$y^`Z7JsF# z?wWfUo>Hp>rADIBOD^A}GYzvznsb^R8$Yy-Z9LgF1vVLPOk||4fh$LR9k9W#JxQGl zg{IC`m5zK{z7ZxW%I0Yaf@zIKpi=Zed2S9CWWaO{5BVEe`Cc(D2@FM_vlk(RQZje2 z9K-=Q-?J@*8M!bn{+t zpY+)8!`~i7MR~Rfcx@xmZKlpKBlw@n(yEn3Ihb9@#CJMHiPuxNq{6Q~{~wqC()kyO z$q~2YA>DHS`_%vZALstj1m|QQv-mex+xvR13@OI&Uz-{QF-K$Y!|$7D<9uF1OO5NO zyo`sA^zr-!T@6>X3a>N|iaD)==;|`ij=e@nKr!~b-9sXUNO3Z#BN!uvZyRTwX)wS(zC-qa$h76ys0s z+8^$-t`*f>E4rEuA#blJKXNjD=oNu_EeEdT<0@*r3cOCWo{V6g)V#W{q`a4UrP)iF zf`3zYqPPXhtZU`zII7&(CfO!TOCGKoA{DHb-!o|ay&+>w=yu1;L=?BFa9_HEqe2HxFew&(5TwI)t- zsuE6TbA^`s`8;zVAF9Zlu9gKYlk;6Z^dj(rE-Ydjvw-XZ>1>+@@?5&(+Xrj!vYTyh zgeB2dls0u`>x;2#neT^Fr-!XKR5vz?q>ddcr(YPQuHc?bJWkYK`_z&2L%qvh*NQ_1 z*;?7M=Vcadr}mx2P8{w!;4H{J`s&`b--{0N4?)pLZB8I1tqC1j?F`C32ZQ#aN`wu) z=<2>lCn03BFcgD0%lzqu%gSIXQT2?dK`z~eX)kRNTGoOc13+p^9*r~Bi1=^6HL^qlxG&pi+nW49WWg4uKSPjh6Yb;3SIbl`L5r&R z`zem9`>G~GjEHY7s5OvZ5sR&HG*Ldk7s=y9vAO0fP_^^7z`%<@P!j?~BLvk#{7mD& zX5f(j+wIAbXI9_q0;oZ|GHB_bNTg7G6nV29P#A8B1MonKj#Z*Kxf{ zZw4mI0{xNqq_r42swi&^&D^2Gs+4U?#XxpzfHYJ>Y7db9s&i`l4=^{|POJ~izR}MW zQm7*>JUT9M+|6FimKlYmy!1#m?&*rEb2(_TwC}^UHZakIuM1D3rJHMQ&fc=wly1&S zpzUEhD9n*EybOOf@~p@QDU)z)qTdXm*@C-t+Xa#+SaqLAFEPN#@!ZzIE684gJiAP6 zE!Z*g>!Z&rMzFIcNWE?0_mVytt@GXwya>lm&9f3$OPX!HuX~4JQ4EMggXpOb^W201 zj>{9Li^Xj}BJ&}->AqASU@!Zz;2aS{vXw}qVY3rG&13bCRu-Lk0WM3wfB7XKtbWa^ zV}2VdeB?g0{0&!(pn;AL5x+{(>o)(T7)Mq;$-+7@2MFf5d!YYZwCOOKA<+RRywM>f>= zE&ocfVg#cwA<{wgPL=~}2;ca_fV*=evD~7uoM@GejwIPeheVDOCJ_MFLPRFfAvVCI zuQyp!MZmsmWx#jgh|wjR1p63M4H{2=CE3C>>PbL|7#S3%K_p^qVMlC_ zkPbfqr4??vexQI2R5Bhp42r`rBpFmKKNoFAz^Hs^uw8h$n1z@c&|wUIvK`PzxScv% z5l6ds=40`P9qv|ViyEL2^MMAr5LG2_sI&4V?h}@+im#aY_}8s%mey&lzL(^8SVp{2heN>o`b5=iyA3vsmZ<+)$ZBYs}i9_0xycE97hbGM6jF-=gez)=I<0?% zL?QuwQtJ|UdDsmHxDiR;6U7MbJh=cMt#R#RPqVGd(jk|#E0Y~-FL*aymL9xM{aWGj zpfNV^@z-r9B3ANKSHJ-94ZiYR>1`HfuW2{_K+c(&!c%8;;{5xA8Y=yQIR};qX{vY> zAN5=O5Wb|5F4NzX+f@GEN-5C$pqVBi{-!XHWCGbjnU^d><9L}(O-M;+!YF@>v!PTen9S3|} z{sVKX?4xFIUh)a7z7d8*)7R07K5(GXO&8txgPXIgUvCZ{-@8MJ5NKgmpB<3OsFJdu+@6cKv$5D)HDvhU-g4!tt3YJ4LqMH7|LpB zQ|1``-NtK58yEHKs(>@O|Cd~=~7U+3{$w&wb$ z)P<#s!T4`$H%ph($2RuZwJ*nxM)W35XP;E2>{dYNMT0a0i@DO6Mj1?HiBaLp(-ybH^{qDLbaSsV&gl-SHEt$a;+yr78U zos2!+xb~)R?b>@6(4IJAz1#ZD`SAxh=3y!Hs%khP)s9txEeemA+^S^6!BBnp5e7F{2Y^|*F zyOo{Xb#i-L%wn>eEzB7E%VuJ_yDl1NBU*OPRB_t5`(b2O0xj!xIcN%9VS2%>0<=K| zV`wX~LD$?Z0$w1+kWzc5wn%vhj z0!9ARpX1e&idN;m zj;bKNw*nTol^CE}>CBTBilY{CI~$~h_90P|1Z5aIg2m;>U{8CxZc2xGZ^A^f^DG3k zdj=T1k1@pxlk}ki+-TQyVgBX;J(yZ7)BSoEFF2yRW6)WzPq#&89R;F^Q_CmY;lnP4 z5cCz!b^y)iD}bYr;UmBEmDXxqRnw54q>)J^7xq}p7%BSJ=+V^w$R=nY{#86Q2rs=tfSPvwE{RN1F_|z9jO8rg^jrF9% z;2jVlis&hW&ic>Ye6M!7Yp*Xoj#~Lejk{MnR@-$!qb7aS4L)+=8Y4?9@RRc)+B!4dA8;rx6SoNdF-|5ynII-^G+&C;yAovH6Z4+R>Bdi4YBV0tcyC<-0rmw1!*j&&W4jk})G1C_hu#v-t zTc_b!1dqK)4ALWqK)?KJEbn0~@9Z|-EhC@Ps5VU=l3xp44oEzzeGjhF*G;X7K&YO$ zO#@DBjv!5F2_g-u$WjfBby{LU1IsvX9|LN-BSyot@B5f+w~u)n;>@Ybh%4Q7t$(p`KF3;(+gP%FZJSL6g|avUW2cMLlYNz!E-V= z2h{FN@0s2r(+}4iz%Hd;;m6AC*FXcAP!tMmR3Q(mDrbbj1i6Gq0+C0PHM>b`uLaLz zuZ0Ct`xZ2>EbN=gGi|&nX!o(C&M!8ple0l@lahd=&2}tV_(zBo57evE_dk|OBzk@q zQ|F0G(%{&3kuvd^+MCx?dyz;Ug}+}BsG?r`IdS=O`FZDEwl{Vke{gZ+gWc2d@qsVd zv8m6#a9vg{U%0H703H2f`0@7Wl?+%{YCu2 z(-5n2OECjVfn0(y9Fjlm0X0xF0SjkLADu*z`z-f!T8MhPDGA;o>|m&)Dva5YsK>Bm zn=JgSq7Xe1Gg_)j2r=Kugl5I&?5MRoOy`{U)v#pbE;D*|_C=SmZk$xZUw9@pK}gGT zQ2bbQNR4=U(+4Ile3x+gQOAZmM;+r_iblJWUjdPyDZO(Pm^?TImPf%3`JJG@yZwYu zygOLd&_e-XBV$ODqL#rcVxfRgVn7CUWYIWMq=!EA6dnPw$OT8YgG9UC+k~1~Jr8=) z1($!kwUamcLj(gdjAQ}56I!x30=44?VT?eVU$p;TIn@~K={x0zA{s@9h(^)^RaK{= z@M(cmw!lk8^>-)gKs^l@Lr_YdIUL-q$dIin1h7=d#&zJE3CCXigj#r_Ji!iDxjzaH z-IoT6MZU?~Oy3auNK(ye?y`oKiV_0W&Jc~3fK{jYz*$>Bc~Kzzwr@m3t`oa&ZHIAm z_fcS*(+7Z4eR#|C!<+7hw}5%xifiZt@>xv*!YaL!Jl1`5Y8AXtiznIaZ;d>3p+ay- zQ6vDGIfR!C47&f~E9gbm7J~Wm{t;w@zX8!J8ZXCJZP_f+f-}?`=0H#Ax^)#d?c3*n z{M!E4TB6G7+7u|~a0Z;? zR9(ec?#}Ylz(B~Jqe5p+i#1rS9(iJl8MT=~romZN1lQ!>HUZnGvU3Ij5o2rVZYK28 zKs$Q&mcf>8+uO_Vzh+n~E9v_z_c484 zgNY^QZE6|{@(KpAZ~Qq}NTb%=Ewhs-oGgyT<@rc`o7I{J{BfdKhWB}4v`T()X?~++ zP*&JfEB&di#UJEdo(fx`3>2d#rm|LwD~Sh%k6Z5T!&EzH_!VbZD2kM}+ta;tK#WBS zPF>74TD!S1Djf`WEa3-u0KnE zeWsTNOn7ydT9scf0h>;Cc{TCmjpOPurZErD-2 z+e-s`%JUs~uYCXoDv>mT;7-i+cZBm=1(uCo1lMXBcTg<2;F%5z(%b0-DuQz^aph)a zWm74gDt!4jBioUt z75wd*_rYUVd;TBNp6ocgV%D+PhpJ0?zv)HadRE&z=Zz5%U~9;`SPe~6mW6**A`C28 z{a`u6Y3p7HHe??dE&Q|6Jvp9Hao6pQ(1g*^;w>*^Z8PjMl+D{Pc!N2u%`e{}@|){sSr4(>ba5!?jZX=wp|^{A(_; zA9!-TIK76aK+m5(j$KR!Sdwh^{b_ve$5PE_$w1v1;1)dj{*SXyPi*^eVhZf$FS^=& zw0mcqyGdNvL6eeRa2I-Z27IW@Hjy;SvRNif2rf9|lrb4afDQOE{W-kW>itk7c4e5; zW(FXj_Sn;R1g~w|P9N}-t#WN(0mxd?8UUg9Lh{ClZvK9Ri~Vt(Aw&LLswt`<0`{MvP}q+F)}RF%U;(E&K!{jRH2Q zSP0TM!u$;P42^Ok#sk~P0K0M^@_zhgJXXK-GVj&Ihn85-p#ZJMNi=0YASR&>$d!=Q)dbsaG)gEt?ayZpW|U=4Bn#P0t<>fDR)rnSXb0I3^aI@Y6J*sV<)pk6 zS8qlU?lqu2i*-gl@5PiO1ad545>A%-;Q)t>xEl~ETiwb*S2tv~2;21DqGkd#7Dy$V zz$B|<|GtTeUA}7*d%35O6~#c!7%@s)A$`E}yNBT4Km+K2uo+-F^~ul%%Y3jM$}{9z z|KP#nh4?H1QhcwBUsJi5oH#$-*Oqt6?!?;lKR>>Ve6@7*fWhi|-uT?R#A86Tpu@<+ zZL7N$lj8s!fIFi3Y#iJx02<>dznTGO_mlec-!~=s(8RB^-~C;0(IG&>iUfx)xJ6cg z8LXiN4xAy$P!O;lVzdv_*C>4pDtjns6M4Ivvjku=*rb?Q0QX9>-hI*JUOQx$vo$P& zecqTSUL}p%@mistqlQ2mi9{?&fij6pY@3CBMpoopxFxy%n!Y!T0WI;+C%D>YHfXT} z`8=A(I9w`eAv!AE$F26%c4lAUwfH+Ke-JQGF*1o%(i9`T3aTZnz)pprNRN=HP^qbA zpACo`L8OH9iKy|eEW@O?8p zJE2}Kv3vBFvN_3kdUem(+Wgq(<>x;{H_rX}{K<(dK#+hzpU6_HaL-%|&}g+_->Bat z{&Wm@Eg;Or@$Y;ADE-V+fU{)s$USeHK&508uO+jG_2hZRa`GBDIjz8nYrml|g z%+}s%^6HY_+wh`C))2>lPH!x(jy12XcFdXZV!w5ENRqypjQyIlV0PlcTKL9vu(1qp zDdq5bwgSY%pdJRO|bf?!`br zXBc?77o6?D($d~+$-}!=VD^+-Vs6!pkN>gpEniby+xWDK?EGk9kqdbCj}D464(PLL zDgQ^tDZ8$(et7;}#y9>~SO1^yQY-2kHC+Xt3ABns>aacNFpz6ZRA^L1Oe4@0N?L0T z)1fNAOm(h`zE51h6E`W;8+7;roS0BjAhUg9fQkmIGa*utMw}P5A!nAs+EK^u7qc2J zzxPdC6)Q%YE*-mDfBg3STjv^lp*02MAEhzyFT4MXv2!jVansKue;zb4$IPUqX?WOV z|Bn{C5Oj`y9U7@QlHR_1Bzma>J+^J)QVO#dj23Pi9lv{K$MC%D$U&^oQ=q<}T&@}|YDeEP zxmvdxs_Fgpm-OhnPNE9%KTD=~mVNm7|ZiMZu~SHqdJLM*}z5 zOTNWR>gxv3#J_;B@06I`rk&f1Yo}%P>pPy(N zj&QefdtTq_9Cf~=j}IYt1my+3IqK5vFD_U)5D$6x@ym=*}?>NE7Kc?cE`Cq-to zAnzJFa>Hwujg_6!9;G|}Sh&Y@VON;XP1pW{%raI~?=ci@8tgv^^|>kmEgcHJPQzp% z0Eef+%W;{JK&Fg()BXD$zCU_HLN2Nw7ahUd4+%idT0HV`Bbg2^>tn@5dE0S;=F z_n=DUXY{lonD>#gxcUkW9No@KCDh`yl2pxPpOcvBO_J?0qBP94f~{q0?V8sAV-DVp2F#k~QJr0x zvUqc1ea>ZNTeO4a+Pmpz>+>6br6$bItfrWRh9o`fSZ_}4dzv)?x)=TNB>m8cn(gQ{ z*iZaA+LfR;GToKn3@*IM$iy2+qse51oBbc{194f=2oS+{G0?Jlf25_;+#=7yYT6y7 zc;eLsrAmwzr6a|3u;@rGH0;Exo2nSfhg#g^BOR$T;*F298$WPYfr1@NT$3UnpOOs| zfpTx>F1@`vM(q_PF3f~-doGNduWwkfJKMoh&a1m6K}mC;%R8^mwnxmhfkczx#Kc5c z<_(v&SjKFxDc9xe+zr(FpH?pQi4#k+<|o!2!*g!m$QjK0B!uAbYOsv-AWJc1>CJu0 zp@4nbbfPn(pk=QxP)>vl7hk48teCPKuy0@LC90;!&>1si&7}{)dM8R}j}qQkGx~=> zVNB$xbuB9&&91XB#F!TNlW?S5pY&5`jcC&0mpaDA85v%5If3TM8O-Aw8r>MTOS$qa zj77^D^PldrDjl6)nV0}7cJ1}6?=BpD*7-YDa@As1oATeXj%XS=({{XJR4)z$WA@JR zG4XoS|A+?}D;h~7`aTs_LuRMz4>w|VNvQE6zcnxU}Vosu%p*pe_wAz4?Q{dw)x%soc6lqy+G$2J%tsvY$T(BnF$iOjj(tOU9a*|y! zM1)!`gfO9YLPN0QZc)|RByCXcjJRt!ya~th6ePG#a=uO*$%y@BS_BUfS<0u{VJb1d z{~F+I`Q%?R_o)nCMiZRVlvie0Ge(a-mX!EmUUTBZH4x4e9Rg|wQb%fV1J7sF7?w4i z@Ez!~AFA!DExR|n_e?@XoVlX^XWAaV)`dNWL~bI*#4g-a#+P}KiPiLKF=voo)g-n? zap={m>5fa8t@Elb<>;j`$@2PAN9^3qjlQg~d(#O~b5AtQT2zv&OSWA*QcR*9Ot`}{ zqYa6lKjwC7nkD@>_tb2?pW5&`ap#G(KmE94tL+_U=ISigbZ&9{77|eQ@4Pwc^(dSGXAdgKWYN?HWOel)`xJyy4 zn}%_#fK%aoSCPJRJ&m277^DIyp~)1~zRUvK7Nu6MxM6ILaDHo6<4BXh%*721R=sSu6*7(Jd`q zZEf8{pba1Brz6g;1Wk1~V%ElL#HF?I)GyB*?hxpZo4ziItL)UjO4qz+Mw7>4`BvVK zL5Xp*%i`;aOJJ~YbyOIU!2ZL-|NMJ!}aL!MOOo`EsDY!VuA$*xW8mOrOTA# zm>NGL26&SCf5vAhnC@nz=c0%`7G;C9LIQjDCaG!OfSwXbm_i(FDbfz=ZrvX{LfFoSZ* z&3^u38d?}zR~7>$dF;dBLI{oNuWk+Im}{A8l$Rg|G52`D7&(ndkaKrhSN8SR&~smT zasVEY8cfXA<)LP&UpTy@U^e{Gv(9I|&=qPmJM%rOO9RgB8t`xxqX*P%?&F&ui*!wQ zz;`G-Tr1%9!%(90oTU=iD0`WPwpNrGGDRMeMRYYSGV&HsG2rb4=fzD0hN9rH1j#Us z!S!VGxtcDsfm~*D?_saBBC~Xu(SJVy=hJ^!NdKy!nc0N665}s6V59YwC zV|5U!52*EIsvjgw2lR}mecUF>(!qi!&(P9O=FB!R~qw-Le>&}yE!KL%2*5E<4F%g7P6pmSGA&Y)p^fb#;gyXUV)r%OM* zokhQjarq1%Y$5K#y|IlUSuqM)gB*mDbO;GAAi@NGhkUdtS26esHYZZC)%X0IV#OfP!TMg29{QZ`Vc{%;9Oiz{%;yMSLhE3PMnf40IVs~?c z*Ke<;X;HyXiVP*5WT!7fv-8n}U6o!?Fj8K*7vjivqMKS?S0U~aB>_^TKQ07WznwHK z4I@m;jzrXMA*90(3oxden3JH3Q#wTh1`NlGmQ{p^*LTj}>_#P5`fpG7KeP!b4raPi z;laX5<{CPVErqYYbb0VPM}~3zZ6x;i;*It3je+*I*;R7lU(2iOD;;ZDDRa+F0i~f_ z9f@9(KbzRU|NHb#bcO4!Lr6t`Ian;&aX3Dw|7VONu#Fu%&h_V5@Zq{_1dF`Oa*=>i z4hsw=;wFD}UOqCCEKzSEMJc|%9dnA4o2`{}M9x zvOB9U0p0ofsmgFk?X;#P!;f^#QWM6M+twGy>X-9N*QCm;9hYL}1~%qAG;oo4Vlz&d*b^WEYJB@DdYVYdVHdj5U=d$q`HrtVU zGRlf$sGerZVR<1HKFGrgu&TiV5V1Mi7`}u0BdgqXvuR#GK#Xhziv=*3BZJL-kuw(> z#pz`8(;271EGRRKBxys)c!_19 z`yq)%zCxRQh91f1-{Uw`4vKav_KBLPbXP81DD@&^<-OOg(Whb2YxK^}&aR4QPx;xr zvh1NSlMIm7zM8$oHH))@LN%v*Y}VZgt_$O;nTd#JnNxq)q5=bGtmhyM>#dbL86+#V z(V+fKdX<(W02}F(rl`(g(YPE>X8clCeaq_CE~R8RtYLXQI2JIAxo2USYLYT=(k$pr zd)za?L|PW^_gpy3SORSJ#)+@LD`$X%0qWp5_c~qEF!fvA#_!71m4JhGwBUyI9NaD`nQf!Q9R}W{An|bvu~;?_GF9QIyJTm{FtnhH z7*&O!S0$*#hXUkYHL5$J*qSm7Ds7ACFh@fmI;>%8OdZ68h}+?kVf<#)&c<_M3l!)! z8f6EdNaSD$Mp}nRjka}+KU5y2!vc;cem1>fw#|F@HZG7@HElXW!5;FW=|>}oZdhG< zga_aBoQJFCPGBb%I}h)GBj6y`gGOt>s`alj^gI5^ByrL78V(=OlbWW+0>cxh7f~gc)&uI^|+%Lx?BpfcvEa|71s}Qb(p2CUsQKx>pF&2w6d49m;c@Eso zLVgq6JxpXMS>s6N5Z1Wydcgn3=HB3Y~_-1)AITc*sz`Gmas0&0OnECd*&O7a6M|8p< zn)SnF2v!jMFbkoe;nRNZ?+3QR&Q;&{bLL$;;CVmiuz*SI(Pfi&ozvk48r0Lq%^5PZ zF@qF-666dK{sM+bi(a?L$)I$K6Yd2!hn*_cz*s90tZFJOBU2+c(9*D8?8Gv9ss0|o zHUnftrI1-5#hZ2#OQiTogqO;l4Wt0lHXeAIsoZNyMkIjv?%_gpVLt^+!dH?yy)xtJ z9=Vumpw)*ynS0dG?O(1ASvhX+=c;|sBzY*AhHpnR6W{_CU47M%_#C`uy&u6BTgr3qoC0ZpkWP*{}hGb2N7)h`5m-scuB%@I5b~s63N#>&WaR3GMCqr&>T9_4Z z#TKz4yS;#7U?I>_1u=SVg%dzDL6_Uh$&CD-m02gicH;WIPR<>X;fujN#_qC=fri6t zS(8Z6h=tWIRA@(%aYyV)evwD~OrFd1dPr`E1Vp)B^m7@Hgl76h+c)O>lYz8I={$wV zo_1V7wYmec@N+B=_-6KwJeEcMAq0e&tB04u zsX2j&1S*Vbrp;13|&ben8OD|5114p?dp zoyOl2YeN+wPD}R$ewR|d-)kK%g3J& zj&`JuDSH8SkG(0GkK?W`%?3Z3>oN(;>@z#jxcme}4N0HpK?dRLQ&!7{5pGu_jEm$O zp6-0fd1XVb0#VPxeM5_KCT`SP7$G=(H{ruhoR0=GA1);O^eL|Y`zKkDBf4YK+&hfX znEcV53AM^L5nM+X%d!C}PP8{6`8Z?TxGZ{(2Up?QlL^{u0;)5hcUqE<4elxPQ!BpT zvwuh|LDH?jw@@ZlP^4ahfvYr*#31^dm40LieEFczc*o+K4y#90jT!;={A1oQx zvv3DJY^ji|y7fky7Qk2FAC(2lZ*Jv?IsMc!B-{{&C+S0sVfc^cg+n#L;g)Jm#bTiv z;AcUf|H@*qJT~uy!x4jMg00eg(b$pjM#wz4t1~++^>b_b@b31RcT>vlC!HUDdy?)P z?$nYx`#AkpjfrK9VR!%mMWEJ!svCdF7P_1wf7yEsbX^~P z2jqo7x=2f6EfG(uf>3<0up1N+_76xk=v~bu`(UOubU^_tf?8z&0+j85$x{w~GRF}i zM~FnwcLQWlNic9p9C4j5P|4???*l-x1CYE&8-yBK*@(OxAaJ-g9Il;-V1YF{EEGE> z^|FO~x%z+$@{={t<-S%DFvi=rdZaath{UI zg%p-y`pXOC&G) z_f>tLRCja#v_SltW9t^U)$Y}=XZBpR+O&~=1p9gGzZ{&?HbL|;zaDmnA9luX{y$oF z*Y4YQ9o)RFVrTX(V&7kv0+wVaKO{f2@-Dd=<3D=8`+l!+->I<)kr=;;oOXrKnIak3 z(Yd{xwZqb$V-5w(Q_I4YdLW1O-$3mlkX&qr6oH@`Kr+qKSU48`7^IC#ci!> z)kO=9fYhhK-CvWm!rtECoassUESK?9lj!k$K2QA1j_h(Yl!p; z4UpSEe)j#&BgnL}+6pbzyUS@?=zC~B`7Ch`p@Nm&4?UdAGZ27O1BP;1L*l@Zh<5-b zf{{)m4asdvy8RZ53%UCCY%MsOh}{kWw&0qU!!idYU5GTeHr2oaBegcP=-qULQ@Um0 zniv-?aVK+ILrizQIR){y;Ttk*E$>=WNiYTmqS>dV3OP-M%G@Ds^om}&J2z4B?>Nwb zn14mF1UA|Ny5qd@I6V}zNdhq`Kf(rsOdJTgue4D1peY{3*B(iS5@AF#k^H395>_D& z%2r;XLcB9L#2hIC?hb)svD7_zEDV_L0AO1Sf`uADEF7o?6|V^0R701mst{s-09TP1(VdE{D5T%b8kbJxmGWXMPjy|=*KpW$kVIc7E0aG}lElD^s4o1YtE2;hy z%8<|kDPPG>gj4r8q_K!v_8cv?`r5G23^)XHEw2ch@rp&fMukvqF3in?gh*e>aC%Wm zad8W|CjDkz%}9LGgtXSV?%8`fQL|YHR;eowYwZ(g8T-=xRS*4R5JL6ea_YN&Yl*c) zhcB?>P!Qh&xP`#-$UdZybDQLIgx;^<#4(7}>IA7jv|`65d%{Ivd=Pt14vUqo@%^v3 z=6Vr(P081vpa!fZ36oXt-dWY?#kfUkMO!-1NgCQURR);jegF1bf0w?2NS&YFXt_(Y zyEi0Ch6dNv>@vM|p80I(liRAC3~%xcV8606Ji@)hZV|c@B@iV`AtYYoKurY1BgPLL z=r$NJArj=(bB)Q7+T;o?LN5KHK|SoMrG!P4K77Rr(y)Zsv!(9(5LXQgg#FHIaH;z> zszE+n>VFNGl0TIgz{N#dHmL~q)!d;Ac%On=d#9UlxI$>Y7o(r=!GBMKwS`??AXjMK z*!@uV#_kh`(I-wMeExFm%3r@nqfb0MJ3N5AfY;AA2PX8Lyy;N&AwR&W2HR-_f9g8Jnhuh|tua_1azEF1}Nj~NHcqw3dKK;_;Sbyfj9g@O+Xuj+ruS`fhO&Gjx``bm ztp%4^pKA_G7O~f!qi+J>FvLI^GQ}zNUPxm8^tsc3@etjDI>O0@aw()pz=2F{0=B3+ zWlv6TIs#D5!8KZjNHhLLzg&i30Nn8adBsG&J2ASLn=QeG)EL&Yf~b2EI^Ds=v5C<9 z9XM8Y5iZ1lTH#)Ald@lSL{?e*<>TDh=6z4!y?bv0ZH{aYYrA_}R>*N``B}`m=S$yH zdAO1UF_JTDrU1%4yp1JiQKa|jHulv;x|hQ2U%cM4+Q~Pp54WY44qY#@YywPDqNtJ- z>KMZE6u%c4;F+9dci9pvCXgoN++S{6$cafP7hc?!3|RXD4Tk@f@RLev*IB6 zz!z!L4FHBgA^Ep8EP6X@0ryypoGxsU{#YkF5#0@SrrQ@4)UuCnCfo10pFNZ&WPwe0 zP)$uo9@bTD@fNwj@SmIS^gyJ)0E+I)BI@^vU*9QB?wqPio^b4$IrezG>N&mr;A->Z zrPw(3zXWj@!jy=PWNs&3s=moc?Hw# zYmOPcCm+a7zc~xgH~LEa6_vn7`3|}<<()cgEx0SJF_x3X%75B4i`{WP`A&(9?^<-q zINuo8jRaO9j5~r)yN!)*q#7C__6nMyTm_35vKK)O`1?0e4U9S;%4`!lZ{kgNtyPny zPojk{WbZj;aPj_zFTco6Fo*-?ck32|O5fNAC+`m6CewjK_dj9+4G`VNy*bql4F-dM z?DtVgh`kHg9xCa`mU?16aYF3Q#tT~s%ANI))z0gQ6zRi6xFIIQpdR9lo#GIujaKDw zc2Ef1kjXBRQ&}|>tS#NXOuYBVQ8#@ZYtE1Vu>66bS^cuG$%*;XPoWT<9s2ex7UsLv zVK1K3PeMTQVo$)CK~F0le`wVQ3S7fg`4{DneQgY^IoIA**`*&gC=A3dmP zBg&A2#zMaL4_3JXe`V7qlkCDE4p5#SgF3u8S+Z$ z1GzGJOYOs7et%}89&kKkGQoo5{5|8uV8W3PH^@K!_~X~Lio%))sF5fCzm2SJ5uNzwpdZLTU?KyFVuIRt$q2D7wLPh@=X(!EzHugZjZj)%PL z8RMs;KYR%P@H;&EDg=w6^>UA!BnLQ8P5e>Lczc!c*6Q|lPlv6;<$J}J zCK>_u7MJfm+$*u=xf8tR^uH)Qc&zmO#Re~Dc4MG@}t zzF{v>T|0vSH3@6=fYHf|0*rA-#$<>nV-oIy?hN;g8@@)BQz|@sX(n111fX||AHYzppA5WFA9&-w+_q-M zV3gEPcx)}zPNSPUFGj!e`Zib4SkHdpO)Nc(1Wcf_#fy z-$;;YX?$FrZ5|l7$MMdL7(g75&uSY>O-H+xl`T_cjX{7^UQ=uMgSWR6dOrG}GP?>E zKa@O{`2OOqotowo2`D9vEAG8Izf$P}+?^325WOUM{IdpwX zEMWa>$KM+M*yMIK4I147P!|<6UKWux{B?dMHA&7=ObjO{pWp*bdBDUc0j2Oac>ytV znrT|Xvo}U3gIYJ%BS?N$ex&x5N9|sr8}HqWtKz|iZL!=x1$$?+#_`N?|QtBg}3 zB)5}!M^oo5>R*aSj8x}B`CJ06+6ptBp*Xqz;;bD*fmC0ze$lG}2Bibl$Z7#%Nu$xV zK+_i9*Wfl3!}8VFk{ZoLh1~U{Mqc@ij=D$erqn}oyNCqNTfTW!AABP4g@UkfbvAgc zi6Dp+pyCA6HBmv~r+d4+ zNAnZ7@`@8;8LuXLv%b7JZl|q^@WT25?ZiDVaqAZ^2in3a-SVS$hpgP=G7Q3Kr;P5v z%TuipV|`yI5MXZp#Y;?jg?7iXOF_7>#?r#!@|Ud#Wrv^NdsWz>0r^)&2?F)wty;Bp z!CE!1(}keasnq;KUJ|$m5b>24dbuaa=d}~vO!~j5syS_Tits{t%y)b{w{mDqvEj0_ z=`LL$7qz>BqUy8^?zX(N9d?BF^b%z}ujrDmbu@rNuSOzK?M(_4m0s;axWGk8SD@~r z%~uTYWIpc~C?ql59;wetGwe zmm2Le);SpPBKo+vSXUEJHdtdo+At#pEMoIGldh(0b5Vw9#K_1}J6sKL&||A-p?=Wg z)-k`%yoo=)uor^#@CI&=9zLqR(toPvRQ}%P(%%^I%Bdh>cE_8R1#UMz>?%{0xII)9 zx!O#=-=T5ldD-LV>k<5z-8d?hTG0hHl-Fs?L}jlc7#OC`Ct9$@6+SqNjY)ct_;17b zw}!tDtDJq{>^9abX>b1Th|J%c6a)EZVJ@2f+vNPv!LZ~MkC>ouyohCV>sozH(^2Rc zmdasEsPlI>f9pt!m>Y3QjwAk~p*6 zu3pJ&C69yUN^8rao|9_z4BYb`acf%x(i`mqC3Y;PE(BQw)vsR+swY_o)g!)5SJ1Cz zlh04$l3cpf%d1=zUb-+~{C8yX!AW?!$o|)>^y@!ilP1+(+UsUC+6UA?^l;^66Kc;w z0>>unJ5Ewa5WkVU+s+N6fv_URtI9qpxP!yZ*ymJgl2_&dM2x{gt?99`LLfTmCRzz5 zG+0gM&NT&Gg$3a$DeP2XZtM3yoCtFrkK#$QTXV|~&l`sOgx>urAXKLy4~faZH9t~d zpohco+Xs(H+KIQS=C3!^PCg4R23iTW6$Lqofs#W0OEKJ^eN3fhZ#Al9V>V*2@9Va7 z2rBC9*I%glHeTO)D{5X{ewHdL-O8Vd2#wmkDGknWmx@=B-W}+5_v8y5OF$H#t@i!# zXv}8EY)VyQ)7{CP7(PN?!SW=NAgKHf)C%51y)iO@DBHYIPZ&ReC^$J2(ZL5)mM)(a zGhZy{WtUN`YN=iRY>%bfE- zsYw6{B~>AvENfh?)`@V&ORYY^0#y0RlQpT^d|QpKFwN&w7;KjpUCvjUgYs zME2kCva+(WtZ7?+IP|F~>f`U*h!QFxqNbiAE%$lh+wkZ2e%g1xF3HKGMOktJP@gGS z#R&ns0ln=9(Od|E87pd1AnkR$*~`W;+!8K$f%uoS z5G_f#g|Vy^gb669H!2v&P;Wo;WHy;gIRf;Cx|(2>V6hX;^3PB0emya~GM}2<#@FPR4jFjtJbd>Ju8Nf2ci7+q zcg$T`n!>%>=~Z)&lZ6qd@$VBNH@n_~^B=1K%#NJGJvmEj!ttCWO=<{FmY@9afcBw# z4@ZgzPORLoB)pZ4`Wm+C8p4miU3%9NOsK9W1Bx#L+OJopdcAZ%nOAkHs40)`TF1uxMDL~xd zc`)fmHIR39gU_LemNB$7RMU|cl!s9R7_~_NUs4q6dC`LhlXA_?0jf|#iHlobNVsJJ zW^BT^mT2qt12Nd0h9!Aq?16>^@1jssaNBgpX|SkC^lb*o|{nYZ9NtF_(V&KsM4 zT2gYlq+w|qzx}yWBzbaM3s?+kH>tRezORcRQGM0j{0}!v8lpE-5}Lz2tc1{!-$vuT z(q#0{>t_l1qzNg=%Y#uy_4zNP7lVpcO1!S1^MSCKH6C!Yb!9@DR1?K}UJ;3C6A||) zPw?s+^Sb^H>vZ!2Gad^<***2NFMRZ`Tj;8^bRz) zJcK9>lurW6LMGDr@8Av}0{b0?p~0*>AO-~!x#`Ze$gKnQjuGaLFh8nH0wmk=o1>Le z*TsgfUH;%~QBaXQ{v0f!gJYr&U6u6T%H-r#;jpTxE*EjJ8=@x;oEREb=5K0u%(t)R zeL#@34MHWkjj~+$?!`Zhbned2oG-C8+Ui1xD~B}{;QI~coJdurq_zqz^L{^QSv1`q zGTcoan&7XWFfnJtu}$y63Bp*@1(;syC4mus3A3QZlCFtEj%jSllC+oXDo&`9FSA!r z(LS`yf4{u*Wp?)@I4)JA*VIR?s8IWaz9}YIb-x@q)nvZl6fq+2UWbgel&OsrS7%=z zcCSyc=_;;v&^-ozOR&mI7gt1MCPu|E7sm4sRDHJ_DSK||==RpW{>qEm;1{(^p40U@ zqsh0C6+%W!OLZ<<#9eo-plVVdR$diLQT?#Q852Tx{r)I5^=OJvN(+A=f_~a8rQlHk z8cHHF;O9h)So#4f;2LFdQ^7LP!dnf*ZWYY??s!MC^0TU5opCb8&WkbP9)JU_K=3NlJt9 z106^KgMn#cFyaJu_-Lv?lwKphb!>`16G)onjW$H?xX!NDRi>mOt$%yD5b%5Jg^RvR z)ozQyzP_J%6*lO)vE+PG*7c-p^G(Re22s1?MKPZYc)JF(ID@?z^4Cl~Ns~j48Wx5cPr8mchuh)6b0D~SSsesnAfn0!f-pHym!EzwtoecV0;oPL4(^25y+b|ZCXk^4*7xVpeh zVEG|Si?N~1fBl@wXU&&6MZf=<6;)!)XBgwRv)XraT7^2XC?oD-!@mgjcrp> zQ()ZrB=izYD6`K|9y~c6t#wD zBsgDX{Pb&?vj!b11nQ9S?#GxvwgMb%V;`&Bn^dvSxGP50d|r0zsG}oexHusRhA@6d z*LuJ}SV=6(;s6zeMS=x1enI|%yqEYv4;a>mo2VQR;~PhOoxHX4NcP*-_U`EV4d$^_ zKdqmY%)m>39H6-UA10;G#Sau-a|j4O>9BajzbL2E+uc;`uYYy4yQL~KW4FS|p9+iC(a)^tT1jVBTsSqhlmr>lG1r;#qn zwP=ojbP%ni&0( z&H4qc>;*+{R*xrJNMb!f{9}g~GpT*uOebbnv&Dby9Y~RWd=bB;A3ta`&-rzmY7# zlkGxRV9^!KF|lbGEgA=#Zey7w8dk^qm=gPkbF{Dr9^qTEAI%y$ol?w39pMLLQGxIV z?2Jx|`{qQ^N@@GHM|k`c_6nu0ol)?DkeNg;Azw{dJ;iiBRYlG&naUKAPt9ha{pQNZ z*&Askq=L*6Zjg-cmK;3;{(wo%PNL8^ke?Z3`zCcO=ag%<2B?UGoSS&m!A{zF5{ga3 zk(fd|#JCB3Mjk;LZZ(5m7mmY`;zaSBQCW>0CaIlJksjOefN%&i7P=OzZBStl{kdM# zS)=07veDYfibqO2+Aq?~CltndFCW^9rrQ|pZ2QTa-}-p$)ZEf1kI-{{&iWUxP|WsE zTL0n1PN~OM^A*x1?jtFs*EBUVVW!CdGd{FC{#D5c{VsbdaR-kYRJM4$FvP*k7Hx7IR6h3pP+*o`}f0sqb3Wzf|ai%rt)zsZ%bD{MSc@t?^C9yTwTH{b0`WCda0} zF`bM<)<$cL6Jr%H*7p?l2WG9%_arKkzxN+KY2_`GtOjk2^3KIENlJJ$u8)nyC@Jj_eKfr%q)#*YgmyZ7 zl-}yyU1=J`aaexK?+mxL4(fP>FX`v=7Y6y^MX}SterslfhTdzVZ*AYTtZdICjqAsl zU5=uUy6D&%ZawM0TC_#$4{lhqzPtJR&;3q?5d$Bq;ze$rYWa3xb=x?C`E**ePbvQf z_agUV_2o-KN=gE@hLJ9z*9>f1w|>ZWnb~BArN{bY1kOb$%8p8UM2^~J*qoXP?;D!- z^9ZG9aO(<^t$JDPnIX-+)!EWo^l4iE53hx!C^}{X0vP6|$tx?eX zU#ZYCu)zt~YFZ$%&icir)7~^1?jg=nz*|UzNV2_AhxVbl#+-xOAgMUh)vfJW^iqI8 zwt5yo0qMKp4Uwwnm|5hT6kpNKMsb1rWQ~K=VjR_f_n%9ff7#tlieVH*ueZw*(->I) z+!iwcGR$3CHbdoO1-*}1>agl1n3u$}X$y)MO)cwkO^#=r8DrLe*os*R&zIf#V|l#g zqho%|#(aD5+B5z_(Rb^~#ZVpFn5A2PJ|T1Z!hhtq_2-AQ-B=s#jE@#=HV6wUyz}8u ze)p-EsgEn&vKu>pyr=#_3;G1tFf zI)fQ|y_t!AaEQ~J)^L=VrpEChNS{8Kg^QlcipiAyuam}QEpHpOguPzt9pV(5Yk1q)-87wc#9S4=Klk&;YiP_#G-epw}XN(C6 z$~k;W?}Q#YXD+TFIf;3cqo98#hfOP?=v-0q;}jEg&h|~{sY&)X25q3Nb_#~|Q2Asm z1g@Tl#gkCp_)ej#q}-0Kt}Y)XC43(15={+<_GWg-HSk0ymu03f6S3(R>n`Hz)UK{; z`Sz;%^k!;bI%GS|Z&7Dam1i64f%aV-J3)0 zKT2|32Z3w8zBkJ^-t*(p`X6>J|FM422=OZ@mx8-Ucx0LN~XupHRq(Z858!dwYX$gAhpQ>(CQ~ zvnFB%?h`4#yN|PFe;aK7rkfG=a3xxZ*?~HZbP0v!v<#X1nQBef1j~nuOS9FT>wK(X zt#}9VVg&`=IcQ(cUZuH$@yxsp?+EihSDoKqA5DDjWsIev}@3sD-y@R|>kFAJr#cJRq@OkxYEPer>aYhLq zB%HSrzE6mRC28Tie(zs4B&{XK>{aHic*nd~%$M}I)A3Pl@Vwtz5wFSE@7AZC_efrZZNyZCkM=%CmP~m$dA%D^f^J82Hf2bN>4I%%Q-I!mw}6 zvs->C?#&x55n*BHgyYD*Jsol((q5!kvTs@-RmnT@_|j(CB@}Z4+cTjjcsd`a<2?m) zTz8Ie9=#T9%2uN~ToUYik#j$tC{Q9mEhP%w&n;cQPFjCGPP-hu*O75qr#ua4jb)FZ z$6%toGFu&pL0rT7K0)me%PwX0j82b75dTpkCyNEY@ zmA}RRe4aa9hn^j*;J?>3+NnBQrx;TR~LzGQV7rF z+EJV-)<*JM|G9cWL%DfS?~G(tSWlJ=*OM!kPA!0x0Ixm42QTh*tcjZ)byv7Nn{$;GMduSgyThTO>dRJew` z2K-2B-}rr`dtrIGR~fzmu~x-cGTy#~=xJl4ai)plnd_XynSGI&5678B91Y zBKcU+=Dq?DhK-KMshCbXN}9-7tJK*T_K---&XJVRojE!z{`;z=d9dw69U;4fu>Sk| ziWK*7PJ>MA>T7A#*z3m1T#Qs#qt=Yhh2oVdHRFub|2ipKVuI35?jMg`+2dAHhV)$Z zdn0-*SS&p?S@YoB0&WmxLeKRI&>=kodI9jEnlh)dfYwLR3GT6@*j)k5XFcarz>O<7 z7yg8h%~&y_G3MxdOV(D5Tb+7Re*K<=zIw8+u`sg|H3pK-D=s~K!k3iSA%tgR*)v%~ zaQ`IYt>jt8fBeU#ENgQU2b}PFL>HEM$Mt$OcXYXCZ=fRutMd9n=`VE;ifJ^JUKjL4 z&PbhRqM(HeMUnDr{@{hKVE5WXJ2R9tZZU9p;oZG6R;lM3IrJMct-I_%=);8Ui~`_v zr`b(6E03K~VITf~K3%nIY!N(5L|AOIs?_D>!K@?+h9l3k>w#BzENrF^zU8 z<1+48_T*`jK1yB4vaG|C`;=JBR-eQl$0zJjeb)^5yUsM@6_1(QU!V8a?B>UKuRV+Y z@+_!rvsAO`J8y42g!i<6IeHJ2$oWYBHHdtW`{py_OL@9EL8kQBQu;7mkwt$5QHPXX zKMcZ4A1wkt|ObyEFrLtV)A7aPQXoqv*9ig{;)p3iz+BQ8x3bwXVoWk6~CtMht%?e=n5yY zF9NFuls|HT#e9INfjJSHeetV`HBf9w-`}@h+*w;17;4n2rp48=>^d8@da{TDVx*q> zPwrcJk>*RAC|Y_NH63R}OAnef=(8SpDw8GRQ;?N`@a6_anG*-_DNvN08=?#~Vw9VL zpx>2KSSTyjkY3*e$|@^q)j#|R`P$jO)5$V(L0tbO!;k*$1f45S$#(2m%osDPHIPd7 zHC>S8OtN!{BppM2dX>cirijMd8)OqP^nu@U*TJY)@8CnPRzvxNp76 zX_tV!>?pLe#TkmCX?pr`Z=YkuK}!q9^ZrXMU+B0LdI@WSRx;SS>zqpAuN+KSI)8iC zZqAMgvnswl%4z@bSz424V>FLvVOSE1uj+#fFP>Zt3dcnFZ3ui z7@cJ)L5QA6C_>zjSBB}n6G)r`{yXO$w&vc{KeL=|o20wEMCi+^MYDfPQ^Oz5$ivba zj$)R-?)UxQPRiC|b%+Q-b0n3P(}c91p1YLmliqMN8>cm3nF585PD1UNx)dP2dQo-> z8$B=C?zzUcon~x#$9z1Ik5nf?Z4n#Q{i*ye+i}CS1%^?7+uCBtyWRMj=#h{85gSwA zKGa0beEjaQBSfiEnRp^04kyXFk`0^&&?^nSW|QqZ1i-&Yr=^)&U(jhfQ*;dy6-fc@ zB}&I#c}>e8OOPUmmo^iUOICQvR$I)$y(kafAABZ@X5*r-s*JzV>&q$TmZX8g8+aHg zr!SrQ0#fcnvfYf?S>$KMaFL7>P=8d`M59XTwJRh-ChWQ>(|X(Q)035-*?K6BXIj6W z6t0>^_7$a~g_NG`Y2j&VozdsmLOb_=d80RO;J-Xc3*_AN26;Ft5-i27I*E=IvwVOP zS2M?$4r|%>wIvkSt6aU5*{X6;WlUhMSI`@O+*0_#!O1Fy^c8H2zO>gF$ zUO%F_SH)Xp@Tc#12w-T-en{A+UypMm6upBe_EMR(1Zi_-J(^NwQccS+sqRlZuYoUN zvS*Yop_X_%&w`d(f9n3dn>W>`GkbgNPZd$(!K>>}jo#|hu{HXhY25o~$+`Q*=_V4? zd`NSQt@ZY;zcTkijN*Kbm68?f(=KK|K@ewe;C#&h*agVLd2#qP-68Xdsm|QZE#B%M zS~_^77!+e>{X%THT21Tks%hIzT@!2Oh(L}JqRfw0S)C!h*1Leizc$ZEBoS?iIO?3s zjLx-%130+f+XaYfMv`h*V=;7?Ce zz$oNnGcOypGEH#84@^2^(Ui1hoIsNnO^xGC?p_ADKGP?6kUG1y)&9wr_st{hCLudX zHPt>CRg^iECJl0rV#gVxSci)sTBnZed{#O~K{=TrleIx4WcD$g^`&$6{f(FHx4MU- zHI$QW=r&B}V@#44GmAz(=S9dz$0aI}h6?LZLJU6=8%xCI;;2MYZf;sFd*LQ2j;NH6 zKG!21CfhmV6ti+f$9T1|I`X{_;%gJiWPn>qY;xN3@jwg(Gt=)%Q*ATl6JJNNCinxL7__ae3jepk+}z zSdVg&YO?RGCyB-p&_tR0k4j!~{0)C}2nIcNcbDg#a;iC|yJRZjOB;+8&`Q+(IR3^W zC!^Mu_=}%6+_&3h7C-&6{Ap(TjU01goW?Ri`QeWX;Jo7^Te4F-U@@|WTSK1MQ@*0i zA;d+9VA+Mc3e(l@D<}*VBZ?pK65!${dxLt$J}~zGLI?eBs(ONw)?2l4`XDRIG=Nxs zzjPl*S8X&ZN<#yb`vRUpaGf=P6F|aSXT~}VP^v({-&}o(Mhe?FG8Uzbr{Vxi1No>#B9W?A~h5&9==> zj+qZ1!Iqf`jeoo9DLr27;jU(4&uX6~K1qBb1O|6m4T2~1` zMFgBPl3gVmLY3AN|Gt@yMmqY39=1RJ6zuTMh<1?YI zrIU41m^~d(bRMjk{l1wosP}wMB?9s%l0zYZmY|i9?OYHA_H(98G^+0lb|27eeb)MU z&ZPDM-#>l_`+_9cTFE`mYQ0qi%rBL`s8TA|B^zyCYZWdji_ zI|_$c zatFmA9qMejKOmrA%N-;N5M_L>vVW*f&Zno2t>U)t=kP*LVGim`(cl9|UDsC)=`*Q5 zK~FHZhKu(0J0o;2V9UkfD}O2p;7g=~Cei&diN!Js))YlJ6RDv8?7sj0 zFN>9soHgo^L-@dX0;(~Irgbb6ZUp!08Fr&iPlqR1A!#@rJQRO%D=%xqm$G6CQio2q z4>C!j%!$qDw)Lc#L0*!`&BCn@MWNpouEx9`di4G8R)Oa~s_4$qdlgw0O&F^tb-&X& zz_yB3h+KS1&>B#cW$X3X&7>A^!G1By<1s{0F_tB)SNOw!88WBUjk%gD>kZKa`|*4bW=8zF~ZL^11eGn1Ne zpZG=3SoOHVt=b)(!CkA6NyG1E8#iZK!UjL?TOdfOw)00-{6x#vboWhn-t@B|_q~2) z75(1&ldMc?EbCo%?}hu9lIRvm5}_{u@4gGa!n4JZB-1We4QmVQr$Jhl;6uE=6Ehn9 z$$v2{g{g=3(+@{Dc+@C$by8&dmO~$8{fLz4c~|54&u^S!I)}z1GV^Ld1*9+y*mAG$ zxT3rr*yA*6I(5amiL=qM>D~maYjuWJ;>83@>@w=mF(T;M@N|* zp1HVWQjn66ey)H%>JV|4m~mP4p#FvGOe*&xCXqgD8gQt7_%#yl3?!#IYml55Rq8W_ z?X6#c1)O$SN1s(cm1+BICAdk)`v)kT@-Q?80j-QT3J!~8N53y^hnst?hp^>zkG|gY z6qu-7o~q@4Fx$6n;MA08)Z_RG2a@11qWXjom2ildN;q=tm?9K!N@(xYU%NfADDQJ- z-mycCI!815`#fU)%9*P%CIS;^()#^kHZOBo&txYJS0;9JY$HGZlKQW`v8C~;nD4lJ zU5_U3wQXH+qt*;kC%8`w6rFlaD5W4B#WfP4M?sZ?sLFjTBR@$%4b=26y2Axi^HpKr zjQrIb-#&)r1aj`-=tR+@oX133;4x-BcK3@KUqO~(VDuL%wrys!^|qBF>L14^knS3q%|QO4`DtT|5#Xwpn; zz_orp8hDv-4d{2S80^LL?1E(ASZSv7+1{fZ@Q5>}(lV5+M8f)p7AWVE8HV-)ObhK4 z65){96_PB|+FQUE&yf@I9s)%7V^Qo=NxyW+k+2cWtaIoH0lW~&KlhjO$BxFK-&{hO zcRn@|cso!}oORVXT@*{kHtFbJuf7~hR&=6dW9Q`FTqveFFilmx%YVIoBuPudWgL*2 z1meNvIGrY_aX1h3Djj!RU`UXoLfbgqXU7SmAZOUUZ2Yl|rO03o?J3LtV{&=+r*8(c zJY$*G&E6UVDGt41=I-yGJN6<{mW=Pb<*X@=z1H(b9X!f$fgvw8Ed#Q4HO=<*$)f-C zi2P&uTTbDgbf+9m#4jzsFnUwD_3ozzM8vknk{#HwLM=pm%}OG} zcr-?cPIEm>{4ojJcsn!+ONyJaUSi9=Ekg}nI&xZ8kra8onzi|>A^gt0GT}I2s_Ivs z2FyJ~M@mJFi#m{O_7j5wqEB$}nsvg30g6Pp3Gb1F0Mz#Qb2I}SXW$2#0Vj|AM$TA$ z3$x8B;$P)>OLKz=_@0S|5MFxfd~$xnLiC63=$dKUz0LNJjgq3B2h%RP!uquMIqa$I z&O6#o!MpFWIvY{(6qHCGQHCg(&CeoD7Ynb z7}I)ygi_|@O##tR$y#_69x8oTS|09J67E*u$5D1q6&W^*i&c59A4gG~QMSgdKoZTB z#Gdkk(L%OoZbvS9klpBpTcW+oUirBoS%kLSz0Mn-ZZU9oqbP?_E-W3N^GP&KphN8p zP{>kuae>M+8%cdhAV&||+#fa-S5&s6(9IrDbd1tg0)l5^#+H(w&ED=I5-x?de_D?0 zSW=GJ>n5zV>K0Azt;TGsh4R1V^OL5HcgFY))9mr{QQL0KVeK0!)6KT+^IlAr>wHC* z5Soe|!d9bYZwj^X)(1bubD4oR4SnE>wa=VG-cIbsV@zjM7COw*H_j{0g=9JHMJy-{ zK99##T*^Dtsem5BzR&g&INiVm=A<#w{b~LzmfYYurnOO!p~A%6sAITEVNOPY`4abu zDff!_eTVBXz^jAGArnp6pU!9M>j~UWKE1%YfF{&Iv z&K0fb+-%w6_T7HtN2$J|tHm9jqLlTfjp$TZ4fVXjMwSRSE#ole1TtK>?>Cf}>eLTE ztuMcPGk`JqLZ_-9*#r+i)u}4gsk(gAC4X}GDI^#u@b`5G*!UMq?aQGX?%Vk+I;;t$ z;esU3`}gldEr%qdatnmRoo~YZIqTt>0Y}iODAftPc`YB_p+dT%|Iee2kl=0Ms7lE0 z)|uwz3g#?pVX<&Kp4)h_WIgyY-qM^H7pcHeq0On*e&PxEOp0l{T60+7e2XVCXv(0J;9MOO;20Q zL-F1@3(Q|+n2ww_878J#MoBWOg84?z;jB_T*)9}+R#g%&tk1=UW_0>Eon>~XPe+8P zH#?uocFIUv5pM!~tLx_<;;7Sl*>d-Z3f>>D!Oyub&q-W8SDF{ zbpLV%m#0u%xg3`$eO)Z-yZZAmMGNd%S}g9ho=sqZ5S=ll%RIX=_uO@Z`)VP3!Dwe% z*O2>2x9#SJ2yaVsa*r{)`)ay*xy^fHz+m=eb8FP#n?}DD|KIMAq%Jed*h0tROi-G* zD_W%8-!zPUVz%;Q{xOJ_^~DNvf))gbkxQ*b>z{{8Qcr8DhEW8|MT;FS+;^x$MsQpL zuG&BpMX*eiR|e;+sdQMR`UyrEH5TK@t; zh;Mx*vMJ3*uu=bSQJe4bCsqKD*(2~42qfXHs-)p3mwZ5rb08eK681+h3xITf;gFCW zn{XHtpQ*OG{7QLVEtE?3(-O!-`*FOc&>P7eC_idV``+3Xrg`NIZb_P}PJ?dH`n;tq zmo=ehb5x5nP{w{T#X_NJj1IXed$y;_$7>nsXOx7JmEQX2I)52m6tZN#I74DS$Rq2- zq6ejGih~z>&+F4fY!sD=D(0B10`<88drX%4#bR)Qi+=@=W0Xj5>cJrgtAfNt(JV~PyvaZP4<>ADMr(WI>oR6HT8^Ui-Y zhAtWjuf1SgKs=j15XlYAPIPrTH4>xa5ElY)%cML zXe(^mr{o=Gy!KfD)W)Ke6Sr*vs0am}vPae2T2=joJ+XY)^aT)yA|}hnMcg-$PD@bG zFE2pG4t(Z*=)vQw(eW+jXN}gT!xoL!zMXHDArUHBOB;L1HIuF1*ZmgT8lvAW)$FD4 zN0)L!cuvjBEo&hQu>7Q(B>t4nmBPxJ->{H?l6M4%1vG9*8$|BF6eRBqlR`-WZ(TtS zXLBmTcu_YbdZffE)u7 zgqeBc94GXRP@KsUjYKnO!k=Y6s_nB1^o5$sa86yB)p+cXn6*8o9$czl9mF**7K4xM zOnIi@La9qYd<=X2K8*6*-@|_bUV1?Gn?kctPWM-ShS??7s8}%1&-5vCHDlHwV;cpv zr~uJ!H)w2}n7h*Bd?8)b-Ws~kzJDKxu>J<$c11ZSp?8tE3T(!*tWy(LetX2>XmC zBi-r7v_JBN{0_g|9G$F$Uci7(fb{K4gvdNS zPznCW9Xk}w&3B(Wk7}7MndkoUy7AF3M9V-B3-3%oGni!KEb+mQgl^66<=@BQpArSU zm4ujh{A(1=4<-Qkj_!Dm^}eB4RQKWM)SIq?gfM-oaFu?;`l&-^y806>d$gTkc>zsD z`LuFYhO06sNdFAii}?t~p$z>EgY+HFGA)|?>)y?{hAvl!E$}u5_clWLV~c#BjaImQ zSU$SB#ax*4q3ZhyJT1c?B}*(2qUZ>E>$)H8Q~tb;)Phsqm_eOuwozA6E zjI5bHZJL%eb@eQ1fr*i|5^fL%m(CA+g&BMtza)e&%)?!Ydp`;VJU|dWDQbCI-8*+> z=3^diN|?!FdlG~=+|e~Ap7VS#I%MJHMoX8TI+AH6Ea!ss%SG*%o)*}DHj{gZt?diZeEzy(v&XBgnnj*1zhpXM z+4%NleOfBf(Ah(Y76GZIm)*0*yZ~RU#^w2t7>%M|rEBi5Tx2=}e|G4h!{QJr+n_|- z>BZyqrQvOfT1KKx_)FXYA1O3RMT+)A_|qYZAF8qgJB;eoODa(JMh*5kR@J)p+0e|4 z)Z>Tc{A`+z+3VZP<-s6$Q$}8<0Y>?R=@nJKaQ7>{HrydAR4gLtGxE|q^^SN$!g=N5 z{vHJOhd1- z^`vD{Tz!4o>^*XiBfcS&zu>WVxjCeDPh>HA>=WEGU6VH~izIksQVxMzNT4OPT&nK1 z$Vg&pJ68ulWukqyw;Jt~)d|2P5pp`m9RY|mD62RR4HrT+n#n3PPszB6dH^bkz?GM^ z3iV#-B~F1Kbw-Oc#llEQB@zoxG~v-^tUDodKD3S5>mYu}|DrK){><^@B=pAI-#H&h z%*OQ&=?EM9+n`d6B;Vq zO}!?ueYL-+-|7ao8b&P*s2!eZ2ArymwlBbh#)244)!s*GW)NU?a~QhSxTui@!`%C$ z-2vrq{*1>}oBt=ANO1q;xc}K8;&4AX!sfrl=bxc;c>zJSfbrGCN6H-pG1eAKu`;F) zC>A{>sp~#bEN5XVS^TwUfr2uX>~>-GdqaEnSl6o5mfGy@1VOtxZ{<>Ftcf7lGlN1Q z=l7n2a@>0y+ft?yW-5#+E(31^8Av;v1VZ)(jM9VB4cs?tk#Y%e^uL~5{zv+b{#i!B z>Fw`oFO3vcP+2L!<_LJn_89IH`*Z_Ld|ELuK#HQzl>hZPtWV=4cxt-h1O=Sy8v+e!wN6$C; z%dGD8Mm6=EXnLA^2)JQlL@o{ox>H}eK`k~tgH3bQm)_9kSa?tA3Wu~9glahX>eD{W zl{g67U6}-OXO|gXwJgj_7sOFe%BP!YWQ&R9mB%v7UuvaAq`e!aQvg|xp$!cHD_+R1 zVl%(HsG<4MhM~e(a;;5u07@1`EJ!A!;#XS8TCeY%)TqhZ#}%IAg^D%dsVG`5D`=WFQRf;k<9HVT}B+nh{-tdVMdzG(I|^TMAPT9u1xN8*vzfcwjZfI{l!$Dddlv zJr;8hr*fRq4Kob%xozeuep|mT^jh_lIKg`z@-Dbf*6Qgo6VOLfX=85gS7R2|Vkip& zxFsQqU#=itkm_&fC-WNe9Iw`P7)pYoh_$eZJ+>1sc6xcYb~dD8l+sVD=qU~GTo&dK=e(E})zTZu5PXyf)VrLt=?$a&>37BtlUj;pm~ZY}ua=H)c}R8>=KKZ@ zQ0@vl!WE^w+>-a{D3!p)GJ{Emco1^QNy^KOjZNRhIbJfox8WePBt=TL2)C`)hGM@& zGXoK4Cd~07_^GTt^wCPQMjwn;_2(hItdu&)UYHjf2-#Bf=Db~at zrPzYxPjf+WC{EQgj}_1|vT6XVns~_F)(2laX=hYv;Oyndqoh# z?KJJNw#&>B4FBf3<`Xrf?Ts}Gl3{u-Fy**Gw2+p)BjK0lv^T7b`O4jLVFEagJdJ@J zczwq`*91iko7q%8Mep3?P6vfd?r~F*5^(Pge|YJZZFDb21T>2JSh8);$FFTkGE7Lg z(Q<7&q|gw4LPTBPc=Ar28fa!PGg{c=$udlBR`8T=H7lx#M4MKZgs@HTNHgPU)0Yk zxWfIz36U1@8nKZV1e<_{1u-@4qDWI6pF16!W@W4wQmy$9v>#do4MglA$Waht&IgD0 z@BOQR7X))XvKS@aXOU3Us^-^LF@nId z;EMj*_sjwXHTx%R6z#^j!aP*iYdxA@q2b;G#N@bQ+C%;ChN(#uUHu#n2P$TeQL@S{!VF(>Yjm`9iy&pZ$pXv_|P{Z=^^Ilw%e z31!-|;HZGNqyW^wG|4E=q6hm~SF&vdc@!&*SCSfpnows6?ME~W-}YT@S+U*w;qqCE z+o^8@Vf@nR**)m(8~rhB8w=4N`(j=%SGj zZ=V)t+M@=mA-L>}?|-MoAJwuP&|+GH;9KYfLqM-$RIMa@4wqO zDu|N?#-t2WO?7OyFJ$k*bVK`^bg1!Osj=5aR?&86DDbk|sqA>gF<+OfG6r6VsBnL&Pe0uuSkya^DuuZD*l#xai5h*B{s#)(@VQ!Vqp)vd-o?>(RTA*=An1SsgWpMN7 zyLD~9KQsyTE|_aGF`7)XEuFjiIj8OWt@~&{9EN$GGk`V18dZ1v8+BmrJc3-HC+$b= zxDZOEWk7`zOP=-=f`kiz`)&2icbnPmrbtf!Yodu!TYASGNV6qY?I&TjnGRxHWOR5! zPiK1?;tRLt8u(sDrNO(QICpHJu2CV5PG05yk<+rqtZ5DaZ6ht2k%NkFd4LO@{XfNh zd03O@w(s7jC|E%VG8IK61(~7j8exk_BW43(3Kx@)ertVi z*2xBVtE0eA4s8?^C5)*Q)?M~v;9OK<+b@j;L{X0!sT%uvzzTJ2KLxWFGm4oHqKtGvh_p+(6y3<2wj?Wi_|4`~^$%W?53LM0ryg9r0>9X@*X z$$4<>+0GZck01SPp%alu$JK~?$V>TfXk>cY;gfS-PY(V3;$}qK>kV6M83g(N`wt+@ zbJ!>UG&pBBZ^&UCzmFC)uMFkiN=1U#_+e&6d5$S_@qF^LHD) zbnWLO2aB3ajvGLYf zB@SedzQFp~^~|W4-#GY->jvV2$RNA{@B-@)d~zY~wRt}O7mEMV#Q54{`MUf4^-=1Y z>;2QM%kps~%gWq2da1q7FQ)AwfAbM2fnWb){kZWO-J{$1{%8JWv#s?xJD;Muv$Jddjzizr@@^7zA@1KgK$Xdn* z?kWrV2_HB3a=uVU>6zlmQ~jThb@G-;Z#YjGQqF1PqLqkjihRYFU$Dz-1Li!rM64$x-T#) zF9o;7`s9f-&xr{-ta?O%BsP6*i;)j8;bXrgc0-g#rV^Tl(HNAW>z;R#&6*@M+}gBx8#*xdDhQ!5%SK; zUw}}?7ov*hW>bse8rB!)qKn@NZ1kX5=J$Jg4uf)Ke6eJFc!2F z`XF%iiSeqVgUFQ~I^Zc9)n1!g$qi6=Sm<`M$?hXNO!(Gl&g0)X!!K{Iq_xY}pV;pG zAi%s?~{a*Q6yM003lBNPnC;nOU~80o8= zcZzCeJkl>>zf0AuuUF=8it7w~sBDz}w8WIe#D`)Ws_t^Q(i{p&MS!}XU#i=T7g^wrcSk}8c?-YAWq&X~2S)uZU?_TXNTF3?PUDKLX(WMgkV zof)dcoHvdnipmT3NK7ZEF&)@}3sQf<2Le-hk*WEHxn0J&R zFUZ5Ww=Q=EelSMA+x?jrpocR}`f2u?C!S5F7dH0Jrxi!5*bP;c91R*17uR}nLCaiMzCWGwuFWe`r^rcJXw7+Z z!N@jU`%=bF{hnrD=dmk>(Z?OG@#^?US)wUYdO^!#WeM*nx*5}Cop@lp0tdZ6;q5LE zyDBU*rawdEvSG@*gMQPn$m2Hv445VrhPqYR{lx$wC!3WXYQGa@g0t)A=vQv@wXiK z^z5(24|{JPCX6v$jCe4HH-LOX9fcxVdk$oK3_9)$-)6>kurQ};kEkKq{7ZU|-Y_Fx zNL%_{dCkQ6^FCx4CIqjs7hRRi7v|4jF3WgRJ@OsQj?)tSZdGumTBlLaY01&?VwK!4 z?`*v_4LYq)zyVgN8E$-&;#yGCndQZF+r0Vmq3LpevQ&%rt3itzXC9u;{;!)V7ML_W zva6$_fR8hR#ylzl-}s=el#?@&vG!4W>Vm>Q$;UV2S)|N)*KUm(4Sy`yafa8#!y0{0 zqX8dD0iUh#7(AGmvGnZJe2wO?A%)~lr|jenf0X#r>WPPp8J2g4A;InBQcf5J*T6Sa zel(Tebh~7qC1yptuG`c;wAN9Ed3A3Y)1|Cn^nH00hM0OE(5du|-oEvYJ2T;GIZ29j zz)rxh(K%wtvr9zfDzAuW53snHUiKp0cIh59+vP4JQkSH?{@0DNUOOxs-7&G0E+9RsL|CW8@TtC(0l^oimGpZ}ioQWs) zidwD;gvD3;wiB^n-CE~ zXC%7Fdf(r@SAI`ipZa7?H??SNbo}OyS_cbVG@u{JjiG+i`R&+C55s(CjhZz*Cm!|a z4o%F^J~QL*Cy?kA8}{f)!-y=uUHttX1yZ(GM+G}Bv@Xe}_`3Fsu$v_btHnA0zOdM~ zI?9m`E%NTr0!-TrBMzQO*ZyK`^`tvB{SFll|7PO|7Z{?_{*T2ljDjvT(DsBh-o7|r zmp^~c^TEv9qtXI#BQb+5+ZkS`Z zY)IhkzVKaw+D|P|6cu6qJovn9!+YlvvKHAH>LNnJU6-UJSGprym)BBpm%(T-!;OCF z8lIN@J|O4Es*Lo=SM zft($0Z9gNs(-G%>3Zfa=kGOkW=eNt}EUQYO6$RO7`VR)m*d$O<#dXGHuI5=!-oDAW ztRX;1)|l~2(46W-{_yzUIGtvE4F>EN!kB{VY#{@Gmnc<;v?Xk>6CPo580BQ>zuvfB zIqWK5`?M?NC$9t3%0fQ;|lwY2_GdAQ--wa{I!#Q zw&2Zat?z#=Ggep{yK#zmH#P>_7c-gS{kzT*qq36f+96#U|2<`Xt_YvI>VS=6N|pTzn)2H=#VIuFwrTW^d?a{^m>1p>ph|WT6ulNAkrEkVpWJ zCK*D9x!jwe*Fxv;!PkgwYX1sz>}1doED1%IPLkGs8EAV4ZOx*oT^%|VKwU}m?fS>t zIYSGcYrdSRcMM%L9@fSGNBpsoE|l|1XWXA(`36@&r^!$S=4_^}98Pjo|7 zn4wr)!0*_8n%=~6+|@`^-T@y!UG!M^ZbU7&Ui*^6wtYrkm)?TQEn3vO7YtW;37*+EkG&8+6_=<9tx zw@A(w(yo~_r1AQ<4zbr(5mOr+Lrl#GSKOC;SyZC^VhgXrLRc=|jFW76^Si9O>zA7; zw`!LD>FRG2%We~hqRq|fEE^h}>MTi-nZ5Z_rxDhfpwm8-@1T1+xaTdavv`{DaWY)2 zkKrIp8hEg}=o4e^nEDQpB|~yHNI~(fbE3<+r51Iw>w}B2waV{&OvV`ThTzeh+4^cj znEgZozGvwDq-be!LeE)iEN5D?1f@`Oc)QR*(b`Z|@lY3FqBF5$G`>r7j zX+@T}!sjHe2)nKOw}RUr0Jj%c8^P7zJAr5lTuFsixB3OyWMu1W}{peR%#?`EUF zt)p=RYvw8#X+$+o(nwGxgj_PofZ0s!wxTPV(*p|!+vZl5H*EFg0BEW)F+1MeL3fqm zdA9=llxTgvLZ%6ir4p@A4z6Y1dLYa%ywkeyYhus|b;YFRe31YLB9xX^BuN>Ll!mm{ z*?+xP?1tUzu_8XbOPjV}IN~H0&}*i$RvDG7-B4I0Yo;fA`NG<$%gAHe$YWl#S-F8^ zuSkD!p-p%6iWQmz4ytUH*a48$ z%7Huvg|Y>^1QuS(3Nc0D;YF668F|wAqgcF6N!F)J^u^GgjzVYHnDh6Wz{{gLDloU= zJAb_Q+3IS}pE2!2OZxuIpQ}Fj{&w%%f99v_-t?MdFQXw_;WbqoX!Esrn2INAIkjQ6 zvvI5=#J25mxxO-$C|_nUm=Ej@2bxk`?l2^Ly6RpgUFPpw2gIA^%NdSHcO2; zy|%L_P55`C99qRRzLlv|`!xO}knjf_9~0o(^du(tqdJL&n4O1{F#wIB1-w1yZb5LU z?A;2QGt2jpSWKHR@P;SC@^D6Bp)%(x=&iXcUP-_x(buY?S8@^;{f*Y2udgLq{dDiM z1B*%$r~Yv#p?6mMFp)~l-EjF_O*sc7h=+-2;RHR!wdONp-}~IVn_n0>(;;68)x(9= zQOwGP?(R5uhTH;ck|8VIZPwkg5C|g*ZapA9Seofo7jyf8J*v=8dv+@mLY_tyU%9$l zlz~rCKaTZO{_^PypEF-3X1+O&Ho%9RBQz-e>I@k1{0f-1C@LMfXSpugV5y3iiP<(N zs^l&YEu70$C5T&KerwVBKHg@9CG`68PHi)ByyzC*dZcYNpsme452m#SiA_}~-5!|n zjZqJ_&E8*YN^OZ&-N%{+*d*CJk7n12hbPZ~S%MH1+)?PCL{q9XMUV&~tNlOL}D*tt%D*c6eFzaZC(4SeQ04hM{{bqY&8H0Ja)RDTbJJS zj#Kd4X};5&g$4}IhQsP8v;;bEv&tk8I_$z*?RGd0{RkHL`4-;Chotba4dr*H{3bwQ zNyqWTl}`^YkJz#heKhq^+7K8>P) zyiv$-`5-{ttpid1?;lmW%)!8PS&1o)$?%+GIOU$bG&CEK^Uqks6Cw8_1Uf{;r-YvF z_B1-3syfArYDeNt{<|mn)*jx#4_V1cp{G-?d+fu!YKd(BiqVvDhx0K1Bh20?Ox43^ z<#*QBV~jc$H2S|B-D_QPofyEx@8ov5D@2VE;OW}G(jx=3qP+$0IvehtBD=ND_4{Ko zb{A|6IzRP9TC{(m|`L#+Sto!m)SuJ?CMx(qCtMz418GRN|ZXpk>u zIOmtDilI*cx3G%=$I_P<&G2;T3((p2I?H-i6}ch+9O8Pp0% zW!lJNQ(p&cSfrT{hHC;_p;cBkoE!v`+jZY(v1;)<<17hsiE(u}w1JfblJqbuRsQdf zdOQiUJdSzgCm)`v;oN_ViMypfRp%9dyBE>~&PmWSvoEgX$yDd5Y;R8eePCKkotNOb z@>DjeeX-Pv_-KzK$Yn`kH)$$K^tFfA89esA1{aNxWmEUFurV?e z>M)G3oxDIQ--_`xEWYbaRY5X6i4k^`!Qfgk2EJnOoH3ZHlZ^PxxzGI>6zGz7S&$~V zLa1a&w-pHt-0RF~^r_z`EJt47M2EMEvwyo0QEbg?a%?bQNL#&hyN8x9hq_8@O))z*esv%Z?OX_9a6CW+HDxp2UUIJAl+UXl5 zbbMI8_~!mUUqs~ani5g-Md${u3?HDyqZ+^iC!KTqohiWt@6;A6$DwaoGj|uiJD%NO z1hL#4+Y*DCcg>}d%mI}I*$*$Sc~KFgN<+2(j>IdgeU?>VU9jp)Az)EfL@5I)JwfFI z0vJ*_P^wByyBaXc@1oTuruy`-*nkl`Wd(;;X~EiU0oj5^9jOSS$IFtD--i-Hz=1E| zwXEGyiYg=%W9;x2dvtgi07P)8JB>rpr3y-J zbG4aJDC-YNPBB+UT~>wLIEgh06XwIe%fMz&YJZP9>o!n;}SS6nl__)k{&O^g3a*u{99KbIql6 z1K5>?7?O8fn1aiO%HNe}DibLV@s&Lq6XQ$pT1f1H1V9qCGpL3kgWnBuV2qDn z)?PVcfas~i15(sISIi=XcMmbDL7#WEgxJG9g3NbwTS1q+!qhxu@oX{*#{C4j=Qb0K zN4MLqd!m4k9Qa8i@iAf2pF#}Xj<6OE6k8!Hp~r*nhQ5^DF}>)bQ3t>U?JRUAH0Bj6 ztyeNArB}R zpIPqkIrFmPm&Qk3w-+zdC>hw6NE9$UC|94=!h%@7GUw@^X;5Q>f^aN}9_H3hE4HFX z>VrVIY$!fu6)Fnw2PDx{V=x6+Xh4!Im@ew7#B_YubQKl?>C|31Uh=Yx^S zgHi)`EDFM_su-UraQVzj8)G?E<$q=hbD zXn{r1NF$dOQ61kQ;;BOR3dJd9#kPhjC1fZl{?Z<%O>sK8u6EZUCf=}41jWEYCE;Q) zllKwJT}H_R<#{Qh95l)bnKSE;&%t)JVYFOym1M6(8I_dRa`qg|;(#8f7_4(*^D6yT zW=O{`zW+o7MASo&Bm=9~sbd$FT{*A9nfRJyX3z+Y7U(dz58jT<#K(oe4;ePaKA?+T zjdwYakxP_NOG0c79PfjMd!Qf>+h76r#BC=rgXoO-#XrC41{AEE%WZykMG&O^4n3#6 zjjmKBjFW{=Rqutdo}Irm#@%{wG;{ohtp_LyM&)rO7bqEZ)C;^msjDs{=Z~(iJPg#F z;zGtm%9m9bhXQbUCb%&LtOjZY%2AExk`gAPB5SKcR6{~QAy8voVm0ywnBKM%Ms-P0 zAq_Sx%btu$#_Xz5_qpb^JQL`?0Hg(}Fr@aBN+8|zTMs@}{^I)tq%zzOS+@jABgWMQ z;s6{0Rkl#>pX^vyC9{KTgC<^rVqpIud*?a{n>-@Y6s5oFx4wcH2C}FRLIGY4mKLx* zU?*61SGmm20;slK-iAx%W#9t{=OqRbXhw^5h*Xduy6d@@D=KpPm!BaPW8)A$c=_Pc zBV+GLDmzODvwc#9gMWYlZ@CB^;04HLFM<1R*y2STh+D*jeS;yeLf!g7Cm=3J5TMKs z?iQs$%I!V0;`A>!mPCRDZ@kz?0(Pe0bRSr+5nEtG##K=hLUaQR%D|-*_kUd1Ysx2@ zXDH@{FF{eh;h?CjKX2I9iqTMfj0RFnI!t*bFF?%ZpKK^OfKXIW&quD#q>R)hfy~)q zh=f3E8@>i6WCb9ATpIDCOG;pwQqzkyU{x`|^VA<+90-(ye$*%auYfo>QNTENXi-2B3VzrtMD$}@op~psp)*t&BnwZ3QyPgoS`oK z@p+qkm&ia%04zhPiqGz43-A6qwK|Z4kCmDR)JQ*qO^NJA_G_PZRBU+UbUIQt6kzNT z6VYJ6b$7uNF9hVG3pL;wT~M$(A;TL^FDL-T)MUQW#CYz;+k?Rqo80M+3;Pf%-CN6i4kEPKBv z&rYL8E~PSI+35bDM{Xcj`T>NG_du%sTw^j;0uW~mPpq`y6g9!jBszB#{y&1n=_{bI zF{tj+x!%i6z6lkdd}x3aaA@o{jQtMN;%j0I6n=Nkfo~0mD9%fYsS2 z#fv+xoos_6U@okg+CQHjzb!Mz5vVQ|97Ji{7FwmMxPJ>QCkF=(A<>utWq{%<;1swl zzv84Oww5FA`T@)k^>>l;IR> zqC56-kA)pBX+r5ItfNw`bFb>*l3bGrxh{E-Ou}-CVL4M9%RvGYTC@ydvVSW~a)lX3 zYQhgmgG5C7)5Bz@^h(p2F$l|4e&PK2iw9>@ z#_;ip$y`}8vC@DoaKJ*5vwtfscP4LWwOY+$`2pS=ou>{&LzTcB2f;6B`~ z{my4kZ8bz6g!mwi1}g_M_Nhg_g@C=friB$r90n^L>PQO9NGd~WKpV-1Y!Fw}SuEj7 zoN<}&G~ija;91V=ou8N0FroWBDFb`?ncyy-F0VrG5^!A{u#0|e%Mlr_|F7#AOw5>! zVZ)sq&%59yxKMV)33WK3(ty{OoY&ItyvFdds`<-bELxEUW$SaleHHW5pPz00V`(Oi zMm#Uk5B<&I3yp5mE4`;9^py8uSN{^A_g|m>C-=J>*HPaY>1F?A&(DXsTTTWG4SxUO zR4<<#6IK?IJ^rY4{mD0y8I|}-?A7KBxw-lD|;O9}GEzlgjlD>m&R;^G3Jt)?o z>yq3@3erO#l-{+-vkRBr@sa2^SmYJb905<_`~-?1L)M=|{tJH2MmzyGCgc#a+U^*x zrv#>;GabwKV8r*W>D3IP{9~R#H{KCJ*WECc!e^CRmNRsMW~oEc_$D^hITs!7WF)@I ztwL61<50dwSDZ652mMx0+@#!Kd;l*gPjc>h@o~@Fo!Zacqsq1p zot^i^i0=pzqRwA!k{f89lD24_oQxP24HjGQkLgk8<=In1FVDQalYfN7e<;l#UfIv# zOMQd|SA4{ZAUBYZW33`+_f|W6Zi_!<(^uc%A~P%^MzZ;nc%D$PGOYuN;G)6%3E39c^0iL0;n{@dY6ovQ!#0 ziw0FArSl1Qka{@YjaCf-IGII@Zu-d1cFKJ*X;597y#26%UE zt*I)@OMJXL2W&7uI%_g>c3?^cY>Y(?gi5iKk;H)KV}Qel5znKA2~rn&wF`D)RhKiX z&yhZ~uJydjx%tpqf-G|1ORJw0J});mMN2t(v@gYdU;dGAn02tp6NZ-FUU6|9r_y$` zFR~3SsgRSW7+Usv-5NM)c+Iv81Yr`$4jhZjvn%MQ*@sJU?pJ(-G8~w3a2{@~2nd{e zIFpIu`>)ndUB(AUCPguXN^Z;q8O6IqbkLIpqv%of)F2^E=+Cp|rLAUmA;h1sbzW-OyzA z&h{4*P@&k-{(I*Lh~TkiWF_rr-zyrT&zrI?Fu_|Yn*FX>|APy)Xwa2{db;Sk+U*$5 zjn_~j03s16D(0QA;Rk1osPOZ&qZ?Q?1eGA0_6`c{YDarV7yJ!F?D13@)LXzm@74L- z2mLF2+6JulHCh~R1Q#7+feI05BdvAm4^aZKC<=Cy?n;TUs51f3N)^7zya7N7mt=$s zJv31Suo(u!QCb#)YoZFHWs?iP-*1cc#o-4mX-X`LS5$IdRbikl02XP^P9*4#@%k2h zbC&)8=at9tU;XWV8o-_sjswXJc-M>2*vE%LM8UyHA&(dq^%mH?7%{qnTQ#S3+9RC% zutWViTIu`8j&095MVkT5#plR}V@+up*is8%_S*A;1Y&9}jE|aXoA0uaHEsYhVkj0e z5|DGJ0xb(*hkC7%bCYj<@(Hu4wPtv!0)R#~{QHN8xd)t=_11T9TA%E8KiSP_@{=C9 zFCJbhwFZb>7>VeHIP}0P^PT4t!^DN8qYM9x@aCMZ-N*4<>$owjzdn{>mM4LbAxVf- zVkcnoCyg#D0YV8#k{l#%sWNc4%a@$DU=e<;xAf0bYaQxnEuG#&tEG|_&h?@aWz8Ok z0xbp*@w(bsw@1Pim2ARn)&2nv_i3sFi^#nEA;2Km8@W?GIwC5l^+-kh?A5K_Q&};H zk0G`Prina&B{m+%q`-}V+p({1t50P_wS%kbd@&F~-*=SV{$y}5{piB8#9N=VzJJ>J z{`<0%hEs7T4EBg}<&*G?L(Pld$#+OA#5`6{xqh~wjAgb$_5 zwYN)zfXK<@4tuAtWPbntJv_>5a-RBFPg+sM=PPzL(rh&JI zF+8!!gu=5sU}RtT*IDn>oX;Q8VE}~$dcjcO@AMqv zHe8+9tjk$@op?5gLa2vXfCTFbt)L(mt?mzTB4!u?st^K_cdF4&3Q}+bo934>4OlWr ztcl9mGL$~^5~GI+5w`%P%iW9-d&7-VlCoyfCHL$%7~oa8%~LO@R*(DsUsv$tV%vK6 zCW^82KJC1~p?n*S9;J*7!xQv`c6)?%*P@P^(&qJKEdm2JK_6#8^WF061t4Rvd!Aam z{e8Y;TYS0f{8eDOA9fu#KmngRZI1P;F<@B0@!5K7mkJQ4GgY`>4Ht(hBwCv} z=U2KoLH-HCabpm#Fv4<810fUxhWAA6tSsV*N=x)MxFId;5G>~J3rmGVFl;xVptn4Oqkllm~2mys2e#UM-2i4aDQ(A8iN5-f&9 zfp?fd{;K|B+c0h6ESA8T9tozYIYF1ZqJzxYBidQYVJyt;B5o-p5Gqo8IOMJl!@V=SC8 zTR<{;4i>U=A8U7uS`Y%y(0yYnRVQASw=LhK7>h2b9%>(}vf$-l92>hD5zIkpFyJv= zzQ^Ghh!%`0OcDf%$3&4}`tI`{Y1Y;K*0&v*(6R!yYy%wnv(i3C6G|NiO76 z22f_*#;7&`W5(@NC7|XN9FCP_&xUh2Z^7{hh1LKqPS`v6^tlxPm7GnWE7v)lV_VE= zG8oDPSg)tln}pk`&cYhOIZYP`f`ocl%7ki%xP{Ze6W9qkriDFFRt9ok++(T_5M+im z(n-*hQY0iu4756!{t1GHQq1SzjFkq!6FO>eJ7Lafsm2X1pr9%NDoj<-pi||y#r9y1 zHOQqrT9%D%U3={v3$cmfB_)CTM1poCx#(j!LbWPbDCSB^!GH~DdNO;-9K<0v3yL^6 z$Q*?2j0sL27tTRsE-|x90v|NOGKqY_*VO1q^x6BRqxD-kriP_2^n!?a0$fex?3wgof7|}Vj-U*Z{0YGyb&!mBa7J<=kg}djzJV6?) zJAC4>DjeVukW-QiB{p*m|C}|v3#~GNavoAGO^=DH(f|nVCLG>InUKVEJQn6mpL#J{ zT}NBZ1?Ua=of)ylno!?#t>C)kTJ!q0KvdVm@vc)I!x4=;unWPl>Hlzn7y`=L?|h6+ z;0xxgiv)N=Ay;w^P=Kh%#)Fh}#~_aHmt+7yv0$;2lJaBaV0t}h5u5{pVY|g89U+ia z${iS z-YcbRt|YmNd~>4+#?JI8fM*m1(r3RaaKt;;)r5KT@*pD^@a#m7a?X!I)e~U^B|VBw z?SY(ymOqs$-zynbFXdH!5B#0q~)+}_e0}~Vu1mERKyK-9uaZR zL7<@O;UH$=f+o~iECL=?C{RJkA3QyVppQ}6qtyFFTuGNY90kcwDcEfbdJpaq7UV{(&;W5>v%221F_+&D&)Rmu);*%65jW(1i}@w0$Vb|*aDbT<2X+Kxm4|xH#yqB1r)j+ur22HqgzBa^ zh746;6kIiTzssS^{mBy!P88H35PJ>0ICryysuC~^q<#5}4pNfK85>PnEX#wme^mLabF@T)l zLoNv6hzx=ACuCpqIuclNp!*hCi9-^`%hh3v1ow(sNIQS^xM%iGsk)k66IF&v%$nJu z5P8GtVB~@&9hE?#fENQd+)Sw#?7?2%|1sPMgVMBlVLy`)h-G?W#W4g=G3@0SmU38q zQ%vIZ0a*h=4OAxqf&m^?ZH~1eUltfZok56&LdG_Re2(|wqQ}30i(=uTW4fQv2}I0R z@SAuAH4utb&)`-#(S8nm&Jjl^_2E-&Ah)F890tQINQwpQVEL7)cBdyN_4thGS z1q6e=m2)NN2B?In-413>-vL#Qf+}wYjOT)#ya~v{CU$*BME@=zH!qXX!5n+oV+JFOE z*dAPu1j&6`N6UJ$`fFiMpU7ehLSGmb`e1d}74S`i1-9iMzzfcq!W8Xu;J#291ww4Z zHmg5N0rLt#1p-2c@C0UCB-~(k>q25~X9#3L)(Z2w=a33?)Xe>BD_wL2ZD7_laZS;m z7Xvk{y^za;59@>9I5~w0?UIZj4hn*j!Sg}w7IH~xf1aor@+kq&M{-RajN7SDN@?a0 zubbp*6Rb1tfxY568s2>k1Qo@HzZaK^9owRKNv_)tK_+?3*~l40?;|R`D%fKu3>Oz3 zirwOlG6Ol2Ck_*Imk<#_VT1rAC>R$ifzp&2isER-g81Pk+#@zFTX%|*s+k=O#aU+J z;*38WD6?%a)7Zztvt1M4u7u145fy!1BP(^ zs-7?iMfo6YX(I%7?e^JX&-K-2S9qz~2e9MSMk_W-qZW!^>9!V%ztlJVz&KfxzpV42kh z495y>kqcS^{P-Bf*wqMPD#EA|f<@OF)>b-;KU{n0-*f*La;W#K literal 0 HcmV?d00001 diff --git a/templates/plinkoMultiplier/assets/ios-icon-100.png b/templates/plinkoMultiplier/assets/ios-icon-100.png new file mode 100644 index 0000000000000000000000000000000000000000..30bafccf3721a9f829989299d50de794e064a4ba GIT binary patch literal 12395 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