Remove off-queue.md and add new design documentation files including README.md, defs.md, near-term.md, projects.md, runtime.md, people.md, staffing.md, and schedule.md to outline the structure and agreements for the game's design phases.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# Фаза 41. Мнения и вкладка «Связи»
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 8](../02-people/08-people-browser.md)
|
||||
- [Фаза 36](../07-inventory/36-person-card-tabs.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
У пары появляется число. Семья больше не «просто родственники». Карточка умеет это показать,
|
||||
даже пока кружков ещё нет.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] Мнение A→B: −100…100, несимметрично, ноль не хранить
|
||||
- [x] Пороги и подписи в `BehaviorDef`; клиент рисует присланную подпись, не считает сам
|
||||
- [x] Генератор ставит семейные старты (родители, сиблинги, партнёры семьи) из данных
|
||||
- [x] Каждое рабочее утро (и skip) ненулевые мнения слегка дрейфуют к семейному базису или к нулю;
|
||||
дошли до нуля — запись выкинуть
|
||||
- [x] `people.json` пишет мнение при сдвиге; старый сейв без поля — все нули кроме семьи
|
||||
после первой загрузки-переписи
|
||||
- [x] Вкладка карточки **Связи**: семья с числами, топ друзей/врагов, поиск по ненулевым
|
||||
- [x] Игрок с вкладки ничего не меняет
|
||||
- [x] `docs/protocol.md` — HTTP карточки
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] Родитель и ребёнок после генерации имеют плюс в обе стороны; чужие одноклассники — нет записи
|
||||
- [x] A→B и B→A могут различаться
|
||||
- [x] После нескольких утренних дрейфов без разговоров мнение одноклассников (если появилось)
|
||||
ближе к нулю, семейное — к старту, не к нулю
|
||||
- [x] Карточка без отдельного запроса «всех пар школы»: только этот человек
|
||||
- [x] Клиентский тест: вкладка «Связи» не монтирует лог
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Открыть ученика, на «Связях» родители с подписью «близкие» или соседней, одноклассник без строки
|
||||
- `dotnet test` и `npm test` / `build` проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не собирать кружки. Не бампить сокет. Не заводить романтику.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Фаза 42. Темы и кружки
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 41](41-opinions.md)
|
||||
- [Фаза 21](../05-ai/21-decisions.md)
|
||||
- [Фаза 31](../07-inventory/31-dress-generator.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
`Chat` перестаёт быть соло. В узле говорят 2–4 человека об одной теме. Язык и
|
||||
`Communication` влияют на исход.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] `TopicDef`: теги, возраст, роли, шёпот-на-уроке, опциональный язык
|
||||
- [x] Ванильный набор тем (учёба, игры, еда, семья, спорт, сплетни, грубое, внешность) в `core`.
|
||||
Тема внешности учитывает уместность одежды, если сервер её уже прислал; иначе модификатор 0
|
||||
- [x] Кружок 2–4 в одном узле; пятый не влезает
|
||||
- [x] Кого зовут: друзья и одноклассники в узле, врагов не зовут; тихоня/лидер — поля черты
|
||||
- [x] На перемене и в обед друзья тянутся в узел своих; враги не выбирают тот же обеденный узел,
|
||||
если есть другой
|
||||
- [x] `StaffChat` в `TeachersRoom`, только сотрудники
|
||||
- [x] Парный телефонный чат на перемене: оба несут `Phone`, слабее живого кружка; на уроке нет
|
||||
- [x] Нет общего языка — кружок можно, сдвиг мнения слабый и чаще вниз
|
||||
- [x] `Communication` растёт от разговора меньше, чем предмет за урок; язык разговора — капля,
|
||||
если не у потолка
|
||||
- [x] Черты **сплетник** и **общительный** в `core` с полями, не списками в коде
|
||||
- [x] Исход пишет мнения всех пар кружка и строку лога
|
||||
- [x] На уроке обычный `Chat` не стартует (шёпот — фаза 43)
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] Двое свободных друзей в коридоре на перемене собирают кружок; враги — нет
|
||||
- [x] Пятый в узле не входит в тот же кружок
|
||||
- [x] Сотрудники в учительской могут `StaffChat`; ученик это действие не берёт
|
||||
- [x] Двое с телефоном на перемене могут парный чат; без телефона — нет
|
||||
- [x] Без общего языка мнение почти не растёт при том же `Communication`
|
||||
- [x] Высокий `Communication` сильнее двигает число, чем низкий, на одной теме
|
||||
- [x] Каталог без `TopicDef` не стартует школу с кружками — или падает загрузка, не молча соло-Chat
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- На перемене в коридоре двое «разговаривают», на карточке мнение сдвинулось, в логе тема
|
||||
- `dotnet test` проходит
|
||||
|
||||
## Стоп
|
||||
|
||||
Не шёпот на уроке. Не драка. Не менять кадр присутствия (локация может ещё писать «Разговор»).
|
||||
@@ -0,0 +1,38 @@
|
||||
# Фаза 43. Шёпот и учитель
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 42](42-talk-circles.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
На уроке можно шептаться — ценой учёбы. Учитель иногда слышит. После урока учитель сам
|
||||
говорит с учениками.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] Тема с тегом шёпота может стартовать кружок на уроке в кабинете класса
|
||||
- [x] У участников на время шёпота режется рост навыка урока (доля в `BehaviorDef`)
|
||||
- [x] Учитель в том же кабинете: шанс оборвать (данные + черты); не 100 %
|
||||
- [x] Пойманный шёпот → выговор (кружок учитель + ученики, тема дисциплины), мнения как у
|
||||
строгого разговора
|
||||
- [x] После урока учитель может взять 2–4 учеников (вопрос / похвала / выговор) по весу цели
|
||||
- [x] Сдвиг мнения ученика об учителе масштабируется педагогикой (поле навыка, не фамилия)
|
||||
- [x] Лог: «шептались», «учитель оборвал»
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] Шёпот на уроке даёт меньше прироста предмета, чем тихий урок без кружка
|
||||
- [x] При фиксированном сиде не каждый шёпот с учителем в кабинете обрывается
|
||||
- [x] Без учителя в узле шёпот не обрывается этим правилом
|
||||
- [x] Учитель с высокой педагогикой после похвалы сильнее плюсует мнение, чем с низкой
|
||||
- [x] Обычный не-шёпотный `Chat` на уроке не стартует
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- На математике двое шепчутся, иногда учитель обрывает, в логе это видно
|
||||
- `dotnet test` проходит
|
||||
|
||||
## Стоп
|
||||
|
||||
Не драка. Не политика речи в UI. Не протокол.
|
||||
@@ -0,0 +1,40 @@
|
||||
# Фаза 44. Ссора и драка
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 42](42-talk-circles.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Вражда — не только минус в JSON. На перемене ссорятся, на дворе или физкультуре редко дерутся.
|
||||
Травм нет.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] Действие ссоры: 2 (иногда 3), перемена, мнение падает сильнее грубого разговора
|
||||
- [ ] Действие драки: редко, двор или зал; коротко; без травм и медпункта
|
||||
- [ ] Триггер: низкое взаимное мнение, задира/вспыльчивый — поля, не if по defName
|
||||
- [ ] Задира держит id жертвы, пока та в ростере; не меняет цель каждый день
|
||||
- [ ] Третий с высоким плюсом к жертве может вступить в ссору на её стороне
|
||||
- [ ] Действие «извиниться» после ссоры/выговора в одном узле возвращает часть мнения
|
||||
- [ ] Сотрудник в узле обрывает драку и делает выговор; нет сотрудника — действие просто кончается
|
||||
- [ ] Лог обоих; кабинет директора не заводим
|
||||
- [ ] Игрок не приказывает разнять
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] Двое врагов на дворе чаще ссорятся, чем двое друзей
|
||||
- [ ] Задира два дня подряд целится в того же человека, если тот ещё в школе
|
||||
- [ ] Извинение поднимает мнение, но не выше, чем до ссоры
|
||||
- [ ] Драка не меняет нужду «здоровье» — такой нужды нет и не появляется
|
||||
- [ ] Выговор после обрыва есть, если в узле был сотрудник
|
||||
- [ ] Skip пустого времени не оставляет «вечную драку» в состоянии
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Задира с врагом на дворе: в логе ссора или драка, мнения ниже, оба живы и на ногах
|
||||
- `dotnet test` проходит
|
||||
|
||||
## Стоп
|
||||
|
||||
Не вызов родителей. Не травмы. Не романтика.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Фаза 45. Кружок в присутствии
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 42](42-talk-circles.md)
|
||||
- [Фаза 19](../05-ai/19-presence-screen.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
В панели локации видно, с кем и о чём говорят, без открытия карточки.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] Кадр присутствия: у человека, который в кружке, список id участников и id темы.
|
||||
Имена не строкой. Клиент собирает «говорит с Машей о футболе» из справочника и локали
|
||||
- [x] Версия протокола +1. `ProtocolCodec.cs`, `protocol.ts`, `docs/protocol.md` в одном коммите
|
||||
- [x] Не в кружке — пустой список, как сейчас только id/узел/состояние
|
||||
- [x] Вкладка «Сейчас» на карточке согласована с тем же составом
|
||||
- [x] Старый клиент отваливается Hello, как обычно
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] Круглый трип и байтовая раскладка человека с кружком и без — на обеих сторонах
|
||||
- [x] Имя человека не встречается в кадре присутствия
|
||||
- [x] Клиентский тест: локация показывает тему и имя напарника из directory, не из кадра
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Клик по коридору на перемене: в «персонажах» видно, кто с кем говорит
|
||||
- `dotnet test` и `npm test` / `build` проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не политика речи. Не пак.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Фаза 46. Политика речи и дом
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 42](42-talk-circles.md)
|
||||
- [Фаза 37](../07-inventory/37-school-rules.md)
|
||||
- [Фаза 34](../07-inventory/34-wear-home.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Школа задаёт, какие темы уместны — тем же жестом, что дресс-код. Родители двигают мнение утром,
|
||||
не приходя на карту.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] В «Правилах» два комбобокса речи: ученики / сотрудники × свободно / без грубого / только учёба
|
||||
- [ ] В силу с завтра; API сегодня не переодевает темы текущих кружков
|
||||
- [ ] Система не стартует кружок с темой вне политики; начатый вчера доигрывает
|
||||
- [ ] Одно семейное событие на человека за рабочее утро; skip ночи применяет
|
||||
- [ ] Семейные темы из `TopicDef`; сдвиг меньше школьного разговора
|
||||
- [ ] `docs/protocol.md` — HTTP правил речи
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] POST «только учёба» сегодня не мешает текущему кружку «игры»
|
||||
- [ ] На следующее рабочее утро грубая тема у учеников не стартует
|
||||
- [ ] Skip с пятницы на понедельник применяет домашнее событие и дрейф мнений; мнение с
|
||||
родителем сдвинуто, брошенная дружба ближе к нулю
|
||||
- [ ] Клиентский тест: комбобоксы речи рядом с одеждой, подпись «с завтра»
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Сменить политику, пережить ночь кнопкой, на перемене нет грубых кружков у учеников
|
||||
- `dotnet test` и `npm test` / `build` проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не романтика. Не вызов родителей в школу.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Фаза 47. Пак romance
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 42](42-talk-circles.md)
|
||||
- [Фаза 23](../06-foundation/23-example-pack.md)
|
||||
- [Фаза 41](41-opinions.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Контентный мод, не скучный образец. Ваниль без романтики. Пак добавляет ориентацию, симпатию,
|
||||
пару 18+ и романтические темы патчем.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] `mods/romance/`: `pack.jsonc` `requires: ["core"]`, локали, ориентация как данные,
|
||||
черты влюбчивый/ревнивый полями, патч тем и при необходимости `Chat`
|
||||
- [x] Без пака в create ориентации и романтических состояний нет; ванильный каталог без
|
||||
романтических тем
|
||||
- [x] Симпатия учеников: ±2 года или соседняя параллель
|
||||
- [x] Симпатия ученик → учитель можно, видна на обеих карточках; учитель → ученик никогда;
|
||||
осадить — разговор; пары сотрудник↔ученик нет
|
||||
- [x] Пара: оба 18+, взаимно, одна; разрыв — событие, новая не раньше следующего дня
|
||||
- [x] Сотрудники между собой — симпатия и пара можно
|
||||
- [x] Никаких сексуальных действий и текстов. Детская линия — дразнилки и ярлык
|
||||
- [x] Тесты хоста: школа с паком и без; запрет учительской взаимности
|
||||
- [x] `example` не трогать
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] `GET /api/catalog` без `romance` не отдаёт романтические темы
|
||||
- [x] Create с паком пишет ориентацию; без пака поля нет
|
||||
- [x] Двое 16-летних не получают статус пары при любом мнении
|
||||
- [x] Учитель не получает романтическое состояние на ученика
|
||||
- [x] Первоклассник не получает симпатию к одиннадцатому (возраст)
|
||||
- [x] Школа с `example` и без `romance` ведёт себя как ваниль в части тем
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Создать школу с галкой пака, увидеть симпатию на «Связях» и тему пака в логе; снять галку на
|
||||
новой школе — этого нет
|
||||
- `dotnet test` проходит
|
||||
|
||||
## Стоп
|
||||
|
||||
Не секс. Не пара учителя и ученика. Не раздувать `example`. Не смена модов у живой школы.
|
||||
@@ -0,0 +1,41 @@
|
||||
Индекс срезов: [`../README.md`](../README.md).
|
||||
|
||||
## Срез 9. Общение и романтический пак
|
||||
|
||||
Дизайн: [`../design/social.md`](../../design/09-social/social.md).
|
||||
|
||||
Разговор становится кружком, мнение — числом, вражда — ссорой. Романтика не ваниль: отдельный
|
||||
пак. Срез можно остановить после этапа B — школа болтает, даже если драк и пака ещё нет.
|
||||
|
||||
**Этап A — мнения.** Число и вкладка.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [41. Мнения и «Связи»](41-opinions.md) | ✅ | −100…100, семья-старт, вкладка карточки |
|
||||
|
||||
**Этап B — разговоры.** Кружок, язык, шёпот.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [42. Темы и кружки](42-talk-circles.md) | ✅ | `TopicDef`, 2–4 человека, учительская, телефон, вместе |
|
||||
| [43. Шёпот и учитель](43-whisper.md) | ✅ | Шёпот на уроке, шанс оборвать, разговор после звонка |
|
||||
|
||||
42 стоит на 41; 43 — на 42.
|
||||
|
||||
**Этап C — конфликт и экран.**
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [44. Ссора и драка](44-quarrel-fight.md) | 🔄 | Жертва задиры, заступник, извинение, двор/физкультура |
|
||||
| [45. Кружок в присутствии](45-presence-talk.md) | ✅ | Id участников и темы в кадре, протокол +1 |
|
||||
|
||||
44 и 45 стоят на 42, можно параллельно.
|
||||
|
||||
**Этап D — правила, дом, пак.**
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [46. Политика речи и дом](46-speech-home.md) | ⬜ | Комбобоксы речи с завтра; утреннее семейное событие |
|
||||
| [47. Пак romance](47-romance-pack.md) | ✅ | Ориентация, симпатия, пара 18+, патч тем |
|
||||
|
||||
46 стоит на 37 и 42; 47 — на 42 и 23. `example` не трогать.
|
||||
Reference in New Issue
Block a user