vault backup: 2026-03-13 19:37:42
This commit is contained in:
8
.obsidian/workspace.json
vendored
8
.obsidian/workspace.json
vendored
@@ -27,12 +27,12 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "WORK & PROJECTS/UAS/MAIL TRANSFER.md",
|
"file": "PERSONAL PROJECTS/pe2ep script.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "MAIL TRANSFER"
|
"title": "pe2ep script"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -199,8 +199,9 @@
|
|||||||
},
|
},
|
||||||
"active": "267d6f6cb1297872",
|
"active": "267d6f6cb1297872",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
|
|
||||||
"WORK & PROJECTS/UAS/MAIL TRANSFER.md",
|
"WORK & PROJECTS/UAS/MAIL TRANSFER.md",
|
||||||
|
"PERSONAL PROJECTS/pe2ep script.md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
|
||||||
"WORK & PROJECTS/UAS/Servers access.md",
|
"WORK & PROJECTS/UAS/Servers access.md",
|
||||||
"PERSONAL PROJECTS/STREAMS/P2EP GOLD ZODIAC AOBA TV.md",
|
"PERSONAL PROJECTS/STREAMS/P2EP GOLD ZODIAC AOBA TV.md",
|
||||||
"PERSONAL PROJECTS/STREAMS/TEXT TEMPLATE.md",
|
"PERSONAL PROJECTS/STREAMS/TEXT TEMPLATE.md",
|
||||||
@@ -245,7 +246,6 @@
|
|||||||
"WORK & PROJECTS/UAS/Plan.md",
|
"WORK & PROJECTS/UAS/Plan.md",
|
||||||
"PERSONAL PROJECTS/cloudflare temp mail.md",
|
"PERSONAL PROJECTS/cloudflare temp mail.md",
|
||||||
"PERSONAL PROJECTS/P2EP/pseudoCode/fade calculation.md",
|
"PERSONAL PROJECTS/P2EP/pseudoCode/fade calculation.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/Supervisor/job_worker.md",
|
|
||||||
"Структура объектов испытаний.png",
|
"Структура объектов испытаний.png",
|
||||||
"Схема связей юрлиц и адресов.png",
|
"Схема связей юрлиц и адресов.png",
|
||||||
"WORK & PROJECTS/img/Pasted image 20241212175419.png",
|
"WORK & PROJECTS/img/Pasted image 20241212175419.png",
|
||||||
|
|||||||
277
PERSONAL PROJECTS/pe2ep script.md
Normal file
277
PERSONAL PROJECTS/pe2ep script.md
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
# Скриптовый формат `Perep_script`
|
||||||
|
|
||||||
|
**Версия:** 1.0 (стабильная, с поддержкой универсальных ссылок)
|
||||||
|
**Цель:** Полное описание синтаксиса и семантики скриптового языка, используемого в событиях _Persona 2 (PSX)_.
|
||||||
|
**Ключевая особенность:** Поддержка **универсальных ссылок** через `!`, `@`, `#`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Общее описание
|
||||||
|
|
||||||
|
`Perep_script` — это **событийно-ориентированный, потоковый скриптовый язык**, предназначенный для описания интерактивных сцен в игре: диалоги, эффекты, анимации, переходы.
|
||||||
|
|
||||||
|
Он сочетает:
|
||||||
|
|
||||||
|
- Низкоуровневые hex-команды
|
||||||
|
- Высокоуровневые именованные операции
|
||||||
|
- **Механизм асинхронного управления через универсальные ссылки**
|
||||||
|
- Поддержку подпрограмм и ожиданий
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Универсальные ссылки: `!`, `@`, `#`
|
||||||
|
|
||||||
|
### 🔥 Главный принцип:
|
||||||
|
|
||||||
|
> **Любая команда может быть помечена символом `!`, `@` или `#`. Это создаёт уникальную ссылку (handle), по которой можно управлять выполнением этой команды.**
|
||||||
|
|
||||||
|
Символы **не имеют семантической привязки** к типу команды (не важно, окно это, звук или задержка). Это просто **три доступных регистра ссылок**.
|
||||||
|
|
||||||
|
|Символ|Назначение|
|
||||||
|
|---|---|
|
||||||
|
|`!`|Ссылка типа A (универсальная)|
|
||||||
|
|`@`|Ссылка типа B (универсальная)|
|
||||||
|
|`#`|Ссылка типа C (универсальная)|
|
||||||
|
|
||||||
|
> ✅ Можно пометить `SoundPly#`, `000000A8!`, `LoadDung@` — всё валидно.
|
||||||
|
> ✅ Можно использовать `__WaitTo @` на `collLink@` или `00000043#`.
|
||||||
|
> ❌ Нельзя использовать один символ для двух активных задач одновременно — поведение не определено (перезапись).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Пример использования:
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`SoundPly@ 00003023 0000007F // Проиграть звук → handle = @ 00000043# 00000004 // Задержка на 4 тика → handle = # __WaitTo @ // Ждать завершения звука __WaitTo # // Ждать завершения задержки`
|
||||||
|
|
||||||
|
👉 Порядок `__WaitTo` определяет синхронизацию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Синтаксис команд
|
||||||
|
|
||||||
|
### Формат:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Команда][!/@/#] [аргументы...]
|
||||||
|
```
|
||||||
|
|
||||||
|
или
|
||||||
|
|
||||||
|
```
|
||||||
|
[Команда] [аргументы...]
|
||||||
|
```
|
||||||
|
|
||||||
|
Если команда помечена символом — она **регистрируется в системе ссылок** под этим тегом.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Управление выполнением
|
||||||
|
|
||||||
|
### `__WaitTo [!/@/#]`
|
||||||
|
|
||||||
|
- Приостанавливает выполнение скрипта до **завершения команды**, помеченной указанным символом.
|
||||||
|
- Если команда уже завершена — продолжает сразу.
|
||||||
|
- Поддерживает асинхронные операции: звуки, загрузки, эффекты.
|
||||||
|
|
||||||
|
**Пример:**
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`LoadDung@ 00002E06 __WaitTo @ // Ждать загрузки локации`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `__GoSub># [label]`
|
||||||
|
|
||||||
|
- Вызов подпрограммы.
|
||||||
|
- Метка `#` может использоваться для:
|
||||||
|
- Отслеживания выполнения
|
||||||
|
- Прерывания (`__Kill #` — если поддерживается)
|
||||||
|
- Вложенных ожиданий
|
||||||
|
|
||||||
|
**Пример:**
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`__GoSub># SHOW_TEXT __WaitTo # // Ждать завершения всей подпрограммы`
|
||||||
|
|
||||||
|
> ⚠️ Реализация `__WaitTo #` зависит от движка: может означать "ждать входа", "ждать выхода" или "ждать завершения".
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `__Return--> [label]`
|
||||||
|
|
||||||
|
- Возврат из подпрограммы.
|
||||||
|
- Указание метки — скорее всего, **отладочное**, чтобы легче было читать скрипт.
|
||||||
|
- На исполнение не влияет.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Возможные дополнительные команды (предположительно):
|
||||||
|
|
||||||
|
- `__Kill !` — принудительно завершить/прервать операцию с меткой `!`
|
||||||
|
- `__Check @` — проверить состояние (выполняется/завершена)
|
||||||
|
- (Требует подтверждения из других скриптов)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Команды (по категориям)
|
||||||
|
|
||||||
|
### 🔹 Аудио
|
||||||
|
|
||||||
|
|Команда|Описание|
|
||||||
|
|---|---|
|
||||||
|
|`SoundPly@`|Проиграть звук. Аргументы: `sound_id volume`|
|
||||||
|
|`SoundStop!`|Остановить звук (если есть)|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔹 Визуальные эффекты
|
||||||
|
|
||||||
|
|Команда|Описание|
|
||||||
|
|---|---|
|
||||||
|
|`000000A8`|Инициализация эффекта?|
|
||||||
|
|`000000B9`|Настройка окна: `x y w h color flags`|
|
||||||
|
|`000000BA`, `000000BB`|Fade-in/out: `type duration flag`|
|
||||||
|
|`000000A9`|Начало fade-блока|
|
||||||
|
|`0000004E`|Конец блока или синхронизация|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔹 Диалоги
|
||||||
|
|
||||||
|
|Команда|Описание|
|
||||||
|
|---|---|
|
||||||
|
|`WindShow!`|Показать окно. Аргумент: режим|
|
||||||
|
|`TextShow@`|Вывести текст с тегами|
|
||||||
|
|`WinClose!`|Закрыть окно, связанное с `!`|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔹 Управление объектами
|
||||||
|
|
||||||
|
|Команда|Описание|
|
||||||
|
|---|---|
|
||||||
|
|`collLink@`|Привязать объект к карте: `type x y z rot`|
|
||||||
|
|`CSetAnim#`|Установить анимацию: `char_id anim_id speed`|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔹 Работа с миром
|
||||||
|
|
||||||
|
|Команда|Описание|
|
||||||
|
|---|---|
|
||||||
|
|`LoadDung@`|Загрузить локацию по ID|
|
||||||
|
|`SetFlag!`|Установить флаг события (если есть)|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔹 Системные
|
||||||
|
|
||||||
|
|Команда|Описание|
|
||||||
|
|---|---|
|
||||||
|
|`00000043`|Задержка в тиках|
|
||||||
|
|`__GoSub>#`|Вызов подпрограммы|
|
||||||
|
|`__WaitTo @`|Ожидание завершения операции|
|
||||||
|
|`__Return-->`|Возврат из подпрограммы|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Текст и теги
|
||||||
|
|
||||||
|
Поддерживаются **встроенные теги** `[XXXX]`, интерпретируемые как байтовые коды.
|
||||||
|
|
||||||
|
**Пример:**
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`TextShow@ [2E12][0B00]Привет~[0111]Работает?`
|
||||||
|
|
||||||
|
### Распространённые теги:
|
||||||
|
|
||||||
|
|Тег|Предположение|
|
||||||
|
|---|---|
|
||||||
|
|`[2E12]`|Цвет текста|
|
||||||
|
|`[0B00]`|Размер шрифта|
|
||||||
|
|`[0100]`|Выравнивание|
|
||||||
|
|`[0111]`|Пауза между символами|
|
||||||
|
|`[0611]`|Эффект печати|
|
||||||
|
|`[0211]`|Звук при символе|
|
||||||
|
|`[0311]`|Новая строка / страница|
|
||||||
|
|
||||||
|
Символ `~` — **управляющий**: пауза, перенос, продолжение.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Пример: Полный разбор
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`START: 000000A8 000000B9! 000000A0 00000078 00FFFFFF 00FFFFFF 00000002 SoundPly@ 00003023 0000007F 00000043# 00000004 __WaitTo @ __WaitTo # 000000A9 000000BA! 00000000 00006000 00000001 000000BB# 00000000 00006000 00000001 0000004E __GoSub>$ SHOW_TEXT __WaitTo $ LoadDung@ 00002E06 __Return--> START`
|
||||||
|
|
||||||
|
### Что происходит:
|
||||||
|
|
||||||
|
1. `000000B9!` — настройка окна → handle `!`
|
||||||
|
2. `SoundPly@` — старт звука → handle `@`
|
||||||
|
3. `00000043#` — задержка 4 тика → handle `#`
|
||||||
|
4. `__WaitTo @` — ждать звук
|
||||||
|
5. `__WaitTo #` — ждать задержку (хотя они могли идти параллельно)
|
||||||
|
6. Затем — fade-in через `000000BA!`, `000000BB#`
|
||||||
|
7. `__GoSub>$` — вызов `SHOW_TEXT` с handle `#` (здесь `$` — опечатка? или расширение? возможно, `#`)
|
||||||
|
8. `__WaitTo $` — ждать завершения подпрограммы
|
||||||
|
9. `LoadDung@` — загрузка локации
|
||||||
|
10. `__Return`
|
||||||
|
|
||||||
|
> ⚠️ Ошибка: `__GoSub>$` — возможно, опечатка. Должно быть `__GoSub>#`. Или `$` — четвёртый тип ссылки? (маловероятно)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Ключевые выводы
|
||||||
|
|
||||||
|
### ✅ Сильные стороны:
|
||||||
|
|
||||||
|
- **Универсальность ссылок** — любая команда может быть адресована
|
||||||
|
- **Гибкое управление потоком** — можно строить сложные цепочки
|
||||||
|
- **Асинхронность без потоков** — через `__WaitTo`
|
||||||
|
- **Читаемость** — при правильном использовании
|
||||||
|
|
||||||
|
### ⚠️ Ограничения:
|
||||||
|
|
||||||
|
- Нет проверки на повторное использование ссылки
|
||||||
|
- Нет обработки ошибок
|
||||||
|
- Нет явного освобождения handle
|
||||||
|
- Нет документации от разработчиков — всё по анализу
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Рекомендации
|
||||||
|
|
||||||
|
1. **Используйте ссылки последовательно:**
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`SoundPly@ ... __WaitTo @ TextShow# ... __WaitTo #`
|
||||||
|
|
||||||
|
2. **Не используйте одну метку дважды подряд без ожидания:**
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`SoundPly@ 1234 SoundPly@ 5678 ← Первая ссылка @ теряется!`
|
||||||
|
|
||||||
|
3. **Для вложенных вызовов используйте разные метки:**
|
||||||
|
|
||||||
|
PASCAL
|
||||||
|
|
||||||
|
`__GoSub># sub1 __GoSub>@ sub2 __WaitTo # __WaitTo @`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Заключение
|
||||||
|
|
||||||
|
`Perep_script` — это **гибкий, event-driven язык с мощной системой управления выполнением через универсальные ссылки**. Его ключевое преимущество — способность синхронизировать разнородные операции (звук, графика, загрузка) через единый механизм `__WaitTo @`.
|
||||||
|
|
||||||
|
Он идеально подходит для сценариев в RPG с множеством асинхронных действий.
|
||||||
|
|
||||||
Reference in New Issue
Block a user