Руководство для KitServer 5.2

Модули: KitServer: 5.2.0, BallServer: 5.2.0, Faceserver: 5.2.0, LOD Mixer: 5.2.0 - 26 мая 2006 г.

1.1. Введение

Kitserver 5.2 - это дополнительная программа для Pro Evolution Soccer 5, Winning Eleven 9 и Winning Eleven 9 Liveware Evolution, состоящая из нескольких отдельных независимых модулей. С данной версией поставляются четыре модуля: Китсервер, LODmixer, Ballserver (сервер мячей), и бета-версия Faceserver (сервер лиц). Модуль Китсервер предоставляет альтернативный способ для управления формами вратарей и полевых игроков вне игрового AFS файла. PNG и BMP изображения форм организуются во внешнюю базу данных, которая представляет собой набор папок и файлов соответствующих нескольким простым правилам. Программа не ограничивает количество форм только домашней и выездной, вы можете иметь столько, сколько захотите. Модуль LODmixer позволяет контролировать отдельные аспекты графического движка - такие как: уровень детализации моделей игроков, присутствие зрителей на стадионах, погода в режимах League/Cup/Master League. Модуль Ballserver позволяет добавлять в игру дополнительные мячи. Модуль Faceserver - лица (Документация по фэйссерверу пока существует только на английском - см. файл faceserver.txt)

1.2. Установка

Все как обычно: скопируйте полностью папку kitserver в игровую папку, так как показано на рисунке:

Войдите в папку kitserver и запустите setup.exe. "PES5.exe" в выпадающем списке будет выбран автоматически, поэтому просто нажмите кнопку "Install". Kitserver должен выдать сообщение о том, что инсталяция прошла успешно. (Если вы получили сообщение об ошибке, удостоверьтесь что игра в данный момент не запущена и PES5.exe не помечен только на чтение).

1.3. Деинсталляция

Войдите в папку kitserver и запустите setup.exe. "PES5.exe" в выпадающем списке будет выбран автоматически (выберите его, если это не так). Нажмите кнопку "Remove". Kitserver должен показать сообщение об успешной деинсталляции. Теперь, если вы хотите, вы можете удалить папку Kitserver полностью. (Также вы можете просто оставить ее на месте - она не причинит никакого вреда, и это даст вам возможность быстро переустановить Kitserver позже, если вы запустите setup.exe и нажмете кнопку "Install")

Китсервер (Kitserver Module) 5.2.0

2.1 Краткий обзор возможностей модуля

  • Отображение 2.5D форм на экране "Strip Selection".
    (2.5D означает, что эти миниформы отображаются в 2-х измерениях, но созданы из настоящих текстур форм, используемых в игре).
  • Дополнительные формы полевых игроков.
    Теперь возможно использовать не только 1-ю и 2-ю формы, но и 3-ю, 4-ю и т.д. Также можно комбинировать части форм, имеющих общую палитру (Более подробно про общие палитры ниже в документе). Дополнительные формы голкиперов будут поддерживаться в следующей версии.
  • Новая структура базы данных.
    "KDB" переименована в "GDB" (Graphics DataBase) и теперь содержит не только формы, но также мячи и лица. Внутренняя структура полностью обновлена. Старая структура плохо подходила для использования дополнительных форм, новая же является достаточно гибкой. Когда вы привыкнете к ней, вы заметите, что она гораздо удобнее, чем KDB из Kitserver 5.0.
  • В данном документе, в качестве примера взята версия игры Pro Evolution Soccer 5, однако вся информация также применима и к Winning Eleven 9 и к Winning Eleven 9 Liveware Evolution. Просто не забывайте, что названия файлов могут немного различаться. Например, исполняемый файл в PES5 называется PES5.exe, в WE9 - we9.exe, а в WE9:LE - WE9LEK.exe.

    2.2. Организация графической базы данных (GDB)

    GDB является наибольшим изменением в работе Kitserver по сравнению с версией 5.0. GDB содержит папку uni, которая отвечает за хранение форм команд (униформ). Важнейший файл в папке uni называется map.txt. Этот файл содержит информацию, где Kitserver должен искать формы для отдельной команды. Как вы знаете, каждая команда имеет свой собственный уникальный id - целое число от 0 до 201 (+несколько дополнительных команд "всех звезд"). Поэтому для каждой команды в GDB вы должны назначить, где формы для этой команды, в файле map.txt. Вот пример:

    # This config maps team number into folder name
    # Format: <team-num>,"<folder name>"
    # Example: 21,"Russia"
    
    8,"National\France"
    9,"National\Germany"
    65,"EPL\Aston_Villa"
    75,"EPL\Man Utd"
    77,"EPL\Newcastle"
    80,"EPL\Tottenham"
    170,"La Liga\Real Madrid"
    

    ВАЖНО: Двойные кавычки обязательны для того, чтобы в названиях папок не было неопределенности. Список всех номеров команд здесь: uni.txt file

    Обратите внимание, что образец GDB (предоставляемый с Kitserver) - просто один из возможных способов организации команд и папок. Папка "EPL" используется для всех английских команд, "National" - для всех сборных, и т.д. Возможно вам более подойдет просто список папок без группировки. В этом случае просто соответственно измените map.txt и создайте удобную вам структуру папок. Гибкость организации форм - основное достоинство использования map.txt.

    Из map.txt вы можете видеть, что для того, чтобы найти форму для команды #8, Kitserver должен пойти в папку GDB\uni\National\France. Эта папка будет содержать все доступные формы для команды #8. Внутри, вы должны создать отдельную папку для каждой формы. Как здесь: Для полевых игроков папка с 1-ой формой должна называться pa, со 2-ой - pb. Дополнительные формы должны быть в папках с названиями, начинающимися с буквы "p". Для того чтобы формы были отсортированы по алфафиту, удобно использовать для дополнительных форм префикс "px-". Например, px-blue. Для вратарей, 1-я форма должна быть в папке ga, 2-я - в gb. Папки для дополнительных форм вратарей (что пока не поддерживается) могут иметь названия, начинающиеся с "g".

    ВАЖНО: Имя папки действует, как своеобразный идентификатор для Kitserver, что налагает дополнительные ограничения на имена папок: они не могут содержать пробелы, желательно должны быть относительно короткими, и на английском, французском или других языках использовующих латиницу - Latin1 (iso8859-1). Чтобы быть уверенным, что Kitserver правильно найдет папку, используйте латинские буквы, цифры, знак подчеркивания, и тире (знак минус).

    Теперь давайте перейдем к содержимому папки с формой. Возьмем pa, как пример. Вот как будет выглядеть папка, если в ней, так называемая форма "все в одной" ("all-in-one"), это означает, что она не разделена на отдельные части: футболку, шорты и гетры. Kitserver может успешно работать как с раздельными, так и с формами all-in-one, т.к. он автоматически "делит" цельную форму на части прямо перед началом матча.

    Чтобы китсервер мог правильно разделить "all-in-one" формы во время игры, ему необходима папка masks, находящаяся внутри uni. Не удаляйте эту папку.

    Единственный случай, когда действительно нужна раздельная форма, это когда правила раздела формы на части нестандартны: как у вратарской формы Ювентуса с двумя разноцветными гетрами. Также вы можете использовать отдельные части, если у вас нет всех. Например, в папке px-away2 Ньюкасла (Newcastle) нет all.png, а вместо этого есть shorts.png и socks.png. Примечательно, что там нет shirt.png: Kitserver будет использовать только шорты и гетры и возьмет футболку из другой папки.

    Подводя итог:
    Использование all.png равнозначно использованию shirt.png, shorts.png, and socks.png. (В общем, избегайте ситуации, когда в папке находятся все четыре из них, или all.png и, скажем, shirt.png - это быстро приведет к путанице).

    Изображения могут быть как в PNG так и в BMP формате. Соответственно имена файлов должны иметь расширение ".png" или ".bmp". Нет ничего страшного в смешении форматов для одной формы, например, может быть такая комбинация файлов shirt.bmp, shorts.png, socks.bmp.

    Зарезервированное имя PNG-файлаЗарезервированное имя BMP-файлаПредназначение
    all.pngall.bmpформа "all-in-one"
    shirt.pngshirt.bmpфутболка
    shorts.pngshorts.bmpтрусы
    socks.pngsocks.bmpгетры
    font.pngfont.bmp256x64 текстура со шрифтом, для изображения имени игрока на спине

    2.3. config.txt

    Это файл конфигурации атрибутов (в прошлых Kitserver-ах он назывался "attrib.cfg"). Как и прежде, это просто текстовый файл - вы можете использовать Блокнот (Notepad) или любой другой текстовый редактор для его просмотра и изменения. Каждая папка с футболкой (либо как с частью формы all-in-one, либо как с отдельным изображением) должна содержать свой config.txt внутри. Большая часть поддерживаемый аттрибутов относится к футболке, единственным исключением является - shorts.number.location. Поэтому, даже если у в папке находится только одно изображение с шортами, вам все равно понадобится config.txt - чтобы указать где на шортах должен быть расположен номер (слева, справа, на обеих сторонах, или должен вообще отсутствовать)

    Вот таблица со всеми поддерживаемыми атрибутами:

    Название атрибутаЗначениеФорматПример
    model идентификатор для 3D модели футболки целое число (в десятичной системе счисления) model = 37
    collar присуствие воротника yes/no collar = no
    numbers имя файла (с путем относительно папки с формой) содержащего текстуру номеров: изображение 256x128 4bit/8bit с палитрой строка в двойных кавычках numbers = "..\num-white.png"
    shorts.num-pal.X имя файла (с путем относительно папки с формой) содержащего палитру номеров: изображение с 4bit/8bit палитрой. Это палитра, которая будет использована для шорт из папки с формой "X", если эти шорты используются с данной футболкой. строка в двойных кавычках shorts.num-pal.pb = "..\pal-black.png"
    shorts.number.location Позиция номера на трусах (Его можно отключить вообще: используйте значение "off"). left|right|both|off shorts.number.location = left
    name.location Позиция фамилии игрока на спине. Этот атрибут полезен для тех команд, у которых имена игроков на формы расположены в нижней части футболки. Как, например, у Boca Juniors. (Опять же используя значение "off", можно вообще убрать фамилию со спины.) top|bottom|off name.location = top
    logo.location Позиция эмблемы спонсора на спине. (Этот атрибут вряд ли будет полезен, так как обычно эмблема спонсора является частью самой текстуры футболки.) top|bottom|off logo.location = off
    name.shape Индикатор того должно ли имя игрока на спине написано прямо, или слегка по кругу: Значения соответствуют допустимым значиям из Edit Mode: type1 - прямая, type2 - небольшое искривление, type3 - более заметное искривление. type1|type2|type3 name.shape = type1
    radar.color Назначает цвет для радара. Пока что это аттрибут не всегда работает верно, но если интересно, попробуйте его использовать. (Устанавливая этот аттрибут, вы также меняете главный цвет для оригинальной мини-формы от Конами, а это влияет на то как игра выбирает формы по-умолчанию. В следующих версия китсервера, надеюсь что стабильность работы этого аттрибута будет налажена. цвет, в формате RRGGBB (red,green,blue) radar.color = 0A5D88

    Для лучшего понимания использования shorts.num-pal.X изучите образцы config.txt файлов из GDB. Сначала это может выглядеть слишком запутано, однако, через некоторое время станет ясно, почему понадобился именно такой способ организации. (Главное, это подавить в себе фразу "ну... как тут все запущено...") Для того, чтобы иметь возможность свободно смешивать части форм, должна быть возможность указать, какие номера и с какой палитрой будут использованы на шортах во множенстве различных ситуаций.

    Например, рассмотрим config.txt из папки Germany pa:

    model = 37
    collar = no
    
    numbers = "..\..\adidas_black.png"
    
    shorts.number.location = left
    shorts.num-pal.pa = "..\..\adidas_white.png"
    shorts.num-pal.pb = "..\..\adidas_black.png"
    

    Что означает: Для футболки использовать номера Adidac (черные). Когда эта футболка используется с шортами из "pa", будет применен файл с палитрой "adidas_white.png", который воспроизведет белые номера на шортах. Когда эта же футболка используется с шортами "pb", будет применяться палитра из "adidas_black.png" и на шортах будут нарисованы черные номера.

    2.4. Экран выбора форм и 2.5D-формы.

    Для отображения форм из GDB (включая дополнительные) во время предматчевого выбора (Strip Selection), так называемые "2.5D" формы рисуются поверх миниформ от KONAMI. Название "2.5D" пошло от того, что формы двухмерные (т.е 2D), но они используют реальные текстуры, которые используются во время матча. Вот скриншот: (Когда у команды нет формы в GDB, будет использована оригинальная миниформа KONAMI).

    Вы можете переключаться между 1-ой и 2-ой формами, как и прежде, используя клавиатуру и геймпад, в зависимости от ваших установок. Для того чтобы получить доступ к дополнительным формам, нажмите кнопку "O" - вы войдете в режим "Change Setup". Маленькие желтые стрелки теперь будут изменять отдельные части формы, это позволит использовать дополнительные формы и их части. Все это входит в функциональные возможности игры, поэтому вам не понадобится нажимать какие-либо специальные клавиши для этого.

    Новой возможностью Kitserver является то, что выбирая другую футболку (шорты или гетры), теперь вы сможете поменять по кругу все доступные варианты, а не только части 1-ой и 2-ой форм. (Вы, вероятно, быстро обратите внимание, что вне зависимости от того, нажата ли была кнопка "влево" или кнопка "вправо", китсервер меняет части форм в одном и том же порядке. Это небольшой недостаток данной версии китсервера. Постараемся исправить его в будующем.) При выборе частей доступны только комбинации форм, использующих общую палитру. Kitserver автоматически выявляет разницу в палитрах и блокирует те комбинации, где используются более 1 палитры, иначе во время матча формы отображались бы некорректно.

    Кроме форм полевых игроков, вы также можете менять формы вратарей. Экран выбора форм теперь работает в двуж режимах: "Игроки" и "Вратари". Переключаться между режимами можно с помощью клавиши [Tab]. Также как и для игроков, для вратарей вы можете смешивать различные формы - если войдете в режим "Change Setup", но не забывайте что все сказанное про общую палитру также относится и к вратарям.

    НА ЗАМЕТКУ: Ранние версии (5.1.0, 5.1.1) китсервера некорректно работали с некоторыми графическими картами. В частности, проблемы были обнаружены с GeForce FX и GeForce 4 картами: мерцание экрана, сильное замедление работы при входе в режим выбора форм, вместо 2.5d-форм отображались куски случайных текстур. Начиная с версии 5.1.2, это ошибка была исправлена. (Если все же у вас она по-прежнему присутствует, попробуйте установить новый драйвера видеокарты от Nvidia).

    2.5. Тараканы по поводу общей палитры. (shared palette)

    Для тех, кто уже ранее экспериментировал с заменой/добавлением форм в PES/WE, наибольшое раздражение скорее всего вызывает так называемая идея общей палитры (shared palette), которая впервые была реализована Konami в PES5. Что означает "общая палитра"? А то, что первая (pa) и вторая (pb) футболки для каждой команды должны использовать одну и ту же 256-цветную палитру. Если это условие не выполнено, то при смешении частей, формы будут некорректно отображаться во время матча. Сама по себе идея смешения частей - несомненно неплохая мысль от Konami, но реализована она, как бы это сказать повежливей... слегка через задницу. Общая палитра уже попортила кровь многим начинающим и опытным песоманам.

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

    Как уже отмечалось выше, даннай функция китсервера дает возможность организации форм различными способами:

    1 Все формы игроков данной команды используют общую палитру
    Итак, вы скачиваете замечательные разноцветные формы 1-ю, 2-ю, 3-ю, 4-ую, и т.д. Потом конвертируете изображения таким образом чтобы все они использовали общую палитры из 256 цветов. К сожалению, именно в этой конвертации и есть основная сложность, так как создается такое впечатление, что качественного софта, который мог бы такую операцию выполнить, и еще к тому же был бы бесплатным, в природе не существует. Правда есть неплохой небесплатный софт - OptPIX Image Studio, например.(GIMP и Фотошоп - это не худшие варианты, но у них свои заморочки: неправильная работа с прозрачностью и неспособность корректно сохранить эту прозрачность в формате PNG с 8-битовой палитрой). Вторая причина, почему подобная конвертация проблематична - это ограниченность палитры. Всего есть только 256 цветов, и когда у вас набирается 4-5 форм для одной команды, уже не так просто конвертировать их всех в одну палитру без потери в качестве.
    В поставляемой с китсервером GDB, примерами подобной организации форм являются: Newcastle, Man Utd, Real Madrid, France. Основное преимущество общей палитры - это возможность смешения всех частей всех форм без ограничений.
    2Каждая форма имеет свою палитру.
    Это - наиболее простой, и отнюдь не худший, вариант организации форм. Скачиваете формы, складываете в нужные папки GDB, и все - формы готовы к использованию. Никакого геморроя с общей палитрой. Конечно, есть и обратная сторона медали: во время предматчевого выбора форм, китсервер заблокирует возможность смешения частей. Вместо этого, когда вы попробуете изменить только футболку, китсервер изменит так же и трусы и гетры - с таким расчетом чтобы все три части использовали одну и ту же палитру. То есть получится так как было в китсерверах для PES3 и PES4: дополнительные формы использовать можно, но только целиком. Конечно, это ограничение можно легко обойти, если нарисовать все нужные комбинации футболок, трусов и гетр, как отдельные текстуры. Впрочем, обычно не надо даже рисовать самому: китмейкеры часто сами рисуют подобные комбинации по запросам и просто для себя.
    В базе GDB примером подобной организации форм является Tottenham.
    3Гибрид первого и второго подхода
    Для каждой команды, можно иметь несколько форм с общей палитрой и несколько - с индивидуальными палитрами. Никакого противоречия тут нет. Принцип работы китсервера остается тем же: те комбинации частей, которые используют общую палитру, допускаются, а все остальные - блокируются.
    Примером подобного подхода в базе GDB является Germany.

    Ballserver Module 5.2.0

    3.1 Краткий обзор возможностей модуля

  • Выбор мяча на экране "Strip Selection".
    Пока просто текст названия мяча, но возможно в будующем появится "preview".
  • Поддержка текстур разного размера.
    Можно использовать текстуры 256x256, 512x512 и даже 1024x1024 пикселов, в форматах PNG или BMP.
  • 3.2 Конфигурация GDB

    Ballserver использует ту же самую папку GDB, что и остальные модули. Внутри папки GDB, теперь есть новая папка balls. Внутри нее, вы увидите файл со знакомым названием map.txt (похож на тот, что используется киствервером, но этот - для мячей). Формат очень прост: три аттрибута для каждого мяча. Первый - это имя, которое будет отображено во время выбора форм. Второй - имя файла модели мяча. Третий - имя текстуры мяча. Пример:

    # This is the configuration file for Ballserver
    # Format: "<name displayed in game>","<model file>","<texture file>"
    # Example: "adidas Finale Capitano Grey","ariel_mdl.bin","adidas_finale_capitano_grey.bmp"
    # Texture paths are relative to GDB\balls\, model paths to GDB\balls\mdl\
    
    # adidas
    "adidas Finale Capitano Grey","ariel_mdl.bin","adidas_finale_capitano_grey.bmp"
    "adidas Teamgeist Blue","gwidon_mdl.bin","adidas_teamgeist_blue.png"
    
    # Nike
    
    # Puma
    
    # This comment makes sure you have pressed the enter key after the last ball
    
    Не забудьте двойные кавычки! (Иначе аттрибуты будут неверно прочитаны). Конфигурация, приведенная выше, позволяет выбрать между двумя новами мячами: adidas Finale Capitano Grey и adidas Teamgeist Blue. Текстуры должны находиться в папке "GDB\balls", а модели - в "GDB\balls\mdl".

    Вы можете также организовать мячи в отдельные папки. В этом случае необходимо использовать относительные пути в именах файлов. Например, mysubfolder\tex.png для файла "tex.png" в папке "GDB\balls\mysubfolder".

    Скачивая разные мячи со многих сайтов, вы заметите, что большое количество мячей используют одну и ту же модель, а различаются только текстурами. В этои случае, вы можете использовать один и тот же файл модели для всех этих мячей. Модель не зависит от размера текстуры, и вы можете использовать текстуры разных размеров (256x256, 512x512, 1024x1024) с одной и той же моделью.

    3.3 Выбор мяча

    Во время выбора форм (Strip Selection) вы увидите текст, расположенный немного ниже самих форм: "Ball: game choice". Это означает, что в матче будет использован мяч "по-умолчанию". Нажимая клавишу B на клавиатуре, вы можете выбрать следующий по порядку мяч из GDB. (или перебирать мячи в обратном порядке, с помощью клавиши V). Название мяча на экране должно измениться следующим образом: "Ball: <имя мяча из map.txt>" и тогда в матче вы должны увидеть этот мяч. Клавиша R выбирает мяч из списка случайным образом, а клавиша C - снова возвращает к "game choice".

    LOD Mixer Module 5.2.0

    4.1 Краткая справка

    Китсервер теперь включает в себя новый модуль - LOD Mixer. Этот модуль позволяет произвести некоторые изменения в конфигурации графического движка игры. Например, включить зрителей на всех камерах, изменить таблицу уровней детализации (LOD), менять погоду/стадион и др. в режимах League/Cup/Master League.

    Для конфигурации модуля запустите lodcfg.exe. Скриншот того, как это выгдядит (практически идентично более старой версии LOD Mixer - 1.6, которая распространяется в качестве самостоятельной утилиты):

    Более подробно про LOD Mixer можно прочитать здесь: lodmixer.txt
    (К сожалению, пока только на английском)

    Некоторые аспекты конфигурации

    5.1. Главный конфигурационный файл: kload.cfg

    В большинстве случаев, Вам не понадобится модифицировать этот файл. Однако, если вы хотите отключить какой-нибуль модуль, то это делается именно в этом файле - kload.cfg. Вот как он выглядит по-умолчанию:

    # Loader configuration file
    
    gdb.dir = ".\"
    DLL.num = 6
    DLL.0 = "kitserver\zlib1.dll"
    DLL.1 = "kitserver\libpng13.dll"
    DLL.2 = "kitserver\kserv.dll"
    DLL.3 = "kitserver\bserv.dll"
    DLL.4 = "kitserver\fserv.dll"
    DLL.5 = "kitserver\lodmixer.dll"
    
    # DirectX options
    dx.force-SW-TnL = 0
    dx.emulate-HW-TnL = 0
    

    Первые два модуля - это стандартные библиотеки для поддержки изображений в формате PNG. Не удаляйте эти модули. Последующие четыре модуля - это собственно сами модули китсервера, которые не зависят друг от друга и могут быть отключены и снова включены. Например, чтобы отключить основной модуль китсервера (kserv.dll), который управляет формами - добавьте символ "#" в начало соответствующей строки.

    DLL.num = 6
    DLL.0 = "kitserver\zlib1.dll"
    DLL.1 = "kitserver\libpng13.dll"
    #DLL.2 = "kitserver\kserv.dll"
    DLL.3 = "kitserver\bserv.dll"
    DLL.4 = "kitserver\fserv.dll"
    DLL.5 = "kitserver\lodmixer.dll"
    

    Опции dx.force-SW-TnL и dx.emulate-HW-TnL позволяют добиться того же эффекта, что и аналогичные установки в утилите 3DAnalyzer: "Force SW TnL" и "Emulate HW TnL Caps". Если у вас проблемы со стабильностью игры, но по какой-то причине вы не можете использовать 3DAnalyzer, попробуйте активировать эти установки.
    Чтобы включить эти опции, замените значение 0 на 1.

    Над данной версией программы работали:

    Программирование: juce (Модули: Китсервер, LOD mixer), Robbie (Модули: Ballserver, Faceserver)
    Тестирование: biker_jim_uk, ntalex
    Формы: Spark, kel, qiankun.
    Мячи: DAMned.
    Модели мячей: Ariel, Gwidon.
    Лицо Давида Виллы: Chris79.
    Формы и мячи взяты здесь: http://www.wevolution.org
    Шрифты, номера: авторы неизвестны. Изображения взяты с этого сайта: http://www.socsci.umn.edu/~jkoepp/pes5/ и из самой игры.
    Документация: TriAn (Русский текст), juce (Англ.текст, дополнения к русскому переводу), Robbie (Немецкий текст, документация по Ballserver и Faceserver на английском).

    Kitserver использует следующие открытые библиотеки (open source software):
    pngdib by Jason Summers http://entropymine.com/jason/pngdib/
    libpng by Guy Eric Schalnat, Andreas Dilger, Glenn Randers-Pehrson, and others http://libpng.org/pub/png/libpng.html
    zlib by Jean-loup Gailly and Mark Adler, and others http://www.zlib.net/