diff --git a/.github/workflows/cmake-release.yml b/.github/workflows/cmake-release.yml index 4708f15766..32b6857fa2 100644 --- a/.github/workflows/cmake-release.yml +++ b/.github/workflows/cmake-release.yml @@ -16,9 +16,9 @@ jobs: steps: - uses: actions/checkout@v4 - name: Download w64devkit - run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v1.23.0/w64devkit-i686-1.23.0.zip -outfile ${{github.workspace}}\w64devkit.zip + run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v2.0.0/w64devkit-x86-2.0.0.exe -outfile ${{github.workspace}}\w64devkit.exe - name: Extract w64devkit - run: expand-archive -path ${{github.workspace}}\w64devkit.zip -destinationpath ${{github.workspace}} + run: ${{github.workspace}}\w64devkit.exe -y - name: Set environment variables and build run: | $env:Path = "${{github.workspace}}\w64devkit\bin;" + $env:Path @@ -47,9 +47,9 @@ jobs: steps: - uses: actions/checkout@v4 - name: Download w64devkit - run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v1.23.0/w64devkit-1.23.0.zip -outfile ${{github.workspace}}\w64devkit.zip + run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v2.0.0/w64devkit-x64-2.0.0.exe -outfile ${{github.workspace}}\w64devkit.exe - name: Extract w64devkit - run: expand-archive -path ${{github.workspace}}\w64devkit.zip -destinationpath ${{github.workspace}} + run: ${{github.workspace}}\w64devkit.exe -y - name: Set environment variables and build run: | $env:Path = "${{github.workspace}}\w64devkit\bin;" + $env:Path diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index a585bf1e5a..71fd1ab31a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -18,9 +18,9 @@ jobs: steps: - uses: actions/checkout@v4 - name: Download w64devkit - run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v1.23.0/w64devkit-i686-1.23.0.zip -outfile ${{github.workspace}}\w64devkit.zip + run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v2.0.0/w64devkit-x86-2.0.0.exe -outfile ${{github.workspace}}\w64devkit.exe - name: Extract w64devkit - run: expand-archive -path ${{github.workspace}}\w64devkit.zip -destinationpath ${{github.workspace}} + run: ${{github.workspace}}\w64devkit.exe -y - name: Set environment variables and build run: | $env:Path = "${{github.workspace}}\w64devkit\bin;" + $env:Path @@ -49,9 +49,9 @@ jobs: steps: - uses: actions/checkout@v4 - name: Download w64devkit - run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v1.23.0/w64devkit-1.23.0.zip -outfile ${{github.workspace}}\w64devkit.zip + run: invoke-webrequest https://github.com/skeeto/w64devkit/releases/download/v2.0.0/w64devkit-x64-2.0.0.exe -outfile ${{github.workspace}}\w64devkit.exe - name: Extract w64devkit - run: expand-archive -path ${{github.workspace}}\w64devkit.zip -destinationpath ${{github.workspace}} + run: ${{github.workspace}}\w64devkit.exe -y - name: Set environment variables and build run: | $env:Path = "${{github.workspace}}\w64devkit\bin;" + $env:Path diff --git a/.gitignore b/.gitignore index 08246c3a29..5f7cfc334b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ obsidian Obsidian.exe obsidian.exe -#Logs/configs (Windows version) +#Logs/configs CONFIG.txt OPTIONS.txt THEME.txt @@ -32,23 +32,8 @@ cmake-build-* build/ # User dirs -addons/* !addons/.gitkeep -# Quake files (not redistributable) -quake_tex.wd2 -pak0.pak -pak1.pak - -tools/filename_formatter -tools/filename_formatter.exe -tools/qsavetex -tools/qsavetex.exe -tools/qsavetex_log.txt - -web/out -web/shots - _work *~ install/ diff --git a/AUTHORS.md b/AUTHORS.md index 1358e85f48..f9049f3b9f 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -157,6 +157,9 @@ KadKad1 Lobo - EDGE-Classic Enhancement Addon +DaveFriedLiver + - Widget tooltip updates/grammar corrections + # OBLIGE ## DEVELOPER: diff --git a/CMakeLists.txt b/CMakeLists.txt index 12cf852b25..54e2697ce3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,5 @@ cmake_minimum_required(VERSION 3.12..3.20) -if(NOT CONSOLE_ONLY) - add_subdirectory(libraries/fltk EXCLUDE_FROM_ALL) -endif() -add_subdirectory(libraries/miniz EXCLUDE_FROM_ALL) -add_subdirectory(libraries/physfs EXCLUDE_FROM_ALL) -add_subdirectory(libraries/steve EXCLUDE_FROM_ALL) - project( obsidian LANGUAGES C CXX @@ -21,11 +14,7 @@ add_compile_definitions(OBSIDIAN_TIMESTAMP="${BUILD_TIMESTAMP}") if(CONSOLE_ONLY) add_compile_definitions(OBSIDIAN_CONSOLE_ONLY) endif() -if(WIN32) - add_compile_definitions(WIN32_LEAN_AND_MEAN) - add_compile_definitions(UNICODE) - add_compile_definitions(_UNICODE) -elseif(NOT APPLE AND NOT CONSOLE_ONLY) +if(NOT WIN32 AND NOT APPLE AND NOT CONSOLE_ONLY) add_compile_definitions(USE_XFT) endif() if(MSVC) @@ -52,6 +41,16 @@ if(${CMAKE_SYSTEM} MATCHES "OpenBSD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I /usr/X11R6/include") endif() +if(UNIX) + if(NOT CONSOLE_ONLY + AND NOT APPLE + ) + find_package(Fontconfig REQUIRED) + endif() +endif() + +add_subdirectory(libraries) + set(OBSIDIAN_SOURCE_FILES source/bsp_level.cc source/bsp_misc.cc @@ -126,27 +125,6 @@ add_executable( ${OBSIDIAN_SOURCE_FILES} ) -target_include_directories(obsidian SYSTEM PRIVATE libraries/fastPRNG) -if(NOT CONSOLE_ONLY) - target_include_directories(obsidian SYSTEM PRIVATE libraries/fltk) - target_include_directories( - obsidian SYSTEM PRIVATE "${PROJECT_BINARY_DIR}/libraries/fltk" - ) # Hack for FLTK 1.4 (for now) -endif() -target_include_directories(obsidian SYSTEM PRIVATE libraries/gif-h) -target_include_directories(obsidian SYSTEM PRIVATE libraries/minilua) -target_include_directories(obsidian SYSTEM PRIVATE libraries/miniz) -target_include_directories(obsidian SYSTEM PRIVATE libraries/physfs/src) -target_include_directories(obsidian SYSTEM PRIVATE libraries/steve/src) - -if(UNIX) - if(NOT CONSOLE_ONLY - AND NOT APPLE - ) - find_package(Fontconfig REQUIRED) - endif() -endif() - # Copies executables to local install directory after build add_custom_command( TARGET obsidian @@ -160,8 +138,10 @@ if(UNIX) if(NOT CONSOLE_ONLY) target_link_libraries( obsidian - PRIVATE fltk + PRIVATE fastPRNG + fltk fltk_images + minilua miniz physfs-static steve @@ -172,30 +152,34 @@ if(UNIX) ) else() target_link_libraries( - obsidian PRIVATE miniz physfs-static steve + obsidian PRIVATE fastPRNG minilua miniz physfs-static steve ) endif() elseif(${CMAKE_SYSTEM} MATCHES "BSD") if(NOT CONSOLE_ONLY) target_link_libraries( obsidian - PRIVATE fltk + PRIVATE fastPRNG + fltk fltk_images + minilua miniz physfs-static steve ) else() target_link_libraries( - obsidian PRIVATE miniz physfs-static steve + obsidian PRIVATE fastPRNG minilua miniz physfs-static steve ) endif() else() if(NOT CONSOLE_ONLY) target_link_libraries( obsidian - PRIVATE fltk + PRIVATE fastPRNG + fltk fltk_images + minilua miniz physfs-static fontconfig @@ -205,7 +189,9 @@ if(UNIX) else() target_link_libraries( obsidian - PRIVATE miniz + PRIVATE fastPRNG + minilua + miniz physfs-static pthread steve @@ -216,15 +202,17 @@ else() if(NOT CONSOLE_ONLY) target_link_libraries( obsidian - PRIVATE fltk + PRIVATE fastPRNG + fltk fltk_images + minilua miniz physfs-static steve ) else() target_link_libraries( - obsidian PRIVATE miniz physfs-static steve + obsidian PRIVATE fastPRNG minilua miniz physfs-static steve ) endif() endif() \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index aac455f078..c6d0bcf91c 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,19 +1,4 @@ - OBSIDIAN Level Maker - -Copyright (C) 2021-2022 The OBSIDIAN Team -Copyright (C) 2006-2017 Andrew Apted - -OBSIDIAN is free software; you can redistribute it and/or modify it under the -terms of the GNU General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -OBSIDIAN is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU General Public License for more details. - -================================================================================ - + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 diff --git a/games/doom/data/ADVCR1.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVCR1.png similarity index 100% rename from games/doom/data/ADVCR1.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVCR1.png diff --git a/games/doom/data/ADVCR2.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVCR2.png similarity index 100% rename from games/doom/data/ADVCR2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVCR2.png diff --git a/games/doom/data/ADVCR3.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVCR3.png similarity index 100% rename from games/doom/data/ADVCR3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVCR3.png diff --git a/games/doom/data/ADVCR4.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVCR4.png similarity index 100% rename from games/doom/data/ADVCR4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVCR4.png diff --git a/games/doom/data/ADVCR5.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVCR5.png similarity index 100% rename from games/doom/data/ADVCR5.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVCR5.png diff --git a/games/doom/data/ADVDE1.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE1.png similarity index 100% rename from games/doom/data/ADVDE1.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE1.png diff --git a/games/doom/data/ADVDE2.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE2.png similarity index 100% rename from games/doom/data/ADVDE2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE2.png diff --git a/games/doom/data/ADVDE3.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE3.png similarity index 100% rename from games/doom/data/ADVDE3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE3.png diff --git a/games/doom/data/ADVDE4.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE4.png similarity index 100% rename from games/doom/data/ADVDE4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE4.png diff --git a/games/doom/data/ADVDE5.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE5.png similarity index 100% rename from games/doom/data/ADVDE5.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE5.png diff --git a/games/doom/data/ADVDE6.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE6.png similarity index 100% rename from games/doom/data/ADVDE6.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE6.png diff --git a/games/doom/data/ADVDE7.png b/addons/Obsidian Non-Free Addons/games/doom/data/ADVDE7.png similarity index 100% rename from games/doom/data/ADVDE7.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ADVDE7.png diff --git a/games/doom/data/ARCD10.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD10.png similarity index 100% rename from games/doom/data/ARCD10.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD10.png diff --git a/games/doom/data/ARCD11.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD11.png similarity index 100% rename from games/doom/data/ARCD11.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD11.png diff --git a/games/doom/data/ARCD2.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD2.png similarity index 100% rename from games/doom/data/ARCD2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD2.png diff --git a/games/doom/data/ARCD3.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD3.png similarity index 100% rename from games/doom/data/ARCD3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD3.png diff --git a/games/doom/data/ARCD4.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD4.png similarity index 100% rename from games/doom/data/ARCD4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD4.png diff --git a/games/doom/data/ARCD5.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD5.png similarity index 100% rename from games/doom/data/ARCD5.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD5.png diff --git a/games/doom/data/ARCD6.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD6.png similarity index 100% rename from games/doom/data/ARCD6.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD6.png diff --git a/games/doom/data/ARCD7.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD7.png similarity index 100% rename from games/doom/data/ARCD7.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD7.png diff --git a/games/doom/data/ARCD8.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD8.png similarity index 100% rename from games/doom/data/ARCD8.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD8.png diff --git a/games/doom/data/ARCD9.png b/addons/Obsidian Non-Free Addons/games/doom/data/ARCD9.png similarity index 100% rename from games/doom/data/ARCD9.png rename to addons/Obsidian Non-Free Addons/games/doom/data/ARCD9.png diff --git a/games/doom/data/CRATJOKE.png b/addons/Obsidian Non-Free Addons/games/doom/data/CRATJOKE.png similarity index 100% rename from games/doom/data/CRATJOKE.png rename to addons/Obsidian Non-Free Addons/games/doom/data/CRATJOKE.png diff --git a/games/doom/data/Fly.wad b/addons/Obsidian Non-Free Addons/games/doom/data/Fly.wad similarity index 100% rename from games/doom/data/Fly.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/Fly.wad diff --git a/games/doom/data/G7DODSLS.png b/addons/Obsidian Non-Free Addons/games/doom/data/G7DODSLS.png similarity index 100% rename from games/doom/data/G7DODSLS.png rename to addons/Obsidian Non-Free Addons/games/doom/data/G7DODSLS.png diff --git a/games/doom/data/NAHIDA.png b/addons/Obsidian Non-Free Addons/games/doom/data/NAHIDA.png similarity index 100% rename from games/doom/data/NAHIDA.png rename to addons/Obsidian Non-Free Addons/games/doom/data/NAHIDA.png diff --git a/games/doom/data/OBVNMCH1.png b/addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH1.png similarity index 100% rename from games/doom/data/OBVNMCH1.png rename to addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH1.png diff --git a/games/doom/data/OBVNMCH2.png b/addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH2.png similarity index 100% rename from games/doom/data/OBVNMCH2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH2.png diff --git a/games/doom/data/OBVNMCH3.png b/addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH3.png similarity index 100% rename from games/doom/data/OBVNMCH3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH3.png diff --git a/games/doom/data/OBVNMCH4.png b/addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH4.png similarity index 100% rename from games/doom/data/OBVNMCH4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH4.png diff --git a/games/doom/data/OBVNMCH5.png b/addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH5.png similarity index 100% rename from games/doom/data/OBVNMCH5.png rename to addons/Obsidian Non-Free Addons/games/doom/data/OBVNMCH5.png diff --git a/games/doom/data/ObAddon_Textures.wad b/addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures.wad similarity index 100% rename from games/doom/data/ObAddon_Textures.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures.wad diff --git a/games/doom/data/ObAddon_Textures_2.wad b/addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures_2.wad similarity index 100% rename from games/doom/data/ObAddon_Textures_2.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures_2.wad diff --git a/games/doom/data/ObAddon_Textures_3.wad b/addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures_3.wad similarity index 100% rename from games/doom/data/ObAddon_Textures_3.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures_3.wad diff --git a/games/doom/data/ObAddon_Textures_Brightmaps.wad b/addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures_Brightmaps.wad similarity index 100% rename from games/doom/data/ObAddon_Textures_Brightmaps.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/ObAddon_Textures_Brightmaps.wad diff --git a/games/doom/data/Rats.wad b/addons/Obsidian Non-Free Addons/games/doom/data/Rats.wad similarity index 100% rename from games/doom/data/Rats.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/Rats.wad diff --git a/games/doom/data/TAG1.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG1.png similarity index 100% rename from games/doom/data/TAG1.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG1.png diff --git a/games/doom/data/TAG10.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG10.png similarity index 100% rename from games/doom/data/TAG10.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG10.png diff --git a/games/doom/data/TAG11.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG11.png similarity index 100% rename from games/doom/data/TAG11.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG11.png diff --git a/games/doom/data/TAG12.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG12.png similarity index 100% rename from games/doom/data/TAG12.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG12.png diff --git a/games/doom/data/TAG2.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG2.png similarity index 100% rename from games/doom/data/TAG2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG2.png diff --git a/games/doom/data/TAG3.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG3.png similarity index 100% rename from games/doom/data/TAG3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG3.png diff --git a/games/doom/data/TAG4.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG4.png similarity index 100% rename from games/doom/data/TAG4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG4.png diff --git a/games/doom/data/TAG5.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG5.png similarity index 100% rename from games/doom/data/TAG5.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG5.png diff --git a/games/doom/data/TAG6.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG6.png similarity index 100% rename from games/doom/data/TAG6.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG6.png diff --git a/games/doom/data/TAG7.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG7.png similarity index 100% rename from games/doom/data/TAG7.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG7.png diff --git a/games/doom/data/TAG8.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG8.png similarity index 100% rename from games/doom/data/TAG8.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG8.png diff --git a/games/doom/data/TAG9.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAG9.png similarity index 100% rename from games/doom/data/TAG9.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAG9.png diff --git a/games/doom/data/TAGCR1.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR1.png similarity index 100% rename from games/doom/data/TAGCR1.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR1.png diff --git a/games/doom/data/TAGCR10.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR10.png similarity index 100% rename from games/doom/data/TAGCR10.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR10.png diff --git a/games/doom/data/TAGCR11.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR11.png similarity index 100% rename from games/doom/data/TAGCR11.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR11.png diff --git a/games/doom/data/TAGCR12.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR12.png similarity index 100% rename from games/doom/data/TAGCR12.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR12.png diff --git a/games/doom/data/TAGCR13.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR13.png similarity index 100% rename from games/doom/data/TAGCR13.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR13.png diff --git a/games/doom/data/TAGCR14.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR14.png similarity index 100% rename from games/doom/data/TAGCR14.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR14.png diff --git a/games/doom/data/TAGCR15.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR15.png similarity index 100% rename from games/doom/data/TAGCR15.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR15.png diff --git a/games/doom/data/TAGCR16.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR16.png similarity index 100% rename from games/doom/data/TAGCR16.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR16.png diff --git a/games/doom/data/TAGCR2.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR2.png similarity index 100% rename from games/doom/data/TAGCR2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR2.png diff --git a/games/doom/data/TAGCR3.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR3.png similarity index 100% rename from games/doom/data/TAGCR3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR3.png diff --git a/games/doom/data/TAGCR4.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR4.png similarity index 100% rename from games/doom/data/TAGCR4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR4.png diff --git a/games/doom/data/TAGCR5.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR5.png similarity index 100% rename from games/doom/data/TAGCR5.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR5.png diff --git a/games/doom/data/TAGCR6.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR6.png similarity index 100% rename from games/doom/data/TAGCR6.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR6.png diff --git a/games/doom/data/TAGCR7.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR7.png similarity index 100% rename from games/doom/data/TAGCR7.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR7.png diff --git a/games/doom/data/TAGCR8.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR8.png similarity index 100% rename from games/doom/data/TAGCR8.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR8.png diff --git a/games/doom/data/TAGCR9.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGCR9.png similarity index 100% rename from games/doom/data/TAGCR9.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGCR9.png diff --git a/games/doom/data/TAGS1.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGS1.png similarity index 100% rename from games/doom/data/TAGS1.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGS1.png diff --git a/games/doom/data/TAGS2.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGS2.png similarity index 100% rename from games/doom/data/TAGS2.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGS2.png diff --git a/games/doom/data/TAGS3.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGS3.png similarity index 100% rename from games/doom/data/TAGS3.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGS3.png diff --git a/games/doom/data/TAGS4.png b/addons/Obsidian Non-Free Addons/games/doom/data/TAGS4.png similarity index 100% rename from games/doom/data/TAGS4.png rename to addons/Obsidian Non-Free Addons/games/doom/data/TAGS4.png diff --git a/games/doom/data/blood_pack.wad b/addons/Obsidian Non-Free Addons/games/doom/data/blood_pack.wad similarity index 100% rename from games/doom/data/blood_pack.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/blood_pack.wad diff --git a/games/doom/data/burning_debris.wad b/addons/Obsidian Non-Free Addons/games/doom/data/burning_debris.wad similarity index 100% rename from games/doom/data/burning_debris.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/burning_debris.wad diff --git a/games/doom/data/burning_top.wad b/addons/Obsidian Non-Free Addons/games/doom/data/burning_top.wad similarity index 100% rename from games/doom/data/burning_top.wad rename to addons/Obsidian Non-Free Addons/games/doom/data/burning_top.wad diff --git a/data/sounds/DSRATDI1.ogg b/addons/Obsidian Non-Free Addons/games/doom/data/sounds/DSRATDI1.ogg similarity index 100% rename from data/sounds/DSRATDI1.ogg rename to addons/Obsidian Non-Free Addons/games/doom/data/sounds/DSRATDI1.ogg diff --git a/data/sounds/DSRATDI2.ogg b/addons/Obsidian Non-Free Addons/games/doom/data/sounds/DSRATDI2.ogg similarity index 100% rename from data/sounds/DSRATDI2.ogg rename to addons/Obsidian Non-Free Addons/games/doom/data/sounds/DSRATDI2.ogg diff --git a/data/sounds/DSRATIDL.ogg b/addons/Obsidian Non-Free Addons/games/doom/data/sounds/DSRATIDL.ogg similarity index 100% rename from data/sounds/DSRATIDL.ogg rename to addons/Obsidian Non-Free Addons/games/doom/data/sounds/DSRATIDL.ogg diff --git a/data/sounds/FLYBUZZ.ogg b/addons/Obsidian Non-Free Addons/games/doom/data/sounds/FLYBUZZ.ogg similarity index 100% rename from data/sounds/FLYBUZZ.ogg rename to addons/Obsidian Non-Free Addons/games/doom/data/sounds/FLYBUZZ.ogg diff --git a/data/sounds/RATCRAWL.ogg b/addons/Obsidian Non-Free Addons/games/doom/data/sounds/RATCRAWL.ogg similarity index 100% rename from data/sounds/RATCRAWL.ogg rename to addons/Obsidian Non-Free Addons/games/doom/data/sounds/RATCRAWL.ogg diff --git a/modules/gzdoom_fauna.lua b/addons/Obsidian Non-Free Addons/modules/gzdoom_fauna.lua similarity index 96% rename from modules/gzdoom_fauna.lua rename to addons/Obsidian Non-Free Addons/modules/gzdoom_fauna.lua index a9973fa36c..f994b10107 100644 --- a/modules/gzdoom_fauna.lua +++ b/addons/Obsidian Non-Free Addons/modules/gzdoom_fauna.lua @@ -475,7 +475,7 @@ function FAUNA_MODULE.all_done() local dir = "games/doom/data/" gui.wad_merge_sections(dir .. "Fly.wad") - gui.wad_insert_file("data/sounds/FLYBUZZ.ogg", "FLYBUZZ") + gui.wad_insert_file(dir .. "sounds/FLYBUZZ.ogg", "FLYBUZZ") end if PARAM.bool_rats == 1 then @@ -483,11 +483,11 @@ function FAUNA_MODULE.all_done() local dir = "games/doom/data/" gui.wad_merge_sections(dir .. "Rats.wad") - gui.wad_insert_file("data/sounds/DSRAT.ogg", "DSRAT") - gui.wad_insert_file("data/sounds/DSRATIDL.ogg", "DSRATIDL") - gui.wad_insert_file("data/sounds/DSRATDI1.ogg", "DSRATDI1") - gui.wad_insert_file("data/sounds/DSRATDI2.ogg", "DSRATDI2") - gui.wad_insert_file("data/sounds/RATCRAWL.ogg", "RATCRAWL") + gui.wad_insert_file(dir .. "sounds/DSRAT.ogg", "DSRAT") + gui.wad_insert_file(dir .. "sounds/DSRATIDL.ogg", "DSRATIDL") + gui.wad_insert_file(dir .. "sounds/DSRATDI1.ogg", "DSRATDI1") + gui.wad_insert_file(dir .. "sounds/DSRATDI2.ogg", "DSRATDI2") + gui.wad_insert_file(dir .. "sounds/RATCRAWL.ogg", "RATCRAWL") end end diff --git a/modules/zdoom_armaetus_doom1_themes.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_doom1_themes.lua similarity index 100% rename from modules/zdoom_armaetus_doom1_themes.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_doom1_themes.lua diff --git a/modules/zdoom_armaetus_entities.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_entities.lua similarity index 100% rename from modules/zdoom_armaetus_entities.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_entities.lua diff --git a/modules/zdoom_armaetus_epic_textures.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_epic_textures.lua similarity index 100% rename from modules/zdoom_armaetus_epic_textures.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_epic_textures.lua diff --git a/modules/zdoom_armaetus_epic_texturex_lump.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_epic_texturex_lump.lua similarity index 100% rename from modules/zdoom_armaetus_epic_texturex_lump.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_epic_texturex_lump.lua diff --git a/modules/zdoom_armaetus_materials.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_materials.lua similarity index 96% rename from modules/zdoom_armaetus_materials.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_materials.lua index c5ef430297..b98f69a6ef 100644 --- a/modules/zdoom_armaetus_materials.lua +++ b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_materials.lua @@ -1,2946 +1,2946 @@ ----------------------------------------------------------------- --- MODULE: Obsidian Resource Pack Materials ----------------------------------------------------------------- --- --- Copyright (C) 2019-2022 MsrSgtShooterPerson --- Copyright (C) 2015-2022 Reisal --- --- This program is free software; you can redistribute it and/or --- modify it under the terms of the GNU General Public License --- as published by the Free Software Foundation; either version 2, --- of the License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- ------------------------------------------------------------------- - --- Reminder: Please keep texture material additions alphabetized --- and in categories for a more manageable setup when the file is --- modified, thanks! - -OBS_RESOURCE_PACK_LIQUID_DEFS = -{ - hotlava = { mat="XLAV1", special=5, light_add=56, damage=10 }, - magma = { mat="MAGMA1", special=5, light_add=56, damage=10 }, - qlava = { mat="QLAVA1", special=5, light_add=56, damage=10 }, - bsludge = { mat="OSLIME01", special=0 }, - gwater = { mat="SLUDGE01", special=0 }, - ice = { mat="SNOW9", special=0 }, --Looks best when outdoor environment is snow only - ice2 = { mat="SNOW2", special=0 }, --Looks best when outdoor environment is snow only - purwater = { mat="PURW1", special=0 }, -} - -OBS_RESOURCE_PACK_MATERIALS = { - - -- Organic / Semi-organic - ALTASH = { t="ALTASH", f="RROCK03" }, --ASPHALT from Evilution - ASH01 = { t="ASH01", f="FLOOR6_2" }, --ASHWALL2 - ASH02 = { t="ASH02", f="RROCK03" }, --ASHWALL3 - ASH03 = { t="ASH03", f="FLAT10" }, --ASHWALL4 - ASH04 = { t="ASH04", f="RROCK18" }, --ASHWALL7 variant - ASH05 = { t="ASH05", f="FLOOR6_2" }, --ASHWALL - ASHWALL1 = { t="ASHWALL1", f="RROCK03" }, --ASHWALL2 & ASHWALL3 combo - GREEN01 = { t="GREEN01", f="RROCK20" }, --Plutonia 2 - GREEN02 = { t="GREEN02", f="RROCK20" }, --Plutonia 2 - GREEN03 = { t="GREEN03", f="RROCK20" }, --Plutonia 2 - VINES1 = { t="VINES1", f="RROCK16" }, - VINES2 = { t="VINES2", f="RROCK16" }, - VINES3 = { t="VINES3", f="RROCK16" }, - VINES4 = { t="VINES4", f="RROCK16" }, - ZIM1 = { t="ZIM1", f="RROCK20" }, --ZIMMER1 - ZIM2 = { t="ZIM2", f="RROCK20" }, --ZIMMER2 - ZIM3 = { t="ZIM3", f="RROCK18" }, --ZIMMER3 - ZIM4 = { t="ZIM4", f="RROCK18" }, --ZIMMER4 - - GRNSTONE = { t="GRNSTONE", f="GRNRKF"}, --originally green recolor of ROCKRED - GRNRKF = { t="GRNSTONE", f="GRNRKF"}, --now reapproiated as a green glowy crystal - - -- Doors - BIGDOOR8 = { t="BIGDOOR8", f="CEIL5_2" }, --Similar to BIGDOOR7 - BIGDOOR9 = { t="BIGDOOR9", f="CEIL5_2" }, --Similar to BIGDOOR7 - BIGDOOR0 = { t="BIGDOOR0", f="CEIL5_2" }, --Similar to BIGDOOR7 - BIGDOORA = { t="BIGDOORA", f="FLOOR7_1" }, --Similar to BIGDOOR4 - BIGDOORB = { t="BIGDOORB", f="CEIL5_2" }, --Similar to BIGDOOR7, 64x128 - BIGDOORC = { t="BIGDOORC", f="CEIL5_1" }, - BIGDOORD = { t="BIGDOORD", f="CEIL5_1" }, - BIGDOORE = { t="BIGDOORE", f="FLOOR7_1" }, - BIGDOORF = { t="BIGDOORF", f="CEIL5_1" }, - BIGDOORG = { t="BIGDOORG", f="FLAT20" }, - BIGDOORH = { t="BIGDOORH", f="CEIL5_1" }, - BIGDOORI = { t="BIGDOORI", f="CEIL5_2" }, - BIGDOORJ = { t="BIGDOORJ", f="CEIL5_2" }, - BIGDOORK = { t="BIGDOORK", f="CEIL5_2" }, - BIGDOORL = { t="BIGDOORL", f="G08" }, - BIGDOORM = { t="BIGDOORM", f="WARN1" }, - BIGDOORN = { t="BIGDOORN", f="FLAT5_4" }, - DOORHI = { t="DOORHI", f="FLAT19" }, -- Tall 64x128 door. From Doom1, - ICKDOOR1 = { t="ICKDOOR1", f="FLAT19" }, -- ICKWALL style door. From Doom1, - - -- Bricks / Concrete - BIGSTONE = { t="BIGSTONE", f="FLAT5_4" }, - BIGSTON2 = { t="BIGSTON2", f="FLAT5_4" }, - BIGSTON3 = { t="BIGSTON3", f="FLAT1" }, - BIGSTON4 = { t="BIGSTON4", f="FLOOR7_1" }, - BLIT01 = { t="BLIT01", f="RROCK10" }, --BRICKLIT - BRIKS01 = { t="BRIKS01", f="FLAT5_4" }, --White bricks, 128x128, - BRIKS02 = { t="BRIKS02", f="FLOOR7_1" }, --Brown bricks, 128x128, - BRIKS03 = { t="BRIKS03", f="RROCK09" }, --Tan bricks, 128x128, - BRIKS04 = { t="BRIKS04", f="FLAT19" }, --Cream bricks, 64x128, - BRIKS05 = { t="BRIKS05", f="FLOOR0_1" }, --Tan bricks, 64x128, - BRIKS06 = { t="BRIKS06", f="FLAT5_5" }, --Tan bricks, 128x128, - BRIKS07 = { t="BRIKS07", f="FLOOR7_1" }, --Brown bricks, 128x128, - BRIKS08 = { t="BRIKS08", f="RROCK14" }, --BIGBRIK1, - BRIKS09 = { t="BRIKS09", f="FLAT5_4" }, --BIGBRIK2, - BRIKS10 = { t="BRIKS10", f="FLAT5_4" }, - BRIKS11 = { t="BRIKS11", f="BLACK0" }, - BRIKS12 = { t="BRIKS12", f="RROCK09" }, - BRIKS13 = { t="BRIKS13", f="FLAT1" }, - BRIKS14 = { t="BRIKS14", f="RROCK09" }, - BRIKS15 = { t="BRIKS15", f="FLOOR7_1" }, --Brown - BRIKS16 = { t="BRIKS16", f="FLOOR7_1" }, --Brown - BRIKS17 = { t="BRIKS17", f="FLOOR7_1" }, --Brown - BRIKS18 = { t="BRIKS18", f="FLAT5_4" }, --Gray - BRIKS19 = { t="BRIKS19", f="FLAT5_5" }, --Tan - BRIKS20 = { t="BRIKS20", f="FLAT5_5" }, --Tan - BRIKS21 = { t="BRIKS21", f="FLAT5_4" }, --Gray - BRIKS22 = { t="BRIKS22", f="FLAT5_5" }, --Tannish - BRIKS23 = { t="BRIKS23", f="FLAT5_4" }, --Gray - BRIKS24 = { t="BRIKS24", f="FLAT5_5" }, --Tannish - BRIKS25 = { t="BRIKS25", f="RROCK20" }, --Green - BRIKS26 = { t="BRIKS26", f="FLAT5_4" }, --Gray - BRIKS27 = { t="BRIKS27", f="FLAT5_4" }, --Gray - BRIKS28 = { t="BRIKS28", f="RROCK16" }, --Brown w/ vines - BRIKS29 = { t="BRIKS29", f="FLAT1" }, - BRIKS30 = { t="BRIKS30", f="GSTN01" }, - BRIKS31 = { t="BRIKS31", f="FLOOR7_1" }, - BRIKS32 = { t="BRIKS32", f="FLAT5_4" }, - BRIKS33 = { t="BRIKS33", f="FLOOR7_1" }, - BRIKS34 = { t="BRIKS34", f="FLAT5_4" }, - BRIKS35 = { t="BRIKS35", f="BLACK0" }, - BRIKS36 = { t="BRIKS36", f="BLACK0" }, - BRIKS37 = { t="BRIKS37", f="FLAT5_4" }, -- Blue - BRIKS38 = { t="BRIKS38", f="FLAT5_4" }, -- Blue - BRIKS39 = { t="BRIKS39", f="GSTN02" }, - BRIKS40 = { t="BRIKS40", f="RROCK09" }, - BRIKS41 = { t="BRIKS41", f="RROCK09" }, - BRIKS42 = { t="BRIKS42", f="FLOOR7_1" }, - BRIKS43 = { t="BRIKS43", f="FLAT1" }, - - BST01 = { t="BST01", f="RROCK11" }, --BSTONE1, - BST02 = { t="BST02", f="RROCK12" }, --BSTONE2, - BST03 = { t="BST03", f="RROCK12" }, --BSTONE3, - - BRVINE = { t="BRVINE", f="FLOOR0_1" }, --BROVINE - - GRAY6 = { t="GRAY6", f="FLAT18" }, - GRAY8 = { t="GRAY8", f="FLAT18" }, - GRAY9 = { t="GRAY9", f="FLAT5_4" }, - GRAYDANG = { t="GRAYDANG", f="FLAT18" }, -- GRAY1 w/ no entry sign. From Doom1, - - STON4 = { t="STON4", f="FLAT5_4" }, --STONE4, - STON6 = { t="STON6", f="RROCK09" }, --STONE6, - STON7 = { t="STON7", f="FLAT5_4" }, - STONE8 = { t="STONE8", f="FLAT1" }, - STONE9 = { t="STONE9", f="FLAT1" }, - STONE10 = { t="STONE10", f="FLAT5_4" }, - STONGARG = { t="STONGARG", f="FLAT1" }, -- STONE3 with gargoyle faces. From Doom1, - - -- Urban specific - CITY01 = { t="CITY01", f="RROCK10" }, -- BRICK1 style - CITY02 = { t="CITY02", f="FLOOR0_1" }, -- Tannish marble w/ window - CITY03 = { t="CITY03", f="FLOOR7_1" }, -- Darker tan bricks w/ window - CITY04 = { t="CITY04", f="FLOOR7_1" }, -- Same as CITY03 but different window - CITY05 = { t="CITY05", f="FLAT1" }, -- Gray bricks and black windows - CITY06 = { t="CITY06", f="FLOOR0_1" }, -- BROWN1 style and black windows - CITY07 = { t="CITY07", f="FLAT1" }, -- Industrial looking - CITY08 = { t="CITY08", f="FLAT1" }, -- Gray bricks with stone arch window - CITY09 = { t="CITY09", f="FLAT1" }, -- Small gray bricks with stone arch window - CITY10 = { t="CITY10", f="FLOOR7_1" }, -- Small brown bricks with stone arch window - CITY11 = { t="CITY11", f="FLOOR7_1" }, - CITY12 = { t="CITY12", f="FLAT5_5" }, - CITY13 = { t="CITY13", f="FLOOR7_1" }, - CITY14 = { t="CITY14", f="CEIL5_2"}, - - -- night versions - CITY04N = { t="CITY04N", f="FLOOR7_1"}, - CITY05N = { t="CITY05N", f="FLAT1"}, - CITY06N = { t="CITY06N", f="FLOOR0_1"}, - CITY07N = { t="CITY07N", f="FLAT1"}, - CITY11N = { t="CITY11N", f="FLOOR7_1"}, - CITY12N = { t="CITY12N", f="FLAT5_5"}, - CITY13N = { t="CITY13N", f="FLOOR7_1"}, - CITY14N = { t="CITY14N", f="CEIL5_2"}, - - URBAN1 = { t="URBAN1", f="RROCK10" }, - URBAN2 = { t="URBAN2", f="FLAT1" }, - URBAN3 = { t="URBAN3", f="FLAT5_4" }, - URBAN4 = { t="URBAN4", f="FLOOR0_1" }, - - -- These 4 can be useful for the urban shutters instead of the STEP# textures - URBAN5 = { t="URBAN5", f="FLOOR7_1" }, -- Brown - URBAN6 = { t="URBAN6", f="FLOOR7_1" }, -- Brown, warning lines - URBAN7 = { t="URBAN7", f="FLAT1" }, -- Gray - URBAN8 = { t="URBAN8", f="FLAT1" }, -- Gray, warning lines - - -- Cement - -- Copies of the CEMENT# textures so they can be used normally. - CEM01 = { t="CEM01", f="FLAT19" }, --CEMENT7, - CEM02 = { t="CEM02", f="FLAT19" }, --CEMENT9, - CEM03 = { t="CEM03", f="FLAT19" }, --CEMENT1, - CEM04 = { t="CEM04", f="FLAT19" }, --CEMENT5, - CEM05 = { t="CEM05", f="FLAT19" }, --CEMENT2, - CEM06 = { t="CEM06", f="FLAT19" }, --CEMENT3, - CEM07 = { t="CEM07", f="FLAT19" }, --CEMENT6, - CEM08 = { t="CEM08", f="FLAT19" }, --CEMENT4, - CEM09 = { t="CEM09", f="FLAT19" }, - - -- Not CEMENT type, just concrete type - CEM10 = { t="CEM10", f="FLAT19" }, - CEM11 = { t="CEM11", f="FLOOR0_1" }, --Tan - - DRKCMT01 = { t="DRKCMT01", f="RROCK03" }, --Dark version of CEMENT1, - DRKCMT02 = { t="DRKCMT02", f="RROCK03" }, --Dark version of CEMENT5, - DRKCMT03 = { t="DRKCMT03", f="RROCK03" }, --Dark version of CEMENT3, - DRKCMT04 = { t="DRKCMT04", f="RROCK03" }, --Dark version of CEMENT6, - DRKCMT05 = { t="DRKCMT05", f="RROCK03" }, --Dark version of CEMENT7, - DRKCMT06 = { t="DRKCMT06", f="RROCK03" }, --Dark version of CEMENT9, - - HELLCMT1 = { t="HELLCMT1", f="RMARB3" }, --Red and white - HELLCMT2 = { t="HELLCMT2", f="RMARB3" }, --Red and white - HELLCMT3 = { t="HELLCMT3", f="RMARB3" }, --Red and white - HELLCMT4 = { t="HELLCMT4", f="RMARB3" }, --Red and white - HELLCMT5 = { t="HELLCMT5", f="RMARB3" }, --Red and white - HELLCMT6 = { t="HELLCMT6", f="RMARB3" }, --Red and white - HELLCMT7 = { t="HELLCMT7", f="FLOOR4_7" }, --Black and white - HELLCMT8 = { t="HELLCMT8", f="FLOOR4_7" }, --Black and white - - -- Bronze & Brown - BRONZE5 = { t="BRONZE5", f="MFLR8_2" }, - BRONZE6 = { t="BRONZE6", f="MFLR8_2" }, - BRONZEG1 = { t="BRONZEG1", f="GMET07" }, - BRONZEG2 = { t="BRONZEG2", f="GMET07" }, - BRONZEG3 = { t="BRONZEG3", f="GMET07" }, - BROWN2 = { t="BROWN2", f="FLAT5_4" }, - BROWN3 = { t="BROWN3", f="FLAT5_4" }, - BROWNGR2 = { t="BROWNGR2", f="FLOOR7_1" }, - BROWNGR3 = { t="BROWNGR3", f="FLOOR7_1" }, - BROWNGR4 = { t="BROWNGR4", f="FLOOR7_1" }, - NUKESLAD = { t="NUKESLAD", f="FLOOR7_1" }, -- Hey, from Doom1! - - -- Computers / Tech - CGCANI00 = { t="CGCANI00", f="CEIL5_1" }, --Animated - CMPOHSO = { t="CMPOHSO", f="FLOOR7_1" }, --COMPOHSO - CMPTILE = { t="CMPTILE", f="CEIL5_1" }, --COMPTILE - COMPBLAK = { t="COMPBLAK", f="FLOOR1_6" }, --Black COMPBLUE - COMPFUZ1 = { t="COMPFUZ1", f="CEIL5_1" }, --Animated - COMPGREN = { t="COMPGREN", f="GRENFLOR" }, --Green COMPBLUE - COMPRED = { t="COMPRED", f="FLOOR1_6" }, --Red COMPBLUE - COMPSTA3 = { t="COMPSTA3", f="FLAT23" }, - COMPSTA4 = { t="COMPSTA4", f="FLAT23" }, - COMPSTA5 = { t="COMPSTA5", f="FLAT23" }, - COMPSTA6 = { t="COMPSTA6", f="FLAT23" }, - COMPSTA7 = { t="COMPSTA7", f="FLAT23" }, - COMPSTA8 = { t="COMPSTA8", f="FLAT23" }, - COMPSTA9 = { t="COMPSTA9", f="FLAT23" }, - COMPSTAA = { t="COMPSTAA", f="FLAT23" }, - COMPSTAB = { t="COMPSTAB", f="FLAT23" }, - COMPTIL2 = { t="COMPTIL2", f="FLOOR1_6" }, --Red COMPTILE - COMPTIL3 = { t="COMPTIL3", f="CEIL5_1" }, --Black COMPTILE - COMPTIL4 = { t="COMPTIL4", f="CEIL5_1" }, --Green COMPTILE - COMPTIL5 = { t="COMPTIL5", f="CEIL5_1" }, --Yellow COMPTILE - COMPTIL6 = { t="COMPTIL6", f="CEIL5_1" }, --Purple COMPTILE - COMPSA1 = { t="COMPSA1", f="CEIL5_1" }, -- Animated broken screen - COMPSC1 = { t="COMPSC1", f="CEIL5_1" }, -- Animated UAC screen - COMPSD1 = { t="COMPSD1", f="CEIL5_1" }, -- Animated 4 green screens - COMPU1 = { t="COMPU1", f="CEIL5_1" }, - COMPU2 = { t="COMPU2", f="CEIL5_1" }, - COMPU3 = { t="COMPU3", f="CEIL5_1" }, - COMPVENT = { t="COMPVENT", f="CEIL5_1" }, - COMPVEN2 = { t="COMPVEN2", f="CEIL5_1" }, - COMPY1 = { t="COMPY1", f="CEIL5_1" }, --Animated - COMPCT01 = { t="COMPCT01", f="CEIL5_1" }, - COMPCT02 = { t="COMPCT02", f="CEIL5_1" }, - COMPCT03 = { t="COMPCT03", f="CEIL5_1" }, - COMPCT04 = { t="COMPCT04", f="CEIL5_1" }, - COMPCT05 = { t="COMPCT05", f="CEIL5_1" }, - COMPCT06 = { t="COMPCT06", f="CEIL5_1" }, - COMPCT07 = { t="COMPCT07", f="CEIL5_1" }, --256x128, - CONSOLE1 = { t="CONSOLE1", f="CEIL5_1" }, --SPACEW3, - CONSOLE2 = { t="CONSOLE2", f="FLAT23" }, --PLANET1, - CONSOLE3 = { t="CONSOLE3", f="CEIL5_1" }, --COMP2, - CONSOLE4 = { t="CONSOLE4", f="FLAT19" }, --COMPUTE1, - CONSOLE5 = { t="CONSOLE5", f="CEIL5_1" }, --COMPUTE2, - CONSOLE6 = { t="CONSOLE6", f="CEIL5_1" }, - CONSOLE7 = { t="CONSOLE7", f="CEIL5_1" }, - CONSOLE8 = { t="CONSOLE8", f="CEIL5_1" }, - CONSOLE9 = { t="CONSOLE9", f="CEIL5_1" }, - CONSOLEA = { t="CONSOLEA", f="FLAT23" }, - CONSOLEB = { t="CONSOLEB", f="FLAT23" }, - CONSOLEC = { t="CONSOLEC", f="FLAT23" }, - CONSOLED = { t="CONSOLED", f="FLAT23" }, - CONSOLEE = { t="CONSOLEE", f="FLAT23" }, - CONSOLEF = { t="CONSOLEF", f="FLAT23" }, - CONSOLEG = { t="CONSOLEG", f="FLAT23" }, - DECMP04A = { t="DECMP04A", f="CEIL5_1" }, --Animated - GRAYBLU1 = { t="GRAYBLU1", f="FLAT14" }, - NMONIA1 = { t="NMONIA1", f="FLAT1" }, --Animated - NOISE1 = { t="NOISE1", f="CEIL5_1" }, --Animated - NOISE2A = { t="NOISE2A", f="CEIL5_1" }, --Animated - NOISE3A = { t="NOISE3A", f="CEIL5_1" }, --Animated - PLAN1 = { t="PLAN1", f="FLAT23" }, - PLAN2 = { t="PLAN2", f="FLAT23" }, - SPACEW5 = { t="SPACEW5", f="SLIME14" }, - SPACEW6 = { t="SPACEW6", f="SLIME15" }, - STARTAN1 = { t="STARTAN1", f="FLOOR0_1" }, -- Plain STARTAN2. From Doom1, - - -- Glass - GLASS1 = { t="GLASS1", f="CEIL5_1" }, --Red - GLASS2 = { t="GLASS2", f="CEIL5_1" }, --Blue - GLASS3 = { t="GLASS3", f="CEIL5_1" }, --Green - GLASS4 = { t="GLASS4", f="CEIL5_1" }, --White - GLASS5 = { t="GLASS5", f="CEIL5_1" }, --Black - GLASS6 = { t="GLASS6", f="CEIL5_1" }, --Orange - GLASS7 = { t="GLASS7", f="CEIL5_1" }, - GLASS8 = { t="GLASS8", f="CEIL5_1" }, --Multicolored - - -- These are 32x128 but tile to fit on pictures - GLASS9 = { t="GLASS9", f="CEIL5_1" }, --Multicolored - GLASS10 = { t="GLASS10", f="CEIL5_1" }, --Hexen - GLASS11 = { t="GLASS11", f="CEIL5_1" }, --Yellow - GLASS12 = { t="GLASS12", f="CEIL5_1" }, --Orange - GLASS13 = { t="GLASS13", f="CEIL5_1" }, --Red - GLASS14 = { t="GLASS14", f="CEIL5_1" }, --Blue - WINGLAS1 = { t="WINGLAS1", f="CEIL5_1" }, -- Yellow dragon, 192px tall - WINGLAS2 = { t="WINGLAS2", f="CEIL5_1" }, -- Red dragon in flame, 192px tall - WINGLAS3 = { t="WINGLAS3", f="CEIL5_1" }, -- Red Dragon, 192px tall - WINGLAS4 = { t="WINGLAS4", f="CEIL5_1" }, -- Blue Dragon, 192px tall - - -- Gothic - BISHOP = { t="BISHOP", f="CEIL5_1" }, - GOTH01 = { t="GOTH01", f="FLOOR7_1" }, --Multicolor brown bricks - GOTH02 = { t="GOTH02", f="GSTN03" }, --Brown metallic bricks - GOTH03 = { t="GOTH03", f="GSTN05" }, --Brown metallic multicolored bricks - GOTH04 = { t="GOTH04", f="GSTN05" }, --Same as GOTH03 but with red inverted cross design - GOTH05 = { t="GOTH05", f="MFLR8_2" }, --Like GOTH02 but white cross design on it - GOTH06 = { t="GOTH06", f="GSTN02" }, --Dark gray bricks - GOTH07 = { t="GOTH07", f="GSTN01" }, --Gray bricks - GOTH08 = { t="GOTH08", f="G13" }, --Bloody red bricks - GOTH09 = { t="GOTH09", f="G11" }, --Dark gray stone - GOTH10 = { t="GOTH10", f="G20" }, --Like GOTH09 but a green tinge - GOTH11 = { t="GOTH11", f="FLOOR7_3" }, --Gray marble - GOTH12 = { t="GOTH12", f="RROCK22" }, --Grayscale ZIMMER texture - GOTH13 = { t="GOTH13", f="FLAT5_4" }, --Grayscale BRICK3, - GOTH14 = { t="GOTH14", f="GWOD01" }, --Vertical wood - GOTH15 = { t="GOTH15", f="GMET05" }, --Dark metallic wall - GOTH16 = { t="GOTH16", f="G15" }, --Riveted metal wall - GOTH17 = { t="GOTH17", f="G15" }, --Horizontal metal wall - GOTH18 = { t="GOTH18", f="G15" }, --Block design version of GOTH16, - GOTH19 = { t="GOTH19", f="G18" }, --Inverted cross version of GOTH18, - GOTH20 = { t="GOTH20", f="G18" }, --Smaller cross version of GOTH19, - GOTH21 = { t="GOTH21", f="G18" }, --Red line version of GOTH17, - GOTH22 = { t="GOTH22", f="GMET05" }, --Horizontal dark metallic wall with rivets - GOTH23 = { t="GOTH23", f="G06" }, --Black metallic wall - GOTH24 = { t="GOTH24", f="G15" }, --Slightly different version of GOTH23, - GOTH25 = { t="GOTH25", f="G07" }, --Very similar to GOTH22, - GOTH26 = { t="GOTH26", f="G05" }, --Black wall - GOTH27 = { t="GOTH27", f="G08" }, --Black wall with rivets - GOTH28 = { t="GOTH28", f="G19" }, --Black wall with faces - GOTH29 = { t="GOTH29", f="QFLAT02" }, --Quake style wall - GOTH30 = { t="GOTH30", f="QFLAT03" }, --Quake style wall, cracked - GOTH31 = { t="GOTH31", f="G06" }, --Black marble - GOTH32 = { t="GOTH32", f="GMET04" }, --Rusty riveted metal support - GOTH33 = { t="GOTH33", f="CEIL5_1" }, --Black wall with inverted red crosses - GOTH34 = { t="GOTH34", f="G01" }, --Dark brown bricks - GOTH35 = { t="GOTH35", f="FLOOR7_1" }, --Brown designed wall - GOTH36 = { t="GOTH36", f="G09" }, --Darker version of GOTH18, - GOTH37 = { t="GOTH37", f="G09" }, --Darker version of GOTH17, - GOTH38 = { t="GOTH38", f="G09" }, --Lighter version of GOTH17, - GOTH39 = { t="GOTH39", f="G09" }, --Like GOTH38, but more lines horizontally - GOTH40 = { t="GOTH40", f="G09" }, --Vertical black metal supports - GOTH41 = { t="GOTH41", f="G09" }, --Like GOTH40, but more rivets - GOTH42 = { t="GOTH42", f="GSTN03" }, --BRONZE type wall - GOTH43 = { t="GOTH43", f="SLIME15" }, --Wall version of SLIME15 flat - GOTH44 = { t="GOTH44", f="G21" }, --Olive color marble tiles - GOTH45 = { t="GOTH45", f="G21" }, --Olive colored bricks - GOTH46 = { t="GOTH46", f="QFLAT05" }, - GOTH47 = { t="GOTH47", f="QFLAT06" }, - GOTH48 = { t="GOTH48", f="QFLAT06" }, - GOTH49 = { t="GOTH49", f="QFLAT05" }, - GOTH50 = { t="GOTH50", f="BLACK0" }, - GOTH51 = { t="GOTH51", f="BLACK0" }, - GUY1 = { t="GUY1", f="FLAT1" }, - - -- Marble - BLAKFACE = { t="BLAKFACE", f="BMARB3" }, -- Black MARBFACE - BLAKFAC2 = { t="BLAKFAC2", f="BMARB3" }, -- Black MARBFAC2, - BLAKFAC3 = { t="BLAKFAC3", f="BMARB3" }, -- Black MARBFAC3, - BLAKMBGY = { t="BLAKMBGY", f="BMARB1" }, -- Black MARBGRAY - BLAKMBG2 = { t="BLAKMBG2", f="BMARB1" }, -- Black MARBFAC4, - GOATMARB = { t="GOATMARB", f="FLAT1" }, -- Goat/Baphomet relief thing - GSTONE3 = { t="GSTONE3", f="FLOOR7_2" }, - ICONMRB1 = { t="ICONMRB1", f="FLOOR7_2" }, - KMARBLE1 = { t="KMARBLE1", f="BMARB2" }, -- Black MARBLE1, - KMARBLE2 = { t="KMARBLE2", f="BMARB2" }, -- Black MARBLE2, - KMARBLE3 = { t="KMARBLE3", f="BMARB2" }, -- Black MARBLE3, - KSTONE1 = { t="KSTONE1", f="BMARB1" }, -- Black GSTONE - KSTONE2 = { t="KSTONE2", f="BMARB3" }, -- Black GSTONE, red edging - KSTONE3 = { t="KSTONE3", f="BMARB3" }, -- Black GSTONE, green edging - KSTFONT1 = { t="KSTFONT1", f="BMARB3" }, -- Black GSTONE, red fountain - KSTFNTG1 = { t="KSTFNTG1", f="BMARB3" }, -- Black GSTONE, green fountain - KSTGARG = { t="KSTGARG", f="BMARB3" }, - KSTLION = { t="KSTLION", f="BMARB3" }, - KSTSATYR = { t="KSTSATYR", f="BMARB3" }, - LIONMRB1 = { t="LIONMRB1", f="TILES4" }, -- White marble lion - LIONMRB2 = { t="LIONMRB2", f="FLAT1" }, -- White marble lion (grayer) - LIONMRB3 = { t="LIONMRB3", f="TILES4" }, -- White marble lion - MARB5BL = { t="MARB5BL", f="RMARB2" }, -- red-banded black marble - -- green marble, thin tall - MARBF01 = { t="MARBF01", f="FLOOR7_2" }, - MARBF02 = { t="MARBF02", f="FLOOR7_2" }, - MARBF03 = { t="MARBF03", f="FLOOR7_2" }, - -- dark, thin tall - MARBFB1 = { t="MARBFB1", f="G11" }, - MARBFB2 = { t="MARBFB2", f="G11" }, - MARBFB3 = { t="MARBFB3", f="G11" }, - -- dark - MARBFAB1 = { t="MARBFAB1", f="G11" }, - MARBFAB2 = { t="MARBFAB2", f="G11" }, - MARBFAB3 = { t="MARBFAB3", f="G11" }, - MARBFAB5 = { t="MARBFAB5", f="G11" }, - MARBFAB6 = { t="MARBFAB6", f="G11" }, - MARBFAB7 = { t="MARBFAB7", f="G11" }, - MARBFAB8 = { t="MARBFAB8", f="G11" }, - MARBFAB9 = { t="MARBFAB9", f="G11" }, - MARBFABA = { t="MARBFABA", f="G11" }, - MARBFABB = { t="MARBFABB", f="G11" }, - MARBFABC = { t="MARBFABC", f="G11" }, - MARBFABD = { t="MARBFABD", f="G11" }, - MARBFABF = { t="MARBFABF", f="G11" }, - MARBFABG = { t="MARBFABG", f="G11" }, - MARBFABH = { t="MARBFABH", f="G11" }, - MARBFABI = { t="MARBFABI", f="G11" }, - MARBFABJ = { t="MARBFABJ", f="G11" }, - - -- green marble - MARBFAC5 = { t="MARBFAC5", f="FLOOR7_2" }, --Plutonia 2, - MARBFAC6 = { t="MARBFAC6", f="FLOOR7_2" }, - MARBFAC7 = { t="MARBFAC7", f="FLOOR7_2" }, - MARBFAC8 = { t="MARBFAC8", f="FLOOR7_2" }, -- Craneo's doing - MARBFAC9 = { t="MARBFAC9", f="FLOOR7_2" }, -- Craneo's doing - MARBFACA = { t="MARBFACA", f="FLOOR7_2" }, -- Craneo's doing - MARBFACB = { t="MARBFACB", f="FLOOR7_2" }, -- Craneo's doing - MARBFACC = { t="MARBFACC", f="FLOOR7_2" }, - MARBFACD = { t="MARBFACD", f="FLOOR7_2" }, - MARBFACF = { t="MARBFACF", f="FLOOR7_2" }, - MARBFACG = { t="MARBFACG", f="FLOOR7_2" }, - MARBFACH = { t="MARBFACH", f="FLOOR7_2" }, - MARBFACI = { t="MARBFACI", f="FLOOR7_2" }, - MARBFACJ = { t="MARBFACJ", f="FLOOR7_2" }, - - MARBLE = { t="MARBLE", f="FLOOR7_2" }, - MARBLE4 = { t="MARBLE4", f="FLOOR7_2" }, - MARBLE5 = { t="MARBLE5", f="FLOOR7_2" }, - MARBLE6 = { t="MARBLE6", f="FLOOR7_2" }, - MARBLE7 = { t="MARBLE7", f="FLOOR7_2" }, - MARBLE8 = { t="MARBLE8", f="FLOOR7_2" }, - MARBLFAC = { t="MARBLFAC", f="TILES4" }, -- Greek inspired wall - MBGRY = { t="MBGRY", f="FLOOR7_2" }, --MARBGRAY - MBGRY2 = { t="MBGRY2", f="FLOOR7_2" }, --MARBFAC4, - - REDMARB1 = { t="REDMARB1", f="BMARB3" }, - REDMARB2 = { t="REDMARB2", f="RMARB1" }, - REDMARB3 = { t="REDMARB3", f="RMARB2" }, - - -- Metal / Rust - DARKMET1 = { t="DARKMET1", f="DARKM01" }, - EVILFACE = { t="EVILFACE", f="CEIL5_2" }, --From Plutonia 2, - EVILFAC2 = { t="EVILFAC2", f="FLAT5_4" }, - EVILFAC3 = { t="EVILFAC3", f="FLAT5" }, - EVILFAC4 = { t="EVILFAC4", f="BLACK0" }, - EVILFAC5 = { t="EVILFAC5", f="BLACK0" }, - EVILFAC6 = { t="EVILFAC6", f="GRATE4" }, - EVILFAC7 = { t="EVILFAC7", f="GRATE4" }, - EVILFAC8 = { t="EVILFAC8", f="GRATE4" }, - EVILFAC9 = { t="EVILFAC9", f="GRATE4" }, - EVILFACA = { t="EVILFACA", f="GRATE4" }, - GRAYMET1 = { t="GRAYMET1", f="FLAT23" }, - GRAYMET2 = { t="GRAYMET2", f="SHINY04" }, - GRAYMET3 = { t="GRAYMET3", f="SHINY04" }, - GRAYMET4 = { t="GRAYMET4", f="SHINY04" }, - GRAYMET5 = { t="GRAYMET5", f="SHINY04" }, - GRAYMET6 = { t="GRAYMET6", f="SHINY04" }, -- Blue plating inside - GRAYMET7 = { t="GRAYMET7", f="SHINY04" }, -- Purple - GRAYMET8 = { t="GRAYMET8", f="SHINY04" }, -- Green - GRAYMET9 = { t="GRAYMET9", f="SHINY04" }, -- Red - GRAYMETA = { t="GRAYMETA", f="SHINY04" }, -- Cyan - GRAYMETB = { t="GRAYMETB", f="SHINY04" }, -- Purple-ish - GRAYMETC = { t="GRAYMETC", f="SHINY04" }, -- Orange - MET2 = { t="MET2", f="CEIL5_2" }, -- METAL2, - MET3 = { t="MET3", f="CEIL5_2" }, -- METAL3, - MET4 = { t="MET4", f="CEIL5_2" }, -- METAL4, - MET5 = { t="MET5", f="CEIL5_2" }, -- METAL5, - MET6 = { t="MET6", f="CEIL5_2" }, -- METAL6, - MET7 = { t="MET7", f="CEIL5_2" }, -- METAL7, - METACOMP = { t="METACOMP", f="CEIL5_2" }, - METAL8 = { t="METAL8", f="CEIL5_2" }, - METAL9 = { t="METAL9", f="CEIL5_2" }, - METAL10 = { t="METAL10", f="CEIL5_2" }, - METAL11 = { t="METAL11", f="FLOOR4_8" }, - - METL01 = { t="METL01", f="CEIL5_2" }, --METAL2, - METL02 = { t="METL02", f="GMET01" }, - METL03 = { t="METL03", f="GMET01" }, - METL04 = { t="METL04", f="SLIME16" }, --SPACEW4, - - RUSTWALL = { t="RUSTWALL", f="GRATE8" }, - RUSTWAL2 = { t="RUSTWAL2", f="G08" }, - RUSTWAL3 = { t="RUSTWAL3", f="G08" }, - RUSTWAL4 = { t="RUSTWAL4", f="G08" }, - - --Memento Mori 2 textures - HELMET2 = { t="HELMET2", f="CEIL5_2" }, - MM205 = { t="MM205", f="MFLR8_4" }, --Rock with metal patterns - MM206 = { t="MM206", f="G20" }, --Green rock - MM207 = { t="MM207", f="G20" }, --Green brick - - -- the following textures are original composites and don't actually have anything to do with - -- MM2 anymore - MMT208 = { t="MMT208", f="QFLAT02" }, --Brown and black stripe wall - MMT209 = { t="MMT209", f="QFLAT03" }, - MMT210 = { t="MMT210", f="QFLAT09" }, - - -- Egypt - EGYPT01 = { t="EGYPT01", f="FLAT1_1" }, --64x64, - EGYPT02 = { t="EGYPT02", f="FLOOR7_1" }, --128x128, - EGYPT03 = { t="EGYPT03", f="FLOOR7_1" }, --64x128, doesn't tile horizontally that well - EGYPT04 = { t="EGYPT04", f="SAND2" }, --128x128, - EGYPT05 = { t="EGYPT05", f="RROCK09" }, --128x128, - EGYPT06 = { t="EGYPT06", f="RROCK09" }, --128x128, - - ESAND1 = { t="ESAND1", f="SAND1" }, -- Sand dune texture - ESAND2 = { t="ESAND2", f="SAND2" }, -- Sand dune texture - - EGDOOR1 = { t="EGDOOR1", f="FLOOR7_1" }, -- Door - - -- Egypt wall murals - MURAL3 = { t="MURAL3", f="FLAT1_1" }, --96x128, - MURAL4 = { t="MURAL4", f="FLAT1_1" }, --96x128, - MURAL5 = { t="MURAL5", f="FLAT1_1" }, - MURAL6 = { t="MURAL6", f="FLAT1_1" }, - MURAL7 = { t="MURAL7", f="RROCK09" }, --256x128, - MURAL8 = { t="MURAL8", f="RROCK03" }, --256x128, - MURAL9 = { t="MURAL9", f="RROCK09" }, - MURAL10 = { t="MURAL10", f="RROCK09" }, - MURAL11 = { t="MURAL11", f="RROCK09" }, - MURAL12 = { t="MURAL12", f="RROCK09" }, - MURAL13 = { t="MURAL13", f="RROCK09" }, - MURAL14 = { t="MURAL14", f="RROCK09" }, - MURAL15 = { t="MURAL15", f="RROCK09" }, - MURAL16 = { t="MURAL16", f="RROCK09" }, - MURAL17 = { t="MURAL17", f="RROCK09" }, - - -- Rocks / Natural - CATACMB1 = { t="CATACMB1", f="RROCK03" }, -- Dark gray rock, bones - CATACMB2 = { t="CATACMB2", f="RROCK03" }, -- Dark gray rock, empty - CATACMB3 = { t="CATACMB3", f="RROCK03" }, -- Dark gray rock - CATACMB4 = { t="CATACMB4", f="FLOOR7_1" }, -- Dark brown rock, bones - CATACMB5 = { t="CATACMB5", f="FLOOR7_1" }, -- Dark brown rock, empty - CATACMB6 = { t="CATACMB6", f="FLOOR7_1" }, -- Dark brown rock - RDROK1 = { t="RDROK1", f="RROCK01" }, - RDROK2 = { t="RDROK2", f="FLOOR6_1" }, - ROK01 = { t="ROK01", f="RROCK16" }, --ROCK4, - ROK02 = { t="ROK02", f="RROCK09" }, --ROCK5, - ROK03 = { t="ROK03", f="RROCK03" }, - ROK04 = { t="ROK04", f="RROCK03" }, - ROK05 = { t="ROK05", f="RROCK03" }, - ROK06 = { t="ROK06", f="RROCK18" }, - ROK07 = { t="ROK07", f="RROCK17" }, - ROK08 = { t="ROK08", f="GRNROCK" }, - ROK09 = { t="ROK09", f="GRNROCK" }, - ROK10 = { t="ROK10", f="RROCK13" }, - ROK11 = { t="ROK11", f="SLIME13" }, --BRICK10, - ROK12 = { t="ROK12", f="FLAT10" }, - ROK13 = { t="ROK13", f="QFLAT07" }, - ROK14 = { t="ROK14", f="RROCK03" }, - ROK15 = { t="ROK15", f="RROCK03" }, - ROK16 = { t="ROK16", f="FLOOR7_1" }, --Brownish version of ROCK3, - ROK17 = { t="ROK17", f="FLAT5_4" }, --Light gray bricks - ROK18 = { t="ROK18", f="FLAT5_4" }, --Dark gray bricks (Flat needed) - ROK19 = { t="ROK19", f="FLOOR7_1" }, --Brown/tan bricks (Flat needed) - ROK20 = { t="ROK20", f="RROCK03" }, - ROK21 = { t="ROK21", f="FLAT10" }, - ROK22 = { t="ROK22", f="RROCK18" }, - ROK23 = { t="ROK23", f="RROCK03" }, - ROK24 = { t="ROK24", f="RROCK03" }, - ROK25 = { t="ROK25", f="RROCK17" }, - ROK26 = { t="ROK26", f="RROCK16" }, - ROKGRN = { t="ROKGRN", f="GRENFLOR" }, -- composite of various green cliff textures - TNROK1 = { t="TNROK1", f="RROCK09" }, --TANROCK4, - TNROK2 = { t="TNROK2", f="RROCK03" }, --TANROCK5, - - -- Pipes - PIPESV1 = { t="PIPESV1", f="FLAT1" }, - PIPESV2 = { t="PIPESV2", f="FLAT5_5" }, - PIPESV3 = { t="PIPESV3", f="RROCK20" }, - PIPEDRK1 = { t="PIPEDRK1", f="RROCK03" }, - PIPEWAL5 = { t="PIPEWAL5", f="RROCK03" }, - - -- Silver / Shiny - HEX01 = { t="HEX01", f="SHINY03" }, - SHAWN4 = { t="SHAWN4", f="FLAT23" }, - SHAWN5 = { t="SHAWN5", f="FLAT23" }, - SHAWN01C = { t="SHAWN01C", f="FLAT23" }, - SHAWN01D = { t="SHAWN01D", f="FLAT23" }, - SHAWN01E = { t="SHAWN01E", f="FLAT23" }, - SHAWN01F = { t="SHAWN01F", f="FLAT23" }, - SHAWN01G = { t="SHAWN01G", f="FLAT23" }, - SHAWN01H = { t="SHAWN01H", f="FLAT23" }, - SHAWCOMP = { t="SHAWCOMP", f="FLAT23" }, - SHAWGRY4 = { t="SHAWGRY4", f="FLAT23" }, - SHAWHOSO = { t="SHAWHOSO", f="FLAT23" }, - SHAWNDR = { t="SHAWNDR", f="FLAT20" }, - SHAWVENT = { t="SHAWVENT", f="FLAT23" }, - SHAWVEN2 = { t="SHAWVEN2", f="FLAT23" }, - SILVBLU1 = { t="SILVBLU1", f="FLAT23" }, - SILVCOMP = { t="SILVCOMP", f="FLAT23" }, - SHAWSH04 = { t="SHAWSH04", f="SHINY04"}, - - SILVER2G = { t="SILVER2G", f="FLAT23" }, - SILVER2R = { t="SILVER2R", f="FLAT23" }, - SILVER2O = { t="SILVER2O", f="FLAT23" }, - SILVER2Y = { t="SILVER2Y", f="FLAT23" }, - SILVER2W = { t="SILVER2W", f="FLAT23" }, - - UACCRT1 = { t="UACCRT1", f="FLAT23" }, - - -- Skin and Hell - BODIES1 = { t="BODIES1", f="BODIESFL" }, -- Copy of AASHITTY - BODIESB = { t="BODIESB", f="BODIESFL" }, --Dark red AASHITTY/SP_FACE2, - BODIESC = { t="BODIESC", f="BODIESF2" }, --Dark brown AASHITTY/SP_FACE2, - BONES1 = { t="BONES1", f="FLAT5_6" }, -- Brown bones - BONES2 = { t="BONES2", f="FLAT5_6" }, -- Gray bones - BONES3 = { t="BONES3", f="FLAT5_6" }, -- Bloody bones - CORPSES = { t="CORPSES", f="FLAT5_6" }, --SLOPPY1, - CRACKRED = { t="CRACKRED", f="RROCK01" }, - CRACKRD2 = { t="CRACKRD2", f="RROCK01" }, - CRAK01 = { t="CRAK01", f="RROCK01" }, --CRACKLE2, - CRAK02 = { t="CRAK02", f="RROCK02" }, --CRACKLE4, - DEATH1 = { t="DEATH1", f="FLAT5_4" }, - DEATH2 = { t="DEATH2", f="FLAT5_4" }, - DEATH3 = { t="DEATH3", f="FLAT5_4" }, - DEMSTAT = { t="DEMSTAT", f="GMET07" }, -- Demon statue, Craneo's stuff - HELMET1 = { t="HELMET1", f="CEIL5_1" }, - HELWAL1 = { t="HELWAL1", f="RROCK03" }, --Memento Mori 2, - HELLROK1 = { t="HELLROK1", f="FLOOR6_1" }, - HELWAL2 = { t="HELWAL2", f="FLOOR6_1" }, --Plutonia 2, - PENTA1 = { t="PENTA1", f="RROCK03" }, - SKIN3 = { t="SKIN3", f="SFLR6_4" }, - SKIN4 = { t="SKIN4", f="SKINFLT1" }, - SKINHEAD = { t="SKINHEAD", f="SFLR6_4" }, - SKINLOW1 = { t="SKINLOW1", f="FLAT5_2" }, --128x128 version of SKINLOW - SKINMET3 = { t="SKINMET3", f="CEIL5_2" }, - SKINMET4 = { t="SKINMET4", f="CEIL5_2" }, - SKINMET5 = { t="SKINMET5", f="CEIL5_2" }, - SKINMET6 = { t="SKINMET6", f="CEIL5_2" }, - SKINMET7 = { t="SKINMET7", f="CEIL5_2" }, - SKTEK01 = { t="SKTEK01", f="FLAT5_5" }, --SKINTEK1, - SKTEK02 = { t="SKTEK02", f="FLAT5_5" }, --SKINTEK2, - SKULLS = { t="SKULLS", f="FLOOR6_1" }, --SP_FACE2, - SKULLS2 = { t="SKULLS2", f="FLAT5_6" }, - SKULLS3 = { t="SKULLS3", f="FLAT5_6" }, --SKULWAL3, - SKULLS4 = { t="SKULLS4", f="FLAT5_6" }, --SKULWALL - SPDUDE3 = { t="SPDUDE3", f="FLOOR7_2" }, --SP_DUDE3, - SPDUDE6 = { t="SPDUDE6", f="FLOOR7_2" }, --SP_DUDE6, - SPDUDE7 = { t="SPDUDE7", f="FLOOR5_4" }, --SP_DUDE7, - SPDUDE8 = { t="SPDUDE8", f="FLOOR5_4" }, --SP_DUDE8, - SP_HOT2 = { t="SP_HOT2", f="RMARB3" }, - SP_HOT3 = { t="SP_HOT3", f="RMARB3" }, - SPINE01 = { t="SPINE01", f="SFLR6_4" }, - - --Snow and Ice - SNOW01 = { t="SNOW01", f="SNOW1" }, - SNOW02 = { t="SNOW02", f="SNOW1" }, - SNOW03 = { t="SNOW03", f="SNOW5" }, - SNOW04 = { t="SNOW04", f="SNOW8" }, - SNOW05 = { t="SNOW05", f="SNOW6" }, - SNOW06 = { t="SNOW06", f="SNOW8" }, - SNOW07 = { t="SNOW07", f="SNOW6" }, - SNOW08 = { t="SNOW08", f="SNOW1" }, - SNOW09 = { t="SNOW09", f="SNOW5" }, - SNOW10 = { t="SNOW10", f="SNOW1" }, - SNOW11 = { t="SNOW11", f="SNOW6" }, - SNOW12 = { t="SNOW12", f="SNOW6" }, - SNOW13 = { t="SNOW13", f="SNOW13F" }, -- 256x256, beautiful ice - SNOW14 = { t="SNOW14", f="SNOW6" }, -- 256x256, - SNOW15 = { t="SNOW15", f="SNOW1" }, - - SNOWBOX1 = { t="SNOWBOX1", f="SNOW6" }, - SNOWBOX2 = { t="SNOWBOX2", f="SNOW1" }, - - SNOWWAL1 = { t="SNOWWAL1", f="SHINY01" }, - SNOWWAL2 = { t="SNOWWAL2", f="SHINY02" }, - SNOWWAL3 = { t="SNOWWAL3", f="SHINY02" }, - SNOWWAL4 = { t="SNOWWAL4", f="SHINY01" }, - - -- Snow + Tech - SNWTF1 = { t="SNOWWAL4", f="SNWTF1" }, - SNWTF2 = { t="STONE10", f="SNWTF2" }, - SNWTF3 = { t="STARGRY1", f="SNWTF3" }, - SNWTF4 = { t="SNOWWAL2", f="SNWTF4" }, - SNWTF5 = { t="SNOWWAL3", f="SNWTF5" }, - SNWTF6 = { t="SNOWWAL2", f="SNWTF6" }, - SNWTF7 = { t="SNOWWAL1", f="SNWTF7" }, - SNWTF8 = { t="TEKSHAW", f="SNWTF8" }, - - -- Desert textures - DESBRIK1 = { t="DESBRIK1", f="RROCK09" }, -- Tan brick facade - DESBRIK2 = { t="DESBRIK2", f="RROCK09" }, -- Tan brick facade - DESBRIK3 = { t="DESBRIK3", f="FLOOR7_1" }, -- Brown brick facade w/ trim - DESBRIK4 = { t="DESBRIK4", f="RROCK09" }, -- Tan brick facade - DESBRIK5 = { t="DESBRIK5", f="RROCK09" }, -- Tan brick facade - DESBRIK6 = { t="DESBRIK6", f="RROCK09" }, -- Tan brick facade w/ trim - DESBRIK7 = { t="DESBRIK7", f="FLOOR7_1" }, -- Tan brick facade - DESMARB1 = { t="DESMARB1", f="RROCK09" }, -- Elegant tan marble - DESMARB2 = { t="DESMARB2", f="RROCK09" }, -- Elegant tan marble - DESROCK1 = { t="DESROCK1", f="RROCK03" }, -- Brown rock - DESROCK2 = { t="DESROCK2", f="QFLAT07" }, -- Brown rock - DESROCK3 = { t="DESROCK3", f="FLOOR7_1" }, -- Brown rock - DESROCK4 = { t="DESROCK4", f="RROCK09" }, -- Tan rock - DESROCK5 = { t="DESROCK5", f="RROCK17" }, -- Brown rock - - -- Tekwall / Startan-types - STARBR1 = { t="STARBR1", f="FLOOR0_2" }, - STARGRY1 = { t="STARGRY1", f="SHINY01" }, - TEKGRBLU = { t="TEKGRBLU", f="RROCK20" }, - TEKGRDR = { t="TEKGRDR", f="CEIL5_2" }, -- Usable as a door - TEKGRN01 = { t="TEKGRN01", f="RROCK20" }, --RROCK20, - TEKGRY01 = { t="TEKGRY01", f="RROCK21" }, - TEKGRY02 = { t="TEKGRY02", f="RROCK21" }, - TEKSHAW = { t="TEKSHAW", f="SHINY02" }, - TEKWALL2 = { t="TEKWALL2", f="CEIL5_1" }, - TEKWALL2 = { t="TEKWALL2", f="CEIL5_1" }, - TEKWALL7 = { t="TEKWALL7", f="FLOOR7_1" }, - TEKWALL8 = { t="TEKWALL8", f="TEK1" }, -- Red - TEKWALL9 = { t="TEKWALL9", f="TEK2" }, -- Green - TEKWALLA = { t="TEKWALLA", f="TEK3" }, -- Purple - TEKWALLB = { t="TEKWALLB", f="TEK4" }, -- Blue - TEKWALLC = { t="TEKWALLC", f="TEK5" }, -- Magenta - TEKWALLD = { t="TEKWALLD", f="TEK6" }, -- Cyan/Aqua - TEKWALLE = { t="TEKWALLE", f="TEK7" }, -- Orange - TVSNOW01 = { t="TVSNOW01", f="CEIL5_1" }, --Animated - - -- Auxiliary - COLLITE1 = { t="COLLITE1", f="RROCK20" }, --Green version of REDWALL1, - COLLITE2 = { t="COLLITE2", f="ORANFLOR" }, --Orange version of REDWALL1, - COLLITE3 = { t="COLLITE3", f="CEIL4_2" }, --Blue version of REDWALL1, - DFAN1 = { t="DFAN1", f="METAL" }, -- Essentially a wall version of FAN1, - LITE2 = { t="LITE2", f="FLOOR0_1" }, -- BROWN1 variant w/ lights. From Doom1, - LITE4 = { t="LITE4", f="FLAT19" }, -- LITE5 and bigger light on bottom. From Doom1, - LITE96 = { t="LITE96", f="FLOOR7_1" }, -- BROWN96 variant w/ lights. From Doom1, - LITEBLU3 = { t="LITEBLU3", f="CEIL5_1" }, -- Large blue lights. From Doom1, - LITESTON = { t="LITESTON", f="MFLR8_1" }, -- STONE2 variant w/ lights. From Doom1, - RDLITE01 = { t="RDLITE01", f="FLOOR1_6" }, --REDLITE - RDWAL01 = { t="RDWAL01", f="FLOOR1_6" }, --REDWALL1, - SANDBAGS = { t="SANDBAGS", f="RROCK09" }, - SUPPORT4 = { t="SUPPORT4", f="FLAT23" }, - WHEEL1 = { t="WHEEL1", f="CEIL5_1" }, -- Truck wheel - WHEEL2 = { t="WHEEL2", f="CEIL5_1" }, -- Car wheel - WHEEL3 = { t="WHEEL3", f="CEIL5_1" }, -- Compact car wheel - - -- Steps - WARNSTEP = { t="WARNSTEP", f="WARN1", sane=1 }, - - -- Wood / Panel / Urban - GUNRACK = { t="GUNRACK", f="RROCK09" }, -- Weapons rack by OSJ Clatchford, ZDoom custom texture thread, page 80, - PANBOOK2 = { t="PANBOOK2", f="RROCK09" }, -- 128x128, - PANBOOK3 = { t="PANBOOK3", f="RROCK09" }, -- 128x128, - PANBOOK4 = { t="PANBOOK4", f="RROCK09" }, -- 64x128, - PANBOOK5 = { t="PANBOOK5", f="RROCK09" }, -- 64x96, - STUC01 = { t="STUC01", f="RROCK09" }, --STUCCO - THATCH1 = { t="THATCH1", f="G03" }, - THATCH2 = { t="THATCH2", f="G02" }, - WD01 = { t="WD01", f="FLAT5_2" }, --WOOD8, - WD02 = { t="WD02", f="FLAT5_2" }, --WOOD9, - WD03 = { t="WD03", f="FLAT5_2" }, - WD04 = { t="WD04", f="FLAT5_1" }, - WODCRAT1 = { t="WODCRAT1", f="FLAT5_2" }, -- Wooden TNT UAC crate, 64x128, - WODCRAT2 = { t="WODCRAT2", f="FLAT5_2" }, -- Wooden TNT UAC crate, 64x64, - WODCRAT3 = { t="WODCRAT3", f="FLAT5_2" }, -- Wooden TNT UAC crate, 128x64, - WODCRAT4 = { t="WODCRAT4", f="FLAT5_2" }, -- Wooden UAC crate, 64x64, - WODCRAT5 = { t="WODCRAT5", f="FLAT5_2" }, -- Wooden UAC crate, 64x128, - WOODDEM1 = { t="WOODDEM1", f="FLAT5_1" }, -- Ugly wooden demon relief - WOODFACE = { t="WOODFACE", f="FLAT5_2" }, - WOODSKUL = { t="WOODSKUL", f="FLAT5_2" }, -- Wood with skull on it. From Doom1, - WOOD13 = { t="WOOD13", f="FLAT5_2" }, - WOOD14 = { t="WOOD14", f="FLAT5_2" }, - WOOD15 = { t="WOOD15", f="FLAT5_2" }, - WOOD16 = { t="WOOD16", f="FLAT5_2" }, - WOOD17 = { t="WOOD17", f="FLAT5_2" }, - WOOD18 = { t="WOOD18", f="FLAT5_2" }, - WDMET01 = { t="WDMET01", f="CEIL5_2" }, --WOODMET1, - WDMET02 = { t="WDMET02", f="CEIL5_2" }, --WOODMET2, - WDMET03 = { t="WDMET03", f="CEIL5_2" }, - - -- Jimmy's custom textures from Jimmytex - MOSROK3 = { t="MOSROK3", f="RROCK09" }, -- Plutonia MOSROK, but brown - - -- Doom 2 Panels - PANNY01 = { t="PANNY01", f="RROCK09" }, --PANEL1, - PANNY02 = { t="PANNY02", f="RROCK09" }, --PANEL2, - PANNY03 = { t="PANNY03", f="RROCK09" }, --PANEL3, - PANNY04 = { t="PANNY04", f="RROCK09" }, --PANEL4, - PANNY05 = { t="PANNY05", f="RROCK09" }, --PANEL6, - PANNY06 = { t="PANNY06", f="RROCK09" }, --PANEL7, - PANNY07 = { t="PANNY07", f="RROCK09" }, --PANEL8, - PANNY08 = { t="PANNY08", f="RROCK09" }, --PANEL9, - PANNY09 = { t="PANNY09", f="RROCK09" }, --PANCASE2, - PANNYA = { t="PANNYA", f="RROCK09" }, --TANROCK3, - - -- Animated liquid walls - GRYFALL1 = { t="GRYFALL1", f="SLUDGE01", sane=1 }, - MFALL1 = { t="MFALL1", f="MAGMA1", sane=1 }, - PURFAL1 = { t="PURFAL1", f="PURW1", sane=1 }, - SLMFALL1 = { t="SLMFALL1", f="SLIME01", sane=1 }, - OFALL1 = { t="OFALL1", f="OSLIME01", sane=1 }, - LFAL21 = { t="LFAL21", f="QLAVA1", sane=1 }, - LFALL1 = { t="LFALL1", f="XLAV1", sane=1 }, - ICEFALL = { t="ICEFALL", f="SNOW9", sane=1 }, --Not animated - - -- Animated but not fully liquid walls - SLADRIP1 = { t="SLADRIP1", f="FLOOR7_1" }, - - -- Candles / Misc Animated - CANDLE1 = { t="CANDLE1", f="MAGMA1", sane=1 }, -- Burning candles, for decor, not walls - FIREBLK1 = { t="FIREBLK1", f="FLOOR6_2", sane=1 }, -- Black FIREBLU1, - LAVBLAK1 = { t="LAVBLAK1", f="RROCK03", sane=1 }, -- Black FIRELAVA - LAVBLUE1 = { t="LAVBLUE1", f="FASHBLU", sane=1 }, -- Blue FIRELAVA - LAVGREN1 = { t="LAVGREN1", f="FASHGREN", sane=1 }, -- Green FIRELAVA - LAVWHIT1 = { t="LAVWHIT1", f="FASHWITE", sane=1 }, -- White FIRELAVA - - -- Switches - SW1CHN = { t="SW1CHN", f="FLAT5_2" }, - SW2CHN = { t="SW2CHN", f="FLAT5_2" }, - SW1GOTH = { t="SW1GOTH", f="CEIL5_2" }, - SW2GOTH = { t="SW2GOTH", f="CEIL5_2" }, - SW1PENT = { t="SW1PENT", f="CEIL5_2" }, - SW2PENT = { t="SW2PENT", f="CEIL5_2" }, - SW1QUAK = { t="SW1QUAK", f="CEIL5_2" }, - SW2QUAK = { t="SW2QUAK", f="CEIL5_2" }, - SW1SKUL1 = { t="SW1SKUL1", f="CEIL5_2" }, - SW2SKUL1 = { t="SW2SKUL1", f="CEIL5_2" }, - - -- Fencing & spacings - BARBWIRE = { t="BARBWIRE", rail_h=32 }, -- Razor barbwire - FENCE1 = { t="FENCE1", rail_h=128 }, - FENCE2 = { t="FENCE2", rail_h=128 }, - FENCE3 = { t="FENCE3", rail_h=64 }, - FENCE4 = { t="FENCE4", rail_h=128 }, - FENCE5 = { t="FENCE5", rail_h=72 }, - FENCE6 = { t="FENCE6", rail_h=72 }, - FENCE7 = { t="FENCE7", rail_h=128 }, - FENCE8 = { t="FENCE8", rail_h=96 }, -- Shiny - FENCE9 = { t="FENCE9", rail_h=96 }, -- Rusty - FENCEA = { t="FENCEA", rail_h=128 }, -- Shiny - FENCEB = { t="FENCEB", rail_h=128 }, -- Rusty - FENCEC = { t="FENCEC", rail_h=128 }, -- Fencing with vegetation(?) on it, from Evilution - MIDSPAC2 = { t="MIDSPAC2", f="CEIL5_1", rail_h = 128 }, -- Darker - MIDSPAC3 = { t="MIDSPAC3", f="CEIL5_1", rail_h = 128 }, -- A thicker, metallic look - MIDSPAC4 = { t="MIDSPAC4", f="WARN1", rail_h = 128 }, -- Warning stripes - MIDSPAC5 = { t="MIDSPAC5", f="WARN1", rail_h = 128 }, -- Warning stripes - MIDSPAC6 = { t="MIDSPAC6", f="CEIL5_2", rail_h = 128 }, -- Diamond holes - MIDSPAC7 = { t="MIDSPAC7", f="CEIL5_2", rail_h = 128 }, -- Rectangular holes - MIDSPAC8 = { t="MIDSPAC8", f="CEIL5_2", rail_h = 128 }, -- Diagonal holes - MIDVINE1 = { t="MIDVINE1", f="CEIL5_1", rail_h = 128 }, -- 256x128, brown vines - MIDVINE2 = { t="MIDVINE2", f="CEIL5_1", rail_h = 128 }, -- 256x128, brown & green vines - RAIL1 = { t="RAIL1", rail_h=32 }, - - -- Transparent windows - MIDWIND1 = { t="MIDWIND1", f="CEIL5_1", rail_h = 128 }, -- 32x128, - MIDWIND2 = { t="MIDWIND2", f="CEIL5_1", rail_h = 128 }, -- 32x128, - MIDWIND3 = { t="MIDWIND3", f="CEIL5_1", rail_h = 128 }, -- 64x128, - MIDWIND4 = { t="MIDWIND4", f="CEIL5_1", rail_h = 96 }, -- 32x96, - MIDWIND5 = { t="MIDWIND5", f="CEIL5_1", rail_h = 128 }, -- 64x128, - MIDWIND6 = { t="MIDWIND6", f="CEIL5_1", rail_h = 96}, -- 32x96, - MIDWIND7 = { t="MIDWIND7", f="CEIL5_1", rail_h = 128 }, -- 32x128, - MIDWIND8 = { t="MIDWIND8", f="CEIL5_1", rail_h = 128 }, -- 128x128, - - -- Obsidian flags - -- Note: Due to being over 128 height, we may need to use HI_START/HI_END lumps if - -- we have problems with the textures being cut off in-game. - OBDNBNR1 = { t="OBDNBNR1", f="CRATOP2" }, -- Obsidian flag, yellow - OBDNBNR2 = { t="OBDNBNR2", f="SFLR6_4" }, -- Obsidian flag, hellish - - -- Vending machine textures (from vending_machine_textures.wad) -- - OBVNMCH1 = { t="OBVNMCH1", f="CEIL5_1" }, - OBVNMCH2 = { t="OBVNMCH2", f="CEIL5_1" }, - OBVNMCH3 = { t="OBVNMCH3", f="CEIL5_1" }, - OBVNMCH4 = { t="OBVNMCH4", f="CEIL5_1" }, - OBVNMCH5 = { t="OBVNMCH5", f="CEIL5_1" }, - - CRATJOKE = { t="CRATJOKE", f="CRATOP2"}, - - -- Exiting textures with new definitions - FIREBLU1 = { t="FIREBLU1", f="FIRELAF1" }, - FIREBLU2 = { t="FIREBLU2", f="FIRELAF2" }, - FIREWALA = { t="FIREWALA", f="FLOOR6_1" }, - FIRELAV2 = { t="FIRELAV2", f="FLOOR6_1" }, - TEKWALL4 = { t="TEKWALL4", f="TEKFLR4" }, - - --------------------------- - -- StalungCraft textures -- - --------------------------- - - -- TODO: Use better flats used here if possible! - - -- Wood & bookcases - BKCASE1A = { t="BKCASE1A", f="RROCK20" }, -- Tan bookshelf, filled with books, 64x128 - BKCASE2A = { t="BKCASE2A", f="RROCK20" }, -- Tam bookshelf, filled with books, 96x128 - BKCASE3A = { t="BKCASE3A", f="RROCK20" }, -- Tan bookshelf, filled with books, 128x128 - BKSIDE1A = { t="BKSIDE1A", f="RROCK20" }, -- Bookshelf side texture, 64x128 - - -- Brick walls - BRIC9GRN = { t="BRIC9GRN", f="FLOOR7_2" }, -- Light green bricks with ledge, 128x128 - BRIC9GRY = { t="BRIC9GRY", f="FLAT5_4" }, -- Gray bricks with ledge, 128x128 - BRIC9TAN = { t="BRIC9TAN", f="FLOOR7_1" }, -- Tan bricks with ledge, 128x128 - BRICEGRN = { t="BRICEGRN", f="FLOOR7_2" }, -- Big green bricks, 128x128 - BRICEGRY = { t="BRICEGRY", f="FLOOR7_1" }, -- Big gray bricks, 128x128 - BRICETAN = { t="BRICETAN", f="RROCK20" }, -- Big tan bricks, 128x128 - - DECO1BLK = { t="DECO1BLK", f="BLACK0" }, -- Decorative black wall bits, 64x128 - DECO1BRN = { t="DECO1BRN", f="FLOOR7_1" }, -- Decorative brown wall bits, 64x128 - DECO1GRN = { t="DECO1GRN", f="FLOOR7_2" }, -- Decorative green wall bits, 64x128 - DECO1GRY = { t="DECO1GRY", f="FLAT1" }, -- Decorative gray wall bits, 64x128 - DECO1RED = { t="DECO1RED", f="FLOOR1_6" }, -- Decorative red wall bits, 64x128 - DECO1TAN = { t="DECO1TAN", f="RROCK20" }, -- Decorative tan wall bits, 64x128 - - -- Decorative brick - ENGRAV1 = { t="ENGRAV1", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Knight) - ENGRAV2 = { t="ENGRAV2", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Cross?) - ENGRAV3 = { t="ENGRAV3", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Cross!) - ENGRAV4 = { t="ENGRAV4", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Skull) - ENGRAV5 = { t="ENGRAV5", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x128 (Battle) - ENGRAV6 = { t="ENGRAV6", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x96 (Gathering?) - ENGRAV7 = { t="ENGRAV7", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x96 (Figures) - ENGRAV8 = { t="ENGRAV8", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x96 (Figures) - - -- NOTE: FLATS USED IN DOOM 64 TEXTURES AT THE MOMENT ARE PLACEHOLDERS!! -A, Nov 12th, 2021 - ------------- - -- DOOM 64 -- - ------------- - - -- Gore, anything bloody - D64BOD01 = { t="D64BOD01", f="CEIL5_1" }, -- Body packed into wall, skeletonized, 32x128 - - -- Reliefs, misc. details - D64REL01 = { t="D64REL01", f="CEIL5_1" }, -- Lioney relief, 64x64 - D64REL02 = { t="D64REL02", f="CEIL5_1" }, -- Evil looking face, 64x64 - D64REL03 = { t="D64REL03", f="CEIL5_1" }, - D64REL04 = { t="D64REL04", f="CEIL5_1" }, -- Evil looking face, 64x64 - D64REL05 = { t="D64REL05", f="CEIL5_1" }, -- Evil looking face, 64x64 (similar to 04) - D64REL06 = { t="D64REL06", f="CEIL5_1" }, -- Evil looking face, 64x64 - D64REL07 = { t="D64REL07", f="CEIL5_1" }, -- Evil looking face, 64x64 - D64REL08 = { t="D64REL08", f="CEIL5_1" }, -- Pentagram on dark stone, 64x64 - D64REL09 = { t="D64REL09", f="FLAT5_5" }, -- "Arrow" fleshy thing pointing right, 128x32 (for scrollers) - D64REL10 = { t="D64REL10", f="FLAT5_5" }, -- "Arrow" fleshy thing pointing left, 128x32 (for scrollers) - - -- Support beams and such - D64SUP01 = { t="D64SUP01", f="CEIL5_1" }, -- Evil looking support beam, similar look to D64REL02, 32x128 - D64SUP02 = { t="D64SUP02", f="CEIL5_1" }, -- Stone support with curvy relief, 32x128 - D64SUP03 = { t="D64SUP03", f="CEIL5_1" }, -- Skeletony face-like support beam, 32x128 - D64SUP04 = { t="D64SUP04", f="CEIL5_2" }, -- Riveted metal support beam, 16x128 - D64SUP05 = { t="D64SUP05", f="CEIL5_2" }, -- Riveted metal support beam with relief indentations, 16x128 - D64SUP06 = { t="D64SUP06", f="CEIL5_2" }, -- Dark riveted metal support beam, 16x128 - D64SUP07 = { t="D64SUP07", f="CEIL5_1" }, -- Stone engraved pillar, 32x128 - D64SUP08 = { t="D64SUP08", f="CEIL5_1" }, -- Draconic looking pillar, 32x128 - - -- Animated walls - D64ANM1A = { t="D64ANM1A", f="FLOOR7_2" }, -- Evil face anim 1 of 3, 64x64. This one needs similar timing like in Doom 64! - D64ANM1B = { t="D64ANM1B", f="FLOOR7_2" }, -- Evil face anim 2 of 3, 64x64 - D64ANM1C = { t="D64ANM1C", f="FLOOR7_2" }, -- Evil face anim 3 of 3, 64x64 - - -- Animated floors - D64TEL01 = { t="BROWNHUG", f="D64TEL01" }, -- Hellish teleporter - D64TEL02 = { t="BROWNHUG", f="D64TEL02" }, -- Hellish teleporter - D64TEL03 = { t="BROWNHUG", f="D64TEL03" }, -- Hellish teleporter - D64TEL04 = { t="BROWNHUG", f="D64TEL04" }, -- Hellish teleporter - - - - -- ------------------ -- - -- END DOOM 64 STUFF -- - -- ------------------ -- - - -------------------- - -------------------- - --- Extra floors --- - -------------------- - -------------------- - - -- Organic - BODIESFL = { f="BODIESFL", t="BODIESB" }, - BODIESF2 = { f="BODIESF2", t="BODIESC" }, - FASHBLU = { f="FASHBLU", t="LAVBLUE1" }, -- These four are to accompany the colored FIRELAVAs.. - FASHGREN = { f="FASHGREN", t="LAVGREN1" }, - FASHWITE = { f="FASHWITE", t="LAVWHIT1" }, - FASHBLAK = { f="FASHBLAK", t="LAVBLAK1" }, - - -- Carpet - CARPET1 = { t="PANNYA", f="CARPET1" }, - CARPET2 = { t="WOOD1", f="CARPET2" }, - CARPET3 = { t="PANNYA", f="CARPET3" }, - CARPET4 = { t="WOOD3", f="CARPET4" }, - CARPET5 = { t="WOOD1", f="CARPET5" }, - CARPET6 = { t="WOOD1", f="CARPET6" }, - CARPET7 = { t="WOODVERT", f="CARPET7" }, - CARPET8 = { t="WOODVERT", f="CARPET8" }, - - -- Various Decayed Tech Flooring / etc - DARKF01 = { t="BROWNGRN", f="DARKF01" }, - DARKF02 = { t="BROWNGRN", f="DARKF02" }, - DARKF03 = { t="METL01", f="DARKF03" }, - FLOOR46D = { t="PIPEDRK1", f="FLOOR46D" }, - FLOOR46E = { t="PIPEDRK1", f="FLOOR46E" }, - FLAT15 = { t="COMPRED", f="FLAT15" }, - FLOOR1_2 = { f="FLOOR1_2", t="COMPRED" }, - FLOOR4_7 = { f="FLOOR4_7", t="STARGR1" }, - FLOOR51C = { f="FLOOR51C", t="METAL1" }, - FLOOR7_3 = { f="FLOOR7_3", t="GOTH11" }, - - -- Egypt - EG01 = { t="EGYPT03", f="EG01" }, - EG02 = { t="STONE6", f="EG02" }, - EG03 = { t="EGYPT03", f="EG03" }, - EG04 = { t="STONE6", f="EG04" }, - EG05 = { t="EGYPT04", f="EG05" }, - EG06 = { t="BRIKS06", f="EG06" }, - SAND1 = { t="ESAND1", f="SAND1" }, - SAND2 = { t="ESAND2", f="SAND2" }, - SAND3 = { t="DESROCK2", f="SAND3" }, - SAND4 = { t="DESROCK3", f="SAND4" }, - SAND5 = { t="DESROCK4", f="SAND5" }, - SAND6 = { t="DESROCK2", f="SAND6" }, - SAND7 = { t="DESROCK5", f="SAND7" }, - - -- Gothic - G01 = { t="GOTH34", f="G01" }, --Dark brown BRICK8-9 bricks - G02 = { t="THATCH2", f="G02" }, --Dark brown thatch pattern - G03 = { t="THATCH1", f="G03" }, --Brown thatch pattern - G04 = { t="GOTH16", f="G04" }, --Dark metal with 4 rivets - G05 = { t="GOTH26", f="G05" }, --Black carpety tiled floor - G06 = { t="GOTH23", f="G06" }, --Black tiles - G07 = { t="GOTH25", f="G07" }, --Black riveted floor - G08 = { t="GOTH27", f="G08" }, --Black riveted floor with darker rivets - G09 = { t="GOTH36", f="G09" }, --Dark brown 4 square metal/bricks - G10 = { t="GOTH25", f="G10" }, --Same as G09 but with rivets - G11 = { t="GOTH09", f="G11" }, --Black rocks - G12 = { t="GOTH25", f="G12" }, --Gray bricks - G13 = { t="GOTH08", f="G13" }, --Bloody red bricks - G14 = { t="GOTH25", f="G14" }, --Lighter version of G09, - G15 = { t="GOTH23", f="G15" }, --Darker black tiles - G16 = { t="GOTH17", f="G16" }, --Horizontal metal - G17 = { t="GOTH18", f="G17" }, --Vertical metal - G18 = { t="GOTH15", f="G18" }, --Metal squares - G19 = { t="GOTH26", f="G19" }, --Black wavey floor - G20 = { t="GOTH10", f="G20" }, --Green bricks - G21 = { t="GOTH44", f="G21" }, --Olive tiles - - -- Glass - GGLAS01 = { t="GLASS9", f="GGLAS01" }, - GGLAS02 = { t="GLASS9", f="GGLAS02" }, - - --Most of Gothic lights are red - GLITE01 = { t="METL01", f="GLITE01" }, - GLITE02 = { t="METAL", f="GLITE02" }, - GLITE03 = { t="METL01", f="GLITE03" }, - GLITE04 = { t="METL01", f="GLITE04" }, - GLITE05 = { t="METL01", f="GLITE05" }, --Orange - GLITE06 = { t="METL01", f="GLITE06" }, - GLITE07 = { t="METL01", f="GLITE07" }, --Green - GLITE08 = { t="METL01", f="GLITE08" }, --White - GLITE09 = { t="METL01", f="GLITE09" }, --Blue - ---- recolored vresions of GLITE05 - T_GLT5BL = { t="METL01", f="T_GLT5BL" }, --Blue - T_GLT5RD = { t="METL01", f="T_GLT5RD" }, --Red - T_GLT5WT = { t="METL01", f="T_GLT5WT" }, --White - T_GLT5YL = { t="METL01", f="T_GLT5YL" }, --Yellow - T_GLT5GN = { t="METL01", f="T_GLT5GN" }, --Green - - -- Metal / Rust - DARKM01 = { t="DARKMET1", f="DARKM01" }, - GMET01 = { t="METL02", f="GMET01" }, - GMET02 = { t="METL02", f="GMET02" }, --Rivets - GMET03 = { t="METL02", f="GMET03" }, --Less rivets - GMET04 = { t="GOTH32", f="GMET04" }, - GMET05 = { t="GOTH15", f="GMET05" }, - GMET06 = { t="GOTH15", f="GMET06" }, - GMET07 = { t="METL01", f="GMET07" }, - MEM01 = { t="HELMET2", f="MEM01" }, - - -- Bricks - BLACK0 = { t="ALTASH", f="BLACK0" }, - BRIK01 = { t="BRIKS06", f="BRIK01" }, - GSTN01 = { t="GOTH07", f="GSTN01" }, --Gray - GSTN02 = { t="GOTH07", f="GSTN02" }, --Dark gray - GSTN03 = { t="GOTH02", f="GSTN03" }, --Dark brown bricks/bronze plates - GSTN04 = { t="GOTH07", f="GSTN04" }, --Light brown - GSTN05 = { t="GOTH07", f="GSTN05" }, --Multicolored brown - URB1 = { f="URB1", t="URBAN1" }, - URB2 = { f="URB2", t="URBAN2" }, - - -- Rock - RROCK14Z = { f="RROCK14Z", t="BRIKS09" }, --Gray version - RROCK21 = { f="RROCK21", t="TEKGRY01" }, --Grayscale version of RROCK20, - - -- Wood flooring - GWOD01 = { t="WOOD1", f="GWOD01" }, -- Tiles poorly - GWOD02 = { t="WOOD1", f="GWOD02" }, -- Tiles poorly - GWOD03 = { t="WD01", f="GWOD03" }, - GWOD04 = { t="WD02", f="GWOD04" }, - WOODTIL = { t="WD03", f="WOODTIL" }, - WOODTI2 = { t="WD04", f="WOODTI2" }, - - -- Marble - BMARB1 = { t="KMARBLE1", f="BMARB1" }, - BMARB2 = { t="KMARBLE2", f="BMARB2" }, - BMARB3 = { t="KMARBLE1", f="BMARB3" }, - RMARB1 = { t="REDMARB1", f="RMARB1" }, - RMARB2 = { t="REDMARB3", f="RMARB2" }, - RMARB3 = { t="REDMARB2", f="RMARB3" }, - - -- Grating - GRATE1 = { t="METL01", f="GRATE1" }, - GRATE2 = { t="METL01", f="GRATE2" }, - GRATE3 = { t="METL01", f="GRATE3" }, - GRATE4 = { t="METL01", f="GRATE4" }, - GRATE5 = { t="METL01", f="GRATE5" }, - GRATE6 = { t="METL01", f="GRATE6" }, - GRATE7 = { t="METL01", f="GRATE7" }, - GRATE8 = { t="METL01", f="GRATE8" }, - - -- Overhead Lights - LITBL3F1 = { t="COMPSPAN", f="LITBL3F1" }, - LITBL3F2 = { t="COMPSPAN", f="LITBL3F2" }, - LITE4F1 = { t="SHAWN2", f="LITE4F1" }, - LITE4F2 = { t="SHAWN2", f="LITE4F2" }, - LITES01 = { t="METL01", f="LITES01" }, - LITES02 = { t="METL01", f="LITES02" }, - LITES03 = { t="METL01", f="LITES03" }, - LITES04 = { t="METL01", f="LITES04" }, - LIGHTS1 = { t="METL01", f="LIGHTS1" }, - LIGHTS2 = { t="METL01", f="LIGHTS2" }, - LIGHTS3 = { t="METL01", f="LIGHTS3" }, - LIGHTS4 = { t="METL01", f="LIGHTS4" }, - PLITE1 = { f="PLITE1", t="COMPSPAN" }, - TLITE5_1 = { f="TLITE5_1", t="COMPSPAN" }, - TLITE5_2 = { f="TLITE5_2", t="COMPSPAN" }, - TLITE5_3 = { f="TLITE5_3", t="COMPSPAN" }, - TLITE65B = { f="TLITE65B", t="COMPSPAN" }, - TLITE65G = { f="TLITE65G", t="COMPSPAN" }, - TLITE65O = { f="TLITE65O", t="COMPSPAN" }, - TLITE65P = { f="TLITE65P", t="COMPSPAN" }, - TLITE65W = { f="TLITE65W", t="COMPSPAN" }, - TLITE65Y = { f="TLITE65Y", t="COMPSPAN" }, - - -- Quake - QFLAT01 = { t="BRIKS07", f="QFLAT01" }, - QFLAT02 = { t="BRIKS07", f="QFLAT02" }, - QFLAT03 = { t="BRIKS07", f="QFLAT03" }, - QFLAT04 = { t="BRIKS07", f="QFLAT04" }, - QFLAT05 = { t="BRIKS03", f="QFLAT05" }, - QFLAT06 = { t="BRIKS03", f="QFLAT06" }, - QFLAT07 = { t="BRIKS07", f="QFLAT07" }, - QFLAT09 = { t="METL01", f="QFLAT09" }, - QFLAT10 = { t="METAL1", f="QFLAT10" }, - - -- Various shiny floors - SHINY01 = { t="SHAWN2", f="SHINY01" }, - SHINY02 = { t="SHAWN2", f="SHINY02" }, - SHINY03 = { t="HEX01", f="SHINY02" }, - SHINY04 = { t="SHAWN2", f="SHINY04" }, - - -- Snow and Ice - SNOW1 = { t="SNOW10", f="SNOW1" }, --Snow - SNOW2 = { t="ICEFALL", f="SNOW2" }, --Ice - SNOW3 = { t="SNOW05", f="SNOW3" }, --Snowy stone - SNOW4 = { t="SNOW01", f="SNOW4" }, --Snowy stone - SNOW5 = { t="SNOW03", f="SNOW5" }, --Snowy wall - SNOW6 = { t="SNOW10", f="SNOW6" }, --Snow - SNOW7 = { t="SNOW10", f="SNOW7" }, --Snow - SNOW8 = { t="SNOW10", f="SNOW8" }, --Snow - SNOW9 = { t="ICEFALL", f="SNOW9" }, --Ice - SNOW10F = { t="SNOW10", f="SNOW10F" }, -- Named like this to avoid texture conflict of the same name - SNOW11F = { t="SNOW12", f="SNOW11F" }, - SNOW12F = { t="SNOW15", f="SNOW12F" }, - SNOW13F = { t="SNOW13", f="SNOW13F" }, - SNOW14F = { t="SNOW10", f="SNOW14F" }, - SNOWBRIK = { t="SNOW01", f="SNOWBRIK" }, - SNOWROCK = { t="SNOW12", f="SNOWROCK" }, - SNOWSTON = { t="SNOW14", f="SNOWSTON" }, - - -- Dirt/Ground/Grass - GROUND01 = { t="DESROCK2", f="GROUND01" }, -- Deadish looking grass - GROUND02 = { t="DESROCK2", f="GROUND02" }, -- Same as GROUND01, but less tile friendly - GROUND03 = { t="DESROCK3", f="GROUND03" }, -- Grass - GROUND04 = { t="DESROCK5", f="GROUND04" }, -- Less saturated grass - - -- Tech flats - CEIL4_4 = { f="CEIL4_4", t="COMPBLUE" }, - GRENFLOR = { f="GRENFLOR", t="COMPGREN" }, - GRNLITE2 = { f="GRNLITE2", t="TEKGRN01" }, - ORANFLOR = { f="ORANFLOR", t="COLLITE2" }, - STARBR2F = { t="STARBR2", f="STARBR2F" }, -- Unused - STARG1F = { t="STARG1", f="STARG1F" }, -- Unused - STARGRF = { t="STARG1", f="STARGRF" }, -- Unused - STARTANF = { t="STARTAN2", f="STARTANF" }, -- Currently unused - TEK1 = { t="TEKWALL8", f="TEK1" }, - TEK2 = { t="TEKWALL9", f="TEK2" }, - TEK3 = { t="TEKWALLA", f="TEK3" }, - TEK4 = { t="TEKWALLB", f="TEK4" }, - TEK5 = { t="TEKWALLC", f="TEK5" }, - TEK6 = { t="TEKWALLD", f="TEK6" }, - TEK7 = { t="TEKWALLE", f="TEK7" }, - TEKFLR4 = { t="TEKWALL4", f="TEKFLR4" }, - - -- Tiles - FFLAT01 = { t="GRAY8", f="FFLAT01" }, - TILES1 = { t="STARGRY1", f="TILES1" }, - TILES2 = { t="BROWN1", f="TILES2" }, - TILES3 = { t="STUC01", f="TILES3" }, - TILES4 = { t="GRAY1", f="TILES4" }, - TILES5 = { t="STARGRY1", f="TILES5" }, - TILES6 = { t="GRAY5", f="TILES6" }, - - -- Teleporter pads - - GATE4BL = { f="GATE4BL", t="METAL" }, -- Blue - GATE4MG = { f="GATE4MG", t="METAL" }, -- Magenta - GATE4OR = { f="GATE4OR", t="METAL" }, -- Orange - GATE4PU = { f="GATE4PU", t="METAL" }, -- Purple - GATE4RD = { f="GATE4RD", t="METAL" }, -- Red, just brighter - GATE4TN = { f="GATE4TN", t="METAL" }, -- Skin-like - - -- Asphalt - ROAD1 = { f="ROAD1", t="STONE2" }, -- Consult New_Road.wad for its use! - ROAD2 = { f="ROAD2", t="BRIKS04" }, - ROAD3 = { f="ROAD3", t="BIGSTONE" }, - ROAD4 = { f="ROAD4", t="BRIKS05" }, - - -- Miscellaneous - REVAPPEA = { t="REVAPPEA", f="CEIL5_1" }, -- Spooky! Meant for walls and such - ---------------------------------------------------------------- --- Overwriting existing flats to use new patches for textures ---------------------------------------------------------------- - - WFALL1 = { t="WFALL1", f="FWATER1", sane=1 }, - FWATER1 = { t="WFALL1", f="FWATER1", sane=1 }, - - LFALL1 = { t="LFALL1", f="LAVA1", sane=1 }, --FIREMAG1, - - BFALL1 = { t="BFAL1", f="BLOOD1", sane=1 }, - BLOOD1 = { t="BFAL1", f="BLOOD1", sane=1 }, - - SFALL1 = { t="NFALL1", f="NUKAGE1", sane=1 }, - NUKAGE1 = { t="NFALL1", f="NUKAGE1", sane=1 }, - - KFALL1 = { t="SLMFALL1", f="SLIME01", sane=1 }, -- new patches - KFALL5 = { t="SLMFALL1", f="SLIME05", sane=1 }, - SLIME01 = { t="SLMFALL1", f="SLIME01", sane=1 }, - SLIME05 = { t="SLMFALL1", f="SLIME05", sane=1 }, - - FLOOR6_2 = { f="FLOOR6_2", t="ASH05" }, - - ------------------------- - -- New animated floors -- - ------------------------- - - FAN1 = { f="FAN1", t="METAL" }, -- Ceiling fan - - FIRELAF1 = { t="FIREBLU1", f="FIRELAF1" }, - FIRELAF2 = { t="FIREBLU2", f="FIRELAF2" }, - - ---------------------------------------- - -- End new animated non-liquid floors -- - ---------------------------------------- - - -- New liquids -- - - SLUDGE01 = { t="GRYFALL1", f="SLUDGE01", sane=1 }, - MAGMA1 = { t="MFALL1", f="MAGMA1", sane=1 }, - SNOW9 = { t="ICEFALL", f="SNOW9", sane=1 }, --Ice - OSLIME01 = { t="OFALL1", f="OSLIME01", sane=1 }, - XLAV1 = { t="LFALL1", f="XLAV1", sane=1 }, - QLAVA1 = { t="LFAL21", f="QLAVA1", sane=1 }, - PURW1 = { t="PURFAL1", f="PURW1", sane=1 }, - - -- Warning Strip -- - WARN1 = { t="WARN1", f="WARN2" }, - WARN2 = { t="WARN2", f="WARN1" }, - - ----------------------------------- - -- Walls as flats and vice versa -- - ----------------------------------- - - XDARKMET = { t="DARKMET1", f="DARKMET1" }, - XGRATE7 = { t="GRATE7", f="GRATE7" }, - XGREEN01 = { t="GREEN01", f="GREEN01" }, - - XSKIN3 = { t="SKIN3", f="SKIN3" }, - XSKIN4 = { t="SKIN4", f="SKIN4" }, - XHELLCMT = { t="HELLCMT7", f="HELLCMT7" }, - XQFLAT07 = { t="QFLAT07", f="QFLAT07" }, - - -- liquids - - XMFALL1 = { t="MFALL1", f="MFALL1" }, - - ------------------ - -- Craneo Stuff -- - ------------------ - - BANKDOOR = { t="BANKDOOR", f="FLAT23"}, - MONYFRON = { t="MONYFRON", f="MONYFLAT"}, - MONYSIDE = { t="MONYSIDE", f="MONYFLAT"}, - MONYFLAT = { t="MONYFRON", f="MONYFLAT"}, - - CREYEWLL = { t="CREYEWLL", f="FLAT15"}, -- red skin wall with eyes - CRFSHWLL = { t="CRFSHWLL", f="FLAT15"}, -- red flesh wall - CRGRSWLL = { t="CRGRSWLL", f="FLAT5_5"}, -- brown flesh wall with lacerations - CRHRTWLL = { t="CRHRTWLL", f="FLAT15"}, -- red flesh wall with lacerations - - -- Craneo's arcade machine screens - ARCD2 = { t="ARCD2", f="CEIL4_3"}, - ARCD3 = { t="ARCD3", f="CEIL4_3"}, - ARCD4 = { t="ARCD4", f="CEIL4_3"}, - ARCD5 = { t="ARCD5", f="CEIL4_3"}, - ARCD6 = { t="ARCD6", f="CEIL4_3"}, - ARCD7 = { t="ARCD7", f="CEIL4_3"}, - ARCD8 = { t="ARCD8", f="CEIL4_3"}, - ARCD9 = { t="ARCD9", f="CEIL4_3"}, - ARCD10 = { t="ARCD10", f="CEIL4_3"}, - ARCD11 = { t="ARCD11", f="CEIL4_3"}, - - -- Craneo's classical painting textures - CPAQLRRE = { t="CPAQLRRE", f="CEIL4_3"}, - CPFLAYIN = { t="CPFLAYIN", f="CEIL4_3"}, - CPGARDEN = { t="CPGARDEN", f="CEIL4_3"}, - CPGARDN2 = { t="CPGARDN2", f="CEIL4_3"}, - CPMEDUS = { t="CPMEDUS", f="CEIL4_3"}, - CPHEGOAT = { t="CPHEGOAT", f="CEIL4_3"}, - CPHLLDEM = { t="CPHLLDEM", f="CEIL4_3"}, - CPHRSEMN = { t="CPHRSEMN", f="CEIL4_3"}, - CPHRSMN2 = { t="CPHRSMN2", f="CEIL4_3"}, - CPSATRN = { t="CPSATRN", f="CEIL4_3"}, - CPVLAD = { t="CPVLAD", f="CEIL4_3"}, - CPPAINT1 = { t="CPPAINT1", f="CEIL4_3"}, - CPPAINT2 = { t="CPPAINT2", f="CEIL4_3"}, - CPPAINT3 = { t="CPPAINT3", f="CEIL4_3"}, - CPPAINT4 = { t="CPPAINT4", f="CEIL4_3"}, - CPPAINT5 = { t="CPPAINT5", f="CEIL4_3"}, - CPPAINT6 = { t="CPPAINT6", f="CEIL4_3"}, - - -- Craneo's wall of guns - CRGNRCK1 = { t="CRGNRCK1", f="FLAT19"}, -- wall of vanilla weapons - CRGNRCK2 = { t="CRGNRCK2", f="FLAT19"}, -- wall of non-canonical weapons - CRGNRCK3 = { t="CRGNRCK3", f="FLAT19"}, -- empty wall - - ----------------------------------- - -- Demiosis and Craneo's adverts -- - ----------------------------------- - - ADVCR1 = { t="ADVCR1", f="CEIL4_3"}, - ADVCR2 = { t="ADVCR2", f="CEIL4_3"}, - ADVCR3 = { t="ADVCR3", f="CEIL4_3"}, - ADVCR4 = { t="ADVCR4", f="CEIL4_3"}, - ADVCR5 = { t="ADVCR5", f="CEIL4_3"}, - ADVDE1 = { t="ADVDE1", f="CEIL4_3"}, - ADVDE2 = { t="ADVDE2", f="CEIL4_3"}, - ADVDE3 = { t="ADVDE3", f="CEIL4_3"}, - ADVDE4 = { t="ADVDE4", f="CEIL4_3"}, - ADVDE5 = { t="ADVDE5", f="CEIL4_3"}, - ADVDE6 = { t="ADVDE6", f="CEIL4_3"}, - ADVDE7 = { t="ADVDE7", f="CEIL4_3"}, - - - ---------------------------------------------- - -- Demiosis decorative tags/bloody writings -- - ---------------------------------------------- - - TAG1 = { t="TAG1", f="CEIL4_3"}, - TAG2 = { t="TAG2", f="CEIL4_3"}, - TAG3 = { t="TAG3", f="CEIL4_3"}, - TAG4 = { t="TAG4", f="CEIL4_3"}, - TAG5 = { t="TAG5", f="CEIL4_3"}, - TAG6 = { t="TAG6", f="CEIL4_3"}, - TAG7 = { t="TAG7", f="CEIL4_3"}, - TAG8 = { t="TAG8", f="CEIL4_3"}, - TAG9 = { t="TAG9", f="CEIL4_3"}, - TAG10 = { t="TAG10", f="CEIL4_3"}, - TAG11 = { t="TAG11", f="CEIL4_3"}, - TAGS1 = { t="TAGS1", f="CEIL4_3"}, - TAGS2 = { t="TAGS2", f="CEIL4_3"}, - TAGS3 = { t="TAGS3", f="CEIL4_3"}, - TAGS4 = { t="TAGS4", f="CEIL4_3"}, - - ---------------------------------------------- - -- Craneo decorative tags/bloody writings -- - ---------------------------------------------- - - TAGCR1 = { t="TAGCR1", f="CEIL4_3"}, - TAGCR2 = { t="TAGCR2", f="CEIL4_3"}, - TAGCR3 = { t="TAGCR3", f="CEIL4_3"}, - TAGCR4 = { t="TAGCR4", f="CEIL4_3"}, - TAGCR5 = { t="TAGCR5", f="CEIL4_3"}, - TAGCR6 = { t="TAGCR6", f="CEIL4_3"}, - TAGCR7 = { t="TAGCR7", f="CEIL4_3"}, - TAGCR8 = { t="TAGCR8", f="CEIL4_3"}, - TAGCR9 = { t="TAGCR9", f="CEIL4_3"}, - TAGCR10 = { t="TAGCR10", f="CEIL4_3"}, - TAGCR11 = { t="TAGCR11", f="CEIL4_3"}, - TAGCR12 = { t="TAGCR12", f="CEIL4_3"}, - TAGCR13 = { t="TAGCR13", f="CEIL4_3"}, - TAGCR14 = { t="TAGCR14", f="CEIL4_3"}, - TAGCR15 = { t="TAGCR15", f="CEIL4_3"}, - TAGCR16 = { t="TAGCR16", f="CEIL4_3"}, - - - ------------------------ - -- Composite textures -- - ------------------------ - - -- Tech -- - - -- special rails - GDRAIL1 = { t="GDRAIL1", f="CEIL5_1", rail_h=32}, -- is intended for fabs only - - -- Horizontal lights, based on the light bar found in - -- the Doom2 exit door texture - T_HLITE1 = { t="T_HLITE1", f="FLAT23" }, - T_HLITEY = { t="T_HLITEY", f="FLAT23" }, - T_HLITEG = { t="T_HLITEG", f="FLAT23" }, - T_HLITEB = { t="T_HLITEB", f="FLAT23" }, - - -- Recolored CEIL4_3 flats - T_CL43R = { t="COMPRED" , f="T_CL43R" }, - T_CL43Y = { t="SHAWN2" , f="T_CL43Y" }, -- needs yellow variant of COMPBLUE - T_CL43G = { t="COMPGREN" , f="T_CL43G" }, - T_CL43P = { t="SHAWN2" , f="T_CL43P" }, -- needs purple variant of COMPBLUE - - -- Recolored LITE5 + Exit door light - T_VLITER = { t="T_VLITER", f="FLAT23"}, - T_VLITEO = { t="T_VLITEO", f="FLAT23"}, - T_VLITEY = { t="T_VLITEY", f="FLAT23"}, - T_VLITEG = { t="T_VLITEG", f="FLAT23"}, - T_VLITEP = { t="T_VLITEP", f="FLAT23"}, - - -- Recolored LITE5's - T_VSLTER = { t="T_VSLTER", f="FLAT23"}, - T_VSLTEO = { t="T_VSLTEO", f="FLAT23"}, - T_VSLTEY = { t="T_VSLTEY", f="FLAT23"}, - T_VSLTEG = { t="T_VSLTEG", f="FLAT23"}, - T_VSLTEP = { t="T_VSLTEP", f="FLAT23"}, - - -- Sandy Tech floors - T_SDTCH1 = { t="STARTAN1", f = "T_SDTCH1"}, - T_SDTCH2 = { t="METL04", f = "T_SDTCH2"}, - T_SDTCH3 = { t="BRONZE5", f = "T_SDTCH3"}, - T_SDTCH4 = { t="CEM11", f = "T_SDTCH4"}, - T_SDTCH5 = { t="BROWN1", f = "T_SDTCH5"}, - - -- COMPBLUE recolors - COMPYELL = { t="COMPYELL", f = "ORANFLOR"}, -- comp yellow, why more would you wallow!? - - -- Gothic -- - - -- Light trims - T_GTHLY = { t="T_GTHLY", f="G04" }, - T_GTHLG = { t="T_GTHLG", f="G04" }, - T_GTHLB = { t="T_GTHLB", f="G04" }, - T_GTHLP = { t="T_GTHLP", f="G04" }, - - -- Quad lights - T_GHFLY = { t="G16", f="T_GHFLY" }, - T_GHFLB = { t="G16", f="T_GHFLB" }, - T_GHFLG = { t="G16", f="T_GHFLG" }, - T_GHFLP = { t="G16", f="T_GHFLP" }, - - ------------- - -- DUKETEX -- - ------------- - - -- store shelves - DNSTOR01 = { t="DNSTOR01", f="CEIL5_2"}, - DNSTOR02 = { t="DNSTOR02", f="CEIL5_2"}, - DNSTOR03 = { t="DNSTOR03", f="CEIL5_2"}, - DNSTOR04 = { t="DNSTOR04", f="CEIL5_2"}, - DNSTOR05 = { t="DNSTOR05", f="CEIL5_2"}, - DNSTOR06 = { t="DNSTOR06", f="CEIL5_2"}, - DNSTOR07 = { t="DNSTOR07", f="CEIL5_2"}, - DNSTOR08 = { t="DNSTOR08", f="CEIL5_2"}, - DNSTOR09 = { t="DNSTOR09", f="CEIL5_2"}, - DNSTOR10 = { t="DNSTOR10", f="CEIL5_2"}, - DNSTOR11 = { t="DNSTOR11", f="CEIL5_2"}, - DNSTOR12 = { t="DNSTOR12", f="CEIL5_2"}, - DNSTOR13 = { t="DNSTOR13", f="CEIL5_2"}, - DNSTOR20 = { t="DNSTOR20", f="CEIL5_2"}, - DNSTOR21 = { t="DNSTOR21", f="CEIL5_2"}, - - -- 8px step - DNSTEP01 = { t="DNSTEP01", f="FLAT5_4"}, - - ------------------ - -- MSSP Stuff -- - ------------------ - - -- MSSP-TECH -- - -- silver walls (256px) - OBTBSLV1 = { t="OBTBSLV1", f="GRATE1"}, - OBTBSLV2 = { t="OBTBSLV2", f="SHINY02"}, - OBTBSLV3 = { t="OBTBSLV3", f="SHINY04"}, - OBTBSLV4 = { t="OBTBSLV4", f="SHINY03"}, - OBTBSLV5 = { t="OBTBSLV5", f="FLAT3"}, - - -- silver wall, bronze-framed (256px) - OBTSVBZ1 = { t="OBTSVBZ1", f="G8_BRNF1"}, - OBTSVBZ2 = { t="OBTSVBZ2", f="G8_BRNF2"}, - OBTSVBZ3 = { t="OBTSVBZ3", f="G8_BRNF3"}, - - -- silver walls (128px) - OBTBSTX1 = { t="OBTBSTX1", f="SHINY03"}, - OBTBSTX2 = { t="OBTBSTX2", f="GRATE1"}, - OBTBSTX3 = { t="OBTBSTX3", f="GRATE6"}, - - OBTSTX1B = { t="OBTSTX1B", f="STARTANF"}, -- brown recolor composite - OBTSTX1G = { t="OBTSTX1G", f="STARG1F"}, -- green recolor composite - - -- techy brown walls (128px) - G8_BRNW1 = { t="G8_BRNW1", f="SLIME16"}, - G8_BRNW2 = { t="G8_BRNW2", f="FLOOR4_1"}, - G8_BRNW3 = { t="G8_BRNW3", f="FLOOR4_5"}, - - G8_BR1GY = { t="G8_BRNW1", f="GRATE2"}, -- grey recolor composite - G8_BR2GY = { t="G8_BRNW2", f="FLOOR4_8"}, - G8_BR3GY = { t="G8_BRNW3", f="G15"}, - - -- techy brick walls (256px) - OBTBSLB1 = { t="OBTBSLB1", f="SHINY03"}, - OBTBSLB2 = { t="OBTBSLB2", f="FLOOR4_8"}, - OBTBSLB3 = { t="OBTBSLB3", f="SLIME14"}, - OBTBSLB4 = { t="OBTBSLB4", f="SLIME15"}, - OBTBSLB5 = { t="OBTBSLB5", f="MFLR8_1"}, - - OBTBSB2B = { t="OBTBSB2B", f="FLOOR5_3"}, -- brown color composite - OBTBSB3B = { t="OBTBSB3B", f="SLIME16"}, - OBTBSB4B = { t="OBTBSB4B", f="FLOOR4_1"}, - OBTBSB5B = { t="OBTBSB5B", f="FLAT5"}, - - OBTSBGRE = { t="OBTSBGRE", f="DARKF02"}, -- bloodied version of the hex bricks - - -- custom cement walls (128px) - OBTBCEM1 = { t="OBTBCEM1", f="FLOOR3_3"}, - OBTBCEM2 = { t="OBTBCEM2", f="SLIME16"}, - OBTBCEM3 = { t="OBTBCEM3", f="DEM1_6"}, - - OBTBCMR1 = { t="OBTBCMR1", f="RMARB2"}, - OBTBCMR2 = { t="OBTBCMR2", f="FLAT15"}, - OBTBCMR3 = { t="OBTBCMR3", f="GMET02"}, - - -- silver flats (128px) - OBTBSFL1 = { t="OBTBSLV1", f="OBTBSFL1"}, --< metal grates - OBTBSFL2 = { t="OBTBSLV2", f="OBTBSFL2"}, - OBTBSFL3 = { t="OBTBSTX1", f="OBTBSFL3"}, - - OBTSVBF1 = { t="OBTBSLB2", f="OBTSVBF1"}, --< brick - OBTSVBF2 = { t="OBTBSLB3", f="OBTSVBF2"}, - OBTSVBF3 = { t="OBTBSLB4", f="OBTSVBF3"}, - - G8_BRNF1 = { t="G8_BRNW1", f="G8_BRNF1"}, --< brown floors/ceils - G8_BRNF2 = { t="G8_BRNW3", f="G8_BRNF2"}, - G8_BRNF3 = { t="G8_BRNW2", f="G8_BRNF3"}, - - OBTSBF1B = { t="OBTBSB3B", f="OBTSBF1B"}, -- brown color composite - OBTSBF2B = { t="OBTBSB4B", f="OBTSBF2B"}, - OBTSBF3B = { t="OBTBSB5B", f="OBTSBF3B"}, - - OBTSBF1R = { t="HELLCMT1", f="OBTSBF1R"}, -- red - OBTSBF2R = { t="HELLCMT2", f="OBTSBF2R"}, - OBTSBF3R = { t="REDMARB1", f="OBTSBF3R"}, - - -- 256-wide doors - G8_SVDR3 = { t="G8_SVDR3", f="FLAT23"}, - - -- it unfortunately needs to be said. - G7DODSLS = { t="G7DODSLS", f="FLAT23"}, - - NAHIDA = { t="NAHIDA", f="FLAT23"}, - BATHWTR1 = { t="BATHWTR1", f="FLAT23"}, - BATHWTR2 = { t="BATHWTR2", f="FLAT23"}, - - ---------------------- - -- Special Textures -- - ---------------------- - FINVSBLE = { t="FINVSBLE", f="FINVSBLE"}, - - -- Flats as walls and vice versa, resource pack edition - XG19 = { t="G19", f="G19" }, - X_COMPBL = { t="COMPBLUE", f="COMPBLUE" }, - X_ORANFL = { t="ORANFLOR", f="ORANFLOR" }, - X_BRICK4 = { t="BRICK4", f="BRICK4" }, - X_FLOOR7 = { t="FLOOR7_3", f="FLOOR7_3" }, - XCARPET5 = { t="CARPET5", f="CARPET5" } -} - -OBS_RESOURCE_PACK_ANIMDEFS = -[[ -// Animations for Obsidian Resource Pack: - - texture CGCANI00 - allowdecals - pic CGCANI00 tics 1.5 - pic CGCANI01 tics 1.5 - pic CGCANI02 tics 1.5 - pic CGCANI03 tics 1.5 - pic CGCANI04 tics 1.5 - pic CGCANI05 tics 1.5 - pic CGCANI06 tics 1.5 - pic CGCANI07 tics 1.5 - - texture DECMP04A - allowdecals - pic DECMP04A tics 2 - pic DECMP04B tics 2 - pic DECMP04C tics 2 - pic DECMP04D tics 2 - pic DECMP04E tics 2 - pic DECMP04F tics 2 - pic DECMP04G tics 2 - pic DECMP04H tics 2 - pic DECMP04B tics 2 - - texture TVSNOW01 - allowdecals - pic TVSNOW01 tics 2 - pic TVSNOW02 tics 2 - pic TVSNOW03 tics 2 - - texture COMPFUZ1 - allowdecals - pic COMPFUZ1 tics 2 - pic COMPFUZ2 tics 2 - pic COMPFUZ3 tics 2 - pic COMPFUZ4 tics 2 - - texture COMPY1 - allowdecals - pic COMPY1 tics 4 - pic COMPY2 tics 4 - pic COMPY3 tics 4 - pic COMPY2 tics 4 - - texture CANDLE1 - pic CANDLE1 tics 4 - pic CANDLE2 tics 4 - pic CANDLE3 tics 4 - - // Black FIRELAVA - Texture LAVBLAK1 - allowdecals - pic LAVBLAK1 tics 8 - pic LAVBLAK2 tics 8 - - // Blue FIRELAVA - Texture LAVBLUE1 - allowdecals - pic LAVBLUE1 tics 8 - pic LAVBLUE2 tics 8 - - // Green FIRELAVA - Texture LAVGREN1 - allowdecals - pic LAVGREN1 tics 8 - pic LAVGREN2 tics 8 - - // White FIRELAVA - Texture LAVWHIT1 - allowdecals - pic LAVWHIT1 tics 8 - pic LAVWHIT2 tics 8 - - // Black FIREBLU1 - Texture FIREBLK1 - allowdecals - pic FIREBLK1 tics 8 - pic FIREBLK2 tics 8 - - // Doom1 SLADWALL slime fall - texture SLADRIP1 - allowdecals - pic SLADRIP1 tics 6 - pic SLADRIP2 tics 6 - pic SLADRIP3 tics 6 - - //Red version of black GST fontfall - texture KSTFONT1 - allowdecals - pic KSTFONT1 tics 6 - pic KSTFONT2 tics 6 - pic KSTFONT3 tics 6 - - //Green version - texture KSTFNTG1 - allowdecals - pic KSTFNTG1 tics 6 - pic KSTFNTG2 tics 6 - pic KSTFNTG3 tics 6 - - // Broken animated screen - Texture COMPSA1 - allowdecals - range COMPSA30 tics 2 - - // UAC logo screen - Texture COMPSC1 - allowdecals - range COMPSC12 tics 1.5 - - // Multiple broken animated screens - Texture COMPSD1 - allowdecals - range COMPSD8 tics 2 - - Texture NMONIA1 - allowdecals - pic NMONIA1 tics 3 - pic NMONIA2 tics 3 - pic NMONIA3 tics 3 - pic NMONIA4 tics 3 - pic NMONIA5 tics 3 - pic NMONIA6 tics 3 - pic NMONIA7 tics 3 - pic NMONIA8 tics 3 - - // Static screen - Texture NOISE1 - allowdecals - pic NOISE1 tics 1.5 - pic NOISE2 tics 1.5 - pic NOISE3 tics 1.5 - pic NOISE4 tics 1.5 - - // Smaller static screen - Texture NOISE2A - allowdecals - pic NOISE2A tics 1.5 - pic NOISE2B tics 1.5 - pic NOISE2C tics 1.5 - pic NOISE2D tics 1.5 - - // Smaller static screen 2 - Texture NOISE3A - allowdecals - pic NOISE3A tics 1.5 - pic NOISE3B tics 1.5 - pic NOISE3C tics 1.5 - pic NOISE3D tics 1.5 - - //Gray liquid fall - texture GRYFALL1 - pic GRYFALL1 tics 8 - pic GRYFALL2 tics 8 - pic GRYFALL3 tics 8 - pic GRYFALL4 tics 8 - - //Dark gray slime fall - texture OFALL1 - pic OFALL1 tics 8 - pic OFALL2 tics 8 - pic OFALL3 tics 8 - pic OFALL4 tics 8 - - //Brown liquid fall - texture SLMFALL1 - pic SLMFALL1 tics 8 - pic SLMFALL2 tics 8 - pic SLMFALL3 tics 8 - pic SLMFALL4 tics 8 - - //Blood liquid fall - texture BFAL1 - pic BFAL1 tics 8 - pic BFAL2 tics 8 - pic BFAL3 tics 8 - pic BFAL4 tics 8 - - //Green liquid fall - texture NFALL1 - pic NFALL1 tics 8 - pic NFALL2 tics 8 - pic NFALL3 tics 8 - pic NFALL4 tics 8 - - //Lava liquid fall - texture LFALL1 - pic LFALL1 tics 8 - pic LFALL2 tics 8 - pic LFALL3 tics 8 - pic LFALL4 tics 8 - - //Lava liquid fall 2 - texture LFAL21 - pic LFAL21 tics 8 - pic LFAL22 tics 8 - pic LFAL23 tics 8 - pic LFAL24 tics 8 - - //Water liquid fall - texture WFALL1 - pic WFALL1 tics 8 - pic WFALL2 tics 8 - pic WFALL3 tics 8 - pic WFALL4 tics 8 - - //Cooler purple liquid fall - texture PURFAL1 - pic PURFAL1 tics 8 - pic PURFAL2 tics 8 - pic PURFAL3 tics 8 - pic PURFAL4 tics 8 - - //Magma - texture MFALL1 - pic MFALL1 tics 8 - pic MFALL2 tics 8 - pic MFALL3 tics 8 - pic MFALL4 tics 8 - - //Wall copy of FAN1 flat, meant as ventilation - texture DFAN1 - pic DFAN1 tics 1 - pic DFAN2 tics 1 - pic DFAN3 tics 1 - pic DFAN4 tics 1 - - //Broken grocery fridge from Duke Nukem - texture DNSTOR09 - pic DNSTOR09 tics 8 - pic DNSTOR10 tics 8 - pic DNSTOR11 tics 8 - - //These two need definitions because they're solid like normal - //walls, not liquid so decals can be applied to them. - - //Frozen waterfall type 1 - texture ICEFALL - allowdecals - pic ICEFALL tics 8 - pic ICEFALL tics 8 - - //Green crystal - texture GRNSTONE - allowdecals - pic GRNSTONE tics 17 - pic GRNSTON1 tics 2 - pic GRNSTON2 tics 2 - pic GRNSTON3 tics 2 - -// Switches // - - switch doom 3 SW1CHN on pic SW2CHN tics 0 - switch doom 3 SW1GOTH on pic SW2GOTH tics 0 - switch doom 3 SW1QUAK on pic SW2QUAK tics 0 - switch doom 3 SW1SKUL1 on pic SW2SKUL1 tics 0 - switch doom 3 SW1PENT on pic SW2PENT tics 0 - - switch doom 3 SDGTHSW1 on pic SDGTHSW2 tics 0 - -//Crap for flats here - - warp flat LAVA1 - warp flat LAVA2 - warp flat LAVA3 - warp flat LAVA4 - warp2 flat FWATER1 - warp2 flat FWATER2 - warp2 flat FWATER3 - warp2 flat FWATER4 - warp2 flat BLOOD1 - warp2 flat BLOOD2 - warp2 flat BLOOD3 - warp flat NUKAGE1 - warp flat NUKAGE2 - warp flat NUKAGE3 - warp2 flat SLIME01 - warp2 flat SLIME02 - warp2 flat SLIME03 - warp2 flat SLIME04 - warp flat SLIME05 - warp flat SLIME06 - warp flat SLIME07 - warp flat SLIME08 - warp flat SLUDGE01 - warp flat SLUDGE02 - warp flat SLUDGE03 - warp flat SLUDGE04 - warp flat XWATER1 - warp flat XWATER2 - warp flat XWATER3 - warp flat XWATER4 - warp flat QLAVA1 - warp flat QLAVA2 - warp flat QLAVA3 - warp flat QLAVA4 - warp flat MAGMA1 - warp flat MAGMA2 - warp flat MAGMA3 - warp flat MAGMA4 - warp2 flat OSLIME01 - warp2 flat OSLIME02 - warp flat XLAV1 - warp flat XLAV2 - warp flat PURW1 - warp flat PURW2 - - TEXTURE FWATER1 - PIC 1 TICS 1 - PIC 1 TICS 1 - - TEXTURE NUKAGE1 - PIC 1 TICS 1 - PIC 1 TICS 1 - - TEXTURE LAVA1 - PIC 1 TICS 1 - PIC 1 TICS 1 - - TEXTURE BLOOD1 - PIC 1 TICS 1 - PIC 1 TICS 1 - - TEXTURE SLIME01 - PIC 1 TICS 1 - PIC 1 TICS 1 - - TEXTURE SLIME05 - PIC 1 TICS 1 - PIC 1 TICS 1 - - //New - TEXTURE SLUDGE01 - PIC 1 TICS 1 - PIC 1 TICS 1 - - TEXTURE OSLIME01 - PIC 1 TICS 5 - PIC 2 TICS 5 - - TEXTURE QLAVA1 - PIC 1 TICS 8 - PIC 2 TICS 8 - PIC 3 TICS 8 - PIC 4 TICS 8 - - TEXTURE MAGMA1 - PIC 1 TICS 8 - PIC 2 TICS 8 - PIC 3 TICS 8 - PIC 4 TICS 8 - - TEXTURE FIRELAF1 - allowdecals - PIC 1 TICS 8 - PIC 2 TICS 8 - - TEXTURE XLAV1 - PIC 1 TICS 8 - PIC 2 TICS 8 - - TEXTURE PURW1 - PIC 1 TICS 8 - PIC 2 TICS 8 - - TEXTURE FAN1 - PIC 1 TICS 1 - PIC 2 TICS 1 - PIC 3 TICS 1 - PIC 4 TICS 1 -]] - -EPIC_BRIGHTMAPS = -[[brightmap texture COMPSTA3 -{ - map OBRCPST1 -} -brightmap texture COMPSTA4 -{ - map OBRCPST1 -} -brightmap texture COMPSTA5 -{ - map OBRCPST2 -} -brightmap texture COMPSTA6 -{ - map OBRCPST2 -} -brightmap texture COMPSTA7 -{ - map OBRCPST1 -} -brightmap texture COMPSTA8 -{ - map OBRCPST1 -} -brightmap texture COMPSTA9 -{ - map OBRCPST1 -} -brightmap texture COMPSTAA -{ - map OBRCPST1 -} -brightmap texture COMPSTAB -{ - map OBRCPST3 -} - -// shawcomp set - -brightmap texture SHAWCOMP -{ - map OBRSHCP1 -} -brightmap texture CONSOLE3 -{ - map OBRSHCP1 -} -brightmap texture CONSOLE4 -{ - map OBRCNSL4 -} -brightmap texture CONSOLEF -{ - map OBRCNSLF -} -brightmap texture CONSOLEG -{ - map OBRCNSLG -} - -// large single monitors - -brightmap texture COMPCT01 -{ - map OBRCPCT1 -} -brightmap texture COMPCT02 -{ - map OBRCPCT1 -} -brightmap texture COMPCT03 -{ - map OBRCPCT1 -} -brightmap texture COMPCT04 -{ - map OBRCPCT1 -} -brightmap texture COMPCT05 -{ - map OBRCPCT1 -} -brightmap texture COMPCT06 -{ - map OBRCPCT1 -} -brightmap texture COMPCT07 -{ - map OBRCPCT2 -} - -brightmap texture COMPFUZ1 -{ - map CMPFUZBR -} -brightmap texture COMPFUZ2 -{ - map CMPFUZBR -} -brightmap texture COMPFUZ3 -{ - map CMPFUZBR -} -brightmap texture COMPFUZ4 -{ - map CMPFUZBR -} - -brightmap texture CGCANI00 -{ - map CGANIBR -} -brightmap texture CGCANI01 -{ - map CGANIBR -} -brightmap texture CGCANI02 -{ - map CGANIBR -} -brightmap texture CGCANI03 -{ - map CGANIBR -} -brightmap texture CGCANI04 -{ - map CGANIBR -} -brightmap texture CGCANI05 -{ - map CGANIBR -} -brightmap texture CGCANI06 -{ - map CGANIBR -} -brightmap texture CGCANI07 -{ - map CGANIBR -} - - -// silver light variations -brightmap texture SILVER2R -{ - map OBRSLVL -} -brightmap texture SILVER2O -{ - map OBRSLVL -} -brightmap texture SILVER2Y -{ - map OBRSLVL -} -brightmap texture SILVER2W -{ - map OBRSLVL -} -brightmap texture SILVER2G -{ - map OBRSLVL -} - -// vent (the only one that needs a brightmap TBH -brightmap texture COMPVEN2 -{ - map OBRCPVN2 -} - -// vertical lights -brightmap texture LITE2 -{ - map OBRLITE2 -} -brightmap texture LITE96 -{ - map OBRLIT96 -} -brightmap texture LITESTON -{ - map OBRLITSN -} - -// comptiles -brightmap texture COMPTIL2 -{ - map OBRCPTIL -} -brightmap texture COMPTIL3 -{ - map OBRCPTIL -} -brightmap texture COMPTIL4 -{ - map OBRCPTIL -} -brightmap texture COMPTIL5 -{ - map OBRCPTIL -} -brightmap texture COMPTIL6 -{ - map OBRCPTIL -} -brightmap texture GRAYBLU1 -{ - map OBRCPTIL -} -brightmap texture SILVBLU1 -{ - map OBRCPTIL -} -brightmap texture TEKGRBLU -{ - map OBRCPTIL -} - -// monitors with static/noise -brightmap texture NOISE1 -{ - map OBRNOIS1 -} -brightmap texture NOISE2 -{ - map OBRNOIS1 -} -brightmap texture NOISE3 -{ - map OBRNOIS1 -} -brightmap texture NOISE4 -{ - map OBRNOIS1 -} - -// quad monitors -brightmap texture COMPSD1 -{ - map OBRCPSD1 -} -brightmap texture COMPSD2 -{ - map OBRCPSD1 -} -brightmap texture COMPSD3 -{ - map OBRCPSD1 -} -brightmap texture COMPSD4 -{ - map OBRCPSD1 -} -brightmap texture COMPSD5 -{ - map OBRCPSD1 -} -brightmap texture COMPSD6 -{ - map OBRCPSD1 -} -brightmap texture COMPSD7 -{ - map OBRCPSD1 -} -brightmap texture COMPSD8 -{ - map OBRCPSD1 -} - -brightmap texture CONSOLEA -{ - map CONSOLBR -} -brightmap texture CONSOLEB -{ - map CONSOLBR -} -brightmap texture CONSOLEC -{ - map CONSOLBR -} -brightmap texture CONSOLED -{ - map CONSOLBR -} -brightmap texture CONSOLEE -{ - map CONSOLBR -} - -// -brightmap texture NOISE2A -{ - map OBRNOIS2 -} -brightmap texture NOISE2B -{ - map OBRNOIS2 -} -brightmap texture NOISE2C -{ - map OBRNOIS2 -} -brightmap texture NOISE2D -{ - map OBRNOIS2 -} -// -brightmap texture NOISE3A -{ - map OBRNOIS3 -} -brightmap texture NOISE3B -{ - map OBRNOIS3 -} -brightmap texture NOISE3C -{ - map OBRNOIS3 -} -brightmap texture NOISE3D -{ - map OBRNOIS3 -} - -// lite5 recolors - excluding the original lite5 -brightmap texture T_VSLTEG -{ - map OBRLITE5 -} -brightmap texture T_VSLTEO -{ - map OBRLITE5 -} -brightmap texture T_VSLTEP -{ - map OBRLITE5 -} -brightmap texture T_VSLTER -{ - map OBRLITE5 -} -brightmap texture T_VSLTEY -{ - map OBRLITE5 -} - -// gothic stuf -brightmap texture GLASS1 -{ - map OBRGLSBG -} -brightmap texture GLASS2 -{ - map OBRGLSBG -} -brightmap texture GLASS3 -{ - map OBRGLSBG -} -brightmap texture GLASS4 -{ - map OBRGLSBG -} -brightmap texture GLASS6 -{ - map OBRGLSBG -} -brightmap texture GLASS11 -{ - map OBRGLSTL -} -brightmap texture GLASS12 -{ - map OBRGLSTL -} -brightmap texture GLASS13 -{ - map OBRGLSTL -} -brightmap texture GLASS14 -{ - map OBRGLSTL -} -brightmap texture GOTH21 -{ - map OBRGT21 -} -brightmap texture GOTH04 -{ - map GOTH04BR -} -brightmap texture GOTH19 -{ - map GOTH19BR -} -brightmap texture GOTH20 -{ - map GOTH20BR -} -brightmap texture GOTH33 -{ - map GOTH33BR -} - -// gothic lavafalls -brightmap texture MFALL1 -{ - map MFALLBR -} -brightmap texture MFALL2 -{ - map MFALLBR -} -brightmap texture MFALL3 -{ - map MFALLBR -} -brightmap texture MFALL4 -{ - map MFALLBR -} - -// gothic switches -brightmap texture SW2SKUL1 -{ - map OBRS2SK -} -brightmap texture SW2PENT -{ - map OBRS2PT -} - -brightmap texture SW2QUAK -{ - map OBRS2QK -} -brightmap texture SW2GOTH -{ - map OBRS2GH -} -brightmap texture SW2CHN -{ - map OBRS2CN -} - -// colorful churchy glass -brightmap texture GLASS7 -{ - map OBRGLAS7 -} - -brightmap texture GLASS8 -{ - map OBRGLAS8 -} - -brightmap texture GLASS9 -{ - map OBRGLAS9 -} - -// bookshelves - -brightmap texture PANBOOK2 -{ - map OBRPNBK2 -} - -brightmap texture PANBOOK3 -{ - map OBRPNBK3 -} - -// liquids - -// Oblige lava patch -brightmap texture FIREMAG1 -{ - map OBRLFAL1 -} - -brightmap texture FIREMAG2 -{ - map OBRLFAL2 -} - -brightmap texture FIREMAG3 -{ - map OBRLFAL3 -} - -//urban -brightmap texture CITY01 -{ - map OBRCITY1 -} - -brightmap texture CITY02 -{ - map OBRCITY1 -} - -brightmap texture CITY03 -{ - map OBRCITY1 -} - -brightmap texture CITY04 -{ - map OBRCITY4 -} - -brightmap texture CITY05 -{ - map OBRCITY5 -} - -brightmap texture CITY06 -{ - map OBRCITY4 -} - -brightmap texture CITY07 -{ - map OBRCITY7 -} - -brightmap texture CITY12 -{ - map OBRCTY12 -} - -brightmap texture CITY14 -{ - map OBRCTY14 -} - -brightmap texture CITY04N -{ - map CTY04NBR -} - -brightmap texture CITY05N -{ - map CTY05NBR -} - -brightmap texture CITY06N -{ - map CTY04NBR -} - -brightmap texture CITY07N -{ - map CTY07NBR -} - -brightmap texture CITY11N -{ - map CTY11NBR -} - -brightmap texture CITY12N -{ - map CTY12NBR -} - -brightmap texture CITY13N -{ - map CTY13NBR -} - -brightmap texture CITY14N -{ - map CTY14NBR -} - -brightmap texture GRAYMET6 -{ - map OBRGRYMT -} - -brightmap texture GRAYMET7 -{ - map OBRGRYMT -} - -brightmap texture GRAYMET8 -{ - map OBRGRYMT -} - -brightmap texture GRAYMET9 -{ - map OBRGRYMT -} - -brightmap texture GRAYMETA -{ - map OBRGRYMT -} - -brightmap texture GRAYMETB -{ - map OBRGRYMT -} - -brightmap texture GRAYMETC -{ - map OBRGRYMT -} - -brightmap texture RDLITE01 -{ - map OBRRDLT1 -} - -brightmap texture LITEBLU3 -{ - map OBRLTBL3 -} - -//nature -brightmap texture GRNRKF -{ - map OBRGRNRK -} - -brightmap texture GRNSTONE -{ - map OBRGRNST -} - -// SD stuff -brightmap texture SDOM_WL2 -{ - map SDMWL2BR -} - -brightmap texture SDOM_WL5 -{ - map SDMWL5BR -} - -brightmap texture SD_GTHW1 -{ - map SDGHW1BR -} - -brightmap texture SD_GTLW1 -{ - map SDGTL1BR -} - -brightmap texture SD_GTLW2 -{ - map SDGTL2BR -} - -brightmap texture SD_GTLW3 -{ - map SDGTL3BR -} - -brightmap texture SD_GTLW4 -{ - map SDGTL4BR -} - -brightmap texture SD_TWDL1 -{ - map SDTDL1BR -} - -brightmap texture SD_TWDL2 -{ - map SDTDL2BR -} - -brightmap texture SD_TWDL3 -{ - map SDTDL3BR -} - -brightmap texture SD_TWLW1 -{ - map STWLW1BR -} - -brightmap texture SD_TWLW2 -{ - map STWLW2BR -} - -brightmap texture SD_TWLW5 -{ - map STWLW5BR -} - -brightmap texture SD_TWLW6 -{ - map STWLW6BR -} - -brightmap texture SD_TWLW8 -{ - map STWLW8BR -} - -brightmap texture SD_TWLWA -{ - map STWLWABR -} - -brightmap texture SD_TSGW4 -{ - map STGSW4BR -} - -brightmap texture SD_TSGW7 -{ - map STGSW7BR -} - -brightmap texture SD_TSGW9 -{ - map STGSW9BR -} - -brightmap texture SD_TSGWA -{ - map STGSWABR -} - -brightmap texture SD_TSGWB -{ - map STGSWBBR -} - -brightmap texture SD_TSGWC -{ - map STGSWCBR -} - -brightmap texture S_W2WAL4 -{ - map SW2WBR4 -} - -brightmap texture SD_HCCW1 -{ - map SDBRHCW1 -} - -brightmap texture SD_HCCW2 -{ - map SDBRHCW2 -} - -brightmap texture SD_HCCW3 -{ - map SDBRHCW3 -} - -brightmap texture SD_HCCW4 -{ - map SDBRHCW4 -} - -brightmap texture SD_HCCW6 -{ - map SDBRHCW6 -} - -brightmap texture SD_HCCW7 -{ - map SDBRHCW7 -} - -brightmap texture SD_HCCW8 -{ - map SDBRHCW8 -} - -brightmap texture SD_HCCW9 -{ - map SDBRHCW9 -} - -brightmap texture SD_HCCWC -{ - map SDBRHCWC -} - -brightmap texture SD_TWDW3 -{ - map OBRTWTW3 -} - -brightmap texture SD_TWDW8 -{ - map OBRTWTW8 -} - -brightmap texture SD_TWDW9 -{ - map OBRTWTW9 -} - -brightmap texture SDMSRCP1 -{ - map OBRMRCP1 -} - -brightmap texture SDMSRCP2 -{ - map OBRMRCP2 -} - -brightmap texture SDMSRCP3 -{ - map OBRMRCP3 -} - -brightmap texture SDTBNKW7 -{ - map SDTBKBR7 -} - -brightmap texture SDTBNKWA -{ - map SDTBKBRA -} - -brightmap texture SDTBNKWB -{ - map SDTBKBRB -} - -brightmap texture SDTBNKWC -{ - map SDTBKBRC -} - -brightmap texture SDTBNKWE -{ - map SDTBKBRE -} - -brightmap texture SD_TSGF3 -{ - map SDTSFBR3 -} - -brightmap texture SD_TSGF7 -{ - map SDTSFBR7 -} - -brightmap texture SD_TSGF9 -{ - map SDTSFBR9 -} - -brightmap texture SD_TSGFA -{ - map SDTSFBRA -} - -brightmap texture SDHCCBW1 -{ - map SDHCCBR1 -} - -brightmap texture SDHCCBW2 -{ - map SDHCCBR2 -} - -brightmap texture SDHCCBW3 -{ - map SDHCCBR3 -} - -brightmap texture SDHCCBW4 -{ - map SDHCCBR4 -} - -brightmap texture SDHCCBW5 -{ - map SDHCCBR5 -} - -brightmap texture SDHCCBW8 -{ - map SDHCCBR8 -} - -brightmap texture SDHCCBW9 -{ - map SDHCCBR9 -} - -brightmap texture SDHCCBWA -{ - map SDHCCBRA -} - -brightmap texture SDHCCBWB -{ - map SDHCCBRB -} - -brightmap texture SDHCCBWC -{ - map SDHCCBRC -} - -// iStuff wall brightmaps -brightmap texture SDIPHWL2 -{ - map SDIPHBR2 -} - -brightmap texture SDIPHWL5 -{ - map SDIPHBR5 -} - -brightmap texture SDIPHWL7 -{ - map SDIPHBR7 -} - -brightmap texture SDIPHWL8 -{ - map SDIPHBR8 -} - -brightmap texture SDIPHWL9 -{ - map SDIPHBR9 -} - -brightmap texture SDIPHWLA -{ - map SDIPHBRA -} -]] - --- aliases - when you're too lazy to write down wall and flat names in every --- room theme - -OBS_RESOURCE_PACK_TEXTURE_SET_ALIASES = -{ - __SD_GRAY_TECH_WALLS = - { - materials = - { - "SDOM_WL1", "SDOM_WL2", "SDOM_WL3", - "SDOM_WL4", "SDOM_WL5", "SDOM_WL6" - } - }, - - __SD_GRAY_TECH = - { - materials = - { - "SDOM_FT1", "SDOM_FT2", "SDOM_FT3", "SDOM_FT4" - } - } -} +---------------------------------------------------------------- +-- MODULE: Obsidian Resource Pack Materials +---------------------------------------------------------------- +-- +-- Copyright (C) 2019-2022 MsrSgtShooterPerson +-- Copyright (C) 2015-2022 Reisal +-- +-- This program is free software; you can redistribute it and/or +-- modify it under the terms of the GNU General Public License +-- as published by the Free Software Foundation; either version 2, +-- of the License, or (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +------------------------------------------------------------------ + +-- Reminder: Please keep texture material additions alphabetized +-- and in categories for a more manageable setup when the file is +-- modified, thanks! + +OBS_RESOURCE_PACK_LIQUID_DEFS = +{ + hotlava = { mat="XLAV1", special=5, light_add=56, damage=10 }, + magma = { mat="MAGMA1", special=5, light_add=56, damage=10 }, + qlava = { mat="QLAVA1", special=5, light_add=56, damage=10 }, + bsludge = { mat="OSLIME01", special=0 }, + gwater = { mat="SLUDGE01", special=0 }, + ice = { mat="SNOW9", special=0 }, --Looks best when outdoor environment is snow only + ice2 = { mat="SNOW2", special=0 }, --Looks best when outdoor environment is snow only + purwater = { mat="PURW1", special=0 }, +} + +OBS_RESOURCE_PACK_MATERIALS = { + + -- Organic / Semi-organic + ALTASH = { t="ALTASH", f="RROCK03" }, --ASPHALT from Evilution + ASH01 = { t="ASH01", f="FLOOR6_2" }, --ASHWALL2 + ASH02 = { t="ASH02", f="RROCK03" }, --ASHWALL3 + ASH03 = { t="ASH03", f="FLAT10" }, --ASHWALL4 + ASH04 = { t="ASH04", f="RROCK18" }, --ASHWALL7 variant + ASH05 = { t="ASH05", f="FLOOR6_2" }, --ASHWALL + ASHWALL1 = { t="ASHWALL1", f="RROCK03" }, --ASHWALL2 & ASHWALL3 combo + GREEN01 = { t="GREEN01", f="RROCK20" }, --Plutonia 2 + GREEN02 = { t="GREEN02", f="RROCK20" }, --Plutonia 2 + GREEN03 = { t="GREEN03", f="RROCK20" }, --Plutonia 2 + VINES1 = { t="VINES1", f="RROCK16" }, + VINES2 = { t="VINES2", f="RROCK16" }, + VINES3 = { t="VINES3", f="RROCK16" }, + VINES4 = { t="VINES4", f="RROCK16" }, + ZIM1 = { t="ZIM1", f="RROCK20" }, --ZIMMER1 + ZIM2 = { t="ZIM2", f="RROCK20" }, --ZIMMER2 + ZIM3 = { t="ZIM3", f="RROCK18" }, --ZIMMER3 + ZIM4 = { t="ZIM4", f="RROCK18" }, --ZIMMER4 + + GRNSTONE = { t="GRNSTONE", f="GRNRKF"}, --originally green recolor of ROCKRED + GRNRKF = { t="GRNSTONE", f="GRNRKF"}, --now reapproiated as a green glowy crystal + + -- Doors + BIGDOOR8 = { t="BIGDOOR8", f="CEIL5_2" }, --Similar to BIGDOOR7 + BIGDOOR9 = { t="BIGDOOR9", f="CEIL5_2" }, --Similar to BIGDOOR7 + BIGDOOR0 = { t="BIGDOOR0", f="CEIL5_2" }, --Similar to BIGDOOR7 + BIGDOORA = { t="BIGDOORA", f="FLOOR7_1" }, --Similar to BIGDOOR4 + BIGDOORB = { t="BIGDOORB", f="CEIL5_2" }, --Similar to BIGDOOR7, 64x128 + BIGDOORC = { t="BIGDOORC", f="CEIL5_1" }, + BIGDOORD = { t="BIGDOORD", f="CEIL5_1" }, + BIGDOORE = { t="BIGDOORE", f="FLOOR7_1" }, + BIGDOORF = { t="BIGDOORF", f="CEIL5_1" }, + BIGDOORG = { t="BIGDOORG", f="FLAT20" }, + BIGDOORH = { t="BIGDOORH", f="CEIL5_1" }, + BIGDOORI = { t="BIGDOORI", f="CEIL5_2" }, + BIGDOORJ = { t="BIGDOORJ", f="CEIL5_2" }, + BIGDOORK = { t="BIGDOORK", f="CEIL5_2" }, + BIGDOORL = { t="BIGDOORL", f="G08" }, + BIGDOORM = { t="BIGDOORM", f="WARN1" }, + BIGDOORN = { t="BIGDOORN", f="FLAT5_4" }, + DOORHI = { t="DOORHI", f="FLAT19" }, -- Tall 64x128 door. From Doom1, + ICKDOOR1 = { t="ICKDOOR1", f="FLAT19" }, -- ICKWALL style door. From Doom1, + + -- Bricks / Concrete + BIGSTONE = { t="BIGSTONE", f="FLAT5_4" }, + BIGSTON2 = { t="BIGSTON2", f="FLAT5_4" }, + BIGSTON3 = { t="BIGSTON3", f="FLAT1" }, + BIGSTON4 = { t="BIGSTON4", f="FLOOR7_1" }, + BLIT01 = { t="BLIT01", f="RROCK10" }, --BRICKLIT + BRIKS01 = { t="BRIKS01", f="FLAT5_4" }, --White bricks, 128x128, + BRIKS02 = { t="BRIKS02", f="FLOOR7_1" }, --Brown bricks, 128x128, + BRIKS03 = { t="BRIKS03", f="RROCK09" }, --Tan bricks, 128x128, + BRIKS04 = { t="BRIKS04", f="FLAT19" }, --Cream bricks, 64x128, + BRIKS05 = { t="BRIKS05", f="FLOOR0_1" }, --Tan bricks, 64x128, + BRIKS06 = { t="BRIKS06", f="FLAT5_5" }, --Tan bricks, 128x128, + BRIKS07 = { t="BRIKS07", f="FLOOR7_1" }, --Brown bricks, 128x128, + BRIKS08 = { t="BRIKS08", f="RROCK14" }, --BIGBRIK1, + BRIKS09 = { t="BRIKS09", f="FLAT5_4" }, --BIGBRIK2, + BRIKS10 = { t="BRIKS10", f="FLAT5_4" }, + BRIKS11 = { t="BRIKS11", f="BLACK0" }, + BRIKS12 = { t="BRIKS12", f="RROCK09" }, + BRIKS13 = { t="BRIKS13", f="FLAT1" }, + BRIKS14 = { t="BRIKS14", f="RROCK09" }, + BRIKS15 = { t="BRIKS15", f="FLOOR7_1" }, --Brown + BRIKS16 = { t="BRIKS16", f="FLOOR7_1" }, --Brown + BRIKS17 = { t="BRIKS17", f="FLOOR7_1" }, --Brown + BRIKS18 = { t="BRIKS18", f="FLAT5_4" }, --Gray + BRIKS19 = { t="BRIKS19", f="FLAT5_5" }, --Tan + BRIKS20 = { t="BRIKS20", f="FLAT5_5" }, --Tan + BRIKS21 = { t="BRIKS21", f="FLAT5_4" }, --Gray + BRIKS22 = { t="BRIKS22", f="FLAT5_5" }, --Tannish + BRIKS23 = { t="BRIKS23", f="FLAT5_4" }, --Gray + BRIKS24 = { t="BRIKS24", f="FLAT5_5" }, --Tannish + BRIKS25 = { t="BRIKS25", f="RROCK20" }, --Green + BRIKS26 = { t="BRIKS26", f="FLAT5_4" }, --Gray + BRIKS27 = { t="BRIKS27", f="FLAT5_4" }, --Gray + BRIKS28 = { t="BRIKS28", f="RROCK16" }, --Brown w/ vines + BRIKS29 = { t="BRIKS29", f="FLAT1" }, + BRIKS30 = { t="BRIKS30", f="GSTN01" }, + BRIKS31 = { t="BRIKS31", f="FLOOR7_1" }, + BRIKS32 = { t="BRIKS32", f="FLAT5_4" }, + BRIKS33 = { t="BRIKS33", f="FLOOR7_1" }, + BRIKS34 = { t="BRIKS34", f="FLAT5_4" }, + BRIKS35 = { t="BRIKS35", f="BLACK0" }, + BRIKS36 = { t="BRIKS36", f="BLACK0" }, + BRIKS37 = { t="BRIKS37", f="FLAT5_4" }, -- Blue + BRIKS38 = { t="BRIKS38", f="FLAT5_4" }, -- Blue + BRIKS39 = { t="BRIKS39", f="GSTN02" }, + BRIKS40 = { t="BRIKS40", f="RROCK09" }, + BRIKS41 = { t="BRIKS41", f="RROCK09" }, + BRIKS42 = { t="BRIKS42", f="FLOOR7_1" }, + BRIKS43 = { t="BRIKS43", f="FLAT1" }, + + BST01 = { t="BST01", f="RROCK11" }, --BSTONE1, + BST02 = { t="BST02", f="RROCK12" }, --BSTONE2, + BST03 = { t="BST03", f="RROCK12" }, --BSTONE3, + + BRVINE = { t="BRVINE", f="FLOOR0_1" }, --BROVINE + + GRAY6 = { t="GRAY6", f="FLAT18" }, + GRAY8 = { t="GRAY8", f="FLAT18" }, + GRAY9 = { t="GRAY9", f="FLAT5_4" }, + GRAYDANG = { t="GRAYDANG", f="FLAT18" }, -- GRAY1 w/ no entry sign. From Doom1, + + STON4 = { t="STON4", f="FLAT5_4" }, --STONE4, + STON6 = { t="STON6", f="RROCK09" }, --STONE6, + STON7 = { t="STON7", f="FLAT5_4" }, + STONE8 = { t="STONE8", f="FLAT1" }, + STONE9 = { t="STONE9", f="FLAT1" }, + STONE10 = { t="STONE10", f="FLAT5_4" }, + STONGARG = { t="STONGARG", f="FLAT1" }, -- STONE3 with gargoyle faces. From Doom1, + + -- Urban specific + CITY01 = { t="CITY01", f="RROCK10" }, -- BRICK1 style + CITY02 = { t="CITY02", f="FLOOR0_1" }, -- Tannish marble w/ window + CITY03 = { t="CITY03", f="FLOOR7_1" }, -- Darker tan bricks w/ window + CITY04 = { t="CITY04", f="FLOOR7_1" }, -- Same as CITY03 but different window + CITY05 = { t="CITY05", f="FLAT1" }, -- Gray bricks and black windows + CITY06 = { t="CITY06", f="FLOOR0_1" }, -- BROWN1 style and black windows + CITY07 = { t="CITY07", f="FLAT1" }, -- Industrial looking + CITY08 = { t="CITY08", f="FLAT1" }, -- Gray bricks with stone arch window + CITY09 = { t="CITY09", f="FLAT1" }, -- Small gray bricks with stone arch window + CITY10 = { t="CITY10", f="FLOOR7_1" }, -- Small brown bricks with stone arch window + CITY11 = { t="CITY11", f="FLOOR7_1" }, + CITY12 = { t="CITY12", f="FLAT5_5" }, + CITY13 = { t="CITY13", f="FLOOR7_1" }, + CITY14 = { t="CITY14", f="CEIL5_2"}, + + -- night versions + CITY04N = { t="CITY04N", f="FLOOR7_1"}, + CITY05N = { t="CITY05N", f="FLAT1"}, + CITY06N = { t="CITY06N", f="FLOOR0_1"}, + CITY07N = { t="CITY07N", f="FLAT1"}, + CITY11N = { t="CITY11N", f="FLOOR7_1"}, + CITY12N = { t="CITY12N", f="FLAT5_5"}, + CITY13N = { t="CITY13N", f="FLOOR7_1"}, + CITY14N = { t="CITY14N", f="CEIL5_2"}, + + URBAN1 = { t="URBAN1", f="RROCK10" }, + URBAN2 = { t="URBAN2", f="FLAT1" }, + URBAN3 = { t="URBAN3", f="FLAT5_4" }, + URBAN4 = { t="URBAN4", f="FLOOR0_1" }, + + -- These 4 can be useful for the urban shutters instead of the STEP# textures + URBAN5 = { t="URBAN5", f="FLOOR7_1" }, -- Brown + URBAN6 = { t="URBAN6", f="FLOOR7_1" }, -- Brown, warning lines + URBAN7 = { t="URBAN7", f="FLAT1" }, -- Gray + URBAN8 = { t="URBAN8", f="FLAT1" }, -- Gray, warning lines + + -- Cement + -- Copies of the CEMENT# textures so they can be used normally. + CEM01 = { t="CEM01", f="FLAT19" }, --CEMENT7, + CEM02 = { t="CEM02", f="FLAT19" }, --CEMENT9, + CEM03 = { t="CEM03", f="FLAT19" }, --CEMENT1, + CEM04 = { t="CEM04", f="FLAT19" }, --CEMENT5, + CEM05 = { t="CEM05", f="FLAT19" }, --CEMENT2, + CEM06 = { t="CEM06", f="FLAT19" }, --CEMENT3, + CEM07 = { t="CEM07", f="FLAT19" }, --CEMENT6, + CEM08 = { t="CEM08", f="FLAT19" }, --CEMENT4, + CEM09 = { t="CEM09", f="FLAT19" }, + + -- Not CEMENT type, just concrete type + CEM10 = { t="CEM10", f="FLAT19" }, + CEM11 = { t="CEM11", f="FLOOR0_1" }, --Tan + + DRKCMT01 = { t="DRKCMT01", f="RROCK03" }, --Dark version of CEMENT1, + DRKCMT02 = { t="DRKCMT02", f="RROCK03" }, --Dark version of CEMENT5, + DRKCMT03 = { t="DRKCMT03", f="RROCK03" }, --Dark version of CEMENT3, + DRKCMT04 = { t="DRKCMT04", f="RROCK03" }, --Dark version of CEMENT6, + DRKCMT05 = { t="DRKCMT05", f="RROCK03" }, --Dark version of CEMENT7, + DRKCMT06 = { t="DRKCMT06", f="RROCK03" }, --Dark version of CEMENT9, + + HELLCMT1 = { t="HELLCMT1", f="RMARB3" }, --Red and white + HELLCMT2 = { t="HELLCMT2", f="RMARB3" }, --Red and white + HELLCMT3 = { t="HELLCMT3", f="RMARB3" }, --Red and white + HELLCMT4 = { t="HELLCMT4", f="RMARB3" }, --Red and white + HELLCMT5 = { t="HELLCMT5", f="RMARB3" }, --Red and white + HELLCMT6 = { t="HELLCMT6", f="RMARB3" }, --Red and white + HELLCMT7 = { t="HELLCMT7", f="FLOOR4_7" }, --Black and white + HELLCMT8 = { t="HELLCMT8", f="FLOOR4_7" }, --Black and white + + -- Bronze & Brown + BRONZE5 = { t="BRONZE5", f="MFLR8_2" }, + BRONZE6 = { t="BRONZE6", f="MFLR8_2" }, + BRONZEG1 = { t="BRONZEG1", f="GMET07" }, + BRONZEG2 = { t="BRONZEG2", f="GMET07" }, + BRONZEG3 = { t="BRONZEG3", f="GMET07" }, + BROWN2 = { t="BROWN2", f="FLAT5_4" }, + BROWN3 = { t="BROWN3", f="FLAT5_4" }, + BROWNGR2 = { t="BROWNGR2", f="FLOOR7_1" }, + BROWNGR3 = { t="BROWNGR3", f="FLOOR7_1" }, + BROWNGR4 = { t="BROWNGR4", f="FLOOR7_1" }, + NUKESLAD = { t="NUKESLAD", f="FLOOR7_1" }, -- Hey, from Doom1! + + -- Computers / Tech + CGCANI00 = { t="CGCANI00", f="CEIL5_1" }, --Animated + CMPOHSO = { t="CMPOHSO", f="FLOOR7_1" }, --COMPOHSO + CMPTILE = { t="CMPTILE", f="CEIL5_1" }, --COMPTILE + COMPBLAK = { t="COMPBLAK", f="FLOOR1_6" }, --Black COMPBLUE + COMPFUZ1 = { t="COMPFUZ1", f="CEIL5_1" }, --Animated + COMPGREN = { t="COMPGREN", f="GRENFLOR" }, --Green COMPBLUE + COMPRED = { t="COMPRED", f="FLOOR1_6" }, --Red COMPBLUE + COMPSTA3 = { t="COMPSTA3", f="FLAT23" }, + COMPSTA4 = { t="COMPSTA4", f="FLAT23" }, + COMPSTA5 = { t="COMPSTA5", f="FLAT23" }, + COMPSTA6 = { t="COMPSTA6", f="FLAT23" }, + COMPSTA7 = { t="COMPSTA7", f="FLAT23" }, + COMPSTA8 = { t="COMPSTA8", f="FLAT23" }, + COMPSTA9 = { t="COMPSTA9", f="FLAT23" }, + COMPSTAA = { t="COMPSTAA", f="FLAT23" }, + COMPSTAB = { t="COMPSTAB", f="FLAT23" }, + COMPTIL2 = { t="COMPTIL2", f="FLOOR1_6" }, --Red COMPTILE + COMPTIL3 = { t="COMPTIL3", f="CEIL5_1" }, --Black COMPTILE + COMPTIL4 = { t="COMPTIL4", f="CEIL5_1" }, --Green COMPTILE + COMPTIL5 = { t="COMPTIL5", f="CEIL5_1" }, --Yellow COMPTILE + COMPTIL6 = { t="COMPTIL6", f="CEIL5_1" }, --Purple COMPTILE + COMPSA1 = { t="COMPSA1", f="CEIL5_1" }, -- Animated broken screen + COMPSC1 = { t="COMPSC1", f="CEIL5_1" }, -- Animated UAC screen + COMPSD1 = { t="COMPSD1", f="CEIL5_1" }, -- Animated 4 green screens + COMPU1 = { t="COMPU1", f="CEIL5_1" }, + COMPU2 = { t="COMPU2", f="CEIL5_1" }, + COMPU3 = { t="COMPU3", f="CEIL5_1" }, + COMPVENT = { t="COMPVENT", f="CEIL5_1" }, + COMPVEN2 = { t="COMPVEN2", f="CEIL5_1" }, + COMPY1 = { t="COMPY1", f="CEIL5_1" }, --Animated + COMPCT01 = { t="COMPCT01", f="CEIL5_1" }, + COMPCT02 = { t="COMPCT02", f="CEIL5_1" }, + COMPCT03 = { t="COMPCT03", f="CEIL5_1" }, + COMPCT04 = { t="COMPCT04", f="CEIL5_1" }, + COMPCT05 = { t="COMPCT05", f="CEIL5_1" }, + COMPCT06 = { t="COMPCT06", f="CEIL5_1" }, + COMPCT07 = { t="COMPCT07", f="CEIL5_1" }, --256x128, + CONSOLE1 = { t="CONSOLE1", f="CEIL5_1" }, --SPACEW3, + CONSOLE2 = { t="CONSOLE2", f="FLAT23" }, --PLANET1, + CONSOLE3 = { t="CONSOLE3", f="CEIL5_1" }, --COMP2, + CONSOLE4 = { t="CONSOLE4", f="FLAT19" }, --COMPUTE1, + CONSOLE5 = { t="CONSOLE5", f="CEIL5_1" }, --COMPUTE2, + CONSOLE6 = { t="CONSOLE6", f="CEIL5_1" }, + CONSOLE7 = { t="CONSOLE7", f="CEIL5_1" }, + CONSOLE8 = { t="CONSOLE8", f="CEIL5_1" }, + CONSOLE9 = { t="CONSOLE9", f="CEIL5_1" }, + CONSOLEA = { t="CONSOLEA", f="FLAT23" }, + CONSOLEB = { t="CONSOLEB", f="FLAT23" }, + CONSOLEC = { t="CONSOLEC", f="FLAT23" }, + CONSOLED = { t="CONSOLED", f="FLAT23" }, + CONSOLEE = { t="CONSOLEE", f="FLAT23" }, + CONSOLEF = { t="CONSOLEF", f="FLAT23" }, + CONSOLEG = { t="CONSOLEG", f="FLAT23" }, + DECMP04A = { t="DECMP04A", f="CEIL5_1" }, --Animated + GRAYBLU1 = { t="GRAYBLU1", f="FLAT14" }, + NMONIA1 = { t="NMONIA1", f="FLAT1" }, --Animated + NOISE1 = { t="NOISE1", f="CEIL5_1" }, --Animated + NOISE2A = { t="NOISE2A", f="CEIL5_1" }, --Animated + NOISE3A = { t="NOISE3A", f="CEIL5_1" }, --Animated + PLAN1 = { t="PLAN1", f="FLAT23" }, + PLAN2 = { t="PLAN2", f="FLAT23" }, + SPACEW5 = { t="SPACEW5", f="SLIME14" }, + SPACEW6 = { t="SPACEW6", f="SLIME15" }, + STARTAN1 = { t="STARTAN1", f="FLOOR0_1" }, -- Plain STARTAN2. From Doom1, + + -- Glass + GLASS1 = { t="GLASS1", f="CEIL5_1" }, --Red + GLASS2 = { t="GLASS2", f="CEIL5_1" }, --Blue + GLASS3 = { t="GLASS3", f="CEIL5_1" }, --Green + GLASS4 = { t="GLASS4", f="CEIL5_1" }, --White + GLASS5 = { t="GLASS5", f="CEIL5_1" }, --Black + GLASS6 = { t="GLASS6", f="CEIL5_1" }, --Orange + GLASS7 = { t="GLASS7", f="CEIL5_1" }, + GLASS8 = { t="GLASS8", f="CEIL5_1" }, --Multicolored + + -- These are 32x128 but tile to fit on pictures + GLASS9 = { t="GLASS9", f="CEIL5_1" }, --Multicolored + GLASS10 = { t="GLASS10", f="CEIL5_1" }, --Hexen + GLASS11 = { t="GLASS11", f="CEIL5_1" }, --Yellow + GLASS12 = { t="GLASS12", f="CEIL5_1" }, --Orange + GLASS13 = { t="GLASS13", f="CEIL5_1" }, --Red + GLASS14 = { t="GLASS14", f="CEIL5_1" }, --Blue + WINGLAS1 = { t="WINGLAS1", f="CEIL5_1" }, -- Yellow dragon, 192px tall + WINGLAS2 = { t="WINGLAS2", f="CEIL5_1" }, -- Red dragon in flame, 192px tall + WINGLAS3 = { t="WINGLAS3", f="CEIL5_1" }, -- Red Dragon, 192px tall + WINGLAS4 = { t="WINGLAS4", f="CEIL5_1" }, -- Blue Dragon, 192px tall + + -- Gothic + BISHOP = { t="BISHOP", f="CEIL5_1" }, + GOTH01 = { t="GOTH01", f="FLOOR7_1" }, --Multicolor brown bricks + GOTH02 = { t="GOTH02", f="GSTN03" }, --Brown metallic bricks + GOTH03 = { t="GOTH03", f="GSTN05" }, --Brown metallic multicolored bricks + GOTH04 = { t="GOTH04", f="GSTN05" }, --Same as GOTH03 but with red inverted cross design + GOTH05 = { t="GOTH05", f="MFLR8_2" }, --Like GOTH02 but white cross design on it + GOTH06 = { t="GOTH06", f="GSTN02" }, --Dark gray bricks + GOTH07 = { t="GOTH07", f="GSTN01" }, --Gray bricks + GOTH08 = { t="GOTH08", f="G13" }, --Bloody red bricks + GOTH09 = { t="GOTH09", f="G11" }, --Dark gray stone + GOTH10 = { t="GOTH10", f="G20" }, --Like GOTH09 but a green tinge + GOTH11 = { t="GOTH11", f="FLOOR7_3" }, --Gray marble + GOTH12 = { t="GOTH12", f="RROCK22" }, --Grayscale ZIMMER texture + GOTH13 = { t="GOTH13", f="FLAT5_4" }, --Grayscale BRICK3, + GOTH14 = { t="GOTH14", f="GWOD01" }, --Vertical wood + GOTH15 = { t="GOTH15", f="GMET05" }, --Dark metallic wall + GOTH16 = { t="GOTH16", f="G15" }, --Riveted metal wall + GOTH17 = { t="GOTH17", f="G15" }, --Horizontal metal wall + GOTH18 = { t="GOTH18", f="G15" }, --Block design version of GOTH16, + GOTH19 = { t="GOTH19", f="G18" }, --Inverted cross version of GOTH18, + GOTH20 = { t="GOTH20", f="G18" }, --Smaller cross version of GOTH19, + GOTH21 = { t="GOTH21", f="G18" }, --Red line version of GOTH17, + GOTH22 = { t="GOTH22", f="GMET05" }, --Horizontal dark metallic wall with rivets + GOTH23 = { t="GOTH23", f="G06" }, --Black metallic wall + GOTH24 = { t="GOTH24", f="G15" }, --Slightly different version of GOTH23, + GOTH25 = { t="GOTH25", f="G07" }, --Very similar to GOTH22, + GOTH26 = { t="GOTH26", f="G05" }, --Black wall + GOTH27 = { t="GOTH27", f="G08" }, --Black wall with rivets + GOTH28 = { t="GOTH28", f="G19" }, --Black wall with faces + GOTH29 = { t="GOTH29", f="QFLAT02" }, --Quake style wall + GOTH30 = { t="GOTH30", f="QFLAT03" }, --Quake style wall, cracked + GOTH31 = { t="GOTH31", f="G06" }, --Black marble + GOTH32 = { t="GOTH32", f="GMET04" }, --Rusty riveted metal support + GOTH33 = { t="GOTH33", f="CEIL5_1" }, --Black wall with inverted red crosses + GOTH34 = { t="GOTH34", f="G01" }, --Dark brown bricks + GOTH35 = { t="GOTH35", f="FLOOR7_1" }, --Brown designed wall + GOTH36 = { t="GOTH36", f="G09" }, --Darker version of GOTH18, + GOTH37 = { t="GOTH37", f="G09" }, --Darker version of GOTH17, + GOTH38 = { t="GOTH38", f="G09" }, --Lighter version of GOTH17, + GOTH39 = { t="GOTH39", f="G09" }, --Like GOTH38, but more lines horizontally + GOTH40 = { t="GOTH40", f="G09" }, --Vertical black metal supports + GOTH41 = { t="GOTH41", f="G09" }, --Like GOTH40, but more rivets + GOTH42 = { t="GOTH42", f="GSTN03" }, --BRONZE type wall + GOTH43 = { t="GOTH43", f="SLIME15" }, --Wall version of SLIME15 flat + GOTH44 = { t="GOTH44", f="G21" }, --Olive color marble tiles + GOTH45 = { t="GOTH45", f="G21" }, --Olive colored bricks + GOTH46 = { t="GOTH46", f="QFLAT05" }, + GOTH47 = { t="GOTH47", f="QFLAT06" }, + GOTH48 = { t="GOTH48", f="QFLAT06" }, + GOTH49 = { t="GOTH49", f="QFLAT05" }, + GOTH50 = { t="GOTH50", f="BLACK0" }, + GOTH51 = { t="GOTH51", f="BLACK0" }, + GUY1 = { t="GUY1", f="FLAT1" }, + + -- Marble + BLAKFACE = { t="BLAKFACE", f="BMARB3" }, -- Black MARBFACE + BLAKFAC2 = { t="BLAKFAC2", f="BMARB3" }, -- Black MARBFAC2, + BLAKFAC3 = { t="BLAKFAC3", f="BMARB3" }, -- Black MARBFAC3, + BLAKMBGY = { t="BLAKMBGY", f="BMARB1" }, -- Black MARBGRAY + BLAKMBG2 = { t="BLAKMBG2", f="BMARB1" }, -- Black MARBFAC4, + GOATMARB = { t="GOATMARB", f="FLAT1" }, -- Goat/Baphomet relief thing + GSTONE3 = { t="GSTONE3", f="FLOOR7_2" }, + ICONMRB1 = { t="ICONMRB1", f="FLOOR7_2" }, + KMARBLE1 = { t="KMARBLE1", f="BMARB2" }, -- Black MARBLE1, + KMARBLE2 = { t="KMARBLE2", f="BMARB2" }, -- Black MARBLE2, + KMARBLE3 = { t="KMARBLE3", f="BMARB2" }, -- Black MARBLE3, + KSTONE1 = { t="KSTONE1", f="BMARB1" }, -- Black GSTONE + KSTONE2 = { t="KSTONE2", f="BMARB3" }, -- Black GSTONE, red edging + KSTONE3 = { t="KSTONE3", f="BMARB3" }, -- Black GSTONE, green edging + KSTFONT1 = { t="KSTFONT1", f="BMARB3" }, -- Black GSTONE, red fountain + KSTFNTG1 = { t="KSTFNTG1", f="BMARB3" }, -- Black GSTONE, green fountain + KSTGARG = { t="KSTGARG", f="BMARB3" }, + KSTLION = { t="KSTLION", f="BMARB3" }, + KSTSATYR = { t="KSTSATYR", f="BMARB3" }, + LIONMRB1 = { t="LIONMRB1", f="TILES4" }, -- White marble lion + LIONMRB2 = { t="LIONMRB2", f="FLAT1" }, -- White marble lion (grayer) + LIONMRB3 = { t="LIONMRB3", f="TILES4" }, -- White marble lion + MARB5BL = { t="MARB5BL", f="RMARB2" }, -- red-banded black marble + -- green marble, thin tall + MARBF01 = { t="MARBF01", f="FLOOR7_2" }, + MARBF02 = { t="MARBF02", f="FLOOR7_2" }, + MARBF03 = { t="MARBF03", f="FLOOR7_2" }, + -- dark, thin tall + MARBFB1 = { t="MARBFB1", f="G11" }, + MARBFB2 = { t="MARBFB2", f="G11" }, + MARBFB3 = { t="MARBFB3", f="G11" }, + -- dark + MARBFAB1 = { t="MARBFAB1", f="G11" }, + MARBFAB2 = { t="MARBFAB2", f="G11" }, + MARBFAB3 = { t="MARBFAB3", f="G11" }, + MARBFAB5 = { t="MARBFAB5", f="G11" }, + MARBFAB6 = { t="MARBFAB6", f="G11" }, + MARBFAB7 = { t="MARBFAB7", f="G11" }, + MARBFAB8 = { t="MARBFAB8", f="G11" }, + MARBFAB9 = { t="MARBFAB9", f="G11" }, + MARBFABA = { t="MARBFABA", f="G11" }, + MARBFABB = { t="MARBFABB", f="G11" }, + MARBFABC = { t="MARBFABC", f="G11" }, + MARBFABD = { t="MARBFABD", f="G11" }, + MARBFABF = { t="MARBFABF", f="G11" }, + MARBFABG = { t="MARBFABG", f="G11" }, + MARBFABH = { t="MARBFABH", f="G11" }, + MARBFABI = { t="MARBFABI", f="G11" }, + MARBFABJ = { t="MARBFABJ", f="G11" }, + + -- green marble + MARBFAC5 = { t="MARBFAC5", f="FLOOR7_2" }, --Plutonia 2, + MARBFAC6 = { t="MARBFAC6", f="FLOOR7_2" }, + MARBFAC7 = { t="MARBFAC7", f="FLOOR7_2" }, + MARBFAC8 = { t="MARBFAC8", f="FLOOR7_2" }, -- Craneo's doing + MARBFAC9 = { t="MARBFAC9", f="FLOOR7_2" }, -- Craneo's doing + MARBFACA = { t="MARBFACA", f="FLOOR7_2" }, -- Craneo's doing + MARBFACB = { t="MARBFACB", f="FLOOR7_2" }, -- Craneo's doing + MARBFACC = { t="MARBFACC", f="FLOOR7_2" }, + MARBFACD = { t="MARBFACD", f="FLOOR7_2" }, + MARBFACF = { t="MARBFACF", f="FLOOR7_2" }, + MARBFACG = { t="MARBFACG", f="FLOOR7_2" }, + MARBFACH = { t="MARBFACH", f="FLOOR7_2" }, + MARBFACI = { t="MARBFACI", f="FLOOR7_2" }, + MARBFACJ = { t="MARBFACJ", f="FLOOR7_2" }, + + MARBLE = { t="MARBLE", f="FLOOR7_2" }, + MARBLE4 = { t="MARBLE4", f="FLOOR7_2" }, + MARBLE5 = { t="MARBLE5", f="FLOOR7_2" }, + MARBLE6 = { t="MARBLE6", f="FLOOR7_2" }, + MARBLE7 = { t="MARBLE7", f="FLOOR7_2" }, + MARBLE8 = { t="MARBLE8", f="FLOOR7_2" }, + MARBLFAC = { t="MARBLFAC", f="TILES4" }, -- Greek inspired wall + MBGRY = { t="MBGRY", f="FLOOR7_2" }, --MARBGRAY + MBGRY2 = { t="MBGRY2", f="FLOOR7_2" }, --MARBFAC4, + + REDMARB1 = { t="REDMARB1", f="BMARB3" }, + REDMARB2 = { t="REDMARB2", f="RMARB1" }, + REDMARB3 = { t="REDMARB3", f="RMARB2" }, + + -- Metal / Rust + DARKMET1 = { t="DARKMET1", f="DARKM01" }, + EVILFACE = { t="EVILFACE", f="CEIL5_2" }, --From Plutonia 2, + EVILFAC2 = { t="EVILFAC2", f="FLAT5_4" }, + EVILFAC3 = { t="EVILFAC3", f="FLAT5" }, + EVILFAC4 = { t="EVILFAC4", f="BLACK0" }, + EVILFAC5 = { t="EVILFAC5", f="BLACK0" }, + EVILFAC6 = { t="EVILFAC6", f="GRATE4" }, + EVILFAC7 = { t="EVILFAC7", f="GRATE4" }, + EVILFAC8 = { t="EVILFAC8", f="GRATE4" }, + EVILFAC9 = { t="EVILFAC9", f="GRATE4" }, + EVILFACA = { t="EVILFACA", f="GRATE4" }, + GRAYMET1 = { t="GRAYMET1", f="FLAT23" }, + GRAYMET2 = { t="GRAYMET2", f="SHINY04" }, + GRAYMET3 = { t="GRAYMET3", f="SHINY04" }, + GRAYMET4 = { t="GRAYMET4", f="SHINY04" }, + GRAYMET5 = { t="GRAYMET5", f="SHINY04" }, + GRAYMET6 = { t="GRAYMET6", f="SHINY04" }, -- Blue plating inside + GRAYMET7 = { t="GRAYMET7", f="SHINY04" }, -- Purple + GRAYMET8 = { t="GRAYMET8", f="SHINY04" }, -- Green + GRAYMET9 = { t="GRAYMET9", f="SHINY04" }, -- Red + GRAYMETA = { t="GRAYMETA", f="SHINY04" }, -- Cyan + GRAYMETB = { t="GRAYMETB", f="SHINY04" }, -- Purple-ish + GRAYMETC = { t="GRAYMETC", f="SHINY04" }, -- Orange + MET2 = { t="MET2", f="CEIL5_2" }, -- METAL2, + MET3 = { t="MET3", f="CEIL5_2" }, -- METAL3, + MET4 = { t="MET4", f="CEIL5_2" }, -- METAL4, + MET5 = { t="MET5", f="CEIL5_2" }, -- METAL5, + MET6 = { t="MET6", f="CEIL5_2" }, -- METAL6, + MET7 = { t="MET7", f="CEIL5_2" }, -- METAL7, + METACOMP = { t="METACOMP", f="CEIL5_2" }, + METAL8 = { t="METAL8", f="CEIL5_2" }, + METAL9 = { t="METAL9", f="CEIL5_2" }, + METAL10 = { t="METAL10", f="CEIL5_2" }, + METAL11 = { t="METAL11", f="FLOOR4_8" }, + + METL01 = { t="METL01", f="CEIL5_2" }, --METAL2, + METL02 = { t="METL02", f="GMET01" }, + METL03 = { t="METL03", f="GMET01" }, + METL04 = { t="METL04", f="SLIME16" }, --SPACEW4, + + RUSTWALL = { t="RUSTWALL", f="GRATE8" }, + RUSTWAL2 = { t="RUSTWAL2", f="G08" }, + RUSTWAL3 = { t="RUSTWAL3", f="G08" }, + RUSTWAL4 = { t="RUSTWAL4", f="G08" }, + + --Memento Mori 2 textures + HELMET2 = { t="HELMET2", f="CEIL5_2" }, + MM205 = { t="MM205", f="MFLR8_4" }, --Rock with metal patterns + MM206 = { t="MM206", f="G20" }, --Green rock + MM207 = { t="MM207", f="G20" }, --Green brick + + -- the following textures are original composites and don't actually have anything to do with + -- MM2 anymore + MMT208 = { t="MMT208", f="QFLAT02" }, --Brown and black stripe wall + MMT209 = { t="MMT209", f="QFLAT03" }, + MMT210 = { t="MMT210", f="QFLAT09" }, + + -- Egypt + EGYPT01 = { t="EGYPT01", f="FLAT1_1" }, --64x64, + EGYPT02 = { t="EGYPT02", f="FLOOR7_1" }, --128x128, + EGYPT03 = { t="EGYPT03", f="FLOOR7_1" }, --64x128, doesn't tile horizontally that well + EGYPT04 = { t="EGYPT04", f="SAND2" }, --128x128, + EGYPT05 = { t="EGYPT05", f="RROCK09" }, --128x128, + EGYPT06 = { t="EGYPT06", f="RROCK09" }, --128x128, + + ESAND1 = { t="ESAND1", f="SAND1" }, -- Sand dune texture + ESAND2 = { t="ESAND2", f="SAND2" }, -- Sand dune texture + + EGDOOR1 = { t="EGDOOR1", f="FLOOR7_1" }, -- Door + + -- Egypt wall murals + MURAL3 = { t="MURAL3", f="FLAT1_1" }, --96x128, + MURAL4 = { t="MURAL4", f="FLAT1_1" }, --96x128, + MURAL5 = { t="MURAL5", f="FLAT1_1" }, + MURAL6 = { t="MURAL6", f="FLAT1_1" }, + MURAL7 = { t="MURAL7", f="RROCK09" }, --256x128, + MURAL8 = { t="MURAL8", f="RROCK03" }, --256x128, + MURAL9 = { t="MURAL9", f="RROCK09" }, + MURAL10 = { t="MURAL10", f="RROCK09" }, + MURAL11 = { t="MURAL11", f="RROCK09" }, + MURAL12 = { t="MURAL12", f="RROCK09" }, + MURAL13 = { t="MURAL13", f="RROCK09" }, + MURAL14 = { t="MURAL14", f="RROCK09" }, + MURAL15 = { t="MURAL15", f="RROCK09" }, + MURAL16 = { t="MURAL16", f="RROCK09" }, + MURAL17 = { t="MURAL17", f="RROCK09" }, + + -- Rocks / Natural + CATACMB1 = { t="CATACMB1", f="RROCK03" }, -- Dark gray rock, bones + CATACMB2 = { t="CATACMB2", f="RROCK03" }, -- Dark gray rock, empty + CATACMB3 = { t="CATACMB3", f="RROCK03" }, -- Dark gray rock + CATACMB4 = { t="CATACMB4", f="FLOOR7_1" }, -- Dark brown rock, bones + CATACMB5 = { t="CATACMB5", f="FLOOR7_1" }, -- Dark brown rock, empty + CATACMB6 = { t="CATACMB6", f="FLOOR7_1" }, -- Dark brown rock + RDROK1 = { t="RDROK1", f="RROCK01" }, + RDROK2 = { t="RDROK2", f="FLOOR6_1" }, + ROK01 = { t="ROK01", f="RROCK16" }, --ROCK4, + ROK02 = { t="ROK02", f="RROCK09" }, --ROCK5, + ROK03 = { t="ROK03", f="RROCK03" }, + ROK04 = { t="ROK04", f="RROCK03" }, + ROK05 = { t="ROK05", f="RROCK03" }, + ROK06 = { t="ROK06", f="RROCK18" }, + ROK07 = { t="ROK07", f="RROCK17" }, + ROK08 = { t="ROK08", f="GRNROCK" }, + ROK09 = { t="ROK09", f="GRNROCK" }, + ROK10 = { t="ROK10", f="RROCK13" }, + ROK11 = { t="ROK11", f="SLIME13" }, --BRICK10, + ROK12 = { t="ROK12", f="FLAT10" }, + ROK13 = { t="ROK13", f="QFLAT07" }, + ROK14 = { t="ROK14", f="RROCK03" }, + ROK15 = { t="ROK15", f="RROCK03" }, + ROK16 = { t="ROK16", f="FLOOR7_1" }, --Brownish version of ROCK3, + ROK17 = { t="ROK17", f="FLAT5_4" }, --Light gray bricks + ROK18 = { t="ROK18", f="FLAT5_4" }, --Dark gray bricks (Flat needed) + ROK19 = { t="ROK19", f="FLOOR7_1" }, --Brown/tan bricks (Flat needed) + ROK20 = { t="ROK20", f="RROCK03" }, + ROK21 = { t="ROK21", f="FLAT10" }, + ROK22 = { t="ROK22", f="RROCK18" }, + ROK23 = { t="ROK23", f="RROCK03" }, + ROK24 = { t="ROK24", f="RROCK03" }, + ROK25 = { t="ROK25", f="RROCK17" }, + ROK26 = { t="ROK26", f="RROCK16" }, + ROKGRN = { t="ROKGRN", f="GRENFLOR" }, -- composite of various green cliff textures + TNROK1 = { t="TNROK1", f="RROCK09" }, --TANROCK4, + TNROK2 = { t="TNROK2", f="RROCK03" }, --TANROCK5, + + -- Pipes + PIPESV1 = { t="PIPESV1", f="FLAT1" }, + PIPESV2 = { t="PIPESV2", f="FLAT5_5" }, + PIPESV3 = { t="PIPESV3", f="RROCK20" }, + PIPEDRK1 = { t="PIPEDRK1", f="RROCK03" }, + PIPEWAL5 = { t="PIPEWAL5", f="RROCK03" }, + + -- Silver / Shiny + HEX01 = { t="HEX01", f="SHINY03" }, + SHAWN4 = { t="SHAWN4", f="FLAT23" }, + SHAWN5 = { t="SHAWN5", f="FLAT23" }, + SHAWN01C = { t="SHAWN01C", f="FLAT23" }, + SHAWN01D = { t="SHAWN01D", f="FLAT23" }, + SHAWN01E = { t="SHAWN01E", f="FLAT23" }, + SHAWN01F = { t="SHAWN01F", f="FLAT23" }, + SHAWN01G = { t="SHAWN01G", f="FLAT23" }, + SHAWN01H = { t="SHAWN01H", f="FLAT23" }, + SHAWCOMP = { t="SHAWCOMP", f="FLAT23" }, + SHAWGRY4 = { t="SHAWGRY4", f="FLAT23" }, + SHAWHOSO = { t="SHAWHOSO", f="FLAT23" }, + SHAWNDR = { t="SHAWNDR", f="FLAT20" }, + SHAWVENT = { t="SHAWVENT", f="FLAT23" }, + SHAWVEN2 = { t="SHAWVEN2", f="FLAT23" }, + SILVBLU1 = { t="SILVBLU1", f="FLAT23" }, + SILVCOMP = { t="SILVCOMP", f="FLAT23" }, + SHAWSH04 = { t="SHAWSH04", f="SHINY04"}, + + SILVER2G = { t="SILVER2G", f="FLAT23" }, + SILVER2R = { t="SILVER2R", f="FLAT23" }, + SILVER2O = { t="SILVER2O", f="FLAT23" }, + SILVER2Y = { t="SILVER2Y", f="FLAT23" }, + SILVER2W = { t="SILVER2W", f="FLAT23" }, + + UACCRT1 = { t="UACCRT1", f="FLAT23" }, + + -- Skin and Hell + BODIES1 = { t="BODIES1", f="BODIESFL" }, -- Copy of AASHITTY + BODIESB = { t="BODIESB", f="BODIESFL" }, --Dark red AASHITTY/SP_FACE2, + BODIESC = { t="BODIESC", f="BODIESF2" }, --Dark brown AASHITTY/SP_FACE2, + BONES1 = { t="BONES1", f="FLAT5_6" }, -- Brown bones + BONES2 = { t="BONES2", f="FLAT5_6" }, -- Gray bones + BONES3 = { t="BONES3", f="FLAT5_6" }, -- Bloody bones + CORPSES = { t="CORPSES", f="FLAT5_6" }, --SLOPPY1, + CRACKRED = { t="CRACKRED", f="RROCK01" }, + CRACKRD2 = { t="CRACKRD2", f="RROCK01" }, + CRAK01 = { t="CRAK01", f="RROCK01" }, --CRACKLE2, + CRAK02 = { t="CRAK02", f="RROCK02" }, --CRACKLE4, + DEATH1 = { t="DEATH1", f="FLAT5_4" }, + DEATH2 = { t="DEATH2", f="FLAT5_4" }, + DEATH3 = { t="DEATH3", f="FLAT5_4" }, + DEMSTAT = { t="DEMSTAT", f="GMET07" }, -- Demon statue, Craneo's stuff + HELMET1 = { t="HELMET1", f="CEIL5_1" }, + HELWAL1 = { t="HELWAL1", f="RROCK03" }, --Memento Mori 2, + HELLROK1 = { t="HELLROK1", f="FLOOR6_1" }, + HELWAL2 = { t="HELWAL2", f="FLOOR6_1" }, --Plutonia 2, + PENTA1 = { t="PENTA1", f="RROCK03" }, + SKIN3 = { t="SKIN3", f="SFLR6_4" }, + SKIN4 = { t="SKIN4", f="SKINFLT1" }, + SKINHEAD = { t="SKINHEAD", f="SFLR6_4" }, + SKINLOW1 = { t="SKINLOW1", f="FLAT5_2" }, --128x128 version of SKINLOW + SKINMET3 = { t="SKINMET3", f="CEIL5_2" }, + SKINMET4 = { t="SKINMET4", f="CEIL5_2" }, + SKINMET5 = { t="SKINMET5", f="CEIL5_2" }, + SKINMET6 = { t="SKINMET6", f="CEIL5_2" }, + SKINMET7 = { t="SKINMET7", f="CEIL5_2" }, + SKTEK01 = { t="SKTEK01", f="FLAT5_5" }, --SKINTEK1, + SKTEK02 = { t="SKTEK02", f="FLAT5_5" }, --SKINTEK2, + SKULLS = { t="SKULLS", f="FLOOR6_1" }, --SP_FACE2, + SKULLS2 = { t="SKULLS2", f="FLAT5_6" }, + SKULLS3 = { t="SKULLS3", f="FLAT5_6" }, --SKULWAL3, + SKULLS4 = { t="SKULLS4", f="FLAT5_6" }, --SKULWALL + SPDUDE3 = { t="SPDUDE3", f="FLOOR7_2" }, --SP_DUDE3, + SPDUDE6 = { t="SPDUDE6", f="FLOOR7_2" }, --SP_DUDE6, + SPDUDE7 = { t="SPDUDE7", f="FLOOR5_4" }, --SP_DUDE7, + SPDUDE8 = { t="SPDUDE8", f="FLOOR5_4" }, --SP_DUDE8, + SP_HOT2 = { t="SP_HOT2", f="RMARB3" }, + SP_HOT3 = { t="SP_HOT3", f="RMARB3" }, + SPINE01 = { t="SPINE01", f="SFLR6_4" }, + + --Snow and Ice + SNOW01 = { t="SNOW01", f="SNOW1" }, + SNOW02 = { t="SNOW02", f="SNOW1" }, + SNOW03 = { t="SNOW03", f="SNOW5" }, + SNOW04 = { t="SNOW04", f="SNOW8" }, + SNOW05 = { t="SNOW05", f="SNOW6" }, + SNOW06 = { t="SNOW06", f="SNOW8" }, + SNOW07 = { t="SNOW07", f="SNOW6" }, + SNOW08 = { t="SNOW08", f="SNOW1" }, + SNOW09 = { t="SNOW09", f="SNOW5" }, + SNOW10 = { t="SNOW10", f="SNOW1" }, + SNOW11 = { t="SNOW11", f="SNOW6" }, + SNOW12 = { t="SNOW12", f="SNOW6" }, + SNOW13 = { t="SNOW13", f="SNOW13F" }, -- 256x256, beautiful ice + SNOW14 = { t="SNOW14", f="SNOW6" }, -- 256x256, + SNOW15 = { t="SNOW15", f="SNOW1" }, + + SNOWBOX1 = { t="SNOWBOX1", f="SNOW6" }, + SNOWBOX2 = { t="SNOWBOX2", f="SNOW1" }, + + SNOWWAL1 = { t="SNOWWAL1", f="SHINY01" }, + SNOWWAL2 = { t="SNOWWAL2", f="SHINY02" }, + SNOWWAL3 = { t="SNOWWAL3", f="SHINY02" }, + SNOWWAL4 = { t="SNOWWAL4", f="SHINY01" }, + + -- Snow + Tech + SNWTF1 = { t="SNOWWAL4", f="SNWTF1" }, + SNWTF2 = { t="STONE10", f="SNWTF2" }, + SNWTF3 = { t="STARGRY1", f="SNWTF3" }, + SNWTF4 = { t="SNOWWAL2", f="SNWTF4" }, + SNWTF5 = { t="SNOWWAL3", f="SNWTF5" }, + SNWTF6 = { t="SNOWWAL2", f="SNWTF6" }, + SNWTF7 = { t="SNOWWAL1", f="SNWTF7" }, + SNWTF8 = { t="TEKSHAW", f="SNWTF8" }, + + -- Desert textures + DESBRIK1 = { t="DESBRIK1", f="RROCK09" }, -- Tan brick facade + DESBRIK2 = { t="DESBRIK2", f="RROCK09" }, -- Tan brick facade + DESBRIK3 = { t="DESBRIK3", f="FLOOR7_1" }, -- Brown brick facade w/ trim + DESBRIK4 = { t="DESBRIK4", f="RROCK09" }, -- Tan brick facade + DESBRIK5 = { t="DESBRIK5", f="RROCK09" }, -- Tan brick facade + DESBRIK6 = { t="DESBRIK6", f="RROCK09" }, -- Tan brick facade w/ trim + DESBRIK7 = { t="DESBRIK7", f="FLOOR7_1" }, -- Tan brick facade + DESMARB1 = { t="DESMARB1", f="RROCK09" }, -- Elegant tan marble + DESMARB2 = { t="DESMARB2", f="RROCK09" }, -- Elegant tan marble + DESROCK1 = { t="DESROCK1", f="RROCK03" }, -- Brown rock + DESROCK2 = { t="DESROCK2", f="QFLAT07" }, -- Brown rock + DESROCK3 = { t="DESROCK3", f="FLOOR7_1" }, -- Brown rock + DESROCK4 = { t="DESROCK4", f="RROCK09" }, -- Tan rock + DESROCK5 = { t="DESROCK5", f="RROCK17" }, -- Brown rock + + -- Tekwall / Startan-types + STARBR1 = { t="STARBR1", f="FLOOR0_2" }, + STARGRY1 = { t="STARGRY1", f="SHINY01" }, + TEKGRBLU = { t="TEKGRBLU", f="RROCK20" }, + TEKGRDR = { t="TEKGRDR", f="CEIL5_2" }, -- Usable as a door + TEKGRN01 = { t="TEKGRN01", f="RROCK20" }, --RROCK20, + TEKGRY01 = { t="TEKGRY01", f="RROCK21" }, + TEKGRY02 = { t="TEKGRY02", f="RROCK21" }, + TEKSHAW = { t="TEKSHAW", f="SHINY02" }, + TEKWALL2 = { t="TEKWALL2", f="CEIL5_1" }, + TEKWALL2 = { t="TEKWALL2", f="CEIL5_1" }, + TEKWALL7 = { t="TEKWALL7", f="FLOOR7_1" }, + TEKWALL8 = { t="TEKWALL8", f="TEK1" }, -- Red + TEKWALL9 = { t="TEKWALL9", f="TEK2" }, -- Green + TEKWALLA = { t="TEKWALLA", f="TEK3" }, -- Purple + TEKWALLB = { t="TEKWALLB", f="TEK4" }, -- Blue + TEKWALLC = { t="TEKWALLC", f="TEK5" }, -- Magenta + TEKWALLD = { t="TEKWALLD", f="TEK6" }, -- Cyan/Aqua + TEKWALLE = { t="TEKWALLE", f="TEK7" }, -- Orange + TVSNOW01 = { t="TVSNOW01", f="CEIL5_1" }, --Animated + + -- Auxiliary + COLLITE1 = { t="COLLITE1", f="RROCK20" }, --Green version of REDWALL1, + COLLITE2 = { t="COLLITE2", f="ORANFLOR" }, --Orange version of REDWALL1, + COLLITE3 = { t="COLLITE3", f="CEIL4_2" }, --Blue version of REDWALL1, + DFAN1 = { t="DFAN1", f="METAL" }, -- Essentially a wall version of FAN1, + LITE2 = { t="LITE2", f="FLOOR0_1" }, -- BROWN1 variant w/ lights. From Doom1, + LITE4 = { t="LITE4", f="FLAT19" }, -- LITE5 and bigger light on bottom. From Doom1, + LITE96 = { t="LITE96", f="FLOOR7_1" }, -- BROWN96 variant w/ lights. From Doom1, + LITEBLU3 = { t="LITEBLU3", f="CEIL5_1" }, -- Large blue lights. From Doom1, + LITESTON = { t="LITESTON", f="MFLR8_1" }, -- STONE2 variant w/ lights. From Doom1, + RDLITE01 = { t="RDLITE01", f="FLOOR1_6" }, --REDLITE + RDWAL01 = { t="RDWAL01", f="FLOOR1_6" }, --REDWALL1, + SANDBAGS = { t="SANDBAGS", f="RROCK09" }, + SUPPORT4 = { t="SUPPORT4", f="FLAT23" }, + WHEEL1 = { t="WHEEL1", f="CEIL5_1" }, -- Truck wheel + WHEEL2 = { t="WHEEL2", f="CEIL5_1" }, -- Car wheel + WHEEL3 = { t="WHEEL3", f="CEIL5_1" }, -- Compact car wheel + + -- Steps + WARNSTEP = { t="WARNSTEP", f="WARN1", sane=1 }, + + -- Wood / Panel / Urban + GUNRACK = { t="GUNRACK", f="RROCK09" }, -- Weapons rack by OSJ Clatchford, ZDoom custom texture thread, page 80, + PANBOOK2 = { t="PANBOOK2", f="RROCK09" }, -- 128x128, + PANBOOK3 = { t="PANBOOK3", f="RROCK09" }, -- 128x128, + PANBOOK4 = { t="PANBOOK4", f="RROCK09" }, -- 64x128, + PANBOOK5 = { t="PANBOOK5", f="RROCK09" }, -- 64x96, + STUC01 = { t="STUC01", f="RROCK09" }, --STUCCO + THATCH1 = { t="THATCH1", f="G03" }, + THATCH2 = { t="THATCH2", f="G02" }, + WD01 = { t="WD01", f="FLAT5_2" }, --WOOD8, + WD02 = { t="WD02", f="FLAT5_2" }, --WOOD9, + WD03 = { t="WD03", f="FLAT5_2" }, + WD04 = { t="WD04", f="FLAT5_1" }, + WODCRAT1 = { t="WODCRAT1", f="FLAT5_2" }, -- Wooden TNT UAC crate, 64x128, + WODCRAT2 = { t="WODCRAT2", f="FLAT5_2" }, -- Wooden TNT UAC crate, 64x64, + WODCRAT3 = { t="WODCRAT3", f="FLAT5_2" }, -- Wooden TNT UAC crate, 128x64, + WODCRAT4 = { t="WODCRAT4", f="FLAT5_2" }, -- Wooden UAC crate, 64x64, + WODCRAT5 = { t="WODCRAT5", f="FLAT5_2" }, -- Wooden UAC crate, 64x128, + WOODDEM1 = { t="WOODDEM1", f="FLAT5_1" }, -- Ugly wooden demon relief + WOODFACE = { t="WOODFACE", f="FLAT5_2" }, + WOODSKUL = { t="WOODSKUL", f="FLAT5_2" }, -- Wood with skull on it. From Doom1, + WOOD13 = { t="WOOD13", f="FLAT5_2" }, + WOOD14 = { t="WOOD14", f="FLAT5_2" }, + WOOD15 = { t="WOOD15", f="FLAT5_2" }, + WOOD16 = { t="WOOD16", f="FLAT5_2" }, + WOOD17 = { t="WOOD17", f="FLAT5_2" }, + WOOD18 = { t="WOOD18", f="FLAT5_2" }, + WDMET01 = { t="WDMET01", f="CEIL5_2" }, --WOODMET1, + WDMET02 = { t="WDMET02", f="CEIL5_2" }, --WOODMET2, + WDMET03 = { t="WDMET03", f="CEIL5_2" }, + + -- Jimmy's custom textures from Jimmytex + MOSROK3 = { t="MOSROK3", f="RROCK09" }, -- Plutonia MOSROK, but brown + + -- Doom 2 Panels + PANNY01 = { t="PANNY01", f="RROCK09" }, --PANEL1, + PANNY02 = { t="PANNY02", f="RROCK09" }, --PANEL2, + PANNY03 = { t="PANNY03", f="RROCK09" }, --PANEL3, + PANNY04 = { t="PANNY04", f="RROCK09" }, --PANEL4, + PANNY05 = { t="PANNY05", f="RROCK09" }, --PANEL6, + PANNY06 = { t="PANNY06", f="RROCK09" }, --PANEL7, + PANNY07 = { t="PANNY07", f="RROCK09" }, --PANEL8, + PANNY08 = { t="PANNY08", f="RROCK09" }, --PANEL9, + PANNY09 = { t="PANNY09", f="RROCK09" }, --PANCASE2, + PANNYA = { t="PANNYA", f="RROCK09" }, --TANROCK3, + + -- Animated liquid walls + GRYFALL1 = { t="GRYFALL1", f="SLUDGE01", sane=1 }, + MFALL1 = { t="MFALL1", f="MAGMA1", sane=1 }, + PURFAL1 = { t="PURFAL1", f="PURW1", sane=1 }, + SLMFALL1 = { t="SLMFALL1", f="SLIME01", sane=1 }, + OFALL1 = { t="OFALL1", f="OSLIME01", sane=1 }, + LFAL21 = { t="LFAL21", f="QLAVA1", sane=1 }, + LFALL1 = { t="LFALL1", f="XLAV1", sane=1 }, + ICEFALL = { t="ICEFALL", f="SNOW9", sane=1 }, --Not animated + + -- Animated but not fully liquid walls + SLADRIP1 = { t="SLADRIP1", f="FLOOR7_1" }, + + -- Candles / Misc Animated + CANDLE1 = { t="CANDLE1", f="MAGMA1", sane=1 }, -- Burning candles, for decor, not walls + FIREBLK1 = { t="FIREBLK1", f="FLOOR6_2", sane=1 }, -- Black FIREBLU1, + LAVBLAK1 = { t="LAVBLAK1", f="RROCK03", sane=1 }, -- Black FIRELAVA + LAVBLUE1 = { t="LAVBLUE1", f="FASHBLU", sane=1 }, -- Blue FIRELAVA + LAVGREN1 = { t="LAVGREN1", f="FASHGREN", sane=1 }, -- Green FIRELAVA + LAVWHIT1 = { t="LAVWHIT1", f="FASHWITE", sane=1 }, -- White FIRELAVA + + -- Switches + SW1CHN = { t="SW1CHN", f="FLAT5_2" }, + SW2CHN = { t="SW2CHN", f="FLAT5_2" }, + SW1GOTH = { t="SW1GOTH", f="CEIL5_2" }, + SW2GOTH = { t="SW2GOTH", f="CEIL5_2" }, + SW1PENT = { t="SW1PENT", f="CEIL5_2" }, + SW2PENT = { t="SW2PENT", f="CEIL5_2" }, + SW1QUAK = { t="SW1QUAK", f="CEIL5_2" }, + SW2QUAK = { t="SW2QUAK", f="CEIL5_2" }, + SW1SKUL1 = { t="SW1SKUL1", f="CEIL5_2" }, + SW2SKUL1 = { t="SW2SKUL1", f="CEIL5_2" }, + + -- Fencing & spacings + BARBWIRE = { t="BARBWIRE", rail_h=32 }, -- Razor barbwire + FENCE1 = { t="FENCE1", rail_h=128 }, + FENCE2 = { t="FENCE2", rail_h=128 }, + FENCE3 = { t="FENCE3", rail_h=64 }, + FENCE4 = { t="FENCE4", rail_h=128 }, + FENCE5 = { t="FENCE5", rail_h=72 }, + FENCE6 = { t="FENCE6", rail_h=72 }, + FENCE7 = { t="FENCE7", rail_h=128 }, + FENCE8 = { t="FENCE8", rail_h=96 }, -- Shiny + FENCE9 = { t="FENCE9", rail_h=96 }, -- Rusty + FENCEA = { t="FENCEA", rail_h=128 }, -- Shiny + FENCEB = { t="FENCEB", rail_h=128 }, -- Rusty + FENCEC = { t="FENCEC", rail_h=128 }, -- Fencing with vegetation(?) on it, from Evilution + MIDSPAC2 = { t="MIDSPAC2", f="CEIL5_1", rail_h = 128 }, -- Darker + MIDSPAC3 = { t="MIDSPAC3", f="CEIL5_1", rail_h = 128 }, -- A thicker, metallic look + MIDSPAC4 = { t="MIDSPAC4", f="WARN1", rail_h = 128 }, -- Warning stripes + MIDSPAC5 = { t="MIDSPAC5", f="WARN1", rail_h = 128 }, -- Warning stripes + MIDSPAC6 = { t="MIDSPAC6", f="CEIL5_2", rail_h = 128 }, -- Diamond holes + MIDSPAC7 = { t="MIDSPAC7", f="CEIL5_2", rail_h = 128 }, -- Rectangular holes + MIDSPAC8 = { t="MIDSPAC8", f="CEIL5_2", rail_h = 128 }, -- Diagonal holes + MIDVINE1 = { t="MIDVINE1", f="CEIL5_1", rail_h = 128 }, -- 256x128, brown vines + MIDVINE2 = { t="MIDVINE2", f="CEIL5_1", rail_h = 128 }, -- 256x128, brown & green vines + RAIL1 = { t="RAIL1", rail_h=32 }, + + -- Transparent windows + MIDWIND1 = { t="MIDWIND1", f="CEIL5_1", rail_h = 128 }, -- 32x128, + MIDWIND2 = { t="MIDWIND2", f="CEIL5_1", rail_h = 128 }, -- 32x128, + MIDWIND3 = { t="MIDWIND3", f="CEIL5_1", rail_h = 128 }, -- 64x128, + MIDWIND4 = { t="MIDWIND4", f="CEIL5_1", rail_h = 96 }, -- 32x96, + MIDWIND5 = { t="MIDWIND5", f="CEIL5_1", rail_h = 128 }, -- 64x128, + MIDWIND6 = { t="MIDWIND6", f="CEIL5_1", rail_h = 96}, -- 32x96, + MIDWIND7 = { t="MIDWIND7", f="CEIL5_1", rail_h = 128 }, -- 32x128, + MIDWIND8 = { t="MIDWIND8", f="CEIL5_1", rail_h = 128 }, -- 128x128, + + -- Obsidian flags + -- Note: Due to being over 128 height, we may need to use HI_START/HI_END lumps if + -- we have problems with the textures being cut off in-game. + OBDNBNR1 = { t="OBDNBNR1", f="CRATOP2" }, -- Obsidian flag, yellow + OBDNBNR2 = { t="OBDNBNR2", f="SFLR6_4" }, -- Obsidian flag, hellish + + -- Vending machine textures (from vending_machine_textures.wad) -- + OBVNMCH1 = { t="OBVNMCH1", f="CEIL5_1" }, + OBVNMCH2 = { t="OBVNMCH2", f="CEIL5_1" }, + OBVNMCH3 = { t="OBVNMCH3", f="CEIL5_1" }, + OBVNMCH4 = { t="OBVNMCH4", f="CEIL5_1" }, + OBVNMCH5 = { t="OBVNMCH5", f="CEIL5_1" }, + + CRATJOKE = { t="CRATJOKE", f="CRATOP2"}, + + -- Exiting textures with new definitions + FIREBLU1 = { t="FIREBLU1", f="FIRELAF1" }, + FIREBLU2 = { t="FIREBLU2", f="FIRELAF2" }, + FIREWALA = { t="FIREWALA", f="FLOOR6_1" }, + FIRELAV2 = { t="FIRELAV2", f="FLOOR6_1" }, + TEKWALL4 = { t="TEKWALL4", f="TEKFLR4" }, + + --------------------------- + -- StalungCraft textures -- + --------------------------- + + -- TODO: Use better flats used here if possible! + + -- Wood & bookcases + BKCASE1A = { t="BKCASE1A", f="RROCK20" }, -- Tan bookshelf, filled with books, 64x128 + BKCASE2A = { t="BKCASE2A", f="RROCK20" }, -- Tam bookshelf, filled with books, 96x128 + BKCASE3A = { t="BKCASE3A", f="RROCK20" }, -- Tan bookshelf, filled with books, 128x128 + BKSIDE1A = { t="BKSIDE1A", f="RROCK20" }, -- Bookshelf side texture, 64x128 + + -- Brick walls + BRIC9GRN = { t="BRIC9GRN", f="FLOOR7_2" }, -- Light green bricks with ledge, 128x128 + BRIC9GRY = { t="BRIC9GRY", f="FLAT5_4" }, -- Gray bricks with ledge, 128x128 + BRIC9TAN = { t="BRIC9TAN", f="FLOOR7_1" }, -- Tan bricks with ledge, 128x128 + BRICEGRN = { t="BRICEGRN", f="FLOOR7_2" }, -- Big green bricks, 128x128 + BRICEGRY = { t="BRICEGRY", f="FLOOR7_1" }, -- Big gray bricks, 128x128 + BRICETAN = { t="BRICETAN", f="RROCK20" }, -- Big tan bricks, 128x128 + + DECO1BLK = { t="DECO1BLK", f="BLACK0" }, -- Decorative black wall bits, 64x128 + DECO1BRN = { t="DECO1BRN", f="FLOOR7_1" }, -- Decorative brown wall bits, 64x128 + DECO1GRN = { t="DECO1GRN", f="FLOOR7_2" }, -- Decorative green wall bits, 64x128 + DECO1GRY = { t="DECO1GRY", f="FLAT1" }, -- Decorative gray wall bits, 64x128 + DECO1RED = { t="DECO1RED", f="FLOOR1_6" }, -- Decorative red wall bits, 64x128 + DECO1TAN = { t="DECO1TAN", f="RROCK20" }, -- Decorative tan wall bits, 64x128 + + -- Decorative brick + ENGRAV1 = { t="ENGRAV1", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Knight) + ENGRAV2 = { t="ENGRAV2", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Cross?) + ENGRAV3 = { t="ENGRAV3", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Cross!) + ENGRAV4 = { t="ENGRAV4", f="FLAT5_4" }, -- Medieval style brick/stone decor, 64x128 (Skull) + ENGRAV5 = { t="ENGRAV5", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x128 (Battle) + ENGRAV6 = { t="ENGRAV6", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x96 (Gathering?) + ENGRAV7 = { t="ENGRAV7", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x96 (Figures) + ENGRAV8 = { t="ENGRAV8", f="FLAT5_4" }, -- Medieval style brick/stone decor, 256x96 (Figures) + + -- NOTE: FLATS USED IN DOOM 64 TEXTURES AT THE MOMENT ARE PLACEHOLDERS!! -A, Nov 12th, 2021 + ------------- + -- DOOM 64 -- + ------------- + + -- Gore, anything bloody + D64BOD01 = { t="D64BOD01", f="CEIL5_1" }, -- Body packed into wall, skeletonized, 32x128 + + -- Reliefs, misc. details + D64REL01 = { t="D64REL01", f="CEIL5_1" }, -- Lioney relief, 64x64 + D64REL02 = { t="D64REL02", f="CEIL5_1" }, -- Evil looking face, 64x64 + D64REL03 = { t="D64REL03", f="CEIL5_1" }, + D64REL04 = { t="D64REL04", f="CEIL5_1" }, -- Evil looking face, 64x64 + D64REL05 = { t="D64REL05", f="CEIL5_1" }, -- Evil looking face, 64x64 (similar to 04) + D64REL06 = { t="D64REL06", f="CEIL5_1" }, -- Evil looking face, 64x64 + D64REL07 = { t="D64REL07", f="CEIL5_1" }, -- Evil looking face, 64x64 + D64REL08 = { t="D64REL08", f="CEIL5_1" }, -- Pentagram on dark stone, 64x64 + D64REL09 = { t="D64REL09", f="FLAT5_5" }, -- "Arrow" fleshy thing pointing right, 128x32 (for scrollers) + D64REL10 = { t="D64REL10", f="FLAT5_5" }, -- "Arrow" fleshy thing pointing left, 128x32 (for scrollers) + + -- Support beams and such + D64SUP01 = { t="D64SUP01", f="CEIL5_1" }, -- Evil looking support beam, similar look to D64REL02, 32x128 + D64SUP02 = { t="D64SUP02", f="CEIL5_1" }, -- Stone support with curvy relief, 32x128 + D64SUP03 = { t="D64SUP03", f="CEIL5_1" }, -- Skeletony face-like support beam, 32x128 + D64SUP04 = { t="D64SUP04", f="CEIL5_2" }, -- Riveted metal support beam, 16x128 + D64SUP05 = { t="D64SUP05", f="CEIL5_2" }, -- Riveted metal support beam with relief indentations, 16x128 + D64SUP06 = { t="D64SUP06", f="CEIL5_2" }, -- Dark riveted metal support beam, 16x128 + D64SUP07 = { t="D64SUP07", f="CEIL5_1" }, -- Stone engraved pillar, 32x128 + D64SUP08 = { t="D64SUP08", f="CEIL5_1" }, -- Draconic looking pillar, 32x128 + + -- Animated walls + D64ANM1A = { t="D64ANM1A", f="FLOOR7_2" }, -- Evil face anim 1 of 3, 64x64. This one needs similar timing like in Doom 64! + D64ANM1B = { t="D64ANM1B", f="FLOOR7_2" }, -- Evil face anim 2 of 3, 64x64 + D64ANM1C = { t="D64ANM1C", f="FLOOR7_2" }, -- Evil face anim 3 of 3, 64x64 + + -- Animated floors + D64TEL01 = { t="BROWNHUG", f="D64TEL01" }, -- Hellish teleporter + D64TEL02 = { t="BROWNHUG", f="D64TEL02" }, -- Hellish teleporter + D64TEL03 = { t="BROWNHUG", f="D64TEL03" }, -- Hellish teleporter + D64TEL04 = { t="BROWNHUG", f="D64TEL04" }, -- Hellish teleporter + + + + -- ------------------ -- + -- END DOOM 64 STUFF -- + -- ------------------ -- + + -------------------- + -------------------- + --- Extra floors --- + -------------------- + -------------------- + + -- Organic + BODIESFL = { f="BODIESFL", t="BODIESB" }, + BODIESF2 = { f="BODIESF2", t="BODIESC" }, + FASHBLU = { f="FASHBLU", t="LAVBLUE1" }, -- These four are to accompany the colored FIRELAVAs.. + FASHGREN = { f="FASHGREN", t="LAVGREN1" }, + FASHWITE = { f="FASHWITE", t="LAVWHIT1" }, + FASHBLAK = { f="FASHBLAK", t="LAVBLAK1" }, + + -- Carpet + CARPET1 = { t="PANNYA", f="CARPET1" }, + CARPET2 = { t="WOOD1", f="CARPET2" }, + CARPET3 = { t="PANNYA", f="CARPET3" }, + CARPET4 = { t="WOOD3", f="CARPET4" }, + CARPET5 = { t="WOOD1", f="CARPET5" }, + CARPET6 = { t="WOOD1", f="CARPET6" }, + CARPET7 = { t="WOODVERT", f="CARPET7" }, + CARPET8 = { t="WOODVERT", f="CARPET8" }, + + -- Various Decayed Tech Flooring / etc + DARKF01 = { t="BROWNGRN", f="DARKF01" }, + DARKF02 = { t="BROWNGRN", f="DARKF02" }, + DARKF03 = { t="METL01", f="DARKF03" }, + FLOOR46D = { t="PIPEDRK1", f="FLOOR46D" }, + FLOOR46E = { t="PIPEDRK1", f="FLOOR46E" }, + FLAT15 = { t="COMPRED", f="FLAT15" }, + FLOOR1_2 = { f="FLOOR1_2", t="COMPRED" }, + FLOOR4_7 = { f="FLOOR4_7", t="STARGR1" }, + FLOOR51C = { f="FLOOR51C", t="METAL1" }, + FLOOR7_3 = { f="FLOOR7_3", t="GOTH11" }, + + -- Egypt + EG01 = { t="EGYPT03", f="EG01" }, + EG02 = { t="STONE6", f="EG02" }, + EG03 = { t="EGYPT03", f="EG03" }, + EG04 = { t="STONE6", f="EG04" }, + EG05 = { t="EGYPT04", f="EG05" }, + EG06 = { t="BRIKS06", f="EG06" }, + SAND1 = { t="ESAND1", f="SAND1" }, + SAND2 = { t="ESAND2", f="SAND2" }, + SAND3 = { t="DESROCK2", f="SAND3" }, + SAND4 = { t="DESROCK3", f="SAND4" }, + SAND5 = { t="DESROCK4", f="SAND5" }, + SAND6 = { t="DESROCK2", f="SAND6" }, + SAND7 = { t="DESROCK5", f="SAND7" }, + + -- Gothic + G01 = { t="GOTH34", f="G01" }, --Dark brown BRICK8-9 bricks + G02 = { t="THATCH2", f="G02" }, --Dark brown thatch pattern + G03 = { t="THATCH1", f="G03" }, --Brown thatch pattern + G04 = { t="GOTH16", f="G04" }, --Dark metal with 4 rivets + G05 = { t="GOTH26", f="G05" }, --Black carpety tiled floor + G06 = { t="GOTH23", f="G06" }, --Black tiles + G07 = { t="GOTH25", f="G07" }, --Black riveted floor + G08 = { t="GOTH27", f="G08" }, --Black riveted floor with darker rivets + G09 = { t="GOTH36", f="G09" }, --Dark brown 4 square metal/bricks + G10 = { t="GOTH25", f="G10" }, --Same as G09 but with rivets + G11 = { t="GOTH09", f="G11" }, --Black rocks + G12 = { t="GOTH25", f="G12" }, --Gray bricks + G13 = { t="GOTH08", f="G13" }, --Bloody red bricks + G14 = { t="GOTH25", f="G14" }, --Lighter version of G09, + G15 = { t="GOTH23", f="G15" }, --Darker black tiles + G16 = { t="GOTH17", f="G16" }, --Horizontal metal + G17 = { t="GOTH18", f="G17" }, --Vertical metal + G18 = { t="GOTH15", f="G18" }, --Metal squares + G19 = { t="GOTH26", f="G19" }, --Black wavey floor + G20 = { t="GOTH10", f="G20" }, --Green bricks + G21 = { t="GOTH44", f="G21" }, --Olive tiles + + -- Glass + GGLAS01 = { t="GLASS9", f="GGLAS01" }, + GGLAS02 = { t="GLASS9", f="GGLAS02" }, + + --Most of Gothic lights are red + GLITE01 = { t="METL01", f="GLITE01" }, + GLITE02 = { t="METAL", f="GLITE02" }, + GLITE03 = { t="METL01", f="GLITE03" }, + GLITE04 = { t="METL01", f="GLITE04" }, + GLITE05 = { t="METL01", f="GLITE05" }, --Orange + GLITE06 = { t="METL01", f="GLITE06" }, + GLITE07 = { t="METL01", f="GLITE07" }, --Green + GLITE08 = { t="METL01", f="GLITE08" }, --White + GLITE09 = { t="METL01", f="GLITE09" }, --Blue + ---- recolored vresions of GLITE05 + T_GLT5BL = { t="METL01", f="T_GLT5BL" }, --Blue + T_GLT5RD = { t="METL01", f="T_GLT5RD" }, --Red + T_GLT5WT = { t="METL01", f="T_GLT5WT" }, --White + T_GLT5YL = { t="METL01", f="T_GLT5YL" }, --Yellow + T_GLT5GN = { t="METL01", f="T_GLT5GN" }, --Green + + -- Metal / Rust + DARKM01 = { t="DARKMET1", f="DARKM01" }, + GMET01 = { t="METL02", f="GMET01" }, + GMET02 = { t="METL02", f="GMET02" }, --Rivets + GMET03 = { t="METL02", f="GMET03" }, --Less rivets + GMET04 = { t="GOTH32", f="GMET04" }, + GMET05 = { t="GOTH15", f="GMET05" }, + GMET06 = { t="GOTH15", f="GMET06" }, + GMET07 = { t="METL01", f="GMET07" }, + MEM01 = { t="HELMET2", f="MEM01" }, + + -- Bricks + BLACK0 = { t="ALTASH", f="BLACK0" }, + BRIK01 = { t="BRIKS06", f="BRIK01" }, + GSTN01 = { t="GOTH07", f="GSTN01" }, --Gray + GSTN02 = { t="GOTH07", f="GSTN02" }, --Dark gray + GSTN03 = { t="GOTH02", f="GSTN03" }, --Dark brown bricks/bronze plates + GSTN04 = { t="GOTH07", f="GSTN04" }, --Light brown + GSTN05 = { t="GOTH07", f="GSTN05" }, --Multicolored brown + URB1 = { f="URB1", t="URBAN1" }, + URB2 = { f="URB2", t="URBAN2" }, + + -- Rock + RROCK14Z = { f="RROCK14Z", t="BRIKS09" }, --Gray version + RROCK21 = { f="RROCK21", t="TEKGRY01" }, --Grayscale version of RROCK20, + + -- Wood flooring + GWOD01 = { t="WOOD1", f="GWOD01" }, -- Tiles poorly + GWOD02 = { t="WOOD1", f="GWOD02" }, -- Tiles poorly + GWOD03 = { t="WD01", f="GWOD03" }, + GWOD04 = { t="WD02", f="GWOD04" }, + WOODTIL = { t="WD03", f="WOODTIL" }, + WOODTI2 = { t="WD04", f="WOODTI2" }, + + -- Marble + BMARB1 = { t="KMARBLE1", f="BMARB1" }, + BMARB2 = { t="KMARBLE2", f="BMARB2" }, + BMARB3 = { t="KMARBLE1", f="BMARB3" }, + RMARB1 = { t="REDMARB1", f="RMARB1" }, + RMARB2 = { t="REDMARB3", f="RMARB2" }, + RMARB3 = { t="REDMARB2", f="RMARB3" }, + + -- Grating + GRATE1 = { t="METL01", f="GRATE1" }, + GRATE2 = { t="METL01", f="GRATE2" }, + GRATE3 = { t="METL01", f="GRATE3" }, + GRATE4 = { t="METL01", f="GRATE4" }, + GRATE5 = { t="METL01", f="GRATE5" }, + GRATE6 = { t="METL01", f="GRATE6" }, + GRATE7 = { t="METL01", f="GRATE7" }, + GRATE8 = { t="METL01", f="GRATE8" }, + + -- Overhead Lights + LITBL3F1 = { t="COMPSPAN", f="LITBL3F1" }, + LITBL3F2 = { t="COMPSPAN", f="LITBL3F2" }, + LITE4F1 = { t="SHAWN2", f="LITE4F1" }, + LITE4F2 = { t="SHAWN2", f="LITE4F2" }, + LITES01 = { t="METL01", f="LITES01" }, + LITES02 = { t="METL01", f="LITES02" }, + LITES03 = { t="METL01", f="LITES03" }, + LITES04 = { t="METL01", f="LITES04" }, + LIGHTS1 = { t="METL01", f="LIGHTS1" }, + LIGHTS2 = { t="METL01", f="LIGHTS2" }, + LIGHTS3 = { t="METL01", f="LIGHTS3" }, + LIGHTS4 = { t="METL01", f="LIGHTS4" }, + PLITE1 = { f="PLITE1", t="COMPSPAN" }, + TLITE5_1 = { f="TLITE5_1", t="COMPSPAN" }, + TLITE5_2 = { f="TLITE5_2", t="COMPSPAN" }, + TLITE5_3 = { f="TLITE5_3", t="COMPSPAN" }, + TLITE65B = { f="TLITE65B", t="COMPSPAN" }, + TLITE65G = { f="TLITE65G", t="COMPSPAN" }, + TLITE65O = { f="TLITE65O", t="COMPSPAN" }, + TLITE65P = { f="TLITE65P", t="COMPSPAN" }, + TLITE65W = { f="TLITE65W", t="COMPSPAN" }, + TLITE65Y = { f="TLITE65Y", t="COMPSPAN" }, + + -- Quake + QFLAT01 = { t="BRIKS07", f="QFLAT01" }, + QFLAT02 = { t="BRIKS07", f="QFLAT02" }, + QFLAT03 = { t="BRIKS07", f="QFLAT03" }, + QFLAT04 = { t="BRIKS07", f="QFLAT04" }, + QFLAT05 = { t="BRIKS03", f="QFLAT05" }, + QFLAT06 = { t="BRIKS03", f="QFLAT06" }, + QFLAT07 = { t="BRIKS07", f="QFLAT07" }, + QFLAT09 = { t="METL01", f="QFLAT09" }, + QFLAT10 = { t="METAL1", f="QFLAT10" }, + + -- Various shiny floors + SHINY01 = { t="SHAWN2", f="SHINY01" }, + SHINY02 = { t="SHAWN2", f="SHINY02" }, + SHINY03 = { t="HEX01", f="SHINY02" }, + SHINY04 = { t="SHAWN2", f="SHINY04" }, + + -- Snow and Ice + SNOW1 = { t="SNOW10", f="SNOW1" }, --Snow + SNOW2 = { t="ICEFALL", f="SNOW2" }, --Ice + SNOW3 = { t="SNOW05", f="SNOW3" }, --Snowy stone + SNOW4 = { t="SNOW01", f="SNOW4" }, --Snowy stone + SNOW5 = { t="SNOW03", f="SNOW5" }, --Snowy wall + SNOW6 = { t="SNOW10", f="SNOW6" }, --Snow + SNOW7 = { t="SNOW10", f="SNOW7" }, --Snow + SNOW8 = { t="SNOW10", f="SNOW8" }, --Snow + SNOW9 = { t="ICEFALL", f="SNOW9" }, --Ice + SNOW10F = { t="SNOW10", f="SNOW10F" }, -- Named like this to avoid texture conflict of the same name + SNOW11F = { t="SNOW12", f="SNOW11F" }, + SNOW12F = { t="SNOW15", f="SNOW12F" }, + SNOW13F = { t="SNOW13", f="SNOW13F" }, + SNOW14F = { t="SNOW10", f="SNOW14F" }, + SNOWBRIK = { t="SNOW01", f="SNOWBRIK" }, + SNOWROCK = { t="SNOW12", f="SNOWROCK" }, + SNOWSTON = { t="SNOW14", f="SNOWSTON" }, + + -- Dirt/Ground/Grass + GROUND01 = { t="DESROCK2", f="GROUND01" }, -- Deadish looking grass + GROUND02 = { t="DESROCK2", f="GROUND02" }, -- Same as GROUND01, but less tile friendly + GROUND03 = { t="DESROCK3", f="GROUND03" }, -- Grass + GROUND04 = { t="DESROCK5", f="GROUND04" }, -- Less saturated grass + + -- Tech flats + CEIL4_4 = { f="CEIL4_4", t="COMPBLUE" }, + GRENFLOR = { f="GRENFLOR", t="COMPGREN" }, + GRNLITE2 = { f="GRNLITE2", t="TEKGRN01" }, + ORANFLOR = { f="ORANFLOR", t="COLLITE2" }, + STARBR2F = { t="STARBR2", f="STARBR2F" }, -- Unused + STARG1F = { t="STARG1", f="STARG1F" }, -- Unused + STARGRF = { t="STARG1", f="STARGRF" }, -- Unused + STARTANF = { t="STARTAN2", f="STARTANF" }, -- Currently unused + TEK1 = { t="TEKWALL8", f="TEK1" }, + TEK2 = { t="TEKWALL9", f="TEK2" }, + TEK3 = { t="TEKWALLA", f="TEK3" }, + TEK4 = { t="TEKWALLB", f="TEK4" }, + TEK5 = { t="TEKWALLC", f="TEK5" }, + TEK6 = { t="TEKWALLD", f="TEK6" }, + TEK7 = { t="TEKWALLE", f="TEK7" }, + TEKFLR4 = { t="TEKWALL4", f="TEKFLR4" }, + + -- Tiles + FFLAT01 = { t="GRAY8", f="FFLAT01" }, + TILES1 = { t="STARGRY1", f="TILES1" }, + TILES2 = { t="BROWN1", f="TILES2" }, + TILES3 = { t="STUC01", f="TILES3" }, + TILES4 = { t="GRAY1", f="TILES4" }, + TILES5 = { t="STARGRY1", f="TILES5" }, + TILES6 = { t="GRAY5", f="TILES6" }, + + -- Teleporter pads + + GATE4BL = { f="GATE4BL", t="METAL" }, -- Blue + GATE4MG = { f="GATE4MG", t="METAL" }, -- Magenta + GATE4OR = { f="GATE4OR", t="METAL" }, -- Orange + GATE4PU = { f="GATE4PU", t="METAL" }, -- Purple + GATE4RD = { f="GATE4RD", t="METAL" }, -- Red, just brighter + GATE4TN = { f="GATE4TN", t="METAL" }, -- Skin-like + + -- Asphalt + ROAD1 = { f="ROAD1", t="STONE2" }, -- Consult New_Road.wad for its use! + ROAD2 = { f="ROAD2", t="BRIKS04" }, + ROAD3 = { f="ROAD3", t="BIGSTONE" }, + ROAD4 = { f="ROAD4", t="BRIKS05" }, + + -- Miscellaneous + REVAPPEA = { t="REVAPPEA", f="CEIL5_1" }, -- Spooky! Meant for walls and such + +--------------------------------------------------------------- +-- Overwriting existing flats to use new patches for textures +--------------------------------------------------------------- + + WFALL1 = { t="WFALL1", f="FWATER1", sane=1 }, + FWATER1 = { t="WFALL1", f="FWATER1", sane=1 }, + + LFALL1 = { t="LFALL1", f="LAVA1", sane=1 }, --FIREMAG1, + + BFALL1 = { t="BFAL1", f="BLOOD1", sane=1 }, + BLOOD1 = { t="BFAL1", f="BLOOD1", sane=1 }, + + SFALL1 = { t="NFALL1", f="NUKAGE1", sane=1 }, + NUKAGE1 = { t="NFALL1", f="NUKAGE1", sane=1 }, + + KFALL1 = { t="SLMFALL1", f="SLIME01", sane=1 }, -- new patches + KFALL5 = { t="SLMFALL1", f="SLIME05", sane=1 }, + SLIME01 = { t="SLMFALL1", f="SLIME01", sane=1 }, + SLIME05 = { t="SLMFALL1", f="SLIME05", sane=1 }, + + FLOOR6_2 = { f="FLOOR6_2", t="ASH05" }, + + ------------------------- + -- New animated floors -- + ------------------------- + + FAN1 = { f="FAN1", t="METAL" }, -- Ceiling fan + + FIRELAF1 = { t="FIREBLU1", f="FIRELAF1" }, + FIRELAF2 = { t="FIREBLU2", f="FIRELAF2" }, + + ---------------------------------------- + -- End new animated non-liquid floors -- + ---------------------------------------- + + -- New liquids -- + + SLUDGE01 = { t="GRYFALL1", f="SLUDGE01", sane=1 }, + MAGMA1 = { t="MFALL1", f="MAGMA1", sane=1 }, + SNOW9 = { t="ICEFALL", f="SNOW9", sane=1 }, --Ice + OSLIME01 = { t="OFALL1", f="OSLIME01", sane=1 }, + XLAV1 = { t="LFALL1", f="XLAV1", sane=1 }, + QLAVA1 = { t="LFAL21", f="QLAVA1", sane=1 }, + PURW1 = { t="PURFAL1", f="PURW1", sane=1 }, + + -- Warning Strip -- + WARN1 = { t="WARN1", f="WARN2" }, + WARN2 = { t="WARN2", f="WARN1" }, + + ----------------------------------- + -- Walls as flats and vice versa -- + ----------------------------------- + + XDARKMET = { t="DARKMET1", f="DARKMET1" }, + XGRATE7 = { t="GRATE7", f="GRATE7" }, + XGREEN01 = { t="GREEN01", f="GREEN01" }, + + XSKIN3 = { t="SKIN3", f="SKIN3" }, + XSKIN4 = { t="SKIN4", f="SKIN4" }, + XHELLCMT = { t="HELLCMT7", f="HELLCMT7" }, + XQFLAT07 = { t="QFLAT07", f="QFLAT07" }, + + -- liquids + + XMFALL1 = { t="MFALL1", f="MFALL1" }, + + ------------------ + -- Craneo Stuff -- + ------------------ + + BANKDOOR = { t="BANKDOOR", f="FLAT23"}, + MONYFRON = { t="MONYFRON", f="MONYFLAT"}, + MONYSIDE = { t="MONYSIDE", f="MONYFLAT"}, + MONYFLAT = { t="MONYFRON", f="MONYFLAT"}, + + CREYEWLL = { t="CREYEWLL", f="FLAT15"}, -- red skin wall with eyes + CRFSHWLL = { t="CRFSHWLL", f="FLAT15"}, -- red flesh wall + CRGRSWLL = { t="CRGRSWLL", f="FLAT5_5"}, -- brown flesh wall with lacerations + CRHRTWLL = { t="CRHRTWLL", f="FLAT15"}, -- red flesh wall with lacerations + + -- Craneo's arcade machine screens + ARCD2 = { t="ARCD2", f="CEIL4_3"}, + ARCD3 = { t="ARCD3", f="CEIL4_3"}, + ARCD4 = { t="ARCD4", f="CEIL4_3"}, + ARCD5 = { t="ARCD5", f="CEIL4_3"}, + ARCD6 = { t="ARCD6", f="CEIL4_3"}, + ARCD7 = { t="ARCD7", f="CEIL4_3"}, + ARCD8 = { t="ARCD8", f="CEIL4_3"}, + ARCD9 = { t="ARCD9", f="CEIL4_3"}, + ARCD10 = { t="ARCD10", f="CEIL4_3"}, + ARCD11 = { t="ARCD11", f="CEIL4_3"}, + + -- Craneo's classical painting textures + CPAQLRRE = { t="CPAQLRRE", f="CEIL4_3"}, + CPFLAYIN = { t="CPFLAYIN", f="CEIL4_3"}, + CPGARDEN = { t="CPGARDEN", f="CEIL4_3"}, + CPGARDN2 = { t="CPGARDN2", f="CEIL4_3"}, + CPMEDUS = { t="CPMEDUS", f="CEIL4_3"}, + CPHEGOAT = { t="CPHEGOAT", f="CEIL4_3"}, + CPHLLDEM = { t="CPHLLDEM", f="CEIL4_3"}, + CPHRSEMN = { t="CPHRSEMN", f="CEIL4_3"}, + CPHRSMN2 = { t="CPHRSMN2", f="CEIL4_3"}, + CPSATRN = { t="CPSATRN", f="CEIL4_3"}, + CPVLAD = { t="CPVLAD", f="CEIL4_3"}, + CPPAINT1 = { t="CPPAINT1", f="CEIL4_3"}, + CPPAINT2 = { t="CPPAINT2", f="CEIL4_3"}, + CPPAINT3 = { t="CPPAINT3", f="CEIL4_3"}, + CPPAINT4 = { t="CPPAINT4", f="CEIL4_3"}, + CPPAINT5 = { t="CPPAINT5", f="CEIL4_3"}, + CPPAINT6 = { t="CPPAINT6", f="CEIL4_3"}, + + -- Craneo's wall of guns + CRGNRCK1 = { t="CRGNRCK1", f="FLAT19"}, -- wall of vanilla weapons + CRGNRCK2 = { t="CRGNRCK2", f="FLAT19"}, -- wall of non-canonical weapons + CRGNRCK3 = { t="CRGNRCK3", f="FLAT19"}, -- empty wall + + ----------------------------------- + -- Demiosis and Craneo's adverts -- + ----------------------------------- + + ADVCR1 = { t="ADVCR1", f="CEIL4_3"}, + ADVCR2 = { t="ADVCR2", f="CEIL4_3"}, + ADVCR3 = { t="ADVCR3", f="CEIL4_3"}, + ADVCR4 = { t="ADVCR4", f="CEIL4_3"}, + ADVCR5 = { t="ADVCR5", f="CEIL4_3"}, + ADVDE1 = { t="ADVDE1", f="CEIL4_3"}, + ADVDE2 = { t="ADVDE2", f="CEIL4_3"}, + ADVDE3 = { t="ADVDE3", f="CEIL4_3"}, + ADVDE4 = { t="ADVDE4", f="CEIL4_3"}, + ADVDE5 = { t="ADVDE5", f="CEIL4_3"}, + ADVDE6 = { t="ADVDE6", f="CEIL4_3"}, + ADVDE7 = { t="ADVDE7", f="CEIL4_3"}, + + + ---------------------------------------------- + -- Demiosis decorative tags/bloody writings -- + ---------------------------------------------- + + TAG1 = { t="TAG1", f="CEIL4_3"}, + TAG2 = { t="TAG2", f="CEIL4_3"}, + TAG3 = { t="TAG3", f="CEIL4_3"}, + TAG4 = { t="TAG4", f="CEIL4_3"}, + TAG5 = { t="TAG5", f="CEIL4_3"}, + TAG6 = { t="TAG6", f="CEIL4_3"}, + TAG7 = { t="TAG7", f="CEIL4_3"}, + TAG8 = { t="TAG8", f="CEIL4_3"}, + TAG9 = { t="TAG9", f="CEIL4_3"}, + TAG10 = { t="TAG10", f="CEIL4_3"}, + TAG11 = { t="TAG11", f="CEIL4_3"}, + TAGS1 = { t="TAGS1", f="CEIL4_3"}, + TAGS2 = { t="TAGS2", f="CEIL4_3"}, + TAGS3 = { t="TAGS3", f="CEIL4_3"}, + TAGS4 = { t="TAGS4", f="CEIL4_3"}, + + ---------------------------------------------- + -- Craneo decorative tags/bloody writings -- + ---------------------------------------------- + + TAGCR1 = { t="TAGCR1", f="CEIL4_3"}, + TAGCR2 = { t="TAGCR2", f="CEIL4_3"}, + TAGCR3 = { t="TAGCR3", f="CEIL4_3"}, + TAGCR4 = { t="TAGCR4", f="CEIL4_3"}, + TAGCR5 = { t="TAGCR5", f="CEIL4_3"}, + TAGCR6 = { t="TAGCR6", f="CEIL4_3"}, + TAGCR7 = { t="TAGCR7", f="CEIL4_3"}, + TAGCR8 = { t="TAGCR8", f="CEIL4_3"}, + TAGCR9 = { t="TAGCR9", f="CEIL4_3"}, + TAGCR10 = { t="TAGCR10", f="CEIL4_3"}, + TAGCR11 = { t="TAGCR11", f="CEIL4_3"}, + TAGCR12 = { t="TAGCR12", f="CEIL4_3"}, + TAGCR13 = { t="TAGCR13", f="CEIL4_3"}, + TAGCR14 = { t="TAGCR14", f="CEIL4_3"}, + TAGCR15 = { t="TAGCR15", f="CEIL4_3"}, + TAGCR16 = { t="TAGCR16", f="CEIL4_3"}, + + + ------------------------ + -- Composite textures -- + ------------------------ + + -- Tech -- + + -- special rails + GDRAIL1 = { t="GDRAIL1", f="CEIL5_1", rail_h=32}, -- is intended for fabs only + + -- Horizontal lights, based on the light bar found in + -- the Doom2 exit door texture + T_HLITE1 = { t="T_HLITE1", f="FLAT23" }, + T_HLITEY = { t="T_HLITEY", f="FLAT23" }, + T_HLITEG = { t="T_HLITEG", f="FLAT23" }, + T_HLITEB = { t="T_HLITEB", f="FLAT23" }, + + -- Recolored CEIL4_3 flats + T_CL43R = { t="COMPRED" , f="T_CL43R" }, + T_CL43Y = { t="SHAWN2" , f="T_CL43Y" }, -- needs yellow variant of COMPBLUE + T_CL43G = { t="COMPGREN" , f="T_CL43G" }, + T_CL43P = { t="SHAWN2" , f="T_CL43P" }, -- needs purple variant of COMPBLUE + + -- Recolored LITE5 + Exit door light + T_VLITER = { t="T_VLITER", f="FLAT23"}, + T_VLITEO = { t="T_VLITEO", f="FLAT23"}, + T_VLITEY = { t="T_VLITEY", f="FLAT23"}, + T_VLITEG = { t="T_VLITEG", f="FLAT23"}, + T_VLITEP = { t="T_VLITEP", f="FLAT23"}, + + -- Recolored LITE5's + T_VSLTER = { t="T_VSLTER", f="FLAT23"}, + T_VSLTEO = { t="T_VSLTEO", f="FLAT23"}, + T_VSLTEY = { t="T_VSLTEY", f="FLAT23"}, + T_VSLTEG = { t="T_VSLTEG", f="FLAT23"}, + T_VSLTEP = { t="T_VSLTEP", f="FLAT23"}, + + -- Sandy Tech floors + T_SDTCH1 = { t="STARTAN1", f = "T_SDTCH1"}, + T_SDTCH2 = { t="METL04", f = "T_SDTCH2"}, + T_SDTCH3 = { t="BRONZE5", f = "T_SDTCH3"}, + T_SDTCH4 = { t="CEM11", f = "T_SDTCH4"}, + T_SDTCH5 = { t="BROWN1", f = "T_SDTCH5"}, + + -- COMPBLUE recolors + COMPYELL = { t="COMPYELL", f = "ORANFLOR"}, -- comp yellow, why more would you wallow!? + + -- Gothic -- + + -- Light trims + T_GTHLY = { t="T_GTHLY", f="G04" }, + T_GTHLG = { t="T_GTHLG", f="G04" }, + T_GTHLB = { t="T_GTHLB", f="G04" }, + T_GTHLP = { t="T_GTHLP", f="G04" }, + + -- Quad lights + T_GHFLY = { t="G16", f="T_GHFLY" }, + T_GHFLB = { t="G16", f="T_GHFLB" }, + T_GHFLG = { t="G16", f="T_GHFLG" }, + T_GHFLP = { t="G16", f="T_GHFLP" }, + + ------------- + -- DUKETEX -- + ------------- + + -- store shelves + DNSTOR01 = { t="DNSTOR01", f="CEIL5_2"}, + DNSTOR02 = { t="DNSTOR02", f="CEIL5_2"}, + DNSTOR03 = { t="DNSTOR03", f="CEIL5_2"}, + DNSTOR04 = { t="DNSTOR04", f="CEIL5_2"}, + DNSTOR05 = { t="DNSTOR05", f="CEIL5_2"}, + DNSTOR06 = { t="DNSTOR06", f="CEIL5_2"}, + DNSTOR07 = { t="DNSTOR07", f="CEIL5_2"}, + DNSTOR08 = { t="DNSTOR08", f="CEIL5_2"}, + DNSTOR09 = { t="DNSTOR09", f="CEIL5_2"}, + DNSTOR10 = { t="DNSTOR10", f="CEIL5_2"}, + DNSTOR11 = { t="DNSTOR11", f="CEIL5_2"}, + DNSTOR12 = { t="DNSTOR12", f="CEIL5_2"}, + DNSTOR13 = { t="DNSTOR13", f="CEIL5_2"}, + DNSTOR20 = { t="DNSTOR20", f="CEIL5_2"}, + DNSTOR21 = { t="DNSTOR21", f="CEIL5_2"}, + + -- 8px step + DNSTEP01 = { t="DNSTEP01", f="FLAT5_4"}, + + ------------------ + -- MSSP Stuff -- + ------------------ + + -- MSSP-TECH -- + -- silver walls (256px) + OBTBSLV1 = { t="OBTBSLV1", f="GRATE1"}, + OBTBSLV2 = { t="OBTBSLV2", f="SHINY02"}, + OBTBSLV3 = { t="OBTBSLV3", f="SHINY04"}, + OBTBSLV4 = { t="OBTBSLV4", f="SHINY03"}, + OBTBSLV5 = { t="OBTBSLV5", f="FLAT3"}, + + -- silver wall, bronze-framed (256px) + OBTSVBZ1 = { t="OBTSVBZ1", f="G8_BRNF1"}, + OBTSVBZ2 = { t="OBTSVBZ2", f="G8_BRNF2"}, + OBTSVBZ3 = { t="OBTSVBZ3", f="G8_BRNF3"}, + + -- silver walls (128px) + OBTBSTX1 = { t="OBTBSTX1", f="SHINY03"}, + OBTBSTX2 = { t="OBTBSTX2", f="GRATE1"}, + OBTBSTX3 = { t="OBTBSTX3", f="GRATE6"}, + + OBTSTX1B = { t="OBTSTX1B", f="STARTANF"}, -- brown recolor composite + OBTSTX1G = { t="OBTSTX1G", f="STARG1F"}, -- green recolor composite + + -- techy brown walls (128px) + G8_BRNW1 = { t="G8_BRNW1", f="SLIME16"}, + G8_BRNW2 = { t="G8_BRNW2", f="FLOOR4_1"}, + G8_BRNW3 = { t="G8_BRNW3", f="FLOOR4_5"}, + + G8_BR1GY = { t="G8_BRNW1", f="GRATE2"}, -- grey recolor composite + G8_BR2GY = { t="G8_BRNW2", f="FLOOR4_8"}, + G8_BR3GY = { t="G8_BRNW3", f="G15"}, + + -- techy brick walls (256px) + OBTBSLB1 = { t="OBTBSLB1", f="SHINY03"}, + OBTBSLB2 = { t="OBTBSLB2", f="FLOOR4_8"}, + OBTBSLB3 = { t="OBTBSLB3", f="SLIME14"}, + OBTBSLB4 = { t="OBTBSLB4", f="SLIME15"}, + OBTBSLB5 = { t="OBTBSLB5", f="MFLR8_1"}, + + OBTBSB2B = { t="OBTBSB2B", f="FLOOR5_3"}, -- brown color composite + OBTBSB3B = { t="OBTBSB3B", f="SLIME16"}, + OBTBSB4B = { t="OBTBSB4B", f="FLOOR4_1"}, + OBTBSB5B = { t="OBTBSB5B", f="FLAT5"}, + + OBTSBGRE = { t="OBTSBGRE", f="DARKF02"}, -- bloodied version of the hex bricks + + -- custom cement walls (128px) + OBTBCEM1 = { t="OBTBCEM1", f="FLOOR3_3"}, + OBTBCEM2 = { t="OBTBCEM2", f="SLIME16"}, + OBTBCEM3 = { t="OBTBCEM3", f="DEM1_6"}, + + OBTBCMR1 = { t="OBTBCMR1", f="RMARB2"}, + OBTBCMR2 = { t="OBTBCMR2", f="FLAT15"}, + OBTBCMR3 = { t="OBTBCMR3", f="GMET02"}, + + -- silver flats (128px) + OBTBSFL1 = { t="OBTBSLV1", f="OBTBSFL1"}, --< metal grates + OBTBSFL2 = { t="OBTBSLV2", f="OBTBSFL2"}, + OBTBSFL3 = { t="OBTBSTX1", f="OBTBSFL3"}, + + OBTSVBF1 = { t="OBTBSLB2", f="OBTSVBF1"}, --< brick + OBTSVBF2 = { t="OBTBSLB3", f="OBTSVBF2"}, + OBTSVBF3 = { t="OBTBSLB4", f="OBTSVBF3"}, + + G8_BRNF1 = { t="G8_BRNW1", f="G8_BRNF1"}, --< brown floors/ceils + G8_BRNF2 = { t="G8_BRNW3", f="G8_BRNF2"}, + G8_BRNF3 = { t="G8_BRNW2", f="G8_BRNF3"}, + + OBTSBF1B = { t="OBTBSB3B", f="OBTSBF1B"}, -- brown color composite + OBTSBF2B = { t="OBTBSB4B", f="OBTSBF2B"}, + OBTSBF3B = { t="OBTBSB5B", f="OBTSBF3B"}, + + OBTSBF1R = { t="HELLCMT1", f="OBTSBF1R"}, -- red + OBTSBF2R = { t="HELLCMT2", f="OBTSBF2R"}, + OBTSBF3R = { t="REDMARB1", f="OBTSBF3R"}, + + -- 256-wide doors + G8_SVDR3 = { t="G8_SVDR3", f="FLAT23"}, + + -- it unfortunately needs to be said. + G7DODSLS = { t="G7DODSLS", f="FLAT23"}, + + NAHIDA = { t="NAHIDA", f="FLAT23"}, + BATHWTR1 = { t="BATHWTR1", f="FLAT23"}, + BATHWTR2 = { t="BATHWTR2", f="FLAT23"}, + + ---------------------- + -- Special Textures -- + ---------------------- + FINVSBLE = { t="FINVSBLE", f="FINVSBLE"}, + + -- Flats as walls and vice versa, resource pack edition + XG19 = { t="G19", f="G19" }, + X_COMPBL = { t="COMPBLUE", f="COMPBLUE" }, + X_ORANFL = { t="ORANFLOR", f="ORANFLOR" }, + X_BRICK4 = { t="BRICK4", f="BRICK4" }, + X_FLOOR7 = { t="FLOOR7_3", f="FLOOR7_3" }, + XCARPET5 = { t="CARPET5", f="CARPET5" } +} + +OBS_RESOURCE_PACK_ANIMDEFS = +[[ +// Animations for Obsidian Resource Pack: + + texture CGCANI00 + allowdecals + pic CGCANI00 tics 1.5 + pic CGCANI01 tics 1.5 + pic CGCANI02 tics 1.5 + pic CGCANI03 tics 1.5 + pic CGCANI04 tics 1.5 + pic CGCANI05 tics 1.5 + pic CGCANI06 tics 1.5 + pic CGCANI07 tics 1.5 + + texture DECMP04A + allowdecals + pic DECMP04A tics 2 + pic DECMP04B tics 2 + pic DECMP04C tics 2 + pic DECMP04D tics 2 + pic DECMP04E tics 2 + pic DECMP04F tics 2 + pic DECMP04G tics 2 + pic DECMP04H tics 2 + pic DECMP04B tics 2 + + texture TVSNOW01 + allowdecals + pic TVSNOW01 tics 2 + pic TVSNOW02 tics 2 + pic TVSNOW03 tics 2 + + texture COMPFUZ1 + allowdecals + pic COMPFUZ1 tics 2 + pic COMPFUZ2 tics 2 + pic COMPFUZ3 tics 2 + pic COMPFUZ4 tics 2 + + texture COMPY1 + allowdecals + pic COMPY1 tics 4 + pic COMPY2 tics 4 + pic COMPY3 tics 4 + pic COMPY2 tics 4 + + texture CANDLE1 + pic CANDLE1 tics 4 + pic CANDLE2 tics 4 + pic CANDLE3 tics 4 + + // Black FIRELAVA + Texture LAVBLAK1 + allowdecals + pic LAVBLAK1 tics 8 + pic LAVBLAK2 tics 8 + + // Blue FIRELAVA + Texture LAVBLUE1 + allowdecals + pic LAVBLUE1 tics 8 + pic LAVBLUE2 tics 8 + + // Green FIRELAVA + Texture LAVGREN1 + allowdecals + pic LAVGREN1 tics 8 + pic LAVGREN2 tics 8 + + // White FIRELAVA + Texture LAVWHIT1 + allowdecals + pic LAVWHIT1 tics 8 + pic LAVWHIT2 tics 8 + + // Black FIREBLU1 + Texture FIREBLK1 + allowdecals + pic FIREBLK1 tics 8 + pic FIREBLK2 tics 8 + + // Doom1 SLADWALL slime fall + texture SLADRIP1 + allowdecals + pic SLADRIP1 tics 6 + pic SLADRIP2 tics 6 + pic SLADRIP3 tics 6 + + //Red version of black GST fontfall + texture KSTFONT1 + allowdecals + pic KSTFONT1 tics 6 + pic KSTFONT2 tics 6 + pic KSTFONT3 tics 6 + + //Green version + texture KSTFNTG1 + allowdecals + pic KSTFNTG1 tics 6 + pic KSTFNTG2 tics 6 + pic KSTFNTG3 tics 6 + + // Broken animated screen + Texture COMPSA1 + allowdecals + range COMPSA30 tics 2 + + // UAC logo screen + Texture COMPSC1 + allowdecals + range COMPSC12 tics 1.5 + + // Multiple broken animated screens + Texture COMPSD1 + allowdecals + range COMPSD8 tics 2 + + Texture NMONIA1 + allowdecals + pic NMONIA1 tics 3 + pic NMONIA2 tics 3 + pic NMONIA3 tics 3 + pic NMONIA4 tics 3 + pic NMONIA5 tics 3 + pic NMONIA6 tics 3 + pic NMONIA7 tics 3 + pic NMONIA8 tics 3 + + // Static screen + Texture NOISE1 + allowdecals + pic NOISE1 tics 1.5 + pic NOISE2 tics 1.5 + pic NOISE3 tics 1.5 + pic NOISE4 tics 1.5 + + // Smaller static screen + Texture NOISE2A + allowdecals + pic NOISE2A tics 1.5 + pic NOISE2B tics 1.5 + pic NOISE2C tics 1.5 + pic NOISE2D tics 1.5 + + // Smaller static screen 2 + Texture NOISE3A + allowdecals + pic NOISE3A tics 1.5 + pic NOISE3B tics 1.5 + pic NOISE3C tics 1.5 + pic NOISE3D tics 1.5 + + //Gray liquid fall + texture GRYFALL1 + pic GRYFALL1 tics 8 + pic GRYFALL2 tics 8 + pic GRYFALL3 tics 8 + pic GRYFALL4 tics 8 + + //Dark gray slime fall + texture OFALL1 + pic OFALL1 tics 8 + pic OFALL2 tics 8 + pic OFALL3 tics 8 + pic OFALL4 tics 8 + + //Brown liquid fall + texture SLMFALL1 + pic SLMFALL1 tics 8 + pic SLMFALL2 tics 8 + pic SLMFALL3 tics 8 + pic SLMFALL4 tics 8 + + //Blood liquid fall + texture BFAL1 + pic BFAL1 tics 8 + pic BFAL2 tics 8 + pic BFAL3 tics 8 + pic BFAL4 tics 8 + + //Green liquid fall + texture NFALL1 + pic NFALL1 tics 8 + pic NFALL2 tics 8 + pic NFALL3 tics 8 + pic NFALL4 tics 8 + + //Lava liquid fall + texture LFALL1 + pic LFALL1 tics 8 + pic LFALL2 tics 8 + pic LFALL3 tics 8 + pic LFALL4 tics 8 + + //Lava liquid fall 2 + texture LFAL21 + pic LFAL21 tics 8 + pic LFAL22 tics 8 + pic LFAL23 tics 8 + pic LFAL24 tics 8 + + //Water liquid fall + texture WFALL1 + pic WFALL1 tics 8 + pic WFALL2 tics 8 + pic WFALL3 tics 8 + pic WFALL4 tics 8 + + //Cooler purple liquid fall + texture PURFAL1 + pic PURFAL1 tics 8 + pic PURFAL2 tics 8 + pic PURFAL3 tics 8 + pic PURFAL4 tics 8 + + //Magma + texture MFALL1 + pic MFALL1 tics 8 + pic MFALL2 tics 8 + pic MFALL3 tics 8 + pic MFALL4 tics 8 + + //Wall copy of FAN1 flat, meant as ventilation + texture DFAN1 + pic DFAN1 tics 1 + pic DFAN2 tics 1 + pic DFAN3 tics 1 + pic DFAN4 tics 1 + + //Broken grocery fridge from Duke Nukem + texture DNSTOR09 + pic DNSTOR09 tics 8 + pic DNSTOR10 tics 8 + pic DNSTOR11 tics 8 + + //These two need definitions because they're solid like normal + //walls, not liquid so decals can be applied to them. + + //Frozen waterfall type 1 + texture ICEFALL + allowdecals + pic ICEFALL tics 8 + pic ICEFALL tics 8 + + //Green crystal + texture GRNSTONE + allowdecals + pic GRNSTONE tics 17 + pic GRNSTON1 tics 2 + pic GRNSTON2 tics 2 + pic GRNSTON3 tics 2 + +// Switches // + + switch doom 3 SW1CHN on pic SW2CHN tics 0 + switch doom 3 SW1GOTH on pic SW2GOTH tics 0 + switch doom 3 SW1QUAK on pic SW2QUAK tics 0 + switch doom 3 SW1SKUL1 on pic SW2SKUL1 tics 0 + switch doom 3 SW1PENT on pic SW2PENT tics 0 + + switch doom 3 SDGTHSW1 on pic SDGTHSW2 tics 0 + +//Crap for flats here + + warp flat LAVA1 + warp flat LAVA2 + warp flat LAVA3 + warp flat LAVA4 + warp2 flat FWATER1 + warp2 flat FWATER2 + warp2 flat FWATER3 + warp2 flat FWATER4 + warp2 flat BLOOD1 + warp2 flat BLOOD2 + warp2 flat BLOOD3 + warp flat NUKAGE1 + warp flat NUKAGE2 + warp flat NUKAGE3 + warp2 flat SLIME01 + warp2 flat SLIME02 + warp2 flat SLIME03 + warp2 flat SLIME04 + warp flat SLIME05 + warp flat SLIME06 + warp flat SLIME07 + warp flat SLIME08 + warp flat SLUDGE01 + warp flat SLUDGE02 + warp flat SLUDGE03 + warp flat SLUDGE04 + warp flat XWATER1 + warp flat XWATER2 + warp flat XWATER3 + warp flat XWATER4 + warp flat QLAVA1 + warp flat QLAVA2 + warp flat QLAVA3 + warp flat QLAVA4 + warp flat MAGMA1 + warp flat MAGMA2 + warp flat MAGMA3 + warp flat MAGMA4 + warp2 flat OSLIME01 + warp2 flat OSLIME02 + warp flat XLAV1 + warp flat XLAV2 + warp flat PURW1 + warp flat PURW2 + + TEXTURE FWATER1 + PIC 1 TICS 1 + PIC 1 TICS 1 + + TEXTURE NUKAGE1 + PIC 1 TICS 1 + PIC 1 TICS 1 + + TEXTURE LAVA1 + PIC 1 TICS 1 + PIC 1 TICS 1 + + TEXTURE BLOOD1 + PIC 1 TICS 1 + PIC 1 TICS 1 + + TEXTURE SLIME01 + PIC 1 TICS 1 + PIC 1 TICS 1 + + TEXTURE SLIME05 + PIC 1 TICS 1 + PIC 1 TICS 1 + + //New + TEXTURE SLUDGE01 + PIC 1 TICS 1 + PIC 1 TICS 1 + + TEXTURE OSLIME01 + PIC 1 TICS 5 + PIC 2 TICS 5 + + TEXTURE QLAVA1 + PIC 1 TICS 8 + PIC 2 TICS 8 + PIC 3 TICS 8 + PIC 4 TICS 8 + + TEXTURE MAGMA1 + PIC 1 TICS 8 + PIC 2 TICS 8 + PIC 3 TICS 8 + PIC 4 TICS 8 + + TEXTURE FIRELAF1 + allowdecals + PIC 1 TICS 8 + PIC 2 TICS 8 + + TEXTURE XLAV1 + PIC 1 TICS 8 + PIC 2 TICS 8 + + TEXTURE PURW1 + PIC 1 TICS 8 + PIC 2 TICS 8 + + TEXTURE FAN1 + PIC 1 TICS 1 + PIC 2 TICS 1 + PIC 3 TICS 1 + PIC 4 TICS 1 +]] + +EPIC_BRIGHTMAPS = +[[brightmap texture COMPSTA3 +{ + map OBRCPST1 +} +brightmap texture COMPSTA4 +{ + map OBRCPST1 +} +brightmap texture COMPSTA5 +{ + map OBRCPST2 +} +brightmap texture COMPSTA6 +{ + map OBRCPST2 +} +brightmap texture COMPSTA7 +{ + map OBRCPST1 +} +brightmap texture COMPSTA8 +{ + map OBRCPST1 +} +brightmap texture COMPSTA9 +{ + map OBRCPST1 +} +brightmap texture COMPSTAA +{ + map OBRCPST1 +} +brightmap texture COMPSTAB +{ + map OBRCPST3 +} + +// shawcomp set + +brightmap texture SHAWCOMP +{ + map OBRSHCP1 +} +brightmap texture CONSOLE3 +{ + map OBRSHCP1 +} +brightmap texture CONSOLE4 +{ + map OBRCNSL4 +} +brightmap texture CONSOLEF +{ + map OBRCNSLF +} +brightmap texture CONSOLEG +{ + map OBRCNSLG +} + +// large single monitors + +brightmap texture COMPCT01 +{ + map OBRCPCT1 +} +brightmap texture COMPCT02 +{ + map OBRCPCT1 +} +brightmap texture COMPCT03 +{ + map OBRCPCT1 +} +brightmap texture COMPCT04 +{ + map OBRCPCT1 +} +brightmap texture COMPCT05 +{ + map OBRCPCT1 +} +brightmap texture COMPCT06 +{ + map OBRCPCT1 +} +brightmap texture COMPCT07 +{ + map OBRCPCT2 +} + +brightmap texture COMPFUZ1 +{ + map CMPFUZBR +} +brightmap texture COMPFUZ2 +{ + map CMPFUZBR +} +brightmap texture COMPFUZ3 +{ + map CMPFUZBR +} +brightmap texture COMPFUZ4 +{ + map CMPFUZBR +} + +brightmap texture CGCANI00 +{ + map CGANIBR +} +brightmap texture CGCANI01 +{ + map CGANIBR +} +brightmap texture CGCANI02 +{ + map CGANIBR +} +brightmap texture CGCANI03 +{ + map CGANIBR +} +brightmap texture CGCANI04 +{ + map CGANIBR +} +brightmap texture CGCANI05 +{ + map CGANIBR +} +brightmap texture CGCANI06 +{ + map CGANIBR +} +brightmap texture CGCANI07 +{ + map CGANIBR +} + + +// silver light variations +brightmap texture SILVER2R +{ + map OBRSLVL +} +brightmap texture SILVER2O +{ + map OBRSLVL +} +brightmap texture SILVER2Y +{ + map OBRSLVL +} +brightmap texture SILVER2W +{ + map OBRSLVL +} +brightmap texture SILVER2G +{ + map OBRSLVL +} + +// vent (the only one that needs a brightmap TBH +brightmap texture COMPVEN2 +{ + map OBRCPVN2 +} + +// vertical lights +brightmap texture LITE2 +{ + map OBRLITE2 +} +brightmap texture LITE96 +{ + map OBRLIT96 +} +brightmap texture LITESTON +{ + map OBRLITSN +} + +// comptiles +brightmap texture COMPTIL2 +{ + map OBRCPTIL +} +brightmap texture COMPTIL3 +{ + map OBRCPTIL +} +brightmap texture COMPTIL4 +{ + map OBRCPTIL +} +brightmap texture COMPTIL5 +{ + map OBRCPTIL +} +brightmap texture COMPTIL6 +{ + map OBRCPTIL +} +brightmap texture GRAYBLU1 +{ + map OBRCPTIL +} +brightmap texture SILVBLU1 +{ + map OBRCPTIL +} +brightmap texture TEKGRBLU +{ + map OBRCPTIL +} + +// monitors with static/noise +brightmap texture NOISE1 +{ + map OBRNOIS1 +} +brightmap texture NOISE2 +{ + map OBRNOIS1 +} +brightmap texture NOISE3 +{ + map OBRNOIS1 +} +brightmap texture NOISE4 +{ + map OBRNOIS1 +} + +// quad monitors +brightmap texture COMPSD1 +{ + map OBRCPSD1 +} +brightmap texture COMPSD2 +{ + map OBRCPSD1 +} +brightmap texture COMPSD3 +{ + map OBRCPSD1 +} +brightmap texture COMPSD4 +{ + map OBRCPSD1 +} +brightmap texture COMPSD5 +{ + map OBRCPSD1 +} +brightmap texture COMPSD6 +{ + map OBRCPSD1 +} +brightmap texture COMPSD7 +{ + map OBRCPSD1 +} +brightmap texture COMPSD8 +{ + map OBRCPSD1 +} + +brightmap texture CONSOLEA +{ + map CONSOLBR +} +brightmap texture CONSOLEB +{ + map CONSOLBR +} +brightmap texture CONSOLEC +{ + map CONSOLBR +} +brightmap texture CONSOLED +{ + map CONSOLBR +} +brightmap texture CONSOLEE +{ + map CONSOLBR +} + +// +brightmap texture NOISE2A +{ + map OBRNOIS2 +} +brightmap texture NOISE2B +{ + map OBRNOIS2 +} +brightmap texture NOISE2C +{ + map OBRNOIS2 +} +brightmap texture NOISE2D +{ + map OBRNOIS2 +} +// +brightmap texture NOISE3A +{ + map OBRNOIS3 +} +brightmap texture NOISE3B +{ + map OBRNOIS3 +} +brightmap texture NOISE3C +{ + map OBRNOIS3 +} +brightmap texture NOISE3D +{ + map OBRNOIS3 +} + +// lite5 recolors - excluding the original lite5 +brightmap texture T_VSLTEG +{ + map OBRLITE5 +} +brightmap texture T_VSLTEO +{ + map OBRLITE5 +} +brightmap texture T_VSLTEP +{ + map OBRLITE5 +} +brightmap texture T_VSLTER +{ + map OBRLITE5 +} +brightmap texture T_VSLTEY +{ + map OBRLITE5 +} + +// gothic stuf +brightmap texture GLASS1 +{ + map OBRGLSBG +} +brightmap texture GLASS2 +{ + map OBRGLSBG +} +brightmap texture GLASS3 +{ + map OBRGLSBG +} +brightmap texture GLASS4 +{ + map OBRGLSBG +} +brightmap texture GLASS6 +{ + map OBRGLSBG +} +brightmap texture GLASS11 +{ + map OBRGLSTL +} +brightmap texture GLASS12 +{ + map OBRGLSTL +} +brightmap texture GLASS13 +{ + map OBRGLSTL +} +brightmap texture GLASS14 +{ + map OBRGLSTL +} +brightmap texture GOTH21 +{ + map OBRGT21 +} +brightmap texture GOTH04 +{ + map GOTH04BR +} +brightmap texture GOTH19 +{ + map GOTH19BR +} +brightmap texture GOTH20 +{ + map GOTH20BR +} +brightmap texture GOTH33 +{ + map GOTH33BR +} + +// gothic lavafalls +brightmap texture MFALL1 +{ + map MFALLBR +} +brightmap texture MFALL2 +{ + map MFALLBR +} +brightmap texture MFALL3 +{ + map MFALLBR +} +brightmap texture MFALL4 +{ + map MFALLBR +} + +// gothic switches +brightmap texture SW2SKUL1 +{ + map OBRS2SK +} +brightmap texture SW2PENT +{ + map OBRS2PT +} + +brightmap texture SW2QUAK +{ + map OBRS2QK +} +brightmap texture SW2GOTH +{ + map OBRS2GH +} +brightmap texture SW2CHN +{ + map OBRS2CN +} + +// colorful churchy glass +brightmap texture GLASS7 +{ + map OBRGLAS7 +} + +brightmap texture GLASS8 +{ + map OBRGLAS8 +} + +brightmap texture GLASS9 +{ + map OBRGLAS9 +} + +// bookshelves + +brightmap texture PANBOOK2 +{ + map OBRPNBK2 +} + +brightmap texture PANBOOK3 +{ + map OBRPNBK3 +} + +// liquids + +// Oblige lava patch +brightmap texture FIREMAG1 +{ + map OBRLFAL1 +} + +brightmap texture FIREMAG2 +{ + map OBRLFAL2 +} + +brightmap texture FIREMAG3 +{ + map OBRLFAL3 +} + +//urban +brightmap texture CITY01 +{ + map OBRCITY1 +} + +brightmap texture CITY02 +{ + map OBRCITY1 +} + +brightmap texture CITY03 +{ + map OBRCITY1 +} + +brightmap texture CITY04 +{ + map OBRCITY4 +} + +brightmap texture CITY05 +{ + map OBRCITY5 +} + +brightmap texture CITY06 +{ + map OBRCITY4 +} + +brightmap texture CITY07 +{ + map OBRCITY7 +} + +brightmap texture CITY12 +{ + map OBRCTY12 +} + +brightmap texture CITY14 +{ + map OBRCTY14 +} + +brightmap texture CITY04N +{ + map CTY04NBR +} + +brightmap texture CITY05N +{ + map CTY05NBR +} + +brightmap texture CITY06N +{ + map CTY04NBR +} + +brightmap texture CITY07N +{ + map CTY07NBR +} + +brightmap texture CITY11N +{ + map CTY11NBR +} + +brightmap texture CITY12N +{ + map CTY12NBR +} + +brightmap texture CITY13N +{ + map CTY13NBR +} + +brightmap texture CITY14N +{ + map CTY14NBR +} + +brightmap texture GRAYMET6 +{ + map OBRGRYMT +} + +brightmap texture GRAYMET7 +{ + map OBRGRYMT +} + +brightmap texture GRAYMET8 +{ + map OBRGRYMT +} + +brightmap texture GRAYMET9 +{ + map OBRGRYMT +} + +brightmap texture GRAYMETA +{ + map OBRGRYMT +} + +brightmap texture GRAYMETB +{ + map OBRGRYMT +} + +brightmap texture GRAYMETC +{ + map OBRGRYMT +} + +brightmap texture RDLITE01 +{ + map OBRRDLT1 +} + +brightmap texture LITEBLU3 +{ + map OBRLTBL3 +} + +//nature +brightmap texture GRNRKF +{ + map OBRGRNRK +} + +brightmap texture GRNSTONE +{ + map OBRGRNST +} + +// SD stuff +brightmap texture SDOM_WL2 +{ + map SDMWL2BR +} + +brightmap texture SDOM_WL5 +{ + map SDMWL5BR +} + +brightmap texture SD_GTHW1 +{ + map SDGHW1BR +} + +brightmap texture SD_GTLW1 +{ + map SDGTL1BR +} + +brightmap texture SD_GTLW2 +{ + map SDGTL2BR +} + +brightmap texture SD_GTLW3 +{ + map SDGTL3BR +} + +brightmap texture SD_GTLW4 +{ + map SDGTL4BR +} + +brightmap texture SD_TWDL1 +{ + map SDTDL1BR +} + +brightmap texture SD_TWDL2 +{ + map SDTDL2BR +} + +brightmap texture SD_TWDL3 +{ + map SDTDL3BR +} + +brightmap texture SD_TWLW1 +{ + map STWLW1BR +} + +brightmap texture SD_TWLW2 +{ + map STWLW2BR +} + +brightmap texture SD_TWLW5 +{ + map STWLW5BR +} + +brightmap texture SD_TWLW6 +{ + map STWLW6BR +} + +brightmap texture SD_TWLW8 +{ + map STWLW8BR +} + +brightmap texture SD_TWLWA +{ + map STWLWABR +} + +brightmap texture SD_TSGW4 +{ + map STGSW4BR +} + +brightmap texture SD_TSGW7 +{ + map STGSW7BR +} + +brightmap texture SD_TSGW9 +{ + map STGSW9BR +} + +brightmap texture SD_TSGWA +{ + map STGSWABR +} + +brightmap texture SD_TSGWB +{ + map STGSWBBR +} + +brightmap texture SD_TSGWC +{ + map STGSWCBR +} + +brightmap texture S_W2WAL4 +{ + map SW2WBR4 +} + +brightmap texture SD_HCCW1 +{ + map SDBRHCW1 +} + +brightmap texture SD_HCCW2 +{ + map SDBRHCW2 +} + +brightmap texture SD_HCCW3 +{ + map SDBRHCW3 +} + +brightmap texture SD_HCCW4 +{ + map SDBRHCW4 +} + +brightmap texture SD_HCCW6 +{ + map SDBRHCW6 +} + +brightmap texture SD_HCCW7 +{ + map SDBRHCW7 +} + +brightmap texture SD_HCCW8 +{ + map SDBRHCW8 +} + +brightmap texture SD_HCCW9 +{ + map SDBRHCW9 +} + +brightmap texture SD_HCCWC +{ + map SDBRHCWC +} + +brightmap texture SD_TWDW3 +{ + map OBRTWTW3 +} + +brightmap texture SD_TWDW8 +{ + map OBRTWTW8 +} + +brightmap texture SD_TWDW9 +{ + map OBRTWTW9 +} + +brightmap texture SDMSRCP1 +{ + map OBRMRCP1 +} + +brightmap texture SDMSRCP2 +{ + map OBRMRCP2 +} + +brightmap texture SDMSRCP3 +{ + map OBRMRCP3 +} + +brightmap texture SDTBNKW7 +{ + map SDTBKBR7 +} + +brightmap texture SDTBNKWA +{ + map SDTBKBRA +} + +brightmap texture SDTBNKWB +{ + map SDTBKBRB +} + +brightmap texture SDTBNKWC +{ + map SDTBKBRC +} + +brightmap texture SDTBNKWE +{ + map SDTBKBRE +} + +brightmap texture SD_TSGF3 +{ + map SDTSFBR3 +} + +brightmap texture SD_TSGF7 +{ + map SDTSFBR7 +} + +brightmap texture SD_TSGF9 +{ + map SDTSFBR9 +} + +brightmap texture SD_TSGFA +{ + map SDTSFBRA +} + +brightmap texture SDHCCBW1 +{ + map SDHCCBR1 +} + +brightmap texture SDHCCBW2 +{ + map SDHCCBR2 +} + +brightmap texture SDHCCBW3 +{ + map SDHCCBR3 +} + +brightmap texture SDHCCBW4 +{ + map SDHCCBR4 +} + +brightmap texture SDHCCBW5 +{ + map SDHCCBR5 +} + +brightmap texture SDHCCBW8 +{ + map SDHCCBR8 +} + +brightmap texture SDHCCBW9 +{ + map SDHCCBR9 +} + +brightmap texture SDHCCBWA +{ + map SDHCCBRA +} + +brightmap texture SDHCCBWB +{ + map SDHCCBRB +} + +brightmap texture SDHCCBWC +{ + map SDHCCBRC +} + +// iStuff wall brightmaps +brightmap texture SDIPHWL2 +{ + map SDIPHBR2 +} + +brightmap texture SDIPHWL5 +{ + map SDIPHBR5 +} + +brightmap texture SDIPHWL7 +{ + map SDIPHBR7 +} + +brightmap texture SDIPHWL8 +{ + map SDIPHBR8 +} + +brightmap texture SDIPHWL9 +{ + map SDIPHBR9 +} + +brightmap texture SDIPHWLA +{ + map SDIPHBRA +} +]] + +-- aliases - when you're too lazy to write down wall and flat names in every +-- room theme + +OBS_RESOURCE_PACK_TEXTURE_SET_ALIASES = +{ + __SD_GRAY_TECH_WALLS = + { + materials = + { + "SDOM_WL1", "SDOM_WL2", "SDOM_WL3", + "SDOM_WL4", "SDOM_WL5", "SDOM_WL6" + } + }, + + __SD_GRAY_TECH = + { + materials = + { + "SDOM_FT1", "SDOM_FT2", "SDOM_FT3", "SDOM_FT4" + } + } +} diff --git a/modules/zdoom_armaetus_themes.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_themes.lua similarity index 100% rename from modules/zdoom_armaetus_themes.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_armaetus_themes.lua diff --git a/modules/zdoom_internal_scripts/AISprite.wad b/addons/Obsidian Non-Free Addons/modules/zdoom_internal_scripts/AISprite.wad similarity index 100% rename from modules/zdoom_internal_scripts/AISprite.wad rename to addons/Obsidian Non-Free Addons/modules/zdoom_internal_scripts/AISprite.wad diff --git a/modules/zdoom_internal_scripts/ObAddon_trees.wad b/addons/Obsidian Non-Free Addons/modules/zdoom_internal_scripts/ObAddon_trees.wad similarity index 100% rename from modules/zdoom_internal_scripts/ObAddon_trees.wad rename to addons/Obsidian Non-Free Addons/modules/zdoom_internal_scripts/ObAddon_trees.wad diff --git a/modules/zdoom_orp_generative_resources.lua b/addons/Obsidian Non-Free Addons/modules/zdoom_orp_generative_resources.lua similarity index 100% rename from modules/zdoom_orp_generative_resources.lua rename to addons/Obsidian Non-Free Addons/modules/zdoom_orp_generative_resources.lua diff --git a/data/License Attribution.txt b/data/License Attribution.txt new file mode 100644 index 0000000000..c4e692eabf --- /dev/null +++ b/data/License Attribution.txt @@ -0,0 +1,179 @@ +=========================================================================================== +BSD 2-Clause License +=========================================================================================== + +fastPRNG - Copyright (c) 2020 Michele Morrone + +=========================================================================================== +BSD 3-Clause License +=========================================================================================== + +3270 Font - Copyright (c) 2011-2017, Ricardo Banffy. + Copyright (c) 1993-2011, Paul Mattes. + Copyright (c) 2004-2005, Don Russell. + Copyright (c) 2004, Dick Altenbern. + Copyright (c) 1990, Jeff Sparkes. + Copyright (c) 1989, Georgia Tech Research Corporation (GTRC), Atlanta, GA 30332. + +Blasphemer (Assorted graphic assets) - Copyright (c) 2021 Contributors to the Blasphemer project + +Freedoom (Assorted graphic assets) - Copyright (c) 2001-2019 Contributors to the Freedoom project + +=========================================================================================== +CC0 1.0 Universal License +=========================================================================================== + +Oblige v5-v7 Prefab WAD files and colocated Lua definitions - Andrew Apted + +"Wind Arctic Cold" sound - cobratronik via Freesound.org + +"Dark Cave Drone" sound - Kinoton via Freesound.org + +"Depths of Hell" sound - Elan Hickler via Freesound.org + +"Building Rooftops Ambient" sound - batman6661 via Freesound.org + +"ZOOM0077" sound - marjan83 via Freesound.org + +"Empty Office Room Tone" sound - Rich Wise via Freesound.org + +"Noisy Bathroom Exhaust Fan" sound - deleted_user_7146007 via Freesound.org + +"Vending Machines - Drinks Machine Hum" sound - portwain via Freesound.org + +"Indoor Nice Fish Tank Ambiance" sound - 7778 via Freesound.org + +"Mechanical Conveyor Belt Sound Clip" sound - Cagan Celik + +"The Bloodletter" song - Chad Wolfe + +"Sand - Flowing, sand sea digital" sound - Vrymaa via Freesound.org + +"Car Radio Static" sound - TravieDoodle via Freesound.org + +"Demon Chant (Latin)" sound - cycro via Freesound.org + +=========================================================================================== +CC-BY-3.0 Unported License +=========================================================================================== + +"Haunting Ambiance" sound - Copyright (c) 2015 OllieOllie via Freesound.org + +"Sci-Fi Laboratory Ambience" sound - Copyright (c) 2013 Iwan ‘qubodup’ Gabovitch + with sounds by wolick, swiftoid, Diboz via Freesound.org + +"Water Down Gutter 3" sound - Copyright (c) Mike Koenig via SoundBible.com + +"Liquid" sound - Copyright (c) Caroline Ford + +=========================================================================================== +CC-BY-NC-3.0 Unported License +=========================================================================================== + +"Water Drain" sound - Copyright (c) 2018 chris.t via Freesound.org + +=========================================================================================== +CC-BY-4.0 International License +=========================================================================================== + +ObAddon and OBSIDIAN Prefab WAD files and colocated Lua definitions - Copyright (c) 2018-2024 The OBSIDIAN Team + +"Wide Stereo Outdoor Ambience" sound - Copyright (c) 2014 Kasper August Topp via Freesound.org + +"Machine Hum 1" sound - Copyright (c) 2011 duckduckpony via Freesound.org + +"Fish Tank Aquarium Water Filter Natural Sounds" - Copyright (c) 2017 DudeAwesome via Freesound.org + +"Spark 01" sound - Copyright (c) 2008 chipfork71 via Freesound.org + +"Waterfall Sound Effect HQ" - Copyright (c) 2016 Virtual Ambiance + +=========================================================================================== +CC-SAMPLING+-1.0 Generic License +=========================================================================================== + +"Background Noise" sound - Copyright Stomp via SoundBible.com + +"Fan Noise" sound - Copyright (c) 2020 calivintage via Freesound.org + +=========================================================================================== +FLTK License +=========================================================================================== + +FLTK - Copyright (c) 1998-2024 Bill Spitzak and others + +=========================================================================================== +GPL2 License +=========================================================================================== + +AJBSP - Copyright (c) 2000-2023 Andrew Apted, et al + Copyright (c) 1994-1998 Colin Reed + Copyright (c) 1997-1998 Lee Killough + +AJ-Polygonator - Copyright (c) 2021-2024 The OBSIDIAN Team + Copyright (c) 2000-2013 Andrew Apted + +Filename Formatter - Copyright (c) 2021-2024 Phytolizer + +OBSIDIAN/OBLIGE Level Maker - Copyright (c) 2021-2024 The OBSIDIAN Team + Copyright (c) 2006-2017 Andrew Apted + +SLUMP - Copyright (c) 2021-2024 The OBSIDIAN Team + Copyright (c) 2005-2007 Sam Trenholme + Copyright (c) 2000 David Chess + +=========================================================================================== +MIT License +=========================================================================================== + +minilua - Copyright (c) 2020-2023 Eduardo Bart (https://github.com/edubart). + Copyright (c) 1994–2019 Lua.org, PUC-Rio. + +miniz - Copyright (c) 2013-2014 RAD Game Tools and Valve Software + Copyright (c) 2010-2014 Rich Geldreich and Tenacious Software LLC + + +=========================================================================================== +SIL Open Font License +=========================================================================================== + +Avenixel - Copyright (c) 2020 Gabriel Sammartino (https://www.behance.net/webcreativity | contact@gabrielsammartino.com), + with Reserved Font Name Avenixel. + +Drama Sans - Copyright (c) 2018 Drama Sans (dramasans@outlook.com), + with Reserved Font Name "Drama Sans". + +FPD Pressure - Copyright (c) 2020 Felix Summ + +Kalam - Copyright (c) 2014 Indian Type Foundry (info@indiantypefoundry.com) + +MiniSmallCaps (renamed to "Sam I Am") - Copyright (c) 2019 Sam Trenholme + +Source Sans Pro (renamed to "Sauce") - Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’ + +Teko - Copyright (c) 2014, Indian Type Foundry (info@indiantypefoundry.com) + +The Neue Black (renamed to "New Black") - Copyright (c) 2019-2021, Tre Seals , Micah Rich , The League of Moveable Type Limited Liability Company +with Reserved Font Name: "The Neue Black" + +Workbench - Copyright (c) 2019, Jens Kutilek (www.kutilek.de) + +=========================================================================================== +Public Domain +=========================================================================================== + +ppmforge - John Walker + +"Rainforest Ambiance" sound - GlorySunz via SoundBible.com + +=========================================================================================== +The Unlicense +=========================================================================================== + +steve - Lou Catonnet + +=========================================================================================== +zlib License +=========================================================================================== + +PHYSFS - Copyright (c) 2001-2022 Ryan C. Gordon and others \ No newline at end of file diff --git a/data/bg/airduct.tga b/data/bg/airduct.tga deleted file mode 100644 index b8b02c6fc3..0000000000 Binary files a/data/bg/airduct.tga and /dev/null differ diff --git a/data/bg/block1.tga b/data/bg/block1.tga deleted file mode 100644 index 82a7668c95..0000000000 Binary files a/data/bg/block1.tga and /dev/null differ diff --git a/data/bg/block2.tga b/data/bg/block2.tga deleted file mode 100644 index 84b26b34bc..0000000000 Binary files a/data/bg/block2.tga and /dev/null differ diff --git a/data/bg/bodiesc.tga b/data/bg/bodiesc.tga deleted file mode 100644 index a5a201f7cd..0000000000 Binary files a/data/bg/bodiesc.tga and /dev/null differ diff --git a/data/bg/bricks08.tga b/data/bg/bricks08.tga deleted file mode 100644 index 69a01224a0..0000000000 Binary files a/data/bg/bricks08.tga and /dev/null differ diff --git a/data/bg/bricks09.tga b/data/bg/bricks09.tga deleted file mode 100644 index a2fb1790a6..0000000000 Binary files a/data/bg/bricks09.tga and /dev/null differ diff --git a/data/bg/bronze5.tga b/data/bg/bronze5.tga deleted file mode 100644 index 6ae90de926..0000000000 Binary files a/data/bg/bronze5.tga and /dev/null differ diff --git a/data/bg/cement.tga b/data/bg/cement.tga deleted file mode 100644 index 3b6973c33d..0000000000 Binary files a/data/bg/cement.tga and /dev/null differ diff --git a/data/bg/darkf03.tga b/data/bg/darkf03.tga deleted file mode 100644 index e0e00da2a5..0000000000 Binary files a/data/bg/darkf03.tga and /dev/null differ diff --git a/data/bg/goth10.tga b/data/bg/goth10.tga deleted file mode 100644 index bdb88ba995..0000000000 Binary files a/data/bg/goth10.tga and /dev/null differ diff --git a/data/bg/goth36.tga b/data/bg/goth36.tga deleted file mode 100644 index ca0927d91f..0000000000 Binary files a/data/bg/goth36.tga and /dev/null differ diff --git a/data/bg/goth50.tga b/data/bg/goth50.tga deleted file mode 100644 index eabe5cf905..0000000000 Binary files a/data/bg/goth50.tga and /dev/null differ diff --git a/data/bg/goth51.tga b/data/bg/goth51.tga deleted file mode 100644 index e6219ec625..0000000000 Binary files a/data/bg/goth51.tga and /dev/null differ diff --git a/data/bg/goth6.tga b/data/bg/goth6.tga deleted file mode 100644 index 984ab8ec4e..0000000000 Binary files a/data/bg/goth6.tga and /dev/null differ diff --git a/data/bg/graymet2.tga b/data/bg/graymet2.tga deleted file mode 100644 index cd764ebd0b..0000000000 Binary files a/data/bg/graymet2.tga and /dev/null differ diff --git a/data/bg/helmet1.tga b/data/bg/helmet1.tga deleted file mode 100644 index 2f5d124e15..0000000000 Binary files a/data/bg/helmet1.tga and /dev/null differ diff --git a/data/bg/helmet2.tga b/data/bg/helmet2.tga deleted file mode 100644 index 1d23faf09a..0000000000 Binary files a/data/bg/helmet2.tga and /dev/null differ diff --git a/data/bg/helwal1.tga b/data/bg/helwal1.tga deleted file mode 100644 index 74cc8905f3..0000000000 Binary files a/data/bg/helwal1.tga and /dev/null differ diff --git a/data/bg/lamp1.tga b/data/bg/lamp1.tga deleted file mode 100644 index 4828355ce2..0000000000 Binary files a/data/bg/lamp1.tga and /dev/null differ diff --git a/data/bg/lamp2.tga b/data/bg/lamp2.tga deleted file mode 100644 index 70a70c7326..0000000000 Binary files a/data/bg/lamp2.tga and /dev/null differ diff --git a/data/bg/lamp3.tga b/data/bg/lamp3.tga deleted file mode 100644 index d4a7d8204f..0000000000 Binary files a/data/bg/lamp3.tga and /dev/null differ diff --git a/data/bg/rdrok1.tga b/data/bg/rdrok1.tga deleted file mode 100644 index 80271e3ae1..0000000000 Binary files a/data/bg/rdrok1.tga and /dev/null differ diff --git a/data/licenses/BSD 2-Clause.txt b/data/licenses/BSD 2-Clause.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/data/licenses/BSD 3-Clause.txt b/data/licenses/BSD 3-Clause.txt new file mode 100644 index 0000000000..3879237a0a --- /dev/null +++ b/data/licenses/BSD 3-Clause.txt @@ -0,0 +1,26 @@ +BSD 3-Clause License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/data/licenses/CC-BY-3.0-Unported.txt b/data/licenses/CC-BY-3.0-Unported.txt new file mode 100644 index 0000000000..890a3062d1 --- /dev/null +++ b/data/licenses/CC-BY-3.0-Unported.txt @@ -0,0 +1,54 @@ +License +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. +"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. +"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. +"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. +"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. +"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. +"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. +"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + +to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; +to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; +to Distribute and Publicly Perform the Work including as incorporated in Collections; and, +to Distribute and Publicly Perform Adaptations. +For the avoidance of doubt: + +Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; +Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, +Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + +You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. +If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. +Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. +8. Miscellaneous + +Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. +Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. +The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. \ No newline at end of file diff --git a/data/licenses/CC-BY-4.0 International.txt b/data/licenses/CC-BY-4.0 International.txt new file mode 100644 index 0000000000..4ea99c213c --- /dev/null +++ b/data/licenses/CC-BY-4.0 International.txt @@ -0,0 +1,395 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/data/licenses/CC-BY-NC-3.0-Unported.txt b/data/licenses/CC-BY-NC-3.0-Unported.txt new file mode 100644 index 0000000000..622c44943b --- /dev/null +++ b/data/licenses/CC-BY-NC-3.0-Unported.txt @@ -0,0 +1,334 @@ +Creative Commons Legal Code + +Attribution-NonCommercial 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved, including but not limited to the +rights set forth in Section 4(d). + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(c), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(c), as requested. + b. You may not exercise any of the rights granted to You in Section 3 + above in any manner that is primarily intended for or directed toward + commercial advantage or private monetary compensation. The exchange of + the Work for other copyrighted works by means of digital file-sharing + or otherwise shall not be considered to be intended for or directed + toward commercial advantage or private monetary compensation, provided + there is no payment of any monetary compensation in connection with + the exchange of copyrighted works. + c. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and, (iv) consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4(c) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + d. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor reserves + the exclusive right to collect such royalties for any exercise by + You of the rights granted under this License if Your exercise of + such rights is for a purpose or use which is otherwise than + noncommercial as permitted under Section 4(b) and otherwise waives + the right to collect royalties through any statutory or compulsory + licensing scheme; and, + iii. Voluntary License Schemes. The Licensor reserves the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License that is for a + purpose or use which is otherwise than noncommercial as permitted + under Section 4(c). + e. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of the License. + + Creative Commons may be contacted at https://creativecommons.org/. \ No newline at end of file diff --git a/data/licenses/CC-SAMPLING+-1.0 Generic.txt b/data/licenses/CC-SAMPLING+-1.0 Generic.txt new file mode 100644 index 0000000000..0fbc89a663 --- /dev/null +++ b/data/licenses/CC-SAMPLING+-1.0 Generic.txt @@ -0,0 +1,74 @@ +Sampling Plus 1.0 +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +"Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + +"Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. + +"Licensor" means the individual or entity that offers the Work under the terms of this License. + +"Original Author" means the individual or entity who created the Work. + +"Work" means the copyrightable work of authorship offered under the terms of this License. + +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant & Restrictions. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below on the conditions as stated below: + +Re-creativity permitted . You may create and reproduce Derivative Works, provided that: +the Derivative Work(s) constitute a good-faith partial or recombined usage employing "sampling," "collage," "mash-up," or other comparable artistic technique, whether now known or hereafter devised, that is highly transformative of the original, as appropriate to the medium, genre, and market niche; and + +Your Derivative Work(s) must only make a partial use of the original Work, or if You choose to use the original Work as a whole, You must either use the Work as an insubstantial portion of Your Derivative Work(s) or transform it into something substantially different from the original Work. In the case of a musical Work and/or audio recording, the mere synchronization ("synching") of the Work with a moving image shall not be considered a transformation of the Work into something substantially different. + +You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission, any Derivative Work(s) authorized under this License. + +Prohibition on advertising . All advertising and promotional uses are excluded from the above rights, except for advertisement and promotion of the Derivative Work(s) that You are creating from the Work and Yourself as the author thereof. + +Noncommercial sharing of verbatim copies permitted . + +You may reproduce the Work, incorporate the Work into one or more Collective Works, and reproduce the Work as incorporated in the Collective Works. You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including or incorporated in Collective Works. + +You may not exercise any of the rights granted to You in the paragraph immediately above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. + +Attribution and Notice . + +If You distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, provide the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work or a Derivative Work, unless such Uniform Resource Identifier does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, provide a credit identifying the use of the Work in the Derivative Work (e.g., "Remix of the Work by Original Author," or "Inclusion of a portion of the Work by Original Author in collage"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + +You may distribute, publicly display, publicly perform or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work or Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access of use of the Work in a manner inconsistent with the terms of this License. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. Upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work or Collective Work any reference to such Licensor or the Original Author, as requested. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. + +4. Disclaimer + +UNLESS SPECIFIED OTHERWISE BY THE PARTIES IN A SEPARATE WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. + +5. Limitation on Liability. + +IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +6. Termination + +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 4, 5, 6, and 7 will survive any termination of this License. + +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +7. Miscellaneous + +Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + +Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements, or representations with respect to the Work, and with respect to the subject matter hereof, not specified above. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. \ No newline at end of file diff --git a/data/licenses/CC0-1.0-Universal.txt b/data/licenses/CC0-1.0-Universal.txt new file mode 100644 index 0000000000..2c4afabdb6 --- /dev/null +++ b/data/licenses/CC0-1.0-Universal.txt @@ -0,0 +1,117 @@ +CC0 1.0 Universal + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator and +subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later +claims of infringement build upon, modify, incorporate in other works, reuse +and redistribute as freely as possible in any form whatsoever and for any +purposes, including without limitation commercial purposes. These owners may +contribute to the Commons to promote the ideal of a free culture and the +further production of creative, cultural and scientific works, or to gain +reputation or greater distribution for their Work in part through the use and +efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with a +Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or her +Copyright and Related Rights in the Work and the meaning and intended legal +effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not limited +to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, communicate, + and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + + iii. publicity and privacy rights pertaining to a person's image or likeness + depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of data in + a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation thereof, + including any amended or successor version of such directive); and + + vii. other similar, equivalent or corresponding rights throughout the world + based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time +extensions), (iii) in any current or future medium and for any number of +copies, and (iv) for any purpose whatsoever, including without limitation +commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes +the Waiver for the benefit of each member of the public at large and to the +detriment of Affirmer's heirs and successors, fully intending that such Waiver +shall not be subject to revocation, rescission, cancellation, termination, or +any other legal or equitable action to disrupt the quiet enjoyment of the Work +by the public as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account +Affirmer's express Statement of Purpose. In addition, to the extent the Waiver +is so judged Affirmer hereby grants to each affected person a royalty-free, +non transferable, non sublicensable, non exclusive, irrevocable and +unconditional license to exercise Affirmer's Copyright and Related Rights in +the Work (i) in all territories worldwide, (ii) for the maximum duration +provided by applicable law or treaty (including future time extensions), (iii) +in any current or future medium and for any number of copies, and (iv) for any +purpose whatsoever, including without limitation commercial, advertising or +promotional purposes (the "License"). The License shall be deemed effective as +of the date CC0 was applied by Affirmer to the Work. Should any part of the +License for any reason be judged legally invalid or ineffective under +applicable law, such partial invalidity or ineffectiveness shall not +invalidate the remainder of the License, and in such case Affirmer hereby +affirms that he or she will not (i) exercise any of his or her remaining +Copyright and Related Rights in the Work or (ii) assert any associated claims +and causes of action with respect to the Work, in either case contrary to +Affirmer's express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + + b. Affirmer offers the Work as-is and makes no representations or warranties + of any kind concerning the Work, express, implied, statutory or otherwise, + including without limitation warranties of title, merchantability, fitness + for a particular purpose, non infringement, or the absence of latent or + other defects, accuracy, or the present or absence of errors, whether or not + discoverable, all to the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without limitation + any person's Copyright and Related Rights in the Work. Further, Affirmer + disclaims responsibility for obtaining any necessary consents, permissions + or other rights required for any use of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to this + CC0 or use of the Work. + +For more information, please see + + diff --git a/data/licenses/FLTK License.txt b/data/licenses/FLTK License.txt new file mode 100644 index 0000000000..de70169472 --- /dev/null +++ b/data/licenses/FLTK License.txt @@ -0,0 +1,530 @@ + FLTK License + December 11, 2001 + +The FLTK library and included programs are provided under the terms +of the GNU Library General Public License (LGPL) with the following +exceptions: + + 1. Modifications to the FLTK configure script, config + header file, and makefiles by themselves to support + a specific platform do not constitute a modified or + derivative work. + + The authors do request that such modifications be + contributed to the FLTK project - send all contributions + through the "Software Trouble Report" on the following page: + + https://www.fltk.org/bugs.php + + 2. Widgets that are subclassed from FLTK widgets do not + constitute a derivative work. + + 3. Static linking of applications and widgets to the + FLTK library does not constitute a derivative work + and does not require the author to provide source + code for the application or widget, use the shared + FLTK libraries, or link their applications or + widgets against a user-supplied version of FLTK. + + If you link the application or widget to a modified + version of FLTK, then the changes to FLTK must be + provided under the terms of the LGPL in sections + 1, 2, and 4. + + 4. You do not have to provide a copy of the FLTK license + with programs that are linked to the FLTK library, nor + do you have to identify the FLTK license in your + program or documentation as required by section 6 + of the LGPL. + + However, programs must still identify their use of FLTK. + The following example statement can be included in user + documentation to satisfy this requirement: + + [program/widget] is based in part on the work of + the FLTK project (https://www.fltk.org). + +----------------------------------------------------------------------- + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/data/licenses/GPL2.txt b/data/licenses/GPL2.txt new file mode 100644 index 0000000000..85a19a08d3 --- /dev/null +++ b/data/licenses/GPL2.txt @@ -0,0 +1,341 @@ + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/data/licenses/MIT.txt b/data/licenses/MIT.txt new file mode 100644 index 0000000000..7dc42bc2c9 --- /dev/null +++ b/data/licenses/MIT.txt @@ -0,0 +1,5 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/data/licenses/OFL.txt b/data/licenses/OFL.txt new file mode 100644 index 0000000000..ad1f9ac761 --- /dev/null +++ b/data/licenses/OFL.txt @@ -0,0 +1,86 @@ +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/data/licenses/Public Domain.txt b/data/licenses/Public Domain.txt new file mode 100644 index 0000000000..5dfc9254b1 --- /dev/null +++ b/data/licenses/Public Domain.txt @@ -0,0 +1,16 @@ +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/libraries/gif-h/LICENSE b/data/licenses/Unlicense.txt similarity index 94% rename from libraries/gif-h/LICENSE rename to data/licenses/Unlicense.txt index cf1ab25da0..6bb8a29151 100644 --- a/libraries/gif-h/LICENSE +++ b/data/licenses/Unlicense.txt @@ -21,4 +21,4 @@ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -For more information, please refer to +For more information, please refer to \ No newline at end of file diff --git a/data/licenses/zlib.txt b/data/licenses/zlib.txt new file mode 100644 index 0000000000..4a595027ef --- /dev/null +++ b/data/licenses/zlib.txt @@ -0,0 +1,16 @@ +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/data/masks/compgreen.tga b/data/masks/compgreen.tga deleted file mode 100644 index d2b3aad049..0000000000 Binary files a/data/masks/compgreen.tga and /dev/null differ diff --git a/data/masks/fireblu.tga b/data/masks/fireblu.tga deleted file mode 100644 index de5ace2869..0000000000 Binary files a/data/masks/fireblu.tga and /dev/null differ diff --git a/data/masks/groovy1.tga b/data/masks/groovy1.tga deleted file mode 100644 index 5969242a6d..0000000000 Binary files a/data/masks/groovy1.tga and /dev/null differ diff --git a/data/masks/redrock.tga b/data/masks/redrock.tga deleted file mode 100644 index 39e8515b4f..0000000000 Binary files a/data/masks/redrock.tga and /dev/null differ diff --git a/data/masks/shawn_r.tga b/data/masks/shawn_r.tga deleted file mode 100644 index 93f4a0a1ff..0000000000 Binary files a/data/masks/shawn_r.tga and /dev/null differ diff --git a/data/masks/yellowish.tga b/data/masks/yellowish.tga deleted file mode 100644 index 21b55e295f..0000000000 Binary files a/data/masks/yellowish.tga and /dev/null differ diff --git a/data/music/D_DM2INT.ogg b/data/music/D_DM2INT.ogg deleted file mode 100644 index 1a74340cf4..0000000000 Binary files a/data/music/D_DM2INT.ogg and /dev/null differ diff --git a/data/sounds/DESERT.ogg b/data/sounds/DESERT.ogg deleted file mode 100644 index 5201c11b95..0000000000 Binary files a/data/sounds/DESERT.ogg and /dev/null differ diff --git a/data/sounds/SKLLCHNT.ogg b/data/sounds/SKLLCHNT.ogg deleted file mode 100644 index 1f121a8427..0000000000 Binary files a/data/sounds/SKLLCHNT.ogg and /dev/null differ diff --git a/data/sounds/STATIC.ogg b/data/sounds/STATIC.ogg deleted file mode 100644 index 17f916503e..0000000000 Binary files a/data/sounds/STATIC.ogg and /dev/null differ diff --git a/data/text/dialogues.lua b/data/text/dialogues.lua index da8aa7f9ce..55b792167b 100644 --- a/data/text/dialogues.lua +++ b/data/text/dialogues.lua @@ -25,10 +25,6 @@ _("Obsidian Cookbook Recipe for Doom #666 - [REDACTED]\n\nCreate a map pack of [ -- -_("Did you know?\n\nIf you don't feel like backtracking or navigating levels with multiple deep paths and potential dead ends, Linear Mode will create levels that just go from point A to point B!"), - --- - _("Did you know?\n\nNature Mode generates levels that are entirely Parks and/or Caves. Who said you needed to go outside to experience outside?"), -- diff --git a/games/doom/base.lua b/games/doom/base.lua index 1dd3784e0d..8b259cceb0 100644 --- a/games/doom/base.lua +++ b/games/doom/base.lua @@ -64,6 +64,7 @@ OB_GAMES["doom2"] = hooks = { + setup = DOOM.setup, factory_setup = DOOM.factory_setup, slump_setup = DOOM.slump_setup, get_levels = DOOM.get_levels, diff --git a/games/doom/data/hang_lamp.wad b/games/doom/data/hang_lamp.wad deleted file mode 100644 index 144b12d3f5..0000000000 Binary files a/games/doom/data/hang_lamp.wad and /dev/null differ diff --git a/data/loading/loading_screens.wad b/games/doom/data/loading/loading_screens.wad similarity index 98% rename from data/loading/loading_screens.wad rename to games/doom/data/loading/loading_screens.wad index bd7313f1b8..4737f575f2 100644 Binary files a/data/loading/loading_screens.wad and b/games/doom/data/loading/loading_screens.wad differ diff --git a/games/doom/data/music/D_DM2INT.ogg b/games/doom/data/music/D_DM2INT.ogg new file mode 100644 index 0000000000..369c4bc12e Binary files /dev/null and b/games/doom/data/music/D_DM2INT.ogg differ diff --git a/data/sounds/ARCTIC.ogg b/games/doom/data/sounds/ARCTIC.ogg similarity index 100% rename from data/sounds/ARCTIC.ogg rename to games/doom/data/sounds/ARCTIC.ogg diff --git a/data/sounds/BATHFAN.ogg b/games/doom/data/sounds/BATHFAN.ogg similarity index 100% rename from data/sounds/BATHFAN.ogg rename to games/doom/data/sounds/BATHFAN.ogg diff --git a/data/sounds/CAVEAMB.ogg b/games/doom/data/sounds/CAVEAMB.ogg similarity index 100% rename from data/sounds/CAVEAMB.ogg rename to games/doom/data/sounds/CAVEAMB.ogg diff --git a/data/sounds/COMPSTN.ogg b/games/doom/data/sounds/COMPSTN.ogg similarity index 100% rename from data/sounds/COMPSTN.ogg rename to games/doom/data/sounds/COMPSTN.ogg diff --git a/data/sounds/CONVMECH.ogg b/games/doom/data/sounds/CONVMECH.ogg similarity index 100% rename from data/sounds/CONVMECH.ogg rename to games/doom/data/sounds/CONVMECH.ogg diff --git a/games/doom/data/sounds/DESERT.ogg b/games/doom/data/sounds/DESERT.ogg new file mode 100644 index 0000000000..a1634ed4c1 Binary files /dev/null and b/games/doom/data/sounds/DESERT.ogg differ diff --git a/data/sounds/DSRAT.ogg b/games/doom/data/sounds/DSRAT.ogg similarity index 100% rename from data/sounds/DSRAT.ogg rename to games/doom/data/sounds/DSRAT.ogg diff --git a/data/sounds/FANSND.ogg b/games/doom/data/sounds/FANSND.ogg similarity index 100% rename from data/sounds/FANSND.ogg rename to games/doom/data/sounds/FANSND.ogg diff --git a/data/sounds/HELLIND.ogg b/games/doom/data/sounds/HELLIND.ogg similarity index 100% rename from data/sounds/HELLIND.ogg rename to games/doom/data/sounds/HELLIND.ogg diff --git a/data/sounds/HELLOUT.ogg b/games/doom/data/sounds/HELLOUT.ogg similarity index 100% rename from data/sounds/HELLOUT.ogg rename to games/doom/data/sounds/HELLOUT.ogg diff --git a/data/sounds/MACHNAIR.ogg b/games/doom/data/sounds/MACHNAIR.ogg similarity index 100% rename from data/sounds/MACHNAIR.ogg rename to games/doom/data/sounds/MACHNAIR.ogg diff --git a/data/sounds/MACHVENT.ogg b/games/doom/data/sounds/MACHVENT.ogg similarity index 100% rename from data/sounds/MACHVENT.ogg rename to games/doom/data/sounds/MACHVENT.ogg diff --git a/data/sounds/PIPELINE.ogg b/games/doom/data/sounds/PIPELINE.ogg similarity index 100% rename from data/sounds/PIPELINE.ogg rename to games/doom/data/sounds/PIPELINE.ogg diff --git a/data/sounds/RAINAMB.ogg b/games/doom/data/sounds/RAINAMB.ogg similarity index 100% rename from data/sounds/RAINAMB.ogg rename to games/doom/data/sounds/RAINAMB.ogg diff --git a/games/doom/data/sounds/SKLLCHNT.ogg b/games/doom/data/sounds/SKLLCHNT.ogg new file mode 100644 index 0000000000..e47ff84494 Binary files /dev/null and b/games/doom/data/sounds/SKLLCHNT.ogg differ diff --git a/data/sounds/SPARKING.ogg b/games/doom/data/sounds/SPARKING.ogg similarity index 100% rename from data/sounds/SPARKING.ogg rename to games/doom/data/sounds/SPARKING.ogg diff --git a/games/doom/data/sounds/STATIC.ogg b/games/doom/data/sounds/STATIC.ogg new file mode 100644 index 0000000000..51ad45bb59 Binary files /dev/null and b/games/doom/data/sounds/STATIC.ogg differ diff --git a/data/sounds/STREETAM.ogg b/games/doom/data/sounds/STREETAM.ogg similarity index 100% rename from data/sounds/STREETAM.ogg rename to games/doom/data/sounds/STREETAM.ogg diff --git a/data/sounds/TECHAMB.ogg b/games/doom/data/sounds/TECHAMB.ogg similarity index 100% rename from data/sounds/TECHAMB.ogg rename to games/doom/data/sounds/TECHAMB.ogg diff --git a/data/sounds/TECHIND.ogg b/games/doom/data/sounds/TECHIND.ogg similarity index 100% rename from data/sounds/TECHIND.ogg rename to games/doom/data/sounds/TECHIND.ogg diff --git a/data/sounds/TEMPPARK.ogg b/games/doom/data/sounds/TEMPPARK.ogg similarity index 100% rename from data/sounds/TEMPPARK.ogg rename to games/doom/data/sounds/TEMPPARK.ogg diff --git a/data/sounds/TOILETRN.ogg b/games/doom/data/sounds/TOILETRN.ogg similarity index 100% rename from data/sounds/TOILETRN.ogg rename to games/doom/data/sounds/TOILETRN.ogg diff --git a/data/sounds/VENDHUM.ogg b/games/doom/data/sounds/VENDHUM.ogg similarity index 100% rename from data/sounds/VENDHUM.ogg rename to games/doom/data/sounds/VENDHUM.ogg diff --git a/data/sounds/WATDRAIN.ogg b/games/doom/data/sounds/WATDRAIN.ogg similarity index 100% rename from data/sounds/WATDRAIN.ogg rename to games/doom/data/sounds/WATDRAIN.ogg diff --git a/data/sounds/WATFALL.ogg b/games/doom/data/sounds/WATFALL.ogg similarity index 100% rename from data/sounds/WATFALL.ogg rename to games/doom/data/sounds/WATFALL.ogg diff --git a/data/sounds/WATSTRM.ogg b/games/doom/data/sounds/WATSTRM.ogg similarity index 100% rename from data/sounds/WATSTRM.ogg rename to games/doom/data/sounds/WATSTRM.ogg diff --git a/data/sounds/WATTANK.ogg b/games/doom/data/sounds/WATTANK.ogg similarity index 100% rename from data/sounds/WATTANK.ogg rename to games/doom/data/sounds/WATTANK.ogg diff --git a/games/doom/data/title/barrel1.tga b/games/doom/data/title/barrel1.tga new file mode 100644 index 0000000000..ca19940780 Binary files /dev/null and b/games/doom/data/title/barrel1.tga differ diff --git a/games/doom/data/title/brushedmetal.tga b/games/doom/data/title/brushedmetal.tga new file mode 100644 index 0000000000..068f25c967 Binary files /dev/null and b/games/doom/data/title/brushedmetal.tga differ diff --git a/games/doom/data/title/techbg1.tga b/games/doom/data/title/techbg1.tga new file mode 100644 index 0000000000..83f2d76921 Binary files /dev/null and b/games/doom/data/title/techbg1.tga differ diff --git a/games/doom/fabs/decor/hang_lamp.lua b/games/doom/fabs/decor/hang_lamp.lua deleted file mode 100644 index 1b7d3fc6c7..0000000000 --- a/games/doom/fabs/decor/hang_lamp.lua +++ /dev/null @@ -1,24 +0,0 @@ --- --- Hanging ceiling lamp --- - -PREFABS.Light_hanging = -{ - file = "decor/hang_lamp.wad", - map = "MAP01", - - prob = 0, - theme = "urban", - env = "building", - - - - kind = "light", - where = "point", - - height = 160, - - bound_z1 = -64, - bound_z2 = 0, -} - diff --git a/games/doom/fabs/decor/hang_lamp.wad b/games/doom/fabs/decor/hang_lamp.wad deleted file mode 100644 index 3a691a2dae..0000000000 Binary files a/games/doom/fabs/decor/hang_lamp.wad and /dev/null differ diff --git a/games/doom/factory.lua b/games/doom/factory.lua index 665f6992ae..6e4745a88f 100644 --- a/games/doom/factory.lua +++ b/games/doom/factory.lua @@ -9577,8 +9577,8 @@ function DOOM.factory_setup() error("Prefab not a multiple of four: " .. tostring(P.name)) end - P.long = int(f_long / 4) - P.deep = int(f_deep / 4) + P.long = math.round(f_long / 4) + P.deep = math.round(f_deep / 4) else error("Unsupported scale " .. tostring(P.scale) .. " in prefab: " .. tostring(P.name)) end diff --git a/games/doom/levels.lua b/games/doom/levels.lua index 4b687e27c2..8fa2211131 100644 --- a/games/doom/levels.lua +++ b/games/doom/levels.lua @@ -300,20 +300,13 @@ function DOOM.get_levels() local selected_mode = rand.pick(special_mode) if selected_mode == "streets" then LEV.has_streets = true - LEV.is_linear = false - LEV.is_nature = false - elseif selected_mode == "linear" then - LEV.has_streets = false - LEV.is_linear = true LEV.is_nature = false else LEV.has_streets = false - LEV.is_linear = false LEV.is_nature = true end else LEV.has_streets = false - LEV.is_linear = false LEV.is_nature = false end diff --git a/games/doom/resources.lua b/games/doom/resources.lua index 93e54618f3..0cc3ac2a98 100644 --- a/games/doom/resources.lua +++ b/games/doom/resources.lua @@ -957,7 +957,7 @@ function DOOM.all_done() gui.wad_merge_sections(dir .. "short_bars.wad") end - if ob_mod_enabled("compress_output") == 1 and OB_CONFIG.port ~= "dsda" then -- DSDA (I think) needs everything in the WAD still + if ob_mod_enabled("compress_output") == 1 then gui.pk3_insert_file("data/endoom/ENDOOM.bin", "ENDOOM.bin") else gui.wad_insert_file("data/endoom/ENDOOM.bin", "ENDOOM") diff --git a/games/doom/themes.lua b/games/doom/themes.lua index 726e530fec..943fd68a22 100644 --- a/games/doom/themes.lua +++ b/games/doom/themes.lua @@ -5934,6 +5934,505 @@ DOOM.NAMES = } } +-------------------------------------------------------------------- + +DOOM.TITLE_MAIN_STYLES = +{ + --- Solid styles --- + + solid_blue = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#00f" }, + + font_outline_mode = "shadow2", + font_outlines = { "#00c", "#009", "#006", "#000" }, + + narrow = 0.6, + + alt = + { + font_mode = "solid", + font_colors = { "#ccf" }, + font_outline_mode = "zoom", + font_outlines = { "#77f", "#00f", "#000" }, + }, + }, + + solid_red = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#f00" }, + + font_outline_mode = "shadow2", + font_outlines = { "#c00", "#900", "#600", "#000" }, + + narrow = 0.6, + + alt = + { + font_mode = "solid", + font_colors = { "#fff" }, + font_outline_mode = "surround", + font_outlines = { "#f44", "#900", "#000" }, + }, + }, + + solid_green = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#0f0" }, + + font_outline_mode = "shadow", + font_outlines = { "#0c0", "#090", "#060", "#000" }, + + narrow = 0.4, + }, + + solid_black_lightblue = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#000" }, + + font_outlines = { "#009", "#99f", "#ddd" }, + + narrow = 0.7, + }, + + shaded_white_n_blue = + { + font_mode = "solid", + + font_colors = { "#fff" }, + + font_outline_mode = "shadow", + font_outlines = { "#bbf", "#99f", "#55f", "#22f", "#00f", "#009", "#004", "#000" }, + + narrow = 0.4, + }, + + shaded_white_n_red = + { + font_mode = "solid", + + font_colors = { "#fff" }, + + font_outline_mode = "zoom", + font_outlines = { "#f99", "#f66", "#e00", "#b00", "#800", "#400", "#000" }, + + narrow = 0.4, + }, + + --- Gradient styles --- + + gradient_white_black = + { + font_mode = "gradient", + + font_colors = { "#fff", "#000" }, + + font_outlines = { "#000", "#555" }, + }, + + gradient_green_black = + { + font_mode = "gradient", + + font_colors = { "#7e6", "#000" }, + + font_outlines = { "#231", "#342" }, + }, + + gradient_pink_black = + { + font_mode = "gradient3", + + font_colors = { "#c77", "#611", "#000" }, + + font_outlines = { "#000", "#933" }, + }, + + gradient_black_brown = + { + font_mode = "gradient3", + + font_colors = { "#000", "#752", "#fb8" }, + + font_outlines = { "#432", "#000" }, + }, + + grad3_white_red_black = + { + font_mode = "gradient3", + + font_colors = { "#fff", "#f00", "#000" }, + + font_outlines = { "#c00" }, + }, + + grad3_white_blue_black = + { + font_mode = "gradient3", + + font_colors = { "#fff", "#00f", "#000" }, + + font_outlines = { "#00c" }, + }, + + grad3_white_orange_black = + { + font_mode = "gradient3", + + font_colors = { "#fff", "#720", "#000" }, + + font_outlines = { "#000" }, + }, + + gradmirror_orange_white = + { + font_mode = "gradient3", + + font_colors = { "#720", "#fff", "#720" }, + + font_outlines = { "#000" }, + }, + + gradmirror_yellow_orange = + { + font_mode = "gradient3", + + font_colors = { "#ff7", "#620", "#ff7" }, + + font_outlines = { "#000", "#000", "#000" }, + + narrow = 0.7, + }, + + --- Textured styles --- + + textured_tech = + { + font_mode = "texture", + + font_texture = "brushedmetal", + + font_outlines = { "#000" }, + + background = "techbg1", + + props = + { + barrel_1 = + { + image = "barrel1", + x = 40, + y = 160 + }, + barrel_2 = + { + image = "barrel1", + x = 255, + y = 160 + }, + }, + }, +} + + +DOOM.TITLE_SUB_STYLES = +{ + white = + { + font_mode = "solid", + font_colors = { "#ddd" }, + font_outlines = { "#000" }, + }, + + yellow = + { + prob = 25, + font_mode = "solid", + font_colors = { "#ff7" }, + font_outlines = { "#431" }, + }, + + yellow_outline = + { + font_mode = "solid", + font_colors = { "#000" }, + font_outlines = { "#ff7" }, + }, + + red_outline = + { + font_mode = "solid", + font_colors = { "#000" }, + font_outlines = { "#f44" }, + }, + + lightbrown = + { + font_mode = "solid", + font_colors = { "#ea7" }, + font_outlines = { "#431" }, + }, + + green = + { + font_mode = "solid", + font_colors = { "#6d5" }, + font_outlines = { "#242" }, + }, + + purple = + { + font_mode = "solid", + font_colors = { "#f0f" }, + font_outlines = { "#505" }, + }, +} + + +DOOM.TITLE_SPACE_STYLES = +{ + red_nebula = + { + hue1 = "#300", + hue2 = "#f00", + hue3 = "#fff", + thresh = 0.5, + }, + + blue_nebula = + { + hue1 = "#000", + hue2 = "#00f", + hue3 = "#99f", + thresh = 0.5, + }, + + green_nebula = + { + hue1 = "#000", + hue2 = "#363", + hue3 = "#6f6", + thresh = 0.5, + }, + + brown_nebula = + { + hue1 = "#000000", + hue2 = "#ab6f43", + hue3 = "#ffebdf", + thresh = 0.25, + power = 3.0, + }, + + firey_nebula = + { + prob = 100, + + hue1 = "#300", + hue2 = "#732", + hue3 = "#ff8", + thresh = 0.2, + power = 1.5, + }, + + grey_nebula = + { + prob = 5, + + hue1 = "#000", + hue2 = "#aaa", + hue3 = "#000", + power = 4, + }, + + purple_nebula = + { + prob = 5, + + hue1 = "#707", + hue2 = "#f0f", + hue3 = "#fff", + thresh = 0.3, + power = 2, + }, +} + + +DOOM.TITLE_INTERMISSION_STYLES = +{ + brown_box = + { + hue1 = "#332b13", + hue2 = "#774f2b", + hue3 = "#ab6f43", + + fracdim = 2.8 + }, + + blue_box = + { + hue1 = "#005", + hue2 = "#00c", + hue3 = "#33f", + + fracdim = 2.8 + }, + + pink_box = + { + hue1 = "#600", + hue2 = "#933", + hue3 = "#b55", + + fracdim = 2.8 + }, + + green_box = + { + hue1 = "#13230b", + hue2 = "#27551b", + hue3 = "#448822", + + fracdim = 2.8 + }, + + dark_box = + { + hue1 = "#111", + hue2 = "#222", + hue3 = "#333", + + fracdim = 2.9 + } +} + + +DOOM.TITLE_COLOR_RAMPS = +{ + white = + { + { 0,0,0 }, + { 255,255,255 } + }, + + light_grey = + { + { 0,0,0 }, + { 168,168,168 } + }, + + mid_grey = + { + { 0,0,0 }, + { 128,128,128 } + }, + + dark_grey = + { + { 0,0,0 }, + { 96,96,96 } + }, + + blue = + { + { 0,0,0 }, + { 0,0,255 } + }, + + blue_white = + { + { 0,0,0 }, + { 0,0,255 }, + { 231,231,255 } + }, + + red = + { + { 60,0,0 }, + { 255,0,0 } + }, + + red_white = + { + { 60,0,0 }, + { 255,0,0 }, + { 255,224,224 } + }, + + green = + { + { 8,23,8 }, + { 62,147,62 }, + { 115,255,115 } + }, + + mid_green = + { + { 8,23,8 }, + { 62,147,62 } + }, + + orange_white = + { + {43,35,15}, + {135,40,5}, + {215,95,11}, + {243,115,23}, + {255,235,219} + }, + + pink = + { + {60,5,5}, + {107,15,15}, + {155,51,51}, + {203,107,107}, + {255,183,183} + }, + + light_brown = + { + {0,0,0}, + {75,55,27}, + {119,79,43}, + {191,123,75}, + {255,179,131}, + {255,235,223} + }, + + brown_yellow = + { + {0,0,0}, + {115,43,0}, + {255,255,115} + } +} + +function DOOM.setup() + GAME.TITLE_MAIN_STYLES = DOOM.TITLE_MAIN_STYLES + GAME.TITLE_SUB_STYLES = DOOM.TITLE_SUB_STYLES + GAME.TITLE_SPACE_STYLES = DOOM.TITLE_SPACE_STYLES + GAME.TITLE_INTERMISSION_STYLES = DOOM.TITLE_INTERMISSION_STYLES + GAME.TITLE_COLOR_RAMPS = DOOM.TITLE_COLOR_RAMPS + GAME.title_screen_asset_dir = "games/doom/data/title" +end + function DOOM.slump_setup() if ob_match_game({game = {doom2=1, tnt=1, plutonia=1}}) then if OB_CONFIG.theme == "default" then diff --git a/games/doom/x_doom1.lua b/games/doom/x_doom1.lua index 708f1ade96..f9890faf51 100644 --- a/games/doom/x_doom1.lua +++ b/games/doom/x_doom1.lua @@ -5302,12 +5302,6 @@ function ULTDOOM.get_levels() end if not LEV.prebuilt then - if PARAM.float_linear_mode then - if rand.odds(PARAM.float_linear_mode) then - LEV.is_linear = true - end - end - -- nature mode if PARAM.float_nature_mode then if rand.odds(PARAM.float_nature_mode) then @@ -10601,8 +10595,8 @@ function ULTDOOM.factory_setup() error("Prefab not a multiple of four: " .. tostring(P.name)) end - P.long = int(f_long / 4) - P.deep = int(f_deep / 4) + P.long = math.round(f_long / 4) + P.deep = math.round(f_deep / 4) else error("Unsupported scale " .. tostring(P.scale) .. " in prefab: " .. tostring(P.name)) end diff --git a/games/heretic/base.lua b/games/heretic/base.lua index 0041e0c61f..2db67571b4 100644 --- a/games/heretic/base.lua +++ b/games/heretic/base.lua @@ -40,10 +40,6 @@ gui.import("stories") ------------------------------------------------------------ function HERETIC.all_done() - if ob_match_port("advanced") then - local wad_file = "games/heretic/data/HER_EXIT.wad" - gui.wad_merge_sections(wad_file) - end gui.wad_insert_file("data/endoom/ENDOOM.bin", "ENDTEXT") end @@ -65,6 +61,7 @@ OB_GAMES["heretic"] = hooks = { + setup = HERETIC.setup, factory_setup = HERETIC.factory_setup, slump_setup = HERETIC.slump_setup, get_levels = HERETIC.get_levels, diff --git a/games/heretic/data/HER_EXIT.wad b/games/heretic/data/HER_EXIT.wad deleted file mode 100644 index 1602d3d47e..0000000000 Binary files a/games/heretic/data/HER_EXIT.wad and /dev/null differ diff --git a/games/heretic/data/loading/loading_screens.wad b/games/heretic/data/loading/loading_screens.wad new file mode 100644 index 0000000000..e6a4591e2c Binary files /dev/null and b/games/heretic/data/loading/loading_screens.wad differ diff --git a/games/heretic/data/title/barrel1.tga b/games/heretic/data/title/barrel1.tga new file mode 100644 index 0000000000..b6ba29dc6d Binary files /dev/null and b/games/heretic/data/title/barrel1.tga differ diff --git a/games/heretic/data/title/brickwall.tga b/games/heretic/data/title/brickwall.tga new file mode 100644 index 0000000000..9e427f157b Binary files /dev/null and b/games/heretic/data/title/brickwall.tga differ diff --git a/games/heretic/factory.lua b/games/heretic/factory.lua index 24b6f76c24..9cc6e68338 100644 --- a/games/heretic/factory.lua +++ b/games/heretic/factory.lua @@ -6004,8 +6004,8 @@ function HERETIC.factory_setup() error("Prefab not a multiple of four: " .. tostring(P.name)) end - P.long = int(f_long / 4) - P.deep = int(f_deep / 4) + P.long = math.round(f_long / 4) + P.deep = math.round(f_deep / 4) else error("Unsupported scale " .. tostring(P.scale) .. " in prefab: " .. tostring(P.name)) end diff --git a/games/heretic/levels.lua b/games/heretic/levels.lua index 99e9b3af0f..793fc74cbb 100644 --- a/games/heretic/levels.lua +++ b/games/heretic/levels.lua @@ -277,20 +277,13 @@ function HERETIC.get_levels() local selected_mode = rand.pick(special_mode) if selected_mode == "streets" then LEV.has_streets = true - LEV.is_linear = false - LEV.is_nature = false - elseif selected_mode == "linear" then - LEV.has_streets = false - LEV.is_linear = true LEV.is_nature = false else LEV.has_streets = false - LEV.is_linear = false LEV.is_nature = true end else LEV.has_streets = false - LEV.is_linear = false LEV.is_nature = false end diff --git a/games/heretic/themes.lua b/games/heretic/themes.lua index 6d72761e26..72d41c34e4 100644 --- a/games/heretic/themes.lua +++ b/games/heretic/themes.lua @@ -2991,6 +2991,505 @@ function HERETIC.slump_setup() end end +-------------------------------------------------------------------- + +HERETIC.TITLE_MAIN_STYLES = +{ + --- Solid styles --- + + solid_blue = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#00f" }, + + font_outline_mode = "shadow2", + font_outlines = { "#00c", "#009", "#006", "#000" }, + + narrow = 0.6, + + alt = + { + font_mode = "solid", + font_colors = { "#ccf" }, + font_outline_mode = "zoom", + font_outlines = { "#77f", "#00f", "#000" }, + }, + }, + + solid_red = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#f00" }, + + font_outline_mode = "shadow2", + font_outlines = { "#c00", "#900", "#600", "#000" }, + + narrow = 0.6, + + alt = + { + font_mode = "solid", + font_colors = { "#fff" }, + font_outline_mode = "surround", + font_outlines = { "#f44", "#900", "#000" }, + }, + }, + + solid_green = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#0f0" }, + + font_outline_mode = "shadow", + font_outlines = { "#0c0", "#090", "#060", "#000" }, + + narrow = 0.4, + }, + + solid_black_lightblue = + { + prob = 25, + + font_mode = "solid", + + font_colors = { "#000" }, + + font_outlines = { "#009", "#99f", "#ddd" }, + + narrow = 0.7, + }, + + shaded_white_n_blue = + { + font_mode = "solid", + + font_colors = { "#fff" }, + + font_outline_mode = "shadow", + font_outlines = { "#bbf", "#99f", "#55f", "#22f", "#00f", "#009", "#004", "#000" }, + + narrow = 0.4, + }, + + shaded_white_n_red = + { + font_mode = "solid", + + font_colors = { "#fff" }, + + font_outline_mode = "zoom", + font_outlines = { "#f99", "#f66", "#e00", "#b00", "#800", "#400", "#000" }, + + narrow = 0.4, + }, + + --- Gradient styles --- + + gradient_white_black = + { + font_mode = "gradient", + + font_colors = { "#fff", "#000" }, + + font_outlines = { "#000", "#555" }, + }, + + gradient_green_black = + { + font_mode = "gradient", + + font_colors = { "#7e6", "#000" }, + + font_outlines = { "#231", "#342" }, + }, + + gradient_pink_black = + { + font_mode = "gradient3", + + font_colors = { "#c77", "#611", "#000" }, + + font_outlines = { "#000", "#933" }, + }, + + gradient_black_brown = + { + font_mode = "gradient3", + + font_colors = { "#000", "#752", "#fb8" }, + + font_outlines = { "#432", "#000" }, + }, + + grad3_white_red_black = + { + font_mode = "gradient3", + + font_colors = { "#fff", "#f00", "#000" }, + + font_outlines = { "#c00" }, + }, + + grad3_white_blue_black = + { + font_mode = "gradient3", + + font_colors = { "#fff", "#00f", "#000" }, + + font_outlines = { "#00c" }, + }, + + grad3_white_orange_black = + { + font_mode = "gradient3", + + font_colors = { "#fff", "#720", "#000" }, + + font_outlines = { "#000" }, + }, + + gradmirror_orange_white = + { + font_mode = "gradient3", + + font_colors = { "#720", "#fff", "#720" }, + + font_outlines = { "#000" }, + }, + + gradmirror_yellow_orange = + { + font_mode = "gradient3", + + font_colors = { "#ff7", "#620", "#ff7" }, + + font_outlines = { "#000", "#000", "#000" }, + + narrow = 0.7, + }, + + --- Textured styles --- + + textured_brick = + { + font_mode = "gradient", + + font_colors = { "#7e6", "#000" }, + + font_outlines = { "#231", "#342" }, + + background = "brickwall", + + props = + { + barrel_1 = + { + image = "barrel1", + x = 40, + y = 160 + }, + barrel_2 = + { + image = "barrel1", + x = 245, + y = 160 + }, + }, + }, +} + + +HERETIC.TITLE_SUB_STYLES = +{ + white = + { + font_mode = "solid", + font_colors = { "#ddd" }, + font_outlines = { "#000" }, + }, + + yellow = + { + prob = 25, + font_mode = "solid", + font_colors = { "#ff7" }, + font_outlines = { "#431" }, + }, + + yellow_outline = + { + font_mode = "solid", + font_colors = { "#000" }, + font_outlines = { "#ff7" }, + }, + + red_outline = + { + font_mode = "solid", + font_colors = { "#000" }, + font_outlines = { "#f44" }, + }, + + lightbrown = + { + font_mode = "solid", + font_colors = { "#ea7" }, + font_outlines = { "#431" }, + }, + + green = + { + font_mode = "solid", + font_colors = { "#6d5" }, + font_outlines = { "#242" }, + }, + + purple = + { + font_mode = "solid", + font_colors = { "#f0f" }, + font_outlines = { "#505" }, + }, +} + + +HERETIC.TITLE_SPACE_STYLES = +{ + red_nebula = + { + hue1 = "#300", + hue2 = "#f00", + hue3 = "#fff", + thresh = 0.5, + }, + + blue_nebula = + { + hue1 = "#000", + hue2 = "#00f", + hue3 = "#99f", + thresh = 0.5, + }, + + green_nebula = + { + hue1 = "#000", + hue2 = "#363", + hue3 = "#6f6", + thresh = 0.5, + }, + + brown_nebula = + { + hue1 = "#000000", + hue2 = "#ab6f43", + hue3 = "#ffebdf", + thresh = 0.25, + power = 3.0, + }, + + firey_nebula = + { + prob = 100, + + hue1 = "#300", + hue2 = "#732", + hue3 = "#ff8", + thresh = 0.2, + power = 1.5, + }, + + grey_nebula = + { + prob = 5, + + hue1 = "#000", + hue2 = "#aaa", + hue3 = "#000", + power = 4, + }, + + purple_nebula = + { + prob = 5, + + hue1 = "#707", + hue2 = "#f0f", + hue3 = "#fff", + thresh = 0.3, + power = 2, + }, +} + + +HERETIC.TITLE_INTERMISSION_STYLES = +{ + brown_box = + { + hue1 = "#332b13", + hue2 = "#774f2b", + hue3 = "#ab6f43", + + fracdim = 2.8 + }, + + blue_box = + { + hue1 = "#005", + hue2 = "#00c", + hue3 = "#33f", + + fracdim = 2.8 + }, + + pink_box = + { + hue1 = "#600", + hue2 = "#933", + hue3 = "#b55", + + fracdim = 2.8 + }, + + green_box = + { + hue1 = "#13230b", + hue2 = "#27551b", + hue3 = "#448822", + + fracdim = 2.8 + }, + + dark_box = + { + hue1 = "#111", + hue2 = "#222", + hue3 = "#333", + + fracdim = 2.9 + } +} + + +HERETIC.TITLE_COLOR_RAMPS = +{ + white = + { + { 0,0,0 }, + { 255,255,255 } + }, + + light_grey = + { + { 0,0,0 }, + { 168,168,168 } + }, + + mid_grey = + { + { 0,0,0 }, + { 128,128,128 } + }, + + dark_grey = + { + { 0,0,0 }, + { 96,96,96 } + }, + + blue = + { + { 0,0,0 }, + { 0,0,255 } + }, + + blue_white = + { + { 0,0,0 }, + { 0,0,255 }, + { 231,231,255 } + }, + + red = + { + { 60,0,0 }, + { 255,0,0 } + }, + + red_white = + { + { 60,0,0 }, + { 255,0,0 }, + { 255,224,224 } + }, + + green = + { + { 8,23,8 }, + { 62,147,62 }, + { 115,255,115 } + }, + + mid_green = + { + { 8,23,8 }, + { 62,147,62 } + }, + + orange_white = + { + {43,35,15}, + {135,40,5}, + {215,95,11}, + {243,115,23}, + {255,235,219} + }, + + pink = + { + {60,5,5}, + {107,15,15}, + {155,51,51}, + {203,107,107}, + {255,183,183} + }, + + light_brown = + { + {0,0,0}, + {75,55,27}, + {119,79,43}, + {191,123,75}, + {255,179,131}, + {255,235,223} + }, + + brown_yellow = + { + {0,0,0}, + {115,43,0}, + {255,255,115} + } +} + +function HERETIC.setup() + GAME.TITLE_MAIN_STYLES = HERETIC.TITLE_MAIN_STYLES + GAME.TITLE_SUB_STYLES = HERETIC.TITLE_SUB_STYLES + GAME.TITLE_SPACE_STYLES = HERETIC.TITLE_SPACE_STYLES + GAME.TITLE_INTERMISSION_STYLES = HERETIC.TITLE_INTERMISSION_STYLES + GAME.TITLE_COLOR_RAMPS = HERETIC.TITLE_COLOR_RAMPS + GAME.title_screen_asset_dir = "games/heretic/data/title" +end + ------------------------------------------------------------------------ OB_THEMES["city"] = diff --git a/games/heretic/vanilla_mats.lua b/games/heretic/vanilla_mats.lua index ebacc3c9e3..0843677302 100644 --- a/games/heretic/vanilla_mats.lua +++ b/games/heretic/vanilla_mats.lua @@ -2,8 +2,6 @@ HERETIC.VANILLA_MATS = { -- There are always added by Obsidian regardless of Engine selected "O_BOLT", - -- Added for exit sign variants - "HER_EXIT", -- Vanilla Flats "FLAT500", "FLAT502", diff --git a/games/noah/factory.lua b/games/noah/factory.lua index 248fa5c19d..9b5df02903 100644 --- a/games/noah/factory.lua +++ b/games/noah/factory.lua @@ -5171,7 +5171,7 @@ function NOAH.get_factory_levels(episode) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) goto foundsize end @@ -5209,7 +5209,7 @@ function NOAH.get_factory_levels(episode) local def_large = PARAM.float_level_upper_bound_wolf_3d - def_small or 42 -- this basically ramps up - ob_size = int(def_small + along * def_large) + ob_size = math.round(def_small + along * def_large) end ::foundsize:: @@ -5364,8 +5364,8 @@ function NOAH.factory_setup() error("Prefab not a multiple of four: " .. tostring(P.name)) end - P.long = int(f_long / 4) - P.deep = int(f_deep / 4) + P.long = math.round(f_long / 4) + P.deep = math.round(f_deep / 4) else error("Unsupported scale " .. tostring(P.scale) .. " in prefab: " .. tostring(P.name)) end diff --git a/games/obc/factory.lua b/games/obc/factory.lua index 7d61edf2fb..28704d7aaf 100644 --- a/games/obc/factory.lua +++ b/games/obc/factory.lua @@ -5128,7 +5128,7 @@ function OBC.get_factory_levels(episode) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) goto foundsize end @@ -5166,7 +5166,7 @@ function OBC.get_factory_levels(episode) local def_large = PARAM.float_level_upper_bound_wolf_3d - def_small or 42 -- this basically ramps up - ob_size = int(def_small + along * def_large) + ob_size = math.round(def_small + along * def_large) end ::foundsize:: @@ -5321,8 +5321,8 @@ function OBC.factory_setup() error("Prefab not a multiple of four: " .. tostring(P.name)) end - P.long = int(f_long / 4) - P.deep = int(f_deep / 4) + P.long = math.round(f_long / 4) + P.deep = math.round(f_deep / 4) else error("Unsupported scale " .. tostring(P.scale) .. " in prefab: " .. tostring(P.name)) end diff --git a/games/wolf/factory.lua b/games/wolf/factory.lua index d9523a739a..a697dd3ffc 100644 --- a/games/wolf/factory.lua +++ b/games/wolf/factory.lua @@ -5580,7 +5580,7 @@ function WOLF.get_factory_levels(episode) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) goto foundsize end @@ -5618,7 +5618,7 @@ function WOLF.get_factory_levels(episode) local def_large = PARAM.float_level_upper_bound_wolf_3d - def_small or 42 -- this basically ramps up - ob_size = int(def_small + along * def_large) + ob_size = math.round(def_small + along * def_large) end ::foundsize:: @@ -5773,8 +5773,8 @@ function WOLF.factory_setup() error("Prefab not a multiple of four: " .. tostring(P.name)) end - P.long = int(f_long / 4) - P.deep = int(f_deep / 4) + P.long = math.round(f_long / 4) + P.deep = math.round(f_deep / 4) else error("Unsupported scale " .. tostring(P.scale) .. " in prefab: " .. tostring(P.name)) end diff --git a/games/wolf/x_spear.lua b/games/wolf/x_spear.lua index 8acd06bfbd..3429c02781 100644 --- a/games/wolf/x_spear.lua +++ b/games/wolf/x_spear.lua @@ -306,7 +306,7 @@ function SPEAR.get_factory_levels(episode) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) goto foundsize end @@ -344,7 +344,7 @@ function SPEAR.get_factory_levels(episode) local def_large = PARAM.float_level_upper_bound_wolf_3d - def_small or 42 -- this basically ramps up - ob_size = int(def_small + along * def_large) + ob_size = math.round(def_small + along * def_large) end ::foundsize:: diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt new file mode 100644 index 0000000000..7a64cfc571 --- /dev/null +++ b/libraries/CMakeLists.txt @@ -0,0 +1,8 @@ +add_subdirectory(fastPRNG) +if(NOT CONSOLE_ONLY) + add_subdirectory(fltk) +endif() +add_subdirectory(minilua) +add_subdirectory(miniz) +add_subdirectory(physfs) +add_subdirectory(steve) \ No newline at end of file diff --git a/libraries/fastPRNG/CMakeLists.txt b/libraries/fastPRNG/CMakeLists.txt new file mode 100644 index 0000000000..2fb0b44ccb --- /dev/null +++ b/libraries/fastPRNG/CMakeLists.txt @@ -0,0 +1,8 @@ +########################################## +# fastPRNG +########################################## + +add_library(fastPRNG INTERFACE) + +target_include_directories(fastPRNG INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}) \ No newline at end of file diff --git a/libraries/gif-h/README.md b/libraries/gif-h/README.md deleted file mode 100644 index b98012863b..0000000000 --- a/libraries/gif-h/README.md +++ /dev/null @@ -1,45 +0,0 @@ -gif-h -===== - -This one-header library offers a simple, very limited way to create animated GIFs directly in code. -Those looking for particular cleverness are likely to be disappointed; it's pretty much a straight-ahead -implementation of the GIF format with optional Floyd-Steinberg dithering. (It does at least use delta -encoding - only the changed portions of each frame are saved.) - -So resulting files are often quite large. The hope is that it will be handy nonetheless as a quick and easily-integrated way for programs to spit out animations. - -Only RGBA8 is currently supported as an input format. (The alpha is ignored.) - -Email me : ctangora -at- gmail -dot- com - -Usage: -------------------- -Create a GifWriter struct. - -Pass the struct to GifBegin() to initialize values and write the file header. - -Pass frames of the animation to GifWriteFrame(). - -Finally, call GifEnd() to close the file handle and free memory. - - #include - #include - #include - int main() - { - int width = 100; - int height = 200; - std::vector black(width * height * 4, 0); - std::vector white(width * height * 4, 255); - - auto fileName = "bwgif.gif"; - int delay = 100; - GifWriter g; - GifBegin(&g, fileName, width, height, delay); - GifWriteFrame(&g, black.data(), width, height, delay); - GifWriteFrame(&g, white.data(), width, height, delay); - GifEnd(&g); - - return 0; - } - diff --git a/libraries/gif-h/gif.h b/libraries/gif-h/gif.h deleted file mode 100644 index 143aafc3b7..0000000000 --- a/libraries/gif-h/gif.h +++ /dev/null @@ -1,807 +0,0 @@ -// -// gif.h -// by Charlie Tangora -// Public domain. -// Email me : ctangora -at- gmail -dot- com -// -// This file offers a simple, very limited way to create animated GIFs directly -// in code. -// -// Those looking for particular cleverness are likely to be disappointed; it's -// pretty much a straight-ahead implementation of the GIF format with optional -// Floyd-Steinberg dithering. (It does at least use delta encoding - only the -// changed portions of each frame are saved.) -// -// So resulting files are often quite large. The hope is that it will be handy -// nonetheless as a quick and easily-integrated way for programs to spit out -// animations. -// -// Only RGBA8 is currently supported as an input format. (The alpha is ignored.) -// -// If capturing a buffer with a bottom-left origin (such as OpenGL), define -// GIF_FLIP_VERT to automatically flip the buffer data when writing the image -// (the buffer itself is unchanged. -// -// USAGE: -// Create a GifWriter struct. Pass it to GifBegin() to initialize and write the -// header. Pass subsequent frames to GifWriteFrame(). Finally, call GifEnd() to -// close the file handle and free memory. -// - -#ifndef gif_h -#define gif_h - -#include // for FILE* -#include // for memcpy and bzero -#include // for integer typedefs -#include // for bool macros - -// Define these macros to hook into a custom memory allocator. -// TEMP_MALLOC and TEMP_FREE will only be called in stack fashion - frees in the -// reverse order of mallocs and any temp memory allocated by a function will be -// freed before it exits. MALLOC and FREE are used only by GifBegin and GifEnd -// respectively (to allocate a buffer the size of the image, which is used to -// find changed pixels for delta-encoding.) - -#ifndef GIF_TEMP_MALLOC -#include -#define GIF_TEMP_MALLOC malloc -#endif - -#ifndef GIF_TEMP_FREE -#include -#define GIF_TEMP_FREE free -#endif - -#ifndef GIF_MALLOC -#include -#define GIF_MALLOC malloc -#endif - -#ifndef GIF_FREE -#include -#define GIF_FREE free -#endif - -const int kGifTransIndex = 0; - -typedef struct { - int bitDepth; - - uint8_t r[256]; - uint8_t g[256]; - uint8_t b[256]; - - // k-d tree over RGB space, organized in heap fashion - // i.e. left child of node i is node i*2, right child is node i*2+1 - // nodes 256-511 are implicitly the leaves, containing a color - uint8_t treeSplitElt[256]; - uint8_t treeSplit[256]; -} GifPalette; - -// max, min, and abs functions -int GifIMax(int l, int r) { return l > r ? l : r; } -int GifIMin(int l, int r) { return l < r ? l : r; } -int GifIAbs(int i) { return i < 0 ? -i : i; } - -// walks the k-d tree to pick the palette entry for a desired color. -// Takes as in/out parameters the current best color and its error - -// only changes them if it finds a better color in its subtree. -// this is the major hotspot in the code at the moment. -void GifGetClosestPaletteColor(GifPalette *pPal, int r, int g, int b, - int *bestInd, int *bestDiff, int treeRoot) { - // base case, reached the bottom of the tree - if (treeRoot > (1 << pPal->bitDepth) - 1) { - int ind = treeRoot - (1 << pPal->bitDepth); - if (ind == kGifTransIndex) return; - - // check whether this color is better than the current winner - int r_err = r - ((int32_t)pPal->r[ind]); - int g_err = g - ((int32_t)pPal->g[ind]); - int b_err = b - ((int32_t)pPal->b[ind]); - int diff = GifIAbs(r_err) + GifIAbs(g_err) + GifIAbs(b_err); - - if (diff < *bestDiff) { - *bestInd = ind; - *bestDiff = diff; - } - - return; - } - - // take the appropriate color (r, g, or b) for this node of the k-d tree - int comps[3]; - comps[0] = r; - comps[1] = g; - comps[2] = b; - int splitComp = comps[pPal->treeSplitElt[treeRoot]]; - - int splitPos = pPal->treeSplit[treeRoot]; - if (splitPos > splitComp) { - // check the left subtree - GifGetClosestPaletteColor(pPal, r, g, b, bestInd, bestDiff, - treeRoot * 2); - if (*bestDiff > splitPos - splitComp) { - // cannot prove there's not a better value in the right subtree, - // check that too - GifGetClosestPaletteColor(pPal, r, g, b, bestInd, bestDiff, - treeRoot * 2 + 1); - } - } else { - GifGetClosestPaletteColor(pPal, r, g, b, bestInd, bestDiff, - treeRoot * 2 + 1); - if (*bestDiff > splitComp - splitPos) { - GifGetClosestPaletteColor(pPal, r, g, b, bestInd, bestDiff, - treeRoot * 2); - } - } -} - -void GifSwapPixels(uint8_t *image, int pixA, int pixB) { - uint8_t rA = image[pixA * 4]; - uint8_t gA = image[pixA * 4 + 1]; - uint8_t bA = image[pixA * 4 + 2]; - uint8_t aA = image[pixA * 4 + 3]; - - uint8_t rB = image[pixB * 4]; - uint8_t gB = image[pixB * 4 + 1]; - uint8_t bB = image[pixB * 4 + 2]; - uint8_t aB = image[pixA * 4 + 3]; - - image[pixA * 4] = rB; - image[pixA * 4 + 1] = gB; - image[pixA * 4 + 2] = bB; - image[pixA * 4 + 3] = aB; - - image[pixB * 4] = rA; - image[pixB * 4 + 1] = gA; - image[pixB * 4 + 2] = bA; - image[pixB * 4 + 3] = aA; -} - -// just the partition operation from quicksort -int GifPartition(uint8_t *image, const int left, const int right, const int elt, - int pivotIndex) { - const int pivotValue = image[(pivotIndex)*4 + elt]; - GifSwapPixels(image, pivotIndex, right - 1); - int storeIndex = left; - bool split = 0; - for (int ii = left; ii < right - 1; ++ii) { - int arrayVal = image[ii * 4 + elt]; - if (arrayVal < pivotValue) { - GifSwapPixels(image, ii, storeIndex); - ++storeIndex; - } else if (arrayVal == pivotValue) { - if (split) { - GifSwapPixels(image, ii, storeIndex); - ++storeIndex; - } - split = !split; - } - } - GifSwapPixels(image, storeIndex, right - 1); - return storeIndex; -} - -// Perform an incomplete sort, finding all elements above and below the desired -// median -void GifPartitionByMedian(uint8_t *image, int left, int right, int com, - int neededCenter) { - if (left < right - 1) { - int pivotIndex = left + (right - left) / 2; - - pivotIndex = GifPartition(image, left, right, com, pivotIndex); - - // Only "sort" the section of the array that contains the median - if (pivotIndex > neededCenter) - GifPartitionByMedian(image, left, pivotIndex, com, neededCenter); - - if (pivotIndex < neededCenter) - GifPartitionByMedian(image, pivotIndex + 1, right, com, - neededCenter); - } -} - -// Builds a palette by creating a balanced k-d tree of all pixels in the image -void GifSplitPalette(uint8_t *image, int numPixels, int firstElt, int lastElt, - int splitElt, int splitDist, int treeNode, - bool buildForDither, GifPalette *pal) { - if (lastElt <= firstElt || numPixels == 0) return; - - // base case, bottom of the tree - if (lastElt == firstElt + 1) { - if (buildForDither) { - // Dithering needs at least one color as dark as anything - // in the image and at least one brightest color - - // otherwise it builds up error and produces strange artifacts - if (firstElt == 1) { - // special case: the darkest color in the image - uint32_t r = 255, g = 255, b = 255; - for (int ii = 0; ii < numPixels; ++ii) { - r = (uint32_t)GifIMin((int32_t)r, image[ii * 4 + 0]); - g = (uint32_t)GifIMin((int32_t)g, image[ii * 4 + 1]); - b = (uint32_t)GifIMin((int32_t)b, image[ii * 4 + 2]); - } - - pal->r[firstElt] = (uint8_t)r; - pal->g[firstElt] = (uint8_t)g; - pal->b[firstElt] = (uint8_t)b; - - return; - } - - if (firstElt == (1 << pal->bitDepth) - 1) { - // special case: the lightest color in the image - uint32_t r = 0, g = 0, b = 0; - for (int ii = 0; ii < numPixels; ++ii) { - r = (uint32_t)GifIMax((int32_t)r, image[ii * 4 + 0]); - g = (uint32_t)GifIMax((int32_t)g, image[ii * 4 + 1]); - b = (uint32_t)GifIMax((int32_t)b, image[ii * 4 + 2]); - } - - pal->r[firstElt] = (uint8_t)r; - pal->g[firstElt] = (uint8_t)g; - pal->b[firstElt] = (uint8_t)b; - - return; - } - } - - // otherwise, take the average of all colors in this subcube - uint64_t r = 0, g = 0, b = 0; - for (int ii = 0; ii < numPixels; ++ii) { - r += image[ii * 4 + 0]; - g += image[ii * 4 + 1]; - b += image[ii * 4 + 2]; - } - - r += (uint64_t)numPixels / 2; // round to nearest - g += (uint64_t)numPixels / 2; - b += (uint64_t)numPixels / 2; - - r /= (uint64_t)numPixels; - g /= (uint64_t)numPixels; - b /= (uint64_t)numPixels; - - pal->r[firstElt] = (uint8_t)r; - pal->g[firstElt] = (uint8_t)g; - pal->b[firstElt] = (uint8_t)b; - - return; - } - - // Find the axis with the largest range - int minR = 255, maxR = 0; - int minG = 255, maxG = 0; - int minB = 255, maxB = 0; - for (int ii = 0; ii < numPixels; ++ii) { - int r = image[ii * 4 + 0]; - int g = image[ii * 4 + 1]; - int b = image[ii * 4 + 2]; - - if (r > maxR) maxR = r; - if (r < minR) minR = r; - - if (g > maxG) maxG = g; - if (g < minG) minG = g; - - if (b > maxB) maxB = b; - if (b < minB) minB = b; - } - - int rRange = maxR - minR; - int gRange = maxG - minG; - int bRange = maxB - minB; - - // and split along that axis. (incidentally, this means this isn't a - // "proper" k-d tree but I don't know what else to call it) - int splitCom = 1; - if (bRange > gRange) splitCom = 2; - if (rRange > bRange && rRange > gRange) splitCom = 0; - - int subPixelsA = numPixels * (splitElt - firstElt) / (lastElt - firstElt); - int subPixelsB = numPixels - subPixelsA; - - GifPartitionByMedian(image, 0, numPixels, splitCom, subPixelsA); - - pal->treeSplitElt[treeNode] = (uint8_t)splitCom; - pal->treeSplit[treeNode] = image[subPixelsA * 4 + splitCom]; - - GifSplitPalette(image, subPixelsA, firstElt, splitElt, splitElt - splitDist, - splitDist / 2, treeNode * 2, buildForDither, pal); - GifSplitPalette(image + subPixelsA * 4, subPixelsB, splitElt, lastElt, - splitElt + splitDist, splitDist / 2, treeNode * 2 + 1, - buildForDither, pal); -} - -// Finds all pixels that have changed from the previous image and -// moves them to the fromt of th buffer. -// This allows us to build a palette optimized for the colors of the -// changed pixels only. -int GifPickChangedPixels(const uint8_t *lastFrame, uint8_t *frame, - int numPixels) { - int numChanged = 0; - uint8_t *writeIter = frame; - - for (int ii = 0; ii < numPixels; ++ii) { - if (lastFrame[0] != frame[0] || lastFrame[1] != frame[1] || - lastFrame[2] != frame[2]) { - writeIter[0] = frame[0]; - writeIter[1] = frame[1]; - writeIter[2] = frame[2]; - ++numChanged; - writeIter += 4; - } - lastFrame += 4; - frame += 4; - } - - return numChanged; -} - -// Creates a palette by placing all the image pixels in a k-d tree and then -// averaging the blocks at the bottom. This is known as the "modified median -// split" technique -void GifMakePalette(const uint8_t *lastFrame, const uint8_t *nextFrame, - uint32_t width, uint32_t height, int bitDepth, - bool buildForDither, GifPalette *pPal) { - pPal->bitDepth = bitDepth; - - // SplitPalette is destructive (it sorts the pixels by color) so - // we must create a copy of the image for it to destroy - size_t imageSize = (size_t)(width * height * 4 * sizeof(uint8_t)); - uint8_t *destroyableImage = (uint8_t *)GIF_TEMP_MALLOC(imageSize); - memcpy(destroyableImage, nextFrame, imageSize); - - int numPixels = (int)(width * height); - if (lastFrame) - numPixels = - GifPickChangedPixels(lastFrame, destroyableImage, numPixels); - - const int lastElt = 1 << bitDepth; - const int splitElt = lastElt / 2; - const int splitDist = splitElt / 2; - - GifSplitPalette(destroyableImage, numPixels, 1, lastElt, splitElt, - splitDist, 1, buildForDither, pPal); - - GIF_TEMP_FREE(destroyableImage); - - // add the bottom node for the transparency index - pPal->treeSplit[1 << (bitDepth - 1)] = 0; - pPal->treeSplitElt[1 << (bitDepth - 1)] = 0; - - pPal->r[0] = pPal->g[0] = pPal->b[0] = 0; -} - -// Implements Floyd-Steinberg dithering, writes palette value to alpha -void GifDitherImage(const uint8_t *lastFrame, const uint8_t *nextFrame, - uint8_t *outFrame, uint32_t width, uint32_t height, - GifPalette *pPal) { - int numPixels = (int)(width * height); - - // quantPixels initially holds color*256 for all pixels - // The extra 8 bits of precision allow for sub-single-color error values - // to be propagated - int32_t *quantPixels = - (int32_t *)GIF_TEMP_MALLOC(sizeof(int32_t) * (size_t)numPixels * 4); - - for (int ii = 0; ii < numPixels * 4; ++ii) { - uint8_t pix = nextFrame[ii]; - int32_t pix16 = (int32_t)(pix)*256; - quantPixels[ii] = pix16; - } - - for (uint32_t yy = 0; yy < height; ++yy) { - for (uint32_t xx = 0; xx < width; ++xx) { - int32_t *nextPix = quantPixels + 4 * (yy * width + xx); - const uint8_t *lastPix = - lastFrame ? lastFrame + 4 * (yy * width + xx) : NULL; - - // Compute the colors we want (rounding to nearest) - int32_t rr = (nextPix[0] + 127) / 256; - int32_t gg = (nextPix[1] + 127) / 256; - int32_t bb = (nextPix[2] + 127) / 256; - - // if it happens that we want the color from last frame, then just - // write out a transparent pixel - if (lastFrame && lastPix[0] == rr && lastPix[1] == gg && - lastPix[2] == bb) { - nextPix[0] = rr; - nextPix[1] = gg; - nextPix[2] = bb; - nextPix[3] = kGifTransIndex; - continue; - } - - int32_t bestDiff = 1000000; - int32_t bestInd = kGifTransIndex; - - // Search the palete - GifGetClosestPaletteColor(pPal, rr, gg, bb, &bestInd, &bestDiff, 1); - - // Write the result to the temp buffer - int32_t r_err = nextPix[0] - (int32_t)(pPal->r[bestInd]) * 256; - int32_t g_err = nextPix[1] - (int32_t)(pPal->g[bestInd]) * 256; - int32_t b_err = nextPix[2] - (int32_t)(pPal->b[bestInd]) * 256; - - nextPix[0] = pPal->r[bestInd]; - nextPix[1] = pPal->g[bestInd]; - nextPix[2] = pPal->b[bestInd]; - nextPix[3] = bestInd; - - // Propagate the error to the four adjacent locations - // that we haven't touched yet - int quantloc_7 = (int)(yy * width + xx + 1); - int quantloc_3 = (int)(yy * width + width + xx - 1); - int quantloc_5 = (int)(yy * width + width + xx); - int quantloc_1 = (int)(yy * width + width + xx + 1); - - if (quantloc_7 < numPixels) { - int32_t *pix7 = quantPixels + 4 * quantloc_7; - pix7[0] += GifIMax(-pix7[0], r_err * 7 / 16); - pix7[1] += GifIMax(-pix7[1], g_err * 7 / 16); - pix7[2] += GifIMax(-pix7[2], b_err * 7 / 16); - } - - if (quantloc_3 < numPixels) { - int32_t *pix3 = quantPixels + 4 * quantloc_3; - pix3[0] += GifIMax(-pix3[0], r_err * 3 / 16); - pix3[1] += GifIMax(-pix3[1], g_err * 3 / 16); - pix3[2] += GifIMax(-pix3[2], b_err * 3 / 16); - } - - if (quantloc_5 < numPixels) { - int32_t *pix5 = quantPixels + 4 * quantloc_5; - pix5[0] += GifIMax(-pix5[0], r_err * 5 / 16); - pix5[1] += GifIMax(-pix5[1], g_err * 5 / 16); - pix5[2] += GifIMax(-pix5[2], b_err * 5 / 16); - } - - if (quantloc_1 < numPixels) { - int32_t *pix1 = quantPixels + 4 * quantloc_1; - pix1[0] += GifIMax(-pix1[0], r_err / 16); - pix1[1] += GifIMax(-pix1[1], g_err / 16); - pix1[2] += GifIMax(-pix1[2], b_err / 16); - } - } - } - - // Copy the palettized result to the output buffer - for (int ii = 0; ii < numPixels * 4; ++ii) { - outFrame[ii] = (uint8_t)quantPixels[ii]; - } - - GIF_TEMP_FREE(quantPixels); -} - -// Picks palette colors for the image using simple thresholding, no dithering -void GifThresholdImage(const uint8_t *lastFrame, const uint8_t *nextFrame, - uint8_t *outFrame, uint32_t width, uint32_t height, - GifPalette *pPal) { - uint32_t numPixels = width * height; - for (uint32_t ii = 0; ii < numPixels; ++ii) { - // if a previous color is available, and it matches the current color, - // set the pixel to transparent - if (lastFrame && lastFrame[0] == nextFrame[0] && - lastFrame[1] == nextFrame[1] && lastFrame[2] == nextFrame[2]) { - outFrame[0] = lastFrame[0]; - outFrame[1] = lastFrame[1]; - outFrame[2] = lastFrame[2]; - outFrame[3] = kGifTransIndex; - } else { - // palettize the pixel - int32_t bestDiff = 1000000; - int32_t bestInd = 1; - GifGetClosestPaletteColor(pPal, nextFrame[0], nextFrame[1], - nextFrame[2], &bestInd, &bestDiff, 1); - - // Write the resulting color to the output buffer - outFrame[0] = pPal->r[bestInd]; - outFrame[1] = pPal->g[bestInd]; - outFrame[2] = pPal->b[bestInd]; - outFrame[3] = (uint8_t)bestInd; - } - - if (lastFrame) lastFrame += 4; - outFrame += 4; - nextFrame += 4; - } -} - -// Simple structure to write out the LZW-compressed portion of the image -// one bit at a time -typedef struct { - uint8_t bitIndex; // how many bits in the partial byte written so far - uint8_t byte; // current partial byte - - uint32_t chunkIndex; - uint8_t chunk[256]; // bytes are written in here until we have 256 of them, - // then written to the file -} GifBitStatus; - -// insert a single bit -void GifWriteBit(GifBitStatus *stat, uint32_t bit) { - bit = bit & 1; - bit = bit << stat->bitIndex; - stat->byte |= bit; - - ++stat->bitIndex; - if (stat->bitIndex > 7) { - // move the newly-finished byte to the chunk buffer - stat->chunk[stat->chunkIndex++] = stat->byte; - // and start a new byte - stat->bitIndex = 0; - stat->byte = 0; - } -} - -// write all bytes so far to the file -void GifWriteChunk(FILE *f, GifBitStatus *stat) { - fputc((int)stat->chunkIndex, f); - fwrite(stat->chunk, 1, stat->chunkIndex, f); - - stat->bitIndex = 0; - stat->byte = 0; - stat->chunkIndex = 0; -} - -void GifWriteCode(FILE *f, GifBitStatus *stat, uint32_t code, uint32_t length) { - for (uint32_t ii = 0; ii < length; ++ii) { - GifWriteBit(stat, code); - code = code >> 1; - - if (stat->chunkIndex == 255) { - GifWriteChunk(f, stat); - } - } -} - -// The LZW dictionary is a 256-ary tree constructed as the file is encoded, -// this is one node -typedef struct { - uint16_t m_next[256]; -} GifLzwNode; - -// write a 256-color (8-bit) image palette to the file -void GifWritePalette(const GifPalette *pPal, FILE *f) { - fputc(0, f); // first color: transparency - fputc(0, f); - fputc(0, f); - - for (int ii = 1; ii < (1 << pPal->bitDepth); ++ii) { - uint32_t r = pPal->r[ii]; - uint32_t g = pPal->g[ii]; - uint32_t b = pPal->b[ii]; - - fputc((int)r, f); - fputc((int)g, f); - fputc((int)b, f); - } -} - -// write the image header, LZW-compress and write out the image -void GifWriteLzwImage(FILE *f, uint8_t *image, uint32_t left, uint32_t top, - uint32_t width, uint32_t height, uint32_t delay, - GifPalette *pPal) { - // graphics control extension - fputc(0x21, f); - fputc(0xf9, f); - fputc(0x04, f); - fputc(0x05, f); // leave prev frame in place, this frame has transparency - fputc(delay & 0xff, f); - fputc((delay >> 8) & 0xff, f); - fputc(kGifTransIndex, f); // transparent color index - fputc(0, f); - - fputc(0x2c, f); // image descriptor block - - fputc(left & 0xff, f); // corner of image in canvas space - fputc((left >> 8) & 0xff, f); - fputc(top & 0xff, f); - fputc((top >> 8) & 0xff, f); - - fputc(width & 0xff, f); // width and height of image - fputc((width >> 8) & 0xff, f); - fputc(height & 0xff, f); - fputc((height >> 8) & 0xff, f); - - // fputc(0, f); // no local color table, no transparency - // fputc(0x80, f); // no local color table, but transparency - - fputc(0x80 + pPal->bitDepth - 1, - f); // local color table present, 2 ^ bitDepth entries - GifWritePalette(pPal, f); - - const int minCodeSize = pPal->bitDepth; - const uint32_t clearCode = 1 << pPal->bitDepth; - - fputc(minCodeSize, f); // min code size 8 bits - - GifLzwNode *codetree = - (GifLzwNode *)GIF_TEMP_MALLOC(sizeof(GifLzwNode) * 4096); - - memset(codetree, 0, sizeof(GifLzwNode) * 4096); - int32_t curCode = -1; - uint32_t codeSize = (uint32_t)minCodeSize + 1; - uint32_t maxCode = clearCode + 1; - - GifBitStatus stat; - stat.byte = 0; - stat.bitIndex = 0; - stat.chunkIndex = 0; - - GifWriteCode(f, &stat, clearCode, - codeSize); // start with a fresh LZW dictionary - - for (uint32_t yy = 0; yy < height; ++yy) { - for (uint32_t xx = 0; xx < width; ++xx) { -#ifdef GIF_FLIP_VERT - // bottom-left origin image (such as an OpenGL capture) - uint8_t nextValue = image[((height - 1 - yy) * width + xx) * 4 + 3]; -#else - // top-left origin - uint8_t nextValue = image[(yy * width + xx) * 4 + 3]; -#endif - - // "loser mode" - no compression, every single code is followed - // immediately by a clear - // WriteCode( f, stat, nextValue, codeSize ); - // WriteCode( f, stat, 256, codeSize ); - - if (curCode < 0) { - // first value in a new run - curCode = nextValue; - } else if (codetree[curCode].m_next[nextValue]) { - // current run already in the dictionary - curCode = codetree[curCode].m_next[nextValue]; - } else { - // finish the current run, write a code - GifWriteCode(f, &stat, (uint32_t)curCode, codeSize); - - // insert the new run into the dictionary - codetree[curCode].m_next[nextValue] = (uint16_t)++maxCode; - - if (maxCode >= (1ul << codeSize)) { - // dictionary entry count has broken a size barrier, - // we need more bits for codes - codeSize++; - } - if (maxCode == 4095) { - // the dictionary is full, clear it out and begin anew - GifWriteCode(f, &stat, clearCode, codeSize); // clear tree - - memset(codetree, 0, sizeof(GifLzwNode) * 4096); - codeSize = (uint32_t)(minCodeSize + 1); - maxCode = clearCode + 1; - } - - curCode = nextValue; - } - } - } - - // compression footer - GifWriteCode(f, &stat, (uint32_t)curCode, codeSize); - GifWriteCode(f, &stat, clearCode, codeSize); - GifWriteCode(f, &stat, clearCode + 1, (uint32_t)minCodeSize + 1); - - // write out the last partial chunk - while (stat.bitIndex) GifWriteBit(&stat, 0); - if (stat.chunkIndex) GifWriteChunk(f, &stat); - - fputc(0, f); // image block terminator - - GIF_TEMP_FREE(codetree); -} - -typedef struct { - FILE *f; - uint8_t *oldImage; - bool firstFrame; -} GifWriter; - -// Creates a gif file. -// The input GIFWriter is assumed to be uninitialized. -// The delay value is the time between frames in hundredths of a second - note -// that not all viewers pay much attention to this value. -bool GifBegin(GifWriter *writer, FILE *filename, uint32_t width, - uint32_t height, uint32_t delay, int32_t bitDepth = 8, - bool dither = false) { - (void)bitDepth; - (void)dither; // Mute "Unused argument" warnings - if (!filename) return false; - writer->f = filename; - - writer->firstFrame = true; - - // allocate - writer->oldImage = (uint8_t *)GIF_MALLOC(width * height * 4); - - fputs("GIF89a", writer->f); - - // screen descriptor - fputc(width & 0xff, writer->f); - fputc((width >> 8) & 0xff, writer->f); - fputc(height & 0xff, writer->f); - fputc((height >> 8) & 0xff, writer->f); - - fputc(0xf0, - writer->f); // there is an unsorted global color table of 2 entries - fputc(0, writer->f); // background color - fputc(0, writer->f); // pixels are square (we need to specify this because - // it's 1989) - - // now the "global" palette (really just a dummy palette) - // color 0: black - fputc(0, writer->f); - fputc(0, writer->f); - fputc(0, writer->f); - // color 1: also black - fputc(0, writer->f); - fputc(0, writer->f); - fputc(0, writer->f); - - if (delay != 0) { - // animation header - fputc(0x21, writer->f); // extension - fputc(0xff, writer->f); // application specific - fputc(11, writer->f); // length 11 - fputs("NETSCAPE2.0", writer->f); // yes, really - fputc(3, writer->f); // 3 bytes of NETSCAPE2.0 data - - fputc(1, writer->f); // JUST BECAUSE - fputc(0, writer->f); // loop infinitely (byte 0) - fputc(0, writer->f); // loop infinitely (byte 1) - - fputc(0, writer->f); // block terminator - } - - return true; -} - -// Writes out a new frame to a GIF in progress. -// The GIFWriter should have been created by GIFBegin. -// AFAIK, it is legal to use different bit depths for different frames of an -// image - this may be handy to save bits in animations that don't change much. -bool GifWriteFrame(GifWriter *writer, const uint8_t *image, uint32_t width, - uint32_t height, uint32_t delay, int bitDepth = 8, - bool dither = false) { - if (!writer->f) return false; - - const uint8_t *oldImage = writer->firstFrame ? NULL : writer->oldImage; - writer->firstFrame = false; - - GifPalette pal; - GifMakePalette((dither ? NULL : oldImage), image, width, height, bitDepth, - dither, &pal); - - if (dither) - GifDitherImage(oldImage, image, writer->oldImage, width, height, &pal); - else - GifThresholdImage(oldImage, image, writer->oldImage, width, height, - &pal); - - GifWriteLzwImage(writer->f, writer->oldImage, 0, 0, width, height, delay, - &pal); - - return true; -} - -// Writes the EOF code, closes the file handle, and frees temp memory used by a -// GIF. Many if not most viewers will still display a GIF properly if the EOF -// code is missing, but it's still a good idea to write it out. -bool GifEnd(GifWriter *writer) { - if (!writer->f) return false; - - fputc(0x3b, writer->f); // end of file - fclose(writer->f); - GIF_FREE(writer->oldImage); - - writer->f = NULL; - writer->oldImage = NULL; - - return true; -} - -#endif diff --git a/libraries/minilua/CMakeLists.txt b/libraries/minilua/CMakeLists.txt new file mode 100644 index 0000000000..8be90e620a --- /dev/null +++ b/libraries/minilua/CMakeLists.txt @@ -0,0 +1,7 @@ +########################################## +# minilua +########################################## + +add_library(minilua minilua.c) + +target_include_directories(minilua PUBLIC ./) \ No newline at end of file diff --git a/libraries/minilua/minilua.c b/libraries/minilua/minilua.c new file mode 100644 index 0000000000..29b81a1828 --- /dev/null +++ b/libraries/minilua/minilua.c @@ -0,0 +1,2 @@ +#define LUA_IMPL +#include "minilua.h" \ No newline at end of file diff --git a/libraries/minilua/minilua.h b/libraries/minilua/minilua.h index 4ec3dcafff..e0d19b1c32 100644 --- a/libraries/minilua/minilua.h +++ b/libraries/minilua/minilua.h @@ -2,7 +2,7 @@ minilua.h -- Lua in a single header Project URL: https://github.com/edubart/minilua - This is Lua 5.4.6 contained in a single header to be bundled in C/C++ applications with ease. + This is Lua 5.4.7 contained in a single header to be bundled in C/C++ applications with ease. Lua is a powerful, efficient, lightweight, embeddable scripting language. Do the following in *one* C file to create the implementation: @@ -345,6 +345,15 @@ extern "C" { #endif + +/* +** LUA_IGMARK is a mark to ignore all after it when building the +** module name (e.g., used to build the luaopen_ function name). +** Typically, the suffix after the mark is the module version, +** as in "mod-v1.2.so". +*/ +#define LUA_IGMARK "-" + /* }================================================================== */ @@ -899,14 +908,14 @@ extern "C" { #define LUA_VERSION_MAJOR "5" #define LUA_VERSION_MINOR "4" -#define LUA_VERSION_RELEASE "6" +#define LUA_VERSION_RELEASE "7" #define LUA_VERSION_NUM 504 -#define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 6) +#define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 7) #define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR #define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE -#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2023 Lua.org, PUC-Rio" +#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2024 Lua.org, PUC-Rio" #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" @@ -1378,7 +1387,7 @@ struct lua_Debug { /****************************************************************************** -* Copyright (C) 1994-2023 Lua.org, PUC-Rio. +* Copyright (C) 1994-2024 Lua.org, PUC-Rio. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -2525,7 +2534,7 @@ typedef struct GCObject { typedef struct TString { CommonHeader; lu_byte extra; /* reserved words for short strings; "has hash" for longs */ - lu_byte shrlen; /* length for short strings */ + lu_byte shrlen; /* length for short strings, 0xFF for long strings */ unsigned int hash; union { size_t lnglen; /* length for long strings */ @@ -2537,19 +2546,17 @@ typedef struct TString { /* -** Get the actual string (array of bytes) from a 'TString'. +** Get the actual string (array of bytes) from a 'TString'. (Generic +** version and specialized versions for long and short strings.) */ -#define getstr(ts) ((ts)->contents) - +#define getstr(ts) ((ts)->contents) +#define getlngstr(ts) check_exp((ts)->shrlen == 0xFF, (ts)->contents) +#define getshrstr(ts) check_exp((ts)->shrlen != 0xFF, (ts)->contents) -/* get the actual string (array of bytes) from a Lua value */ -#define svalue(o) getstr(tsvalue(o)) /* get string length from 'TString *s' */ -#define tsslen(s) ((s)->tt == LUA_VSHRSTR ? (s)->shrlen : (s)->u.lnglen) - -/* get string length from 'TValue *o' */ -#define vslen(o) tsslen(tsvalue(o)) +#define tsslen(s) \ + ((s)->shrlen != 0xFF ? (s)->shrlen : (s)->u.lnglen) /* }================================================================== */ @@ -3056,7 +3063,6 @@ LUAI_FUNC void *luaM_malloc_ (lua_State *L, size_t size, int tag); /*#include "lobject.h"*/ -/*#include "lstate.h"*/ /* @@ -3143,8 +3149,8 @@ LUAI_FUNC int luaT_callorderiTM (lua_State *L, const TValue *p1, int v2, int inv, int isfloat, TMS event); LUAI_FUNC void luaT_adjustvarargs (lua_State *L, int nfixparams, - CallInfo *ci, const Proto *p); -LUAI_FUNC void luaT_getvarargs (lua_State *L, CallInfo *ci, + struct CallInfo *ci, const Proto *p); +LUAI_FUNC void luaT_getvarargs (lua_State *L, struct CallInfo *ci, StkId where, int wanted); @@ -3332,7 +3338,7 @@ struct CallInfo { union { struct { /* only for Lua functions */ const Instruction *savedpc; - volatile l_signalT trap; + volatile l_signalT trap; /* function is tracing lines/counts */ int nextraargs; /* # of extra arguments in vararg functions */ } l; struct { /* only for C functions */ @@ -3547,7 +3553,6 @@ union GCUnion { LUAI_FUNC void luaE_setdebt (global_State *g, l_mem debt); LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); LUAI_FUNC CallInfo *luaE_extendCI (lua_State *L); -LUAI_FUNC void luaE_freeCI (lua_State *L); LUAI_FUNC void luaE_shrinkCI (lua_State *L); LUAI_FUNC void luaE_checkcstack (lua_State *L); LUAI_FUNC void luaE_incCstack (lua_State *L); @@ -3836,15 +3841,15 @@ OP_LOADNIL,/* A B R[A], R[A+1], ..., R[A+B] := nil */ OP_GETUPVAL,/* A B R[A] := UpValue[B] */ OP_SETUPVAL,/* A B UpValue[B] := R[A] */ -OP_GETTABUP,/* A B C R[A] := UpValue[B][K[C]:string] */ +OP_GETTABUP,/* A B C R[A] := UpValue[B][K[C]:shortstring] */ OP_GETTABLE,/* A B C R[A] := R[B][R[C]] */ OP_GETI,/* A B C R[A] := R[B][C] */ -OP_GETFIELD,/* A B C R[A] := R[B][K[C]:string] */ +OP_GETFIELD,/* A B C R[A] := R[B][K[C]:shortstring] */ -OP_SETTABUP,/* A B C UpValue[A][K[B]:string] := RK(C) */ +OP_SETTABUP,/* A B C UpValue[A][K[B]:shortstring] := RK(C) */ OP_SETTABLE,/* A B C R[A][R[B]] := RK(C) */ OP_SETI,/* A B C R[A][B] := RK(C) */ -OP_SETFIELD,/* A B C R[A][K[B]:string] := RK(C) */ +OP_SETFIELD,/* A B C R[A][K[B]:shortstring] := RK(C) */ OP_NEWTABLE,/* A B C k R[A] := {} */ @@ -4089,6 +4094,7 @@ LUAI_FUNC const char *luaG_addinfo (lua_State *L, const char *msg, TString *src, int line); LUAI_FUNC l_noret luaG_errormsg (lua_State *L); LUAI_FUNC int luaG_traceexec (lua_State *L, const Instruction *pc); +LUAI_FUNC int luaG_tracecall (lua_State *L); #endif @@ -4165,7 +4171,6 @@ LUAI_FUNC int luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, LUAI_FUNC CallInfo *luaD_precall (lua_State *L, StkId func, int nResults); LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults); LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults); -LUAI_FUNC StkId luaD_tryfuncTM (lua_State *L, StkId func); LUAI_FUNC int luaD_closeprotected (lua_State *L, ptrdiff_t level, int status); LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, ptrdiff_t oldtop, ptrdiff_t ef); @@ -4526,8 +4531,7 @@ LUAI_FUNC TString *luaS_createlngstrobj (lua_State *L, size_t l); /* ** Encode major-minor version in one byte, one nibble for each */ -#define MYINT(s) (s[0]-'0') /* assume one-digit numerals */ -#define LUAC_VERSION (MYINT(LUA_VERSION_MAJOR)*16+MYINT(LUA_VERSION_MINOR)) +#define LUAC_VERSION (((LUA_VERSION_NUM / 100) * 16) + LUA_VERSION_NUM % 100) #define LUAC_FORMAT 0 /* this is the official format */ @@ -4725,8 +4729,6 @@ LUAI_FUNC void luaH_setint (lua_State *L, Table *t, lua_Integer key, LUAI_FUNC const TValue *luaH_getshortstr (Table *t, TString *key); LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); -LUAI_FUNC void luaH_newkey (lua_State *L, Table *t, const TValue *key, - TValue *value); LUAI_FUNC void luaH_set (lua_State *L, Table *t, const TValue *key, TValue *value); LUAI_FUNC void luaH_finishset (lua_State *L, Table *t, const TValue *key, @@ -4981,10 +4983,8 @@ typedef enum UnOpr { OPR_MINUS, OPR_BNOT, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; LUAI_FUNC int luaK_code (FuncState *fs, Instruction i); LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); -LUAI_FUNC int luaK_codeAsBx (FuncState *fs, OpCode o, int A, int Bx); LUAI_FUNC int luaK_codeABCk (FuncState *fs, OpCode o, int A, int B, int C, int k); -LUAI_FUNC int luaK_isKint (expdesc *e); LUAI_FUNC int luaK_exp2const (FuncState *fs, const expdesc *e, TValue *v); LUAI_FUNC void luaK_fixline (FuncState *fs, int line); LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); @@ -4996,7 +4996,6 @@ LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2anyregup (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); -LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); @@ -5798,7 +5797,7 @@ static size_t loadUnsigned (LoadState *S, size_t limit) { static size_t loadSize (LoadState *S) { - return loadUnsigned(S, ~(size_t)0); + return loadUnsigned(S, MAX_SIZET); } @@ -5839,7 +5838,7 @@ static TString *loadStringN (LoadState *S, Proto *p) { ts = luaS_createlngstrobj(L, size); /* create string */ setsvalue2s(L, L->top.p, ts); /* anchor it ('loadVector' can GC) */ luaD_inctop(L); - loadVector(S, getstr(ts), size); /* load directly in final place */ + loadVector(S, getlngstr(ts), size); /* load directly in final place */ L->top.p--; /* pop string */ } luaC_objbarrier(L, p, ts); @@ -6406,7 +6405,7 @@ CallInfo *luaE_extendCI (lua_State *L) { /* ** free all CallInfo structures not in use by a thread */ -void luaE_freeCI (lua_State *L) { +static void freeCI (lua_State *L) { CallInfo *ci = L->ci; CallInfo *next = ci->next; ci->next = NULL; @@ -6491,7 +6490,7 @@ static void freestack (lua_State *L) { if (L->stack.p == NULL) return; /* stack not completely built yet */ L->ci = &L->base_ci; /* free the entire 'ci' list */ - luaE_freeCI(L); + freeCI(L); lua_assert(L->nci == 0); luaM_freearray(L, L->stack.p, stacksize(L) + EXTRA_STACK); /* free stack */ } @@ -6720,7 +6719,7 @@ void luaE_warning (lua_State *L, const char *msg, int tocont) { void luaE_warnerror (lua_State *L, const char *where) { TValue *errobj = s2v(L->top.p - 1); /* error object */ const char *msg = (ttisstring(errobj)) - ? svalue(errobj) + ? getstr(tsvalue(errobj)) : "error object is not a string"; /* produce warning "error in %s (%s)" (where, msg) */ luaE_warning(L, "error in ", 1); @@ -7274,10 +7273,12 @@ static void traversestrongtable (global_State *g, Table *h) { static lu_mem traversetable (global_State *g, Table *h) { const char *weakkey, *weakvalue; const TValue *mode = gfasttm(g, h->metatable, TM_MODE); + TString *smode; markobjectN(g, h->metatable); - if (mode && ttisstring(mode) && /* is there a weak mode? */ - (cast_void(weakkey = strchr(svalue(mode), 'k')), - cast_void(weakvalue = strchr(svalue(mode), 'v')), + if (mode && ttisshrstring(mode) && /* is there a weak mode? */ + (cast_void(smode = tsvalue(mode)), + cast_void(weakkey = strchr(getshrstr(smode), 'k')), + cast_void(weakvalue = strchr(getshrstr(smode), 'v')), (weakkey || weakvalue))) { /* is really weak? */ if (!weakkey) /* strong keys? */ traverseweakvalue(g, h); @@ -7370,7 +7371,9 @@ static int traversethread (global_State *g, lua_State *th) { for (uv = th->openupval; uv != NULL; uv = uv->u.open.next) markobject(g, uv); /* open upvalues cannot be collected */ if (g->gcstate == GCSatomic) { /* final traversal? */ - for (; o < th->stack_last.p + EXTRA_STACK; o++) + if (!g->gcemergency) + luaD_shrinkstack(th); /* do not change stack in emergency cycle */ + for (o = th->top.p; o < th->stack_last.p + EXTRA_STACK; o++) setnilvalue(s2v(o)); /* clear dead stack slice */ /* 'remarkupvals' may have removed thread from 'twups' list */ if (!isintwups(th) && th->openupval != NULL) { @@ -7378,8 +7381,6 @@ static int traversethread (global_State *g, lua_State *th) { g->twups = th; } } - else if (!g->gcemergency) - luaD_shrinkstack(th); /* do not change stack in emergency cycle */ return 1 + stacksize(th); } @@ -8141,7 +8142,7 @@ static void stepgenfull (lua_State *L, global_State *g) { setminordebt(g); } else { /* another bad collection; stay in incremental mode */ - g->GCestimate = gettotalbytes(g); /* first estimate */; + g->GCestimate = gettotalbytes(g); /* first estimate */ entersweep(L); luaC_runtilstate(L, bitmask(GCSpause)); /* finish collection */ setpause(g); @@ -8336,7 +8337,7 @@ static lu_mem singlestep (lua_State *L) { case GCSenteratomic: { work = atomic(L); /* work is what was traversed by 'atomic' */ entersweep(L); - g->GCestimate = gettotalbytes(g); /* first estimate */; + g->GCestimate = gettotalbytes(g); /* first estimate */ break; } case GCSswpallgc: { /* sweep "regular" objects */ @@ -8442,6 +8443,8 @@ static void fullinc (lua_State *L, global_State *g) { entersweep(L); /* sweep everything to turn them back to white */ /* finish any pending sweep phase to start a new cycle */ luaC_runtilstate(L, bitmask(GCSpause)); + luaC_runtilstate(L, bitmask(GCSpropagate)); /* start new cycle */ + g->gcstate = GCSenteratomic; /* go straight to atomic phase */ luaC_runtilstate(L, bitmask(GCScallfin)); /* run up to finalizers */ /* estimate must be correct after a full GC cycle */ lua_assert(g->GCestimate == gettotalbytes(g)); @@ -9467,7 +9470,7 @@ int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { /* ** Format and emit an 'iAsBx' instruction. */ -int luaK_codeAsBx (FuncState *fs, OpCode o, int a, int bc) { +static int codeAsBx (FuncState *fs, OpCode o, int a, int bc) { unsigned int b = bc + OFFSET_sBx; lua_assert(getOpMode(o) == iAsBx); lua_assert(a <= MAXARG_A && b <= MAXARG_Bx); @@ -9723,7 +9726,7 @@ static int fitsBx (lua_Integer i) { void luaK_int (FuncState *fs, int reg, lua_Integer i) { if (fitsBx(i)) - luaK_codeAsBx(fs, OP_LOADI, reg, cast_int(i)); + codeAsBx(fs, OP_LOADI, reg, cast_int(i)); else luaK_codek(fs, reg, luaK_intK(fs, i)); } @@ -9732,7 +9735,7 @@ void luaK_int (FuncState *fs, int reg, lua_Integer i) { static void luaK_float (FuncState *fs, int reg, lua_Number f) { lua_Integer fi; if (luaV_flttointeger(f, &fi, F2Ieq) && fitsBx(fi)) - luaK_codeAsBx(fs, OP_LOADF, reg, cast_int(fi)); + codeAsBx(fs, OP_LOADF, reg, cast_int(fi)); else luaK_codek(fs, reg, luaK_numberK(fs, f)); } @@ -9828,7 +9831,8 @@ void luaK_dischargevars (FuncState *fs, expdesc *e) { break; } case VLOCAL: { /* already in a register */ - e->u.info = e->u.var.ridx; + int temp = e->u.var.ridx; + e->u.info = temp; /* (can't do a direct assignment; values overlap) */ e->k = VNONRELOC; /* becomes a non-relocatable value */ break; } @@ -10077,7 +10081,7 @@ static int luaK_exp2K (FuncState *fs, expdesc *e) { ** in the range of R/K indices). ** Returns 1 iff expression is K. */ -int luaK_exp2RK (FuncState *fs, expdesc *e) { +static int exp2RK (FuncState *fs, expdesc *e) { if (luaK_exp2K(fs, e)) return 1; else { /* not a constant in the right range: put it in a register */ @@ -10089,7 +10093,7 @@ int luaK_exp2RK (FuncState *fs, expdesc *e) { static void codeABRK (FuncState *fs, OpCode o, int a, int b, expdesc *ec) { - int k = luaK_exp2RK(fs, ec); + int k = exp2RK(fs, ec); luaK_codeABCk(fs, o, a, b, ec->u.info, k); } @@ -10267,7 +10271,7 @@ static void codenot (FuncState *fs, expdesc *e) { /* -** Check whether expression 'e' is a small literal string +** Check whether expression 'e' is a short literal string */ static int isKstr (FuncState *fs, expdesc *e) { return (e->k == VK && !hasjumps(e) && e->u.info <= MAXARG_B && @@ -10277,7 +10281,7 @@ static int isKstr (FuncState *fs, expdesc *e) { /* ** Check whether expression 'e' is a literal integer. */ -int luaK_isKint (expdesc *e) { +static int isKint (expdesc *e) { return (e->k == VKINT && !hasjumps(e)); } @@ -10287,7 +10291,7 @@ int luaK_isKint (expdesc *e) { ** proper range to fit in register C */ static int isCint (expdesc *e) { - return luaK_isKint(e) && (l_castS2U(e->u.ival) <= l_castS2U(MAXARG_C)); + return isKint(e) && (l_castS2U(e->u.ival) <= l_castS2U(MAXARG_C)); } @@ -10296,7 +10300,7 @@ static int isCint (expdesc *e) { ** proper range to fit in register sC */ static int isSCint (expdesc *e) { - return luaK_isKint(e) && fitsC(e->u.ival); + return isKint(e) && fitsC(e->u.ival); } @@ -10335,15 +10339,17 @@ void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { if (t->k == VUPVAL && !isKstr(fs, k)) /* upvalue indexed by non 'Kstr'? */ luaK_exp2anyreg(fs, t); /* put it in a register */ if (t->k == VUPVAL) { - t->u.ind.t = t->u.info; /* upvalue index */ - t->u.ind.idx = k->u.info; /* literal string */ + int temp = t->u.info; /* upvalue index */ + lua_assert(isKstr(fs, k)); + t->u.ind.t = temp; /* (can't do a direct assignment; values overlap) */ + t->u.ind.idx = k->u.info; /* literal short string */ t->k = VINDEXUP; } else { /* register index of the table */ t->u.ind.t = (t->k == VLOCAL) ? t->u.var.ridx: t->u.info; if (isKstr(fs, k)) { - t->u.ind.idx = k->u.info; /* literal string */ + t->u.ind.idx = k->u.info; /* literal short string */ t->k = VINDEXSTR; } else if (isCint(k)) { @@ -10511,7 +10517,7 @@ static void codebinK (FuncState *fs, BinOpr opr, */ static int finishbinexpneg (FuncState *fs, expdesc *e1, expdesc *e2, OpCode op, int line, TMS event) { - if (!luaK_isKint(e2)) + if (!isKint(e2)) return 0; /* not an integer constant */ else { lua_Integer i2 = e2->u.ival; @@ -10644,7 +10650,7 @@ static void codeeq (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2) { op = OP_EQI; r2 = im; /* immediate operand */ } - else if (luaK_exp2RK(fs, e2)) { /* 2nd expression is constant? */ + else if (exp2RK(fs, e2)) { /* 2nd expression is constant? */ op = OP_EQK; r2 = e2->u.info; /* constant index */ } @@ -10710,7 +10716,7 @@ void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { } case OPR_EQ: case OPR_NE: { if (!tonumeral(v, NULL)) - luaK_exp2RK(fs, v); + exp2RK(fs, v); /* else keep numeral, which may be an immediate operand */ break; } @@ -11945,10 +11951,11 @@ static int explist (LexState *ls, expdesc *v) { } -static void funcargs (LexState *ls, expdesc *f, int line) { +static void funcargs (LexState *ls, expdesc *f) { FuncState *fs = ls->fs; expdesc args; int base, nparams; + int line = ls->linenumber; switch (ls->t.token) { case '(': { /* funcargs -> '(' [ explist ] ')' */ luaX_next(ls); @@ -11986,8 +11993,8 @@ static void funcargs (LexState *ls, expdesc *f, int line) { } init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); luaK_fixline(fs, line); - fs->freereg = base+1; /* call remove function and arguments and leaves - (unless changed) one result */ + fs->freereg = base+1; /* call removes function and arguments and leaves + one result (unless changed later) */ } @@ -12026,7 +12033,6 @@ static void suffixedexp (LexState *ls, expdesc *v) { /* suffixedexp -> primaryexp { '.' NAME | '[' exp ']' | ':' NAME funcargs | funcargs } */ FuncState *fs = ls->fs; - int line = ls->linenumber; primaryexp(ls, v); for (;;) { switch (ls->t.token) { @@ -12046,12 +12052,12 @@ static void suffixedexp (LexState *ls, expdesc *v) { luaX_next(ls); codename(ls, &key); luaK_self(fs, v, &key); - funcargs(ls, v, line); + funcargs(ls, v); break; } case '(': case TK_STRING: case '{': { /* funcargs */ luaK_exp2nextreg(fs, v); - funcargs(ls, v, line); + funcargs(ls, v); break; } default: return; @@ -12921,7 +12927,7 @@ LClosure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, -#define noLuaClosure(f) ((f) == NULL || (f)->c.tt == LUA_VCCL) +#define LuaClosure(f) ((f) != NULL && (f)->c.tt == LUA_VLCL) static const char *funcnamefromcall (lua_State *L, CallInfo *ci, @@ -13144,7 +13150,7 @@ LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { static void funcinfo (lua_Debug *ar, Closure *cl) { - if (noLuaClosure(cl)) { + if (!LuaClosure(cl)) { ar->source = "=[C]"; ar->srclen = LL("=[C]"); ar->linedefined = -1; @@ -13178,29 +13184,31 @@ static int nextline (const Proto *p, int currentline, int pc) { static void collectvalidlines (lua_State *L, Closure *f) { - if (noLuaClosure(f)) { + if (!LuaClosure(f)) { setnilvalue(s2v(L->top.p)); api_incr_top(L); } else { - int i; - TValue v; const Proto *p = f->l.p; int currentline = p->linedefined; Table *t = luaH_new(L); /* new table to store active lines */ sethvalue2s(L, L->top.p, t); /* push it on stack */ api_incr_top(L); - setbtvalue(&v); /* boolean 'true' to be the value of all indices */ - if (!p->is_vararg) /* regular function? */ - i = 0; /* consider all instructions */ - else { /* vararg function */ - lua_assert(GET_OPCODE(p->code[0]) == OP_VARARGPREP); - currentline = nextline(p, currentline, 0); - i = 1; /* skip first instruction (OP_VARARGPREP) */ - } - for (; i < p->sizelineinfo; i++) { /* for each instruction */ - currentline = nextline(p, currentline, i); /* get its line */ - luaH_setint(L, t, currentline, &v); /* table[line] = true */ + if (p->lineinfo != NULL) { /* proto with debug information? */ + int i; + TValue v; + setbtvalue(&v); /* boolean 'true' to be the value of all indices */ + if (!p->is_vararg) /* regular function? */ + i = 0; /* consider all instructions */ + else { /* vararg function */ + lua_assert(GET_OPCODE(p->code[0]) == OP_VARARGPREP); + currentline = nextline(p, currentline, 0); + i = 1; /* skip first instruction (OP_VARARGPREP) */ + } + for (; i < p->sizelineinfo; i++) { /* for each instruction */ + currentline = nextline(p, currentline, i); /* get its line */ + luaH_setint(L, t, currentline, &v); /* table[line] = true */ + } } } } @@ -13229,7 +13237,7 @@ static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, } case 'u': { ar->nups = (f == NULL) ? 0 : f->c.nupvalues; - if (noLuaClosure(f)) { + if (!LuaClosure(f)) { ar->isvararg = 1; ar->nparams = 0; } @@ -13307,40 +13315,6 @@ LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { ** ======================================================= */ -static const char *getobjname (const Proto *p, int lastpc, int reg, - const char **name); - - -/* -** Find a "name" for the constant 'c'. -*/ -static void kname (const Proto *p, int c, const char **name) { - TValue *kvalue = &p->k[c]; - *name = (ttisstring(kvalue)) ? svalue(kvalue) : "?"; -} - - -/* -** Find a "name" for the register 'c'. -*/ -static void rname (const Proto *p, int pc, int c, const char **name) { - const char *what = getobjname(p, pc, c, name); /* search for 'c' */ - if (!(what && *what == 'c')) /* did not find a constant name? */ - *name = "?"; -} - - -/* -** Find a "name" for a 'C' value in an RK instruction. -*/ -static void rkname (const Proto *p, int pc, Instruction i, const char **name) { - int c = GETARG_C(i); /* key index */ - if (GETARG_k(i)) /* is 'c' a constant? */ - kname(p, c, name); - else /* 'c' is a register */ - rname(p, pc, c, name); -} - static int filterpc (int pc, int jmptarget) { if (pc < jmptarget) /* is code conditional (inside a jump)? */ @@ -13399,28 +13373,29 @@ static int findsetreg (const Proto *p, int lastpc, int reg) { /* -** Check whether table being indexed by instruction 'i' is the -** environment '_ENV' +** Find a "name" for the constant 'c'. */ -static const char *gxf (const Proto *p, int pc, Instruction i, int isup) { - int t = GETARG_B(i); /* table index */ - const char *name; /* name of indexed variable */ - if (isup) /* is an upvalue? */ - name = upvalname(p, t); - else - getobjname(p, pc, t, &name); - return (name && strcmp(name, LUA_ENV) == 0) ? "global" : "field"; +static const char *kname (const Proto *p, int index, const char **name) { + TValue *kvalue = &p->k[index]; + if (ttisstring(kvalue)) { + *name = getstr(tsvalue(kvalue)); + return "constant"; + } + else { + *name = "?"; + return NULL; + } } -static const char *getobjname (const Proto *p, int lastpc, int reg, - const char **name) { - int pc; - *name = luaF_getlocalname(p, reg + 1, lastpc); +static const char *basicgetobjname (const Proto *p, int *ppc, int reg, + const char **name) { + int pc = *ppc; + *name = luaF_getlocalname(p, reg + 1, pc); if (*name) /* is a local? */ return "local"; /* else try symbolic execution */ - pc = findsetreg(p, lastpc, reg); + *ppc = pc = findsetreg(p, pc, reg); if (pc != -1) { /* could find instruction? */ Instruction i = p->code[pc]; OpCode op = GET_OPCODE(i); @@ -13428,18 +13403,80 @@ static const char *getobjname (const Proto *p, int lastpc, int reg, case OP_MOVE: { int b = GETARG_B(i); /* move from 'b' to 'a' */ if (b < GETARG_A(i)) - return getobjname(p, pc, b, name); /* get name for 'b' */ + return basicgetobjname(p, ppc, b, name); /* get name for 'b' */ break; } + case OP_GETUPVAL: { + *name = upvalname(p, GETARG_B(i)); + return "upvalue"; + } + case OP_LOADK: return kname(p, GETARG_Bx(i), name); + case OP_LOADKX: return kname(p, GETARG_Ax(p->code[pc + 1]), name); + default: break; + } + } + return NULL; /* could not find reasonable name */ +} + + +/* +** Find a "name" for the register 'c'. +*/ +static void rname (const Proto *p, int pc, int c, const char **name) { + const char *what = basicgetobjname(p, &pc, c, name); /* search for 'c' */ + if (!(what && *what == 'c')) /* did not find a constant name? */ + *name = "?"; +} + + +/* +** Find a "name" for a 'C' value in an RK instruction. +*/ +static void rkname (const Proto *p, int pc, Instruction i, const char **name) { + int c = GETARG_C(i); /* key index */ + if (GETARG_k(i)) /* is 'c' a constant? */ + kname(p, c, name); + else /* 'c' is a register */ + rname(p, pc, c, name); +} + + +/* +** Check whether table being indexed by instruction 'i' is the +** environment '_ENV' +*/ +static const char *isEnv (const Proto *p, int pc, Instruction i, int isup) { + int t = GETARG_B(i); /* table index */ + const char *name; /* name of indexed variable */ + if (isup) /* is 't' an upvalue? */ + name = upvalname(p, t); + else /* 't' is a register */ + basicgetobjname(p, &pc, t, &name); + return (name && strcmp(name, LUA_ENV) == 0) ? "global" : "field"; +} + + +/* +** Extend 'basicgetobjname' to handle table accesses +*/ +static const char *getobjname (const Proto *p, int lastpc, int reg, + const char **name) { + const char *kind = basicgetobjname(p, &lastpc, reg, name); + if (kind != NULL) + return kind; + else if (lastpc != -1) { /* could find instruction? */ + Instruction i = p->code[lastpc]; + OpCode op = GET_OPCODE(i); + switch (op) { case OP_GETTABUP: { int k = GETARG_C(i); /* key index */ kname(p, k, name); - return gxf(p, pc, i, 1); + return isEnv(p, lastpc, i, 1); } case OP_GETTABLE: { int k = GETARG_C(i); /* key index */ - rname(p, pc, k, name); - return gxf(p, pc, i, 0); + rname(p, lastpc, k, name); + return isEnv(p, lastpc, i, 0); } case OP_GETI: { *name = "integer index"; @@ -13448,24 +13485,10 @@ static const char *getobjname (const Proto *p, int lastpc, int reg, case OP_GETFIELD: { int k = GETARG_C(i); /* key index */ kname(p, k, name); - return gxf(p, pc, i, 0); - } - case OP_GETUPVAL: { - *name = upvalname(p, GETARG_B(i)); - return "upvalue"; - } - case OP_LOADK: - case OP_LOADKX: { - int b = (op == OP_LOADK) ? GETARG_Bx(i) - : GETARG_Ax(p->code[pc + 1]); - if (ttisstring(&p->k[b])) { - *name = svalue(&p->k[b]); - return "constant"; - } - break; + return isEnv(p, lastpc, i, 0); } case OP_SELF: { - rkname(p, pc, i, name); + rkname(p, lastpc, i, name); return "method"; } default: break; /* go through to return NULL */ @@ -13517,7 +13540,7 @@ static const char *funcnamefromcode (lua_State *L, const Proto *p, default: return NULL; /* cannot find a reasonable name */ } - *name = getstr(G(L)->tmname[tm]) + 2; + *name = getshrstr(G(L)->tmname[tm]) + 2; return "metamethod"; } @@ -13755,6 +13778,28 @@ static int changedline (const Proto *p, int oldpc, int newpc) { } +/* +** Traces Lua calls. If code is running the first instruction of a function, +** and function is not vararg, and it is not coming from an yield, +** calls 'luaD_hookcall'. (Vararg functions will call 'luaD_hookcall' +** after adjusting its variable arguments; otherwise, they could call +** a line/count hook before the call hook. Functions coming from +** an yield already called 'luaD_hookcall' before yielding.) +*/ +int luaG_tracecall (lua_State *L) { + CallInfo *ci = L->ci; + Proto *p = ci_func(ci)->p; + ci->u.l.trap = 1; /* ensure hooks will be checked */ + if (ci->u.l.savedpc == p->code) { /* first instruction (not resuming)? */ + if (p->is_vararg) + return 0; /* hooks will start at VARARGPREP instruction */ + else if (!(ci->callstatus & CIST_HOOKYIELD)) /* not yieded? */ + luaD_hookcall(L, ci); /* check 'call' hook */ + } + return 1; /* keep 'trap' on */ +} + + /* ** Traces the execution of a Lua function. Called before the execution ** of each opcode, when debug is on. 'L->oldpc' stores the last @@ -13778,12 +13823,12 @@ int luaG_traceexec (lua_State *L, const Instruction *pc) { } pc++; /* reference is always next instruction */ ci->u.l.savedpc = pc; /* save 'pc' */ - counthook = (--L->hookcount == 0 && (mask & LUA_MASKCOUNT)); + counthook = (mask & LUA_MASKCOUNT) && (--L->hookcount == 0); if (counthook) resethookcount(L); /* reset count */ else if (!(mask & LUA_MASKLINE)) return 1; /* no line hook and count != 0; nothing to be done now */ - if (ci->callstatus & CIST_HOOKYIELD) { /* called hook last time? */ + if (ci->callstatus & CIST_HOOKYIELD) { /* hook yielded last time? */ ci->callstatus &= ~CIST_HOOKYIELD; /* erase mark */ return 1; /* do not call hook again (VM yielded, so it did not move) */ } @@ -13805,7 +13850,6 @@ int luaG_traceexec (lua_State *L, const Instruction *pc) { if (L->status == LUA_YIELD) { /* did hook yield? */ if (counthook) L->hookcount = 1; /* undo decrement to zero */ - ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ ci->callstatus |= CIST_HOOKYIELD; /* mark that it yielded */ luaD_throw(L, LUA_YIELD); } @@ -14650,7 +14694,7 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { addstr2buff(&buff, fmt, strlen(fmt)); /* rest of 'fmt' */ clearbuff(&buff); /* empty buffer into the stack */ lua_assert(buff.pushed == 1); - return svalue(s2v(L->top.p - 1)); + return getstr(tsvalue(s2v(L->top.p - 1))); } @@ -15017,7 +15061,7 @@ int luaS_eqlngstr (TString *a, TString *b) { lua_assert(a->tt == LUA_VLNGSTR && b->tt == LUA_VLNGSTR); return (a == b) || /* same instance or... */ ((len == b->u.lnglen) && /* equal length and ... */ - (memcmp(getstr(a), getstr(b), len) == 0)); /* equal contents */ + (memcmp(getlngstr(a), getlngstr(b), len) == 0)); /* equal contents */ } @@ -15033,7 +15077,7 @@ unsigned int luaS_hashlongstr (TString *ts) { lua_assert(ts->tt == LUA_VLNGSTR); if (ts->extra == 0) { /* no hash? */ size_t len = ts->u.lnglen; - ts->hash = luaS_hash(getstr(ts), len, ts->hash); + ts->hash = luaS_hash(getlngstr(ts), len, ts->hash); ts->extra = 1; /* now it has its hash */ } return ts->hash; @@ -15138,6 +15182,7 @@ static TString *createstrobj (lua_State *L, size_t l, int tag, unsigned int h) { TString *luaS_createlngstrobj (lua_State *L, size_t l) { TString *ts = createstrobj(L, l, LUA_VLNGSTR, G(L)->seed); ts->u.lnglen = l; + ts->shrlen = 0xFF; /* signals that it is a long string */ return ts; } @@ -15174,7 +15219,7 @@ static TString *internshrstr (lua_State *L, const char *str, size_t l) { TString **list = &tb->hash[lmod(h, tb->size)]; lua_assert(str != NULL); /* otherwise 'memcmp'/'memcpy' are undefined */ for (ts = *list; ts != NULL; ts = ts->u.hnext) { - if (l == ts->shrlen && (memcmp(str, getstr(ts), l * sizeof(char)) == 0)) { + if (l == ts->shrlen && (memcmp(str, getshrstr(ts), l * sizeof(char)) == 0)) { /* found! */ if (isdead(g, ts)) /* dead (but not collected yet)? */ changewhite(ts); /* resurrect it */ @@ -15187,8 +15232,8 @@ static TString *internshrstr (lua_State *L, const char *str, size_t l) { list = &tb->hash[lmod(h, tb->size)]; /* rehash with new size */ } ts = createstrobj(L, l, LUA_VSHRSTR, h); - memcpy(getstr(ts), str, l * sizeof(char)); ts->shrlen = cast_byte(l); + memcpy(getshrstr(ts), str, l * sizeof(char)); ts->u.hnext = *list; *list = ts; tb->nuse++; @@ -15204,10 +15249,10 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { return internshrstr(L, str, l); else { TString *ts; - if (l_unlikely(l >= (MAX_SIZE - sizeof(TString))/sizeof(char))) + if (l_unlikely(l * sizeof(char) >= (MAX_SIZE - sizeof(TString)))) luaM_toobig(L); ts = luaS_createlngstrobj(L, l); - memcpy(getstr(ts), str, l * sizeof(char)); + memcpy(getlngstr(ts), str, l * sizeof(char)); return ts; } } @@ -15506,7 +15551,7 @@ LUAI_FUNC unsigned int luaH_realasize (const Table *t) { return t->alimit; /* this is the size */ else { unsigned int size = t->alimit; - /* compute the smallest power of 2 not smaller than 'n' */ + /* compute the smallest power of 2 not smaller than 'size' */ size |= (size >> 1); size |= (size >> 2); size |= (size >> 4); @@ -15916,7 +15961,8 @@ static Node *getfreepos (Table *t) { ** put new key in its main position; otherwise (colliding node is in its main ** position), new key goes to an empty position. */ -void luaH_newkey (lua_State *L, Table *t, const TValue *key, TValue *value) { +static void luaH_newkey (lua_State *L, Table *t, const TValue *key, + TValue *value) { Node *mp; TValue aux; if (l_unlikely(ttisnil(key))) @@ -15975,22 +16021,36 @@ void luaH_newkey (lua_State *L, Table *t, const TValue *key, TValue *value) { /* ** Search function for integers. If integer is inside 'alimit', get it -** directly from the array part. Otherwise, if 'alimit' is not equal to -** the real size of the array, key still can be in the array part. In -** this case, try to avoid a call to 'luaH_realasize' when key is just -** one more than the limit (so that it can be incremented without -** changing the real size of the array). +** directly from the array part. Otherwise, if 'alimit' is not +** the real size of the array, the key still can be in the array part. +** In this case, do the "Xmilia trick" to check whether 'key-1' is +** smaller than the real size. +** The trick works as follow: let 'p' be an integer such that +** '2^(p+1) >= alimit > 2^p', or '2^(p+1) > alimit-1 >= 2^p'. +** That is, 2^(p+1) is the real size of the array, and 'p' is the highest +** bit on in 'alimit-1'. What we have to check becomes 'key-1 < 2^(p+1)'. +** We compute '(key-1) & ~(alimit-1)', which we call 'res'; it will +** have the 'p' bit cleared. If the key is outside the array, that is, +** 'key-1 >= 2^(p+1)', then 'res' will have some bit on higher than 'p', +** therefore it will be larger or equal to 'alimit', and the check +** will fail. If 'key-1 < 2^(p+1)', then 'res' has no bit on higher than +** 'p', and as the bit 'p' itself was cleared, 'res' will be smaller +** than 2^p, therefore smaller than 'alimit', and the check succeeds. +** As special cases, when 'alimit' is 0 the condition is trivially false, +** and when 'alimit' is 1 the condition simplifies to 'key-1 < alimit'. +** If key is 0 or negative, 'res' will have its higher bit on, so that +** if cannot be smaller than alimit. */ const TValue *luaH_getint (Table *t, lua_Integer key) { - if (l_castS2U(key) - 1u < t->alimit) /* 'key' in [1, t->alimit]? */ + lua_Unsigned alimit = t->alimit; + if (l_castS2U(key) - 1u < alimit) /* 'key' in [1, t->alimit]? */ return &t->array[key - 1]; - else if (!limitequalsasize(t) && /* key still may be in the array part? */ - (l_castS2U(key) == t->alimit + 1 || - l_castS2U(key) - 1u < luaH_realasize(t))) { + else if (!isrealasize(t) && /* key still may be in the array part? */ + (((l_castS2U(key) - 1u) & ~(alimit - 1u)) < alimit)) { t->alimit = cast_uint(key); /* probably '#t' is here now */ return &t->array[key - 1]; } - else { + else { /* key is not in the array part; check the hash */ Node *n = hashint(t, key); for (;;) { /* check whether 'key' is somewhere in the chain */ if (keyisinteger(n) && keyival(n) == key) @@ -16643,7 +16703,7 @@ static void rethook (lua_State *L, CallInfo *ci, int nres) { ** stack, below original 'func', so that 'luaD_precall' can call it. Raise ** an error if there is no '__call' metafield. */ -StkId luaD_tryfuncTM (lua_State *L, StkId func) { +static StkId tryfuncTM (lua_State *L, StkId func) { const TValue *tm; StkId p; checkstackGCp(L, 1, func); /* space for metamethod */ @@ -16802,7 +16862,7 @@ int luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, return -1; } default: { /* not a function */ - func = luaD_tryfuncTM(L, func); /* try to get '__call' metamethod */ + func = tryfuncTM(L, func); /* try to get '__call' metamethod */ /* return luaD_pretailcall(L, ci, func, narg1 + 1, delta); */ narg1++; goto retry; /* try again */ @@ -16843,7 +16903,7 @@ CallInfo *luaD_precall (lua_State *L, StkId func, int nresults) { return ci; } default: { /* not a function */ - func = luaD_tryfuncTM(L, func); /* try to get '__call' metamethod */ + func = tryfuncTM(L, func); /* try to get '__call' metamethod */ /* return luaD_precall(L, func, nresults); */ goto retry; /* try again with metamethod */ } @@ -17026,6 +17086,10 @@ static void resume (lua_State *L, void *ud) { lua_assert(L->status == LUA_YIELD); L->status = LUA_OK; /* mark that it is running (again) */ if (isLua(ci)) { /* yielded inside a hook? */ + /* undo increment made by 'luaG_traceexec': instruction was not + executed yet */ + lua_assert(ci->callstatus & CIST_HOOKYIELD); + ci->u.l.savedpc--; L->top.p = firstArg; /* discard arguments */ luaV_execute(L, ci); /* just continue running Lua code */ } @@ -17349,8 +17413,10 @@ static int l_strton (const TValue *obj, TValue *result) { lua_assert(obj != result); if (!cvt2num(obj)) /* is object not a string? */ return 0; - else - return (luaO_str2num(svalue(obj), result) == vslen(obj) + 1); + else { + TString *st = tsvalue(obj); + return (luaO_str2num(getstr(st), result) == tsslen(st) + 1); + } } @@ -17624,30 +17690,32 @@ void luaV_finishset (lua_State *L, const TValue *t, TValue *key, /* -** Compare two strings 'ls' x 'rs', returning an integer less-equal- -** -greater than zero if 'ls' is less-equal-greater than 'rs'. +** Compare two strings 'ts1' x 'ts2', returning an integer less-equal- +** -greater than zero if 'ts1' is less-equal-greater than 'ts2'. ** The code is a little tricky because it allows '\0' in the strings -** and it uses 'strcoll' (to respect locales) for each segments -** of the strings. -*/ -static int l_strcmp (const TString *ls, const TString *rs) { - const char *l = getstr(ls); - size_t ll = tsslen(ls); - const char *r = getstr(rs); - size_t lr = tsslen(rs); +** and it uses 'strcoll' (to respect locales) for each segment +** of the strings. Note that segments can compare equal but still +** have different lengths. +*/ +static int l_strcmp (const TString *ts1, const TString *ts2) { + const char *s1 = getstr(ts1); + size_t rl1 = tsslen(ts1); /* real length */ + const char *s2 = getstr(ts2); + size_t rl2 = tsslen(ts2); for (;;) { /* for each segment */ - int temp = strcoll(l, r); + int temp = strcoll(s1, s2); if (temp != 0) /* not equal? */ return temp; /* done */ else { /* strings are equal up to a '\0' */ - size_t len = strlen(l); /* index of first '\0' in both strings */ - if (len == lr) /* 'rs' is finished? */ - return (len == ll) ? 0 : 1; /* check 'ls' */ - else if (len == ll) /* 'ls' is finished? */ - return -1; /* 'ls' is less than 'rs' ('rs' is not finished) */ - /* both strings longer than 'len'; go on comparing after the '\0' */ - len++; - l += len; ll -= len; r += len; lr -= len; + size_t zl1 = strlen(s1); /* index of first '\0' in 's1' */ + size_t zl2 = strlen(s2); /* index of first '\0' in 's2' */ + if (zl2 == rl2) /* 's2' is finished? */ + return (zl1 == rl1) ? 0 : 1; /* check 's1' */ + else if (zl1 == rl1) /* 's1' is finished? */ + return -1; /* 's1' is less than 's2' ('s2' is not finished) */ + /* both strings longer than 'zl'; go on comparing after the '\0' */ + zl1++; zl2++; + s1 += zl1; rl1 -= zl1; s2 += zl2; rl2 -= zl2; } } } @@ -17882,8 +17950,9 @@ int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2) { static void copy2buff (StkId top, int n, char *buff) { size_t tl = 0; /* size already copied */ do { - size_t l = vslen(s2v(top - n)); /* length of string being copied */ - memcpy(buff + tl, svalue(s2v(top - n)), l * sizeof(char)); + TString *st = tsvalue(s2v(top - n)); + size_t l = tsslen(st); /* length of string being copied */ + memcpy(buff + tl, getstr(st), l * sizeof(char)); tl += l; } while (--n > 0); } @@ -17909,12 +17978,12 @@ void luaV_concat (lua_State *L, int total) { } else { /* at least two non-empty string values; get as many as possible */ - size_t tl = vslen(s2v(top - 1)); + size_t tl = tsslen(tsvalue(s2v(top - 1))); TString *ts; /* collect total length and number of strings */ for (n = 1; n < total && tostring(L, s2v(top - n - 1)); n++) { - size_t l = vslen(s2v(top - n - 1)); - if (l_unlikely(l >= (MAX_SIZE/sizeof(char)) - tl)) { + size_t l = tsslen(tsvalue(s2v(top - n - 1))); + if (l_unlikely(l >= MAX_SIZE - sizeof(TString) - tl)) { L->top.p = top - total; /* pop strings to avoid wasting stack */ luaG_runerror(L, "string length overflow"); } @@ -17927,7 +17996,7 @@ void luaV_concat (lua_State *L, int total) { } else { /* long string; copy strings directly to final result */ ts = luaS_createlngstrobj(L, tl); - copy2buff(top, n, getstr(ts)); + copy2buff(top, n, getlngstr(ts)); } setsvalue2s(L, top - n, ts); /* create result */ } @@ -18525,18 +18594,11 @@ static const void *const disptab[NUM_OPCODES] = { startfunc: trap = L->hookmask; returning: /* trap already set */ - cl = clLvalue(s2v(ci->func.p)); + cl = ci_func(ci); k = cl->p->k; pc = ci->u.l.savedpc; - if (l_unlikely(trap)) { - if (pc == cl->p->code) { /* first instruction (not resuming)? */ - if (cl->p->is_vararg) - trap = 0; /* hooks will start after VARARGPREP instruction */ - else /* check 'call' hook */ - luaD_hookcall(L, ci); - } - ci->u.l.trap = 1; /* assume trap is on, for now */ - } + if (l_unlikely(trap)) + trap = luaG_tracecall(L); base = ci->func.p + 1; /* main loop of interpreter */ for (;;) { @@ -18623,7 +18685,7 @@ static const void *const disptab[NUM_OPCODES] = { const TValue *slot; TValue *upval = cl->upvals[GETARG_B(i)]->v.p; TValue *rc = KC(i); - TString *key = tsvalue(rc); /* key must be a string */ + TString *key = tsvalue(rc); /* key must be a short string */ if (luaV_fastget(L, upval, key, slot, luaH_getshortstr)) { setobj2s(L, ra, slot); } @@ -18666,7 +18728,7 @@ static const void *const disptab[NUM_OPCODES] = { const TValue *slot; TValue *rb = vRB(i); TValue *rc = KC(i); - TString *key = tsvalue(rc); /* key must be a string */ + TString *key = tsvalue(rc); /* key must be a short string */ if (luaV_fastget(L, rb, key, slot, luaH_getshortstr)) { setobj2s(L, ra, slot); } @@ -18679,7 +18741,7 @@ static const void *const disptab[NUM_OPCODES] = { TValue *upval = cl->upvals[GETARG_A(i)]->v.p; TValue *rb = KB(i); TValue *rc = RKC(i); - TString *key = tsvalue(rb); /* key must be a string */ + TString *key = tsvalue(rb); /* key must be a short string */ if (luaV_fastget(L, upval, key, slot, luaH_getshortstr)) { luaV_finishfastset(L, upval, slot, rc); } @@ -18722,7 +18784,7 @@ static const void *const disptab[NUM_OPCODES] = { const TValue *slot; TValue *rb = KB(i); TValue *rc = RKC(i); - TString *key = tsvalue(rb); /* key must be a string */ + TString *key = tsvalue(rb); /* key must be a short string */ if (luaV_fastget(L, s2v(ra), key, slot, luaH_getshortstr)) { luaV_finishfastset(L, s2v(ra), slot, rc); } @@ -19688,9 +19750,9 @@ LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { o = index2value(L, idx); /* previous call may reallocate the stack */ } if (len != NULL) - *len = vslen(o); + *len = tsslen(tsvalue(o)); lua_unlock(L); - return svalue(o); + return getstr(tsvalue(o)); } @@ -20814,6 +20876,7 @@ static int pushglobalfuncname (lua_State *L, lua_Debug *ar) { int top = lua_gettop(L); lua_getinfo(L, "f", ar); /* push function */ lua_getfield(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE); + luaL_checkstack(L, 6, "not enough stack"); /* slots for 'findfield' */ if (findfield(L, top + 1, 2)) { const char *name = lua_tostring(L, -1); if (strncmp(name, LUA_GNAME ".", 3) == 0) { /* name start with '_G.'? */ @@ -20983,11 +21046,13 @@ LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fname) { return 1; } else { + const char *msg; luaL_pushfail(L); + msg = (en != 0) ? strerror(en) : "(no extra info)"; if (fname) - lua_pushfstring(L, "%s: %s", fname, strerror(en)); + lua_pushfstring(L, "%s: %s", fname, msg); else - lua_pushstring(L, strerror(en)); + lua_pushstring(L, msg); lua_pushinteger(L, en); return 3; } @@ -21466,9 +21531,12 @@ static const char *getF (lua_State *L, void *ud, size_t *size) { static int errfile (lua_State *L, const char *what, int fnameindex) { - const char *serr = strerror(errno); + int err = errno; const char *filename = lua_tostring(L, fnameindex) + 1; - lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); + if (err != 0) + lua_pushfstring(L, "cannot %s %s: %s", what, filename, strerror(err)); + else + lua_pushfstring(L, "cannot %s %s", what, filename); lua_remove(L, fnameindex); return LUA_ERRFILE; } @@ -21521,6 +21589,7 @@ LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, } else { lua_pushfstring(L, "@%s", filename); + errno = 0; lf.f = fopen(filename, "r"); if (lf.f == NULL) return errfile(L, "open", fnameindex); } @@ -21530,6 +21599,7 @@ LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, if (c == LUA_SIGNATURE[0]) { /* binary file? */ lf.n = 0; /* remove possible newline */ if (filename) { /* "real" file? */ + errno = 0; lf.f = freopen(filename, "rb", lf.f); /* reopen in binary mode */ if (lf.f == NULL) return errfile(L, "reopen", fnameindex); skipcomment(lf.f, &c); /* re-read initial portion */ @@ -21537,6 +21607,7 @@ LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, } if (c != EOF) lf.buff[lf.n++] = c; /* 'c' is the first character of the stream */ + errno = 0; status = lua_load(L, getF, &lf, lua_tostring(L, -1), mode); readstatus = ferror(lf.f); if (filename) fclose(lf.f); /* close file (even in case of errors) */ @@ -21667,7 +21738,7 @@ LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) { luaL_checkstack(L, nup, "too many upvalues"); for (; l->name != NULL; l++) { /* fill the table with given functions */ - if (l->func == NULL) /* place holder? */ + if (l->func == NULL) /* placeholder? */ lua_pushboolean(L, 0); else { int i; @@ -21759,9 +21830,14 @@ static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { } +/* +** Standard panic funcion just prints an error message. The test +** with 'lua_type' avoids possible memory errors in 'lua_tostring'. +*/ static int panic (lua_State *L) { - const char *msg = lua_tostring(L, -1); - if (msg == NULL) msg = "error object is not a string"; + const char *msg = (lua_type(L, -1) == LUA_TSTRING) + ? lua_tostring(L, -1) + : "error object is not a string"; lua_writestringerror("PANIC: unprotected error in call to Lua API (%s)\n", msg); return 0; /* return to Lua to abort */ @@ -23333,8 +23409,8 @@ static int f_gc (lua_State *L) { */ static int io_fclose (lua_State *L) { LStream *p = tolstream(L); - int res = fclose(p->f); - return luaL_fileresult(L, (res == 0), NULL); + errno = 0; + return luaL_fileresult(L, (fclose(p->f) == 0), NULL); } @@ -23360,6 +23436,7 @@ static int io_open (lua_State *L) { LStream *p = newfile(L); const char *md = mode; /* to traverse/check mode */ luaL_argcheck(L, l_checkmode(md), 2, "invalid mode"); + errno = 0; p->f = fopen(filename, mode); return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; } @@ -23380,6 +23457,7 @@ static int io_popen (lua_State *L) { const char *mode = luaL_optstring(L, 2, "r"); LStream *p = newprefile(L); luaL_argcheck(L, l_checkmodep(mode), 2, "invalid mode"); + errno = 0; p->f = l_popen(L, filename, mode); p->closef = &io_pclose; return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; @@ -23388,6 +23466,7 @@ static int io_popen (lua_State *L) { static int io_tmpfile (lua_State *L) { LStream *p = newfile(L); + errno = 0; p->f = tmpfile(); return (p->f == NULL) ? luaL_fileresult(L, 0, NULL) : 1; } @@ -23655,6 +23734,7 @@ static int g_read (lua_State *L, FILE *f, int first) { int nargs = lua_gettop(L) - 1; int n, success; clearerr(f); + errno = 0; if (nargs == 0) { /* no arguments? */ success = read_line(L, f, 1); n = first + 1; /* to return 1 result */ @@ -23748,6 +23828,7 @@ static int io_readline (lua_State *L) { static int g_write (lua_State *L, FILE *f, int arg) { int nargs = lua_gettop(L) - arg; int status = 1; + errno = 0; for (; nargs--; arg++) { if (lua_type(L, arg) == LUA_TNUMBER) { /* optimization: could be done exactly as for strings */ @@ -23766,7 +23847,8 @@ static int g_write (lua_State *L, FILE *f, int arg) { } if (l_likely(status)) return 1; /* file handle already on stack top */ - else return luaL_fileresult(L, status, NULL); + else + return luaL_fileresult(L, status, NULL); } @@ -23791,6 +23873,7 @@ static int f_seek (lua_State *L) { l_seeknum offset = (l_seeknum)p3; luaL_argcheck(L, (lua_Integer)offset == p3, 3, "not an integer in proper range"); + errno = 0; op = l_fseek(f, offset, mode[op]); if (l_unlikely(op)) return luaL_fileresult(L, 0, NULL); /* error */ @@ -23807,19 +23890,25 @@ static int f_setvbuf (lua_State *L) { FILE *f = tofile(L); int op = luaL_checkoption(L, 2, NULL, modenames); lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); - int res = setvbuf(f, NULL, mode[op], (size_t)sz); + int res; + errno = 0; + res = setvbuf(f, NULL, mode[op], (size_t)sz); return luaL_fileresult(L, res == 0, NULL); } static int io_flush (lua_State *L) { - return luaL_fileresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); + FILE *f = getiofile(L, IO_OUTPUT); + errno = 0; + return luaL_fileresult(L, fflush(f) == 0, NULL); } static int f_flush (lua_State *L) { - return luaL_fileresult(L, fflush(tofile(L)) == 0, NULL); + FILE *f = tofile(L); + errno = 0; + return luaL_fileresult(L, fflush(f) == 0, NULL); } @@ -23861,7 +23950,7 @@ static const luaL_Reg meth[] = { ** metamethods for file handles */ static const luaL_Reg metameth[] = { - {"__index", NULL}, /* place holder */ + {"__index", NULL}, /* placeholder */ {"__gc", f_gc}, {"__close", f_gc}, {"__tostring", f_tostring}, @@ -24165,6 +24254,15 @@ static int math_type (lua_State *L) { ** =================================================================== */ +/* +** This code uses lots of shifts. ANSI C does not allow shifts greater +** than or equal to the width of the type being shifted, so some shifts +** are written in convoluted ways to match that restriction. For +** preprocessor tests, it assumes a width of 32 bits, so the maximum +** shift there is 31 bits. +*/ + + /* number of binary digits in the mantissa of a float */ #define FIGS l_floatatt(MANT_DIG) @@ -24187,16 +24285,19 @@ static int math_type (lua_State *L) { /* 'long' has at least 64 bits */ #define Rand64 unsigned long +#define SRand64 long #elif !defined(LUA_USE_C89) && defined(LLONG_MAX) /* there is a 'long long' type (which must have at least 64 bits) */ #define Rand64 unsigned long long +#define SRand64 long long #elif ((LUA_MAXUNSIGNED >> 31) >> 31) >= 3 /* 'lua_Unsigned' has at least 64 bits */ #define Rand64 lua_Unsigned +#define SRand64 lua_Integer #endif @@ -24235,23 +24336,30 @@ static Rand64 nextrand (Rand64 *state) { } -/* must take care to not shift stuff by more than 63 slots */ - - /* ** Convert bits from a random integer into a float in the ** interval [0,1), getting the higher FIG bits from the ** random unsigned integer and converting that to a float. +** Some old Microsoft compilers cannot cast an unsigned long +** to a floating-point number, so we use a signed long as an +** intermediary. When lua_Number is float or double, the shift ensures +** that 'sx' is non negative; in that case, a good compiler will remove +** the correction. */ /* must throw out the extra (64 - FIGS) bits */ #define shift64_FIG (64 - FIGS) -/* to scale to [0, 1), multiply by scaleFIG = 2^(-FIGS) */ +/* 2^(-FIGS) == 2^-1 / 2^(FIGS-1) */ #define scaleFIG (l_mathop(0.5) / ((Rand64)1 << (FIGS - 1))) static lua_Number I2d (Rand64 x) { - return (lua_Number)(trim64(x) >> shift64_FIG) * scaleFIG; + SRand64 sx = (SRand64)(trim64(x) >> shift64_FIG); + lua_Number res = (lua_Number)(sx) * scaleFIG; + if (sx < 0) + res += l_mathop(1.0); /* correct the two's complement if negative */ + lua_assert(0 <= res && res < 1); + return res; } /* convert a 'Rand64' to a 'lua_Unsigned' */ @@ -24387,8 +24495,6 @@ static lua_Number I2d (Rand64 x) { #else /* 32 < FIGS <= 64 */ -/* must take care to not shift stuff by more than 31 slots */ - /* 2^(-FIGS) = 1.0 / 2^30 / 2^3 / 2^(FIGS-33) */ #define scaleFIG \ (l_mathop(1.0) / (UONE << 30) / l_mathop(8.0) / (UONE << (FIGS - 33))) @@ -24704,15 +24810,6 @@ LUAMOD_API int luaopen_math (lua_State *L) { /*#include "lualib.h"*/ -/* -** LUA_IGMARK is a mark to ignore all before it when building the -** luaopen_ function name. -*/ -#if !defined (LUA_IGMARK) -#define LUA_IGMARK "-" -#endif - - /* ** LUA_CSUBSEP is the character that replaces dots in submodule names ** when searching for a C loader. @@ -25602,6 +25699,7 @@ static int os_execute (lua_State *L) { static int os_remove (lua_State *L) { const char *filename = luaL_checkstring(L, 1); + errno = 0; return luaL_fileresult(L, remove(filename) == 0, filename); } @@ -25609,6 +25707,7 @@ static int os_remove (lua_State *L) { static int os_rename (lua_State *L) { const char *fromname = luaL_checkstring(L, 1); const char *toname = luaL_checkstring(L, 2); + errno = 0; return luaL_fileresult(L, rename(fromname, toname) == 0, NULL); } @@ -28655,12 +28754,13 @@ static void l_message (const char *pname, const char *msg) { /* ** Check whether 'status' is not OK and, if so, prints the error -** message on the top of the stack. It assumes that the error object -** is a string, as it was either generated by Lua or by 'msghandler'. +** message on the top of the stack. */ static int report (lua_State *L, int status) { if (status != LUA_OK) { const char *msg = lua_tostring(L, -1); + if (msg == NULL) + msg = "(error message not a string)"; l_message(progname, msg); lua_pop(L, 1); /* remove message */ } @@ -28750,12 +28850,17 @@ static int dostring (lua_State *L, const char *s, const char *name) { /* ** Receives 'globname[=modname]' and runs 'globname = require(modname)'. +** If there is no explicit modname and globname contains a '-', cut +** the suffix after '-' (the "version") to make the global name. */ static int dolibrary (lua_State *L, char *globname) { int status; + char *suffix = NULL; char *modname = strchr(globname, '='); - if (modname == NULL) /* no explicit name? */ + if (modname == NULL) { /* no explicit name? */ modname = globname; /* module name is equal to global name */ + suffix = strchr(modname, *LUA_IGMARK); /* look for a suffix mark */ + } else { *modname = '\0'; /* global name ends here */ modname++; /* module name starts after the '=' */ @@ -28763,8 +28868,11 @@ static int dolibrary (lua_State *L, char *globname) { lua_getglobal(L, "require"); lua_pushstring(L, modname); status = docall(L, 1, 1); /* call 'require(modname)' */ - if (status == LUA_OK) + if (status == LUA_OK) { + if (suffix != NULL) /* is there a suffix mark? */ + *suffix = '\0'; /* remove suffix from global name */ lua_setglobal(L, globname); /* globname = require(modname) */ + } return report(L, status); } diff --git a/libraries/miniz/CMakeLists.txt b/libraries/miniz/CMakeLists.txt index b1724cda96..d2eb3e7282 100644 --- a/libraries/miniz/CMakeLists.txt +++ b/libraries/miniz/CMakeLists.txt @@ -1,14 +1,10 @@ -# AJBSP CMake Script -cmake_minimum_required(VERSION 3.2.2) +########################################## +# miniz +########################################## -project( +add_library( miniz - LANGUAGES C - VERSION 0.1.0 -) + miniz.c + ) -set(CMAKE_CC_FLAGS - "-O2 -ffast-math -fno-strict-aliasing -DINLINE_G=inline -Wall" -) - -add_library(miniz miniz.c) +target_include_directories(miniz PUBLIC ./) diff --git a/libraries/steve/CMakeLists.txt b/libraries/steve/CMakeLists.txt index ac6b62d40f..63a6dc600f 100644 --- a/libraries/steve/CMakeLists.txt +++ b/libraries/steve/CMakeLists.txt @@ -1,3 +1,7 @@ +########################################## +# steve +########################################## + project(steve) set(CMAKE_CXX_STANDARD 17) @@ -5,4 +9,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED True) file(GLOB_RECURSE SOURCES src/*.cpp src/*.h) -add_library(steve ${SOURCES}) \ No newline at end of file +add_library(steve ${SOURCES}) + +target_include_directories(steve PUBLIC ./src) \ No newline at end of file diff --git a/modules/ctl_doom.lua b/modules/ctl_doom.lua index fdbb2350b6..68a9c03f24 100644 --- a/modules/ctl_doom.lua +++ b/modules/ctl_doom.lua @@ -456,7 +456,6 @@ OB_MODULES["doom_mon_control_id24"] = game = "doomish", engine = "idtech_1", port = "!limit_enforcing", - port2 = "!edge", where = "experimental", hooks = diff --git a/modules/debugger.lua b/modules/debugger.lua index d61a59ec18..2fe232d206 100644 --- a/modules/debugger.lua +++ b/modules/debugger.lua @@ -151,23 +151,13 @@ OB_MODULES["debugger"] = gap = 1, }, - { - name = "bool_save_gif", - label = _("Save Minimap GIF"), - valuator = "button", - default = 0, - tooltip = _("Save an animated GIF of the building process. Recommended in combination with the Live Growth Minimap."), - priority=94, - gap = 1, - }, - { name="live_minimap", label=_("Live Growth Minimap"), choices=DEBUG_CONTROL.LIVEMAP_CHOICES, default="none", tooltip= _("Controls the granularity of steps shown on the GUI minimap as a level is built."), - longtip= _("Higher levels of detail will increase the amount of time that it takes to generate a WAD. If saving an animated GIF of the build process, its animation speed will also be affected by this setting (less detail=slower, more detail=faster)."), + longtip= _("Higher levels of detail will increase the amount of time that it takes to generate a WAD."), gap = 1 }, diff --git a/modules/export_map.lua b/modules/export_map.lua index 4769173644..73f31d542e 100644 --- a/modules/export_map.lua +++ b/modules/export_map.lua @@ -136,7 +136,7 @@ function EXPORT_MAP.add_entity(ent, model) end if origin then - export_printf("\"origin\" \"%d %d %d\"\n", int(origin.x) or 0, int(origin.y) or 0, int(origin.z) or 0) + export_printf("\"origin\" \"%d %d %d\"\n", math.round(origin.x) or 0, math.round(origin.y) or 0, math.round(origin.z) or 0) end if light then diff --git a/modules/gzdoom_marine_closet.lua b/modules/gzdoom_marine_closet.lua index 1cc9d48142..a2629e1687 100644 --- a/modules/gzdoom_marine_closet.lua +++ b/modules/gzdoom_marine_closet.lua @@ -1579,7 +1579,7 @@ OB_MODULES["gzdoom_marine_closets"] = max = 10, increment = 1, default = 1, - tooltip = _("Sets least amount of closets that can spawn per map."), + tooltip = _("Sets lowest number of closets that can spawn per map."), randomize_group = "monsters" }, @@ -1593,7 +1593,7 @@ OB_MODULES["gzdoom_marine_closets"] = max = 10, increment = 1, default = 2, - tooltip = _("Sets most amount of closets that can spawn per map."), + tooltip = _("Sets greatest number of closets that can spawn per map."), randomize_group = "monsters" }, @@ -1619,7 +1619,7 @@ OB_MODULES["gzdoom_marine_closets"] = max = 10, increment = 1, default = 1, - tooltip = _("Sets least amount of marines that can spawn per closet."), + tooltip = _("Sets lowest number of marines that can spawn per closet."), randomize_group = "monsters" }, @@ -1633,7 +1633,7 @@ OB_MODULES["gzdoom_marine_closets"] = max = 10, increment = 1, default = 5, - tooltip = _("Sets most amount of marines that can spawn per closet."), + tooltip = _("Sets greatest number of marines that can spawn per closet."), randomize_group = "monsters" }, @@ -1765,7 +1765,7 @@ OB_MODULES["gzdoom_marine_closets"] = priority = 83, choices = MARINE_CLOSET_TUNE.QUANTITY, default = "default", - tooltip = _("Influences amount of monsters in rooms with a marine closet."), + tooltip = _("Influences number of monsters in rooms with a marine closet."), randomize_group = "monsters" }, diff --git a/modules/heretic/zdoom_specials.lua b/modules/heretic/zdoom_specials.lua index 19266b7783..693c53e92e 100644 --- a/modules/heretic/zdoom_specials.lua +++ b/modules/heretic/zdoom_specials.lua @@ -964,7 +964,7 @@ function ZDOOM_SPECIALS_HERETIC.do_special_stuff() ZStoryGen_init() end - gui.wad_merge_sections("data/loading/loading_screens.wad") + gui.wad_merge_sections("games/heretic/data/loading/loading_screens.wad") end diff --git a/modules/iwad_mode.lua b/modules/iwad_mode.lua index c5cb1a5567..495224c3ab 100644 --- a/modules/iwad_mode.lua +++ b/modules/iwad_mode.lua @@ -23,7 +23,7 @@ -- Possible choices for configuration: -- --- Size, monster quantity, lighting level, amount of outdoors, secret quantity, +-- Size, monster quantity, lighting level, number of outdoors, secret quantity, -- teleporters, traps, windows, steepness, street mode, procedural gotcha, -- room height size, cages, sink type, liquids, barrels, keyed doors, normal doors, -- nearby and distant/remote switches, fences, porches, big rooms/outdoors, ambushes, @@ -977,7 +977,6 @@ function IWAD_MODE.begin_level(self, LEVEL) LEVEL.size_multiplier = 0.75 LEVEL.has_streets = true -- Its shape implies this LEVEL.is_nature = false - LEVEL.is_linear = false LEVEL.sky_light = 144 LEVEL.squareishness = 55 LEVEL.description = "The " .. rand.key_by_probs(nt.URBAN.lexicon.n) @@ -989,7 +988,6 @@ function IWAD_MODE.begin_level(self, LEVEL) LEVEL.sky_light = 128 LEVEL.has_streets = true LEVEL.is_nature = false - LEVEL.is_linear = false LEVEL.description = rand.key_by_probs(nt.URBAN.lexicon.a) .. " Downtown" LEVEL.squareishness = 60 LEVEL.room_height_style = "tall" @@ -1010,7 +1008,6 @@ function IWAD_MODE.begin_level(self, LEVEL) LEVEL.sky_light = 160 LEVEL.has_streets = true -- Shaped enough for this LEVEL.is_nature = false - LEVEL.is_linear = false LEVEL.description = rand.key_by_probs(nt.URBAN.lexicon.a) .. " Industrial Zone" LEVEL.squareishness = 55 LEVEL.room_height_style = "tall" @@ -1021,7 +1018,6 @@ function IWAD_MODE.begin_level(self, LEVEL) LEVEL.size_consistency = "normal" LEVEL.has_streets = true LEVEL.is_nature = false - LEVEL.is_linear = false LEVEL.sky_light = 144 LEVEL.squareishness = 30 LEVEL.room_height_style = "normal" diff --git a/modules/miscellaneous.lua b/modules/miscellaneous.lua index 5cef60c5bd..74f2af019a 100644 --- a/modules/miscellaneous.lua +++ b/modules/miscellaneous.lua @@ -242,21 +242,6 @@ OB_MODULES["misc"] = randomize_group="architecture" }, - { - name = "float_linear_mode", - label = _("Linear Mode"), - valuator = "slider", - units = _("% Chance Per Level"), - min = 0, - max = 100, - increment = 1, - default = 0, - tooltip = _("Creates linear levels, where rooms are connected along a linear layout from start to exit."), - longtip = _("Due to the nature of linear levels, you may encounter teleports even if you have teleports off. This is necessary in order for linear levels not to prematuraly terminate and therefore become stunted i.e. only have 2-5 rooms."), - randomize_group="architecture", - priority = 98 - }, - { name = "float_nature_mode", label = _("Nature Mode"), @@ -308,7 +293,7 @@ OB_MODULES["misc"] = name="room_area_multiplier", label=_("Area Count Multiplier"), choices = MISC_STUFF.AREA_COUNT_MULTIPLIER_CHOICES, default = "mixed", - tooltip = _("Alters the amount of areas in a room. Influences the amount rooms are divided into different elevations or simply different ceilings if a level has no steepness.\n\nVanilla: No area quantity multipliers.\n\nMix It Up: All multiplier ranges are randomly used with highest and lowest multipliers being rarest."), + tooltip = _("Alters the number of areas in a room. Influences the amount rooms are divided into different elevations or simply different ceilings if a level has no steepness.\n\nVanilla: No area quantity multipliers.\n\nMix It Up: All multiplier ranges are randomly used with highest and lowest multipliers being rarest."), priority = 93, randomize_group="architecture", }, @@ -355,7 +340,7 @@ OB_MODULES["misc"] = }, { name="sub_rooms", label=_("Sub Rooms"), - tooltip=_("Controls amount of small sub rooms. Actually controls the degree at which ungrown rooms are left instead of culled."), + tooltip=_("Controls number of small sub rooms. Actually controls the degree at which ungrown rooms are left instead of culled."), choices=STYLE_CHOICES, priority = 87.5, randomize_group="architecture", }, @@ -373,7 +358,7 @@ OB_MODULES["misc"] = { name="parks", label=_("Parks"), - tooltip = _("Control the amount of parks."), + tooltip = _("Control the number of parks."), choices=STYLE_CHOICES, priority = 86, randomize_group="architecture", }, { name="natural_parks", @@ -397,7 +382,7 @@ OB_MODULES["misc"] = { name="windows", label=_("Windows"), - tooltip = _("Control the amount of windows."), + tooltip = _("Control the number of windows."), choices=STYLE_CHOICES, priority = 83, randomize_group="architecture", }, { name="passable_windows", @@ -454,7 +439,7 @@ OB_MODULES["misc"] = { name="scenics", label=_("Scenics"), choices=STYLE_CHOICES, - tooltip = _("Controls the amount of fancy scenics visible at room bordering the maps."), + tooltip = _("Controls the number of fancy scenics visible at room bordering the maps."), priority = 76, gap = 1, randomize_group="architecture", @@ -511,11 +496,11 @@ OB_MODULES["misc"] = { name="doors", label=_("Doors"), - tooltip = _("Control the amount of doors."), + tooltip = _("Control the number of doors."), choices=STYLE_CHOICES, priority = 69, randomize_group="architecture", }, { name="keys", label=_("Keyed Doors"), - tooltip = _("Control the amount of keyed doors."), + tooltip = _("Control the number of keyed doors."), choices=STYLE_CHOICES, priority = 68, randomize_group="architecture", }, { name="trikeys", label=_("Triple-Keyed Doors"), diff --git a/modules/modded_game_extras.lua b/modules/modded_game_extras.lua index edce9a307e..b70ac17734 100644 --- a/modules/modded_game_extras.lua +++ b/modules/modded_game_extras.lua @@ -1680,7 +1680,7 @@ function MODDED_GAME_EXTRAS.create_hn_info(self, LEVEL) end if R.lev_along and not R.is_start and #LEVEL.rooms > 2 then - goal_string = goal_string .. " (" .. int(R.lev_along * 100) .. "%%)" + goal_string = goal_string .. " (" .. math.round(R.lev_along * 100) .. "%%)" end return goal_string @@ -2028,7 +2028,7 @@ function MODDED_GAME_EXTRAS.generate_hn_decorate() local thing_chunk = MODDED_GAME_EXTRAS.HELLSCAPE_NAVIGATOR_TEMPLATE.COPIES thing_chunk = string.gsub(thing_chunk, "NUMNUMNUM", editor_num) thing_chunk = string.gsub(thing_chunk, "NAMENAMENAME", name) - thing_chunk = string.gsub(thing_chunk, "SIZESIZESIZE", int(radius)) + thing_chunk = string.gsub(thing_chunk, "SIZESIZESIZE", math.round(radius)) decorate_string = decorate_string .. thing_chunk end diff --git a/modules/procedural_gotcha_zdoom.lua b/modules/procedural_gotcha_zdoom.lua index 21d40afc0d..f2c7f6e39d 100644 --- a/modules/procedural_gotcha_zdoom.lua +++ b/modules/procedural_gotcha_zdoom.lua @@ -1429,7 +1429,7 @@ function PROCEDURAL_GOTCHA_FINE_TUNE_ZDOOM.grab_random_trait(btype, etraits) if einfo == info.name then stack = stack + 1 if PARAM.boss_gen_tmult < 0 then - tprob = int(tprob * 0.25) + tprob = math.round(tprob * 0.25) elseif PARAM.boss_gen_tmult > 1 then tprob = tprob * 2 end @@ -1632,7 +1632,7 @@ function PROCEDURAL_GOTCHA_FINE_TUNE_ZDOOM.all_done() else mult=1.0 end end - hpcalc = int(rand.pick({5000,5200,5400,5600,5800,6000})*mult*PARAM.float_boss_gen_mult) + hpcalc = math.round(rand.pick({5000,5200,5400,5600,5800,6000})*mult*PARAM.float_boss_gen_mult) if batk == "hitscan" and PARAM.boss_gen_dmult<3.0 then hpcalc = hpcalc*0.75 end @@ -1640,7 +1640,7 @@ function PROCEDURAL_GOTCHA_FINE_TUNE_ZDOOM.all_done() local sumcalc - sumcalc = int(rand.pick({400,450,500,550,600})*PARAM.boss_gen_rmult) + sumcalc = math.round(rand.pick({400,450,500,550,600})*PARAM.boss_gen_rmult) bsummon = PROCEDURAL_GOTCHA_FINE_TUNE_ZDOOM.syntaxize(bsummon,sumcalc) end diff --git a/modules/stealth_mons.lua b/modules/stealth_mons.lua index 851b98f6b0..18b635a28c 100644 --- a/modules/stealth_mons.lua +++ b/modules/stealth_mons.lua @@ -379,7 +379,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Zombiemen."), + tooltip = _("Control the number of Stealth Zombiemen."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -393,7 +393,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Shotgunners."), + tooltip = _("Control the number of Stealth Shotgunners."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -407,7 +407,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Imps."), + tooltip = _("Control the number of Stealth Imps."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -421,7 +421,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Pinkies."), + tooltip = _("Control the number of Stealth Pinkies."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -435,7 +435,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Cacodemons."), + tooltip = _("Control the number of Stealth Cacodemons."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -449,7 +449,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Barons of Hell."), + tooltip = _("Control the number of Stealth Barons of Hell."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -463,7 +463,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Chaingunners."), + tooltip = _("Control the number of Stealth Chaingunners."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -477,7 +477,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Hell Knights."), + tooltip = _("Control the number of Stealth Hell Knights."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -491,7 +491,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Revenants."), + tooltip = _("Control the number of Stealth Revenants."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -505,7 +505,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Mancubi."), + tooltip = _("Control the number of Stealth Mancubi."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -519,7 +519,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Arachnotrons."), + tooltip = _("Control the number of Stealth Arachnotrons."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -533,7 +533,7 @@ OB_MODULES["stealth_mon_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Stealth Arch-Viles."), + tooltip = _("Control the number of Stealth Arch-Viles."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, diff --git a/modules/ui_arch.lua b/modules/ui_arch.lua index 0d48453b1c..3d601fb92c 100644 --- a/modules/ui_arch.lua +++ b/modules/ui_arch.lua @@ -232,11 +232,11 @@ OB_MODULES["ui_arch"] = { name="outdoors", label=_("Outdoors"), choices=STYLE_CHOICES, priority = 78, randomize_group="architecture", - tooltip = _("Control the amount of outdoor areas.") + tooltip = _("Control the number of outdoor areas.") }, { name="caves", label=_("Caves"), choices=STYLE_CHOICES, priority = 77, randomize_group="architecture", - tooltip = _("Control the amount of caves.") + tooltip = _("Control the number of caves.") }, { name="liquids", label=_("Liquids"), choices=STYLE_CHOICES, priority = 76, randomize_group="architecture", @@ -244,11 +244,11 @@ OB_MODULES["ui_arch"] = }, { name="hallways", label=_("Hallways"), choices=STYLE_CHOICES, priority = 75, randomize_group="architecture", - tooltip = _("Control the amount of hallways.") + tooltip = _("Control the number of hallways.") }, { name="teleporters", label=_("Teleports"), choices=STYLE_CHOICES, priority = 74, randomize_group="architecture", - tooltip = _("Control the amount of teleporters.") + tooltip = _("Control the number of teleporters.") }, { name="bool_allow_teleporter_emergency_breaks", diff --git a/modules/ui_mons.lua b/modules/ui_mons.lua index 385c364e99..eca3e59ed0 100644 --- a/modules/ui_mons.lua +++ b/modules/ui_mons.lua @@ -110,7 +110,7 @@ OB_MODULES["ui_mons"] = default = 1.0, nan = _("Mix It Up,Progressive"), presets = _("0:None,0.15:0.15 (Trivial),0.35:0.35 (Sporadic),0.7:0.7 (Meager),1.0:1.0 (Normal),1.3:1.3 (Modest),1.5:1.5 (Bearable),2.0:2.0 (Rough),2.5:2.5 (Strenuous),3.0:3.0 (Formidable),3.5:3.5 (Harsh),4.0:4.0 (Painful),4.5:4.5 (Ferocious),5.0:5.0 (Unforgiving),5.5:5.5 (Punishing),6.0:6.0 (Murderous),6.5:6.5 (Grueling),7.0:7.0 (Unrelenting),7.5:7.5 (Arduous),8.0:8.0 (Barbaric),8.5:8.5 (Savage),9.0:9.0 (Brutal),9.5:9.5 (Draconian),10.0:10.00 (Merciless)"), - tooltip=_("Changes the amount of monsters placed in a map. Scales with level size."), + tooltip=_("Changes the number of monsters placed in a map. Scales with level size."), longtip=_("For reference: Obsidian's default for normal is 1.0.\n\nMix It Up: Selects quantities specified between Upper and Lower Bound choices on a chosen by the user.\n\nProgressive: creates a curve of increasing monster population also based on the Fine Tune options below.\n\nIt does not matter if your Upper/Lower Bound selections are reversed. Progressive will pick the min VS max quantities selected.\n\nNone: No monsters. Why would you choose this option? \nTrivial: Very, very few monsters. Almost nothing to kill.\nSporadic: Very few monsters. Not many things to kill.\nMeager: Fewer monsters. Not challenging for the average player.\nEasy: Obsidian default quantity. Not too bad for casual players.\nModest: Slightly above default. Still pretty easy for most. \nBearable: Above average opposition. Getting warmer! \nRough: Slightly difficult. Equivalent to late 90s megawads. \nStrenuous: Baby steps into big boy difficulty. Lots to kill! \nFormidable/Harsh: 'Easy' level of difficult. Considerable opposition. \nPainful/Ferocious: Getting into slaughterwad territory. Difficult! \nUnforgiving/Punishing: Slaughterwad level difficulty. Skill needed. \nMurderous/Grueling: Extremely high monster count. \nUnrelenting/Arduous: An uphill battle. Expect to reload saves often! \nBarbaric/Savage: Up into the hardest slaughterwads out there. \nBrutal/Draconian: Legions of demons await you on this setting. \nMerciless: Hell will throw everything at you at this setting, you masochist."), randomize_group="monsters", }, @@ -217,7 +217,7 @@ OB_MODULES["ui_mons"] = { name="traps", label=_("Traps"), - tooltip = _("Control the amount of traps."), + tooltip = _("Control the number of traps."), choices=STYLE_CHOICES, randomize_group="monsters", }, { name="trap_style", @@ -241,7 +241,7 @@ OB_MODULES["ui_mons"] = { name="cages", label=_("Cages"), - tooltip = _("Control the amount of cages."), + tooltip = _("Control the number of cages."), choices=STYLE_CHOICES, randomize_group="monsters", }, { name="cage_qty", @@ -311,7 +311,7 @@ OB_MODULES["ui_mons_wolf_3d"] = default = 1.0, nan = _("Mix It Up,Progressive"), presets = _("0:None,0.15:0.15 (Trivial),0.35:0.35 (Sporadic),0.7:0.7 (Meager),1.0:1.0 (Easy),1.3:1.3 (Modest),1.5:1.5 (Bearable),2.0:2.0 (Rough),2.5:2.5 (Strenuous),3.0:3.0 (Formidable),3.5:3.5 (Harsh),4.0:4.0 (Painful),4.5:4.5 (Ferocious),5.0:5.0 (Unforgiving),5.5:5.5 (Punishing),6.0:6.0 (Murderous),6.5:6.5 (Grueling),7.0:7.0 (Unrelenting),7.5:7.5 (Arduous),8.0:8.0 (Barbaric),8.5:8.5 (Savage),9.0:9.0 (Brutal),9.5:9.5 (Draconian),10.0:10.00 (Merciless)"), - tooltip=_("Changes the amount of monsters placed in a map. Scales with level size."), + tooltip=_("Changes the number of monsters placed in a map. Scales with level size."), longtip=_("For reference: Obsidian's default for normal is 1.0.\n\nMix It Up: Selects quantities specified between Upper and Lower Bound choices on a chosen by the user.\n\nProgressive: creates a curve of increasing monster population also based on the Fine Tune options below.\n\nIt does not matter if your Upper/Lower Bound selections are reversed. Progressive will pick the min VS max quantities selected.\n\nNone: No monsters. Why would you choose this option? \nTrivial: Very, very few monsters. Almost nothing to kill.\nSporadic: Very few monsters. Not many things to kill.\nMeager: Fewer monsters. Not challenging for the average player.\nEasy: Obsidian default quantity. Not too bad for casual players.\nModest: Slightly above default. Still pretty easy for most. \nBearable: Above average opposition. Getting warmer! \nRough: Slightly difficult. Equivalent to late 90s megawads. \nStrenuous: Baby steps into big boy difficulty. Lots to kill! \nFormidable/Harsh: 'Easy' level of difficult. Considerable opposition. \nPainful/Ferocious: Getting into slaughterwad territory. Difficult! \nUnforgiving/Punishing: Slaughterwad level difficulty. Skill needed. \nMurderous/Grueling: Extremely high monster count. \nUnrelenting/Arduous: An uphill battle. Expect to reload saves often! \nBarbaric/Savage: Up into the hardest slaughterwads out there. \nBrutal/Draconian: Legions of demons await you on this setting. \nMerciless: Hell will throw everything at you at this setting, you masochist."), randomize_group="monsters", }, diff --git a/modules/ui_pickups.lua b/modules/ui_pickups.lua index 8a3f6f2a8a..43d50c0485 100644 --- a/modules/ui_pickups.lua +++ b/modules/ui_pickups.lua @@ -86,7 +86,7 @@ OB_MODULES["ui_pickups"] = { name="health", label=_("Health"), choices=UI_PICKUPS.HEALTH_CHOICES, randomize_group="pickups", - tooltip = _("Control the amount of health items.") + tooltip = _("Control the number of health items.") }, { name="ammo", @@ -98,19 +98,19 @@ OB_MODULES["ui_pickups"] = { name="weapons", label=_("Weapons"), choices=UI_PICKUPS.WEAPON_CHOICES, randomize_group="pickups", - tooltip = _("Control the amount of weapons.") + tooltip = _("Control the number of weapons.") }, { name="items", label=_("Items"), choices=UI_PICKUPS.ITEM_CHOICES, randomize_group="pickups", - tooltip = _("Control the amount of armor and miscellaneous items.") + tooltip = _("Control the number of armor and miscellaneous items.") }, { name="secrets", label=_("Secrets"), choices=STYLE_CHOICES, randomize_group="pickups", - tooltip = _("Control the amount of secrets.") + tooltip = _("Control the number of secrets.") }, { name="secrets_bonus", diff --git a/modules/zdoom_frozsoul_sound.lua b/modules/zdoom_frozsoul_sound.lua index d5bf449c55..046b2af832 100644 --- a/modules/zdoom_frozsoul_sound.lua +++ b/modules/zdoom_frozsoul_sound.lua @@ -238,7 +238,7 @@ end function ZDOOM_SOUND.merge_frozsoul_sounds(self) if PARAM.bool_merge_frozsoul_sounds == 1 then - local dir = "data/sounds/" + local dir = "games/doom/data/sounds/" for _,sound in pairs(ZDOOM_SOUND_DEFS) do if ob_mod_enabled("compress_output") == 1 then diff --git a/modules/zdoom_marines.lua b/modules/zdoom_marines.lua index 7abe8345c0..8ddd4bad02 100644 --- a/modules/zdoom_marines.lua +++ b/modules/zdoom_marines.lua @@ -320,7 +320,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Fist-wielding ZDoom Marines."), + tooltip = _("Control the number of Fist-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -334,7 +334,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Berserked ZDoom Marines."), + tooltip = _("Control the number of Berserked ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -348,7 +348,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Chainsaw-wielding ZDoom Marines."), + tooltip = _("Control the number of Chainsaw-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -362,7 +362,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Pistol-wielding ZDoom Marines."), + tooltip = _("Control the number of Pistol-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -376,7 +376,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Shotgun-wielding ZDoom Marines."), + tooltip = _("Control the number of Shotgun-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -390,7 +390,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Super Shotgun-wielding ZDoom Marines."), + tooltip = _("Control the number of Super Shotgun-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -404,7 +404,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Chaingun-wielding ZDoom Marines."), + tooltip = _("Control the number of Chaingun-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -418,7 +418,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Rocket Launcher-wielding ZDoom Marines."), + tooltip = _("Control the number of Rocket Launcher-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -432,7 +432,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Plasma Rifle-wielding ZDoom Marines."), + tooltip = _("Control the number of Plasma Rifle-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -446,7 +446,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of Railgun-wielding ZDoom Marines."), + tooltip = _("Control the number of Railgun-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, @@ -460,7 +460,7 @@ OB_MODULES["zdoom_marine_control"] = increment = .02, default = _("Default"), nan = _("Default"), - tooltip = _("Control the amount of BFG 9000-wielding ZDoom Marines."), + tooltip = _("Control the number of BFG 9000-wielding ZDoom Marines."), presets = _("0:0 (None at all),.02:0.02 (Scarce),.14:0.14 (Less),.5:0.5 (Plenty),1.2:1.2 (More),3:3 (Heaps),20:20 (INSANE)"), randomize_group="monsters", }, diff --git a/modules/zdoom_otex.lua b/modules/zdoom_otex.lua index f02ba5566c..3cb10f4a43 100644 --- a/modules/zdoom_otex.lua +++ b/modules/zdoom_otex.lua @@ -823,12 +823,12 @@ function OTEX_PROC_MODULE.synthesize_procedural_themes() end local scenic_fence_tab = table.copy(OTEX_SPECIAL_RESOURCES.rail_scenic_fences) for fence,prob in pairs(scenic_fence_tab.tech) do - GAME.THEMES.tech.scenic_fences[fence] = int(prob * 0.75) - GAME.THEMES.urban.scenic_fences[fence] = int(prob * 0.75) + GAME.THEMES.tech.scenic_fences[fence] = math.round(prob * 0.75) + GAME.THEMES.urban.scenic_fences[fence] = math.round(prob * 0.75) end for fence,prob in pairs(scenic_fence_tab.gothic) do - GAME.THEMES.hell.scenic_fences[fence] = int(prob * 0.75) - GAME.THEMES.urban.scenic_fences[fence] = int(prob * 0.75) + GAME.THEMES.hell.scenic_fences[fence] = math.round(prob * 0.75) + GAME.THEMES.urban.scenic_fences[fence] = math.round(prob * 0.75) end -- create liquid attachments diff --git a/modules/zdoom_specials.lua b/modules/zdoom_specials.lua index 502fe6dfdb..0080587c4a 100644 --- a/modules/zdoom_specials.lua +++ b/modules/zdoom_specials.lua @@ -963,11 +963,11 @@ function ZDOOM_SPECIALS.do_special_stuff() -- insert custom music if PARAM.story_generator ~= "none" then if PARAM.generic_intermusic == "$MUSIC_DM2INT" then - gui.wad_insert_file("data/music/D_DM2INT.ogg","D_DM2INT") + gui.wad_insert_file("games/doom/data/music/D_DM2INT.ogg","D_DM2INT") end end - gui.wad_merge_sections("data/loading/loading_screens.wad") + gui.wad_merge_sections("games/doom/data/loading/loading_screens.wad") end OB_MODULES["zdoom_specials_lighting"] = diff --git a/scripts/094/builder.lua b/scripts/094/builder.lua index b1d9f2440f..e9d356b075 100644 --- a/scripts/094/builder.lua +++ b/scripts/094/builder.lua @@ -379,8 +379,8 @@ function B_prefab(c, fab,skin,parm, model,combo, x,y, dir,mirror_x,mirror_y) tx, ty = mid_x + tx, mid_y + ty - local bx = x + int(tx / 64) - local by = y + int(ty / 64) + local bx = x + math.round(tx / 64) + local by = y + math.round(ty / 64) local dx = (tx % 64) - 32 local dy = (ty % 64) - 32 @@ -996,8 +996,8 @@ function B_vista(src,dest, x1,y1, x2,y2, side, b_combo,kind) local sp_min = 2.0 + deep / 6.0 local sp_max = 2.0 + deep / 2.5 - local front_pillars = int( rand.range(fp_min, fp_max) + rand.skew()*0.5 ) - local side_pillars = int( rand.range(sp_min, sp_max) + rand.skew()*0.5 ) + local front_pillars = math.round( rand.range(fp_min, fp_max) + rand.skew()*0.5 ) + local side_pillars = math.round( rand.range(sp_min, sp_max) + rand.skew()*0.5 ) gui.debugf("VISTA %dx%d --> PILLARS front:%d side:%d\n", long, deep, front_pillars, side_pillars) @@ -1005,8 +1005,8 @@ function B_vista(src,dest, x1,y1, x2,y2, side, b_combo,kind) for fp = 1, front_pillars do local u = (fp - 1) / (front_pillars - 1) - local x = int(px1 + (px2-px1) * u) - local y = int(py1 + (py2-py1) * u) + local x = math.round(px1 + (px2-px1) * u) + local y = math.round(py1 + (py2-py1) * u) frag_fill(src, x,y, x,y, { solid=support }) end @@ -1014,13 +1014,13 @@ function B_vista(src,dest, x1,y1, x2,y2, side, b_combo,kind) for sp = 1, side_pillars do local u = (sp - 1) / (side_pillars - 1) - local x1 = int(px1 + (wx1-px1) * u) - local y1 = int(py1 + (wy1-py1) * u) + local x1 = math.round(px1 + (wx1-px1) * u) + local y1 = math.round(py1 + (wy1-py1) * u) frag_fill(src, x1,y1, x1,y1, { solid=support }) - local x2 = int(px2 + (wx2-px2) * u) - local y2 = int(py2 + (wy2-py2) * u) + local x2 = math.round(px2 + (wx2-px2) * u) + local y2 = math.round(py2 + (wy2-py2) * u) frag_fill(src, x2,y2, x2,y2, { solid=support }) end @@ -1255,8 +1255,8 @@ function make_chunks() local L, M, R if q_pos then - M = int((total+2) / 3) - L = int(total / 3) + M = math.round((total+2) / 3) + L = math.round(total / 3) R = total - M - L if q_pos == 1 then return M, L, R @@ -1350,9 +1350,9 @@ function make_chunks() local pos if link.where == -2 then pos = 0 - elseif link.where == -1 then pos = int((diff+2)/4) - elseif link.where == 0 then pos = int(diff / 2) - elseif link.where == 1 then pos = diff - int((diff+2)/4) + elseif link.where == -1 then pos = math.round((diff+2)/4) + elseif link.where == 0 then pos = math.round(diff / 2) + elseif link.where == 1 then pos = diff - math.round((diff+2)/4) elseif link.where == 2 then pos = diff else error("Bad where value: " .. tostring(link.where)) @@ -1450,8 +1450,8 @@ function make_chunks() if (d_pos < d_min) then d_pos = d_min end if (d_pos > d_max) then d_pos = d_max end - local j1 = int((d_pos - 1) / JW) - local j2 = int((d_pos - 1 + link.long-1) / JW) + local j1 = math.round((d_pos - 1) / JW) + local j2 = math.round((d_pos - 1 + link.long-1) / JW) for j = j1,j2 do assert (0 <= j and j < KW) @@ -3292,7 +3292,7 @@ end -- -- -- pillar in middle of special arch -- if link.where == "wide" then --- long = int((long-1) / 2) +-- long = math.round((long-1) / 2) -- x, y = x+long*ax, y+long*ay -- ex,ey = ex-long*ax, ey-long*ay -- @@ -3347,7 +3347,7 @@ end -- -- -- B_door(c, link, b_combo, x, y, c.floor_h, dir, --- 1 + int(info.w / 64), 1, info, door_kind, tag, key_tex) +-- 1 + math.round(info.w / 64), 1, info, door_kind, tag, key_tex) -- else -- error("build_link: bad kind: " .. tostring(link.kind)) -- end @@ -3565,10 +3565,10 @@ end if spot.long >= 7 or (spot.long >= 5 and (WINDOW.c_h - WINDOW.f_h) < 72) then - local mx1 = int((x1+x2)/2) - local my1 = int((y1+y2)/2) - local mx2 = int((x1+x2+1)/2) - local my2 = int((y1+y2+1)/2) + local mx1 = math.round((x1+x2)/2) + local my1 = math.round((y1+y2)/2) + local mx2 = math.round((x1+x2+1)/2) + local my2 = math.round((y1+y2+1)/2) fill (c, mx1,my1, mx2,my2, { solid=D.combo.wall }) end else @@ -3739,7 +3739,7 @@ function build_grotto(c, x1,y1, x2,y2) local WALL = { solid=c.combo.wall } for y = y1+1, y2-1, 2 do - for x = x1+1+(int(y/2)%2)*2, x2-3, 4 do + for x = x1+1+(math.round(y/2)%2)*2, x2-3, 4 do gap_fill(c, x-2,y, x-2,y, WALL) gap_fill(c, x+2,y, x+2,y, WALL) @@ -3770,8 +3770,8 @@ function build_pacman_level(c) local mid_fab = GAME.FACTORY.PREFABS[rand.pick(PACMAN_MID_FABS)] assert(mid_fab) - local mid_x = 32 - int(mid_fab.long/2) - local mid_y = 30 - int(mid_fab.deep/2) + local mid_x = 32 - math.round(mid_fab.long/2) + local mid_y = 30 - math.round(mid_fab.deep/2) local top_fab = GAME.FACTORY.PREFABS[rand.pick(PACMAN_CORN_FABS)] local bot_fab = GAME.FACTORY.PREFABS[rand.pick(PACMAN_CORN_FABS)] @@ -4605,7 +4605,7 @@ sel(B.on_path, "YES", "NO")) local skew = 1.0 + rand.skew() * 0.35 - local kill_blk = int(rec.total_blk * c.space_factor / 100 * skew) + local kill_blk = math.round(rec.total_blk * c.space_factor / 100 * skew) if kill_blk >= rec.total_blk then for pos = 1,rec.long do @@ -4660,7 +4660,7 @@ sel(B.on_path, "YES", "NO")) local skew = 1.0 + rand.skew() * 0.35 - local kill_blk = int(rec.total_blk * c.space_factor / 100 * skew) + local kill_blk = math.round(rec.total_blk * c.space_factor / 100 * skew) if kill_blk >= rec.total_blk then for pos = 1,rec.long do @@ -4698,7 +4698,7 @@ sel(B.on_path, "YES", "NO")) -- gui.printf("GUILLOTINE: SPACE:%d | min:%1.1f max:%1.1f @avg:%1.1f --> new_deep:%1.2f\n", -- (c.space_factor/10), t_min, t_max, t_avg, new_deep) - new_deep = int(new_deep) + new_deep = math.round(new_deep) if new_deep <= 0 then for pos = 1,rec.long do @@ -4960,7 +4960,7 @@ gui.debugf(" CELL: (%d,%d) .. (%d,%d)\n", c.bx1,c.by1, c.bx2,c.by2) y = y1 + i*h/(count+1) end - local spot = add_special_pickup_spot(c, int(x), int(y), 32,32, 200) + local spot = add_special_pickup_spot(c, math.round(x), math.round(y), 32,32, 200) spot.vista_side = side end @@ -5411,7 +5411,7 @@ gui.debugf(" EDGE1:%s EDGE2:%s\n", edge1 or "OK", edge2 or "OK") -- limit width to reasonable values (128 or 256 units) if long == 3 then long = 2 elseif long >= 5 and rand.odds(95) then - local pos = int( (long - 4 + rand.irange(0,1)) / 2) + local pos = math.round( (long - 4 + rand.irange(0,1)) / 2) x, y = x + pos*ax, y + pos*ay long = 4 end @@ -5491,8 +5491,8 @@ gui.debugf(" EDGE1:%s EDGE2:%s\n", edge1 or "OK", edge2 or "OK") local function link_walk_pos(L) local dx,dy = dir_to_delta(10-L.side) -- inwards - local x = int((L.link.x1 + L.link.x2) / 2) - local y = int((L.link.y1 + L.link.y2) / 2) + local x = math.round((L.link.x1 + L.link.x2) / 2) + local y = math.round((L.link.y1 + L.link.y2) / 2) return x+dx, y+dy end @@ -5613,8 +5613,8 @@ gui.debugf(" EDGE1:%s EDGE2:%s\n", edge1 or "OK", edge2 or "OK") if K.kind == "empty" then K.kind = "room" end -- TODO: prefer block is not on stair/lift - local rx = int((K.x1+K.x2)/2) - local ry = int((K.y1+K.y2)/2) + local rx = math.round((K.x1+K.x2)/2) + local ry = math.round((K.y1+K.y2)/2) for i = 1,#link_list do find_path("room", link_list[i], rx, ry) @@ -5635,12 +5635,12 @@ gui.debugf(" EDGE1:%s EDGE2:%s\n", edge1 or "OK", edge2 or "OK") if K.kx == 1 then qx = K.x2 elseif K.kx == 3 then qx = K.x1 - else qx = int((K.x1+K.x2) / 2) + else qx = math.round((K.x1+K.x2) / 2) end if K.ky == 1 then qy = K.y2 elseif K.ky == 3 then qy = K.y1 - else qy = int((K.y1+K.y2) / 2) + else qy = math.round((K.y1+K.y2) / 2) end find_path("room", rand.pick(link_list), qx, qy) @@ -6594,7 +6594,7 @@ gui.debugf("add_quest_object: %s @ (%d,%d)\n", name, x, y) if not info then error("Unknown boss: " .. name) end local count = 1 - if info.hp < 900 then count = int(1900/info.hp) end + if info.hp < 900 then count = math.round(1900/info.hp) end for i = 1,count do add_quest_object(c, name) @@ -6716,8 +6716,8 @@ gui.debugf("add_wall_stuff: %s @ (%d,%d) block:(%d,%d) dir:%d\n", if c.quest.return_args then local dx,dy = dir_to_delta(dir) - local x = int((K.x1+K.x2) / 2) + dx * 4 - local y = int((K.y1+K.y2) / 2) + dy * 4 + local x = math.round((K.x1+K.x2) / 2) + dx * 4 + local y = math.round((K.y1+K.y2) / 2) + dy * 4 sort_fab_locs(c, "near", x, y) @@ -7037,8 +7037,8 @@ gui.debugf("add_prefab: %s dir:%d\n", def.name, dir) if (c.x==1 and c.y==1) or (c.x==PLAN.w and c.y==PLAN.h) then -- OK elseif math.max(PLAN.w,PLAN.h) >= 5 and - c.x == int(PLAN.w/2 + 0.6) and - c.y == int(PLAN.h/2 + 0.6) then + c.x == math.round(PLAN.w/2 + 0.6) and + c.y == math.round(PLAN.h/2 + 0.6) then -- OK else return end else diff --git a/scripts/094/monster.lua b/scripts/094/monster.lua index 807f614538..8d6b740d35 100644 --- a/scripts/094/monster.lua +++ b/scripts/094/monster.lua @@ -112,7 +112,7 @@ function rectangle_to_spots(c, x,y, x2,y2) local spots = {} local function carve_it_up(x,y, w,h) - local w2, h2 = int(w/2), int(h/2) + local w2, h2 = math.round(w/2), math.round(h/2) if h > 2 then carve_it_up(x, y, w, h2) @@ -525,7 +525,7 @@ function simulate_battle(HM, mon_set, quest) assert(info) remain_shots = 1 + gui.random() + gui.random() - remain_shots = int(remain_shots * info.rate) + remain_shots = math.round(remain_shots * info.rate) if remain_shots < 1 then remain_shots = 1 end @@ -939,7 +939,7 @@ function distribute_pickups(c, HM, backtrack) local idx = rand.index_by_probs(probs) local th_info = infos[idx] - local count = 1 + int(R / th_info.give) + local count = 1 + math.round(R / th_info.give) if GAME.FACTORY.caps.blocky_items then count = 1 end if th_info.clu_max then count = math.min(count, th_info.clu_max) end @@ -1306,7 +1306,7 @@ function battle_in_cell(c) local probs = { 30 } for name,info in pairs(GAME.FACTORY.monsters) do - if (info.pow < T*2) and (fp >= int(info.fp)) then + if (info.pow < T*2) and (fp >= math.round(info.fp)) then local prob = info.prob * (c.mon_prefs[name] or 1) @@ -1337,7 +1337,7 @@ function battle_in_cell(c) local function decide_monster_horde(info) local horde = 1 - local max_horde = 1 + int(T / info.pow) + local max_horde = 1 + math.round(T / info.pow) if info.hp <= 500 and rand.odds(30) then horde = horde + 1 end if info.hp <= 100 then horde = horde + rand.index_by_probs { 90, 40, 10, 3, 0.5 } end @@ -1391,7 +1391,7 @@ function battle_in_cell(c) for name,info in pairs(GAME.FACTORY.monsters) do if (info.cage_fallback) or - ((info.pow < T*2/x_horde) and (fp >= int(info.fp))) + ((info.pow < T*2/x_horde) and (fp >= math.round(info.fp))) then local prob = info.cage_prob or info.cage_fallback or 0 @@ -1455,8 +1455,8 @@ function battle_in_cell(c) local horde = decide_cage_horde(spot, info) for i = 1,horde do - local dx = int((i-1)%2) * 64 - local dy = int((i-1)/2) * 64 + local dx = math.round((i-1)%2) * 64 + local dy = math.round((i-1)/2) * 64 local angle = rand.irange(0,7) * 45 local options = { [SK]=true } @@ -1492,8 +1492,8 @@ function battle_in_cell(c) local horde = decide_cage_horde(spot, info) for i = 1,horde do - local dx = int((i-1)%2) * 64 - local dy = int((i-1)/2) * 64 + local dx = math.round((i-1)%2) * 64 + local dy = math.round((i-1)/2) * 64 local angle = delta_to_angle(5-(spot.x+dx/64), 5-(spot.y+dy/64)) local options = { [SK]=true } diff --git a/scripts/094/plan_dm.lua b/scripts/094/plan_dm.lua index 0867a4dde9..d8459a310a 100644 --- a/scripts/094/plan_dm.lua +++ b/scripts/094/plan_dm.lua @@ -402,7 +402,7 @@ function plan_dm_arena(level) rand.shuffle(locs) - local num_f = int((PLAN.w + PLAN.h) / 4) + local num_f = math.round((PLAN.w + PLAN.h) / 4) while #locs > 0 and num_f > 0 do @@ -483,7 +483,7 @@ function plan_dm_arena(level) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) goto foundsize end @@ -521,7 +521,7 @@ function plan_dm_arena(level) local def_large = PARAM.float_level_upper_bound - def_small or 42 -- this basically ramps up - ob_size = int(def_small + along * def_large) + ob_size = math.round(def_small + along * def_large) end ::foundsize:: @@ -585,8 +585,8 @@ function plan_dm_arena(level) PLAN.cells[pw][ph].require_player = true -- guarantee at least one weapon (central cell) - local mx = int((PLAN.w+1)/2) - local my = int((PLAN.h+1)/2) + local mx = math.round((PLAN.w+1)/2) + local my = math.round((PLAN.h+1)/2) PLAN.cells[mx][my].require_weapon = true diff --git a/scripts/094/planner.lua b/scripts/094/planner.lua index df7d733deb..2be350b458 100644 --- a/scripts/094/planner.lua +++ b/scripts/094/planner.lua @@ -354,7 +354,7 @@ function std_decide_quests(Level, QUEST_TAB, LEN_PROBS) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) goto foundsize end @@ -392,7 +392,7 @@ function std_decide_quests(Level, QUEST_TAB, LEN_PROBS) local def_large = PARAM.float_level_upper_bound - def_small or 42 -- this basically ramps up - ob_size = int(def_small + along * def_large) + ob_size = math.round(def_small + along * def_large) end ::foundsize:: @@ -1434,8 +1434,8 @@ c.along, Q.level, Q.sub_level, c.room_type.name) -- add very first room somewhere in lower-left quarter of map if not Q.parent and Q.level == 1 then - local x = rand.irange(1, int(PLAN.w / 2)) - local y = rand.irange(1, int(PLAN.h / 2)) + local x = rand.irange(1, math.round(PLAN.w / 2)) + local y = rand.irange(1, math.round(PLAN.h / 2)) local c = create_cell(x, y, Q, 1, Q.combo) @@ -1459,9 +1459,9 @@ c.along, Q.level, Q.sub_level, c.room_type.name) local want_len = Q.want_len if OB_CONFIG.game ~= "hexen" then if want_len >= 4 and Q.ob_size < 25 then - want_len = int(want_len * 0.85 - gui.random()) + want_len = math.round(want_len * 0.85 - gui.random()) elseif Q.ob_size > 50 then - want_len = int(want_len * 1.35 + gui.random()) + want_len = math.round(want_len * 1.35 + gui.random()) end end @@ -2041,7 +2041,7 @@ gui.debugf("qlist now:\n%s\n\n", table.tostr(qlist,2)) --T2 = GAME.FACTORY.themes["CAVE"] -- choose change-over point - local mid_q = int(#PLAN.quests / 2 + gui.random()) + local mid_q = math.round(#PLAN.quests / 2 + gui.random()) if #PLAN.quests >= 4 then mid_q = mid_q + (rand.index_by_probs { 1,3,1 }) - 2 diff --git a/scripts/094/writer.lua b/scripts/094/writer.lua index f4f8b11919..af81ceab1c 100644 --- a/scripts/094/writer.lua +++ b/scripts/094/writer.lua @@ -408,7 +408,7 @@ function write_level(lev_name) local function line_length(L) local dx = L.ex - L.sx local dy = L.ey - L.sy - return int(math.sqrt(dx*dx + dy*dy) + 0.5) + return math.round(math.sqrt(dx*dx + dy*dy) + 0.5) end local function frag_pair(f,b,norm, x,y,dx,dy) @@ -940,11 +940,11 @@ function write_wolf_level() if kind.dirs and th.angle then if kind.dirs == "player" then - local offset = int((360 - th.angle + 135) / 90) % 4 + local offset = math.round((360 - th.angle + 135) / 90) % 4 assert(0 <= offset and offset <= 3) obj = obj + offset else - local offset = int((th.angle + 45) / 90) % 4 + local offset = math.round((th.angle + 45) / 90) % 4 assert(0 <= offset and offset <= 3) obj = obj + offset end diff --git a/scripts/area.lua b/scripts/area.lua index 76e641e947..0e0d2ce5fc 100644 --- a/scripts/area.lua +++ b/scripts/area.lua @@ -1674,7 +1674,7 @@ function Area_locate_chunks(LEVEL, SEEDS) local function find_sized_chunks(A, seed_list, pass, LEVEL) - local dx = int(pass / 10) - 1 + local dx = math.round(pass / 10) - 1 local dy = (pass % 10) - 1 local use_prob = USE_PROBS[pass] or 99 @@ -2908,7 +2908,7 @@ function Area_create_rooms(LEVEL, SEEDS) if SHAPE_GRAMMAR.force_level_size then LEVEL.map_W = SHAPE_GRAMMAR.force_level_size - LEVEL.map_H = 1 + int(LEVEL.map_W * 0.8) + LEVEL.map_H = 1 + math.round(LEVEL.map_W * 0.8) SEEDS = Seed_init(LEVEL) end diff --git a/scripts/brush.lua b/scripts/brush.lua index 6a2924b34c..682cbe0ab8 100644 --- a/scripts/brush.lua +++ b/scripts/brush.lua @@ -1100,7 +1100,7 @@ function brushlib.reverse(brush) -- second, actually reverse the coord tables - for i = 1, int(#xy_coords / 2) do + for i = 1, math.round(#xy_coords / 2) do local k = #xy_coords + 1 - i local C1 = brush[xy_coords[i].idx] diff --git a/scripts/cave.lua b/scripts/cave.lua index 5757f5c27c..a307b7ffdb 100644 --- a/scripts/cave.lua +++ b/scripts/cave.lua @@ -371,8 +371,8 @@ end function Cave_cell_touches_map_edge(LEVEL, area, cx, cy) - local sx = area.base_sx + int((cx - 1) / 2) - local sy = area.base_sy + int((cy - 1) / 2) + local sx = area.base_sx + math.round((cx - 1) / 2) + local sy = area.base_sy + math.round((cy - 1) / 2) if (cx % 2) == 0 then if sx >= LEVEL.absolute_x2 then return true end @@ -398,8 +398,8 @@ function Cave_cell_touches_room(area, cx, cy, R, SEEDS) local nx, ny = geom.nudge(cx, cy, dir) -- get seed coordinate of neighbor cell - local sx = area.base_sx + int((nx - 1) / 2) - local sy = area.base_sy + int((ny - 1) / 2) + local sx = area.base_sx + math.round((nx - 1) / 2) + local sy = area.base_sy + math.round((ny - 1) / 2) if not Seed_valid(sx, sy) then goto continue end @@ -1483,7 +1483,7 @@ function Cave_bunch_areas(R, mode, LEVEL) setup() - local try_count = int(#area.walk_floors / rand.sel(50, 8, 14)) + local try_count = math.round(#area.walk_floors / rand.sel(50, 8, 14)) for i = 1, try_count do local B1 = pick_start_area() @@ -2625,7 +2625,7 @@ function Cave_decorations(R) local quota = #locs * perc / 100 quota = quota * rand.range(0.8, 1.2) - quota = int(quota + gui.random()) + quota = math.round(quota + gui.random()) -- very rarely add lots of torches if area.torch_mode ~= "few" and rand.odds(1) then @@ -3995,7 +3995,7 @@ function Cave_build_a_park(LEVEL, R, entry_h, SEEDS) -- extra health for damaging liquid if LEVEL.liquid.damage then - R.hazard_health = R.hazard_health + int(B.size / 4) + R.hazard_health = R.hazard_health + math.round(B.size / 4) end end diff --git a/scripts/grower.lua b/scripts/grower.lua index 35b2024103..43242a5977 100644 --- a/scripts/grower.lua +++ b/scripts/grower.lua @@ -1083,11 +1083,11 @@ function Grower_decide_extents(LEVEL) end end - assert(int(LEVEL.map_W) < SEED_W) - assert(int(LEVEL.map_H) < SEED_H) + assert(math.round(LEVEL.map_W) < SEED_W) + assert(math.round(LEVEL.map_H) < SEED_H) - local map_x1 = 1 + int((SEED_W - LEVEL.map_W) / 2) - local map_y1 = 1 + int((SEED_H - LEVEL.map_H) / 2) + local map_x1 = 1 + math.round((SEED_W - LEVEL.map_W) / 2) + local map_y1 = 1 + math.round((SEED_H - LEVEL.map_H) / 2) local map_x2 = map_x1 + LEVEL.map_W - 1 local map_y2 = map_y1 + LEVEL.map_H - 1 @@ -1142,17 +1142,17 @@ function Grower_decide_extents(LEVEL) local base = (LEVEL.map_W - 12) * 0.72 - LEVEL.min_rooms = math.max(3, int(base / 3)) - LEVEL.max_rooms = math.max(6, int(base)) + LEVEL.min_rooms = math.max(3, math.round(base / 3)) + LEVEL.max_rooms = math.max(6, math.round(base)) -- add extra rooms based on extra size and area multiplier if LEVEL.size_multiplier then if LEVEL.size_multiplier < 1 then - LEVEL.max_rooms = int(LEVEL.max_rooms * ((1 - LEVEL.size_multiplier)+1) * 2/3) + LEVEL.max_rooms = math.round(LEVEL.max_rooms * ((1 - LEVEL.size_multiplier)+1) * 2/3) end if LEVEL.area_multiplier < 1 then - LEVEL.max_rooms = int(LEVEL.max_rooms * ((1 - LEVEL.area_multiplier)+1) * 2/3) + LEVEL.max_rooms = math.round(LEVEL.max_rooms * ((1 - LEVEL.area_multiplier)+1) * 2/3) end end @@ -1173,16 +1173,12 @@ function Grower_decide_extents(LEVEL) -- calculate the coverage target - LEVEL.min_coverage = int(LEVEL.map_W * LEVEL.map_H * 0.65) + LEVEL.min_coverage = math.round(LEVEL.map_W * LEVEL.map_H * 0.65) if LEVEL.has_streets then gui.printf("--==| Streets Mode activated! |==--\n\n") end - if LEVEL.is_linear then - gui.printf("--==| Linear mode activated! |==--\n\n") - end - if LEVEL.is_nature then gui.printf("--==| Nature mode activated! Take a walk! |==--\n\n") end @@ -1192,7 +1188,7 @@ function Grower_decide_extents(LEVEL) if PARAM.linear_start ~= "default" then if PARAM.linear_start == "all" then LEVEL.has_linear_start = true - elseif rand.odds(int(PARAM.linear_start)) then + elseif rand.odds(math.round(PARAM.linear_start)) then LEVEL.has_linear_start = true end end @@ -1770,11 +1766,6 @@ function Grower_grammatical_pass(SEEDS, LEVEL, R, pass, apply_num, stop_prob, if not is_emergency then return 0 end end - -- hallways cannot be used for teleporter breaks in Linear Mode - if LEVEL.is_linear and is_emergency then - if string.match(rule.name, "hallway") then return 0 end - end - if not ob_match_level_theme(LEVEL, rule) then return 0 end if not ob_match_feature(rule) then return 0 end @@ -1848,7 +1839,7 @@ function Grower_grammatical_pass(SEEDS, LEVEL, R, pass, apply_num, stop_prob, if R.is_street then return 0 end - if (LEVEL.has_linear_start or LEVEL.is_linear) then + if LEVEL.has_linear_start then if R.is_start then return 0 end if not R.grow_parent and not R.is_start then return 0 @@ -2088,11 +2079,11 @@ stderrf("prelim_conn %s --> %s : S=%s dir=%d\n", c_out.R1.name, c_out.R2.name, S local function get_iteration_range(T) if is_create then - local dx = math.min(10, int(SEED_W / 4)) - local dy = math.min(10, int(SEED_H / 4)) + local dx = math.min(10, math.round(SEED_W / 4)) + local dy = math.min(10, math.round(SEED_H / 4)) - local mx = int(SEED_W / 2) - local my = int(SEED_H / 2) + local mx = math.round(SEED_W / 2) + local my = math.round(SEED_H / 2) -- the exit room is alway placed near top of map if cur_rule.absolute_pos == "top" or cur_rule.absolute_pos == "corner" then @@ -3170,9 +3161,9 @@ end -- check that it straddles at right spot if T.transpose then - if by1 ~= R.symmetry.y - int((W-1) / 2) then return false end + if by1 ~= R.symmetry.y - math.round((W-1) / 2) then return false end else - if bx1 ~= R.symmetry.x - int((W-1) / 2) then return false end + if bx1 ~= R.symmetry.x - math.round((W-1) / 2) then return false end end if match_or_install_pat_raw(what, T) then @@ -3729,22 +3720,6 @@ end break; end - -- Linear Mode - if LEVEL.is_linear then - - if pass == "sprout" then - - if R:prelim_conn_num(LEVEL) >= 2 then - break; - end - - if R.is_start and R:prelim_conn_num(LEVEL) >= 1 then - break; - end - - end - end - if LEVEL.has_linear_start then if pass == "sprout" then if not R.is_street and R:prelim_conn_num(LEVEL) >= 1 and R.is_start then @@ -3795,10 +3770,6 @@ function Grower_grammatical_room(SEEDS, LEVEL, R, pass, is_emergency) apply_num = rand.irange(6,20) end - if LEVEL.is_linear then - apply_num = 1 - end - elseif pass == "decorate" then -- TODO: review this (and stop_prob), see what works best local tmp_num = sel(R.is_big, 10, 6) @@ -4000,16 +3971,9 @@ function Grower_grow_room(SEEDS, LEVEL, R) if R.is_root then return false end - -- MSSP: Unless we're in linear mode, where - -- the map must continue growing elsewhere - -- or in Procedural Gotchas where the arena - -- is much too small. if LEVEL.is_procedural_gotcha then return R:calc_walk_vol() < 128 end - if LEVEL.is_linear then - return false - end return R:calc_walk_vol() < 8 end @@ -4024,7 +3988,7 @@ function Grower_grow_room(SEEDS, LEVEL, R) if not R.is_hallway and is_too_small(R) then Grower_grammatical_room(SEEDS, LEVEL, R, "grow") - if is_too_small(R) and not LEVEL.is_linear then + if is_too_small(R) then if R.grow_parent and R.grow_parent.is_start and R.small_room then return @@ -4036,24 +4000,11 @@ function Grower_grow_room(SEEDS, LEVEL, R) end end - -- Linear Mode, kill mirrored sprouts of symmetric rooms - if LEVEL.is_linear then - if R.grow_parent then - if R.grow_parent:prelim_conn_num(LEVEL) > 2 then - if R.prelim_conn_num == 1 then - gui.debugf("Linear mode: ROOM_" .. R.id .. " culled.\n") - Grower_kill_room(SEEDS, LEVEL, R) - return - end - end - end - end - - if LEVEL.is_linear or LEVEL.is_procedural_gotcha then + if LEVEL.is_procedural_gotcha then if R.grow_parent and R.grow_parent.is_start then if R.grow_parent:prelim_conn_num(LEVEL) > 1 then if R.prelim_conn_num == 1 then - gui.debugf("Linear mode: ROOM " .. R.id .. " culled.\n") + gui.debugf("Procedural Gotcha: ROOM " .. R.id .. " culled.\n") Grower_kill_room(SEEDS, LEVEL, R) end end @@ -4100,7 +4051,7 @@ function Grower_sprout_room(SEEDS, LEVEL, R) Grower_grammatical_room(SEEDS, LEVEL, R, "sprout") end - if R.is_street and R:prelim_conn_num(LEVEL) < math.clamp(1, int(R.svolume/64), 10) then + if R.is_street and R:prelim_conn_num(LEVEL) < math.clamp(1, math.round(R.svolume/64), 10) then Grower_grammatical_room(SEEDS, LEVEL, R, "sprout") end @@ -4274,12 +4225,6 @@ function Grower_begin_trunks(LEVEL, SEEDS) end end - -- ignore teleporter style setting for linear mode - -- don't you get enough teleporters already anyway?! - if LEVEL.is_linear then - max_trunks = 1 - end - LEVEL.trunks = {} LEVEL.max_trunks = max_trunks @@ -4607,7 +4552,7 @@ gui.debugf("=== Coverage seeds: %d/%d rooms: %d/%d\n", expand_limits() emergency_sprouts() - if LEVEL.is_linear and not LEVEL.is_procedural_gotcha + if not LEVEL.is_procedural_gotcha and (#LEVEL.rooms < ((LEVEL.min_rooms + LEVEL.max_rooms) / 2)) then if emergency_linear_sprouts() == "oof" then emergency_teleport_break(LEVEL) diff --git a/scripts/item.lua b/scripts/item.lua index 89f7158953..e2aefdc5d4 100644 --- a/scripts/item.lua +++ b/scripts/item.lua @@ -141,7 +141,7 @@ function Player_give_stuff(hmodel, give_list) elseif give.ammo then gui.debugf("Giving [%s] ammo: %dx %s\n", - hmodel.class, int(give.count), give.ammo) + hmodel.class, math.round(give.count), give.ammo) hmodel.stats[give.ammo] = (hmodel.stats[give.ammo] or 0) + give.count @@ -301,14 +301,14 @@ function Player_weapon_palettes(LEVEL) -- Note: result is often longer than strictly required - local num_low = int(total / 2 + gui.random()) + local num_low = math.round(total / 2 + gui.random()) local num_high = total - num_low insert_multiple(list, num_low, Low) insert_multiple(list, num_high, High) if total >= 2 then - local num_very = int(total / 6 + gui.random()) + local num_very = math.round(total / 6 + gui.random()) insert_multiple(list, num_very, Lowest) insert_multiple(list, num_very, Highest) @@ -341,7 +341,7 @@ function Player_weapon_palettes(LEVEL) local pal = {} -- decide number of "normal" weapons : at least one! - local normal_num = int(total / 3 + gui.random()) + local normal_num = math.round(total / 3 + gui.random()) if normal_num < 1 then normal_num = 1 end got_weaps = table.copy(got_weaps) @@ -872,7 +872,7 @@ function Item_pickups_for_class(LEVEL, CL) elseif max_num * each_qty <= qty then count = max_num - rand.sel(20,1,0) else - count = 1 + int(qty / each_qty) + count = 1 + math.round(qty / each_qty) end end diff --git a/scripts/layout.lua b/scripts/layout.lua index 59b66a5c75..3e86b777e6 100644 --- a/scripts/layout.lua +++ b/scripts/layout.lua @@ -1054,7 +1054,7 @@ gui.debugf("MonRelease in %s : kind --> %s\n", local qty = rand.index_by_probs({ 40,40,20,5 }) - if STYLE.traps == "few" then int((qty + 1) / 2) end + if STYLE.traps == "few" then math.round((qty + 1) / 2) end if STYLE.traps == "more" then qty = qty + 1 end if STYLE.traps == "heaps" then qty = qty + 2 end @@ -2802,18 +2802,18 @@ function Layout_indoor_lighting(LEVEL) local LIGHT_LEVELS = { - bright = (int)(224 * PARAM.float_overall_lighting_mult), - normal = (int)(192 * PARAM.float_overall_lighting_mult), - dark = (int)(160 * PARAM.float_overall_lighting_mult), - verydark = (int)(128 * PARAM.float_overall_lighting_mult), + bright = math.round(224 * PARAM.float_overall_lighting_mult), + normal = math.round(192 * PARAM.float_overall_lighting_mult), + dark = math.round(160 * PARAM.float_overall_lighting_mult), + verydark = math.round(128 * PARAM.float_overall_lighting_mult), } local CAVE_LEVELS = { - bright = (int)(192 * PARAM.float_overall_lighting_mult), - normal = (int)(160 * PARAM.float_overall_lighting_mult), - dark = (int)(128 * PARAM.float_overall_lighting_mult), - verydark = (int)(96 * PARAM.float_overall_lighting_mult), + bright = math.round(192 * PARAM.float_overall_lighting_mult), + normal = math.round(160 * PARAM.float_overall_lighting_mult), + dark = math.round(128 * PARAM.float_overall_lighting_mult), + verydark = math.round(96 * PARAM.float_overall_lighting_mult), } local function sky_light_to_keyword() @@ -2848,7 +2848,7 @@ function Layout_indoor_lighting(LEVEL) local JITTER = {0, 0, 0, -16, 16} base_light = base_light + rand.pick(JITTER) else - local JITTER = {0, 0, 0, -(int)(base_light * 0.1), (int)(base_light * 0.1)} + local JITTER = {0, 0, 0, -math.round(base_light * 0.1), math.round(base_light * 0.1)} base_light = base_light + rand.pick(JITTER) end diff --git a/scripts/level.lua b/scripts/level.lua index 79ab21e6e8..a05b439832 100644 --- a/scripts/level.lua +++ b/scripts/level.lua @@ -54,7 +54,6 @@ prebuilt -- true if level will is prebuilt (not generated) is_procedural_gotcha -- true if this level is a special Procedural Gotcha arena - is_linear -- true if this level is linear, as in no branching rooms is_nature -- true if this level is entirely parks and caves has_streets -- true if this level contains Street Mode streets @@ -197,7 +196,7 @@ function Level_determine_map_size(LEV) end end - ob_size = math.clamp(low, int(rand.irange(low, high) * result_skew), high) + ob_size = math.clamp(low, math.round(rand.irange(low, high) * result_skew), high) end if ob_size == gui.gettext("Episodic") or @@ -224,7 +223,7 @@ function Level_determine_map_size(LEV) local def_large = PARAM.float_level_upper_bound - def_small or 42 -- this basically ramps up - W = int(def_small + along * def_large) + W = math.round(def_small + along * def_large) else -- Single Size -- @@ -245,7 +244,7 @@ function Level_determine_map_size(LEV) gui.printf("Initial size for " .. LEV.name .. ": " .. W .. "\n") - local H = 1 + int(W * 0.8) + local H = 1 + math.round(W * 0.8) return W, H end @@ -1201,7 +1200,7 @@ function Episode_plan_weapons() end quota = quota * (PARAM.weapon_factor or 1) - quota = int(quota) + quota = math.round(quota) if quota < 1 then quota = 1 end @@ -1353,7 +1352,7 @@ function Episode_plan_weapons() if rand.odds(30) then lev_idx = lev_idx + 1 end - lev_idx = int(lev_idx * rand.pick({ 1.0, 1.3, 1.6 })) + lev_idx = math.round(lev_idx * rand.pick({ 1.0, 1.3, 1.6 })) end -- ensure it is valid @@ -1516,7 +1515,7 @@ function Episode_plan_weapons() local function reduce_weapon_gaps(level_list) local max_gap = 2 - max_gap = max_gap + int(#level_list / 20) + max_gap = max_gap + math.round(#level_list / 20) if OB_CONFIG.weapons == "very_late" then max_gap = max_gap + 2 end if OB_CONFIG.weapons == "later" then max_gap = max_gap + 1 end @@ -2329,14 +2328,14 @@ function Level_choose_darkness(LEVEL) --prob = style_sel("darkness", 0, 10, 30, 90) --Original end - LEVEL.sky_light = (int)(rand.pick(SKY_LIGHT_NORMAL) * PARAM.float_overall_lighting_mult) + LEVEL.sky_light = math.round(rand.pick(SKY_LIGHT_NORMAL) * PARAM.float_overall_lighting_mult) LEVEL.sky_shadow = 32 if rand.odds(prob) then gui.printf("Level is dark.\n") LEVEL.is_dark = true - LEVEL.sky_light = (int)(rand.pick(SKY_LIGHT_DARK) * PARAM.float_overall_lighting_mult) + LEVEL.sky_light = math.round(rand.pick(SKY_LIGHT_DARK) * PARAM.float_overall_lighting_mult) LEVEL.sky_shadow = 32 end @@ -2702,7 +2701,7 @@ function Level_make_level(LEV) if coverage_target == 0 then coverage_target = LEVEL.min_coverage end - if not LEVEL.is_linear and not SHAPE_GRAMMAR.ignore_coverage then + if not SHAPE_GRAMMAR.ignore_coverage then if LEVEL.cur_coverage < coverage_target then res = "runt" end diff --git a/scripts/monster.lua b/scripts/monster.lua index 8d60137480..6abcead863 100644 --- a/scripts/monster.lua +++ b/scripts/monster.lua @@ -450,17 +450,18 @@ function Monster_zone_palettes(LEVEL) skip_perc = skip_perc / 2 end - quants[0] = int(total * skip_perc / 100 + gui.random() * 0.7) + quants[0] = math.round(total * skip_perc / 100 + gui.random() * 0.7) total = total - quants[0] - quants[2] = int(total * rand.range(0.3, 0.7) + gui.random()) + quants[2] = math.round(total * rand.range(0.3, 0.7) + gui.random()) total = total - quants[2] - quants[1] = int(total * rand.range(0.3, 0.7) + gui.random()) + quants[1] = math.round(total * rand.range(0.3, 0.7) + gui.random()) total = total - quants[1] quants[3] = total - assert(total >= 0) + + if total < 0 then total = 0 end return quants end @@ -522,7 +523,7 @@ function Monster_zone_palettes(LEVEL) gui.debugf(" %-12s* %1.2f\n", mon, qty) end - gui.debugf(" TOUGHNESS: %d\n", int(palette_toughness(pal))) + gui.debugf(" TOUGHNESS: %d\n", math.round(palette_toughness(pal))) end @@ -584,8 +585,8 @@ function Monster_split_spots(list, max_size) for _,spot in pairs(list) do local w, h = geom.box_size(spot.x1, spot.y1, spot.x2, spot.y2) - local XN = int(w / max_size) - local YN = int(h / max_size) + local XN = math.round(w / max_size) + local YN = math.round(h / max_size) if XN < 2 and YN < 2 then table.insert(new_list, spot) @@ -602,8 +603,8 @@ function Monster_split_spots(list, max_size) local new_spot = table.copy(spot) - new_spot.x1 = int(x1) ; new_spot.y1 = int(y1) - new_spot.x2 = int(x2) ; new_spot.y2 = int(y2) + new_spot.x1 = math.round(x1) ; new_spot.y1 = math.round(y1) + new_spot.x2 = math.round(x2) ; new_spot.y2 = math.round(y2) new_spot.marked = nil table.insert(new_list, new_spot) @@ -873,11 +874,11 @@ function Monster_fill_room(LEVEL, R, SEEDS) gui.debugf("raw number_of_kinds in %s : tally:%d / %d seeds | base:%1.2f factor:%1.2f ---> %1.2f\n", R.name, fodder_tally, R.svolume, base_num, factor, num) --]] - num = int(base_num) + num = math.round(base_num) num = math.clamp(1, num, 5) - gui.debugf("number_of_kinds: %d (base: %d)\n", num, int(base_num)) + gui.debugf("number_of_kinds: %d (base: %d)\n", num, math.round(base_num)) return num end @@ -1126,8 +1127,8 @@ function Monster_fill_room(LEVEL, R, SEEDS) for _,spot in pairs(spot_list) do local w, h = geom.box_size(spot.x1, spot.y1, spot.x2, spot.y2) - w = int(w / 64) ; if w < 1 then w = 1 end - h = int(h / 64) ; if h < 1 then h = 1 end + w = math.round(w / 64) ; if w < 1 then w = 1 end + h = math.round(h / 64) ; if h < 1 then h = 1 end count = count + w * h end @@ -1366,7 +1367,7 @@ function Monster_fill_room(LEVEL, R, SEEDS) num_kinds = rand.index_by_probs({ 20, 40, 60 }) else local size = math.sqrt(R.svolume) - num_kinds = int(size / 1.2) + num_kinds = math.round(size / 1.2) end local list = {} @@ -1707,8 +1708,8 @@ function Monster_fill_room(LEVEL, R, SEEDS) local w, h = geom.box_size(spot.x1, spot.y1, spot.x2, spot.y2) - w = int(w / rr / 2) - h = int(h / rr / 2) + w = math.round(w / rr / 2) + h = math.round(h / rr / 2) return w * h end @@ -2077,7 +2078,7 @@ gui.debugf("wants =\n%s\n\n", table.tostr(wants)) local tally = fodder_tally tally = 3 * (1 + tally ^ 0.7) - want_total = int(tally * qty / 100 + gui.random()) + want_total = math.round(tally * qty / 100 + gui.random()) -- determine how many of each kind of monster we want @@ -2207,7 +2208,7 @@ gui.debugf("wants =\n%s\n\n", table.tostr(wants)) elseif choice == "crazy" then min_val = spot_total else - min_val = int(min_val + (spot_total * tab[choice])) + min_val = math.round(min_val + (spot_total * tab[choice])) end return min_val @@ -2218,8 +2219,8 @@ gui.debugf("wants =\n%s\n\n", table.tostr(wants)) -- determine maximum number that will fit local w, h = geom.box_size(spot.x1,spot.y1, spot.x2,spot.y2) - w = int(w / info.r / 2) - h = int(h / info.r / 2) + w = math.round(w / info.r / 2) + h = math.round(h / info.r / 2) assert(w >= 1 and h >= 1) @@ -2246,7 +2247,7 @@ gui.debugf("wants =\n%s\n\n", table.tostr(wants)) local qty = calc_quantity() + 30 local f = gui.random() - local want = total * qty / 250 + f * f * 0 + local want = total * qty / 250 + f * f if spot.use_factor then want = want * spot.use_factor @@ -2263,7 +2264,9 @@ gui.debugf("wants =\n%s\n\n", table.tostr(wants)) local all_skills = (i == 1) local loc = list[i] - place_monster(mon, spot, loc.x, loc.y, loc.z, all_skills, what) + if loc ~= nil then + place_monster(mon, spot, loc.x, loc.y, loc.z, all_skills, what) + end end end @@ -2563,7 +2566,7 @@ function Monster_show_stats(LEVEL) local function get_stat(mon) local num = LEVEL.mon_stats[mon] or 0 - local div = int(num * 99.8 / total) + local div = math.round(num * 99.8 / total) if div == 0 and num > 0 then div = 1 end return string.format("%02d", div) end diff --git a/scripts/obsidian.lua b/scripts/obsidian.lua index 10de609f32..29aa100b73 100644 --- a/scripts/obsidian.lua +++ b/scripts/obsidian.lua @@ -910,6 +910,7 @@ function ob_read_all_config(need_full, log_only) do_line("-- Arcterezion\n") do_line("-- Xenamta\n") do_line("-- KadKad1\n") + do_line("-- DaveFriedLiver\n") do_line("-- https://github.com/obsidian-level-maker/Obsidian/\n") if OB_CONFIG.seed and OB_CONFIG.seed ~= 0 then @@ -1482,6 +1483,7 @@ function ob_init() gui.printf(" Arcterezion\n") gui.printf(" Xenamta\n") gui.printf(" KadKad1\n") + gui.printf(" DaveFriedLiver\n") gui.printf(" And All of Our Fans!\n\n") gui.printf("--------------------------------------------\n") gui.printf("-- https://github.com/obsidian-level-maker/Obsidian/ --\n") diff --git a/scripts/prefab.lua b/scripts/prefab.lua index 0e4bfac7e0..d6352b21b5 100644 --- a/scripts/prefab.lua +++ b/scripts/prefab.lua @@ -1611,7 +1611,7 @@ function Fab_load_wad(def) angle = math.clamp(0, angle, 300) - return 112 + int(angle * 16 / 45) + return 112 + math.round(angle * 16 / 45) end @@ -2249,7 +2249,7 @@ function Fab_replacements(LEVEL, fab) -- adjust X offset for split edges if C.u1 and C.u1 ~= "" and C.u1_along then - C.u1 = C.u1 + int(C.u1_along) + C.u1 = C.u1 + math.round(C.u1_along) C.u1_along = nil end end @@ -2637,11 +2637,11 @@ function Fab_find_matches(LEVEL, reqs, match_state) end -- prefab definition defaults to 1 - local sw = int(def.seed_w or 1) - local sh = int(def.seed_h or 1) + local sw = math.round(def.seed_w or 1) + local sh = math.round(def.seed_h or 1) - local req_w = int(reqs.seed_w or 1) - local req_h = int(reqs.seed_h or 1) + local req_w = math.round(reqs.seed_w or 1) + local req_h = math.round(reqs.seed_h or 1) -- "diagonal" prefabs need an exact same square if def.where == "diagonal" then diff --git a/scripts/quest.lua b/scripts/quest.lua index c908fcb4ff..5cebe36805 100644 --- a/scripts/quest.lua +++ b/scripts/quest.lua @@ -912,7 +912,7 @@ function Quest_add_major_quests(LEVEL) local each_prob = style_sel("keys", 0, 40, 80, 100) -- decide maximum number - local max_num = 1 + int(#LEVEL.rooms / 5) + local max_num = 1 + math.round(#LEVEL.rooms / 5) for name,_ in pairs(key_tab) do if rand.odds(each_prob) then @@ -938,7 +938,7 @@ function Quest_add_major_quests(LEVEL) if not rand.odds(any_prob) then return {} end -- decide maximum number - local max_num = 1 + int(#LEVEL.rooms / 5) + local max_num = 1 + math.round(#LEVEL.rooms / 5) for i = 1, max_num do if rand.odds(each_prob) then @@ -1508,7 +1508,7 @@ function Quest_start_room(LEVEL) -- prefer no teleporter if not R:has_teleporter() then score = score + 1 end - gui.debugf("eval_start_room in %s --> space:%d dist:%d %1.2f\n", R.name, space, int(R.dist_to_exit or -1), score) + gui.debugf("eval_start_room in %s --> space:%d dist:%d %1.2f\n", R.name, space, math.round(R.dist_to_exit or -1), score) -- tie breaker return score + gui.random() * 2 @@ -1703,7 +1703,7 @@ function Quest_order_by_visit(LEVEL) gui.printf("Quest list:\n") for _,Q in pairs(LEVEL.quests) do - gui.printf(" %s : svolume:%d\n", Q.name, int(Q.svolume)) + gui.printf(" %s : svolume:%d\n", Q.name, math.round(Q.svolume)) end end @@ -3028,7 +3028,7 @@ function Quest_room_themes(LEVEL) local building_tab = collect_usable_themes("building") - local max_room_theme = int(PARAM.float_max_room_themes or 1) + local max_room_theme = math.round(PARAM.float_max_room_themes or 1) if not PARAM.bool_avoid_room_theme_reuse or (PARAM.bool_avoid_room_theme_reuse and PARAM.bool_avoid_room_theme_reuse == 1) then for theme,odds in pairs(building_tab) do @@ -3054,7 +3054,7 @@ function Quest_room_themes(LEVEL) visit_room(LEVEL.start_room, nil, nil, building_tab) - local max_wall_groups = int(PARAM.float_max_indoor_wall_groups or 2) + local max_wall_groups = math.round(PARAM.float_max_indoor_wall_groups or 2) local the_wall_group_tab = table.copy(LEVEL.theme.wall_groups) diff --git a/scripts/render.lua b/scripts/render.lua index 29be37eeac..19fed8d859 100644 --- a/scripts/render.lua +++ b/scripts/render.lua @@ -26,10 +26,7 @@ function Render_add_exit_sign(E, z, SEEDS, LEVEL) if PARAM.bool_exit_signs ~= 1 then return end - -- These games need an engine that supports TX_START/TX_END merging - if ob_match_game({ game = { heretic=1} }) then - if not ob_match_port({ port = { edge=1, zdoom=1 } }) then return end - end + if ob_match_game({ game = "doomish" }) then return end local def @@ -43,9 +40,9 @@ function Render_add_exit_sign(E, z, SEEDS, LEVEL) local len = geom.dist(x1,y1, x2,y2) - local ofs = int(len / 6) + local ofs = math.round(len / 6) if len > 340 then - ofs = int(len / 4) + ofs = math.round(len / 4) end local ax = x1 + ofs * (x2 - x1) / len @@ -3193,8 +3190,8 @@ function Render_all_street_traffic(LEVEL, SEEDS) for _,SPOT in pairs(LEVEL.road_street_traffic_spots) do -- stagger positions a bit - SPOT.x = SPOT.x + int(rand.range(-32,32)) - SPOT.y = SPOT.y + int(rand.range(-32,32)) + SPOT.x = SPOT.x + math.round(rand.range(-32,32)) + SPOT.y = SPOT.y + math.round(rand.range(-32,32)) local T = Trans.spot_transform(SPOT.x, SPOT.y, SPOT.z, SPOT.dir) local reqs = {} @@ -3679,7 +3676,7 @@ function Render_scenic_fabs(LEVEL, SEEDS) end end - for i = 1, int(area.svolume/32) do + for i = 1, math.round(area.svolume/32) do try_decor_here(area) end end @@ -4331,7 +4328,7 @@ function Render_cells(LEVEL, area) assert(B) assert(B.floor_h) - return string.format("1-%5d-%5d", int(B.floor_h + 50000), int(50000 - (B.ceil_h or 0))) + return string.format("1-%5d-%5d", math.round(B.floor_h + 50000), math.round(50000 - (B.ceil_h or 0))) end diff --git a/scripts/room.lua b/scripts/room.lua index d3e59c2d37..cf3359d3bb 100644 --- a/scripts/room.lua +++ b/scripts/room.lua @@ -2285,7 +2285,7 @@ function Room_choose_size(LEVEL, R, not_big) if not R.is_start or not R.is_secret then if LEVEL.area_multiplier then - R.floor_limit = int(R.floor_limit * LEVEL.area_multiplier) + R.floor_limit = math.round(R.floor_limit * LEVEL.area_multiplier) end if LEVEL.has_absurd_new_area_rules then R.floor_limit = R.floor_limit * 4 @@ -2316,8 +2316,8 @@ function Room_choose_size(LEVEL, R, not_big) elseif not LEVEL.is_procedural_gotcha then if R.is_start then - R.size_limit = int(R.size_limit / 2) - R.floor_limit = int(R.floor_limit / 2) + R.size_limit = math.round(R.size_limit / 2) + R.floor_limit = math.round(R.floor_limit / 2) R.size_limit = math.clamp(rand.pick({4,8,12,16}),R.size_limit,EXTREME_H) end @@ -2333,8 +2333,8 @@ function Room_choose_size(LEVEL, R, not_big) -- tame teleporter trunks and hallway exits if (not R.grow_parent and not R.is_start) or (R.grow_parent and R.grow_parent.is_hallway) then - R.size_limit = int(R.size_limit / 5) - R.floor_limit = int(R.floor_limit / 2) + R.size_limit = math.round(R.size_limit / 5) + R.floor_limit = math.round(R.floor_limit / 2) R.is_big = false end end diff --git a/scripts/seed.lua b/scripts/seed.lua index 9349a12bcd..07f1d6e8a0 100644 --- a/scripts/seed.lua +++ b/scripts/seed.lua @@ -364,8 +364,8 @@ function SEED_CLASS.calc_mid_point(S) my = (S.y2 + my) / 2 end - S.mid_x = int(mx) - S.mid_y = int(my) + S.mid_x = math.round(mx) + S.mid_y = math.round(my) end @@ -561,8 +561,8 @@ function Seed_init(LEVEL) BASE_X = 32 BASE_Y = 32 - BASE_X = 32 - int(SEED_W / 2) * SEED_SIZE - BASE_Y = 32 - int(SEED_H / 2) * SEED_SIZE + BASE_X = 32 - math.round(SEED_W / 2) * SEED_SIZE + BASE_Y = 32 - math.round(SEED_H / 2) * SEED_SIZE for sx = 1, SEED_W do for sy = 1, SEED_H do @@ -581,7 +581,7 @@ function Seed_init(LEVEL) local depot_y = BASE_Y + SEED_H * SEED_SIZE for row = 0, 2 do - for col = 0, int(SEED_W / 3) - 1 do + for col = 0, math.round(SEED_W / 3) - 1 do local x = depot_x + col * 3 * SEED_SIZE local y = depot_y + row * 6 * SEED_SIZE + 64 @@ -985,7 +985,7 @@ function Seed_draw_minimap(SEEDS, LEVEL) y1 = (y1 - min_y + ofs_y) * map_H / size y2 = (y2 - min_y + ofs_y) * map_H / size - gui.minimap_draw_line(int(x1),int(y1), int(x2),int(y2), color) + gui.minimap_draw_line(math.round(x1),math.round(y1), math.round(x2),math.round(y2), color) end diff --git a/scripts/title_gen.lua b/scripts/title_gen.lua index 27e5827439..ab8e2149c8 100644 --- a/scripts/title_gen.lua +++ b/scripts/title_gen.lua @@ -870,7 +870,7 @@ function Title_make_stroke(T, x1,y1, x2,y2) x1, y1 = T.func(T, x1, y1) x2, y2 = T.func(T, x2, y2) - gui.title_draw_line(int(x1 + T.ofs_x), int(y1 + T.ofs_y), int(x2 + T.ofs_x), int(y2 + T.ofs_y)) + gui.title_draw_line(math.round(x1 + T.ofs_x), math.round(y1 + T.ofs_y), math.round(x2 + T.ofs_x), math.round(y2 + T.ofs_y)) end @@ -965,7 +965,7 @@ end function Title_centered_string(T, mx, my, text, style) - assert(style.mode) + assert(style.font_mode) -- do not create really tall letters if T.fh / T.fw > 2.5 then @@ -999,27 +999,27 @@ function Title_centered_string(T, mx, my, text, style) -- do the outlines -- - if style.outlines then + if style.font_outlines then gui.title_prop("render_mode", "solid") - for i = #style.outlines, 1, -1 do - local outline = style.outlines[i] + for i = #style.font_outlines, 1, -1 do + local outline = style.font_outlines[i] gui.title_prop("color", outline) - if style.outline_mode == "shadow" then + if style.font_outline_mode == "shadow" then thick = T.thick + i T.ofs_x = base_ofs T.ofs_y = base_ofs - elseif style.outline_mode == "shadow2" then + elseif style.font_outline_mode == "shadow2" then thick = T.thick + i T.ofs_x = base_ofs - i T.ofs_y = base_ofs - elseif style.outline_mode == "zoom" then + elseif style.font_outline_mode == "zoom" then thick = T.thick + i T.ofs_x = base_ofs - i / 2 @@ -1032,8 +1032,8 @@ function Title_centered_string(T, mx, my, text, style) T.ofs_y = base_ofs - i end - gui.title_prop("box_w", int(thick)) - gui.title_prop("box_h", int(thick)) + gui.title_prop("box_w", math.round(thick)) + gui.title_prop("box_h", math.round(thick)) Title_draw_string(T, text) end @@ -1042,25 +1042,25 @@ function Title_centered_string(T, mx, my, text, style) -- do central part of text -- - if style.mode == "texture" then - gui.title_prop("texture", "data/masks/" .. style.texture .. ".tga") + if style.font_mode == "texture" and style.font_texture then + gui.title_prop("texture", GAME.title_screen_asset_dir .. "/" .. style.font_texture .. ".tga") else - gui.title_prop("render_mode", style.mode) + gui.title_prop("render_mode", style.font_mode) for k = 1, 4 do - if style.colors[k] then - gui.title_prop("color" .. k, style.colors[k]) + if style.font_colors[k] then + gui.title_prop("color" .. k, style.font_colors[k]) end end end - if style.mode == "gradient" or style.mode == "gradient3" then - gui.title_prop("grad_y1", int(T.y - T.fh + 1)) - gui.title_prop("grad_y2", int(T.y - 1)) + if style.font_mode == "gradient" or style.font_mode == "gradient3" then + gui.title_prop("grad_y1", math.round(T.y - T.fh + 1)) + gui.title_prop("grad_y2", math.round(T.y - 1)) end - gui.title_prop("box_w", int(T.thick)) - gui.title_prop("box_h", int(T.thick)) + gui.title_prop("box_w", math.round(T.thick)) + gui.title_prop("box_h", math.round(T.thick)) T.ofs_x = base_ofs T.ofs_y = base_ofs @@ -1110,9 +1110,9 @@ function Title_interp_color(list, ity, out) local A = list[pos] local B = list[pos+1] - out[1] = int(A[1] * (1 - ity) + B[1] * ity) - out[2] = int(A[2] * (1 - ity) + B[2] * ity) - out[3] = int(A[3] * (1 - ity) + B[3] * ity) + out[1] = math.round(A[1] * (1 - ity) + B[1] * ity) + out[2] = math.round(A[2] * (1 - ity) + B[2] * ity) + out[3] = math.round(A[3] * (1 - ity) + B[3] * ity) return end @@ -1128,527 +1128,24 @@ end ------------------------------------------------------------------------ -TITLE_MAIN_STYLES = -{ - --- Solid styles --- - - solid_blue = - { - prob = 25, - - mode = "solid", - - colors = { "#00f" }, - - outline_mode = "shadow2", - outlines = { "#00c", "#009", "#006", "#000" }, - - narrow = 0.6, - - alt = - { - mode = "solid", - colors = { "#ccf" }, - outline_mode = "zoom", - outlines = { "#77f", "#00f", "#000" }, - }, - }, - - solid_red = - { - prob = 25, - - mode = "solid", - - colors = { "#f00" }, - - outline_mode = "shadow2", - outlines = { "#c00", "#900", "#600", "#000" }, - - narrow = 0.6, - - alt = - { - mode = "solid", - colors = { "#fff" }, - outline_mode = "surround", - outlines = { "#f44", "#900", "#000" }, - }, - }, - - solid_green = - { - prob = 25, - - mode = "solid", - - colors = { "#0f0" }, - - outline_mode = "shadow", - outlines = { "#0c0", "#090", "#060", "#000" }, - - narrow = 0.4, - }, - - solid_black_lightblue = - { - prob = 25, - - mode = "solid", - - colors = { "#000" }, - - outlines = { "#009", "#99f", "#ddd" }, - - narrow = 0.7, - }, - - shaded_white_n_blue = - { - mode = "solid", - - colors = { "#fff" }, - - outline_mode = "shadow", - outlines = { "#bbf", "#99f", "#55f", "#22f", "#00f", "#009", "#004", "#000" }, - - narrow = 0.4, - }, - - shaded_white_n_red = - { - mode = "solid", - - colors = { "#fff" }, - - outline_mode = "zoom", - outlines = { "#f99", "#f66", "#e00", "#b00", "#800", "#400", "#000" }, - - narrow = 0.4, - }, - - --- Gradient styles --- - - gradient_white_black = - { - mode = "gradient", - - colors = { "#fff", "#000" }, - - outlines = { "#000", "#555" }, - }, - - gradient_green_black = - { - mode = "gradient", - - colors = { "#7e6", "#000" }, - - outlines = { "#231", "#342" }, - }, - - gradient_pink_black = - { - mode = "gradient3", - - colors = { "#c77", "#611", "#000" }, - - outlines = { "#000", "#933" }, - }, - - gradient_black_brown = - { - mode = "gradient3", - - colors = { "#000", "#752", "#fb8" }, - - outlines = { "#432", "#000" }, - }, +TITLE_MAIN_STYLE = +{ } - grad3_white_red_black = - { - mode = "gradient3", - - colors = { "#fff", "#f00", "#000" }, - - outlines = { "#c00" }, - }, - - grad3_white_blue_black = - { - mode = "gradient3", - - colors = { "#fff", "#00f", "#000" }, - - outlines = { "#00c" }, - }, - - grad3_white_orange_black = - { - mode = "gradient3", - - colors = { "#fff", "#720", "#000" }, - - outlines = { "#000" }, - }, - - gradmirror_orange_white = - { - mode = "gradient3", - - colors = { "#720", "#fff", "#720" }, - - outlines = { "#000" }, - }, - - gradmirror_yellow_orange = - { - mode = "gradient3", - - colors = { "#ff7", "#620", "#ff7" }, - - outlines = { "#000", "#000", "#000" }, - - narrow = 0.7, - }, - - --- Textured styles --- - - groovy_1 = - { - mode = "texture", - - texture = "groovy1", - - outlines = { "#000", "#864", "#000" }, - }, - - compgreen_1 = - { - prob = 15, - - mode = "texture", - texture = "compgreen", +TITLE_SUB_STYLE = +{ } - outlines = { "#000", "#cb4" }, - narrow = 0.9, - }, - - yellowish_1 = - { - mode = "texture", - - texture = "yellowish", - - outlines = { "#654", "#ca8", "#000" }, - }, - - redrock_1 = - { - mode = "texture", - - texture = "redrock", - - outline_mode = "zoom", - outlines = { "#c66", "#933", "#622", "#511" }, - }, - - fireblu_1 = - { - mode = "texture", - - texture = "fireblu", - - outlines = { "#ccc", "#000" }, - }, - - shawn_1 = - { - mode = "texture", - - texture = "shawn_r", - - outlines = { "#643", "#321", "#000" }, +TITLE_SPACE_STYLE = +{ } - narrow = 0.8, - }, -} - -TITLE_SUB_STYLES = -{ - white = - { - mode = "solid", - colors = { "#ddd" }, - outlines = { "#000" }, - }, - - yellow = - { - prob = 25, - mode = "solid", - colors = { "#ff7" }, - outlines = { "#431" }, - }, - - yellow_outline = - { - mode = "solid", - colors = { "#000" }, - outlines = { "#ff7" }, - }, - - red_outline = - { - mode = "solid", - colors = { "#000" }, - outlines = { "#f44" }, - }, - - lightbrown = - { - mode = "solid", - colors = { "#ea7" }, - outlines = { "#431" }, - }, - - green = - { - mode = "solid", - colors = { "#6d5" }, - outlines = { "#242" }, - }, - - purple = - { - mode = "solid", - colors = { "#f0f" }, - outlines = { "#505" }, - }, -} - - -TITLE_SPACE_STYLES = -{ - red_nebula = - { - hue1 = "#300", - hue2 = "#f00", - hue3 = "#fff", - thresh = 0.5, - }, - - blue_nebula = - { - hue1 = "#000", - hue2 = "#00f", - hue3 = "#99f", - thresh = 0.5, - }, - - green_nebula = - { - hue1 = "#000", - hue2 = "#363", - hue3 = "#6f6", - thresh = 0.5, - }, - - brown_nebula = - { - hue1 = "#000000", - hue2 = "#ab6f43", - hue3 = "#ffebdf", - thresh = 0.25, - power = 3.0, - }, - - firey_nebula = - { - prob = 100, - - hue1 = "#300", - hue2 = "#732", - hue3 = "#ff8", - thresh = 0.2, - power = 1.5, - }, - - grey_nebula = - { - prob = 5, - - hue1 = "#000", - hue2 = "#aaa", - hue3 = "#000", - power = 4, - }, - - purple_nebula = - { - prob = 5, - - hue1 = "#707", - hue2 = "#f0f", - hue3 = "#fff", - thresh = 0.3, - power = 2, - }, -} - - -TITLE_INTERMISSION_STYLES = -{ - brown_box = - { - hue1 = "#332b13", - hue2 = "#774f2b", - hue3 = "#ab6f43", - - fracdim = 2.8 - }, - - blue_box = - { - hue1 = "#005", - hue2 = "#00c", - hue3 = "#33f", - - fracdim = 2.8 - }, - - pink_box = - { - hue1 = "#600", - hue2 = "#933", - hue3 = "#b55", - - fracdim = 2.8 - }, - - green_box = - { - hue1 = "#13230b", - hue2 = "#27551b", - hue3 = "#448822", - - fracdim = 2.8 - }, - - dark_box = - { - hue1 = "#111", - hue2 = "#222", - hue3 = "#333", - - fracdim = 2.9 - } -} +TITLE_INTERMISSION_STYLE = +{ } TITLE_COLOR_RAMPS = -{ - white = - { - { 0,0,0 }, - { 255,255,255 } - }, - - light_grey = - { - { 0,0,0 }, - { 168,168,168 } - }, - - mid_grey = - { - { 0,0,0 }, - { 128,128,128 } - }, - - dark_grey = - { - { 0,0,0 }, - { 96,96,96 } - }, - - blue = - { - { 0,0,0 }, - { 0,0,255 } - }, - - blue_white = - { - { 0,0,0 }, - { 0,0,255 }, - { 231,231,255 } - }, - - red = - { - { 60,0,0 }, - { 255,0,0 } - }, - - red_white = - { - { 60,0,0 }, - { 255,0,0 }, - { 255,224,224 } - }, - - green = - { - { 8,23,8 }, - { 62,147,62 }, - { 115,255,115 } - }, - - mid_green = - { - { 8,23,8 }, - { 62,147,62 } - }, - - orange_white = - { - {43,35,15}, - {135,40,5}, - {215,95,11}, - {243,115,23}, - {255,235,219} - }, - - pink = - { - {60,5,5}, - {107,15,15}, - {155,51,51}, - {203,107,107}, - {255,183,183} - }, - - light_brown = - { - {0,0,0}, - {75,55,27}, - {119,79,43}, - {191,123,75}, - {255,179,131}, - {255,235,223} - }, - - brown_yellow = - { - {0,0,0}, - {115,43,0}, - {255,255,115} - } -} +{ } ------------------------------------------------------------------------ @@ -1662,7 +1159,7 @@ function Title_gen_space_scene() -- generate a night sky scene -- - local style = Title_pick_style(TITLE_SPACE_STYLES, {}) + local style = TITLE_SPACE_STYLE local density = rand.pick({40,70,100}) @@ -1706,7 +1203,7 @@ function Title_gen_space_scene() local function draw_big_star(mx, my, r) - local r2 = int(r * 1.2) + local r2 = math.round(r * 1.2) local DD = 0.09 @@ -1724,7 +1221,7 @@ function Title_gen_space_scene() if ity < 50 then goto continue end - ity = int(ity) + ity = math.round(ity) gui.title_prop("color", { ity, ity, ity }) gui.title_draw_rect(x, y, 1, 1) @@ -1790,9 +1287,9 @@ function Title_gen_space_scene() else gui.title_draw_rect(mx, my, 1, 1) - col[1] = int(col[1] * 0.6) - col[2] = int(col[2] * 0.6) - col[3] = int(col[3] * 0.6) + col[1] = math.round(col[1] * 0.6) + col[2] = math.round(col[2] * 0.6) + col[3] = math.round(col[3] * 0.6) gui.title_prop("color", col) @@ -1893,7 +1390,7 @@ function Title_gen_ray_burst() Title_interp_color(color_list, ity, col) gui.title_prop("color", col) - gui.title_draw_line(mx, my, int(x1), int(y1), col) + gui.title_draw_line(mx, my, math.round(x1), math.round(y1), col) end end end @@ -1909,78 +1406,35 @@ end function Title_gen_wall_scene() - local tex_list - - local lamp_y - local lamp_sprite - - if rand.odds(37) then - -- tech lamp - lamp_y = 154 - lamp_sprite = "lamp2" - - tex_list = { "airduct", "cement" } - - else - if rand.odds(50) then - -- standing lamp - lamp_y = 130 - lamp_sprite = "lamp1" - else - -- wall-mounted torch - lamp_y = 80 - lamp_sprite = "lamp3" - end + local style = TITLE_MAIN_STYLE - -- Added new shit here - - tex_list = { "block1", "block2", "bodiesc", "bricks08", "bricks09", "bronze5", "darkf03", "goth6", "goth10", "goth36", "goth50", "goth51", - "graymet2", "helmet1", "helmet2", "helwal1", "rdrok1" } - end - - -- draw the texture over the whole screen - local tex = rand.pick(tex_list) - - gui.title_prop("texture", "data/bg/" .. tex .. ".tga") + -- draw the background over the whole screen + gui.title_prop("texture", GAME.title_screen_asset_dir .. "/" .. style.background .. ".tga") gui.title_draw_rect(0, 0, 320, 200) - -- decide # of lamps - local lamp_num = 2 - if rand.odds(25) then lamp_num = 1 end - if rand.odds(25) then lamp_num = 3 end + if not style.props then return end - local lights = {} - - for i = 1, lamp_num do - local x = 150 - - if lamp_num >= 2 and i == 1 then x = 35 end - if lamp_num >= 2 and i == lamp_num then x = 265 end - - table.insert(lights, { x=x, y=lamp_y }) - end - - -- apply lighting effect - gui.title_prop("render_mode", "multiply") + -- apply lighting effect??? + --[[gui.title_prop("render_mode", "multiply") local col = { 0,0,0 } local xf = 1.0 - if lamp_num == 1 then xf = 0.7 end - if lamp_num == 3 then xf = 1.6 end + if #style.props == 1 then xf = 0.7 end + if #style.props == 3 then xf = 1.6 end for x = 0, 319 do for y = 0, 199 do local d = 9e9 - for _,L in pairs(lights) do - d = math.min(d, geom.dist(L.x * xf, L.y, x * xf, y)) + for _,prop in pairs(style.props) do + d = math.min(d, geom.dist(prop.x * xf, prop.y, x * xf, y)) end local ity = math.exp(-d / 50) * 255 --- 255 - (d ^ 1.5) / 2.0, ity = math.clamp(0, ity, 255) - ity = int(ity) + ity = math.round(ity) col[1] = ity col[2] = ity @@ -1989,11 +1443,11 @@ function Title_gen_wall_scene() gui.title_prop("color", col) gui.title_draw_rect(x, y, 1, 1) end - end + end]]-- - -- draw each lamp - for _,L in pairs(lights) do - gui.title_load_image(L.x - 10, L.y - 16, "data/bg/" .. lamp_sprite .. ".tga") + -- draw each prop + for _,prop in pairs(style.props) do + gui.title_load_image(prop.x, prop.y, GAME.title_screen_asset_dir .. "/" .. prop.image .. ".tga") end end @@ -2082,7 +1536,7 @@ function Title_gen_cave_scene() Title_interp_color(color_list, ity, col) gui.title_prop("color", col) - gui.title_draw_rect(int(x), int(y), 1, 1) + gui.title_draw_rect(math.round(x), math.round(y), 1, 1) end ::continue:: end @@ -2144,7 +1598,7 @@ function Title_gen_tunnel_scene() Title_interp_color(color_list, ity, col) gui.title_prop("color", col) - gui.title_draw_disc(int(mx - r*x_mul), int(my - r*y_mul), int(r*1.2), int(r)) + gui.title_draw_disc(math.round(mx - r*x_mul), math.round(my - r*y_mul), math.round(r*1.2), math.round(r)) end end @@ -2264,7 +1718,7 @@ function Title_calc_max_thickness(fw, fh) fw = math.min(fw, fh) - fw = int(fw / 5 + 0.5) + fw = math.round(fw / 5 + 0.5) if fw < 1 then return 1 end @@ -2361,25 +1815,11 @@ function Title_add_title() bb_main.h = bb_main.h + 5 end ---[[ - stderrf("bb_main =\n%s\n\n", table.tostr(bb_main)) - stderrf("bb_sub =\n%s\n\n", table.tostr(bb_sub)) - - gui.title_prop("color", "#070") - gui.title_draw_rect(bb_main.x, bb_main.y, bb_main.w, bb_main.h) - - gui.title_prop("color", "#00f") - gui.title_draw_rect(bb_sub.x, bb_sub.y, bb_sub.w, bb_sub.h) ---]] - - - -- pick the styles to use - local style = Title_pick_style(TITLE_MAIN_STYLES, {}) + local style = TITLE_MAIN_STYLE -- FIXME : this used for the smaller words, often make it different (and simpler) local mid_style = style.alt or style - -- vertical sizing of the main title local line_h = bb_main.h / (main_lines * 2 + other_lines) @@ -2410,15 +1850,9 @@ function Title_add_title() local h3 = line_h * 0.7 ---[[ -stderrf("line_h = %1.1f\n", line_h) -stderrf("font sizes: %d x %d | %d x %d | %d x %d\n", w1,h1, w2,h2, w3,h3) ---]] - -- TODO: find a good naming scheme for these title parts - -- decide geometry for major parts -- local line1_T = { fw=w1, fh=h1, spacing=spacing } @@ -2509,7 +1943,7 @@ stderrf("font sizes: %d x %d | %d x %d | %d x %d\n", w1,h1, w2,h2, w3,h3) local mx = 160 local my = bb_sub.y + bb_sub.h / 2 - style = Title_pick_style(TITLE_SUB_STYLES, {}) + style = TITLE_SUB_STYLE sub_T.fw = rand.sel(25, 13, 11) sub_T.fh = 13 @@ -2595,7 +2029,7 @@ function Title_make_interpic() gui.title_create(320, 200, "#000") gui.title_set_palette(GAME.RESOURCES.PALETTES.normal) - local style = Title_pick_style(TITLE_INTERMISSION_STYLES, {}) + local style = TITLE_INTERMISSION_STYLE gui.title_draw_clouds(TITLE_SEED, style.hue1, style.hue2, style.hue3, style.thresh or 0, style.power or 1, @@ -2629,14 +2063,14 @@ end function Title_add_background() - if rand.odds(12) then + if TITLE_MAIN_STYLE.background then + Title_gen_wall_scene() + elseif rand.odds(12) then Title_gen_ray_burst() elseif rand.odds(12) then Title_gen_tunnel_scene() elseif rand.odds(6) then Title_gen_cave_scene() - elseif rand.odds(35) then - Title_gen_wall_scene() else Title_gen_space_scene() end @@ -2669,10 +2103,20 @@ function Title_generate() assert(GAME.title) assert(GAME.RESOURCES.PALETTES) assert(GAME.RESOURCES.PALETTES.normal) + assert(GAME.TITLE_MAIN_STYLES) + assert(GAME.TITLE_SUB_STYLES) + assert(GAME.TITLE_SPACE_STYLES) + assert(GAME.TITLE_INTERMISSION_STYLES) + assert(GAME.TITLE_COLOR_RAMPS) Title_process_raw_fonts() TITLE_SEED = gui.random_int() + TITLE_MAIN_STYLE = Title_pick_style(GAME.TITLE_MAIN_STYLES, {}) + TITLE_SUB_STYLE = Title_pick_style(GAME.TITLE_SUB_STYLES, {}) + TITLE_SPACE_STYLE = Title_pick_style(GAME.TITLE_SPACE_STYLES, {}) + TITLE_COLOR_RAMPS = GAME.TITLE_COLOR_RAMPS + TITLE_INTERMISSION_STYLE = Title_pick_style(GAME.TITLE_INTERMISSION_STYLES, {}) Title_make_interpic() Title_make_titlepic() diff --git a/scripts/util.lua b/scripts/util.lua index 85a71d83e8..99021552d5 100644 --- a/scripts/util.lua +++ b/scripts/util.lua @@ -35,10 +35,6 @@ function non_nil(val) return val end -function int(val) - return math.floor(val) -end - function sel(cond, yes_val, no_val) -- a poor man's ?: operator -- NOTE: both expressions are evaluated! @@ -100,14 +96,6 @@ function math.mid(x, y) return (x + y) / 2.0 end -function math.i_mid(x, y) - return int((x + y) / 2.0) -end - -function math.in_range(low, x, high) - return low <= x and x <= high -end - function math.clamp(low, x, high) if x < low then return low end if x > high then return high end @@ -213,7 +201,7 @@ function module_param_up(module) if opt.increment < 1 then PARAM[opt.name] = value else - PARAM[opt.name] = int(value) + PARAM[opt.name] = math.round(value) end end elseif opt.valuator == "button" then @@ -360,7 +348,7 @@ end function table.reverse(t) if not t then return nil end - for x = 1, int(#t / 2) do + for x = 1, math.round(#t / 2) do local y = #t - (x-1) -- swap 'em t[x], t[y] = t[y], t[x] @@ -722,7 +710,7 @@ function rand.irange(L,H) end function rand.int(val) - return math.floor(val + gui.random()) + return math.round(val + gui.random()) end function rand.skew(mid, dist) @@ -860,7 +848,7 @@ end -- where all the index values start at 1 function div_mod(x, mod) x = x - 1 - return 1 + int(x / mod), 1 + (x % mod) + return 1 + math.round(x / mod), 1 + (x % mod) end function dir_to_delta(dir) @@ -1259,7 +1247,7 @@ end function geom.box_mid(x1,y1, x2,y2) - return int((x1 + x2) / 2), int((y1 + y2) / 2) + return math.round((x1 + x2) / 2), math.round((y1 + y2) / 2) end function geom.box_size(x1,y1, x2,y2) diff --git a/source/g_doom.cc b/source/g_doom.cc index 8fc0867abf..6ea7b9ca4c 100644 --- a/source/g_doom.cc +++ b/source/g_doom.cc @@ -1380,10 +1380,6 @@ bool Doom::game_interface_c::Start(const char *preset) return false; } - gif_filename = filename; - - ReplaceExtension(gif_filename, ".gif"); - if (file_per_map) { filename = PathAppend(home_dir, "temp/resources.wad"); diff --git a/source/m_lua.cc b/source/m_lua.cc index bd24059698..2c96b7d87a 100644 --- a/source/m_lua.cc +++ b/source/m_lua.cc @@ -28,14 +28,12 @@ #include "lib_util.h" #include "m_trans.h" #include "main.h" +#include "minilua.h" #include "physfs.h" #include "sys_assert.h" #include "sys_debug.h" #include "sys_xoshiro.h" -#define LUA_IMPL -#include "minilua.h" - static lua_State *LUA_ST; static bool has_loaded = false; @@ -1334,40 +1332,6 @@ int gui_minimap_finish(lua_State *L) return 0; } -int gui_minimap_gif_start(lua_State *L) -{ - int delay = luaL_optinteger(L, 1, 10); -#ifndef OBSIDIAN_CONSOLE_ONLY - if (main_win) - { - main_win->build_box->mini_map->GifStart(gif_filename, delay); - } -#endif - return 0; -} - -int gui_minimap_gif_frame(lua_State *L) -{ -#ifndef OBSIDIAN_CONSOLE_ONLY - if (main_win) - { - main_win->build_box->mini_map->GifFrame(); - } -#endif - return 0; -} - -int gui_minimap_gif_finish(lua_State *L) -{ -#ifndef OBSIDIAN_CONSOLE_ONLY - if (main_win) - { - main_win->build_box->mini_map->GifFinish(); - } -#endif - return 0; -} - int gui_minimap_draw_line(lua_State *L) { int x1 = luaL_checkinteger(L, 1); @@ -1592,9 +1556,6 @@ static const luaL_Reg gui_script_funcs[] = { {"minimap_finish", gui_minimap_finish}, {"minimap_draw_line", gui_minimap_draw_line}, {"minimap_fill_box", gui_minimap_fill_box}, - {"minimap_gif_start", gui_minimap_gif_start}, - {"minimap_gif_frame", gui_minimap_gif_frame}, - {"minimap_gif_finish", gui_minimap_gif_finish}, // Wolf-3D functions {"wolf_block", WF_wolf_block}, diff --git a/source/main.cc b/source/main.cc index 31f4692c78..b408489929 100644 --- a/source/main.cc +++ b/source/main.cc @@ -160,7 +160,6 @@ bool password_mode = false; bool mature_word_lists = false; bool did_specify_seed = false; -std::string gif_filename = "gif_output.gif"; std::string default_output_path; std::string string_seed; @@ -1038,7 +1037,7 @@ void Main_SetSeed() static void Module_Defaults() { ob_set_mod_option("sky_generator", "self", "1"); - ob_set_mod_option("armaetus_epic_textures", "self", "1"); + //ob_set_mod_option("armaetus_epic_textures", "self", "1"); ob_set_mod_option("music_swapper", "self", "1"); ob_set_mod_option("compress_output", "self", "1"); } diff --git a/source/main.h b/source/main.h index 00b9d29b2f..764c8e04a5 100644 --- a/source/main.h +++ b/source/main.h @@ -167,8 +167,6 @@ extern std::string default_output_path; extern std::string Resolve_DefaultOutputPath(); -extern std::string gif_filename; - extern std::string string_seed; extern std::string selected_lang; diff --git a/source/poly.cc b/source/poly.cc index 154dfa5050..e04812dcc9 100644 --- a/source/poly.cc +++ b/source/poly.cc @@ -1048,8 +1048,6 @@ void CreateEdges() edge_c *left, *right; - LogPrint("Creating Edges...\n"); - for (i = 0; i < num_linedefs; i++) { linedef_c *line = Linedef(i); @@ -1158,10 +1156,6 @@ bool Polygonate(bool require_border) if (was_ok) { ClockwisePolygons(); - - LogPrint("Built %d POLYGONS, %d EDGES, %d SPLIT-VERTS\n", num_polygons, num_edges, num_splits); - - LogPrint("\n"); } FreeQuickAllocCuts(); diff --git a/source/ui_map.cc b/source/ui_map.cc index 18e43c3ce4..0c8300b62a 100644 --- a/source/ui_map.cc +++ b/source/ui_map.cc @@ -21,16 +21,11 @@ #include -#include "gif.h" #include "lib_util.h" #include "main.h" #include "sys_assert.h" #include "sys_macro.h" -// The includes got too messy to make these part of the UI_MiniMap class - Dasho -static GifWriter *gif_writer; -int gif_delay; - UI_MiniMap::UI_MiniMap(int x, int y, int w, int h, const char *label) : Fl_Box(x, y, w, h, label), pixels(NULL), cur_image(NULL) { @@ -333,55 +328,5 @@ void UI_MiniMap::DrawLine(int x1, int y1, int x2, int y2, uint8_t r, uint8_t g, } } -void UI_MiniMap::DrawEntity(int x, int y, uint8_t r, uint8_t g, uint8_t b) -{ - if (x < 1 || x > map_W - 2 || y < 1 || y > map_H - 2) - { - return; - } - - RawPixel(x, y, r, g, b); - - r = (r / 4) * 3; - g = (g / 4) * 3; - b = (b / 4) * 3; - - RawPixel(x - 1, y, r, g, b); - RawPixel(x + 1, y, r, g, b); - RawPixel(x, y - 1, r, g, b); - RawPixel(x, y + 1, r, g, b); -} - -void UI_MiniMap::GifStart(std::string_view filename, int delay) -{ - gif_writer = new GifWriter; - gif_delay = delay; - GifBegin(gif_writer, FileOpen(filename, "wb"), map_W, map_H, gif_delay); -} - -void UI_MiniMap::GifFrame() -{ - std::vector frame_pixels; - int rgb_counter = 0; - // Sloppy RGB->RGBA conversion for Gif-H - Dasho - for (int i = 0; i < map_W * map_H * 3; i++) - { - frame_pixels.push_back(pixels[i]); - rgb_counter++; - if (rgb_counter == 3) - { - frame_pixels.push_back(0); - rgb_counter = 0; - } - } - GifWriteFrame(gif_writer, frame_pixels.data(), map_W, map_H, gif_delay); -} - -void UI_MiniMap::GifFinish() -{ - GifEnd(gif_writer); - delete gif_writer; -} - //--- editor settings --- // vi:ts=4:sw=4:noexpandtab diff --git a/source/ui_map.h b/source/ui_map.h index 00884bd419..a9b10985ee 100644 --- a/source/ui_map.h +++ b/source/ui_map.h @@ -58,14 +58,9 @@ class UI_MiniMap : public Fl_Box void DrawPixel(int x, int y, uint8_t r, uint8_t g, uint8_t b); void DrawBox(int x1, int y1, int x2, int y2, uint8_t r, uint8_t g, uint8_t b); void DrawLine(int x1, int y1, int x2, int y2, uint8_t r, uint8_t g, uint8_t b); - void DrawEntity(int x, int y, uint8_t r, uint8_t g, uint8_t b); void MapClear(); - void GifStart(std::string_view filename, int delay); - void GifFrame(); - void GifFinish(); - private: inline void RawPixel(int x, int y, uint8_t r, uint8_t g, uint8_t b) {