├── data ├── hfmusic-rm.txt ├── hfmusic-listfile.txt ├── hfvoice-rm.txt ├── save-listfile.txt ├── hfmonk-rm.txt ├── hfvoice-listfile.txt ├── hellfire-rm.txt ├── spawn-rm.txt ├── hfmonk-clx.txt ├── hellfire-clx.txt ├── hfmonk-listfile.txt ├── diabdat-rm.txt ├── hellfire-listfile.txt ├── spawn-clx.txt ├── spawn-listfile.txt └── diabdat-clx.txt ├── third_party ├── libmpq │ ├── config.h │ └── CMakeLists.txt ├── zlib │ ├── CMake │ │ └── FindZLIB.cmake │ └── CMakeLists.txt ├── bzip2 │ ├── bz_internal_error.c │ └── CMakeLists.txt └── dvl_gfx │ └── CMakeLists.txt ├── .gitignore ├── src ├── .editorconfig ├── extract_spell_icons.hpp ├── .clang-format ├── extract_spell_icons.cpp ├── gen_extract_spell_icons_color_distances_main.cpp └── unpack_and_minify_mpq.cpp ├── CMake ├── functions │ └── FetchContent_MakeAvailableExcludeFromAll.cmake └── mingwcc64.toolchain.cmake ├── README.md ├── LICENSE ├── .github └── workflows │ └── Windows_MinGW_x86_64.yml ├── .clang-tidy └── CMakeLists.txt /data/hfmusic-rm.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /third_party/libmpq/config.h: -------------------------------------------------------------------------------- 1 | #define VERSION "0.4.2" 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /output/ 2 | /build/ 3 | /build-*/ 4 | /.vscode/ 5 | -------------------------------------------------------------------------------- /data/hfmusic-listfile.txt: -------------------------------------------------------------------------------- 1 | music\dlvlf.wav 2 | music\dlvle.wav 3 | -------------------------------------------------------------------------------- /data/hfvoice-rm.txt: -------------------------------------------------------------------------------- 1 | sfx/hellfire/naratr1.wav 2 | sfx/hellfire/naratr2.wav 3 | -------------------------------------------------------------------------------- /third_party/zlib/CMake/FindZLIB.cmake: -------------------------------------------------------------------------------- 1 | # No-op, ZLIB::ZLIB is built from source. 2 | -------------------------------------------------------------------------------- /src/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = tab 5 | end_of_line = lf 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | -------------------------------------------------------------------------------- /third_party/bzip2/bz_internal_error.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void bz_internal_error(int errcode) { 4 | fprintf(stderr, "BZip2 fatal error %d\n", errcode); 5 | } 6 | -------------------------------------------------------------------------------- /src/extract_spell_icons.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace devilution_mpq_tools { 9 | 10 | std::string ExtractSpellIcons(std::span clxData, 11 | std::vector &iconBackground, std::vector &iconsWithoutBackground); 12 | 13 | } // namespace devilution_mpq_tools 14 | -------------------------------------------------------------------------------- /third_party/dvl_gfx/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(functions/FetchContent_MakeAvailableExcludeFromAll) 2 | 3 | set(ENABLE_INSTALL OFF) 4 | FetchContent_Declare( 5 | dvl_gfx 6 | URL https://github.com/diasurgical/clx-conversion-tools/archive/ae39773dc2932b82328507bb51f79fa13b561ec0.tar.gz 7 | URL_HASH MD5=3f879a34fa84cc4dc5e81302900bbb44 8 | ) 9 | FetchContent_MakeAvailableExcludeFromAll(dvl_gfx) 10 | -------------------------------------------------------------------------------- /src/.clang-format: -------------------------------------------------------------------------------- 1 | BasedOnStyle: webkit 2 | AlignTrailingComments: true 3 | AllowShortBlocksOnASingleLine: true 4 | AllowShortCaseLabelsOnASingleLine: true 5 | AllowShortFunctionsOnASingleLine: All 6 | AllowShortIfStatementsOnASingleLine: WithoutElse 7 | PointerAlignment: Right 8 | TabWidth: 4 9 | UseTab: ForIndentation 10 | SortIncludes: true 11 | NamespaceIndentation: None 12 | FixNamespaceComments: true 13 | -------------------------------------------------------------------------------- /data/save-listfile.txt: -------------------------------------------------------------------------------- 1 | additionalMissiles 2 | game 3 | hero 4 | heroitems 5 | hotkeys 6 | mpstashitems 7 | spstashitems 8 | perms01 9 | perms02 10 | perms03 11 | perms04 12 | perms05 13 | perms06 14 | perms07 15 | perms08 16 | perml00 17 | perml01 18 | perml02 19 | perml03 20 | perml04 21 | perml05 22 | perml06 23 | perml07 24 | perml08 25 | perml09 26 | perml10 27 | perml11 28 | perml12 29 | perml13 30 | perml14 31 | perml15 32 | perml16 33 | perml17 34 | perml18 35 | perml19 36 | perml20 37 | perml21 38 | perml22 39 | perml23 40 | perml24 41 | -------------------------------------------------------------------------------- /CMake/functions/FetchContent_MakeAvailableExcludeFromAll.cmake: -------------------------------------------------------------------------------- 1 | # Like `FetchContent_MakeAvailable` but passes EXCLUDE_FROM_ALL to `add_subdirectory`. 2 | macro(FetchContent_MakeAvailableExcludeFromAll) 3 | foreach(contentName IN ITEMS ${ARGV}) 4 | string(TOLOWER ${contentName} contentNameLower) 5 | FetchContent_GetProperties(${contentName}) 6 | if(NOT ${contentNameLower}_POPULATED) 7 | FetchContent_Populate(${contentName}) 8 | if(EXISTS ${${contentNameLower}_SOURCE_DIR}/CMakeLists.txt) 9 | add_subdirectory(${${contentNameLower}_SOURCE_DIR} 10 | ${${contentNameLower}_BINARY_DIR} EXCLUDE_FROM_ALL) 11 | endif() 12 | endif() 13 | endforeach() 14 | endmacro() 15 | -------------------------------------------------------------------------------- /CMake/mingwcc64.toolchain.cmake: -------------------------------------------------------------------------------- 1 | SET(MINGW_CROSS TRUE) 2 | 3 | SET(CROSS_PREFIX "/usr" CACHE STRING "crosstool-NG prefix") 4 | 5 | SET(CMAKE_SYSTEM_NAME Windows) 6 | 7 | # workaround 8 | list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "${CROSS_PREFIX}/x86_64-w64-mingw32/include") 9 | 10 | SET(CMAKE_C_COMPILER "x86_64-w64-mingw32-gcc") 11 | SET(CMAKE_CXX_COMPILER "x86_64-w64-mingw32-g++") 12 | set(CMAKE_RC_COMPILER "x86_64-w64-mingw32-windres") 13 | set(PKG_CONFIG_EXECUTABLE "${CROSS_PREFIX}/bin/x86_64-w64-mingw32-pkg-config" CACHE STRING "Path to pkg-config") 14 | 15 | SET(CMAKE_FIND_ROOT_PATH "${CROSS_PREFIX}/x86_64-w64-mingw32" "${CROSS_PREFIX}/x86_64-w64-mingw32/x86_64-w64-mingw32") 16 | 17 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 18 | 19 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 20 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 21 | SET(SYSTEM_BITS x64) 22 | SET(DISABLE_LTO ON) 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DevilutionX MPQ tools 2 | 3 | ## `unpack_and_minify_mpq` 4 | 5 | Unpacks an MPQ and minifies its assets. 6 | 7 | All graphics assets are converted to CLX. 8 | 9 | ### Usage 10 | 11 | Simply drop the binary into the directory with the MPQs and run it. 12 | 13 | Alternatively, run `unpack_and_minify_mpq --help` to see the list of options. 14 | 15 | If `--mp3` is passed, audio is converted from WAV to MP3. Not implemented yet. 16 | 17 | ### Install 18 | 19 | On Windows, download the latest release from https://github.com/diasurgical/devilutionx-mpq-tools/releases. 20 | 21 | On other OSes, build and install from source (see below). 22 | 23 | ### Build from source 24 | 25 | ```bash 26 | cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF 27 | cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) 28 | ``` 29 | 30 | To install the built binary: 31 | 32 | ```bash 33 | sudo cmake --install build-rel 34 | ``` 35 | -------------------------------------------------------------------------------- /third_party/bzip2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(functions/FetchContent_MakeAvailableExcludeFromAll) 2 | 3 | include(FetchContent) 4 | FetchContent_Declare(bzip2 5 | URL https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz 6 | URL_HASH MD5=67e051268d0c475ea773822f7500d0e5 7 | ) 8 | FetchContent_MakeAvailableExcludeFromAll(bzip2) 9 | 10 | if(DEVILUTIONX_STATIC_BZIP2) 11 | set(_lib_type STATIC) 12 | else() 13 | set(_lib_type SHARED) 14 | endif() 15 | add_library(BZip2 ${_lib_type} 16 | ${bzip2_SOURCE_DIR}/blocksort.c 17 | ${bzip2_SOURCE_DIR}/bzlib.c 18 | ${bzip2_SOURCE_DIR}/compress.c 19 | ${bzip2_SOURCE_DIR}/crctable.c 20 | ${bzip2_SOURCE_DIR}/decompress.c 21 | ${bzip2_SOURCE_DIR}/huffman.c 22 | ${bzip2_SOURCE_DIR}/randtable.c 23 | ${bzip2_SOURCE_DIR}/bzlib.h 24 | ${bzip2_SOURCE_DIR}/bzlib_private.h 25 | ${CMAKE_CURRENT_LIST_DIR}/bz_internal_error.c 26 | ) 27 | target_compile_definitions(BZip2 PRIVATE -DBZ_NO_STDIO) 28 | target_include_directories(BZip2 PUBLIC ${bzip2_SOURCE_DIR}) 29 | 30 | add_library(BZip2::BZip2 ALIAS BZip2) 31 | -------------------------------------------------------------------------------- /data/hfmonk-rm.txt: -------------------------------------------------------------------------------- 1 | sfx/monk/monk01.wav 2 | sfx/monk/monk08.wav 3 | sfx/monk/monk09.wav 4 | sfx/monk/monk10.wav 5 | sfx/monk/monk11.wav 6 | sfx/monk/monk12.wav 7 | sfx/monk/monk13.wav 8 | sfx/monk/monk14.wav 9 | sfx/monk/monk15.wav 10 | sfx/monk/monk16.wav 11 | sfx/monk/monk24.wav 12 | sfx/monk/monk27.wav 13 | sfx/monk/monk29.wav 14 | sfx/monk/monk34.wav 15 | sfx/monk/monk35.wav 16 | sfx/monk/monk43.wav 17 | sfx/monk/monk46.wav 18 | sfx/monk/monk49.wav 19 | sfx/monk/monk50.wav 20 | sfx/monk/monk52.wav 21 | sfx/monk/monk54.wav 22 | sfx/monk/monk55.wav 23 | sfx/monk/monk56.wav 24 | sfx/monk/monk61.wav 25 | sfx/monk/monk62.wav 26 | sfx/monk/monk68.wav 27 | sfx/monk/monk69.wav 28 | sfx/monk/monk69b.wav 29 | sfx/monk/monk70.wav 30 | sfx/monk/monk71.wav 31 | sfx/monk/monk79.wav 32 | sfx/monk/monk80.wav 33 | sfx/monk/monk82.wav 34 | sfx/monk/monk83.wav 35 | sfx/monk/monk87.wav 36 | sfx/monk/monk88.wav 37 | sfx/monk/monk89.wav 38 | sfx/monk/monk91.wav 39 | sfx/monk/monk92.wav 40 | sfx/monk/monk94.wav 41 | sfx/monk/monk95.wav 42 | sfx/monk/monk96.wav 43 | sfx/monk/monk97.wav 44 | sfx/monk/monk98.wav 45 | sfx/monk/monk99.wav 46 | -------------------------------------------------------------------------------- /third_party/libmpq/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(NOT TARGET ZLIB::ZLIB) 2 | find_package(ZLIB REQUIRED) 3 | endif() 4 | 5 | if(NOT TARGET BZip2::BZip2) 6 | find_package(BZip2 REQUIRED) 7 | endif() 8 | 9 | include(functions/FetchContent_MakeAvailableExcludeFromAll) 10 | 11 | include(FetchContent) 12 | FetchContent_Declare(libmpq 13 | URL https://github.com/diasurgical/libmpq/archive/6a9fbdc7ed3032ff00eb069590da4629bd95da5f.tar.gz 14 | URL_HASH MD5=5aa2add93b15c1823c18e95768195876 15 | ) 16 | FetchContent_MakeAvailableExcludeFromAll(libmpq) 17 | 18 | add_library(libmpq STATIC 19 | ${libmpq_SOURCE_DIR}/libmpq/common.c 20 | ${libmpq_SOURCE_DIR}/libmpq/explode.c 21 | ${libmpq_SOURCE_DIR}/libmpq/extract.c 22 | ${libmpq_SOURCE_DIR}/libmpq/huffman.c 23 | ${libmpq_SOURCE_DIR}/libmpq/mpq.c 24 | ${libmpq_SOURCE_DIR}/libmpq/wave.c 25 | ) 26 | 27 | target_include_directories(libmpq PUBLIC ${libmpq_SOURCE_DIR}) 28 | target_include_directories(libmpq PRIVATE ${CMAKE_CURRENT_LIST_DIR}) 29 | 30 | target_link_libraries(libmpq PRIVATE ZLIB::ZLIB BZip2::BZip2) 31 | 32 | if(LIBMPQ_FILE_BUFFER_SIZE) 33 | target_compile_definitions(libmpq PRIVATE "LIBMPQ_FILE_BUFFER_SIZE=${LIBMPQ_FILE_BUFFER_SIZE}") 34 | endif() 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /third_party/zlib/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(functions/FetchContent_MakeAvailableExcludeFromAll) 2 | 3 | set(CMAKE_POLICY_DEFAULT_CMP0048 NEW) 4 | 5 | include(FetchContent) 6 | FetchContent_Declare(zlib 7 | URL https://www.zlib.net/zlib-1.3.tar.gz 8 | https://www.zlib.net/fossils/zlib-1.3.tar.gz 9 | https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz 10 | URL_HASH MD5=60373b133d630f74f4a1f94c1185a53f 11 | ) 12 | FetchContent_MakeAvailableExcludeFromAll(zlib) 13 | 14 | if(DEVILUTIONX_STATIC_ZLIB) 15 | add_library(ZLIB::ZLIB ALIAS zlibstatic) 16 | target_include_directories(zlibstatic INTERFACE ${zlib_BINARY_DIR} ${zlib_SOURCE_DIR}) 17 | else() 18 | add_library(ZLIB::ZLIB ALIAS zlib) 19 | target_include_directories(zlib INTERFACE ${zlib_BINARY_DIR} ${zlib_SOURCE_DIR}) 20 | endif() 21 | 22 | # 1. Set the variables that are usually set by FindZLIB.cmake. 23 | # 2. Add the module that stubs out `find_package(ZLIB ...)` calls. 24 | set(ZLIB_FOUND ON PARENT_SCOPE) 25 | set(ZLIB_LIBRARY ZLIB::ZLIB PARENT_SCOPE) 26 | set(ZLIB_LIBRARIES ZLIB::ZLIB PARENT_SCOPE) 27 | set(ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR} PARENT_SCOPE) 28 | set(ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR} PARENT_SCOPE) 29 | set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_LIST_DIR}/CMake" PARENT_SCOPE) 30 | -------------------------------------------------------------------------------- /.github/workflows/Windows_MinGW_x86_64.yml: -------------------------------------------------------------------------------- 1 | name: Windows MinGW x86_64 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | types: [opened, synchronize] 9 | release: 10 | types: [published] 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-22.04 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v2 18 | 19 | - name: Create Build Environment 20 | run: > 21 | sudo apt-get update && 22 | sudo apt-get install -y cmake gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 23 | 24 | - name: Configure CMake 25 | shell: bash 26 | working-directory: ${{github.workspace}} 27 | env: 28 | CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'Debug'}} 29 | run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DBUILD_SHARED_LIBS=OFF -DASAN=OFF -DUBSAN=OFF -DCMAKE_TOOLCHAIN_FILE=../CMake/mingwcc64.toolchain.cmake 30 | 31 | - name: Build 32 | working-directory: ${{github.workspace}} 33 | shell: bash 34 | run: cmake --build build -j $(nproc) 35 | 36 | - name: Upload-Package 37 | if: ${{ !env.ACT }} 38 | uses: actions/upload-artifact@v4 39 | with: 40 | name: unpack_and_minify_mpq.zip 41 | path: build/unpack_and_minify_mpq.exe 42 | 43 | - name: Update Release 44 | if: ${{ github.event_name == 'release' && !env.ACT }} 45 | uses: svenstaro/upload-release-action@v2 46 | with: 47 | file: build/unpack_and_minify_mpq.exe 48 | asset_name: unpack_and_minify_mpq_x86_64.exe 49 | overwrite: true 50 | -------------------------------------------------------------------------------- /data/hfvoice-listfile.txt: -------------------------------------------------------------------------------- 1 | sfx\hellfire\cowsut1.wav 2 | sfx\hellfire\cowsut10.wav 3 | sfx\hellfire\cowsut11.wav 4 | sfx\hellfire\cowsut12.wav 5 | sfx\hellfire\cowsut2.wav 6 | sfx\hellfire\cowsut3.wav 7 | sfx\hellfire\cowsut4.wav 8 | sfx\hellfire\cowsut4a.wav 9 | sfx\hellfire\cowsut5.wav 10 | sfx\hellfire\cowsut6.wav 11 | sfx\hellfire\cowsut7.wav 12 | sfx\hellfire\cowsut8.wav 13 | sfx\hellfire\cowsut9.wav 14 | sfx\hellfire\defiler6.wav 15 | sfx\hellfire\defiler7.wav 16 | sfx\hellfire\defiler8.wav 17 | sfx\hellfire\farmer1.wav 18 | sfx\hellfire\farmer2.wav 19 | sfx\hellfire\farmer2a.wav 20 | sfx\hellfire\farmer3.wav 21 | sfx\hellfire\farmer4.wav 22 | sfx\hellfire\farmer5.wav 23 | sfx\hellfire\farmer6.wav 24 | sfx\hellfire\farmer7.wav 25 | sfx\hellfire\farmer8.wav 26 | sfx\hellfire\farmer9.wav 27 | sfx\hellfire\nakrul1.wav 28 | sfx\hellfire\nakrul2.wav 29 | sfx\hellfire\nakrul3.wav 30 | sfx\hellfire\nakrul4.wav 31 | sfx\hellfire\nakrul5.wav 32 | sfx\hellfire\nakrul6.wav 33 | sfx\hellfire\naratr1.wav 34 | sfx\hellfire\naratr2.wav 35 | sfx\hellfire\naratr3.wav 36 | sfx\hellfire\naratr4.wav 37 | sfx\hellfire\naratr5.wav 38 | sfx\hellfire\naratr6.wav 39 | sfx\hellfire\naratr7.wav 40 | sfx\hellfire\naratr8.wav 41 | sfx\hellfire\naratr9.wav 42 | sfx\hellfire\teddybr1.wav 43 | sfx\hellfire\teddybr2.wav 44 | sfx\hellfire\teddybr3.wav 45 | sfx\hellfire\teddybr4.wav 46 | sfx\monk\monk01.wav 47 | sfx\monk\monk08.wav 48 | sfx\monk\monk09.wav 49 | sfx\monk\monk10.wav 50 | sfx\monk\monk11.wav 51 | sfx\monk\monk12.wav 52 | sfx\monk\monk13.wav 53 | sfx\monk\monk14.wav 54 | sfx\monk\monk15.wav 55 | sfx\monk\monk16.wav 56 | sfx\monk\monk24.wav 57 | sfx\monk\monk27.wav 58 | sfx\monk\monk29.wav 59 | sfx\monk\monk34.wav 60 | sfx\monk\monk35.wav 61 | sfx\monk\monk43.wav 62 | sfx\monk\monk46.wav 63 | sfx\monk\monk49.wav 64 | sfx\monk\monk50.wav 65 | sfx\monk\monk52.wav 66 | sfx\monk\monk54.wav 67 | sfx\monk\monk55.wav 68 | sfx\monk\monk56.wav 69 | sfx\monk\monk61.wav 70 | sfx\monk\monk62.wav 71 | sfx\monk\monk68.wav 72 | sfx\monk\monk69.wav 73 | sfx\monk\monk69b.wav 74 | sfx\monk\monk70.wav 75 | sfx\monk\monk71.wav 76 | sfx\monk\monk79.wav 77 | sfx\monk\monk80.wav 78 | sfx\monk\monk82.wav 79 | sfx\monk\monk83.wav 80 | sfx\monk\monk87.wav 81 | sfx\monk\monk88.wav 82 | sfx\monk\monk89.wav 83 | sfx\monk\monk91.wav 84 | sfx\monk\monk92.wav 85 | sfx\monk\monk94.wav 86 | sfx\monk\monk95.wav 87 | sfx\monk\monk96.wav 88 | sfx\monk\monk97.wav 89 | sfx\monk\monk98.wav 90 | sfx\monk\monk99.wav 91 | -------------------------------------------------------------------------------- /data/hellfire-rm.txt: -------------------------------------------------------------------------------- 1 | data/diabsmal.cel 2 | items/rglows1.cel 3 | missiles/fba_n1.cl2 4 | missiles/fba_n10.cl2 5 | missiles/fba_n11.cl2 6 | missiles/fba_n12.cl2 7 | missiles/fba_n13.cl2 8 | missiles/fba_n14.cl2 9 | missiles/fba_n15.cl2 10 | missiles/fba_n16.cl2 11 | missiles/fba_n2.cl2 12 | missiles/fba_n3.cl2 13 | missiles/fba_n4.cl2 14 | missiles/fba_n5.cl2 15 | missiles/fba_n6.cl2 16 | missiles/fba_n7.cl2 17 | missiles/fba_n8.cl2 18 | missiles/fba_n9.cl2 19 | missiles/fbb_n1.cl2 20 | missiles/fbb_n10.cl2 21 | missiles/fbb_n11.cl2 22 | missiles/fbb_n12.cl2 23 | missiles/fbb_n13.cl2 24 | missiles/fbb_n14.cl2 25 | missiles/fbb_n15.cl2 26 | missiles/fbb_n16.cl2 27 | missiles/fbb_n2.cl2 28 | missiles/fbb_n3.cl2 29 | missiles/fbb_n4.cl2 30 | missiles/fbb_n5.cl2 31 | missiles/fbb_n6.cl2 32 | missiles/fbb_n7.cl2 33 | missiles/fbb_n8.cl2 34 | missiles/fbb_n9.cl2 35 | missiles/fbc_n1.cl2 36 | missiles/fbc_n10.cl2 37 | missiles/fbc_n11.cl2 38 | missiles/fbc_n12.cl2 39 | missiles/fbc_n13.cl2 40 | missiles/fbc_n14.cl2 41 | missiles/fbc_n15.cl2 42 | missiles/fbc_n16.cl2 43 | missiles/fbc_n2.cl2 44 | missiles/fbc_n3.cl2 45 | missiles/fbc_n4.cl2 46 | missiles/fbc_n5.cl2 47 | missiles/fbc_n6.cl2 48 | missiles/fbc_n7.cl2 49 | missiles/fbc_n8.cl2 50 | missiles/fbc_n9.cl2 51 | missiles/fbd_n1.cl2 52 | missiles/fbd_n10.cl2 53 | missiles/fbd_n11.cl2 54 | missiles/fbd_n12.cl2 55 | missiles/fbd_n13.cl2 56 | missiles/fbd_n14.cl2 57 | missiles/fbd_n15.cl2 58 | missiles/fbd_n16.cl2 59 | missiles/fbd_n2.cl2 60 | missiles/fbd_n3.cl2 61 | missiles/fbd_n4.cl2 62 | missiles/fbd_n5.cl2 63 | missiles/fbd_n6.cl2 64 | missiles/fbd_n7.cl2 65 | missiles/fbd_n8.cl2 66 | missiles/fbd_n9.cl2 67 | monsters/antworm/debug.txt 68 | monsters/bspidr/debug.txt 69 | monsters/bubba/debug.txt 70 | monsters/byclps/byclpos.txt 71 | monsters/clasp/debug.txt 72 | monsters/eye/debug.txt 73 | monsters/eye2/debug.txt 74 | monsters/flesh/debug.txt 75 | monsters/fork/debug.txt 76 | monsters/gravdg/gdigger.txt 77 | monsters/hellbat/hellbat.txt 78 | monsters/hellbat2/bhellbat.txt 79 | monsters/hellbug/hellbug.txt 80 | monsters/horkd/debug.txt 81 | monsters/lich/debug.txt 82 | monsters/lich2/debug.txt 83 | monsters/newsfx/eject1.wav 84 | monsters/newsfx/ribsplt1.wav 85 | monsters/nkr/nakrule.txt 86 | monsters/rat/debug.txt 87 | monsters/reaper/reaper.txt 88 | monsters/scorp/debug.txt 89 | monsters/spawn/debug.txt 90 | monsters/spider/debug.txt 91 | monsters/wscorp/debug.txt 92 | nlevels/l6data/l6base.pal 93 | nlevels/l6data/nest.col 94 | sfx/misc/newbfire.wav 95 | sfx/hellfire/defiler6.wav 96 | sfx/hellfire/defiler7.wav 97 | sfx/hellfire/defiler8.wav 98 | sfx/hellfire/farmer1.wav 99 | sfx/hellfire/farmer2.wav 100 | sfx/hellfire/farmer2a.wav 101 | sfx/hellfire/farmer3.wav 102 | sfx/hellfire/farmer4.wav 103 | sfx/hellfire/farmer5.wav 104 | sfx/hellfire/farmer6.wav 105 | sfx/hellfire/farmer7.wav 106 | sfx/hellfire/farmer8.wav 107 | sfx/hellfire/farmer9.wav 108 | sfx/hellfire/nakrul1.wav 109 | sfx/hellfire/nakrul2.wav 110 | sfx/hellfire/nakrul3.wav 111 | sfx/hellfire/nakrul4.wav 112 | sfx/hellfire/nakrul5.wav 113 | sfx/hellfire/nakrul6.wav 114 | sfx/hellfire/naratr1.wav 115 | sfx/hellfire/naratr2.wav 116 | sfx/hellfire/naratr3.wav 117 | sfx/hellfire/naratr4.wav 118 | sfx/hellfire/naratr5.wav 119 | sfx/hellfire/naratr6.wav 120 | sfx/hellfire/naratr7.wav 121 | sfx/hellfire/naratr8.wav 122 | sfx/hellfire/naratr9.wav 123 | sfx/hellfire/teddybr1.wav 124 | sfx/hellfire/teddybr2.wav 125 | sfx/hellfire/teddybr3.wav 126 | sfx/hellfire/teddybr4.wav 127 | towners/farmer/farmer.txt 128 | towners/girl/debug.txt 129 | towners/trader/tradern.cel 130 | towners/trader/traderw.cel 131 | ui_art/black.pcx 132 | ui_art/font42g.pcx 133 | ui_art/hf_title.pcx 134 | -------------------------------------------------------------------------------- /.clang-tidy: -------------------------------------------------------------------------------- 1 | --- 2 | # clang-tidy configuration 3 | # 4 | # clang-tidy can be run manually like this: 5 | # 6 | # run-clang-tidy -p build 'src.*' 7 | # 8 | # To apply fixes suggested by clang-tidy, run: 9 | # 10 | # run-clang-tidy -p build -fix -format 'src.*' 11 | # 12 | # To limit the run to certain checks: 13 | # 14 | # run-clang-tidy -checks='-*,modernize-use-nullptr' -p build 'Source.*' 15 | # 16 | # clang-tidy also has several IDE integrations listed here: 17 | # https://clang.llvm.org/extra/clang-tidy/Integrations.html 18 | 19 | # Enable most checks. 20 | # 21 | # Built-in checks: 22 | # https://clang.llvm.org/extra/clang-tidy/checks/list.html 23 | # 24 | # Exclusions: 25 | # 26 | # -modernize-avoid-c-arrays 27 | # We use C-arrays throughout, e.g. for `constexpr char []`. 28 | # `std::array` is not a replacement because its length is 29 | # not deduced. 30 | # 31 | # -modernize-use-trailing-return-type 32 | # A purely stylistic change that we do not want. 33 | # 34 | # -modernize-concat-nested-namespaces 35 | # -modernize-avoid-bind 36 | # Compatibility with older compilers. 37 | Checks: > 38 | -*, 39 | bugprone-*, 40 | cppcoreguidelines-pro-type-cstyle-cast, 41 | google-runtime-int, 42 | llvm-include-order, 43 | llvm-namespace-comment, 44 | misc-*, 45 | modernize-*, 46 | performance-*, 47 | portability-*, 48 | readability-*, 49 | -readability-magic-numbers, 50 | -misc-non-private-member-variables-in-classes, 51 | -modernize-avoid-c-arrays, 52 | -modernize-use-trailing-return-type, 53 | -modernize-concat-nested-namespaces, 54 | -modernize-avoid-bind, 55 | -bugprone-easily-swappable-parameters, 56 | -readability-function-cognitive-complexity, 57 | -readability-identifier-length 58 | 59 | HeaderFilterRegex: 'src/.*\.(h|hpp)$' 60 | 61 | CheckOptions: 62 | - { key: readability-identifier-naming.NamespaceCase, value: lower_case } 63 | - { key: readability-identifier-naming.ClassCase, value: CamelCase } 64 | - { key: readability-identifier-naming.StructCase, value: CamelCase } 65 | - { key: readability-identifier-naming.TemplateParameterCase, value: CamelCase } 66 | - { key: readability-identifier-naming.MethodCase, value: camelBack } 67 | - { key: readability-identifier-naming.FunctionCase, value: CamelCase } 68 | - { key: readability-identifier-naming.ParameterCase, value: camelBack } 69 | - { key: readability-identifier-naming.MemberCase, value: camelBack } 70 | - { key: readability-identifier-naming.VariableCase, value: camelBack } 71 | - { key: readability-identifier-naming.ClassMemberCase, value: lower_case } 72 | - { key: readability-identifier-naming.GlobalVariableCase, value: aNy_CasE } 73 | - { key: readability-identifier-naming.GlobalFunctionCase, value: aNy_CasE } 74 | - { key: readability-identifier-naming.ClassMemberSuffix, value: _ } 75 | - { key: readability-identifier-naming.PrivateMemberSuffix, value: _ } 76 | - { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ } 77 | - { key: readability-identifier-naming.EnumConstantCase, value: CamelCase } 78 | - { key: readability-identifier-naming.ConstexprVariableCase, value: CamelCase } 79 | - { key: readability-identifier-naming.GlobalConstantCase, value: CamelCase } 80 | - { key: readability-identifier-naming.MemberConstantCase, value: CamelCase } 81 | - { key: readability-identifier-naming.StaticConstantCase, value: CamelCase } 82 | 83 | # Allow short if-statements without braces 84 | - { key: readability-braces-around-statements.ShortStatementLines, value: 3 } 85 | 86 | # Use fixed-width integer types instead of short, long and long long 87 | - { key: google-runtime-int.UnsignedTypePrefix, value: "std::uint" } 88 | - { key: google-runtime-int.SignedTypePrefix, value: "std::int" } 89 | - { key: google-runtime-int.TypeSuffix, value: "_t" } 90 | 91 | # `int8_t` aren't used as chars, disable misleading warning. 92 | - { key: bugprone-signed-char-misuse.CharTypdefsToIgnore, value: "std::int8_t" } 93 | -------------------------------------------------------------------------------- /src/extract_spell_icons.cpp: -------------------------------------------------------------------------------- 1 | #include "extract_spell_icons.hpp" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | namespace devilution_mpq_tools { 13 | 14 | namespace { 15 | 16 | constexpr uint8_t TransparentColor = 255; 17 | 18 | constexpr uint8_t MinBgColor = 192; 19 | constexpr uint8_t MaxBgColor = 206; 20 | 21 | struct Borders { 22 | uint8_t top; 23 | uint8_t right; 24 | uint8_t bottom; 25 | uint8_t left; 26 | }; 27 | 28 | constexpr bool ShouldRemove(uint8_t fg, uint8_t bg) 29 | { 30 | if (fg == 144) { 31 | // A bright yellow pixel on the foreground is never 32 | // part of the icon. 33 | return true; 34 | } 35 | if (fg < MinBgColor || fg > MaxBgColor) { 36 | // Out-of-range of background pixels. 37 | return false; 38 | } 39 | 40 | // Generated by `gen_extract_spell_icons_color_distances_main.cpp`: 41 | const auto [a, b] = std::minmax({ fg, bg }); 42 | const auto d = static_cast(b - a); 43 | if (d <= 5) return true; 44 | if (d >= 7 && d <= 14) return false; 45 | if ((a == 196 && b == 202) || (a == 199 && b == 205)) return true; 46 | return false; 47 | } 48 | 49 | void RemoveBackground(uint8_t *pixels, unsigned width, unsigned height, 50 | Borders borders, const uint8_t *bg) 51 | { 52 | // Remove top border: 53 | std::memset(pixels, TransparentColor, static_cast(width) * borders.top); 54 | 55 | const unsigned innerWidth = width - borders.left - borders.right; 56 | const unsigned innerHeight = height - borders.bottom - borders.top; 57 | 58 | // First round: remove borders, diff against the background, 59 | // remove confidently transparent colors. 60 | // Unfortunately, this alone is not enough because the backgrounds 61 | // are all slightly different (looks like noise). 62 | for (unsigned y = borders.top, yEnd = borders.top + innerHeight; y < yEnd; ++y) { 63 | // Remove left border: 64 | std::memset(&pixels[static_cast(y * width)], 65 | TransparentColor, borders.left); 66 | for (unsigned x = borders.left, xEnd = borders.left + innerWidth; x < xEnd; ++x) { 67 | uint8_t &pixel = pixels[y * width + x]; 68 | if (ShouldRemove(pixel, bg[y * width + x])) 69 | pixel = TransparentColor; 70 | } 71 | // Remove right border: 72 | std::memset(&pixels[y * width + borders.left + innerWidth], 73 | TransparentColor, borders.right); 74 | } 75 | // Remove bottom border: 76 | std::memset(&pixels[static_cast((borders.top + innerHeight) * width)], 77 | TransparentColor, static_cast(width) * borders.bottom); 78 | } 79 | 80 | } // namespace 81 | 82 | std::string ExtractSpellIcons(std::span clxData, 83 | std::vector &iconBackground, std::vector &iconsWithoutBackground) 84 | { 85 | std::vector pixels; 86 | const std::optional clxError = dvl_gfx::Clx2Pixels(clxData, TransparentColor, pixels); 87 | if (clxError.has_value()) 88 | return "Failed CLX->Pixels conversion: " + clxError->message; 89 | 90 | size_t numSprites = dvl_gfx::GetNumSpritesFromClxList(clxData.data()); 91 | const std::span firstSprite = dvl_gfx::GetSpriteDataFromClxList(clxData.data(), 0); 92 | const unsigned width = dvl_gfx::GetClxSpriteWidth(firstSprite.data()); 93 | const unsigned height = dvl_gfx::GetClxSpriteHeight(firstSprite.data()); 94 | 95 | Borders borders; 96 | const size_t emptySprite = 26; 97 | if (width == 37 && height == 38) { 98 | // `spelli2`, the last sprite is unused 99 | --numSprites; 100 | borders.left = borders.bottom = 1; 101 | borders.right = borders.top = 2; 102 | } else if (width == 56 && height == 56) { 103 | // `spelicon`, the last 9 sprites are overlays, unused in DevilutionX. 104 | numSprites -= 9; 105 | borders.left = borders.bottom = 5; 106 | borders.right = borders.top = 4; 107 | } else { 108 | return "Unsupported icon size"; 109 | } 110 | 111 | dvl_gfx::Pixels2Clx(&pixels[emptySprite * width * height], 112 | /*width=*/width, width, /*frameHeight=*/height, /*numFrames=*/1, 113 | TransparentColor, iconBackground); 114 | 115 | for (size_t frame = 0; frame < numSprites; ++frame) { 116 | if (frame == emptySprite) 117 | continue; 118 | RemoveBackground(&pixels[frame * width * height], width, height, 119 | borders, &pixels[emptySprite * width * height]); 120 | } 121 | std::memset(&pixels[emptySprite * width * height], TransparentColor, width * height); 122 | 123 | dvl_gfx::Pixels2Clx(pixels.data(), 124 | /*width=*/width, width, /*frameHeight=*/height, numSprites, 125 | TransparentColor, iconsWithoutBackground); 126 | return ""; 127 | } 128 | 129 | } // namespace devilution_mpq_tools 130 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.13) 2 | 3 | foreach(_policy CMP0083 CMP0092 CMP0111 CMP0126 CMP0135) 4 | if(POLICY ${_policy}) 5 | cmake_policy(SET ${_policy} NEW) 6 | set(CMAKE_POLICY_DEFAULT_${_policy} NEW) 7 | endif() 8 | endforeach() 9 | 10 | # Projects added via `add_subdirectory` or `FetchContent` may have a lower 11 | # `cmake_minimum_required` than we set here. Set policies that we require 12 | # to their new value so that they still apply. 13 | set(CMAKE_POLICY_DEFAULT_CMP0069 NEW) 14 | set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) 15 | 16 | list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake") 17 | 18 | project(DvlMpqTools VERSION 1.0.0 LANGUAGES C CXX) 19 | 20 | option(ASAN "Enable address sanitizer" ON) 21 | option(UBSAN "Enable undefined behaviour sanitizer" ON) 22 | 23 | set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON) 24 | 25 | if(CMAKE_BUILD_TYPE MATCHES "Release") 26 | set(ASAN OFF) 27 | set(UBSAN OFF) 28 | endif() 29 | 30 | set(CMAKE_CXX_STANDARD 20) 31 | set(CMAKE_CXX_EXTENSIONS OFF) 32 | set(CMAKE_CXX_STANDARD_REQUIRED OFF) 33 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # for clang-tidy 34 | 35 | # For ease of distribution, we produce a single statically-linked executable 36 | set(BUILD_SHARED_LIBS OFF) 37 | set(DEVILUTIONX_STATIC_BZIP2 ON) 38 | set(DEVILUTIONX_STATIC_ZLIB ON) 39 | 40 | add_subdirectory(third_party/bzip2) 41 | add_subdirectory(third_party/zlib) 42 | add_subdirectory(third_party/libmpq) 43 | add_subdirectory(third_party/dvl_gfx) 44 | 45 | foreach(_path 46 | diabdat-clx diabdat-listfile diabdat-rm hellfire-clx hellfire-listfile hellfire-rm 47 | hfmonk-clx hfmonk-listfile hfmonk-rm hfmusic-listfile hfmusic-rm 48 | hfvoice-listfile hfvoice-rm spawn-clx spawn-listfile spawn-rm save-listfile) 49 | file(STRINGS data/${_path}.txt _lines) 50 | set(_output_contents "") 51 | foreach(_line ${_lines}) 52 | string(REPLACE "\\" "\\\\" _line ${_line}) 53 | string(APPEND _output_contents " \"${_line}\",\n") 54 | endforeach() 55 | string(REPLACE "-" "_" _c_name ${_path}) 56 | set(_c_name "embedded_${_c_name}") 57 | string(APPEND _output_c " 58 | const char *const ${_c_name}_data[] = { 59 | ${_output_contents} 60 | }; 61 | const unsigned ${_c_name}_size = sizeof(${_c_name}_data) / sizeof(${_c_name}_data[0]); 62 | ") 63 | string(APPEND _output_h " 64 | extern const char *const ${_c_name}_data[]; 65 | extern const unsigned ${_c_name}_size; 66 | ") 67 | endforeach() 68 | 69 | # Note: The file will only be regenarated on reconfigure, not when the source file changes. 70 | # We do not expect the source files to change much so it's fine. 71 | file(GENERATE 72 | OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/embedded_files.h 73 | CONTENT "#ifndef EMBEDDED_FILES_H_ 74 | #define EMBEDDED_FILES_H_ 75 | ${_output_h} 76 | #endif // EMBEDDED_FILES_H_ 77 | ") 78 | file(GENERATE 79 | OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/embedded_files.c 80 | CONTENT "#include \"embedded_files.h\" 81 | 82 | ${_output_c} 83 | ") 84 | add_library(embedded_files OBJECT 85 | ${CMAKE_CURRENT_BINARY_DIR}/generated/embedded_files.c) 86 | target_include_directories(embedded_files PUBLIC 87 | ${CMAKE_CURRENT_BINARY_DIR}/generated/) 88 | 89 | add_library(extract_spell_icons OBJECT src/extract_spell_icons.cpp) 90 | target_include_directories(extract_spell_icons PUBLIC src) 91 | 92 | target_link_libraries(extract_spell_icons 93 | PRIVATE 94 | DvlGfx::clx2pixels 95 | DvlGfx::pixels2clx) 96 | 97 | add_executable(gen_extract_spell_icons_color_distances_main src/gen_extract_spell_icons_color_distances_main.cpp) 98 | target_link_libraries(gen_extract_spell_icons_color_distances_main DvlGfx::embedded_palettes) 99 | 100 | add_executable(unpack_and_minify_mpq src/unpack_and_minify_mpq.cpp) 101 | target_link_libraries(unpack_and_minify_mpq PRIVATE 102 | libmpq 103 | DvlGfx::clx_encode 104 | DvlGfx::cel2clx 105 | DvlGfx::cl22clx 106 | DvlGfx::pcx2clx 107 | extract_spell_icons 108 | embedded_files) 109 | 110 | add_custom_command( 111 | TARGET unpack_and_minify_mpq POST_BUILD 112 | DEPENDS unpack_and_minify_mpq 113 | COMMAND $<$:${CMAKE_STRIP}> 114 | ARGS --strip-all $ 115 | ) 116 | 117 | install( 118 | TARGETS unpack_and_minify_mpq 119 | CONFIGURATIONS Release 120 | ) 121 | 122 | foreach(_target unpack_and_minify_mpq) 123 | if(ASAN) 124 | target_compile_options(${_target} PUBLIC -fsanitize=address -fsanitize-recover=address) 125 | target_link_libraries(${_target} PUBLIC -fsanitize=address -fsanitize-recover=address) 126 | endif() 127 | 128 | if(UBSAN) 129 | target_compile_options(${_target} PUBLIC -fsanitize=undefined) 130 | target_link_libraries(${_target} PUBLIC -fsanitize=undefined) 131 | endif() 132 | 133 | if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") 134 | target_link_libraries(${_target} PUBLIC "-static-libgcc -static-libstdc++") 135 | endif() 136 | endforeach() 137 | -------------------------------------------------------------------------------- /src/gen_extract_spell_icons_color_distances_main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | namespace { 11 | 12 | constexpr uint8_t MinBgColor = 192; 13 | constexpr uint8_t MaxBgColor = 206; 14 | constexpr float MaxDistance = 250.0F; 15 | 16 | float ColorDistanceSquare(uint8_t idxA, uint8_t idxB) 17 | { 18 | const uint8_t *a = reinterpret_cast(&dvl_gfx_embedded_default_pal_data[idxA * 3]); 19 | const uint8_t *b = reinterpret_cast(&dvl_gfx_embedded_default_pal_data[idxB * 3]); 20 | const float wR = 2.0F + static_cast(a[0] + b[0]) / 512.0F; 21 | const float wG = 4.0F; 22 | const float wB = 2 + (255 - static_cast(a[0] + b[0]) / 2.0F) / 256.0F; 23 | const int dR = a[0] - b[0]; 24 | const int dG = a[1] - b[1]; 25 | const int dB = a[2] - b[2]; 26 | // NOLINTNEXTLINE(bugprone-narrowing-conversions) 27 | return std::sqrt(wR * dR * dR + wG * dG * dG + wB * dB * dB); 28 | } 29 | 30 | void printConditionSet(std::span xs) 31 | { 32 | bool printed = false; 33 | const auto printRange = [&printed](unsigned begin, unsigned end) { 34 | if (begin == end) 35 | return; 36 | switch (end - begin) { 37 | case 1: 38 | if (printed) 39 | std::printf(" || "); 40 | std::printf("d == %d", begin); 41 | printed = true; 42 | break; 43 | case 2: 44 | if (printed) 45 | std::printf(" || "); 46 | if (begin == 0) { 47 | std::printf("d <= %d", end - 1); 48 | } else { 49 | std::printf("d == %d || d == %d", begin, begin + 1); 50 | } 51 | printed = true; 52 | break; 53 | default: 54 | if (printed) 55 | std::printf(" || "); 56 | if (begin == 0) { 57 | std::printf("(d <= %d)", end - 1); 58 | } else { 59 | std::printf("(d >= %d && d <= %d)", begin, end - 1); 60 | } 61 | printed = true; 62 | break; 63 | } 64 | printed = true; 65 | }; 66 | unsigned rangeBegin = xs[0]; 67 | for (size_t i = 1; i < xs.size(); ++i) { 68 | if (xs[i - 1] + 1 == xs[i]) { 69 | continue; 70 | } else { 71 | printRange(rangeBegin, i); 72 | rangeBegin = i; 73 | } 74 | } 75 | if (!printed && xs.back() - rangeBegin > 2) { 76 | if (rangeBegin == 0) { 77 | std::printf("d <= %d", xs.back()); 78 | } else { 79 | std::printf("d >= %d && d <= %d", rangeBegin, xs.back()); 80 | } 81 | } else { 82 | printRange(rangeBegin, xs.back() + 1); 83 | } 84 | } 85 | 86 | void printPairs(std::span> pairs) 87 | { 88 | if (pairs.size() == 1) { 89 | std::printf("a == %d && b == %d", pairs[0].first, pairs[0].second); 90 | return; 91 | } 92 | for (unsigned i = 0; i < pairs.size(); ++i) { 93 | if (i != 0) 94 | std::printf(" || "); 95 | std::printf("(a == %d && b == %d)", pairs[i].first, pairs[i].second); 96 | } 97 | } 98 | 99 | } // namespace 100 | 101 | int main() 102 | { 103 | bool array[MaxBgColor - MinBgColor + 1][MaxBgColor - MinBgColor + 1]; 104 | 105 | unsigned numTrueDist[MaxBgColor - MinBgColor + 1] = {}; 106 | unsigned numTotalDist[MaxBgColor - MinBgColor + 1] = {}; 107 | 108 | for (uint8_t i = MinBgColor; i <= MaxBgColor; ++i) { 109 | for (uint8_t j = MinBgColor; j <= i; ++j) { 110 | const bool ok = ColorDistanceSquare(i, j) < MaxDistance; 111 | array[i - MinBgColor][j - MinBgColor] = ok; 112 | if (ok) { 113 | ++numTrueDist[i - j]; 114 | } 115 | ++numTotalDist[i - j]; 116 | } 117 | } 118 | std::vector alwaysTrue; 119 | std::vector alwaysFalse; 120 | for (unsigned dist = 0; dist <= MaxBgColor - MinBgColor; ++dist) { 121 | if (numTrueDist[dist] == 0) { 122 | alwaysFalse.push_back(dist); 123 | } else if (numTrueDist[dist] == numTotalDist[dist]) { 124 | alwaysTrue.push_back(dist); 125 | } 126 | } 127 | std::printf("const auto [a, b] = std::minmax({ fg, bg });\n"); 128 | if (!alwaysTrue.empty() || !alwaysFalse.empty()) { 129 | std::printf("const auto d = static_cast(b - a);\n"); 130 | } 131 | if (!alwaysTrue.empty()) { 132 | std::printf("if ("); 133 | printConditionSet(alwaysTrue); 134 | std::printf(") return true;\n"); 135 | } 136 | if (!alwaysFalse.empty()) { 137 | std::printf("if ("); 138 | printConditionSet(alwaysFalse); 139 | std::printf(") return false;\n"); 140 | } 141 | 142 | unsigned numOk = 0; 143 | unsigned numTotal = 0; 144 | for (uint8_t i = MinBgColor; i <= MaxBgColor; ++i) { 145 | for (uint8_t j = MinBgColor; j <= i; ++j) { 146 | if (numTrueDist[i - j] == 0 || numTrueDist[i - j] == numTotalDist[i - j]) { 147 | continue; 148 | } 149 | if (array[i - MinBgColor][j - MinBgColor]) 150 | ++numOk; 151 | ++numTotal; 152 | } 153 | } 154 | 155 | std::vector> pairs; 156 | const bool printOk = numOk * 2 < numTotal; 157 | for (uint8_t i = MinBgColor; i <= MaxBgColor; ++i) { 158 | for (uint8_t j = MinBgColor; j <= i; ++j) { 159 | if (numTrueDist[i - j] == 0 || numTrueDist[i - j] == numTotalDist[i - j]) { 160 | continue; 161 | } 162 | const bool ok = array[i - MinBgColor][j - MinBgColor]; 163 | if (printOk == ok) { 164 | pairs.emplace_back(j, i); 165 | } 166 | } 167 | } 168 | if (!pairs.empty()) { 169 | std::printf("if ("); 170 | printPairs(pairs); 171 | std::printf(") return %s;\n", printOk ? "true" : "false"); 172 | } 173 | std::printf("return %s;\n", printOk ? "false" : "true"); 174 | return 0; 175 | } 176 | -------------------------------------------------------------------------------- /data/spawn-rm.txt: -------------------------------------------------------------------------------- 1 | ctrlpan/smaltext.cel 2 | data/bigtgold.cel 3 | data/char.cel 4 | data/medtexts.cel 5 | gendata/quotes.cel 6 | gendata/quotes.pal 7 | items/axeflip.cel 8 | items/bottle.cel 9 | items/fbow.cel 10 | items/feye.cel 11 | items/fheart.cel 12 | items/manaflip.cel 13 | items/wand.cel 14 | levels/l1data/hero1.dun 15 | levels/l1data/hero2.dun 16 | levels/l1data/l1_5.pal 17 | levels/l1data/l1.pal 18 | levels/l1data/l1palg.pal 19 | levels/l1data/lv1mazea.dun 20 | levels/l1data/lv1mazeb.dun 21 | levels/l1data/rnd1.dun 22 | levels/l1data/rnd2.dun 23 | levels/l1data/rnd3.dun 24 | levels/l1data/rnd4.dun 25 | levels/l1data/rnd5.dun 26 | levels/l1data/sklkng.dun 27 | levels/l1data/sklkngdr.dun 28 | levels/l1data/skngdc.dun 29 | levels/towndata/ltpalg.pal 30 | missiles/blodbur0.cl2 31 | missiles/blodbur1.cl2 32 | missiles/blodbur2.cl2 33 | missiles/blodburs.cl2 34 | missiles/blood1.cl2 35 | missiles/blood2.cl2 36 | missiles/blood3.cl2 37 | missiles/blood4.cl2 38 | missiles/bone1.cl2 39 | missiles/bone2.cl2 40 | missiles/bone3.cl2 41 | missiles/doom1.cl2 42 | missiles/doom2.cl2 43 | missiles/doom3.cl2 44 | missiles/doom4.cl2 45 | missiles/doom5.cl2 46 | missiles/doom6.cl2 47 | missiles/doom7.cl2 48 | missiles/doom8.cl2 49 | missiles/doom9.cl2 50 | missiles/doomexp.cl2 51 | missiles/ethrshld.cl2 52 | missiles/firarwex.cl2 53 | missiles/flamel1.cel 54 | missiles/flamel10.cel 55 | missiles/flamel11.cel 56 | missiles/flamel12.cel 57 | missiles/flamel13.cel 58 | missiles/flamel14.cel 59 | missiles/flamel15.cel 60 | missiles/flamel16.cel 61 | missiles/flamel2.cel 62 | missiles/flamel3.cel 63 | missiles/flamel4.cel 64 | missiles/flamel5.cel 65 | missiles/flamel6.cel 66 | missiles/flamel7.cel 67 | missiles/flamel8.cel 68 | missiles/flamel9.cel 69 | missiles/flames1.cel 70 | missiles/flames10.cel 71 | missiles/flames11.cel 72 | missiles/flames12.cel 73 | missiles/flames13.cel 74 | missiles/flames14.cel 75 | missiles/flames15.cel 76 | missiles/flames16.cel 77 | missiles/flames2.cel 78 | missiles/flames3.cel 79 | missiles/flames4.cel 80 | missiles/flames5.cel 81 | missiles/flames6.cel 82 | missiles/flames7.cel 83 | missiles/flames8.cel 84 | missiles/flames9.cel 85 | missiles/flaml1.cel 86 | missiles/flaml2.cel 87 | missiles/flaml3.cel 88 | missiles/flaml4.cel 89 | missiles/flaml5.cel 90 | missiles/flaml6.cel 91 | missiles/flaml7.cel 92 | missiles/flaml8.cel 93 | missiles/flams1.cel 94 | missiles/flams2.cel 95 | missiles/flams3.cel 96 | missiles/flams4.cel 97 | missiles/flams5.cel 98 | missiles/flams6.cel 99 | missiles/flams7.cel 100 | missiles/flams8.cel 101 | missiles/krull.cl2 102 | missiles/metlhit1.cl2 103 | missiles/metlhit2.cl2 104 | missiles/metlhit3.cl2 105 | missiles/mindmace.cel 106 | missiles/portal.cl2 107 | missiles/portalu.cl2 108 | missiles/sentfr.cel 109 | missiles/sentout.cel 110 | missiles/sentup.cel 111 | monsters/bat/bats1.wav 112 | monsters/bat/bats2.wav 113 | monsters/falspear/orange.trn 114 | monsters/falspear/salam.trn 115 | monsters/falspear/yellow.trn 116 | monsters/falsword/orange.trn 117 | monsters/falsword/salam.trn 118 | monsters/falsword/yellow.trn 119 | monsters/scav/scavs1.wav 120 | monsters/scav/scavs2.wav 121 | monsters/scav/scavy.trn 122 | monsters/skelaxe/blue.trn 123 | monsters/skelaxe/red.trn 124 | monsters/skelaxe/sklaxs1.wav 125 | monsters/skelaxe/sklaxs2.wav 126 | monsters/skelbow/blue.trn 127 | monsters/skelbow/red.trn 128 | monsters/skelbow/sklbws1.wav 129 | monsters/skelbow/sklbws2.wav 130 | monsters/skelsd/blue.trn 131 | monsters/skelsd/red.trn 132 | monsters/zombie/zombies.cl2 133 | monsters/zombie/zombies1.wav 134 | monsters/zombie/zombies2.wav 135 | objects/bkurns.cel 136 | objects/candlabr.cel 137 | objects/candle.cel 138 | objects/dirtfall.cel 139 | objects/explod1.cel 140 | objects/explod2.cel 141 | objects/firewal1.cel 142 | objects/flame3.cel 143 | objects/ghost.cel 144 | objects/switch2.cel 145 | objects/switch3.cel 146 | objects/vapor1.cel 147 | objects/water.cel 148 | objects/waterjug.cel 149 | sfx/items/barfire.wav 150 | sfx/items/bfire.wav 151 | sfx/items/bhit.wav 152 | sfx/items/bhit1.wav 153 | sfx/items/flip.wav 154 | sfx/items/flip1.wav 155 | sfx/items/flipsarc.wav 156 | sfx/items/gold1.wav 157 | sfx/items/sarca.wav 158 | sfx/items/sarcb.wav 159 | sfx/items/sttest.wav 160 | sfx/misc/blank.wav 161 | sfx/misc/bspirit.wav 162 | sfx/misc/dserpatt.wav 163 | sfx/misc/grdlanch.wav 164 | sfx/towners/cow8.wav 165 | sfx/warrior/wario95b.wav 166 | sfx/warrior/wario95c.wav 167 | sfx/warrior/wario95d.wav 168 | sfx/warrior/wario95e.wav 169 | sfx/warrior/wario95f.wav 170 | sfx/warrior/wario96c.wav 171 | towners/priest/priest8.cel 172 | towners/smith/smithw.cel 173 | towners/townwmn1/wmnw.cel 174 | towners/twnf/twnfw.cel 175 | ui_art/badconn.pcx 176 | ui_art/black.pcx 177 | ui_art/bn_bkg.pcx 178 | ui_art/bnbuttns.pcx 179 | ui_art/bnconnbg.pcx 180 | ui_art/bnjoinbg.pcx 181 | ui_art/bnselchn.pcx 182 | ui_art/but_lrg.pcx 183 | ui_art/but_med.pcx 184 | ui_art/but_xsm.pcx 185 | ui_art/button.pcx 186 | ui_art/cd_icons.pcx 187 | ui_art/chat_bkg.pcx 188 | ui_art/connanim.pcx 189 | ui_art/connect.pcx 190 | ui_art/creahero.pcx 191 | ui_art/creat_bg.pcx 192 | ui_art/diffbtns.pcx 193 | ui_art/disclaim.pcx 194 | ui_art/epopup.pcx 195 | ui_art/font16.bin 196 | ui_art/font16g.pcx 197 | ui_art/font16s.pcx 198 | ui_art/font24.bin 199 | ui_art/font24g.pcx 200 | ui_art/font24s.pcx 201 | ui_art/font30.bin 202 | ui_art/font30g.pcx 203 | ui_art/font30s.pcx 204 | ui_art/font42.bin 205 | ui_art/font42g.pcx 206 | ui_art/font42y.pcx 207 | ui_art/greenlag.pcx 208 | ui_art/heronum.pcx 209 | ui_art/heroport.pcx 210 | ui_art/hpopup.pcx 211 | ui_art/ipx_bkg.pcx 212 | ui_art/listbox.pcx 213 | ui_art/menu.pcx 214 | ui_art/mmpopup.pcx 215 | ui_art/r3_gry.pcx 216 | ui_art/radio1.pcx 217 | ui_art/radio2.pcx 218 | ui_art/radio3.pcx 219 | ui_art/radio4.pcx 220 | ui_art/redlag.pcx 221 | ui_art/scrlarrw.pcx 222 | ui_art/scrlbar.pcx 223 | ui_art/scrlthmb.pcx 224 | ui_art/seldiff.pcx 225 | ui_art/special.pcx 226 | ui_art/spwnport.pcx 227 | ui_art/swmmpop.pcx 228 | ui_art/welcome.pcx 229 | ui_art/xsmlogo.pcx 230 | ui_art/yellolag.pcx 231 | -------------------------------------------------------------------------------- /data/hfmonk-clx.txt: -------------------------------------------------------------------------------- 1 | cl22clx --width 112 plrgfx/monk/mha/mhaas.cl2 plrgfx/monk/mha/mhaaw.cl2 plrgfx/monk/mha/mhast.cl2 plrgfx/monk/mha/mhawl.cl2 plrgfx/monk/mhb/mhbas.cl2 plrgfx/monk/mhb/mhbaw.cl2 plrgfx/monk/mhb/mhbst.cl2 plrgfx/monk/mhb/mhbwl.cl2 plrgfx/monk/mhd/mhdas.cl2 plrgfx/monk/mhd/mhdaw.cl2 plrgfx/monk/mhd/mhdst.cl2 plrgfx/monk/mhd/mhdwl.cl2 plrgfx/monk/mhh/mhhas.cl2 plrgfx/monk/mhh/mhhaw.cl2 plrgfx/monk/mhh/mhhst.cl2 plrgfx/monk/mhh/mhhwl.cl2 plrgfx/monk/mhm/mhmas.cl2 plrgfx/monk/mhm/mhmaw.cl2 plrgfx/monk/mhm/mhmst.cl2 plrgfx/monk/mhm/mhmwl.cl2 plrgfx/monk/mhn/mhnas.cl2 plrgfx/monk/mhn/mhnaw.cl2 plrgfx/monk/mhn/mhnst.cl2 plrgfx/monk/mhn/mhnwl.cl2 plrgfx/monk/mhs/mhsas.cl2 plrgfx/monk/mhs/mhsaw.cl2 plrgfx/monk/mhs/mhsst.cl2 plrgfx/monk/mhs/mhswl.cl2 plrgfx/monk/mht/mhtas.cl2 plrgfx/monk/mht/mhtaw.cl2 plrgfx/monk/mht/mhtst.cl2 plrgfx/monk/mht/mhtwl.cl2 plrgfx/monk/mhu/mhuas.cl2 plrgfx/monk/mhu/mhuaw.cl2 plrgfx/monk/mhu/mhust.cl2 plrgfx/monk/mhu/mhuwl.cl2 plrgfx/monk/mla/mlaas.cl2 plrgfx/monk/mla/mlaaw.cl2 plrgfx/monk/mla/mlast.cl2 plrgfx/monk/mla/mlawl.cl2 plrgfx/monk/mlb/mlbas.cl2 plrgfx/monk/mlb/mlbaw.cl2 plrgfx/monk/mlb/mlbst.cl2 plrgfx/monk/mlb/mlbwl.cl2 plrgfx/monk/mld/mldas.cl2 plrgfx/monk/mld/mldaw.cl2 plrgfx/monk/mld/mldst.cl2 plrgfx/monk/mld/mldwl.cl2 plrgfx/monk/mlh/mlhas.cl2 plrgfx/monk/mlh/mlhaw.cl2 plrgfx/monk/mlh/mlhst.cl2 plrgfx/monk/mlh/mlhwl.cl2 plrgfx/monk/mlm/mlmas.cl2 plrgfx/monk/mlm/mlmaw.cl2 plrgfx/monk/mlm/mlmst.cl2 plrgfx/monk/mlm/mlmwl.cl2 plrgfx/monk/mln/mlnas.cl2 plrgfx/monk/mln/mlnaw.cl2 plrgfx/monk/mln/mlnst.cl2 plrgfx/monk/mln/mlnwl.cl2 plrgfx/monk/mls/mlsas.cl2 plrgfx/monk/mls/mlsaw.cl2 plrgfx/monk/mls/mlsst.cl2 plrgfx/monk/mls/mlswl.cl2 plrgfx/monk/mlt/mltas.cl2 plrgfx/monk/mlt/mltaw.cl2 plrgfx/monk/mlt/mltst.cl2 plrgfx/monk/mlt/mltwl.cl2 plrgfx/monk/mlu/mluas.cl2 plrgfx/monk/mlu/mluaw.cl2 plrgfx/monk/mlu/mlust.cl2 plrgfx/monk/mlu/mluwl.cl2 plrgfx/monk/mma/mmaas.cl2 plrgfx/monk/mma/mmaaw.cl2 plrgfx/monk/mma/mmast.cl2 plrgfx/monk/mma/mmawl.cl2 plrgfx/monk/mmb/mmbas.cl2 plrgfx/monk/mmb/mmbaw.cl2 plrgfx/monk/mmb/mmbst.cl2 plrgfx/monk/mmb/mmbwl.cl2 plrgfx/monk/mmd/mmdas.cl2 plrgfx/monk/mmd/mmdaw.cl2 plrgfx/monk/mmd/mmdst.cl2 plrgfx/monk/mmd/mmdwl.cl2 plrgfx/monk/mmh/mmhas.cl2 plrgfx/monk/mmh/mmhaw.cl2 plrgfx/monk/mmh/mmhst.cl2 plrgfx/monk/mmh/mmhwl.cl2 plrgfx/monk/mmm/mmmas.cl2 plrgfx/monk/mmm/mmmaw.cl2 plrgfx/monk/mmm/mmmst.cl2 plrgfx/monk/mmm/mmmwl.cl2 plrgfx/monk/mmn/mmnas.cl2 plrgfx/monk/mmn/mmnaw.cl2 plrgfx/monk/mmn/mmnst.cl2 plrgfx/monk/mmn/mmnwl.cl2 plrgfx/monk/mms/mmsas.cl2 plrgfx/monk/mms/mmsaw.cl2 plrgfx/monk/mms/mmsst.cl2 plrgfx/monk/mms/mmswl.cl2 plrgfx/monk/mmt/mmtas.cl2 plrgfx/monk/mmt/mmtaw.cl2 plrgfx/monk/mmt/mmtst.cl2 plrgfx/monk/mmt/mmtwl.cl2 plrgfx/monk/mmu/mmuas.cl2 plrgfx/monk/mmu/mmuaw.cl2 plrgfx/monk/mmu/mmust.cl2 plrgfx/monk/mmu/mmuwl.cl2 2 | cl22clx --width 114 plrgfx/monk/mha/mhafm.cl2 plrgfx/monk/mha/mhalm.cl2 plrgfx/monk/mha/mhaqm.cl2 plrgfx/monk/mhb/mhbfm.cl2 plrgfx/monk/mhb/mhblm.cl2 plrgfx/monk/mhb/mhbqm.cl2 plrgfx/monk/mhd/mhdfm.cl2 plrgfx/monk/mhd/mhdlm.cl2 plrgfx/monk/mhd/mhdqm.cl2 plrgfx/monk/mhh/mhhfm.cl2 plrgfx/monk/mhh/mhhlm.cl2 plrgfx/monk/mhh/mhhqm.cl2 plrgfx/monk/mhm/mhmfm.cl2 plrgfx/monk/mhm/mhmlm.cl2 plrgfx/monk/mhm/mhmqm.cl2 plrgfx/monk/mhn/mhnfm.cl2 plrgfx/monk/mhn/mhnlm.cl2 plrgfx/monk/mhn/mhnqm.cl2 plrgfx/monk/mhs/mhsfm.cl2 plrgfx/monk/mhs/mhslm.cl2 plrgfx/monk/mhs/mhsqm.cl2 plrgfx/monk/mht/mhtfm.cl2 plrgfx/monk/mht/mhtlm.cl2 plrgfx/monk/mht/mhtqm.cl2 plrgfx/monk/mhu/mhufm.cl2 plrgfx/monk/mhu/mhulm.cl2 plrgfx/monk/mhu/mhuqm.cl2 plrgfx/monk/mla/mlafm.cl2 plrgfx/monk/mla/mlalm.cl2 plrgfx/monk/mla/mlaqm.cl2 plrgfx/monk/mlb/mlbfm.cl2 plrgfx/monk/mlb/mlblm.cl2 plrgfx/monk/mlb/mlbqm.cl2 plrgfx/monk/mld/mldfm.cl2 plrgfx/monk/mld/mldlm.cl2 plrgfx/monk/mld/mldqm.cl2 plrgfx/monk/mlh/mlhfm.cl2 plrgfx/monk/mlh/mlhlm.cl2 plrgfx/monk/mlh/mlhqm.cl2 plrgfx/monk/mlm/mlmfm.cl2 plrgfx/monk/mlm/mlmlm.cl2 plrgfx/monk/mlm/mlmqm.cl2 plrgfx/monk/mln/mlnfm.cl2 plrgfx/monk/mln/mlnlm.cl2 plrgfx/monk/mln/mlnqm.cl2 plrgfx/monk/mls/mlsfm.cl2 plrgfx/monk/mls/mlslm.cl2 plrgfx/monk/mls/mlsqm.cl2 plrgfx/monk/mlt/mltfm.cl2 plrgfx/monk/mlt/mltlm.cl2 plrgfx/monk/mlt/mltqm.cl2 plrgfx/monk/mlu/mlufm.cl2 plrgfx/monk/mlu/mlulm.cl2 plrgfx/monk/mlu/mluqm.cl2 plrgfx/monk/mma/mmafm.cl2 plrgfx/monk/mma/mmalm.cl2 plrgfx/monk/mma/mmaqm.cl2 plrgfx/monk/mmb/mmbfm.cl2 plrgfx/monk/mmb/mmblm.cl2 plrgfx/monk/mmb/mmbqm.cl2 plrgfx/monk/mmd/mmdfm.cl2 plrgfx/monk/mmd/mmdlm.cl2 plrgfx/monk/mmd/mmdqm.cl2 plrgfx/monk/mmh/mmhfm.cl2 plrgfx/monk/mmh/mmhlm.cl2 plrgfx/monk/mmh/mmhqm.cl2 plrgfx/monk/mmm/mmmfm.cl2 plrgfx/monk/mmm/mmmlm.cl2 plrgfx/monk/mmm/mmmqm.cl2 plrgfx/monk/mmn/mmnfm.cl2 plrgfx/monk/mmn/mmnlm.cl2 plrgfx/monk/mmn/mmnqm.cl2 plrgfx/monk/mms/mmsfm.cl2 plrgfx/monk/mms/mmslm.cl2 plrgfx/monk/mms/mmsqm.cl2 plrgfx/monk/mmt/mmtfm.cl2 plrgfx/monk/mmt/mmtlm.cl2 plrgfx/monk/mmt/mmtqm.cl2 plrgfx/monk/mmu/mmufm.cl2 plrgfx/monk/mmu/mmulm.cl2 plrgfx/monk/mmu/mmuqm.cl2 3 | cl22clx --width 130 plrgfx/monk/mha/mhaat.cl2 plrgfx/monk/mhb/mhbat.cl2 plrgfx/monk/mhd/mhdat.cl2 plrgfx/monk/mhh/mhhat.cl2 plrgfx/monk/mhm/mhmat.cl2 plrgfx/monk/mhn/mhnat.cl2 plrgfx/monk/mhs/mhsat.cl2 plrgfx/monk/mht/mhtat.cl2 plrgfx/monk/mhu/mhuat.cl2 plrgfx/monk/mla/mlaat.cl2 plrgfx/monk/mlb/mlbat.cl2 plrgfx/monk/mld/mldat.cl2 plrgfx/monk/mlh/mlhat.cl2 plrgfx/monk/mlm/mlmat.cl2 plrgfx/monk/mln/mlnat.cl2 plrgfx/monk/mls/mlsat.cl2 plrgfx/monk/mlt/mltat.cl2 plrgfx/monk/mlu/mluat.cl2 plrgfx/monk/mma/mmaat.cl2 plrgfx/monk/mmb/mmbat.cl2 plrgfx/monk/mmd/mmdat.cl2 plrgfx/monk/mmh/mmhat.cl2 plrgfx/monk/mmm/mmmat.cl2 plrgfx/monk/mmn/mmnat.cl2 plrgfx/monk/mms/mmsat.cl2 plrgfx/monk/mmt/mmtat.cl2 plrgfx/monk/mmu/mmuat.cl2 4 | cl22clx --width 160 plrgfx/monk/mha/mhadt.cl2 plrgfx/monk/mhb/mhbdt.cl2 plrgfx/monk/mhd/mhddt.cl2 plrgfx/monk/mhh/mhhdt.cl2 plrgfx/monk/mhm/mhmdt.cl2 plrgfx/monk/mhn/mhndt.cl2 plrgfx/monk/mhs/mhsdt.cl2 plrgfx/monk/mht/mhtdt.cl2 plrgfx/monk/mhu/mhudt.cl2 plrgfx/monk/mla/mladt.cl2 plrgfx/monk/mlb/mlbdt.cl2 plrgfx/monk/mld/mlddt.cl2 plrgfx/monk/mlh/mlhdt.cl2 plrgfx/monk/mlm/mlmdt.cl2 plrgfx/monk/mln/mlndt.cl2 plrgfx/monk/mls/mlsdt.cl2 plrgfx/monk/mlt/mltdt.cl2 plrgfx/monk/mlu/mludt.cl2 plrgfx/monk/mma/mmadt.cl2 plrgfx/monk/mmb/mmbdt.cl2 plrgfx/monk/mmd/mmddt.cl2 plrgfx/monk/mmh/mmhdt.cl2 plrgfx/monk/mmm/mmmdt.cl2 plrgfx/monk/mmn/mmndt.cl2 plrgfx/monk/mms/mmsdt.cl2 plrgfx/monk/mmt/mmtdt.cl2 plrgfx/monk/mmu/mmudt.cl2 5 | cl22clx --width 98 plrgfx/monk/mha/mhaht.cl2 plrgfx/monk/mhb/mhbht.cl2 plrgfx/monk/mhd/mhdbl.cl2 plrgfx/monk/mhd/mhdht.cl2 plrgfx/monk/mhh/mhhbl.cl2 plrgfx/monk/mhh/mhhht.cl2 plrgfx/monk/mhm/mhmbl.cl2 plrgfx/monk/mhm/mhmht.cl2 plrgfx/monk/mhn/mhnbl.cl2 plrgfx/monk/mhn/mhnht.cl2 plrgfx/monk/mhs/mhsbl.cl2 plrgfx/monk/mhs/mhsht.cl2 plrgfx/monk/mht/mhtbl.cl2 plrgfx/monk/mht/mhtht.cl2 plrgfx/monk/mhu/mhubl.cl2 plrgfx/monk/mhu/mhuht.cl2 plrgfx/monk/mla/mlaht.cl2 plrgfx/monk/mlb/mlbht.cl2 plrgfx/monk/mld/mldbl.cl2 plrgfx/monk/mld/mldht.cl2 plrgfx/monk/mlh/mlhbl.cl2 plrgfx/monk/mlh/mlhht.cl2 plrgfx/monk/mlm/mlmbl.cl2 plrgfx/monk/mlm/mlmht.cl2 plrgfx/monk/mln/mlnbl.cl2 plrgfx/monk/mln/mlnht.cl2 plrgfx/monk/mls/mlsbl.cl2 plrgfx/monk/mls/mlsht.cl2 plrgfx/monk/mlt/mltbl.cl2 plrgfx/monk/mlt/mltht.cl2 plrgfx/monk/mlu/mlubl.cl2 plrgfx/monk/mlu/mluht.cl2 plrgfx/monk/mma/mmaht.cl2 plrgfx/monk/mmb/mmbht.cl2 plrgfx/monk/mmd/mmdbl.cl2 plrgfx/monk/mmd/mmdht.cl2 plrgfx/monk/mmh/mmhbl.cl2 plrgfx/monk/mmh/mmhht.cl2 plrgfx/monk/mmm/mmmbl.cl2 plrgfx/monk/mmm/mmmht.cl2 plrgfx/monk/mmn/mmnbl.cl2 plrgfx/monk/mmn/mmnht.cl2 plrgfx/monk/mms/mmsbl.cl2 plrgfx/monk/mms/mmsht.cl2 plrgfx/monk/mmt/mmtbl.cl2 plrgfx/monk/mmt/mmtht.cl2 plrgfx/monk/mmu/mmubl.cl2 plrgfx/monk/mmu/mmuht.cl2 6 | -------------------------------------------------------------------------------- /data/hellfire-clx.txt: -------------------------------------------------------------------------------- 1 | cl22clx --width 104 monsters/rat/rata.cl2 monsters/rat/ratd.cl2 monsters/rat/rath.cl2 monsters/rat/ratn.cl2 monsters/rat/ratw.cl2 2 | cl22clx --width 124 monsters/gravdg/gravdga.cl2 monsters/gravdg/gravdgd.cl2 monsters/gravdg/gravdgh.cl2 monsters/gravdg/gravdgn.cl2 monsters/gravdg/gravdgs.cl2 monsters/gravdg/gravdgw.cl2 3 | cl22clx --width 136 monsters/lich2/lich2a.cl2 monsters/lich2/lich2d.cl2 monsters/lich2/lich2h.cl2 monsters/lich2/lich2n.cl2 monsters/lich2/lich2w.cl2 4 | cl22clx --width 138 monsters/horkd/horkda.cl2 monsters/horkd/horkdd.cl2 monsters/horkd/horkdh.cl2 monsters/horkd/horkdn.cl2 monsters/horkd/horkds.cl2 monsters/horkd/horkdw.cl2 5 | cl22clx --width 140 monsters/eye2/eye2a.cl2 monsters/eye2/eye2d.cl2 monsters/eye2/eye2h.cl2 monsters/eye2/eye2n.cl2 monsters/eye2/eye2w.cl2 6 | cl22clx --width 148 monsters/bspidr/bspidra.cl2 monsters/bspidr/bspidrd.cl2 monsters/bspidr/bspidrh.cl2 monsters/bspidr/bspidrn.cl2 monsters/bspidr/bspidrs.cl2 monsters/bspidr/bspidrw.cl2 7 | cl22clx --width 148 monsters/spider/spidera.cl2 monsters/spider/spiderd.cl2 monsters/spider/spiderh.cl2 monsters/spider/spidern.cl2 monsters/spider/spiderw.cl2 8 | cl22clx --width 154 monsters/bubba/bubbaa.cl2 monsters/bubba/bubbad.cl2 monsters/bubba/bubbah.cl2 monsters/bubba/bubban.cl2 monsters/bubba/bubbaw.cl2 9 | cl22clx --width 156 monsters/eye/eyea.cl2 monsters/eye/eyed.cl2 monsters/eye/eyeh.cl2 monsters/eye/eyen.cl2 monsters/eye/eyew.cl2 10 | cl22clx --width 160 monsters/goatlord/goatld.cl2 11 | cl22clx --width 164 monsters/flesh/flesha.cl2 monsters/flesh/fleshd.cl2 monsters/flesh/fleshh.cl2 monsters/flesh/fleshn.cl2 monsters/flesh/fleshw.cl2 12 | cl22clx --width 164 monsters/spawn/spawna.cl2 monsters/spawn/spawnd.cl2 monsters/spawn/spawnh.cl2 monsters/spawn/spawnn.cl2 monsters/spawn/spawnw.cl2 13 | cl22clx --width 176 monsters/clasp/claspa.cl2 monsters/clasp/claspd.cl2 monsters/clasp/clasph.cl2 monsters/clasp/claspn.cl2 monsters/clasp/claspw.cl2 14 | cl22clx --width 180 monsters/byclps/byclpsa.cl2 monsters/byclps/byclpsd.cl2 monsters/byclps/byclpsh.cl2 monsters/byclps/byclpsn.cl2 monsters/byclps/byclpsw.cl2 15 | cl22clx --width 180 monsters/reaper/reapa.cl2 monsters/reaper/reapd.cl2 monsters/reaper/reaph.cl2 monsters/reaper/reapn.cl2 monsters/reaper/reapw.cl2 16 | cl22clx --width 188 monsters/fork/forka.cl2 monsters/fork/forkd.cl2 monsters/fork/forkh.cl2 monsters/fork/forkn.cl2 monsters/fork/forkw.cl2 17 | cl22clx --width 192 monsters/antworm/worma.cl2 monsters/antworm/wormd.cl2 monsters/antworm/wormh.cl2 monsters/antworm/wormn.cl2 monsters/antworm/wormw.cl2 18 | cl22clx --width 198 monsters/hellbug/hellbga.cl2 monsters/hellbug/hellbgd.cl2 monsters/hellbug/hellbgh.cl2 monsters/hellbug/hellbgn.cl2 monsters/hellbug/hellbgs.cl2 monsters/hellbug/hellbgw.cl2 19 | cl22clx --width 226 monsters/nkr/nkra.cl2 monsters/nkr/nkrd.cl2 monsters/nkr/nkrh.cl2 monsters/nkr/nkrn.cl2 monsters/nkr/nkrs.cl2 monsters/nkr/nkrw.cl2 20 | cl22clx --width 64 monsters/scorp/scorpa.cl2 monsters/scorp/scorpd.cl2 monsters/scorp/scorph.cl2 monsters/scorp/scorpn.cl2 monsters/scorp/scorpw.cl2 21 | cl22clx --width 86 monsters/wscorp/wscorpa.cl2 monsters/wscorp/wscorpd.cl2 monsters/wscorp/wscorph.cl2 monsters/wscorp/wscorpn.cl2 monsters/wscorp/wscorpw.cl2 22 | cl22clx --width 96 monsters/hellbat/helbata.cl2 monsters/hellbat/helbatd.cl2 monsters/hellbat/helbath.cl2 monsters/hellbat/helbatn.cl2 monsters/hellbat/helbats.cl2 monsters/hellbat/helbatw.cl2 23 | cl22clx --width 96 monsters/hellbat2/bhelbta.cl2 monsters/hellbat2/bhelbtd.cl2 monsters/hellbat2/bhelbth.cl2 monsters/hellbat2/bhelbtn.cl2 monsters/hellbat2/bhelbts.cl2 monsters/hellbat2/bhelbtw.cl2 24 | cl22clx --width 96 monsters/lich/licha.cl2 monsters/lich/lichd.cl2 monsters/lich/lichh.cl2 monsters/lich/lichn.cl2 monsters/lich/lichw.cl2 25 | cl22clx --width 96 monsters/unrav/unrava.cl2 monsters/unrav/unravw.cl2 26 | cel2clx --width 96 towners/farmer/farmrn2.cel towners/farmer/cfrmrn2.cel towners/farmer/mfrmrn2.cel towners/girl/girls1.cel towners/girl/girlw1.cel 27 | cl22clx --width 160 missiles/reflect.cl2 28 | cl22clx --width 96 --combine missiles/spawns1.cl2 missiles/spawns2.cl2 missiles/spawns3.cl2 missiles/spawns4.cl2 missiles/spawns5.cl2 missiles/spawns6.cl2 missiles/spawns7.cl2 missiles/spawns8.cl2 29 | cl22clx --width 96 --combine missiles/ms_ora1.cl2 missiles/ms_ora2.cl2 missiles/ms_ora3.cl2 missiles/ms_ora4.cl2 missiles/ms_ora5.cl2 missiles/ms_ora6.cl2 missiles/ms_ora7.cl2 missiles/ms_ora8.cl2 missiles/ms_ora9.cl2 missiles/ms_ora10.cl2 missiles/ms_ora11.cl2 missiles/ms_ora12.cl2 missiles/ms_ora13.cl2 missiles/ms_ora14.cl2 missiles/ms_ora15.cl2 missiles/ms_ora16.cl2 30 | cl22clx --width 96 --combine missiles/ms_bla1.cl2 missiles/ms_bla2.cl2 missiles/ms_bla3.cl2 missiles/ms_bla4.cl2 missiles/ms_bla5.cl2 missiles/ms_bla6.cl2 missiles/ms_bla7.cl2 missiles/ms_bla8.cl2 missiles/ms_bla9.cl2 missiles/ms_bla10.cl2 missiles/ms_bla11.cl2 missiles/ms_bla12.cl2 missiles/ms_bla13.cl2 missiles/ms_bla14.cl2 missiles/ms_bla15.cl2 missiles/ms_bla16.cl2 31 | cl22clx --width 96 --combine missiles/ms_reb1.cl2 missiles/ms_reb2.cl2 missiles/ms_reb3.cl2 missiles/ms_reb4.cl2 missiles/ms_reb5.cl2 missiles/ms_reb6.cl2 missiles/ms_reb7.cl2 missiles/ms_reb8.cl2 missiles/ms_reb9.cl2 missiles/ms_reb10.cl2 missiles/ms_reb11.cl2 missiles/ms_reb12.cl2 missiles/ms_reb13.cl2 missiles/ms_reb14.cl2 missiles/ms_reb15.cl2 missiles/ms_reb16.cl2 32 | cl22clx --width 96 --combine missiles/ms_yeb1.cl2 missiles/ms_yeb2.cl2 missiles/ms_yeb3.cl2 missiles/ms_yeb4.cl2 missiles/ms_yeb5.cl2 missiles/ms_yeb6.cl2 missiles/ms_yeb7.cl2 missiles/ms_yeb8.cl2 missiles/ms_yeb9.cl2 missiles/ms_yeb10.cl2 missiles/ms_yeb11.cl2 missiles/ms_yeb12.cl2 missiles/ms_yeb13.cl2 missiles/ms_yeb14.cl2 missiles/ms_yeb15.cl2 missiles/ms_yeb16.cl2 33 | cl22clx --width 96 missiles/rglows1.cl2 34 | cl22clx --width 220 missiles/ex_yel2.cl2 35 | cl22clx --width 212 missiles/ex_blu2.cl2 36 | cl22clx --width 292 missiles/ex_red3.cl2 37 | cl22clx --width 96 --combine missiles/ms_blb1.cl2 missiles/ms_blb2.cl2 missiles/ms_blb3.cl2 missiles/ms_blb4.cl2 missiles/ms_blb5.cl2 missiles/ms_blb6.cl2 missiles/ms_blb7.cl2 missiles/ms_blb8.cl2 missiles/ms_blb9.cl2 missiles/ms_blb10.cl2 missiles/ms_blb11.cl2 missiles/ms_blb12.cl2 missiles/ms_blb13.cl2 missiles/ms_blb14.cl2 missiles/ms_blb15.cl2 missiles/ms_blb16.cl2 38 | cl22clx --width 96 missiles/ex_ora1.cl2 39 | cl22clx --width 292 missiles/ex_blu3.cl2 40 | cel2clx --width 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,56,56,28,28,28,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56 data/inv/objcurs2.cel 41 | cel2clx --width 56 data/spelicon.cel 42 | cel2clx --width 320 data/spellbk.cel 43 | cel2clx --width 61 data/spellbkb.cel 44 | cel2clx --width 37 data/spelli2.cel 45 | cel2clx --width 128 objects/l5sarco.cel 46 | cel2clx --width 64 objects/l5door.cel 47 | cel2clx --width 96 objects/l5books.cel objects/l5lever.cel objects/l5light.cel objects/l6pod1.cel objects/l6pod2.cel objects/urn.cel objects/urnexpld.cel 48 | cel2clx --width 96 items/bombs1.cel items/halfps1.cel items/wholeps1.cel items/runes1.cel items/teddys1.cel items/cows1.cel items/donkys1.cel items/mooses1.cel 49 | cel2clx --width 640 items/map/mapztown.cel nlevels/cutl5.cel nlevels/cutl6.cel 50 | cel2clx --width 430 data/hf_logo3.cel 51 | cel2clx --width 64 nlevels/l5data/l5s.cel 52 | pcx2clx --num-sprites 6 ui_art/heros.pcx 53 | pcx2clx --num-sprites 16 --export-palette ui_art/hf_logo1.pcx 54 | pcx2clx --transparent-color 0 --num-sprites 16 ui_art/hf_logo2.pcx 55 | pcx2clx --export-palette ui_art/mainmenu.pcx 56 | pcx2clx --export-palette ui_art/selconn.pcx 57 | pcx2clx --export-palette ui_art/selgame.pcx 58 | pcx2clx --export-palette ui_art/selhero.pcx 59 | pcx2clx --export-palette ui_art/support.pcx 60 | -------------------------------------------------------------------------------- /data/hfmonk-listfile.txt: -------------------------------------------------------------------------------- 1 | plrgfx\monk\mha\mhaas.cl2 2 | plrgfx\monk\mha\mhaat.cl2 3 | plrgfx\monk\mha\mhaaw.cl2 4 | plrgfx\monk\mha\mhadt.cl2 5 | plrgfx\monk\mha\mhafm.cl2 6 | plrgfx\monk\mha\mhaht.cl2 7 | plrgfx\monk\mha\mhalm.cl2 8 | plrgfx\monk\mha\mhaqm.cl2 9 | plrgfx\monk\mha\mhast.cl2 10 | plrgfx\monk\mha\mhawl.cl2 11 | plrgfx\monk\mhb\mhbas.cl2 12 | plrgfx\monk\mhb\mhbat.cl2 13 | plrgfx\monk\mhb\mhbaw.cl2 14 | plrgfx\monk\mhb\mhbdt.cl2 15 | plrgfx\monk\mhb\mhbfm.cl2 16 | plrgfx\monk\mhb\mhbht.cl2 17 | plrgfx\monk\mhb\mhblm.cl2 18 | plrgfx\monk\mhb\mhbqm.cl2 19 | plrgfx\monk\mhb\mhbst.cl2 20 | plrgfx\monk\mhb\mhbwl.cl2 21 | plrgfx\monk\mhd\mhdas.cl2 22 | plrgfx\monk\mhd\mhdat.cl2 23 | plrgfx\monk\mhd\mhdaw.cl2 24 | plrgfx\monk\mhd\mhdbl.cl2 25 | plrgfx\monk\mhd\mhddt.cl2 26 | plrgfx\monk\mhd\mhdfm.cl2 27 | plrgfx\monk\mhd\mhdht.cl2 28 | plrgfx\monk\mhd\mhdlm.cl2 29 | plrgfx\monk\mhd\mhdqm.cl2 30 | plrgfx\monk\mhd\mhdst.cl2 31 | plrgfx\monk\mhd\mhdwl.cl2 32 | plrgfx\monk\mhh\mhhas.cl2 33 | plrgfx\monk\mhh\mhhat.cl2 34 | plrgfx\monk\mhh\mhhaw.cl2 35 | plrgfx\monk\mhh\mhhbl.cl2 36 | plrgfx\monk\mhh\mhhdt.cl2 37 | plrgfx\monk\mhh\mhhfm.cl2 38 | plrgfx\monk\mhh\mhhht.cl2 39 | plrgfx\monk\mhh\mhhlm.cl2 40 | plrgfx\monk\mhh\mhhqm.cl2 41 | plrgfx\monk\mhh\mhhst.cl2 42 | plrgfx\monk\mhh\mhhwl.cl2 43 | plrgfx\monk\mhm\mhmas.cl2 44 | plrgfx\monk\mhm\mhmat.cl2 45 | plrgfx\monk\mhm\mhmaw.cl2 46 | plrgfx\monk\mhm\mhmbl.cl2 47 | plrgfx\monk\mhm\mhmdt.cl2 48 | plrgfx\monk\mhm\mhmfm.cl2 49 | plrgfx\monk\mhm\mhmht.cl2 50 | plrgfx\monk\mhm\mhmlm.cl2 51 | plrgfx\monk\mhm\mhmqm.cl2 52 | plrgfx\monk\mhm\mhmst.cl2 53 | plrgfx\monk\mhm\mhmwl.cl2 54 | plrgfx\monk\mhn\mhnas.cl2 55 | plrgfx\monk\mhn\mhnat.cl2 56 | plrgfx\monk\mhn\mhnaw.cl2 57 | plrgfx\monk\mhn\mhnbl.cl2 58 | plrgfx\monk\mhn\mhndt.cl2 59 | plrgfx\monk\mhn\mhnfm.cl2 60 | plrgfx\monk\mhn\mhnht.cl2 61 | plrgfx\monk\mhn\mhnlm.cl2 62 | plrgfx\monk\mhn\mhnqm.cl2 63 | plrgfx\monk\mhn\mhnst.cl2 64 | plrgfx\monk\mhn\mhnwl.cl2 65 | plrgfx\monk\mhs\mhsas.cl2 66 | plrgfx\monk\mhs\mhsat.cl2 67 | plrgfx\monk\mhs\mhsaw.cl2 68 | plrgfx\monk\mhs\mhsbl.cl2 69 | plrgfx\monk\mhs\mhsdt.cl2 70 | plrgfx\monk\mhs\mhsfm.cl2 71 | plrgfx\monk\mhs\mhsht.cl2 72 | plrgfx\monk\mhs\mhslm.cl2 73 | plrgfx\monk\mhs\mhsqm.cl2 74 | plrgfx\monk\mhs\mhsst.cl2 75 | plrgfx\monk\mhs\mhswl.cl2 76 | plrgfx\monk\mht\mhtas.cl2 77 | plrgfx\monk\mht\mhtat.cl2 78 | plrgfx\monk\mht\mhtaw.cl2 79 | plrgfx\monk\mht\mhtbl.cl2 80 | plrgfx\monk\mht\mhtdt.cl2 81 | plrgfx\monk\mht\mhtfm.cl2 82 | plrgfx\monk\mht\mhtht.cl2 83 | plrgfx\monk\mht\mhtlm.cl2 84 | plrgfx\monk\mht\mhtqm.cl2 85 | plrgfx\monk\mht\mhtst.cl2 86 | plrgfx\monk\mht\mhtwl.cl2 87 | plrgfx\monk\mhu\mhuas.cl2 88 | plrgfx\monk\mhu\mhuat.cl2 89 | plrgfx\monk\mhu\mhuaw.cl2 90 | plrgfx\monk\mhu\mhubl.cl2 91 | plrgfx\monk\mhu\mhudt.cl2 92 | plrgfx\monk\mhu\mhufm.cl2 93 | plrgfx\monk\mhu\mhuht.cl2 94 | plrgfx\monk\mhu\mhulm.cl2 95 | plrgfx\monk\mhu\mhuqm.cl2 96 | plrgfx\monk\mhu\mhust.cl2 97 | plrgfx\monk\mhu\mhuwl.cl2 98 | plrgfx\monk\mla\mlaas.cl2 99 | plrgfx\monk\mla\mlaat.cl2 100 | plrgfx\monk\mla\mlaaw.cl2 101 | plrgfx\monk\mla\mladt.cl2 102 | plrgfx\monk\mla\mlafm.cl2 103 | plrgfx\monk\mla\mlaht.cl2 104 | plrgfx\monk\mla\mlalm.cl2 105 | plrgfx\monk\mla\mlaqm.cl2 106 | plrgfx\monk\mla\mlast.cl2 107 | plrgfx\monk\mla\mlawl.cl2 108 | plrgfx\monk\mlb\mlbas.cl2 109 | plrgfx\monk\mlb\mlbat.cl2 110 | plrgfx\monk\mlb\mlbaw.cl2 111 | plrgfx\monk\mlb\mlbdt.cl2 112 | plrgfx\monk\mlb\mlbfm.cl2 113 | plrgfx\monk\mlb\mlbht.cl2 114 | plrgfx\monk\mlb\mlblm.cl2 115 | plrgfx\monk\mlb\mlbqm.cl2 116 | plrgfx\monk\mlb\mlbst.cl2 117 | plrgfx\monk\mlb\mlbwl.cl2 118 | plrgfx\monk\mld\mldas.cl2 119 | plrgfx\monk\mld\mldat.cl2 120 | plrgfx\monk\mld\mldaw.cl2 121 | plrgfx\monk\mld\mldbl.cl2 122 | plrgfx\monk\mld\mlddt.cl2 123 | plrgfx\monk\mld\mldfm.cl2 124 | plrgfx\monk\mld\mldht.cl2 125 | plrgfx\monk\mld\mldlm.cl2 126 | plrgfx\monk\mld\mldqm.cl2 127 | plrgfx\monk\mld\mldst.cl2 128 | plrgfx\monk\mld\mldwl.cl2 129 | plrgfx\monk\mlh\mlhas.cl2 130 | plrgfx\monk\mlh\mlhat.cl2 131 | plrgfx\monk\mlh\mlhaw.cl2 132 | plrgfx\monk\mlh\mlhbl.cl2 133 | plrgfx\monk\mlh\mlhdt.cl2 134 | plrgfx\monk\mlh\mlhfm.cl2 135 | plrgfx\monk\mlh\mlhht.cl2 136 | plrgfx\monk\mlh\mlhlm.cl2 137 | plrgfx\monk\mlh\mlhqm.cl2 138 | plrgfx\monk\mlh\mlhst.cl2 139 | plrgfx\monk\mlh\mlhwl.cl2 140 | plrgfx\monk\mlm\mlmas.cl2 141 | plrgfx\monk\mlm\mlmat.cl2 142 | plrgfx\monk\mlm\mlmaw.cl2 143 | plrgfx\monk\mlm\mlmbl.cl2 144 | plrgfx\monk\mlm\mlmdt.cl2 145 | plrgfx\monk\mlm\mlmfm.cl2 146 | plrgfx\monk\mlm\mlmht.cl2 147 | plrgfx\monk\mlm\mlmlm.cl2 148 | plrgfx\monk\mlm\mlmqm.cl2 149 | plrgfx\monk\mlm\mlmst.cl2 150 | plrgfx\monk\mlm\mlmwl.cl2 151 | plrgfx\monk\mln\mlnas.cl2 152 | plrgfx\monk\mln\mlnat.cl2 153 | plrgfx\monk\mln\mlnaw.cl2 154 | plrgfx\monk\mln\mlnbl.cl2 155 | plrgfx\monk\mln\mlndt.cl2 156 | plrgfx\monk\mln\mlnfm.cl2 157 | plrgfx\monk\mln\mlnht.cl2 158 | plrgfx\monk\mln\mlnlm.cl2 159 | plrgfx\monk\mln\mlnqm.cl2 160 | plrgfx\monk\mln\mlnst.cl2 161 | plrgfx\monk\mln\mlnwl.cl2 162 | plrgfx\monk\mls\mlsas.cl2 163 | plrgfx\monk\mls\mlsat.cl2 164 | plrgfx\monk\mls\mlsaw.cl2 165 | plrgfx\monk\mls\mlsbl.cl2 166 | plrgfx\monk\mls\mlsdt.cl2 167 | plrgfx\monk\mls\mlsfm.cl2 168 | plrgfx\monk\mls\mlsht.cl2 169 | plrgfx\monk\mls\mlslm.cl2 170 | plrgfx\monk\mls\mlsqm.cl2 171 | plrgfx\monk\mls\mlsst.cl2 172 | plrgfx\monk\mls\mlswl.cl2 173 | plrgfx\monk\mlt\mltas.cl2 174 | plrgfx\monk\mlt\mltat.cl2 175 | plrgfx\monk\mlt\mltaw.cl2 176 | plrgfx\monk\mlt\mltbl.cl2 177 | plrgfx\monk\mlt\mltdt.cl2 178 | plrgfx\monk\mlt\mltfm.cl2 179 | plrgfx\monk\mlt\mltht.cl2 180 | plrgfx\monk\mlt\mltlm.cl2 181 | plrgfx\monk\mlt\mltqm.cl2 182 | plrgfx\monk\mlt\mltst.cl2 183 | plrgfx\monk\mlt\mltwl.cl2 184 | plrgfx\monk\mlu\mluas.cl2 185 | plrgfx\monk\mlu\mluat.cl2 186 | plrgfx\monk\mlu\mluaw.cl2 187 | plrgfx\monk\mlu\mlubl.cl2 188 | plrgfx\monk\mlu\mludt.cl2 189 | plrgfx\monk\mlu\mlufm.cl2 190 | plrgfx\monk\mlu\mluht.cl2 191 | plrgfx\monk\mlu\mlulm.cl2 192 | plrgfx\monk\mlu\mluqm.cl2 193 | plrgfx\monk\mlu\mlust.cl2 194 | plrgfx\monk\mlu\mluwl.cl2 195 | plrgfx\monk\mma\mmaas.cl2 196 | plrgfx\monk\mma\mmaat.cl2 197 | plrgfx\monk\mma\mmaaw.cl2 198 | plrgfx\monk\mma\mmadt.cl2 199 | plrgfx\monk\mma\mmafm.cl2 200 | plrgfx\monk\mma\mmaht.cl2 201 | plrgfx\monk\mma\mmalm.cl2 202 | plrgfx\monk\mma\mmaqm.cl2 203 | plrgfx\monk\mma\mmast.cl2 204 | plrgfx\monk\mma\mmawl.cl2 205 | plrgfx\monk\mmb\mmbas.cl2 206 | plrgfx\monk\mmb\mmbat.cl2 207 | plrgfx\monk\mmb\mmbaw.cl2 208 | plrgfx\monk\mmb\mmbdt.cl2 209 | plrgfx\monk\mmb\mmbfm.cl2 210 | plrgfx\monk\mmb\mmbht.cl2 211 | plrgfx\monk\mmb\mmblm.cl2 212 | plrgfx\monk\mmb\mmbqm.cl2 213 | plrgfx\monk\mmb\mmbst.cl2 214 | plrgfx\monk\mmb\mmbwl.cl2 215 | plrgfx\monk\mmd\mmdas.cl2 216 | plrgfx\monk\mmd\mmdat.cl2 217 | plrgfx\monk\mmd\mmdaw.cl2 218 | plrgfx\monk\mmd\mmdbl.cl2 219 | plrgfx\monk\mmd\mmddt.cl2 220 | plrgfx\monk\mmd\mmdfm.cl2 221 | plrgfx\monk\mmd\mmdht.cl2 222 | plrgfx\monk\mmd\mmdlm.cl2 223 | plrgfx\monk\mmd\mmdqm.cl2 224 | plrgfx\monk\mmd\mmdst.cl2 225 | plrgfx\monk\mmd\mmdwl.cl2 226 | plrgfx\monk\mmh\mmhas.cl2 227 | plrgfx\monk\mmh\mmhat.cl2 228 | plrgfx\monk\mmh\mmhaw.cl2 229 | plrgfx\monk\mmh\mmhbl.cl2 230 | plrgfx\monk\mmh\mmhdt.cl2 231 | plrgfx\monk\mmh\mmhfm.cl2 232 | plrgfx\monk\mmh\mmhht.cl2 233 | plrgfx\monk\mmh\mmhlm.cl2 234 | plrgfx\monk\mmh\mmhqm.cl2 235 | plrgfx\monk\mmh\mmhst.cl2 236 | plrgfx\monk\mmh\mmhwl.cl2 237 | plrgfx\monk\mmm\mmmas.cl2 238 | plrgfx\monk\mmm\mmmat.cl2 239 | plrgfx\monk\mmm\mmmaw.cl2 240 | plrgfx\monk\mmm\mmmbl.cl2 241 | plrgfx\monk\mmm\mmmdt.cl2 242 | plrgfx\monk\mmm\mmmfm.cl2 243 | plrgfx\monk\mmm\mmmht.cl2 244 | plrgfx\monk\mmm\mmmlm.cl2 245 | plrgfx\monk\mmm\mmmqm.cl2 246 | plrgfx\monk\mmm\mmmst.cl2 247 | plrgfx\monk\mmm\mmmwl.cl2 248 | plrgfx\monk\mmn\mmnas.cl2 249 | plrgfx\monk\mmn\mmnat.cl2 250 | plrgfx\monk\mmn\mmnaw.cl2 251 | plrgfx\monk\mmn\mmnbl.cl2 252 | plrgfx\monk\mmn\mmndt.cl2 253 | plrgfx\monk\mmn\mmnfm.cl2 254 | plrgfx\monk\mmn\mmnht.cl2 255 | plrgfx\monk\mmn\mmnlm.cl2 256 | plrgfx\monk\mmn\mmnqm.cl2 257 | plrgfx\monk\mmn\mmnst.cl2 258 | plrgfx\monk\mmn\mmnwl.cl2 259 | plrgfx\monk\mms\mmsas.cl2 260 | plrgfx\monk\mms\mmsat.cl2 261 | plrgfx\monk\mms\mmsaw.cl2 262 | plrgfx\monk\mms\mmsbl.cl2 263 | plrgfx\monk\mms\mmsdt.cl2 264 | plrgfx\monk\mms\mmsfm.cl2 265 | plrgfx\monk\mms\mmsht.cl2 266 | plrgfx\monk\mms\mmslm.cl2 267 | plrgfx\monk\mms\mmsqm.cl2 268 | plrgfx\monk\mms\mmsst.cl2 269 | plrgfx\monk\mms\mmswl.cl2 270 | plrgfx\monk\mmt\mmtas.cl2 271 | plrgfx\monk\mmt\mmtat.cl2 272 | plrgfx\monk\mmt\mmtaw.cl2 273 | plrgfx\monk\mmt\mmtbl.cl2 274 | plrgfx\monk\mmt\mmtdt.cl2 275 | plrgfx\monk\mmt\mmtfm.cl2 276 | plrgfx\monk\mmt\mmtht.cl2 277 | plrgfx\monk\mmt\mmtlm.cl2 278 | plrgfx\monk\mmt\mmtqm.cl2 279 | plrgfx\monk\mmt\mmtst.cl2 280 | plrgfx\monk\mmt\mmtwl.cl2 281 | plrgfx\monk\mmu\mmuas.cl2 282 | plrgfx\monk\mmu\mmuat.cl2 283 | plrgfx\monk\mmu\mmuaw.cl2 284 | plrgfx\monk\mmu\mmubl.cl2 285 | plrgfx\monk\mmu\mmudt.cl2 286 | plrgfx\monk\mmu\mmufm.cl2 287 | plrgfx\monk\mmu\mmuht.cl2 288 | plrgfx\monk\mmu\mmulm.cl2 289 | plrgfx\monk\mmu\mmuqm.cl2 290 | plrgfx\monk\mmu\mmust.cl2 291 | plrgfx\monk\mmu\mmuwl.cl2 292 | sfx\monk\monk01.wav 293 | sfx\monk\monk08.wav 294 | sfx\monk\monk09.wav 295 | sfx\monk\monk10.wav 296 | sfx\monk\monk11.wav 297 | sfx\monk\monk12.wav 298 | sfx\monk\monk13.wav 299 | sfx\monk\monk14.wav 300 | sfx\monk\monk15.wav 301 | sfx\monk\monk16.wav 302 | sfx\monk\monk24.wav 303 | sfx\monk\monk27.wav 304 | sfx\monk\monk29.wav 305 | sfx\monk\monk34.wav 306 | sfx\monk\monk35.wav 307 | sfx\monk\monk43.wav 308 | sfx\monk\monk46.wav 309 | sfx\monk\monk49.wav 310 | sfx\monk\monk50.wav 311 | sfx\monk\monk52.wav 312 | sfx\monk\monk54.wav 313 | sfx\monk\monk55.wav 314 | sfx\monk\monk56.wav 315 | sfx\monk\monk61.wav 316 | sfx\monk\monk62.wav 317 | sfx\monk\monk68.wav 318 | sfx\monk\monk69.wav 319 | sfx\monk\monk69b.wav 320 | sfx\monk\monk70.wav 321 | sfx\monk\monk71.wav 322 | sfx\monk\monk79.wav 323 | sfx\monk\monk80.wav 324 | sfx\monk\monk82.wav 325 | sfx\monk\monk83.wav 326 | sfx\monk\monk87.wav 327 | sfx\monk\monk88.wav 328 | sfx\monk\monk89.wav 329 | sfx\monk\monk91.wav 330 | sfx\monk\monk92.wav 331 | sfx\monk\monk94.wav 332 | sfx\monk\monk95.wav 333 | sfx\monk\monk96.wav 334 | sfx\monk\monk97.wav 335 | sfx\monk\monk98.wav 336 | sfx\monk\monk99.wav 337 | -------------------------------------------------------------------------------- /data/diabdat-rm.txt: -------------------------------------------------------------------------------- 1 | ctrlpan/smaltext.cel 2 | d1221a.mpq 3 | data/bigtgold.cel 4 | data/char.cel 5 | data/medtexts.cel 6 | gendata/doom.smk 7 | gendata/fbutch3.smk 8 | gendata/quotes.cel 9 | gendata/quotes.pal 10 | items/axeflip.cel 11 | items/bottle.cel 12 | items/fbow.cel 13 | items/feye.cel 14 | items/fheart.cel 15 | items/manaflip.cel 16 | items/map/mapz0000.cel 17 | items/map/mapz0001.cel 18 | items/map/mapz0002.cel 19 | items/map/mapz0003.cel 20 | items/map/mapz0004.cel 21 | items/map/mapz0005.cel 22 | items/map/mapz0006.cel 23 | items/map/mapz0007.cel 24 | items/map/mapz0008.cel 25 | items/map/mapz0009.cel 26 | items/map/mapz0010.cel 27 | items/map/mapz0011.cel 28 | items/map/mapz0012.cel 29 | items/map/mapz0013.cel 30 | items/map/mapz0014.cel 31 | items/map/mapz0015.cel 32 | items/map/mapz0016.cel 33 | items/map/mapz0017.cel 34 | items/map/mapz0018.cel 35 | items/map/mapz0019.cel 36 | items/map/mapz0020.cel 37 | items/map/mapz0021.cel 38 | items/map/mapz0022.cel 39 | items/map/mapz0023.cel 40 | items/map/mapz0024.cel 41 | items/map/mapz0025.cel 42 | items/map/mapz0026.cel 43 | items/map/mapz0027.cel 44 | items/map/mapz0028.cel 45 | items/map/mapz0029.cel 46 | items/map/mapz0030.cel 47 | items/map/mapzdoom.cel 48 | items/wand.cel 49 | levels/l1data/hero1.dun 50 | levels/l1data/hero2.dun 51 | levels/l1data/l1_5.pal 52 | levels/l1data/l1.pal 53 | levels/l1data/l1palg.pal 54 | levels/l1data/lv1mazea.dun 55 | levels/l1data/lv1mazeb.dun 56 | levels/l1data/rnd1.dun 57 | levels/l1data/rnd2.dun 58 | levels/l1data/rnd3.dun 59 | levels/l1data/rnd4.dun 60 | levels/l1data/rnd5.dun 61 | levels/l1data/sklkngdr.dun 62 | levels/l1data/sklkng.dun 63 | levels/l1data/skngdc.dun 64 | levels/l2data/blood3.dun 65 | levels/l2data/l2_5.pal 66 | levels/l2data/l2.pal 67 | levels/l2data/l2palg.pal 68 | levels/l3data/l3_i.pal 69 | levels/l3data/l3.pal 70 | levels/l3data/l3palg.pal 71 | levels/l3data/l3_w.pal 72 | levels/l3data/lair.dun 73 | levels/l4data/l4_1.sol 74 | levels/l4data/l4base.gif 75 | levels/l4data/l4dirt2.gif 76 | levels/l4data/l4dirtbl.gif 77 | levels/l4data/l4floor.gif 78 | levels/l4data/l4misc2.gif 79 | levels/l4data/l4misc.gif 80 | levels/l4data/l4pal2.gif 81 | levels/l4data/l4pal3.gif 82 | levels/l4data/l4pal4.gif 83 | levels/l4data/l4penta.gif 84 | levels/l4data/l4shadow.gif 85 | levels/l4data/l4stair2.gif 86 | levels/l4data/l4stairs.gif 87 | levels/l4data/vile3.dun 88 | levels/towndata/ltpalg.pal 89 | missiles/blodbur0.cl2 90 | missiles/blodbur1.cl2 91 | missiles/blodbur2.cl2 92 | missiles/blodburs.cl2 93 | missiles/blood1.cl2 94 | missiles/blood2.cl2 95 | missiles/blood3.cl2 96 | missiles/blood4.cl2 97 | missiles/bone1.cl2 98 | missiles/bone2.cl2 99 | missiles/bone3.cl2 100 | missiles/doom1.cl2 101 | missiles/doom2.cl2 102 | missiles/doom3.cl2 103 | missiles/doom4.cl2 104 | missiles/doom5.cl2 105 | missiles/doom6.cl2 106 | missiles/doom7.cl2 107 | missiles/doom8.cl2 108 | missiles/doom9.cl2 109 | missiles/doomexp.cl2 110 | missiles/ethrshld.cl2 111 | missiles/firarwex.cl2 112 | missiles/flamel10.cel 113 | missiles/flamel11.cel 114 | missiles/flamel12.cel 115 | missiles/flamel13.cel 116 | missiles/flamel14.cel 117 | missiles/flamel15.cel 118 | missiles/flamel16.cel 119 | missiles/flamel1.cel 120 | missiles/flamel2.cel 121 | missiles/flamel3.cel 122 | missiles/flamel4.cel 123 | missiles/flamel5.cel 124 | missiles/flamel6.cel 125 | missiles/flamel7.cel 126 | missiles/flamel8.cel 127 | missiles/flamel9.cel 128 | missiles/flames10.cel 129 | missiles/flames11.cel 130 | missiles/flames12.cel 131 | missiles/flames13.cel 132 | missiles/flames14.cel 133 | missiles/flames15.cel 134 | missiles/flames16.cel 135 | missiles/flames1.cel 136 | missiles/flames2.cel 137 | missiles/flames3.cel 138 | missiles/flames4.cel 139 | missiles/flames5.cel 140 | missiles/flames6.cel 141 | missiles/flames7.cel 142 | missiles/flames8.cel 143 | missiles/flames9.cel 144 | missiles/flaml1.cel 145 | missiles/flaml2.cel 146 | missiles/flaml3.cel 147 | missiles/flaml4.cel 148 | missiles/flaml5.cel 149 | missiles/flaml6.cel 150 | missiles/flaml7.cel 151 | missiles/flaml8.cel 152 | missiles/flams1.cel 153 | missiles/flams2.cel 154 | missiles/flams3.cel 155 | missiles/flams4.cel 156 | missiles/flams5.cel 157 | missiles/flams6.cel 158 | missiles/flams7.cel 159 | missiles/flams8.cel 160 | missiles/krull.cl2 161 | missiles/metlhit1.cl2 162 | missiles/metlhit2.cl2 163 | missiles/metlhit3.cl2 164 | missiles/mindmace.cel 165 | missiles/portal.cl2 166 | missiles/portalu.cl2 167 | missiles/sentfr.cel 168 | missiles/sentout.cel 169 | missiles/sentup.cel 170 | monsters/acid/acidpud.cel 171 | monsters/bat/bats1.wav 172 | monsters/bat/bats2.wav 173 | monsters/bigfall/bfala1.wav 174 | monsters/bigfall/bfala2.wav 175 | monsters/bigfall/bfald1.wav 176 | monsters/bigfall/bfald2.wav 177 | monsters/bigfall/bfalh1.wav 178 | monsters/bigfall/bfalh2.wav 179 | monsters/bigfall/bfals1.wav 180 | monsters/bigfall/bfals2.wav 181 | monsters/black/blacks1.wav 182 | monsters/black/blacks2.wav 183 | monsters/darkmage/dmaga1.wav 184 | monsters/darkmage/dmaga2.wav 185 | monsters/darkmage/dmagd1.wav 186 | monsters/darkmage/dmagd2.wav 187 | monsters/darkmage/dmagea.cl2 188 | monsters/darkmage/dmaged.cl2 189 | monsters/darkmage/dmageh.cl2 190 | monsters/darkmage/dmagen.cl2 191 | monsters/darkmage/dmages.cl2 192 | monsters/darkmage/dmagew.cl2 193 | monsters/darkmage/dmagh1.wav 194 | monsters/darkmage/dmagh2.wav 195 | monsters/darkmage/dmags1.wav 196 | monsters/darkmage/dmags2.wav 197 | monsters/falspear/orange.trn 198 | monsters/falspear/salam.trn 199 | monsters/falspear/yellow.trn 200 | monsters/falsword/orange.trn 201 | monsters/falsword/salam.trn 202 | monsters/falsword/yellow.trn 203 | monsters/fatc/fatcs1.wav 204 | monsters/fatc/fatcs2.wav 205 | monsters/fat/fats1.wav 206 | monsters/fat/fats2.wav 207 | monsters/fat/fat.trn 208 | monsters/fireman/firema.cl2 209 | monsters/fireman/firemd.cl2 210 | monsters/fireman/firemh.cl2 211 | monsters/fireman/firemn.cl2 212 | monsters/fireman/firems.cl2 213 | monsters/fireman/firemw.cl2 214 | monsters/gargoyle/gargos1.wav 215 | monsters/gargoyle/gargos2.wav 216 | monsters/gargoyle/gargr.trn 217 | monsters/gargoyle/gargy.trn 218 | monsters/goatbow/goatbs1.wav 219 | monsters/goatbow/goatbs2.wav 220 | monsters/goatlord/goatla1.wav 221 | monsters/goatlord/goatla2.wav 222 | monsters/goatlord/goatld1.wav 223 | monsters/goatlord/goatld2.wav 224 | monsters/goatlord/goatld.cl2 225 | monsters/goatlord/goatlh1.wav 226 | monsters/goatlord/goatlh2.wav 227 | monsters/goatmace/goats1.wav 228 | monsters/goatmace/goats2.wav 229 | monsters/mage/mages1.wav 230 | monsters/mage/mages2.wav 231 | monsters/magma/magball1.cel 232 | monsters/magma/magball2.cel 233 | monsters/magma/magball3.cel 234 | monsters/magma/magball4.cel 235 | monsters/magma/magball5.cel 236 | monsters/magma/magball6.cel 237 | monsters/magma/magball7.cel 238 | monsters/magma/magball8.cel 239 | monsters/magma/magblos.cel 240 | monsters/monsters/balr.trn 241 | monsters/monsters/blodgol.trn 242 | monsters/monsters/cnselbk.trn 243 | monsters/monsters/cnselgd.trn 244 | monsters/monsters/cnselg.trn 245 | monsters/monsters/demsklb.trn 246 | monsters/monsters/demsklw.trn 247 | monsters/monsters/demskly.trn 248 | monsters/monsters/fmanb.trn 249 | monsters/monsters/fmanr.trn 250 | monsters/monsters/fmany.trn 251 | monsters/monsters/gsda.trn 252 | monsters/monsters/guard.trn 253 | monsters/monsters/nwtc.trn 254 | monsters/monsters/shcr.trn 255 | monsters/monsters/succb.trn 256 | monsters/monsters/succbw.trn 257 | monsters/monsters/succrw.trn 258 | monsters/monsters/unravbk.trn 259 | monsters/monsters/unravb.trn 260 | monsters/monsters/unravr.trn 261 | monsters/monsters/vtexl.trn 262 | monsters/monsters/wrra.trn 263 | monsters/rhino/red.trn 264 | monsters/rhino/rhinos1.cel 265 | monsters/rhino/rhinos2.cel 266 | monsters/rhino/rhinos3.cel 267 | monsters/rhino/rhinos4.cel 268 | monsters/rhino/rhinos5.cel 269 | monsters/rhino/rhinos6.cel 270 | monsters/rhino/rhinos7.cel 271 | monsters/rhino/rhinos8.cel 272 | monsters/scav/scavs1.wav 273 | monsters/scav/scavs2.wav 274 | monsters/scav/scavy.trn 275 | monsters/skelaxe/blue.trn 276 | monsters/skelaxe/red.trn 277 | monsters/skelaxe/sklaxs1.wav 278 | monsters/skelaxe/sklaxs2.wav 279 | monsters/skelbow/blue.trn 280 | monsters/skelbow/red.trn 281 | monsters/skelbow/sklbws1.wav 282 | monsters/skelbow/sklbws2.wav 283 | monsters/skelsd/blue.trn 284 | monsters/skelsd/red.trn 285 | monsters/snake/snakes1.wav 286 | monsters/snake/snakes2.wav 287 | monsters/snake/snaky.trn 288 | monsters/sneak/sneaks1.wav 289 | monsters/sneak/sneaks2.wav 290 | monsters/succ/blkjd.trn 291 | monsters/succ/flare.cel 292 | monsters/succ/flarexp.cel 293 | monsters/succ/redv.trn 294 | monsters/thin/lghning.cel 295 | monsters/unrav/unrava.cl2 296 | monsters/unrav/unravw.cel 297 | monsters/worm/worms1.wav 298 | monsters/worm/worms2.wav 299 | monsters/zombie/zombies1.wav 300 | monsters/zombie/zombies2.wav 301 | monsters/zombie/zombies.cl2 302 | objects/bkurns.cel 303 | objects/candlabr.cel 304 | objects/candle.cel 305 | objects/dirtfall.cel 306 | objects/explod1.cel 307 | objects/explod2.cel 308 | objects/firewal1.cel 309 | objects/flame3.cel 310 | objects/ghost.cel 311 | objects/switch2.cel 312 | objects/switch3.cel 313 | objects/vapor1.cel 314 | objects/water.cel 315 | objects/waterjug.cel 316 | sfx/animals/mage48.wav 317 | sfx/animals/mage49.wav 318 | sfx/animals/mage50.wav 319 | sfx/animals/mage51.wav 320 | sfx/animals/mage52.wav 321 | sfx/animals/mage53.wav 322 | sfx/animals/rogue48.wav 323 | sfx/animals/rogue49.wav 324 | sfx/animals/rogue50.wav 325 | sfx/animals/rogue51.wav 326 | sfx/animals/rogue52.wav 327 | sfx/animals/rogue53.wav 328 | sfx/animals/warior48.wav 329 | sfx/animals/warior49.wav 330 | sfx/animals/warior50.wav 331 | sfx/animals/warior51.wav 332 | sfx/animals/warior52.wav 333 | sfx/animals/warior53.wav 334 | sfx/items/armrfkd.wav 335 | sfx/items/barfire.wav 336 | sfx/items/bfire.wav 337 | sfx/items/bhit.wav 338 | sfx/items/bhit1.wav 339 | sfx/items/flip.wav 340 | sfx/items/flip1.wav 341 | sfx/items/flipmag.wav 342 | sfx/items/flipmag1.wav 343 | sfx/items/flipsarc.wav 344 | sfx/items/gold1.wav 345 | sfx/items/hlmtfkd.wav 346 | sfx/items/sarca.wav 347 | sfx/items/sarcb.wav 348 | sfx/items/shielfkd.wav 349 | sfx/items/sttest.wav 350 | sfx/items/swrdfkd.wav 351 | sfx/misc/arrowall.wav 352 | sfx/misc/blank.wav 353 | sfx/misc/bldboil.wav 354 | sfx/misc/bspirit.wav 355 | sfx/misc/cast1.wav 356 | sfx/misc/cast10.wav 357 | sfx/misc/cast12.wav 358 | sfx/misc/cast3.wav 359 | sfx/misc/cast5.wav 360 | sfx/misc/cast9.wav 361 | sfx/misc/chltning.wav 362 | sfx/misc/dserpatt.wav 363 | sfx/misc/fball.wav 364 | sfx/misc/fbolt2.wav 365 | sfx/misc/firimp1.wav 366 | sfx/misc/flash.wav 367 | sfx/misc/fmag.wav 368 | sfx/misc/golumded.wav 369 | sfx/misc/grdlanch.wav 370 | sfx/misc/healing.wav 371 | sfx/misc/hyper.wav 372 | sfx/misc/invpot.wav 373 | sfx/misc/lghit.wav 374 | sfx/misc/lghit1.wav 375 | sfx/misc/ltning.wav 376 | sfx/misc/portal.wav 377 | sfx/misc/scurse.wav 378 | sfx/misc/shatter.wav 379 | sfx/misc/soulfire.wav 380 | sfx/misc/spoutlop.wav 381 | sfx/misc/storm.wav 382 | sfx/misc/vtheft.wav 383 | sfx/misc/walk2.wav 384 | sfx/misc/walk3.wav 385 | sfx/misc/walk4.wav 386 | sfx/misc/wallstrt.wav 387 | sfx/monsters/izual01.wav 388 | sfx/monsters/laz02.wav 389 | sfx/monsters/wlock01.wav 390 | sfx/rogue/rogue69c.wav 391 | sfx/rogue/rogue71b.wav 392 | sfx/towners/bsmith11.wav 393 | sfx/towners/bsmith54.wav 394 | sfx/towners/cow8.wav 395 | sfx/towners/priest00.wav 396 | sfx/towners/priest01.wav 397 | sfx/towners/priest02.wav 398 | sfx/towners/priest03.wav 399 | sfx/towners/priest04.wav 400 | sfx/towners/priest05.wav 401 | sfx/towners/priest06.wav 402 | sfx/towners/priest07.wav 403 | sfx/towners/storyt32.wav 404 | sfx/towners/tavown42.wav 405 | sfx/warrior/wario95b.wav 406 | sfx/warrior/wario95c.wav 407 | sfx/warrior/wario95d.wav 408 | sfx/warrior/wario95e.wav 409 | sfx/warrior/wario95f.wav 410 | sfx/warrior/wario96c.wav 411 | sfx/warrior/warior96.wav 412 | sfx/warrior/warior97.wav 413 | sfx/warrior/warior98.wav 414 | spawn.mpq 415 | towners/priest/priest8.cel 416 | towners/smith/smithw.cel 417 | towners/townwmn1/wmnw.cel 418 | towners/twnf/twnfw.cel 419 | ui_art/badconn.pcx 420 | ui_art/black.pcx 421 | ui_art/bn_bkg.pcx 422 | ui_art/bnbuttns.pcx 423 | ui_art/bnconnbg.pcx 424 | ui_art/bnjoinbg.pcx 425 | ui_art/bnselchn.pcx 426 | ui_art/but_lrg.pcx 427 | ui_art/but_med.pcx 428 | ui_art/button.pcx 429 | ui_art/but_xsm.pcx 430 | ui_art/cd_icons.pcx 431 | ui_art/chat_bkg.pcx 432 | ui_art/connanim.pcx 433 | ui_art/connect.pcx 434 | ui_art/creahero.pcx 435 | ui_art/creat_bg.pcx 436 | ui_art/diffbtns.pcx 437 | ui_art/disclaim.pcx 438 | ui_art/epopup.pcx 439 | ui_art/font16.bin 440 | ui_art/font16g.pcx 441 | ui_art/font16s.pcx 442 | ui_art/font24.bin 443 | ui_art/font24g.pcx 444 | ui_art/font24s.pcx 445 | ui_art/font30.bin 446 | ui_art/font30g.pcx 447 | ui_art/font30s.pcx 448 | ui_art/font42.bin 449 | ui_art/font42g.pcx 450 | ui_art/font42y.pcx 451 | ui_art/greenlag.pcx 452 | ui_art/heronum.pcx 453 | ui_art/heroport.pcx 454 | ui_art/hpopup.pcx 455 | ui_art/ipx_bkg.pcx 456 | ui_art/listbox.pcx 457 | ui_art/list_gry.pcx 458 | ui_art/menu.pcx 459 | ui_art/mmpopup.pcx 460 | ui_art/r3_gry.pcx 461 | ui_art/radio1.pcx 462 | ui_art/radio2.pcx 463 | ui_art/radio3.pcx 464 | ui_art/radio4.pcx 465 | ui_art/redlag.pcx 466 | ui_art/scrlarrw.pcx 467 | ui_art/scrlbar.pcx 468 | ui_art/scrlthmb.pcx 469 | ui_art/seldiff.pcx 470 | ui_art/special.pcx 471 | ui_art/spwnport.pcx 472 | ui_art/swmmpop.pcx 473 | ui_art/welcome.pcx 474 | ui_art/xsmlogo.pcx 475 | ui_art/yellolag.pcx 476 | -------------------------------------------------------------------------------- /data/hellfire-listfile.txt: -------------------------------------------------------------------------------- 1 | monsters\hellbug\hellbgs.cl2 2 | monsters\hellbug\hellbgd.cl2 3 | monsters\hellbug\hellbgh.cl2 4 | monsters\hellbug\hellbug.txt 5 | monsters\hellbug\hellbgw.cl2 6 | monsters\hellbug\hellbga.cl2 7 | monsters\hellbug\hellbgn.cl2 8 | monsters\bspidr\bspidrh.cl2 9 | monsters\bspidr\bspidra.cl2 10 | monsters\bspidr\debug.txt 11 | monsters\bspidr\bspidrw.cl2 12 | monsters\bspidr\bspidrn.cl2 13 | monsters\bspidr\bspidrd.cl2 14 | monsters\bspidr\bspidrs.cl2 15 | monsters\hellbat2\bhelbtn.cl2 16 | monsters\hellbat2\bhellbat.txt 17 | monsters\hellbat2\bhelbts.cl2 18 | monsters\hellbat2\bhelbtd.cl2 19 | monsters\hellbat2\bhelbth.cl2 20 | monsters\hellbat2\bhelbta.cl2 21 | monsters\hellbat2\bhelbtw.cl2 22 | monsters\lich\debug.txt 23 | monsters\lich\lichh.cl2 24 | monsters\lich\lichn.cl2 25 | monsters\lich\licha.cl2 26 | monsters\lich\lichd.cl2 27 | monsters\lich\lichw.cl2 28 | monsters\fork\forkw.cl2 29 | monsters\fork\debug.txt 30 | monsters\fork\forkh.cl2 31 | monsters\fork\forka.cl2 32 | monsters\fork\forkn.cl2 33 | monsters\fork\forkd.cl2 34 | monsters\antworm\wormd.cl2 35 | monsters\antworm\wormh.cl2 36 | monsters\antworm\debug.txt 37 | monsters\antworm\worma.cl2 38 | monsters\antworm\wormn.cl2 39 | monsters\antworm\wormw.cl2 40 | monsters\hellbat\helbatw.cl2 41 | monsters\hellbat\helbath.cl2 42 | monsters\hellbat\helbats.cl2 43 | monsters\hellbat\helbatn.cl2 44 | monsters\hellbat\hellbat.txt 45 | monsters\hellbat\helbata.cl2 46 | monsters\hellbat\helbatd.cl2 47 | monsters\spawn\spawnn.cl2 48 | monsters\spawn\spawnd.cl2 49 | monsters\spawn\spawnw.cl2 50 | monsters\spawn\debug.txt 51 | monsters\spawn\spawnh.cl2 52 | monsters\spawn\spawna.cl2 53 | monsters\nkr\nkrn.cl2 54 | monsters\nkr\nakrule.txt 55 | monsters\nkr\nkrh.cl2 56 | monsters\nkr\nkrw.cl2 57 | monsters\nkr\nkrd.cl2 58 | monsters\nkr\nkrs.cl2 59 | monsters\nkr\nkra.cl2 60 | monsters\clasp\clasph.cl2 61 | monsters\clasp\claspa.cl2 62 | monsters\clasp\claspd.cl2 63 | monsters\clasp\claspn.cl2 64 | monsters\clasp\debug.txt 65 | monsters\clasp\claspw.cl2 66 | monsters\goatlord\goatld.cl2 67 | monsters\wscorp\wscorpa.cl2 68 | monsters\wscorp\wscorpn.cl2 69 | monsters\wscorp\wscorpw.cl2 70 | monsters\wscorp\debug.txt 71 | monsters\wscorp\wscorpd.cl2 72 | monsters\wscorp\wscorph.cl2 73 | monsters\unrav\unrava.cl2 74 | monsters\unrav\unravw.cl2 75 | monsters\byclps\byclpsw.cl2 76 | monsters\byclps\byclpsd.cl2 77 | monsters\byclps\byclpos.txt 78 | monsters\byclps\byclpsh.cl2 79 | monsters\byclps\byclpsn.cl2 80 | monsters\byclps\byclpsa.cl2 81 | monsters\gravdg\gravdgs.cl2 82 | monsters\gravdg\gravdga.cl2 83 | monsters\gravdg\gravdgn.cl2 84 | monsters\gravdg\gravdgd.cl2 85 | monsters\gravdg\gravdgh.cl2 86 | monsters\gravdg\gdigger.txt 87 | monsters\gravdg\gravdgw.cl2 88 | monsters\bubba\bubbad.cl2 89 | monsters\bubba\debug.txt 90 | monsters\bubba\bubban.cl2 91 | monsters\bubba\bubbaa.cl2 92 | monsters\bubba\bubbaw.cl2 93 | monsters\bubba\bubbah.cl2 94 | monsters\flesh\fleshh.cl2 95 | monsters\flesh\debug.txt 96 | monsters\flesh\fleshd.cl2 97 | monsters\flesh\fleshn.cl2 98 | monsters\flesh\fleshw.cl2 99 | monsters\flesh\flesha.cl2 100 | monsters\spider\spidern.cl2 101 | monsters\spider\debug.txt 102 | monsters\spider\spiderd.cl2 103 | monsters\spider\spidera.cl2 104 | monsters\spider\spiderw.cl2 105 | monsters\spider\spiderh.cl2 106 | monsters\eye2\eye2d.cl2 107 | monsters\eye2\eye2a.cl2 108 | monsters\eye2\eye2n.cl2 109 | monsters\eye2\debug.txt 110 | monsters\eye2\eye2w.cl2 111 | monsters\eye2\eye2h.cl2 112 | monsters\rat\ratw.cl2 113 | monsters\rat\debug.txt 114 | monsters\rat\ratn.cl2 115 | monsters\rat\ratd.cl2 116 | monsters\rat\rata.cl2 117 | monsters\rat\rath.cl2 118 | monsters\lich2\lich2w.cl2 119 | monsters\lich2\lich2h.cl2 120 | monsters\lich2\lich2a.cl2 121 | monsters\lich2\debug.txt 122 | monsters\lich2\lich2n.cl2 123 | monsters\lich2\lich2d.cl2 124 | monsters\horkd\horkds.cl2 125 | monsters\horkd\horkda.cl2 126 | monsters\horkd\debug.txt 127 | monsters\horkd\horkdn.cl2 128 | monsters\horkd\horkdd.cl2 129 | monsters\horkd\horkdw.cl2 130 | monsters\horkd\horkdh.cl2 131 | monsters\scorp\scorpn.cl2 132 | monsters\scorp\debug.txt 133 | monsters\scorp\scorph.cl2 134 | monsters\scorp\scorpa.cl2 135 | monsters\scorp\scorpw.cl2 136 | monsters\scorp\scorpd.cl2 137 | monsters\reaper\reaper.txt 138 | monsters\reaper\reapw.cl2 139 | monsters\reaper\reapd.cl2 140 | monsters\reaper\reapa.cl2 141 | monsters\reaper\reapn.cl2 142 | monsters\reaper\reaph.cl2 143 | monsters\newsfx\fleshth2.wav 144 | monsters\newsfx\kbruteh2.wav 145 | monsters\newsfx\hspawnd2.wav 146 | monsters\newsfx\slordd1.wav 147 | monsters\newsfx\tmbrath1.wav 148 | monsters\newsfx\nakrulh1.wav 149 | monsters\newsfx\shreda2.wav 150 | monsters\newsfx\lichh2.wav 151 | monsters\newsfx\fleshth1.wav 152 | monsters\newsfx\stingra1.wav 153 | monsters\newsfx\satyra1.wav 154 | monsters\newsfx\hdemona1.wav 155 | monsters\newsfx\satyrd2.wav 156 | monsters\newsfx\swingh2.wav 157 | monsters\newsfx\hdemons2.wav 158 | monsters\newsfx\hboara2.wav 159 | monsters\newsfx\kbruteh1.wav 160 | monsters\newsfx\nakruld1.wav 161 | monsters\newsfx\gdiggrh2.wav 162 | monsters\newsfx\slordd2.wav 163 | monsters\newsfx\nakruld2.wav 164 | monsters\newsfx\crypts2.wav 165 | monsters\newsfx\ribsplt1.wav 166 | monsters\newsfx\hdemond2.wav 167 | monsters\newsfx\hdemona2.wav 168 | monsters\newsfx\defiles1.wav 169 | monsters\newsfx\defilea1.wav 170 | monsters\newsfx\bicloph1.wav 171 | monsters\newsfx\defiled1.wav 172 | monsters\newsfx\ftwina1.wav 173 | monsters\newsfx\hdemonh2.wav 174 | monsters\newsfx\swings2.wav 175 | monsters\newsfx\crypth1.wav 176 | monsters\newsfx\stingrd2.wav 177 | monsters\newsfx\ftwind2.wav 178 | monsters\newsfx\slordh1.wav 179 | monsters\newsfx\hboarh1.wav 180 | monsters\newsfx\crypts1.wav 181 | monsters\newsfx\kbruted2.wav 182 | monsters\newsfx\eject1.wav 183 | monsters\newsfx\hdemons1.wav 184 | monsters\newsfx\tchantd2.wav 185 | monsters\newsfx\tchanth1.wav 186 | monsters\newsfx\gdiggrs1.wav 187 | monsters\newsfx\biclopa2.wav 188 | monsters\newsfx\ftwinh2.wav 189 | monsters\newsfx\stingrh1.wav 190 | monsters\newsfx\psycoa1.wav 191 | monsters\newsfx\lichs2.wav 192 | monsters\newsfx\tmbratd2.wav 193 | monsters\newsfx\satyrh1.wav 194 | monsters\newsfx\lwormd1.wav 195 | monsters\newsfx\shredh2.wav 196 | monsters\newsfx\stingrh2.wav 197 | monsters\newsfx\hspawnh1.wav 198 | monsters\newsfx\slordh2.wav 199 | monsters\newsfx\hboard1.wav 200 | monsters\newsfx\lworma1.wav 201 | monsters\newsfx\biclopd1.wav 202 | monsters\newsfx\tmbratd1.wav 203 | monsters\newsfx\lwormh1.wav 204 | monsters\newsfx\swingh1.wav 205 | monsters\newsfx\lwormh2.wav 206 | monsters\newsfx\fleshtd1.wav 207 | monsters\newsfx\helbatd2.wav 208 | monsters\newsfx\kbrutea1.wav 209 | monsters\newsfx\hspawna2.wav 210 | monsters\newsfx\helbata2.wav 211 | monsters\newsfx\slorda1.wav 212 | monsters\newsfx\tchantd1.wav 213 | monsters\newsfx\slords2.wav 214 | monsters\newsfx\shredd1.wav 215 | monsters\newsfx\satyrh2.wav 216 | monsters\newsfx\swinga2.wav 217 | monsters\newsfx\satyrd1.wav 218 | monsters\newsfx\ftwind1.wav 219 | monsters\newsfx\defileh1.wav 220 | monsters\newsfx\nakruls2.wav 221 | monsters\newsfx\hboarh2.wav 222 | monsters\newsfx\cryptd2.wav 223 | monsters\newsfx\tmbrata1.wav 224 | monsters\newsfx\tchanta1.wav 225 | monsters\newsfx\tchanth2.wav 226 | monsters\newsfx\swinga1.wav 227 | monsters\newsfx\nakruls1.wav 228 | monsters\newsfx\bicloph2.wav 229 | monsters\newsfx\slorda2.wav 230 | monsters\newsfx\defiles2.wav 231 | monsters\newsfx\stingrd1.wav 232 | monsters\newsfx\ftwinh1.wav 233 | monsters\newsfx\fleshtd2.wav 234 | monsters\newsfx\swings1.wav 235 | monsters\newsfx\crypta2.wav 236 | monsters\newsfx\gdiggrd2.wav 237 | monsters\newsfx\reaperd2.wav 238 | monsters\newsfx\ftwina2.wav 239 | monsters\newsfx\reapera1.wav 240 | monsters\newsfx\defileh2.wav 241 | monsters\newsfx\reaperh2.wav 242 | monsters\newsfx\lichd1.wav 243 | monsters\newsfx\hspawnh2.wav 244 | monsters\newsfx\reapera2.wav 245 | monsters\newsfx\fleshts2.wav 246 | monsters\newsfx\satyra2.wav 247 | monsters\newsfx\defilea2.wav 248 | monsters\newsfx\gdiggrd1.wav 249 | monsters\newsfx\biclopd2.wav 250 | monsters\newsfx\gdiggrs2.wav 251 | monsters\newsfx\stingra2.wav 252 | monsters\newsfx\gdiggrh1.wav 253 | monsters\newsfx\psycod1.wav 254 | monsters\newsfx\swingd2.wav 255 | monsters\newsfx\gdiggra1.wav 256 | monsters\newsfx\hspawns1.wav 257 | monsters\newsfx\lichs1.wav 258 | monsters\newsfx\lichd2.wav 259 | monsters\newsfx\tmbrath2.wav 260 | monsters\newsfx\shredh1.wav 261 | monsters\newsfx\crypth2.wav 262 | monsters\newsfx\cryptd1.wav 263 | monsters\newsfx\lichh1.wav 264 | monsters\newsfx\tchanta2.wav 265 | monsters\newsfx\reaperd1.wav 266 | monsters\newsfx\psycoa2.wav 267 | monsters\newsfx\fleshts1.wav 268 | monsters\newsfx\hdemond1.wav 269 | monsters\newsfx\fleshta2.wav 270 | monsters\newsfx\licha2.wav 271 | monsters\newsfx\defiled2.wav 272 | monsters\newsfx\hboard2.wav 273 | monsters\newsfx\hspawna1.wav 274 | monsters\newsfx\hspawns2.wav 275 | monsters\newsfx\helbath2.wav 276 | monsters\newsfx\psycoh1.wav 277 | monsters\newsfx\shreda1.wav 278 | monsters\newsfx\swingd1.wav 279 | monsters\newsfx\helbath1.wav 280 | monsters\newsfx\fleshta1.wav 281 | monsters\newsfx\gdiggra2.wav 282 | monsters\newsfx\licha1.wav 283 | monsters\newsfx\kbrutea2.wav 284 | monsters\newsfx\reaperh1.wav 285 | monsters\newsfx\nakrula1.wav 286 | monsters\newsfx\hboara1.wav 287 | monsters\newsfx\lwormd2.wav 288 | monsters\newsfx\hdemonh1.wav 289 | monsters\newsfx\shredd2.wav 290 | monsters\newsfx\biclopa1.wav 291 | monsters\newsfx\slords1.wav 292 | monsters\newsfx\tmbrata2.wav 293 | monsters\newsfx\kbruted1.wav 294 | monsters\newsfx\psycoh2.wav 295 | monsters\newsfx\psycod2.wav 296 | monsters\newsfx\crypta1.wav 297 | monsters\newsfx\helbata1.wav 298 | monsters\newsfx\lworma2.wav 299 | monsters\newsfx\helbatd1.wav 300 | monsters\newsfx\hspawnd1.wav 301 | monsters\newsfx\nakrula2.wav 302 | monsters\newsfx\nakrulh2.wav 303 | monsters\eye\eyew.cl2 304 | monsters\eye\eyeh.cl2 305 | monsters\eye\debug.txt 306 | monsters\eye\eyen.cl2 307 | monsters\eye\eyea.cl2 308 | monsters\eye\eyed.cl2 309 | nlevels\towndata\town.sol 310 | nlevels\towndata\town.min 311 | nlevels\towndata\town.cel 312 | nlevels\towndata\town.til 313 | nlevels\l5data\l5.sol 314 | nlevels\l5data\l5.min 315 | nlevels\l5data\l5base.pal 316 | nlevels\l5data\l5.til 317 | nlevels\l5data\l5s.cel 318 | nlevels\l5data\l5.cel 319 | nlevels\l5data\l5.amp 320 | nlevels\cutl5.pal 321 | nlevels\cutl5.cel 322 | nlevels\cutl6.pal 323 | nlevels\cutl6.cel 324 | nlevels\l6data\l6base4.pal 325 | nlevels\l6data\l6base2.pal 326 | nlevels\l6data\l6.min 327 | nlevels\l6data\l6base5.pal 328 | nlevels\l6data\l6.cel 329 | nlevels\l6data\l6.til 330 | nlevels\l6data\l6base1.pal 331 | nlevels\l6data\l6.sol 332 | nlevels\l6data\nest.col 333 | nlevels\l6data\l6base.pal 334 | nlevels\l6data\l6base3.pal 335 | nlevels\l6data\l6.amp 336 | towners\girl\debug.txt 337 | towners\girl\girls1.cel 338 | towners\girl\girlw1.cel 339 | towners\farmer\mfrmrn2.cel 340 | towners\farmer\farmrn2.cel 341 | towners\farmer\farmer.txt 342 | towners\farmer\cfrmrn2.cel 343 | towners\trader\tradern.cel 344 | towners\trader\traderw.cel 345 | missiles\ex_blu2.cl2 346 | missiles\ms_bla13.cl2 347 | missiles\fbb_n6.cl2 348 | missiles\ms_ora4.cl2 349 | missiles\fbc_n3.cl2 350 | missiles\ms_ora5.cl2 351 | missiles\ms_reb12.cl2 352 | missiles\fbd_n13.cl2 353 | missiles\ms_reb8.cl2 354 | missiles\ms_reb15.cl2 355 | missiles\spawns1.cl2 356 | missiles\fbb_n16.cl2 357 | missiles\fbb_n14.cl2 358 | missiles\ms_bla8.cl2 359 | missiles\ms_blb15.cl2 360 | missiles\fbd_n10.cl2 361 | missiles\ms_yeb1.cl2 362 | missiles\ms_bla4.cl2 363 | missiles\fba_n1.cl2 364 | missiles\fbb_n8.cl2 365 | missiles\ms_ora7.cl2 366 | missiles\fbd_n4.cl2 367 | missiles\fba_n12.cl2 368 | missiles\ms_blb12.cl2 369 | missiles\ms_blb13.cl2 370 | missiles\reflect.cl2 371 | missiles\fbd_n12.cl2 372 | missiles\fbb_n12.cl2 373 | missiles\ms_bla14.cl2 374 | missiles\fbd_n2.cl2 375 | missiles\ms_blb6.cl2 376 | missiles\fbd_n11.cl2 377 | missiles\ms_ora10.cl2 378 | missiles\ms_yeb3.cl2 379 | missiles\fbc_n13.cl2 380 | missiles\fbb_n10.cl2 381 | missiles\fba_n13.cl2 382 | missiles\ms_reb11.cl2 383 | missiles\ms_bla5.cl2 384 | missiles\spawns6.cl2 385 | missiles\fbd_n8.cl2 386 | missiles\fbd_n5.cl2 387 | missiles\fba_n2.cl2 388 | missiles\ms_reb2.cl2 389 | missiles\spawns3.cl2 390 | missiles\ms_blb8.cl2 391 | missiles\fbc_n8.cl2 392 | missiles\fbd_n6.cl2 393 | missiles\fbb_n2.cl2 394 | missiles\spawns5.cl2 395 | missiles\fbb_n15.cl2 396 | missiles\ms_ora16.cl2 397 | missiles\ms_yeb2.cl2 398 | missiles\ms_reb7.cl2 399 | missiles\ms_blb2.cl2 400 | missiles\ms_blb11.cl2 401 | missiles\ex_blu3.cl2 402 | missiles\ms_reb16.cl2 403 | missiles\fbc_n15.cl2 404 | missiles\ms_bla1.cl2 405 | missiles\fba_n15.cl2 406 | missiles\ms_blb7.cl2 407 | missiles\ms_yeb15.cl2 408 | missiles\ms_yeb11.cl2 409 | missiles\ms_ora12.cl2 410 | missiles\ms_ora8.cl2 411 | missiles\ms_blb1.cl2 412 | missiles\ms_reb1.cl2 413 | missiles\ms_yeb14.cl2 414 | missiles\fbd_n16.cl2 415 | missiles\ms_ora14.cl2 416 | missiles\fbc_n1.cl2 417 | missiles\ms_reb6.cl2 418 | missiles\fbd_n3.cl2 419 | missiles\fbc_n16.cl2 420 | missiles\spawns8.cl2 421 | missiles\fba_n3.cl2 422 | missiles\fbb_n4.cl2 423 | missiles\ms_blb9.cl2 424 | missiles\ms_yeb16.cl2 425 | missiles\fba_n4.cl2 426 | missiles\ms_bla12.cl2 427 | missiles\ms_yeb7.cl2 428 | missiles\fbd_n9.cl2 429 | missiles\ms_ora13.cl2 430 | missiles\ex_ora1.cl2 431 | missiles\fba_n14.cl2 432 | missiles\ms_reb9.cl2 433 | missiles\fbc_n12.cl2 434 | missiles\ms_bla16.cl2 435 | missiles\ms_yeb4.cl2 436 | missiles\ex_yel2.cl2 437 | missiles\ms_yeb8.cl2 438 | missiles\fbc_n5.cl2 439 | missiles\rglows1.cl2 440 | missiles\ms_yeb5.cl2 441 | missiles\fbc_n6.cl2 442 | missiles\fba_n10.cl2 443 | missiles\ms_bla15.cl2 444 | missiles\fbc_n10.cl2 445 | missiles\fbb_n1.cl2 446 | missiles\fbb_n5.cl2 447 | missiles\fba_n9.cl2 448 | missiles\ms_yeb13.cl2 449 | missiles\ms_ora15.cl2 450 | missiles\fba_n16.cl2 451 | missiles\ms_blb10.cl2 452 | missiles\ms_reb14.cl2 453 | missiles\ms_yeb6.cl2 454 | missiles\spawns2.cl2 455 | missiles\fba_n8.cl2 456 | missiles\fbb_n11.cl2 457 | missiles\fbc_n9.cl2 458 | missiles\fbc_n7.cl2 459 | missiles\fbc_n14.cl2 460 | missiles\ms_yeb9.cl2 461 | missiles\fbc_n2.cl2 462 | missiles\ms_blb3.cl2 463 | missiles\ex_red3.cl2 464 | missiles\ms_yeb12.cl2 465 | missiles\fbb_n7.cl2 466 | missiles\fbc_n4.cl2 467 | missiles\fbd_n1.cl2 468 | missiles\ms_reb4.cl2 469 | missiles\ms_blb5.cl2 470 | missiles\ms_bla9.cl2 471 | missiles\ms_ora2.cl2 472 | missiles\fbd_n7.cl2 473 | missiles\fba_n11.cl2 474 | missiles\ms_ora11.cl2 475 | missiles\ms_yeb10.cl2 476 | missiles\ms_bla11.cl2 477 | missiles\fbb_n13.cl2 478 | missiles\ms_bla7.cl2 479 | missiles\fbb_n3.cl2 480 | missiles\fbd_n15.cl2 481 | missiles\ms_reb5.cl2 482 | missiles\fba_n6.cl2 483 | missiles\fba_n5.cl2 484 | missiles\ms_bla6.cl2 485 | missiles\ms_reb10.cl2 486 | missiles\fba_n7.cl2 487 | missiles\spawns4.cl2 488 | missiles\ms_ora9.cl2 489 | missiles\fbb_n9.cl2 490 | missiles\ms_bla2.cl2 491 | missiles\spawns7.cl2 492 | missiles\ms_blb4.cl2 493 | missiles\ms_bla3.cl2 494 | missiles\fbd_n14.cl2 495 | missiles\ms_blb16.cl2 496 | missiles\fbc_n11.cl2 497 | missiles\ms_reb13.cl2 498 | missiles\ms_bla10.cl2 499 | missiles\ms_blb14.cl2 500 | missiles\ms_ora1.cl2 501 | missiles\ms_reb3.cl2 502 | missiles\ms_ora6.cl2 503 | missiles\ms_ora3.cl2 504 | objects\l5door.cel 505 | objects\l5sarco.cel 506 | objects\urn.cel 507 | objects\l5lever.cel 508 | objects\urnexpld.cel 509 | objects\l5light.cel 510 | objects\l6pod1.cel 511 | objects\l5books.cel 512 | objects\l6pod2.cel 513 | data\spelli2.cel 514 | data\spelicon.cel 515 | data\spellbkb.cel 516 | data\hf_logo3.cel 517 | data\spellbk.cel 518 | data\inv\objcurs2.cel 519 | data\diabsmal.cel 520 | items\donkys1.cel 521 | items\rglows1.cel 522 | items\teddys1.cel 523 | items\wholeps1.cel 524 | items\map\mapztown.cel 525 | items\bombs1.cel 526 | items\cows1.cel 527 | items\mooses1.cel 528 | items\runes1.cel 529 | items\halfps1.cel 530 | gendata\logo.smk 531 | gendata\hellfire.smk 532 | sfx\hellfire\defiler6.wav 533 | sfx\hellfire\defiler7.wav 534 | sfx\hellfire\defiler8.wav 535 | sfx\hellfire\farmer1.wav 536 | sfx\hellfire\farmer2.wav 537 | sfx\hellfire\farmer2a.wav 538 | sfx\hellfire\farmer3.wav 539 | sfx\hellfire\farmer4.wav 540 | sfx\hellfire\farmer5.wav 541 | sfx\hellfire\farmer6.wav 542 | sfx\hellfire\farmer7.wav 543 | sfx\hellfire\farmer8.wav 544 | sfx\hellfire\farmer9.wav 545 | sfx\hellfire\nakrul1.wav 546 | sfx\hellfire\nakrul2.wav 547 | sfx\hellfire\nakrul3.wav 548 | sfx\hellfire\nakrul4.wav 549 | sfx\hellfire\nakrul5.wav 550 | sfx\hellfire\nakrul6.wav 551 | sfx\hellfire\naratr1.wav 552 | sfx\hellfire\naratr2.wav 553 | sfx\hellfire\naratr3.wav 554 | sfx\hellfire\naratr4.wav 555 | sfx\hellfire\naratr5.wav 556 | sfx\hellfire\naratr6.wav 557 | sfx\hellfire\naratr7.wav 558 | sfx\hellfire\naratr8.wav 559 | sfx\hellfire\naratr9.wav 560 | sfx\hellfire\teddybr1.wav 561 | sfx\hellfire\teddybr2.wav 562 | sfx\hellfire\teddybr3.wav 563 | sfx\hellfire\teddybr4.wav 564 | sfx\misc\fballbow.wav 565 | sfx\misc\newbfire.wav 566 | sfx\misc\nestxpld.wav 567 | sfx\misc\sting1.wav 568 | sfx\items\crclos.wav 569 | sfx\items\podpop5.wav 570 | sfx\items\urnpop2.wav 571 | sfx\items\urnpop3.wav 572 | sfx\items\podpop8.wav 573 | sfx\items\cropen.wav 574 | ui_art\selhero.pcx 575 | ui_art\hf_logo1.pcx 576 | ui_art\mainmenu.pcx 577 | ui_art\support.pcx 578 | ui_art\hf_logo2.pcx 579 | ui_art\hf_title.pcx 580 | ui_art\heros.pcx 581 | ui_art\black.pcx 582 | ui_art\selgame.pcx 583 | ui_art\selconn.pcx 584 | ui_art\font42g.pcx 585 | -------------------------------------------------------------------------------- /data/spawn-clx.txt: -------------------------------------------------------------------------------- 1 | cl22clx --width 128 monsters/falspear/phalla.cl2 monsters/falspear/phalld.cl2 monsters/falspear/phallh.cl2 monsters/falspear/phalln.cl2 monsters/falspear/phalls.cl2 monsters/falspear/phallw.cl2 2 | cl22clx --width 128 monsters/falsword/falla.cl2 monsters/falsword/falld.cl2 monsters/falsword/fallh.cl2 monsters/falsword/falln.cl2 monsters/falsword/falls.cl2 monsters/falsword/fallw.cl2 3 | cl22clx --width 128 monsters/scav/scava.cl2 monsters/scav/scavd.cl2 monsters/scav/scavh.cl2 monsters/scav/scavn.cl2 monsters/scav/scavs.cl2 monsters/scav/scavw.cl2 4 | cl22clx --width 128 monsters/skelaxe/sklaxa.cl2 monsters/skelaxe/sklaxd.cl2 monsters/skelaxe/sklaxh.cl2 monsters/skelaxe/sklaxn.cl2 monsters/skelaxe/sklaxs.cl2 monsters/skelaxe/sklaxw.cl2 5 | cl22clx --width 128 monsters/skelbow/sklbwa.cl2 monsters/skelbow/sklbwd.cl2 monsters/skelbow/sklbwh.cl2 monsters/skelbow/sklbwn.cl2 monsters/skelbow/sklbws.cl2 monsters/skelbow/sklbww.cl2 6 | cl22clx --width 128 monsters/skelsd/sklsra.cl2 monsters/skelsd/sklsrd.cl2 monsters/skelsd/sklsrh.cl2 monsters/skelsd/sklsrn.cl2 monsters/skelsd/sklsrs.cl2 monsters/skelsd/sklsrw.cl2 7 | cl22clx --width 128 monsters/zombie/zombiea.cl2 monsters/zombie/zombied.cl2 monsters/zombie/zombieh.cl2 monsters/zombie/zombien.cl2 monsters/zombie/zombiew.cl2 8 | cl22clx --width 96 monsters/bat/bata.cl2 monsters/bat/batd.cl2 monsters/bat/bath.cl2 monsters/bat/batn.cl2 monsters/bat/batw.cl2 9 | cl22clx --width 96 monsters/golem/golema.cl2 monsters/golem/golemd.cl2 monsters/golem/golems.cl2 monsters/golem/golemw.cl2 10 | cel2clx --width 128 towners/animals/cow.cel 11 | cel2clx --width 96 towners/smith/smithn.cel towners/twnf/twnfn.cel towners/butch/deadguy.cel towners/townwmn1/witch.cel towners/townwmn1/wmnn.cel towners/townboy/pegkid1.cel towners/healer/healer.cel towners/strytell/strytell.cel towners/drunk/twndrunk.cel 12 | cl22clx --width 96 missiles/arrows.cl2 13 | cl22clx --width 96 --combine missiles/fireba1.cl2 missiles/fireba2.cl2 missiles/fireba3.cl2 missiles/fireba4.cl2 missiles/fireba5.cl2 missiles/fireba6.cl2 missiles/fireba7.cl2 missiles/fireba8.cl2 missiles/fireba9.cl2 missiles/fireba10.cl2 missiles/fireba11.cl2 missiles/fireba12.cl2 missiles/fireba13.cl2 missiles/fireba14.cl2 missiles/fireba15.cl2 missiles/fireba16.cl2 14 | cl22clx --width 96 --combine missiles/guard1.cl2 missiles/guard2.cl2 missiles/guard3.cl2 15 | cl22clx --width 96 missiles/lghning.cl2 16 | cl22clx --width 128 --combine missiles/firewal1.cl2 missiles/firewal2.cl2 17 | cl22clx --width 128 missiles/magblos.cl2 18 | cl22clx --width 96 --combine missiles/portal1.cl2 missiles/portal2.cl2 19 | cl22clx --width 160 missiles/bluexfr.cl2 20 | cl22clx --width 160 missiles/bluexbk.cl2 21 | cl22clx --width 96 missiles/manashld.cl2 22 | cl22clx --width 96 --combine missiles/farrow1.cl2 missiles/farrow2.cl2 missiles/farrow3.cl2 missiles/farrow4.cl2 missiles/farrow5.cl2 missiles/farrow6.cl2 missiles/farrow7.cl2 missiles/farrow8.cl2 missiles/farrow9.cl2 missiles/farrow10.cl2 missiles/farrow11.cl2 missiles/farrow12.cl2 missiles/farrow13.cl2 missiles/farrow14.cl2 missiles/farrow15.cl2 missiles/farrow16.cl2 23 | cl22clx --width 96 missiles/newexp.cl2 24 | cl22clx --width 128 missiles/shatter1.cl2 25 | cl22clx --width 160 missiles/bigexp.cl2 26 | cl22clx --width 96 missiles/inferno.cl2 27 | cl22clx --width 96 missiles/thinlght.cl2 28 | cl22clx --width 128 missiles/flare.cl2 29 | cl22clx --width 128 missiles/flareexp.cl2 30 | cl22clx --width 128 --combine missiles/magball1.cl2 missiles/magball2.cl2 missiles/magball3.cl2 missiles/magball4.cl2 missiles/magball5.cl2 missiles/magball6.cl2 missiles/magball7.cl2 missiles/magball8.cl2 31 | cl22clx --width 64 missiles/miniltng.cl2 32 | cl22clx --width 96 --combine missiles/holy1.cl2 missiles/holy2.cl2 missiles/holy3.cl2 missiles/holy4.cl2 missiles/holy5.cl2 missiles/holy6.cl2 missiles/holy7.cl2 missiles/holy8.cl2 missiles/holy9.cl2 missiles/holy10.cl2 missiles/holy11.cl2 missiles/holy12.cl2 missiles/holy13.cl2 missiles/holy14.cl2 missiles/holy15.cl2 missiles/holy16.cl2 33 | cl22clx --width 160 missiles/holyexpl.cl2 34 | cl22clx --width 96 --combine missiles/larrow1.cl2 missiles/larrow2.cl2 missiles/larrow3.cl2 missiles/larrow4.cl2 missiles/larrow5.cl2 missiles/larrow6.cl2 missiles/larrow7.cl2 missiles/larrow8.cl2 missiles/larrow9.cl2 missiles/larrow10.cl2 missiles/larrow11.cl2 missiles/larrow12.cl2 missiles/larrow13.cl2 missiles/larrow14.cl2 missiles/larrow15.cl2 missiles/larrow16.cl2 35 | cl22clx --width 96 --combine missiles/acidbf1.cl2 missiles/acidbf2.cl2 missiles/acidbf3.cl2 missiles/acidbf4.cl2 missiles/acidbf5.cl2 missiles/acidbf6.cl2 missiles/acidbf7.cl2 missiles/acidbf8.cl2 missiles/acidbf9.cl2 missiles/acidbf10.cl2 missiles/acidbf11.cl2 missiles/acidbf12.cl2 missiles/acidbf13.cl2 missiles/acidbf14.cl2 missiles/acidbf15.cl2 missiles/acidbf16.cl2 36 | cl22clx --width 96 missiles/acidspla.cl2 37 | cl22clx --width 96 --combine missiles/acidpud1.cl2 missiles/acidpud2.cl2 38 | cl22clx --width 96 --combine missiles/firerun1.cl2 missiles/firerun2.cl2 missiles/firerun3.cl2 missiles/firerun4.cl2 missiles/firerun5.cl2 missiles/firerun6.cl2 missiles/firerun7.cl2 missiles/firerun8.cl2 39 | cl22clx --width 96 missiles/ressur1.cl2 40 | cl22clx --width 96 --combine missiles/sklball1.cl2 missiles/sklball2.cl2 missiles/sklball3.cl2 missiles/sklball4.cl2 missiles/sklball5.cl2 missiles/sklball6.cl2 missiles/sklball7.cl2 missiles/sklball8.cl2 missiles/sklball9.cl2 41 | cl22clx --width 96 --combine missiles/rportal1.cl2 missiles/rportal2.cl2 42 | cl22clx --width 160 missiles/fireplar.cl2 43 | cl22clx --width 96 missiles/scubmisb.cl2 44 | cl22clx --width 128 missiles/scbsexpb.cl2 45 | cl22clx --width 96 missiles/scubmisc.cl2 46 | cl22clx --width 128 missiles/scbsexpc.cl2 47 | cl22clx --width 96 missiles/scubmisd.cl2 48 | cl22clx --width 128 missiles/scbsexpd.cl2 49 | # Warrior: 50 | cl22clx --width 96 plrgfx/warrior/wmu/wmuht.cl2 plrgfx/warrior/wmu/wmufm.cl2 plrgfx/warrior/wmu/wmuas.cl2 plrgfx/warrior/wmu/wmuqm.cl2 plrgfx/warrior/wmu/wmuaw.cl2 plrgfx/warrior/wmu/wmubl.cl2 plrgfx/warrior/wmu/wmust.cl2 plrgfx/warrior/wmu/wmulm.cl2 plrgfx/warrior/wmu/wmuwl.cl2 plrgfx/warrior/whn/whnqm.cl2 plrgfx/warrior/whn/whnaw.cl2 plrgfx/warrior/whn/whnlm.cl2 plrgfx/warrior/whn/whnst.cl2 plrgfx/warrior/whn/whnfm.cl2 plrgfx/warrior/whn/whnwl.cl2 plrgfx/warrior/whn/whnas.cl2 plrgfx/warrior/whn/whnht.cl2 plrgfx/warrior/whb/whbaw.cl2 plrgfx/warrior/whb/whbst.cl2 plrgfx/warrior/whb/whbat.cl2 plrgfx/warrior/whb/whbfm.cl2 plrgfx/warrior/whb/whblm.cl2 plrgfx/warrior/whb/whbqm.cl2 plrgfx/warrior/whb/whbht.cl2 plrgfx/warrior/whb/whbwl.cl2 plrgfx/warrior/whb/whbas.cl2 plrgfx/warrior/wlu/wlust.cl2 plrgfx/warrior/wlu/wluht.cl2 plrgfx/warrior/wlu/wluas.cl2 plrgfx/warrior/wlu/wlufm.cl2 plrgfx/warrior/wlu/wluqm.cl2 plrgfx/warrior/wlu/wlubl.cl2 plrgfx/warrior/wlu/wluaw.cl2 plrgfx/warrior/wlu/wlulm.cl2 plrgfx/warrior/wlu/wluwl.cl2 plrgfx/warrior/whd/whdwl.cl2 plrgfx/warrior/whd/whdfm.cl2 plrgfx/warrior/whd/whdht.cl2 plrgfx/warrior/whd/whdaw.cl2 plrgfx/warrior/whd/whdlm.cl2 plrgfx/warrior/whd/whdbl.cl2 plrgfx/warrior/whd/whdqm.cl2 plrgfx/warrior/whd/whdst.cl2 plrgfx/warrior/whd/whdas.cl2 plrgfx/warrior/wlh/wlhwl.cl2 plrgfx/warrior/wlh/wlhst.cl2 plrgfx/warrior/wlh/wlhaw.cl2 plrgfx/warrior/wlh/wlhfm.cl2 plrgfx/warrior/wlh/wlhbl.cl2 plrgfx/warrior/wlh/wlhqm.cl2 plrgfx/warrior/wlh/wlhas.cl2 plrgfx/warrior/wlh/wlhht.cl2 plrgfx/warrior/wlh/wlhlm.cl2 plrgfx/warrior/wla/wlaht.cl2 plrgfx/warrior/wla/wlaqm.cl2 plrgfx/warrior/wla/wlaas.cl2 plrgfx/warrior/wla/wlaaw.cl2 plrgfx/warrior/wla/wlast.cl2 plrgfx/warrior/wla/wlafm.cl2 plrgfx/warrior/wla/wlalm.cl2 plrgfx/warrior/wla/wlawl.cl2 plrgfx/warrior/wmm/wmmfm.cl2 plrgfx/warrior/wmm/wmmlm.cl2 plrgfx/warrior/wmm/wmmst.cl2 plrgfx/warrior/wmm/wmmas.cl2 plrgfx/warrior/wmm/wmmaw.cl2 plrgfx/warrior/wmm/wmmht.cl2 plrgfx/warrior/wmm/wmmqm.cl2 plrgfx/warrior/wmm/wmmwl.cl2 plrgfx/warrior/wha/whalm.cl2 plrgfx/warrior/wha/whaqm.cl2 plrgfx/warrior/wha/whaht.cl2 plrgfx/warrior/wha/whawl.cl2 plrgfx/warrior/wha/whaas.cl2 plrgfx/warrior/wha/whast.cl2 plrgfx/warrior/wha/whaaw.cl2 plrgfx/warrior/wha/whafm.cl2 plrgfx/warrior/wmn/wmnht.cl2 plrgfx/warrior/wmn/wmnwl.cl2 plrgfx/warrior/wmn/wmnqm.cl2 plrgfx/warrior/wmn/wmnst.cl2 plrgfx/warrior/wmn/wmnas.cl2 plrgfx/warrior/wmn/wmnfm.cl2 plrgfx/warrior/wmn/wmnlm.cl2 plrgfx/warrior/wmn/wmnaw.cl2 plrgfx/warrior/wlm/wlmwl.cl2 plrgfx/warrior/wlm/wlmas.cl2 plrgfx/warrior/wlm/wlmfm.cl2 plrgfx/warrior/wlm/wlmqm.cl2 plrgfx/warrior/wlm/wlmst.cl2 plrgfx/warrior/wlm/wlmlm.cl2 plrgfx/warrior/wlm/wlmht.cl2 plrgfx/warrior/wlm/wlmaw.cl2 plrgfx/warrior/whs/whsqm.cl2 plrgfx/warrior/whs/whsfm.cl2 plrgfx/warrior/whs/whswl.cl2 plrgfx/warrior/whs/whsas.cl2 plrgfx/warrior/whs/whsst.cl2 plrgfx/warrior/whs/whsht.cl2 plrgfx/warrior/whs/whslm.cl2 plrgfx/warrior/whs/whsaw.cl2 plrgfx/warrior/wmt/wmtht.cl2 plrgfx/warrior/wmt/wmtqm.cl2 plrgfx/warrior/wmt/wmtst.cl2 plrgfx/warrior/wmt/wmtas.cl2 plrgfx/warrior/wmt/wmtwl.cl2 plrgfx/warrior/wmt/wmtfm.cl2 plrgfx/warrior/wmt/wmtaw.cl2 plrgfx/warrior/wmt/wmtlm.cl2 plrgfx/warrior/whm/whmwl.cl2 plrgfx/warrior/whm/whmaw.cl2 plrgfx/warrior/whm/whmlm.cl2 plrgfx/warrior/whm/whmqm.cl2 plrgfx/warrior/whm/whmst.cl2 plrgfx/warrior/whm/whmas.cl2 plrgfx/warrior/whm/whmht.cl2 plrgfx/warrior/whm/whmfm.cl2 plrgfx/warrior/wma/wmafm.cl2 plrgfx/warrior/wma/wmalm.cl2 plrgfx/warrior/wma/wmaht.cl2 plrgfx/warrior/wma/wmaaw.cl2 plrgfx/warrior/wma/wmast.cl2 plrgfx/warrior/wma/wmawl.cl2 plrgfx/warrior/wma/wmaqm.cl2 plrgfx/warrior/wma/wmaas.cl2 plrgfx/warrior/wld/wldht.cl2 plrgfx/warrior/wld/wldlm.cl2 plrgfx/warrior/wld/wldbl.cl2 plrgfx/warrior/wld/wldst.cl2 plrgfx/warrior/wld/wldqm.cl2 plrgfx/warrior/wld/wldaw.cl2 plrgfx/warrior/wld/wldfm.cl2 plrgfx/warrior/wld/wldwl.cl2 plrgfx/warrior/wld/wldas.cl2 plrgfx/warrior/whh/whhbl.cl2 plrgfx/warrior/whh/whhas.cl2 plrgfx/warrior/whh/whhaw.cl2 plrgfx/warrior/whh/whhst.cl2 plrgfx/warrior/whh/whhqm.cl2 plrgfx/warrior/whh/whhwl.cl2 plrgfx/warrior/whh/whhfm.cl2 plrgfx/warrior/whh/whhlm.cl2 plrgfx/warrior/whh/whhht.cl2 plrgfx/warrior/wlb/wlbwl.cl2 plrgfx/warrior/wlb/wlbht.cl2 plrgfx/warrior/wlb/wlbat.cl2 plrgfx/warrior/wlb/wlbqm.cl2 plrgfx/warrior/wlb/wlbst.cl2 plrgfx/warrior/wlb/wlbaw.cl2 plrgfx/warrior/wlb/wlblm.cl2 plrgfx/warrior/wlb/wlbfm.cl2 plrgfx/warrior/wlb/wlbas.cl2 plrgfx/warrior/wln/wlnst.cl2 plrgfx/warrior/wln/wlnas.cl2 plrgfx/warrior/wln/wlnfm.cl2 plrgfx/warrior/wln/wlnaw.cl2 plrgfx/warrior/wln/wlnwl.cl2 plrgfx/warrior/wln/wlnht.cl2 plrgfx/warrior/wln/wlnlm.cl2 plrgfx/warrior/wln/wlnqm.cl2 plrgfx/warrior/wmb/wmbwl.cl2 plrgfx/warrior/wmb/wmbaw.cl2 plrgfx/warrior/wmb/wmbht.cl2 plrgfx/warrior/wmb/wmbas.cl2 plrgfx/warrior/wmb/wmbfm.cl2 plrgfx/warrior/wmb/wmbat.cl2 plrgfx/warrior/wmb/wmbst.cl2 plrgfx/warrior/wmb/wmblm.cl2 plrgfx/warrior/wmb/wmbqm.cl2 plrgfx/warrior/whu/whuaw.cl2 plrgfx/warrior/whu/whubl.cl2 plrgfx/warrior/whu/whust.cl2 plrgfx/warrior/whu/whuht.cl2 plrgfx/warrior/whu/whufm.cl2 plrgfx/warrior/whu/whuas.cl2 plrgfx/warrior/whu/whuqm.cl2 plrgfx/warrior/whu/whuwl.cl2 plrgfx/warrior/whu/whulm.cl2 plrgfx/warrior/wls/wlsht.cl2 plrgfx/warrior/wls/wlsst.cl2 plrgfx/warrior/wls/wlswl.cl2 plrgfx/warrior/wls/wlslm.cl2 plrgfx/warrior/wls/wlsqm.cl2 plrgfx/warrior/wls/wlsas.cl2 plrgfx/warrior/wls/wlsaw.cl2 plrgfx/warrior/wls/wlsfm.cl2 plrgfx/warrior/wlt/wltqm.cl2 plrgfx/warrior/wlt/wltfm.cl2 plrgfx/warrior/wlt/wltwl.cl2 plrgfx/warrior/wlt/wltst.cl2 plrgfx/warrior/wlt/wltas.cl2 plrgfx/warrior/wlt/wltht.cl2 plrgfx/warrior/wlt/wltaw.cl2 plrgfx/warrior/wlt/wltlm.cl2 plrgfx/warrior/wmh/wmhaw.cl2 plrgfx/warrior/wmh/wmhlm.cl2 plrgfx/warrior/wmh/wmhqm.cl2 plrgfx/warrior/wmh/wmhfm.cl2 plrgfx/warrior/wmh/wmhbl.cl2 plrgfx/warrior/wmh/wmhst.cl2 plrgfx/warrior/wmh/wmhht.cl2 plrgfx/warrior/wmh/wmhwl.cl2 plrgfx/warrior/wmh/wmhas.cl2 plrgfx/warrior/wms/wmslm.cl2 plrgfx/warrior/wms/wmsht.cl2 plrgfx/warrior/wms/wmsst.cl2 plrgfx/warrior/wms/wmswl.cl2 plrgfx/warrior/wms/wmsqm.cl2 plrgfx/warrior/wms/wmsas.cl2 plrgfx/warrior/wms/wmsfm.cl2 plrgfx/warrior/wms/wmsaw.cl2 plrgfx/warrior/wht/whtlm.cl2 plrgfx/warrior/wht/whtqm.cl2 plrgfx/warrior/wht/whtwl.cl2 plrgfx/warrior/wht/whtfm.cl2 plrgfx/warrior/wht/whtht.cl2 plrgfx/warrior/wht/whtst.cl2 plrgfx/warrior/wht/whtas.cl2 plrgfx/warrior/wht/whtaw.cl2 plrgfx/warrior/wmd/wmdlm.cl2 plrgfx/warrior/wmd/wmdht.cl2 plrgfx/warrior/wmd/wmdqm.cl2 plrgfx/warrior/wmd/wmdas.cl2 plrgfx/warrior/wmd/wmdaw.cl2 plrgfx/warrior/wmd/wmdst.cl2 plrgfx/warrior/wmd/wmdbl.cl2 plrgfx/warrior/wmd/wmdfm.cl2 plrgfx/warrior/wmd/wmdwl.cl2 51 | cl22clx --width 128 plrgfx/warrior/wmu/wmuat.cl2 plrgfx/warrior/whn/whnat.cl2 plrgfx/warrior/wlu/wluat.cl2 plrgfx/warrior/wlh/wlhat.cl2 plrgfx/warrior/whd/whdat.cl2 plrgfx/warrior/wla/wlaat.cl2 plrgfx/warrior/wmm/wmmat.cl2 plrgfx/warrior/wha/whaat.cl2 plrgfx/warrior/wmn/wmnat.cl2 plrgfx/warrior/wlm/wlmat.cl2 plrgfx/warrior/whs/whsat.cl2 plrgfx/warrior/whm/whmat.cl2 plrgfx/warrior/wma/wmaat.cl2 plrgfx/warrior/wld/wldat.cl2 plrgfx/warrior/whh/whhat.cl2 plrgfx/warrior/wln/wlnat.cl2 plrgfx/warrior/whu/whuat.cl2 plrgfx/warrior/wls/wlsat.cl2 plrgfx/warrior/wlt/wltat.cl2 plrgfx/warrior/wmh/wmhat.cl2 plrgfx/warrior/wms/wmsat.cl2 plrgfx/warrior/wmt/wmtat.cl2 plrgfx/warrior/wht/whtat.cl2 plrgfx/warrior/wmd/wmdat.cl2 52 | # Warrior: Corpse 53 | cl22clx --width 128 plrgfx/warrior/whn/whndt.cl2 plrgfx/warrior/wln/wlndt.cl2 plrgfx/warrior/wmn/wmndt.cl2 54 | cel2clx --width 640 ctrlpan/panel8.cel 55 | cel2clx --width 88 ctrlpan/p8bulbs.cel 56 | cel2clx --width 640 ctrlpan/talkpanl.cel 57 | cel2clx --width 33 ctrlpan/p8but2.cel 58 | cel2clx --width 61 ctrlpan/talkbutt.cel 59 | cel2clx --width 71 ctrlpan/panel8bu.cel 60 | cel2clx --width 95,41,41,41,41,41,41,41,41 data/charbut.cel 61 | cel2clx --width 32 items/duricons.cel 62 | cel2clx --width 261 ctrlpan/golddrop.cel 63 | cel2clx --width 33,32,32,32,32,32,32,32,32,32,23,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56 data/inv/objcurs.cel 64 | cel2clx --width 56 ctrlpan/spelicon.cel 65 | cel2clx --width 320 data/quest.cel data/spellbk.cel data/inv/inv.cel 66 | cel2clx --width 76 data/spellbkb.cel 67 | cel2clx --width 37 data/spelli2.cel 68 | cel2clx --width 128 objects/altboy.cel objects/lshrineg.cel objects/lzstand.cel objects/nude2.cel objects/mfountn.cel objects/pfountn.cel objects/tfountn.cel objects/rshrineg.cel objects/sarc.cel objects/tnudem.cel objects/tnudew.cel objects/tsoul.cel 69 | cel2clx --width 160 objects/burncros.cel 70 | cel2clx --width 64 objects/l1braz.cel objects/l1doors.cel objects/l2doors.cel objects/l3doors.cel objects/miniwatr.cel objects/traphole.cel 71 | cel2clx --width 96 objects/angel.cel objects/armstand.cel objects/banner.cel objects/barrel.cel objects/barrelex.cel objects/bcase.cel objects/bkslbrnt.cel objects/bloodfnt.cel objects/book1.cel objects/book2.cel objects/bshelf.cel objects/candle2.cel objects/cauldren.cel objects/chest1.cel objects/chest2.cel objects/chest3.cel objects/cruxsk1.cel objects/cruxsk2.cel objects/cruxsk3.cel objects/decap.cel objects/flame1.cel objects/goatshrn.cel objects/lever.cel objects/mcirl.cel objects/mushptch.cel objects/pedistl.cel objects/prsrplt1.cel objects/rockstan.cel objects/skulfire.cel objects/skulpile.cel objects/skulstik.cel objects/switch4.cel objects/weapstnd.cel objects/wtorch1.cel objects/wtorch2.cel objects/wtorch3.cel objects/wtorch4.cel 72 | cel2clx --width 96 items/armor2.cel items/axe.cel items/fbttle.cel items/bow.cel items/goldflip.cel items/helmut.cel items/mace.cel items/shield.cel items/swrdflip.cel items/rock.cel items/cleaver.cel items/staff.cel items/ring.cel items/crownf.cel items/larmor.cel items/wshield.cel items/scroll.cel items/fplatear.cel items/fbook.cel items/food.cel items/fbttlebb.cel items/fbttledy.cel items/fbttleor.cel items/fbttlebr.cel items/fbttlebl.cel items/fbttleby.cel items/fbttlewh.cel items/fbttledb.cel items/fear.cel items/fbrain.cel items/fmush.cel items/innsign.cel items/bldstn.cel items/fanvil.cel items/flazstaf.cel 73 | cel2clx --width 296 data/diabsmal.cel 74 | cel2clx --width 640 gendata/cuttt.cel gendata/cut2.cel gendata/cut3.cel gendata/cut4.cel gendata/cutportl.cel gendata/cutportr.cel gendata/cutgate.cel gendata/cutstart.cel gendata/cutl1d.cel 75 | cel2clx --width 12 data/textslid.cel 76 | cel2clx --width 271 data/textbox2.cel 77 | cel2clx --width 48 data/pentspin.cel 78 | cel2clx --width 27 data/option.cel 79 | cel2clx --width 287 data/optbar.cel 80 | cel2clx --width 12 data/pentspn2.cel 81 | cel2clx --width 591 data/textbox.cel 82 | cel2clx --width 64 data/square.cel 83 | cel2clx --width 64 levels/towndata/towns.cel 84 | cel2clx --width 64 levels/l1data/l1s.cel 85 | pcx2clx --num-sprites 15 ui_art/but_sml.pcx 86 | pcx2clx --export-palette ui_art/credits.pcx 87 | pcx2clx --transparent-color 0 ui_art/cursor.pcx 88 | pcx2clx --num-sprites 8 --transparent-color 250 ui_art/focus16.pcx 89 | pcx2clx --num-sprites 8 --transparent-color 250 ui_art/focus42.pcx 90 | pcx2clx --num-sprites 8 --transparent-color 250 ui_art/focus.pcx 91 | pcx2clx --num-sprites 4 ui_art/heros.pcx 92 | pcx2clx --transparent-color 250 --num-sprites 15 ui_art/logo.pcx 93 | pcx2clx --transparent-color 255 ui_art/lpopup.pcx 94 | pcx2clx --transparent-color 255 ui_art/lrpopup.pcx 95 | pcx2clx --export-palette ui_art/mainmenu.pcx 96 | pcx2clx ui_art/prog_bg.pcx 97 | pcx2clx ui_art/prog_fil.pcx 98 | pcx2clx --transparent-color 0 ui_art/r1_gry.pcx 99 | pcx2clx --num-sprites 4 ui_art/sb_arrow.pcx 100 | pcx2clx ui_art/sb_bg.pcx 101 | pcx2clx ui_art/sb_thumb.pcx 102 | pcx2clx --export-palette ui_art/selconn.pcx 103 | pcx2clx --export-palette ui_art/selgame.pcx 104 | pcx2clx --export-palette ui_art/selhero.pcx 105 | pcx2clx --transparent-color 250 --num-sprites 15 ui_art/smlogo.pcx 106 | pcx2clx --transparent-color 255 ui_art/spopup.pcx 107 | pcx2clx --transparent-color 255 ui_art/srpopup.pcx 108 | pcx2clx --export-palette ui_art/swmmenu.pcx 109 | pcx2clx --export-palette ui_art/title.pcx 110 | -------------------------------------------------------------------------------- /src/unpack_and_minify_mpq.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | #include "embedded_files.h" 27 | #include "extract_spell_icons.hpp" 28 | 29 | namespace { 30 | 31 | constexpr char kHelp[] = R"(Usage: unpack_and_minify_mpq [-h] [--output-dir OUTPUT_DIR] [--listfile LISTFILE] [--mp3] [mpq ...] 32 | 33 | Unpacks Diablo and/or Hellfire MPQ(s), converts all the graphics to CLX, and, optionally, converts audio to MP3. 34 | If no MPQs are passed on the command line, converts all the MPQs in the current directory. 35 | 36 | Options: 37 | --mp3 Convert WAV files to MP3. Not implemented. 38 | --output-dir OUTPUT_DIR Override output directory. Default: current directory. 39 | )"; 40 | 41 | void PrintHelp() 42 | { 43 | std::cerr << kHelp << std::endl; 44 | } 45 | 46 | bool IsSaveFileExtension(const std::filesystem::path &ext) 47 | { 48 | return ext == ".hsv" || ext == ".sv"; 49 | } 50 | 51 | std::string SrcName(const std::filesystem::path &mpq) 52 | { 53 | std::string result = mpq.stem().string(); 54 | if (result == "DIABDAT") 55 | result = "diabdat"; 56 | return result; 57 | } 58 | 59 | std::string DestName(const std::string &srcName) 60 | { 61 | if (srcName == "hfmonk" || srcName == "hfmusic" || srcName == "hfvoice") 62 | return "hellfire"; 63 | return srcName; 64 | } 65 | 66 | std::span GetSaveMpqFiles() 67 | { 68 | return { embedded_save_listfile_data, embedded_save_listfile_size }; 69 | } 70 | 71 | std::span GetMpqFiles(std::string_view srcName) 72 | { 73 | if (srcName == "spawn") 74 | return { embedded_spawn_listfile_data, embedded_spawn_listfile_size }; 75 | if (srcName == "diabdat") 76 | return { embedded_diabdat_listfile_data, embedded_diabdat_listfile_size }; 77 | if (srcName == "hellfire") 78 | return { embedded_hellfire_listfile_data, embedded_hellfire_listfile_size }; 79 | if (srcName == "hfmonk") 80 | return { embedded_hfmonk_listfile_data, embedded_hfmonk_listfile_size }; 81 | if (srcName == "hfmusic") 82 | return { embedded_hfmusic_listfile_data, embedded_hfmusic_listfile_size }; 83 | if (srcName == "hfvoice") 84 | return { embedded_hfvoice_listfile_data, embedded_hfvoice_listfile_size }; 85 | return {}; 86 | } 87 | 88 | std::span GetExcludedFiles(std::string_view srcName) 89 | { 90 | if (srcName == "spawn") 91 | return { embedded_spawn_rm_data, embedded_spawn_rm_size }; 92 | if (srcName == "diabdat") 93 | return { embedded_diabdat_rm_data, embedded_diabdat_rm_size }; 94 | if (srcName == "hellfire") 95 | return { embedded_hellfire_rm_data, embedded_hellfire_rm_size }; 96 | if (srcName == "hfmonk") 97 | return { embedded_hfmonk_rm_data, embedded_hfmonk_rm_size }; 98 | if (srcName == "hfmusic") 99 | return { embedded_hfmusic_rm_data, embedded_hfmusic_rm_size }; 100 | if (srcName == "hfvoice") 101 | return { embedded_hfvoice_rm_data, embedded_hfvoice_rm_size }; 102 | return {}; 103 | } 104 | 105 | std::span GetClxCommands(std::string_view srcName) 106 | { 107 | if (srcName == "spawn") 108 | return { embedded_spawn_clx_data, embedded_spawn_clx_size }; 109 | if (srcName == "diabdat") 110 | return { embedded_diabdat_clx_data, embedded_diabdat_clx_size }; 111 | if (srcName == "hellfire") 112 | return { embedded_hellfire_clx_data, embedded_hellfire_clx_size }; 113 | if (srcName == "hfmonk") 114 | return { embedded_hfmonk_clx_data, embedded_hfmonk_clx_size }; 115 | return {}; 116 | } 117 | 118 | struct Cl2ToClxCommand { 119 | std::vector widths; 120 | std::vector combine; 121 | }; 122 | struct CelToClxCommand { 123 | std::vector widths; 124 | }; 125 | struct PcxToClxCommand { 126 | size_t numFrames = 1; 127 | std::optional transparentColor; 128 | bool exportPalette = false; 129 | }; 130 | 131 | using ClxCommand = std::variant; 132 | 133 | struct ClxCommandAndFiles { 134 | ClxCommand command; 135 | std::vector files; 136 | bool combine = false; 137 | }; 138 | 139 | template 140 | IntT ParseInt( 141 | std::string_view str, IntT min = std::numeric_limits::min(), 142 | IntT max = std::numeric_limits::max()) 143 | { 144 | IntT result; 145 | auto [ptr, ec] { std::from_chars(str.begin(), str.end(), result) }; 146 | if (ec == std::errc::result_out_of_range || result < min || result > max) { 147 | std::cerr << "expected a number between " << min << " and " << max << ", got " << str << std::endl; 148 | std::exit(1); 149 | } 150 | if (ec != std::errc()) { 151 | std::cerr << "expected a number, got " << str << std::endl; 152 | std::exit(1); 153 | } 154 | return result; 155 | } 156 | 157 | template 158 | std::vector ParseIntList( 159 | std::string_view str, IntT min = std::numeric_limits::min(), 160 | IntT max = std::numeric_limits::max()) 161 | { 162 | std::vector result; 163 | std::string_view remaining = str; 164 | std::string_view::size_type commaPos; 165 | while (true) { 166 | commaPos = remaining.find(','); 167 | const std::string_view part = remaining.substr(0, commaPos); 168 | result.push_back(ParseInt(part, min, max)); 169 | if (commaPos == std::string_view::npos) 170 | break; 171 | remaining.remove_prefix(commaPos + 1); 172 | } 173 | return result; 174 | } 175 | 176 | ClxCommandAndFiles 177 | ParseCl2ToClxCommand(std::string_view line) 178 | { 179 | Cl2ToClxCommand command; 180 | std::vector files; 181 | bool combine = false; 182 | while (!line.empty()) { 183 | const std::string_view arg = line.substr(0, line.find(' ')); 184 | line.remove_prefix(std::min(arg.size() + 1, line.size())); 185 | if (arg.empty()) 186 | continue; 187 | if (arg == "--width") { 188 | const std::string_view widths = line.substr(0, line.find(' ')); 189 | line.remove_prefix(std::min(widths.size() + 1, line.size())); 190 | command.widths = ParseIntList(widths); 191 | } else if (arg == "--combine") { 192 | combine = true; 193 | } else if (arg[0] == '-') { 194 | std::cerr << "Unknown argument: " << arg << std::endl; 195 | std::exit(1); 196 | } else { 197 | files.emplace_back(arg); 198 | } 199 | } 200 | return ClxCommandAndFiles { std::move(command), std::move(files), combine }; 201 | } 202 | 203 | ClxCommandAndFiles 204 | ParseCelToClxCommand(std::string_view line) 205 | { 206 | CelToClxCommand command; 207 | std::vector files; 208 | while (!line.empty()) { 209 | const std::string_view arg = line.substr(0, line.find(' ')); 210 | line.remove_prefix(std::min(arg.size() + 1, line.size())); 211 | if (arg.empty()) 212 | continue; 213 | if (arg == "--width") { 214 | const std::string_view widths = line.substr(0, line.find(' ')); 215 | line.remove_prefix(std::min(widths.size() + 1, line.size())); 216 | command.widths = ParseIntList(widths); 217 | } else if (arg[0] == '-') { 218 | std::cerr << "Unknown argument: " << arg << std::endl; 219 | std::exit(1); 220 | } else { 221 | files.emplace_back(arg); 222 | } 223 | } 224 | return ClxCommandAndFiles { std::move(command), std::move(files), /*.combine=*/false }; 225 | } 226 | 227 | ClxCommandAndFiles 228 | ParsePcxToClxCommand(std::string_view line) 229 | { 230 | PcxToClxCommand command; 231 | std::vector files; 232 | while (!line.empty()) { 233 | const std::string_view arg = line.substr(0, line.find(' ')); 234 | line.remove_prefix(std::min(arg.size() + 1, line.size())); 235 | if (arg.empty()) 236 | continue; 237 | if (arg == "--num-sprites") { 238 | const std::string_view numStr = line.substr(0, line.find(' ')); 239 | line.remove_prefix(std::min(numStr.size() + 1, line.size())); 240 | command.numFrames = ParseInt(numStr); 241 | } else if (arg == "--transparent-color") { 242 | const std::string_view colorStr = line.substr(0, line.find(' ')); 243 | line.remove_prefix(std::min(colorStr.size() + 1, line.size())); 244 | command.transparentColor = ParseInt(colorStr); 245 | } else if (arg == "--export-palette") { 246 | command.exportPalette = true; 247 | } else if (arg[0] == '-') { 248 | std::cerr << "Unknown argument: " << arg << std::endl; 249 | std::exit(1); 250 | } else { 251 | files.emplace_back(arg); 252 | } 253 | } 254 | return ClxCommandAndFiles { std::move(command), std::move(files), /*.combine=*/false }; 255 | } 256 | 257 | std::optional 258 | ParseClxCommand(std::string_view line) 259 | { 260 | const std::string_view arg = line.substr(0, line.find(' ')); 261 | line.remove_prefix(std::min(arg.size() + 1, line.size())); 262 | if (arg.empty() || arg[0] == '#') 263 | return std::nullopt; 264 | if (arg == "cl22clx") 265 | return ParseCl2ToClxCommand(line); 266 | if (arg == "cel2clx") 267 | return ParseCelToClxCommand(line); 268 | if (arg == "pcx2clx") 269 | return ParsePcxToClxCommand(line); 270 | std::cerr << "Unknown command: " << arg << std::endl; 271 | std::exit(1); 272 | } 273 | 274 | struct string_hash { 275 | using is_transparent = void; 276 | [[nodiscard]] size_t operator()(const char *txt) const 277 | { 278 | return std::hash {}(txt); 279 | } 280 | [[nodiscard]] size_t operator()(std::string_view txt) const 281 | { 282 | return std::hash {}(txt); 283 | } 284 | [[nodiscard]] size_t operator()(const std::string &txt) const 285 | { 286 | return std::hash {}(txt); 287 | } 288 | }; 289 | template 290 | using HeterogenousUnorderedStringMap = std::unordered_map>; 291 | 292 | struct ClxCombineAggregator { 293 | ClxCommand command; 294 | std::vector files; 295 | bool processed = false; 296 | }; 297 | 298 | struct ClxCommands { 299 | std::list combine_aggregators; 300 | HeterogenousUnorderedStringMap> per_file; 301 | }; 302 | 303 | std::string DefaultCombinedClxFilename(std::string_view firstPath) 304 | { 305 | std::string outputFilename = std::filesystem::path(firstPath).stem().string(); 306 | size_t numSuffixLength = 0; 307 | while (numSuffixLength < outputFilename.size()) { 308 | const char c = outputFilename[outputFilename.size() - numSuffixLength - 1]; 309 | if (c < '0' || c > '9') 310 | break; 311 | ++numSuffixLength; 312 | } 313 | outputFilename.resize(outputFilename.size() - numSuffixLength); 314 | outputFilename.append(".clx"); 315 | return outputFilename; 316 | } 317 | 318 | ClxCommands 319 | ParseClxCommands(std::span clxCommands) 320 | { 321 | ClxCommands result; 322 | for (const std::string_view str : clxCommands) { 323 | std::optional parsed = ParseClxCommand(str); 324 | if (!parsed.has_value()) 325 | continue; 326 | std::variant value; 327 | if (parsed->combine) { 328 | ClxCombineAggregator &aggregator = result.combine_aggregators.emplace_back(); 329 | aggregator.command = std::move(parsed->command); 330 | aggregator.files = parsed->files; 331 | value = &aggregator; 332 | } else { 333 | value = parsed->command; 334 | } 335 | for (std::string &file : parsed->files) { 336 | if (!result.per_file.emplace(std::move(file), value).second) { 337 | std::cerr << "More than 1 CLX conversion command for " << file << std::endl; 338 | std::exit(1); 339 | } 340 | } 341 | } 342 | return result; 343 | } 344 | 345 | void WriteOutput(const std::filesystem::path &outputPath, const uint8_t *data, size_t size) 346 | { 347 | std::filesystem::create_directories(outputPath.parent_path()); 348 | std::ofstream out { outputPath.c_str(), std::ios::binary }; 349 | if (out.fail()) { 350 | std::cerr << "Failed to open " << outputPath << " for writing: " << std::strerror(errno) << std::endl; 351 | } 352 | out.write(reinterpret_cast(data), static_cast(size)); 353 | if (out.fail()) { 354 | std::cerr << "Failed to write " << outputPath << ": " << std::strerror(errno) << std::endl; 355 | } 356 | out.close(); 357 | if (out.fail()) { 358 | std::cerr << "Failed to close " << outputPath << ": " << std::strerror(errno) << std::endl; 359 | } 360 | }; 361 | 362 | class MpqArchive { 363 | public: 364 | explicit MpqArchive(const std::filesystem::path &path) 365 | { 366 | const int32_t error = libmpq__archive_open(&archive_, path.string().c_str(), 0); 367 | if (error != 0) { 368 | std::cerr << "Failed to open MPQ at " << path << ": " 369 | << libmpq__strerror(error) << std::endl; 370 | std::exit(1); 371 | } 372 | } 373 | 374 | uint32_t getFileNumber(const char *mpqPath, bool optional = false) 375 | { 376 | uint32_t mpqFileNumber; 377 | int32_t error = libmpq__file_number(archive_, mpqPath, &mpqFileNumber); 378 | if (error == LIBMPQ_ERROR_EXIST && optional) 379 | return static_cast(-1); 380 | if (error != 0) { 381 | std::cerr << "Failed to read MPQ file " << mpqPath << ": " 382 | << libmpq__strerror(error) << std::endl; 383 | std::exit(1); 384 | } 385 | return mpqFileNumber; 386 | } 387 | 388 | size_t getFileSize(uint32_t mpqFileNumber, const char *mpqPath = "") 389 | { 390 | int32_t error; 391 | libmpq__off_t mpqFileSize; 392 | if ((error = libmpq__file_size_unpacked(archive_, mpqFileNumber, &mpqFileSize)) != 0) { 393 | std::cerr << "Failed to read MPQ file " << mpqPath << ": " 394 | << libmpq__strerror(error) << std::endl; 395 | std::exit(1); 396 | } 397 | return mpqFileSize; 398 | } 399 | 400 | size_t readFile(uint32_t mpqFileNumber, size_t mpqFileSize, const char *mpqPath, uint8_t *buf, bool decrypt) 401 | { 402 | if (tmp_buf_.size() < mpqFileSize) { 403 | tmp_buf_.resize(static_cast(mpqFileSize)); 404 | } 405 | int32_t error; 406 | if (decrypt) { 407 | error = libmpq__file_read_with_filename_and_temporary_buffer( 408 | archive_, mpqFileNumber, mpqPath, buf, mpqFileSize, 409 | tmp_buf_.data(), mpqFileSize, /*transferred=*/nullptr); 410 | } else { 411 | error = libmpq__file_read_with_temporary_buffer( 412 | archive_, mpqFileNumber, buf, mpqFileSize, 413 | tmp_buf_.data(), mpqFileSize, /*transferred=*/nullptr); 414 | } 415 | if (error != 0) { 416 | std::cerr << "Failed to read MPQ file " << mpqPath << ": " 417 | << libmpq__strerror(error) << " " << mpqPath << std::endl; 418 | std::exit(1); 419 | } 420 | return static_cast(mpqFileSize); 421 | } 422 | 423 | size_t readFile(const char *mpqPath, std::vector &buf, bool decrypt = true, bool optional = false) 424 | { 425 | const uint32_t mpqFileNumber = getFileNumber(mpqPath, optional); 426 | if (optional && mpqFileNumber == static_cast(-1)) 427 | return static_cast(-1); 428 | const size_t mpqFileSize = getFileSize(mpqFileNumber, mpqPath); 429 | if (buf.size() < static_cast(mpqFileSize)) { 430 | buf.resize(static_cast(mpqFileSize)); 431 | } 432 | return readFile(mpqFileNumber, mpqFileSize, mpqPath, buf.data(), decrypt); 433 | } 434 | 435 | ~MpqArchive() 436 | { 437 | const int32_t error = libmpq__archive_close(archive_); 438 | if (error != 0) { 439 | std::cerr << "Failed to close MPQ: " << libmpq__strerror(error) << std::endl; 440 | std::exit(1); 441 | } 442 | } 443 | 444 | private: 445 | mpq_archive_s *archive_; 446 | std::vector tmp_buf_; 447 | }; 448 | 449 | void PrintStatus(std::string_view status, size_t i, size_t n) 450 | { 451 | std::clog << "\r \r" 452 | << "[" << i << "/" << n << "] " << status; 453 | std::clog.flush(); 454 | } 455 | 456 | void ProcessAggregator(ClxCombineAggregator &aggregator, MpqArchive &archive, 457 | const std::filesystem::path &outputDirectory) 458 | { 459 | struct FileInfo { 460 | std::string mpqPath; 461 | uint32_t mpqFileNumber; 462 | size_t size; 463 | }; 464 | FileInfo fileInfos[aggregator.files.size()]; 465 | size_t totalFilesSize = 0; 466 | for (size_t i = 0; i < aggregator.files.size(); ++i) { 467 | std::string mpqPath { aggregator.files[i] }; 468 | std::replace(mpqPath.begin(), mpqPath.end(), '/', '\\'); 469 | const uint32_t fileNumber = archive.getFileNumber(mpqPath.c_str()); 470 | const size_t fileSize = archive.getFileSize(fileNumber, mpqPath.c_str()); 471 | fileInfos[i] = { std::move(mpqPath), fileNumber, fileSize }; 472 | totalFilesSize += fileSize; 473 | } 474 | const size_t headerSize = dvl_gfx::ClxSheetHeaderSize(aggregator.files.size()); 475 | std::unique_ptr data { new uint8_t[headerSize + totalFilesSize] }; 476 | size_t accumulatedSize = headerSize; 477 | for (size_t i = 0; i < aggregator.files.size(); ++i) { 478 | dvl_gfx::ClxSheetHeaderSetListOffset(i, accumulatedSize, data.get()); 479 | archive.readFile(fileInfos[i].mpqFileNumber, fileInfos[i].size, 480 | fileInfos[i].mpqPath.c_str(), &data[accumulatedSize], /*decrypt=*/true); 481 | accumulatedSize += fileInfos[i].size; 482 | } 483 | if (std::holds_alternative(aggregator.command)) { 484 | const Cl2ToClxCommand &command = std::get(aggregator.command); 485 | std::vector converted; 486 | const std::optional clxError = dvl_gfx::Cl2ToClx( 487 | data.get(), accumulatedSize, command.widths.data(), command.widths.size(), converted); 488 | if (clxError.has_value()) { 489 | std::cerr << "Failed CL2->CLX combined conversion: " << clxError->message 490 | << " " << aggregator.files[0] << std::endl; 491 | std::exit(1); 492 | } 493 | const std::string outputFilename = DefaultCombinedClxFilename( 494 | aggregator.files[0]); 495 | WriteOutput( 496 | outputDirectory 497 | / std::filesystem::path(aggregator.files[0]).parent_path() 498 | / outputFilename, 499 | converted.data(), converted.size()); 500 | } else { 501 | std::cerr << "Only CL2 files can be combined error" << std::endl; 502 | std::exit(1); 503 | } 504 | aggregator.processed = true; 505 | } 506 | 507 | void Process(const std::filesystem::path &mpq, const std::filesystem::path &outputRoot) 508 | { 509 | const std::filesystem::path srcExt = mpq.extension(); 510 | const bool isSaveFile = IsSaveFileExtension(srcExt); 511 | 512 | const std::string srcName = SrcName(mpq); 513 | const std::string destName = isSaveFile 514 | ? srcName + "_" + srcExt.string().substr(1) 515 | : DestName(srcName); 516 | const std::filesystem::path outputDirectory = outputRoot / destName; 517 | 518 | std::clog << "Processing " << mpq << std::endl; 519 | MpqArchive archive { mpq }; 520 | 521 | std::span mpqFiles = isSaveFile ? GetSaveMpqFiles() 522 | : GetMpqFiles(srcName); 523 | 524 | std::vector listfileEntries; 525 | std::vector listfileData; 526 | if (mpqFiles.empty()) { 527 | const size_t listfileSize = archive.readFile("(listfile)", listfileData, /*decrypt=*/false); 528 | std::replace(listfileData.begin(), listfileData.end(), static_cast('\r'), static_cast('\0')); 529 | std::replace(listfileData.begin(), listfileData.end(), static_cast('\n'), static_cast('\0')); 530 | std::string_view listfileStr { reinterpret_cast(listfileData.data()), listfileSize }; 531 | while (!listfileStr.empty()) { 532 | const std::string_view str = listfileStr.substr(0, listfileStr.find('\0')); 533 | if (!str.empty()) 534 | listfileEntries.push_back(str.data()); 535 | listfileStr.remove_prefix(std::min(str.size() + 1, listfileStr.size())); 536 | } 537 | mpqFiles = listfileEntries; 538 | } 539 | 540 | std::span excludedFiles = GetExcludedFiles(srcName); 541 | std::unordered_set excludedFilesMap { excludedFiles.begin(), excludedFiles.end() }; 542 | 543 | ClxCommands clxCommands = ParseClxCommands(GetClxCommands(srcName)); 544 | 545 | std::vector fileBuf; 546 | std::vector clxData; 547 | size_t i = 0; 548 | for (const char *const mpqPath : mpqFiles) { 549 | std::string mpqPathWithForwardSlash { mpqPath }; 550 | std::replace(mpqPathWithForwardSlash.begin(), mpqPathWithForwardSlash.end(), '\\', '/'); 551 | 552 | const auto clxIt = clxCommands.per_file.find(mpqPathWithForwardSlash); 553 | if (clxIt != clxCommands.per_file.end() && std::holds_alternative(clxIt->second)) { 554 | ClxCombineAggregator &aggregator = *std::get(clxIt->second); 555 | if (aggregator.processed) 556 | continue; 557 | ++i; 558 | PrintStatus(std::string("Combining ") + mpqPath + " (" + std::to_string(aggregator.files.size()) + ")", i, mpqFiles.size()); 559 | ProcessAggregator(aggregator, archive, outputDirectory); 560 | i += aggregator.files.size() - 1; 561 | continue; 562 | } 563 | 564 | ++i; 565 | 566 | if (excludedFilesMap.contains(mpqPathWithForwardSlash)) { 567 | PrintStatus(std::string("Skipping ") + mpqPath, i, mpqFiles.size()); 568 | continue; 569 | } 570 | const size_t mpqFileSize = archive.readFile(mpqPath, fileBuf, /*decrypt=*/true, /*optional=*/isSaveFile); 571 | if (isSaveFile && mpqFileSize == static_cast(-1)) { 572 | PrintStatus(std::string("Missing ") + mpqPath, i, mpqFiles.size()); 573 | continue; 574 | } 575 | 576 | std::filesystem::path outputPath = outputDirectory / mpqPathWithForwardSlash; 577 | 578 | if (clxIt != clxCommands.per_file.end()) { 579 | const ClxCommand &clxCommand = std::get(clxIt->second); 580 | PrintStatus(std::string("Converting ") + mpqPath + " to CLX", i, mpqFiles.size()); 581 | outputPath.replace_extension(".clx"); 582 | if (std::holds_alternative(clxCommand)) { 583 | const Cl2ToClxCommand &command = std::get(clxCommand); 584 | clxData.clear(); 585 | const std::optional clxError = dvl_gfx::Cl2ToClx( 586 | fileBuf.data(), mpqFileSize, command.widths.data(), command.widths.size(), clxData); 587 | if (clxError.has_value()) { 588 | std::cerr << "Failed CL2->CLX conversion: " << clxError->message << " " << mpqPath << std::endl; 589 | std::exit(1); 590 | } 591 | WriteOutput(outputPath, clxData.data(), clxData.size()); 592 | } else if (std::holds_alternative(clxCommand)) { 593 | const CelToClxCommand &command = std::get(clxCommand); 594 | clxData.clear(); 595 | const std::optional clxError = dvl_gfx::CelToClx( 596 | fileBuf.data(), mpqFileSize, command.widths.data(), command.widths.size(), clxData); 597 | if (clxError.has_value()) { 598 | std::cerr << "Failed CL2->CLX conversion: " << clxError->message << " " << mpqPath << std::endl; 599 | std::exit(1); 600 | } 601 | if (outputPath.filename() == "spelli2.clx" || outputPath.filename() == "spelicon.clx") { 602 | std::vector iconBackground; 603 | std::vector iconsWithoutBackground; 604 | const std::string extractError = devilution_mpq_tools::ExtractSpellIcons(clxData, iconBackground, iconsWithoutBackground); 605 | if (!extractError.empty()) { 606 | std::cerr << "Failed to extract spell icons from " << mpqPath << ": " << extractError << std::endl; 607 | std::exit(1); 608 | } 609 | 610 | const std::string stem = outputPath.stem().string(); 611 | WriteOutput(outputPath.replace_filename(stem + "_bg.clx"), iconBackground.data(), iconBackground.size()); 612 | WriteOutput(outputPath.replace_filename(stem + "_fg.clx"), iconsWithoutBackground.data(), iconsWithoutBackground.size()); 613 | } else { 614 | WriteOutput(outputPath, clxData.data(), clxData.size()); 615 | } 616 | } else if (std::holds_alternative(clxCommand)) { 617 | const PcxToClxCommand &command = std::get(clxCommand); 618 | clxData.clear(); 619 | std::array paletteData; 620 | const std::optional clxError = dvl_gfx::PcxToClx( 621 | fileBuf.data(), mpqFileSize, command.numFrames, command.transparentColor, 622 | /*cropWidths=*/ {}, clxData, command.exportPalette ? paletteData.data() : nullptr); 623 | if (clxError.has_value()) { 624 | std::cerr << "Failed CL2->CLX conversion: " << clxError->message << " " << mpqPath << std::endl; 625 | std::exit(1); 626 | } 627 | WriteOutput(outputPath, clxData.data(), clxData.size()); 628 | if (command.exportPalette) { 629 | outputPath.replace_extension(".pal"); 630 | WriteOutput(outputPath, paletteData.data(), paletteData.size()); 631 | } 632 | } else { 633 | std::cerr << "Internal error" << std::endl; 634 | std::exit(1); 635 | } 636 | } else { 637 | PrintStatus(std::string("Extracting ") + mpqPath, i, mpqFiles.size()); 638 | WriteOutput(outputPath, fileBuf.data(), mpqFileSize); 639 | } 640 | } 641 | PrintStatus("Done", mpqFiles.size(), mpqFiles.size()); 642 | std::clog << std::endl; 643 | } 644 | 645 | } // namespace 646 | 647 | int main(int argc, char *argv[]) 648 | { 649 | bool mp3 = false; 650 | std::string outputRoot = "."; 651 | std::vector mpqs; 652 | for (int i = 1; i < argc; ++i) { 653 | const std::string_view arg = argv[i]; 654 | if (arg == "-h" || arg == "--help") { 655 | PrintHelp(); 656 | std::exit(0); 657 | } 658 | if (arg == "--mp3") { 659 | mp3 = true; 660 | std::cerr << "--mp3 option is not implemented yet." << std::endl; 661 | std::exit(64); 662 | } else if (arg == "--output-dir") { 663 | if (i + 1 == argc) { 664 | std::cerr << "--output-dir requires an argument" << std::endl; 665 | std::exit(64); 666 | } 667 | outputRoot = argv[++i]; 668 | } else if (!arg.empty() && arg[0] != '-') { 669 | mpqs.emplace_back(arg); 670 | } else { 671 | std::cerr << "unknown argument: " << arg << std::endl; 672 | } 673 | } 674 | if (mpqs.empty()) { 675 | for (const std::filesystem::directory_entry &entry : 676 | std::filesystem::directory_iterator(std::filesystem::current_path(), std::filesystem::directory_options::skip_permission_denied)) { 677 | if (!entry.is_regular_file()) 678 | continue; 679 | const std::filesystem::path ext = entry.path().extension(); 680 | if (ext == ".mpq" || ext == ".MPQ" || IsSaveFileExtension(ext)) { 681 | mpqs.emplace_back(entry.path()); 682 | } 683 | } 684 | } 685 | if (mpqs.empty()) { 686 | std::cerr << "Error: No MPQs found in the current directory or in the command line\n\n"; 687 | PrintHelp(); 688 | std::exit(1); 689 | } 690 | for (const std::filesystem::path &mpq : mpqs) { 691 | Process(mpq, outputRoot); 692 | } 693 | return 0; 694 | } 695 | -------------------------------------------------------------------------------- /data/spawn-listfile.txt: -------------------------------------------------------------------------------- 1 | ctrlpan\golddrop.cel 2 | ctrlpan\p8bulbs.cel 3 | ctrlpan\p8but2.cel 4 | ctrlpan\panel8.cel 5 | ctrlpan\panel8bu.cel 6 | ctrlpan\smaltext.cel 7 | ctrlpan\spelicon.cel 8 | ctrlpan\talkbutt.cel 9 | ctrlpan\talkpanl.cel 10 | data\bigtgold.cel 11 | data\char.cel 12 | data\charbut.cel 13 | data\diabsmal.cel 14 | data\inv\inv.cel 15 | data\inv\objcurs.cel 16 | data\medtexts.cel 17 | data\optbar.cel 18 | data\option.cel 19 | data\pentspin.cel 20 | data\pentspn2.cel 21 | data\quest.cel 22 | data\spellbk.cel 23 | data\spellbkb.cel 24 | data\spelli2.cel 25 | data\square.cel 26 | data\textbox.cel 27 | data\textbox2.cel 28 | data\textslid.cel 29 | gendata\cut2.cel 30 | gendata\cut2.pal 31 | gendata\cut3.cel 32 | gendata\cut3.pal 33 | gendata\cut4.cel 34 | gendata\cut4.pal 35 | gendata\cutgate.cel 36 | gendata\cutgate.pal 37 | gendata\cutl1d.cel 38 | gendata\cutl1d.pal 39 | gendata\cutportl.cel 40 | gendata\cutportl.pal 41 | gendata\cutportr.cel 42 | gendata\cutportr.pal 43 | gendata\cutstart.cel 44 | gendata\cutstart.pal 45 | gendata\cuttt.cel 46 | gendata\cuttt.pal 47 | gendata\logo.smk 48 | gendata\quotes.cel 49 | gendata\quotes.pal 50 | items\armor2.cel 51 | items\axe.cel 52 | items\axeflip.cel 53 | items\bldstn.cel 54 | items\bottle.cel 55 | items\bow.cel 56 | items\cleaver.cel 57 | items\crownf.cel 58 | items\duricons.cel 59 | items\fanvil.cel 60 | items\fbook.cel 61 | items\fbow.cel 62 | items\fbrain.cel 63 | items\fbttle.cel 64 | items\fbttlebb.cel 65 | items\fbttlebl.cel 66 | items\fbttlebr.cel 67 | items\fbttleby.cel 68 | items\fbttledb.cel 69 | items\fbttledy.cel 70 | items\fbttleor.cel 71 | items\fbttlewh.cel 72 | items\fear.cel 73 | items\feye.cel 74 | items\fheart.cel 75 | items\flazstaf.cel 76 | items\fmush.cel 77 | items\food.cel 78 | items\fplatear.cel 79 | items\goldflip.cel 80 | items\helmut.cel 81 | items\innsign.cel 82 | items\larmor.cel 83 | items\mace.cel 84 | items\manaflip.cel 85 | items\ring.cel 86 | items\rock.cel 87 | items\scroll.cel 88 | items\shield.cel 89 | items\staff.cel 90 | items\swrdflip.cel 91 | items\swrdflip.pal 92 | items\wand.cel 93 | items\wshield.cel 94 | levels\l1data\banner1.dun 95 | levels\l1data\banner2.dun 96 | levels\l1data\hero1.dun 97 | levels\l1data\hero2.dun 98 | levels\l1data\l1_1.pal 99 | levels\l1data\l1_2.pal 100 | levels\l1data\l1_3.pal 101 | levels\l1data\l1_4.pal 102 | levels\l1data\l1_5.pal 103 | levels\l1data\l1.amp 104 | levels\l1data\l1.cel 105 | levels\l1data\l1.min 106 | levels\l1data\l1.pal 107 | levels\l1data\l1.sol 108 | levels\l1data\l1.til 109 | levels\l1data\l1palg.pal 110 | levels\l1data\l1s.cel 111 | levels\l1data\lv1mazea.dun 112 | levels\l1data\lv1mazeb.dun 113 | levels\l1data\rnd1.dun 114 | levels\l1data\rnd2.dun 115 | levels\l1data\rnd3.dun 116 | levels\l1data\rnd4.dun 117 | levels\l1data\rnd5.dun 118 | levels\l1data\rnd6.dun 119 | levels\l1data\sklkng.dun 120 | levels\l1data\sklkng1.dun 121 | levels\l1data\sklkng2.dun 122 | levels\l1data\sklkngdr.dun 123 | levels\l1data\skngdc.dun 124 | levels\l1data\skngdo.dun 125 | levels\l1data\vile1.dun 126 | levels\l1data\vile2.dun 127 | levels\towndata\ltpalg.pal 128 | levels\towndata\sector1s.dun 129 | levels\towndata\sector2s.dun 130 | levels\towndata\sector3s.dun 131 | levels\towndata\sector4s.dun 132 | levels\towndata\town.cel 133 | levels\towndata\town.min 134 | levels\towndata\town.pal 135 | levels\towndata\town.sol 136 | levels\towndata\town.til 137 | levels\towndata\towns.cel 138 | missiles\acidbf1.cl2 139 | missiles\acidbf10.cl2 140 | missiles\acidbf11.cl2 141 | missiles\acidbf12.cl2 142 | missiles\acidbf13.cl2 143 | missiles\acidbf14.cl2 144 | missiles\acidbf15.cl2 145 | missiles\acidbf16.cl2 146 | missiles\acidbf2.cl2 147 | missiles\acidbf3.cl2 148 | missiles\acidbf4.cl2 149 | missiles\acidbf5.cl2 150 | missiles\acidbf6.cl2 151 | missiles\acidbf7.cl2 152 | missiles\acidbf8.cl2 153 | missiles\acidbf9.cl2 154 | missiles\acidpud1.cl2 155 | missiles\acidpud2.cl2 156 | missiles\acidspla.cl2 157 | missiles\arrows.cl2 158 | missiles\bigexp.cl2 159 | missiles\blodbur0.cl2 160 | missiles\blodbur1.cl2 161 | missiles\blodbur2.cl2 162 | missiles\blodburs.cl2 163 | missiles\blood1.cl2 164 | missiles\blood2.cl2 165 | missiles\blood3.cl2 166 | missiles\blood4.cl2 167 | missiles\bluexbk.cl2 168 | missiles\bluexfr.cl2 169 | missiles\bone1.cl2 170 | missiles\bone2.cl2 171 | missiles\bone3.cl2 172 | missiles\doom1.cl2 173 | missiles\doom2.cl2 174 | missiles\doom3.cl2 175 | missiles\doom4.cl2 176 | missiles\doom5.cl2 177 | missiles\doom6.cl2 178 | missiles\doom7.cl2 179 | missiles\doom8.cl2 180 | missiles\doom9.cl2 181 | missiles\doomexp.cl2 182 | missiles\ethrshld.cl2 183 | missiles\farrow1.cl2 184 | missiles\farrow10.cl2 185 | missiles\farrow11.cl2 186 | missiles\farrow12.cl2 187 | missiles\farrow13.cl2 188 | missiles\farrow14.cl2 189 | missiles\farrow15.cl2 190 | missiles\farrow16.cl2 191 | missiles\farrow2.cl2 192 | missiles\farrow3.cl2 193 | missiles\farrow4.cl2 194 | missiles\farrow5.cl2 195 | missiles\farrow6.cl2 196 | missiles\farrow7.cl2 197 | missiles\farrow8.cl2 198 | missiles\farrow9.cl2 199 | missiles\firarwex.cl2 200 | missiles\fireba1.cl2 201 | missiles\fireba10.cl2 202 | missiles\fireba11.cl2 203 | missiles\fireba12.cl2 204 | missiles\fireba13.cl2 205 | missiles\fireba14.cl2 206 | missiles\fireba15.cl2 207 | missiles\fireba16.cl2 208 | missiles\fireba2.cl2 209 | missiles\fireba3.cl2 210 | missiles\fireba4.cl2 211 | missiles\fireba5.cl2 212 | missiles\fireba6.cl2 213 | missiles\fireba7.cl2 214 | missiles\fireba8.cl2 215 | missiles\fireba9.cl2 216 | missiles\fireplar.cl2 217 | missiles\firerun1.cl2 218 | missiles\firerun2.cl2 219 | missiles\firerun3.cl2 220 | missiles\firerun4.cl2 221 | missiles\firerun5.cl2 222 | missiles\firerun6.cl2 223 | missiles\firerun7.cl2 224 | missiles\firerun8.cl2 225 | missiles\firewal1.cl2 226 | missiles\firewal2.cl2 227 | missiles\flamel1.cel 228 | missiles\flamel10.cel 229 | missiles\flamel11.cel 230 | missiles\flamel12.cel 231 | missiles\flamel13.cel 232 | missiles\flamel14.cel 233 | missiles\flamel15.cel 234 | missiles\flamel16.cel 235 | missiles\flamel2.cel 236 | missiles\flamel3.cel 237 | missiles\flamel4.cel 238 | missiles\flamel5.cel 239 | missiles\flamel6.cel 240 | missiles\flamel7.cel 241 | missiles\flamel8.cel 242 | missiles\flamel9.cel 243 | missiles\flames1.cel 244 | missiles\flames10.cel 245 | missiles\flames11.cel 246 | missiles\flames12.cel 247 | missiles\flames13.cel 248 | missiles\flames14.cel 249 | missiles\flames15.cel 250 | missiles\flames16.cel 251 | missiles\flames2.cel 252 | missiles\flames3.cel 253 | missiles\flames4.cel 254 | missiles\flames5.cel 255 | missiles\flames6.cel 256 | missiles\flames7.cel 257 | missiles\flames8.cel 258 | missiles\flames9.cel 259 | missiles\flaml1.cel 260 | missiles\flaml2.cel 261 | missiles\flaml3.cel 262 | missiles\flaml4.cel 263 | missiles\flaml5.cel 264 | missiles\flaml6.cel 265 | missiles\flaml7.cel 266 | missiles\flaml8.cel 267 | missiles\flams1.cel 268 | missiles\flams2.cel 269 | missiles\flams3.cel 270 | missiles\flams4.cel 271 | missiles\flams5.cel 272 | missiles\flams6.cel 273 | missiles\flams7.cel 274 | missiles\flams8.cel 275 | missiles\flare.cl2 276 | missiles\flareexp.cl2 277 | missiles\guard1.cl2 278 | missiles\guard2.cl2 279 | missiles\guard3.cl2 280 | missiles\holy1.cl2 281 | missiles\holy10.cl2 282 | missiles\holy11.cl2 283 | missiles\holy12.cl2 284 | missiles\holy13.cl2 285 | missiles\holy14.cl2 286 | missiles\holy15.cl2 287 | missiles\holy16.cl2 288 | missiles\holy2.cl2 289 | missiles\holy3.cl2 290 | missiles\holy4.cl2 291 | missiles\holy5.cl2 292 | missiles\holy6.cl2 293 | missiles\holy7.cl2 294 | missiles\holy8.cl2 295 | missiles\holy9.cl2 296 | missiles\holyexpl.cl2 297 | missiles\inferno.cl2 298 | missiles\krull.cl2 299 | missiles\larrow1.cl2 300 | missiles\larrow10.cl2 301 | missiles\larrow11.cl2 302 | missiles\larrow12.cl2 303 | missiles\larrow13.cl2 304 | missiles\larrow14.cl2 305 | missiles\larrow15.cl2 306 | missiles\larrow16.cl2 307 | missiles\larrow2.cl2 308 | missiles\larrow3.cl2 309 | missiles\larrow4.cl2 310 | missiles\larrow5.cl2 311 | missiles\larrow6.cl2 312 | missiles\larrow7.cl2 313 | missiles\larrow8.cl2 314 | missiles\larrow9.cl2 315 | missiles\lghning.cl2 316 | missiles\magball1.cl2 317 | missiles\magball2.cl2 318 | missiles\magball3.cl2 319 | missiles\magball4.cl2 320 | missiles\magball5.cl2 321 | missiles\magball6.cl2 322 | missiles\magball7.cl2 323 | missiles\magball8.cl2 324 | missiles\magblos.cl2 325 | missiles\manashld.cl2 326 | missiles\metlhit1.cl2 327 | missiles\metlhit2.cl2 328 | missiles\metlhit3.cl2 329 | missiles\mindmace.cel 330 | missiles\miniltng.cl2 331 | missiles\newexp.cl2 332 | missiles\portal.cl2 333 | missiles\portal1.cl2 334 | missiles\portal2.cl2 335 | missiles\portalu.cl2 336 | missiles\ressur1.cl2 337 | missiles\rportal1.cl2 338 | missiles\rportal2.cl2 339 | missiles\scbsexpb.cl2 340 | missiles\scbsexpc.cl2 341 | missiles\scbsexpd.cl2 342 | missiles\scubmisb.cl2 343 | missiles\scubmisc.cl2 344 | missiles\scubmisd.cl2 345 | missiles\sentfr.cel 346 | missiles\sentout.cel 347 | missiles\sentup.cel 348 | missiles\shatter1.cl2 349 | missiles\sklball1.cl2 350 | missiles\sklball2.cl2 351 | missiles\sklball3.cl2 352 | missiles\sklball4.cl2 353 | missiles\sklball5.cl2 354 | missiles\sklball6.cl2 355 | missiles\sklball7.cl2 356 | missiles\sklball8.cl2 357 | missiles\sklball9.cl2 358 | missiles\thinlght.cl2 359 | monsters\bat\bata.cl2 360 | monsters\bat\bata1.wav 361 | monsters\bat\bata2.wav 362 | monsters\bat\batd.cl2 363 | monsters\bat\batd1.wav 364 | monsters\bat\batd2.wav 365 | monsters\bat\bath.cl2 366 | monsters\bat\bath1.wav 367 | monsters\bat\bath2.wav 368 | monsters\bat\batn.cl2 369 | monsters\bat\bats1.wav 370 | monsters\bat\bats2.wav 371 | monsters\bat\batw.cl2 372 | monsters\bat\grey.trn 373 | monsters\bat\orange.trn 374 | monsters\bat\red.trn 375 | monsters\falspear\blue.trn 376 | monsters\falspear\dark.trn 377 | monsters\falspear\fallent.trn 378 | monsters\falspear\orange.trn 379 | monsters\falspear\phalla.cl2 380 | monsters\falspear\phalla1.wav 381 | monsters\falspear\phalla2.wav 382 | monsters\falspear\phalld.cl2 383 | monsters\falspear\phalld1.wav 384 | monsters\falspear\phalld2.wav 385 | monsters\falspear\phallh.cl2 386 | monsters\falspear\phallh1.wav 387 | monsters\falspear\phallh2.wav 388 | monsters\falspear\phalln.cl2 389 | monsters\falspear\phalls.cl2 390 | monsters\falspear\phalls1.wav 391 | monsters\falspear\phalls2.wav 392 | monsters\falspear\phallw.cl2 393 | monsters\falspear\salam.trn 394 | monsters\falspear\yellow.trn 395 | monsters\falsword\blue.trn 396 | monsters\falsword\dark.trn 397 | monsters\falsword\falla.cl2 398 | monsters\falsword\falla1.wav 399 | monsters\falsword\falla2.wav 400 | monsters\falsword\falld.cl2 401 | monsters\falsword\falld1.wav 402 | monsters\falsword\falld2.wav 403 | monsters\falsword\fallent.trn 404 | monsters\falsword\fallh.cl2 405 | monsters\falsword\fallh1.wav 406 | monsters\falsword\fallh2.wav 407 | monsters\falsword\falln.cl2 408 | monsters\falsword\falls.cl2 409 | monsters\falsword\falls1.wav 410 | monsters\falsword\falls2.wav 411 | monsters\falsword\fallw.cl2 412 | monsters\falsword\orange.trn 413 | monsters\falsword\salam.trn 414 | monsters\falsword\yellow.trn 415 | monsters\golem\golema.cl2 416 | monsters\golem\golemd.cl2 417 | monsters\golem\golems.cl2 418 | monsters\golem\golemw.cl2 419 | monsters\golem\golma1.wav 420 | monsters\golem\golma2.wav 421 | monsters\golem\golmd1.wav 422 | monsters\golem\golmd2.wav 423 | monsters\golem\golmh1.wav 424 | monsters\golem\golmh2.wav 425 | monsters\scav\scava.cl2 426 | monsters\scav\scava1.wav 427 | monsters\scav\scava2.wav 428 | monsters\scav\scavbe.trn 429 | monsters\scav\scavbr.trn 430 | monsters\scav\scavd.cl2 431 | monsters\scav\scavd1.wav 432 | monsters\scav\scavd2.wav 433 | monsters\scav\scavh.cl2 434 | monsters\scav\scavh1.wav 435 | monsters\scav\scavh2.wav 436 | monsters\scav\scavn.cl2 437 | monsters\scav\scavs.cl2 438 | monsters\scav\scavs1.wav 439 | monsters\scav\scavs2.wav 440 | monsters\scav\scavw.cl2 441 | monsters\scav\scavw.trn 442 | monsters\scav\scavy.trn 443 | monsters\skelaxe\black.trn 444 | monsters\skelaxe\blue.trn 445 | monsters\skelaxe\red.trn 446 | monsters\skelaxe\skelt.trn 447 | monsters\skelaxe\sklaxa.cl2 448 | monsters\skelaxe\sklaxa1.wav 449 | monsters\skelaxe\sklaxa2.wav 450 | monsters\skelaxe\sklaxd.cl2 451 | monsters\skelaxe\sklaxd1.wav 452 | monsters\skelaxe\sklaxd2.wav 453 | monsters\skelaxe\sklaxh.cl2 454 | monsters\skelaxe\sklaxh1.wav 455 | monsters\skelaxe\sklaxh2.wav 456 | monsters\skelaxe\sklaxn.cl2 457 | monsters\skelaxe\sklaxs.cl2 458 | monsters\skelaxe\sklaxs1.wav 459 | monsters\skelaxe\sklaxs2.wav 460 | monsters\skelaxe\sklaxw.cl2 461 | monsters\skelaxe\white.trn 462 | monsters\skelbow\black.trn 463 | monsters\skelbow\blue.trn 464 | monsters\skelbow\red.trn 465 | monsters\skelbow\skelt.trn 466 | monsters\skelbow\sklbwa.cl2 467 | monsters\skelbow\sklbwa1.wav 468 | monsters\skelbow\sklbwa2.wav 469 | monsters\skelbow\sklbwd.cl2 470 | monsters\skelbow\sklbwd1.wav 471 | monsters\skelbow\sklbwd2.wav 472 | monsters\skelbow\sklbwh.cl2 473 | monsters\skelbow\sklbwh1.wav 474 | monsters\skelbow\sklbwh2.wav 475 | monsters\skelbow\sklbwn.cl2 476 | monsters\skelbow\sklbws.cl2 477 | monsters\skelbow\sklbws1.wav 478 | monsters\skelbow\sklbws2.wav 479 | monsters\skelbow\sklbww.cl2 480 | monsters\skelbow\white.trn 481 | monsters\skelsd\black.trn 482 | monsters\skelsd\blue.trn 483 | monsters\skelsd\red.trn 484 | monsters\skelsd\skelt.trn 485 | monsters\skelsd\sklsra.cl2 486 | monsters\skelsd\sklsra1.wav 487 | monsters\skelsd\sklsra2.wav 488 | monsters\skelsd\sklsrd.cl2 489 | monsters\skelsd\sklsrd1.wav 490 | monsters\skelsd\sklsrd2.wav 491 | monsters\skelsd\sklsrh.cl2 492 | monsters\skelsd\sklsrh1.wav 493 | monsters\skelsd\sklsrh2.wav 494 | monsters\skelsd\sklsrn.cl2 495 | monsters\skelsd\sklsrs.cl2 496 | monsters\skelsd\sklsrs1.wav 497 | monsters\skelsd\sklsrs2.wav 498 | monsters\skelsd\sklsrw.cl2 499 | monsters\skelsd\white.trn 500 | monsters\zombie\bluered.trn 501 | monsters\zombie\grey.trn 502 | monsters\zombie\yellow.trn 503 | monsters\zombie\zombiea.cl2 504 | monsters\zombie\zombiea1.wav 505 | monsters\zombie\zombiea2.wav 506 | monsters\zombie\zombied.cl2 507 | monsters\zombie\zombied1.wav 508 | monsters\zombie\zombied2.wav 509 | monsters\zombie\zombieh.cl2 510 | monsters\zombie\zombieh1.wav 511 | monsters\zombie\zombieh2.wav 512 | monsters\zombie\zombien.cl2 513 | monsters\zombie\zombies.cl2 514 | monsters\zombie\zombies1.wav 515 | monsters\zombie\zombies2.wav 516 | monsters\zombie\zombiew.cl2 517 | music\sintro.wav 518 | music\slvla.wav 519 | music\stowne.wav 520 | objects\altboy.cel 521 | objects\angel.cel 522 | objects\armstand.cel 523 | objects\banner.cel 524 | objects\barrel.cel 525 | objects\barrelex.cel 526 | objects\bcase.cel 527 | objects\bkslbrnt.cel 528 | objects\bkurns.cel 529 | objects\bloodfnt.cel 530 | objects\book1.cel 531 | objects\book2.cel 532 | objects\bshelf.cel 533 | objects\burncros.cel 534 | objects\candlabr.cel 535 | objects\candle.cel 536 | objects\candle2.cel 537 | objects\cauldren.cel 538 | objects\chest1.cel 539 | objects\chest2.cel 540 | objects\chest3.cel 541 | objects\cruxsk1.cel 542 | objects\cruxsk2.cel 543 | objects\cruxsk3.cel 544 | objects\decap.cel 545 | objects\dirtfall.cel 546 | objects\explod1.cel 547 | objects\explod2.cel 548 | objects\firewal1.cel 549 | objects\flame1.cel 550 | objects\flame3.cel 551 | objects\ghost.cel 552 | objects\goatshrn.cel 553 | objects\l1braz.cel 554 | objects\l1doors.cel 555 | objects\l2doors.cel 556 | objects\l3doors.cel 557 | objects\lever.cel 558 | objects\lshrineg.cel 559 | objects\lzstand.cel 560 | objects\mcirl.cel 561 | objects\mfountn.cel 562 | objects\miniwatr.cel 563 | objects\mushptch.cel 564 | objects\nude2.cel 565 | objects\pedistl.cel 566 | objects\pfountn.cel 567 | objects\prsrplt1.cel 568 | objects\rockstan.cel 569 | objects\rshrineg.cel 570 | objects\sarc.cel 571 | objects\skulfire.cel 572 | objects\skulpile.cel 573 | objects\skulstik.cel 574 | objects\switch2.cel 575 | objects\switch3.cel 576 | objects\switch4.cel 577 | objects\tfountn.cel 578 | objects\tnudem.cel 579 | objects\tnudew.cel 580 | objects\traphole.cel 581 | objects\tsoul.cel 582 | objects\vapor1.cel 583 | objects\water.cel 584 | objects\waterjug.cel 585 | objects\weapstnd.cel 586 | objects\wtorch1.cel 587 | objects\wtorch2.cel 588 | objects\wtorch3.cel 589 | objects\wtorch4.cel 590 | plrgfx\infra.trn 591 | plrgfx\stone.trn 592 | plrgfx\warrior\wla\wlaas.cl2 593 | plrgfx\warrior\wla\wlaat.cl2 594 | plrgfx\warrior\wla\wlaaw.cl2 595 | plrgfx\warrior\wla\wlafm.cl2 596 | plrgfx\warrior\wla\wlaht.cl2 597 | plrgfx\warrior\wla\wlalm.cl2 598 | plrgfx\warrior\wla\wlaqm.cl2 599 | plrgfx\warrior\wla\wlast.cl2 600 | plrgfx\warrior\wla\wlawl.cl2 601 | plrgfx\warrior\wlb\wlbas.cl2 602 | plrgfx\warrior\wlb\wlbat.cl2 603 | plrgfx\warrior\wlb\wlbaw.cl2 604 | plrgfx\warrior\wlb\wlbfm.cl2 605 | plrgfx\warrior\wlb\wlbht.cl2 606 | plrgfx\warrior\wlb\wlblm.cl2 607 | plrgfx\warrior\wlb\wlbqm.cl2 608 | plrgfx\warrior\wlb\wlbst.cl2 609 | plrgfx\warrior\wlb\wlbwl.cl2 610 | plrgfx\warrior\wld\wldas.cl2 611 | plrgfx\warrior\wld\wldat.cl2 612 | plrgfx\warrior\wld\wldaw.cl2 613 | plrgfx\warrior\wld\wldbl.cl2 614 | plrgfx\warrior\wld\wldfm.cl2 615 | plrgfx\warrior\wld\wldht.cl2 616 | plrgfx\warrior\wld\wldlm.cl2 617 | plrgfx\warrior\wld\wldqm.cl2 618 | plrgfx\warrior\wld\wldst.cl2 619 | plrgfx\warrior\wld\wldwl.cl2 620 | plrgfx\warrior\wlh\wlhas.cl2 621 | plrgfx\warrior\wlh\wlhat.cl2 622 | plrgfx\warrior\wlh\wlhaw.cl2 623 | plrgfx\warrior\wlh\wlhbl.cl2 624 | plrgfx\warrior\wlh\wlhfm.cl2 625 | plrgfx\warrior\wlh\wlhht.cl2 626 | plrgfx\warrior\wlh\wlhlm.cl2 627 | plrgfx\warrior\wlh\wlhqm.cl2 628 | plrgfx\warrior\wlh\wlhst.cl2 629 | plrgfx\warrior\wlh\wlhwl.cl2 630 | plrgfx\warrior\wlm\wlmas.cl2 631 | plrgfx\warrior\wlm\wlmat.cl2 632 | plrgfx\warrior\wlm\wlmaw.cl2 633 | plrgfx\warrior\wlm\wlmfm.cl2 634 | plrgfx\warrior\wlm\wlmht.cl2 635 | plrgfx\warrior\wlm\wlmlm.cl2 636 | plrgfx\warrior\wlm\wlmqm.cl2 637 | plrgfx\warrior\wlm\wlmst.cl2 638 | plrgfx\warrior\wlm\wlmwl.cl2 639 | plrgfx\warrior\wln\wlnas.cl2 640 | plrgfx\warrior\wln\wlnat.cl2 641 | plrgfx\warrior\wln\wlnaw.cl2 642 | plrgfx\warrior\wln\wlndt.cl2 643 | plrgfx\warrior\wln\wlnfm.cl2 644 | plrgfx\warrior\wln\wlnht.cl2 645 | plrgfx\warrior\wln\wlnlm.cl2 646 | plrgfx\warrior\wln\wlnqm.cl2 647 | plrgfx\warrior\wln\wlnst.cl2 648 | plrgfx\warrior\wln\wlnwl.cl2 649 | plrgfx\warrior\wls\wlsas.cl2 650 | plrgfx\warrior\wls\wlsat.cl2 651 | plrgfx\warrior\wls\wlsaw.cl2 652 | plrgfx\warrior\wls\wlsfm.cl2 653 | plrgfx\warrior\wls\wlsht.cl2 654 | plrgfx\warrior\wls\wlslm.cl2 655 | plrgfx\warrior\wls\wlsqm.cl2 656 | plrgfx\warrior\wls\wlsst.cl2 657 | plrgfx\warrior\wls\wlswl.cl2 658 | plrgfx\warrior\wlt\wltas.cl2 659 | plrgfx\warrior\wlt\wltat.cl2 660 | plrgfx\warrior\wlt\wltaw.cl2 661 | plrgfx\warrior\wlt\wltfm.cl2 662 | plrgfx\warrior\wlt\wltht.cl2 663 | plrgfx\warrior\wlt\wltlm.cl2 664 | plrgfx\warrior\wlt\wltqm.cl2 665 | plrgfx\warrior\wlt\wltst.cl2 666 | plrgfx\warrior\wlt\wltwl.cl2 667 | plrgfx\warrior\wlu\wluas.cl2 668 | plrgfx\warrior\wlu\wluat.cl2 669 | plrgfx\warrior\wlu\wluaw.cl2 670 | plrgfx\warrior\wlu\wlubl.cl2 671 | plrgfx\warrior\wlu\wlufm.cl2 672 | plrgfx\warrior\wlu\wluht.cl2 673 | plrgfx\warrior\wlu\wlulm.cl2 674 | plrgfx\warrior\wlu\wluqm.cl2 675 | plrgfx\warrior\wlu\wlust.cl2 676 | plrgfx\warrior\wlu\wluwl.cl2 677 | sfx\items\armrfkd.wav 678 | sfx\items\barfire.wav 679 | sfx\items\barlfire.wav 680 | sfx\items\barrel.wav 681 | sfx\items\bfire.wav 682 | sfx\items\bhit.wav 683 | sfx\items\bhit1.wav 684 | sfx\items\chest.wav 685 | sfx\items\doorclos.wav 686 | sfx\items\dooropen.wav 687 | sfx\items\flip.wav 688 | sfx\items\flip1.wav 689 | sfx\items\flipanvl.wav 690 | sfx\items\flipaxe.wav 691 | sfx\items\flipblst.wav 692 | sfx\items\flipbody.wav 693 | sfx\items\flipbook.wav 694 | sfx\items\flipbow.wav 695 | sfx\items\flipcap.wav 696 | sfx\items\flipharm.wav 697 | sfx\items\fliplarm.wav 698 | sfx\items\flipmag.wav 699 | sfx\items\flipmag1.wav 700 | sfx\items\flipmush.wav 701 | sfx\items\flippot.wav 702 | sfx\items\flipring.wav 703 | sfx\items\fliprock.wav 704 | sfx\items\flipsarc.wav 705 | sfx\items\flipscrl.wav 706 | sfx\items\flipshld.wav 707 | sfx\items\flipsign.wav 708 | sfx\items\flipstaf.wav 709 | sfx\items\flipswor.wav 710 | sfx\items\gold.wav 711 | sfx\items\gold1.wav 712 | sfx\items\hlmtfkd.wav 713 | sfx\items\invanvl.wav 714 | sfx\items\invaxe.wav 715 | sfx\items\invblst.wav 716 | sfx\items\invbody.wav 717 | sfx\items\invbook.wav 718 | sfx\items\invbow.wav 719 | sfx\items\invcap.wav 720 | sfx\items\invgrab.wav 721 | sfx\items\invharm.wav 722 | sfx\items\invlarm.wav 723 | sfx\items\invmush.wav 724 | sfx\items\invpot.wav 725 | sfx\items\invring.wav 726 | sfx\items\invrock.wav 727 | sfx\items\invscrol.wav 728 | sfx\items\invshiel.wav 729 | sfx\items\invsign.wav 730 | sfx\items\invstaf.wav 731 | sfx\items\invsword.wav 732 | sfx\items\lever.wav 733 | sfx\items\magic.wav 734 | sfx\items\magic1.wav 735 | sfx\items\readbook.wav 736 | sfx\items\sarc.wav 737 | sfx\items\sarca.wav 738 | sfx\items\sarcb.wav 739 | sfx\items\shielfkd.wav 740 | sfx\items\sttest.wav 741 | sfx\items\swrdfkd.wav 742 | sfx\items\titlemov.wav 743 | sfx\items\titlslct.wav 744 | sfx\items\trap.wav 745 | sfx\misc\acids1.wav 746 | sfx\misc\acids2.wav 747 | sfx\misc\apoc.wav 748 | sfx\misc\arrowall.wav 749 | sfx\misc\bfire.wav 750 | sfx\misc\blank.wav 751 | sfx\misc\bldboil.wav 752 | sfx\misc\blodstar.wav 753 | sfx\misc\blsimpt.wav 754 | sfx\misc\bonesp.wav 755 | sfx\misc\bsimpct.wav 756 | sfx\misc\bspirit.wav 757 | sfx\misc\caldron.wav 758 | sfx\misc\cast1.wav 759 | sfx\misc\cast10.wav 760 | sfx\misc\cast12.wav 761 | sfx\misc\cast2.wav 762 | sfx\misc\cast3.wav 763 | sfx\misc\cast4.wav 764 | sfx\misc\cast5.wav 765 | sfx\misc\cast6.wav 766 | sfx\misc\cast7.wav 767 | sfx\misc\cast8.wav 768 | sfx\misc\cast9.wav 769 | sfx\misc\cbolt.wav 770 | sfx\misc\chltning.wav 771 | sfx\misc\dead.wav 772 | sfx\misc\dserp.wav 773 | sfx\misc\dserpatt.wav 774 | sfx\misc\elecimp1.wav 775 | sfx\misc\elementl.wav 776 | sfx\misc\ethereal.wav 777 | sfx\misc\fball.wav 778 | sfx\misc\fbolt1.wav 779 | sfx\misc\fbolt2.wav 780 | sfx\misc\firimp1.wav 781 | sfx\misc\firimp2.wav 782 | sfx\misc\flamwave.wav 783 | sfx\misc\flash.wav 784 | sfx\misc\fmag.wav 785 | sfx\misc\fountain.wav 786 | sfx\misc\golum.wav 787 | sfx\misc\golumded.wav 788 | sfx\misc\grdlanch.wav 789 | sfx\misc\gshrine.wav 790 | sfx\misc\guard.wav 791 | sfx\misc\healing.wav 792 | sfx\misc\holybolt.wav 793 | sfx\misc\hyper.wav 794 | sfx\misc\infravis.wav 795 | sfx\misc\invisibl.wav 796 | sfx\misc\invpot.wav 797 | sfx\misc\lghit.wav 798 | sfx\misc\lghit1.wav 799 | sfx\misc\lmag.wav 800 | sfx\misc\lning1.wav 801 | sfx\misc\ltning.wav 802 | sfx\misc\lvl16int.wav 803 | sfx\misc\mshield.wav 804 | sfx\misc\nova.wav 805 | sfx\misc\portal.wav 806 | sfx\misc\puddle.wav 807 | sfx\misc\questdon.wav 808 | sfx\misc\repair.wav 809 | sfx\misc\resur.wav 810 | sfx\misc\scurimp.wav 811 | sfx\misc\scurse.wav 812 | sfx\misc\sentinel.wav 813 | sfx\misc\shatter.wav 814 | sfx\misc\soulfire.wav 815 | sfx\misc\spoutlop.wav 816 | sfx\misc\spoutstr.wav 817 | sfx\misc\storm.wav 818 | sfx\misc\swing.wav 819 | sfx\misc\swing2.wav 820 | sfx\misc\teleport.wav 821 | sfx\misc\tmag.wav 822 | sfx\misc\trapdis.wav 823 | sfx\misc\vtheft.wav 824 | sfx\misc\walk1.wav 825 | sfx\misc\walk2.wav 826 | sfx\misc\walk3.wav 827 | sfx\misc\walk4.wav 828 | sfx\misc\wallloop.wav 829 | sfx\misc\wallstrt.wav 830 | sfx\towners\bmaid31.wav 831 | sfx\towners\bsmith44.wav 832 | sfx\towners\cow1.wav 833 | sfx\towners\cow2.wav 834 | sfx\towners\cow3.wav 835 | sfx\towners\cow4.wav 836 | sfx\towners\cow5.wav 837 | sfx\towners\cow6.wav 838 | sfx\towners\cow7.wav 839 | sfx\towners\cow8.wav 840 | sfx\towners\drunk27.wav 841 | sfx\towners\healer37.wav 842 | sfx\towners\pegboy32.wav 843 | sfx\towners\storyt25.wav 844 | sfx\towners\tavown00.wav 845 | sfx\towners\tavown36.wav 846 | sfx\towners\witch38.wav 847 | sfx\warrior\wario100.wav 848 | sfx\warrior\wario101.wav 849 | sfx\warrior\wario102.wav 850 | sfx\warrior\wario14b.wav 851 | sfx\warrior\wario14c.wav 852 | sfx\warrior\wario15b.wav 853 | sfx\warrior\wario15c.wav 854 | sfx\warrior\wario16b.wav 855 | sfx\warrior\wario16c.wav 856 | sfx\warrior\wario69b.wav 857 | sfx\warrior\wario95b.wav 858 | sfx\warrior\wario95c.wav 859 | sfx\warrior\wario95d.wav 860 | sfx\warrior\wario95e.wav 861 | sfx\warrior\wario95f.wav 862 | sfx\warrior\wario96b.wav 863 | sfx\warrior\wario96c.wav 864 | sfx\warrior\wario97.wav 865 | sfx\warrior\wario98.wav 866 | sfx\warrior\warior13.wav 867 | sfx\warrior\warior14.wav 868 | sfx\warrior\warior15.wav 869 | sfx\warrior\warior16.wav 870 | sfx\warrior\warior17.wav 871 | sfx\warrior\warior18.wav 872 | sfx\warrior\warior19.wav 873 | sfx\warrior\warior20.wav 874 | sfx\warrior\warior21.wav 875 | sfx\warrior\warior22.wav 876 | sfx\warrior\warior23.wav 877 | sfx\warrior\warior24.wav 878 | sfx\warrior\warior25.wav 879 | sfx\warrior\warior26.wav 880 | sfx\warrior\warior27.wav 881 | sfx\warrior\warior28.wav 882 | sfx\warrior\warior29.wav 883 | sfx\warrior\warior30.wav 884 | sfx\warrior\warior31.wav 885 | sfx\warrior\warior32.wav 886 | sfx\warrior\warior33.wav 887 | sfx\warrior\warior34.wav 888 | sfx\warrior\warior35.wav 889 | sfx\warrior\warior36.wav 890 | sfx\warrior\warior37.wav 891 | sfx\warrior\warior38.wav 892 | sfx\warrior\warior39.wav 893 | sfx\warrior\warior40.wav 894 | sfx\warrior\warior41.wav 895 | sfx\warrior\warior42.wav 896 | sfx\warrior\warior43.wav 897 | sfx\warrior\warior44.wav 898 | sfx\warrior\warior45.wav 899 | sfx\warrior\warior46.wav 900 | sfx\warrior\warior47.wav 901 | sfx\warrior\warior48.wav 902 | sfx\warrior\warior49.wav 903 | sfx\warrior\warior50.wav 904 | sfx\warrior\warior51.wav 905 | sfx\warrior\warior52.wav 906 | sfx\warrior\warior53.wav 907 | sfx\warrior\warior54.wav 908 | sfx\warrior\warior55.wav 909 | sfx\warrior\warior56.wav 910 | sfx\warrior\warior57.wav 911 | sfx\warrior\warior58.wav 912 | sfx\warrior\warior59.wav 913 | sfx\warrior\warior60.wav 914 | sfx\warrior\warior61.wav 915 | sfx\warrior\warior62.wav 916 | sfx\warrior\warior63.wav 917 | sfx\warrior\warior64.wav 918 | sfx\warrior\warior65.wav 919 | sfx\warrior\warior66.wav 920 | sfx\warrior\warior67.wav 921 | sfx\warrior\warior68.wav 922 | sfx\warrior\warior69.wav 923 | sfx\warrior\warior70.wav 924 | sfx\warrior\warior71.wav 925 | sfx\warrior\warior72.wav 926 | sfx\warrior\warior73.wav 927 | sfx\warrior\warior74.wav 928 | sfx\warrior\warior75.wav 929 | sfx\warrior\warior76.wav 930 | sfx\warrior\warior77.wav 931 | sfx\warrior\warior78.wav 932 | sfx\warrior\warior79.wav 933 | towners\animals\cow.cel 934 | towners\butch\deadguy.cel 935 | towners\drunk\twndrunk.cel 936 | towners\healer\healer.cel 937 | towners\priest\priest8.cel 938 | towners\smith\smithn.cel 939 | towners\smith\smithw.cel 940 | towners\strytell\strytell.cel 941 | towners\townboy\pegkid1.cel 942 | towners\townwmn1\witch.cel 943 | towners\townwmn1\wmnn.cel 944 | towners\townwmn1\wmnw.cel 945 | towners\twnf\twnfn.cel 946 | towners\twnf\twnfw.cel 947 | ui_art\badconn.pcx 948 | ui_art\black.pcx 949 | ui_art\bn_bkg.pcx 950 | ui_art\bnbuttns.pcx 951 | ui_art\bnconnbg.pcx 952 | ui_art\bnjoinbg.pcx 953 | ui_art\bnselchn.pcx 954 | ui_art\but_lrg.pcx 955 | ui_art\but_med.pcx 956 | ui_art\but_sml.pcx 957 | ui_art\but_xsm.pcx 958 | ui_art\button.pcx 959 | ui_art\cd_icons.pcx 960 | ui_art\chat_bkg.pcx 961 | ui_art\connanim.pcx 962 | ui_art\connect.pcx 963 | ui_art\creahero.pcx 964 | ui_art\creat_bg.pcx 965 | ui_art\credits.pcx 966 | ui_art\cursor.pcx 967 | ui_art\diffbtns.pcx 968 | ui_art\disclaim.pcx 969 | ui_art\epopup.pcx 970 | ui_art\focus.pcx 971 | ui_art\focus16.pcx 972 | ui_art\focus42.pcx 973 | ui_art\font16.bin 974 | ui_art\font16g.pcx 975 | ui_art\font16s.pcx 976 | ui_art\font24.bin 977 | ui_art\font24g.pcx 978 | ui_art\font24s.pcx 979 | ui_art\font30.bin 980 | ui_art\font30g.pcx 981 | ui_art\font30s.pcx 982 | ui_art\font42.bin 983 | ui_art\font42g.pcx 984 | ui_art\font42y.pcx 985 | ui_art\greenlag.pcx 986 | ui_art\heronum.pcx 987 | ui_art\heroport.pcx 988 | ui_art\heros.pcx 989 | ui_art\hpopup.pcx 990 | ui_art\ipx_bkg.pcx 991 | ui_art\listbox.pcx 992 | ui_art\logo.pcx 993 | ui_art\lpopup.pcx 994 | ui_art\lrpopup.pcx 995 | ui_art\mainmenu.pcx 996 | ui_art\menu.pcx 997 | ui_art\mmpopup.pcx 998 | ui_art\prog_bg.pcx 999 | ui_art\prog_fil.pcx 1000 | ui_art\r1_gry.pcx 1001 | ui_art\r3_gry.pcx 1002 | ui_art\radio1.pcx 1003 | ui_art\radio2.pcx 1004 | ui_art\radio3.pcx 1005 | ui_art\radio4.pcx 1006 | ui_art\redlag.pcx 1007 | ui_art\sb_arrow.pcx 1008 | ui_art\sb_bg.pcx 1009 | ui_art\sb_thumb.pcx 1010 | ui_art\scrlarrw.pcx 1011 | ui_art\scrlbar.pcx 1012 | ui_art\scrlthmb.pcx 1013 | ui_art\selconn.pcx 1014 | ui_art\seldiff.pcx 1015 | ui_art\selgame.pcx 1016 | ui_art\selhero.pcx 1017 | ui_art\smlogo.pcx 1018 | ui_art\special.pcx 1019 | ui_art\spopup.pcx 1020 | ui_art\spwnport.pcx 1021 | ui_art\srpopup.pcx 1022 | ui_art\swmmenu.pcx 1023 | ui_art\swmmpop.pcx 1024 | ui_art\title.pcx 1025 | ui_art\welcome.pcx 1026 | ui_art\xsmlogo.pcx 1027 | ui_art\yellolag.pcx 1028 | -------------------------------------------------------------------------------- /data/diabdat-clx.txt: -------------------------------------------------------------------------------- 1 | cl22clx --width 128 monsters/acid/acida.cl2 monsters/acid/acidd.cl2 monsters/acid/acidh.cl2 monsters/acid/acidn.cl2 monsters/acid/acids.cl2 monsters/acid/acidw.cl2 2 | cl22clx --width 128 monsters/bigfall/fallga.cl2 monsters/bigfall/fallgd.cl2 monsters/bigfall/fallgh.cl2 monsters/bigfall/fallgn.cl2 monsters/bigfall/fallgw.cl2 3 | cl22clx --width 128 monsters/demskel/demskla.cl2 monsters/demskel/demskld.cl2 monsters/demskel/demsklh.cl2 monsters/demskel/demskln.cl2 monsters/demskel/demskls.cl2 monsters/demskel/demsklw.cl2 4 | cl22clx --width 128 monsters/falspear/phalla.cl2 monsters/falspear/phalld.cl2 monsters/falspear/phallh.cl2 monsters/falspear/phalln.cl2 monsters/falspear/phalls.cl2 monsters/falspear/phallw.cl2 5 | cl22clx --width 128 monsters/falsword/falla.cl2 monsters/falsword/falld.cl2 monsters/falsword/fallh.cl2 monsters/falsword/falln.cl2 monsters/falsword/falls.cl2 monsters/falsword/fallw.cl2 6 | cl22clx --width 128 monsters/fat/fata.cl2 monsters/fat/fatd.cl2 monsters/fat/fath.cl2 monsters/fat/fatn.cl2 monsters/fat/fats.cl2 monsters/fat/fatw.cl2 7 | cl22clx --width 128 monsters/fatc/fatca.cl2 monsters/fatc/fatcd.cl2 monsters/fatc/fatch.cl2 monsters/fatc/fatcn.cl2 monsters/fatc/fatcw.cl2 8 | # cl22clx --width 128 monsters/fireman/firema.cl2 monsters/fireman/firemd.cl2 monsters/fireman/firemh.cl2 monsters/fireman/firemn.cl2 monsters/fireman/firems.cl2 monsters/fireman/firemw.cl2 9 | cl22clx --width 128 monsters/goatbow/goatba.cl2 monsters/goatbow/goatbd.cl2 monsters/goatbow/goatbh.cl2 monsters/goatbow/goatbn.cl2 monsters/goatbow/goatbw.cl2 10 | cl22clx --width 128 monsters/goatmace/goata.cl2 monsters/goatmace/goatd.cl2 monsters/goatmace/goath.cl2 monsters/goatmace/goatn.cl2 monsters/goatmace/goats.cl2 monsters/goatmace/goatw.cl2 11 | cl22clx --width 128 monsters/mage/magea.cl2 monsters/mage/maged.cl2 monsters/mage/mageh.cl2 monsters/mage/magen.cl2 monsters/mage/mages.cl2 monsters/mage/magew.cl2 12 | cl22clx --width 128 monsters/magma/magmaa.cl2 monsters/magma/magmad.cl2 monsters/magma/magmah.cl2 monsters/magma/magman.cl2 monsters/magma/magmas.cl2 monsters/magma/magmaw.cl2 13 | cl22clx --width 128 monsters/scav/scava.cl2 monsters/scav/scavd.cl2 monsters/scav/scavh.cl2 monsters/scav/scavn.cl2 monsters/scav/scavs.cl2 monsters/scav/scavw.cl2 14 | cl22clx --width 128 monsters/skelaxe/sklaxa.cl2 monsters/skelaxe/sklaxd.cl2 monsters/skelaxe/sklaxh.cl2 monsters/skelaxe/sklaxn.cl2 monsters/skelaxe/sklaxs.cl2 monsters/skelaxe/sklaxw.cl2 15 | cl22clx --width 128 monsters/skelbow/sklbwa.cl2 monsters/skelbow/sklbwd.cl2 monsters/skelbow/sklbwh.cl2 monsters/skelbow/sklbwn.cl2 monsters/skelbow/sklbws.cl2 monsters/skelbow/sklbww.cl2 16 | cl22clx --width 128 monsters/skelsd/sklsra.cl2 monsters/skelsd/sklsrd.cl2 monsters/skelsd/sklsrh.cl2 monsters/skelsd/sklsrn.cl2 monsters/skelsd/sklsrs.cl2 monsters/skelsd/sklsrw.cl2 17 | cl22clx --width 128 monsters/sneak/sneaka.cl2 monsters/sneak/sneakd.cl2 monsters/sneak/sneakh.cl2 monsters/sneak/sneakn.cl2 monsters/sneak/sneaks.cl2 monsters/sneak/sneakw.cl2 18 | cl22clx --width 128 monsters/succ/scbsa.cl2 monsters/succ/scbsd.cl2 monsters/succ/scbsh.cl2 monsters/succ/scbsn.cl2 monsters/succ/scbsw.cl2 19 | cl22clx --width 128 monsters/tsneak/tsneaka.cl2 monsters/tsneak/tsneakd.cl2 monsters/tsneak/tsneakh.cl2 monsters/tsneak/tsneakn.cl2 monsters/tsneak/tsneakw.cl2 20 | cl22clx --width 128 monsters/zombie/zombiea.cl2 monsters/zombie/zombied.cl2 monsters/zombie/zombieh.cl2 monsters/zombie/zombien.cl2 monsters/zombie/zombiew.cl2 21 | cl22clx --width 160 monsters/black/blacka.cl2 monsters/black/blackd.cl2 monsters/black/blackh.cl2 monsters/black/blackn.cl2 monsters/black/blackw.cl2 22 | cl22clx --width 160 monsters/diablo/diabloa.cl2 monsters/diablo/diablod.cl2 monsters/diablo/diabloh.cl2 monsters/diablo/diablon.cl2 monsters/diablo/diablos.cl2 monsters/diablo/diablow.cl2 23 | cl22clx --width 160 monsters/gargoyle/gargoa.cl2 monsters/gargoyle/gargod.cl2 monsters/gargoyle/gargoh.cl2 monsters/gargoyle/gargon.cl2 monsters/gargoyle/gargos.cl2 monsters/gargoyle/gargow.cl2 24 | cl22clx --width 160 monsters/goatlord/goatla.cl2 monsters/goatlord/goatlh.cl2 monsters/goatlord/goatln.cl2 monsters/goatlord/goatlw.cl2 25 | # cl22clx --width 160 monsters/goatlord/goatld.cl2 26 | cl22clx --width 160 monsters/mega/megaa.cl2 monsters/mega/megad.cl2 monsters/mega/megah.cl2 monsters/mega/megan.cl2 monsters/mega/megas.cl2 monsters/mega/megaw.cl2 27 | cl22clx --width 160 monsters/rhino/rhinoa.cl2 monsters/rhino/rhinod.cl2 monsters/rhino/rhinoh.cl2 monsters/rhino/rhinon.cl2 monsters/rhino/rhinos.cl2 monsters/rhino/rhinow.cl2 28 | cl22clx --width 160 monsters/sking/skinga.cl2 monsters/sking/skingd.cl2 monsters/sking/skingh.cl2 monsters/sking/skingn.cl2 monsters/sking/skings.cl2 monsters/sking/skingw.cl2 29 | cl22clx --width 160 monsters/snake/snakea.cl2 monsters/snake/snaked.cl2 monsters/snake/snakeh.cl2 monsters/snake/snaken.cl2 monsters/snake/snakes.cl2 monsters/snake/snakew.cl2 30 | cl22clx --width 160 monsters/thin/thina.cl2 monsters/thin/thind.cl2 monsters/thin/thinh.cl2 monsters/thin/thinn.cl2 monsters/thin/thins.cl2 monsters/thin/thinw.cl2 31 | cl22clx --width 96 monsters/bat/bata.cl2 monsters/bat/batd.cl2 monsters/bat/bath.cl2 monsters/bat/batn.cl2 monsters/bat/batw.cl2 32 | cl22clx --width 96 monsters/golem/golema.cl2 monsters/golem/golemd.cl2 monsters/golem/golems.cl2 monsters/golem/golemw.cl2 33 | cl22clx --width 96 monsters/unrav/unravd.cl2 monsters/unrav/unravh.cl2 monsters/unrav/unravn.cl2 monsters/unrav/unravs.cl2 34 | # cl22clx --width 96 monsters/unrav/unrava.cl2 35 | cel2clx --width 128 towners/animals/cow.cel 36 | cel2clx --width 96 towners/smith/smithn.cel towners/twnf/twnfn.cel towners/butch/deadguy.cel towners/townwmn1/witch.cel towners/townwmn1/wmnn.cel towners/townboy/pegkid1.cel towners/healer/healer.cel towners/strytell/strytell.cel towners/drunk/twndrunk.cel 37 | cl22clx --width 96 missiles/arrows.cl2 38 | cl22clx --width 96 --combine missiles/fireba1.cl2 missiles/fireba2.cl2 missiles/fireba3.cl2 missiles/fireba4.cl2 missiles/fireba5.cl2 missiles/fireba6.cl2 missiles/fireba7.cl2 missiles/fireba8.cl2 missiles/fireba9.cl2 missiles/fireba10.cl2 missiles/fireba11.cl2 missiles/fireba12.cl2 missiles/fireba13.cl2 missiles/fireba14.cl2 missiles/fireba15.cl2 missiles/fireba16.cl2 39 | cl22clx --width 96 --combine missiles/guard1.cl2 missiles/guard2.cl2 missiles/guard3.cl2 40 | cl22clx --width 96 missiles/lghning.cl2 41 | cl22clx --width 128 --combine missiles/firewal1.cl2 missiles/firewal2.cl2 42 | cl22clx --width 128 missiles/magblos.cl2 43 | cl22clx --width 96 --combine missiles/portal1.cl2 missiles/portal2.cl2 44 | cl22clx --width 160 missiles/bluexfr.cl2 45 | cl22clx --width 160 missiles/bluexbk.cl2 46 | cl22clx --width 96 missiles/manashld.cl2 47 | cl22clx --width 96 --combine missiles/farrow1.cl2 missiles/farrow2.cl2 missiles/farrow3.cl2 missiles/farrow4.cl2 missiles/farrow5.cl2 missiles/farrow6.cl2 missiles/farrow7.cl2 missiles/farrow8.cl2 missiles/farrow9.cl2 missiles/farrow10.cl2 missiles/farrow11.cl2 missiles/farrow12.cl2 missiles/farrow13.cl2 missiles/farrow14.cl2 missiles/farrow15.cl2 missiles/farrow16.cl2 48 | cl22clx --width 96 missiles/newexp.cl2 49 | cl22clx --width 128 missiles/shatter1.cl2 50 | cl22clx --width 160 missiles/bigexp.cl2 51 | cl22clx --width 96 missiles/inferno.cl2 52 | cl22clx --width 96 missiles/thinlght.cl2 53 | cl22clx --width 128 missiles/flare.cl2 54 | cl22clx --width 128 missiles/flareexp.cl2 55 | cl22clx --width 128 --combine missiles/magball1.cl2 missiles/magball2.cl2 missiles/magball3.cl2 missiles/magball4.cl2 missiles/magball5.cl2 missiles/magball6.cl2 missiles/magball7.cl2 missiles/magball8.cl2 56 | cl22clx --width 64 missiles/miniltng.cl2 57 | cl22clx --width 96 --combine missiles/holy1.cl2 missiles/holy2.cl2 missiles/holy3.cl2 missiles/holy4.cl2 missiles/holy5.cl2 missiles/holy6.cl2 missiles/holy7.cl2 missiles/holy8.cl2 missiles/holy9.cl2 missiles/holy10.cl2 missiles/holy11.cl2 missiles/holy12.cl2 missiles/holy13.cl2 missiles/holy14.cl2 missiles/holy15.cl2 missiles/holy16.cl2 58 | cl22clx --width 160 missiles/holyexpl.cl2 59 | cl22clx --width 96 --combine missiles/larrow1.cl2 missiles/larrow2.cl2 missiles/larrow3.cl2 missiles/larrow4.cl2 missiles/larrow5.cl2 missiles/larrow6.cl2 missiles/larrow7.cl2 missiles/larrow8.cl2 missiles/larrow9.cl2 missiles/larrow10.cl2 missiles/larrow11.cl2 missiles/larrow12.cl2 missiles/larrow13.cl2 missiles/larrow14.cl2 missiles/larrow15.cl2 missiles/larrow16.cl2 60 | cl22clx --width 96 --combine missiles/acidbf1.cl2 missiles/acidbf2.cl2 missiles/acidbf3.cl2 missiles/acidbf4.cl2 missiles/acidbf5.cl2 missiles/acidbf6.cl2 missiles/acidbf7.cl2 missiles/acidbf8.cl2 missiles/acidbf9.cl2 missiles/acidbf10.cl2 missiles/acidbf11.cl2 missiles/acidbf12.cl2 missiles/acidbf13.cl2 missiles/acidbf14.cl2 missiles/acidbf15.cl2 missiles/acidbf16.cl2 61 | cl22clx --width 96 missiles/acidspla.cl2 62 | cl22clx --width 96 --combine missiles/acidpud1.cl2 missiles/acidpud2.cl2 63 | cl22clx --width 96 --combine missiles/firerun1.cl2 missiles/firerun2.cl2 missiles/firerun3.cl2 missiles/firerun4.cl2 missiles/firerun5.cl2 missiles/firerun6.cl2 missiles/firerun7.cl2 missiles/firerun8.cl2 64 | cl22clx --width 96 missiles/ressur1.cl2 65 | cl22clx --width 96 --combine missiles/sklball1.cl2 missiles/sklball2.cl2 missiles/sklball3.cl2 missiles/sklball4.cl2 missiles/sklball5.cl2 missiles/sklball6.cl2 missiles/sklball7.cl2 missiles/sklball8.cl2 missiles/sklball9.cl2 66 | cl22clx --width 96 --combine missiles/rportal1.cl2 missiles/rportal2.cl2 67 | cl22clx --width 160 missiles/fireplar.cl2 68 | cl22clx --width 96 missiles/scubmisb.cl2 69 | cl22clx --width 128 missiles/scbsexpb.cl2 70 | cl22clx --width 96 missiles/scubmisc.cl2 71 | cl22clx --width 128 missiles/scbsexpc.cl2 72 | cl22clx --width 96 missiles/scubmisd.cl2 73 | cl22clx --width 128 missiles/scbsexpd.cl2 74 | # Sorcerer: 75 | cl22clx --width 96 plrgfx/sorceror/sha/shaas.cl2 plrgfx/sorceror/sha/shaaw.cl2 plrgfx/sorceror/sha/shaht.cl2 plrgfx/sorceror/sha/shast.cl2 plrgfx/sorceror/sha/shawl.cl2 plrgfx/sorceror/shb/shbas.cl2 plrgfx/sorceror/shb/shbaw.cl2 plrgfx/sorceror/shb/shbht.cl2 plrgfx/sorceror/shb/shbst.cl2 plrgfx/sorceror/shb/shbwl.cl2 plrgfx/sorceror/shd/shdas.cl2 plrgfx/sorceror/shd/shdaw.cl2 plrgfx/sorceror/shd/shdbl.cl2 plrgfx/sorceror/shd/shdht.cl2 plrgfx/sorceror/shd/shdst.cl2 plrgfx/sorceror/shd/shdwl.cl2 plrgfx/sorceror/shh/shhas.cl2 plrgfx/sorceror/shh/shhaw.cl2 plrgfx/sorceror/shh/shhbl.cl2 plrgfx/sorceror/shh/shhht.cl2 plrgfx/sorceror/shh/shhst.cl2 plrgfx/sorceror/shh/shhwl.cl2 plrgfx/sorceror/shm/shmas.cl2 plrgfx/sorceror/shm/shmaw.cl2 plrgfx/sorceror/shm/shmht.cl2 plrgfx/sorceror/shm/shmst.cl2 plrgfx/sorceror/shm/shmwl.cl2 plrgfx/sorceror/shn/shnas.cl2 plrgfx/sorceror/shn/shnaw.cl2 plrgfx/sorceror/shn/shnht.cl2 plrgfx/sorceror/shn/shnst.cl2 plrgfx/sorceror/shn/shnwl.cl2 plrgfx/sorceror/shs/shsas.cl2 plrgfx/sorceror/shs/shsaw.cl2 plrgfx/sorceror/shs/shsht.cl2 plrgfx/sorceror/shs/shsst.cl2 plrgfx/sorceror/shs/shswl.cl2 plrgfx/sorceror/sht/shtas.cl2 plrgfx/sorceror/sht/shtaw.cl2 plrgfx/sorceror/sht/shtht.cl2 plrgfx/sorceror/sht/shtst.cl2 plrgfx/sorceror/sht/shtwl.cl2 plrgfx/sorceror/shu/shuas.cl2 plrgfx/sorceror/shu/shuaw.cl2 plrgfx/sorceror/shu/shubl.cl2 plrgfx/sorceror/shu/shuht.cl2 plrgfx/sorceror/shu/shust.cl2 plrgfx/sorceror/shu/shuwl.cl2 plrgfx/sorceror/sla/slaas.cl2 plrgfx/sorceror/sla/slaaw.cl2 plrgfx/sorceror/sla/slaht.cl2 plrgfx/sorceror/sla/slast.cl2 plrgfx/sorceror/sla/slawl.cl2 plrgfx/sorceror/slb/slbas.cl2 plrgfx/sorceror/slb/slbaw.cl2 plrgfx/sorceror/slb/slbht.cl2 plrgfx/sorceror/slb/slbst.cl2 plrgfx/sorceror/slb/slbwl.cl2 plrgfx/sorceror/sld/sldas.cl2 plrgfx/sorceror/sld/sldaw.cl2 plrgfx/sorceror/sld/sldbl.cl2 plrgfx/sorceror/sld/sldht.cl2 plrgfx/sorceror/sld/sldst.cl2 plrgfx/sorceror/sld/sldwl.cl2 plrgfx/sorceror/slh/slhas.cl2 plrgfx/sorceror/slh/slhaw.cl2 plrgfx/sorceror/slh/slhbl.cl2 plrgfx/sorceror/slh/slhht.cl2 plrgfx/sorceror/slh/slhst.cl2 plrgfx/sorceror/slh/slhwl.cl2 plrgfx/sorceror/slm/slmas.cl2 plrgfx/sorceror/slm/slmaw.cl2 plrgfx/sorceror/slm/slmht.cl2 plrgfx/sorceror/slm/slmst.cl2 plrgfx/sorceror/slm/slmwl.cl2 plrgfx/sorceror/sln/slnas.cl2 plrgfx/sorceror/sln/slnaw.cl2 plrgfx/sorceror/sln/slnht.cl2 plrgfx/sorceror/sln/slnst.cl2 plrgfx/sorceror/sln/slnwl.cl2 plrgfx/sorceror/sls/slsas.cl2 plrgfx/sorceror/sls/slsaw.cl2 plrgfx/sorceror/sls/slsht.cl2 plrgfx/sorceror/sls/slsst.cl2 plrgfx/sorceror/sls/slswl.cl2 plrgfx/sorceror/slt/sltas.cl2 plrgfx/sorceror/slt/sltaw.cl2 plrgfx/sorceror/slt/sltht.cl2 plrgfx/sorceror/slt/sltst.cl2 plrgfx/sorceror/slt/sltwl.cl2 plrgfx/sorceror/slu/sluas.cl2 plrgfx/sorceror/slu/sluaw.cl2 plrgfx/sorceror/slu/slubl.cl2 plrgfx/sorceror/slu/sluht.cl2 plrgfx/sorceror/slu/slust.cl2 plrgfx/sorceror/slu/sluwl.cl2 plrgfx/sorceror/sma/smaas.cl2 plrgfx/sorceror/sma/smaaw.cl2 plrgfx/sorceror/sma/smaht.cl2 plrgfx/sorceror/sma/smast.cl2 plrgfx/sorceror/sma/smawl.cl2 plrgfx/sorceror/smb/smbas.cl2 plrgfx/sorceror/smb/smbaw.cl2 plrgfx/sorceror/smb/smbht.cl2 plrgfx/sorceror/smb/smbst.cl2 plrgfx/sorceror/smb/smbwl.cl2 plrgfx/sorceror/smd/smdas.cl2 plrgfx/sorceror/smd/smdaw.cl2 plrgfx/sorceror/smd/smdbl.cl2 plrgfx/sorceror/smd/smdht.cl2 plrgfx/sorceror/smd/smdst.cl2 plrgfx/sorceror/smd/smdwl.cl2 plrgfx/sorceror/smh/smhas.cl2 plrgfx/sorceror/smh/smhaw.cl2 plrgfx/sorceror/smh/smhbl.cl2 plrgfx/sorceror/smh/smhht.cl2 plrgfx/sorceror/smh/smhst.cl2 plrgfx/sorceror/smh/smhwl.cl2 plrgfx/sorceror/smm/smmas.cl2 plrgfx/sorceror/smm/smmaw.cl2 plrgfx/sorceror/smm/smmht.cl2 plrgfx/sorceror/smm/smmst.cl2 plrgfx/sorceror/smm/smmwl.cl2 plrgfx/sorceror/smn/smnas.cl2 plrgfx/sorceror/smn/smnaw.cl2 plrgfx/sorceror/smn/smnht.cl2 plrgfx/sorceror/smn/smnst.cl2 plrgfx/sorceror/smn/smnwl.cl2 plrgfx/sorceror/sms/smsas.cl2 plrgfx/sorceror/sms/smsaw.cl2 plrgfx/sorceror/sms/smsht.cl2 plrgfx/sorceror/sms/smsst.cl2 plrgfx/sorceror/sms/smswl.cl2 plrgfx/sorceror/smt/smtas.cl2 plrgfx/sorceror/smt/smtaw.cl2 plrgfx/sorceror/smt/smtht.cl2 plrgfx/sorceror/smt/smtst.cl2 plrgfx/sorceror/smt/smtwl.cl2 plrgfx/sorceror/smu/smuas.cl2 plrgfx/sorceror/smu/smuaw.cl2 plrgfx/sorceror/smu/smubl.cl2 plrgfx/sorceror/smu/smuht.cl2 plrgfx/sorceror/smu/smust.cl2 plrgfx/sorceror/smu/smuwl.cl2 76 | cl22clx --width 128 plrgfx/sorceror/sha/shaat.cl2 plrgfx/sorceror/shd/shdat.cl2 plrgfx/sorceror/shh/shhat.cl2 plrgfx/sorceror/shm/shmat.cl2 plrgfx/sorceror/shn/shnat.cl2 plrgfx/sorceror/shs/shsat.cl2 plrgfx/sorceror/sht/shtat.cl2 plrgfx/sorceror/shu/shuat.cl2 plrgfx/sorceror/sla/slaat.cl2 plrgfx/sorceror/sld/sldat.cl2 plrgfx/sorceror/slh/slhat.cl2 plrgfx/sorceror/slm/slmat.cl2 plrgfx/sorceror/sln/slnat.cl2 plrgfx/sorceror/sls/slsat.cl2 plrgfx/sorceror/slt/sltat.cl2 plrgfx/sorceror/slu/sluat.cl2 plrgfx/sorceror/sma/smaat.cl2 plrgfx/sorceror/smd/smdat.cl2 plrgfx/sorceror/smh/smhat.cl2 plrgfx/sorceror/smm/smmat.cl2 plrgfx/sorceror/smn/smnat.cl2 plrgfx/sorceror/sms/smsat.cl2 plrgfx/sorceror/smt/smtat.cl2 plrgfx/sorceror/smu/smuat.cl2 plrgfx/sorceror/smb/smbat.cl2 plrgfx/sorceror/slb/slbat.cl2 plrgfx/sorceror/shb/shbat.cl2 77 | # Sorcerer: Lightning, Fire, Magic 78 | cl22clx --width 128 plrgfx/sorceror/sha/shafm.cl2 plrgfx/sorceror/sha/shalm.cl2 plrgfx/sorceror/shb/shbfm.cl2 plrgfx/sorceror/shb/shblm.cl2 plrgfx/sorceror/shd/shdfm.cl2 plrgfx/sorceror/shd/shdlm.cl2 plrgfx/sorceror/shh/shhfm.cl2 plrgfx/sorceror/shh/shhlm.cl2 plrgfx/sorceror/shm/shmfm.cl2 plrgfx/sorceror/shm/shmlm.cl2 plrgfx/sorceror/shn/shnfm.cl2 plrgfx/sorceror/shn/shnlm.cl2 plrgfx/sorceror/shs/shsfm.cl2 plrgfx/sorceror/shs/shslm.cl2 plrgfx/sorceror/sht/shtfm.cl2 plrgfx/sorceror/sht/shtlm.cl2 plrgfx/sorceror/shu/shufm.cl2 plrgfx/sorceror/shu/shulm.cl2 plrgfx/sorceror/sla/slafm.cl2 plrgfx/sorceror/sla/slalm.cl2 plrgfx/sorceror/slb/slbfm.cl2 plrgfx/sorceror/slb/slblm.cl2 plrgfx/sorceror/sld/sldfm.cl2 plrgfx/sorceror/sld/sldlm.cl2 plrgfx/sorceror/slh/slhfm.cl2 plrgfx/sorceror/slh/slhlm.cl2 plrgfx/sorceror/slm/slmfm.cl2 plrgfx/sorceror/slm/slmlm.cl2 plrgfx/sorceror/sln/slnfm.cl2 plrgfx/sorceror/sln/slnlm.cl2 plrgfx/sorceror/sls/slsfm.cl2 plrgfx/sorceror/sls/slslm.cl2 plrgfx/sorceror/slt/sltfm.cl2 plrgfx/sorceror/slt/sltlm.cl2 plrgfx/sorceror/slu/slufm.cl2 plrgfx/sorceror/slu/slulm.cl2 plrgfx/sorceror/sma/smafm.cl2 plrgfx/sorceror/sma/smalm.cl2 plrgfx/sorceror/smb/smbfm.cl2 plrgfx/sorceror/smb/smblm.cl2 plrgfx/sorceror/smd/smdfm.cl2 plrgfx/sorceror/smd/smdlm.cl2 plrgfx/sorceror/smh/smhfm.cl2 plrgfx/sorceror/smh/smhlm.cl2 plrgfx/sorceror/smm/smmfm.cl2 plrgfx/sorceror/smm/smmlm.cl2 plrgfx/sorceror/smn/smnfm.cl2 plrgfx/sorceror/smn/smnlm.cl2 plrgfx/sorceror/sms/smsfm.cl2 plrgfx/sorceror/sms/smslm.cl2 plrgfx/sorceror/smt/smtfm.cl2 plrgfx/sorceror/smt/smtlm.cl2 plrgfx/sorceror/smu/smufm.cl2 plrgfx/sorceror/smu/smulm.cl2 plrgfx/sorceror/sha/shaqm.cl2 plrgfx/sorceror/shb/shbqm.cl2 plrgfx/sorceror/shd/shdqm.cl2 plrgfx/sorceror/shh/shhqm.cl2 plrgfx/sorceror/shm/shmqm.cl2 plrgfx/sorceror/shn/shnqm.cl2 plrgfx/sorceror/shs/shsqm.cl2 plrgfx/sorceror/sht/shtqm.cl2 plrgfx/sorceror/shu/shuqm.cl2 plrgfx/sorceror/sla/slaqm.cl2 plrgfx/sorceror/slb/slbqm.cl2 plrgfx/sorceror/sld/sldqm.cl2 plrgfx/sorceror/slh/slhqm.cl2 plrgfx/sorceror/slm/slmqm.cl2 plrgfx/sorceror/sln/slnqm.cl2 plrgfx/sorceror/sls/slsqm.cl2 plrgfx/sorceror/slt/sltqm.cl2 plrgfx/sorceror/slu/sluqm.cl2 plrgfx/sorceror/sma/smaqm.cl2 plrgfx/sorceror/smb/smbqm.cl2 plrgfx/sorceror/smd/smdqm.cl2 plrgfx/sorceror/smh/smhqm.cl2 plrgfx/sorceror/smm/smmqm.cl2 plrgfx/sorceror/smn/smnqm.cl2 plrgfx/sorceror/sms/smsqm.cl2 plrgfx/sorceror/smt/smtqm.cl2 plrgfx/sorceror/smu/smuqm.cl2 79 | # Sorcerer: Corpse 80 | cl22clx --width 128 plrgfx/sorceror/smn/smndt.cl2 plrgfx/sorceror/shn/shndt.cl2 plrgfx/sorceror/sln/slndt.cl2 81 | # Warrior: 82 | cl22clx --width 96 plrgfx/warrior/wmu/wmuht.cl2 plrgfx/warrior/wmu/wmufm.cl2 plrgfx/warrior/wmu/wmuas.cl2 plrgfx/warrior/wmu/wmuqm.cl2 plrgfx/warrior/wmu/wmuaw.cl2 plrgfx/warrior/wmu/wmubl.cl2 plrgfx/warrior/wmu/wmust.cl2 plrgfx/warrior/wmu/wmulm.cl2 plrgfx/warrior/wmu/wmuwl.cl2 plrgfx/warrior/whn/whnqm.cl2 plrgfx/warrior/whn/whnaw.cl2 plrgfx/warrior/whn/whnlm.cl2 plrgfx/warrior/whn/whnst.cl2 plrgfx/warrior/whn/whnfm.cl2 plrgfx/warrior/whn/whnwl.cl2 plrgfx/warrior/whn/whnas.cl2 plrgfx/warrior/whn/whnht.cl2 plrgfx/warrior/whb/whbaw.cl2 plrgfx/warrior/whb/whbst.cl2 plrgfx/warrior/whb/whbat.cl2 plrgfx/warrior/whb/whbfm.cl2 plrgfx/warrior/whb/whblm.cl2 plrgfx/warrior/whb/whbqm.cl2 plrgfx/warrior/whb/whbht.cl2 plrgfx/warrior/whb/whbwl.cl2 plrgfx/warrior/whb/whbas.cl2 plrgfx/warrior/wlu/wlust.cl2 plrgfx/warrior/wlu/wluht.cl2 plrgfx/warrior/wlu/wluas.cl2 plrgfx/warrior/wlu/wlufm.cl2 plrgfx/warrior/wlu/wluqm.cl2 plrgfx/warrior/wlu/wlubl.cl2 plrgfx/warrior/wlu/wluaw.cl2 plrgfx/warrior/wlu/wlulm.cl2 plrgfx/warrior/wlu/wluwl.cl2 plrgfx/warrior/whd/whdwl.cl2 plrgfx/warrior/whd/whdfm.cl2 plrgfx/warrior/whd/whdht.cl2 plrgfx/warrior/whd/whdaw.cl2 plrgfx/warrior/whd/whdlm.cl2 plrgfx/warrior/whd/whdbl.cl2 plrgfx/warrior/whd/whdqm.cl2 plrgfx/warrior/whd/whdst.cl2 plrgfx/warrior/whd/whdas.cl2 plrgfx/warrior/wlh/wlhwl.cl2 plrgfx/warrior/wlh/wlhst.cl2 plrgfx/warrior/wlh/wlhaw.cl2 plrgfx/warrior/wlh/wlhfm.cl2 plrgfx/warrior/wlh/wlhbl.cl2 plrgfx/warrior/wlh/wlhqm.cl2 plrgfx/warrior/wlh/wlhas.cl2 plrgfx/warrior/wlh/wlhht.cl2 plrgfx/warrior/wlh/wlhlm.cl2 plrgfx/warrior/wla/wlaht.cl2 plrgfx/warrior/wla/wlaqm.cl2 plrgfx/warrior/wla/wlaas.cl2 plrgfx/warrior/wla/wlaaw.cl2 plrgfx/warrior/wla/wlast.cl2 plrgfx/warrior/wla/wlafm.cl2 plrgfx/warrior/wla/wlalm.cl2 plrgfx/warrior/wla/wlawl.cl2 plrgfx/warrior/wmm/wmmfm.cl2 plrgfx/warrior/wmm/wmmlm.cl2 plrgfx/warrior/wmm/wmmst.cl2 plrgfx/warrior/wmm/wmmas.cl2 plrgfx/warrior/wmm/wmmaw.cl2 plrgfx/warrior/wmm/wmmht.cl2 plrgfx/warrior/wmm/wmmqm.cl2 plrgfx/warrior/wmm/wmmwl.cl2 plrgfx/warrior/wha/whalm.cl2 plrgfx/warrior/wha/whaqm.cl2 plrgfx/warrior/wha/whaht.cl2 plrgfx/warrior/wha/whawl.cl2 plrgfx/warrior/wha/whaas.cl2 plrgfx/warrior/wha/whast.cl2 plrgfx/warrior/wha/whaaw.cl2 plrgfx/warrior/wha/whafm.cl2 plrgfx/warrior/wmn/wmnht.cl2 plrgfx/warrior/wmn/wmnwl.cl2 plrgfx/warrior/wmn/wmnqm.cl2 plrgfx/warrior/wmn/wmnst.cl2 plrgfx/warrior/wmn/wmnas.cl2 plrgfx/warrior/wmn/wmnfm.cl2 plrgfx/warrior/wmn/wmnlm.cl2 plrgfx/warrior/wmn/wmnaw.cl2 plrgfx/warrior/wlm/wlmwl.cl2 plrgfx/warrior/wlm/wlmas.cl2 plrgfx/warrior/wlm/wlmfm.cl2 plrgfx/warrior/wlm/wlmqm.cl2 plrgfx/warrior/wlm/wlmst.cl2 plrgfx/warrior/wlm/wlmlm.cl2 plrgfx/warrior/wlm/wlmht.cl2 plrgfx/warrior/wlm/wlmaw.cl2 plrgfx/warrior/whs/whsqm.cl2 plrgfx/warrior/whs/whsfm.cl2 plrgfx/warrior/whs/whswl.cl2 plrgfx/warrior/whs/whsas.cl2 plrgfx/warrior/whs/whsst.cl2 plrgfx/warrior/whs/whsht.cl2 plrgfx/warrior/whs/whslm.cl2 plrgfx/warrior/whs/whsaw.cl2 plrgfx/warrior/wmt/wmtht.cl2 plrgfx/warrior/wmt/wmtqm.cl2 plrgfx/warrior/wmt/wmtst.cl2 plrgfx/warrior/wmt/wmtas.cl2 plrgfx/warrior/wmt/wmtwl.cl2 plrgfx/warrior/wmt/wmtfm.cl2 plrgfx/warrior/wmt/wmtaw.cl2 plrgfx/warrior/wmt/wmtlm.cl2 plrgfx/warrior/whm/whmwl.cl2 plrgfx/warrior/whm/whmaw.cl2 plrgfx/warrior/whm/whmlm.cl2 plrgfx/warrior/whm/whmqm.cl2 plrgfx/warrior/whm/whmst.cl2 plrgfx/warrior/whm/whmas.cl2 plrgfx/warrior/whm/whmht.cl2 plrgfx/warrior/whm/whmfm.cl2 plrgfx/warrior/wma/wmafm.cl2 plrgfx/warrior/wma/wmalm.cl2 plrgfx/warrior/wma/wmaht.cl2 plrgfx/warrior/wma/wmaaw.cl2 plrgfx/warrior/wma/wmast.cl2 plrgfx/warrior/wma/wmawl.cl2 plrgfx/warrior/wma/wmaqm.cl2 plrgfx/warrior/wma/wmaas.cl2 plrgfx/warrior/wld/wldht.cl2 plrgfx/warrior/wld/wldlm.cl2 plrgfx/warrior/wld/wldbl.cl2 plrgfx/warrior/wld/wldst.cl2 plrgfx/warrior/wld/wldqm.cl2 plrgfx/warrior/wld/wldaw.cl2 plrgfx/warrior/wld/wldfm.cl2 plrgfx/warrior/wld/wldwl.cl2 plrgfx/warrior/wld/wldas.cl2 plrgfx/warrior/whh/whhbl.cl2 plrgfx/warrior/whh/whhas.cl2 plrgfx/warrior/whh/whhaw.cl2 plrgfx/warrior/whh/whhst.cl2 plrgfx/warrior/whh/whhqm.cl2 plrgfx/warrior/whh/whhwl.cl2 plrgfx/warrior/whh/whhfm.cl2 plrgfx/warrior/whh/whhlm.cl2 plrgfx/warrior/whh/whhht.cl2 plrgfx/warrior/wlb/wlbwl.cl2 plrgfx/warrior/wlb/wlbht.cl2 plrgfx/warrior/wlb/wlbat.cl2 plrgfx/warrior/wlb/wlbqm.cl2 plrgfx/warrior/wlb/wlbst.cl2 plrgfx/warrior/wlb/wlbaw.cl2 plrgfx/warrior/wlb/wlblm.cl2 plrgfx/warrior/wlb/wlbfm.cl2 plrgfx/warrior/wlb/wlbas.cl2 plrgfx/warrior/wln/wlnst.cl2 plrgfx/warrior/wln/wlnas.cl2 plrgfx/warrior/wln/wlnfm.cl2 plrgfx/warrior/wln/wlnaw.cl2 plrgfx/warrior/wln/wlnwl.cl2 plrgfx/warrior/wln/wlnht.cl2 plrgfx/warrior/wln/wlnlm.cl2 plrgfx/warrior/wln/wlnqm.cl2 plrgfx/warrior/wmb/wmbwl.cl2 plrgfx/warrior/wmb/wmbaw.cl2 plrgfx/warrior/wmb/wmbht.cl2 plrgfx/warrior/wmb/wmbas.cl2 plrgfx/warrior/wmb/wmbfm.cl2 plrgfx/warrior/wmb/wmbat.cl2 plrgfx/warrior/wmb/wmbst.cl2 plrgfx/warrior/wmb/wmblm.cl2 plrgfx/warrior/wmb/wmbqm.cl2 plrgfx/warrior/whu/whuaw.cl2 plrgfx/warrior/whu/whubl.cl2 plrgfx/warrior/whu/whust.cl2 plrgfx/warrior/whu/whuht.cl2 plrgfx/warrior/whu/whufm.cl2 plrgfx/warrior/whu/whuas.cl2 plrgfx/warrior/whu/whuqm.cl2 plrgfx/warrior/whu/whuwl.cl2 plrgfx/warrior/whu/whulm.cl2 plrgfx/warrior/wls/wlsht.cl2 plrgfx/warrior/wls/wlsst.cl2 plrgfx/warrior/wls/wlswl.cl2 plrgfx/warrior/wls/wlslm.cl2 plrgfx/warrior/wls/wlsqm.cl2 plrgfx/warrior/wls/wlsas.cl2 plrgfx/warrior/wls/wlsaw.cl2 plrgfx/warrior/wls/wlsfm.cl2 plrgfx/warrior/wlt/wltqm.cl2 plrgfx/warrior/wlt/wltfm.cl2 plrgfx/warrior/wlt/wltwl.cl2 plrgfx/warrior/wlt/wltst.cl2 plrgfx/warrior/wlt/wltas.cl2 plrgfx/warrior/wlt/wltht.cl2 plrgfx/warrior/wlt/wltaw.cl2 plrgfx/warrior/wlt/wltlm.cl2 plrgfx/warrior/wmh/wmhaw.cl2 plrgfx/warrior/wmh/wmhlm.cl2 plrgfx/warrior/wmh/wmhqm.cl2 plrgfx/warrior/wmh/wmhfm.cl2 plrgfx/warrior/wmh/wmhbl.cl2 plrgfx/warrior/wmh/wmhst.cl2 plrgfx/warrior/wmh/wmhht.cl2 plrgfx/warrior/wmh/wmhwl.cl2 plrgfx/warrior/wmh/wmhas.cl2 plrgfx/warrior/wms/wmslm.cl2 plrgfx/warrior/wms/wmsht.cl2 plrgfx/warrior/wms/wmsst.cl2 plrgfx/warrior/wms/wmswl.cl2 plrgfx/warrior/wms/wmsqm.cl2 plrgfx/warrior/wms/wmsas.cl2 plrgfx/warrior/wms/wmsfm.cl2 plrgfx/warrior/wms/wmsaw.cl2 plrgfx/warrior/wht/whtlm.cl2 plrgfx/warrior/wht/whtqm.cl2 plrgfx/warrior/wht/whtwl.cl2 plrgfx/warrior/wht/whtfm.cl2 plrgfx/warrior/wht/whtht.cl2 plrgfx/warrior/wht/whtst.cl2 plrgfx/warrior/wht/whtas.cl2 plrgfx/warrior/wht/whtaw.cl2 plrgfx/warrior/wmd/wmdlm.cl2 plrgfx/warrior/wmd/wmdht.cl2 plrgfx/warrior/wmd/wmdqm.cl2 plrgfx/warrior/wmd/wmdas.cl2 plrgfx/warrior/wmd/wmdaw.cl2 plrgfx/warrior/wmd/wmdst.cl2 plrgfx/warrior/wmd/wmdbl.cl2 plrgfx/warrior/wmd/wmdfm.cl2 plrgfx/warrior/wmd/wmdwl.cl2 83 | cl22clx --width 128 plrgfx/warrior/wmu/wmuat.cl2 plrgfx/warrior/whn/whnat.cl2 plrgfx/warrior/wlu/wluat.cl2 plrgfx/warrior/wlh/wlhat.cl2 plrgfx/warrior/whd/whdat.cl2 plrgfx/warrior/wla/wlaat.cl2 plrgfx/warrior/wmm/wmmat.cl2 plrgfx/warrior/wha/whaat.cl2 plrgfx/warrior/wmn/wmnat.cl2 plrgfx/warrior/wlm/wlmat.cl2 plrgfx/warrior/whs/whsat.cl2 plrgfx/warrior/whm/whmat.cl2 plrgfx/warrior/wma/wmaat.cl2 plrgfx/warrior/wld/wldat.cl2 plrgfx/warrior/whh/whhat.cl2 plrgfx/warrior/wln/wlnat.cl2 plrgfx/warrior/whu/whuat.cl2 plrgfx/warrior/wls/wlsat.cl2 plrgfx/warrior/wlt/wltat.cl2 plrgfx/warrior/wmh/wmhat.cl2 plrgfx/warrior/wms/wmsat.cl2 plrgfx/warrior/wmt/wmtat.cl2 plrgfx/warrior/wht/whtat.cl2 plrgfx/warrior/wmd/wmdat.cl2 84 | # Warrior: Corpse 85 | cl22clx --width 128 plrgfx/warrior/whn/whndt.cl2 plrgfx/warrior/wln/wlndt.cl2 plrgfx/warrior/wmn/wmndt.cl2 86 | # Rogue: 87 | cl22clx --width 96 plrgfx/rogue/rmb/rmbfm.cl2 plrgfx/rogue/rmb/rmbwl.cl2 plrgfx/rogue/rmb/rmbqm.cl2 plrgfx/rogue/rmb/rmbas.cl2 plrgfx/rogue/rmb/rmblm.cl2 plrgfx/rogue/rmb/rmbaw.cl2 plrgfx/rogue/rmb/rmbht.cl2 plrgfx/rogue/rmb/rmbst.cl2 plrgfx/rogue/rln/rlnaw.cl2 plrgfx/rogue/rln/rlnfm.cl2 plrgfx/rogue/rln/rlnlm.cl2 plrgfx/rogue/rln/rlnas.cl2 plrgfx/rogue/rln/rlnht.cl2 plrgfx/rogue/rln/rlnwl.cl2 plrgfx/rogue/rln/rlnst.cl2 plrgfx/rogue/rln/rlnqm.cl2 plrgfx/rogue/rlh/rlhht.cl2 plrgfx/rogue/rlh/rlhas.cl2 plrgfx/rogue/rlh/rlhwl.cl2 plrgfx/rogue/rlh/rlhfm.cl2 plrgfx/rogue/rlh/rlhlm.cl2 plrgfx/rogue/rlh/rlhst.cl2 plrgfx/rogue/rlh/rlhqm.cl2 plrgfx/rogue/rlh/rlhbl.cl2 plrgfx/rogue/rlh/rlhaw.cl2 plrgfx/rogue/rmn/rmnht.cl2 plrgfx/rogue/rmn/rmnas.cl2 plrgfx/rogue/rmn/rmnfm.cl2 plrgfx/rogue/rmn/rmnwl.cl2 plrgfx/rogue/rmn/rmnqm.cl2 plrgfx/rogue/rmn/rmnaw.cl2 plrgfx/rogue/rmn/rmnst.cl2 plrgfx/rogue/rmn/rmnlm.cl2 plrgfx/rogue/rhs/rhsaw.cl2 plrgfx/rogue/rhs/rhsht.cl2 plrgfx/rogue/rhs/rhsfm.cl2 plrgfx/rogue/rhs/rhswl.cl2 plrgfx/rogue/rhs/rhsas.cl2 plrgfx/rogue/rhs/rhsst.cl2 plrgfx/rogue/rhs/rhsqm.cl2 plrgfx/rogue/rhs/rhslm.cl2 plrgfx/rogue/rhh/rhhbl.cl2 plrgfx/rogue/rhh/rhhfm.cl2 plrgfx/rogue/rhh/rhhas.cl2 plrgfx/rogue/rhh/rhhaw.cl2 plrgfx/rogue/rhh/rhhst.cl2 plrgfx/rogue/rhh/rhhwl.cl2 plrgfx/rogue/rhh/rhhht.cl2 plrgfx/rogue/rhh/rhhqm.cl2 plrgfx/rogue/rhh/rhhlm.cl2 plrgfx/rogue/rla/rlafm.cl2 plrgfx/rogue/rla/rlaht.cl2 plrgfx/rogue/rla/rlaaw.cl2 plrgfx/rogue/rla/rlaqm.cl2 plrgfx/rogue/rla/rlast.cl2 plrgfx/rogue/rla/rlaas.cl2 plrgfx/rogue/rla/rlalm.cl2 plrgfx/rogue/rla/rlawl.cl2 plrgfx/rogue/rlb/rlbfm.cl2 plrgfx/rogue/rlb/rlbst.cl2 plrgfx/rogue/rlb/rlbqm.cl2 plrgfx/rogue/rlb/rlbht.cl2 plrgfx/rogue/rlb/rlblm.cl2 plrgfx/rogue/rlb/rlbas.cl2 plrgfx/rogue/rlb/rlbwl.cl2 plrgfx/rogue/rlb/rlbaw.cl2 plrgfx/rogue/rmm/rmmfm.cl2 plrgfx/rogue/rmm/rmmas.cl2 plrgfx/rogue/rmm/rmmst.cl2 plrgfx/rogue/rmm/rmmaw.cl2 plrgfx/rogue/rmm/rmmqm.cl2 plrgfx/rogue/rmm/rmmwl.cl2 plrgfx/rogue/rmm/rmmlm.cl2 plrgfx/rogue/rmm/rmmht.cl2 plrgfx/rogue/rma/rmaaw.cl2 plrgfx/rogue/rma/rmaht.cl2 plrgfx/rogue/rma/rmafm.cl2 plrgfx/rogue/rma/rmaqm.cl2 plrgfx/rogue/rma/rmawl.cl2 plrgfx/rogue/rma/rmaas.cl2 plrgfx/rogue/rma/rmast.cl2 plrgfx/rogue/rma/rmalm.cl2 plrgfx/rogue/rlm/rlmwl.cl2 plrgfx/rogue/rlm/rlmlm.cl2 plrgfx/rogue/rlm/rlmas.cl2 plrgfx/rogue/rlm/rlmst.cl2 plrgfx/rogue/rlm/rlmqm.cl2 plrgfx/rogue/rlm/rlmfm.cl2 plrgfx/rogue/rlm/rlmaw.cl2 plrgfx/rogue/rlm/rlmht.cl2 plrgfx/rogue/rhu/rhuaw.cl2 plrgfx/rogue/rhu/rhuqm.cl2 plrgfx/rogue/rhu/rhubl.cl2 plrgfx/rogue/rhu/rhuas.cl2 plrgfx/rogue/rhu/rhulm.cl2 plrgfx/rogue/rhu/rhuwl.cl2 plrgfx/rogue/rhu/rhuht.cl2 plrgfx/rogue/rhu/rhust.cl2 plrgfx/rogue/rhu/rhufm.cl2 plrgfx/rogue/rmu/rmubl.cl2 plrgfx/rogue/rmu/rmuaw.cl2 plrgfx/rogue/rmu/rmuht.cl2 plrgfx/rogue/rmu/rmust.cl2 plrgfx/rogue/rmu/rmuqm.cl2 plrgfx/rogue/rmu/rmulm.cl2 plrgfx/rogue/rmu/rmuas.cl2 plrgfx/rogue/rmu/rmuwl.cl2 plrgfx/rogue/rmu/rmufm.cl2 plrgfx/rogue/rms/rmsas.cl2 plrgfx/rogue/rms/rmsaw.cl2 plrgfx/rogue/rms/rmsst.cl2 plrgfx/rogue/rms/rmsfm.cl2 plrgfx/rogue/rms/rmsht.cl2 plrgfx/rogue/rms/rmslm.cl2 plrgfx/rogue/rms/rmsqm.cl2 plrgfx/rogue/rms/rmswl.cl2 plrgfx/rogue/rmd/rmdbl.cl2 plrgfx/rogue/rmd/rmdwl.cl2 plrgfx/rogue/rmd/rmdqm.cl2 plrgfx/rogue/rmd/rmdst.cl2 plrgfx/rogue/rmd/rmdfm.cl2 plrgfx/rogue/rmd/rmdas.cl2 plrgfx/rogue/rmd/rmdht.cl2 plrgfx/rogue/rmd/rmdaw.cl2 plrgfx/rogue/rmd/rmdlm.cl2 plrgfx/rogue/rhb/rhbht.cl2 plrgfx/rogue/rhb/rhbst.cl2 plrgfx/rogue/rhb/rhbwl.cl2 plrgfx/rogue/rhb/rhbas.cl2 plrgfx/rogue/rhb/rhblm.cl2 plrgfx/rogue/rhb/rhbqm.cl2 plrgfx/rogue/rhb/rhbfm.cl2 plrgfx/rogue/rhb/rhbaw.cl2 plrgfx/rogue/rmh/rmhqm.cl2 plrgfx/rogue/rmh/rmhfm.cl2 plrgfx/rogue/rmh/rmhst.cl2 plrgfx/rogue/rmh/rmhas.cl2 plrgfx/rogue/rmh/rmhbl.cl2 plrgfx/rogue/rmh/rmhaw.cl2 plrgfx/rogue/rmh/rmhlm.cl2 plrgfx/rogue/rmh/rmhht.cl2 plrgfx/rogue/rmh/rmhwl.cl2 plrgfx/rogue/rht/rhtst.cl2 plrgfx/rogue/rht/rhtqm.cl2 plrgfx/rogue/rht/rhtaw.cl2 plrgfx/rogue/rht/rhtas.cl2 plrgfx/rogue/rht/rhtfm.cl2 plrgfx/rogue/rht/rhtwl.cl2 plrgfx/rogue/rht/rhtlm.cl2 plrgfx/rogue/rht/rhtht.cl2 plrgfx/rogue/rls/rlsfm.cl2 plrgfx/rogue/rls/rlsaw.cl2 plrgfx/rogue/rls/rlsht.cl2 plrgfx/rogue/rls/rlsqm.cl2 plrgfx/rogue/rls/rlsas.cl2 plrgfx/rogue/rls/rlslm.cl2 plrgfx/rogue/rls/rlsst.cl2 plrgfx/rogue/rls/rlswl.cl2 plrgfx/rogue/rha/rhaht.cl2 plrgfx/rogue/rha/rhawl.cl2 plrgfx/rogue/rha/rhaaw.cl2 plrgfx/rogue/rha/rhafm.cl2 plrgfx/rogue/rha/rhaas.cl2 plrgfx/rogue/rha/rhaqm.cl2 plrgfx/rogue/rha/rhalm.cl2 plrgfx/rogue/rha/rhast.cl2 plrgfx/rogue/rmt/rmtfm.cl2 plrgfx/rogue/rmt/rmtst.cl2 plrgfx/rogue/rmt/rmtlm.cl2 plrgfx/rogue/rmt/rmtht.cl2 plrgfx/rogue/rmt/rmtwl.cl2 plrgfx/rogue/rmt/rmtqm.cl2 plrgfx/rogue/rmt/rmtaw.cl2 plrgfx/rogue/rmt/rmtas.cl2 plrgfx/rogue/rhd/rhdas.cl2 plrgfx/rogue/rhd/rhdfm.cl2 plrgfx/rogue/rhd/rhdbl.cl2 plrgfx/rogue/rhd/rhdlm.cl2 plrgfx/rogue/rhd/rhdwl.cl2 plrgfx/rogue/rhd/rhdst.cl2 plrgfx/rogue/rhd/rhdht.cl2 plrgfx/rogue/rhd/rhdqm.cl2 plrgfx/rogue/rhd/rhdaw.cl2 plrgfx/rogue/rlt/rltht.cl2 plrgfx/rogue/rlt/rltaw.cl2 plrgfx/rogue/rlt/rltwl.cl2 plrgfx/rogue/rlt/rltas.cl2 plrgfx/rogue/rlt/rltlm.cl2 plrgfx/rogue/rlt/rltfm.cl2 plrgfx/rogue/rlt/rltqm.cl2 plrgfx/rogue/rlt/rltst.cl2 plrgfx/rogue/rld/rldwl.cl2 plrgfx/rogue/rld/rldqm.cl2 plrgfx/rogue/rld/rldfm.cl2 plrgfx/rogue/rld/rldht.cl2 plrgfx/rogue/rld/rldst.cl2 plrgfx/rogue/rld/rldlm.cl2 plrgfx/rogue/rld/rldbl.cl2 plrgfx/rogue/rld/rldaw.cl2 plrgfx/rogue/rld/rldas.cl2 plrgfx/rogue/rlu/rluht.cl2 plrgfx/rogue/rlu/rluaw.cl2 plrgfx/rogue/rlu/rluwl.cl2 plrgfx/rogue/rlu/rlufm.cl2 plrgfx/rogue/rlu/rlust.cl2 plrgfx/rogue/rlu/rluqm.cl2 plrgfx/rogue/rlu/rluas.cl2 plrgfx/rogue/rlu/rlulm.cl2 plrgfx/rogue/rlu/rlubl.cl2 plrgfx/rogue/rhn/rhnqm.cl2 plrgfx/rogue/rhn/rhnst.cl2 plrgfx/rogue/rhn/rhnwl.cl2 plrgfx/rogue/rhn/rhnht.cl2 plrgfx/rogue/rhn/rhnas.cl2 plrgfx/rogue/rhn/rhnlm.cl2 plrgfx/rogue/rhn/rhnaw.cl2 plrgfx/rogue/rhn/rhnfm.cl2 plrgfx/rogue/rhm/rhmht.cl2 plrgfx/rogue/rhm/rhmst.cl2 plrgfx/rogue/rhm/rhmfm.cl2 plrgfx/rogue/rhm/rhmqm.cl2 plrgfx/rogue/rhm/rhmlm.cl2 plrgfx/rogue/rhm/rhmas.cl2 plrgfx/rogue/rhm/rhmwl.cl2 plrgfx/rogue/rhm/rhmaw.cl2 88 | cl22clx --width 128 plrgfx/rogue/rln/rlnat.cl2 plrgfx/rogue/rlh/rlhat.cl2 plrgfx/rogue/rmn/rmnat.cl2 plrgfx/rogue/rhs/rhsat.cl2 plrgfx/rogue/rhh/rhhat.cl2 plrgfx/rogue/rla/rlaat.cl2 plrgfx/rogue/rmm/rmmat.cl2 plrgfx/rogue/rma/rmaat.cl2 plrgfx/rogue/rlm/rlmat.cl2 plrgfx/rogue/rhu/rhuat.cl2 plrgfx/rogue/rmu/rmuat.cl2 plrgfx/rogue/rms/rmsat.cl2 plrgfx/rogue/rmd/rmdat.cl2 plrgfx/rogue/rmh/rmhat.cl2 plrgfx/rogue/rht/rhtat.cl2 plrgfx/rogue/rls/rlsat.cl2 plrgfx/rogue/rha/rhaat.cl2 plrgfx/rogue/rmt/rmtat.cl2 plrgfx/rogue/rhd/rhdat.cl2 plrgfx/rogue/rlt/rltat.cl2 plrgfx/rogue/rld/rldat.cl2 plrgfx/rogue/rlu/rluat.cl2 plrgfx/rogue/rhn/rhnat.cl2 plrgfx/rogue/rhm/rhmat.cl2 plrgfx/rogue/rmb/rmbat.cl2 plrgfx/rogue/rlb/rlbat.cl2 plrgfx/rogue/rhb/rhbat.cl2 89 | # Rogue: Corpse 90 | cl22clx --width 128 plrgfx/rogue/rln/rlndt.cl2 plrgfx/rogue/rhn/rhndt.cl2 plrgfx/rogue/rmn/rmndt.cl2 91 | cel2clx --width 640 ctrlpan/panel8.cel 92 | cel2clx --width 88 ctrlpan/p8bulbs.cel 93 | cel2clx --width 640 ctrlpan/talkpanl.cel 94 | cel2clx --width 33 ctrlpan/p8but2.cel 95 | cel2clx --width 61 ctrlpan/talkbutt.cel 96 | cel2clx --width 71 ctrlpan/panel8bu.cel 97 | cel2clx --width 95,41,41,41,41,41,41,41,41 data/charbut.cel 98 | cel2clx --width 32 items/duricons.cel 99 | cel2clx --width 261 ctrlpan/golddrop.cel 100 | cel2clx --width 33,32,32,32,32,32,32,32,32,32,23,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56 data/inv/objcurs.cel 101 | cel2clx --width 56 ctrlpan/spelicon.cel 102 | cel2clx --width 320 data/quest.cel data/spellbk.cel data/inv/inv_sor.cel data/inv/inv.cel data/inv/inv_rog.cel 103 | cel2clx --width 76 data/spellbkb.cel 104 | cel2clx --width 37 data/spelli2.cel 105 | cel2clx --width 128 objects/altboy.cel objects/lshrineg.cel objects/lzstand.cel objects/nude2.cel objects/mfountn.cel objects/pfountn.cel objects/tfountn.cel objects/rshrineg.cel objects/sarc.cel objects/tnudem.cel objects/tnudew.cel objects/tsoul.cel 106 | cel2clx --width 160 objects/burncros.cel 107 | cel2clx --width 64 objects/l1braz.cel objects/l1doors.cel objects/l2doors.cel objects/l3doors.cel objects/miniwatr.cel objects/traphole.cel 108 | cel2clx --width 96 objects/angel.cel objects/armstand.cel objects/banner.cel objects/barrel.cel objects/barrelex.cel objects/bcase.cel objects/bkslbrnt.cel objects/bloodfnt.cel objects/book1.cel objects/book2.cel objects/bshelf.cel objects/candle2.cel objects/cauldren.cel objects/chest1.cel objects/chest2.cel objects/chest3.cel objects/cruxsk1.cel objects/cruxsk2.cel objects/cruxsk3.cel objects/decap.cel objects/flame1.cel objects/goatshrn.cel objects/lever.cel objects/mcirl.cel objects/mushptch.cel objects/pedistl.cel objects/prsrplt1.cel objects/rockstan.cel objects/skulfire.cel objects/skulpile.cel objects/skulstik.cel objects/switch4.cel objects/weapstnd.cel objects/wtorch1.cel objects/wtorch2.cel objects/wtorch3.cel objects/wtorch4.cel 109 | cel2clx --width 96 items/armor2.cel items/axe.cel items/fbttle.cel items/bow.cel items/goldflip.cel items/helmut.cel items/mace.cel items/shield.cel items/swrdflip.cel items/rock.cel items/cleaver.cel items/staff.cel items/ring.cel items/crownf.cel items/larmor.cel items/wshield.cel items/scroll.cel items/fplatear.cel items/fbook.cel items/food.cel items/fbttlebb.cel items/fbttledy.cel items/fbttleor.cel items/fbttlebr.cel items/fbttlebl.cel items/fbttleby.cel items/fbttlewh.cel items/fbttledb.cel items/fear.cel items/fbrain.cel items/fmush.cel items/innsign.cel items/bldstn.cel items/fanvil.cel items/flazstaf.cel 110 | cel2clx --width 296 data/diabsmal.cel 111 | cel2clx --width 640 gendata/cuttt.cel gendata/cut2.cel gendata/cut3.cel gendata/cut4.cel gendata/cutportl.cel gendata/cutportr.cel gendata/cutgate.cel gendata/cutstart.cel gendata/cutl1d.cel 112 | cel2clx --width 12 data/textslid.cel 113 | cel2clx --width 271 data/textbox2.cel 114 | cel2clx --width 48 data/pentspin.cel 115 | cel2clx --width 27 data/option.cel 116 | cel2clx --width 287 data/optbar.cel 117 | cel2clx --width 12 data/pentspn2.cel 118 | cel2clx --width 591 data/textbox.cel 119 | cel2clx --width 64 data/square.cel 120 | cel2clx --width 64 levels/towndata/towns.cel 121 | cel2clx --width 64 levels/l1data/l1s.cel 122 | cel2clx --width 64 levels/l2data/l2s.cel 123 | pcx2clx --num-sprites 15 ui_art/but_sml.pcx 124 | pcx2clx --export-palette ui_art/credits.pcx 125 | pcx2clx --transparent-color 0 ui_art/cursor.pcx 126 | pcx2clx --num-sprites 8 --transparent-color 250 ui_art/focus16.pcx 127 | pcx2clx --num-sprites 8 --transparent-color 250 ui_art/focus42.pcx 128 | pcx2clx --num-sprites 8 --transparent-color 250 ui_art/focus.pcx 129 | pcx2clx --num-sprites 4 ui_art/heros.pcx 130 | pcx2clx --transparent-color 250 --num-sprites 15 ui_art/logo.pcx 131 | pcx2clx --transparent-color 255 ui_art/lpopup.pcx 132 | pcx2clx --transparent-color 255 ui_art/lrpopup.pcx 133 | pcx2clx --export-palette ui_art/mainmenu.pcx 134 | pcx2clx ui_art/prog_bg.pcx 135 | pcx2clx ui_art/prog_fil.pcx 136 | pcx2clx --transparent-color 0 ui_art/r1_gry.pcx 137 | pcx2clx --num-sprites 4 ui_art/sb_arrow.pcx 138 | pcx2clx ui_art/sb_bg.pcx 139 | pcx2clx ui_art/sb_thumb.pcx 140 | pcx2clx --export-palette ui_art/selconn.pcx 141 | pcx2clx --export-palette ui_art/selgame.pcx 142 | pcx2clx --export-palette ui_art/selhero.pcx 143 | pcx2clx --transparent-color 250 --num-sprites 15 ui_art/smlogo.pcx 144 | pcx2clx --transparent-color 255 ui_art/spopup.pcx 145 | pcx2clx --transparent-color 255 ui_art/srpopup.pcx 146 | pcx2clx --export-palette ui_art/swmmenu.pcx 147 | pcx2clx --export-palette ui_art/title.pcx 148 | --------------------------------------------------------------------------------