From 99ce8b738c59f85b973f3f3b7541c9c6c091ef09 Mon Sep 17 00:00:00 2001 From: lDMDiamondl <100426562+lDMDiamondl@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:33:03 +0900 Subject: [PATCH 1/4] Update Korean.txt Updated KR translation. --- Celeste.Mod.mm/Content/Dialog/Korean.txt | 76 +++++++++++++++++++----- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/Celeste.Mod.mm/Content/Dialog/Korean.txt b/Celeste.Mod.mm/Content/Dialog/Korean.txt index b7ffc2a54..7b2045da2 100644 --- a/Celeste.Mod.mm/Content/Dialog/Korean.txt +++ b/Celeste.Mod.mm/Content/Dialog/Korean.txt @@ -22,6 +22,12 @@ POSTCARD_LEVELGONE= {big}고마워요, ((player))!{/big}{n}하지만 {#ff1144}((sid)){#}은(는) 다른 산에 있어요/ POSTCARD_LEVELLOADFAILED= {big}죄송합니다!{/big}{n}{#ff1144}((sid)){#}로딩에 실패했습니다.{n}맵 제작자한테 {#44adf7}log.txt{#}를 보내주세요. POSTCARD_LEVELNOSPAWN= {big}이런!{/big}{n}누군가가 {#44adf7}시작 지점{#}을 잘못 배치했네요!{n}맵에 {#44adf7}플레이어{#} 엔티티가 포함되어 있는지 확인해보세요. + POSTCARD_BADTILEID= {big}이런!{/big}{n}룸 {#ff1144}((room)){#}의 {#ff1144}(((x)), ((y))){#}에{n}정의되지 않은 ((type))타일 ID {#ff1144}((id)){#}가 있습니다.{n}더 자세한 정보는 {#44adf7}log.txt{#}를 확인해주세요. + POSTCARD_DECALREGERROR= {big}이런!{/big}{n}{#ff1144}((property)){#} property를 {#ff1144}((decal)){#}에{n}적용하는 과정에서 오류가 발생했습니다.{n}{#44adf7}Decal Registry{#}에 누락되거나 부적절한 attribute가 있는 것 같습니다. + POSTCARD_MISSINGTUTORIAL= {big}이런!{/big}{n}플레이백 튜토리얼 {#ff1144}((tutorial)){#}을(를) 찾을 수 없습니다.{n}더 자세한 정보는 {#44adf7}log.txt{#}를 확인해주세요. + POSTCARD_TILEXMLERROR= {big}이런!{/big}{n}{#ff1144}((path)){#}의 타일셋을 파싱하는 과정에서 에러가 발생했습니다.{n}더 자세한 정보는 {#44adf7}log.txt{#}를 확인해주세요. + POSTCARD_XMLERROR= {big}이런!{/big}{n}{#ff1144}((path)){#}에 구문 오류가 있습니다.{n}더 자세한 정보는 {#44adf7}log.txt{#}를 확인해주세요. + POSTCARD_BOSSLASTNODEHIT= {big}이런!{/big}{n}{#ff1144}보스 배들린이{#} 마지막 노드에서 피격되었습니다. 해당 룸에서 보스 배들린이 피격될 수 없는 위치에 노드를 추가해주세요. # Main Menu MENU_TITLETOUCH= TOUCH @@ -29,6 +35,7 @@ MENU_MODOPTIONS= 모드 옵션 MENU_PAUSE_MODOPTIONS= 모드 옵션 + MENU_MODOPTIONS_UPDATE_FAILED= 에베레스트 업데이트에 실패했습니다. MENU_MODOPTIONS_ONE_MOD_FAILEDTOLOAD= 모드 1개를 로드하지 못했습니다. MENU_MODOPTIONS_MULTIPLE_MODS_FAILEDTOLOAD= 모드 {0}개를 로드하지 못했습니다. MENU_MODOPTIONS_EVEREST_YAML_ERRORS= everest.yaml 로드 에러가 발생했습니다. @@ -57,31 +64,53 @@ MODOPTIONS_COREMODULE_LAUNCHWITHOUTINTRO= 인트로 없이 실행하기 MODOPTIONS_COREMODULE_SHOWMODOPTIONSINGAME= 일시정지 화면에서 모드 옵션 보여주기 MODOPTIONS_COREMODULE_SHOWEVERESTTITLESCREEN= 에버레스트 타이틀 화면 보여주기 - MODOPTIONS_COREMODULE_INPUTGUI= 입력 방식 + MODOPTIONS_COREMODULE_INPUTGUI= 입력 방법 MODOPTIONS_COREMODULE_INPUTGUI_= AUTO MODOPTIONS_COREMODULE_INPUTGUI_KEYBOARD= 키보드 - MODOPTIONS_COREMODULE_INPUTGUI_NS= SWITCH - MODOPTIONS_COREMODULE_INPUTGUI_NS_LEFTJOYCON= SWITCH L - MODOPTIONS_COREMODULE_INPUTGUI_NS_RIGHTJOYCON= SWITCH R + MODOPTIONS_COREMODULE_INPUTGUI_NS= 닌텐도 스위치 + MODOPTIONS_COREMODULE_INPUTGUI_NS_LEFTJOYCON= 닌텐도 스위치 왼쪽 조이콘 + MODOPTIONS_COREMODULE_INPUTGUI_NS_RIGHTJOYCON= 닌텐도 스위치 오른쪽 조이콘 MODOPTIONS_COREMODULE_INPUTGUI_PS4= PS4 - MODOPTIONS_COREMODULE_INPUTGUI_XB1= XBONE + MODOPTIONS_COREMODULE_INPUTGUI_XB1= XBOX ONE MODOPTIONS_COREMODULE_INPUTGUI_TOUCH= TOUCH MODOPTIONS_COREMODULE_MAINMENUMODE= 메인 메뉴 표기 방식 MODOPTIONS_COREMODULE_MAINMENUMODE_= 세로 MODOPTIONS_COREMODULE_MAINMENUMODE_ROWS= 가로 MODOPTIONS_COREMODULE_MAINMENUMODE_TOUCH= TOUCH - MODOPTIONS_COREMODULE_AUTOUPDATEMODSONSTARTUP= 시작할 때 자동으로 모드를 업데이트하기 + MODOPTIONS_COREMODULE_AUTOUPDATEMODSONSTARTUP= 시작할 때 모드를 자동으로 업데이트하기 MODOPTIONS_COREMODULE_MODUPDATES= 모드 업데이트 확인하기 MODOPTIONS_COREMODULE_USEKEYBOARDFORTEXTINPUT= 키보드로 텍스트 입력하기 MODOPTIONS_COREMODULE_WARNONEVERESTYAMLERRORS= everest.yaml 에러를 표시 MODOPTIONS_COREMODULE_WARNONEVERESTYAMLERRORS_DESC= 모드 제작자한테 유용한 옵션 - MODOPTIONS_COREMODULE_DISCORDRICHPRESENCE= 디스코드 Rich Presence 기능 활성화 - MODOPTIONS_COREMODULE_MENUPAGEUP= Page Up in Menus - MODOPTIONS_COREMODULE_MENUPAGEDOWN= Page Down in Menus - + MODOPTIONS_COREMODULE_MENUNAV_SUBHEADER= 메뉴 이동 + MODOPTIONS_COREMODULE_MENUPAGEUP= 메뉴 위로 올리기 + MODOPTIONS_COREMODULE_MENUPAGEDOWN= 메뉴 아래로 내리기 + MODOPTIONS_COREMODULE_DEBUGMODE_SUBHEADER= 디버그 모드 + MODOPTIONS_COREMODULE_DEBUGCONSOLE= 디버그 콘솔 + MODOPTIONS_COREMODULE_DEBUGMAP= 디버그 맵 + MODOPTIONS_COREMODULE_MOUNTAINCAM_SUBHEADER= 메인 화면 산 카메라 + MODOPTIONS_COREMODULE_CAMERAFORWARD= 카메라 앞으로 이동 + MODOPTIONS_COREMODULE_CAMERABACKWARD= 카메라 뒤로 이동 + MODOPTIONS_COREMODULE_CAMERARIGHT= 카메라 오른쪽으로 이동 + MODOPTIONS_COREMODULE_CAMERALEFT= 카메라 왼쪽으로 이동 + MODOPTIONS_COREMODULE_CAMERAUP= 카메라 위로 이동 + MODOPTIONS_COREMODULE_CAMERADOWN= 카메라 아래로 이동 + MODOPTIONS_COREMODULE_CAMERASLOW= 카메라 천천히 이동하기 + MODOPTIONS_COREMODULE_CAMERAPRINT= 카메라 위치 이동하기 + MODOPTIONS_COREMODULE_TOGGLEMOUNTAINFREECAM= 자유 시점 카메라 활성화 MODOPTIONS_COREMODULE_SOUNDTEST= 사운드 테스트 - MODOPTIONS_COREMODULE_OOBE= 초기 설정 화면 표시 + MODOPTIONS_COREMODULE_OOBE= 처음 설정으로 되돌리기 MODOPTIONS_COREMODULE_TOGGLEMODS= 모드 활성화/비활성화 + + MODOPTIONS_COREMODULE_DISCORDRICHPRESENCE= 디스코드 Rich Presence + MODOPTIONS_COREMODULE_DISCORDRICHPRESENCEOPTIONS= Rich Presence 설정 + MODOPTIONS_COREMODULE_DISCORDSHOWICON= 아이콘 보여주기 + MODOPTIONS_COREMODULE_DISCORDSHOWMAP= 챕터 이름 보여주기 + MODOPTIONS_COREMODULE_DISCORDSHOWSIDE= 챕터 사이드 보여주기 (A, B...) + MODOPTIONS_COREMODULE_DISCORDSHOWROOM= 룸 이름 보여주기 + MODOPTIONS_COREMODULE_DISCORDSHOWBERRIES= 모은 딸기 개수 보여주기 + MODOPTIONS_COREMODULE_DISCORDSHOWDEATHS= 죽은 횟수 보여주기 + MODOPTIONS_COREMODULE_DISCORDFAILED= 디스코드에 연결할 수 없습니다. 설정을 껐다 켜 다시 시도해보세요. MODOPTIONS_COREMODULE_NOTLOADED_A= 모드 로드에 실패했습니다. MODOPTIONS_COREMODULE_NOTLOADED_B= 자세한 사항은 log.txt를 확인해주세요. @@ -89,7 +118,7 @@ MODOPTIONS_COREMODULE_YAMLERRORS= everest.yaml 파일 로드에 실패했습니다. MODOPTIONS_VANILLATRISTATE_NEVER= OFF - MODOPTIONS_VANILLATRISTATE_EVEREST= 에버레스트 + MODOPTIONS_VANILLATRISTATE_EVEREST= 에베레스트 MODOPTIONS_VANILLATRISTATE_ALWAYS= 항상 # Sound Test @@ -123,9 +152,20 @@ UPDATER_VERSIONS_ERR_DOWNLOAD= 버전 리스트 다운로드에 실패했습니다. UPDATER_VERSIONS_ERR_FORMAT= 포맷을 읽을 수 없습니다. + + UPDATER_CURRENT_BRANCH= 현재 브랜치 + + UPDATER_SRC_STABLE= STABLE + UPDATER_SRC_BETA= BETA + UPDATER_SRC_DEV= DEV + UPDATER_SRC_CORE= CORE + + UPDATER_SRC_RELEASE_GITHUB= Tagged releases (GitHub) + UPDATER_SRC_BUILDBOT_AZURE= 자동 빌드 (Azure) +# currently unused UPDATER_SRC_BUILDBOT= 자동 빌드 - + # Everest Updater EVERESTUPDATER_NOTSUPPORTED= 이 플랫폼에서 업데이트가 지원되지 않습니다. - 업데이트 취소 EVERESTUPDATER_NOUPDATE= 업데이트가 없습니다. - 업데이트 취소 @@ -141,6 +181,8 @@ EVERESTUPDATER_RESTARTING= 다시 실행 EVERESTUPDATER_RESTARTINGIN= {0}초 후 다시 실행 EVERESTUPDATER_STARTINGFAILED= 인스톨러 실행 실패! + EVERESTUPDATER_MISSINGRUNTIME_A= .NET Core Everest를 설치하려면 .NET 7.0 런타임을 먼저 설치해야 합니다. + EVERESTUPDATER_MISSINGRUNTIME_B= .NET 7.0 런타임은 이 곳에서 설치할 수 있습니다: {0} EVERESTUPDATER_ERRORHINT1= GitHub @ https://github.com/EverestAPI/Everest 에서 새로운 이슈를 작성하거나 EVERESTUPDATER_ERRORHINT2= 셀레스트 공식 디스코드의 #modding_help 채널에 방문해주세요(위의 리포지토리에서 참여 가능). EVERESTUPDATER_ERRORHINT3= log.txt를 잊지 말고 꼭 업로드해주세요. @@ -161,7 +203,10 @@ MODUPDATECHECKER_UPDATE_ALL= 모든 모드 업데이트 MODUPDATECHECKER_UPDATE_ALL_INPROGRESS= 모든 모드 업데이트 중... MODUPDATECHECKER_UPDATE_ALL_DONE= 모든 모드 업데이트 완료. - MODUPDATECHECKER_SHUTDOWN= 종료 + MODUPDATECHECKER_RESTARTNEEDED= 모드를 적용하려면 셀레스트를 다시 시작해야 합니다. + MODUPDATECHECKER_MENU_HEADER_RESTART= 선택 + MODUPDATECHECKER_SHUTDOWN= 셀레스트 종료 + MODUPDATECHECKER_RESTART= 다시 실행 # Auto Mod Updater AUTOUPDATECHECKER_CHECKING= 모드 업데이트 확인 중... @@ -182,6 +227,7 @@ DEPENDENCYDOWNLOADER_DONE= 완료. DEPENDENCYDOWNLOADER_DOWNLOAD_DATABASE_FAILED= 에러: 데이터베이스 다운로드에 실패했습니다. 자세한 사항은 log.txt를 확인해주세요. DEPENDENCYDOWNLOADER_MUST_UPDATE_EVEREST= 경고: 일부 모드를 구동하기 위해선 에버레스트를 업데이트해야 합니다. 에버레스트 버전 변경하기 메뉴에서 최신 버전을 설치해주세요. + DEPENDENCYDOWNLOADER_NEEDS_CORE_EVEREST= WARNING: A (currently WIP) .NET Core build of Everest is required for some mods to load. Install it from the Change Everest Version menu. DEPENDENCYDOWNLOADER_EVEREST_UPDATE= 일부 모드를 구동하기 위해 에버레스트는 {0}으로 업데이트 됩니다. 확인 버튼을 눌러 진행해주세요. DEPENDENCYDOWNLOADER_MOD_NOT_FOUND= 에러: 데이터베이스에서 {0}을(를) 찾을 수 없습니다. 해당 모드는 수동으로 설치해주세요. DEPENDENCYDOWNLOADER_UPDATE_CELESTE= 에러: 일부 모드를 구동하기 위해선 최신 버전의 셀레스트가 필요합니다. 셀레스트를 업데이트해주세요. @@ -246,4 +292,4 @@ ASSETRELOADHELPER_RELOADINGTEXTURES= Reloading textures: ASSETRELOADHELPER_LOADINGNEWMOD= Loading new mod: ASSETRELOADHELPER_RELOADINGMODASSEMBLY= Reloading mod assembly: - ASSETRELOADHELPER_RELOADINGMOUNTAIN= Reloading mountain \ No newline at end of file + ASSETRELOADHELPER_RELOADINGMOUNTAIN= Reloading mountain From 0c959a624ade83f7c4dd2c4355e19aa3db8a5b5f Mon Sep 17 00:00:00 2001 From: GarretShadow <141551771+GarretShadow152@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:24:10 +0500 Subject: [PATCH 2/4] Update Russian.txt Update Russian.txt to the latest version --- Celeste.Mod.mm/Content/Dialog/Russian.txt | 321 +++++++++++++--------- 1 file changed, 195 insertions(+), 126 deletions(-) diff --git a/Celeste.Mod.mm/Content/Dialog/Russian.txt b/Celeste.Mod.mm/Content/Dialog/Russian.txt index 895d01664..e615bb45c 100644 --- a/Celeste.Mod.mm/Content/Dialog/Russian.txt +++ b/Celeste.Mod.mm/Content/Dialog/Russian.txt @@ -19,208 +19,277 @@ # {anchor} controls the visual position of the textbox in-game # Helper Postcards - POSTCARD_LEVELGONE= {big}Спасибо, ((player))!{/big}{n}Но {#ff1144}((sid)){#} на другой горе. - POSTCARD_LEVELLOADFAILED= {big}Простите!{/big}{n}Нам не удалось загрузить{#ff1144}((sid)){#}{n}Пожайлуста, отправте ваш {#44adf7}log.txt{#}{n} создателю карты. - POSTCARD_LEVELNOSPAWN= {big}Упс!{/big}{n}Кто-то (или что-то) поставил ваше{n}{#44adf7}место начала{#} не на то место!{n}Проверьте, есть ли в вашей карте{n}объект {#44adf7}Player{#}. + POSTCARD_LEVELGONE= {big}Спасибо, ((player))!{/big}{n}Но {#ff1144}((sid)){#} находится на другой горе. + POSTCARD_LEVELLOADFAILED= {big}Извините!{/big}{n}Но {#ff1144}((sid)){#} загрузить не удалось.{n}Пожайлуста, отправте ваш {#44adf7}log.txt{#}{n} создателю карты. + POSTCARD_LEVELNOSPAWN= {big}Упс!{/big}{n}Кто-то переместил вашу {#44adf7}стартовую позицию!{#}{n}Пожайлуста, проверьте вашу карту{n}на наличие объекта {#44adf7}Player{#}. + POSTCARD_BADTILEID= {big}Упс!{/big}{n}Неопределенный ((type))tile id {#ff1144}((id)){#} на{n}{#ff1144}(((x)), ((y))){#} в комнате {#ff1144}((room)){#}{n}Проверьте свой {#44adf7}log.txt{#} для большей информации. + POSTCARD_DECALREGERROR= {big}Упс!{/big}{n}Ошибка при применении свойства{n}{#ff1144}((property)){#} к {#ff1144}((decal)){#}{n}Пропущенный или некорректный {#44adf7}Decal Registry{#}. + POSTCARD_MISSINGTUTORIAL= {big}Упс!{/big}{n}Воспроизведение туториала {#ff1144}((tutorial)){#} не было найдено.{n}Проверьте свой {#44adf7}log.txt{#} для большей информации. + POSTCARD_TILEXMLERROR= {big}Упс!{/big}{n}Ошибка соответствия набора текстур в {#ff1144}((path)){#}{n}Проверьте свой {#44adf7}log.txt{#} для большей информации. + POSTCARD_XMLERROR= {big}Упс!{/big}{n}{#ff1144}((path)){#} содержит синтаксическую ошибку.{n}Проверьте свой {#44adf7}log.txt{#} для большей информации. + POSTCARD_BOSSLASTNODEHIT= {big}Упс!{/big}{n}Сущность {#ff1144}Badeline Boss{#} была побеждена на последнем узле.{n}Пожайлуста, добавьте дополнительный узел за пределами карты, чтобы игрок не мог поразить его. # Main Menu - MENU_TITLETOUCH= НАЖМИТЕ - MENU_MAPLIST= Список Карт - MENU_MODOPTIONS= Настройки Модов - MENU_PAUSE_MODOPTIONS= Настройки Модов + MENU_TITLETOUCH= НАЖАТИЕ + MENU_MAPLIST= Список Карт + MENU_MODOPTIONS= Настройки Модов + MENU_PAUSE_MODOPTIONS= Настройки Модов - MENU_MODOPTIONS_EVEREST_YAML_ERRORS= Произошла ошибка загрузки everest.yaml! + MENU_MODOPTIONS_UPDATE_FAILED= Не Удалось Загрузить Обновление Everest MENU_MODOPTIONS_ONE_MOD_FAILEDTOLOAD= Не удалось загрузить 1 мод - MENU_MODOPTIONS_MULTIPLE_MODS_FAILEDTOLOAD= Не удалось загрузить {0} модов - MENU_MODOPTIONS_UPDATE_AVAILABLE= Есть новое обновление для Everest! - MENU_MODOPTIONS_MOD_UPDATE_AVAILABLE= Доступно новое обновление для 1 мода! - MENU_MODOPTIONS_MOD_UPDATES_AVAILABLE= Доступно обновление для {0} модов. + MENU_MODOPTIONS_MULTIPLE_MODS_FAILEDTOLOAD= Не удалось загрузить модов: {0} + MENU_MODOPTIONS_EVEREST_YAML_ERRORS= При загрузке everest.yaml произошла ошибка + MENU_MODOPTIONS_UPDATE_AVAILABLE= Доступно новое обновление для Everest + MENU_MODOPTIONS_MOD_UPDATE_AVAILABLE= Доступно новое обновление для 1 мода + MENU_MODOPTIONS_MOD_UPDATES_AVAILABLE= Доступно обновление для {0} модов # Title Screen - MENU_TITLESCREEN_RESTART_VANILLA= Перезагружаюсь в orig/Celeste.exe + MENU_TITLESCREEN_RESTART_VANILLA= Перезагрузить как orig/Celeste.exe # Extra Key Mapping KEY_CONFIG_ADDING= НАЖМИТЕ ДОПОЛНИТЕЛЬНУЮ КЛАВИШУ ДЛЯ - KEY_CONFIG_ADDITION_HINT= Нажмите SHIFT + CONFIRM чтобы добавить дополнительную клавишу + KEY_CONFIG_ADDITION_HINT= Нажмите SHIFT + CONFIRM чтобы добавить или убрать дополнительную клавишу -# Mod Options +# Mod OptionsChange Everest Version MODOPTIONS_TITLE= EVEREST - MODOPTIONS_NEEDSRELAUNCH= Необходима перезагрузка чтобы иметь эффект + MODOPTIONS_NEEDSRELAUNCH= Для применения необходима перезагрузка # Core Module Options MODOPTIONS_COREMODULE_UPDATE= Обновить Everest до ((version)) - MODOPTIONS_COREMODULE_DOWNLOADDEPS= Скачать недостающие зависимости + MODOPTIONS_COREMODULE_DOWNLOADDEPS= Установить Недостающие Зависимости MODOPTIONS_COREMODULE_VERSIONLIST= Изменить Версию Everest MODOPTIONS_COREMODULE_TITLE= Ядро Everest MODOPTIONS_COREMODULE_DEBUGMODE= Режим Отладки - # better to keep this in english - MODOPTIONS_COREMODULE_LAUNCHWITHFMODLIVEUPDATE= Загружаться с FMOD Live Update - MODOPTIONS_COREMODULE_LAUNCHWITHOUTINTRO= Загружаться без введения - MODOPTIONS_COREMODULE_SHOWMODOPTIONSINGAME= Показывать настройки модов в игре - MODOPTIONS_COREMODULE_SHOWEVERESTTITLESCREEN= Показывать меню Everest + MODOPTIONS_COREMODULE_LAUNCHWITHFMODLIVEUPDATE= Запускать с FMOD Live Update + MODOPTIONS_COREMODULE_LAUNCHWITHOUTINTRO= Запускать без Интро + MODOPTIONS_COREMODULE_SHOWMODOPTIONSINGAME= Показывать Настройки Модов в Игре + MODOPTIONS_COREMODULE_SHOWEVERESTTITLESCREEN= Показывать Загрузочный Экран Everest MODOPTIONS_COREMODULE_INPUTGUI= Ввод MODOPTIONS_COREMODULE_INPUTGUI_= АВТО MODOPTIONS_COREMODULE_INPUTGUI_KEYBOARD= КЛАВИАТУРА MODOPTIONS_COREMODULE_INPUTGUI_NS= SWITCH - MODOPTIONS_COREMODULE_INPUTGUI_NS_LEFTJOYCON= ПРАВЫЙ JOYCON - MODOPTIONS_COREMODULE_INPUTGUI_NS_RIGHTJOYCON= ЛЕВЫЙ JOYCON + MODOPTIONS_COREMODULE_INPUTGUI_NS_LEFTJOYCON= SWITCH L + MODOPTIONS_COREMODULE_INPUTGUI_NS_RIGHTJOYCON= SWITCH R MODOPTIONS_COREMODULE_INPUTGUI_PS4= PS4 MODOPTIONS_COREMODULE_INPUTGUI_XB1= XBONE MODOPTIONS_COREMODULE_INPUTGUI_TOUCH= НАЖАТИЕ - MODOPTIONS_COREMODULE_MAINMENUMODE= Режим главного меню - MODOPTIONS_COREMODULE_MAINMENUMODE_= ОБЫЧНЫЙ + MODOPTIONS_COREMODULE_MAINMENUMODE= Режим Главного Меню + MODOPTIONS_COREMODULE_MAINMENUMODE_= ВАНИЛЬНЫЙ MODOPTIONS_COREMODULE_MAINMENUMODE_ROWS= РЯДЫ MODOPTIONS_COREMODULE_MAINMENUMODE_TOUCH= НАЖАТИЕ - MODOPTIONS_COREMODULE_AUTOUPDATEMODSONSTARTUP= Автоматически обновлять моды при загрузке - MODOPTIONS_COREMODULE_MODUPDATES= Проверить обновления модов - MODOPTIONS_COREMODULE_USEKEYBOARDFORTEXTINPUT= Использовать клавиатуру для ввода - MODOPTIONS_COREMODULE_WARNONEVERESTYAMLERRORS= Предупреждать об ошибках everest.yaml + MODOPTIONS_COREMODULE_AUTOUPDATEMODSONSTARTUP= Автоматически Обновлять Моды при Запуске + MODOPTIONS_COREMODULE_MODUPDATES= Проверить Обновления Модов + MODOPTIONS_COREMODULE_USEKEYBOARDFORTEXTINPUT= Использовать Клавиатуру для Ввода + MODOPTIONS_COREMODULE_WARNONEVERESTYAMLERRORS= Предупреждать об Ошибках everest.yaml MODOPTIONS_COREMODULE_WARNONEVERESTYAMLERRORS_DESC= Полезно для создателей модов - MODOPTIONS_COREMODULE_DISCORDRICHPRESENCE= Discord Rich Presence - MODOPTIONS_COREMODULE_MENUPAGEUP= Page Up в Меню - MODOPTIONS_COREMODULE_MENUPAGEDOWN= Page Down в Меню - - MODOPTIONS_COREMODULE_SOUNDTEST= Тест Звука - - MODOPTIONS_COREMODULE_OOBE= Сменить начальную загрузку + MODOPTIONS_COREMODULE_MENUNAV_SUBHEADER= НАВИГАЦИЯ В МЕНЮ + MODOPTIONS_COREMODULE_MENUPAGEUP= Меню Вверх + MODOPTIONS_COREMODULE_MENUPAGEDOWN= Меню Вниз + MODOPTIONS_COREMODULE_DEBUGMODE_SUBHEADER= РЕЖИМ ОТЛАДКИ + MODOPTIONS_COREMODULE_DEBUGCONSOLE= Консоль Отладки + MODOPTIONS_COREMODULE_DEBUGMAP= Карта Отладки + MODOPTIONS_COREMODULE_MOUNTAINCAM_SUBHEADER= КАМЕРА ДЛЯ 3D ГОРЫ + MODOPTIONS_COREMODULE_CAMERAFORWARD= Камера Вперёд + MODOPTIONS_COREMODULE_CAMERABACKWARD= Камера Назад + MODOPTIONS_COREMODULE_CAMERARIGHT= Камера Вправо + MODOPTIONS_COREMODULE_CAMERALEFT= Камера Влево + MODOPTIONS_COREMODULE_CAMERAUP= Камера Вверх + MODOPTIONS_COREMODULE_CAMERADOWN= Камера Вниз + MODOPTIONS_COREMODULE_CAMERASLOW= Камера Медленно + MODOPTIONS_COREMODULE_CAMERAPRINT= Записать Позицию Камеры + MODOPTIONS_COREMODULE_TOGGLEMOUNTAINFREECAM= Включить Свободную Камеру + MODOPTIONS_COREMODULE_SOUNDTEST= Проверка Звука + MODOPTIONS_COREMODULE_OOBE= Повторить Первоначальную Настройку + MODOPTIONS_COREMODULE_TOGGLEMODS= Включить или Выключить Моды - MODOPTIONS_COREMODULE_TOGGLEMODS= Включить или Выключить моды + MODOPTIONS_COREMODULE_DISCORDRICHPRESENCE= Discord Rich Presence + MODOPTIONS_COREMODULE_DISCORDRICHPRESENCEOPTIONS= Настройки Rich Presence + MODOPTIONS_COREMODULE_DISCORDSHOWICON= Показывать Иконку + MODOPTIONS_COREMODULE_DISCORDSHOWMAP= Показывать Карту + MODOPTIONS_COREMODULE_DISCORDSHOWSIDE= Показывать Сторону (A, B...) + MODOPTIONS_COREMODULE_DISCORDSHOWROOM= Показывать Имя Комнаты + MODOPTIONS_COREMODULE_DISCORDSHOWBERRIES= Показывать Количество Ягод + MODOPTIONS_COREMODULE_DISCORDSHOWDEATHS= Показывать Количество Смертей + MODOPTIONS_COREMODULE_DISCORDFAILED= Ошибка соединения с Discord. Выключите и попробуйте ещё раз. - MODOPTIONS_COREMODULE_NOTLOADED_A= Не удалось загрузить некоторые моды. - MODOPTIONS_COREMODULE_NOTLOADED_B= Проверьте ваш log.txt. - MODOPTIONS_COREMODULE_NOTLOADED_NOTFOUND= {0} не найдено - MODOPTIONS_COREMODULE_YAMLERRORS= Некоторые everest.yaml файлы не могут быть загружены. + MODOPTIONS_COREMODULE_NOTLOADED_A= Некоторые моды не были загружены. + MODOPTIONS_COREMODULE_NOTLOADED_B= Проверьте свой log.txt для большей информации. + MODOPTIONS_COREMODULE_NOTLOADED_NOTFOUND= {0} не были найдены + MODOPTIONS_COREMODULE_YAMLERRORS= Некоторые файлы everest.yaml не были загружены. - MODOPTIONS_VANILLATRISTATE_NEVER= НИКОГДА + MODOPTIONS_VANILLATRISTATE_NEVER= ВЫКЛ. MODOPTIONS_VANILLATRISTATE_EVEREST= EVEREST MODOPTIONS_VANILLATRISTATE_ALWAYS= ВСЕГДА # Sound Test - SOUNDTEST_TITLE= ТЕСТ ЗВУКА + SOUNDTEST_TITLE= ПРОВЕРКА ЗВУКА SOUNDTEST_AUDIOPARAMS_OPEN_1= Нажмите - SOUNDTEST_AUDIOPARAMS_OPEN_2= чтобы изменить настройки Аудио - SOUNDTEST_AUDIOPARAMS= Настройки Аудио + SOUNDTEST_AUDIOPARAMS_OPEN_2= чтобы менять Параметры Аудио + SOUNDTEST_AUDIOPARAMS= Параметры Аудио # Maplist MAPLIST_TITLE= СПИСОК КАРТ - MAPLIST_FILTERS= Фильтры + MAPLIST_FILTERS= Фильры MAPLIST_TYPE= От MAPLIST_TYPE_ALLMODS= Все Моды - MAPLIST_SIDE= Сторона + MAPLIST_SIDE= Стороны MAPLIST_LIST= Карты - MAPLIST_UNCATEGORIZED= Некатегоризированные + MAPLIST_UNCATEGORIZED= Без Категории MAPLIST_SEARCH= Поиск - MAPLIST_SEARCH_MATCH= Quick Match - MAPLIST_TYPE_EVERYTHING= Все - MAPLIST_RESULTS_SINGULAR= {0} результат найден + MAPLIST_SEARCH_MATCH= Быстрый Поиск + MAPLIST_TYPE_EVERYTHING= Любой + MAPLIST_RESULTS_SINGULAR= {0} результатов найдено MAPLIST_RESULTS_PLURAL= {0} результатов найдено LEVELSET_CELESTE= Celeste - LEVELSET_= Некатегоризированные + LEVELSET_= Без Категории # Updater - UPDATER_TITLE= ОБНОВЛЕНИЯ + UPDATER_TITLE= УСТАНОВЩИК UPDATER_VERSIONS_TITLE= ИЗМЕНИТЬ ВЕРСИЮ EVEREST UPDATER_VERSIONS_CURRENT= Установлено: ((version)) UPDATER_VERSIONS_REQUESTING= Обновляю... UPDATER_VERSIONS_ERR_DOWNLOAD= Не удалось загрузить список версий. - UPDATER_VERSIONS_ERR_FORMAT= Непонятный формат. + UPDATER_VERSIONS_ERR_FORMAT= Неизвестный формат. + + UPDATER_CURRENT_BRANCH= Текущая сборка + + UPDATER_SRC_STABLE= STABLE + UPDATER_SRC_BETA= BETA + UPDATER_SRC_DEV= DEV + UPDATER_SRC_CORE= CORE + + UPDATER_SRC_RELEASE_GITHUB= Tagged releases (GitHub) + UPDATER_SRC_BUILDBOT_AZURE= Automatic builds (Azure) +# currently unused UPDATER_SRC_BUILDBOT= Автоматические сборки - + # Everest Updater - EVERESTUPDATER_NOTSUPPORTED= Обновление не поддерживается на этом устройстве - отмена. - EVERESTUPDATER_NOUPDATE= Обновления отсутствуют - отмена. - EVERESTUPDATER_UPDATING= Обновляю до {0} (ветвь: {1}) @ {2} + EVERESTUPDATER_NOTSUPPORTED= Обновление не поддерживается данной платформой - отменяю. + EVERESTUPDATER_NOUPDATE= Нет обновлений - отменяю. + EVERESTUPDATER_UPDATING= Обновление на {0} (branch: {1}) @ {2} EVERESTUPDATER_DOWNLOADING= Загрузка - EVERESTUPDATER_DOWNLOADING_PROGRESS= Загрузка: - EVERESTUPDATER_DOWNLOADFAILED= Ошибка загрузки! + EVERESTUPDATER_DOWNLOADING_PROGRESS= Загрузка: + EVERESTUPDATER_DOWNLOADFAILED= Не удалось загрузить! EVERESTUPDATER_DOWNLOADFINISHED= Загрузка завершена. - EVERESTUPDATER_EXTRACTING= Распаковываем обновление .zip - EVERESTUPDATER_ZIPENTRIES= записи - EVERESTUPDATER_EXTRACTIONFAILED= Ошибка распаковки! + EVERESTUPDATER_EXTRACTING= Распаковка обновления .zip + EVERESTUPDATER_ZIPENTRIES= entries + EVERESTUPDATER_EXTRACTIONFAILED= Не удалось распаковать! EVERESTUPDATER_EXTRACTIONFINISHED= Распаковка завершена. - EVERESTUPDATER_RESTARTING= Перезагружаю - EVERESTUPDATER_RESTARTINGIN= Перезагрузка через {0} - EVERESTUPDATER_STARTINGFAILED= Ошибка запуска установщика! - # not sure about "проблема" - issue, because in Russian issue and problem has the same translation and meaning, so it will be good maybe if will stay in English - EVERESTUPDATER_ERRORHINT1= Пожалуйста, создайте новую проблему на GitHub @ https://github.com/EverestAPI/Everest - EVERESTUPDATER_ERRORHINT2= или сообщите в #modding_help канал в Дискорде (приглашение в репозитории). - EVERESTUPDATER_ERRORHINT3= Не забудьте прикрепить log.txt + EVERESTUPDATER_RESTARTING= Перезапуск + EVERESTUPDATER_RESTARTINGIN= Перезапуск через {0} + EVERESTUPDATER_MISSINGRUNTIME_A= Установка .NET Core Everest требует среду .NET 7.0 + EVERESTUPDATER_MISSINGRUNTIME_B= Вы можете установить его по следующей ссылке: {0} + EVERESTUPDATER_STARTINGFAILED= Не удалось запустить установщик! + EVERESTUPDATER_ERRORHINT1= Пожалуйста, создайте новый отчёт на GitHub @ https://github.com/EverestAPI/Everest + EVERESTUPDATER_ERRORHINT2= или посетите канал #modding_help в Discord (приглашение в репозитории). + EVERESTUPDATER_ERRORHINT3= Не забудьте загрузить ваш log.txt # Mod Updater MODUPDATECHECKER_MENU_TITLE= ОБНОВЛЕНИЯ МОДОВ - MODUPDATECHECKER_NOUPDATE= Обновления отсутствуют - MODUPDATECHECKER_MENU_HEADER= Доступные Обновления - MODUPDATECHECKER_FETCHING= Проверяю обновления... + MODUPDATECHECKER_NOUPDATE= Нет доступных обновлений + MODUPDATECHECKER_MENU_HEADER= Доступные обновления + MODUPDATECHECKER_FETCHING= Проверка обновлений... MODUPDATECHECKER_ERROR= Не удалось проверить обновления. - MODUPDATECHECKER_UPDATED= Обновлено! - MODUPDATECHECKER_DOWNLOADING= Загружаю... - MODUPDATECHECKER_INSTALLING= Устанавливаю... - MODUPDATECHECKER_FAILED= Произошла ошибка в обновлении! - MODUPDATECHECKER_CANCELLING= отменяю обновление... + MODUPDATECHECKER_UPDATED= обновлено + MODUPDATECHECKER_DOWNLOADING= загрузка... + MODUPDATECHECKER_INSTALLING= установка... + MODUPDATECHECKER_FAILED= не удалось обновить! + MODUPDATECHECKER_CANCELLING= отмена обновления... MODUPDATECHECKER_CANCELLED= обновление отменено - MODUPDATECHECKER_WILLRESTART= Нажмите Назад чтобы перезагрузить Celeste + MODUPDATECHECKER_WILLRESTART= нажмите Назад чтобы перезапустить Celeste MODUPDATECHECKER_UPDATE_ALL= Обновить все моды - MODUPDATECHECKER_UPDATE_ALL_INPROGRESS= Обновляю все моды... - MODUPDATECHECKER_UPDATE_ALL_DONE= Все моды были обновлены. - MODUPDATECHECKER_SHUTDOWN= Выход + MODUPDATECHECKER_UPDATE_ALL_INPROGRESS= Обновление всех модов... + MODUPDATECHECKER_UPDATE_ALL_DONE= Все моды были обновлены. + MODUPDATECHECKER_RESTARTNEEDED= для продолжения необходимо перезапустить Celeste + MODUPDATECHECKER_MENU_HEADER_RESTART= Выберите действие + MODUPDATECHECKER_SHUTDOWN= Выход + MODUPDATECHECKER_RESTART= Перезапуск # Auto Mod Updater - AUTOUPDATECHECKER_CHECKING= Проверяю обновления модов... - AUTOUPDATECHECKER_UPDATING= Авто-обновляю - AUTOUPDATECHECKER_DOWNLOADING= Загружаю - AUTOUPDATECHECKER_VERIFYING= Проверяю - AUTOUPDATECHECKER_INSTALLING= Устанавливаю - AUTOUPDATECHECKER_FAILED= Не удалось установить некоторые обновления. Проверьте ваш log.txt. - AUTOUPDATECHECKER_CONTINUE= Нажмите Подтвердить чтобы продолжить - AUTOUPDATECHECKER_REBOOT= Нажмите Подтвердить чтобы перезагрузить Celeste + AUTOUPDATECHECKER_CHECKING= Проверка обновлений... + AUTOUPDATECHECKER_UPDATING= Авто-обновление + AUTOUPDATECHECKER_DOWNLOADING= Загрузка + AUTOUPDATECHECKER_VERIFYING= Проверка + AUTOUPDATECHECKER_INSTALLING= Установка + AUTOUPDATECHECKER_FAILED= Не удалось обновить. Проверьте свой log.txt для большей информации. + AUTOUPDATECHECKER_CONTINUE= Для продолжения нажмите Принять + AUTOUPDATECHECKER_REBOOT= Нажмите Принять чтобы перезапустить Celeste AUTOUPDATECHECKER_SKIP= Пропустить - AUTOUPDATECHECKER_SKIPPING= Пропускаю обновление... + AUTOUPDATECHECKER_SKIPPING= Пропуск обновления... # Dependency downloader DEPENDENCYDOWNLOADER_TITLE= УСТАНОВКА ЗАВИСИМОСТЕЙ - DEPENDENCYDOWNLOADER_DOWNLOADING_DATABASE= Загружаем датабазу модов... - DEPENDENCYDOWNLOADER_LOADING_INSTALLED_MODS= Загружаю информацию об установленных модах... - DEPENDENCYDOWNLOADER_DONE= завершено. - DEPENDENCYDOWNLOADER_DOWNLOAD_DATABASE_FAILED= ОШИБКА: Не удалось загрузить датабазу. Проверьте ваш log.txt. - # You need to highlight the "Change Everest version". I did it by adding inverted commas, but you can add color - DEPENDENCYDOWNLOADER_MUST_UPDATE_EVEREST= ВНИМАНИЕ: Для некоторых модов необходима новая версия Everest. Установите её в меню "Изменить Версию Everest". - DEPENDENCYDOWNLOADER_EVEREST_UPDATE= Everest будет обновлен до {0} для работы некоторых модов. Нажмите Подтвердить для продолжения. - DEPENDENCYDOWNLOADER_MOD_NOT_FOUND= ОШИБКА: В датабазе не найден {0}. Установите этот мод самостоятельно. - DEPENDENCYDOWNLOADER_UPDATE_CELESTE= ОШИБКА: Некоторые из ваших модов требуют более новую версию Celeste для работы. Пожалуйста, обновите игру. - DEPENDENCYDOWNLOADER_MOD_NOT_AUTO_INSTALLABLE= ОШИБКА: {0} доступен в нескольких версиях и не может быть установлен автоматически. Установите этот мод самостоятельно. - DEPENDENCYDOWNLOADER_MOD_BLACKLISTED= ВНИМАНИЕ: {0}.zip находится в вашем чёрном списке. Уберите его оттуда, чтобы пользоваться им как зависимостью. - DEPENDENCYDOWNLOADER_MOD_WRONG_VERSION= ОШИБКА: Требуется версия {1} для {0}, но есть только {2}. Установите этот мод самостоятельно. - DEPENDENCYDOWNLOADER_RESTARTING= Перезагружаюсь - DEPENDENCYDOWNLOADER_RESTARTING_IN= Перезагружаюсь через {0} - DEPENDENCYDOWNLOADER_PRESS_BACK_TO_RESTART= Нажмите Назад чтобы перезагрузить Celeste. - DEPENDENCYDOWNLOADER_PRESS_BACK_TO_GO_BACK= Нажмите Назад чтобы вернуться к Меню Модов. - DEPENDENCYDOWNLOADER_DOWNLOADING= Загружаю {0} от {1}... - DEPENDENCYDOWNLOADER_DOWNLOADING_MIRROR= Ошибка загрузки, загружаю с зеркала {0}... + DEPENDENCYDOWNLOADER_DOWNLOADING_DATABASE= Загрузка базы данных модов... + DEPENDENCYDOWNLOADER_LOADING_INSTALLED_MODS= Загрузка информации об установленных модах... + DEPENDENCYDOWNLOADER_DONE= выполнено. + DEPENDENCYDOWNLOADER_DOWNLOAD_DATABASE_FAILED= ОШИБКА: Загрузка базы данных модов прервана. Проверьте свой log.txt для большей информации. + DEPENDENCYDOWNLOADER_MUST_UPDATE_EVEREST= ПРЕДУПРЕЖДЕНИЕ: Для загрузки некоторых модов необходима более поздня версия Everest. Установите её в меню Изменить Версию Everest. + DEPENDENCYDOWNLOADER_NEEDS_CORE_EVEREST= ПРЕДУПРЕЖДЕНИЕ: Для загрузки некоторых модов необходима (последняя WIP) сборка .NET Core Everest. Установите её в меню Изменить Версию Everest. + DEPENDENCYDOWNLOADER_EVEREST_UPDATE= Everest будет обновлён до {0} для работы некоторых модов. Для продолжения нажмите Принять. + DEPENDENCYDOWNLOADER_MOD_NOT_FOUND= ОШИБКА: {0} не был найден в базе данных. Пожалуйста, установите этот мод вручную. + DEPENDENCYDOWNLOADER_UPDATE_CELESTE= ОШИБКА: Для работы некоторых модов необходима более поздня версия Celeste. Пожалуйста, обновите вашу игру. + DEPENDENCYDOWNLOADER_MOD_NOT_AUTO_INSTALLABLE= ОШИБКА: У {0} доступно несколько версий, поэтому он не может быть установлен автоматически. Пожалуйста, установите этот мод вручную. + DEPENDENCYDOWNLOADER_MOD_WRONG_VERSION= ОШИБКА: Необходима версия {1} мода {0}, но доступна только {2}. Пожалуйста, установите этот мод вручную. + DEPENDENCYDOWNLOADER_RESTARTING= Перезапуск + DEPENDENCYDOWNLOADER_RESTARTING_IN= Перезапуск через {0} + DEPENDENCYDOWNLOADER_PRESS_BACK_TO_RESTART= Нажмите Назад чтобы перезапустить Celeste. + DEPENDENCYDOWNLOADER_PRESS_BACK_TO_GO_BACK= Нажмите Назад чтобы вернуться к Настройкам Модов. + DEPENDENCYDOWNLOADER_DOWNLOADING= Загрузка {0} из {1}... + DEPENDENCYDOWNLOADER_DOWNLOADING_MIRROR= Загрузка прервана, пробуем зеркало {0}... DEPENDENCYDOWNLOADER_DOWNLOAD_FINISHED= Загрузка завершена. - # not sure what checksum means, but this is correct too - DEPENDENCYDOWNLOADER_VERIFYING_CHECKSUM= Проверяю... - DEPENDENCYDOWNLOADER_UPDATING= Устанавливаю обновление {0} ({1} -> {2}) к {3}... - DEPENDENCYDOWNLOADER_INSTALLING= Устанавливаю мод {0} v.{1} к {2}... - DEPENDENCYDOWNLOADER_INSTALL_FAILED= ОШИБКА: Не удалось установить {0}. Проверьте ваш log.txt. - DEPENDENCYDOWNLOADER_MOD_UNBLACKLIST= Убираю {0} из чёрного списка... - DEPENDENCYDOWNLOADER_UNBLACKLIST_FAILED= Ошибка в автоматическом удалении некоторых модов из чёрного списка. Проверьте log.txt для большей информации. + DEPENDENCYDOWNLOADER_VERIFYING_CHECKSUM= Финальная проверка... + DEPENDENCYDOWNLOADER_UPDATING= Установка мода с {0} ({1} -> {2}) до {3}... + DEPENDENCYDOWNLOADER_INSTALLING= Установка мода {0} v.{1} до {2}... + DEPENDENCYDOWNLOADER_INSTALL_FAILED= ОШИБКА: Установка {0} прервана. Проверьте свой log.txt для большей информации. + DEPENDENCYDOWNLOADER_MOD_UNBLACKLIST= Убираем мод {0} из чёрного списка... + DEPENDENCYDOWNLOADER_UNBLACKLIST_FAILED= Не удалось автоматически убрать мод из чёрного списка. Проверьте свой log.txt для большей информации. DEPENDENCYDOWNLOADER_LOADING_MOD= Загрузка {0} из {1}... DEPENDENCYDOWNLOADER_LOADING_MOD_NOMETA= Загрузка мода из {0}... # OOBE (Out Of Box Experience) - first launch stuff OOBE_WELCOME_HEADER= Добро пожаловать в Everest! - OOBE_WELCOME_SUBHEADER= Что вы хотите сделать? - OOBE_WELCOME_PLAY= Я хочу ИГРАТЬ с модами. - OOBE_WELCOME_SPEEDRUN= Я хочу играть НА СКОРОСТЬ. + OOBE_WELCOME_SUBHEADER= Что вы хотите делать? + OOBE_WELCOME_PLAY= Я хочу ИГРАТЬ в моды. + OOBE_WELCOME_SPEEDRUN= Я хочу СПИДРАНИТЬ. OOBE_WELCOME_CREATE= Я хочу СОЗДАВАТЬ моды. OOBE_WELCOME_SKIP= Мне не нужна помощь. - OOBE_SETTINGS_PLAY= Вы можете находить моды на GameBanana.{n}Установленные карты можно найти на карте мира.{n}Ваш прогресс можно увидеть в вашем статусе в Discord, если включен Rich Presence.{n}Нажмите F6 в режиме отладки чтобы открыть новый режим откладки карт. - OOBE_SETTINGS_SPEEDRUN= Держите кнопку вправо на главном меню чтобы перезагрузить в обычную игру.{n}Вы можете находить и устанавливать моды на GameBanana.{n}Установленные карты можно найти на карте мира.{n}Нажмите F6 в режиме отладки чтобы открыть новый режим отладки карт. - OOBE_SETTINGS_CREATE= Вы можете публиковать и искать моды на GameBanana.{n}Карты можно найти на карте мира.{n}Нажмите F6 в режиме отладки чтобы открыть новый режим отладки карт.{n}Нажмите F5 чтобы перезагрузить карту, в которой вы играете, или CTRL+F5 чтобы перезагрузить всю игру.{n}Если у вас нестандартная клавиатура . - открывает консоль, а q - закрывает. - OOBE_SETTINGS_SUBHEADER= Вот настройки, которые могут вам помочь. - OOBE_SETTINGS_MORE= Вы можете изменить это и не только в "Настройках Модов". - OOBE_SETTINGS_OK= ОК + OOBE_SETTINGS_PLAY= Вы можете находить и устанавливать моды на сайте GameBanana.{n}Вы сможете найти установленные карты на карте мира.{n}Ваш прогресс можно увидеть в игровом статусе Discord.{n}Используйте F6 в режиме отладки, чтобы включить карту уровня. + OOBE_SETTINGS_SPEEDRUN= Зажмите вправо на экране названия, чтобы перезапуститься в ванильной версии.{n}Вы можете находить и устанавливать моды на сайте GameBanana.{n}Вы сможете найти установленные карты на карте мира.{n}Используйте F6 в режиме отладки, чтобы включить карту уровня. + OOBE_SETTINGS_CREATE= Вы можете находить и делиться модами на сайте GameBanana.{n}Вы сможете найти установленные карты на карте мира.{n}Используйте F6 в режиме отладки, чтобы включить карту уровня.{n}Нажмите F5 чтобы перезагрузить текущую карту, или CTRL+F5 чтобы перезапустить игру.{n}Если у вас не-QWERTY клавиатура:{n}. (клавиша "ю", но английская раскладка) открывает консоль, а команда q закроет её. + OOBE_SETTINGS_SUBHEADER= Вот некоторые настройки, которые могут вам понадобиться. + OOBE_SETTINGS_MORE= Вы сможете изменить это и многое другое в Настройках Модов. + OOBE_SETTINGS_OK= Хорошо + +# Mod Toggle Menu + MODOPTIONS_MODTOGGLE= ВКЛЮЧЕНИЕ МОДОВ + MODOPTIONS_MODTOGGLE_LOADING= Загрузка информации о модах... + MODOPTIONS_MODTOGGLE_TOGGLEDEPS= Автоматически включать зависимости + MODOPTIONS_MODTOGGLE_TOGGLEDEPS_MESSAGE1= Когда вы включаете мод, все зависимости тоже будут включены. + MODOPTIONS_MODTOGGLE_TOGGLEDEPS_MESSAGE2= Когда вы выключаете мод, все моды, которым он был необходим, будут выключены. + MODOPTIONS_MODTOGGLE_MESSAGE_1= Когда вы вкючаете или выключаете моды, ваш файл blacklist.txt будет изменён, + MODOPTIONS_MODTOGGLE_MESSAGE_2= и будет необходимо перезапустить Celeste для принятия изменений. + MODOPTIONS_MODTOGGLE_MESSAGE_3= Подсвеченные моды (зависимости) используются другими включенными модами. + MODOPTIONS_MODTOGGLE_WHITELISTWARN= Отключите свой белый список, чтобы эти настройки были применены должным образом. + MODOPTIONS_MODTOGGLE_ENABLEALL= Включить Всё + MODOPTIONS_MODTOGGLE_DISABLEALL= Выключить Всё + MODOPTIONS_MODTOGGLE_CANCEL= Отмена + MODOPTIONS_MODTOGGLE_ZIPS= Zip Файлы + MODOPTIONS_MODTOGGLE_DIRECTORIES= Папки + MODOPTIONS_MODTOGGLE_BINS= Bin Файлы Карты + +# Asset Reload Helper + ASSETRELOADHELPER_RELOADINGMAP= Перезагрузка карты + ASSETRELOADHELPER_RELOADINGLEVEL= Перезагрузка уровня + ASSETRELOADHELPER_UNLOADINGTEXTURE= Выгрузка текстуры: + ASSETRELOADHELPER_RELOADINGMAPNAME= Перезагрузка карты: + ASSETRELOADHELPER_RELOADINGALLMAPS= Перезагрузить все карты + ASSETRELOADHELPER_RELOADINGDIALOG= Перезагрузка диалога: + ASSETRELOADHELPER_RELOADINGTEXTURE= Перезагрузка текстуры: + ASSETRELOADHELPER_RELOADINGTEXTURES= Перезагрузка текстур: + ASSETRELOADHELPER_LOADINGNEWMOD= Загрузка нового мода: + ASSETRELOADHELPER_RELOADINGMODASSEMBLY= Перезагрузка сборки мода: + ASSETRELOADHELPER_RELOADINGMOUNTAIN= Перезагрузка горы From 275405c16fec4575eeec6fe3013321a9871779b2 Mon Sep 17 00:00:00 2001 From: horizon-wings <127271516+horizon-wings@users.noreply.github.com> Date: Mon, 9 Oct 2023 11:11:35 -0700 Subject: [PATCH 3/4] Fix non-even decal rendering (#624) Fix decal rendering when decal dimensions are non-even --- Celeste.Mod.mm/Patches/Decal.cs | 227 +++++++++++++++++++++++++++++--- 1 file changed, 210 insertions(+), 17 deletions(-) diff --git a/Celeste.Mod.mm/Patches/Decal.cs b/Celeste.Mod.mm/Patches/Decal.cs index 818b28c9a..b2c19a4a6 100644 --- a/Celeste.Mod.mm/Patches/Decal.cs +++ b/Celeste.Mod.mm/Patches/Decal.cs @@ -84,7 +84,6 @@ public patch_CoreSwapImage(MTexture hot, MTexture cold) : base(active: false, vi } [MonoModIgnore] - [PatchDecalImageRender] public extern override void Render(); } @@ -110,8 +109,11 @@ public override void Update() { } public override void Render() { - if (activeTextures.Count > 0) - activeTextures[(int) frame % activeTextures.Count].DrawCentered(Decal.Position, Decal.Color, Decal.scale, Decal.Rotation); + if (activeTextures.Count > 0) { + MTexture texture = activeTextures[(int) frame % activeTextures.Count]; + Vector2 offset = new Vector2(texture.Center.X * Decal.scale.X % 1, texture.Center.Y * Decal.scale.X % 1); + texture.DrawCentered(Decal.Position + offset, Decal.Color, Decal.scale, Decal.Rotation); + } } } @@ -152,15 +154,15 @@ public void ctor(string texture, Vector2 position, Vector2 scale, int depth, flo [MonoModIgnore] [MonoModPublic] - [PatchMirrorMaskRotation] + [PatchMirrorMaskRender] public extern void MakeMirror(string path, bool keepOffsetsClose); [MonoModIgnore] - [PatchMirrorMaskRotation] + [PatchMirrorMaskRender] private extern void MakeMirror(string path, Vector2 offset); [MonoModIgnore] - [PatchMirrorMaskRotation] + [PatchMirrorMaskRender] private extern void MakeMirrorSpecialCase(string path, Vector2 offset); [MonoModIgnore] @@ -348,16 +350,16 @@ namespace MonoMod { class PatchDecalUpdateAttribute : Attribute { } /// - /// Allow decal images to be rotated. + /// Allow decal images to be rotated and correct rendering of images with non-even dimensions. /// [MonoModCustomMethodAttribute(nameof(MonoModRules.PatchDecalImageRender))] class PatchDecalImageRenderAttribute : Attribute { } /// - /// Allow mirror masks to be rotated. + /// Allow mirror masks to be rotated and correct rendering of masks with non-even dimensions. /// - [MonoModCustomMethodAttribute(nameof(MonoModRules.PatchMirrorMaskRotation))] - class PatchMirrorMaskRotationAttribute : Attribute { } + [MonoModCustomMethodAttribute(nameof(MonoModRules.PatchMirrorMaskRender))] + class PatchMirrorMaskRenderAttribute : Attribute { } static partial class MonoModRules { @@ -380,21 +382,120 @@ public static void PatchDecalUpdate(ILContext context, CustomAttribute attrib) { public static void PatchDecalImageRender(ILContext context, CustomAttribute attrib) { TypeDefinition t_Decal = MonoModRule.Modder.FindType("Celeste.Decal").Resolve(); TypeDefinition t_MTexture = MonoModRule.Modder.FindType("Monocle.MTexture").Resolve(); + TypeDefinition t_Vector2 = MonoModRule.Modder.FindType("Microsoft.Xna.Framework.Vector2").Resolve(); + TypeDefinition t_Matrix = MonoModRule.Modder.FindType("Microsoft.Xna.Framework.Matrix").Resolve(); + // This is not allowed to be a TypeDefinition for ?? reasons + TypeReference t_float = MonoModRule.Modder.Module.ImportReference(MonoModRule.Modder.FindType("System.Single").Resolve()); + FieldReference f_Decal_Rotation = t_Decal.FindField("Rotation"); FieldReference f_Decal_Color = t_Decal.FindField("Color"); - + FieldReference f_Decal_scale = t_Decal.FindField("scale"); + + MethodReference m_get_Center = t_MTexture.FindProperty("Center").GetMethod; + + MethodReference m_Vector2_ctor = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindMethod("System.Void .ctor(System.Single,System.Single)")); + MethodReference m_Vector2_Transform = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindMethod("Microsoft.Xna.Framework.Vector2 Transform(Microsoft.Xna.Framework.Vector2,Microsoft.Xna.Framework.Matrix)")); + FieldReference f_Vector2_X = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindField("X")); + FieldReference f_Vector2_Y = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindField("Y")); + + MethodReference m_Matrix_CreateRotationZ = MonoModRule.Modder.Module.ImportReference(t_Matrix.FindMethod("Microsoft.Xna.Framework.Matrix CreateRotationZ(System.Single)")); + + // These methods vary based on what class we're patching MethodReference m_get_Decal = null; MethodReference m_Draw_old = null; + // Create some extra locals to make the math easier + VariableDefinition v_vector = new VariableDefinition(MonoModRule.Modder.Module.ImportReference(t_Vector2)); + VariableDefinition v_X = new VariableDefinition(t_float); + VariableDefinition v_Y = new VariableDefinition(t_float); + context.Body.Variables.Add(v_vector); + context.Body.Variables.Add(v_X); + context.Body.Variables.Add(v_Y); + ILCursor cursor = new ILCursor(context); + // Part one: fix rendering for decals with non-integer centers (i.e. non-even dimensions) + + // Jump to just after the decal texture is put on the stack. + // Because the various decal components have different methods of finding their texture, + // it's not possible to match the instruction that loads the texture itself. + // Instead, we can just look for the instructions that put the decal position on the stack, + // and put our cursor just before that, since the decal texture immediately precedes position + // in the arguments being made to MTexture.Draw(). + // Also, we collect the MethodReference for the Decal getter for this component type. + cursor.GotoNext(MoveType.Before, + instr => instr.MatchLdarg(0), + instr => instr.MatchCallvirt(out m_get_Decal), + instr => instr.MatchLdfld("Monocle.Entity", "Position") + ); + + // Duplicate the texture reference on the stack so we leave a copy to be used as an argument to Draw(). + // Then get MTexture.Center, multiply it by a rotation matrix based on decal rotation, and store it in our Vector2 local. + cursor.Emit(OpCodes.Dup); + cursor.Emit(OpCodes.Call, m_get_Center); + cursor.Emit(OpCodes.Ldarg_0); + cursor.Emit(OpCodes.Callvirt, m_get_Decal); + cursor.Emit(OpCodes.Ldfld, f_Decal_Rotation); + cursor.Emit(OpCodes.Ldc_R4, (float) Math.PI / 180); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Call, m_Matrix_CreateRotationZ); + cursor.Emit(OpCodes.Call, m_Vector2_Transform); + cursor.Emit(OpCodes.Stloc_S, v_vector); + + // Get our stored Vector2 back, then get the X component as a float, and store the non-integer component + // of that float in our first float local. This will be used to offset the "real" position when the decal + // renders if the decal's Center is a non-integer. (If the Center is an integer, the offset will be 0.) + cursor.Emit(OpCodes.Ldloc_S, v_vector); + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Ldarg_0); + cursor.Emit(OpCodes.Callvirt, m_get_Decal); + cursor.Emit(OpCodes.Ldfld, f_Decal_scale); + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Ldc_R4, 1f); + cursor.Emit(OpCodes.Rem); + cursor.Emit(OpCodes.Stloc_S, v_X); + + // Same thing but for the Y. + cursor.Emit(OpCodes.Ldloc_S, v_vector); + cursor.Emit(OpCodes.Ldfld, f_Vector2_Y); + cursor.Emit(OpCodes.Ldarg_0); + cursor.Emit(OpCodes.Callvirt, m_get_Decal); + cursor.Emit(OpCodes.Ldfld, f_Decal_scale); + cursor.Emit(OpCodes.Ldfld, f_Vector2_Y); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Ldc_R4, 1f); + cursor.Emit(OpCodes.Rem); + cursor.Emit(OpCodes.Stloc_S, v_Y); + + // Now jump after the position has been put on the stack, so we can store and then modify it. + cursor.GotoNext(MoveType.After, + instr => instr.MatchLdfld("Monocle.Entity", "Position")); + cursor.Emit(OpCodes.Stloc_S, v_vector); + + // Get our stored position back, get the position's X component, and add it to our calculated offset. + cursor.Emit(OpCodes.Ldloc_S, v_vector); + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Ldloc_S, v_X); + cursor.Emit(OpCodes.Add); + + // And again for Y. + cursor.Emit(OpCodes.Ldloc_S, v_vector); + cursor.Emit(OpCodes.Ldfld, f_Vector2_Y); + cursor.Emit(OpCodes.Ldloc_S, v_Y); + cursor.Emit(OpCodes.Add); + + // Use our offsetted position values to create a new "adjusted" position, which will be used instead. + cursor.Emit(OpCodes.Newobj, m_Vector2_ctor); + + // Part two: inject decal rotation + // move to just after the decal's scale is obtained, but just before the draw call. - // also get references to the Decal getter and to the draw call itself + // also get a reference to the draw call itself cursor.GotoNext(MoveType.After, - instr => instr.MatchCallvirt(out m_get_Decal), - instr => instr.MatchLdfld("Celeste.Decal", "scale"), - instr => instr.MatchCallvirt(out m_Draw_old)); + instr => instr.MatchLdfld("Celeste.Decal", "scale"), + instr => instr.MatchCallvirt(out m_Draw_old)); cursor.Index--; // find an appropriate draw method; it should have the same signature, but also take a float for the rotation as its last argument @@ -420,10 +521,28 @@ public static void PatchDecalImageRender(ILContext context, CustomAttribute attr cursor.Remove(); } - public static void PatchMirrorMaskRotation(ILContext context, CustomAttribute attrib) { + public static void PatchMirrorMaskRender(ILContext context, CustomAttribute attrib) { + TypeDefinition t_Decal = MonoModRule.Modder.FindType("Celeste.Decal").Resolve(); TypeDefinition t_MTexture = MonoModRule.Modder.FindType("Monocle.MTexture").Resolve(); - FieldDefinition f_Decal_Rotation = context.Method.DeclaringType.FindField("Rotation"); + TypeDefinition t_Vector2 = MonoModRule.Modder.FindType("Microsoft.Xna.Framework.Vector2").Resolve(); + TypeDefinition t_Entity = MonoModRule.Modder.FindType("Monocle.Entity").Resolve(); + TypeDefinition t_Matrix = MonoModRule.Modder.FindType("Microsoft.Xna.Framework.Matrix").Resolve(); + + FieldReference f_Decal_Rotation = t_Decal.FindField("Rotation"); + FieldReference f_Decal_scale = t_Decal.FindField("scale"); + + FieldReference f_Entity_Position = t_Entity.FindField("Position"); + + MethodReference m_get_Center = t_MTexture.FindProperty("Center").GetMethod; MethodDefinition m_DrawCentered = t_MTexture.FindMethod("System.Void DrawCentered(Microsoft.Xna.Framework.Vector2,Microsoft.Xna.Framework.Color,Microsoft.Xna.Framework.Vector2,System.Single)"); + + MethodReference m_Vector2_ctor = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindMethod("System.Void .ctor(System.Single,System.Single)")); + MethodReference m_Vector2_Transform = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindMethod("Microsoft.Xna.Framework.Vector2 Transform(Microsoft.Xna.Framework.Vector2,Microsoft.Xna.Framework.Matrix)")); + FieldReference f_Vector2_X = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindField("X")); + FieldReference f_Vector2_Y = MonoModRule.Modder.Module.ImportReference(t_Vector2.FindField("Y")); + + MethodReference m_Matrix_CreateRotationZ = MonoModRule.Modder.Module.ImportReference(t_Matrix.FindMethod("Microsoft.Xna.Framework.Matrix CreateRotationZ(System.Single)")); + MethodReference r_OnRender = null; ILCursor cursor = new ILCursor(context); @@ -436,8 +555,82 @@ public static void PatchMirrorMaskRotation(ILContext context, CustomAttribute at // Some of the patched methods use closure locals so search for those FieldDefinition f_locals = m_OnRender.DeclaringType.FindField("CS$<>8__locals1"); FieldReference f_this = null; + FieldReference f_mask = null; ILCursor cursor = new ILCursor(il); + + // Copies the IL strategy from PatchDecalImageRotationAndCentering, modified to avoid adding locals + + cursor.GotoNext(MoveType.After, + instr => instr.MatchLdfld(out f_mask), + instr => instr.MatchLdarg(0) + ); + + cursor.GotoNext(MoveType.After, + instr => instr.MatchLdfld(out f_this), + instr => instr.MatchLdfld("Monocle.Entity", "Position") + ); + + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_mask); + cursor.Emit(OpCodes.Call, m_get_Center); + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_this); + cursor.Emit(OpCodes.Ldfld, f_Decal_Rotation); + cursor.Emit(OpCodes.Ldc_R4, (float) Math.PI / 180); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Call, m_Matrix_CreateRotationZ); + cursor.Emit(OpCodes.Call, m_Vector2_Transform); + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_this); + cursor.Emit(OpCodes.Ldfld, f_Decal_scale); + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Ldc_R4, 1f); + cursor.Emit(OpCodes.Rem); + cursor.Emit(OpCodes.Add); + + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_this); + cursor.Emit(OpCodes.Ldfld, f_Entity_Position); + cursor.Emit(OpCodes.Ldfld, f_Vector2_Y); + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_mask); + cursor.Emit(OpCodes.Call, m_get_Center); + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_this); + cursor.Emit(OpCodes.Ldfld, f_Decal_Rotation); + cursor.Emit(OpCodes.Ldc_R4, (float) Math.PI / 180); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Call, m_Matrix_CreateRotationZ); + cursor.Emit(OpCodes.Call, m_Vector2_Transform); + cursor.Emit(OpCodes.Ldfld, f_Vector2_Y); + cursor.Emit(OpCodes.Ldarg_0); + if (f_locals != null) + cursor.Emit(OpCodes.Ldfld, f_locals); + cursor.Emit(OpCodes.Ldfld, f_this); + cursor.Emit(OpCodes.Ldfld, f_Decal_scale); + cursor.Emit(OpCodes.Ldfld, f_Vector2_X); + cursor.Emit(OpCodes.Mul); + cursor.Emit(OpCodes.Ldc_R4, 1f); + cursor.Emit(OpCodes.Rem); + cursor.Emit(OpCodes.Add); + + cursor.Emit(OpCodes.Newobj, m_Vector2_ctor); // Grab the function's decal reference and move to just before the draw call cursor.GotoNext(MoveType.After, From 327abd288e2ae0da398e73e553f59168cf3884f6 Mon Sep 17 00:00:00 2001 From: maddie480 <52103563+maddie480@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:49:30 +0200 Subject: [PATCH 4/4] Update Korean font extra characters --- .../Content/Dialog/Fonts/korean.fnt | 56 +++++++++--------- .../Content/Dialog/Fonts/korean_everest_0.png | Bin 6828 -> 9569 bytes 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/Celeste.Mod.mm/Content/Dialog/Fonts/korean.fnt b/Celeste.Mod.mm/Content/Dialog/Fonts/korean.fnt index d964d8811..df381af8f 100644 --- a/Celeste.Mod.mm/Content/Dialog/Fonts/korean.fnt +++ b/Celeste.Mod.mm/Content/Dialog/Fonts/korean.fnt @@ -1,28 +1,30 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Celeste.Mod.mm/Content/Dialog/Fonts/korean_everest_0.png b/Celeste.Mod.mm/Content/Dialog/Fonts/korean_everest_0.png index 8c1b039a29beeb589afa53014e79159f89a59ec7..0d2bb583b48939bb93932cd0c25f48bd55c11e01 100644 GIT binary patch literal 9569 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