Пример использования скрипта для сборки spd15.wad из fixmaps.zip: Свитчи -iwad, -file работают так же как в думе. Свитч -map определяет название карты, которую нужно вытащить. Карта берётся последняя из всех загруженных вадов. Свитч -outmap определяет название карты после вытаскивания, если такая уже есть — будет заменена. Свитч -out указывает файл, в который сохранять.
Результат, если кому интересно: http://www.mediafire.com/download/qkce3mrb4142j69/spd15.wad (буду очень благодарен, если кто-нибудь там пробежится с ноклипом и подтвердит, что все текстуры на своих местах; свитчи на MAP09 точно работают)
Фичи: 1) Удаляет неиспользуемые текстуры в процессе (если точнее, он их банально не копирует). 2) Не заменяет изображения из IWAD. Никогда. В том плане, что текстуры переименовываются. 3) Мерджит ANIMATED и SWITCHES. 4) Идентичные текстуры старается тоже просто так не плодить, сливает с существующим контентом (идентичные = MD5 от всех патчей текстуры совпало с MD5 от всех патчей другой текстуры, или два флэта совпали). Реюзает патчи. 5) Читает TEXTURE1, TEXTURE2, F_* и FF_*. Пишет только TEXTURE2 и FF_*. 6) Копирует музыку для карт MAP01..MAP32 или E1M1..E3M9. Отдельная музыка для E4M# не поддерживается по техническим причинам.
Баги (?): 7) Работает ДОЛГО вследствие активного (от слова везде) подсчёта MD5. Это сделано чтобы можно было совсем не ориентироваться на всяческие названия и мерджить идентичный контент. 8) swan_defswani.dat используется скриптом для узнавания ванильных анимаций/свитчей (то есть например тупая замена BLOOD1/BLOOD3 файлов для перекраски). Свитчи из некоторых IWAD'ов там не прописаны. Чтобы каждый раз не трогать основной файл, название файла можно менять свитчом -defswani. Т.е. например сделать (самостоятельно) swan_plutonia.dat и подключать его через -defswani swan_plutonia.dat 9) 2/3 кода писалось интуитивно и с минимальным участием сознания, а половина вообще вчера ночью, поэтому КАК оно работает я уже не помню (серьёзно). И вообще код лапшой висит.
Тестировалось на примере вемодовского спидмапа и в prboom-plus. В ванили собранные вады с большой вероятностью не работают (или определённые их аспекты). Спасибо Арчи за уточнение.
Если я не ошибаюсь, в программе не хватает исключения для флэта F_SKY1. Его копии с другим названием ни в коем случае не надо создавать, а то это портит всё небо в уровнях. Лучше просто использовать первый попавшийся везде.
Хмм, вот на примере этого вада: https://www.doomworld.com/idgames/levels/doom2/j-l/legobase Делаю wadstomp.py -iwad doom2.wad -map MAP01 -out testik.wad -file legobase.wad -outmap MAP01
Конфликтующие свитчи переименовываются в SW1S0000 и так далее, но в SWITCHES я их что-то не вижу.
И вот ещё проблема, не знаю можно ли легко починить. Берём Деус Вульт: https://www.doomworld.com/idgames/levels/doom2/Ports/d-f/dv Делаем:
wadstomp.py -iwad doom2.wad -map MAP01 -out testik.WAD -file DV.wad -outmap MAP01
И в яме получается такое, хотя должно быть вот так. Видимо замена дефолтных анимаций как-то путает программу. Приходится потом руками править.