Mark phase 77 in progress; register slice 14.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-21 11:32:25 +03:00
co-authored by Cursor
parent 4c8d91c6f3
commit 76eb882285
9 changed files with 350 additions and 0 deletions
+165
View File
@@ -0,0 +1,165 @@
# Здоровье и болезни
Договорённость на срез после журнала, не текущий код.
Одежда и климат: [`inventory.md`](../07-inventory/inventory.md). Урок: [`lesson-consequences.md`](../off-queue/lesson-consequences.md).
Журнал: [`grades.md`](../13-grades/grades.md). Кабинет: [`office.md`](../12-office/office.md).
Нужды и тело: [`people.md`](../02-people/people.md). Медкабинет в `core`: `MedicalOffice`, должность `Nurse`.
У человека появляется **медицинское состояние** — не один флаг «болеет», а набор условий с
тяжестью, стадиями и эффектами (ориентир: hediff-слой RimWorld, но **сильнее упор на
реалистичные болезни**, инкубацию, иммунитет и заразность в школе). Медсестра и кабинет лечат.
Промокание и холод — векторы. Журнал 13 получает **уважительный** пропуск.
## Роль игрока: менеджер / симулятор бога
Как в [`office.md`](../12-office/office.md): нанять медсестру, держать медкабинет, смотреть вкладку
здоровья. Не «вылечи этого» кнопкой на карточке и не расстановка больных вручную. Люди сами идут
в медпункт или остаются дома по весам ИИ.
## Что увидит игрок
- На карточке — вкладка **здоровье**: активные состояния, тяжесть/стадия, кратко «что делает».
- Больные реже приходят / уходят к медсестре / сидят урок хуже (множители в данные).
- Заражение в классе и коридоре — видно по вспышке (тосты, несколько заболевших).
- В журнале (13) отсутствие по болезни не выглядит как прогул.
## На какие вопросы отвечает
- Как хранить несколько одновременных состояний с тяжестью, не смешивая с нуждами.
- Как устроены болезни: инкубация → симптомы → пик → иммунитет / хронизация (редко, данные).
- Как заразность работает в узле и в классе без глобальной магии.
- Как холод, дождь и промокание повышают шанс конкретных болезней.
- Как медсестра (`Medicine` / уход) снижает тяжесть и ускоряет выход.
- Как явка в срезе 13 различает прогул и болезнь.
## Чего нет
- Хирургии, ампутаций, установки органов, пулевых ран.
- Травм после драки (срез 9/12 сознательно без травм) — в этот срез не возвращаем.
- Настоящей больницы и госпитализации на недели вне школы.
- Игрока-врача с паузой и приказом «полечи».
- Полного анатомического дерева «каждый палец» как в бою RimWorld: для школы важнее
**системы органов / тракты** как мишени болезней (дыхание, ЖКТ, ЛОР…), не боевая медицина.
## Что меняется в уже принятом
| Было | Стало | Почему |
| --- | --- | --- |
| Нужды есть, болезней нет | Плюс слой состояний здоровья | Иначе «простуда от дождя» некуда класть |
| Медкабинет и Nurse — слот и должность | Уход и очередь к медсестре | Комната перестаёт быть декорацией |
| Явка в 13 — прогул/опоздание | Плюс причина «болезнь» | Связность с журналом |
| Тепло режет урок | Болезнь тоже режет и явку | Связность |
| Родители на собрании (12) | Могут болеть / не прийти | Тот же слой на всех ролях |
## Модель (сильнее «просто sick»)
### Состояние
На человеке список **условий** (`HealthCondition` / аналог hediff):
- `defName` болезни или состояния;
- тяжесть 0…1 (или стадия из def);
- прогресс иммунитета / лечения;
- источник (зараз, холод, идиопатия);
- когда началось.
Несколько условий сразу (простуда + живот) — норма. Нужды **не** заменяют болезни: болезнь
может усиливать спад тепла/голода или резать caps, но «голод» остаётся нуждой.
### Def болезни
`DiseaseDef` (имя уточнит фаза) в `core`:
- семейство (респираторное, ЖКТ, …) — для реализма и иммунитета;
- инкубация, длительности стадий, кривая тяжести;
- симптомы → модификаторы нужд, `LessonLearning`, скорости ходьбы, шанс остаться дома;
- заразность: радиус (узел / класс), шанс контакта, носительство в инкубации — да/нет;
- векторы: холод ниже порога, дождь/снег на улице, промокание (если появится явное состояние
«мокрый» — иначе через тепло/погоду на приходе);
- ответ на уход: насколько `tend` медсестры и навык Medicine сдвигают иммунитет;
- после выздоровления — временный иммунитет к семейству / к def.
Ваниль: несколько разных болезней (не одна «Болезнь»), например ОРВИ, грипп, гастро, ЛОР —
конкретный набор в фазе, все через данные.
### Реалистичнее RimWorld-школы
- Инкубация без симптомов, но уже можно заражать (по полю def).
- Разные кривые и сезоны/погода как множитель фона (климат школы).
- Тяжёлая стадия → с большей вероятностью **не приходит** (вне школы), уважительная явка.
- Лёгкая → приходит, учится хуже, чаще в медпункт.
- Рецидив / суперинфекция — только если поля на def разрешают; не обязательно в ванили v1.
### Медпункт
`MedicalOffice` + `Nurse`. Больной с достаточным дискомфортом получает цель «к медсестре».
Очередь в кабинете / ожидание у узла — тот же дух, что у директора (12), проще если надо.
Уход тикает тяжесть/иммунитет. Нет медсестры — болезни идут натурально, дольше и злее (данные).
## Этап A — слой состояний
Хранение, сейв, тик тяжести/стадий без заразности и без UI. Пустой список = здоров.
После этапа школа целая: слой есть, ванильных вспышек может ещё не быть.
## Этап B — ванильные болезни и векторы
Несколько `DiseaseDef`, старт от холода/погоды/шанса. Эффекты на нужды и урок. Связь с
прогулом 13 (причина болезнь).
## Этап C — заразность
Контакт в узле и/или классе. Детерминизм от сида. Тост на вспышку (не на каждый чих).
## Этап D — медсестра и экран
Уход, очередь, вкладка здоровья на карточке. Связность: болезнь → явка → оценки; симптомы →
общение слабее / реже кружки (поле, не хардкод).
После этапа срез 14 закрыт.
## Поток данных
Состояния — на человеке, тик на потоке школы. Решение «идти кNurse / остаться дома» — `HSchool.Ai`.
Карточка — HTTP. Тосты — EventDef. Журнал 13 читает причину отсутствия из состояния.
## Где живёт код
Нового проекта нет (отдельная сборка «Medicine» не заводим, пока слой не раздуется).
| Что | Куда |
| --- | --- |
| `DiseaseDef` / стадии / векторы | `HSchool.Content` + JSONC |
| Тик, заражение, уход | `HSchool.Ai` + Simulation |
| Явка «болезнь» | стык с 13 |
| Вкладка, тосты | Server + Client + EventDef |
## Советы, которые стоит принять сразу
- Не смешивать болезнь с нуждой «здоровье» одной шкалой навсегда: нужды уже заняты; состояние —
список.
- Не тащить боевую анатомию RimWorld ради школы.
- Не лечить драку травмой в этом срезе.
- Заразность — данные на def, не один глобальный RNG на школу.
- Игрок не жмёт «вылечи».
## Заведомо не сейчас
- Хирургия, протезы, наркоз, кровь, шрамы-кампания.
- Больничный лист с зарплатой учителя.
- Пандемический UI и карантинные приказы игрока.
- Травмы драки, мокрый, aftereffect, явная дыра урока от больного учителя —
[`fallout.md`](../15-fallout/fallout.md).
## Зафиксировано этим разговором
| Тема | Решение |
| --- | --- |
| Оценки | Отдельный срез 13, шкала 2–5 |
| Заражение и разные болезни | В этом же срезе 14 |
| Weave | Отдельного среза нет; связность с журналом и уроком здесь |
| Медсостояние | Список условий с тяжестью (hediff-подобно), упор на болезни |
| Реализм | Инкубация, семейства, векторы погоды, иммунитет, уход |
| Приказы | Нет; менеджер / симулятор бога |
| Ваниль | `core` |
| Стоп | После A/B/C школа целая |