WillowTree
WillowTree# — это редактор сохранений для первой части Borderlands, позволяющий анонимусу, не отходя от кассы, превратить своего зачуханного персонажа в бога Пандоры. Программа является ярким примером того, что происходит, когда у людей слишком много свободного времени и непреодолимое желание ковыряться в бинарных файлах вместо того, чтобы, собственно, играть в игру.
Суть[править]
Если отбросить сарказм, то WillowTree# — это инструмент, который позволяет вскрыть файл сохранения .sav (для ПК, PS3 и даже Xbox 360, что требовало отдельного героизма с распаковкой CON-контейнеров) и устроить там тотальный дерибан. Хочешь миллион денег? Пожалуйста. 69-й уровень за пять минут? Легко. Все скиллы вкачаны на максимум, рюкзак размером с черную дыру, а в руках пушка, собранная из самых имбалансных частей? Заверните два.
Программа позволяет редактировать практически всё: от уровня и опыта персонажа до его наличных, размера инвентаря и количества очков навыков. Особого внимания заслуживает возможность полного потрошения оружия и предметов. Можно вручную перебрать все составные части пушки, от ствола до приклада, создав нечто, что заставило бы Красного Текста плакать кровавыми слезами. Квесты, локации, логи ECHO — всё это поддаётся хирургическому вмешательству со стороны любопытного хомячка. И всё это под соусом из кастомных контролов, написанных, видимо, потому что стандартные винформовские авторам показались недостаточно брутальными для мира Пандоры.
Отцы-основатели и их индусский код[править]
Разработка сего чуда велась группой энтузиастов, чьи имена навеки впечатаны в копирайты исходников. Среди них выделяются Matthew Carter, он же matt911, взявший на себя, похоже, основную ношу по поддержке и развитию проекта в 2011 году. Компанию ему составляют XanderChaos и, что самое лулзовое, некто JackSchitt, чей никнейм уже сам по себе является тонким намёком на возможное качество кода и стабильность работы.
При взгляде на исходники у любого мало-мальски опытного программиста начинает дёргаться глаз. Тут вам и героическая борьба с массивами через ручное создание нового и копирование старого (ResizeArrayLarger, ResizeArraySmaller), в то время как весь цивилизованный мир уже давно использовал List<T>. И, конечно же, вишенка на торте — жёстко захардкоженный массив XPChart на 71 элемент, представляющий собой таблицу опыта. Видимо, авторы свято верили, что уровни в игре — это константа, незыблемая, как законы физики.
Отдельной драмы добавляет зависимость от .NET 3.5 SP1. Настолько сильная, что в коде присутствует специальная функция CheckFrameworkVersion(), которая при запуске лезет в реестр и проверяет, установлен ли у пользователя этот замшелый артефакт. Если нет — программа с достоинством отказывается работать, отправляя юзера в увлекательное путешествие на сайт Microsoft за древними библиотеками.
Как оно работает (если работает)[править]
Внутренности программы представляют собой клубок из C#-классов, отчаянно пытающихся распарсить бинарный формат сейвов. Центральным элементом этого балагана является класс WillowSaveGame, который берёт на себя всю грязную работу. Он умеет читать и писать данные, борясь с разным порядком байтов (LittleEndian для ПК и BigEndian для консолей), что само по себе является маленькой войной. Для коробочников предусмотрена отдельная магия с распаковкой и запаковкой STFS-контейнеров, для чего в комплекте идёт даже файл KV.bin.
Данные об игровых предметах, навыках и локациях хранятся не в какой-нибудь вшивой базе данных, а в россыпи .ini и .txt файлов, которые программа при первом запуске мучительно конвертирует в XML. Этот процесс, получивший название ConvertIni2Xml, является хрупким и гениальным одновременно, создавая из текстового мусора структурированный хаос, с которым потом и работает остальная часть программы.
Венчает всё это великолепие лицензия GNU GPL, которая честно предупреждает:
WillowTree# is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Что в переводе с юридического на человеческий означает: «Мы дали вам эту лопату, а будете ли вы ей копать или проломите себе голову — ваши проблемы».