vault backup: 2026-03-13 19:37:42

This commit is contained in:
sShemet
2026-03-13 19:37:42 +05:00
parent 5b5ede3a07
commit 74100ffd5b
2 changed files with 281 additions and 4 deletions

View File

@@ -27,12 +27,12 @@
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/UAS/MAIL TRANSFER.md",
"file": "PERSONAL PROJECTS/pe2ep script.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "MAIL TRANSFER"
"title": "pe2ep script"
}
}
],
@@ -199,8 +199,9 @@
},
"active": "267d6f6cb1297872",
"lastOpenFiles": [
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.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",
"PERSONAL PROJECTS/STREAMS/P2EP GOLD ZODIAC AOBA TV.md",
"PERSONAL PROJECTS/STREAMS/TEXT TEMPLATE.md",
@@ -245,7 +246,6 @@
"WORK & PROJECTS/UAS/Plan.md",
"PERSONAL PROJECTS/cloudflare temp mail.md",
"PERSONAL PROJECTS/P2EP/pseudoCode/fade calculation.md",
"WORK & PROJECTS/Mol/Серверы/Supervisor/job_worker.md",
"Структура объектов испытаний.png",
"Схема связей юрлиц и адресов.png",
"WORK & PROJECTS/img/Pasted image 20241212175419.png",

View 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 с множеством асинхронных действий.