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:
+22
-274
@@ -1,276 +1,24 @@
|
||||
# Фазы
|
||||
|
||||
Индекс. Статус: ⬜ не начата, 🔄 в работе, ✅ готова.
|
||||
|
||||
Регрессии уже сделанного — [`../bugs/README.md`](../bugs/README.md), не сюда.
|
||||
|
||||
## Срез 1. Оболочка и карта
|
||||
|
||||
Дизайн закрыт: [`../design/near-term.md`](../design/near-term.md),
|
||||
[`../design/defs.md`](../design/defs.md),
|
||||
[`../design/runtime.md`](../design/runtime.md),
|
||||
[`../design/projects.md`](../design/projects.md).
|
||||
|
||||
Новых игровых фич в эти фазы не добавлять. 1 и 2 можно вести параллельно (клиент / сервер).
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [0. Убрать PixiJS](00-drop-pixi.md) | ✅ | Сцена не планируется |
|
||||
| [1. Оболочка менеджера](01-manager-shell.md) | ✅ | Панели с секциями среза, пока без данных |
|
||||
| [2. Работник школы и диск](02-school-worker.md) | ✅ | Поток + World + сейв — основа |
|
||||
| [3. Каталог def и карта](03-defs-map.md) | ✅ | JSONC, core, валидация раскладки |
|
||||
| [4. Моды и редактор в create](04-create-editor.md) | ✅ | Выбор модов, карта в POST, снимок при открытии |
|
||||
|
||||
## Срез 2. Люди
|
||||
|
||||
Дизайн: [`../design/people.md`](../design/people.md).
|
||||
|
||||
Школа наполняется людьми. Ученики, работники и родители существуют, показываются и обновляются
|
||||
раз в год — но **ничего не делают**: ни расписания, ни перемещений, ни влияния характеристик.
|
||||
|
||||
Фазы идут по порядку, кроме 8 и 9: обе зависят только от 7 и могут вестись параллельно
|
||||
(клиент / симуляция).
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [5. Дефы человека](05-people-defs.md) | ✅ | Навыки, черты, тело, нужды, наборы имён в каталоге |
|
||||
| [6. Библиотека генерации](06-people-generator.md) | ✅ | `HSchool.People`: семьи из карты и сида |
|
||||
| [7. Люди в школе](07-people-in-school.md) | ✅ | Сущности в `World`, ростер на диске, 11 кабинетов в `core` |
|
||||
| [8. Просмотр людей](08-people-browser.md) | ✅ | Панель со списком, фильтрами и карточкой |
|
||||
| [9. Годовой набор](09-yearly-intake.md) | ✅ | Первое сентября: переход, выпуск, набор |
|
||||
|
||||
## Срез 3. Штат
|
||||
|
||||
Дизайн: [`../design/staffing.md`](../design/staffing.md).
|
||||
|
||||
Первый срез, где игрок принимает решения. Школа открывается пустой: надо нанять людей из пула
|
||||
соискателей, раздать им предметы и уложиться в выделенную на месяц сумму. Уроков по-прежнему нет —
|
||||
предмет это запись в нагрузке, а не событие в кабинете.
|
||||
|
||||
Фазы идут строго по порядку: каждая опирается на данные предыдущей.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [10. Предметы и мебель](10-subjects.md) | ✅ | `SubjectDef`, одна учительская должность, кабинет как число мест |
|
||||
| [11. Пустая школа и пул](11-applicants.md) | ✅ | Школа без сотрудников, соискатели с запросом по зарплате |
|
||||
| [12. Наём и бюджет](12-hiring-budget.md) | ✅ | Наём, назначение предметов, предел фонда оплаты |
|
||||
| [13. Раздел «Управление»](13-management-tab.md) | ✅ | Деньги, соискатели, штат и назначения на экране |
|
||||
|
||||
## Срез 4. Расписание
|
||||
|
||||
Дизайн: [`../design/schedule.md`](../design/schedule.md).
|
||||
|
||||
Часы учебного плана раскладываются по дням и кабинетам. Школа начинает жить по времени: видно,
|
||||
что идёт в комнате прямо сейчас. Люди при этом по-прежнему **не ходят** — они находятся там, где
|
||||
их застало расписание.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [14. Каркас дня и каникулы](14-school-calendar.md) | ✅ | Звонки, длина недели, каникулы |
|
||||
| [15. Планировщик](15-timetable-planner.md) | ✅ | Раскладка часов по слотам, четыре запрета |
|
||||
| [16. Расписание в школе](16-timetable-in-school.md) | ✅ | Сейв, снимок, «кто где сейчас» |
|
||||
| [17. Расписание на экране](17-timetable-screen.md) | ✅ | Скобки в дереве, сетка класса, расписание учителя |
|
||||
|
||||
## Срез 5. Жизнь школы
|
||||
|
||||
Дизайн: [`../design/ai.md`](../design/ai.md).
|
||||
|
||||
Люди начинают ходить и решать. Присутствие перестаёт вычисляться из расписания и становится
|
||||
состоянием: человек приходит утром, идёт коридором, может уйти с урока в туалет и вернуться.
|
||||
|
||||
Срез идёт **двумя этапами**, и между ними можно остановиться — школа останется целостной.
|
||||
|
||||
**Этап A — присутствие.** Люди ходят по обязанности; выбора у них ещё нет.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [18. Присутствие и ходьба](18-presence-walking.md) | ✅ | `HSchool.Ai`, место человека, маршруты, приход и уход |
|
||||
| [19. Присутствие на экране](19-presence-screen.md) | ✅ | Своё сообщение ~2 Гц, числа в дереве, статический снимок карты, пропуск пустого времени |
|
||||
|
||||
**Этап B — поведение.** Появляются нужды, действия и выбор между ними и обязанностью.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [20. Нужды и действия](20-needs-actions.md) | ✅ | `ActionDef` с полями, декей, восполнение |
|
||||
| [21. Выбор действия](21-decisions.md) | ✅ | Цели и веса, «дойти → сделать», уход с урока, рост навыка |
|
||||
|
||||
## Срез 6. Фундамент
|
||||
|
||||
Дизайн: [`../design/foundation.md`](../design/foundation.md).
|
||||
|
||||
Срез без единой новой кнопки для игрока. Мод становится настоящим объектом, числа поведения
|
||||
уезжают из кода в данные, сид перестаёт быть идентификатором, у сейва появляется версия, а то,
|
||||
что ревью ловило глазами, начинает ловиться тестом. Всё здесь дёшево поодиночке и заметно
|
||||
упрощает следующие срезы.
|
||||
|
||||
Порядок свободный: 25, 26 и 27 ни от чего не зависят, 23 стоит на 22. Начинать разумно с 25 —
|
||||
она страхует всё остальное.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [22. Удостоверение пака](22-mod-identity.md) | ✅ | Название, версия, зависимости и порядок загрузки |
|
||||
| [23. Пример мода](23-example-pack.md) | ✅ | Настоящая папка вместо документов в памяти |
|
||||
| [24. Числа поведения](24-behavior-numbers.md) | ✅ | Веса целей в `BehaviorDef`, а не в коде |
|
||||
| [25. Золотые файлы](25-golden-fixtures.md) | ✅ | Отпечаток ростера, старый сейв, кривая голода, нехватка учителей |
|
||||
| [26. Свой сид](26-school-seed.md) | ✅ | Состав школы перестаёт зависеть от порядка создания |
|
||||
| [27. Версия сейва и дамп](27-serviceability.md) | ✅ | Формат читается, внутрь школы можно заглянуть |
|
||||
| [28. Тесты экранов](28-screen-tests.md) | ✅ | DOM-окружение и логика клиента под тестом |
|
||||
|
||||
## Срез 7. Одежда, вещи и климат
|
||||
|
||||
Дизайн: [`../design/inventory.md`](../design/inventory.md).
|
||||
|
||||
Человек одевается, несёт вещи, мёрзнет и переодевается. Игрок смотрит гардероб и выбирает
|
||||
правила школы; надевает не он. Погода видна у часов. Срез можно остановить после этапа A —
|
||||
школа останется одетой, даже если климат ещё не живой.
|
||||
|
||||
**Этап A — данные и гардероб.** Страна вместо набора имён, вещи умеют быть одеждой, генератор
|
||||
одевает.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [29. Страна](29-country.md) | ✅ | `CountryDef`, create выбирает страну, климат-пресет от сида |
|
||||
| [30. Слои и палитра](30-apparel-defs.md) | ✅ | Поля `ThingDef`, `ColorDef`, ванильная одежда и ноша |
|
||||
| [31. Генератор одевает](31-dress-generator.md) | ✅ | Гардероб на человеке, ноша-число, `people.json` |
|
||||
|
||||
29 и 30 независимы; 31 стоит на обеих.
|
||||
|
||||
**Этап B — климат.** Улица, нужда тепла, техник, раздевалки.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [32. Погода и тепло](32-weather-warmth.md) | ✅ | Пресет крутит улицу, кадр часов, нужда, две черты |
|
||||
| [33. Техник и шкафчики](33-lockers-technician.md) | ✅ | Комната техника, две раздевалки, раздача шкафчиков |
|
||||
|
||||
32 стоит на 29; 33 — на 31 и 32.
|
||||
|
||||
**Этап C — жизнь одежды.** Износ, переодевание, экран.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [34. Износ и дом](34-wear-home.md) | ✅ | Прочность, утренняя замена, из ветхого не выходят |
|
||||
| [35. Уместность](35-appropriateness.md) | ✅ | Правила, переодевание действием, физкультура |
|
||||
| [36. Вкладки карточки](36-person-card-tabs.md) | ✅ | Одежда, ноша, сейчас + история за сегодня |
|
||||
| [37. Правила школы](37-school-rules.md) | ✅ | Вкладка в «Управлении», четыре комбобокса, с завтра |
|
||||
|
||||
34 стоит на 31; 35 — на 32–34; 36 — на 31 и может идти параллельно с 35 в части вкладок одежды,
|
||||
история — после 35; 37 стоит на 35 и 36.
|
||||
|
||||
## Срез 8. Сессия и темп
|
||||
|
||||
Дизайн: [`../design/session.md`](../design/session.md).
|
||||
|
||||
Несколько браузеров на одном сервере: общий пароль альфы, имя игрока, свои школы и чужие
|
||||
отдельным списком. Часы становятся смотрибельными — минута за секунду, на высоких скоростях
|
||||
тяжёлые системы тикают реже. Срез можно остановить после этапа B: мультиплеер жив, даже если
|
||||
темп ещё старый.
|
||||
|
||||
**Этап A — кто вошёл.** Пароль, имя, кука.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [38. Сессия](38-session.md) | ✅ | Пароль альфы, имя, кука, сокет после входа |
|
||||
|
||||
**Этап B — чьи школы.** Хозяин, слоты, гость только смотрит.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [39. Хозяин школы](39-school-owners.md) | ✅ | `owner`, 2 слота на игрока, мои / чужие, гость без управления |
|
||||
|
||||
39 стоит на 38.
|
||||
|
||||
**Этап C — темп.** Не зависит от A/B, можно вести параллельно с 38.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [40. Темп часов](40-clock-tempo.md) | ✅ | ×1 = минута/с, кнопки ×½ ×1 ×2 ×5 ×10, страйд тяжёлых систем |
|
||||
|
||||
## Срез 9. Общение и романтический пак
|
||||
|
||||
Дизайн: [`../design/social.md`](../design/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` не трогать.
|
||||
|
||||
## Срез 10. Ремесло
|
||||
|
||||
Дизайн: [`../design/craft.md`](../design/craft.md).
|
||||
|
||||
Срез без новой кнопки. Слои ловятся одним тестовым проектом, клиентский `npm test` гоняет tsc,
|
||||
работник и карточка режутся по швам, дамп проверяет явку. После этапа A школа целая, даже если
|
||||
файлы ещё толстые. Не ждёт фазы 44 и 46.
|
||||
|
||||
Порядок свободный: 56, 57 и 59 ни от чего не зависят, 58 удобнее после 57. Начинать разумно с
|
||||
56 или 57.
|
||||
|
||||
**Этап A — страховка.** Слои и tsc.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [56. Слои одной пачкой](56-architecture-tests.md) | ⬜ | Один проект вместо четырёх копипаст |
|
||||
| [57. tsc в npm test](57-client-typecheck.md) | ⬜ | Дубликат ключа красный без `npm run build` |
|
||||
|
||||
**Этап B — горячие точки.** Поведение то же.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [58. SchoolWorker и карточка](58-worker-card-split.md) | ⬜ | partial / модули по швам, один поток |
|
||||
|
||||
**Этап C — дамп.**
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [59. Дамп проверяет узлы](59-dump-nodes.md) | ⬜ | После найма в дампе есть `NodeId` |
|
||||
|
||||
## Вне очереди
|
||||
|
||||
Дизайн: [`../design/off-queue.md`](../design/off-queue.md).
|
||||
|
||||
Склейка уже живых систем и мелкий DX, не новый кусок игры. Номера не спорят с именованными
|
||||
срезами. После каждой игровой фазы школа целая. 50–52 стоят на 48; 53 — на 18 и 32, можно
|
||||
параллельно с 48. 49, 54 и 55 от них не зависят. Баг в уже сделанном —
|
||||
[`../bugs/README.md`](../bugs/README.md).
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [48. Учитель в кабинете](48-lesson-teacher-present.md) | ✅ | Нет учителя на месте — нет роста навыка |
|
||||
| [49. Пропуск сборки при запуске](49-skip-stale-build.md) | ✅ | `run-aspire.cmd` не гоняет MSBuild, если dll свежие |
|
||||
| [50. Навык учителя](50-teacher-skill-gain.md) | ✅ | Соискатель 78 учит лучше, чем 41 |
|
||||
| [51. Тепло на уроке](51-warmth-lesson.md) | ✅ | Замёрзший учится хуже, как голодный |
|
||||
| [52. Учебник на уроке](52-textbook-lesson.md) | ✅ | Нет в сумке — половинный рост |
|
||||
| [53. Погода на дороге](53-weather-commute.md) | ✅ | Снег и дождь добавляют минуты к приходу |
|
||||
| [54. Что нового](54-whats-new.md) | ✅ | После входа — окно коммитов с прошлого визита |
|
||||
| [55. Состояние экрана](55-view-state.md) | ✅ | F5 и переходы не сбрасывают школу, вкладки и фильтры |
|
||||
Каталог срезов. Статусы и таблицы фаз — в индексе среза, не здесь.
|
||||
⬜ не начата, 🔄 в работе, ✅ готова.
|
||||
|
||||
Регрессии — [`../bugs/README.md`](../bugs/README.md). Сводка ревью — [`reviewed.md`](reviewed.md);
|
||||
журнал среза — `reviewed.md` в его папке.
|
||||
|
||||
Агенту: это оглавление. Не читай индексы всех срезов. Номер фазы → `docs/phases/*/<NN>-*.md`.
|
||||
Срез → папка и её `README.md`. Дизайн → `docs/design/<та же папка>/`.
|
||||
|
||||
| Срез | Фазы | Индекс | Дизайн |
|
||||
| --- | --- | --- | --- |
|
||||
| 1. Оболочка и карта | 0–4 | [01-shell](01-shell/README.md) | [01-shell](../design/01-shell/) |
|
||||
| 2. Люди | 5–9 | [02-people](02-people/README.md) | [people](../design/02-people/people.md) |
|
||||
| 3. Штат | 10–13 | [03-staffing](03-staffing/README.md) | [staffing](../design/03-staffing/staffing.md) |
|
||||
| 4. Расписание | 14–17 | [04-schedule](04-schedule/README.md) | [schedule](../design/04-schedule/schedule.md) |
|
||||
| 5. Жизнь школы | 18–21 | [05-ai](05-ai/README.md) | [ai](../design/05-ai/ai.md) |
|
||||
| 6. Фундамент | 22–28 | [06-foundation](06-foundation/README.md) | [foundation](../design/06-foundation/foundation.md) |
|
||||
| 7. Одежда, вещи и климат | 29–37 | [07-inventory](07-inventory/README.md) | [inventory](../design/07-inventory/inventory.md) |
|
||||
| 8. Сессия и темп | 38–40 | [08-session](08-session/README.md) | [session](../design/08-session/session.md) |
|
||||
| 9. Общение и романтический пак | 41–47 | [09-social](09-social/README.md) | [social](../design/09-social/social.md) |
|
||||
| 10. Ремесло | 56–59 | [10-craft](10-craft/README.md) | [craft](../design/10-craft/craft.md) |
|
||||
| Вне очереди | 48–55 | [off-queue](off-queue/README.md) | [off-queue](../design/off-queue/) |
|
||||
|
||||
Reference in New Issue
Block a user