Меч, який не можна дістати
В одній із партій герой підібрав другий дворучний меч — точно такий самий, як перший, що вже лежав у торбі. Далі він втратив зброю з рук і поліз у спорядження дістати заміну. У слоті зброї гра запропонувала йому іржавий тесак і більше нічого. Двох мечів, що лежали в тій самій торбі, у списку не було.
Предмет є. Взяти його не можна. Причому кнопки навіть не видно — не сіра, не з поясненням, а просто відсутня.
Два правила, кожне по-своєму правильне
Інвентар у нас — це не рядки, а типізовані предмети: кожен має ім’я, кількість і ознаку «в руках чи в торбі». Одне з перших правил цієї системи: одне ім’я — один рядок. Підібрав другу цілющу траву — кількість у рядка стала два, нового рядка не завелося. Це зручно і правильно: пачка стріл не має розповзатися на двадцять рядків.
Друге правило: надіти можна тільки одиничний предмет. Якщо в рядка кількість більша за одиницю, надіти його не можна. Сенс був у тому, щоб ніколи не виявилося двох рядків з одним ім’ям і різним станом — інакше незрозуміло, з якого знімати при викиданні.
Кожне правило розумне. Проблема вилізла на їхньому стику.
Хибне припущення
У проєктному документі поряд із другим правилом стояло пояснення: «носиме спорядження і так завжди в одному примірнику — в’язка стріл не надівається». На момент, коли це писали, так і було. Стартовий набір збирається з одиничних предметів, і надіти стос ніхто не намагався.
Але у грі предмети видає Майстер, і видає їх за ім’ям. Підібрав другий такий самий меч — спрацювало перше правило, кількість стала два. І тут же спрацювало друге: рядок із кількістю два надіти не можна. Носима зброя перестала бути одиничною рівно тієї миті, коли її стало два, — а весь захист будувався на тому, що цього не буває.
Вийшов предмет, яким не можна скористатися. Не зламаний, не загублений — лежить у торбі, видно його, а до рук не взяти.
Річ не в інтерфейсі
Легко було вирішити, що винен екран — просто не показує кнопку. Але екран показував правду. Список того, що можна надіти, він будує за тим самим правилом, що й сервер: кількість більша за одиницю — повз. Інтерфейс чесно відображав заборону, яка жила глибше. Лагодити треба було не відображення, а саме правило.
Дозволили діставати по одному
Тепер при спробі надіти предмет зі стосу гра відділяє від нього один примірник: він стає окремим рядком «у руках», решта лишається в торбі. Два мечі — вийняв один, другий лежить далі.
Заборону ми зняли, але те, заради чого вона стояла, нікуди не поділося — тому замість одного грубого «не можна» з’явилися три точкові правила:
- підібраний предмет докладається до торби, а не до надітого рядка — інакше те, що в руках, знову розрослося б у стос, який не зняти;
- надіти те, що вже в руках, — порожня операція: слот один, двома однаковими мечами махати не можна;
- після маніпуляцій однакові рядки в торбі знову згортаються в один, щоб там не з’являлося двох рядів одного й того самого.
Перевірили на тій самій партії, де все й вилізло: герой надіває один із двох мечів — пара розділяється, раніше надітий одноручний тесак іде до торби (дворучник займає обидві руки), кольчуга лишається на місці.
Що з цим робити далі
Окремо виправили проєктний документ. Старе правило і його обґрунтування не стерті — вони позначені як скасовані, із зазначенням, чим замінені. Припущення «зброя і так завжди одинична» було правильним рівно до того дня, коли гра почала роздавати здобич сама. Таке варто лишати на видноті: не «ми помилилися», а «тут припущення перестало діяти — ось чому».