From bbdfe95de3028f8ed73fd5ee13caad3e0a68d73f Mon Sep 17 00:00:00 2001 From: iisaev Date: Thu, 29 Oct 2026 09:26:11 +0100 Subject: [PATCH] Palette picks a whole object on a click; mod documentation --- .gitignore | 38 +++ docs/assets/collision.jpg | Bin 0 -> 55328 bytes docs/assets/editor-isometric.jpg | Bin 0 -> 54817 bytes docs/assets/editor-npc.jpg | Bin 0 -> 96199 bytes docs/assets/house-after.jpg | Bin 0 -> 31124 bytes docs/assets/house-before.jpg | Bin 0 -> 30673 bytes docs/en.md | 57 ++++ docs/es.md | 57 ++++ docs/ja.md | 57 ++++ docs/ko.md | 57 ++++ docs/ru.md | 57 ++++ docs/vi.md | 57 ++++ docs/zh.md | 57 ++++ locale/en.properties | 2 + locale/es.properties | 2 + locale/ja.properties | 2 + locale/ko.properties | 2 + locale/ru.properties | 2 + locale/ui_en.properties | 10 +- locale/ui_es.properties | 5 +- locale/ui_ja.properties | 5 +- locale/ui_ko.properties | 5 +- locale/ui_ru.properties | 10 +- locale/ui_vi.properties | 5 +- locale/ui_zh.properties | 5 +- locale/vi.properties | 2 + locale/zh.properties | 2 + manifest.json | 2 +- src/RpgAppearanceCatalog.cs | 41 +++ src/RpgCharacterCatalog.cs | 5 +- src/RpgEntityPicker.cs | 26 +- src/RpgMapDocument.cs | 16 + src/RpgMapEditorCanvas.cs | 311 +++++++++++--------- src/RpgMapEditorOverlay.cs | 11 + src/RpgMapEditorWindow.cs | 61 +++- src/RpgPickerEntry.cs | 7 +- src/RpgTilePalette.cs | 97 +++++- src/RpgTileStamp.cs | 49 +++ test_suites/edit/src/RpgEditorTestDriver.cs | 106 ++++++- tests/RpgMapDocumentTests.cs | 31 ++ tests/RpgTileStampTests.cs | 34 +++ 41 files changed, 1114 insertions(+), 179 deletions(-) create mode 100644 .gitignore create mode 100644 docs/assets/collision.jpg create mode 100644 docs/assets/editor-isometric.jpg create mode 100644 docs/assets/editor-npc.jpg create mode 100644 docs/assets/house-after.jpg create mode 100644 docs/assets/house-before.jpg create mode 100644 docs/en.md create mode 100644 docs/es.md create mode 100644 docs/ja.md create mode 100644 docs/ko.md create mode 100644 docs/ru.md create mode 100644 docs/vi.md create mode 100644 docs/zh.md create mode 100644 locale/en.properties create mode 100644 locale/es.properties create mode 100644 locale/ja.properties create mode 100644 locale/ko.properties create mode 100644 locale/ru.properties create mode 100644 locale/vi.properties create mode 100644 locale/zh.properties create mode 100644 src/RpgAppearanceCatalog.cs create mode 100644 src/RpgMapEditorOverlay.cs create mode 100644 src/RpgTileStamp.cs create mode 100644 tests/RpgTileStampTests.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f79a943 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Godot 4.x +.godot/ +.idea/ +sdk/ +bin/ +obj/ + +#ai +.omo/ +.opencode/ + +gen/ +obj/ +bin/ +art_sources/ + +*.tres~ +*.tscn~ + +# GDScript LSP +.godot/ + +# Export +*.exe +*.dmg +*.apk +*.aab +*.pck +*.zip +*.log + +# OS +.DS_Store +Thumbs.db + +# Editor +*.import +*.godot.uid diff --git a/docs/assets/collision.jpg b/docs/assets/collision.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e776f6f8970b821852661e66563e4074218db5f GIT binary patch literal 55328 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 O7J5Jdz55;VvG*Tdj??J? literal 0 HcmV?d00001 diff --git a/docs/assets/editor-isometric.jpg b/docs/assets/editor-isometric.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2aa4afeb1402b7e0fd8dad076c42caf657534523 GIT binary patch literal 54817 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 literal 0 HcmV?d00001 diff --git a/docs/assets/editor-npc.jpg b/docs/assets/editor-npc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..509fd1b4eeff3d4f9681d8a57c348f78cd50ffb9 GIT binary patch literal 96199 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.json`. +- Events go into the map's own events file in the same mod (`map_events//…`). Events that other files or other mods add to the map are shown faded with dashed frames and are never rewritten; their ids cannot be reused. +- **+** next to the file list makes a new map in the selected mod; after saving, the game knows it as a scene. +- Only mods installed as folders can be written to. + +## If something goes wrong + +1. **Play says the game does not know the scene.** The map needs `scenes/.json` in its mod. +2. **An event cannot be selected.** It belongs to another file or mod (dashed frame). +3. **An NPC does not talk.** Its event has no scenario, or its trigger is not the action key. +4. **Saving changes lines you did not touch.** The editor writes the files in its own order and adds default values of events, so a diff can show more than the edit. diff --git a/docs/es.md b/docs/es.md new file mode 100644 index 0000000..d64e22b --- /dev/null +++ b/docs/es.md @@ -0,0 +1,57 @@ +# RPG Map Editor — pinta mapas de tiles y coloca eventos + +El RPG Map Editor edita los mapas de tiles del motor RPG con el juego en marcha: las tres capas de tiles, muros y pasos, el punto de inicio del jugador, los combates aleatorios y los eventos — personajes, carteles, puertas, objetos que recoger. Al guardar, el mapa se actualiza en el juego al instante, y **Jugar** te deja recorrerlo a pie. + +Se abre desde la caja de herramientas (el martillo de la barra) como **Editor de mapas RPG**, sobre el mapa en el que esté el jugador. + +## Una edición y su resultado en el juego + +La casa del anciano de RPG Plus antes de editar: + +![La casa del anciano en el juego: una habitación de madera con el anciano al fondo y un cofre a la derecha.](assets/house-before.jpg) + +En el editor: la pestaña **Appearance** (Apariencias), el sprite del mercader, **Place NPC** (Colocar PNJ), un clic en una casilla libre. El evento nuevo queda seleccionado en la capa **Eventos**, con sus propiedades a la derecha: + +![El Editor de mapas RPG sobre rpg_demo_game / rpg_elder_house.json: la lista Appearance con merchant · village/merchant seleccionado, el mapa con el anciano y el nuevo mercader enmarcados como eventos y marcos discontinuos alrededor de los eventos de otros archivos, y a la derecha las propiedades del mapa (tileset village, 12 × 10, punto de inicio 6, 8 mirando arriba) y el nuevo evento npc_village_merchant en 9, 3 con charset village/merchant, orientación abajo y activación por tecla de acción (E/F). La línea de estado dice que «merchant» se colocó como PNJ.](assets/editor-npc.jpg) + +Tras **guardar** (Ctrl+S), el mercader está en la casa: + +![La misma sala en el juego, ahora con el mercader a la derecha de la pared del fondo.](assets/house-after.jpg) + +Su diálogo y comportamiento se ajustan en las propiedades del evento: un escenario, una condición, un disparador. + +## Las capas y las herramientas + +- **Fondo**, **Principal**, **Frente** — las capas de tiles. Fondo y Principal pueden bloquear el paso con tiles sólidos; Frente se dibuja sobre los personajes y nunca bloquea. +- **Colisiones** — se pinta sobre los tiles: *Muro* (siempre bloqueado), *Paso* (siempre transitable) o *Auto* (según los tiles). +- **Eventos** — clic para seleccionar o arrastrar, doble clic en una casilla vacía para añadir, Supr para borrar. +- **Lápiz**, **Goma**, **Relleno**; el botón derecho borra, Alt+clic toma un tile, las teclas 1–5 cambian de capa y B/E/G los pinceles. +- **Deshacer**/**Rehacer** (Ctrl+Z / Ctrl+Y), la cuadrícula, el zoom (Ctrl+rueda). + +![La capa Colisiones de la casa del anciano: los muros pintados en rojo como Muro, el suelo abierto.](assets/collision.jpg) + +Las pestañas de la izquierda: **Casillas** (la paleta del tileset del mapa; los objetos enteros, como una casa o un árbol, se estampan de una vez), **Personajes** (personajes con atributos de combate, colocados como enemigos), **Objetos** (colocados como objetos que recoger, con cantidad) y **Appearance** (todos los sprites de los mods cargados, colocados como PNJ). + +La columna derecha reúne las propiedades del mapa: su clave de nombre, tileset, tamaño, zoom, luz fija y atmósfera, el punto de inicio con su orientación, y los combates aleatorios (cada ~N pasos, los grupos de enemigos tipo `slime; wolf,slime`). + +## Vista superior e isométrica + +El editor dibuja el mapa igual que lo dibuja el juego. El selector de vista de la barra cambia solo la vista previa; los datos del mapa quedan igual. La casa en la vista previa isométrica: + +![La casa del anciano en la vista previa isométrica del editor: la misma sala dibujada en isométrico, la paleta del tileset a la izquierda.](assets/editor-isometric.jpg) + +La vista del juego la fija el ajuste de la colección `tile.renderer` (`topdown` o `isometric`); `--editor-renderer=isometric` abre el editor directamente con la vista previa isométrica. + +## Qué archivos se escriben + +- El mapa en sí se guarda en su `maps/.json`. +- Los eventos van al archivo de eventos del propio mapa, en el mismo mod (`map_events//…`). Los eventos que otros archivos u otros mods añaden al mapa se muestran atenuados con marcos discontinuos y nunca se reescriben; sus ids no se pueden reutilizar. +- **+** junto a la lista de archivos crea un mapa nuevo en el mod elegido; tras guardar, el juego lo conoce como escena. +- Solo se pueden escribir los mods instalados como carpetas. + +## Si algo falla + +1. **Jugar dice que el juego no conoce la escena.** El mapa necesita un `scenes/.json` en su mod. +2. **Un evento no se deja seleccionar.** Pertenece a otro archivo o mod (marco discontinuo). +3. **Un PNJ no habla.** Su evento no tiene escenario, o su activación no es la tecla de acción. +4. **Al guardar cambian líneas que no tocaste.** El editor escribe los archivos en su propio orden y añade valores por defecto de los eventos, así que un diff puede mostrar más que la edición. diff --git a/docs/ja.md b/docs/ja.md new file mode 100644 index 0000000..fb18c1e --- /dev/null +++ b/docs/ja.md @@ -0,0 +1,57 @@ +# RPG Map Editor — タイルマップを描き、イベントを置く + +RPG マップエディターは、実行中のゲームの上で RPG エンジンのタイルマップを編集します。3 つのタイルレイヤー、壁と通路、プレイヤーの開始地点、ランダムバトル、そしてイベント——キャラクター、看板、ドア、拾えるアイテム。保存するとマップはすぐにゲームへ反映され、**プレイ**で実際に歩き回れます。 + +ツールボックス(ツールバーのハンマー)から **RPG マップエディター** として開きます。対象は、プレイヤーが今いるマップです。 + +## 編集と、その結果のゲーム内での様子 + +RPG Plus の長老の家、編集前: + +![ゲーム内の長老の家: 木造の部屋で、奥に長老、右に宝箱。](assets/house-before.jpg) + +エディターでは、**Appearance**(外観)タブで商人のキャラチップを選び、**Place NPC**(NPC を配置)を押して、空いたマスをクリックします。新しいイベントは **イベント** レイヤーで選択され、プロパティが右に表示されます。 + +![rpg_demo_game / rpg_elder_house.json を開いた RPG マップエディター: 外観リストで merchant · village/merchant を選択、マップ上の長老と新しい商人はイベントとして枠囲みになり、他のファイルのイベントには破線の枠。右側にはマップのプロパティ(タイルセット village、12 × 10、開始地点 6, 8・向きは上)と新しいイベント npc_village_merchant(9, 3 にあり、キャラチップ village/merchant、向きは下、起動はアクションキー E/F)。ステータス行は「merchant」を NPC として配置したと表示しています。](assets/editor-npc.jpg) + +**保存**(Ctrl+S)のあと、商人が家に立っています: + +![ゲーム内の同じ部屋。今は奥の壁の右側に商人がいる。](assets/house-after.jpg) + +彼の会話と振る舞いはイベントのプロパティで設定します。シナリオ、条件、起動方法です。 + +## レイヤーとツール + +- **背景**、**メイン**、**前景** — タイルレイヤーです。背景とメインは solid なタイルで通行を妨げられます。前景はキャラクターの上に描かれ、決して妨げません。 +- **衝突** — タイルの上に塗ります。*壁*(常に通れない)、*通路*(常に通れる)、*自動*(タイルに従う)。 +- **イベント** — クリックで選択・ドラッグ、空いたマスのダブルクリックで追加、Del で削除。 +- **鉛筆**、**消しゴム**、**塗りつぶし**。右クリックで消し、Alt+クリックでタイルを拾い、1–5 キーでレイヤー、B/E/G でブラシを切り替えます。 +- **元に戻す**/**やり直す**(Ctrl+Z / Ctrl+Y)、グリッド、ズーム(Ctrl+ホイール)。 + +![長老の家の衝突レイヤー: 壁が「壁」として赤く塗られ、床は開いている。](assets/collision.jpg) + +左のタブは **タイル**(マップのタイルセットのパレット。家や木のようなオブジェクト全体を一度に置けます)、**キャラクター**(戦闘ステータスを持つキャラクター。敵として配置)、**アイテム**(個数つきの拾えるアイテムとして配置)、そして **Appearance**(読み込まれた MOD の全スプライト。NPC として配置)です。 + +右の列にはマップのプロパティが並びます。名前のキー、タイルセット、サイズ、拡大率、固定の環境光と雰囲気、開始地点と向き、そしてランダムバトル(約 N 歩ごと、敵グループは `slime; wolf,slime` のように書きます)。 + +## トップダウンとアイソメトリック + +エディターはゲームと同じようにマップを描きます。ツールバーのビュー切り替えはプレビューだけを変え、マップのデータは変わりません。アイソメトリックプレビューの家: + +![エディターのアイソメトリックプレビューに映る長老の家: 同じ部屋がアイソメトリックで描かれ、左にタイルセットのパレット。](assets/editor-isometric.jpg) + +ゲーム本体のビューはコレクション設定 `tile.renderer`(`topdown` か `isometric`)で決まります。`--editor-renderer=isometric` を付けると、エディターが最初からアイソメトリックプレビューで開きます。 + +## どのファイルが書かれるか + +- マップ本体は、そのマップの `maps/.json` に保存されます。 +- イベントは同じ MOD 内の、そのマップ自身のイベントファイル(`map_events/<マップ>/…`)へ書き込まれます。他のファイルや他の MOD がマップに加えたイベントは、破線の枠つきで薄く表示され、決して上書きされません。その id は使えません。 +- ファイル一覧の隣の **+** で、選択中の MOD に新しいマップを作れます。保存すれば、ゲームはそれをすぐにシーンとして認識します。 +- 書き込めるのは、フォルダーとしてインストールされた MOD だけです。 + +## うまくいかないとき + +1. **プレイで「ゲームはシーンを知らない」と出る。** そのマップの MOD に `scenes/.json` が必要です。 +2. **イベントが選べない。** それは別のファイルか MOD のイベントです(破線の枠)。 +3. **NPC が話さない。** イベントにシナリオがないか、起動がアクションキーになっていません。 +4. **保存すると、触っていない行まで変わる。** エディターは独自の順序でファイルを書き、イベントの既定値も書き込むため、diff が編集より多くの変更を示すことがあります。 diff --git a/docs/ko.md b/docs/ko.md new file mode 100644 index 0000000..dff058b --- /dev/null +++ b/docs/ko.md @@ -0,0 +1,57 @@ +# RPG Map Editor — 타일 맵을 그리고 이벤트 배치하기 + +RPG 맵 에디터는 게임이 실행되는 동안 RPG 엔진의 타일 맵을 편집합니다. 타일 레이어 3개, 벽과 통로, 플레이어 시작 지점, 랜덤 전투, 그리고 이벤트 — 캐릭터, 표지판, 문, 주울 수 있는 아이템까지. 저장하면 맵이 곧바로 게임에 반영되고, **플레이**로 직접 걸어 볼 수 있습니다. + +툴박스(툴바의 망치)에서 **RPG 맵 에디터**로 열리며, 플레이어가 서 있는 맵을 대상으로 합니다. + +## 편집 하나와 그 결과 + +편집 전의 RPG Plus 장로의 집: + +![게임 속 장로의 집: 나무 방, 안쪽에 선 장로, 오른쪽에 상자.](assets/house-before.jpg) + +에디터에서는 **Appearance**(외형) 탭에서 상인 캐릭터 시트를 고르고, **Place NPC**(NPC로 배치)를 누른 뒤 빈 칸을 클릭합니다. 새 이벤트는 **이벤트** 레이어에서 선택되고 속성이 오른쪽에 표시됩니다: + +![rpg_demo_game / rpg_elder_house.json을 연 RPG 맵 에디터: Appearance 목록에서 merchant · village/merchant 선택, 장로와 새 상인은 이벤트로 테두리가 쳐지고 다른 파일의 이벤트에는 점선 테두리가 그려짐. 오른쪽에는 맵 속성(타일셋 village, 12 × 10, 시작 지점 6, 8·위쪽 방향)과 새 이벤트 npc_village_merchant(9, 3에 위치, 캐릭터 시트 village/merchant, 아래 방향, 액션 키 E/F 발동). 상태 줄에는 "merchant"가 NPC로 배치되었다고 표시됨.](assets/editor-npc.jpg) + +**저장**(Ctrl+S) 후에는 상인이 집 안에 서 있습니다: + +![게임 속 같은 방, 이제 뒷벽 오른쪽에 상인이 있다.](assets/house-after.jpg) + +그의 대화와 행동은 이벤트 속성에서 정합니다. 시나리오, 조건, 발동 방식입니다. + +## 레이어와 도구 + +- **배경**, **메인**, **전경** — 타일 레이어입니다. 배경과 메인은 막힌 타일로 이동을 막을 수 있고, 전경은 캐릭터 위에 그려지며 절대 막지 않습니다. +- **충돌** — 타일 위에 칠합니다: *벽*(항상 막힘), *통로*(항상 지나갈 수 있음), *자동*(타일에 따름). +- **이벤트** — 클릭으로 선택하거나 끌고, 빈 칸을 더블클릭해 추가하고, Del로 삭제합니다. +- **연필**, **지우개**, **채우기**. 오른쪽 버튼은 지우기, Alt+클릭은 타일 집기, 1–5 키는 레이어 전환, B/E/G는 브러시 전환입니다. +- **되돌리기**/**다시 실행**(Ctrl+Z / Ctrl+Y), 격자, 확대·축소(Ctrl+휠). + +![장로의 집의 충돌 레이어: 벽이 "벽"으로 빨간색 칠해지고 바닥은 열려 있다.](assets/collision.jpg) + +왼쪽 탭: **타일**(맵 타일셋 팔레트, 집이나 나무 같은 온전한 물체를 한 번에 찍을 수 있음), **캐릭터**(전투 스탯이 있는 캐릭터, 적으로 배치), **아이템**(개수를 정해 주울 수 있게 배치), 그리고 **Appearance**(불러온 모드의 모든 스프라이트, NPC로 배치). + +오른쪽 열에는 맵 속성이 있습니다: 이름 키, 타일셋, 크기, 배율, 고정 환경광과 분위기, 시작 지점과 방향, 그리고 랜덤 전투(약 N걸음마다, `slime; wolf,slime` 같은 적 그룹). + +## 탑다운과 아이소메트릭 + +에디터는 게임과 같은 방식으로 맵을 그립니다. 툴바의 보기 전환기는 미리 보기만 바꾸고 맵 데이터는 그대로입니다. 아이소메트릭 미리 보기의 집: + +![에디터의 아이소메트릭 미리 보기에 보이는 장로의 집: 같은 방이 아이소메트릭으로 그려지고 왼쪽에 타일셋 팔레트가 있다.](assets/editor-isometric.jpg) + +게임 자체의 보기는 컬렉션 설정 `tile.renderer`(`topdown` 또는 `isometric`)가 정합니다. `--editor-renderer=isometric`로 시작하면 에디터가 처음부터 아이소메트릭 미리 보기로 열립니다. + +## 어떤 파일에 기록되는가 + +- 맵 자체는 자기 `maps/.json`에 저장됩니다. +- 이벤트는 같은 모드 안의 그 맵 고유의 이벤트 파일(`map_events/<맵>/…`)에 기록됩니다. 다른 파일이나 다른 모드가 맵에 추가한 이벤트는 점선 테두리와 함께 흐리게 표시되며 절대 다시 쓰이지 않고, 그 id는 재사용할 수 없습니다. +- 파일 목록 옆의 **+**는 선택한 모드에 새 맵을 만듭니다. 저장하면 게임이 곧바로 씬으로 인식합니다. +- 기록할 수 있는 것은 폴더로 설치된 모드뿐입니다. + +## 문제가 생겼을 때 + +1. **플레이가 게임이 씬을 모른다고 말한다.** 그 맵의 모드에 `scenes/.json`이 필요합니다. +2. **이벤트가 선택되지 않는다.** 다른 파일이나 모드의 것입니다(점선 테두리). +3. **NPC가 말하지 않는다.** 이벤트에 시나리오가 없거나, 발동이 액션 키가 아닙니다. +4. **저장하면 건드리지 않은 줄까지 바뀐다.** 에디터는 자기 순서대로 파일을 쓰고 이벤트의 기본값도 채워 넣으므로, diff가 편집보다 많은 것을 보여 줄 수 있습니다. diff --git a/docs/ru.md b/docs/ru.md new file mode 100644 index 0000000..1ccb250 --- /dev/null +++ b/docs/ru.md @@ -0,0 +1,57 @@ +# RPG Map Editor — рисование тайловых карт и расстановка событий + +RPG Map Editor правит тайловые карты движка RPG прямо во время игры: три слоя тайлов, стены и проходы, точку появления героя, случайные бои и события — персонажей, таблички, двери, подбираемые предметы. Сохранение сразу обновляет карту в запущенной игре, а кнопка **Играть** позволяет по ней пройтись. + +Открывается редактор из набора инструментов (молоток на панели инструментов) как **Редактор RPG-карт** — для той карты, на которой сейчас стоит игрок. + +## Правка и её результат в игре + +Дом старейшины из RPG Plus до правки: + +![Дом старейшины в игре: деревянная комната, в глубине стоит старейшина, справа сундук.](assets/house-before.jpg) + +В редакторе: вкладка **Внешность**, спрайт торговца, кнопка **Разместить NPC**, клик по свободной клетке. Новое событие выбрано на слое **События**, его свойства — справа: + +![Редактор RPG-карт на файле rpg_demo_game / rpg_elder_house.json: список «Внешность» с выбранным merchant · village/merchant, карта, где старейшина и новый торговец обведены рамками как события, а события из других файлов — пунктирными рамками; справа свойства карты (тайлсет village, 12 × 10, точка появления 6, 8 со взглядом вверх) и новое событие npc_village_merchant в клетке 9, 3 с чарсетом village/merchant, взглядом вниз и запуском по клавише действия (E/F). Строка состояния сообщает, что «merchant» размещён как NPC.](assets/editor-npc.jpg) + +После **сохранения** (Ctrl+S) торговец стоит в доме: + +![Та же комната в игре, теперь с торговцем справа у задней стены.](assets/house-after.jpg) + +Его диалог и поведение задаются в свойствах события: сценарий, условие, способ запуска. + +## Слои и инструменты + +- **Фон**, **Основной**, **Передний** — слои тайлов. Фон и Основной могут перекрывать проход непроходимыми тайлами; Передний рисуется поверх персонажей и никогда не блокирует. +- **Коллизии** — рисуется поверх тайлов: *Стена* (всегда непроходимо), *Проход* (всегда проходимо) или *Авто* (по тайлам). +- **События** — клик выбирает или тащит событие, двойной клик по пустой клетке добавляет, Del удаляет. +- **Карандаш**, **Ластик**, **Заливка**; правая кнопка мыши стирает, Alt+клик берёт тайл, клавиши 1–5 переключают слои, B/E/G — кисти. +- **Отменить**/**Вернуть** (Ctrl+Z / Ctrl+Y), сетка, масштаб (Ctrl+колесо). + +![Слой коллизий дома старейшины: стены закрашены красным как «Стена», пол открыт.](assets/collision.jpg) + +Вкладки слева: **Тайлы** (палитра тайлсета карты; целые объекты вроде дома или дерева можно ставить одним штампом), **Персонажи** (персонажи с боевыми характеристиками, размещаются как враги), **Предметы** (раскладываются как подбираемые предметы с количеством) и **Внешность** (все спрайты загруженных модов, размещаются как NPC). + +Правый столбец — свойства карты: ключ имени, тайлсет, размер, масштаб, своё освещение и атмосфера, точка появления и направление взгляда, а также случайные бои (примерно раз в N шагов, группы врагов вида `slime; wolf,slime`). + +## Вид сверху и изометрия + +Редактор рисует карту так же, как её рисует игра. Переключатель вида на панели инструментов меняет только предпросмотр; данные карты остаются прежними. Дом в изометрическом предпросмотре: + +![Дом старейшины в изометрическом предпросмотре редактора: та же комната в изометрии, слева палитра тайлсета.](assets/editor-isometric.jpg) + +Сам вид игры задаёт настройка коллекции `tile.renderer` (`topdown` или `isometric`); ключ `--editor-renderer=isometric` открывает редактор сразу в изометрическом предпросмотре. + +## Какие файлы записываются + +- Сама карта сохраняется в свой `maps/.json`. +- События попадают в файл событий этой карты в том же моде (`map_events/<карта>/…`). События, которые добавляют на карту другие файлы или другие моды, показываются приглушённо, с пунктирной рамкой, и никогда не перезаписываются; их id нельзя использовать повторно. +- **+** рядом со списком файлов создаёт новую карту в выбранном моде; после сохранения игра сразу знает её как сцену. +- Записывать можно только в моды, установленные папками. + +## Если что-то пошло не так + +1. **«Играть» сообщает, что игра не знает сцену.** Карте нужен файл `scenes/.json` в её моде. +2. **Событие не выбирается.** Оно принадлежит другому файлу или другому моду (пунктирная рамка). +3. **NPC не разговаривает.** У его события нет сценария, либо запуск у него не по клавише действия. +4. **Сохранение меняет строки, которые вы не трогали.** Редактор записывает файлы в своём порядке и добавляет значения по умолчанию для полей событий, поэтому diff может показать больше, чем сама правка. diff --git a/docs/vi.md b/docs/vi.md new file mode 100644 index 0000000..71d964f --- /dev/null +++ b/docs/vi.md @@ -0,0 +1,57 @@ +# RPG Map Editor — vẽ bản đồ ô và đặt sự kiện + +Trình sửa bản đồ RPG hiệu chỉnh các bản đồ ô của nền RPG ngay khi trò chơi đang chạy: ba lớp ô, tường và lối đi, điểm xuất phát của người chơi, trận đấu ngẫu nhiên và các sự kiện — nhân vật, biển hiệu, cửa, vật phẩm nhặt được. Lưu xong bản đồ được cập nhật trong game ngay lập tức, còn **Chơi** cho bạn đi lại trên đó. + +Công cụ mở từ hộp công cụ (chiếc búa trên thanh công cụ) với tên **Trình sửa bản đồ RPG**, tác động lên bản đồ mà người chơi đang đứng. + +## Một lần sửa và kết quả trong game + +Nhà trưởng lão trong RPG Plus trước khi sửa: + +![Nhà trưởng lão trong game: căn phòng gỗ, trưởng lão đứng phía trong, bên phải là một chiếc rương.](assets/house-before.jpg) + +Trong trình soạn thảo: tab **Appearance** (Ngoại hình), sprite của thương nhân, **Place NPC** (Đặt làm NPC), rồi nhấp vào một ô trống. Sự kiện mới được chọn trên lớp **Sự kiện**, thuộc tính nằm bên phải: + +![Trình sửa bản đồ RPG đang mở rpg_demo_game / rpg_elder_house.json: danh sách Appearance chọn merchant · village/merchant, trưởng lão và thương nhân mới được viền như các sự kiện, sự kiện của các tệp khác có viền nét đứt; bên phải là thuộc tính bản đồ (tileset village, 12 × 10, điểm xuất phát 6, 8 hướng lên) và sự kiện mới npc_village_merchant tại 9, 3 với charset village/merchant, hướng xuống, kích hoạt bằng phím hành động (E/F). Dòng trạng thái báo "merchant" đã được đặt làm NPC.](assets/editor-npc.jpg) + +Sau khi **lưu** (Ctrl+S), thương nhân đã đứng trong nhà: + +![Cùng căn phòng trong game, giờ có thương nhân ở bên phải bức tường sau.](assets/house-after.jpg) + +Lời thoại và hành vi của anh ta được đặt trong thuộc tính sự kiện: kịch bản, điều kiện, cách kích hoạt. + +## Các lớp và công cụ + +- **Nền**, **Chính**, **Phía trước** — các lớp ô. Nền và Chính có thể chặn đường bằng ô đặc; Phía trước vẽ đè lên nhân vật và không bao giờ chặn. +- **Va chạm** — vẽ đè lên các ô: *Tường* (luôn bị chặn), *Lối đi* (luôn đi được) hoặc *Tự động* (theo các ô). +- **Sự kiện** — nhấp để chọn hoặc kéo, nhấp đúp vào ô trống để thêm, Del để xóa. +- **Bút chì**, **Tẩy**, **Tô**; nút chuột phải xóa, Alt+nhấp lấy ô, phím 1–5 đổi lớp, B/E/G đổi bút. +- **Hoàn tác**/**Làm lại** (Ctrl+Z / Ctrl+Y), lưới, thu phóng (Ctrl+con lăn). + +![Lớp Va chạm của nhà trưởng lão: các bức tường được tô đỏ thành Tường, sàn mở.](assets/collision.jpg) + +Các tab bên trái: **Ô** (bảng màu của tileset bản đồ, vật thể nguyên vẹn như ngôi nhà hay cái cây có thể đóng dấu một lần), **Nhân vật** (nhân vật có chỉ số chiến đấu, đặt làm kẻ địch), **Vật phẩm** (đặt làm đồ nhặt kèm số lượng) và **Appearance** (mọi sprite của các mod đã nạp, đặt làm NPC). + +Cột bên phải chứa thuộc tính bản đồ: khóa tên, tileset, kích thước, thu phóng, ánh sáng nền cố định và bầu không khí, điểm xuất phát cùng hướng nhìn, và trận đấu ngẫu nhiên (khoảng mỗi N bước, các nhóm địch dạng `slime; wolf,slime`). + +## Nhìn từ trên và đẳng cự + +Trình soạn thảo vẽ bản đồ đúng theo cách game vẽ. Bộ chuyển đổi chế độ xem trên thanh công cụ chỉ đổi phần xem trước; dữ liệu bản đồ giữ nguyên. Ngôi nhà trong bản xem trước đẳng cự: + +![Nhà trưởng lão trong bản xem trước đẳng cự của trình soạn thảo: cùng căn phòng vẽ theo góc đẳng cự, bảng màu tileset bên trái.](assets/editor-isometric.jpg) + +Chế độ xem của game do cài đặt bộ sưu tập `tile.renderer` (`topdown` hoặc `isometric`) quyết định; `--editor-renderer=isometric` mở trình soạn thảo ngay ở bản xem trước đẳng cự. + +## Tệp nào được ghi + +- Bản đồ được lưu vào `maps/.json` của chính nó. +- Sự kiện được ghi vào tệp sự kiện riêng của bản đồ trong cùng mod (`map_events//…`). Các sự kiện do tệp khác hoặc mod khác thêm vào bản đồ được hiển thị mờ với viền nét đứt và không bao giờ bị ghi đè; không thể tái sử dụng id của chúng. +- **+** cạnh danh sách tệp tạo bản đồ mới trong mod đang chọn; sau khi lưu, game nhận nó là một cảnh ngay lập tức. +- Chỉ có thể ghi vào các mod được cài dưới dạng thư mục. + +## Khi có trục trặc + +1. **Chơi báo game không biết cảnh này.** Bản đồ cần `scenes/.json` trong mod của nó. +2. **Không chọn được sự kiện.** Nó thuộc về tệp hoặc mod khác (viền nét đứt). +3. **NPC không nói chuyện.** Sự kiện của nó không có kịch bản, hoặc cách kích hoạt không phải phím hành động. +4. **Lưu làm thay cả những dòng bạn không đụng tới.** Trình soạn thảo ghi tệp theo thứ tự riêng và thêm các giá trị mặc định của sự kiện, nên diff có thể hiển thị nhiều hơn lần sửa của bạn. diff --git a/docs/zh.md b/docs/zh.md new file mode 100644 index 0000000..f753f7d --- /dev/null +++ b/docs/zh.md @@ -0,0 +1,57 @@ +# RPG Map Editor — 绘制图块地图、摆放事件 + +RPG 地图编辑器在游戏运行时编辑 RPG 引擎的图块地图:三个图块图层、墙壁与通道、玩家出生点、随机战斗,以及事件——人物、告示牌、门、可拾取的物品。保存后地图立即在游戏中更新,按 **试玩** 就能走一走。 + +它从工具箱(工具栏上的锤子)打开,名为 **RPG 地图编辑器**,作用于玩家当前所在的地图。 + +## 一次编辑及其在游戏中的结果 + +RPG Plus 中长者之家编辑前的样子: + +![游戏中的长者之家:木质房间,长者站在里侧,右边有一个宝箱。](assets/house-before.jpg) + +在编辑器里:**Appearance**(外观)标签页、商人的行走图、**Place NPC**(放置 NPC),再点一个空格子。新事件会在 **事件** 图层中被选中,属性显示在右侧: + +![RPG 地图编辑器打开 rpg_demo_game / rpg_elder_house.json:Appearance 列表中选中的是 merchant · village/merchant,地图上的长者和新商人都作为事件被框出,其他文件的事件则用虚线框;右侧是地图属性(图块集 village、12 × 10、出生点 6, 8 朝上)和新事件 npc_village_merchant(在 9, 3,行走图 village/merchant,朝下,触发方式为动作键 E/F)。状态栏显示“merchant”已作为 NPC 放置。](assets/editor-npc.jpg) + +**保存**(Ctrl+S)之后,商人就站进了屋里: + +![游戏中的同一个房间,现在后墙右侧多了一位商人。](assets/house-after.jpg) + +他的对话与行为在事件属性里设置:剧本、条件、触发方式。 + +## 图层与工具 + +- **背景层**、**主层**、**前景层** — 图块图层。背景层和主层可以用实心图块挡住去路;前景层画在角色之上,从不挡路。 +- **碰撞** — 画在图块之上:*墙*(始终阻挡)、*通道*(始终可走)或 *自动*(取决于图块)。 +- **事件** — 点击选中或拖动,双击空格子添加,Del 删除。 +- **铅笔**、**橡皮**、**填充**;鼠标右键擦除,Alt+点击吸取图块,数字键 1–5 切换图层,B/E/G 切换画笔。 +- **撤销**/**重做**(Ctrl+Z / Ctrl+Y)、网格、缩放(Ctrl+滚轮)。 + +![长者之家的碰撞层:墙壁被涂成红色的“墙”,地面开放。](assets/collision.jpg) + +左侧标签页:**瓦片**(地图图块集的调色板,整栋房子或整棵树这样的完整对象可以一次盖印)、**角色**(带战斗属性的角色,放置为敌人)、**物品**(放置为带数量的可拾取物)和 **Appearance**(已加载模组的全部行走图,放置为 NPC)。 + +右栏是地图属性:名称键、图块集、尺寸、缩放、固定环境光与氛围、出生点和朝向,以及随机战斗(约每 N 步一次,敌人组形如 `slime; wolf,slime`)。 + +## 俯视与等距 + +编辑器绘制地图的方式与游戏一致。工具栏上的视图切换器只改变预览;地图数据保持不变。等距预览中的房子: + +![编辑器等距预览中的长者之家:同一个房间以等距视角绘制,左侧是图块集调色板。](assets/editor-isometric.jpg) + +游戏本身采用哪种视图由集合设置 `tile.renderer`(`topdown` 或 `isometric`)决定;加上 `--editor-renderer=isometric` 会直接以等距预览打开编辑器。 + +## 会写入哪些文件 + +- 地图本身保存到它自己的 `maps/.json`。 +- 事件写入同一模组中该地图自己的事件文件(`map_events/<地图>/…`)。其他文件或其他模组加进这张地图的事件会以虚线框半透明显示,永远不会被重写;它们的 id 不能重复使用。 +- 文件列表旁的 **+** 在所选模组里新建地图;保存之后,游戏立刻把它当作场景。 +- 只有以文件夹形式安装的模组才能写入。 + +## 如果遇到问题 + +1. **试玩提示游戏不认识该场景。** 地图需要在它的模组里有 `scenes/.json`。 +2. **事件选不中。** 它属于另一个文件或模组(虚线框)。 +3. **NPC 不说话。** 它的事件没有剧本,或者触发方式不是动作键。 +4. **保存改动了你没碰过的行。** 编辑器按自己的顺序写文件,还会补上事件的默认值,所以 diff 显示的内容可能多于这次编辑。 diff --git a/locale/en.properties b/locale/en.properties new file mode 100644 index 0000000..c228abc --- /dev/null +++ b/locale/en.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = RPG Map Editor +mod_rpg_editor_desc = Paints the RPG engine's tile maps while the game runs: three tile layers, collision, events, spawn and random encounters. A save updates the world at once. diff --git a/locale/es.properties b/locale/es.properties new file mode 100644 index 0000000..9243c6f --- /dev/null +++ b/locale/es.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = Editor de mapas RPG +mod_rpg_editor_desc = Pinta los mapas de tiles del motor RPG con el juego en marcha: tres capas de tiles, colisiones, eventos, punto de inicio y encuentros aleatorios. Un guardado actualiza el mundo al instante. diff --git a/locale/ja.properties b/locale/ja.properties new file mode 100644 index 0000000..8b6a79a --- /dev/null +++ b/locale/ja.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = RPG マップエディター +mod_rpg_editor_desc = 実行中のゲームで RPG エンジンのタイルマップを描きます。タイルレイヤー 3 枚、衝突、イベント、開始地点、ランダムエンカウント。保存すると世界がすぐに更新されます。 diff --git a/locale/ko.properties b/locale/ko.properties new file mode 100644 index 0000000..00413e1 --- /dev/null +++ b/locale/ko.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = RPG 맵 에디터 +mod_rpg_editor_desc = 게임이 실행되는 동안 RPG 엔진의 타일 맵을 그립니다. 타일 레이어 3개, 충돌, 이벤트, 시작 지점, 랜덤 인카운터. 저장하면 세계가 곧바로 갱신됩니다. diff --git a/locale/ru.properties b/locale/ru.properties new file mode 100644 index 0000000..79ebecc --- /dev/null +++ b/locale/ru.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = Редактор RPG-карт +mod_rpg_editor_desc = Рисует тайловые карты движка RPG прямо во время игры: три слоя тайлов, коллизии, события, точка появления и случайные встречи. Сохранение мгновенно обновляет мир. diff --git a/locale/ui_en.properties b/locale/ui_en.properties index c8717e0..959d64f 100644 --- a/locale/ui_en.properties +++ b/locale/ui_en.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = RPG Map Editor -mod_rpg_editor_desc = Editor of tile maps for the RPG world: three tile layers, the collision layer and map events, with undo and a live preview in the running game. tools/rpg_editor/title = RPG Map Editor tools/rpg_editor/hint = LMB — paint · RMB — erase · Alt+LMB — pick tile · events: click — select/drag, double-click — add, Del — delete · 1–5 layers · B/E/G brush · wheel/Shift+wheel, MMB drag — scroll · Ctrl+wheel zoom · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = Back @@ -79,6 +77,11 @@ tools/rpg_editor/problem_event_id = The event at {0} has no id. tools/rpg_editor/problem_event_duplicate = Two events share the id "{0}". tools/rpg_editor/tab_tiles = Tiles tools/rpg_editor/tab_characters = Characters +tools/rpg_editor/tab_appearances = Appearance +tools/rpg_editor/appearance_search = Search appearances by name or path +tools/rpg_editor/appearances_hint = All appearances from enabled mods, including villagers without combat stats. Pick a sprite, press the button and choose a map cell. +tools/rpg_editor/place_appearance = Place NPC +tools/rpg_editor/place_appearance_tip = Create an NPC with this appearance; set its dialogue and behaviour in the event properties tools/rpg_editor/character_search = Search by name or id tools/rpg_editor/place_npc = Place as NPC tools/rpg_editor/place_npc_tip = Put the character on the map as an event talking on E/F; write its lines in the scenario lines @@ -119,3 +122,6 @@ tools/rpg_editor/route_steps = Steps tools/rpg_editor/route_steps_tip = up, down, left, right, wait, random, toward, away, face_up/down/left/right. Separate with commas. Empty = stand still. tools/rpg_editor/route_every = Pause between steps (s) tools/rpg_editor/route_repeat = Repeat route + +tools/rpg_editor/view_topdown=Top-down +tools/rpg_editor/view_isometric=Isometric diff --git a/locale/ui_es.properties b/locale/ui_es.properties index abba442..05504b9 100644 --- a/locale/ui_es.properties +++ b/locale/ui_es.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = Editor de mapas RPG -mod_rpg_editor_desc = Editor de mapas de casillas del mundo RPG: tres capas de casillas, la capa de colisiones y los eventos del mapa, con deshacer y vista previa en vivo en el juego en marcha. tools/rpg_editor/title = Editor de mapas RPG tools/rpg_editor/hint = Clic izq.: pintar · clic der.: borrar · Alt+clic izq.: tomar casilla · eventos: clic: seleccionar/arrastrar, doble clic: añadir, Supr: borrar · 1–5 capas · B/E/G pincel · rueda/Mayús+rueda, arrastrar con botón central: desplazar · Ctrl+rueda: zoom · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = Fondo @@ -110,3 +108,6 @@ tools/rpg_editor/light_color_tip = #rrggbb o #rrggbbaa (alfa = intensidad); vac tools/rpg_editor/ambient = Luz ambiental fija tools/rpg_editor/ambient_tip = #rrggbb: el mapa siempre tiene esta luz (una sala con lámpara); vacío: según la hora del día tools/rpg_editor/autotile = autotile + +tools/rpg_editor/view_topdown=Vista superior +tools/rpg_editor/view_isometric=Isometría diff --git a/locale/ui_ja.properties b/locale/ui_ja.properties index bd4d510..80e0f3b 100644 --- a/locale/ui_ja.properties +++ b/locale/ui_ja.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = RPG マップエディター -mod_rpg_editor_desc = RPG ワールドのタイルマップエディター:3 つのタイルレイヤー、衝突レイヤー、マップのイベント。元に戻す機能と、実行中のゲームでのライブプレビュー付き。 tools/rpg_editor/title = RPG マップエディター tools/rpg_editor/hint = 左クリック——描く · 右クリック——消す · Alt+左クリック——タイルを拾う · イベント:クリック——選択/ドラッグ、ダブルクリック——追加、Del——削除 · 1–5 レイヤー · B/E/G ブラシ · ホイール/Shift+ホイール、中ボタンドラッグ——スクロール · Ctrl+ホイールでズーム · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = 背景 @@ -110,3 +108,6 @@ tools/rpg_editor/light_color_tip = #rrggbb か #rrggbbaa(アルファが強さ tools/rpg_editor/ambient = 固定の環境光 tools/rpg_editor/ambient_tip = #rrggbb:マップは常にこの明るさ(ランプのある部屋)。空なら時刻に従う tools/rpg_editor/autotile = オートタイル + +tools/rpg_editor/view_topdown=見下ろし +tools/rpg_editor/view_isometric=アイソメトリック diff --git a/locale/ui_ko.properties b/locale/ui_ko.properties index 29d7e92..e83334b 100644 --- a/locale/ui_ko.properties +++ b/locale/ui_ko.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = RPG 맵 에디터 -mod_rpg_editor_desc = RPG 월드의 타일 맵 에디터: 타일 레이어 3개, 충돌 레이어, 맵 이벤트. 되돌리기와 실행 중인 게임에서의 실시간 미리 보기 지원. tools/rpg_editor/title = RPG 맵 에디터 tools/rpg_editor/hint = 좌클릭 — 그리기 · 우클릭 — 지우기 · Alt+좌클릭 — 타일 집기 · 이벤트: 클릭 — 선택/드래그, 더블클릭 — 추가, Del — 삭제 · 1–5 레이어 · B/E/G 브러시 · 휠/Shift+휠, 가운데 버튼 드래그 — 스크롤 · Ctrl+휠 확대/축소 · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = 배경 @@ -110,3 +108,6 @@ tools/rpg_editor/light_color_tip = #rrggbb 또는 #rrggbbaa(알파가 세기), tools/rpg_editor/ambient = 고정 환경광 tools/rpg_editor/ambient_tip = #rrggbb: 맵이 항상 이 빛으로 비침(램프가 있는 방), 비우면 시간대에 따름 tools/rpg_editor/autotile = 오토타일 + +tools/rpg_editor/view_topdown=탑다운 +tools/rpg_editor/view_isometric=아이소메트릭 diff --git a/locale/ui_ru.properties b/locale/ui_ru.properties index 20bb433..f85fad6 100644 --- a/locale/ui_ru.properties +++ b/locale/ui_ru.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = Редактор RPG-карт -mod_rpg_editor_desc = Редактор тайловых карт RPG-мира: три слоя тайлов, слой коллизий и события на карте, с отменой и живым предпросмотром в запущенной игре. tools/rpg_editor/title = Редактор RPG-карт tools/rpg_editor/hint = ЛКМ — рисовать · ПКМ — стирать · Alt+ЛКМ — взять тайл · события: клик — выбрать/тащить, двойной клик — добавить, Del — удалить · 1–5 слои · B/E/G кисть · колесо/Shift+колесо, СКМ — прокрутка · Ctrl+колесо масштаб · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = Фон @@ -79,6 +77,11 @@ tools/rpg_editor/problem_event_id = У события в клетке {0} нет tools/rpg_editor/problem_event_duplicate = Два события с одинаковым id «{0}». tools/rpg_editor/tab_tiles = Тайлы tools/rpg_editor/tab_characters = Персонажи +tools/rpg_editor/tab_appearances = Внешность +tools/rpg_editor/appearance_search = Поиск внешности по имени или пути +tools/rpg_editor/appearances_hint = Все варианты внешности из подключённых модов, включая жителей без боевых характеристик. Выберите спрайт, нажмите кнопку и укажите клетку на карте. +tools/rpg_editor/place_appearance = Разместить NPC +tools/rpg_editor/place_appearance_tip = Создать NPC с выбранной внешностью; диалог и поведение задаются в свойствах события tools/rpg_editor/character_search = Поиск по имени или id tools/rpg_editor/place_npc = На карту: NPC tools/rpg_editor/place_npc_tip = Поставить персонажа как событие с разговором на E/F; реплики пишутся в «Строках сценария» @@ -119,3 +122,6 @@ tools/rpg_editor/route_steps = Шаги tools/rpg_editor/route_steps_tip = up, down, left, right, wait, random, toward, away, face_up/down/left/right. Через запятую. Пусто — стоять на месте. tools/rpg_editor/route_every = Пауза между шагами (с) tools/rpg_editor/route_repeat = Повторять маршрут + +tools/rpg_editor/view_topdown=Вид сверху +tools/rpg_editor/view_isometric=Изометрия diff --git a/locale/ui_vi.properties b/locale/ui_vi.properties index 4f98d73..f3a8ad3 100644 --- a/locale/ui_vi.properties +++ b/locale/ui_vi.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = Trình sửa bản đồ RPG -mod_rpg_editor_desc = Trình sửa bản đồ ô cho thế giới RPG: ba lớp ô, lớp va chạm và sự kiện trên bản đồ, có hoàn tác và xem trước trực tiếp trong game đang chạy. tools/rpg_editor/title = Trình sửa bản đồ RPG tools/rpg_editor/hint = Chuột trái — vẽ · chuột phải — xóa · Alt+chuột trái — lấy ô · sự kiện: nhấp — chọn/kéo, nhấp đúp — thêm, Del — xóa · 1–5 lớp · B/E/G bút · cuộn/Shift+cuộn, kéo chuột giữa — di chuyển · Ctrl+cuộn thu phóng · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = Nền @@ -110,3 +108,6 @@ tools/rpg_editor/light_color_tip = #rrggbb hoặc #rrggbbaa (alpha là cường tools/rpg_editor/ambient = Ánh sáng nền cố định tools/rpg_editor/ambient_tip = #rrggbb: bản đồ luôn sáng như vậy (phòng có đèn); để trống thì theo giờ trong ngày tools/rpg_editor/autotile = ô tự động + +tools/rpg_editor/view_topdown=Nhìn từ trên +tools/rpg_editor/view_isometric=Đẳng cự diff --git a/locale/ui_zh.properties b/locale/ui_zh.properties index 2cfb836..59fabab 100644 --- a/locale/ui_zh.properties +++ b/locale/ui_zh.properties @@ -1,5 +1,3 @@ -mod_rpg_editor_name = RPG 地图编辑器 -mod_rpg_editor_desc = RPG 世界的瓦片地图编辑器:三层瓦片、碰撞层和地图事件,支持撤销,并在运行中的游戏里实时预览。 tools/rpg_editor/title = RPG 地图编辑器 tools/rpg_editor/hint = 左键——绘制 · 右键——擦除 · Alt+左键——吸取瓦片 · 事件:点击——选择/拖动,双击——添加,Del——删除 · 1–5 切换图层 · B/E/G 画笔 · 滚轮/Shift+滚轮、中键拖动——滚动 · Ctrl+滚轮缩放 · Ctrl+Z/Y · Ctrl+S tools/rpg_editor/layer_back = 背景层 @@ -110,3 +108,6 @@ tools/rpg_editor/light_color_tip = #rrggbb 或 #rrggbbaa(alpha 为强度); tools/rpg_editor/ambient = 固定环境光 tools/rpg_editor/ambient_tip = #rrggbb:地图始终以此光照(点灯的房间);留空则随时间变化 tools/rpg_editor/autotile = 自动图块 + +tools/rpg_editor/view_topdown=俯视 +tools/rpg_editor/view_isometric=等距 diff --git a/locale/vi.properties b/locale/vi.properties new file mode 100644 index 0000000..aa5abef --- /dev/null +++ b/locale/vi.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = Trình sửa bản đồ RPG +mod_rpg_editor_desc = Vẽ các bản đồ ô của nền RPG ngay khi trò chơi đang chạy: ba lớp ô, va chạm, sự kiện, điểm xuất hiện và chạm trán ngẫu nhiên. Lưu xong thế giới được cập nhật ngay lập tức. diff --git a/locale/zh.properties b/locale/zh.properties new file mode 100644 index 0000000..28ecfb4 --- /dev/null +++ b/locale/zh.properties @@ -0,0 +1,2 @@ +mod_rpg_editor_name = RPG 地图编辑器 +mod_rpg_editor_desc = 在游戏运行时绘制 RPG 引擎的图块地图:三个图块图层、碰撞、事件、出生点和随机遇敌。一次保存,世界立即更新。 diff --git a/manifest.json b/manifest.json index c6c07b8..7f2f427 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "RPG Map Editor", "version": "1.0.0", "author": "ct", - "description": "Editor of the rpg mod's tile maps (maps/*.json): paints the back, main and front tile layers and the collision layer with a pencil, an eraser and a flood fill from the tileset palette, places and edits map events (look, trigger, scenario, inline commands, teleport, condition), sets the map size, spawn and random encounters. Undo/redo, live update of the running world after saving, play from the spawn. Opens from the main menu tools and the in-game toolbar.", + "description": "Paints the RPG engine's tile maps while the game runs: three tile layers, collision, events, spawn and random encounters. A save updates the world at once.", "category": "tools, editor", "sources": [ "src/**/*.cs" diff --git a/src/RpgAppearanceCatalog.cs b/src/RpgAppearanceCatalog.cs new file mode 100644 index 0000000..8fe7cad --- /dev/null +++ b/src/RpgAppearanceCatalog.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Cthangover.Core.Mods; +using Cthangover.Core.Mods.Resolvers; +using Cthangover.Mods.Rpg; + +namespace Cthangover.Tools.RpgEditor +{ + /// + /// All map charsets supplied by the loaded mods, including NPC artwork without + /// a character entity. Paths stay distinct even when two mods use the same file name. + /// These entries describe appearance only and must never be used as battle enemy ids. + /// + public static class RpgAppearanceCatalog + { + /// Reads charset images anew and builds standing-frame previews for the picker. + public static List Load(RpgTextures textures) + { + var files = Files.Collect(RpgTextures.CharsetGroup); + return (files?.Keys.AsEnumerable() ?? Enumerable.Empty()) + .Where(IsImage) + .Select(file => Path.ChangeExtension(file, null)) + .Distinct(StringComparer.OrdinalIgnoreCase) + .OrderBy(path => path, StringComparer.OrdinalIgnoreCase) + .Select(path => new RpgPickerEntry + { + Id = path, + Name = Path.GetFileName(path), + Look = path, + Icon = RpgCharacterCatalog.FrontFrame(textures.Charset(path)), + OwnsIcon = true + }) + .ToList(); + } + + private static bool IsImage(string path) + => ModConfig.Instance.GetTextureExtensionSet().Contains(Path.GetExtension(path)); + } +} diff --git a/src/RpgCharacterCatalog.cs b/src/RpgCharacterCatalog.cs index 4446135..93ef703 100644 --- a/src/RpgCharacterCatalog.cs +++ b/src/RpgCharacterCatalog.cs @@ -40,7 +40,8 @@ namespace Cthangover.Tools.RpgEditor Id = info.ID, Name = string.IsNullOrEmpty(info.Name) ? info.ID : TranslationServer.Translate(info.Name).ToString(), Look = charset, - Icon = FrontFrame(charset == null ? null : textures.Charset(charset)) + Icon = FrontFrame(charset == null ? null : textures.Charset(charset)), + OwnsIcon = true }; private static string CharsetOf(CharacterInfo info, HashSet charsets) @@ -54,7 +55,7 @@ namespace Cthangover.Tools.RpgEditor return candidates.FirstOrDefault(path => !string.IsNullOrEmpty(path) && charsets.Contains(path)); } - private static Texture2D FrontFrame(Texture2D image) + internal static Texture2D FrontFrame(Texture2D image) { if (image == null) return null; diff --git a/src/RpgEntityPicker.cs b/src/RpgEntityPicker.cs index 5562ff0..7f8be7c 100644 --- a/src/RpgEntityPicker.cs +++ b/src/RpgEntityPicker.cs @@ -84,13 +84,14 @@ namespace Cthangover.Tools.RpgEditor /// Reads the entries again and reapplies the search. public void Reload() { + var selectedId = Selected?.Id; + ReleaseEntries(); all = Source?.Invoke() ?? new List(); - Filter(); + Filter(selectedId); } - private void Filter() + private void Filter(string selectedId) { - var selectedId = Selected?.Id; var query = search.Text.Trim(); shown.Clear(); shown.AddRange(all.Where(entry => query.Length == 0 @@ -108,6 +109,23 @@ namespace Cthangover.Tools.RpgEditor UpdateButtons(); } + /// Drop the list's native references before disposing entry-owned previews; source images remain cache-owned. + public override void _ExitTree() + { + ReleaseEntries(); + Source = null; + } + + private void ReleaseEntries() + { + list.Clear(); + shown.Clear(); + var owned = new HashSet(all.Where(e => e.OwnsIcon && e.Icon != null).Select(e => e.Icon)); + all.Clear(); + foreach (var icon in owned) + icon.Dispose(); + } + private void Run(Action action) { if (Selected != null) @@ -120,7 +138,7 @@ namespace Cthangover.Tools.RpgEditor button.Disabled = Selected == null; } - private void OnSearchChanged(string text) => Filter(); + private void OnSearchChanged(string text) => Filter(Selected?.Id); private void OnItemSelected(long index) => UpdateButtons(); } diff --git a/src/RpgMapDocument.cs b/src/RpgMapDocument.cs index b138732..13771a2 100644 --- a/src/RpgMapDocument.cs +++ b/src/RpgMapDocument.cs @@ -146,6 +146,22 @@ namespace Cthangover.Tools.RpgEditor return true; } + /// Places a rectangular selection, skipping padding and clipping at map edges; one history step is recorded by the caller. + public int Stamp(RpgEditLayer layer, int x, int y, RpgTileStamp stamp) + { + if (layer > RpgEditLayer.Front || stamp == null) + return 0; + var changed = 0; + for (var sy = 0; sy < stamp.Height; sy++) + for (var sx = 0; sx < stamp.Width; sx++) + { + var tile = stamp.TileAt(sx, sy); + if (tile >= 0 && Paint(layer, x + sx, y + sy, tile, RpgCollision.Auto)) + changed++; + } + return changed; + } + /// /// Flood-fills (4-neighbourhood) the area of cells equal to the start /// cell with a tile or a collision code. Returns the number of cells changed. diff --git a/src/RpgMapEditorCanvas.cs b/src/RpgMapEditorCanvas.cs index db087c4..23188c4 100644 --- a/src/RpgMapEditorCanvas.cs +++ b/src/RpgMapEditorCanvas.cs @@ -1,10 +1,12 @@ -using System; -using Cthangover.Core.UI.Theming; -using Cthangover.Mods.Rpg; -using Godot; - namespace Cthangover.Tools.RpgEditor { + using System; + using Cthangover.Core.UI.Theming; + using Cthangover.Mods.Rpg; + using Cthangover.Mods.TileRender; + using Cthangover.Core.Events; + using Godot; + /// /// The map as the editor shows it: back, main and front tiles, the events /// (their charset frame or tile, else a marker), the spawn point, the @@ -37,6 +39,13 @@ namespace Cthangover.Tools.RpgEditor private static readonly Color LockedModulate = new(1f, 1f, 1f, 0.55f); private readonly RpgTextures textures = new(); + private ITileWorldPresentation preview; + private RpgRenderSceneBuilder builder; + private TileRenderScene previewScene; + private ITileProjection projection; + private RpgMapEditorOverlay overlay; + public string RendererId { get; private set; } = "topdown"; + public ITileWorldPresentation Preview => preview; private Vector2I? hover; private bool stroking; private RpgMapEvent dragged; @@ -63,6 +72,9 @@ namespace Cthangover.Tools.RpgEditor /// Atlas index the pencil and the fill put down. public int SelectedTile { get; set; } + /// Multi-cell brush selected in the object atlas; null uses SelectedTile. + public RpgTileStamp SelectedStamp { get; set; } + /// Collision code the pencil and the fill put down. public char SelectedCollision { get; set; } = RpgCollision.Block; @@ -99,11 +111,16 @@ namespace Cthangover.Tools.RpgEditor /// Creates the canvas; input comes through the GuiInput event. public RpgMapEditorCanvas() { + RendererId = Cthangover.Core.Games.ActiveGame.GetSetting("tile.renderer") ?? (TileRendererRegistry.Instance.Ids.Count == 1 ? TileRendererRegistry.Instance.Ids[0] : "topdown"); + foreach (var arg in OS.GetCmdlineUserArgs()) + if (arg.StartsWith("--editor-renderer=")) RendererId = arg.Substring(18); ClipContents = true; FocusMode = FocusModeEnum.Click; TextureFilter = TextureFilterEnum.Nearest; GuiInput += OnGuiInput; MouseExited += OnMouseExited; + overlay = new RpgMapEditorOverlay(this); + AddChild(overlay); } private float CellSize => (Tileset?.TileSize ?? 32) * Zoom; @@ -115,160 +132,168 @@ namespace Cthangover.Tools.RpgEditor Refresh(); } - /// Resizes to the map and redraws; call after any outside change. + public void SetRenderer(string id) + { + TileRendererRegistry.Instance.Resolve(id); + if (RendererId != id) { ReleasePreview(); projection = null; } + RendererId = id; + Refresh(); + } + + public override void _EnterTree() + { + TileRendererRegistry.Instance.Removing += OnRendererRemoving; + ModEventBus.Subscribe(OnModsReloaded); + } + public override void _ExitTree() + { + TileRendererRegistry.Instance.Removing -= OnRendererRemoving; + ModEventBus.Unsubscribe(OnModsReloaded); + ReleasePreview(); projection = null; builder?.Dispose(); textures.Dispose(); + } + + private void OnRendererRemoving(string id) + { + if (RendererId != id) return; + ReleasePreview(); projection = null; + } + private void OnModsReloaded(ModSetReloadedEvent evt) + { + if (!evt.Applied || Document == null) return; + ReleasePreview(); builder?.Dispose(); textures.Dispose(); + Tileset = RpgTilesetFactory.Instance.Get(Document.Map.Tileset); + Refresh(); + } + + private void ReleasePreview() + { + preview?.Dispose(); + preview = null; + previewScene?.Release(); + previewScene = null; + } + + /// The same renderer as runtime, with a static frame and authoring overlays. public void Refresh() { - var grid = Document?.Grid; - CustomMinimumSize = grid == null ? Vector2.Zero : new Vector2(grid.Width, grid.Height) * CellSize; + if (Document == null || Tileset == null) { ReleasePreview(); CustomMinimumSize = Vector2.Zero; QueueRedraw(); return; } + var factory = TileRendererRegistry.Instance.Resolve(RendererId); + projection = factory.Projection(Tileset.TileSize); + builder ??= new RpgRenderSceneBuilder(textures); + var previous = previewScene; + previewScene = builder.Build(Document.Map, Document.Grid, Tileset); + previewScene.Zoom = Zoom; + foreach (var visual in previewScene.Visuals) + visual.Tint = new Color(1, 1, 1, ActiveLayer <= RpgEditLayer.Front && visual.Layer != (int)ActiveLayer ? 0.45f : 1f); + if (preview == null) + { + preview = factory.Create(); + AddChild(preview.Root); + MoveChild(preview.Root, 0); + preview.Mount(previewScene); + } + else preview.Apply(new TileSceneChanges { BaseRevision = previous.Revision, Scene = previewScene }); + previous?.Release(); + CustomMinimumSize = preview.ContentBounds.Size * Zoom; + preview.Resize(CustomMinimumSize); + var frame = new TileFrame { Ambient = Colors.White, Focus = new Vector2(Document.Grid.Width, Document.Grid.Height) / 2 }; + foreach (var mapEvent in Document.LockedEvents) AddPreviewEvent(frame, builder, mapEvent, true); + foreach (var mapEvent in Document.Events) AddPreviewEvent(frame, builder, mapEvent, false); + preview.Present(frame, 0); + overlay.Position = preview.Root.Position; + overlay.Scale = preview.Root.Scale; QueueRedraw(); } - /// Draws the map. - public override void _Draw() + private void AddPreviewEvent(TileFrame frame, RpgRenderSceneBuilder builder, RpgMapEvent mapEvent, bool locked) { - DrawRect(new Rect2(Vector2.Zero, Size), UiTokens.Surface0); - var grid = Document?.Grid; - if (grid == null) - return; + frame.Actors.Add(new TileActorPose { Id = (locked ? "locked/" : "own/") + mapEvent.Id, + Position = new Vector2(mapEvent.X, mapEvent.Y), Visible = true, Look = builder.EventLook(mapEvent, Tileset), + Facing = (int)mapEvent.Dir, Charset = !string.IsNullOrEmpty(mapEvent.Sprite), Tint = locked ? LockedModulate : Colors.White }); + } - DrawRect(new Rect2(Vector2.Zero, new Vector2(grid.Width, grid.Height) * CellSize), Colors.Black); - DrawLayer(RpgLayer.Back); - DrawLayer(RpgLayer.Main); - DrawEvents(); - DrawLayer(RpgLayer.Front); - DrawSpawn(); - if (ActiveLayer == RpgEditLayer.Collision) - DrawCollision(); + public new void QueueRedraw() { base.QueueRedraw(); overlay?.QueueRedraw(); } + + public override void _Draw() => DrawRect(new Rect2(Vector2.Zero, Size), UiTokens.Surface0); + + /// Mouse and automation coordinates use the real presentation transform, including negative iso X. + public Vector2 ProjectCell(Vector2 cell) => preview?.ProjectToView(new Vector3(cell.X, cell.Y, 0)) ?? cell * CellSize; + + public void DrawOverlays(CanvasItem target) + { + if (Document == null || projection == null) return; + var grid = Document.Grid; + var unit = projection.Unit; if (ShowGrid) - DrawGrid(); - if (hover.HasValue && grid.InBounds(hover.Value.X, hover.Value.Y)) - DrawRect(CellRect(hover.Value.X, hover.Value.Y), UiTokens.AccentBright, false, 2f); - } - - private void DrawLayer(RpgLayer layer) - { - if (Atlas == null || Tileset == null) - return; - var dim = ActiveLayer <= RpgEditLayer.Front && (int)ActiveLayer != (int)layer; - var modulate = new Color(1f, 1f, 1f, dim ? 0.45f : 1f); - var grid = Document.Grid; - for (var y = 0; y < grid.Height; y++) { - for (var x = 0; x < grid.Width; x++) - { - var index = grid.GetTile(layer, x, y); - if (index < 0) - continue; - // Autotiles are assembled from their neighbours exactly like in the game. - var autotile = Tileset.AutotileOf(index); - if (autotile == null) - DrawTextureRectRegion(Atlas, CellRect(x, y), TileRegion(index), modulate); - else if (textures.Tileset(autotile.Autotile) is { } block) - RpgAutotiles.Draw(this, block, CellRect(x, y), RpgAutotiles.QuartersAt(grid, layer, x, y, index), Tileset.TileSize, modulate); - } + for (var x = 0; x <= grid.Width; x++) target.DrawLine(P(x, 0), P(x, grid.Height), GridColor); + for (var y = 0; y <= grid.Height; y++) target.DrawLine(P(0, y), P(grid.Width, y), GridColor); } - } - - private void DrawEvents() - { - foreach (var mapEvent in Document.LockedEvents) - DrawEvent(mapEvent, true); - foreach (var mapEvent in Document.Events) - DrawEvent(mapEvent, false); - } - - /// One event: its look, then on the events layer a frame (dashed grey for a locked one). - private void DrawEvent(RpgMapEvent mapEvent, bool locked) - { - var modulate = locked ? LockedModulate : Colors.White; - var rect = CellRect(mapEvent.X, mapEvent.Y); - var charset = string.IsNullOrEmpty(mapEvent.Sprite) ? null : textures.Charset(mapEvent.Sprite); - if (charset != null) - { - var frame = new Vector2(charset.GetWidth() / 3f, charset.GetHeight() / 4f); - var source = new Rect2(new Vector2(frame.X, frame.Y * (int)mapEvent.Dir), frame); - var size = frame * Zoom; - var target = new Rect2(rect.Position + new Vector2((rect.Size.X - size.X) / 2f, rect.Size.Y - size.Y), size); - DrawTextureRectRegion(charset, target, source, modulate); - } - else if (mapEvent.Tile >= 0 && Atlas != null && Tileset != null) - { - DrawTextureRectRegion(Atlas, rect, TileRegion(mapEvent.Tile), modulate); - } - else if (!string.IsNullOrEmpty(mapEvent.Icon) && textures.Icon(mapEvent.Icon) is { } icon) - { - // Fitted like RpgActor.UseIcon: three quarters of the cell, centred. - var fit = CellSize * 0.75f / Mathf.Max(1, Mathf.Max(icon.GetWidth(), icon.GetHeight())); - var size = icon.GetSize() * fit; - DrawTextureRect(icon, new Rect2(rect.GetCenter() - size / 2f, size), false, modulate); - } - else - { - DrawRect(rect.Grow(-CellSize * 0.15f), MarkerColor * modulate); - } - - if (ActiveLayer == RpgEditLayer.Events && locked) - DrawDashedRect(rect.Grow(-1f)); - else if (ActiveLayer == RpgEditLayer.Events) - DrawRect(rect, mapEvent == SelectedEvent ? UiTokens.AccentBright : UiTokens.Alpha(UiTokens.White, 0.5f), false, mapEvent == SelectedEvent ? 3f : 1f); - } - - private void DrawDashedRect(Rect2 rect) - { - var color = UiTokens.Alpha(UiTokens.White, 0.6f); - DrawDashedLine(rect.Position, new Vector2(rect.End.X, rect.Position.Y), color, 1f, 4f); - DrawDashedLine(new Vector2(rect.End.X, rect.Position.Y), rect.End, color, 1f, 4f); - DrawDashedLine(rect.End, new Vector2(rect.Position.X, rect.End.Y), color, 1f, 4f); - DrawDashedLine(new Vector2(rect.Position.X, rect.End.Y), rect.Position, color, 1f, 4f); - } - - private void DrawSpawn() - { - var spawn = Document.Map.Spawn; - if (spawn == null) - return; - var rect = CellRect(spawn.X, spawn.Y); - DrawCircle(rect.GetCenter(), CellSize * 0.18f, UiTokens.Ok); - DrawArc(rect.GetCenter(), CellSize * 0.18f, 0f, Mathf.Tau, 24, Colors.Black, 1.5f); - } - - private void DrawCollision() - { - var grid = Document.Grid; - for (var y = 0; y < grid.Height; y++) - { + if (ActiveLayer == RpgEditLayer.Collision) + for (var y = 0; y < grid.Height; y++) for (var x = 0; x < grid.Width; x++) { var code = grid.GetCollision(x, y); - if (code == RpgCollision.Block) - DrawRect(CellRect(x, y), BlockColor); - else if (code == RpgCollision.Open) - DrawRect(CellRect(x, y), OpenColor); - else if (!RpgPassability.IsWalkable(grid, Tileset, x, y)) - DrawRect(CellRect(x, y).Grow(-CellSize * 0.35f), BlockColor); + if (code == RpgCollision.Block || code == RpgCollision.Open || !RpgPassability.IsWalkable(grid, Tileset, x, y)) + target.DrawColoredPolygon(Polygon(x, y, 1, 1), code == RpgCollision.Open ? OpenColor : BlockColor); } + foreach (var mapEvent in Document.LockedEvents) DrawEventMarker(target, mapEvent, true); + foreach (var mapEvent in Document.Events) DrawEventMarker(target, mapEvent, false); + if (Document.Map.Spawn is { } spawn) + { + var center = P(spawn.X + 0.5f, spawn.Y + 0.5f); + target.DrawCircle(center, unit * 0.18f, UiTokens.Ok); + target.DrawArc(center, unit * 0.18f, 0, Mathf.Tau, 24, Colors.Black); } + if (!hover.HasValue || !grid.InBounds(hover.Value.X, hover.Value.Y)) return; + var cell = hover.Value; + var stamp = SelectedStamp ?? RpgTileStamp.Single(SelectedTile); + if (!Placing && Tool == RpgEditTool.Pencil && ActiveLayer <= RpgEditLayer.Front && Atlas != null) + for (var y = 0; y < stamp.Height; y++) + for (var x = 0; x < stamp.Width; x++) + { + var id = stamp.TileAt(x, y); + if (id < 0) continue; + var info = Tileset.TileOf(id); + var texture = Atlas; + var source = RpgRenderSceneBuilder.TileRegion(Tileset, id); + if (info?.Surface is { } patch) + { + texture = textures.Tileset(Tileset.SurfaceImage); + source = new Rect2(patch * Tileset.SurfaceSize + (cell.X + x) * Tileset.TileSize % Tileset.SurfaceSize, + (cell.Y + y) * Tileset.TileSize % Tileset.SurfaceSize, Tileset.TileSize, Tileset.TileSize); + } + else if (!string.IsNullOrEmpty(info?.Autotile)) + { + texture = textures.Autotile(info.Autotile, Tileset.TileSize, cell.X + x, cell.Y + y); + source = RpgAutotiles.PreviewRect(Tileset.TileSize); + } + TileDrawing.Draw(target, new TileVisual { Texture = texture, Source = source, + Bounds = new Rect2(cell.X + x, cell.Y + y, 1, 1) }, projection, new Color(1, 1, 1, 0.5f)); + } + Outline(target, Polygon(cell.X, cell.Y, ActiveLayer <= RpgEditLayer.Front ? stamp.Width : 1, + ActiveLayer <= RpgEditLayer.Front ? stamp.Height : 1), UiTokens.AccentBright, false); } - private void DrawGrid() + private void DrawEventMarker(CanvasItem target, RpgMapEvent mapEvent, bool locked) { - var grid = Document.Grid; - var size = new Vector2(grid.Width, grid.Height) * CellSize; - for (var x = 0; x <= grid.Width; x++) - DrawLine(new Vector2(x * CellSize, 0f), new Vector2(x * CellSize, size.Y), GridColor); - for (var y = 0; y <= grid.Height; y++) - DrawLine(new Vector2(0f, y * CellSize), new Vector2(size.X, y * CellSize), GridColor); + var polygon = Polygon(mapEvent.X, mapEvent.Y, 1, 1); + if (string.IsNullOrEmpty(mapEvent.Sprite) && mapEvent.Tile < 0 && string.IsNullOrEmpty(mapEvent.Icon)) + target.DrawColoredPolygon(polygon, MarkerColor); + if (ActiveLayer != RpgEditLayer.Events) return; + Outline(target, polygon, mapEvent == SelectedEvent ? UiTokens.AccentBright : UiTokens.Alpha(UiTokens.White, 0.6f), locked); } - - private Rect2 CellRect(int x, int y) => new(new Vector2(x, y) * CellSize, new Vector2(CellSize, CellSize)); - - private Rect2 TileRegion(int index) + private static void Outline(CanvasItem target, Vector2[] polygon, Color color, bool dashed) { - var coords = RpgTileSetBuilder.AtlasCoords(Tileset, index); - return new Rect2(coords * Tileset.TileSize, new Vector2(Tileset.TileSize, Tileset.TileSize)); + for (var i = 0; i < polygon.Length; i++) + if (dashed) target.DrawDashedLine(polygon[i], polygon[(i + 1) % polygon.Length], color, 1, 4); + else target.DrawLine(polygon[i], polygon[(i + 1) % polygon.Length], color, 1.5f); } - - private Vector2I CellAt(Vector2 position) => new((int)Mathf.Floor(position.X / CellSize), (int)Mathf.Floor(position.Y / CellSize)); + private Vector2 P(float x, float y) => TileDrawing.Project(projection, new Vector2(x, y)); + private Vector2[] Polygon(int x, int y, int width, int height) + => TileDrawing.CellPolygon(projection, new Rect2(x, y, width, height)); + private Vector2I CellAt(Vector2 position) + => preview != null && preview.TryPickGround(position, out var cell) ? cell : new Vector2I(-1, -1); private void OnGuiInput(InputEvent @event) { @@ -391,8 +416,13 @@ namespace Cthangover.Tools.RpgEditor { var tile = erase ? -1 : SelectedTile; var collision = erase ? RpgCollision.Auto : SelectedCollision; - if (Document.Paint(ActiveLayer, cell.X, cell.Y, tile, collision)) - QueueRedraw(); + var changed = !erase && ActiveLayer <= RpgEditLayer.Front && SelectedStamp != null + ? Document.Stamp(ActiveLayer, cell.X, cell.Y, SelectedStamp) > 0 + : Document.Paint(ActiveLayer, cell.X, cell.Y, tile, collision); + if (changed) + { + Refresh(); + } } private void Drag(Vector2I cell) @@ -406,6 +436,7 @@ namespace Cthangover.Tools.RpgEditor } dragged.X = cell.X; dragged.Y = cell.Y; + Refresh(); EventSelected?.Invoke(dragged); } diff --git a/src/RpgMapEditorOverlay.cs b/src/RpgMapEditorOverlay.cs new file mode 100644 index 0000000..00d7398 --- /dev/null +++ b/src/RpgMapEditorOverlay.cs @@ -0,0 +1,11 @@ +namespace Cthangover.Tools.RpgEditor +{ + using Godot; + /// Authoring marks render above the shared world, without intercepting canvas input. + public partial class RpgMapEditorOverlay : Node2D + { + private readonly RpgMapEditorCanvas canvas; + public RpgMapEditorOverlay(RpgMapEditorCanvas canvas) { this.canvas = canvas; ZIndex = 10; } + public override void _Draw() => canvas.DrawOverlays(this); + } +} diff --git a/src/RpgMapEditorWindow.cs b/src/RpgMapEditorWindow.cs index 06d8cf3..d657561 100644 --- a/src/RpgMapEditorWindow.cs +++ b/src/RpgMapEditorWindow.cs @@ -10,6 +10,7 @@ using Cthangover.Core.Utils; using Cthangover.Mods.Interface.Theming; using Cthangover.Mods.Interface.Tool; using Cthangover.Mods.Rpg; +using Cthangover.Mods.TileRender; using Cthangover.Tools.Common; using Cthangover.Tools.Services; using Godot; @@ -19,7 +20,7 @@ namespace Cthangover.Tools.RpgEditor /// /// Editor of RPG tile maps (maps/*.json, kind rpg_map). /// Layout: toolbar (file, save, layer, brush, grid, zoom, undo/redo, play), - /// the tile palette, the game's characters and items as tabs on the left, the + /// the tile palette, the game's characters, items and all map appearances as tabs on the left, the /// map in the middle, the map's and the selected event's properties on the right. /// A character is put on the map as an NPC or an enemy, an item as a pickup: /// pick it, press the button, click a cell (, @@ -53,6 +54,7 @@ namespace Cthangover.Tools.RpgEditor private ModFileSelector fileSelector; private TabContainer sideTabs; private RpgTilePalette palette; + private OptionButton rendererPicker; private SpinBox itemCount; private Func placeAt; private string placedKey; @@ -79,6 +81,14 @@ namespace Cthangover.Tools.RpgEditor fileSelector.Refresh(); } + /// Child pickers release their preview regions on exit before the window releases the shared source images. + protected override void Cleanup() + { + placeAt = null; + textures.Dispose(); + base.Cleanup(); + } + // ── layout ───────────────────────────────────────────────── private void BuildUi() @@ -98,6 +108,7 @@ namespace Cthangover.Tools.RpgEditor paletteColumn.AddChild(ToolUi.Section("tools/rpg_editor/section_palette")); palette = new RpgTilePalette(); palette.TileSelected += OnPaletteTile; + palette.StampSelected += OnPaletteStamp; palette.CollisionSelected += OnPaletteCollision; paletteColumn.AddChild(palette); sideTabs.AddChild(paletteColumn); @@ -120,6 +131,12 @@ namespace Cthangover.Tools.RpgEditor items.AddAction("tools/rpg_editor/place_item", "tools/rpg_editor/place_item_tip", PlaceItem); sideTabs.AddChild(items); sideTabs.SetTabTitle(2, ToolUi.Tr("tools/rpg_editor/tab_items")); + + var appearances = new RpgEntityPicker("tools/rpg_editor/appearance_search", "tools/rpg_editor/appearances_hint") { Name = "Appearances" }; + appearances.Source = LoadAppearances; + appearances.AddAction("tools/rpg_editor/place_appearance", "tools/rpg_editor/place_appearance_tip", PlaceAppearance); + sideTabs.AddChild(appearances); + sideTabs.SetTabTitle(3, ToolUi.Tr("tools/rpg_editor/tab_appearances")); sideTabs.TabChanged += OnSideTabChanged; main.AddChild(CreateSidebar(leftColumn, 400)); @@ -170,6 +187,24 @@ namespace Cthangover.Tools.RpgEditor AddToolButton(toolbar, RpgEditTool.Fill, "tools/rpg_editor/tool_fill"); toolbar.AddChild(ToolUi.Divider()); + rendererPicker = new OptionButton { Name = "RendererPicker" }; + var wantedRenderer = Cthangover.Core.Games.ActiveGame.GetSetting("tile.renderer") ?? "topdown"; + foreach (var arg in OS.GetCmdlineUserArgs()) if (arg.StartsWith("--editor-renderer=")) wantedRenderer = arg.Substring(18); + foreach (var id in TileRendererRegistry.Instance.Ids) + { + var index = rendererPicker.ItemCount; + var label = id switch + { + "topdown" => ToolUi.Tr("tools/rpg_editor/view_topdown"), + "isometric" => ToolUi.Tr("tools/rpg_editor/view_isometric"), + _ => id + }; + rendererPicker.AddItem(label); + rendererPicker.SetItemMetadata(index, id); + if (id == wantedRenderer) rendererPicker.Select(index); + } + rendererPicker.ItemSelected += OnRendererSelected; + toolbar.AddChild(rendererPicker); gridCheck = new CheckBox { Text = ToolUi.Tr("tools/rpg_editor/grid"), ButtonPressed = true }; gridCheck.Toggled += OnGridToggled; toolbar.AddChild(gridCheck); @@ -432,10 +467,17 @@ namespace Cthangover.Tools.RpgEditor private void OnPaletteTile(int index) { canvas.SelectedTile = index; + canvas.SelectedStamp = RpgTileStamp.Single(index); if (canvas.ActiveLayer > RpgEditLayer.Front) SelectLayer(RpgEditLayer.Main); } + private void OnPaletteStamp(RpgTileStamp stamp) + { + canvas.SelectedStamp = stamp; + canvas.QueueRedraw(); + } + private void OnPaletteCollision(char code) => canvas.SelectedCollision = code; private void OnSideTabChanged(long tab) @@ -448,6 +490,14 @@ namespace Cthangover.Tools.RpgEditor private List LoadItems() => RpgItemCatalog.Load(textures); + private List LoadAppearances() => RpgAppearanceCatalog.Load(textures); + + private void PlaceAppearance(RpgPickerEntry entry) + { + var id = "npc_" + new string(entry.Look.Select(c => char.IsLetterOrDigit(c) || c == '_' ? c : '_').ToArray()); + BeginPlacing(entry, "tools/rpg_editor/placed_npc", cell => document.AddCharacter(cell.X, cell.Y, id, entry.Look, false)); + } + private void PlaceNpc(RpgPickerEntry entry) => BeginPlacing(entry, "tools/rpg_editor/placed_npc", cell => document.AddCharacter(cell.X, cell.Y, entry.Id, entry.Look, false)); @@ -492,6 +542,7 @@ namespace Cthangover.Tools.RpgEditor private void OnTilePicked(int index) { canvas.SelectedTile = index; + canvas.SelectedStamp = RpgTileStamp.Single(index); palette.Select(index); } @@ -505,7 +556,7 @@ namespace Cthangover.Tools.RpgEditor palette.SetCollisionMode(layer == RpgEditLayer.Collision); foreach (var button in toolButtons.Values) button.Disabled = layer == RpgEditLayer.Events; - canvas.QueueRedraw(); + canvas.Refresh(); } private void SelectTool(RpgEditTool tool) @@ -515,6 +566,12 @@ namespace Cthangover.Tools.RpgEditor pair.Value.SetPressedNoSignal(pair.Key == tool); } + private void OnRendererSelected(long index) + { + canvas.SetRenderer(rendererPicker.GetItemMetadata((int)index).AsString()); + UpdateZoomLabel(); + } + private void OnGridToggled(bool on) { canvas.ShowGrid = on; diff --git a/src/RpgPickerEntry.cs b/src/RpgPickerEntry.cs index 6f030b4..43e153e 100644 --- a/src/RpgPickerEntry.cs +++ b/src/RpgPickerEntry.cs @@ -2,10 +2,10 @@ using Godot; namespace Cthangover.Tools.RpgEditor { - /// One row of an : a character or an item of the game. + /// One row of an : a character, item or map appearance. public class RpgPickerEntry { - /// Entity id (what rpg.battle enemies= or item.add id= takes). + /// Entity id for character/item entries; a charset path for appearance-only entries. public string Id { get; init; } /// Display name in the current language (the id when the entity has none). @@ -16,5 +16,8 @@ namespace Cthangover.Tools.RpgEditor /// Picture of the row, or null. public Texture2D Icon { get; init; } + + /// True for an entry-owned atlas preview; false for a texture borrowed from the window cache. + public bool OwnsIcon { get; init; } } } diff --git a/src/RpgTilePalette.cs b/src/RpgTilePalette.cs index a568c5f..ead569b 100644 --- a/src/RpgTilePalette.cs +++ b/src/RpgTilePalette.cs @@ -17,7 +17,8 @@ namespace Cthangover.Tools.RpgEditor /// public partial class RpgTilePalette : Control { - private const float Scale = 1.5f; + // Keep wide architectural blocks fully visible in the standard sidebar. + private float Scale => tileset == null ? 1.5f : Math.Min(1.5f, 384f / Math.Max(1, tileset.Columns * tileset.TileSize)); private const float CodeHeight = 44f; private const float AutotileGap = 8f; @@ -28,6 +29,15 @@ namespace Cthangover.Tools.RpgEditor private RpgTileset tileset; private Texture2D atlas; private bool collisionMode; + private Vector2I? selectionStart; + private Rect2I? selection; + private bool dragged; + + /// The current rectangular brush in logical map ids. + public RpgTileStamp SelectedStamp { get; private set; } = RpgTileStamp.Single(0); + + /// A dragged rectangle changed the whole brush. + public event Action StampSelected; /// Selected atlas index. public int SelectedTile { get; private set; } @@ -54,15 +64,18 @@ namespace Cthangover.Tools.RpgEditor { tileset = value; atlas = image; + selection = null; + selectionStart = null; autotiles.Clear(); if (value != null) - autotiles.AddRange(value.Tiles.Where(t => !string.IsNullOrEmpty(t.Autotile))); + autotiles.AddRange(value.Tiles.Where(t => !string.IsNullOrEmpty(t.Autotile) || t.Surface != null)); Relayout(); } /// Switches between the tile atlas and the collision codes. public void SetCollisionMode(bool value) { + selectionStart = null; collisionMode = value; Relayout(); } @@ -71,6 +84,9 @@ namespace Cthangover.Tools.RpgEditor public void Select(int index) { SelectedTile = index; + SelectedStamp = RpgTileStamp.Single(index); + selection = null; + selectionStart = null; QueueRedraw(); } @@ -88,18 +104,24 @@ namespace Cthangover.Tools.RpgEditor var cell = tileset.TileSize * Scale; DrawTextureRect(atlas, new Rect2(Vector2.Zero, atlas.GetSize() * Scale), false); - foreach (var tile in tileset.Tiles.Where(t => t.Solid && string.IsNullOrEmpty(t.Autotile))) + foreach (var tile in tileset.Tiles.Where(t => t.Solid && string.IsNullOrEmpty(t.Autotile) && t.Surface == null)) DrawSolidMark((Vector2)RpgTileSetBuilder.AtlasCoords(tileset, tile.Index) * cell, cell); for (var i = 0; i < autotiles.Count; i++) { - if (textures.Tileset(autotiles[i].Autotile) is { } block) + if (autotiles[i].Surface is { } patch && textures.Tileset(tileset.SurfaceImage) is { } surface) + DrawTextureRectRegion(surface, new Rect2(Slot(i), new Vector2(cell, cell)), + new Rect2(patch * tileset.SurfaceSize, 0, tileset.TileSize, tileset.TileSize)); + else if (textures.Tileset(autotiles[i].Autotile) is { } block) DrawTextureRectRegion(block, new Rect2(Slot(i), new Vector2(cell, cell)), RpgAutotiles.PreviewRect(tileset.TileSize)); if (autotiles[i].Solid) DrawSolidMark(Slot(i), cell); } var slot = autotiles.FindIndex(t => t.Index == SelectedTile); var selected = slot >= 0 ? Slot(slot) : (Vector2)RpgTileSetBuilder.AtlasCoords(tileset, SelectedTile) * cell; - DrawRect(new Rect2(selected, new Vector2(cell, cell)), UiTokens.AccentBright, false, 3f); + var highlight = selection is { } rectangle + ? new Rect2((Vector2)rectangle.Position * cell, (Vector2)rectangle.Size * cell) + : new Rect2(selected, new Vector2(cell, cell)); + DrawRect(highlight, UiTokens.AccentBright, false, 3f); } private void DrawSolidMark(Vector2 position, float cell) @@ -135,9 +157,19 @@ namespace Cthangover.Tools.RpgEditor { if (@event is InputEventMouseMotion motion && !collisionMode && tileset != null) { + if (selectionStart.HasValue && (dragged || AtlasCellAt(motion.Position) != selectionStart.Value)) + { + dragged = true; + SelectRectangle(motion.Position); + } TooltipText = Describe(IndexAt(motion.Position)); return; } + if (@event is InputEventMouseButton { Pressed: false, ButtonIndex: MouseButton.Left }) + { + selectionStart = null; + return; + } if (@event is not InputEventMouseButton { Pressed: true, ButtonIndex: MouseButton.Left } button) return; @@ -153,16 +185,63 @@ namespace Cthangover.Tools.RpgEditor else if (tileset != null && atlas != null) { var index = IndexAt(button.Position); - if (index >= 0 && (index < RpgTileSetBuilder.TileCount(tileset, atlas) || tileset.AutotileOf(index) != null)) + if (index >= 0 && (index < RpgTileSetBuilder.TileCount(tileset, atlas) || tileset.TileOf(index) != null)) { SelectedTile = index; + SelectedStamp = RpgTileStamp.Single(index); + selection = null; + selectionStart = button.Position.Y < atlas.GetHeight() * Scale + ? AtlasCellAt(button.Position) : null; + dragged = false; + SelectGroupOf(index); TileSelected?.Invoke(index); + StampSelected?.Invoke(SelectedStamp); } } QueueRedraw(); AcceptEvent(); } + /// + /// A click on any cell of a visual group picks the whole object, so it is stamped complete: a partial + /// pattern does not match the group and the isometric view falls back to separate per-cell sprites. + /// + private void SelectGroupOf(int index) + { + var group = tileset.VisualGroups?.Find(g => g.Pattern != null && Array.IndexOf(g.Pattern, index) >= 0); + if (group == null || RpgVisualGroupValidator.Error(group) != null) + return; + SelectedStamp = new RpgTileStamp(group.Width, group.Height, group.Pattern); + SelectedTile = group.Pattern[0]; + var origin = RpgTileSetBuilder.AtlasCoords(tileset, group.Pattern[0]); + var packed = true; + for (var y = 0; y < group.Height; y++) + for (var x = 0; x < group.Width; x++) + packed &= RpgTileSetBuilder.AtlasCoords(tileset, group.Pattern[y * group.Width + x]) == origin + new Vector2I(x, y); + selection = packed ? new Rect2I(origin, group.Width, group.Height) : null; + } + + private Vector2I AtlasCellAt(Vector2 position) + { + var cell = tileset.TileSize * Scale; + return new Vector2I(Math.Clamp((int)(position.X / cell), 0, tileset.Columns - 1), + Math.Clamp((int)(position.Y / cell), 0, atlas.GetHeight() / tileset.TileSize - 1)); + } + + private void SelectRectangle(Vector2 position) + { + var end = AtlasCellAt(position); + var start = selectionStart.Value; + var left = Math.Min(start.X, end.X); + var top = Math.Min(start.Y, end.Y); + selection = new Rect2I(left, top, Math.Abs(start.X - end.X) + 1, Math.Abs(start.Y - end.Y) + 1); + SelectedStamp = RpgTileStamp.FromAtlas(tileset, selection.Value); + SelectedTile = SelectedStamp.TileAt(0, 0); + TileSelected?.Invoke(SelectedTile); + StampSelected?.Invoke(SelectedStamp); + QueueRedraw(); + } + private float AutotileTop => atlas == null ? 0f : atlas.GetHeight() * Scale + (autotiles.Count > 0 ? AutotileGap : 0f); private int AutotileRows => (autotiles.Count + Math.Max(1, tileset.Columns) - 1) / Math.Max(1, tileset.Columns); @@ -184,7 +263,11 @@ namespace Cthangover.Tools.RpgEditor } var column = (int)(position.X / cell); var row = (int)(position.Y / cell); - return column < 0 || column >= tileset.Columns || row < 0 ? -1 : row * tileset.Columns + column; + if (column < 0 || column >= tileset.Columns || row < 0 || position.Y >= atlas.GetHeight() * Scale) + return -1; + var physical = row * tileset.Columns + column; + return tileset.Tiles.FirstOrDefault(t => t.AtlasIndex == physical)?.Index + ?? (tileset.Tiles.Any(t => t.AtlasIndex != null) ? -1 : physical); } private string Describe(int index) diff --git a/src/RpgTileStamp.cs b/src/RpgTileStamp.cs new file mode 100644 index 0000000..2202e60 --- /dev/null +++ b/src/RpgTileStamp.cs @@ -0,0 +1,49 @@ +using System; +using Cthangover.Mods.Rpg; +using Godot; + +namespace Cthangover.Tools.RpgEditor +{ + /// A rectangular palette selection in logical map ids; empty atlas slots are skipped when stamping. + public class RpgTileStamp + { + private readonly int[] tiles; + + /// Selection width in cells. + public int Width { get; } + + /// Selection height in cells. + public int Height { get; } + + /// Copies a rectangular set of logical tile ids; negative ids denote gaps. + public RpgTileStamp(int width, int height, int[] values) + { + if (width < 1 || height < 1 || values == null || values.Length != width * height) + throw new ArgumentException("A stamp must contain exactly width times height cells."); + Width = width; + Height = height; + tiles = (int[])values.Clone(); + } + + /// Logical id at the given offset, or -1 outside the selection. + public int TileAt(int x, int y) => x >= 0 && y >= 0 && x < Width && y < Height ? tiles[y * Width + x] : -1; + + /// Single-tile brush, also used for surface materials and the pipette. + public static RpgTileStamp Single(int index) => new(1, 1, new[] { index }); + + /// Converts physical object-atlas coordinates into logical ids without exposing padding cells. + public static RpgTileStamp FromAtlas(RpgTileset tileset, Rect2I rectangle) + { + var values = new int[rectangle.Size.X * rectangle.Size.Y]; + var packed = tileset.Tiles.Exists(t => t.AtlasIndex != null); + for (var y = 0; y < rectangle.Size.Y; y++) + for (var x = 0; x < rectangle.Size.X; x++) + { + var physical = (rectangle.Position.Y + y) * tileset.Columns + rectangle.Position.X + x; + values[y * rectangle.Size.X + x] = packed + ? tileset.Tiles.Find(t => t.AtlasIndex == physical)?.Index ?? -1 : physical; + } + return new RpgTileStamp(rectangle.Size.X, rectangle.Size.Y, values); + } + } +} diff --git a/test_suites/edit/src/RpgEditorTestDriver.cs b/test_suites/edit/src/RpgEditorTestDriver.cs index 0b1167e..aedd6bc 100644 --- a/test_suites/edit/src/RpgEditorTestDriver.cs +++ b/test_suites/edit/src/RpgEditorTestDriver.cs @@ -18,11 +18,12 @@ namespace Cthangover.Tools.RpgEditor.Tests /// buttons are pressed, the palette and the canvas get mouse events through /// their gui_input signal, Ctrl+Z goes into the window, a slime found in /// the characters tab is placed as an enemy and branches from the items tab as - /// a pickup. That window is + /// a pickup. The appearance tab exposes all NPC artwork, places an elder without + /// a combat entity and supports undo/redo. That window is /// freed without saving, so the demo maps never change. A second window then /// creates a new map through the file selector's "+" and saves it: the game must /// know the map's scene and its event (saved apart, into map_events) at once, - /// with no mod reload; its files are deleted again. + /// with no mod reload, including a seer placed from the appearance tab; its files are deleted again. /// Result line: [TEST_RESULT] name=rpg_editor_edit passed=N failed=M. /// public partial class RpgEditorTestDriver : Node @@ -46,6 +47,8 @@ namespace Cthangover.Tools.RpgEditor.Tests private RpgMapEditorCanvas canvas; private int eventsBefore; private string newMapMod; + private Texture2D closingPreview; + private Texture2D closingSource; /// Creates the driver; null disables screenshots. public RpgEditorTestDriver(string shotsDir) @@ -122,21 +125,31 @@ namespace Cthangover.Tools.RpgEditor.Tests Check(window.Title.StartsWith("* "), "the window is marked dirty"); window.PushInput(new InputEventKey { Keycode = Key.Z, PhysicalKeycode = Key.Z, CtrlPressed = true, Pressed = true }); Check(canvas.Document.Grid.GetTile(RpgLayer.Main, PaintCell.X, PaintCell.Y) == before, "Ctrl+Z undoes the stroke"); + PrepareStampPreview(); + step = 20; + return; + case 20: + Shot("stamp_preview"); + PlaceStampAndUndo(); Press("tools/rpg_editor/layer_events"); eventsBefore = canvas.Document.Events.Count; ClickCanvas(EventCell, true); Check(canvas.Document.Events.Count == eventsBefore + 1 && canvas.SelectedEvent != null, "a double click adds and selects an event"); - step++; + step = 3; return; case 3: // Screenshots one tick after the action, when the frame shows it. Shot("events"); PlaceSlime(); + PlaceAppearance(); Press("tools/rpg_editor/layer_collision"); step++; return; case 4: Shot("collision"); + Shot("appearances"); + closingPreview = window.FindChildren("*", "", true, false).OfType().First(p => p.Name == "Appearances").Selected?.Icon; + closingSource = (closingPreview as AtlasTexture)?.Atlas; window.QueueFree(); window = ToolWindow.Open(); step++; @@ -145,6 +158,8 @@ namespace Cthangover.Tools.RpgEditor.Tests canvas = window.FindChildren("*", "", true, false).OfType().FirstOrDefault(); if (canvas?.Document == null) return; + Check(closingPreview != null && !GodotObject.IsInstanceValid(closingPreview), "closing the editor releases the picker preview"); + Check(closingSource != null && !GodotObject.IsInstanceValid(closingSource), "closing the editor releases the source texture cache"); newMapMod = Selector().CurrentMod; DeleteNewMapFiles(); Selector().FindChildren("*", "", true, false).OfType