From ff587d680d18364ef15dd2eab23b3666a2c86f9d Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Fri, 30 May 2025 20:01:48 +0200 Subject: [PATCH] Russian workspace (#26) --- public/images/statuses_ru.json | 188 ++++++++ public/images/statuses_ru.png | Bin 0 -> 2091 bytes public/images/types_ru.json | 440 ++++++++++++++++++ public/images/types_ru.png | Bin 0 -> 7570 bytes src/plugins/i18n.ts | 6 +- src/system/settings/settings.ts | 4 + .../settings/settings-display-ui-handler.ts | 6 + src/ui/starter-select-ui-handler.ts | 12 +- src/utils/common.ts | 3 +- 9 files changed, 652 insertions(+), 7 deletions(-) create mode 100644 public/images/statuses_ru.json create mode 100644 public/images/statuses_ru.png create mode 100644 public/images/types_ru.json create mode 100644 public/images/types_ru.png diff --git a/public/images/statuses_ru.json b/public/images/statuses_ru.json new file mode 100644 index 00000000000..5e4790b2874 --- /dev/null +++ b/public/images/statuses_ru.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_ru.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_ru.png b/public/images/statuses_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..1da8b66a4f8be4867fe00ade4eed9bbd67e0e449 GIT binary patch literal 2091 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

4oN6_d$h(=No=`(HwA?WO-Ub)vY~UtQ(D G`@aB6|Ab5c literal 0 HcmV?d00001 diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 9965c60e380..9e7b52ef782 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -65,14 +65,14 @@ const fonts: Array = [ unicodeRange: rangesByLanguage.chinese, }), extraOptions: { sizeAdjust: "70%", format: "woff2" }, - only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca", "da", "tr", "ro"], + only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca", "da", "tr", "ro", "ru"], }, { face: new FontFace("pkmnems", "url(./fonts/unifont-15.1.05.subset.woff2)", { unicodeRange: rangesByLanguage.chinese, }), extraOptions: { format: "woff2" }, - only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca", "da", "tr", "ro"], + only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca", "da", "tr", "ro", "ru"], }, // japanese { @@ -174,7 +174,7 @@ export async function initI18n(): Promise { "es-MX": ["es-ES", "en"], default: ["en"], }, - supportedLngs: ["en", "es-ES", "es-MX", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES", "da", "tr", "ro"], + supportedLngs: ["en", "es-ES", "es-MX", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES", "da", "tr", "ro", "ru"], backend: { loadPath(lng: string, [ns]: string[]) { let fileName: string; diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index aa3b3ddb60a..e874fb358d1 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -969,6 +969,10 @@ export function setSetting(setting: string, value: number): boolean { label: "Română", handler: () => changeLocaleHandler("ro") }, + { + label: "Русский", + handler: () => changeLocaleHandler("ru"), + }, { label: i18next.t("settings:back"), handler: () => cancelHandler(), diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index 26f1436578b..5c055d4c93f 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -112,6 +112,12 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler label: "Română", }; break; + case "ru": + this.settings[languageIndex].options[0] = { + value: "Русский", + label: "Русский", + }; + break; default: this.settings[languageIndex].options[0] = { value: "English", diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 45cb0249fa4..77207d95a51 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -161,18 +161,24 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoYOffset: 0.5, starterInfoXPos: 29, }, - "da":{ + da:{ starterInfoTextSize: "56px", instructionTextSize: "38px", }, - "tr":{ + tr:{ starterInfoTextSize: "56px", instructionTextSize: "38px", }, - "ro":{ + ro:{ starterInfoTextSize: "56px", instructionTextSize: "38px", }, + ru: { + starterInfoTextSize: "46px", + instructionTextSize: "38px", + starterInfoYOffset: 0.5, + starterInfoXPos: 26, + }, }; const valueReductionMax = 2; diff --git a/src/utils/common.ts b/src/utils/common.ts index becafdb0d31..eb86f551fc5 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -442,10 +442,11 @@ export function hasAllLocalizedSprites(lang?: string): boolean { case "zh-TW": case "pt-BR": case "ro": + case "tr": case "ko": case "ja": case "ca-ES": - case "tr": + case "ru": return true; default: return false;