Compare commits

...
6 Commits
38 changed files with 1007 additions and 29 deletions

No files matched your search

+1
View File
@@ -12,6 +12,7 @@ obj/
gen/ gen/
obj/ obj/
bin/ bin/
art_sources/
*.tres~ *.tres~
*.tscn~ *.tscn~
Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+74
View File
@@ -0,0 +1,74 @@
# Menu — main menu, game choice, saves and settings
Menu is the first screen you see: the title menu with **Play**, **Load**, **Settings**, **Mods & Collections** and **Exit**. It lets you pick one of the installed games, start it or continue where you stopped, load a save, and change the language, sound and display settings. Other mods can add their own buttons and settings pages to it.
It belongs to the shell that is always loaded, so it is there before any game starts.
![The main menu: Play, Load, Settings, Mods & Collections and Exit on the left, the Cthangover title art on the right.](assets/main-menu.jpg)
## Start a game
**Play** opens **Choose a game**. Every game from your collections is a card with its cover, description, readiness and number of saves.
![Two game cards in Choose a game: Cthangover and My Novel, each "Ready to play", "No saves", with New game and Configure buttons.](assets/game-picker.jpg)
- **New game** starts the game from its first scene. The menu switches to the game's set of mods in the same window — there is no restart.
- **Continue** on a card resumes that game's latest save; **Saves** lists them.
- **Install missing** appears when the game needs mods you do not have; it downloads them.
- **Configure** opens the game's scheme in the mod manager.
While you look at the menu, the games' mods are prepared in the background; the hint at the bottom says when starting will be quick.
**Continue** in the main menu itself appears once you have played: it returns to the last game and save you used.
## Load a save
**Load** shows the saves of one game at a time; pick the game in the selector at the top and click a save to load it.
![The Load window for My Novel with one save, "Day 1, 00:00", and the hint "Click a save to load it".](assets/load.jpg)
If the game's mods changed since the save was made, a **The game has changed** window lists what was added (starts from scratch), removed (its data is kept and returns if turned on again) or updated, and makes a backup of the save before loading. Saves from before games existed appear under **Saves without a game**; you choose the game they belong to and the file moves there.
During a game, saving and loading use the same window through the in-game menu: click a slot to save, a used slot is overwritten after confirmation, **+ New save** adds one.
## Settings
**Settings** has four tabs. Changes are applied and saved at once.
- **General** — interface language.
- **Sound** — on/off and volume for Sounds, Music and Ambience.
- **Display** — window mode (windowed, maximized, borderless or exclusive fullscreen), monitor, window size, V-Sync and frame rate limit, plus **Reset display settings**.
- **Mods** — settings pages that installed mods add, with **Reset to Defaults**.
![The Display tab: window mode, monitor, window size, V-Sync and frame rate limit.](assets/settings-display.jpg)
![The Mods tab: the Menu mod's own page with "Data of disabled mechanics" and a Purge button.](assets/settings-mods.jpg)
Menu's own page on the **Mods** tab is **Data of disabled mechanics → Purge**: it removes from every save the data of mods that are no longer part of the games. Use it only when you are sure: a mechanic turned on again starts from scratch.
## What Menu relies on
Menu draws the screens and decides what each button does. The game list and its readiness come from the collections; starting, switching and saving games are done by the engine's game session and save services; the music of the title screen is the `MainMenu` playlist of Music Pack, which Menu requires. **Mods & Collections** is supplied by Mod Manager.
## For mod authors: add a button or a settings page
The buttons come from a registry, not from a fixed screen, so a mod can add, replace or reorder them. Mod Manager adds its button with a `main_menu` entry in its manifest:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
A mod's settings appear on the **Mods** tab when the mod registers settings definitions in the mod settings registry, as Menu does for its Purge action. Text on buttons and settings comes from the mod's own localization.
## If something goes wrong
1. **No games under Play.** No collection of kind *game* is installed or enabled; open **Mods & Collections**.
2. **A game card says Missing mods or Incompatible versions.** Use **Install missing**, or **Configure** to see the problem.
3. **Continue is missing.** It appears after you have played a game at least once.
4. **The window does not keep its size.** Check **Display → Window mode**; window size applies only to windowed mode.
+74
View File
@@ -0,0 +1,74 @@
# Menu — menú principal, elección de juego, partidas guardadas y ajustes
Menu es la primera pantalla que ves: el menú de título con **Jugar**, **Cargar**, **Ajustes**, **Mods y colecciones** y **Salir**. Desde ahí eliges uno de los juegos instalados, lo empiezas o lo continúas donde lo dejaste, cargas una partida guardada y cambias el idioma, el sonido y los ajustes de pantalla. Otros mods pueden añadir sus propios botones y páginas de ajustes.
Pertenece a la carcasa que siempre está cargada, así que está ahí antes de que empiece cualquier juego.
![El menú principal: Play, Load, Settings, Mods & Collections y Exit a la izquierda, el arte de portada de Cthangover a la derecha.](assets/main-menu.jpg)
## Empezar una partida
**Jugar** abre **Elige un juego**. Cada juego de tus colecciones es una tarjeta con su portada, descripción, estado de preparación y número de partidas guardadas.
![Dos tarjetas de juego en Choose a game: Cthangover y My Novel, cada una "Ready to play" y "No saves", con botones New game y Configure.](assets/game-picker.jpg)
- **Nueva partida** empieza el juego desde su primera escena. El menú cambia al conjunto de mods del juego en la misma ventana, sin reiniciar.
- **Continuar** en una tarjeta retoma la última partida guardada de ese juego; **Partidas** las enumera.
- **Instalar lo que falta** aparece cuando el juego necesita mods que no tienes y los descarga.
- **Configurar** abre el esquema del juego en el gestor de mods.
Mientras miras el menú, los mods de los juegos se preparan en segundo plano; la pista de abajo avisa de cuándo el arranque será rápido.
**Continuar** en el propio menú principal aparece cuando ya has jugado: te devuelve al último juego y partida que usaste.
## Cargar una partida guardada
**Cargar** muestra las partidas guardadas de un juego cada vez; elige el juego en el selector de arriba y haz clic en una partida para cargarla.
![La ventana de carga de My Novel con una partida, "Day 1, 00:00", y la pista "Click a save to load it".](assets/load.jpg)
Si los mods del juego han cambiado desde que se hizo la partida, una ventana **El juego ha cambiado** enumera lo que se añadió (empieza de cero), lo que se quitó (sus datos se conservan y vuelven si se activa de nuevo) y lo que se actualizó, y hace una copia de seguridad de la partida antes de cargarla. Las partidas de antes de que existieran los juegos aparecen en **Partidas sin juego**; eliges a qué juego pertenecen y el archivo se muda allí.
Dentro de un juego, guardar y cargar usan la misma ventana desde el menú del juego: haz clic en una ranura para guardar, una ranura usada se sobrescribe tras confirmar, y **+ Nueva partida guardada** añade una más.
## Ajustes
**Ajustes** tiene cuatro pestañas. Los cambios se aplican y se guardan al instante.
- **General** — el idioma de la interfaz.
- **Sonido** — activación y volumen de Sonidos, Música y Ambiente.
- **Pantalla** — modo de ventana (en ventana, maximizada, sin bordes o pantalla completa exclusiva), monitor, tamaño de la ventana, V-Sync y límite de fotogramas, además de **Restablecer ajustes de pantalla**.
- **Mods** — páginas de ajustes que añaden los mods instalados, con **Restablecer valores**.
![La pestaña de pantalla: modo de ventana, monitor, tamaño de la ventana, V-Sync y límite de fotogramas.](assets/settings-display.jpg)
![La pestaña Mods: la página del propio mod Menu con "Data of disabled mechanics" y un botón de purga.](assets/settings-mods.jpg)
La página del propio Menu en la pestaña **Mods** es **Datos de mecánicas desactivadas → Purgar**: quita de cada partida guardada los datos de los mods que ya no forman parte de los juegos. Úsala solo si estás seguro: una mecánica reactivada empieza de cero.
## De qué depende Menu
Menu dibuja las pantallas y decide qué hace cada botón. La lista de juegos y su preparación vienen de las colecciones; empezar, cambiar y guardar juegos lo hacen la sesión de juego y los servicios de guardado del motor; la música de la pantalla de título es la lista `MainMenu` de Music Pack, que Menu exige. **Mods y colecciones** lo aporta Mod Manager.
## Para autores de mods: añadir un botón o una página de ajustes
Los botones salen de un registro, no de una pantalla fija, así que un mod puede añadirlos, sustituirlos o reordenarlos. Mod Manager añade su botón con una entrada `main_menu` en su manifiesto:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
Los ajustes de un mod aparecen en la pestaña **Mods** cuando el mod registra definiciones de ajustes en el registro de ajustes de mods, como hace Menu con su acción de purga. Los textos de botones y ajustes salen de la localización del propio mod.
## Si algo falla
1. **No hay juegos bajo Jugar.** No hay ninguna colección de tipo *juego* instalada o activada; abre **Mods y colecciones**.
2. **Una tarjeta dice Faltan mods o Versiones incompatibles.** Usa **Instalar lo que falta** o **Configurar** para ver el problema.
3. **No aparece Continuar.** Aparece cuando has jugado al menos una vez.
4. **La ventana no mantiene su tamaño.** Revisa **Pantalla → Modo de ventana**; el tamaño de ventana solo se aplica en modo ventana.
+74
View File
@@ -0,0 +1,74 @@
# Menu — メインメニュー、ゲーム選択、セーブ、設定
Menu は起動して最初に目にする画面です。**プレイ**、**ロード**、**設定**、**MOD とコレクション**、**終了**の並ぶタイトルメニューです。ここからインストール済みのゲームを一つ選び、始めたり続きから再開したり、セーブをロードしたり、言語・サウンド・表示の設定を変えたりできます。他の MOD が独自のボタンや設定ページを追加することもできます。
Menu は常に読み込まれるシェルの一部なので、どのゲームを始める前からそこにあります。
![メインメニュー:左に Play、Load、Settings、Mods & Collections、Exit、右に Cthangover のタイトルアート。](assets/main-menu.jpg)
## ゲームを始める
**プレイ**を押すと**ゲームを選択**が開きます。コレクションにあるゲームはそれぞれ、カバー・説明・準備状況・セーブ数を添えたカードとして並びます。
![ゲームを選択の二枚のカード:Cthangover と My Novel。どちらも "Ready to play" と "No saves"、New game と Configure のボタンつき。](assets/game-picker.jpg)
- **ニューゲーム**はゲームの最初のシーンから始めます。メニューは同じウィンドウのままそのゲームの MOD セットに切り替わります。再起動は不要です。
- カードの**続きから**はそのゲームの最新セーブを再開します。**セーブ**で一覧を出せます。
- **足りないものをインストール**は、ゲームに必要な MOD が足りないときに現れ、ダウンロードします。
- **設定する**は MOD マネージャーでゲームの構成を開きます。
メニューを見ている間に、各ゲームの MOD がバックグラウンドで準備されます。下のヒントが、起動が速くなるタイミングを教えてくれます。
メインメニュー自身の**続きから**は、一度でもプレイすると現れます。最後に使ったゲームとセーブへ戻ります。
## セーブをロードする
**ロード**は一度に一つのゲームのセーブを表示します。上のセレクターでゲームを選び、セーブをクリックするとロードします。
![My Novel のロード画面。セーブ "Day 1, 00:00" が一つと、ヒント "Click a save to load it"。](assets/load.jpg)
セーブの後でゲームの MOD が変わっていた場合は、**ゲームが変わりました**ウィンドウが、追加されたもの(最初から)、削除されたもの(データは残り、有効にすれば戻る)、更新されたものを一覧し、ロードの前にセーブのバックアップを作ります。ゲームという仕組みができる前のセーブは**ゲームのないセーブ**に表示されます。属するゲームを選ぶと、ファイルがそちらへ移ります。
ゲーム中のセーブとロードは、ゲーム内メニューから同じウィンドウを使います。スロットをクリックしてセーブ、使用中のスロットは確認後に上書き、**+ 新しいセーブ**で追加します。
## 設定
**設定**には四つのタブがあります。変更はすぐに反映・保存されます。
- **一般** — インターフェースの言語。
- **サウンド** — 効果音・音楽・アンビエンスのオン/オフと音量。
- **表示** — ウィンドウモード(ウィンドウ、最大化、ボーダーレス、排他フルスクリーン)、モニター、ウィンドウサイズ、V-Sync、フレームレート制限、そして**表示設定をリセット**。
- **MOD** — インストール済み MOD が追加する設定ページと**既定に戻す**。
![表示タブ:ウィンドウモード、モニター、ウィンドウサイズ、V-Sync、フレームレート制限。](assets/settings-display.jpg)
![MOD タブ:Menu MOD 自身のページ。"Data of disabled mechanics" と削除ボタン。](assets/settings-mods.jpg)
**MOD** タブにある Menu 自身のページが**無効にしたメカニクスのデータ → 削除**です。ゲームに属さなくなった MOD のデータをすべてのセーブから取り除きます。確信が持てるときだけ使いましょう。もう一度有効にしたメカニクスは最初からになります。
## Menu が頼っているもの
Menu は画面を描き、各ボタンの挙動を決めます。ゲームの一覧と準備状況はコレクションから、ゲームの起動・切り替え・保存はエンジンのゲームセッションとセーブサービスが担います。タイトル画面の音楽は Menu が要求する Music Pack の `MainMenu` プレイリストです。**MOD とコレクション**は Mod Manager が提供します。
## MOD 作者向け:ボタンや設定ページを追加する
ボタンは固定画面ではなくレジストリーから来るので、MOD は追加・置き換え・並べ替えができます。Mod Manager は manifest の `main_menu` エントリーで自分のボタンを足しています:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
MOD の設定は、MOD が MOD 設定レジストリーに設定定義を登録すると **MOD** タブに現れます。Menu が削除アクションでそうしているのと同じです。ボタンや設定の文言は MOD 自身のローカライゼーションから来ます。
## うまく動かないとき
1. **プレイの下にゲームがない。** 種類が *ゲーム* のコレクションが一つもインストール・有効化されていません。**MOD とコレクション**を開いてください。
2. **カードに「足りない MOD」や「互換性のないバージョン」と出る。** **足りないものをインストール**を使うか、**設定する**で問題を確認してください。
3. **「続きから」がない。** 一度でもプレイすると現れます。
4. **ウィンドウのサイズが保たれない。** **表示 → ウィンドウモード**を確認してください。ウィンドウサイズはウィンドウモードでだけ効きます。
+74
View File
@@ -0,0 +1,74 @@
# Menu — 메인 메뉴, 게임 선택, 저장, 설정
Menu는 여러분이 가장 먼저 보는 화면입니다. **플레이**, **불러오기**, **설정**, **모드와 컬렉션**, **나가기**가 놓인 타이틀 메뉴입니다. 설치된 게임을 골라 시작하거나 멈췄던 지점에서 이어하고, 저장 파일을 불러오고, 언어·소리·화면 설정을 바꿀 수 있습니다. 다른 모드가 자기 버튼과 설정 페이지를 추가할 수도 있습니다.
Menu는 항상 로드되는 셸의 일부이므로 어떤 게임을 시작하기 전부터 자리하고 있습니다.
![메인 메뉴: 왼쪽에 Play, Load, Settings, Mods & Collections, Exit, 오른쪽에 Cthangover 타이틀 아트.](assets/main-menu.jpg)
## 게임 시작하기
**플레이**를 누르면 **게임 선택**이 열립니다. 컬렉션의 게임은 각자 커버, 설명, 준비 상태, 저장 수가 붙은 카드로 표시됩니다.
![게임 선택의 두 장의 카드: Cthangover와 My Novel, 각각 "Ready to play", "No saves", New game과 Configure 버튼.](assets/game-picker.jpg)
- **새 게임**은 게임의 첫 장면부터 시작합니다. 메뉴는 같은 창에서 그 게임의 모드 세트로 바뀝니다. 재시작이 없습니다.
- 카드의 **이어하기**는 그 게임의 가장 최근 저장을 이어서 합니다. **저장 파일**은 목록을 보여 줍니다.
- **빠진 것 설치**는 게임에 필요한 모드가 없을 때 나타나 다운로드합니다.
- **구성**은 모드 관리자에서 게임 구성을 엽니다.
메뉴를 보고 있는 동안 게임들의 모드가 백그라운드에서 준비됩니다. 아래 힌트가 언제 시작이 빨라지는지 알려 줍니다.
메인 메뉴의 **이어하기**는 한 번이라도 플레이하면 나타납니다. 마지막으로 쓴 게임과 저장으로 돌아갑니다.
## 저장 불러오기
**불러오기**는 한 번에 한 게임의 저장을 보여 줍니다. 위의 선택기에서 게임을 고르고 저장을 클릭하면 불러옵니다.
![My Novel의 불러오기 창. 저장 "Day 1, 00:00" 하나와 힌트 "Click a save to load it".](assets/load.jpg)
저장 이후 게임의 모드가 바뀌었다면 **게임이 바뀌었습니다** 창이 추가된 것(처음부터 시작), 제거된 것(데이터는 보관되고 다시 켜면 돌아옴), 업데이트된 것을 나열하고 불러오기 전에 저장을 백업합니다. 게임이라는 개념 이전의 저장은 **게임이 없는 저장 파일** 아래에 나타납니다. 어느 게임에 속하는지 고르면 파일이 그곳으로 옮겨집니다.
게임 중에는 인게임 메뉴의 같은 창으로 저장하고 불러옵니다. 슬롯을 클릭해 저장하고, 사용 중인 슬롯은 확인 후 덮어쓰며, **+ 새로 저장**으로 하나 더 만듭니다.
## 설정
**설정**에는 탭이 넷 있습니다. 변경 사항은 곧바로 적용되고 저장됩니다.
- **일반** — 인터페이스 언어.
- **소리** — 효과음, 음악, 앰비언스의 켜기/끄기와 음량.
- **화면** — 창 모드(창 모드, 최대화, 테두리 없음, 전용 전체 화면), 모니터, 창 크기, V-Sync, 프레임 제한, 그리고 **화면 설정 초기화**.
- **모드** — 설치된 모드가 추가하는 설정 페이지와 **기본값으로**.
![화면 탭: 창 모드, 모니터, 창 크기, V-Sync, 프레임 제한.](assets/settings-display.jpg)
![모드 탭: Menu 모드 자신의 페이지. "Data of disabled mechanics"와 정리 버튼.](assets/settings-mods.jpg)
**모드** 탭의 Menu 자신의 페이지는 **비활성화된 메카닉의 데이터 → 정리**입니다. 더 이상 게임에 속하지 않는 모드의 데이터를 모든 저장에서 지웁니다. 확신이 들 때만 쓰세요. 다시 켠 메카닉은 처음부터 시작합니다.
## Menu가 의지하는 것들
Menu는 화면을 그리고 각 버튼이 무엇을 하는지 정합니다. 게임 목록과 준비 상태는 컬렉션에서 오고, 게임의 시작·전환·저장은 엔진의 게임 세션과 저장 서비스가 맡습니다. 타이틀 화면 음악은 Menu가 요구하는 Music Pack의 `MainMenu` 플레이리스트입니다. **모드와 컬렉션**은 Mod Manager가 제공합니다.
## 모드 제작자를 위해: 버튼이나 설정 페이지 추가하기
버튼은 고정된 화면이 아니라 레지스트리에서 옵니다. 그래서 모드가 추가하거나 바꾸거나 순서를 바꿀 수 있습니다. Mod Manager는 manifest의 `main_menu` 항목으로 자기 버튼을 더합니다:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
모드의 설정은 그 모드가 모드 설정 레지스트리에 설정 정의를 등록하면 **모드** 탭에 나타납니다. Menu가 정리 액션으로 하는 일과 같습니다. 버튼과 설정의 문구는 모드 자신의 로컬라이제이션에서 옵니다.
## 문제가 생겼을 때
1. **플레이 아래에 게임이 없다.** 종류가 *게임*인 컬렉션이 설치·활성화되어 있지 않습니다. **모드와 컬렉션**을 여세요.
2. **게임 카드에 빠진 모드 또는 호환되지 않는 버전이 표시된다.** **빠진 것 설치**를 쓰거나 **구성**으로 문제를 확인하세요.
3. **이어하기가 없다.** 한 번이라도 플레이하면 나타납니다.
4. **창이 크기를 유지하지 않는다.** **화면 → 창 모드**를 확인하세요. 창 크기는 창 모드에서만 적용됩니다.
+74
View File
@@ -0,0 +1,74 @@
# Menu — главное меню, выбор игры, сохранения и настройки
Menu — первый экран, который вы видите: заглавное меню с кнопками **Играть**, **Загрузить**, **Настройки**, **Моды и коллекции** и **Выход**. Здесь можно выбрать одну из установленных игр, начать её или продолжить с того места, где остановились, загрузить сохранение, а также изменить язык, звук и настройки экрана. Другие моды могут добавлять сюда свои кнопки и страницы настроек.
Menu входит в оболочку, которая загружается всегда, поэтому оно на месте ещё до запуска любой игры.
![Главное меню: слева кнопки Play, Load, Settings, Mods & Collections и Exit, справа титульный арт Cthangover.](assets/main-menu.jpg)
## Запуск игры
Кнопка **Играть** открывает **Выбор игры**. Каждая игра из ваших коллекций — карточка с обложкой, описанием, готовностью к запуску и числом сохранений.
![Две карточки игр в разделе Choose a game: Cthangover и My Novel, у обеих «Ready to play» и «No saves», кнопки New game и Configure.](assets/game-picker.jpg)
- **Новая игра** запускает игру с её первой сцены. Меню переключается на набор модов этой игры в том же окне — без перезапуска.
- **Продолжить** на карточке продолжает последнее сохранение этой игры; **Сохранения** открывает их список.
- **Установить недостающее** появляется, когда игре нужны моды, которых у вас нет, и скачивает их.
- **Настроить** открывает схему игры в менеджере модов.
Пока вы смотрите на меню, моды игр готовятся в фоне; подсказка внизу сообщит, когда запуск будет быстрым.
Кнопка **Продолжить** в самом главном меню появляется после первой же игры: она возвращает в последнюю игру и сохранение, которыми вы пользовались.
## Загрузка сохранения
Кнопка **Загрузить** показывает сохранения одной игры за раз; выберите игру в списке сверху и щёлкните сохранение, чтобы загрузить его.
![Окно загрузки для My Novel с одним сохранением «Day 1, 00:00» и подсказкой «Click a save to load it».](assets/load.jpg)
Если состав модов игры изменился с момента сохранения, окно **Состав игры изменился** перечислит, что добавилось (начнёт с нуля), что убралось (его данные сохранятся и вернутся, если включить снова) и что обновилось, а перед загрузкой сделает резервную копию сохранения. Сохранения, сделанные ещё до появления игр, показываются в группе **Сохранения без игры**; вы выбираете, к какой игре они относятся, и файл переезжает туда.
Внутри игры сохранение и загрузка идут через то же окно в игровом меню: щёлкните слот, чтобы сохранить; занятый слот перезаписывается после подтверждения; **+ Новое сохранение** добавляет ещё один.
## Настройки
В **Настройках** четыре вкладки. Изменения применяются и сохраняются сразу.
- **Основное** — язык интерфейса.
- **Звук** — включение и громкость звуков, музыки и эмбиента.
- **Экран** — режим окна (в окне, на весь экран, без рамки или эксклюзивный полный экран), монитор, размер окна, V-Sync и ограничение частоты кадров, плюс **Сбросить настройки экрана**.
- **Моды** — страницы настроек, которые добавляют установленные моды, с кнопкой **Сбросить настройки**.
![Вкладка настроек экрана: режим окна, монитор, размер окна, V-Sync и ограничение частоты кадров.](assets/settings-display.jpg)
![Вкладка «Моды»: собственная страница мода Menu с «Data of disabled mechanics» и кнопкой Purge.](assets/settings-mods.jpg)
Собственная страница Menu на вкладке **Моды** — это **Данные отключённых механик → Очистить**: кнопка удаляет из всех сохранений данные модов, которые больше не входят в игры. Пользуйтесь ею, только когда уверены: включённая снова механика начнёт с нуля.
## От чего зависит Menu
Menu рисует экраны и решает, что делает каждая кнопка. Список игр и их готовность приходят из коллекций; запуском, переключением и сохранением игр занимаются игровая сессия и службы сохранений движка; музыка титульного экрана — это плейлист `MainMenu` из Music Pack, которого Menu требует. Раздел **Моды и коллекции** поставляет Mod Manager.
## Авторам модов: добавить кнопку или страницу настроек
Кнопки берутся из реестра, а не с жёстко заданного экрана, поэтому мод может добавлять, заменять и переставлять их. Mod Manager добавляет свою кнопку записью `main_menu` в манифесте:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
Настройки мода появляются на вкладке **Моды**, когда мод регистрирует описания настроек в реестре настроек модов, — так Menu поступает со своим действием «Очистить». Тексты кнопок и настроек берутся из локализации самого мода.
## Если что-то пошло не так
1. **Под «Играть» нет игр.** Не установлена и не включена ни одна коллекция типа «игра»; откройте **Моды и коллекции**.
2. **На карточке игры «Не хватает модов» или «Несовместимые версии».** Нажмите **Установить недостающее** или **Настроить**, чтобы посмотреть, в чём дело.
3. **Нет кнопки «Продолжить».** Она появляется после того, как вы поиграли хотя бы раз.
4. **Окно не сохраняет размер.** Проверьте **Экран → Режим окна**; размер окна применяется только в оконном режиме.
+74
View File
@@ -0,0 +1,74 @@
# Menu — menu chính, chọn game, bản lưu và cài đặt
Menu là màn hình đầu tiên bạn thấy: menu tiêu đề với **Chơi**, **Tải**, **Cài đặt**, **Mod và bộ sưu tập** và **Thoát**. Tại đây bạn chọn một trong các game đã cài, bắt đầu hoặc tiếp tục từ chỗ đã dừng, tải một bản lưu, đổi ngôn ngữ, âm thanh và cài đặt hiển thị. Mod khác cũng có thể thêm nút và trang cài đặt của riêng mình.
Menu thuộc lớp vỏ luôn được tải, nên nó có mặt từ trước khi game nào bắt đầu.
![Menu chính: Play, Load, Settings, Mods & Collections và Exit bên trái, tranh tiêu đề Cthangover bên phải.](assets/main-menu.jpg)
## Bắt đầu game
**Chơi** mở **Chọn game**. Mỗi game trong các bộ sưu tập là một thẻ với ảnh bìa, mô tả, mức độ sẵn sàng và số bản lưu.
![Hai thẻ game trong Choose a game: Cthangover và My Novel, đều "Ready to play", "No saves", có nút New game và Configure.](assets/game-picker.jpg)
- **Trò chơi mới** bắt đầu game từ cảnh đầu tiên. Menu chuyển sang bộ mod của game ngay trong cùng cửa sổ — không cần khởi động lại.
- **Tiếp tục** trên thẻ tiếp tục bản lưu mới nhất của game đó; **Bản lưu** liệt kê chúng.
- **Cài phần còn thiếu** xuất hiện khi game cần những mod bạn chưa có và tải chúng về.
- **Cấu hình** mở cấu trúc game trong trình quản lý mod.
Trong khi bạn xem menu, mod của các game đang được chuẩn bị ở nền; gợi ý phía dưới báo khi nào khởi động sẽ nhanh.
**Tiếp tục** ngay trên menu chính xuất hiện sau khi bạn đã chơi: nó quay về game và bản lưu bạn dùng lần cuối.
## Tải một bản lưu
**Tải** hiển thị bản lưu của từng game một; chọn game ở bộ chọn phía trên rồi nhấp vào một bản lưu để tải.
![Cửa sổ tải của My Novel với một bản lưu, "Day 1, 00:00", và gợi ý "Click a save to load it".](assets/load.jpg)
Nếu mod của game đã thay đổi từ lúc tạo bản lưu, cửa sổ **Game đã thay đổi** sẽ liệt kê cái được thêm (bắt đầu từ đầu), cái bị gỡ (dữ liệu được giữ và trở lại nếu bật lại) hay được cập nhật, và sao lưu bản lưu trước khi tải. Những bản lưu từ trước khi có khái niệm game nằm dưới **Bản lưu không có game**; bạn chọn game chúng thuộc về và tệp sẽ chuyển tới đó.
Trong lúc chơi, lưu và tải dùng chung một cửa sổ qua menu trong game: nhấp vào một ô để lưu, ô đã dùng bị ghi đè sau khi xác nhận, **+ Bản lưu mới** thêm ô mới.
## Cài đặt
**Cài đặt** có bốn thẻ. Thay đổi được áp dụng và lưu ngay.
- **Chung** — ngôn ngữ giao diện.
- **Âm thanh** — bật/tắt và âm lượng của Hiệu ứng, Nhạc và Âm nền.
- **Hiển thị** — chế độ cửa sổ (cửa sổ, phóng to, không viền hay toàn màn hình độc quyền), màn hình, kích thước cửa sổ, V-Sync và giới hạn khung hình, kèm **Đặt lại cài đặt hiển thị**.
- **Mod** — các trang cài đặt mà mod đã cài thêm vào, với **Khôi phục mặc định**.
![Thẻ hiển thị: chế độ cửa sổ, màn hình, kích thước cửa sổ, V-Sync và giới hạn khung hình.](assets/settings-display.jpg)
![Thẻ Mod: trang riêng của mod Menu với "Data of disabled mechanics" và nút xóa.](assets/settings-mods.jpg)
Trang riêng của Menu trên thẻ **Mod** là **Dữ liệu của cơ chế đã tắt → Xóa**: nó xóa khỏi mọi bản lưu dữ liệu của những mod không còn thuộc game nào. Chỉ dùng khi bạn chắc chắn: cơ chế được bật lại sẽ bắt đầu từ đầu.
## Menu dựa vào gì
Menu vẽ các màn hình và quyết định từng nút làm gì. Danh sách game và mức sẵn sàng đến từ các bộ sưu tập; việc bắt đầu, chuyển và lưu game do phiên chơi game cùng các dịch vụ lưu của engine đảm nhiệm; nhạc màn hình tiêu đề là playlist `MainMenu` của Music Pack, thứ Menu yêu cầu. **Mod và bộ sưu tập** do Mod Manager cung cấp.
## Cho tác giả mod: thêm nút hoặc trang cài đặt
Các nút đến từ một sổ đăng ký chứ không phải một màn hình cố định, nên mod có thể thêm, thay thế hay sắp xếp lại chúng. Mod Manager thêm nút của mình bằng một mục `main_menu` trong manifest:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
Cài đặt của một mod xuất hiện trên thẻ **Mod** khi mod đăng ký định nghĩa cài đặt vào sổ đăng ký cài đặt mod, như Menu làm với hành động xóa dữ liệu. Văn bản trên nút và cài đặt lấy từ bản dịch của chính mod đó.
## Khi có trục trặc
1. **Không có game nào dưới Chơi.** Chưa cài hoặc chưa bật bộ sưu tập nào thuộc loại *game*; hãy mở **Mod và bộ sưu tập**.
2. **Thẻ game báo Thiếu mod hoặc Phiên bản không tương thích.** Dùng **Cài phần còn thiếu**, hoặc **Cấu hình** để xem vấn đề.
3. **Thiếu Tiếp tục.** Nó xuất hiện sau khi bạn đã chơi ít nhất một lần.
4. **Cửa sổ không giữ nguyên kích thước.** Kiểm tra **Hiển thị → Chế độ cửa sổ**; kích thước cửa sổ chỉ áp dụng cho chế độ cửa sổ.
+74
View File
@@ -0,0 +1,74 @@
# Menu — 主菜单、选择游戏、存档与设置
Menu 是你看到的第一个屏幕:带有**开始游戏**、**读取**、**设置**、**模组与合集**和**退出**的标题菜单。在这里可以选择一款已安装的游戏,开始或继续上次的进度,读取存档,还能更改语言、声音和显示设置。其他模组也可以在这里添加自己的按钮和设置页面。
它属于始终加载的外壳,因此在任何游戏开始之前就已存在。
![主菜单:左侧是 Play、Load、Settings、Mods & Collections 和 Exit,右侧是 Cthangover 的标题画。](assets/main-menu.jpg)
## 开始游戏
**开始游戏**会打开**选择游戏**。合集里的每一款游戏都是一张卡片,上面有封面、描述、可玩状态和存档数量。
![选择游戏里的两张游戏卡片:Cthangover 和 My Novel,都显示“Ready to play”“No saves”,带 New game 和 Configure 按钮。](assets/game-picker.jpg)
- **新游戏**从游戏的第一幕场景开始。菜单会在同一个窗口内切换到该游戏的模组集合——无需重启。
- 卡片上的**继续**读取该游戏最近的存档;**存档**列出全部存档。
- **安装缺失项**在游戏缺少你尚未拥有的模组时出现,并负责下载。
- **配置**在模组管理器中打开游戏的构成方案。
当你停留在菜单上时,各游戏的模组正在后台准备;底部提示会告诉你何时启动会很快。
主菜单本身的**继续**按钮在你玩过之后才会出现:它会回到你上次玩的那个游戏和存档。
## 读取存档
**读取**一次显示一款游戏的存档;在顶部的选择器中挑选游戏,点击一个存档即可读取。
![My Novel 的读取窗口,含一个存档“Day 1, 00:00”和提示“Click a save to load it”。](assets/load.jpg)
如果自存档以来游戏的模组发生过变化,**游戏已改变**窗口会列出新增的(从头开始)、移除的(数据保留,重新启用时恢复)或已更新的内容,并在读取前备份存档。早于“游戏”概念出现的存档会出现在**没有所属游戏的存档**下;你指定它们属于哪款游戏,文件就会移过去。
在游戏进行中,存档和读取走游戏内菜单的同一个窗口:点击栏位存档,已占用的栏位在确认后覆盖,**+ 新存档**再添一个。
## 设置
**设置**有四个标签页。改动立即生效并保存。
- **常规** — 界面语言。
- **声音** — 音效、音乐和环境音的开关与音量。
- **显示** — 窗口模式(窗口化、最大化、无边框或独占全屏)、显示器、窗口大小、V-Sync 和帧率上限,外加**重置显示设置**。
- **模组** — 已安装模组添加的设置页面,带**恢复默认值**。
![显示标签页:窗口模式、显示器、窗口大小、V-Sync 和帧率上限。](assets/settings-display.jpg)
![模组标签页:Menu 模组自己的页面,有“Data of disabled mechanics”和清除按钮。](assets/settings-mods.jpg)
Menu 在**模组**标签页上的自家页面是**已停用机制的数据 → 清除**:它会从所有存档中删除已不属于任何游戏的模组数据。确定后再用:重新启用的机制会从头开始。
## Menu 依赖什么
Menu 负责绘制界面并决定每个按钮的行为。游戏列表及其就绪状态来自合集;启动、切换和保存游戏由引擎的游戏会话与存档服务完成;标题画面音乐是 Music Pack 的 `MainMenu` 播放列表,Menu 依赖它。**模组与合集**由 Mod Manager 提供。
## 给模组作者:添加按钮或设置页面
按钮来自注册表,而不是写死的界面,因此模组可以添加、替换或重新排列它们。Mod Manager 用 manifest 里的一个 `main_menu` 条目添加自己的按钮:
```json
"main_menu": [
{
"id": "mods_hub",
"scene_path": "scenes/mods_hub_screen.tscn",
"button": { "icon": "mod_manager", "locale": "mod_manager/menu_title", "index": 100 }
}
]
```
当模组在模组设置注册表中登记了设置定义时——就像 Menu 为自己的清除操作所做的那样——它的设置就会出现在**模组**标签页。按钮和设置的文案来自模组自己的本地化。
## 出现问题时
1. **开始游戏下面没有游戏。** 没有安装或启用任何“游戏”类型的合集;请打开**模组与合集**。
2. **游戏卡片显示缺少模组或版本不兼容。** 使用**安装缺失项**,或点**配置**查看问题。
3. **没有“继续”按钮。** 它在你至少玩过一次之后才会出现。
4. **窗口记不住大小。** 检查**显示 → 窗口模式**;窗口大小只对窗口化模式生效。
+1 -4
View File
@@ -1,5 +1,5 @@
mod_menu_base_name = Menu mod_menu_base_name = Menu
mod_menu_base_desc = Registry-driven main menu: built-in buttons, settings and save/load panels moved out of the core. mod_menu_base_desc = The main menu: start or continue a game, pick one of the installed games, load a save and change the language, sound and display settings.
settings/saves/purge_dormant = Data of disabled mechanics settings/saves/purge_dormant = Data of disabled mechanics
settings/saves/purge_dormant_button = Purge settings/saves/purge_dormant_button = Purge
@@ -56,9 +56,6 @@ settings/section_performance = Performance
settings/saved_at_once = Changes are applied and saved at once settings/saved_at_once = Changes are applied and saved at once
settings/volume = Volume settings/volume = Volume
settings/language = Language settings/language = Language
settings/lang_ru = Russian
settings/lang_en = English
settings/lang_zh = 中文
settings/tab_general = General settings/tab_general = General
settings/tab_audio = Sound settings/tab_audio = Sound
settings/tab_display = Display settings/tab_display = Display
+81
View File
@@ -0,0 +1,81 @@
mod_menu_base_name = Menú
mod_menu_base_desc = El menú principal: empezar o continuar una partida, elegir uno de los juegos instalados, cargar una partida guardada y cambiar el idioma, el sonido y los ajustes de pantalla.
settings/saves/purge_dormant = Datos de mecánicas desactivadas
settings/saves/purge_dormant_button = Purgar
settings/saves/purge_dormant_confirm = ¿Eliminar de todas las partidas guardadas los datos de las mecánicas que no forman parte de los juegos? Una mecánica que se vuelva a activar empezará de cero.
settings/saves/purge_dormant_done = Bloques de datos eliminados: {0}
menu/continue = Continuar
menu/play = Jugar
menu/play/title = Elige un juego
menu/play/no_games = Todavía no hay juegos. Crea uno en el gestor de mods.
menu/play/new_game = Nueva partida
menu/play/continue = Continuar
menu/play/browse_saves = Partidas
menu/play/install = Instalar lo que falta
menu/play/installing = Instalando…
menu/play/configure = Configurar
menu/play/install_done = Mods instalados. Se cargarán al entrar en el juego.
menu/play/install_failed = No se pudieron instalar los mods: mira el registro.
menu/play/no_saves = Sin partidas guardadas
menu/play/saves = Partidas: {0} · última: {1}
menu/play/status_ready = Listo para jugar
menu/play/status_missing = Faltan mods: {0}
menu/play/status_mismatch = Versiones incompatibles: {0}
menu/play/status_problems = Problemas en la composición del juego: {0}
menu/play/status_install = Por instalar: {0}, por activar: {1}
menu/load/empty = Todavía no hay partidas guardadas
menu/save/new_slot = + Nueva partida guardada
menu/load/hint = Haz clic en una partida para cargarla
menu/save/hint = Haz clic en una ranura para guardar; una ranura ocupada se sobrescribe tras confirmar
menu/play/hint_warming = Los mods de los juegos se preparan en segundo plano: después el arranque será rápido
menu/play/hint_ready = Los mods de los juegos están listos, el arranque tarda unos segundos
menu/load/legacy_group = Partidas sin juego
menu/load/legacy_title = Partida sin juego
menu/load/legacy_text = Esta partida se guardó antes de que existieran las colecciones de juegos. Elige el juego al que pertenece: el archivo pasará a las partidas de ese juego.
menu/load/legacy_ok = Mover y cargar
menu/load/legacy_no_games = No hay ningún juego listo al que asignar la partida.
menu/load/diff_title = El juego ha cambiado
menu/load/diff_intro = La composición del juego ha cambiado desde esta partida.
menu/load/diff_added = Añadido (empieza de cero):
menu/load/diff_removed = Quitado (los datos se conservan y vuelven si se activa de nuevo):
menu/load/diff_updated = Actualizado:
menu/load/diff_downgrade = (más antiguo que la partida: los datos de ese mod se apartan)
menu/load/diff_backup = Antes de cargar se hace una copia de seguridad de la partida.
menu/load/diff_ok = Cargar
settings/back = Atrás
settings/audio = Audio
settings/sounds = Sonidos
settings/music = Música
settings/ambient = Ambiente
settings/interface_language = Idioma de la interfaz
settings/section_window = Ventana
settings/section_performance = Rendimiento
settings/saved_at_once = Los cambios se aplican y se guardan al momento
settings/volume = Volumen
settings/language = Idioma
settings/tab_general = General
settings/tab_audio = Sonido
settings/tab_display = Pantalla
settings/display = Pantalla
settings/window_mode = Modo de ventana
settings/window_mode_windowed = En ventana
settings/window_mode_maximized = Ventana maximizada
settings/window_mode_borderless = Pantalla completa (sin bordes)
settings/window_mode_fullscreen = Pantalla completa (exclusiva)
settings/resolution = Tamaño de la ventana
settings/resolution_fullscreen_hint = Los modos de pantalla completa usan la resolución del monitor
settings/monitor = Monitor
settings/monitor_screen = Monitor {0} ({1}×{2})
settings/monitor_screen_primary = Monitor {0} ({1}×{2}), principal
settings/vsync = V-Sync
settings/max_fps = Límite de fotogramas
settings/max_fps_unlimited = Sin límite
settings/max_fps_value = {0} FPS
settings/display_reset = Restablecer ajustes de pantalla
settings/tab_mods = Mods
settings/mod_list_title = Mods
settings/mods_no_settings = No hay ajustes de mods
settings/mods_reset = Restablecer valores
+81
View File
@@ -0,0 +1,81 @@
mod_menu_base_name = メニュー
mod_menu_base_desc = メインメニュー:ゲームの開始と続きから、インストール済みゲームの選択、セーブのロード、言語・サウンド・表示設定の変更。
settings/saves/purge_dormant = 無効にしたメカニクスのデータ
settings/saves/purge_dormant_button = 削除
settings/saves/purge_dormant_confirm = ゲームに含まれていないメカニクスのデータを、すべてのセーブから削除しますか? 再び有効にしたメカニクスは最初からになります。
settings/saves/purge_dormant_done = 削除したデータブロック:{0}
menu/continue = 続きから
menu/play = プレイ
menu/play/title = ゲームを選択
menu/play/no_games = まだゲームがありません。MOD マネージャーで作ってください。
menu/play/new_game = ニューゲーム
menu/play/continue = 続きから
menu/play/browse_saves = セーブ
menu/play/install = 足りないものをインストール
menu/play/installing = インストール中…
menu/play/configure = 設定する
menu/play/install_done = MOD をインストールしました。ゲームに入ると読み込まれます。
menu/play/install_failed = MOD をインストールできませんでした——ログを見てください。
menu/play/no_saves = セーブなし
menu/play/saves = セーブ:{0} · 最新:{1}
menu/play/status_ready = プレイできます
menu/play/status_missing = 足りない MOD:{0}
menu/play/status_mismatch = 互換性のないバージョン:{0}
menu/play/status_problems = ゲームの構成に問題があります:{0}
menu/play/status_install = インストール:{0}、有効化:{1}
menu/load/empty = まだセーブがありません
menu/save/new_slot = + 新しいセーブ
menu/load/hint = セーブをクリックするとロードします
menu/save/hint = スロットをクリックするとセーブします。使用中のスロットは確認後に上書きされます
menu/play/hint_warming = ゲームの MOD をバックグラウンドで準備しています——その後の起動は速くなります
menu/play/hint_ready = ゲームの MOD は準備できています。起動は数秒です
menu/load/legacy_group = ゲームのないセーブ
menu/load/legacy_title = ゲームのないセーブ
menu/load/legacy_text = このセーブはゲームのコレクションができる前に作られました。どのゲームのものか選んでください——ファイルはそのゲームのセーブに移されます。
menu/load/legacy_ok = 移動してロード
menu/load/legacy_no_games = このセーブを割り当てられる準備済みのゲームがありません。
menu/load/diff_title = ゲームが変わりました
menu/load/diff_intro = このセーブの後で、ゲームの構成が変わりました。
menu/load/diff_added = 追加(最初から):
menu/load/diff_removed = 削除(データは残り、再び有効にすると戻ります):
menu/load/diff_updated = 更新:
menu/load/diff_downgrade = (セーブより古い——その MOD のデータは保留されます)
menu/load/diff_backup = ロードの前にセーブのバックアップを作ります。
menu/load/diff_ok = ロード
settings/back = 戻る
settings/audio = オーディオ
settings/sounds = 効果音
settings/music = 音楽
settings/ambient = 環境音
settings/interface_language = インターフェースの言語
settings/section_window = ウィンドウ
settings/section_performance = パフォーマンス
settings/saved_at_once = 変更はすぐに適用され、保存されます
settings/volume = 音量
settings/language = 言語
settings/tab_general = 一般
settings/tab_audio = サウンド
settings/tab_display = 表示
settings/display = 表示
settings/window_mode = ウィンドウモード
settings/window_mode_windowed = ウィンドウ
settings/window_mode_maximized = 最大化ウィンドウ
settings/window_mode_borderless = フルスクリーン(ボーダーレス)
settings/window_mode_fullscreen = フルスクリーン(排他)
settings/resolution = ウィンドウサイズ
settings/resolution_fullscreen_hint = フルスクリーンではモニターの解像度を使います
settings/monitor = モニター
settings/monitor_screen = モニター {0}({1}×{2})
settings/monitor_screen_primary = モニター {0}({1}×{2})、メイン
settings/vsync = 垂直同期
settings/max_fps = フレームレート上限
settings/max_fps_unlimited = 無制限
settings/max_fps_value = {0} FPS
settings/display_reset = 表示設定をリセット
settings/tab_mods = MOD
settings/mod_list_title = MOD
settings/mods_no_settings = MOD の設定はありません
settings/mods_reset = 既定に戻す
+81
View File
@@ -0,0 +1,81 @@
mod_menu_base_name = 메뉴
mod_menu_base_desc = 메인 메뉴: 게임을 시작하거나 이어하고, 설치된 게임을 고르고, 저장 파일을 불러오고, 언어·소리·화면 설정을 바꿉니다.
settings/saves/purge_dormant = 비활성화된 메카닉의 데이터
settings/saves/purge_dormant_button = 정리
settings/saves/purge_dormant_confirm = 게임에 포함되지 않은 메카닉의 데이터를 모든 저장 파일에서 지울까요? 다시 켠 메카닉은 처음부터 시작합니다.
settings/saves/purge_dormant_done = 삭제한 데이터 블록: {0}
menu/continue = 이어하기
menu/play = 플레이
menu/play/title = 게임 선택
menu/play/no_games = 아직 게임이 없습니다. 모드 관리자에서 만드세요.
menu/play/new_game = 새 게임
menu/play/continue = 이어하기
menu/play/browse_saves = 저장 파일
menu/play/install = 빠진 것 설치
menu/play/installing = 설치 중…
menu/play/configure = 구성
menu/play/install_done = 모드를 설치했습니다. 게임에 들어갈 때 불러옵니다.
menu/play/install_failed = 모드를 설치하지 못했습니다 — 로그를 확인하세요.
menu/play/no_saves = 저장 파일 없음
menu/play/saves = 저장: {0} · 최근: {1}
menu/play/status_ready = 플레이 준비 완료
menu/play/status_missing = 빠진 모드: {0}
menu/play/status_mismatch = 호환되지 않는 버전: {0}
menu/play/status_problems = 게임 구성에 문제가 있습니다: {0}
menu/play/status_install = 설치할 것: {0}, 켤 것: {1}
menu/load/empty = 아직 저장 파일이 없습니다
menu/save/new_slot = + 새로 저장
menu/load/hint = 저장 파일을 클릭하면 불러옵니다
menu/save/hint = 슬롯을 클릭하면 저장합니다. 사용 중인 슬롯은 확인 후 덮어씁니다
menu/play/hint_warming = 게임의 모드를 백그라운드에서 준비하고 있습니다 — 그 뒤에는 빠르게 시작됩니다
menu/play/hint_ready = 게임의 모드가 준비되었습니다. 시작은 몇 초면 됩니다
menu/load/legacy_group = 게임이 없는 저장 파일
menu/load/legacy_title = 게임이 없는 저장 파일
menu/load/legacy_text = 이 저장 파일은 게임 컬렉션이 생기기 전에 만들어졌습니다. 어느 게임의 것인지 고르세요 — 파일이 그 게임의 저장 파일로 옮겨집니다.
menu/load/legacy_ok = 옮기고 불러오기
menu/load/legacy_no_games = 이 저장 파일을 배정할 준비된 게임이 없습니다.
menu/load/diff_title = 게임이 바뀌었습니다
menu/load/diff_intro = 이 저장 이후 게임 구성이 바뀌었습니다.
menu/load/diff_added = 추가됨 (처음부터 시작):
menu/load/diff_removed = 제거됨 (데이터는 보관되고 다시 켜면 돌아옵니다):
menu/load/diff_updated = 업데이트됨:
menu/load/diff_downgrade = (저장 파일보다 오래됨 — 그 모드의 데이터는 따로 보관됩니다)
menu/load/diff_backup = 불러오기 전에 저장 파일을 백업합니다.
menu/load/diff_ok = 불러오기
settings/back = 뒤로
settings/audio = 오디오
settings/sounds = 효과음
settings/music = 음악
settings/ambient = 환경음
settings/interface_language = 인터페이스 언어
settings/section_window = 창
settings/section_performance = 성능
settings/saved_at_once = 변경 사항은 즉시 적용되고 저장됩니다
settings/volume = 볼륨
settings/language = 언어
settings/tab_general = 일반
settings/tab_audio = 소리
settings/tab_display = 화면
settings/display = 화면
settings/window_mode = 창 모드
settings/window_mode_windowed = 창 모드
settings/window_mode_maximized = 최대화된 창
settings/window_mode_borderless = 전체 화면(테두리 없음)
settings/window_mode_fullscreen = 전체 화면(전용)
settings/resolution = 창 크기
settings/resolution_fullscreen_hint = 전체 화면 모드는 모니터 해상도를 사용합니다
settings/monitor = 모니터
settings/monitor_screen = 모니터 {0} ({1}×{2})
settings/monitor_screen_primary = 모니터 {0} ({1}×{2}), 기본
settings/vsync = 수직 동기화
settings/max_fps = 프레임 제한
settings/max_fps_unlimited = 제한 없음
settings/max_fps_value = {0} FPS
settings/display_reset = 화면 설정 초기화
settings/tab_mods = 모드
settings/mod_list_title = 모드
settings/mods_no_settings = 모드 설정이 없습니다
settings/mods_reset = 기본값으로
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = Russian (Русский)
settings/lang_en = English
settings/lang_es = Spanish (Español)
settings/lang_zh = Chinese (中文)
settings/lang_ja = Japanese (日本語)
settings/lang_ko = Korean (한국어)
settings/lang_vi = Vietnamese (Tiếng Việt)
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = Ruso (Русский)
settings/lang_en = Inglés (English)
settings/lang_es = Español
settings/lang_zh = Chino (中文)
settings/lang_ja = Japonés (日本語)
settings/lang_ko = Coreano (한국어)
settings/lang_vi = Vietnamita (Tiếng Việt)
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = ロシア語 (Русский)
settings/lang_en = 英語 (English)
settings/lang_es = スペイン語 (Español)
settings/lang_zh = 中国語 (中文)
settings/lang_ja = 日本語
settings/lang_ko = 韓国語 (한국어)
settings/lang_vi = ベトナム語 (Tiếng Việt)
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = 러시아어 (Русский)
settings/lang_en = 영어 (English)
settings/lang_es = 스페인어 (Español)
settings/lang_zh = 중국어 (中文)
settings/lang_ja = 일본어 (日本語)
settings/lang_ko = 한국어
settings/lang_vi = 베트남어 (Tiếng Việt)
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = Русский
settings/lang_en = Английский (English)
settings/lang_es = Испанский (Español)
settings/lang_zh = Китайский (中文)
settings/lang_ja = Японский (日本語)
settings/lang_ko = Корейский (한국어)
settings/lang_vi = Вьетнамский (Tiếng Việt)
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = Tiếng Nga (Русский)
settings/lang_en = Tiếng Anh (English)
settings/lang_es = Tiếng Tây Ban Nha (Español)
settings/lang_zh = Tiếng Trung (中文)
settings/lang_ja = Tiếng Nhật (日本語)
settings/lang_ko = Tiếng Hàn (한국어)
settings/lang_vi = Tiếng Việt
+7
View File
@@ -0,0 +1,7 @@
settings/lang_ru = 俄语 (Русский)
settings/lang_en = 英语 (English)
settings/lang_es = 西班牙语 (Español)
settings/lang_zh = 中文
settings/lang_ja = 日语 (日本語)
settings/lang_ko = 韩语 (한국어)
settings/lang_vi = 越南语 (Tiếng Việt)
+1 -4
View File
@@ -1,5 +1,5 @@
mod_menu_base_name = Меню mod_menu_base_name = Меню
mod_menu_base_desc = Главное меню на реестрах: встроенные кнопки, настройки и панели сохранения/загрузки, вынесенные из ядра. mod_menu_base_desc = Главное меню: запустить или продолжить игру, выбрать одну из установленных игр, загрузить сохранение, изменить язык, звук и настройки экрана.
settings/saves/purge_dormant = Данные отключённых механик settings/saves/purge_dormant = Данные отключённых механик
settings/saves/purge_dormant_button = Очистить settings/saves/purge_dormant_button = Очистить
@@ -56,9 +56,6 @@ settings/section_performance = Производительность
settings/saved_at_once = Изменения применяются и сохраняются сразу settings/saved_at_once = Изменения применяются и сохраняются сразу
settings/volume = Громкость settings/volume = Громкость
settings/language = Язык settings/language = Язык
settings/lang_ru = Русский
settings/lang_en = English
settings/lang_zh = 中文
settings/tab_general = Основное settings/tab_general = Основное
settings/tab_audio = Звук settings/tab_audio = Звук
settings/tab_display = Экран settings/tab_display = Экран
+81
View File
@@ -0,0 +1,81 @@
mod_menu_base_name = Menu
mod_menu_base_desc = Menu chính: bắt đầu hoặc tiếp tục game, chọn một trong các game đã cài, tải bản lưu và đổi ngôn ngữ, âm thanh, cài đặt hiển thị.
settings/saves/purge_dormant = Dữ liệu của cơ chế đã tắt
settings/saves/purge_dormant_button = Xóa
settings/saves/purge_dormant_confirm = Xóa khỏi mọi bản lưu dữ liệu của các cơ chế không thuộc các game? Cơ chế được bật lại sẽ bắt đầu từ đầu.
settings/saves/purge_dormant_done = Đã xóa khối dữ liệu: {0}
menu/continue = Tiếp tục
menu/play = Chơi
menu/play/title = Chọn game
menu/play/no_games = Chưa có game nào. Hãy tạo một game trong trình quản lý mod.
menu/play/new_game = Trò chơi mới
menu/play/continue = Tiếp tục
menu/play/browse_saves = Bản lưu
menu/play/install = Cài phần còn thiếu
menu/play/installing = Đang cài…
menu/play/configure = Cấu hình
menu/play/install_done = Đã cài mod. Chúng sẽ được tải khi bạn vào game.
menu/play/install_failed = Không cài được mod — xem nhật ký.
menu/play/no_saves = Không có bản lưu
menu/play/saves = Bản lưu: {0} · gần nhất: {1}
menu/play/status_ready = Sẵn sàng để chơi
menu/play/status_missing = Thiếu mod: {0}
menu/play/status_mismatch = Phiên bản không tương thích: {0}
menu/play/status_problems = Thành phần game có vấn đề: {0}
menu/play/status_install = Cần cài: {0}, cần bật: {1}
menu/load/empty = Chưa có bản lưu
menu/save/new_slot = + Bản lưu mới
menu/load/hint = Nhấp vào bản lưu để tải
menu/save/hint = Nhấp vào một ô để lưu game; ô đã dùng sẽ bị ghi đè sau khi xác nhận
menu/play/hint_warming = Mod của các game đang được chuẩn bị ở nền — sau đó khởi động sẽ nhanh
menu/play/hint_ready = Mod của các game đã sẵn sàng, khởi động mất vài giây
menu/load/legacy_group = Bản lưu không có game
menu/load/legacy_title = Bản lưu không có game
menu/load/legacy_text = Bản lưu này được tạo trước khi có bộ sưu tập game. Hãy chọn game mà nó thuộc về — tệp sẽ chuyển vào các bản lưu của game đó.
menu/load/legacy_ok = Chuyển và tải
menu/load/legacy_no_games = Không có game sẵn sàng nào để gán bản lưu.
menu/load/diff_title = Game đã thay đổi
menu/load/diff_intro = Thành phần của game đã thay đổi kể từ bản lưu này.
menu/load/diff_added = Đã thêm (bắt đầu từ đầu):
menu/load/diff_removed = Đã gỡ (dữ liệu được giữ lại và trở lại nếu bật lại):
menu/load/diff_updated = Đã cập nhật:
menu/load/diff_downgrade = (cũ hơn bản lưu — dữ liệu của mod đó được để riêng)
menu/load/diff_backup = Bản lưu sẽ được sao lưu trước khi tải.
menu/load/diff_ok = Tải
settings/back = Quay lại
settings/audio = Âm thanh
settings/sounds = Hiệu ứng âm thanh
settings/music = Nhạc
settings/ambient = Âm nền
settings/interface_language = Ngôn ngữ giao diện
settings/section_window = Cửa sổ
settings/section_performance = Hiệu năng
settings/saved_at_once = Thay đổi được áp dụng và lưu ngay
settings/volume = Âm lượng
settings/language = Ngôn ngữ
settings/tab_general = Chung
settings/tab_audio = Âm thanh
settings/tab_display = Hiển thị
settings/display = Hiển thị
settings/window_mode = Chế độ cửa sổ
settings/window_mode_windowed = Cửa sổ
settings/window_mode_maximized = Cửa sổ phóng to
settings/window_mode_borderless = Toàn màn hình (không viền)
settings/window_mode_fullscreen = Toàn màn hình (độc quyền)
settings/resolution = Kích thước cửa sổ
settings/resolution_fullscreen_hint = Chế độ toàn màn hình dùng độ phân giải của màn hình
settings/monitor = Màn hình
settings/monitor_screen = Màn hình {0} ({1}×{2})
settings/monitor_screen_primary = Màn hình {0} ({1}×{2}), chính
settings/vsync = V-Sync
settings/max_fps = Giới hạn khung hình
settings/max_fps_unlimited = Không giới hạn
settings/max_fps_value = {0} FPS
settings/display_reset = Đặt lại cài đặt hiển thị
settings/tab_mods = Mod
settings/mod_list_title = Mod
settings/mods_no_settings = Không có cài đặt mod nào
settings/mods_reset = Khôi phục mặc định
+81
View File
@@ -0,0 +1,81 @@
mod_menu_base_name = 菜单
mod_menu_base_desc = 主菜单:开始或继续游戏、选择已安装的游戏、读取存档,以及更改语言、声音和显示设置。
settings/saves/purge_dormant = 已停用机制的数据
settings/saves/purge_dormant_button = 清除
settings/saves/purge_dormant_confirm = 要从所有存档中删除不属于这些游戏的机制数据吗?重新启用的机制会从头开始。
settings/saves/purge_dormant_done = 已删除的数据块:{0}
menu/continue = 继续
menu/play = 开始游戏
menu/play/title = 选择游戏
menu/play/no_games = 还没有游戏。在模组管理器中创建一个吧。
menu/play/new_game = 新游戏
menu/play/continue = 继续
menu/play/browse_saves = 存档
menu/play/install = 安装缺失项
menu/play/installing = 正在安装…
menu/play/configure = 配置
menu/play/install_done = 模组已安装。进入游戏时会加载它们。
menu/play/install_failed = 无法安装模组——请查看日志。
menu/play/no_saves = 没有存档
menu/play/saves = 存档:{0} · 最近:{1}
menu/play/status_ready = 可以开始游戏
menu/play/status_missing = 缺少模组:{0}
menu/play/status_mismatch = 版本不兼容:{0}
menu/play/status_problems = 游戏组成存在问题:{0}
menu/play/status_install = 待安装:{0},待启用:{1}
menu/load/empty = 还没有存档
menu/save/new_slot = + 新存档
menu/load/hint = 点击存档即可读取
menu/save/hint = 点击栏位即可存档;已占用的栏位在确认后会被覆盖
menu/play/hint_warming = 游戏的模组正在后台准备——之后启动会很快
menu/play/hint_ready = 游戏的模组已就绪,启动只需几秒
menu/load/legacy_group = 没有所属游戏的存档
menu/load/legacy_title = 没有所属游戏的存档
menu/load/legacy_text = 这个存档是在游戏合集出现之前创建的。请选择它所属的游戏——文件会移到该游戏的存档中。
menu/load/legacy_ok = 移动并读取
menu/load/legacy_no_games = 没有可以分配此存档的就绪游戏。
menu/load/diff_title = 游戏已改变
menu/load/diff_intro = 自这个存档以来,游戏的组成发生了变化。
menu/load/diff_added = 新增(从头开始):
menu/load/diff_removed = 移除(数据会保留,重新启用时恢复):
menu/load/diff_updated = 已更新:
menu/load/diff_downgrade = (比存档旧——该模组的数据会被暂时搁置)
menu/load/diff_backup = 读取前会备份存档。
menu/load/diff_ok = 读取
settings/back = 返回
settings/audio = 音频
settings/sounds = 音效
settings/music = 音乐
settings/ambient = 环境音
settings/interface_language = 界面语言
settings/section_window = 窗口
settings/section_performance = 性能
settings/saved_at_once = 更改会立即应用并保存
settings/volume = 音量
settings/language = 语言
settings/tab_general = 常规
settings/tab_audio = 声音
settings/tab_display = 显示
settings/display = 显示
settings/window_mode = 窗口模式
settings/window_mode_windowed = 窗口化
settings/window_mode_maximized = 最大化窗口
settings/window_mode_borderless = 全屏(无边框)
settings/window_mode_fullscreen = 全屏(独占)
settings/resolution = 窗口大小
settings/resolution_fullscreen_hint = 全屏模式使用显示器的分辨率
settings/monitor = 显示器
settings/monitor_screen = 显示器 {0}({1}×{2})
settings/monitor_screen_primary = 显示器 {0}({1}×{2}),主显示器
settings/vsync = 垂直同步
settings/max_fps = 帧率上限
settings/max_fps_unlimited = 不限
settings/max_fps_value = {0} FPS
settings/display_reset = 重置显示设置
settings/tab_mods = 模组
settings/mod_list_title = 模组
settings/mods_no_settings = 没有可用的模组设置
settings/mods_reset = 恢复默认值
+2 -2
View File
@@ -3,12 +3,12 @@
"name": "Menu", "name": "Menu",
"version": "1.0.0", "version": "1.0.0",
"author": "ct", "author": "ct",
"description": "Registry-driven main menu: built-in buttons, settings and save/load panels moved out of the core.", "description": "The main menu: start or continue a game, pick one of the installed games, load a save and change the language, sound and display settings.",
"category": "ui", "category": "ui",
"sources": [ "sources": [
"src/**/*.cs" "src/**/*.cs"
], ],
"depends": ["ui_base>=1"], "depends": ["ui_base>=1", "music_pack>=1"],
"test_suites": [ "test_suites": [
{"id": "menu_flow", "activate": ["--itest=menu_flow"]}, {"id": "menu_flow", "activate": ["--itest=menu_flow"]},
{"id": "save_dormancy", "activate": ["--itest=save_dormancy"]}, {"id": "save_dormancy", "activate": ["--itest=save_dormancy"]},
Binary file not shown.
-11
View File
@@ -1,11 +0,0 @@
{
"Scene": "MainMenu",
"Musics": [
{
"MusicType": "Ambient",
"MusicNames": [
"Serpent's Lament"
]
}
]
}
+1 -1
View File
@@ -42,7 +42,7 @@ namespace Cthangover.BaseMenu
private const string Mods = Pages + "Mods/"; private const string Mods = Pages + "Mods/";
/// <summary>Names of <see cref="LanguageCode.Supported"/>, same order.</summary> /// <summary>Names of <see cref="LanguageCode.Supported"/>, same order.</summary>
private static readonly string[] LanguageKeys = { "settings/lang_ru", "settings/lang_en", "settings/lang_zh" }; private static readonly string[] LanguageKeys = { "settings/lang_ru", "settings/lang_en", "settings/lang_es", "settings/lang_zh", "settings/lang_ja", "settings/lang_ko", "settings/lang_vi" };
private static readonly string[] TabKeys = { "settings/tab_general", "settings/tab_audio", "settings/tab_display", "settings/tab_mods" }; private static readonly string[] TabKeys = { "settings/tab_general", "settings/tab_audio", "settings/tab_display", "settings/tab_mods" };
@@ -19,7 +19,7 @@ namespace Mods.CollectionEditTest
queued = true; queued = true;
GameLogger.Log("TEST", "CollectionEditTest: activating"); GameLogger.Log("TEST", "CollectionEditTest: activating");
(Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new CollectionEditTestDriverNode()); ModRoot.AddDeferred(new CollectionEditTestDriverNode());
} }
} }
} }
@@ -27,7 +27,7 @@ namespace Mods.DisplaySettingsTest
queued = true; queued = true;
GameLogger.Log("TEST", "DisplaySettingsTest: activating"); GameLogger.Log("TEST", "DisplaySettingsTest: activating");
(Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new DisplaySettingsTestDriverNode(shots)); ModRoot.AddDeferred(new DisplaySettingsTestDriverNode(shots));
} }
} }
} }
@@ -19,7 +19,7 @@ namespace Mods.HotReloadTest
queued = true; queued = true;
GameLogger.Log("TEST", "HotReloadTest: activating"); GameLogger.Log("TEST", "HotReloadTest: activating");
(Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new HotReloadTestDriverNode()); ModRoot.AddDeferred(new HotReloadTestDriverNode());
} }
} }
} }
@@ -6,6 +6,7 @@ using System.Text.Json;
using Cthangover.BaseMenu; using Cthangover.BaseMenu;
using Cthangover.Core.Bootstrap; using Cthangover.Core.Bootstrap;
using Cthangover.Core.Games; using Cthangover.Core.Games;
using Cthangover.Core.Localization;
using Cthangover.Core.Mods; using Cthangover.Core.Mods;
using Cthangover.Core.Settings; using Cthangover.Core.Settings;
using Cthangover.Core.Utils; using Cthangover.Core.Utils;
@@ -86,6 +87,7 @@ namespace Mods.MenuFlowTest
Check("front-end only", ActiveGame.IsFrontendOnly && !ActiveGame.IsActive); Check("front-end only", ActiveGame.IsFrontendOnly && !ActiveGame.IsActive);
Check("menu mods loaded", ModRegistry.Instance.Mods.ContainsKey("menu_base") && ModRegistry.Instance.Mods.ContainsKey("mod_manager")); Check("menu mods loaded", ModRegistry.Instance.Mods.ContainsKey("menu_base") && ModRegistry.Instance.Mods.ContainsKey("mod_manager"));
Check("game content not loaded", !ModRegistry.Instance.Mods.ContainsKey("cthangover_game")); Check("game content not loaded", !ModRegistry.Instance.Mods.ContainsKey("cthangover_game"));
CheckUnloadedModTitle("cooking");
Check("Play button shown", Menu.FindChild("play", true, false) is Button); Check("Play button shown", Menu.FindChild("play", true, false) is Button);
Check("New game hidden without a game", Menu.FindChild("new_game", true, false) == null); Check("New game hidden without a game", Menu.FindChild("new_game", true, false) == null);
break; break;
@@ -211,7 +213,7 @@ namespace Mods.MenuFlowTest
SaveId = Slot, SaveId = Slot,
Timestamp = DateTime.UtcNow, Timestamp = DateTime.UtcNow,
CoreVersion = "0.1.0", CoreVersion = "0.1.0",
Game = new SaveGameInfo { Id = GameId, Name = "Novel Template", Version = "1.0.0" }, Game = new SaveGameInfo { Id = GameId, Name = "My Novel", Version = "1.0.0" },
}; };
package.ModData[SavePackage.CoreSlotKey] = new ModSlot(); package.ModData[SavePackage.CoreSlotKey] = new ModSlot();
var dir = ProjectSettings.GlobalizePath(SaveService.GameDirectory(GameId)); var dir = ProjectSettings.GlobalizePath(SaveService.GameDirectory(GameId));
@@ -230,6 +232,26 @@ namespace Mods.MenuFlowTest
File.Delete(last); File.Delete(last);
} }
/// <summary>The mod manager lists mods the shell does not load: their names come in the current language.</summary>
private void CheckUnloadedModTitle(string modId)
{
// Russian, not the run's English: an English name would equal the manifest's fallback.
var was = TranslationServer.GetLocale();
LocaleLoader.LoadLocale("ru");
var mod = ModRegistry.Instance.AllDiscoveredMods.GetValueOrDefault(modId);
var lines = mod?.FileProvider.ReadFileText($"locale/{TranslationServer.GetLocale()}.properties")?.Split('\n');
string Text(string key)
{
var line = lines?.FirstOrDefault(l => l.StartsWith(key + " ") || l.StartsWith(key + "="));
return line?.Substring(line.IndexOf('=') + 1).Trim();
}
Check($"{modId} not loaded, its name in '{TranslationServer.GetLocale()}': {mod?.DisplayTitle}",
!ModRegistry.Instance.Mods.ContainsKey(modId) && Text($"mod_{modId}_name") is { } name && mod.DisplayTitle == name
&& Text($"mod_{modId}_desc") is { } desc && mod.LocalizedDescription == desc);
LocaleLoader.LoadLocale(was);
}
private void Check(string name, bool ok) private void Check(string name, bool ok)
{ {
if (ok) if (ok)
@@ -19,7 +19,7 @@ namespace Mods.MenuFlowTest
queued = true; queued = true;
GameLogger.Log("TEST", "MenuFlowTest: activating"); GameLogger.Log("TEST", "MenuFlowTest: activating");
(Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new MenuFlowTestDriverNode()); ModRoot.AddDeferred(new MenuFlowTestDriverNode());
} }
} }
} }
@@ -19,7 +19,7 @@ namespace Mods.NewGameTest
queued = true; queued = true;
GameLogger.Log("TEST", "NewGameTest: activating"); GameLogger.Log("TEST", "NewGameTest: activating");
(Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new NewGameTestDriverNode()); ModRoot.AddDeferred(new NewGameTestDriverNode());
} }
} }
} }
@@ -19,7 +19,7 @@ namespace Mods.SaveDormancyTest
queued = true; queued = true;
GameLogger.Log("TEST", "SaveDormancyTest: activating"); GameLogger.Log("TEST", "SaveDormancyTest: activating");
(Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new SaveDormancyTestDriverNode()); ModRoot.AddDeferred(new SaveDormancyTestDriverNode());
} }
} }
} }