Add mod documentation in seven languages
This commit is contained in:
1 parent
dbfea2f7c6
commit
1b6771fbe2
19 files changed
+869
-8
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — the starting point for your own visual novel
|
||||
|
||||
My Novel is the smallest complete visual novel in the game: an evening town, a bar and a home, connected by choices. It has no characters, items or battles — only scenes, short scenario files and their translations. It is meant to be copied: rename it, then grow your own story from these three places.
|
||||
|
||||
Play it from **Play → My Novel → New game**. It is the content of the **My Novel** game (collection `novel_template`).
|
||||
|
||||

|
||||
|
||||
## What it contains
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json town entrance, the game starts here
|
||||
│ ├── my_novel_bar.json bar with its ambient sound
|
||||
│ └── my_novel_home.json home vestibule
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties mod name and description
|
||||
└── scenarios_<lang>.properties translations of the scenario lines
|
||||
```
|
||||
|
||||
The pictures and the bar sound are not in this mod: they come from **Town Pack**, so the template stays small and shows how a game reuses shared content. The music comes from **Music Pack**; the engine mods are the 2D Shell, Dialog Engine and Audio Engine.
|
||||
|
||||
## How the story flows
|
||||
|
||||
The town is the hub. Every visit shows the same choice; the bar and the home each lead back.
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (start)
|
||||
│ "Where to go?" │
|
||||
└──┬──────────────┬──┘
|
||||
Go into the bar Go back home
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ Back to the town ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
A scene file names the background and the ambient sound:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
The scenario with the same scene name runs when the scene is entered:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
The English text is written directly in the scenario. Each `key=` names the line's translation in `locale/scenarios_<lang>.properties`, for example the Spanish one:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## Make it your own
|
||||
|
||||
1. **Copy and rename the mod.** Name it after your game with the `_game` suffix, for example `harbor_game`. Change the folder name and `id` in `manifest.json` to the same value, and rename the `mod_my_novel_game_name` / `_desc` keys in `locale/*.properties` to `mod_harbor_game_name` / `_desc`.
|
||||
2. **Make a game for it.** In **Mods & Collections → Collections**, open My Novel's scheme and press **Duplicate**, then replace `my_novel_game` with your mod in the **Story** block. The entry scene is set in the collection (`"entry": { "scene": "my_novel_town" }`).
|
||||
3. **Rename the scenes** if you like: the scene's `name`, its file, the `scene:` header of its scenario and every `switch_scene` that leads to it must match.
|
||||
4. **Keep or replace the art.** Leave `town_pack` in `depends` to keep the town, or add your own `backgrounds/` and `sounds/` and point `defaultBackground` / `defaultAmbient` at them.
|
||||
|
||||
## A first change: add a place
|
||||
|
||||
This is a real session in the editors, run inside My Novel with the Editor Tools mod added. The scene editor created a `my_novel_park` scene, and one option plus one label were typed into the town's scenario:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
After saving, the town immediately offers the new way, and choosing it opens the new scene:
|
||||
|
||||

|
||||
|
||||
To get the editors in your own game, add the **Editor Tools** mod to it in the scheme, or launch the game for one session with them:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
A new line without `key=` shows its literal text in every language; add a key and translations when the story is ready to be translated.
|
||||
|
||||
## If something does not work
|
||||
|
||||
1. **A choice leads nowhere.** The `switch_scene` name must equal the target scene's `name`, including case.
|
||||
2. **A scene has no text.** Its scenario's `scene:` header must name that scene.
|
||||
3. **The text is English in another language.** The line has no `key=`, or the key is missing in that language's `scenarios_<lang>.properties`.
|
||||
4. **A black background.** The background name is misspelt, or the mod that has the picture is not in `depends`.
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — el punto de partida para tu propia novela visual
|
||||
|
||||
My Novel es la novela visual completa más pequeña del proyecto: un pueblo al atardecer, un bar y una casa, unidos por decisiones. No tiene personajes, objetos ni combates: solo escenas, archivos de escenario breves y sus traducciones. Está pensado para copiarse: renómbralo y haz crecer tu propia historia desde estos tres lugares.
|
||||
|
||||
Se juega desde **Jugar → My Novel → Nueva partida**. Es el contenido del juego **My Novel** (colección `novel_template`).
|
||||
|
||||

|
||||
|
||||
## Qué contiene
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json entrada del pueblo, el juego empieza aquí
|
||||
│ ├── my_novel_bar.json el bar con su sonido ambiental
|
||||
│ └── my_novel_home.json el vestíbulo de la casa
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties nombre y descripción del mod
|
||||
└── scenarios_<lang>.properties traducciones de las líneas del escenario
|
||||
```
|
||||
|
||||
Las imágenes y el sonido del bar no están en este mod: vienen de **Town Pack**, para que la plantilla siga siendo pequeña y muestre cómo un juego reutiliza contenido compartido. La música viene de **Music Pack**; los mods de motor son la Carcasa 2D, el motor de diálogos y el motor de audio.
|
||||
|
||||
## Cómo fluye la historia
|
||||
|
||||
El pueblo es el centro. Cada visita muestra la misma decisión; el bar y la casa siempre llevan de vuelta.
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (inicio)
|
||||
│ "¿Adónde ir?" │
|
||||
└──┬──────────────┬──┘
|
||||
Entrar en el bar Volver a casa
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ Volver a la ciudad ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
El archivo de la escena nombra el fondo y el sonido ambiental:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
El escenario con el mismo nombre de la escena se ejecuta al entrar en ella:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
El texto en inglés está escrito directamente en el escenario. Cada `key=` nombra la traducción de la línea en `locale/scenarios_<lang>.properties`; por ejemplo, la española:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## Hazlo tuyo
|
||||
|
||||
1. **Copia y renombra el mod.** Ponle el nombre de tu juego con el sufijo `_game`, por ejemplo `harbor_game`. Cambia el nombre de la carpeta y el `id` de `manifest.json` al mismo valor, y renombra las claves `mod_my_novel_game_name` / `_desc` de `locale/*.properties` a `mod_harbor_game_name` / `_desc`.
|
||||
2. **Crea un juego para él.** En **Mods & Collections → Colecciones**, abre el esquema de My Novel y pulsa **Duplicar**; después sustituye `my_novel_game` por tu mod en el bloque **Historia**. La escena de entrada se fija en la colección (`"entry": { "scene": "my_novel_town" }`).
|
||||
3. **Renombra las escenas** si quieres: el `name` de la escena, su archivo, la cabecera `scene:` de su escenario y cada `switch_scene` que lleve a ella deben coincidir.
|
||||
4. **Conserva o sustituye el arte.** Deja `town_pack` en `depends` para quedarte con el pueblo, o añade tus propios `backgrounds/` y `sounds/` y apunta a ellos con `defaultBackground` / `defaultAmbient`.
|
||||
|
||||
## Un primer cambio: añade un lugar
|
||||
|
||||
Esta es una sesión real en los editores, hecha dentro de My Novel con el mod Editor Tools añadido. El editor de escenas creó una escena `my_novel_park`, y en el escenario del pueblo se teclearon una opción y una etiqueta:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
Tras guardar, el pueblo ofrece de inmediato el nuevo camino, y elegirlo abre la escena nueva:
|
||||
|
||||

|
||||
|
||||
Para tener los editores en tu propio juego, añádele el mod **Editor Tools** en el esquema, o lanza el juego por una sesión con ellos:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
Una línea nueva sin `key=` muestra su texto literal en todos los idiomas; añade una clave y traducciones cuando la historia esté lista para traducirse.
|
||||
|
||||
## Si algo no funciona
|
||||
|
||||
1. **Una decisión no lleva a ninguna parte.** El nombre del `switch_scene` debe ser igual al `name` de la escena destino, mayúsculas incluidas.
|
||||
2. **Una escena no tiene texto.** La cabecera `scene:` de su escenario debe nombrar esa escena.
|
||||
3. **El texto sale en inglés en otro idioma.** La línea no tiene `key=`, o la clave falta en el `scenarios_<lang>.properties` de ese idioma.
|
||||
4. **Fondo negro.** El nombre del fondo está mal escrito, o el mod que tiene la imagen no está en `depends`.
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — 自分のビジュアルノベルの出発点
|
||||
|
||||
My Novel はプロジェクトでいちばん小さな完成したビジュアルノベルです。夕暮れの町、バー、家が選択肢でつながっています。キャラクターもアイテムも戦闘もなく、あるのはシーン、短いシナリオファイル、その翻訳だけ。コピーされることを前提としたモッドです。名前を変えて、この三つの場所から自分の物語を育ててください。
|
||||
|
||||
**プレイ → My Novel → ニューゲーム** から始めます。**My Novel** ゲーム(コレクション `novel_template`)のコンテンツです。
|
||||
|
||||

|
||||
|
||||
## 中身
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json 町の入り口。ゲームはここから始まる
|
||||
│ ├── my_novel_bar.json 環境音付きのバー
|
||||
│ └── my_novel_home.json 家の玄関
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties MOD の名前と説明
|
||||
└── scenarios_<lang>.properties シナリオの各行の翻訳
|
||||
```
|
||||
|
||||
画像とバーの音はこの MOD には入っていません。**Town Pack** から来るので、テンプレートは小さなまま、ゲームが共有コンテンツを再利用するようすを見せられます。音楽は **Music Pack** から。エンジン MOD は 2D シェル、会話エンジン、オーディオエンジンです。
|
||||
|
||||
## 物語の流れ
|
||||
|
||||
町が中心です。訪れるたびに同じ選択肢が現れ、バーも家も必ず戻ってきます。
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (開始)
|
||||
│ 「どこへ行く?」 │
|
||||
└──┬──────────────┬──┘
|
||||
バーに入る 家に帰る
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ 町に戻る ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
シーンのファイルは背景と環境音を指名します:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
シーンと同じ名前のシナリオは、そのシーンに入ったときに再生されます:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
英語のテキストはシナリオに直接書かれています。各 `key=` はその行の翻訳を `locale/scenarios_<lang>.properties` で指名します。たとえばスペイン語では:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## 自分のものにする
|
||||
|
||||
1. **MOD をコピーして名前を変える。** 自分のゲームの名前に `_game` 接尾辞を付けたものにします。たとえば `harbor_game`。フォルダー名と `manifest.json` の `id` を同じ値に変え、`locale/*.properties` のキー `mod_my_novel_game_name` / `_desc` を `mod_harbor_game_name` / `_desc` に変えます。
|
||||
2. **ゲームを作る。** **Mods & Collections → コレクション** で My Novel の構成を開いて **複製** を押し、**ストーリー** ブロックの `my_novel_game` を自分の MOD に置き換えます。開始シーンはコレクションで指定します(`"entry": { "scene": "my_novel_town" }`)。
|
||||
3. **シーンの名前を変える(任意)。** シーンの `name`、そのファイル、シナリオの `scene:` ヘッダー、そこへ通じるすべての `switch_scene` が一致していなければなりません。
|
||||
4. **アートを保つか置き換える。** 町を残すなら `depends` に `town_pack` を残します。自分の `backgrounds/` と `sounds/` を追加し、`defaultBackground` / `defaultAmbient` をそちらへ向けてもかまいません。
|
||||
|
||||
## 最初の変更:場所を一つ追加する
|
||||
|
||||
これはエディターでの実際の作業です。My Novel に Editor Tools MOD を追加した状態で行いました。シーンエディターがシーン `my_novel_park` を作り、町のシナリオに選択肢を一つとラベルを一つ打ち込みました:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
保存すると、町はすぐに新しい道を示し、選ぶと新しいシーンが開きます:
|
||||
|
||||

|
||||
|
||||
自分のゲームでエディターを使うには、構成で **Editor Tools** MOD を追加するか、一ゲーム分だけそれらと一緒に起動します:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
`key=` のない新しい行はどの言語でもリテラルのテキストを表示します。物語を翻訳する準備ができたら、キーと翻訳を追加してください。
|
||||
|
||||
## うまくいかないとき
|
||||
|
||||
1. **選択肢がどこにも行かない。** `switch_scene` の名前は、大文字小文字を含めて対象シーンの `name` と一致しなければなりません。
|
||||
2. **シーンにテキストがない。** そのシナリオの `scene:` ヘッダーが、そのシーンの名前を指している必要があります。
|
||||
3. **別の言語でテキストが英語のまま。** 行に `key=` がないか、その言語の `scenarios_<lang>.properties` にキーがありません。
|
||||
4. **背景が真っ暗。** 背景名のつづりが間違っているか、画像を持つ MOD が `depends` に入っていません。
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — 나만의 비주얼 노벨의 출발점
|
||||
|
||||
My Novel은 프로젝트에서 가장 작은 완성된 비주얼 노벨입니다. 저녁의 마을, 바, 집이 선택지로 이어져 있습니다. 캐릭터도 아이템도 전투도 없고, 장면과 짧은 시나리오 파일, 그 번역만 있을 뿐입니다. 이 모드는 복제하기 위해 만들어졌습니다. 이름을 바꾸고, 이 세 장소에서 나만의 이야기를 키우세요.
|
||||
|
||||
**플레이 → My Novel → 새 게임**에서 시작합니다. **My Novel** 게임(컬렉션 `novel_template`)의 콘텐츠입니다.
|
||||
|
||||

|
||||
|
||||
## 들어 있는 것
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json 마을 입구, 게임이 여기서 시작됨
|
||||
│ ├── my_novel_bar.json 자체 환경음이 있는 바
|
||||
│ └── my_novel_home.json 집 현관
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties 모드 이름과 설명
|
||||
└── scenarios_<lang>.properties 시나리오 줄의 번역
|
||||
```
|
||||
|
||||
그림과 바 소리는 이 모드에 없습니다. **Town Pack**에서 오기 때문에, 템플릿은 작게 유지되면서 게임이 공유 콘텐츠를 재사용하는 방식을 보여 줍니다. 음악은 **Music Pack**에서 옵니다. 엔진 모드는 2D 셸, 대화 엔진, 오디오 엔진입니다.
|
||||
|
||||
## 이야기가 흐르는 방식
|
||||
|
||||
마을이 중심입니다. 방문할 때마다 같은 선택지가 나타나고, 바와 집은 언제나 돌아가는 길로 이어집니다.
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (시작)
|
||||
│ “어디로 갈까?” │
|
||||
└──┬──────────────┬──┘
|
||||
바에 들어간다 집으로 돌아간다
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ 마을로 돌아간다 ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
장면 파일은 배경과 환경음을 지정합니다:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
장면과 같은 이름의 시나리오는 그 장면에 들어설 때 실행됩니다:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
영어 텍스트는 시나리오에 직접 쓰여 있습니다. 각 `key=`는 그 줄의 번역을 `locale/scenarios_<lang>.properties`에서 가리킵니다. 예를 들어 스페인어는:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## 내 것으로 만들기
|
||||
|
||||
1. **모드를 복제하고 이름을 바꾸십시오.** 게임 이름에 `_game` 접미사를 붙여 지으세요. 예: `harbor_game`. 폴더 이름과 `manifest.json`의 `id`를 같은 값으로 바꾸고, `locale/*.properties`의 키 `mod_my_novel_game_name` / `_desc`를 `mod_harbor_game_name` / `_desc`로 바꾸십시오.
|
||||
2. **게임을 만드십시오.** **Mods & Collections → 컬렉션**에서 My Novel의 구성을 열고 **복제**를 누른 뒤, **스토리** 블록의 `my_novel_game`을 내 모드로 바꾸십시오. 시작 장면은 컬렉션에서 정합니다(`"entry": { "scene": "my_novel_town" }`).
|
||||
3. **장면 이름을 바꾸십시오(선택).** 장면의 `name`, 그 파일, 시나리오의 `scene:` 헤더, 그곳으로 이어지는 모든 `switch_scene`이 일치해야 합니다.
|
||||
4. **아트를 유지하거나 교체하십시오.** 마을을 그대로 두려면 `depends`에 `town_pack`을 남기세요. 아니면 자신의 `backgrounds/`와 `sounds/`를 추가하고 `defaultBackground` / `defaultAmbient`가 그쪽을 가리키게 하세요.
|
||||
|
||||
## 첫 번째 변경: 장소 추가하기
|
||||
|
||||
이것은 편집기에서의 실제 세션입니다. My Novel에 Editor Tools 모드를 추가한 상태에서 진행했습니다. 장면 편집기가 `my_novel_park` 장면을 만들고, 마을 시나리오에 선택지 하나와 라벨 하나를 입력했습니다:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
저장하면 마을이 곧바로 새 길을 내놓고, 그것을 고르면 새 장면이 열립니다:
|
||||
|
||||

|
||||
|
||||
자신의 게임에서 편집기를 쓰려면 구성에서 **Editor Tools** 모드를 추가하거나, 한 세션 동안 그것들과 함께 게임을 실행하세요:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
`key=` 없는 새 줄은 모든 언어에서 글자 그대로의 텍스트를 보여 줍니다. 이야기를 번역할 준비가 되면 키와 번역을 추가하세요.
|
||||
|
||||
## 잘 안 될 때
|
||||
|
||||
1. **어떤 선택지가 아무 데도 가지 않습니다.** `switch_scene`의 이름은 대소문자까지 대상 장면의 `name`과 같아야 합니다.
|
||||
2. **장면에 텍스트가 없습니다.** 그 시나리오의 `scene:` 헤더가 바로 그 장면의 이름을 가리켜야 합니다.
|
||||
3. **다른 언어에서 텍스트가 영어입니다.** 줄에 `key=`가 없거나, 그 언어의 `scenarios_<lang>.properties`에 키가 없습니다.
|
||||
4. **검은 배경.** 배경 이름의 철자가 틀렸거나, 그림을 가진 모드가 `depends`에 없습니다.
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — отправная точка для вашей собственной визуальной новеллы
|
||||
|
||||
My Novel — самая маленькая законченная визуальная новелла в проекте: вечерний город, бар и дом, связанные выборами. Здесь нет персонажей, предметов и боёв — только сцены, короткие файлы сценариев и их переводы. Мод задуман как образец для копирования: переименуйте его и вырастите собственную историю из этих трёх мест.
|
||||
|
||||
Запускается через **Играть → My Novel → Новая игра**. Это контент игры **My Novel** (коллекция `novel_template`).
|
||||
|
||||

|
||||
|
||||
## Что внутри
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json въезд в город, игра начинается здесь
|
||||
│ ├── my_novel_bar.json бар со своим фоновым звуком
|
||||
│ └── my_novel_home.json прихожая дома
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties имя и описание мода
|
||||
└── scenarios_<lang>.properties переводы строк сценария
|
||||
```
|
||||
|
||||
Картинок и звука бара в этом моде нет: они берутся из **Town Pack**, чтобы шаблон оставался маленьким и показывал, как игра переиспользует общий контент. Музыка — из **Music Pack**; моды-движки здесь — 2D-оболочка, диалоговый движок и звуковой движок.
|
||||
|
||||
## Как течёт история
|
||||
|
||||
Город — центр. Каждый визит показывает один и тот же выбор; бар и дом каждый раз ведут обратно.
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (старт)
|
||||
│ «Куда пойти?» │
|
||||
└──┬──────────────┬──┘
|
||||
Зайти в бар Вернуться домой
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ Вернуться в город ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
Файл сцены называет фон и фоновый звук:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
Сценарий с тем же именем, что у сцены, запускается при входе в неё:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
Английский текст написан прямо в сценарии. Каждый `key=` называет перевод строки в `locale/scenarios_<lang>.properties`, например испанский:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## Сделайте её своей
|
||||
|
||||
1. **Скопируйте и переименуйте мод.** Назовите его по своей игре с суффиксом `_game`, например `harbor_game`. Папку и поле `id` в `manifest.json` смените на одно и то же значение, а ключи `mod_my_novel_game_name` / `_desc` в `locale/*.properties` — на `mod_harbor_game_name` / `_desc`.
|
||||
2. **Сделайте для него игру.** В **Mods & Collections → Коллекции** откройте схему My Novel и нажмите **Дублировать**, затем в блоке «Сюжет» замените `my_novel_game` на свой мод. Стартовая сцена задаётся в коллекции (`"entry": { "scene": "my_novel_town" }`).
|
||||
3. **Переименуйте сцены**, если хотите: имя сцены в поле `name`, её файл, заголовок `scene:` её сценария и каждый `switch_scene`, который туда ведёт, должны совпадать.
|
||||
4. **Оставьте или замените графику.** Оставьте `town_pack` в `depends`, чтобы сохранить город, — или добавьте собственные `backgrounds/` и `sounds/` и направьте `defaultBackground` / `defaultAmbient` на них.
|
||||
|
||||
## Первое изменение: добавьте место
|
||||
|
||||
Это настоящая сессия в редакторах, запущенная внутри My Novel с подключённым модом Editor Tools. Редактор сцен создал сцену `my_novel_park`, а в сценарий города вписали один вариант и одну метку:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
После сохранения город сразу предлагает новый путь, и выбор открывает новую сцену:
|
||||
|
||||

|
||||
|
||||
Чтобы редакторы были в вашей игре, добавьте в её схему мод **Editor Tools** или запустите игру на один сеанс с ними:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
Новая строка без `key=` показывает свой буквальный текст на любом языке; добавьте ключ и переводы, когда история будет готова к переводу.
|
||||
|
||||
## Если что-то не работает
|
||||
|
||||
1. **Выбор ведёт в никуда.** Имя в `switch_scene` должно совпадать с полем `name` целевой сцены, включая регистр.
|
||||
2. **У сцены нет текста.** Заголовок `scene:` её сценария должен называть именно эту сцену.
|
||||
3. **На другом языке текст английский.** У строки нет `key=`, либо ключ отсутствует в `scenarios_<lang>.properties` этого языка.
|
||||
4. **Чёрный фон.** Имя фона написано с ошибкой, или мод с картинкой не указан в `depends`.
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — điểm khởi đầu cho tiểu thuyết tương tác của riêng bạn
|
||||
|
||||
My Novel là tiểu thuyết tương tác hoàn chỉnh nhỏ nhất trong dự án: một thị trấn lúc chiều tối, một quán bar và một ngôi nhà, nối với nhau bằng các lựa chọn. Nó không có nhân vật, vật phẩm hay chiến đấu — chỉ có cảnh, những tệp kịch bản ngắn và bản dịch của chúng. Mod được làm ra để copy: đổi tên nó, rồi nuôi lớn câu chuyện của riêng bạn từ ba địa điểm này.
|
||||
|
||||
Chơi từ **Chơi → My Novel → Trò chơi mới**. Đây là nội dung của trò chơi **My Novel** (bộ sưu tập `novel_template`).
|
||||
|
||||

|
||||
|
||||
## Bên trong có gì
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json lối vào thị trấn, trò chơi bắt đầu ở đây
|
||||
│ ├── my_novel_bar.json quán bar với âm thanh nền riêng
|
||||
│ └── my_novel_home.json tiền sảnh ngôi nhà
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties tên và mô tả mod
|
||||
└── scenarios_<lang>.properties bản dịch các dòng kịch bản
|
||||
```
|
||||
|
||||
Hình ảnh và âm thanh quán bar không nằm trong mod này: chúng đến từ **Town Pack**, để mẫu vẫn nhỏ gọn và cho thấy một trò chơi tái sử dụng nội dung chung thế nào. Nhạc đến từ **Music Pack**; các mod engine là Vỏ 2D, engine hội thoại và engine âm thanh.
|
||||
|
||||
## Câu chuyện chảy thế nào
|
||||
|
||||
Thị trấn là điểm trung chuyển. Mỗi lần ghé lại thấy cùng một lựa chọn; quán bar và ngôi nhà đều dẫn đường quay về.
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (bắt đầu)
|
||||
│ "Đi đâu đây?" │
|
||||
└──┬──────────────┬──┘
|
||||
Vào quán bar Về nhà
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ Quay lại thị trấn ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
Tệp cảnh nêu tên nền và âm thanh nền:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
Kịch bản trùng tên với cảnh sẽ chạy khi bước vào cảnh đó:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
Văn bản tiếng Anh được viết ngay trong kịch bản. Mỗi `key=` gọi tên bản dịch của dòng đó trong `locale/scenarios_<lang>.properties`, ví dụ bản tiếng Tây Ban Nha:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## Biến nó thành của bạn
|
||||
|
||||
1. **Copy và đổi tên mod.** Đặt theo tên trò chơi của bạn với hậu tố `_game`, ví dụ `harbor_game`. Đổi tên thư mục và `id` trong `manifest.json` thành cùng một giá trị, và đổi các khóa `mod_my_novel_game_name` / `_desc` trong `locale/*.properties` thành `mod_harbor_game_name` / `_desc`.
|
||||
2. **Làm cho nó một trò chơi.** Trong **Mods & Collections → Bộ sưu tập**, mở sơ đồ của My Novel và bấm **Nhân bản**, rồi thay `my_novel_game` bằng mod của bạn trong khối **Câu chuyện**. Cảnh mở đầu được đặt trong bộ sưu tập (`"entry": { "scene": "my_novel_town" }`).
|
||||
3. **Đổi tên các cảnh** nếu muốn: `name` của cảnh, tệp của nó, dòng đầu `scene:` trong kịch bản của nó và mọi `switch_scene` dẫn tới nó phải khớp nhau.
|
||||
4. **Giữ hoặc thay phần hình ảnh.** Giữ `town_pack` trong `depends` để giữ nguyên thị trấn, hoặc thêm `backgrounds/` và `sounds/` của riêng bạn rồi trỏ `defaultBackground` / `defaultAmbient` vào đó.
|
||||
|
||||
## Thay đổi đầu tiên: thêm một địa điểm
|
||||
|
||||
Đây là một buổi làm việc thật trong trình soạn thảo, chạy bên trong My Novel với mod Editor Tools được thêm vào. Trình soạn cảnh đã tạo cảnh `my_novel_park`, và một lựa chọn cùng một nhãn được gõ vào kịch bản của thị trấn:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
Sau khi lưu, thị trấn lập tức đưa ra lối mới, và chọn nó sẽ mở cảnh mới:
|
||||
|
||||

|
||||
|
||||
Để có trình soạn thảo trong trò chơi của riêng bạn, thêm mod **Editor Tools** vào sơ đồ, hoặc khởi động trò chơi một phiên cùng chúng:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
Dòng mới không có `key=` hiện văn bản nguyên văn trong mọi ngôn ngữ; thêm khóa và bản dịch khi câu chuyện sẵn sàng để dịch.
|
||||
|
||||
## Khi không hoạt động
|
||||
|
||||
1. **Một lựa chọn không dẫn đi đâu.** Tên trong `switch_scene` phải bằng `name` của cảnh đích, kể cả chữ hoa chữ thường.
|
||||
2. **Một cảnh không có văn bản.** Dòng đầu `scene:` trong kịch bản của nó phải gọi đúng tên cảnh đó.
|
||||
3. **Văn bản hiện tiếng Anh ở ngôn ngữ khác.** Dòng đó không có `key=`, hoặc khóa thiếu trong `scenarios_<lang>.properties` của ngôn ngữ đó.
|
||||
4. **Nền đen thui.** Tên nền viết sai chính tả, hoặc mod đang giữ bức hình không có trong `depends`.
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
# My Novel — 你自己的视觉小说起点
|
||||
|
||||
My Novel 是项目中最小的完整视觉小说:傍晚的小镇、一家酒吧和一处住宅,由选项连接起来。它没有角色、物品和战斗——只有场景、简短的剧本文件和它们的翻译。它生来就是供人复制的:改个名字,然后从这三个地点生长出你自己的故事。
|
||||
|
||||
从“开始游戏 → My Novel → 新游戏”进入。它是 **My Novel** 游戏(合集 `novel_template`)的内容。
|
||||
|
||||

|
||||
|
||||
## 里面有什么
|
||||
|
||||
```filestree
|
||||
my_novel_game/
|
||||
├── manifest.json
|
||||
├── scenes/
|
||||
│ ├── my_novel_town.json 城镇入口,游戏从这里开始
|
||||
│ ├── my_novel_bar.json 酒吧,带自己的环境音
|
||||
│ └── my_novel_home.json 住宅门厅
|
||||
├── scenarios/
|
||||
│ ├── my_novel_town.scenario
|
||||
│ ├── my_novel_bar.scenario
|
||||
│ └── my_novel_home.scenario
|
||||
└── locale/
|
||||
├── en.properties 模组名称和描述
|
||||
└── scenarios_<lang>.properties 剧本各行的翻译
|
||||
```
|
||||
|
||||
图片和酒吧的环境音都不在这个模组里:它们来自 **Town Pack**,这样模板才保持小巧,也示范了游戏如何复用共享内容。音乐来自 **Music Pack**;引擎模组是 2D 外壳、对话引擎和音频引擎。
|
||||
|
||||
## 故事的流向
|
||||
|
||||
小镇是枢纽。每次到访都显示同样的选择;酒吧和住宅各自通向返回的路。
|
||||
|
||||
```text
|
||||
┌────────────────────┐
|
||||
│ my_novel_town │ (起点)
|
||||
│ “去哪儿?” │
|
||||
└──┬──────────────┬──┘
|
||||
走进酒吧 回家
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ my_novel_bar │ │ my_novel_home│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
└─ 回到小镇 ─┘
|
||||
```
|
||||
|
||||

|
||||
|
||||
场景文件写明背景和环境音:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "my_novel_bar",
|
||||
"defaultBackground": "bar/bar",
|
||||
"defaultAmbient": "bar/bar_ambient"
|
||||
}
|
||||
```
|
||||
|
||||
与场景同名的剧本会在进入该场景时运行:
|
||||
|
||||
```scenario
|
||||
scene: my_novel_town
|
||||
priority: 10
|
||||
---
|
||||
# The town is the hub: every visit shows the same choice.
|
||||
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
|
||||
select "Where to go?" key=my_novel/town/prompt
|
||||
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
|
||||
option "Go back home" key=my_novel/town/opt_home -> :home
|
||||
|
||||
:bar
|
||||
switch_scene my_novel_bar
|
||||
end
|
||||
|
||||
:home
|
||||
switch_scene my_novel_home
|
||||
end
|
||||
```
|
||||
|
||||
英文文本直接写在剧本里。每个 `key=` 指向该行在 `locale/scenarios_<lang>.properties` 中的翻译,比如西班牙语:
|
||||
|
||||
```properties
|
||||
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
|
||||
```
|
||||
|
||||
## 把它变成你的
|
||||
|
||||
1. **复制并重命名模组。** 用你的游戏名加 `_game` 后缀命名,例如 `harbor_game`。把文件夹名和 `manifest.json` 里的 `id` 改成同一个值,并把 `locale/*.properties` 中的键 `mod_my_novel_game_name` / `_desc` 改成 `mod_harbor_game_name` / `_desc`。
|
||||
2. **为它建一个游戏。** 在 **Mods & Collections → 合集** 中打开 My Novel 的结构并按 **复制**,然后在“故事”分组里把 `my_novel_game` 换成你的模组。入口场景在合集中设置(`"entry": { "scene": "my_novel_town" }`)。
|
||||
3. **按需重命名场景:** 场景的 `name`、它的文件、其剧本的 `scene:` 头以及每一个通向它的 `switch_scene` 都必须一致。
|
||||
4. **保留或替换美术。** 想保留小镇,就把 `town_pack` 留在 `depends` 里;或者添加自己的 `backgrounds/` 和 `sounds/`,并让 `defaultBackground` / `defaultAmbient` 指向它们。
|
||||
|
||||
## 第一处修改:添加一个地点
|
||||
|
||||
这是一次真实的编辑器操作,在 My Novel 里加入 Editor Tools 模组后进行。场景编辑器创建了 `my_novel_park` 场景,再在小镇剧本里敲入一个选项和一个标签:
|
||||
|
||||

|
||||
|
||||
```scenario
|
||||
option "Go to the park" -> :park
|
||||
|
||||
:park
|
||||
switch_scene my_novel_park
|
||||
end
|
||||
```
|
||||
|
||||
保存之后,小镇立刻给出新的去路,选择它就会打开新场景:
|
||||
|
||||

|
||||
|
||||
想在自己的游戏里用上编辑器,可以在结构中加入 **Editor Tools** 模组,或者带着它们启动一次游戏:
|
||||
|
||||
```text
|
||||
godot --path . -- --game=novel_template --new --with-mods=editor_tools
|
||||
```
|
||||
|
||||
没有 `key=` 的新行在任何语言下都显示字面文本;等故事准备好翻译时,再加键和译文。
|
||||
|
||||
## 如果不奏效
|
||||
|
||||
1. **某个选择哪儿也到不了。** `switch_scene` 的名字必须等于目标场景的 `name`,大小写也要一致。
|
||||
2. **某个场景没有文本。** 它剧本的 `scene:` 头必须写这个场景的名字。
|
||||
3. **别的语言下文本是英文。** 这一行没有 `key=`,或者该语言的 `scenarios_<lang>.properties` 里缺这个键。
|
||||
4. **背景全黑。** 背景名字拼错了,或者拥有这张图的模组不在 `depends` 里。
|
||||
Reference in new issue
Block a user