Расширенные возможности отладки карт и саг в Disciples II (17.10.2006)
Автор: HSerg

Любой картостроитель может подтвердить, что на отладку карты времени уходит больше, чем на её создание. На то есть множество причин, но основная – это отсутствие возможности быстро сориентироваться, где всё пошло не так. Основным подспорьем при выяснении являются регулярные сохранения и cheat-коды. На ранних этапах прохождения помогают отладочные сообщения, но на поздних они почти бесполезны – после изменения событий диагностики в исходной карте необходимо начать проходить её заново.

При создании оригинальных саг в Strategy First использовали встроенную в игру систему ведения log-файлов. К сожалению, в продаваемых вариантах игры система log-файлов убрана и ни в документации, ни на форумах информации о ней нет.

Но во время выяснения причин некорректной работы Disciples II в двух мониторной конфигурации (картинка идёт на второй вспомогательный монитор) я наткнулся на остатки системы log-файлов. К сожалению, полностью восстановить её функциональность практически невозможно, но самая важная её составляющая для картостроителей может быть активирована! Для этого создайте в папке с игрой четыре пустых файла: AiLog.log, Battle.log, Disciple.log, Event.log. Теперь во время игры в Event.log будут записываться все события происходящие во время прохождения карт, в Disciple.log – техническая информация, а AiLog.log и Battle.log так и останутся пустыми (вывод в них во всех доступных мне версиях Disciples был вычищен на уровне исходных тестов (скорее всего для повышения производительности), хотя теоретически его можно реконструировать). При этом несколько замедлится общая производительность игры и потребуется достаточное количество свободного места под log-файлы, но это мелочи по сравнению с открывающимися возможностями отладки :)

Пример содержимого Disciple.log:

CMidInit::InitGraphics: Enumerating display devices :
        - NVIDIA GeForce4 Ti 4200 (hardware)
        - NVIDIA GeForce4 Ti 4200 (hardware)

Display2 - Using Direct3D display device "NVIDIA GeForce4 Ti 4200" (hardware)
D3DERR_SCENE_NOT_IN_SCENE D:\Libraries\Display2\Impl\DisplayD3D.cpp 1478
D3DERR_SCENE_NOT_IN_SCENE D:\Libraries\Display2\Impl\DisplayD3D.cpp 1478

Пример содержимого Event.log:

'день 1 (Зомби Chase)' met all 1 conditions for player S135PL0002
        Disabling event (single occurance)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_MOVE_STACK' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_CREATE_STACK' (player S135PL0002, triggerer G000000000, stack playing G000000000)

'день 1 (Зомби Chase 2)' met all 1 conditions for player S135PL0002
        Disabling event (single occurance)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002e, stack playing G000000000)
        Executing effect 'L_MOVE_STACK' (player S135PL0002, triggerer S135KC002e, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002e, stack playing G000000000)
        Executing effect 'L_CREATE_STACK' (player S135PL0002, triggerer S135KC002e, stack playing G000000000)

'день 1 (Зомби Chase 3)' met all 1 conditions for player S135PL0002
        Disabling event (single occurance)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_MOVE_STACK' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_CREATE_STACK' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_REMOVE_STACK' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_REMOVE_STACK' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)
        Executing effect 'L_REMOVE_STACK' (player S135PL0002, triggerer S135KC002f, stack playing G000000000)

'день 2' met all 1 conditions for player S135PL0002
        Disabling event (single occurance)
        Executing effect 'L_CHANGE_ORDER' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_POPUP' (player S135PL0002, triggerer G000000000, stack playing G000000000)
        Executing effect 'L_CHANGE_OBJECTIVE' (player S135PL0002, triggerer G000000000, stack playing G000000000)