Всего пунктов: 22. Снято или исправлено после сверки с b9bcc64: B5, B6, B7, B10, B11, B15, B18, B22. Серьёзные: B1-B3 (части дневника недоступны), B4 (часть фраз и вызов без .diary), B12 (потеря открытых концовок). Номера строк: Diary_text.rpy, Diary_def.rpy, script_*.rpy, screens.rpy из Kraka42/viy_demo, ветка fix/bugs-viy-demo-oct20, коммит b9bcc64; сверено по чтению кода, без запуска игры.
B1 · недоступноЗапись «Отец Луизы» никогда не открывается
У записи нет правила открытия в get_diary_name, и нигде в просмотренных скриптах нет priest_pers. Три фразы (про жреца, про средний ранг и про предложение «поправить память») игрок не увидит, даже если все условия их показа выполнены.
Где в коде:
- Diary_text.rpy:26
- Diary_def.rpy:228
В дневнике: Отец Луизы
B2 · неверный ключ«Он вообще ничего не боится» (Ташир) записывается не в ту запись
Диалог добавляет метку no_fear в список less_pers (Лесс), а запись о Таше ищет её в tash_pers. Фраза про бесстрашие у Таши не появится никогда. Метка в less_pers дневником не читается.
Где в коде:
- script3_nazad.rpy:868
- Diary_text.rpy:346
В дневнике: Парень в белом? · Лесс
B3 · недоступноЗапись «Урза» открывается только после разговора с Лессом
Ключ открытия один: urza_less (разговор с Лессом). Если игрок узнал про Урзу от Таши (urza_tash, urza_2tash, совет сходить к нему), запись остаётся скрытой, хотя фразы про Ташу в ней есть.
Где в коде:
- Diary_text.rpy:39
- script3_nazad.rpy:993
- script3_nazad.rpy:1583
- script_2_less_conv.rpy:753
В дневнике: Урза
B4 · частично недоступноРасследование убийства посла: часть фраз не включается, один вызов без .diary
В b9bcc64 запись пишется: keep=1 ставится в script3_tgavan_oh.rpy:538 (и в script3_tgavan_begin.rpy:14, там только при if razr), метки invest_keep (script3_tgavan_oh.rpy:535) и poison (script3_tgavan_oh.rpy:640) добавляются, u_part вызывается для частей -4 (oh:619), -3 (642), 0 (706), 1 (1564), 2 (832), 3 (1274), 6 (868), 7 (882, 944), 8 (904), 10 (953), 11 (983) в script3_tgavan_oh.rpy и для части 5 в script_4_tgavan_adro.rpy:13. В 46 проверенных файлах не найден u_part для частей -5, -1 и 9. Строка script3_tgavan_oh.rpy:1136 «$ quests["invest_quest"].u_part(12,1)» вызвана без .diary; метод u_part в проверенных файлах есть только в Diary_def.rpy:93 (класс memory_diary), у класса quest (live2d.rpy:491) его нет, поэтому по чтению кода здесь будет ошибка AttributeError (в игре не воспроизводилось). Прежняя формулировка «14 фраз из 16 нигде не включаются» была неверной: она не учитывала script3_tgavan_oh.rpy.
Где в коде:
- script3_tgavan_oh.rpy:535, 538, 640
- script3_tgavan_oh.rpy:1136
- Diary_text.rpy:152-171
- Diary_def.rpy:93
- live2d.rpy:491
В дневнике: Расследование
B5 · снято: не багКвест «Кости» (Бонни) стартует: сначала подозревали, что нет
Раньше я не нашла записи в этот квест. После чтения day_1_bonny_razg.rpy и script_npc_items.rpy всё есть: квест берётся в разговоре с Бонни (status = "keep"), цели и фразы пишутся при осмотре и сборке предметов. Ложная тревога.
Где в коде:
- day_1_bonny_razg.rpy:67
- script_npc_items.rpy:1559
B6 · снято: не багЗаметка «Контракт чёрной печати»: части 2 и 3 включаются
В b9bcc64 script3_tgavan_oh.rpy ставит memoris_notes["black_seal"].keep = 1 и u_part(2,1,1) (строки 670-671 и 1099-1100) и u_part(3,1,1) (строка 1107). Часть 4 включается автоматически после части 3 (Diary_text.rpy:250-251). Прежний вывод «нет keep, нет u_part для частей 2 и 3» неверен: файл script3_tgavan_oh.rpy тогда не был учтён. Историческая заметка: в старой копии (fresh/main-снимок) квест «Какой еще контракт?» был закомментирован в script _define.rpy:488; в b9bcc64 этого комментария нет.
Где в коде:
- script3_tgavan_oh.rpy:670-671, 1099-1100, 1107
- Diary_text.rpy:205-209, 250-251
В дневнике: Контракт черной печати
B7 · снято: не баг«Нужно выжить»: метка tgavan_go2 ставится
Раньше я думала, что метки нет. Она ставится в images.rpy при входе в Тёмную Гавань (change_scene, обычный вход, внутри «if all:», images.rpy:301). Метка читается в Diary_text.rpy:318 и 320 и в условии иконки двери (script_newscreens.rpy:1170). Ложная тревога.
Где в коде:
- images.rpy:301
- Diary_text.rpy:318
- script_newscreens.rpy:1170
B8 · не найденоМетка, которую читает дневник, но никто не добавляет: viy_name_maybechange
В b9bcc64 метки adro_war (script3_tgavan_oh.rpy:987), poison (script3_tgavan_oh.rpy:640) и invest_keep (script3_tgavan_oh.rpy:535) добавляются; nars, money, need, friend, razlom_view тоже (script_4_tgavan_nars.rpy:523, script_4_kapibar.rpy:84, images.rpy:369). Нет источника только у viy_name_maybechange: в старой копии (fresh/main-снимок) его чтение (Diary_text.rpy:119) и добавление (script_2_less_conv.rpy:662) закомментированы; в b9bcc64 этих строк нет. Прежний список из четырёх меток был неполным: не учтён script3_tgavan_oh.rpy.
Где в коде:
- script3_tgavan_oh.rpy:535, 640, 987
- Diary_text.rpy:281, 289-294
- script_4_kapibar.rpy:84
В дневнике: Узнать кто я
B9 · недоступноФраза про «сказочку о Вий и Лес Смерти» никогда не включается
viy_quest, часть 10: флаг 0, источников нет в 46 проверенных файлах (ни u_part, ни прямой установки). Самая сюжетная фраза про белую стену.
Где в коде:
- Diary_text.rpy:108
В дневнике: Узнать кто я
B10 · снято: не баг«Белая стена»: фраза про иглу и Нарси (0.9) включается
u_part(0.9,1) стоит в script_4_tgavan_nars.rpy:885 (memoris_notes["white_wall"]), в сцене с Нарси; текст части 0.9 лежит в Diary_text.rpy:211. Ложная тревога.
Где в коде:
- script_4_tgavan_nars.rpy:885
- Diary_text.rpy:211
B11 · снято: не багРазговор с Таширом про чужой дневник: вызов написан правильно
В script_inv.rpy:39 стоит quests["diary_quest"].diary.u_part(3), в b9bcc64 и в старой копии (fresh/main-снимок). Прежнее утверждение «вызов без .diary, игра упадёт» к этому коду не подходит.
Где в коде:
- script_inv.rpy:39
В дневнике: Хтонический дневник
B12 · потеря данныхСписок концовок и смертей сбрасывается при каждом запуске
Строки persistent.ends_list = {} и persistent.deaths_list = {} выполняются при каждом старте игры, в старой копии (fresh/main-снимок) перед ними стоял закомментированный «# if not persistent.ends_list:»; в b9bcc64 его нет, строки без защиты (Diary_text.rpy:3 и 14). Галерея концовок (screens.rpy) читает именно эти списки, так что открытые концовки и смерти (например persistent.deaths_list["meal"][1] = 1 у Губерта) пропадают после перезапуска.
Где в коде:
- Diary_text.rpy:3
- Diary_text.rpy:14
- screens.rpy:1856
- script3_gubert.rpy:231
B13 · скрытая ошибкаВетка «записать имя в persistent.memory» вызывает append у словаря
В get_diary_text для заметок: persistent.memory.append(item._name2). persistent.memory это словарь, у него нет append. Сейчас до этой строки не доходит, потому что ключи создаются заранее, но любая новая заметка с persist=1 без ключа уронит игру при открытии дневника.
Где в коде:
- Diary_text.rpy:236
B14 · логикаТашир: две фразы борются за одну ячейку
tash_pers[7]: «ничего не боится» и «много друзей и врагов» пишутся в один и тот же номер, побеждает вторая. Даже после исправления B2 первая фраза пропадёт, если игрок получил обе метки.
Где в коде:
- Diary_text.rpy:347, 349
В дневнике: Парень в белом?
B15 · исправлено в веткеИмя Таши в 5 фразах записано раньше, чем игрок его узнал
Исправлено в ветке fix/bugs-viy-demo-oct20 (Diary_text.rpy:106, 151, 391, 397, 427): вместо «Ташир» стоит имя персонажа, до раскрытия показывается «???». Ниже что было. Проверено по коду для всех фраз с зашитым именем. Имя Таши («Ташир») героиня узнаёт только в разговоре «Как тебя зовут?» (script3_nazad.rpy:1155) или в сцене с Губертом (script3_gubert.rpy:85). Но Таша становится спутником без этого вопроса (script3_nazad.rpy:335), и в меню разговора после карт нет проверки, знает ли героиня имя. Поэтому есть путь, где имя ещё не известно, а в дневнике уже «Ташир»: (1) viy_quest[9] «по словам Ташира», барьер эльфов (script3_road.rpy:129); (2) diary_quest[3] «Ташир тоже сказал», если показать дневник Таше до вопроса про имя (script_inv.rpy:39); (3) urza_pers[0] «как сказал Ташир» и (4) less_pers[7] «Ташир сказал, что это разумное дерево»: оба открываются через ветку «У тебя есть друзья?» → «серьёзным» (script3_nazad.rpy:1563, 1583); (5) urza_pers[3] «хорошо ладят с Таширом» (script3_nazad.rpy:993). Не баги, проверено: viy_quest -0.9, -0.8 и 5 (имя уже названо в этом же разговоре), gubert_pers[2] (имя в той же сцене, строка 89), urza_pers[2] и less_pers[6] (пункт «Много что поменялось?» открывается только после вопроса об имени), все фразы про «Лесса» (viy_quest[6], urza_pers[1], амулет): имя Лесса называется раньше (script_2_less_conv.rpy:384, script_2_less_conv_amul.rpy:13), пункт «Мы знакомы?» вообще требует знать имя. Не доказано, но похоже на норму: less_2memory «Я пошла за Лессом?» (сон, имя называется в конце сна, script3_sova.rpy:152).
Где в коде:
- Diary_text.rpy:106
- Diary_text.rpy:151
- Diary_text.rpy:391
- Diary_text.rpy:397
- Diary_text.rpy:427
В дневнике: Узнать кто я · Хтонический дневник · Урза · Лесс
B16 · логикаЧасть записей общая на все прохождения, часть нет
Одни условия читают persistent.memory (переживает новую игру), другие vrem_memory (живёт в сохранении). Например Мама/Лесс/Суд/Амулет/Урза/Губерт/Разлом/Луиза привязаны к persistent, а Таша (Diary_text.rpy:64, 331-354), Лесс-персонаж (415-426) и метки квеста жизни airat_go, tgavan_go, tgavan_go2 (314-320) к vrem_memory. В новой игре часть записей уже открыта, часть нет. Если задумано (память между циклами), стоит это зафиксировать; для Губерта, Урзы и Разлома это выглядит случайностью.
Где в коде:
- Diary_text.rpy:29
- Diary_text.rpy:64
B17 · логикаЗапись «Разлом» открывает только ветка Губерта
Ключ открытия razlom_enter ставится в script3_gubert. Метка razlom_tash из ветки Таши (где фраза про друга за разломом) запись не открывает. Если игрок попал к Разлому через Ташу, заметки не будет.
Где в коде:
- script3_gubert.rpy:390
- Diary_text.rpy:81
- script3_nazad.rpy:1051
- Diary_text.rpy:302
В дневнике: Разлом
B18 · снято: не подтвержденоДописывание в конец фразы через += : повтор не подтверждён
quest_statue[7] и [9] дополняются через += (script_5_airat.rpy:626, 695). Раньше здесь было заявлено, что при повторном прохождении текст удвоится. По коду это не подтверждается: пункт меню про кошку берётся один раз (catd.d3 = 1, script_5_airat.rpy:606-610), а get_diary_text при каждом чтении текста дневника заново присваивает части [7] и [9] (Diary_text.rpy:193, 195; вызов в Diary_def.rpy:182). Удвоение возможно только при двух += подряд без чтения дневника; такого пути я не нашла. Игру не запускала.
Где в коде:
- script_5_airat.rpy:626
- script_5_airat.rpy:695
В дневнике: Осмотреть Стутаю
B19 · целиЦель «Поговорить с Карралаком» никогда не отмечается выполненной
После полной проверки всех путей закрытия целей (u_rpart, каскад u_part, прямые записи через rtext и _rtext, done-блоки) остаётся одна цель без закрытия: «Поговорить с Карралаком» (_rtext[2] квеста «Вступление в Церковь», Diary_text.rpy:180). Для неё нет ни части с третьим элементом 2, ни u_rpart(2,...), ни прямой записи, ни done-блока. Прежние пункты сняты: «Отдать пропуск Горрану» (quest_statue, _rtext[2]) закрывается прямой записью через геттер rtext (script_5_airat.rpy:427; раньше здесь неверно стояло «никто не отмечает» — поиск учитывал только _rtext), а «Дать ответ Карралаку» (_rtext[0]) закрывается каскадом u_part: у частей 1 и 2 есть третий элемент 0 (Diary_text.rpy:175-176), и u_part при трёх элементах части ставит цель (Diary_def.rpy:102-104); вызовы u_part(1) — script_4_airat.rpy:1006, 1194, u_part(2) — script_4_airat.rpy:993, 1181. Остальные цели статуи тоже закрываются: «Найти статую» — каскадом из части 2 (script_5_airat.rpy:174, 441), «Получить пропуск» — каскадом из части 3 (script_4_airat.rpy:989, 1177), «Осмотреть статую» — u_rpart(3,1) (script_5_airat.rpy:468), «Понять, что происходит» — прямой записью _rtext[4][1] = 1 (script_5_airat.rpy:736); «Решить вопрос со статуей» у Карралака — u_rpart(1,1) (script_5_airat.rpy:672, при провале None: 490, 518). Закрытия целей через done в коде нет: сеттер done в классе quest (live2d.rpy:545-547) ставит только _done и показывает уведомление, цели не трогает; единственный done-блок — у nars_kap (Diary_text.rpy:263-264). Поэтому done=1 у «Вступления в Церковь» (script_4_airat.rpy:994, 1182) рисует на экране дневника (Diary.rpy:384-405) только штамп «квест завершён» (404-405), а галочка у цели не появляется (галочка — по значению цели, 396-397; None — значок провала, 398-399; цикл прерывается после первой невыполненной цели без третьего элемента, 400-401). Игру не запускала.
Где в коде:
- Diary_text.rpy:175-176, 180
- script_5_airat.rpy:427, 468, 672, 736
- script_4_airat.rpy:993-994, 1006, 1181-1182, 1194
- Diary_def.rpy:102-104, 154-160
- live2d.rpy:545-547
- Diary.rpy:384-405
- Diary_text.rpy:263-264
В дневнике: Осмотреть Стутаю · Вступление в Церковь
B20 · текстОпечатки и ошибки рода в тексте дневника
| Сейчас (b9bcc64) | Должно быть | Где | Diary_text.rpy |
|---|---|---|---|
| Церквь Ара | Церковь Ара | 4 названия концовок | 10-13 |
| Гаррони | Горран (в коде везде Горран) | quest_statue[1] | 183 |
| Луизу узнать побольше | Луизе узнать побольше | quest_know_priest | 114 |
| над хотя бы добраться | надо хотя бы добраться | quest_find_priest | 119 |
| И ем у | И ему | nars_kap[2] | 287 |
| не ногой | ни ногой | quest_statue[5.2] | 191 |
| носить его чистое самоубийство | носить его - чистое самоубийство | diary_quest[1] | 282 |
| Уверен, что мы с ним | Уверена, что мы с ним (рассказчица женского рода) | less_pers[2] | 416 |
В b9bcc64 уже исправлены (написание правильное): назваля, дурзьями, дряное, упоянлу, размуное, случаяная, плтоядный, истолкавала, прицнипе, мнгновенная, натнутыми, дайл; «побльше» в строке 114. «Лиассон» (строка 172) написано с «Л» + «иассон» как «Лиассон»; прежний пункт «ЛИассон» в этой строке не найден. Эти правки сверены только по тексту b9bcc64 и старой копии, коммит правки не определён.
B21 · скрытая ошибкаУ всех квестов общий список заметок
В классе quest (live2d.rpy:492) заданы значения по умолчанию note = [] и note_d = {}. В Python такой список один на все вызовы без этого аргумента. В script _define.rpy 18 вызовов quest(...), и в проверенном файле ни один не передаёт note=. Значит, у всех 18 квестов один общий список _note. Метки, которые в коде добавляются через quests[...]._note.append: make1, make2, this, no_all (bonny_quest, script_npc_items.rpy:1591, 1604, 1857, 1900), reward (quest_airat, script_2_less_conv.rpy:902), in_gavan, priest_lie, not_priest_lie, node, node2 (quest_find_priest, script_4_airat.rpy:1386, 1707, 1728, 1795, 1803), medicine, medicine2 (quest_find_doc, script_4_airat.rpy:1774, 1779). Проверки вида «"метка" in quests[...]._note» (например script_npc_items.rpy:1341, script_4_airat.rpy:1580) видят метки всех квестов. Пока имена не совпадают, это незаметно. Геттер note (live2d.rpy:575-579) отдаёт список только при keep, иначе пустой. Рядом: геттер status при «keep» ставит _false = 1 (live2d.rpy:509), то есть чтение статуса помечает квест как проваленный; в 46 проверенных файлах .status нигде не читается (только присваивается), поэтому не проявляется. Раньше в пример были вставлены guards1, tea, meet: они пишутся через persistent_append в vrem_memory, а не в _note, поэтому убраны.
Где в коде:
- live2d.rpy:492
- live2d.rpy:509
- live2d.rpy:575
B22 · исправлено в ветке«urza.zn_name == True» вместо «= True»: имя Урзы не записывалось
В b9bcc64 во всех шести местах стоит присваивание «= True» (day_1_tash_razg.rpy:41; script3_nazad.rpy:939, 956, 991, 1007, 1276). Было: в копии ветки до правки подтверждено «$ urza.zn_name == True» только в day_1_tash_razg.rpy:41; для пяти мест в script3_nazad.rpy эту копию не сверял, прежние номера строк (980, 999, 1034, 1050, 1320) относятся к старой копии (fresh/main-снимок), где в них уже стоит присваивание. Какие правки в какой коммит вошли, по этим копиям не восстанавливается.
Где в коде:
- day_1_tash_razg.rpy:41
- script3_nazad.rpy:939, 956, 991, 1007, 1276
В дневнике: Урза