83 lines
6.0 KiB
Markdown
83 lines
6.0 KiB
Markdown
# World Map Engine — путешествия между местами по нарисованной карте
|
||
|
||
World Map Engine показывает полноэкранную картинку игрового мира с отмеченными на ней местами. Игрок открывает карту, выбирает место и отправляется туда: игра переключается на сцену этого места. Сценарии могут открывать, закрывать, прятать и снова показывать места по ходу истории, и игра сохраняет эти изменения.
|
||
|
||
Её использует Cthangover. Это не то же самое, что тайловые карты RPG World: карта мира — одна картинка с областями, по которым можно щёлкать, и переход меняет сцену; тайловая карта — сетка, по которой герой идёт с клетки на клетку.
|
||
|
||
## Карта в игре
|
||
|
||
Открывается по иконке карты на панели инструментов.
|
||
|
||

|
||
|
||
- **Места** — области, нарисованные поверх картинки; их выдаёт штриховка. У некоторых мест есть ещё и круглая эмблема с иконкой.
|
||
- **Легенда**: зелёный — где вы сейчас, золотой — доступно, серый — закрыто.
|
||
- **Щёлкните место**, чтобы увидеть его карточку: состояние, описание и кнопку **Перейти**. Карту закрывают **Esc** или **×**.
|
||
|
||

|
||
|
||
**Перейти** переключает игру на сцену места:
|
||
|
||

|
||
|
||
Место закрыто — в карточке написано «Путь ещё не открыт.», а кнопки «Перейти» нет — когда сценарий его закрыл, когда у него нет сцены или когда его сцены нет в той игре, в которую играют.
|
||
|
||
## Как добавить карту мира в игру
|
||
|
||
Игре нужны две вещи в её модах:
|
||
|
||
1. **Картинка** — фон с именем `map` (например `backgrounds/map.png`).
|
||
2. **Места** — JSON-файлы в папке `map/`. Все позиции — доли ширины и высоты картинки, от 0 до 1, поэтому карта работает при любом размере.
|
||
|
||
Вот вход в город из Cthangover (сокращённый пример):
|
||
|
||
```json
|
||
{
|
||
"Items": [
|
||
{
|
||
"ID": "town_entry",
|
||
"points": [[0.7099, 0.2493], [0.7334, 0.2630], [0.7348, 0.2906], [0.7091, 0.3429], [0.6974, 0.3264]],
|
||
"title": "",
|
||
"scene": "town_entry",
|
||
"description": "mapzone/town_entry/info",
|
||
"locked": false,
|
||
"hidden": false
|
||
},
|
||
{
|
||
"ID": "town_entry_label",
|
||
"points": [],
|
||
"title": "mapzone/town_entry",
|
||
"label_pos": [0.7246, 0.2163]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
- `points` — контур области, по которой можно щёлкать.
|
||
- `scene` — логическая сцена, на которую переключает «Перейти».
|
||
- `title`, `description` — ключи переводов; title — имя места на его карточке и эмблеме.
|
||
- `image` и `image_pos` — иконка и её позиция: так место получает круглую эмблему.
|
||
- `label_pos` — отдельно стоящее имя на карте. Зона, у которой есть только title и позиция подписи (как `town_entry_label`), — это имя, а не место: щёлкнуть по ней нельзя.
|
||
- `locked` — закрыто на старте; `hidden` — не показано на старте.
|
||
|
||
Cthangover держит имена своих мест в отдельных зонах-подписях и оставляет `title` самих мест пустым — поэтому на карточке выше нет имени наверху.
|
||
|
||
Карту мира также можно нарисовать и отредактировать в редакторе карт из Editor Tools.
|
||
|
||
## Изменение мест из сценария
|
||
|
||
```scenario
|
||
action map.open_zone zone_id=town_entry
|
||
action map.close_zone zone_id=town_entry
|
||
action map.show_zone zone_id=town_entry
|
||
action map.hide_zone zone_id=town_entry
|
||
```
|
||
|
||
Изменение попадает в сохранение и остаётся после загрузки; новая игра стартует со значениями из JSON.
|
||
|
||
## Если что-то пошло не так
|
||
|
||
1. **«Карта недоступна».** Ни у одного мода игры нет фона с именем `map`.
|
||
2. **В место нельзя попасть.** Его `scene` пуста или написана с ошибкой, либо сценарий его закрыл.
|
||
3. **Место не на своём месте.** Позиции — это доли картинки (0–1), а не пиксели.
|