--:--
LUDUM DARE 60 · COMPO · ТЕМА «OLD TECH»

Counterweight
making-of

Как за одну ночь монохромная толпа-жидкость превратилась в игру про старую машину на воде и человеческом весе. Только ключевые повороты: что произошло, что изменилось и почему.

70коммитов
19макетов
7вех техно-демки
8+идей отброшено
210человек в катке
↓ ПРОКРУТИ, ЧТОБЫ ПЕРЕМОТАТЬ НОЧЬ
Пятница, 16 октября
22:43Идея
Идея

Толпа, которая течёт как жидкость

За пару часов до старта джема автор уже знает, что хочет почувствовать: монохромная толпа в духе KIDS, сотни человечков, которые обтекают колонны, застревают в дверях и давят друг на друга, но каждый остаётся читаемым.

Тема ещё неизвестна, поэтому пишется не игра, а техно-демка: ядро симуляции плюс рендер и две пробы - песочница-пастух и режим «продираться сквозь толпу». Первое веб-ТЗ переписывается под Unity.

Сотни-тысячи процедурных пиксельных человечков текут как вязкая жидкость... но каждый человек всегда читается отдельно.TZ_crowd_techdemo.md, 22:43
22:51Техно-демо
Техно-демо

Gemini получает ТЗ и ночь на семь вех

Агент в Antigravity работает автономно: ТЗ разбито на вехи M0-M6, у каждой тесты и отчёт в PROGRESS.md. В 22:51 создаётся Unity-проект (Burst, Collections, Input System).

К 23:00 готов каркас: фреймбуфер 640x360 из трёх цветов - бумага, чернила и красный - с целочисленным масштабом и фикс-шагом 60 Гц. Эта палитра потом станет визуальным кодом всей игры.

22:58, M0: чистый лист бумаги, рамка и перекрестие - проверка, что фреймбуфер вообще живой
22:58, M0: чистый лист бумаги, рамка и перекрестие - проверка, что фреймбуфер вообще живой
коммиты: 941806c, 0e2e712
23:12Техно-демо
Техно-демо

M1: толпа начинает течь

Ядро симуляции: социальные силы Хельбинга, позиционная коррекция (PBD), пространственная сетка, поле течения к двери и поле расстояний до стен. 10 тестов зелёные: ни одного туннелирования через стену, детерминизм по хэшу позиций.

Первый кадр с аркой давления перед дверью - ровно то, ради чего всё затевалось.

23:12: люди скапливаются у двери и вытекают струйкой
23:12: люди скапливаются у двери и вытекают струйкой
встречные потоки без заторов - позже за это отругают
встречные потоки без заторов - позже за это отругают
коммиты: b022a22
23:25Техно-демо
Техно-демо

M2: у точек появляются плечи

Рендер человечков: процедурный атлас из 320 штампов (16 направлений, 4 кадра шага, 5 вариантов), 1-px бумажный контур вырезает силуэт из толпы позади, чтобы каждый был виден.

Тогда это казалось победой. Через два часа автор скажет, что они «больше похожи на точки, чем на людей».

23:15, M2: первые человечки, крупный зум
23:15, M2: первые человечки, крупный зум
обтекание колонн 1x1 м
обтекание колонн 1x1 м
коммиты: 6b24069
23:40Техно-демо
Техно-демо

M3: песочница, карта износа и дебаг-слои

ЛКМ притягивает толпу, ПКМ отталкивает, E/Q рисуют и стирают стены, D переключает дверь, B запускает ударную волну. Появляются карта износа пола и дебаг-слои сил и давления.

Именно дебаг-режимы потом получат отдельную похвалу в плейтесте.

карта износа: где чаще всего ходят, пол темнеет
карта износа: где чаще всего ходят, пол темнеет
дебаг-слои: видно, как люди обтекают препятствия
дебаг-слои: видно, как люди обтекают препятствия
ударная волна, 1 секунда в кадрах
ударная волна, 1 секунда в кадрах
коммиты: 10da474
Суббота, 17 октября
00:02–00:15Техно-демо
Техно-демо

M4-M6: продираться, звук и сборки

M4 (00:02): режим «Продираться» - гребки плечами ЛКМ/ПКМ, комбо, выносливость и дизер-виньетка при давлении. M5 (00:09): весь звук процедурный, без единого файла; гул толпы - розовый шум через фильтр, который меняется с плотностью. M6 (00:15): сборки под Windows и WebGL.

За 1 час 24 минуты - семь вех и работающая демка.

00:01, M4: игрок в толпе, давление сжимает кадр дизер-виньеткой
00:01, M4: игрок в толпе, давление сжимает кадр дизер-виньеткой
техно-демка за ночь: от пустого листа до виньетки
техно-демка за ночь: от пустого листа до виньетки
коммиты: 99e418c, 0e570bb, 4b171f8
01:00Джем
Джем

Старт LD60. Тема: «Old Tech»

Тема раскрыта - «Old Tech» - и с толпой пока не стыкуется: где тут старьё? Зато в руках уже есть работающий стенд с физикой, звуком и рендером.

К ~01:50 решено: участвуем в Compo; заготовка по правилам разрешена, исходники выложим в конце.

01:34Плейтест
Плейтест

Видео-плейтест: любим звук, ругаем точки

Автор записывает три минуты голосом поверх игры. Понравилось: звук, узкий проход с дверью (лучший уровень), притяжение курсора, дебаг-режимы и дизер.

Не понравилось: человечки-точки, мягкие коллизии без ощущения давки, режим «от первого лица» оказался top-down (нужен настоящий 3D first-person) и - главное - у демки нет core-геймплея.

Двигаются норм, но это не интересно как игра, нет игрового элемента - и это пока самое ключевое, что тут плохо.автор, плейтест, 02:24 записи
00:19: дверь открыта, ПКМ стягивает толпу - любимая сцена
00:19: дверь открыта, ПКМ стягивает толпу - любимая сцена
00:36: «кринжовенькие, больше похожи на точки»
00:36: «кринжовенькие, больше похожи на точки»
01:32: «первое лицо», которое оказалось видом сверху
01:32: «первое лицо», которое оказалось видом сверху
01:50–03:30Дизайн
Дизайн

Длинное интервью: что выкинули и что нашли

Полтора часа вопросов и ответов. Отброшено: метро-диспетчер, луддиты, последний поезд, шагоход, крепость, печь, «машина, которая ест людей», толпа, ломающая двери.

Нашлось золото в двух идеях: аналоговое сопротивление старых машин (тугие рычаги, запаздывающие стрелки) и гигантская старая машина, которая существует благодаря людям. Жёсткое правило: смерть никогда не усложняет игру, остаётся только визуальный след.

02:39–02:42Макеты
Макеты

Раунд 1: пять макетов за три минуты

Чтобы нащупать картинку, Gemini рисует пять геймплейных экранов по брифу: 1-битный дизер, бумага и чернила, камера 3/4 сверху, толпа как жидкость, латунный пульт без полосок здоровья, единственный цвет - красные капли.

Визуальный язык находится сразу - около 02:40 фиксируется решение: простое 3D, пиксель-фильтр и Bayer-дизер.

m1: машина в разрезе, толпа по ярусам, пульт снизу
m1: машина в разрезе, толпа по ярусам, пульт снизу
m4: толпа давит на заклинившую заслонку
m4: толпа давит на заклинившую заслонку
m5: крупно пульт - тугой рычаг, стекло «на крайний случай»
m5: крупно пульт - тугой рычаг, стекло «на крайний случай»
02:44–02:52Макеты
Макеты

v2 и v3: из кабины - и снаружи, на ногах

v2 переносит камеру в кабину оператора: руки на рычагах, толпа в зале за стеклом. v3 упрощает до одного чистого зала, где палуба резко кренится и толпа плещет к борту, - и показывает машину снаружи как двуногого шагохода.

Идея крена оказывается живой; шагоход автор отменит около 03:10. Около 03:00 аудит №1 помогает решить: один экран без переключения между пультом и залом.

v2: вид из кабины на зал и топку
v2: вид из кабины на зал и топку
v3: рывок палубы - толпа плещет, трое срываются
v3: рывок палубы - толпа плещет, трое срываются
v3: шагоход снаружи (идею вскоре снимут)
v3: шагоход снаружи (идею вскоре снимут)
02:53–02:57Макеты
Макеты

v4: подвесная платформа и киноплёнка

Три варианта платформы-«стакана» с толпой-жидкостью: шахтный подъёмник, дирижабль и древние весы. Четвёртый кадр - тот же подъёмник в рамке старой киноплёнки с перфорацией, царапинами и значком перемотки назад.

От подвеса автор потом откажется, а вот плёнка и перемотка вместо рестарта остаются: красные пятнышки от прошлой попытки - красиво и не наказывает игрока.

подъёмник: палуба на двух цепях
подъёмник: палуба на двух цепях
дирижабль: гондола под латаным баллоном
дирижабль: гондола под латаным баллоном
древние весы-качели над пропастью
древние весы-качели над пропастью
d: рамка киноплёнки, перемотка назад и красные следы прошлой попытки
d: рамка киноплёнки, перемотка назад и красные следы прошлой попытки
03:09Решение
Решение

Ядро заперто: водяной противовес

Пишется GDD v0.1. Вода в баке поднимает кабину с людьми; вес людей тянет тормозной рычаг из руки игрока; воды меньше, чем людей. Принцип настоящий - водобалластные подъёмники XIX века. В журнале решений это отмечено как ~03:30 (модель C по итогам дизайн-аудита).

Так «Old Tech» и толпа наконец сходятся: цепочка рука -> железо -> кабина -> люди -> обратно в руку видна в одном кадре. Финал: когда вода кончилась, противовесом стали спасённые.

Когда вода кончилась, противовесом стали они.GDD v0.1, раздел 4
эволюция макетов за ночь: m1, v2, v3, v4 по 1.2 с на кадр
эволюция макетов за ночь: m1, v2, v3, v4 по 1.2 с на кадр
было в 01:34 и к чему идём в 02:56
было в 01:34 и к чему идём в 02:56
коммиты: 8bc2255
03:14Рендер
Рендер

3D-пиксель-пайплайн: стиль t3ssel8r и Obra Dinn

Параллельный агент строит рендер: простая 3D-геометрия рисуется в 480x270, затем Bayer-дизер в 1-2 тона и 1-px контур. Ключевой трюк - снап камеры к текселям: после выравнивания изменение между кадрами при панораме падает с 2.14% до 0.00%, то есть дизер не мерцает.

Первый коммит рендера - 3.4 тысячи строк: пайплайн, шейдеры, тестовая сцена, захват кадров для автопроверки.

03:14: тестовая сцена в два тона - колонны, шар, кольцо и три фигурки
03:14: тестовая сцена в два тона - колонны, шар, кольцо и три фигурки
без снапа дизер плывёт при движении камеры
без снапа дизер плывёт при движении камеры
со снапом пиксели остаются на месте
со снапом пиксели остаются на месте
коммиты: dcb452e
03:17Арт
Арт

Blender: у человечков появляется тело

Три низкополигональных силуэта (кепка, шляпа, причёска) с ригом и набором поз, экспорт в FBX. Цель из плейтеста: простые человечные фигурки, не точки, и читаемые в толпе.

Предпросмотр на 200 фигур в сером уже показывает, что толпа сохраняет форму и в 480x270.

три варианта фигурки
три варианта фигурки
толпа из 200, как увидит игра
толпа из 200, как увидит игра
позы под камерой 50 градусов
позы под камерой 50 градусов
03:19Рендер
Рендер

Тот же коридор, но с людьми

Инстансинг фигур, меши уровня, дверь и наклоняемая палуба (коммит 03:20). Теперь знакомая сцена «бутылочное горлышко» собрана из людей, а палуба может крениться - то, что потом станет плеском толпы у борта.

На закрытой двери давление в замере доходит до 3.18, а дизер-контур держит каждого человека читаемым - именно этого не хватало в плейтесте.

один и тот же коридор: в 01:34 точки, в 03:19 люди
один и тот же коридор: в 01:34 точки, в 03:19 люди
палуба кренится, толпа сползает к борту
палуба кренится, толпа сползает к борту
как менялась читаемость фигур за 12 минут
как менялась читаемость фигур за 12 минут
коммиты: 89518c4
03:28Дизайн
Дизайн

GDD v0.2: два разбора ломают то, что казалось готовым

GDD v0.1 отдаётся на аудит модели Argon и на собственный разбор «тремя шляпами» (атака, защита, серые зоны). Находка Argon: «залил и сидишь» - если вода не убывает, игрок скучает с одним рычагом; плюс двойной штраф за тормоз и риск софтлока.

Результат в v0.2: бак течёт, между рейсами вода сбрасывается, штрафы разведены (тормоз валит людей, воду теряешь только от ударов на скорости), прожектор и «нагнуться к пульту» под вопросом, перемотка - фейковая, приборы - диегетические. Главный подарок аудита - идея ниже.

Старая ржавая шестерня сама становится главным UI-таймером и врагом.аудит Argon про «слепой сектор» - три выбитых зуба на барабане
коммиты: 2cb2a9e
03:29Арт
Арт

Кит старой техники: цистерна, лебёдка, ограждения - и люди среди них

К людям из Blender добавляется набор «старой техники»: клёпаная цистерна, барабан лебёдки с шестернёй, лампа, фермы под платформой, цепи. Всё из простых форм, чтобы потом выглядеть цельно под дизером.

Тест-рендер показал неприятную вещь: при 12 пикселях на человека толпа - просто шум. Отсюда правило читаемости, которое поменяет весь рендер (см. бит 03:41).

03:29: платформа с цистерной, лебёдкой и толпой в серой болванке до дизера
03:29: платформа с цистерной, лебёдкой и толпой в серой болванке до дизера
коммиты: 7a88584
03:41Железо
Железо

Палуба крена и тугие рычаги: толпа становится жидкостью в 3D

Две параллельные ветки сливаются: физика наклоняющейся кабины, подвешенной на тросе (толпа как жидкий балласт, инерция при рывке, падения у края) и набор аналоговых контролов - тугие рычаги, штурвал клапана, стекло, лампы, плюс сцена Prototype3D.

Правило читаемости из теста Blender применено сразу: человек крупнее 20-24 px, 80-150 человек в кабине, пол под ними ровного тона без дизера, люди - сплошной контрастный тон с контуром, дизер только на машине. Слева было, справа стало.

03:41: слева дизер на полу и мелкие люди - шум; справа ровный пол и крупные силуэты - читается
03:41: слева дизер на полу и мелкие люди - шум; справа ровный пол и крупные силуэты - читается
физика палубы в 2D: рывок, толпа сползает, у края люди падают
физика палубы в 2D: рывок, толпа сползает, у края люди падают
рычаг тянут из руки: он наклоняется под нагрузкой
рычаг тянут из руки: он наклоняется под нагрузкой
коммиты: 6f97963, a4d7069, 0673685
03:54Прототип
Прототип

Веб-прототип ощущений: шахта против фуникулёра

Дешёвый способ ответить на два открытых вопроса: как подавать кадр и чем влиять на людей. В браузере собраны два режима - шахта и фуникулёр - с одним и тем же пультом, колбой воды и свистком.

Вердикт по снимкам: шахта читается лучше (две кабины одного масштаба, трос и барабан в кадре), влиять на людей - только свистком, прожектор лишь пока кабина стоит. Argon предупреждал, что параллельный прототип распыляет силы, поэтому он живёт только до вердикта, дальше только Unity.

шахта: две кабины на тросе через барабан
шахта: две кабины на тросе через барабан
фуникулёр: рельсы по склону, читается хуже
фуникулёр: рельсы по склону, читается хуже
финал в шахте: кабины встретились, люди тянут руки
финал в шахте: кабины встретились, люди тянут руки
коммиты: 9dfdb09
04:23Рендер
Рендер

Lift3D: камера едет с кабиной, весь пульт снизу

Собрана главная сцена: вид сверху вниз на кабину A, которая едет по шахте, - стены проплывают как шкала прогресса, навстречу идёт противовес B с цистерной. Внизу пульт: клапан слева, тормоз справа, в центре шестерня со «слепым сектором», мнемосхема троса, манометр и колба воды.

Так выполнены оба критерия GDD: кабина не мельчит (замечание Argon), а вся причинность - в одном кадре (замечание Fable).

04:53: старт у нижнего уступа
04:53: старт у нижнего уступа
рывок тормоза: толпа плещет как масса
рывок тормоза: толпа плещет как масса
мимо проходит бак противовеса: струя и капли
мимо проходит бак противовеса: струя и капли
коммиты: 36db1a3, cdc0984
04:26–05:13Звук
Звук

Звук без сэмплов: три круга прослушивания, оценка 6.2, 6.4, 7.0

Процедурный звуковой движок лифта: гул толпы с голосами, натяжение троса со скрипом, тик собачки на 24 зубах с «выбитым» сектором, струя воды, колодка с визгом, свисток «держись» и проектор старой плёнки. Каждый звук проходит одну и ту же мастер-цепочку, а все файлы синтезируются кодом.

Чтобы услышать результат, 22 файла три раза подряд отдавались на прослушивание Gemini (оценка по читаемости, настроению, повторам и чистоте). Средняя оценка выросла с 6.18 до 6.39 и 6.97; лучшие - победный и проигрышный аккорды, встреча кабин (9.0), хуже всех - слой проектора и струя воды. Короткое демо на 44 секунды - ниже.

44 с игры в звуке: заливка, рывок, слепой сектор, посадка, свисток, сброс воды, тишина зависания, встреча кабин. Полный WAV: `CrowdUnity/Captures/audio_lift/mix_demo.wav`
44 с игры в звуке: заливка, рывок, слепой сектор, посадка, свисток, сброс воды, тишина зависания, встреча кабин. Полный WAV: CrowdUnity/Captures/audio_lift/mix_demo.wav
коммиты: 0b2fdfb, 9081e53, 88c156d, 51d5eb0, 2925d59
04:38Геймплей
Геймплей

LiftGame: три рейса, экономия воды и слепой сектор

Игровая логика катки собрана отдельно от рендера: рейсы 100 / +30 / +50 / последние 30 = 210 человек, вода в баке и цистерне, перегруз, свисток, сброс бака, зависание и финал, где спасённые становятся противовесом. Через адаптер LiftGameSource логика подключается к 3D-виду.

Слепой сектор барабана - главный враг: когда щербатый участок шестерни доходит до собачки, тормоз на 0.6 с перестаёт держать. Вода теряется только от ударов на скорости, торможение её не расплёскивает - штрафы разведены, как просил аудит.

игровая логика в 2D-отладке: слепой сектор, рывок и пролитая вода
игровая логика в 2D-отладке: слепой сектор, рывок и пролитая вода
коммиты: b048479, 4bdfc93
04:43Дизайн
Дизайн

Калибровка сложности: кривая должна быть склоном, не обрывом

Бот-прогоны показали странное: небрежный бот получал высший ранг (терял 2 человека из 210), а проиграть можно было только оборванным тросом - то есть просто полным клапаном. Аудит Fable переписывает цели: новичок теряет 3-5 человек на первом рейсе и проваливает 1-2 попытки, хороший - 0-1.

Что меняется: первый слепой сектор встречается на пустой кабине как урок без потерь; перегруз двухступенчатый (скрип и усиленный рывок рычага, обрыв лишь при 5000 кг дольше 5 секунд); свисток нужен для результата 200+. Повтор никогда не сложнее.

Кривая - обрыв, а не склон.audits/fable_difficulty.md
коммиты: 65d9d31
04:56Рендер
Рендер

Полировка Lift3D: шахта превращается в бездну

По разбору кадров с трёх сторон: свободный пол в кабине (чтобы был виден плеск), глубина шахты с затемнением и параллаксом, гигантские шестерни и трубы как ориентиры, камера на 40 градусов с компенсацией крена, трос и крюк, крупный противовес, спокойнее дизер на стенах и пульте. Плеск толпы при торможении - только во view, симуляция не тронута.

слева до, справа после: плотные стены превращаются в тёмный колодец с машинными силуэтами
слева до, справа после: плотные стены превращаются в тёмный колодец с машинными силуэтами
коммиты: c750313
05:26Сдача
Сдача

Тексты для страницы игры и обложка

Подготовлены черновики страницы: хук, питч, управление, подсказки, 12 вариантов названия и несколько обложек. Топ-3: Counterweight, Hold Fast и Heavier Than Water. Раздел про тему объясняет настоящие водобалластные подъёмники 1880-х.

На обложке - кабина с людьми и бак противовеса; красные метки - след прошлой попытки.

обложка 16:9 (вариант BEST)
обложка 16:9 (вариант BEST)
коммиты: b5cd936
05:29–05:49Геймплей
Геймплей

Полная катка в 3D: от титульника до таблички счёта

Логика и вид сведены: титульный экран, лампы по рядам, три рейса со слепыми секторами, меловые карточки на станциях (люди выходят, на месте упавших - пустые круги), зависание в темноте, лестница из спасённых к противовесу, встреча кабин и латунная табличка итога. Рестарт - перемотка плёнки.

Автопрогоны бота проходят до конца: 210 из 210 в полном и 208 из 210 в быстром, ранг OLD MASTER; в отдельном прогоне обрыв троса запускает перемотку. К 05:49 готовы сборки Windows (1920x1080 в окне) и WebGL; для браузера пришлось ограничить частоту аудио 44.1 кГц, иначе инициализация зависала.

вся катка за 13 секунд: три рейса, зависание и финал (бот-прогон, кадр каждые 2 с)
вся катка за 13 секунд: три рейса, зависание и финал (бот-прогон, кадр каждые 2 с)
станция: выходят 80, потерянных нет
станция: выходят 80, потерянных нет
финал: спасённые на лестнице, кабины встретились
финал: спасённые на лестнице, кабины встретились
итог: Delivered 208 / 210, Old Master, никто не упал
итог: Delivered 208 / 210, Old Master, никто не упал
провал: обрыв троса, перемотка, второй заход
провал: обрыв троса, перемотка, второй заход
коммиты: 55e5526, 66e7b3c, b37fbcc
05:58–06:04Сборка
Сборка

Ракорд 3-2-1, звук в сцене и WebGL на 60 кадров

Игра стартует по клику: клик запускает отсчёт киноплёнки 3-2-1 и заодно разрешает звук в браузере. Звуковой директор подключён прямо к сцене Lift3D, а прошлые неудачные попытки остаются на полу пунктиром мела - память без штрафа.

Проверка WebGL: около 60 кадров в секунду, звук идёт через запасной путь с готовыми клипами, для itch.io сборка сжимается gzip (страница 960x540).

коммиты: d93f8ae, 1c4cf28
06:07Ревью
Ревью

Gemini смотрит видео полной катки и находит дыры

Два ролика (удачный и провальный прогон) уходят на просмотр Gemini. Диагноз жёсткий: пульт немой, провал случается без видимой причины (перемотка включается за один кадр), противовес почти не в кадре, около минуты из трёх с половиной уходит на простои, на уступах люди стоят вертикальными «столбами», а третий рейс непонятен без объяснений.

Решение: титры немого кино вместо текстовых туториалов, штампы-подписи на пульте, спидометр с безопасной дугой, окно-перископ на противовес, подвисание перед перемоткой, ускоренные паузы.

Арт-фильтр и немой UI активно воюют против геймплея.audits/argon_video_run3d.md
коммиты: 52c2511
06:19Консультация
Консультация

Пакет для встречи с геймдизайнерами

Собран пакет: питч, 5-минутная программа показа в строгом порядке (ракорд, рейс 1, слепой сектор, посадка на уступе, провал и перемотка, финал), три ставки и список рисков по убыванию - провал без видимой причины, немая обучалка, «вес в руке» мышью, простои, читаемость толпы.

Десять вопросов, ответ на которые меняет работу: нужны ли титры-подсказки, как передать вес без force feedback, что вырезать из шести глаголов за 36 часов. Рядом - одностраничник consult/ONE_PAGER.html.

концепт-кадр для пакета: куда хотим прийти по ощущению
концепт-кадр для пакета: куда хотим прийти по ощущению
реальный кадр: кабина, слепой сектор на шестерне слева
реальный кадр: кабина, слепой сектор на шестерне слева
коммиты: 71ea159
06:44Баланс
Баланс

Калибровка влилась в игру: боты показывают склон

Правила падений теперь решает игра, а физика лишь показывает: у проёмов толкает стыки и споткнувшиеся на слепом секторе, перегруз двухступенчатый, а новая потеря - «авария зубчатого колеса». Воды в цистернах стало 16700 / 15000 / 4900, клапан быстрее вдвое.

Двадцать прогонов на каждого бота дают тот самый склон: опытный доходит до OLD MASTER, новичок теряет рейс-другой, а без свистка 200+ недостижимо. Оговорка: живой игрок может тратить воды больше бота, ручка - размер цистерны во втором рейсе.

ботдоставленорангпроиграно рейсов
good204OLD MASTER x15, IRON HAND x50.0
first-timer177IRON HAND x16, STEADY HAND x41.2
careless166IRON HAND x8, STEADY HAND x120.2
good без свистка192IRON HAND x200.0
reckless81SHAKY HAND x20, ни одной победы8.0
коммиты: 204af0a
07:14Рендер
Рендер

Полировка №2: титры немого кино, штампы и перископ противовеса

Все замечания видео-ревью - в один проход. Титры немого кино объясняют игру словами эпохи: «Вода поднимает их, их вес тянет назад», «Берегись выбитых зубьев - сбавь ход или свисти», «Воды нет, только вес - открой ворота, спасённые станут противовесом». Причина провала теперь показывается титром до перемотки.

На пульте появились штампованные таблички (WATER, CISTERN, GEAR, LOAD, CABIN, BALLAST, SPEED, BRAKE), спидометр с безопасной и опасной дугами, а в углу кадра - окно-перископ на бак противовеса: видно струю и то, как он идёт навстречу.

v2 в трёх сценах: вводные титры, слепой сектор, перископ и встреча кабин, финальный титр
v2 в трёх сценах: вводные титры, слепой сектор, перископ и встреча кабин, финальный титр
титр перед слепым сектором
титр перед слепым сектором
справа - окно на бак противовеса, снизу подписанный пульт
справа - окно на бак противовеса, снизу подписанный пульт
коммиты: 226acda
07:15Итог
Итог

Где мы к рассвету: играбельная катка и список непроверенного

Есть играбельная катка в 3D: Counterweight.exe (проверочный прогон выигрывает 210/210), видео полной катки и провала, документы GDD, аудиты, пакет консультации, материалы для сдачи и этот девлог. Тесты: 55 из 58 в EditMode, три калибровочных запускаются вручную.

Честный список непроверенного: никто ещё не играл живой мышью (рычаги, слив F, ворота G, звук на слух), WebGL не пересобран после полировки, а прототип сцены от первого лица остановлен на середине и не слит.

коммиты: 9eb40f5
08:12Ревью
Ревью

Второй просмотр: что починили, а что ещё нет

Gemini сравнивает v2 с первой версией. Починено: подписи и спидометр сняли немоту пульта, перископ показывает физику, титры и сжатые паузы убрали пустой пролёт интро, а твист третьего рейса теперь объяснён.

Не починено или новое: провал в закрытой коробке (люди падают внутри перил, а не за борт), «столбы» людей на уступах, пропадающий пол при отъезде камеры в рейсе 3, немой рычаг ворот и «танец клонов» при свистке. Топ-6 правок рассчитан на полтора часа: выбрасывать двоих за борт при аварии, показывать титр рейса 2 заранее, подписать GATE, ускорить налив воды.

v2: вся катка за 13 секунд (бот-прогон, 186 с игры, кадр каждые 2 с)
v2: вся катка за 13 секунд (бот-прогон, 186 с игры, кадр каждые 2 с)
титр, который объясняет рейс 3
титр, который объясняет рейс 3
финальный титр: когда воды не осталось, противовесом стали они
финальный титр: когда воды не осталось, противовесом стали они
08:31–09:05Прототип
Прототип

Финал от первого лица: то, чего автор ждал в 01:34

В плейтесте автор просил настоящий first-person: глаз в толпе, ощущение, что тебя зажали и приходится раздвигать людей руками. Отдельная ветка наконец делает это как прототип финала: камера на уровне глаз внутри симуляции толпы, руки расталкивают, давление чувствуется, а впереди горит фонарь и ждёт ребёнок.

К 09:05 объятие читается: толпа расступается вокруг ребёнка, люди опускаются на колено и образуют рамку, колонны растворяются у самого глаза, видны манжет и варежки. Бот в 800 человек доходит до цели за ~66 с, пассивный - ни разу, то есть расталкивать действительно нужно.

прототип: идём сквозь толпу к фонарю (кадры из захвата, ускорено)
прототип: идём сквозь толпу к фонарю (кадры из захвата, ускорено)
зажали: огромное плечо перед самым лицом
зажали: огромное плечо перед самым лицом
объятие: толпа расступилась, ребёнок в кадре, руки-варежки внизу
объятие: толпа расступилась, ребёнок в кадре, руки-варежки внизу
коммиты: b829d6d, 2e1f50d, ec6e22d
08:44Рендер
Рендер

Полировка №3: честный провал, карточка до рейса, табличка GATE

Закрываются пункты второго ревью. Провал стал честным: ломается рельс-перила, жертвы летят в шахту, а не остаются внутри коробки. Карточка про слепой сектор показывается до старта рейса 2, кабина стартует у первого уступа, финальный пол светлее, над рычагом ворот горит плашка GATE.

Очереди на уступах разрежены, пассажиры заходят вглубь, свисток раздаёт левые и правые позы, на финальном экране есть медаль. Для проверки провала добавлен тяжёлый автопилот.

честный провал: слом перил и перемотка плёнки (v3)
честный провал: слом перил и перемотка плёнки (v3)
над рычагом ворот плашка GATE
над рычагом ворот плашка GATE
финальный титр v3
финальный титр v3
коммиты: a8d3431, a31c6c0
09:02Ревью
Ревью

Третье видео-ревью: оценки 8.5 / 7 / 9 / 8.5

Gemini подтверждает: титр рейса 2 перед стартом, плашка GATE, посадка с балконов и разнобой свистка исправлены, налив воды ускорен с 16 до 9 секунд. Остались три беды: люди идут по воздуху мимо уехавшего бака в рейсе 3, поза свистка сбрасывается раньше крена, а жертвы аварии подлетают вверх, а не падают вниз.

критерийоценкакомментарий
читаемость8.5приборы, GATE и общий план рейса 3 читаются сразу
вес и физика7.0противовес хорош, портят столбики при крене и ходьба по воздуху
атмосфера9.0цельное немое кино, перемотка плёнки лучшая деталь
темп8.5провисаний почти нет
коммиты: 6cabcdc
09:14–09:33Геймплей
Геймплей

Последние три правки и финальные сборки

Три замечания Gemini закрыты: ворота запираются, как только бак тронулся вниз, а лестница вытягивается к мосту только если ворота снова открылись; поза свистка держится, пока кабина не выровняется; жертвы аварии падают вместе с движением кабины вниз, а карточка причины ждёт.

Windows-сборка в 09:28, WebGL в 09:33, проверочный прогон выигрывает 210 из 210.

v4: финал рейса 3 без ходьбы по воздуху (ускорено в 8 раз)
v4: финал рейса 3 без ходьбы по воздуху (ускорено в 8 раз)
v4: провал - жертвы падают вниз, затем титр причины и перемотка
v4: провал - жертвы падают вниз, затем титр причины и перемотка
коммиты: 709cff9, 842f986, 92268c0
09:17Стратегия
Стратегия

Стратегия второго дня: оценки LD и три рычага

Аудит Fable прикидывает оценки LD и честно называет слабое место: никто не играл живой мышью. Три рычага на день: живой плейтест втроём, финал рейса 3 без брака, звук и первые 10 секунд. Финал от первого лица по умолчанию не включаем - только если к ~16:00 первые два пункта закрыты.

В списке «чего не делать»: новые механики, пересмотр шахты, ребаланс до живого теста, переделка рендера, текстовые туториалы, больше одного цикла видео-ревью.

критерийпрогноз
Mood4.3-4.6
Graphics4.2-4.5
Theme4.2+
Innovation3.9-4.2
Fun3.3-3.9 - главный риск
Overall4.0-4.2 если мышь ощущается, иначе 3.5
Пройти рейс 1 только мышью, с секундомером и записью экрана.audits/fable_day2.md, самый рискованный тест первого часа утра
коммиты: b6172df
09:20Сборка
Сборка

WebGL проверен в браузере: грузится, реагирует, без ошибок

Дымовая проверка собранной браузерной версии: клик по ракорду, отсчёт, карточка управления, старт, зажатый клапан, свисток. Ошибок нет, игра реагирует. Единственное неизвестное остаётся прежним - как рычаг ощущается живой мышью.

отсчёт ракорда в браузере
отсчёт ракорда в браузере
клапан зажат, вода пошла
клапан зажат, вода пошла
после свистка
после свистка
09:34Утро
Утро

Утро: что дальше

За ночь игра прошла путь от толпы-жидкости из техно-демки до играбельной катки в стиле немого кино: три рейса, слепой сектор, вода, которой меньше, чем людей, и финал, где противовесом становятся спасённые. Боты проходят её по калибровке: опытный 206, новичок 178, небрежный 172, без свистка 193.

Дальше всё упирается в живые руки. Первым делом - сыграть одну катку мышью с секундомером; следом - плейтест втроём и контроль звука. Не проверено: рычаги и слив живой мышью, звук на слух. Известные мелочи: уступы с 3-5 рядами вместо 1-2, правый уступ пересекает полосу кабины B, кабина занимает ~30% кадра вместо 55-60%, а живой игрок может тратить воды больше бота (ручка - цистерны в LiftGameConfig).

что сделатькритерий
Рейс 1 только мышью, с секундомеромоткрылось; первый ввод до 10 с; рейс до 90 с; тормоз ощутимо сопротивляется, свисток находится без подсказки
Живой плейтест: автор, дизайнер, постороннийвсе доходят до финала за 6 минут; своими словами: «тормоз тянет из руки»
Звук и первые 10 секундкаждый глагол слышен до 100 мс; нет тишины дольше 3 секунд
Финал без браканет хождения по воздуху; поза свистка держится до выравнивания кабины
Финал от первого лицавключать только если к ~16:00 всё выше закрыто
коммиты: 061c1e8