# Conflicts: # docs/phases/README.md # tests/HSchool.AppHost.Tests/PortraitApiTests.cs
15 KiB
Фазы
Индекс. Статус: ⬜ не начата, 🔄 в работе, ✅ готова.
Срез 1. Оболочка и карта
Дизайн закрыт: ../design/near-term.md,
../design/defs.md,
../design/runtime.md,
../design/projects.md.
Новых игровых фич в эти фазы не добавлять. 1 и 2 можно вести параллельно (клиент / сервер).
| Фаза | Статус | Зачем |
|---|---|---|
| 0. Убрать PixiJS | ✅ | Сцена не планируется |
| 1. Оболочка менеджера | ✅ | Панели с секциями среза, пока без данных |
| 2. Работник школы и диск | ✅ | Поток + World + сейв — основа |
| 3. Каталог def и карта | ✅ | JSONC, core, валидация раскладки |
| 4. Моды и редактор в create | ✅ | Выбор модов, карта в POST, снимок при открытии |
Срез 2. Люди
Дизайн: ../design/people.md.
Школа наполняется людьми. Ученики, работники и родители существуют, показываются и обновляются раз в год — но ничего не делают: ни расписания, ни перемещений, ни влияния характеристик.
Фазы идут по порядку, кроме 8 и 9: обе зависят только от 7 и могут вестись параллельно (клиент / симуляция).
| Фаза | Статус | Зачем |
|---|---|---|
| 5. Дефы человека | ✅ | Навыки, черты, тело, нужды, наборы имён в каталоге |
| 6. Библиотека генерации | ✅ | HSchool.People: семьи из карты и сида |
| 7. Люди в школе | ✅ | Сущности в World, ростер на диске, 11 кабинетов в core |
| 8. Просмотр людей | ✅ | Панель со списком, фильтрами и карточкой |
| 9. Годовой набор | ✅ | Первое сентября: переход, выпуск, набор |
Срез 3. Штат
Дизайн: ../design/staffing.md.
Первый срез, где игрок принимает решения. Школа открывается пустой: надо нанять людей из пула соискателей, раздать им предметы и уложиться в выделенную на месяц сумму. Уроков по-прежнему нет — предмет это запись в нагрузке, а не событие в кабинете.
Фазы идут строго по порядку: каждая опирается на данные предыдущей.
| Фаза | Статус | Зачем |
|---|---|---|
| 10. Предметы и мебель | ✅ | SubjectDef, одна учительская должность, кабинет как число мест |
| 11. Пустая школа и пул | ✅ | Школа без сотрудников, соискатели с запросом по зарплате |
| 12. Наём и бюджет | ✅ | Наём, назначение предметов, предел фонда оплаты |
| 13. Раздел «Управление» | ✅ | Деньги, соискатели, штат и назначения на экране |
Срез 4. Расписание
Дизайн: ../design/schedule.md.
Часы учебного плана раскладываются по дням и кабинетам. Школа начинает жить по времени: видно, что идёт в комнате прямо сейчас. Люди при этом по-прежнему не ходят — они находятся там, где их застало расписание.
| Фаза | Статус | Зачем |
|---|---|---|
| 14. Каркас дня и каникулы | ✅ | Звонки, длина недели, каникулы |
| 15. Планировщик | ✅ | Раскладка часов по слотам, четыре запрета |
| 16. Расписание в школе | ✅ | Сейв, снимок, «кто где сейчас» |
| 17. Расписание на экране | ✅ | Скобки в дереве, сетка класса, расписание учителя |
Срез 5. Жизнь школы
Дизайн: ../design/ai.md.
Люди начинают ходить и решать. Присутствие перестаёт вычисляться из расписания и становится состоянием: человек приходит утром, идёт коридором, может уйти с урока в туалет и вернуться.
Срез идёт двумя этапами, и между ними можно остановиться — школа останется целостной.
Этап A — присутствие. Люди ходят по обязанности; выбора у них ещё нет.
| Фаза | Статус | Зачем |
|---|---|---|
| 18. Присутствие и ходьба | ✅ | HSchool.Ai, место человека, маршруты, приход и уход |
| 19. Присутствие на экране | ✅ | Своё сообщение ~2 Гц, числа в дереве, статический снимок карты, пропуск пустого времени |
Этап B — поведение. Появляются нужды, действия и выбор между ними и обязанностью.
| Фаза | Статус | Зачем |
|---|---|---|
| 20. Нужды и действия | ✅ | ActionDef с полями, декей, восполнение |
| 21. Выбор действия | ✅ | Цели и веса, «дойти → сделать», уход с урока, рост навыка |
Срез 6. Фундамент
Дизайн: ../design/foundation.md.
Срез без единой новой кнопки для игрока. Мод становится настоящим объектом, числа поведения уезжают из кода в данные, сид перестаёт быть идентификатором, у сейва появляется версия, а то, что ревью ловило глазами, начинает ловиться тестом. Всё здесь дёшево поодиночке и заметно упрощает следующие срезы.
Порядок свободный: 25, 26 и 27 ни от чего не зависят, 23 стоит на 22. Начинать разумно с 25 — она страхует всё остальное.
| Фаза | Статус | Зачем |
|---|---|---|
| 22. Удостоверение пака | ✅ | Название, версия, зависимости и порядок загрузки |
| 23. Пример мода | ✅ | Настоящая папка вместо документов в памяти |
| 24. Числа поведения | ✅ | Веса целей в BehaviorDef, а не в коде |
| 25. Золотые файлы | ✅ | Отпечаток ростера, старый сейв, кривая голода, нехватка учителей |
| 26. Свой сид | ✅ | Состав школы перестаёт зависеть от порядка создания |
| 27. Версия сейва и дамп | ✅ | Формат читается, внутрь школы можно заглянуть |
| 28. Тесты экранов | ✅ | DOM-окружение и логика клиента под тестом |
Срез 7. Одежда, вещи и климат
Дизайн: ../design/inventory.md.
Человек одевается, несёт вещи, мёрзнет и переодевается. Игрок смотрит гардероб и выбирает правила школы; надевает не он. Погода видна у часов. Срез можно остановить после этапа A — школа останется одетой, даже если климат ещё не живой.
Этап A — данные и гардероб. Страна вместо набора имён, вещи умеют быть одеждой, генератор одевает.
| Фаза | Статус | Зачем |
|---|---|---|
| 29. Страна | ✅ | CountryDef, create выбирает страну, климат-пресет от сида |
| 30. Слои и палитра | ✅ | Поля ThingDef, ColorDef, ванильная одежда и ноша |
| 31. Генератор одевает | ✅ | Гардероб на человеке, ноша-число, people.json |
29 и 30 независимы; 31 стоит на обеих.
Этап B — климат. Улица, нужда тепла, техник, раздевалки.
| Фаза | Статус | Зачем |
|---|---|---|
| 32. Погода и тепло | ✅ | Пресет крутит улицу, кадр часов, нужда, две черты |
| 33. Техник и шкафчики | ✅ | Комната техника, две раздевалки, раздача шкафчиков |
32 стоит на 29; 33 — на 31 и 32.
Этап C — жизнь одежды. Износ, переодевание, экран.
| Фаза | Статус | Зачем |
|---|---|---|
| 34. Износ и дом | ✅ | Прочность, утренняя замена, из ветхого не выходят |
| 35. Уместность | ✅ | Правила, переодевание действием, физкультура |
| 36. Вкладки карточки | ✅ | Одежда, ноша, сейчас + история за сегодня |
| 37. Правила школы | ✅ | Вкладка в «Управлении», четыре комбобокса, с завтра |
34 стоит на 31; 35 — на 32–34; 36 — на 31 и может идти параллельно с 35 в части вкладок одежды, история — после 35; 37 стоит на 35 и 36.
Срез 8. Сессия и темп
Дизайн: ../design/session.md.
Несколько браузеров на одном сервере: общий пароль альфы, имя игрока, свои школы и чужие отдельным списком. Часы становятся смотрибельными — минута за секунду, на высоких скоростях тяжёлые системы тикают реже. Срез можно остановить после этапа B: мультиплеер жив, даже если темп ещё старый.
Этап A — кто вошёл. Пароль, имя, кука.
| Фаза | Статус | Зачем |
|---|---|---|
| 38. Сессия | ✅ | Пароль альфы, имя, кука, сокет после входа |
Этап B — чьи школы. Хозяин, слоты, гость только смотрит.
| Фаза | Статус | Зачем |
|---|---|---|
| 39. Хозяин школы | ⬜ | owner, 2 слота на игрока, мои / чужие, гость без управления |
39 стоит на 38.
Этап C — темп. Не зависит от A/B, можно вести параллельно с 38.
| Фаза | Статус | Зачем |
|---|---|---|
| 40. Темп часов | ✅ | ×1 = минута/с, кнопки ×½ ×1 ×2 ×5 ×10, страйд тяжёлых систем |
Срез 9. Общение и романтический пак
Дизайн: ../design/social.md.
Разговор становится кружком, мнение — числом, вражда — ссорой. Романтика не ваниль: отдельный пак. Срез можно остановить после этапа B — школа болтает, даже если драк и пака ещё нет.
Этап A — мнения. Число и вкладка.
| Фаза | Статус | Зачем |
|---|---|---|
| 41. Мнения и «Связи» | 🔄 | −100…100, семья-старт, вкладка карточки |
Этап B — разговоры. Кружок, язык, шёпот.
| Фаза | Статус | Зачем |
|---|---|---|
| 42. Темы и кружки | ⬜ | TopicDef, 2–4 человека, учительская, телефон, вместе |
| 43. Шёпот и учитель | ⬜ | Шёпот на уроке, шанс оборвать, разговор после звонка |
42 стоит на 41; 43 — на 42.
Этап C — конфликт и экран.
| Фаза | Статус | Зачем |
|---|---|---|
| 44. Ссора и драка | ⬜ | Жертва задиры, заступник, извинение, двор/физкультура |
| 45. Кружок в присутствии | ⬜ | Id участников и темы в кадре, протокол +1 |
44 и 45 стоят на 42, можно параллельно.
Этап D — правила, дом, пак.
| Фаза | Статус | Зачем |
|---|---|---|
| 46. Политика речи и дом | ⬜ | Комбобоксы речи с завтра; утреннее семейное событие |
| 47. Пак romance | ⬜ | Ориентация, симпатия, пара 18+, патч тем |
46 стоит на 37 и 42; 47 — на 42 и 23. example не трогать.