diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 000000000..894b47e33 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,85 @@ +name: Linux build +run-name: testbuild_linux +on: + push: + branches: + - 'master' + pull_request: + types: + - edited + - opened + - synchronize +concurrency: + # Cancel concurrent workflows for the same PR or commit hash. + group: ${{github.workflow}}-${{github.event_name == 'pull_request' && github.head_ref || github.sha}} + cancel-in-progress: true +jobs: + build_linux: + name: Linux (${{ matrix.arch }}) + runs-on: ${{ matrix.runs_on }} + permissions: + actions: read + contents: read + strategy: + fail-fast: false + matrix: + include: + - arch: x86_64 + runs_on: ubuntu-latest + - arch: aarch64 + runs_on: ubuntu-24.04-arm + steps: + + # Install apt dependencies + - name: Install build dependencies + run: | + sudo apt update + sudo apt install libgl1-mesa-dev libopenal-dev libcurl4-openssl-dev \ + build-essential + + # SDL3 isn't available in apt, so we need to install it manually + - name: Setup SDL3 + uses: libsdl-org/setup-sdl@main + with: + install-linux-dependencies: true + version: 3-latest + build-type: Release + discriminator: linux-${{ matrix.arch }} + add-to-environment: true + + - name: Check out repository code + uses: actions/checkout@v4 + + # Do a release build with CMake presets + - name: Build + run: | + cmake --preset release + cmake --build --preset release + + - name: Create testbuild package + run: | + # Create release directory tree + mkdir -p publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs + # Copy release assets + cp -r release/* publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/ + # Copy misc assets + cp -r stuff/yq2.cfg publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/yq2.cfg + cp -r stuff/mapfixes publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc + cp LICENSE publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/LICENSE.txt + cp README.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/README.txt + cp doc/010_index.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/010_index.txt + cp doc/020_installation.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/020_installation.txt + cp doc/030_configuration.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/030_configuration.txt + cp doc/040_cvarlist.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/040_cvarlist.txt + cp doc/050_commands.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/050_commands.txt + cp doc/060_multiplayer.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/060_multiplayer.txt + cp doc/070_packaging.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/070_packaging.txt + cp doc/080_contributing.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/080_contributing.txt + cp doc/090_filelists.md publish/quake2-linux_${{matrix.arch}}-${{github.sha}}/misc/docs/090_filelists.md + + - name: Upload testbuild package + uses: actions/upload-artifact@v4 + with: + name: quake2-linux_${{matrix.arch}}-${{github.sha}} + path: publish/ + if-no-files-found: error \ No newline at end of file diff --git a/.github/workflows/linux_aarch64.yml b/.github/workflows/linux_aarch64.yml deleted file mode 100644 index 1146a0b59..000000000 --- a/.github/workflows/linux_aarch64.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Testbuild for Linux (aarch64) -run-name: testbuild_linux_aarch64 -on: - push: - branches: - - 'master' - pull_request: - types: - - edited - - opened - - synchronize -concurrency: - # Cancel concurrent workflows for the same PR or commit hash. - group: ${{github.workflow}}-${{github.event_name == 'pull_request' && github.head_ref || github.sha}} - cancel-in-progress: true -jobs: - build_ubuntu_aarch64: - runs-on: ubuntu-24.04-arm - permissions: - actions: read - contents: read - strategy: - fail-fast: false - matrix: - include: - - env: ubuntu - steps: - - name: Install build dependencies - run: | - sudo apt update - sudo apt install libgl1-mesa-dev libsdl2-dev libopenal-dev libcurl4-openssl-dev \ - build-essential - - name: Check out repository code - uses: actions/checkout@v4 - - name: Build - run: | - # Public runners come with 4 CPUs. - make WITH_SDL3=no -j4 - make WITH_SDL3=no -j4 ref_gles1 - - name: Create testbuild package - run: | - # Create release directory tree - mkdir -p publish/quake2-linux_aarch64-${{github.sha}}/misc/docs - # Copy release assets - cp -r release/* publish/quake2-linux_aarch64-${{github.sha}}/ - # Copy misc assets - cp -r stuff/yq2.cfg publish/quake2-linux_aarch64-${{github.sha}}/misc/yq2.cfg - cp -r stuff/mapfixes publish/quake2-linux_aarch64-${{github.sha}}/misc - cp LICENSE publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/LICENSE.txt - cp README.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/README.txt - cp doc/010_index.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/010_index.txt - cp doc/020_installation.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/020_installation.txt - cp doc/030_configuration.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/030_configuration.txt - cp doc/040_cvarlist.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/040_cvarlist.txt - cp doc/050_commands.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/050_commands.txt - cp doc/060_multiplayer.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/060_multiplayer.txt - cp doc/070_packaging.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/070_packaging.txt - cp doc/080_contributing.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/080_contributing.txt - cp doc/090_filelists.md publish/quake2-linux_aarch64-${{github.sha}}/misc/docs/090_filelists.md - - name: Upload testbuild package - uses: actions/upload-artifact@v4 - with: - name: quake2-linux_aarch64-${{github.sha}} - path: publish/ - if-no-files-found: error diff --git a/.github/workflows/linux_x86_64.yml b/.github/workflows/linux_x86_64.yml deleted file mode 100644 index 3ef59ab82..000000000 --- a/.github/workflows/linux_x86_64.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Testbuild for Linux (x86_64) -run-name: testbuild_linux_x86_64 -on: - push: - branches: - - 'master' - pull_request: - types: - - edited - - opened - - synchronize -concurrency: - # Cancel concurrent workflows for the same PR or commit hash. - group: ${{github.workflow}}-${{github.event_name == 'pull_request' && github.head_ref || github.sha}} - cancel-in-progress: true -jobs: - build_ubuntu_x86_64: - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - strategy: - fail-fast: false - matrix: - include: - - env: ubuntu - steps: - - name: Install build dependencies - run: | - sudo apt update - sudo apt install libgl1-mesa-dev libopenal-dev libcurl4-openssl-dev \ - build-essential - - name: Build SDL3 - uses: libsdl-org/setup-sdl@main - with: - install-linux-dependencies: true - version: 3-latest - - name: Check out repository code - uses: actions/checkout@v4 - - name: Build - run: | - # Public runners come with 4 CPUs. - make -j4 - make -j4 ref_gles1 - - name: Create testbuild package - run: | - # Create release directory tree - mkdir -p publish/quake2-linux_x86_64-${{github.sha}}/misc/docs - # Copy release assets - cp -r release/* publish/quake2-linux_x86_64-${{github.sha}}/ - # Copy misc assets - cp -r stuff/yq2.cfg publish/quake2-linux_x86_64-${{github.sha}}/misc/yq2.cfg - cp -r stuff/mapfixes publish/quake2-linux_x86_64-${{github.sha}}/misc - cp LICENSE publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/LICENSE.txt - cp README.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/README.txt - cp doc/010_index.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/010_index.txt - cp doc/020_installation.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/020_installation.txt - cp doc/030_configuration.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/030_configuration.txt - cp doc/040_cvarlist.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/040_cvarlist.txt - cp doc/050_commands.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/050_commands.txt - cp doc/060_multiplayer.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/060_multiplayer.txt - cp doc/070_packaging.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/070_packaging.txt - cp doc/080_contributing.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/080_contributing.txt - cp doc/090_filelists.md publish/quake2-linux_x86_64-${{github.sha}}/misc/docs/090_filelists.md - - name: Upload testbuild package - uses: actions/upload-artifact@v4 - with: - name: quake2-linux_x86_64-${{github.sha}} - path: publish/ - if-no-files-found: error diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 115e5e855..0ab3ad8b2 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -28,13 +28,13 @@ jobs: - name: Install build dependencies run: | brew update - brew install sdl3 openal-soft make + brew install sdl3 openal-soft ninja - name: Check out repository code uses: actions/checkout@v4 - name: Build run: | - # Public runners come with 3 CPUs. - gmake -j3 + cmake --preset release + cmake --build --preset release - name: Create testbuild package run: | # Create release directory tree diff --git a/CMakeLists.txt b/CMakeLists.txt index 9706b19ff..a8e88dc07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,5 @@ cmake_minimum_required(VERSION 3.31 FATAL_ERROR) -# Print a message that using the Makefiles is recommended. -message(NOTICE: " The CMakeLists.txt is unmaintained. Use the Makefile if possible.") - # Enforce "Debug" as standard build type. if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) @@ -23,12 +20,16 @@ if(YQUAKE2LIBS) set(ENV{CMAKE_PREFIX_PATH} ${YQUAKE2LIBS}) endif() - set(ENV{OPENALDIR} ${YQUAKE2LIBS}) - set(ENV{SDL2DIR} ${YQUAKE2LIBS}) + set(ENV{OPENALDIR} ${YQUAKE2LIBS}) endif() -# Add extended path for FreeBSD and Homebrew on OS X. +# Add extended path for homebrew on macOS. list(APPEND CMAKE_PREFIX_PATH /usr/local) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + # Prefer homebrew-provided packages over system ones + set(CMAKE_FIND_FRAMEWORK LAST) + list(APPEND CMAKE_PREFIX_PATH /opt/homebrew /usr/local /opt/local /opt/homebrew/opt/openal-soft /usr/local/opt/openal-soft) +endif() if (MSVC) add_compile_options(/MP) # parallel build (use all cores, or as many as configured in VS) @@ -64,12 +65,7 @@ endif() option(CURL_SUPPORT "cURL support" ON) option(OPENAL_SUPPORT "OpenAL support" ON) option(SYSTEMWIDE_SUPPORT "Enable systemwide installation of game assets" OFF) -option(SDL3_SUPPORT "Build against SDL 3 instead of SDL2" ON) -option(GL1_RENDERER "Build the GL1 renderer" ON) option(GL3_RENDERER "Build the GL3 renderer" ON) -option(GLES1_RENDERER "Build the GLES1 renderer" OFF) -option(GLES3_RENDERER "Build the GLES3 renderer" ON) -option(SOFT_RENDERER "Build the software renderer" ON) set(SYSTEMDIR "" CACHE STRING "Override the system default directory") @@ -185,22 +181,8 @@ endif() # Required libraries to build the different components of the binaries. Find # them and add the include/linker directories and flags (in case the package # manager find it in a weird place). -if (SDL3_SUPPORT) - find_package(SDL3 REQUIRED) - add_definitions(-DUSE_SDL3) -else() - find_package(SDL2 REQUIRED) - list(APPEND yquake2IncludeDirectories "${SDL2_INCLUDE_DIR}/..") - list(APPEND yquake2SDLLinkerFlags ${SDL2_LIBRARY}) -endif() - -if(GL1_RENDERER) - # We need an OpenGL implementation. - set(OpenGL_GL_PREFERENCE GLVND) - find_package(OpenGL REQUIRED) - list(APPEND yquake2IncludeDirectories ${OPENGL_INCLUDE_DIR}) - list(APPEND yquake2OpenGLLinkerFlags ${OPENGL_LIBRARIES}) -endif() +find_package(SDL3 REQUIRED) +add_definitions(-DUSE_SDL3) # backtrace lookup # Some systems like Linux has it within the libc some like the BSD, Haiku ... @@ -228,13 +210,34 @@ endif() # OpenAL support. if(${OPENAL_SUPPORT}) - find_package(OpenAL) - - if(${OPENAL_FOUND}) - list(APPEND yquake2IncludeDirectories "${OPENAL_INCLUDE_DIR}") - list(APPEND yquake2ClientLinkerFlags ${OPENAL_LIBRARY}) - - if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + find_package(OpenAL REQUIRED) + + if(${OPENAL_FOUND}) + # Normalize include dirs: if CMake reports include path ending in + # 'AL', use its parent so '#include ' resolves correctly. + set(_OPENAL_INCLUDES) + if(DEFINED OPENAL_INCLUDE_DIRS) + list(APPEND _OPENAL_INCLUDES ${OPENAL_INCLUDE_DIRS}) + elseif(DEFINED OPENAL_INCLUDE_DIR) + list(APPEND _OPENAL_INCLUDES ${OPENAL_INCLUDE_DIR}) + endif() + foreach(_inc_dir IN LISTS _OPENAL_INCLUDES) + get_filename_component(_tail "${_inc_dir}" NAME) + if(_tail STREQUAL "AL") + get_filename_component(_parent "${_inc_dir}" DIRECTORY) + list(APPEND yquake2IncludeDirectories "${_parent}") + else() + list(APPEND yquake2IncludeDirectories "${_inc_dir}") + endif() + endforeach() + + if(TARGET OpenAL::OpenAL) + list(APPEND yquake2ClientLinkerFlags OpenAL::OpenAL) + else() + list(APPEND yquake2ClientLinkerFlags ${OPENAL_LIBRARY}) + endif() + + if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") add_definitions(-DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER="openal32.dll") elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") add_definitions(-DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER="libopenal.dylib") @@ -299,591 +302,16 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") endif() endif() -set(Backends-Generic-Source - ${BACKENDS_SRC_DIR}/generic/misc.c - ) - -set(Backends-Unix-Source - ${BACKENDS_SRC_DIR}/unix/main.c - ${BACKENDS_SRC_DIR}/unix/network.c - ${BACKENDS_SRC_DIR}/unix/signalhandler.c - ${BACKENDS_SRC_DIR}/unix/system.c - ${BACKENDS_SRC_DIR}/unix/shared/hunk.c - ) - -set(Backends-Windows-Source - ${BACKENDS_SRC_DIR}/windows/icon.rc - ${BACKENDS_SRC_DIR}/windows/main.c - ${BACKENDS_SRC_DIR}/windows/network.c - ${BACKENDS_SRC_DIR}/windows/system.c - ${BACKENDS_SRC_DIR}/windows/shared/hunk.c - ) - -set(Backends-Windows-Header - ${BACKENDS_SRC_DIR}/windows/header/resource.h - ) - -set(REF-Windows-Source - ${BACKENDS_SRC_DIR}/windows/shared/hunk.c - ) - -set(REF-Unix-Source - ${BACKENDS_SRC_DIR}/unix/shared/hunk.c - ) - -# Set the nessesary platform specific source -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(Platform-Specific-Source ${Backends-Windows-Source} ${Backends-Windows-Header}) - set(REF-Platform-Specific-Source ${REF-Windows-Source}) -else() - set(Platform-Specific-Source ${Backends-Unix-Source}) - set(REF-Platform-Specific-Source ${REF-Unix-Source}) -endif() +add_subdirectory(${BACKENDS_SRC_DIR}) -set(Game-Source - ${COMMON_SRC_DIR}/shared/flash.c - ${COMMON_SRC_DIR}/shared/rand.c - ${COMMON_SRC_DIR}/shared/shared.c - ${GAME_SRC_DIR}/g_ai.c - ${GAME_SRC_DIR}/g_chase.c - ${GAME_SRC_DIR}/g_cmds.c - ${GAME_SRC_DIR}/g_combat.c - ${GAME_SRC_DIR}/g_func.c - ${GAME_SRC_DIR}/g_items.c - ${GAME_SRC_DIR}/g_main.c - ${GAME_SRC_DIR}/g_misc.c - ${GAME_SRC_DIR}/g_monster.c - ${GAME_SRC_DIR}/g_phys.c - ${GAME_SRC_DIR}/g_spawn.c - ${GAME_SRC_DIR}/g_svcmds.c - ${GAME_SRC_DIR}/g_target.c - ${GAME_SRC_DIR}/g_trigger.c - ${GAME_SRC_DIR}/g_turret.c - ${GAME_SRC_DIR}/g_utils.c - ${GAME_SRC_DIR}/g_weapon.c - ${GAME_SRC_DIR}/monster/berserker/berserker.c - ${GAME_SRC_DIR}/monster/boss2/boss2.c - ${GAME_SRC_DIR}/monster/boss3/boss3.c - ${GAME_SRC_DIR}/monster/boss3/boss31.c - ${GAME_SRC_DIR}/monster/boss3/boss32.c - ${GAME_SRC_DIR}/monster/brain/brain.c - ${GAME_SRC_DIR}/monster/chick/chick.c - ${GAME_SRC_DIR}/monster/flipper/flipper.c - ${GAME_SRC_DIR}/monster/float/float.c - ${GAME_SRC_DIR}/monster/flyer/flyer.c - ${GAME_SRC_DIR}/monster/gladiator/gladiator.c - ${GAME_SRC_DIR}/monster/gunner/gunner.c - ${GAME_SRC_DIR}/monster/hover/hover.c - ${GAME_SRC_DIR}/monster/infantry/infantry.c - ${GAME_SRC_DIR}/monster/insane/insane.c - ${GAME_SRC_DIR}/monster/medic/medic.c - ${GAME_SRC_DIR}/monster/misc/move.c - ${GAME_SRC_DIR}/monster/mutant/mutant.c - ${GAME_SRC_DIR}/monster/parasite/parasite.c - ${GAME_SRC_DIR}/monster/soldier/soldier.c - ${GAME_SRC_DIR}/monster/supertank/supertank.c - ${GAME_SRC_DIR}/monster/tank/tank.c - ${GAME_SRC_DIR}/player/client.c - ${GAME_SRC_DIR}/player/hud.c - ${GAME_SRC_DIR}/player/trail.c - ${GAME_SRC_DIR}/player/view.c - ${GAME_SRC_DIR}/player/weapon.c - ${GAME_SRC_DIR}/savegame/savegame.c - ) - -set(Game-Header - ${GAME_SRC_DIR}/header/game.h - ${GAME_SRC_DIR}/header/local.h - ${GAME_SRC_DIR}/monster/berserker/berserker.h - ${GAME_SRC_DIR}/monster/boss2/boss2.h - ${GAME_SRC_DIR}/monster/boss3/boss31.h - ${GAME_SRC_DIR}/monster/boss3/boss32.h - ${GAME_SRC_DIR}/monster/brain/brain.h - ${GAME_SRC_DIR}/monster/chick/chick.h - ${GAME_SRC_DIR}/monster/flipper/flipper.h - ${GAME_SRC_DIR}/monster/float/float.h - ${GAME_SRC_DIR}/monster/flyer/flyer.h - ${GAME_SRC_DIR}/monster/gladiator/gladiator.h - ${GAME_SRC_DIR}/monster/gunner/gunner.h - ${GAME_SRC_DIR}/monster/hover/hover.h - ${GAME_SRC_DIR}/monster/infantry/infantry.h - ${GAME_SRC_DIR}/monster/insane/insane.h - ${GAME_SRC_DIR}/monster/medic/medic.h - ${GAME_SRC_DIR}/monster/misc/player.h - ${GAME_SRC_DIR}/monster/mutant/mutant.h - ${GAME_SRC_DIR}/monster/parasite/parasite.h - ${GAME_SRC_DIR}/monster/soldier/soldier.h - ${GAME_SRC_DIR}/monster/supertank/supertank.h - ${GAME_SRC_DIR}/monster/tank/tank.h - ${GAME_SRC_DIR}/savegame/tables/clientfields.h - ${GAME_SRC_DIR}/savegame/tables/fields.h - ${GAME_SRC_DIR}/savegame/tables/gamefunc_decs.h - ${GAME_SRC_DIR}/savegame/tables/gamefunc_list.h - ${GAME_SRC_DIR}/savegame/tables/gamemmove_decs.h - ${GAME_SRC_DIR}/savegame/tables/gamemmove_list.h - ${GAME_SRC_DIR}/savegame/tables/levelfields.h - ) - -set(Client-Source - ${CLIENT_SRC_DIR}/cl_cin.c - ${CLIENT_SRC_DIR}/cl_console.c - ${CLIENT_SRC_DIR}/cl_download.c - ${CLIENT_SRC_DIR}/cl_effects.c - ${CLIENT_SRC_DIR}/cl_entities.c - ${CLIENT_SRC_DIR}/cl_input.c - ${CLIENT_SRC_DIR}/cl_image.c - ${CLIENT_SRC_DIR}/cl_inventory.c - ${CLIENT_SRC_DIR}/cl_keyboard.c - ${CLIENT_SRC_DIR}/cl_lights.c - ${CLIENT_SRC_DIR}/cl_main.c - ${CLIENT_SRC_DIR}/cl_network.c - ${CLIENT_SRC_DIR}/cl_parse.c - ${CLIENT_SRC_DIR}/cl_particles.c - ${CLIENT_SRC_DIR}/cl_prediction.c - ${CLIENT_SRC_DIR}/cl_screen.c - ${CLIENT_SRC_DIR}/cl_tempentities.c - ${CLIENT_SRC_DIR}/cl_view.c - ${CLIENT_SRC_DIR}/curl/download.c - ${CLIENT_SRC_DIR}/curl/qcurl.c - ${CLIENT_SRC_DIR}/input/gyro.c - ${CLIENT_SRC_DIR}/menu/menu.c - ${CLIENT_SRC_DIR}/menu/qmenu.c - ${CLIENT_SRC_DIR}/menu/videomenu.c - ${CLIENT_SRC_DIR}/sound/ogg.c - ${CLIENT_SRC_DIR}/sound/openal.c - ${CLIENT_SRC_DIR}/sound/qal.c - ${CLIENT_SRC_DIR}/sound/sdl.c - ${CLIENT_SRC_DIR}/sound/sound.c - ${CLIENT_SRC_DIR}/sound/wave.c - ${CLIENT_SRC_DIR}/vid/vid.c - ${COMMON_SRC_DIR}/argproc.c - ${COMMON_SRC_DIR}/clientserver.c - ${COMMON_SRC_DIR}/collision.c - ${COMMON_SRC_DIR}/crc.c - ${COMMON_SRC_DIR}/cmdparser.c - ${COMMON_SRC_DIR}/cvar.c - ${COMMON_SRC_DIR}/filesystem.c - ${COMMON_SRC_DIR}/glob.c - ${COMMON_SRC_DIR}/md4.c - ${COMMON_SRC_DIR}/movemsg.c - ${COMMON_SRC_DIR}/frame.c - ${COMMON_SRC_DIR}/netchan.c - ${COMMON_SRC_DIR}/pmove.c - ${COMMON_SRC_DIR}/szone.c - ${COMMON_SRC_DIR}/zone.c - ${COMMON_SRC_DIR}/shared/flash.c - ${COMMON_SRC_DIR}/shared/rand.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/unzip/ioapi.c - ${COMMON_SRC_DIR}/unzip/unzip.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.c - ${SERVER_SRC_DIR}/sv_cmd.c - ${SERVER_SRC_DIR}/sv_conless.c - ${SERVER_SRC_DIR}/sv_entities.c - ${SERVER_SRC_DIR}/sv_game.c - ${SERVER_SRC_DIR}/sv_init.c - ${SERVER_SRC_DIR}/sv_main.c - ${SERVER_SRC_DIR}/sv_save.c - ${SERVER_SRC_DIR}/sv_send.c - ${SERVER_SRC_DIR}/sv_user.c - ${SERVER_SRC_DIR}/sv_world.c - ) - -if(SDL3_SUPPORT) - set(Client-SDL-Source - ${CLIENT_SRC_DIR}/input/sdl3.c - ${CLIENT_SRC_DIR}/vid/glimp_sdl3.c - ) -else() - set(Client-SDL-Source - ${CLIENT_SRC_DIR}/input/sdl2.c - ${CLIENT_SRC_DIR}/vid/glimp_sdl2.c - ) -endif() -set(Client-Header - ${CLIENT_SRC_DIR}/header/client.h - ${CLIENT_SRC_DIR}/header/console.h - ${CLIENT_SRC_DIR}/header/keyboard.h - ${CLIENT_SRC_DIR}/header/screen.h - ${CLIENT_SRC_DIR}/curl/header/download.h - ${CLIENT_SRC_DIR}/curl/header/qcurl.h - ${CLIENT_SRC_DIR}/input/header/gyro.h - ${CLIENT_SRC_DIR}/input/header/input.h - ${CLIENT_SRC_DIR}/menu/header/qmenu.h - ${CLIENT_SRC_DIR}/sound/header/local.h - ${CLIENT_SRC_DIR}/sound/header/qal.h - ${CLIENT_SRC_DIR}/sound/header/sound.h - ${CLIENT_SRC_DIR}/sound/header/stb_vorbis.h - ${CLIENT_SRC_DIR}/sound/header/vorbis.h - ${CLIENT_SRC_DIR}/vid/header/ref.h - ${CLIENT_SRC_DIR}/vid/header/stb_image_write.h - ${CLIENT_SRC_DIR}/vid/header/vid.h - ${COMMON_SRC_DIR}/header/common.h - ${COMMON_SRC_DIR}/header/crc.h - ${COMMON_SRC_DIR}/header/files.h - ${COMMON_SRC_DIR}/header/glob.h - ${COMMON_SRC_DIR}/header/shared.h - ${COMMON_SRC_DIR}/header/zone.h - ${COMMON_SRC_DIR}/unzip/ioapi.h - ${COMMON_SRC_DIR}/unzip/unzip.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.h - ${COMMON_SRC_DIR}/unzip/miniz/minizconf.h - ${SERVER_SRC_DIR}/header/server.h - ) - -set(Server-Source - ${COMMON_SRC_DIR}/argproc.c - ${COMMON_SRC_DIR}/clientserver.c - ${COMMON_SRC_DIR}/collision.c - ${COMMON_SRC_DIR}/crc.c - ${COMMON_SRC_DIR}/cmdparser.c - ${COMMON_SRC_DIR}/cvar.c - ${COMMON_SRC_DIR}/filesystem.c - ${COMMON_SRC_DIR}/glob.c - ${COMMON_SRC_DIR}/md4.c - ${COMMON_SRC_DIR}/frame.c - ${COMMON_SRC_DIR}/movemsg.c - ${COMMON_SRC_DIR}/netchan.c - ${COMMON_SRC_DIR}/pmove.c - ${COMMON_SRC_DIR}/szone.c - ${COMMON_SRC_DIR}/zone.c - ${COMMON_SRC_DIR}/shared/rand.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/unzip/ioapi.c - ${COMMON_SRC_DIR}/unzip/unzip.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.c - ${SERVER_SRC_DIR}/sv_cmd.c - ${SERVER_SRC_DIR}/sv_conless.c - ${SERVER_SRC_DIR}/sv_entities.c - ${SERVER_SRC_DIR}/sv_game.c - ${SERVER_SRC_DIR}/sv_init.c - ${SERVER_SRC_DIR}/sv_main.c - ${SERVER_SRC_DIR}/sv_save.c - ${SERVER_SRC_DIR}/sv_send.c - ${SERVER_SRC_DIR}/sv_user.c - ${SERVER_SRC_DIR}/sv_world.c - ) - -set(Server-Header - ${COMMON_SRC_DIR}/header/common.h - ${COMMON_SRC_DIR}/header/crc.h - ${COMMON_SRC_DIR}/header/files.h - ${COMMON_SRC_DIR}/header/glob.h - ${COMMON_SRC_DIR}/header/shared.h - ${COMMON_SRC_DIR}/header/zone.h - ${COMMON_SRC_DIR}/unzip/ioapi.h - ${COMMON_SRC_DIR}/unzip/unzip.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.h - ${COMMON_SRC_DIR}/unzip/miniz/minizconf.h - ${SERVER_SRC_DIR}/header/server.h - ) - -set(GL1-Source - ${REF_SRC_DIR}/gl1/qgl.c - ${REF_SRC_DIR}/gl1/gl1_draw.c - ${REF_SRC_DIR}/gl1/gl1_image.c - ${REF_SRC_DIR}/gl1/gl1_light.c - ${REF_SRC_DIR}/gl1/gl1_lightmap.c - ${REF_SRC_DIR}/gl1/gl1_main.c - ${REF_SRC_DIR}/gl1/gl1_mesh.c - ${REF_SRC_DIR}/gl1/gl1_misc.c - ${REF_SRC_DIR}/gl1/gl1_model.c - ${REF_SRC_DIR}/gl1/gl1_scrap.c - ${REF_SRC_DIR}/gl1/gl1_surf.c - ${REF_SRC_DIR}/gl1/gl1_warp.c - ${REF_SRC_DIR}/gl1/gl1_sdl.c - ${REF_SRC_DIR}/gl1/gl1_buffer.c - ${REF_SRC_DIR}/files/common.c - ${REF_SRC_DIR}/files/models.c - ${REF_SRC_DIR}/files/pcx.c - ${REF_SRC_DIR}/files/stb.c - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/files/wal.c - ${REF_SRC_DIR}/files/pvs.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/md4.c - ) - -set(Glad-GLES1-Source ${REF_SRC_DIR}/gl1/glad-gles1/src/glad.c) - -set(GL1-Header - ${REF_SRC_DIR}/ref_shared.h - ${REF_SRC_DIR}/constants/anorms.h - ${REF_SRC_DIR}/constants/anormtab.h - ${REF_SRC_DIR}/constants/warpsin.h - ${REF_SRC_DIR}/files/stb_image.h - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/gl1/header/local.h - ${REF_SRC_DIR}/gl1/header/model.h - ${REF_SRC_DIR}/gl1/header/qgl.h - ${COMMON_SRC_DIR}/header/shared.h - ) - -set(Glad-GLES1-Header - ${REF_SRC_DIR}/gl1/glad-gles1/include/glad/glad.h - ${REF_SRC_DIR}/gl1/glad-gles1/include/KHR/khrplatform.h - ) - -set(GL3-Source - ${REF_SRC_DIR}/gl3/gl3_draw.c - ${REF_SRC_DIR}/gl3/gl3_image.c - ${REF_SRC_DIR}/gl3/gl3_light.c - ${REF_SRC_DIR}/gl3/gl3_lightmap.c - ${REF_SRC_DIR}/gl3/gl3_main.c - ${REF_SRC_DIR}/gl3/gl3_mesh.c - ${REF_SRC_DIR}/gl3/gl3_misc.c - ${REF_SRC_DIR}/gl3/gl3_model.c - ${REF_SRC_DIR}/gl3/gl3_sdl.c - ${REF_SRC_DIR}/gl3/gl3_surf.c - ${REF_SRC_DIR}/gl3/gl3_warp.c - ${REF_SRC_DIR}/gl3/gl3_shaders.c - ${REF_SRC_DIR}/files/common.c - ${REF_SRC_DIR}/files/models.c - ${REF_SRC_DIR}/files/pcx.c - ${REF_SRC_DIR}/files/stb.c - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/files/wal.c - ${REF_SRC_DIR}/files/pvs.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/md4.c - ) - -set(Glad-GL3-Source ${REF_SRC_DIR}/gl3/glad/src/glad.c) -set(Glad-GLES3-Source ${REF_SRC_DIR}/gl3/glad-gles3/src/glad.c) - -set(GL3-Header - ${REF_SRC_DIR}/ref_shared.h - ${REF_SRC_DIR}/constants/anorms.h - ${REF_SRC_DIR}/constants/anormtab.h - ${REF_SRC_DIR}/constants/warpsin.h - ${REF_SRC_DIR}/files/stb_image.h - ${REF_SRC_DIR}/gl3/header/DG_dynarr.h - ${REF_SRC_DIR}/gl3/header/HandmadeMath.h - ${REF_SRC_DIR}/gl3/header/local.h - ${REF_SRC_DIR}/gl3/header/model.h - ${COMMON_SRC_DIR}/header/shared.h - ) - -set(Glad-GL3-Header - ${REF_SRC_DIR}/gl3/glad/include/glad/glad.h - ${REF_SRC_DIR}/gl3/glad/include/KHR/khrplatform.h - ) - -set(Glad-GLES3-Header - ${REF_SRC_DIR}/gl3/glad-gles3/include/glad/glad.h - ${REF_SRC_DIR}/gl3/glad-gles3/include/KHR/khrplatform.h - ) - -set(SOFT-Source - ${REF_SRC_DIR}/soft/sw_aclip.c - ${REF_SRC_DIR}/soft/sw_alias.c - ${REF_SRC_DIR}/soft/sw_bsp.c - ${REF_SRC_DIR}/soft/sw_draw.c - ${REF_SRC_DIR}/soft/sw_edge.c - ${REF_SRC_DIR}/soft/sw_image.c - ${REF_SRC_DIR}/soft/sw_light.c - ${REF_SRC_DIR}/soft/sw_main.c - ${REF_SRC_DIR}/soft/sw_misc.c - ${REF_SRC_DIR}/soft/sw_model.c - ${REF_SRC_DIR}/soft/sw_part.c - ${REF_SRC_DIR}/soft/sw_poly.c - ${REF_SRC_DIR}/soft/sw_polyset.c - ${REF_SRC_DIR}/soft/sw_rast.c - ${REF_SRC_DIR}/soft/sw_scan.c - ${REF_SRC_DIR}/soft/sw_sprite.c - ${REF_SRC_DIR}/soft/sw_surf.c - ${REF_SRC_DIR}/files/common.c - ${REF_SRC_DIR}/files/models.c - ${REF_SRC_DIR}/files/pcx.c - ${REF_SRC_DIR}/files/stb.c - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/files/wal.c - ${REF_SRC_DIR}/files/pvs.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/md4.c - ) - -set(SOFT-Header - ${REF_SRC_DIR}/ref_shared.h - ${REF_SRC_DIR}/files/stb_image.h - ${REF_SRC_DIR}/files/stb_image_resize.h - ${REF_SRC_DIR}/soft/header/local.h - ${REF_SRC_DIR}/soft/header/model.h - ${COMMON_SRC_DIR}/header/shared.h - ) - -# Main Quake 2 executable +add_subdirectory(${CLIENT_SRC_DIR}) +add_subdirectory(${SERVER_SRC_DIR}) +## Executables moved to src/client and src/server -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - add_executable(yquake2 WIN32 ${Client-Source} ${Client-SDL-Source} ${Client-Header} - ${Platform-Specific-Source} ${Backends-Generic-Source}) - set_target_properties(yquake2 PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - ) - target_link_libraries(yquake2 ${yquake2LinkerFlags} ${yquake2ClientLinkerFlags} - ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm) - if(SDL3_SUPPORT) - target_link_libraries(yquake2 SDL3::SDL3) - endif() +add_subdirectory(${GAME_SRC_DIR}) - if(MSVC AND CMAKE_MAJOR_VERSION GREATER 3 OR ( CMAKE_MAJOR_VERSION EQUAL 3 AND CMAKE_MINOR_VERSION GREATER_EQUAL 6 )) - # CMake >= 3.6 supports setting the default project started for debugging (instead of trying to launch ALL_BUILD ...) - set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT yquake2) - set_target_properties(yquake2 PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/release) - endif() - - # Wrapper for the Windows binary - set(Wrapper-Source - src/win-wrapper/wrapper.c - ${BACKENDS_SRC_DIR}/windows/icon.rc - ) - add_executable(quake2 WIN32 ${Wrapper-Source}) - set_target_properties(quake2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release) -else() - add_executable(quake2 ${Client-Source} ${Client-SDL-Source} ${Client-Header} - ${Platform-Specific-Source} ${Backends-Generic-Source}) - set_target_properties(quake2 PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - ) - target_link_libraries(quake2 ${yquake2LinkerFlags} ${yquake2ClientLinkerFlags} - ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags}) - if(SDL3_SUPPORT) - target_link_libraries(quake2 SDL3::SDL3) - endif() -endif() - -# Quake 2 Dedicated Server -add_executable(q2ded ${Server-Source} ${Server-Header} ${Platform-Specific-Source} - ${Backends-Generic-Source}) -set_target_properties(q2ded PROPERTIES - COMPILE_DEFINITIONS "DEDICATED_ONLY" - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - ) -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm) -else() - target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ServerLinkerFlags} ${yquake2ZLibLinkerFlags}) -endif() - -# Build the game dynamic library -add_library(game MODULE ${Game-Source} ${Game-Header}) -set_target_properties(game PROPERTIES - PREFIX "" - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(isMultiConfig) # multi-config, like Visual Studio solution - set_target_properties(game PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/$/baseq2 - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/$/baseq2 - ) -else() # single-config, like normal Makefiles - set_target_properties(game PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/baseq2 - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/baseq2 - ) -endif() -target_link_libraries(game ${yquake2LinkerFlags}) - -if(${GL1_RENDERER}) - -# Build the GL1 dynamic library -add_library(ref_gl1 MODULE ${GL1-Source} ${GL1-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gl1 PROPERTIES - PREFIX "" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_link_libraries(ref_gl1 ${yquake2LinkerFlags} ${yquake2OpenGLLinkerFlags} - ${yquake2SDLLinkerFlags}) -if(SDL3_SUPPORT) - target_link_libraries(ref_gl1 SDL3::SDL3) -endif() - -endif() if(${GL3_RENDERER}) - -# Build the GL3 dynamic library -add_library(ref_gl3 MODULE ${GL3-Source} ${Glad-GL3-Source} ${GL3-Header} ${Glad-GL3-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gl3 PROPERTIES - PREFIX "" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_include_directories(ref_gl3 PRIVATE ${CMAKE_SOURCE_DIR}/src/client/refresh/gl3/glad/include) -target_link_libraries(ref_gl3 ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) -if(SDL3_SUPPORT) - target_link_libraries(ref_gl3 SDL3::SDL3) -endif() - -endif() - -if(${GLES3_RENDERER}) - -# Build the GLES3 dynamic library -add_library(ref_gles3 MODULE ${GL3-Source} ${Glad-GLES3-Source} ${GL3-Header} ${Glad-GLES3-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gles3 PROPERTIES - PREFIX "" - #COMPILE_DEFINITIONS "YQ2_GL3_GLES3=1;YQ2_GL3_GLES=1" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_include_directories(ref_gles3 PRIVATE ${CMAKE_SOURCE_DIR}/src/client/refresh/gl3/glad-gles3/include) -target_compile_definitions(ref_gles3 PRIVATE YQ2_GL3_GLES3=1 YQ2_GL3_GLES=1) -target_link_libraries(ref_gles3 ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) -if(SDL3_SUPPORT) - target_link_libraries(ref_gles3 SDL3::SDL3) + add_subdirectory(${REF_SRC_DIR}/gl3) endif() - -endif() - -if(${SOFT_RENDERER}) - -# Build the soft renderer dynamic library -add_library(ref_soft MODULE ${SOFT-Source} ${SOFT-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_soft PROPERTIES - PREFIX "" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_link_libraries(ref_soft ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) -if(SDL3_SUPPORT) - target_link_libraries(ref_soft SDL3::SDL3) -endif() - -endif() - -if(${GLES1_RENDERER}) - -# Build the GLES1 dynamic library -add_library(ref_gles1 MODULE ${GL1-Source} ${Glad-GLES1-Source} ${GL1-Header} ${Glad-GLES1-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gles1 PROPERTIES - PREFIX "" - #COMPILE_DEFINITIONS "YQ2_GL1_GLES=1" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_include_directories(ref_gles1 PRIVATE ${CMAKE_SOURCE_DIR}/src/client/refresh/gl1/glad-gles1/include) -target_compile_definitions(ref_gles1 PRIVATE YQ2_GL1_GLES=1) -target_link_libraries(ref_gles1 ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) -if(SDL3_SUPPORT) - target_link_libraries(ref_gles1 SDL3::SDL3) -endif() - -endif() - diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..edd2e89f6 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,44 @@ +{ + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 31, + "patch": 0 + }, + "configurePresets": [ + { + "name": "debug", + "displayName": "Debug (Ninja)", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/debug", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "release", + "displayName": "Release (Ninja)", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/release", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "reldeb", + "displayName": "Release with debug info (Ninja)", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/reldeb", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "RelWithDebInfo" + } + } + ], + "buildPresets": [ + { "name": "debug", "configurePreset": "debug" }, + { "name": "release", "configurePreset": "release"}, + { "name": "reldeb", "configurePreset": "reldeb"} + ] +} + + diff --git a/Makefile b/Makefile deleted file mode 100644 index 378b47c19..000000000 --- a/Makefile +++ /dev/null @@ -1,1334 +0,0 @@ -# ------------------------------------------------------ # -# Makefile for the "Yamagi Quake 2 Client" # -# # -# Just type "make" to compile the # -# - Client (quake2) # -# - Server (q2ded) # -# - Quake II Game (baseq2) # -# - Renderer libraries (gl1, gl3, soft) # -# # -# Base dependencies: # -# - SDL 2 or SDL 3 # -# - libGL # -# - Vulkan headers # -# # -# Optional dependencies: # -# - CURL # -# - OpenAL # -# # -# Platforms: # -# - FreeBSD # -# - Linux # -# - NetBSD # -# - OpenBSD # -# - OS X # -# - Windows (MinGW) # -# ------------------------------------------------------ # - -# Variables -# --------- - -# - ASAN: Builds with address sanitizer, includes DEBUG. -# - DEBUG: Builds a debug build, forces -O0 and adds debug symbols. -# - VERBOSE: Prints full compile, linker and misc commands. -# - UBSAN: Builds with undefined behavior sanitizer, includes DEBUG. - -# ---------- - -# User configurable options -# ------------------------- - -# Enables HTTP support through cURL. Used for -# HTTP download. -WITH_CURL:=yes - -# Enables the optional OpenAL sound system. -# To use it your system needs libopenal.so.1 -# or openal32.dll (we recommend openal-soft) -# installed -WITH_OPENAL:=yes - -# Sets an RPATH to $ORIGIN/lib. It can be used to -# inject custom libraries, e.g. a patches libSDL.so -# or libopenal.so. Not supported on Windows. -WITH_RPATH:=yes - -# When disabled SDL 2 is used instead of SDL 3. -WITH_SDL3:=yes - -# Enable systemwide installation of game assets. -WITH_SYSTEMWIDE:=no - -# This will set the default SYSTEMDIR, a non-empty string -# would actually be used. On Windows normals slashes (/) -# instead of backslashed (\) should be used! The string -# MUST NOT be surrounded by quotation marks! -WITH_SYSTEMDIR:="" - -# This will set the build options to create an MacOS .app-bundle. -# The app-bundle itself will not be created, but the runtime paths -# will be set to expect the game-data in *.app/ -# Contents/Resources -OSX_APP:=yes - -# This is an optional configuration file, it'll be used in -# case of presence. -CONFIG_FILE:=config.mk - -# ---------- - -# In case a of a configuration file being present, we'll just use it -ifeq ($(wildcard $(CONFIG_FILE)), $(CONFIG_FILE)) -include $(CONFIG_FILE) -endif - -# Detect the OS -ifdef SystemRoot -YQ2_OSTYPE ?= Windows -else -YQ2_OSTYPE ?= $(shell uname -s) -endif - -# Special case for MinGW -ifneq (,$(findstring MINGW,$(YQ2_OSTYPE))) -YQ2_OSTYPE := Windows -endif - -# Detect the architecture -ifeq ($(YQ2_OSTYPE), Windows) -ifdef MINGW_CHOST -ifeq ($(MINGW_CHOST), x86_64-w64-mingw32) -YQ2_ARCH ?= x86_64 -else # i686-w64-mingw32 -YQ2_ARCH ?= i386 -endif -else # windows, but MINGW_CHOST not defined -ifdef PROCESSOR_ARCHITEW6432 -# 64 bit Windows -YQ2_ARCH ?= $(PROCESSOR_ARCHITEW6432) -else -# 32 bit Windows -YQ2_ARCH ?= $(PROCESSOR_ARCHITECTURE) -endif -endif # windows but MINGW_CHOST not defined -else -ifneq ($(YQ2_OSTYPE), Darwin) -# Normalize some abiguous YQ2_ARCH strings -YQ2_ARCH ?= $(shell uname -m | sed -e 's/i.86/i386/' -e 's/amd64/x86_64/' -e 's/arm64/aarch64/' -e 's/^arm.*/arm/') -else -YQ2_ARCH ?= $(shell uname -m) -endif -endif - -# Detect the compiler -ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1) -COMPILER := clang -COMPILERVER := $(shell $(CC) -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/') -else ifeq ($(shell $(CC) -v 2>&1 | grep -c -E "(gcc version|gcc-Version)"), 1) -COMPILER := gcc -COMPILERVER := $(shell $(CC) -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/') -else -COMPILER := unknown -endif - -# ASAN includes DEBUG -ifdef ASAN -DEBUG=1 -endif - -# UBSAN includes DEBUG -ifdef UBSAN -DEBUG=1 -endif - -# Used to detect SDL, needs to be overridable for cross-compilation -PKG_CONFIG ?= pkgconf - -# ---------- - -# Base CFLAGS. These may be overridden by the environment. -# Highest supported optimizations are -O2, higher levels -# will likely break this crappy code. -ifdef DEBUG -CFLAGS ?= -O0 -g -Wall -pipe -DDEBUG -ifdef ASAN -override CFLAGS += -fsanitize=address -DUSE_SANITIZER -endif -ifdef UBSAN -override CFLAGS += -fsanitize=undefined -DUSE_SANITIZER -endif -else -CFLAGS ?= -O2 -Wall -pipe -fomit-frame-pointer -endif - -# Always needed are: -# -fno-strict-aliasing since the source doesn't comply -# with strict aliasing rules and it's next to impossible -# to get it there... -# -fwrapv for defined integer wrapping. MSVC6 did this -# and the game code requires it. -# -fvisibility=hidden to keep symbols hidden. This is -# mostly best practice and not really necessary. -override CFLAGS += -fno-strict-aliasing -fwrapv -fvisibility=hidden - -# -MMD to generate header dependencies. Unsupported by -# the Clang shipped with OS X. -ifneq ($(YQ2_OSTYPE), Darwin) -override CFLAGS += -MMD -endif - -# OS X architecture. -ifeq ($(YQ2_OSTYPE), Darwin) -override CFLAGS += -arch $(YQ2_ARCH) -endif - -# ---------- - -# ARM needs a sane minimum architecture. We need the `yield` -# opcode, arm6k is the first iteration that supports it. arm6k -# is also the first Raspberry PI generation and older hardware -# is likely too slow to run the game. We're not enforcing the -# minimum architecture, but if you're build for something older -# like arm5 the `yield` opcode isn't compiled in and the game -# (especially q2ded) will consume more CPU time than necessary. -ifeq ($(YQ2_ARCH), arm) -CFLAGS += -march=armv6k -endif - -# ---------- - -# Switch of some annoying warnings. -ifeq ($(COMPILER), clang) - # -Wno-missing-braces because otherwise clang complains - # about totally valid 'vec3_t bla = {0}' constructs. - # -fno-common avoids linker warnings due - # uninitialized global variables treated as "common". - # On most platforms clang sets no-commom by default, - # MacOS is a prominent exception. - override CFLAGS += -Wno-missing-braces -fno-common -else ifeq ($(COMPILER), gcc) - # GCC 8.0 or higher. - ifeq ($(shell test $(COMPILERVER) -ge 80000; echo $$?),0) - # -Wno-format-truncation and -Wno-format-overflow - # because GCC spams about 50 false positives. - override CFLAGS += -Wno-format-truncation -Wno-format-overflow - endif -endif - -# ---------- - -# Defines the operating system and architecture -override CFLAGS += -DYQ2OSTYPE=\"$(YQ2_OSTYPE)\" -DYQ2ARCH=\"$(YQ2_ARCH)\" - -# ---------- - -# For reproduceable builds, look here for details: -# https://reproducible-builds.org/specs/source-date-epoch/ -ifdef SOURCE_DATE_EPOCH -override CFLAGS += -DBUILD_DATE=\"$(shell date --utc --date="@${SOURCE_DATE_EPOCH}" +"%b %_d %Y" | sed -e 's/ /\\ /g')\" -endif - -# ---------- - -# Using the default x87 float math on 32bit x86 causes rounding trouble -# -ffloat-store could work around that, but the better solution is to -# just enforce SSE - every x86 CPU since Pentium3 supports that -# and this should even improve the performance on old CPUs -ifeq ($(YQ2_ARCH), i386) -override CFLAGS += -msse -mfpmath=sse -endif - -# Force SSE math on x86_64. All sane compilers should do this -# anyway, just to protect us from broken Linux distros. -ifeq ($(YQ2_ARCH), x86_64) -override CFLAGS += -mfpmath=sse -endif - -# Disable floating-point expression contraction. While this shouldn't be -# a problem for C (only for C++) better be safe than sorry. See -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100839 for details. -ifeq ($(COMPILER), gcc) -override CFLAGS += -ffp-contract=off -endif - -# ---------- - -# Systemwide installation. -ifeq ($(WITH_SYSTEMWIDE),yes) -override CFLAGS += -DSYSTEMWIDE -ifneq ($(WITH_SYSTEMDIR),"") -override CFLAGS += -DSYSTEMDIR=\"$(WITH_SYSTEMDIR)\" -endif -endif - -# ---------- - -# We don't support encrypted ZIP files. -ZIPCFLAGS := -DNOUNCRYPT - -# Just set IOAPI_NO_64 on everything that's not Linux or Windows, -# otherwise minizip will use fopen64(), fseek64() and friends that -# may be unavailable. This is - of course - not really correct, in -# a better world we would set -DIOAPI_NO_64 to force everything to -# fopen(), fseek() and so on and -D_FILE_OFFSET_BITS=64 to let the -# libc headers do their work. Currently we can't do that because -# Quake II uses nearly everywere int instead of off_t... -# -# This may have the side effect that ZIP files larger than 2GB are -# unsupported. But I doubt that anyone has such large files, they -# would likely hit other internal limits. -ifneq ($(YQ2_OSTYPE),Windows) -ifneq ($(YQ2_OSTYPE),Linux) -ZIPCFLAGS += -DIOAPI_NO_64 -endif -endif - -# ---------- - -# Extra CFLAGS for SDL. -ifeq ($(WITH_SDL3),yes) -SDLCFLAGS := $(shell $(PKG_CONFIG) --cflags sdl3) -SDLCFLAGS += -DUSE_SDL3 -else -SDLCFLAGS := $(shell sdl2-config --cflags) -endif - -ifdef NO_SDL_GYRO -SDLCFLAGS += -DNO_SDL_GYRO -endif - -# ---------- - -# Base include path. -ifeq ($(YQ2_OSTYPE),Linux) -INCLUDE ?= -I/usr/include -else ifeq ($(YQ2_OSTYPE),FreeBSD) -INCLUDE ?= -I/usr/local/include -else ifeq ($(YQ2_OSTYPE),NetBSD) -INCLUDE ?= -I/usr/X11R7/include -I/usr/pkg/include -else ifeq ($(YQ2_OSTYPE),OpenBSD) -INCLUDE ?= -I/usr/local/include -else ifeq ($(YQ2_OSTYPE),Windows) -INCLUDE ?= -I/usr/include -else ifeq ($(YQ2_OSTYPE),Darwin) -INCLUDE ?= -I/usr/local/include -I/opt/homebrew/include -endif - -# ---------- - -# Base LDFLAGS. This is just the library path. -ifeq ($(YQ2_OSTYPE),Linux) -LDFLAGS ?= -L/usr/lib -else ifeq ($(YQ2_OSTYPE),FreeBSD) -LDFLAGS ?= -L/usr/local/lib -else ifeq ($(YQ2_OSTYPE),NetBSD) -LDFLAGS ?= -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -else ifeq ($(YQ2_OSTYPE),OpenBSD) -LDFLAGS ?= -L/usr/local/lib -else ifeq ($(YQ2_OSTYPE),Windows) -LDFLAGS ?= -L/usr/lib -else ifeq ($(YQ2_OSTYPE),Darwin) -LDFLAGS ?= -L/usr/local/lib -L/opt/homebrew/lib -endif - -# Link address sanitizer if requested. -ifdef ASAN -override LDFLAGS += -fsanitize=address -endif - -# Link undefined behavior sanitizer if requested. -ifdef UBSAN -override LDFLAGS += -fsanitize=undefined -endif - -# Required libraries. -ifeq ($(YQ2_OSTYPE),Linux) -LDLIBS ?= -lm -ldl -rdynamic -else ifeq ($(YQ2_OSTYPE),FreeBSD) -LDLIBS ?= -lm -else ifeq ($(YQ2_OSTYPE),NetBSD) -LDLIBS ?= -lm -else ifeq ($(YQ2_OSTYPE),OpenBSD) -LDLIBS ?= -lm -else ifeq ($(YQ2_OSTYPE),Windows) -LDLIBS ?= -lws2_32 -lwinmm -static-libgcc -else ifeq ($(YQ2_OSTYPE), Darwin) -LDLIBS ?= -arch $(YQ2_ARCH) -else ifeq ($(YQ2_OSTYPE), Haiku) -LDLIBS ?= -lm -lnetwork -else ifeq ($(YQ2_OSTYPE), SunOS) -LDLIBS ?= -lm -lsocket -lnsl -endif - -# ASAN and UBSAN must not be linked -# with --no-undefined. OSX and OpenBSD -# don't support it at all. -ifndef ASAN -ifndef UBSAN -ifneq ($(YQ2_OSTYPE), Darwin) -ifneq ($(YQ2_OSTYPE), OpenBSD) -override LDFLAGS += -Wl,--no-undefined -endif -endif -endif -endif - -# ---------- - -# Extra LDFLAGS for SDL -ifeq ($(WITH_SDL3),yes) -ifeq ($(YQ2_OSTYPE), Darwin) -SDLLDFLAGS := -lSDL3 -else -SDLLDFLAGS := $(shell $(PKG_CONFIG) --libs sdl3) -endif -else -ifeq ($(YQ2_OSTYPE), Darwin) -SDLLDFLAGS := -lSDL2 -else -SDLLDFLAGS := $(shell sdl2-config --libs) -endif -endif - -# The renderer libs don't need libSDL2main, libmingw32 or -mwindows. -ifeq ($(YQ2_OSTYPE), Windows) -DLL_SDLLDFLAGS = $(subst -mwindows,,$(subst -lmingw32,,$(subst -lSDL2main,,$(SDLLDFLAGS)))) -endif - -# ---------- - -# When make is invoked by "make VERBOSE=1" print -# the compiler and linker commands. -ifdef VERBOSE -Q := -else -Q := @ -endif - -# ---------- - -# Phony targets -.PHONY : all client game icon server ref_gl1 ref_gl3 ref_gles1 ref_gles3 ref_soft - -# ---------- - -# Builds everything but the GLES1 renderer -all: config client server game ref_gl1 ref_gl3 ref_gles3 ref_soft - -# ---------- - -# Builds everything, including the GLES1 renderer -with_gles1: all ref_gles1 - -# ---------- - -# Print config values -config: - @echo "Build configuration" - @echo "============================" - @echo "YQ2_ARCH = $(YQ2_ARCH) COMPILER = $(COMPILER)" - @echo "WITH_CURL = $(WITH_CURL)" - @echo "WITH_OPENAL = $(WITH_OPENAL)" - @echo "WITH_RPATH = $(WITH_RPATH)" - @echo "WITH_SDL3 = $(WITH_SDL3)" - @echo "WITH_SYSTEMWIDE = $(WITH_SYSTEMWIDE)" - @echo "WITH_SYSTEMDIR = $(WITH_SYSTEMDIR)" - @echo "============================" - @echo "" - -# ---------- - -# Special target to compile the icon on Windows -ifeq ($(YQ2_OSTYPE), Windows) -icon: - @echo "===> WR build/icon/icon.res" - ${Q}mkdir -p build/icon - ${Q}windres src/backends/windows/icon.rc -O COFF -o build/icon/icon.res -endif - -# ---------- - -# Cleanup -clean: - @echo "===> CLEAN" - ${Q}rm -Rf build release/* - -cleanall: - @echo "===> CLEAN" - ${Q}rm -Rf build release - -# ---------- - -# The client -ifeq ($(YQ2_OSTYPE), Windows) -client: - @echo "===> Building yquake2.exe" - ${Q}mkdir -p release - $(MAKE) release/yquake2.exe - @echo "===> Building quake2.exe Wrapper" - $(MAKE) release/quake2.exe - -build/client/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(ZIPCFLAGS) $(INCLUDE) -o $@ $< - -release/yquake2.exe : LDFLAGS += -mwindows - -ifeq ($(WITH_CURL),yes) -release/yquake2.exe : CFLAGS += -DUSE_CURL -endif - -ifeq ($(WITH_OPENAL),yes) -release/yquake2.exe : CFLAGS += -DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER='"openal32.dll"' -endif - -else # not Windows - -client: - @echo "===> Building quake2" - ${Q}mkdir -p release - $(MAKE) release/quake2 - -ifeq ($(YQ2_OSTYPE), Darwin) -build/client/%.o : %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -arch $(YQ2_ARCH) -x objective-c -c $(CFLAGS) $(SDLCFLAGS) $(ZIPCFLAGS) $(INCLUDE) $< -o $@ -else -build/client/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(ZIPCFLAGS) $(INCLUDE) -o $@ $< -endif - -release/quake2 : CFLAGS += -Wno-unused-result - -ifeq ($(WITH_CURL),yes) -release/quake2 : CFLAGS += -DUSE_CURL -endif - -ifeq ($(WITH_OPENAL),yes) -ifeq ($(YQ2_OSTYPE), OpenBSD) -release/quake2 : CFLAGS += -DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER='"libopenal.so"' -else ifeq ($(YQ2_OSTYPE), Darwin) -OPENAL_PATH ?= $(shell brew --prefix openal-soft) -release/quake2 : CFLAGS += -DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER='"libopenal.dylib"' -I$(OPENAL_PATH)/include -release/quake2 : LDFLAGS += -L$(OPENAL_PATH)/lib -rpath $(OPENAL_PATH)/lib -else -release/quake2 : CFLAGS += -DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER='"libopenal.so.1"' -endif -endif - -ifeq ($(YQ2_OSTYPE), Linux) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -endif - -ifeq ($(YQ2_OSTYPE), Darwin) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -endif - -ifeq ($(YQ2_OSTYPE), SunOS) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -endif - -ifeq ($(YQ2_OSTYPE), FreeBSD) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -release/quake2 : LDLIBS += -lexecinfo -endif - -ifeq ($(YQ2_OSTYPE), NetBSD) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -release/quake2 : LDLIBS += -lexecinfo -endif - -ifeq ($(YQ2_OSTYPE), OpenBSD) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -release/quake2 : LDLIBS += -lexecinfo -endif - -ifeq ($(YQ2_OSTYPE), Haiku) -release/quake2 : CFLAGS += -DHAVE_EXECINFO -release/quake2 : LDLIBS += -lexecinfo -endif - -ifeq ($(WITH_RPATH),yes) -ifeq ($(YQ2_OSTYPE), Darwin) -release/quake2 : LDFLAGS += -Wl,-rpath,'@executable_path/lib' -else -release/quake2 : LDFLAGS += -Wl,-z,origin,-rpath='$$ORIGIN/lib' -endif -endif -endif - -# ---------- - -# The server -ifeq ($(YQ2_OSTYPE), Windows) -server: - @echo "===> Building q2ded" - ${Q}mkdir -p release - $(MAKE) release/q2ded.exe - -build/server/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(ZIPCFLAGS) $(INCLUDE) -o $@ $< - -release/q2ded.exe : CFLAGS += -DDEDICATED_ONLY - -else # not Windows - -server: - @echo "===> Building q2ded" - ${Q}mkdir -p release - $(MAKE) release/q2ded - -build/server/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(ZIPCFLAGS) $(INCLUDE) -o $@ $< - -release/q2ded : CFLAGS += -DDEDICATED_ONLY -Wno-unused-result - -ifeq ($(YQ2_OSTYPE), FreeBSD) -release/q2ded : LDLIBS += -lexecinfo -endif -endif - -# ---------- - -# The OpenGL 1.x renderer lib - -ifeq ($(YQ2_OSTYPE), Windows) - -ref_gl1: - @echo "===> Building ref_gl1.dll" - $(MAKE) release/ref_gl1.dll - -release/ref_gl1.dll : LDFLAGS += -shared -release/ref_gl1.dll : LDLIBS += -lopengl32 - -else ifeq ($(YQ2_OSTYPE), Darwin) - -ref_gl1: - @echo "===> Building ref_gl1.dylib" - $(MAKE) release/ref_gl1.dylib - - -release/ref_gl1.dylib : LDFLAGS += -shared -framework OpenGL - -else # not Windows or Darwin - -ref_gl1: - @echo "===> Building ref_gl1.so" - $(MAKE) release/ref_gl1.so - - -release/ref_gl1.so : CFLAGS += -fPIC -release/ref_gl1.so : LDFLAGS += -shared -release/ref_gl1.so : LDLIBS += -lGL - -endif # OS specific ref_gl1 stuff - -build/ref_gl1/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(INCLUDE) -o $@ $< - -# ---------- - -# The OpenGL ES 1.0 renderer lib - -ifeq ($(YQ2_OSTYPE), Windows) - -ref_gles1: - @echo "===> Building ref_gles1.dll" - $(MAKE) release/ref_gles1.dll - -release/ref_gles1.dll : GLAD_INCLUDE = -Isrc/client/refresh/gl1/glad-gles1/include -release/ref_gles1.dll : CFLAGS += -DYQ2_GL1_GLES -release/ref_gles1.dll : LDFLAGS += -shared - -else ifeq ($(YQ2_OSTYPE), Darwin) - -ref_gles1: - @echo "===> Building ref_gles1.dylib" - $(MAKE) release/ref_gles1.dylib - -release/ref_gles1.dylib : GLAD_INCLUDE = -Isrc/client/refresh/gl1/glad-gles1/include -release/ref_gles1.dylib : CFLAGS += -DYQ2_GL1_GLES -release/ref_gles1.dylib : LDFLAGS += -shared - -else # not Windows or Darwin - -ref_gles1: - @echo "===> Building ref_gles1.so" - $(MAKE) release/ref_gles1.so - -release/ref_gles1.so : GLAD_INCLUDE = -Isrc/client/refresh/gl1/glad-gles1/include -release/ref_gles1.so : CFLAGS += -DYQ2_GL1_GLES -fPIC -release/ref_gles1.so : LDFLAGS += -shared - -endif # OS specific ref_gles1 stuff - -build/ref_gles1/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(INCLUDE) $(GLAD_INCLUDE) -o $@ $< - -# ---------- - -# The OpenGL 3.x renderer lib - -ifeq ($(YQ2_OSTYPE), Windows) - -ref_gl3: - @echo "===> Building ref_gl3.dll" - $(MAKE) release/ref_gl3.dll - -release/ref_gl3.dll : GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad/include -release/ref_gl3.dll : LDFLAGS += -shared - -else ifeq ($(YQ2_OSTYPE), Darwin) - -ref_gl3: - @echo "===> Building ref_gl3.dylib" - $(MAKE) release/ref_gl3.dylib - -release/ref_gl3.dylib : GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad/include -release/ref_gl3.dylib : LDFLAGS += -shared - -else # not Windows or Darwin - -ref_gl3: - @echo "===> Building ref_gl3.so" - $(MAKE) release/ref_gl3.so - -release/ref_gl3.so : GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad/include -release/ref_gl3.so : CFLAGS += -fPIC -release/ref_gl3.so : LDFLAGS += -shared - -endif # OS specific ref_gl3 stuff - -build/ref_gl3/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(INCLUDE) $(GLAD_INCLUDE) -o $@ $< - -# ---------- - -# The OpenGL ES 3.0 renderer lib - -ifeq ($(YQ2_OSTYPE), Windows) - -ref_gles3: - @echo "===> Building ref_gles3.dll" - $(MAKE) release/ref_gles3.dll - -release/ref_gles3.dll : GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad-gles3/include - -# YQ2_GL3_GLES3 is for GLES3, DYQ2_GL3_GLES is for things that are identical -# in both GLES3 and GLES2 (in case we ever support that) -release/ref_gles3.dll : CFLAGS += -DYQ2_GL3_GLES3 -DYQ2_GL3_GLES - -release/ref_gles3.dll : LDFLAGS += -shared - -else ifeq ($(YQ2_OSTYPE), Darwin) - -ref_gles3: - @echo "===> Building ref_gles3.dylib" - $(MAKE) release/ref_gles3.dylib - -release/ref_gles3.dylib : GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad-gles3/include - -# YQ2_GL3_GLES3 is for GLES3, DYQ2_GL3_GLES is for things that are identical -# in both GLES3 and GLES2 (in case we ever support that) -release/ref_gles3.dylib : CFLAGS += -DYQ2_GL3_GLES3 -DYQ2_GL3_GLES - -release/ref_gles3.dylib : LDFLAGS += -shared - -else # not Windows or Darwin - -ref_gles3: - @echo "===> Building ref_gles3.so" - $(MAKE) release/ref_gles3.so - -release/ref_gles3.so : GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad-gles3/include - -# YQ2_GL3_GLES3 is for GLES3, DYQ2_GL3_GLES is for things that are identical -# in both GLES3 and GLES2 (in case we ever support that) -release/ref_gles3.so : CFLAGS += -DYQ2_GL3_GLES3 -DYQ2_GL3_GLES -fPIC - -release/ref_gles3.so : LDFLAGS += -shared - -GLAD_INCLUDE = -Isrc/client/refresh/gl3/glad-gles3/include - -endif # OS specific ref_gl3 stuff - -build/ref_gles3/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(INCLUDE) $(GLAD_INCLUDE) -o $@ $< - -# ---------- - -# The soft renderer lib - -ifeq ($(YQ2_OSTYPE), Windows) - -ref_soft: - @echo "===> Building ref_soft.dll" - $(MAKE) release/ref_soft.dll - -release/ref_soft.dll : LDFLAGS += -shared - -else ifeq ($(YQ2_OSTYPE), Darwin) - -ref_soft: - @echo "===> Building ref_soft.dylib" - $(MAKE) release/ref_soft.dylib - -release/ref_soft.dylib : LDFLAGS += -shared - -else # not Windows or Darwin - -ref_soft: - @echo "===> Building ref_soft.so" - $(MAKE) release/ref_soft.so - -release/ref_soft.so : CFLAGS += -fPIC -release/ref_soft.so : LDFLAGS += -shared - -endif # OS specific ref_soft stuff - -build/ref_soft/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) $(INCLUDE) -o $@ $< - -# ---------- - -# The baseq2 game -ifeq ($(YQ2_OSTYPE), Windows) -game: - @echo "===> Building baseq2/game.dll" - ${Q}mkdir -p release/baseq2 - $(MAKE) release/baseq2/game.dll - -build/baseq2/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< - -release/baseq2/game.dll : LDFLAGS += -shared - -else ifeq ($(YQ2_OSTYPE), Darwin) - -game: - @echo "===> Building baseq2/game.dylib" - ${Q}mkdir -p release/baseq2 - $(MAKE) release/baseq2/game.dylib - -build/baseq2/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< - -release/baseq2/game.dylib : CFLAGS += -fPIC -release/baseq2/game.dylib : LDFLAGS += -shared - -else # not Windows or Darwin - -game: - @echo "===> Building baseq2/game.so" - ${Q}mkdir -p release/baseq2 - $(MAKE) release/baseq2/game.so - -build/baseq2/%.o: %.c - @echo "===> CC $<" - ${Q}mkdir -p $(@D) - ${Q}$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $< - -release/baseq2/game.so : CFLAGS += -fPIC -Wno-unused-result -release/baseq2/game.so : LDFLAGS += -shared -endif - -# ---------- - -# Used by the game -GAME_OBJS_ = \ - src/common/shared/flash.o \ - src/common/shared/rand.o \ - src/common/shared/shared.o \ - src/game/g_ai.o \ - src/game/g_chase.o \ - src/game/g_cmds.o \ - src/game/g_combat.o \ - src/game/g_func.o \ - src/game/g_items.o \ - src/game/g_main.o \ - src/game/g_misc.o \ - src/game/g_monster.o \ - src/game/g_phys.o \ - src/game/g_spawn.o \ - src/game/g_svcmds.o \ - src/game/g_target.o \ - src/game/g_trigger.o \ - src/game/g_turret.o \ - src/game/g_utils.o \ - src/game/g_weapon.o \ - src/game/monster/berserker/berserker.o \ - src/game/monster/boss2/boss2.o \ - src/game/monster/boss3/boss3.o \ - src/game/monster/boss3/boss31.o \ - src/game/monster/boss3/boss32.o \ - src/game/monster/brain/brain.o \ - src/game/monster/chick/chick.o \ - src/game/monster/flipper/flipper.o \ - src/game/monster/float/float.o \ - src/game/monster/flyer/flyer.o \ - src/game/monster/gladiator/gladiator.o \ - src/game/monster/gunner/gunner.o \ - src/game/monster/hover/hover.o \ - src/game/monster/infantry/infantry.o \ - src/game/monster/insane/insane.o \ - src/game/monster/medic/medic.o \ - src/game/monster/misc/move.o \ - src/game/monster/mutant/mutant.o \ - src/game/monster/parasite/parasite.o \ - src/game/monster/soldier/soldier.o \ - src/game/monster/supertank/supertank.o \ - src/game/monster/tank/tank.o \ - src/game/player/client.o \ - src/game/player/hud.o \ - src/game/player/trail.o \ - src/game/player/view.o \ - src/game/player/weapon.o \ - src/game/savegame/savegame.o - -# ---------- - -# Used by the client -CLIENT_OBJS_ := \ - src/backends/generic/misc.o \ - src/client/cl_cin.o \ - src/client/cl_image.o \ - src/client/cl_console.o \ - src/client/cl_download.o \ - src/client/cl_effects.o \ - src/client/cl_entities.o \ - src/client/cl_input.o \ - src/client/cl_inventory.o \ - src/client/cl_keyboard.o \ - src/client/cl_lights.o \ - src/client/cl_main.o \ - src/client/cl_network.o \ - src/client/cl_parse.o \ - src/client/cl_particles.o \ - src/client/cl_prediction.o \ - src/client/cl_screen.o \ - src/client/cl_tempentities.o \ - src/client/cl_view.o \ - src/client/curl/download.o \ - src/client/curl/qcurl.o \ - src/client/input/gyro.o \ - src/client/menu/menu.o \ - src/client/menu/qmenu.o \ - src/client/menu/videomenu.o \ - src/client/sound/ogg.o \ - src/client/sound/openal.o \ - src/client/sound/qal.o \ - src/client/sound/sdl.o \ - src/client/sound/sound.o \ - src/client/sound/wave.o \ - src/client/vid/vid.o \ - src/common/argproc.o \ - src/common/clientserver.o \ - src/common/collision.o \ - src/common/crc.o \ - src/common/cmdparser.o \ - src/common/cvar.o \ - src/common/filesystem.o \ - src/common/glob.o \ - src/common/md4.o \ - src/common/movemsg.o \ - src/common/frame.o \ - src/common/netchan.o \ - src/common/pmove.o \ - src/common/szone.o \ - src/common/zone.o \ - src/common/shared/flash.o \ - src/common/shared/rand.o \ - src/common/shared/shared.o \ - src/common/unzip/ioapi.o \ - src/common/unzip/unzip.o \ - src/common/unzip/miniz/miniz.o \ - src/common/unzip/miniz/miniz_tdef.o \ - src/common/unzip/miniz/miniz_tinfl.o \ - src/server/sv_cmd.o \ - src/server/sv_conless.o \ - src/server/sv_entities.o \ - src/server/sv_game.o \ - src/server/sv_init.o \ - src/server/sv_main.o \ - src/server/sv_save.o \ - src/server/sv_send.o \ - src/server/sv_user.o \ - src/server/sv_world.o - -ifeq ($(WITH_SDL3),yes) -CLIENT_OBJS_ += \ - src/client/input/sdl3.o \ - src/client/vid/glimp_sdl3.o -else -CLIENT_OBJS_ += \ - src/client/input/sdl2.o \ - src/client/vid/glimp_sdl2.o -endif - -ifeq ($(YQ2_OSTYPE), Windows) -CLIENT_OBJS_ += \ - src/backends/windows/main.o \ - src/backends/windows/network.o \ - src/backends/windows/system.o \ - src/backends/windows/shared/hunk.o -else -CLIENT_OBJS_ += \ - src/backends/unix/main.o \ - src/backends/unix/network.o \ - src/backends/unix/signalhandler.o \ - src/backends/unix/system.o \ - src/backends/unix/shared/hunk.o -endif - -# ---------- - -REFGL1_OBJS_ := \ - src/client/refresh/gl1/qgl.o \ - src/client/refresh/gl1/gl1_draw.o \ - src/client/refresh/gl1/gl1_image.o \ - src/client/refresh/gl1/gl1_light.o \ - src/client/refresh/gl1/gl1_lightmap.o \ - src/client/refresh/gl1/gl1_main.o \ - src/client/refresh/gl1/gl1_mesh.o \ - src/client/refresh/gl1/gl1_misc.o \ - src/client/refresh/gl1/gl1_model.o \ - src/client/refresh/gl1/gl1_scrap.o \ - src/client/refresh/gl1/gl1_surf.o \ - src/client/refresh/gl1/gl1_warp.o \ - src/client/refresh/gl1/gl1_sdl.o \ - src/client/refresh/gl1/gl1_buffer.o \ - src/client/refresh/files/common.o \ - src/client/refresh/files/surf.o \ - src/client/refresh/files/models.o \ - src/client/refresh/files/pcx.o \ - src/client/refresh/files/stb.o \ - src/client/refresh/files/wal.o \ - src/client/refresh/files/pvs.o \ - src/common/shared/shared.o \ - src/common/md4.o - -REFGL1_OBJS_GLADEES_ := \ - src/client/refresh/gl1/glad-gles1/src/glad.o - -ifeq ($(YQ2_OSTYPE), Windows) -REFGL1_OBJS_ += \ - src/backends/windows/shared/hunk.o -else # not Windows -REFGL1_OBJS_ += \ - src/backends/unix/shared/hunk.o -endif - -# ---------- - -REFGL3_OBJS_ := \ - src/client/refresh/gl3/gl3_draw.o \ - src/client/refresh/gl3/gl3_image.o \ - src/client/refresh/gl3/gl3_light.o \ - src/client/refresh/gl3/gl3_lightmap.o \ - src/client/refresh/gl3/gl3_main.o \ - src/client/refresh/gl3/gl3_mesh.o \ - src/client/refresh/gl3/gl3_misc.o \ - src/client/refresh/gl3/gl3_model.o \ - src/client/refresh/gl3/gl3_sdl.o \ - src/client/refresh/gl3/gl3_surf.o \ - src/client/refresh/gl3/gl3_warp.o \ - src/client/refresh/gl3/gl3_shaders.o \ - src/client/refresh/files/common.o \ - src/client/refresh/files/surf.o \ - src/client/refresh/files/models.o \ - src/client/refresh/files/pcx.o \ - src/client/refresh/files/stb.o \ - src/client/refresh/files/wal.o \ - src/client/refresh/files/pvs.o \ - src/common/shared/shared.o \ - src/common/md4.o - -REFGL3_OBJS_GLADE_ := \ - src/client/refresh/gl3/glad/src/glad.o - -REFGL3_OBJS_GLADEES_ := \ - src/client/refresh/gl3/glad-gles3/src/glad.o - -ifeq ($(YQ2_OSTYPE), Windows) -REFGL3_OBJS_ += \ - src/backends/windows/shared/hunk.o -else # not Windows -REFGL3_OBJS_ += \ - src/backends/unix/shared/hunk.o -endif - -# ---------- - -REFSOFT_OBJS_ := \ - src/client/refresh/soft/sw_aclip.o \ - src/client/refresh/soft/sw_alias.o \ - src/client/refresh/soft/sw_bsp.o \ - src/client/refresh/soft/sw_draw.o \ - src/client/refresh/soft/sw_edge.o \ - src/client/refresh/soft/sw_image.o \ - src/client/refresh/soft/sw_light.o \ - src/client/refresh/soft/sw_main.o \ - src/client/refresh/soft/sw_misc.o \ - src/client/refresh/soft/sw_model.o \ - src/client/refresh/soft/sw_part.o \ - src/client/refresh/soft/sw_poly.o \ - src/client/refresh/soft/sw_polyset.o \ - src/client/refresh/soft/sw_rast.o \ - src/client/refresh/soft/sw_scan.o \ - src/client/refresh/soft/sw_sprite.o \ - src/client/refresh/soft/sw_surf.o \ - src/client/refresh/files/surf.o \ - src/client/refresh/files/common.o \ - src/client/refresh/files/models.o \ - src/client/refresh/files/pcx.o \ - src/client/refresh/files/stb.o \ - src/client/refresh/files/wal.o \ - src/client/refresh/files/pvs.o \ - src/common/shared/shared.o \ - src/common/md4.o - -ifeq ($(YQ2_OSTYPE), Windows) -REFSOFT_OBJS_ += \ - src/backends/windows/shared/hunk.o -else # not Windows -REFSOFT_OBJS_ += \ - src/backends/unix/shared/hunk.o -endif - -# ---------- - -# Used by the server -SERVER_OBJS_ := \ - src/backends/generic/misc.o \ - src/common/argproc.o \ - src/common/clientserver.o \ - src/common/collision.o \ - src/common/crc.o \ - src/common/cmdparser.o \ - src/common/cvar.o \ - src/common/filesystem.o \ - src/common/glob.o \ - src/common/md4.o \ - src/common/frame.o \ - src/common/movemsg.o \ - src/common/netchan.o \ - src/common/pmove.o \ - src/common/szone.o \ - src/common/zone.o \ - src/common/shared/rand.o \ - src/common/shared/shared.o \ - src/common/unzip/ioapi.o \ - src/common/unzip/unzip.o \ - src/common/unzip/miniz/miniz.o \ - src/common/unzip/miniz/miniz_tdef.o \ - src/common/unzip/miniz/miniz_tinfl.o \ - src/server/sv_cmd.o \ - src/server/sv_conless.o \ - src/server/sv_entities.o \ - src/server/sv_game.o \ - src/server/sv_init.o \ - src/server/sv_main.o \ - src/server/sv_save.o \ - src/server/sv_send.o \ - src/server/sv_user.o \ - src/server/sv_world.o - -ifeq ($(YQ2_OSTYPE), Windows) -SERVER_OBJS_ += \ - src/backends/windows/main.o \ - src/backends/windows/network.o \ - src/backends/windows/system.o \ - src/backends/windows/shared/hunk.o -else # not Windows -SERVER_OBJS_ += \ - src/backends/unix/main.o \ - src/backends/unix/network.o \ - src/backends/unix/signalhandler.o \ - src/backends/unix/system.o \ - src/backends/unix/shared/hunk.o -endif - -# ---------- - -# Rewrite paths to our object directory. -CLIENT_OBJS = $(patsubst %,build/client/%,$(CLIENT_OBJS_)) -REFGL1_OBJS = $(patsubst %,build/ref_gl1/%,$(REFGL1_OBJS_)) -REFGLES1_OBJS = $(patsubst %,build/ref_gles1/%,$(REFGL1_OBJS_)) -REFGLES1_OBJS += $(patsubst %,build/ref_gles1/%,$(REFGL1_OBJS_GLADEES_)) -REFGL3_OBJS = $(patsubst %,build/ref_gl3/%,$(REFGL3_OBJS_)) -REFGL3_OBJS += $(patsubst %,build/ref_gl3/%,$(REFGL3_OBJS_GLADE_)) -REFGLES3_OBJS = $(patsubst %,build/ref_gles3/%,$(REFGL3_OBJS_)) -REFGLES3_OBJS += $(patsubst %,build/ref_gles3/%,$(REFGL3_OBJS_GLADEES_)) -REFSOFT_OBJS = $(patsubst %,build/ref_soft/%,$(REFSOFT_OBJS_)) -SERVER_OBJS = $(patsubst %,build/server/%,$(SERVER_OBJS_)) -GAME_OBJS = $(patsubst %,build/baseq2/%,$(GAME_OBJS_)) - -# ---------- - -# Generate header dependencies. -CLIENT_DEPS= $(CLIENT_OBJS:.o=.d) -GAME_DEPS= $(GAME_OBJS:.o=.d) -REFGL1_DEPS= $(REFGL1_OBJS:.o=.d) -REFGLES1_DEPS= $(REFGLES1_OBJS:.o=.d) -REFGL3_DEPS= $(REFGL3_OBJS:.o=.d) -REFGLES3_DEPS= $(REFGLES3_OBJS:.o=.d) -REFSOFT_DEPS= $(REFSOFT_OBJS:.o=.d) -SERVER_DEPS= $(SERVER_OBJS:.o=.d) - -# Suck header dependencies in. --include $(CLIENT_DEPS) --include $(GAME_DEPS) --include $(REFGL1_DEPS) --include $(REFGLES1_DEPS) --include $(REFGL3_DEPS) --include $(REFGLES3_DEPS) --include $(SERVER_DEPS) - -# ---------- - -# release/quake2 -ifeq ($(YQ2_OSTYPE), Windows) -release/yquake2.exe : $(CLIENT_OBJS) icon - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) build/icon/icon.res $(CLIENT_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ - $(Q)strip $@ -release/quake2.exe : src/win-wrapper/wrapper.c icon - $(Q)$(CC) -Wall -mwindows build/icon/icon.res src/win-wrapper/wrapper.c -o $@ - $(Q)strip $@ -else -release/quake2 : $(CLIENT_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(CLIENT_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -endif - -# release/q2ded -ifeq ($(YQ2_OSTYPE), Windows) -release/q2ded.exe : $(SERVER_OBJS) icon - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) build/icon/icon.res $(SERVER_OBJS) $(LDLIBS) -o $@ - $(Q)strip $@ -else -release/q2ded : $(SERVER_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(SERVER_OBJS) $(LDLIBS) -o $@ -endif - -# release/ref_gl1.so -ifeq ($(YQ2_OSTYPE), Windows) -release/ref_gl1.dll : $(REFGL1_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGL1_OBJS) $(LDLIBS) $(DLL_SDLLDFLAGS) -o $@ - $(Q)strip $@ -else ifeq ($(YQ2_OSTYPE), Darwin) -release/ref_gl1.dylib : $(REFGL1_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGL1_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -else -release/ref_gl1.so : $(REFGL1_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGL1_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -endif - -# release/ref_gles1.so -ifeq ($(YQ2_OSTYPE), Windows) -release/ref_gles1.dll : $(REFGLES1_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGLES1_OBJS) $(LDLIBS) $(DLL_SDLLDFLAGS) -o $@ - $(Q)strip $@ -else ifeq ($(YQ2_OSTYPE), Darwin) -release/ref_gles1.dylib : $(REFGLES1_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGLES1_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -else -release/ref_gles1.so : $(REFGLES1_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGLES1_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -endif - -# release/ref_gl3.so -ifeq ($(YQ2_OSTYPE), Windows) -release/ref_gl3.dll : $(REFGL3_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGL3_OBJS) $(LDLIBS) $(DLL_SDLLDFLAGS) -o $@ - $(Q)strip $@ -else ifeq ($(YQ2_OSTYPE), Darwin) -release/ref_gl3.dylib : $(REFGL3_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGL3_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -else -release/ref_gl3.so : $(REFGL3_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGL3_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -endif - -# release/ref_gles3.so -ifeq ($(YQ2_OSTYPE), Windows) -release/ref_gles3.dll : $(REFGLES3_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGLES3_OBJS) $(LDLIBS) $(DLL_SDLLDFLAGS) -o $@ - $(Q)strip $@ -else ifeq ($(YQ2_OSTYPE), Darwin) -release/ref_gles3.dylib : $(REFGLES3_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGLES3_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -else -release/ref_gles3.so : $(REFGLES3_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFGLES3_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -endif - -# release/ref_soft.so -ifeq ($(YQ2_OSTYPE), Windows) -release/ref_soft.dll : $(REFSOFT_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFSOFT_OBJS) $(LDLIBS) $(DLL_SDLLDFLAGS) -o $@ - $(Q)strip $@ -else ifeq ($(YQ2_OSTYPE), Darwin) -release/ref_soft.dylib : $(REFSOFT_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFSOFT_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -else -release/ref_soft.so : $(REFSOFT_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(REFSOFT_OBJS) $(LDLIBS) $(SDLLDFLAGS) -o $@ -endif - -# release/baseq2/game.so -ifeq ($(YQ2_OSTYPE), Windows) -release/baseq2/game.dll : $(GAME_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(GAME_OBJS) $(LDLIBS) -o $@ - $(Q)strip $@ -else ifeq ($(YQ2_OSTYPE), Darwin) -release/baseq2/game.dylib : $(GAME_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(GAME_OBJS) $(LDLIBS) -o $@ -else -release/baseq2/game.so : $(GAME_OBJS) - @echo "===> LD $@" - ${Q}$(CC) $(LDFLAGS) $(GAME_OBJS) $(LDLIBS) -o $@ -endif - -# ---------- diff --git a/src/backends/CMakeLists.txt b/src/backends/CMakeLists.txt new file mode 100644 index 000000000..d78cfcb10 --- /dev/null +++ b/src/backends/CMakeLists.txt @@ -0,0 +1,47 @@ +# Backend sources (platform-specific and shared) + +set(Backends-Generic-Source + ${BACKENDS_SRC_DIR}/generic/misc.c +) + +set(Backends-Unix-Source + ${BACKENDS_SRC_DIR}/unix/main.c + ${BACKENDS_SRC_DIR}/unix/network.c + ${BACKENDS_SRC_DIR}/unix/signalhandler.c + ${BACKENDS_SRC_DIR}/unix/system.c + ${BACKENDS_SRC_DIR}/unix/shared/hunk.c +) + +set(Backends-Windows-Source + ${BACKENDS_SRC_DIR}/windows/icon.rc + ${BACKENDS_SRC_DIR}/windows/main.c + ${BACKENDS_SRC_DIR}/windows/network.c + ${BACKENDS_SRC_DIR}/windows/system.c + ${BACKENDS_SRC_DIR}/windows/shared/hunk.c +) + +set(Backends-Windows-Header + ${BACKENDS_SRC_DIR}/windows/header/resource.h +) + +set(REF-Windows-Source + ${BACKENDS_SRC_DIR}/windows/shared/hunk.c +) + +set(REF-Unix-Source + ${BACKENDS_SRC_DIR}/unix/shared/hunk.c +) + +# Select platform-specific sources +if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(Platform-Specific-Source ${Backends-Windows-Source} ${Backends-Windows-Header} PARENT_SCOPE) + set(REF-Platform-Specific-Source ${REF-Windows-Source} PARENT_SCOPE) +else() + set(Platform-Specific-Source ${Backends-Unix-Source} PARENT_SCOPE) + set(REF-Platform-Specific-Source ${REF-Unix-Source} PARENT_SCOPE) +endif() + +# Export generic sources as well +set(Backends-Generic-Source ${Backends-Generic-Source} PARENT_SCOPE) + + diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt new file mode 100644 index 000000000..327a1fd9d --- /dev/null +++ b/src/client/CMakeLists.txt @@ -0,0 +1,139 @@ +# Client executable (quake2) + +set(Client-Source + ${CLIENT_SRC_DIR}/cl_cin.c + ${CLIENT_SRC_DIR}/cl_console.c + ${CLIENT_SRC_DIR}/cl_download.c + ${CLIENT_SRC_DIR}/cl_effects.c + ${CLIENT_SRC_DIR}/cl_entities.c + ${CLIENT_SRC_DIR}/cl_input.c + ${CLIENT_SRC_DIR}/cl_image.c + ${CLIENT_SRC_DIR}/cl_inventory.c + ${CLIENT_SRC_DIR}/cl_keyboard.c + ${CLIENT_SRC_DIR}/cl_lights.c + ${CLIENT_SRC_DIR}/cl_main.c + ${CLIENT_SRC_DIR}/cl_network.c + ${CLIENT_SRC_DIR}/cl_parse.c + ${CLIENT_SRC_DIR}/cl_particles.c + ${CLIENT_SRC_DIR}/cl_prediction.c + ${CLIENT_SRC_DIR}/cl_screen.c + ${CLIENT_SRC_DIR}/cl_tempentities.c + ${CLIENT_SRC_DIR}/cl_view.c + ${CLIENT_SRC_DIR}/curl/download.c + ${CLIENT_SRC_DIR}/curl/qcurl.c + ${CLIENT_SRC_DIR}/input/gyro.c + ${CLIENT_SRC_DIR}/menu/menu.c + ${CLIENT_SRC_DIR}/menu/qmenu.c + ${CLIENT_SRC_DIR}/menu/videomenu.c + ${CLIENT_SRC_DIR}/sound/ogg.c + ${CLIENT_SRC_DIR}/sound/openal.c + ${CLIENT_SRC_DIR}/sound/qal.c + ${CLIENT_SRC_DIR}/sound/sdl.c + ${CLIENT_SRC_DIR}/sound/sound.c + ${CLIENT_SRC_DIR}/sound/wave.c + ${CLIENT_SRC_DIR}/vid/vid.c + ${COMMON_SRC_DIR}/argproc.c + ${COMMON_SRC_DIR}/clientserver.c + ${COMMON_SRC_DIR}/collision.c + ${COMMON_SRC_DIR}/crc.c + ${COMMON_SRC_DIR}/cmdparser.c + ${COMMON_SRC_DIR}/cvar.c + ${COMMON_SRC_DIR}/filesystem.c + ${COMMON_SRC_DIR}/glob.c + ${COMMON_SRC_DIR}/md4.c + ${COMMON_SRC_DIR}/movemsg.c + ${COMMON_SRC_DIR}/frame.c + ${COMMON_SRC_DIR}/netchan.c + ${COMMON_SRC_DIR}/pmove.c + ${COMMON_SRC_DIR}/szone.c + ${COMMON_SRC_DIR}/zone.c + ${COMMON_SRC_DIR}/shared/flash.c + ${COMMON_SRC_DIR}/shared/rand.c + ${COMMON_SRC_DIR}/shared/shared.c + ${COMMON_SRC_DIR}/unzip/ioapi.c + ${COMMON_SRC_DIR}/unzip/unzip.c + ${COMMON_SRC_DIR}/unzip/miniz/miniz.c + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.c + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.c + ${SERVER_SRC_DIR}/sv_cmd.c + ${SERVER_SRC_DIR}/sv_conless.c + ${SERVER_SRC_DIR}/sv_entities.c + ${SERVER_SRC_DIR}/sv_game.c + ${SERVER_SRC_DIR}/sv_init.c + ${SERVER_SRC_DIR}/sv_main.c + ${SERVER_SRC_DIR}/sv_save.c + ${SERVER_SRC_DIR}/sv_send.c + ${SERVER_SRC_DIR}/sv_user.c + ${SERVER_SRC_DIR}/sv_world.c +) + +set(Client-SDL-Source + ${CLIENT_SRC_DIR}/input/sdl3.c + ${CLIENT_SRC_DIR}/vid/glimp_sdl3.c +) + +set(Client-Header + ${CLIENT_SRC_DIR}/header/client.h + ${CLIENT_SRC_DIR}/header/console.h + ${CLIENT_SRC_DIR}/header/keyboard.h + ${CLIENT_SRC_DIR}/header/screen.h + ${CLIENT_SRC_DIR}/curl/header/download.h + ${CLIENT_SRC_DIR}/curl/header/qcurl.h + ${CLIENT_SRC_DIR}/input/header/gyro.h + ${CLIENT_SRC_DIR}/input/header/input.h + ${CLIENT_SRC_DIR}/menu/header/qmenu.h + ${CLIENT_SRC_DIR}/sound/header/local.h + ${CLIENT_SRC_DIR}/sound/header/qal.h + ${CLIENT_SRC_DIR}/sound/header/sound.h + ${CLIENT_SRC_DIR}/sound/header/stb_vorbis.h + ${CLIENT_SRC_DIR}/sound/header/vorbis.h + ${CLIENT_SRC_DIR}/vid/header/ref.h + ${CLIENT_SRC_DIR}/vid/header/stb_image_write.h + ${CLIENT_SRC_DIR}/vid/header/vid.h + ${COMMON_SRC_DIR}/header/common.h + ${COMMON_SRC_DIR}/header/crc.h + ${COMMON_SRC_DIR}/header/files.h + ${COMMON_SRC_DIR}/header/glob.h + ${COMMON_SRC_DIR}/header/shared.h + ${COMMON_SRC_DIR}/header/zone.h + ${COMMON_SRC_DIR}/unzip/ioapi.h + ${COMMON_SRC_DIR}/unzip/unzip.h + ${COMMON_SRC_DIR}/unzip/miniz/miniz.h + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.h + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.h + ${COMMON_SRC_DIR}/unzip/miniz/minizconf.h + ${SERVER_SRC_DIR}/header/server.h +) + +# Main Quake 2 executable +if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + add_executable(yquake2 WIN32 ${Client-Source} ${Client-SDL-Source} ${Client-Header} + ${Platform-Specific-Source} ${Backends-Generic-Source}) + set_target_properties(yquake2 PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + ) + target_link_libraries(yquake2 ${yquake2LinkerFlags} ${yquake2ClientLinkerFlags} + ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm SDL3::SDL3) + + if(MSVC AND CMAKE_MAJOR_VERSION GREATER 3 OR ( CMAKE_MAJOR_VERSION EQUAL 3 AND CMAKE_MINOR_VERSION GREATER_EQUAL 6 )) + set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT yquake2) + set_target_properties(yquake2 PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/release) + endif() + + set(Wrapper-Source + ${CMAKE_SOURCE_DIR}/src/win-wrapper/wrapper.c + ${BACKENDS_SRC_DIR}/windows/icon.rc + ) + add_executable(quake2 WIN32 ${Wrapper-Source}) + set_target_properties(quake2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +else() + add_executable(quake2 ${Client-Source} ${Client-SDL-Source} ${Client-Header} + ${Platform-Specific-Source} ${Backends-Generic-Source}) + set_target_properties(quake2 PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + ) + target_link_libraries(quake2 ${yquake2LinkerFlags} ${yquake2ClientLinkerFlags} + ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags} SDL3::SDL3) +endif() + + diff --git a/src/client/refresh/gl1/gl1_buffer.c b/src/client/refresh/gl1/gl1_buffer.c deleted file mode 100644 index 38a8e91a8..000000000 --- a/src/client/refresh/gl1/gl1_buffer.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * Copyright (C) 2024 Jaime Moreira - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Drawing buffer: sort of a "Q3A shader" handler, allows to join multiple - * draw calls into one, by grouping those which share the same - * characteristics (mostly the same texture). - * - * ======================================================================= - */ - -#include "header/local.h" - -#define GLBUFFER_RESET vtx_ptr = idx_ptr = 0; gl_buf.vt = gl_buf.tx = gl_buf.cl = 0; - -glbuffer_t gl_buf; // our drawing buffer, used globally -int cur_lm_copy; // which lightmap copy to use (when lightmapcopies=on) - -static GLushort vtx_ptr, idx_ptr; // pointers for array positions in gl_buf - -extern void R_SetPerspective(GLdouble fovy); - -void -R_ResetGLBuffer(void) -{ - GLBUFFER_RESET -} - -/* - * Draws what's stored in the buffer and clears it up - */ -void -R_ApplyGLBuffer(void) -{ - // Properties of batched draws here - GLint vtx_size; - qboolean texture, mtex, alpha, color, alias, texenv_set; - - if (vtx_ptr == 0 || idx_ptr == 0) - { - return; - } - - // defaults for drawing (mostly buf_singletex features) - vtx_size = 3; - texture = true; - mtex = alpha = color = alias = texenv_set = false; - - // choosing features by type - switch (gl_buf.type) - { - case buf_2d: - vtx_size = 2; - break; - case buf_mtex: - mtex = true; - break; - case buf_alpha: - alpha = true; - break; - case buf_alias: - alias = color = true; - break; - case buf_flash: - color = true; - case buf_shadow: - texture = false; - break; - default: - break; - } - - R_EnableMultitexture(mtex); - - if (alias) - { - if (gl_buf.flags & RF_DEPTHHACK) - { - // hack the depth range to prevent view model from poking into walls - glDepthRange(gldepthmin, gldepthmin + 0.3 * (gldepthmax - gldepthmin)); - } - - if (gl_buf.flags & RF_WEAPONMODEL) - { - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - if (gl_lefthand->value == 1.0f) - { - glScalef(-1, 1, 1); - } - - R_SetPerspective( (r_gunfov->value < 0) ? r_newrefdef.fov_y : r_gunfov->value ); - - glMatrixMode(GL_MODELVIEW); - - if (gl_lefthand->value == 1.0f) - { - glCullFace(GL_BACK); - } - } - - glShadeModel(GL_SMOOTH); - R_TexEnv(GL_MODULATE); - - if (gl_buf.flags & RF_TRANSLUCENT) - { - glEnable(GL_BLEND); - } - - if (gl_buf.flags & (RF_SHELL_RED | RF_SHELL_GREEN | - RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM)) - { - texture = false; - glDisable(GL_TEXTURE_2D); - } - } - - if (alpha) - { - // the textures are prescaled up for a better - // lighting range, so scale it back down - glColor4f(gl_state.inverse_intensity, gl_state.inverse_intensity, - gl_state.inverse_intensity, gl_buf.alpha); - - } - else if (gl_buf.flags & SURF_DRAWTURB) - { - texenv_set = true; - - // This is a hack ontop of a hack. Warping surfaces like those generated - // by R_EmitWaterPolys() don't have a lightmap. Original Quake II therefore - // negated the global intensity on those surfaces, because otherwise they - // would show up much too bright. When we implemented overbright bits this - // hack modified the global GL state in an incompatible way. So implement - // a new hack, based on overbright bits... Depending on the value set to - // gl1_overbrightbits the result is different: - - // 0: Old behaviour. - // 1: No overbright bits on the global scene but correct lighting on - // warping surfaces. - // 2,4: Overbright bits on the global scene but not on warping surfaces. - // They oversaturate otherwise. - - if (gl1_overbrightbits->value) - { - R_TexEnv(GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, 1); - } - else - { - R_TexEnv(GL_MODULATE); - glColor4f(gl_state.inverse_intensity, gl_state.inverse_intensity, - gl_state.inverse_intensity, 1.0f); - } - } - - glEnableClientState( GL_VERTEX_ARRAY ); - glVertexPointer (vtx_size, GL_FLOAT, 0, gl_buf.vtx); - - if (texture) - { - if (mtex) - { - // TMU 1: Lightmap texture - int lmtexture = gl_state.lightmap_textures + gl_buf.texture[1]; - if (gl_config.lightmapcopies) - { - // Bind appropiate lightmap copy for this frame - lmtexture += MAX_LIGHTMAPS * cur_lm_copy; - } - R_MBind(GL_TEXTURE1, lmtexture); - - if (gl1_overbrightbits->value) - { - R_TexEnv(GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, gl1_overbrightbits->value); - } - - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, 0, gl_buf.tex[1]); - - // TMU 0: Color texture - R_MBind(GL_TEXTURE0, gl_buf.texture[0]); - } - else - { - R_Bind(gl_buf.texture[0]); - } - - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, 0, gl_buf.tex[0]); - } - - if (color) - { - glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, gl_buf.clr); - } - - // All set, we can finally draw - glDrawElements(GL_TRIANGLES, idx_ptr, GL_UNSIGNED_SHORT, gl_buf.idx); - // ... and now, turn back everything as it was - - if (color) - { - glDisableClientState(GL_COLOR_ARRAY); - } - - if (texture) - { - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - } - - glDisableClientState( GL_VERTEX_ARRAY ); - - if (texenv_set) - { - R_TexEnv(GL_REPLACE); - } - - if (alias) - { - if (gl_buf.flags & (RF_SHELL_RED | RF_SHELL_GREEN | - RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM)) - { - glEnable(GL_TEXTURE_2D); - } - - if (gl_buf.flags & RF_TRANSLUCENT) - { - glDisable(GL_BLEND); - } - - R_TexEnv(GL_REPLACE); - glShadeModel(GL_FLAT); - - if (gl_buf.flags & RF_WEAPONMODEL) - { - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - if (gl_lefthand->value == 1.0F) - { - glCullFace(GL_FRONT); - } - } - - if (gl_buf.flags & RF_DEPTHHACK) - { - glDepthRange(gldepthmin, gldepthmax); - } - } - - GLBUFFER_RESET -} - -/* - * Sets current state of the buffer. Any change means "draw its contents now". - */ -void -R_UpdateGLBuffer(buffered_draw_t type, int colortex, int lighttex, int flags, float alpha) -{ - if ( gl_buf.type != type || gl_buf.texture[0] != colortex || - (gl_config.multitexture && type == buf_mtex && gl_buf.texture[1] != lighttex) || - ((type == buf_singletex || type == buf_alias) && gl_buf.flags != flags) || - (type == buf_alpha && gl_buf.alpha != alpha)) - { - R_ApplyGLBuffer(); - - gl_buf.type = type; - gl_buf.texture[0] = colortex; - gl_buf.texture[1] = lighttex; - gl_buf.flags = flags; - gl_buf.alpha = alpha; - } -} - -/* - * Stores a 2D drawing in the buffer. - * ul = up-left corner, dr = down-right corner - * v = vertex, t = texture, x/y = coordinates - */ -void -R_Buffer2DQuad(GLfloat ul_vx, GLfloat ul_vy, GLfloat dr_vx, GLfloat dr_vy, - GLfloat ul_tx, GLfloat ul_ty, GLfloat dr_tx, GLfloat dr_ty) -{ - static const GLushort idx_max = MAX_INDICES - 7; - static const GLushort vtx_max = MAX_VERTICES - 5; - - if (idx_ptr > idx_max || vtx_ptr > vtx_max) - { - R_ApplyGLBuffer(); - } - - // "Quad" = 2-triangle GL_TRIANGLE_FAN - gl_buf.idx[idx_ptr] = vtx_ptr; - gl_buf.idx[idx_ptr+1] = vtx_ptr+1; - gl_buf.idx[idx_ptr+2] = vtx_ptr+2; - gl_buf.idx[idx_ptr+3] = vtx_ptr; - gl_buf.idx[idx_ptr+4] = vtx_ptr+2; - gl_buf.idx[idx_ptr+5] = vtx_ptr+3; - idx_ptr += 6; - - // up left corner coords - gl_buf.vtx[gl_buf.vt] = ul_vx; - gl_buf.vtx[gl_buf.vt+1] = ul_vy; - // up right - gl_buf.vtx[gl_buf.vt+2] = dr_vx; - gl_buf.vtx[gl_buf.vt+3] = ul_vy; - // down right - gl_buf.vtx[gl_buf.vt+4] = dr_vx; - gl_buf.vtx[gl_buf.vt+5] = dr_vy; - // and finally, down left - gl_buf.vtx[gl_buf.vt+6] = ul_vx; - gl_buf.vtx[gl_buf.vt+7] = dr_vy; - - gl_buf.tex[0][gl_buf.tx] = ul_tx; - gl_buf.tex[0][gl_buf.tx+1] = ul_ty; - gl_buf.tex[0][gl_buf.tx+2] = dr_tx; - gl_buf.tex[0][gl_buf.tx+3] = ul_ty; - gl_buf.tex[0][gl_buf.tx+4] = dr_tx; - gl_buf.tex[0][gl_buf.tx+5] = dr_ty; - gl_buf.tex[0][gl_buf.tx+6] = ul_tx; - gl_buf.tex[0][gl_buf.tx+7] = dr_ty; - - vtx_ptr += 4; - gl_buf.vt += 8; - gl_buf.tx += 8; -} - -/* - * Set up indices with the proper shape for the next buffered vertices. - * After calling this, GLBUFFER_VERTEX() must be called 'vertices_num' times. - */ -void -R_SetBufferIndices(GLenum primitive, GLuint vertices_num) -{ - int i; - - if ( vtx_ptr + vertices_num >= MAX_VERTICES || - idx_ptr + ( (vertices_num - 2) * 3 ) >= MAX_INDICES ) - { - R_ApplyGLBuffer(); - } - - switch (primitive) - { - case GL_TRIANGLE_FAN: - for (i = 0; i < vertices_num-2; i++) - { - gl_buf.idx[idx_ptr] = vtx_ptr; - gl_buf.idx[idx_ptr+1] = vtx_ptr+i+1; - gl_buf.idx[idx_ptr+2] = vtx_ptr+i+2; - idx_ptr += 3; - } - break; - case GL_TRIANGLE_STRIP: - for (i = 0; i < vertices_num-2; i++) - { - if (i % 2 == 0) - { - gl_buf.idx[idx_ptr] = vtx_ptr+i; - gl_buf.idx[idx_ptr+1] = vtx_ptr+i+1; - gl_buf.idx[idx_ptr+2] = vtx_ptr+i+2; - } - else // backwards order - { - gl_buf.idx[idx_ptr] = vtx_ptr+i+2; - gl_buf.idx[idx_ptr+1] = vtx_ptr+i+1; - gl_buf.idx[idx_ptr+2] = vtx_ptr+i; - } - idx_ptr += 3; - } - break; - default: - Com_DPrintf("%s: no such primitive %d\n", __func__, primitive); - return; - } - - // GLBUFFER_VERTEX() must be called as many times as vertices_num - vtx_ptr += vertices_num; -} diff --git a/src/client/refresh/gl1/gl1_draw.c b/src/client/refresh/gl1/gl1_draw.c deleted file mode 100644 index 91fdc6bc2..000000000 --- a/src/client/refresh/gl1/gl1_draw.c +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Drawing of all images that are not textures - * - * ======================================================================= - */ - -#include "header/local.h" - -image_t *draw_chars; - -extern qboolean scrap_dirty; -void Scrap_Upload(void); - -extern unsigned r_rawpalette[256]; - -void -Draw_InitLocal(void) -{ - /* load console characters */ - draw_chars = R_FindPic("conchars", (findimage_t)R_FindImage); - if (!draw_chars) - { - Com_Error(ERR_FATAL, "%s: Couldn't load pics/conchars.pcx", - __func__); - } -} - -/* - * Draws one 8*8 graphics character with 0 being transparent. - * It can be clipped to the top of the screen to allow the console to be - * smoothly scrolled off. - */ -void -RDraw_CharScaled(int x, int y, int num, float scale) -{ - int row, col; - float frow, fcol, size, scaledSize; - - num &= 255; - - if ((num & 127) == 32) - { - return; /* space */ - } - - if (y <= -8) - { - return; /* totally off screen */ - } - - row = num >> 4; - col = num & 15; - - frow = row * 0.0625; - fcol = col * 0.0625; - size = 0.0625; - - scaledSize = 8 * scale; - - R_UpdateGLBuffer(buf_2d, draw_chars->texnum, 0, 0, 1); - - R_Buffer2DQuad(x, y, x + scaledSize, y + scaledSize, - fcol, frow, fcol + size, frow + size); -} - -image_t * -RDraw_FindPic(const char *name) -{ - return R_FindPic(name, (findimage_t)R_FindImage); -} - -void -RDraw_GetPicSize(int *w, int *h, const char *pic) -{ - const image_t *gl; - - gl = R_FindPic(pic, (findimage_t)R_FindImage); - - if (!gl) - { - *w = *h = -1; - return; - } - - *w = gl->width; - *h = gl->height; -} - -void -RDraw_StretchPic(int x, int y, int w, int h, const char *pic) -{ - image_t *gl; - - gl = R_FindPic(pic, (findimage_t)R_FindImage); - - if (!gl) - { - Com_Printf("Can't find pic: %s\n", pic); - return; - } - - if (scrap_dirty) - { - Scrap_Upload(); - } - - R_UpdateGLBuffer(buf_2d, gl->texnum, 0, 0, 1); - - R_Buffer2DQuad(x, y, x + w, y + h, - gl->sl, gl->tl, gl->sh, gl->th); -} - -void -RDraw_PicScaled(int x, int y, const char *pic, float factor) -{ - image_t *gl; - - gl = R_FindPic(pic, (findimage_t)R_FindImage); - - if (!gl) - { - Com_Printf("Can't find pic: %s\n", pic); - return; - } - - if (scrap_dirty) - { - Scrap_Upload(); - } - - if (gl->texnum == TEXNUM_SCRAPS) - { - R_UpdateGLBuffer(buf_2d, TEXNUM_SCRAPS, 0, 0, 1); - R_Buffer2DQuad(x, y, x + gl->width * factor, y + gl->height * factor, - gl->sl, gl->tl, gl->sh, gl->th); - return; - } - - R_Bind(gl->texnum); - - GLfloat vtx[] = { - x, y, - x + gl->width * factor, y, - x + gl->width * factor, y + gl->height * factor, - x, y + gl->height * factor - }; - - GLfloat tex[] = { - gl->sl, gl->tl, - gl->sh, gl->tl, - gl->sh, gl->th, - gl->sl, gl->th - }; - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - - glVertexPointer( 2, GL_FLOAT, 0, vtx ); - glTexCoordPointer( 2, GL_FLOAT, 0, tex ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); -} - -/* - * This repeats a 64*64 tile graphic to fill - * the screen around a sized down - * refresh window. - */ -void -RDraw_TileClear(int x, int y, int w, int h, const char *pic) -{ - const image_t *image; - - image = R_FindPic(pic, (findimage_t)R_FindImage); - - if (!image) - { - Com_Printf("Can't find pic: %s\n", pic); - return; - } - - R_UpdateGLBuffer(buf_2d, image->texnum, 0, 0, 1); - - R_Buffer2DQuad(x, y, x + w, y + h, x / 64.0, y / 64.0, - ( x + w ) / 64.0, ( y + h ) / 64.0); -} - -/* - * Fills a box of pixels with a single color - */ -void -RDraw_Fill(int x, int y, int w, int h, int c) -{ - union - { - unsigned c; - byte v[4]; - } color; - - if ((unsigned)c > 255) - { - Com_Error(ERR_FATAL, "%s: bad color", __func__); - } - - glDisable(GL_TEXTURE_2D); - - color.c = d_8to24table[c]; - glColor4f(color.v [ 0 ] / 255.0, color.v [ 1 ] / 255.0, - color.v [ 2 ] / 255.0, 1); - - GLfloat vtx[] = { - x, y, - x + w, y, - x + w, y + h, - x, y + h - }; - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 2, GL_FLOAT, 0, vtx ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - - glColor4f( 1, 1, 1, 1 ); - glEnable(GL_TEXTURE_2D); -} - -void -RDraw_FadeScreen(void) -{ - R_ApplyGLBuffer(); // draw what needs to be hidden - glEnable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - glColor4f(0, 0, 0, 0.8); - - GLfloat vtx[] = { - 0, 0, - vid.width, 0, - vid.width, vid.height, - 0, vid.height - }; - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 2, GL_FLOAT, 0, vtx ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - - glColor4f(1, 1, 1, 1); - glEnable(GL_TEXTURE_2D); - glDisable(GL_BLEND); -} - -void -RDraw_StretchRaw(int x, int y, int w, int h, int cols, int rows, const byte *data, int bits) -{ - GLfloat tex[8]; - float hscale = 1.0f; - int frac, fracstep; - int i, j, trows; - int row; - - R_Bind(0); - - if(gl_config.npottextures || rows <= 256 || bits == 32) - { - // X, X - tex[0] = 0; - tex[1] = 0; - - // X, Y - tex[2] = 1; - tex[3] = 0; - - // Y, X - tex[4] = 1; - tex[5] = 1; - - // Y, Y - tex[6] = 0; - tex[7] = 1; - } - else - { - // Scale params - hscale = rows / 256.0; - trows = 256; - - // X, X - tex[0] = 1.0 / 512.0; - tex[1] = 1.0 / 512.0; - - // X, Y - tex[2] = 511.0 / 512.0; - tex[3] = 1.0 / 512.0; - - // Y, X - tex[4] = 511.0 / 512.0; - tex[5] = rows * hscale / 256 - 1.0 / 512.0; - - // Y, Y - tex[6] = 1.0 / 512.0; - tex[7] = rows * hscale / 256 - 1.0 / 512.0; - } - - GLfloat vtx[] = { - x, y, - x + w, y, - x + w, y + h, - x, y + h - }; - - if (!gl_config.palettedtexture || bits == 32) - { - /* .. because now if non-power-of-2 textures are supported, we just load - * the data into a texture in the original format, without skipping any - * pixels to fit into a 256x256 texture. - * This causes text in videos (which are 320x240) to not look broken anymore. - */ - if (bits == 32) - { - glTexImage2D(GL_TEXTURE_2D, 0, gl_tex_solid_format, - cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, - data); - } - else if(gl_config.npottextures || rows <= 256) - { - unsigned image32[320*240]; /* was 256 * 256, but we want a bit more space */ - unsigned* img = image32; - - if(cols*rows > 320*240) - { - /* in case there is a bigger video after all, - * malloc enough space to hold the frame */ - img = (unsigned*)malloc(cols*rows*4); - } - - for(i=0; i rows) - { - break; - } - - source = data + cols * row; - dest = &image32[i * 256]; - fracstep = cols * 0x10000 / 256; - frac = fracstep >> 1; - - for (j = 0; j < 256; j++) - { - dest[j] = r_rawpalette[source[frac >> 16]]; - frac += fracstep; - } - } - - glTexImage2D(GL_TEXTURE_2D, 0, gl_tex_solid_format, - 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, - image32); - } - } - else - { - unsigned char image8[256 * 256]; - - for (i = 0; i < trows; i++) - { - unsigned char *dest; - const byte *source; - - row = (int)(i * hscale); - - if (row > rows) - { - break; - } - - source = data + cols * row; - dest = &image8[i * 256]; - fracstep = cols * 0x10000 / 256; - frac = fracstep >> 1; - - for (j = 0; j < 256; j++) - { - dest[j] = source[frac >> 16]; - frac += fracstep; - } - } - - glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, 256, 256, - 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, image8); - } - - // Note: gl_filter_min could be GL_*_MIPMAP_* so we can't use it for min filter here (=> no mipmaps) - // but gl_filter_max (either GL_LINEAR or GL_NEAREST) should do the trick. - GLint filter = (r_videos_unfiltered->value == 0) ? gl_filter_max : GL_NEAREST; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - - glVertexPointer( 2, GL_FLOAT, 0, vtx ); - glTexCoordPointer( 2, GL_FLOAT, 0, tex ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); -} diff --git a/src/client/refresh/gl1/gl1_image.c b/src/client/refresh/gl1/gl1_image.c deleted file mode 100644 index 5fc668052..000000000 --- a/src/client/refresh/gl1/gl1_image.c +++ /dev/null @@ -1,1378 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Texture handling - * - * ======================================================================= - */ - -#include "header/local.h" - -image_t gltextures[MAX_GLTEXTURES]; -int numgltextures; -static int image_max = 0; -extern qboolean scrap_dirty; -extern byte scrap_texels[MAX_SCRAPS][SCRAP_WIDTH * SCRAP_HEIGHT]; - -static byte intensitytable[256]; -unsigned char gammatable[256]; - -static cvar_t *intensity; - -unsigned d_8to24table[256]; - -extern cvar_t *gl1_minlight; -extern unsigned char minlight[256]; - -qboolean R_Upload8(byte *data, int width, int height, - qboolean mipmap, qboolean is_sky); -qboolean R_Upload32(unsigned *data, int width, int height, qboolean mipmap); - -#define Q2_GL_SOLID_FORMAT GL_RGB -#define Q2_GL_ALPHA_FORMAT GL_RGBA - -#ifdef YQ2_GL1_GLES -#define DEFAULT_SOLID_FORMAT GL_RGBA -#else -#define DEFAULT_SOLID_FORMAT GL_RGB -#endif - -int gl_tex_solid_format = DEFAULT_SOLID_FORMAT; -int gl_tex_alpha_format = GL_RGBA; - -#undef DEFAULT_SOLID_FORMAT - -int gl_filter_min = GL_LINEAR_MIPMAP_NEAREST; -int gl_filter_max = GL_LINEAR; - -typedef struct -{ - char *name; - int minimize, maximize; -} glmode_t; - -glmode_t modes[] = { - {"GL_NEAREST", GL_NEAREST, GL_NEAREST}, - {"GL_LINEAR", GL_LINEAR, GL_LINEAR}, - {"GL_NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST}, - {"GL_LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR}, - {"GL_NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST}, - {"GL_LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR} -}; - -#define NUM_GL_MODES (sizeof(modes) / sizeof(glmode_t)) - -typedef struct -{ - char *name; - int mode; -} gltmode_t; - -#ifdef YQ2_GL1_GLES - -gltmode_t gl_alpha_modes[] = { - {"default", GL_RGBA}, - {"GL_RGBA", GL_RGBA}, -}; - -gltmode_t gl_solid_modes[] = { - {"default", GL_RGBA}, - {"GL_RGBA", GL_RGBA}, -}; - -#else - -gltmode_t gl_alpha_modes[] = { - {"default", GL_RGBA}, - {"GL_RGBA", GL_RGBA}, - {"GL_RGBA8", GL_RGBA8}, - {"GL_RGB5_A1", GL_RGB5_A1}, - {"GL_RGBA4", GL_RGBA4}, - {"GL_RGBA2", GL_RGBA2}, -}; - -gltmode_t gl_solid_modes[] = { - {"default", GL_RGB}, - {"GL_RGB", GL_RGB}, - {"GL_RGB8", GL_RGB8}, - {"GL_RGB5", GL_RGB5}, - {"GL_RGB4", GL_RGB4}, - {"GL_R3_G3_B2", GL_R3_G3_B2}, -}; - -#endif - -#define NUM_GL_ALPHA_MODES (sizeof(gl_alpha_modes) / sizeof(gltmode_t)) -#define NUM_GL_SOLID_MODES (sizeof(gl_solid_modes) / sizeof(gltmode_t)) - -typedef struct -{ - short x, y; -} floodfill_t; - -/* must be a power of 2 */ -#define FLOODFILL_FIFO_SIZE 0x1000 -#define FLOODFILL_FIFO_MASK (FLOODFILL_FIFO_SIZE - 1) - -#define FLOODFILL_STEP(off, dx, dy) \ - { \ - if (pos[off] == fillcolor) \ - { \ - pos[off] = 255; \ - fifo[inpt].x = x + (dx), fifo[inpt].y = y + (dy); \ - inpt = (inpt + 1) & FLOODFILL_FIFO_MASK; \ - } \ - else if (pos[off] != 255) \ - { \ - fdc = pos[off]; \ - } \ - } - -static int upload_width, upload_height; -static qboolean uploaded_paletted; - -void -R_SetTexturePalette(const unsigned palette[256]) -{ - if (gl_config.palettedtexture) - { - unsigned char temptable[768]; - int i; - - for (i = 0; i < 256; i++) - { - temptable[i * 3 + 0] = (palette[i] >> 0) & 0xff; - temptable[i * 3 + 1] = (palette[i] >> 8) & 0xff; - temptable[i * 3 + 2] = (palette[i] >> 16) & 0xff; - } - - qglColorTableEXT(GL_SHARED_TEXTURE_PALETTE_EXT, GL_RGB, - 256, GL_RGB, GL_UNSIGNED_BYTE, temptable); - } -} - -void -R_SelectTexture(GLenum texture) -{ - if (!gl_config.multitexture || gl_state.currenttarget == texture) - { - return; - } - - gl_state.currenttmu = texture - GL_TEXTURE0; - gl_state.currenttarget = texture; - - qglActiveTexture(texture); - qglClientActiveTexture(texture); -} - -void -R_TexEnv(GLenum mode) -{ - static int lastmodes[2] = {-1, -1}; - - if (mode != lastmodes[gl_state.currenttmu]) - { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode); - lastmodes[gl_state.currenttmu] = mode; - } -} - -qboolean -R_Bind(int texnum) -{ - extern image_t *draw_chars; - - if (gl_nobind->value && draw_chars) /* performance evaluation option */ - { - texnum = draw_chars->texnum; - } - - if (gl_state.currenttextures[gl_state.currenttmu] == texnum) - { - return false; - } - - gl_state.currenttextures[gl_state.currenttmu] = texnum; - glBindTexture(GL_TEXTURE_2D, texnum); - return true; -} - -void -R_MBind(GLenum target, int texnum) -{ - const int tmu = target - GL_TEXTURE0; - - if (target != gl_state.currenttarget) - { - R_SelectTexture(target); - } - - if (gl_state.currenttextures[tmu] == texnum) - { - return; - } - - R_Bind(texnum); -} - -void -R_EnableMultitexture(qboolean enable) -{ - static qboolean active; - - if (!gl_config.multitexture || enable == active) - { - return; // current state is the right one - } - - active = enable; - R_SelectTexture(GL_TEXTURE1); - - if (active && !r_fullbright->value) - { - glEnable(GL_TEXTURE_2D); - - if (gl_lightmap->value) - { - R_TexEnv(GL_REPLACE); - } - else - { - R_TexEnv(GL_MODULATE); - } - } - else // disable multitexturing - { - glDisable(GL_TEXTURE_2D); - R_TexEnv(GL_REPLACE); - } - - R_SelectTexture(GL_TEXTURE0); - R_TexEnv(GL_REPLACE); -} - -void -R_TextureMode(const char *string) -{ - int i; - image_t *glt; - - for (i = 0; i < NUM_GL_MODES; i++) - { - if (!Q_stricmp(modes[i].name, string)) - { - break; - } - } - - if (i == NUM_GL_MODES) - { - Com_Printf("bad filter name\n"); - return; - } - - gl_filter_min = modes[i].minimize; - gl_filter_max = modes[i].maximize; - - /* clamp selected anisotropy */ - if (gl_config.anisotropic) - { - if (gl_anisotropic->value > gl_config.max_anisotropy) - { - ri.Cvar_SetValue("r_anisotropic", gl_config.max_anisotropy); - } - } - else - { - ri.Cvar_SetValue("r_anisotropic", 0.0); - } - - const char* nolerplist = gl_nolerp_list->string; - const char* lerplist = r_lerp_list->string; - qboolean unfiltered2D = r_2D_unfiltered->value != 0; - - /* change all the existing mipmap texture objects */ - for (i = 0, glt = gltextures; i < numgltextures; i++, glt++) - { - qboolean nolerp = false; - /* r_2D_unfiltered and r_nolerp_list allow rendering stuff unfiltered even if gl_filter_* is filtered */ - if (unfiltered2D && glt->type == it_pic) - { - // exception to that exception: stuff on the r_lerp_list - nolerp = (lerplist== NULL) || (strstr(lerplist, glt->name) == NULL); - } - else if(nolerplist != NULL && strstr(nolerplist, glt->name) != NULL) - { - nolerp = true; - } - - if ( !R_Bind(glt->texnum) ) - { - continue; // don't bother changing anything if texture was already set - } - - if ((glt->type != it_pic) && (glt->type != it_sky)) /* mipmapped texture */ - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - - /* Set anisotropic filter if supported and enabled */ - if (gl_config.anisotropic && gl_anisotropic->value) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, - Q_max(gl_anisotropic->value, 1.f)); - } - } - else /* texture has no mipmaps */ - { - if (nolerp) - { - // this texture shouldn't be filtered at all (no gl_nolerp_list or r_2D_unfiltered case) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } - else - { - // we can't use gl_filter_min which might be GL_*_MIPMAP_* - // also, there's no anisotropic filtering for textures w/o mipmaps - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - } - } - } -} - -void -R_TextureAlphaMode(const char *string) -{ - int i; - - for (i = 0; i < NUM_GL_ALPHA_MODES; i++) - { - if (!Q_stricmp(gl_alpha_modes[i].name, string)) - { - break; - } - } - - if (i == NUM_GL_ALPHA_MODES) - { - Com_Printf("bad alpha texture mode name\n"); - return; - } - - gl_tex_alpha_format = gl_alpha_modes[i].mode; -} - -void -R_TextureSolidMode(const char *string) -{ - int i; - - for (i = 0; i < NUM_GL_SOLID_MODES; i++) - { - if (!Q_stricmp(gl_solid_modes[i].name, string)) - { - break; - } - } - - if (i == NUM_GL_SOLID_MODES) - { - Com_Printf("bad solid texture mode name\n"); - return; - } - - gl_tex_solid_format = gl_solid_modes[i].mode; -} - -void -R_ImageList_f(void) -{ - int i, used, texels; - image_t *image; - qboolean freeup; - const char *palstrings[2] = { - "RGB", - "PAL" - }; - - Com_Printf("------------------\n"); - texels = 0; - used = 0; - - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - char *in_use = ""; - - if (image->texnum <= 0) - { - continue; - } - - if (image->registration_sequence == registration_sequence) - { - in_use = "*"; - used++; - } - - texels += image->upload_width * image->upload_height; - - switch (image->type) - { - case it_skin: - Com_Printf("M"); - break; - case it_sprite: - Com_Printf("S"); - break; - case it_wall: - Com_Printf("W"); - break; - case it_pic: - Com_Printf("P"); - break; - default: - Com_Printf(" "); - break; - } - - Com_Printf(" %3i %3i %s: %s (%dx%d) %s\n", - image->upload_width, image->upload_height, - palstrings[image->paletted], image->name, - image->width, image->height, in_use); - } - - Com_Printf("Total texel count (not counting mipmaps): %i\n", - texels); - freeup = R_ImageHasFreeSpace(); - Com_Printf("Used %d of %d images%s.\n", used, image_max, freeup ? ", has free space" : ""); -} - -/* - * Fill background pixels so mipmapping doesn't have haloes - */ -static void -R_FloodFillSkin(byte *skin, int skinwidth, int skinheight) -{ - byte fillcolor = *skin; /* assume this is the pixel to fill */ - floodfill_t fifo[FLOODFILL_FIFO_SIZE]; - int inpt = 0, outpt = 0; - int filledcolor = 0; - int i; - - // NOTE: there was a if(filledcolor == -1) which didn't make sense b/c filledcolor used to be initialized to -1 - /* attempt to find opaque black */ - for (i = 0; i < 256; ++i) - { - if (LittleLong(d_8to24table[i]) == (255 << 0)) /* alpha 1.0 */ - { - filledcolor = i; - break; - } - } - - /* can't fill to filled color or to transparent color (used as visited marker) */ - if ((fillcolor == filledcolor) || (fillcolor == 255)) - { - return; - } - - fifo[inpt].x = 0, fifo[inpt].y = 0; - inpt = (inpt + 1) & FLOODFILL_FIFO_MASK; - - while (outpt != inpt) - { - int x = fifo[outpt].x, y = fifo[outpt].y; - int fdc = filledcolor; - byte *pos = &skin[x + skinwidth * y]; - - outpt = (outpt + 1) & FLOODFILL_FIFO_MASK; - - if (x > 0) - { - FLOODFILL_STEP(-1, -1, 0); - } - - if (x < skinwidth - 1) - { - FLOODFILL_STEP(1, 1, 0); - } - - if (y > 0) - { - FLOODFILL_STEP(-skinwidth, 0, -1); - } - - if (y < skinheight - 1) - { - FLOODFILL_STEP(skinwidth, 0, 1); - } - - skin[x + skinwidth * y] = fdc; - } -} - -/* - * Scale up the pixel values in a - * texture to increase the - * lighting range - */ -static void -R_LightScaleTexture(unsigned *in, int inwidth, - int inheight, qboolean only_gamma) -{ - if (only_gamma) - { - int i, c; - byte *p; - - p = (byte *)in; - - c = inwidth * inheight; - - for (i = 0; i < c; i++, p += 4) - { - p[0] = gammatable[p[0]]; - p[1] = gammatable[p[1]]; - p[2] = gammatable[p[2]]; - } - } - else - { - int i, c; - byte *p; - - p = (byte *)in; - - c = inwidth * inheight; - - for (i = 0; i < c; i++, p += 4) - { - p[0] = gammatable[intensitytable[p[0]]]; - p[1] = gammatable[intensitytable[p[1]]]; - p[2] = gammatable[intensitytable[p[2]]]; - } - } -} - -/* - * Operates in place, quartering the size of the texture - */ -static void -R_MipMap(byte *in, int width, int height) -{ - int i, j; - byte *out; - - width <<= 2; - height >>= 1; - out = in; - - for (i = 0; i < height; i++, in += width) - { - for (j = 0; j < width; j += 8, out += 4, in += 8) - { - out[0] = (in[0] + in[4] + in[width + 0] + in[width + 4]) >> 2; - out[1] = (in[1] + in[5] + in[width + 1] + in[width + 5]) >> 2; - out[2] = (in[2] + in[6] + in[width + 2] + in[width + 6]) >> 2; - out[3] = (in[3] + in[7] + in[width + 3] + in[width + 7]) >> 2; - } - } -} - -/* - * Returns has_alpha - */ -static void -R_BuildPalettedTexture(unsigned char *paletted_texture, unsigned char *scaled, - int scaled_width, int scaled_height) -{ - int i; - - for (i = 0; i < scaled_width * scaled_height; i++) - { - unsigned int r, g, b, c; - - r = (scaled[0] >> 3) & 31; - g = (scaled[1] >> 2) & 63; - b = (scaled[2] >> 3) & 31; - - c = r | (g << 5) | (b << 11); - - paletted_texture[i] = gl_state.d_16to8table[c]; - - scaled += 4; - } -} - -static qboolean -R_Upload32Native(unsigned *data, int width, int height, qboolean mipmap) -{ - // This is for GL 2.x so no palettes, no scaling, no messing around with the data here. :) - int samples; - int i, c; - byte *scan; - int comp; - - c = width * height; - scan = ((byte *)data) + 3; - samples = Q2_GL_SOLID_FORMAT; - comp = gl_tex_solid_format; - upload_width = width; - upload_height = height; - - R_LightScaleTexture(data, upload_width, upload_height, !mipmap); - - for (i = 0; i < c; i++, scan += 4) - { - if (*scan != 255) - { - samples = Q2_GL_ALPHA_FORMAT; - comp = gl_tex_alpha_format; - break; - } - } - glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, mipmap); - glTexImage2D(GL_TEXTURE_2D, 0, comp, width, - height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - data); - glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, false); - return samples == Q2_GL_ALPHA_FORMAT; -} - - -static qboolean -R_Upload32Soft(unsigned *data, int width, int height, qboolean mipmap) -{ - int samples; - unsigned scaled[256 * 256]; - unsigned char paletted_texture[256 * 256]; - int scaled_width, scaled_height; - int i, c; - byte *scan; - int comp; - - uploaded_paletted = false; - - for (scaled_width = 1; scaled_width < width; scaled_width <<= 1) - { - } - - if (gl1_round_down->value && (scaled_width > width) && mipmap) - { - scaled_width >>= 1; - } - - for (scaled_height = 1; scaled_height < height; scaled_height <<= 1) - { - } - - if (gl1_round_down->value && (scaled_height > height) && mipmap) - { - scaled_height >>= 1; - } - - /* let people sample down the world textures for speed */ - if (mipmap) - { - scaled_width >>= (int)gl1_picmip->value; - scaled_height >>= (int)gl1_picmip->value; - } - - /* don't ever bother with >256 textures */ - if (scaled_width > 256) - { - scaled_width = 256; - } - - if (scaled_height > 256) - { - scaled_height = 256; - } - - if (scaled_width < 1) - { - scaled_width = 1; - } - - if (scaled_height < 1) - { - scaled_height = 1; - } - - upload_width = scaled_width; - upload_height = scaled_height; - - if (scaled_width * scaled_height > sizeof(scaled) / 4) - { - // this can't really happen (because they're clamped to 256 above), but whatever - Com_Error(ERR_DROP, "%s: too big", __func__); - } - - /* scan the texture for any non-255 alpha */ - c = width * height; - scan = ((byte *)data) + 3; - samples = Q2_GL_SOLID_FORMAT; - comp = gl_tex_solid_format; - - for (i = 0; i < c; i++, scan += 4) - { - if (*scan != 255) - { - samples = Q2_GL_ALPHA_FORMAT; - comp = gl_tex_alpha_format; - break; - } - } - - if ((scaled_width == width) && (scaled_height == height)) - { - if (!mipmap) - { - if (qglColorTableEXT && gl1_palettedtexture->value && - (samples == Q2_GL_SOLID_FORMAT)) - { - uploaded_paletted = true; - R_BuildPalettedTexture(paletted_texture, (unsigned char *)data, - scaled_width, scaled_height); - glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, - scaled_width, scaled_height, 0, GL_COLOR_INDEX, - GL_UNSIGNED_BYTE, paletted_texture); - } - else - { - glTexImage2D(GL_TEXTURE_2D, 0, comp, scaled_width, - scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - data); - } - - goto done; - } - - memcpy(scaled, data, width * height * 4); - } - else - { - ResizeSTB((byte *)data, width, height, - (byte *)scaled, scaled_width, scaled_height); - } - - R_LightScaleTexture(scaled, scaled_width, scaled_height, !mipmap); - - if (qglColorTableEXT && gl1_palettedtexture->value && - (samples == Q2_GL_SOLID_FORMAT)) - { - uploaded_paletted = true; - R_BuildPalettedTexture(paletted_texture, (unsigned char *)scaled, - scaled_width, scaled_height); - glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, - scaled_width, scaled_height, 0, GL_COLOR_INDEX, - GL_UNSIGNED_BYTE, paletted_texture); - } - else - { - glTexImage2D(GL_TEXTURE_2D, 0, comp, scaled_width, - scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, - scaled); - } - - if (mipmap) - { - int miplevel; - - miplevel = 0; - - while (scaled_width > 1 || scaled_height > 1) - { - R_MipMap((byte *)scaled, scaled_width, scaled_height); - scaled_width >>= 1; - scaled_height >>= 1; - - if (scaled_width < 1) - { - scaled_width = 1; - } - - if (scaled_height < 1) - { - scaled_height = 1; - } - - miplevel++; - - if (qglColorTableEXT && gl1_palettedtexture->value && - (samples == Q2_GL_SOLID_FORMAT)) - { - uploaded_paletted = true; - R_BuildPalettedTexture(paletted_texture, (unsigned char *)scaled, - scaled_width, scaled_height); - glTexImage2D(GL_TEXTURE_2D, miplevel, GL_COLOR_INDEX8_EXT, - scaled_width, scaled_height, 0, GL_COLOR_INDEX, - GL_UNSIGNED_BYTE, paletted_texture); - } - else - { - glTexImage2D(GL_TEXTURE_2D, miplevel, comp, scaled_width, - scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, scaled); - } - } - } - -done: - - return samples == Q2_GL_ALPHA_FORMAT; -} - -qboolean -R_Upload32(unsigned *data, int width, int height, qboolean mipmap) -{ - qboolean res; - - if (gl_config.npottextures) - { - res = R_Upload32Native(data, width, height, mipmap); - } - else - { - res = R_Upload32Soft(data, width, height, mipmap); - } - - if (mipmap) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - } - else - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - } - - if (mipmap && gl_config.anisotropic && gl_anisotropic->value) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, - Q_max(gl_anisotropic->value, 1.f)); - } - return res; -} - - -/* - * Returns has_alpha - */ -qboolean -R_Upload8(byte *data, int width, int height, qboolean mipmap, qboolean is_sky) -{ - int s = width * height; - - if (gl_config.palettedtexture && is_sky) - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, - width, height, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, - data); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - - return false; /* SBF: FIXME - what is the correct return value? */ - } - else - { - unsigned *trans = malloc(s * sizeof(unsigned)); - - for (int i = 0; i < s; i++) - { - int p = data[i]; - trans[i] = d_8to24table[p]; - - /* transparent, so scan around for - another color to avoid alpha fringes */ - if (p == 255) - { - if ((i > width) && (data[i - width] != 255)) - { - p = data[i - width]; - } - else if ((i < s - width) && (data[i + width] != 255)) - { - p = data[i + width]; - } - else if ((i > 0) && (data[i - 1] != 255)) - { - p = data[i - 1]; - } - else if ((i < s - 1) && (data[i + 1] != 255)) - { - p = data[i + 1]; - } - else - { - p = 0; - } - - /* copy rgb components */ - ((byte *)&trans[i])[0] = ((byte *)&d_8to24table[p])[0]; - ((byte *)&trans[i])[1] = ((byte *)&d_8to24table[p])[1]; - ((byte *)&trans[i])[2] = ((byte *)&d_8to24table[p])[2]; - } - } - - qboolean ret = R_Upload32(trans, width, height, mipmap); - free(trans); - return ret; - } -} - -/* - * This is also used as an entry point for the generated r_notexture - */ -image_t * -R_LoadPic(const char *name, byte *pic, int width, int realwidth, - int height, int realheight, size_t data_size, imagetype_t type, int bits) -{ - image_t *image; - int i; - - qboolean nolerp = false; - if (r_2D_unfiltered->value && type == it_pic) - { - // if r_2D_unfiltered is true(ish), nolerp should usually be true, - // *unless* the texture is on the r_lerp_list - nolerp = (r_lerp_list->string == NULL) || (strstr(r_lerp_list->string, name) == NULL); - } - else if (gl_nolerp_list != NULL && gl_nolerp_list->string != NULL) - { - nolerp = strstr(gl_nolerp_list->string, name) != NULL; - } - - /* find a free image_t */ - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!image->texnum) - { - break; - } - } - - if (i == numgltextures) - { - if (numgltextures == MAX_GLTEXTURES) - { - Com_Error(ERR_DROP, "%s: MAX_GLTEXTURES", __func__); - } - - numgltextures++; - } - - image = &gltextures[i]; - - if (strlen(name) >= sizeof(image->name)) - { - Com_Error(ERR_DROP, "%s: \"%s\" is too long", __func__, name); - } - - strcpy(image->name, name); - image->registration_sequence = registration_sequence; - - image->width = width; - image->height = height; - image->type = type; - - if ((type == it_skin) && (bits == 8)) - { - R_FloodFillSkin(pic, width, height); - } - - /* load little pics into the scrap */ - if (!nolerp && (image->type == it_pic) && (bits == 8) && - (image->width < 64) && (image->height < 64)) - { - int x, y; - int i, k; - int texnum; - - texnum = Scrap_AllocBlock(image->width, image->height, &x, &y); - - if (texnum == -1) - { - goto nonscrap; - } - - scrap_dirty = true; - - /* copy the texels into the scrap block */ - k = 0; - - for (i = 0; i < image->height; i++) - { - int j; - - for (j = 0; j < image->width; j++, k++) - { - scrap_texels[texnum][(y + i) * SCRAP_WIDTH + x + j] = pic[k]; - } - } - - image->texnum = TEXNUM_SCRAPS + texnum; - image->scrap = true; - image->has_alpha = true; - image->sl = (float)x / SCRAP_WIDTH; - image->sh = (float)(x + image->width) / SCRAP_WIDTH; - image->tl = (float)y / SCRAP_HEIGHT; - image->th = (float)(y + image->height) / SCRAP_HEIGHT; - } - else - { - nonscrap: - image->scrap = false; - image->texnum = TEXNUM_IMAGES + (image - gltextures); - R_Bind(image->texnum); - - if (bits == 8) - { - // resize 8bit images only when we forced such logic - if (r_scale8bittextures->value) - { - byte *image_converted; - int scale = 2; - - // scale 3 times if lerp image - if (!nolerp && (vid.height >= 240 * 3)) - scale = 3; - - image_converted = malloc(width * height * scale * scale); - if (!image_converted) - return NULL; - - if (scale == 3) { - scale3x(pic, image_converted, width, height); - } else { - scale2x(pic, image_converted, width, height); - } - - image->has_alpha = R_Upload8(image_converted, width * scale, height * scale, - (image->type != it_pic && image->type != it_sky), - image->type == it_sky); - free(image_converted); - } - else - { - image->has_alpha = R_Upload8(pic, width, height, - (image->type != it_pic && image->type != it_sky), - image->type == it_sky); - } - } - else - { - image->has_alpha = R_Upload32((unsigned *)pic, width, height, - (image->type != it_pic && image->type != it_sky)); - } - - image->upload_width = upload_width; /* after power of 2 and scales */ - image->upload_height = upload_height; - image->paletted = uploaded_paletted; - - if (realwidth && realheight) - { - if ((realwidth <= image->width) && (realheight <= image->height)) - { - image->width = realwidth; - image->height = realheight; - } - else - { - Com_DPrintf( - "Warning, image '%s' has hi-res replacement smaller than the original! (%d x %d) < (%d x %d)\n", - name, image->width, image->height, realwidth, realheight); - } - } - - image->sl = 0; - image->sh = 1; - image->tl = 0; - image->th = 1; - - if (nolerp) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - } - } - - return image; -} - -/* - * Finds or loads the given image or null - */ -image_t * -R_FindImage(const char *name, imagetype_t type) -{ - image_t *image; - size_t len; - int i; - char *ptr; - char namewe[256]; - const char* ext; - - if (!name) - { - return NULL; - } - - ext = COM_FileExtension(name); - if (!ext[0]) - { - /* file has no extension */ - return NULL; - } - - /* Remove the extension */ - len = (ext - name) - 1; - if ((len < 1) || (len > sizeof(namewe) - 1)) - { - return NULL; - } - - memcpy(namewe, name, len); - namewe[len] = 0; - - /* fix backslashes */ - while ((ptr = strchr(name, '\\'))) - { - *ptr = '/'; - } - - /* look for it */ - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!strcmp(name, image->name)) - { - image->registration_sequence = registration_sequence; - return image; - } - } - - // - // load the pic from disk - // - image = (image_t *)R_LoadImage(name, namewe, ext, type, - r_retexturing->value, (loadimage_t)R_LoadPic); - - if (!image && r_validation->value) - { - Com_Printf("%s: can't load %s\n", __func__, name); - } - - return image; -} - -struct image_s * -RI_RegisterSkin(const char *name) -{ - return R_FindImage(name, it_skin); -} - -/* - * Any image that was not touched on - * this registration sequence - * will be freed. - */ -void -R_FreeUnusedImages(void) -{ - int i; - image_t *image; - - /* never free r_notexture or particle texture */ - r_notexture->registration_sequence = registration_sequence; - r_particletexture->registration_sequence = registration_sequence; - - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (image->registration_sequence == registration_sequence) - { - continue; /* used this sequence */ - } - - if (!image->registration_sequence) - { - continue; /* free image_t slot */ - } - - if (image->type == it_pic) - { - continue; /* don't free pics */ - } - - /* free it */ - glDeleteTextures(1, (GLuint *)&image->texnum); - memset(image, 0, sizeof(*image)); - } -} - -qboolean -R_ImageHasFreeSpace(void) -{ - int i, used; - image_t *image; - - used = 0; - - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!image->name[0]) - continue; - if (image->registration_sequence == registration_sequence) - { - used ++; - } - } - - if (image_max < used) - { - image_max = used; - } - - // should same size of free slots as currently used - return (numgltextures + used) < MAX_GLTEXTURES; -} - -void -R_InitImages(void) -{ - byte *colormap; - int i; - float m; - -#ifdef GL1_GAMMATABLE - float g = vid_gamma->value; -#else - float g = 1; -#endif - g = Q_max(g, 0.1f); - - registration_sequence = 1; - image_max = 0; - - /* init intensity conversions */ - intensity = ri.Cvar_Get("gl1_intensity", "2", CVAR_ARCHIVE); - - if (intensity->value <= 1) - { - ri.Cvar_Set("gl1_intensity", "1"); - } - - gl_state.sw_gamma = g; - gl_state.inverse_intensity = g / intensity->value; - - // FIXME: I think this is redundant - RI_Init() already calls that! - GetPCXPalette (&colormap, d_8to24table); - free(colormap); - - if (gl_config.palettedtexture) - { - ri.FS_LoadFile("pics/16to8.dat", (void **)&gl_state.d_16to8table); - - if (!gl_state.d_16to8table) - { - Com_Error(ERR_FATAL, "%s: Couldn't load pics/16to8.pcx", - __func__); - } - } - - if (g == 1) - { - for (i = 0; i < 256; i++) - { - gammatable[i] = i; - } - } - else - { - g = 1.0f / g; - - for (i = 0; i < 256; i++) - { - float inf; - - inf = pow ( (float)(i + 0.5f) / 255.5f , g ) * 255.0f + 0.5f; - inf = Q_clamp(inf, 0, 255); - - gammatable[i] = inf; - } - } - - for (i = 0; i < 256; i++) - { - int j; - - j = i * intensity->value; - j = Q_min(j, 255); - - intensitytable[i] = j; - } - - // I know, minimum light level's calculation is much simpler than gamma. - // But will still need a vid_restart to apply its values to currently loaded - // lightmaps. Also, memory is cheaper than CPU. - m = Q_clamp(gl1_minlight->value, 0, 255); - gl_state.minlight_set = (m != 0); - - if (!gl_state.minlight_set) // minlight == 0 - { - for (i = 0; i < 256; i++) - { - minlight[i] = i; - } - } - else - { - for (i = 0; i < 256; i++) - { - float inf = (255.0f - m) * (float)i / 255.0f + m; - inf = Q_clamp(inf, 0, 255); - minlight[i] = inf; - } - } -} - -void -R_ShutdownImages(void) -{ - int i; - image_t *image; - - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!image->registration_sequence) - { - continue; /* free image_t slot */ - } - - /* free it */ - glDeleteTextures(1, (GLuint *)&image->texnum); - memset(image, 0, sizeof(*image)); - } -} - diff --git a/src/client/refresh/gl1/gl1_light.c b/src/client/refresh/gl1/gl1_light.c deleted file mode 100644 index 9e0dc4d0d..000000000 --- a/src/client/refresh/gl1/gl1_light.c +++ /dev/null @@ -1,660 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Lightmaps and dynamic lighting - * - * ======================================================================= - */ - -#include "header/local.h" - -int r_dlightframecount; -vec3_t pointcolor; -cplane_t *lightplane; /* used as shadow plane */ -vec3_t lightspot; -static float s_blocklights[34 * 34 * 3]; - -unsigned char minlight[256]; - -void -R_RenderDlight(dlight_t *light) -{ - const float rad = light->intensity * 0.35; - int i, j; - float vtx[3], a; - - R_SetBufferIndices(GL_TRIANGLE_FAN, 18); - - for ( i = 0; i < 3; i++ ) - { - vtx [ i ] = light->origin [ i ] - vpn [ i ] * rad; - } - - GLBUFFER_VERTEX( vtx[0], vtx[1], vtx[2] ) - GLBUFFER_COLOR( light->color[0] * 51, light->color[1] * 51, - light->color[2] * 51, 255 ) // 255 * 0.2 = 51 - - for ( i = 16; i >= 0; i-- ) - { - a = i / 16.0 * M_PI * 2; - - for ( j = 0; j < 3; j++ ) - { - vtx[ j ] = light->origin [ j ] + vright [ j ] * cos( a ) * rad - + vup [ j ] * sin( a ) * rad; - } - - GLBUFFER_VERTEX( vtx[0], vtx[1], vtx[2] ) - GLBUFFER_COLOR( 0, 0, 0, 255 ) - } -} - -void -R_RenderDlights(void) -{ - int i; - dlight_t *l; - - if (!gl1_flashblend->value) - { - return; - } - R_UpdateGLBuffer(buf_flash, 0, 0, 0, 1); - - /* because the count hasn't advanced yet for this frame */ - r_dlightframecount = r_framecount + 1; - - glDepthMask(GL_FALSE); - glDisable(GL_TEXTURE_2D); - glShadeModel(GL_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - - l = r_newrefdef.dlights; - - for (i = 0; i < r_newrefdef.num_dlights; i++, l++) - { - R_RenderDlight(l); - } - R_ApplyGLBuffer(); - - glColor4f(1, 1, 1, 1); - glDisable(GL_BLEND); - glEnable(GL_TEXTURE_2D); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDepthMask(GL_TRUE); -} - -void -R_MarkSurfaceLights(dlight_t *light, int bit, mnode_t *node, int lightframecount) -{ - msurface_t *surf; - int i; - - /* mark the polygons */ - surf = r_worldmodel->surfaces + node->firstsurface; - - for (i = 0; i < node->numsurfaces; i++, surf++) - { - int sidebit; - float dist; - - dist = DotProduct(light->origin, surf->plane->normal) - surf->plane->dist; - - if (dist >= 0) - { - sidebit = 0; - } - else - { - sidebit = SURF_PLANEBACK; - } - - if ((surf->flags & SURF_PLANEBACK) != sidebit) - { - continue; - } - - if (surf->dlightframe != lightframecount) - { - surf->dlightbits = 0; - surf->dlightframe = lightframecount; - } - - surf->dlightbits |= bit; - } -} - -void -R_PushDlights(void) -{ - int i; - dlight_t *l; - - if (gl1_flashblend->value) - { - return; - } - - /* because the count hasn't advanced yet for this frame */ - r_dlightframecount = r_framecount + 1; - - l = r_newrefdef.dlights; - - for (i = 0; i < r_newrefdef.num_dlights; i++, l++) - { - R_MarkLights(l, 1 << i, r_worldmodel->nodes, r_dlightframecount, - R_MarkSurfaceLights); - } -} - -int -R_RecursiveLightPoint(mnode_t *node, vec3_t start, vec3_t end) -{ - float front, back, frac; - int side; - cplane_t *plane; - vec3_t mid; - msurface_t *surf; - int s, t, ds, dt; - int i; - mtexinfo_t *tex; - byte *lightmap; - int maps; - int r; - - if (node->contents != CONTENTS_NODE) - { - return -1; /* didn't hit anything */ - } - - /* calculate mid point */ - plane = node->plane; - front = DotProduct(start, plane->normal) - plane->dist; - back = DotProduct(end, plane->normal) - plane->dist; - side = front < 0; - - if ((back < 0) == side) - { - return R_RecursiveLightPoint(node->children[side], start, end); - } - - frac = front / (front - back); - mid[0] = start[0] + (end[0] - start[0]) * frac; - mid[1] = start[1] + (end[1] - start[1]) * frac; - mid[2] = start[2] + (end[2] - start[2]) * frac; - - /* go down front side */ - r = R_RecursiveLightPoint(node->children[side], start, mid); - - if (r >= 0) - { - return r; /* hit something */ - } - - if ((back < 0) == side) - { - return -1; /* didn't hit anuthing */ - } - - /* check for impact on this node */ - VectorCopy(mid, lightspot); - lightplane = plane; - - surf = r_worldmodel->surfaces + node->firstsurface; - - for (i = 0; i < node->numsurfaces; i++, surf++) - { - if (surf->flags & (SURF_DRAWTURB | SURF_DRAWSKY)) - { - continue; /* no lightmaps */ - } - - tex = surf->texinfo; - - s = DotProduct(mid, tex->vecs[0]) + tex->vecs[0][3]; - t = DotProduct(mid, tex->vecs[1]) + tex->vecs[1][3]; - - if ((s < surf->texturemins[0]) || - (t < surf->texturemins[1])) - { - continue; - } - - ds = s - surf->texturemins[0]; - dt = t - surf->texturemins[1]; - - if ((ds > surf->extents[0]) || (dt > surf->extents[1])) - { - continue; - } - - if (!surf->samples) - { - return 0; - } - - ds >>= 4; - dt >>= 4; - - lightmap = surf->samples; - VectorCopy(vec3_origin, pointcolor); - - lightmap += 3 * (dt * ((surf->extents[0] >> 4) + 1) + ds); - - for (maps = 0; maps < MAXLIGHTMAPS && surf->styles[maps] != 255; - maps++) - { - const float *rgb; - int j; - - rgb = r_newrefdef.lightstyles[surf->styles[maps]].rgb; - - /* Apply light level to models */ - for (j = 0; j < 3; j++) - { - float scale; - - scale = rgb[j] * r_modulate->value; - pointcolor[j] += lightmap[j] * scale * (1.0 / 255); - } - - lightmap += 3 * ((surf->extents[0] >> 4) + 1) * - ((surf->extents[1] >> 4) + 1); - } - - return 1; - } - - /* go down back side */ - return R_RecursiveLightPoint(node->children[!side], mid, end); -} - -void -R_LightPoint(entity_t *currententity, vec3_t p, vec3_t color) -{ - vec3_t end; - float r; - int lnum; - dlight_t *dl; - vec3_t dist; - float add; - - if (!r_worldmodel->lightdata || !currententity) - { - color[0] = color[1] = color[2] = 1.0; - return; - } - - end[0] = p[0]; - end[1] = p[1]; - end[2] = p[2] - 2048; - - r = R_RecursiveLightPoint(r_worldmodel->nodes, p, end); - - if (r == -1) - { - VectorCopy(vec3_origin, color); - } - else - { - VectorCopy(pointcolor, color); - } - - /* add dynamic lights */ - dl = r_newrefdef.dlights; - - for (lnum = 0; lnum < r_newrefdef.num_dlights; lnum++, dl++) - { - VectorSubtract(currententity->origin, - dl->origin, dist); - add = dl->intensity - VectorLength(dist); - add *= (1.0 / 256); - - if (add > 0) - { - VectorMA(color, add, dl->color, color); - } - } - - VectorScale(color, r_modulate->value, color); -} - -void -R_AddDynamicLights(msurface_t *surf) -{ - int lnum; - int sd, td; - float fdist, frad, fminlight; - vec3_t impact, local; - int s, t; - int i; - int smax, tmax; - mtexinfo_t *tex; - dlight_t *dl; - float *pfBL; - float fsacc, ftacc; - - smax = (surf->extents[0] >> 4) + 1; - tmax = (surf->extents[1] >> 4) + 1; - tex = surf->texinfo; - - for (lnum = 0; lnum < r_newrefdef.num_dlights; lnum++) - { - if (!(surf->dlightbits & (1 << lnum))) - { - continue; /* not lit by this light */ - } - - dl = &r_newrefdef.dlights[lnum]; - frad = dl->intensity; - fdist = DotProduct(dl->origin, surf->plane->normal) - - surf->plane->dist; - frad -= fabs(fdist); - - /* rad is now the highest intensity on the plane */ - fminlight = DLIGHT_CUTOFF; - - if (frad < fminlight) - { - continue; - } - - fminlight = frad - fminlight; - - for (i = 0; i < 3; i++) - { - impact[i] = dl->origin[i] - - surf->plane->normal[i] * fdist; - } - - local[0] = DotProduct(impact, - tex->vecs[0]) + tex->vecs[0][3] - surf->texturemins[0]; - local[1] = DotProduct(impact, - tex->vecs[1]) + tex->vecs[1][3] - surf->texturemins[1]; - - pfBL = s_blocklights; - - for (t = 0, ftacc = 0; t < tmax; t++, ftacc += 16) - { - td = local[1] - ftacc; - - if (td < 0) - { - td = -td; - } - - for (s = 0, fsacc = 0; s < smax; s++, fsacc += 16, pfBL += 3) - { - sd = Q_ftol(local[0] - fsacc); - - if (sd < 0) - { - sd = -sd; - } - - if (sd > td) - { - fdist = sd + (td >> 1); - } - else - { - fdist = td + (sd >> 1); - } - - if (fdist < fminlight) - { - pfBL[0] += (frad - fdist) * dl->color[0]; - pfBL[1] += (frad - fdist) * dl->color[1]; - pfBL[2] += (frad - fdist) * dl->color[2]; - } - } - } - } -} - -void -R_SetCacheState(msurface_t *surf) -{ - int maps; - - for (maps = 0; maps < MAXLIGHTMAPS && surf->styles[maps] != 255; - maps++) - { - surf->cached_light[maps] = - r_newrefdef.lightstyles[surf->styles[maps]].white; - } -} - -/* - * Combine and scale multiple lightmaps into the floating format in blocklights - */ -void -R_BuildLightMap(msurface_t *surf, byte *dest, int stride) -{ - int smax, tmax; - int r, g, b, a, max; - int i, j, size; - byte *lightmap; - float scale[4]; - int nummaps; - float *bl; - - if (surf->texinfo->flags & - (SURF_SKY | SURF_TRANS33 | SURF_TRANS66 | SURF_WARP)) - { - Com_Error(ERR_DROP, "%s called for non-lit surface", __func__); - } - - smax = (surf->extents[0] >> 4) + 1; - tmax = (surf->extents[1] >> 4) + 1; - size = smax * tmax; - - if (size > (sizeof(s_blocklights) >> 4)) - { - Com_Error(ERR_DROP, "%s: Bad s_blocklights size", __func__); - } - - /* set to full bright if no light data */ - if (!surf->samples) - { - for (i = 0; i < size * 3; i++) - { - s_blocklights[i] = 255; - } - - goto store; - } - - /* count the # of maps */ - for (nummaps = 0; nummaps < MAXLIGHTMAPS && surf->styles[nummaps] != 255; - nummaps++) - { - } - - lightmap = surf->samples; - - /* add all the lightmaps */ - if (nummaps == 1) - { - int maps; - - for (maps = 0; maps < MAXLIGHTMAPS && surf->styles[maps] != 255; maps++) - { - bl = s_blocklights; - - for (i = 0; i < 3; i++) - { - scale[i] = r_modulate->value * - r_newrefdef.lightstyles[surf->styles[maps]].rgb[i]; - } - - if ((scale[0] == 1.0F) && - (scale[1] == 1.0F) && - (scale[2] == 1.0F)) - { - for (i = 0; i < size; i++, bl += 3) - { - bl[0] = lightmap[i * 3 + 0]; - bl[1] = lightmap[i * 3 + 1]; - bl[2] = lightmap[i * 3 + 2]; - } - } - else - { - for (i = 0; i < size; i++, bl += 3) - { - bl[0] = lightmap[i * 3 + 0] * scale[0]; - bl[1] = lightmap[i * 3 + 1] * scale[1]; - bl[2] = lightmap[i * 3 + 2] * scale[2]; - } - } - - lightmap += size * 3; /* skip to next lightmap */ - } - } - else - { - int maps; - - memset(s_blocklights, 0, sizeof(s_blocklights[0]) * size * 3); - - for (maps = 0; maps < MAXLIGHTMAPS && surf->styles[maps] != 255; maps++) - { - bl = s_blocklights; - - for (i = 0; i < 3; i++) - { - scale[i] = r_modulate->value * - r_newrefdef.lightstyles[surf->styles[maps]].rgb[i]; - } - - if ((scale[0] == 1.0F) && - (scale[1] == 1.0F) && - (scale[2] == 1.0F)) - { - for (i = 0; i < size; i++, bl += 3) - { - bl[0] += lightmap[i * 3 + 0]; - bl[1] += lightmap[i * 3 + 1]; - bl[2] += lightmap[i * 3 + 2]; - } - } - else - { - for (i = 0; i < size; i++, bl += 3) - { - bl[0] += lightmap[i * 3 + 0] * scale[0]; - bl[1] += lightmap[i * 3 + 1] * scale[1]; - bl[2] += lightmap[i * 3 + 2] * scale[2]; - } - } - - lightmap += size * 3; /* skip to next lightmap */ - } - } - - /* add all the dynamic lights */ - if (surf->dlightframe == r_framecount) - { - R_AddDynamicLights(surf); - } - -store: - - stride -= (smax << 2); - bl = s_blocklights; - - for (i = 0; i < tmax; i++, dest += stride) - { - for (j = 0; j < smax; j++) - { - r = Q_ftol(bl[0]); - g = Q_ftol(bl[1]); - b = Q_ftol(bl[2]); - - /* catch negative lights */ - if (r < 0) - { - r = 0; - } - - if (g < 0) - { - g = 0; - } - - if (b < 0) - { - b = 0; - } - - /* determine the brightest of the three color components */ - if (r > g) - { - max = r; - } - else - { - max = g; - } - - if (b > max) - { - max = b; - } - - /* alpha is ONLY used for the mono lightmap case. For this - reason we set it to the brightest of the color components - so that things don't get too dim. */ - a = max; - - /* rescale all the color components if the - intensity of the greatest channel exceeds - 1.0 */ - if (max > 255) - { - float t = 255.0F / max; - - r = r * t; - g = g * t; - b = b * t; - a = a * t; - } - - if (gl_state.minlight_set) - { - r = minlight[r]; - g = minlight[g]; - b = minlight[b]; - } - - dest[0] = gammatable[r]; - dest[1] = gammatable[g]; - dest[2] = gammatable[b]; - dest[3] = a; - - bl += 3; - dest += 4; - } - } -} - diff --git a/src/client/refresh/gl1/gl1_lightmap.c b/src/client/refresh/gl1/gl1_lightmap.c deleted file mode 100644 index 4103857c3..000000000 --- a/src/client/refresh/gl1/gl1_lightmap.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Lightmap handling - * - * ======================================================================= - */ - -#include "header/local.h" - -extern gllightmapstate_t gl_lms; - -void R_SetCacheState(msurface_t *surf); -void R_BuildLightMap(msurface_t *surf, byte *dest, int stride); - -void -LM_FreeLightmapBuffers(void) -{ - for (int i=0; i height) - { - height = gl_lms.allocated[i]; - } - } - - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, BLOCK_WIDTH, - height, GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, - gl_lms.lightmap_buffer[buffer]); - } - else - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_LIGHTMAP_FORMAT, - BLOCK_WIDTH, BLOCK_HEIGHT, - 0, GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, - gl_lms.lightmap_buffer[buffer]); - - if (gl_config.lightmapcopies && buffer != 0) - { - // Upload to all lightmap copies - for (i = 1; i < MAX_LIGHTMAP_COPIES; i++) - { - R_Bind(gl_state.lightmap_textures + (MAX_LIGHTMAPS * i) + texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LIGHTMAP_FORMAT, - BLOCK_WIDTH, BLOCK_HEIGHT, - 0, GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, - gl_lms.lightmap_buffer[buffer]); - } - } - - if (++gl_lms.current_lightmap_texture == MAX_LIGHTMAPS) - { - Com_Error(ERR_DROP, - "%s: MAX_LIGHTMAPS exceeded\n", __func__); - } - } -} - -/* - * returns a texture number and the position inside it - */ -qboolean -LM_AllocBlock(int w, int h, int *x, int *y) -{ - int i, j; - int best, best2; - - best = BLOCK_HEIGHT; - - for (i = 0; i < BLOCK_WIDTH - w; i++) - { - best2 = 0; - - for (j = 0; j < w; j++) - { - if (gl_lms.allocated[i + j] >= best) - { - break; - } - - if (gl_lms.allocated[i + j] > best2) - { - best2 = gl_lms.allocated[i + j]; - } - } - - if (j == w) - { - /* this is a valid spot */ - *x = i; - *y = best = best2; - } - } - - if (best + h > BLOCK_HEIGHT) - { - return false; - } - - for (i = 0; i < w; i++) - { - gl_lms.allocated[*x + i] = best + h; - } - - return true; -} - -void -LM_BuildPolygonFromSurface(model_t *currentmodel, msurface_t *fa) -{ - int i, lindex, lnumverts; - medge_t *pedges, *r_pedge; - float *vec; - float s, t; - glpoly_t *poly; - vec3_t total; - - /* reconstruct the polygon */ - pedges = currentmodel->edges; - lnumverts = fa->numedges; - - VectorClear(total); - - /* draw texture */ - poly = Hunk_Alloc(sizeof(glpoly_t) + - (lnumverts - 4) * VERTEXSIZE * sizeof(float)); - poly->next = fa->polys; - poly->flags = fa->flags; - fa->polys = poly; - poly->numverts = lnumverts; - - for (i = 0; i < lnumverts; i++) - { - lindex = currentmodel->surfedges[fa->firstedge + i]; - - if (lindex > 0) - { - r_pedge = &pedges[lindex]; - vec = currentmodel->vertexes[r_pedge->v[0]].position; - } - else - { - r_pedge = &pedges[-lindex]; - vec = currentmodel->vertexes[r_pedge->v[1]].position; - } - - s = DotProduct(vec, fa->texinfo->vecs[0]) + fa->texinfo->vecs[0][3]; - s /= fa->texinfo->image->width; - - t = DotProduct(vec, fa->texinfo->vecs[1]) + fa->texinfo->vecs[1][3]; - t /= fa->texinfo->image->height; - - VectorAdd(total, vec, total); - VectorCopy(vec, poly->verts[i]); - poly->verts[i][3] = s; - poly->verts[i][4] = t; - - /* lightmap texture coordinates */ - s = DotProduct(vec, fa->texinfo->vecs[0]) + fa->texinfo->vecs[0][3]; - s -= fa->texturemins[0]; - s += fa->light_s * 16; - s += 8; - s /= BLOCK_WIDTH * 16; /* fa->texinfo->texture->width; */ - - t = DotProduct(vec, fa->texinfo->vecs[1]) + fa->texinfo->vecs[1][3]; - t -= fa->texturemins[1]; - t += fa->light_t * 16; - t += 8; - t /= BLOCK_HEIGHT * 16; /* fa->texinfo->texture->height; */ - - poly->verts[i][5] = s; - poly->verts[i][6] = t; - } -} - -void -LM_CreateSurfaceLightmap(msurface_t *surf) -{ - int smax, tmax, buffer; - byte *base; - - if (surf->flags & (SURF_DRAWSKY | SURF_DRAWTURB)) - { - return; - } - - smax = (surf->extents[0] >> 4) + 1; - tmax = (surf->extents[1] >> 4) + 1; - - if (!LM_AllocBlock(smax, tmax, &surf->light_s, &surf->light_t)) - { - LM_UploadBlock(false); - LM_InitBlock(); - - if (!LM_AllocBlock(smax, tmax, &surf->light_s, &surf->light_t)) - { - Com_Error(ERR_FATAL, "%s: Consecutive calls to LM_AllocBlock(%d,%d) failed\n", - __func__, smax, tmax); - } - } - - surf->lightmaptexturenum = gl_lms.current_lightmap_texture; - buffer = (gl_config.multitexture)? surf->lightmaptexturenum : 0; - - base = gl_lms.lightmap_buffer[buffer]; - base += (surf->light_t * BLOCK_WIDTH + surf->light_s) * LIGHTMAP_BYTES; - - R_SetCacheState(surf); - R_BuildLightMap(surf, base, BLOCK_WIDTH * LIGHTMAP_BYTES); -} - -void -LM_BeginBuildingLightmaps(model_t *m) -{ - static lightstyle_t lightstyles[MAX_LIGHTSTYLES]; - int i; - - memset(gl_lms.allocated, 0, sizeof(gl_lms.allocated)); - LM_FreeLightmapBuffers(); - - r_framecount = 1; /* no dlightcache */ - - /* setup the base lightstyles so the lightmaps - won't have to be regenerated the first time - they're seen */ - for (i = 0; i < MAX_LIGHTSTYLES; i++) - { - lightstyles[i].rgb[0] = 1; - lightstyles[i].rgb[1] = 1; - lightstyles[i].rgb[2] = 1; - lightstyles[i].white = 3; - } - - r_newrefdef.lightstyles = lightstyles; - - if (!gl_state.lightmap_textures) - { - gl_state.lightmap_textures = TEXNUM_LIGHTMAPS; - } - - gl_lms.current_lightmap_texture = 1; - - if (gl_config.multitexture) - { - LM_AllocLightmapBuffer(gl_lms.current_lightmap_texture, false); - return; - } - - // dynamic lightmap for classic rendering path (no multitexture) - LM_AllocLightmapBuffer(0, true); - - /* initialize the dynamic lightmap texture */ - R_Bind(gl_state.lightmap_textures + 0); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LIGHTMAP_FORMAT, - BLOCK_WIDTH, BLOCK_HEIGHT, - 0, GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, - gl_lms.lightmap_buffer[0]); -} - -void -LM_EndBuildingLightmaps(void) -{ - LM_UploadBlock(false); -} - diff --git a/src/client/refresh/gl1/gl1_main.c b/src/client/refresh/gl1/gl1_main.c deleted file mode 100644 index 9a89c8df4..000000000 --- a/src/client/refresh/gl1/gl1_main.c +++ /dev/null @@ -1,2185 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Refresher setup and main part of the frame generation - * - * ======================================================================= - */ - -#include "header/local.h" - -#define NUM_BEAM_SEGS 6 - -model_t *r_worldmodel; - -float gldepthmin, gldepthmax; - -glconfig_t gl_config; -glstate_t gl_state; - -image_t *r_notexture; /* use for bad textures */ -image_t *r_particletexture; /* little dot for particles */ - -cplane_t frustum[4]; - -int r_visframecount; /* bumped when going to a new PVS */ -int r_framecount; /* used for dlight push checking */ - -int c_brush_polys, c_alias_polys; - -float v_blend[4]; /* final blending color */ - -void R_Strings(void); - -/* view origin */ -vec3_t vup; -vec3_t vpn; -vec3_t vright; -vec3_t r_origin; - -float r_world_matrix[16]; -float r_base_world_matrix[16]; - -/* screen size info */ -int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2; -unsigned r_rawpalette[256]; - -cvar_t *r_norefresh; -cvar_t *r_drawentities; -cvar_t *r_drawworld; -cvar_t *r_speeds; -cvar_t *r_fullbright; -cvar_t *r_novis; -cvar_t *r_lerpmodels; -cvar_t *gl_lefthand; -cvar_t *r_gunfov; -cvar_t *r_farsee; -cvar_t *r_validation; - -cvar_t *r_lightlevel; -cvar_t *gl1_overbrightbits; - -cvar_t *gl1_particle_min_size; -cvar_t *gl1_particle_max_size; -cvar_t *gl1_particle_size; -cvar_t *gl1_particle_att_a; -cvar_t *gl1_particle_att_b; -cvar_t *gl1_particle_att_c; -cvar_t *gl1_particle_square; - -cvar_t *gl1_palettedtexture; -cvar_t *gl1_pointparameters; -cvar_t *gl1_multitexture; -cvar_t *gl1_lightmapcopies; -cvar_t *gl1_discardfb; - -cvar_t *gl_drawbuffer; -cvar_t *gl_lightmap; -cvar_t *gl_shadows; -cvar_t *gl1_stencilshadow; -cvar_t *r_mode; -cvar_t *r_fixsurfsky; -cvar_t *gl1_minlight; - -cvar_t *r_customwidth; -cvar_t *r_customheight; - -cvar_t *r_retexturing; -cvar_t *r_scale8bittextures; - -cvar_t *gl_nolerp_list; -cvar_t *r_lerp_list; -cvar_t *r_2D_unfiltered; -cvar_t *r_videos_unfiltered; - -cvar_t *gl1_dynamic; -cvar_t *r_modulate; -cvar_t *gl_nobind; -cvar_t *gl1_round_down; -cvar_t *gl1_picmip; -cvar_t *gl_showtris; -cvar_t *gl_showbbox; -cvar_t *gl1_ztrick; -cvar_t *gl_zfix; -cvar_t *gl_finish; -cvar_t *r_clear; -cvar_t *r_cull; -cvar_t *gl_polyblend; -cvar_t *gl1_flashblend; -cvar_t *gl1_saturatelighting; -cvar_t *r_vsync; -cvar_t *gl_texturemode; -cvar_t *gl1_texturealphamode; -cvar_t *gl1_texturesolidmode; -cvar_t *gl_anisotropic; -cvar_t *r_lockpvs; -cvar_t *gl_msaa_samples; - -cvar_t *vid_fullscreen; -cvar_t *vid_gamma; - -cvar_t *gl1_stereo; -cvar_t *gl1_stereo_separation; -cvar_t *gl1_stereo_anaglyph_colors; -cvar_t *gl1_stereo_convergence; - -static cvar_t *gl_znear; -static cvar_t *gl1_waterwarp; - -refimport_t ri; - -void LM_FreeLightmapBuffers(void); -void Scrap_Init(void); - -extern void R_SetDefaultState(void); -extern void R_ResetGLBuffer(void); - -void -R_RotateForEntity(entity_t *e) -{ - glTranslatef(e->origin[0], e->origin[1], e->origin[2]); - - glRotatef(e->angles[1], 0, 0, 1); - glRotatef(-e->angles[0], 0, 1, 0); - glRotatef(-e->angles[2], 1, 0, 0); -} - -void -R_DrawSpriteModel(entity_t *currententity, const model_t *currentmodel) -{ - float alpha = 1.0F; - vec3_t point[4]; - dsprframe_t *frame; - float *up, *right; - dsprite_t *psprite; - image_t *skin; - - R_EnableMultitexture(false); - /* don't even bother culling, because it's just - a single polygon without a surface cache */ - psprite = (dsprite_t *)currentmodel->extradata; - - currententity->frame %= psprite->numframes; - frame = &psprite->frames[currententity->frame]; - - /* normal sprite */ - up = vup; - right = vright; - - if (currententity->flags & RF_TRANSLUCENT) - { - alpha = currententity->alpha; - } - - if (alpha != 1.0F) - { - glEnable(GL_BLEND); - } - - glColor4f(1, 1, 1, alpha); - - skin = currentmodel->skins[currententity->frame]; - if (!skin) - { - skin = r_notexture; /* fallback... */ - } - - R_Bind(skin->texnum); - - R_TexEnv(GL_MODULATE); - - if (alpha == 1.0) - { - glEnable(GL_ALPHA_TEST); - } - else - { - glDisable(GL_ALPHA_TEST); - } - - GLfloat tex[] = { - 0, 1, - 0, 0, - 1, 0, - 1, 1 - }; - - VectorMA( currententity->origin, -frame->origin_y, up, point[0] ); - VectorMA( point[0], -frame->origin_x, right, point[0] ); - - VectorMA( currententity->origin, frame->height - frame->origin_y, up, point[1] ); - VectorMA( point[1], -frame->origin_x, right, point[1] ); - - VectorMA( currententity->origin, frame->height - frame->origin_y, up, point[2] ); - VectorMA( point[2], frame->width - frame->origin_x, right, point[2] ); - - VectorMA( currententity->origin, -frame->origin_y, up, point[3] ); - VectorMA( point[3], frame->width - frame->origin_x, right, point[3] ); - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, point ); - glTexCoordPointer( 2, GL_FLOAT, 0, tex ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - - glDisable(GL_ALPHA_TEST); - R_TexEnv(GL_REPLACE); - - if (alpha != 1.0F) - { - glDisable(GL_BLEND); - } - - glColor4f(1, 1, 1, 1); -} - -void -R_DrawNullModel(entity_t *currententity) -{ - vec3_t shadelight; - - if (currententity->flags & RF_FULLBRIGHT) - { - shadelight[0] = shadelight[1] = shadelight[2] = 1.0F; - } - else - { - R_LightPoint(currententity, currententity->origin, shadelight); - } - - R_EnableMultitexture(false); - glPushMatrix(); - R_RotateForEntity(currententity); - - glDisable(GL_TEXTURE_2D); - glColor4f( shadelight[0], shadelight[1], shadelight[2], 1 ); - - GLfloat vtxA[] = { - 0, 0, -16, - 16 * cos( 0 * M_PI / 2 ), 16 * sin( 0 * M_PI / 2 ), 0, - 16 * cos( 1 * M_PI / 2 ), 16 * sin( 1 * M_PI / 2 ), 0, - 16 * cos( 2 * M_PI / 2 ), 16 * sin( 2 * M_PI / 2 ), 0, - 16 * cos( 3 * M_PI / 2 ), 16 * sin( 3 * M_PI / 2 ), 0, - 16 * cos( 4 * M_PI / 2 ), 16 * sin( 4 * M_PI / 2 ), 0 - }; - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtxA ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 6 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - - GLfloat vtxB[] = { - 0, 0, 16, - 16 * cos( 4 * M_PI / 2 ), 16 * sin( 4 * M_PI / 2 ), 0, - 16 * cos( 3 * M_PI / 2 ), 16 * sin( 3 * M_PI / 2 ), 0, - 16 * cos( 2 * M_PI / 2 ), 16 * sin( 2 * M_PI / 2 ), 0, - 16 * cos( 1 * M_PI / 2 ), 16 * sin( 1 * M_PI / 2 ), 0, - 16 * cos( 0 * M_PI / 2 ), 16 * sin( 0 * M_PI / 2 ), 0 - }; - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtxB ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 6 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - - glColor4f(1, 1, 1, 1); - glPopMatrix(); - glEnable(GL_TEXTURE_2D); -} - -void -R_DrawEntitiesOnList(void) -{ - int i; - - if (!r_drawentities->value) - { - return; - } - - /* draw non-transparent first */ - for (i = 0; i < r_newrefdef.num_entities; i++) - { - entity_t *currententity = &r_newrefdef.entities[i]; - - if (currententity->flags & RF_TRANSLUCENT) - { - continue; /* solid */ - } - - if (currententity->flags & RF_BEAM) - { - R_DrawBeam(currententity); - } - else - { - const model_t *currentmodel = currententity->model; - - if (!currentmodel) - { - R_DrawNullModel(currententity); - continue; - } - - switch (currentmodel->type) - { - case mod_alias: - R_DrawAliasModel(currententity, currentmodel); - break; - case mod_brush: - R_DrawBrushModel(currententity, currentmodel); - break; - case mod_sprite: - R_DrawSpriteModel(currententity, currentmodel); - break; - default: - Com_Error(ERR_DROP, "Bad modeltype"); - break; - } - } - } - - /* draw transparent entities - we could sort these if it ever - becomes a problem... */ - glDepthMask(GL_FALSE); - - for (i = 0; i < r_newrefdef.num_entities; i++) - { - entity_t *currententity = &r_newrefdef.entities[i]; - - if (!(currententity->flags & RF_TRANSLUCENT)) - { - continue; /* solid */ - } - - if (currententity->flags & RF_BEAM) - { - R_DrawBeam(currententity); - } - else - { - const model_t *currentmodel = currententity->model; - - if (!currentmodel) - { - R_DrawNullModel(currententity); - continue; - } - - switch (currentmodel->type) - { - case mod_alias: - R_DrawAliasModel(currententity, currentmodel); - break; - case mod_brush: - R_DrawBrushModel(currententity, currentmodel); - break; - case mod_sprite: - R_DrawSpriteModel(currententity, currentmodel); - break; - default: - Com_Error(ERR_DROP, "Bad modeltype"); - break; - } - } - } - - glDepthMask(GL_TRUE); /* back to writing */ - R_EnableMultitexture(false); -} - -void -R_DrawParticles2(int num_particles, const particle_t particles[], - const unsigned *colortable) -{ - const particle_t *p; - int i; - vec3_t up, right; - float scale; - YQ2_ALIGNAS_TYPE(unsigned) byte color[4]; - - YQ2_VLA(GLfloat, vtx, 3 * num_particles * 3); - YQ2_VLA(GLfloat, tex, 2 * num_particles * 3); - YQ2_VLA(GLubyte, clr, 4 * num_particles * 3); - - unsigned int index_vtx = 0; - unsigned int index_tex = 0; - unsigned int index_clr = 0; - unsigned int j; - - R_Bind(r_particletexture->texnum); - glDepthMask(GL_FALSE); /* no z buffering */ - glEnable(GL_BLEND); - R_TexEnv(GL_MODULATE); - - VectorScale( vup, 1.5, up ); - VectorScale( vright, 1.5, right ); - - for ( p = particles, i = 0; i < num_particles; i++, p++ ) - { - /* hack a scale up to keep particles from disapearing */ - scale = ( p->origin [ 0 ] - r_origin [ 0 ] ) * vpn [ 0 ] + - ( p->origin [ 1 ] - r_origin [ 1 ] ) * vpn [ 1 ] + - ( p->origin [ 2 ] - r_origin [ 2 ] ) * vpn [ 2 ]; - - if ( scale < 20 ) - { - scale = 1; - } - else - { - scale = 1 + scale * 0.004; - } - - *(unsigned *) color = colortable [ p->color ]; - - for (j=0; j<3; j++) // Copy the color for each point - { - clr[index_clr++] = gammatable[color[0]]; - clr[index_clr++] = gammatable[color[1]]; - clr[index_clr++] = gammatable[color[2]]; - clr[index_clr++] = p->alpha * 255; - } - - // point 0 - tex[index_tex++] = 0.0625f; - tex[index_tex++] = 0.0625f; - - vtx[index_vtx++] = p->origin[0]; - vtx[index_vtx++] = p->origin[1]; - vtx[index_vtx++] = p->origin[2]; - - // point 1 - tex[index_tex++] = 1.0625f; - tex[index_tex++] = 0.0625f; - - vtx[index_vtx++] = p->origin [ 0 ] + up [ 0 ] * scale; - vtx[index_vtx++] = p->origin [ 1 ] + up [ 1 ] * scale; - vtx[index_vtx++] = p->origin [ 2 ] + up [ 2 ] * scale; - - // point 2 - tex[index_tex++] = 0.0625f; - tex[index_tex++] = 1.0625f; - - vtx[index_vtx++] = p->origin [ 0 ] + right [ 0 ] * scale; - vtx[index_vtx++] = p->origin [ 1 ] + right [ 1 ] * scale; - vtx[index_vtx++] = p->origin [ 2 ] + right [ 2 ] * scale; - } - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - glEnableClientState( GL_COLOR_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtx ); - glTexCoordPointer( 2, GL_FLOAT, 0, tex ); - glColorPointer( 4, GL_UNSIGNED_BYTE, 0, clr ); - glDrawArrays( GL_TRIANGLES, 0, num_particles*3 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glDisableClientState( GL_COLOR_ARRAY ); - - glDisable(GL_BLEND); - glColor4f(1, 1, 1, 1); - glDepthMask(GL_TRUE); /* back to normal Z buffering */ - R_TexEnv(GL_REPLACE); - - YQ2_VLAFREE(vtx); - YQ2_VLAFREE(tex); - YQ2_VLAFREE(clr); -} - -void -R_DrawParticles(void) -{ - qboolean stereo_split_tb = ((gl_state.stereo_mode == STEREO_SPLIT_VERTICAL) && gl_state.camera_separation); - qboolean stereo_split_lr = ((gl_state.stereo_mode == STEREO_SPLIT_HORIZONTAL) && gl_state.camera_separation); - - if (r_newrefdef.num_particles <= 0) /* avoiding VLA with no size and vertexes built on it */ - { - return; - } - - if (gl_config.pointparameters && !(stereo_split_tb || stereo_split_lr)) - { - int i; - YQ2_ALIGNAS_TYPE(unsigned) byte color[4]; - const particle_t *p; - - YQ2_VLA(GLfloat, vtx, 3 * r_newrefdef.num_particles); - YQ2_VLA(GLubyte, clr, 4 * r_newrefdef.num_particles); - - unsigned int index_vtx = 0; - unsigned int index_clr = 0; - - glDepthMask(GL_FALSE); - glEnable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - - // assume the particle size looks good with window height 480px and scale according to real resolution - glPointSize(gl1_particle_size->value * (float)r_newrefdef.height/480.0f); - - for ( i = 0, p = r_newrefdef.particles; i < r_newrefdef.num_particles; i++, p++ ) - { - *(int *) color = d_8to24table [ p->color & 0xFF ]; - clr[index_clr++] = gammatable[color[0]]; - clr[index_clr++] = gammatable[color[1]]; - clr[index_clr++] = gammatable[color[2]]; - clr[index_clr++] = p->alpha * 255; - - vtx[index_vtx++] = p->origin[0]; - vtx[index_vtx++] = p->origin[1]; - vtx[index_vtx++] = p->origin[2]; - } - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_COLOR_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtx ); - glColorPointer( 4, GL_UNSIGNED_BYTE, 0, clr ); - glDrawArrays( GL_POINTS, 0, r_newrefdef.num_particles ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_COLOR_ARRAY ); - - glDisable(GL_BLEND); - glColor4f( 1, 1, 1, 1 ); - glDepthMask(GL_TRUE); - glEnable(GL_TEXTURE_2D); - - YQ2_VLAFREE(vtx); - YQ2_VLAFREE(clr); - } - else - { - R_DrawParticles2(r_newrefdef.num_particles, - r_newrefdef.particles, d_8to24table); - } -} - -void -R_PolyBlend(void) -{ - if (!gl_polyblend->value) - { - return; - } - - if (!v_blend[3]) - { - return; - } - - glDisable(GL_ALPHA_TEST); - glEnable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - glDisable(GL_TEXTURE_2D); - - glLoadIdentity(); - - glRotatef(-90, 1, 0, 0); /* put Z going up */ - glRotatef(90, 0, 0, 1); /* put Z going up */ - - glColor4f( v_blend[0], v_blend[1], v_blend[2], v_blend[3] ); - - GLfloat vtx[] = { - 10, 100, 100, - 10, -100, 100, - 10, -100, -100, - 10, 100, -100 - }; - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtx ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - - glDisable(GL_BLEND); - glEnable(GL_TEXTURE_2D); - glEnable(GL_ALPHA_TEST); - - glColor4f(1, 1, 1, 1); -} - -static void -R_ResetClearColor(void) -{ - if (gl1_discardfb->value == 1 && !r_clear->value) - { - glClearColor(0, 0, 0, 0.5); - } - else - { - glClearColor(1, 0, 0.5, 0.5); - } -} - -void -R_SetupFrame(void) -{ - int i; - mleaf_t *leaf; - - r_framecount++; - - /* build the transformation matrix for the given view angles */ - VectorCopy(r_newrefdef.vieworg, r_origin); - - AngleVectors(r_newrefdef.viewangles, vpn, vright, vup); - - /* current viewcluster */ - if (!(r_newrefdef.rdflags & RDF_NOWORLDMODEL)) - { - if (!r_worldmodel) - { - Com_Error(ERR_DROP, "%s: bad world model", __func__); - return; - } - - r_oldviewcluster = r_viewcluster; - r_oldviewcluster2 = r_viewcluster2; - leaf = Mod_PointInLeaf(r_origin, r_worldmodel->nodes); - r_viewcluster = r_viewcluster2 = leaf->cluster; - - /* check above and below so crossing solid water doesn't draw wrong */ - if (!leaf->contents) - { - /* look down a bit */ - vec3_t temp; - - VectorCopy(r_origin, temp); - temp[2] -= 16; - leaf = Mod_PointInLeaf(temp, r_worldmodel->nodes); - - if (!(leaf->contents & CONTENTS_SOLID) && - (leaf->cluster != r_viewcluster2)) - { - r_viewcluster2 = leaf->cluster; - } - } - else - { - /* look up a bit */ - vec3_t temp; - - VectorCopy(r_origin, temp); - temp[2] += 16; - leaf = Mod_PointInLeaf(temp, r_worldmodel->nodes); - - if (!(leaf->contents & CONTENTS_SOLID) && - (leaf->cluster != r_viewcluster2)) - { - r_viewcluster2 = leaf->cluster; - } - } - } - - for (i = 0; i < 3; i++) - { - v_blend[i] = r_newrefdef.blend[i] * gl_state.sw_gamma; - } - v_blend[3] = r_newrefdef.blend[3]; - - c_brush_polys = 0; - c_alias_polys = 0; - - /* clear out the portion of the screen that the NOWORLDMODEL defines */ - if (r_newrefdef.rdflags & RDF_NOWORLDMODEL) - { - glEnable(GL_SCISSOR_TEST); - glClearColor(0.3, 0.3, 0.3, 1); - glScissor(r_newrefdef.x, - vid.height - r_newrefdef.height - r_newrefdef.y, - r_newrefdef.width, r_newrefdef.height); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - R_ResetClearColor(); - glDisable(GL_SCISSOR_TEST); - } -} - -void -R_SetPerspective(GLdouble fovy) -{ - // gluPerspective style parameters - const GLdouble zNear = Q_max(gl_znear->value, 0.1f); - const GLdouble zFar = (r_farsee->value) ? 8192.0f : 4096.0f; - const GLdouble aspectratio = (GLdouble)r_newrefdef.width / r_newrefdef.height; - - GLdouble xmin, xmax, ymin, ymax; - - // traditional gluPerspective calculations - https://youtu.be/YqSNGcF5nvM?t=644 - ymax = zNear * tan(fovy * M_PI / 360.0); - xmax = ymax * aspectratio; - - if ((r_newrefdef.rdflags & RDF_UNDERWATER) && gl1_waterwarp->value) - { - const GLdouble warp = sin(r_newrefdef.time * 1.5) * 0.03 * gl1_waterwarp->value; - ymax *= 1.0 - warp; - xmax *= 1.0 + warp; - } - - ymin = -ymax; - xmin = -xmax; - - if (gl_state.camera_separation) - { - const GLdouble separation = - gl1_stereo_convergence->value * (2 * gl_state.camera_separation) / zNear; - xmin += separation; - xmax += separation; - } - - glFrustum(xmin, xmax, ymin, ymax, zNear, zFar); -} - -void -R_SetupGL(void) -{ - int x, x2, y2, y, w, h; - - /* set up viewport */ - x = floor(r_newrefdef.x * vid.width / (float)vid.width); - x2 = ceil((r_newrefdef.x + r_newrefdef.width) * vid.width / (float)vid.width); - y = floor(vid.height - r_newrefdef.y * vid.height / (float)vid.height); - y2 = ceil(vid.height - - (r_newrefdef.y + r_newrefdef.height) * vid.height / (float)vid.height); - - w = x2 - x; - h = y - y2; - - qboolean drawing_left_eye = gl_state.camera_separation < 0; - qboolean stereo_split_tb = ((gl_state.stereo_mode == STEREO_SPLIT_VERTICAL) && gl_state.camera_separation); - qboolean stereo_split_lr = ((gl_state.stereo_mode == STEREO_SPLIT_HORIZONTAL) && gl_state.camera_separation); - - if(stereo_split_lr) { - w = w / 2; - x = drawing_left_eye ? (x / 2) : (x + vid.width) / 2; - } - - if(stereo_split_tb) { - h = h / 2; - y2 = drawing_left_eye ? (y2 + vid.height) / 2 : (y2 / 2); - } - - glViewport(x, y2, w, h); - - /* set up projection matrix */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - R_SetPerspective(r_newrefdef.fov_y); - - glCullFace(GL_FRONT); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glRotatef(-90, 1, 0, 0); /* put Z going up */ - glRotatef(90, 0, 0, 1); /* put Z going up */ - glRotatef(-r_newrefdef.viewangles[2], 1, 0, 0); - glRotatef(-r_newrefdef.viewangles[0], 0, 1, 0); - glRotatef(-r_newrefdef.viewangles[1], 0, 0, 1); - glTranslatef(-r_newrefdef.vieworg[0], -r_newrefdef.vieworg[1], - -r_newrefdef.vieworg[2]); - - glGetFloatv(GL_MODELVIEW_MATRIX, r_world_matrix); - - /* set drawing parms */ - if (r_cull->value) - { - glEnable(GL_CULL_FACE); - } - else - { - glDisable(GL_CULL_FACE); - } - - glDisable(GL_BLEND); - glDisable(GL_ALPHA_TEST); - glEnable(GL_DEPTH_TEST); -} - -void -R_Clear(void) -{ - // Define which buffers need clearing - GLbitfield clearFlags = 0; - GLenum depthFunc = GL_LEQUAL; - - // This breaks stereo modes, but we'll leave that responsibility to the user - if (r_clear->value) - { - clearFlags |= GL_COLOR_BUFFER_BIT; - } - - // No stencil shadows allowed when using certain stereo modes, otherwise "wallhack" happens - if (gl_state.stereo_mode >= STEREO_MODE_ROW_INTERLEAVED && gl_state.stereo_mode <= STEREO_MODE_PIXEL_INTERLEAVED) - { - glClearStencil(0); - clearFlags |= GL_STENCIL_BUFFER_BIT; - } - else if (gl_shadows->value && gl_state.stencil && gl1_stencilshadow->value) - { - glClearStencil(1); - clearFlags |= GL_STENCIL_BUFFER_BIT; - } - - if (gl1_ztrick->value) - { - static int trickframe; - - trickframe++; - - if (trickframe & 1) - { - gldepthmin = 0; - gldepthmax = 0.49999; - } - else - { - gldepthmin = 1; - gldepthmax = 0.5; - depthFunc = GL_GEQUAL; - } - } - else - { - clearFlags |= GL_DEPTH_BUFFER_BIT; - - gldepthmin = 0; - gldepthmax = 1; - } - - switch ((int)gl1_discardfb->value) - { - case 1: - if (gl_state.stereo_mode == STEREO_MODE_NONE) - { - clearFlags |= GL_COLOR_BUFFER_BIT; - } - case 2: - clearFlags |= GL_STENCIL_BUFFER_BIT; - default: - break; - } - - if (clearFlags) - { - glClear(clearFlags); - } - glDepthFunc(depthFunc); - glDepthRange(gldepthmin, gldepthmax); - - if (gl_zfix->value) - { - if (gldepthmax > gldepthmin) - { - glPolygonOffset(0.05, 1); - } - else - { - glPolygonOffset(-0.05, -1); - } - } -} - -void -R_Flash(void) -{ - R_PolyBlend(); -} - -void -R_SetGL2D(void) -{ - int x, w, y, h; - /* set 2D virtual screen size */ - qboolean drawing_left_eye = gl_state.camera_separation < 0; - qboolean stereo_split_tb = ((gl_state.stereo_mode == STEREO_SPLIT_VERTICAL) && gl_state.camera_separation); - qboolean stereo_split_lr = ((gl_state.stereo_mode == STEREO_SPLIT_HORIZONTAL) && gl_state.camera_separation); - - x = 0; - w = vid.width; - y = 0; - h = vid.height; - - if(stereo_split_lr) { - w = w / 2; - x = drawing_left_eye ? 0 : w; - } - - if(stereo_split_tb) { - h = h / 2; - y = drawing_left_eye ? h : 0; - } - - glViewport(x, y, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, vid.width, vid.height, 0, -99999, 99999); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - glDisable(GL_BLEND); - glEnable(GL_ALPHA_TEST); - glColor4f(1, 1, 1, 1); -} - -/* - * r_newrefdef must be set before the first call - */ -static void -R_RenderView(refdef_t *fd) -{ - if ((gl_state.stereo_mode != STEREO_MODE_NONE) && gl_state.camera_separation) { - - qboolean drawing_left_eye = gl_state.camera_separation < 0; - switch (gl_state.stereo_mode) { - case STEREO_MODE_ANAGLYPH: - { - - // Work out the colour for each eye. - int anaglyph_colours[] = { 0x4, 0x3 }; // Left = red, right = cyan. - - if (strlen(gl1_stereo_anaglyph_colors->string) == 2) { - int eye, colour, missing_bits; - // Decode the colour name from its character. - for (eye = 0; eye < 2; ++eye) { - colour = 0; - switch (toupper((unsigned char)gl1_stereo_anaglyph_colors->string[eye])) { - case 'B': ++colour; // 001 Blue - case 'G': ++colour; // 010 Green - case 'C': ++colour; // 011 Cyan - case 'R': ++colour; // 100 Red - case 'M': ++colour; // 101 Magenta - case 'Y': ++colour; // 110 Yellow - anaglyph_colours[eye] = colour; - break; - } - } - // Fill in any missing bits. - missing_bits = ~(anaglyph_colours[0] | anaglyph_colours[1]) & 0x3; - for (eye = 0; eye < 2; ++eye) { - anaglyph_colours[eye] |= missing_bits; - } - } - - // Set the current colour. - glColorMask( - !!(anaglyph_colours[drawing_left_eye] & 0x4), - !!(anaglyph_colours[drawing_left_eye] & 0x2), - !!(anaglyph_colours[drawing_left_eye] & 0x1), - GL_TRUE - ); - } - break; - case STEREO_MODE_ROW_INTERLEAVED: - case STEREO_MODE_COLUMN_INTERLEAVED: - case STEREO_MODE_PIXEL_INTERLEAVED: - { - qboolean flip_eyes = true; - int client_x, client_y; - - GLshort screen[] = { - 0, 0, - (GLshort)vid.width, 0, - (GLshort)vid.width, (GLshort)vid.height, - 0, (GLshort)vid.height - }; - - //GLimp_GetClientAreaOffset(&client_x, &client_y); - client_x = 0; - client_y = 0; - - R_SetGL2D(); - - glEnable(GL_STENCIL_TEST); - glStencilMask(1); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - - glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP); - glStencilFunc(GL_NEVER, 0, 1); - - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_SHORT, 0, screen); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - glDisableClientState(GL_VERTEX_ARRAY); - - glStencilOp(GL_INVERT, GL_KEEP, GL_KEEP); - glStencilFunc(GL_NEVER, 1, 1); - - if (gl_state.stereo_mode == STEREO_MODE_ROW_INTERLEAVED || gl_state.stereo_mode == STEREO_MODE_PIXEL_INTERLEAVED) - { - for (int y = 0; y <= vid.height; y += 2) - { - gl_buf.vtx[gl_buf.vt ] = 0; - gl_buf.vtx[gl_buf.vt + 1] = y - 0.5f; - gl_buf.vtx[gl_buf.vt + 2] = vid.width; - gl_buf.vtx[gl_buf.vt + 3] = y - 0.5f; - gl_buf.vt += 4; - } - flip_eyes ^= (client_y & 1); - } - - if (gl_state.stereo_mode == STEREO_MODE_COLUMN_INTERLEAVED || gl_state.stereo_mode == STEREO_MODE_PIXEL_INTERLEAVED) - { - for (int x = 0; x <= vid.width; x += 2) - { - gl_buf.vtx[gl_buf.vt ] = x - 0.5f; - gl_buf.vtx[gl_buf.vt + 1] = 0; - gl_buf.vtx[gl_buf.vt + 2] = x - 0.5f; - gl_buf.vtx[gl_buf.vt + 3] = vid.height; - gl_buf.vt += 4; - } - flip_eyes ^= (client_x & 1); - } - - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, gl_buf.vtx); - glDrawArrays(GL_LINES, 0, gl_buf.vt / 2); - glDisableClientState(GL_VERTEX_ARRAY); - gl_buf.vt = 0; - - glStencilMask(0); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - glStencilFunc(GL_EQUAL, drawing_left_eye ^ flip_eyes, 1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - break; - default: - break; - } - } - - if (r_norefresh->value) - { - return; - } - - r_newrefdef = *fd; - - if (!r_worldmodel && !(r_newrefdef.rdflags & RDF_NOWORLDMODEL)) - { - Com_Error(ERR_DROP, "%s: NULL worldmodel", __func__); - } - - if (r_speeds->value) - { - c_brush_polys = 0; - c_alias_polys = 0; - } - - R_PushDlights(); - - if (gl_finish->value) - { - glFinish(); - } - - R_SetupFrame(); - - R_SetFrustum(vup, vpn, vright, r_origin, r_newrefdef.fov_x, r_newrefdef.fov_y, - frustum); - - R_SetupGL(); - - R_MarkLeaves(); /* done here so we know if we're in water */ - - R_DrawWorld(); - - R_DrawEntitiesOnList(); - - R_RenderDlights(); - - R_DrawParticles(); - - R_DrawAlphaSurfaces(); - - R_Flash(); - - if (r_speeds->value) - { - Com_Printf("%4i wpoly %4i epoly %i tex %i lmaps\n", - c_brush_polys, c_alias_polys, c_visible_textures, - c_visible_lightmaps); - } - - switch (gl_state.stereo_mode) { - case STEREO_MODE_NONE: - break; - case STEREO_MODE_ANAGLYPH: - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - break; - case STEREO_MODE_ROW_INTERLEAVED: - case STEREO_MODE_COLUMN_INTERLEAVED: - case STEREO_MODE_PIXEL_INTERLEAVED: - glDisable(GL_STENCIL_TEST); - break; - default: - break; - } -} - -enum opengl_special_buffer_modes -GL_GetSpecialBufferModeForStereoMode(enum stereo_modes stereo_mode) { - switch (stereo_mode) { - case STEREO_MODE_NONE: - case STEREO_SPLIT_HORIZONTAL: - case STEREO_SPLIT_VERTICAL: - case STEREO_MODE_ANAGLYPH: - return OPENGL_SPECIAL_BUFFER_MODE_NONE; - case STEREO_MODE_OPENGL: - return OPENGL_SPECIAL_BUFFER_MODE_STEREO; - case STEREO_MODE_ROW_INTERLEAVED: - case STEREO_MODE_COLUMN_INTERLEAVED: - case STEREO_MODE_PIXEL_INTERLEAVED: - return OPENGL_SPECIAL_BUFFER_MODE_STENCIL; - } - return OPENGL_SPECIAL_BUFFER_MODE_NONE; -} - -static void -R_SetLightLevel(entity_t *currententity) -{ - vec3_t shadelight; - - if (r_newrefdef.rdflags & RDF_NOWORLDMODEL) - { - return; - } - - /* save off light value for server to look at */ - R_LightPoint(currententity, r_newrefdef.vieworg, shadelight); - - /* pick the greatest component, which should be the - * same as the mono value returned by software */ - if (shadelight[0] > shadelight[1]) - { - if (shadelight[0] > shadelight[2]) - { - r_lightlevel->value = 150 * shadelight[0]; - } - else - { - r_lightlevel->value = 150 * shadelight[2]; - } - } - else - { - if (shadelight[1] > shadelight[2]) - { - r_lightlevel->value = 150 * shadelight[1]; - } - else - { - r_lightlevel->value = 150 * shadelight[2]; - } - } -} - -static void -RI_RenderFrame(refdef_t *fd) -{ - R_ApplyGLBuffer(); // menu rendering when needed - R_RenderView(fd); - R_SetLightLevel (NULL); - R_SetGL2D(); -} - -#ifdef YQ2_GL1_GLES -#define GLES1_ENABLED_ONLY "1" -#else -#define GLES1_ENABLED_ONLY "0" -#endif - -void -R_Register(void) -{ - gl_lefthand = ri.Cvar_Get("hand", "0", CVAR_USERINFO | CVAR_ARCHIVE); - r_gunfov = ri.Cvar_Get("r_gunfov", "80", CVAR_ARCHIVE); - r_farsee = ri.Cvar_Get("r_farsee", "0", CVAR_LATCH | CVAR_ARCHIVE); - r_norefresh = ri.Cvar_Get("r_norefresh", "0", 0); - r_fullbright = ri.Cvar_Get("r_fullbright", "0", 0); - r_drawentities = ri.Cvar_Get("r_drawentities", "1", 0); - r_drawworld = ri.Cvar_Get("r_drawworld", "1", 0); - r_novis = ri.Cvar_Get("r_novis", "0", 0); - r_lerpmodels = ri.Cvar_Get("r_lerpmodels", "1", 0); - r_speeds = ri.Cvar_Get("r_speeds", "0", 0); - - r_lightlevel = ri.Cvar_Get("r_lightlevel", "0", 0); - gl1_overbrightbits = ri.Cvar_Get("gl1_overbrightbits", "0", CVAR_ARCHIVE); - - gl1_particle_min_size = ri.Cvar_Get("gl1_particle_min_size", "2", CVAR_ARCHIVE); - gl1_particle_max_size = ri.Cvar_Get("gl1_particle_max_size", "40", CVAR_ARCHIVE); - gl1_particle_size = ri.Cvar_Get("gl1_particle_size", "40", CVAR_ARCHIVE); - gl1_particle_att_a = ri.Cvar_Get("gl1_particle_att_a", "0.01", CVAR_ARCHIVE); - gl1_particle_att_b = ri.Cvar_Get("gl1_particle_att_b", "0.0", CVAR_ARCHIVE); - gl1_particle_att_c = ri.Cvar_Get("gl1_particle_att_c", "0.01", CVAR_ARCHIVE); - gl1_particle_square = ri.Cvar_Get("gl1_particle_square", "0", CVAR_ARCHIVE); - - r_modulate = ri.Cvar_Get("r_modulate", "1", CVAR_ARCHIVE); - r_mode = ri.Cvar_Get("r_mode", "4", CVAR_ARCHIVE); - gl_lightmap = ri.Cvar_Get("r_lightmap", "0", 0); - gl_shadows = ri.Cvar_Get("r_shadows", "0", CVAR_ARCHIVE); - gl1_stencilshadow = ri.Cvar_Get("gl1_stencilshadow", "0", CVAR_ARCHIVE); - gl1_dynamic = ri.Cvar_Get("gl1_dynamic", "1", 0); - gl_nobind = ri.Cvar_Get("gl_nobind", "0", 0); - gl1_round_down = ri.Cvar_Get("gl1_round_down", "1", 0); - gl1_picmip = ri.Cvar_Get("gl1_picmip", "0", 0); - gl_showtris = ri.Cvar_Get("gl_showtris", "0", 0); - gl_showbbox = ri.Cvar_Get("gl_showbbox", "0", 0); - gl1_ztrick = ri.Cvar_Get("gl1_ztrick", "0", 0); - gl_zfix = ri.Cvar_Get("gl_zfix", "0", 0); - gl_finish = ri.Cvar_Get("gl_finish", "0", CVAR_ARCHIVE); - r_clear = ri.Cvar_Get("r_clear", "0", 0); - r_cull = ri.Cvar_Get("r_cull", "1", 0); - gl_polyblend = ri.Cvar_Get("gl_polyblend", "1", 0); - gl1_flashblend = ri.Cvar_Get("gl1_flashblend", "0", 0); - r_fixsurfsky = ri.Cvar_Get("r_fixsurfsky", "0", CVAR_ARCHIVE); - gl_znear = ri.Cvar_Get("gl_znear", "4", CVAR_ARCHIVE); - gl1_minlight = ri.Cvar_Get("gl1_minlight", "0", CVAR_ARCHIVE); - - gl_texturemode = ri.Cvar_Get("gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST", CVAR_ARCHIVE); - gl1_texturealphamode = ri.Cvar_Get("gl1_texturealphamode", "default", CVAR_ARCHIVE); - gl1_texturesolidmode = ri.Cvar_Get("gl1_texturesolidmode", "default", CVAR_ARCHIVE); - gl_anisotropic = ri.Cvar_Get("r_anisotropic", "0", CVAR_ARCHIVE); - r_lockpvs = ri.Cvar_Get("r_lockpvs", "0", 0); - - gl1_palettedtexture = ri.Cvar_Get("r_palettedtextures", "0", CVAR_ARCHIVE); - gl1_pointparameters = ri.Cvar_Get("gl1_pointparameters", "1", CVAR_ARCHIVE); - gl1_multitexture = ri.Cvar_Get("gl1_multitexture", "1", CVAR_ARCHIVE); - gl1_lightmapcopies = ri.Cvar_Get("gl1_lightmapcopies", GLES1_ENABLED_ONLY, CVAR_ARCHIVE); - gl1_discardfb = ri.Cvar_Get("gl1_discardfb", GLES1_ENABLED_ONLY, CVAR_ARCHIVE); - - gl_drawbuffer = ri.Cvar_Get("gl_drawbuffer", "GL_BACK", 0); - r_vsync = ri.Cvar_Get("r_vsync", "1", CVAR_ARCHIVE); - - gl1_saturatelighting = ri.Cvar_Get("gl1_saturatelighting", "0", 0); - - vid_fullscreen = ri.Cvar_Get("vid_fullscreen", "0", CVAR_ARCHIVE); - vid_gamma = ri.Cvar_Get("vid_gamma", "1.2", CVAR_ARCHIVE); - - r_customwidth = ri.Cvar_Get("r_customwidth", "1024", CVAR_ARCHIVE); - r_customheight = ri.Cvar_Get("r_customheight", "768", CVAR_ARCHIVE); - gl_msaa_samples = ri.Cvar_Get ( "r_msaa_samples", "0", CVAR_ARCHIVE ); - - r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE); - r_validation = ri.Cvar_Get("r_validation", "0", CVAR_ARCHIVE); - r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE); - - /* don't bilerp characters and crosshairs */ - gl_nolerp_list = ri.Cvar_Get("r_nolerp_list", "pics/conchars.pcx pics/ch1.pcx pics/ch2.pcx pics/ch3.pcx", CVAR_ARCHIVE); - /* textures that should always be filtered, even if r_2D_unfiltered or an unfiltered gl mode is used */ - r_lerp_list = ri.Cvar_Get("r_lerp_list", "", CVAR_ARCHIVE); - /* don't bilerp any 2D elements */ - r_2D_unfiltered = ri.Cvar_Get("r_2D_unfiltered", "0", CVAR_ARCHIVE); - /* don't bilerp videos */ - r_videos_unfiltered = ri.Cvar_Get("r_videos_unfiltered", "0", CVAR_ARCHIVE); - - gl1_stereo = ri.Cvar_Get( "gl1_stereo", "0", CVAR_ARCHIVE ); - gl1_stereo_separation = ri.Cvar_Get( "gl1_stereo_separation", "-0.4", CVAR_ARCHIVE ); - gl1_stereo_anaglyph_colors = ri.Cvar_Get( "gl1_stereo_anaglyph_colors", "rc", CVAR_ARCHIVE ); - gl1_stereo_convergence = ri.Cvar_Get( "gl1_stereo_convergence", "1", CVAR_ARCHIVE ); - - gl1_waterwarp = ri.Cvar_Get( "gl1_waterwarp", "1.0", CVAR_ARCHIVE ); - - ri.Cmd_AddCommand("imagelist", R_ImageList_f); - ri.Cmd_AddCommand("screenshot", R_ScreenShot); - ri.Cmd_AddCommand("modellist", Mod_Modellist_f); - ri.Cmd_AddCommand("gl_strings", R_Strings); -} - -#undef GLES1_ENABLED_ONLY - -/* - * Changes the video mode - */ -static int -SetMode_impl(int *pwidth, int *pheight, int mode, int fullscreen) -{ - Com_Printf("Setting mode %d:", mode); - - /* mode -1 is not in the vid mode table - so we keep the values in pwidth - and pheight and don't even try to look up the mode info */ - if ((mode >= 0) && !ri.Vid_GetModeInfo(pwidth, pheight, mode)) - { - Com_Printf(" invalid mode\n"); - return rserr_invalid_mode; - } - - /* We trying to get resolution from desktop */ - if (mode == -2) - { - if(!ri.GLimp_GetDesktopMode(pwidth, pheight)) - { - Com_Printf(" can't detect mode\n" ); - return rserr_invalid_mode; - } - } - - Com_Printf(" %dx%d (vid_fullscreen %i)\n", *pwidth, *pheight, fullscreen); - - if (!ri.GLimp_InitGraphics(fullscreen, pwidth, pheight)) - { - return rserr_invalid_mode; - } - - /* This is totaly obscure: For some strange reasons the renderer - maintains two(!) repesentations of the resolution. One comes - from the client and is saved in r_newrefdef. The other one - is determined here and saved in vid. Several calculations take - both representations into account. - - The values will always be the same. The GLimp_InitGraphics() - call above communicates the requested resolution to the client - where it ends up in the vid subsystem and the vid system writes - it into r_newrefdef. - - We can't avoid the client roundtrip, because we can get the - real size of the drawable (which can differ from the resolution - due to high dpi awareness) only after the render context was - created by GLimp_InitGraphics() and need to communicate it - somehow to the client. So we just overwrite the values saved - in vid with a call to RI_GetDrawableSize(), just like the - client does. This makes sure that both values are the same - and everything is okay. - - We also need to take the special case fullscreen window into - account. With the fullscreen windows we cannot use the - drawable size, it would scale all cases to the size of the - window. Instead use the drawable size when the user wants - native resolution (the fullscreen window fills the screen) - and use the requested resolution in all other cases. */ - if (IsHighDPIaware) - { - if (vid_fullscreen->value != 2) - { - RI_GetDrawableSize(pwidth, pheight); - } - else - { - if (r_mode->value == -2) - { - /* User requested native resolution. */ - RI_GetDrawableSize(pwidth, pheight); - } - } - } - - return rserr_ok; -} - -qboolean -R_SetMode(void) -{ - rserr_t err; - int fullscreen; - - fullscreen = (int)vid_fullscreen->value; - - /* a bit hackish approach to enable custom resolutions: - Glimp_SetMode needs these values set for mode -1 */ - vid.width = r_customwidth->value; - vid.height = r_customheight->value; - - if ((err = SetMode_impl(&vid.width, &vid.height, r_mode->value, - fullscreen)) == rserr_ok) - { - if (r_mode->value == -1) - { - gl_state.prev_mode = 4; /* safe default for custom mode */ - } - else - { - gl_state.prev_mode = r_mode->value; - } - } - else - { - if (err == rserr_invalid_mode) - { - Com_Printf("ref_gl::R_SetMode() - invalid mode\n"); - if (gl_msaa_samples->value != 0.0f) - { - Com_Printf("gl_msaa_samples was %d - will try again with gl_msaa_samples = 0\n", (int)gl_msaa_samples->value); - ri.Cvar_SetValue("r_msaa_samples", 0.0f); - gl_msaa_samples->modified = false; - - if ((err = SetMode_impl(&vid.width, &vid.height, r_mode->value, 0)) == rserr_ok) - { - return true; - } - } - if(r_mode->value == gl_state.prev_mode) - { - // trying again would result in a crash anyway, give up already - // (this would happen if your initing fails at all and your resolution already was 640x480) - return false; - } - ri.Cvar_SetValue("r_mode", gl_state.prev_mode); - r_mode->modified = false; - } - - /* try setting it back to something safe */ - if ((err = SetMode_impl(&vid.width, &vid.height, gl_state.prev_mode, 0)) != rserr_ok) - { - Com_Printf("ref_gl::R_SetMode() - could not revert to safe mode\n"); - return false; - } - } - - return true; -} - -// just to avoid too many preprocessor directives in RI_Init() -typedef enum -{ - rf_opengl14, - rf_opengles10 -} refresher_t; - -qboolean -RI_Init(void) -{ - int j; - byte *colormap; - extern float r_turbsin[256]; - -#ifdef YQ2_GL1_GLES -#define GLEXTENSION_NPOT "GL_OES_texture_npot" - static const refresher_t refresher = rf_opengles10; -#else -#define GLEXTENSION_NPOT "GL_ARB_texture_non_power_of_two" - static const refresher_t refresher = rf_opengl14; -#endif - - Swap_Init(); - - for (j = 0; j < 256; j++) - { - r_turbsin[j] *= 0.5; - } - - Com_Printf("Refresh: " REF_VERSION "\n"); - Com_Printf("Client: " YQ2VERSION "\n\n"); - -#ifdef DEBUG - Com_Printf("ref_gl1::%s - DEBUG mode enabled\n", __func__); -#endif - - GetPCXPalette (&colormap, d_8to24table); - free(colormap); - - R_Register(); - - /* initialize our QGL dynamic bindings */ - QGL_Init(); - - /* set our "safe" mode */ - gl_state.prev_mode = 4; - gl_state.stereo_mode = gl1_stereo->value; - - /* create the window and set up the context */ - if (!R_SetMode()) - { - QGL_Shutdown(); - Com_Printf("ref_gl1::%s - could not R_SetMode()\n", __func__); - return false; - } - - ri.Vid_MenuInit(); - - // -------- - - /* get our various GL strings */ - Com_Printf("\nOpenGL setting:\n"); - - gl_config.vendor_string = (char *)glGetString(GL_VENDOR); - Com_Printf("GL_VENDOR: %s\n", gl_config.vendor_string); - - gl_config.renderer_string = (char *)glGetString(GL_RENDERER); - Com_Printf("GL_RENDERER: %s\n", gl_config.renderer_string); - - gl_config.version_string = (char *)glGetString(GL_VERSION); - Com_Printf("GL_VERSION: %s\n", gl_config.version_string); - - gl_config.extensions_string = (char *)glGetString(GL_EXTENSIONS); - Com_Printf("GL_EXTENSIONS: %s\n", gl_config.extensions_string); - - sscanf(gl_config.version_string, "%d.%d", &gl_config.major_version, &gl_config.minor_version); - - if (refresher == rf_opengl14 && gl_config.major_version == 1) - { - if (gl_config.minor_version < 4) - { - QGL_Shutdown(); - Com_Printf("Support for OpenGL 1.4 is not available\n"); - - return false; - } - } - - Com_Printf("\n\nProbing for OpenGL extensions:\n"); - - // ---- - - /* Point parameters */ - Com_Printf(" - Point parameters: "); - - if ( refresher == rf_opengles10 || - strstr(gl_config.extensions_string, "GL_ARB_point_parameters") || - strstr(gl_config.extensions_string, "GL_EXT_point_parameters") ) // should exist for all OGL 1.4 hw... - { - qglPointParameterf = (void (APIENTRY *)(GLenum, GLfloat))RI_GetProcAddress ( "glPointParameterf" ); - qglPointParameterfv = (void (APIENTRY *)(GLenum, const GLfloat *))RI_GetProcAddress ( "glPointParameterfv" ); - - if (!qglPointParameterf || !qglPointParameterfv) - { - qglPointParameterf = (void (APIENTRY *)(GLenum, GLfloat))RI_GetProcAddress ( "glPointParameterfARB" ); - qglPointParameterfv = (void (APIENTRY *)(GLenum, const GLfloat *))RI_GetProcAddress ( "glPointParameterfvARB" ); - } - if (!qglPointParameterf || !qglPointParameterfv) - { - qglPointParameterf = (void (APIENTRY *)(GLenum, GLfloat))RI_GetProcAddress ( "glPointParameterfEXT" ); - qglPointParameterfv = (void (APIENTRY *)(GLenum, const GLfloat *))RI_GetProcAddress ( "glPointParameterfvEXT" ); - } - } - - gl_config.pointparameters = false; - - if (gl1_pointparameters->value) - { - if (qglPointParameterf && qglPointParameterfv) - { - gl_config.pointparameters = true; - Com_Printf("Okay\n"); - } - else - { - Com_Printf("Failed\n"); - } - } - else - { - Com_Printf("Disabled\n"); - } - - // ---- - - /* Paletted texture */ - Com_Printf(" - Paletted texture: "); - - if (strstr(gl_config.extensions_string, "GL_EXT_paletted_texture") && - strstr(gl_config.extensions_string, "GL_EXT_shared_texture_palette")) - { - qglColorTableEXT = (void (APIENTRY *)(GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid * )) - RI_GetProcAddress ("glColorTableEXT"); - } - - gl_config.palettedtexture = false; - - if (gl1_palettedtexture->value) - { - if (qglColorTableEXT) - { - gl_config.palettedtexture = true; - Com_Printf("Okay\n"); - } - else - { - Com_Printf("Failed\n"); - } - } - else - { - Com_Printf("Disabled\n"); - } - - // -------- - - /* Anisotropic */ - Com_Printf(" - Anisotropic: "); - - if (strstr(gl_config.extensions_string, "GL_EXT_texture_filter_anisotropic")) - { - gl_config.anisotropic = true; - glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_config.max_anisotropy); - - Com_Printf("%ux\n", (int)gl_config.max_anisotropy); - } - else - { - gl_config.anisotropic = false; - gl_config.max_anisotropy = 0.0; - - Com_Printf("Failed\n"); - } - - // ---- - - /* Non power of two textures */ - Com_Printf(" - Non power of two textures: "); - - if (strstr(gl_config.extensions_string, GLEXTENSION_NPOT)) - { - gl_config.npottextures = true; - Com_Printf("Okay\n"); - } - else - { - gl_config.npottextures = false; - Com_Printf("Failed\n"); - } - -#undef GLEXTENSION_NPOT - - // ---- - - /* Multitexturing */ - gl_config.multitexture = false; - - Com_Printf(" - Multitexturing: "); - - if ( refresher == rf_opengles10 || strstr(gl_config.extensions_string, "GL_ARB_multitexture") ) - { - qglActiveTexture = (void (APIENTRY *)(GLenum))RI_GetProcAddress ("glActiveTexture"); - qglClientActiveTexture = (void (APIENTRY *)(GLenum))RI_GetProcAddress ("glClientActiveTexture"); - - if (!qglActiveTexture || !qglClientActiveTexture) - { - qglActiveTexture = (void (APIENTRY *)(GLenum))RI_GetProcAddress ("glActiveTextureARB"); - qglClientActiveTexture = (void (APIENTRY *)(GLenum))RI_GetProcAddress ("glClientActiveTextureARB"); - } - } - - if (gl1_multitexture->value) - { - if (qglActiveTexture && qglClientActiveTexture) - { - gl_config.multitexture = true; - Com_Printf("Okay\n"); - } - else - { - Com_Printf("Failed\n"); - } - } - else - { - Com_Printf("Disabled\n"); - } - - // ---- - - /* Lightmap copies: keep multiple copies of "the same" lightmap on video memory. - * All of them are actually different, because they are affected by different dynamic lighting, - * in different frames. This is not meant for Immediate-Mode Rendering systems (desktop), - * but for Tile-Based / Deferred Rendering ones (embedded / mobile), since active manipulation - * of textures already being used in the last few frames can cause slowdown on these systems. - * Needless to say, GPU memory usage is highly increased, so watch out in low memory situations. - */ - - Com_Printf(" - Lightmap copies: "); - gl_config.lightmapcopies = false; - if (gl_config.multitexture && gl1_lightmapcopies->value) - { - gl_config.lightmapcopies = true; - Com_Printf("Okay\n"); - } - else - { - Com_Printf("Disabled\n"); - } - - // ---- - - /* Discard framebuffer: Enables the use of a "performance hint" to the graphic - * driver in GLES1, to get rid of the contents of the different framebuffers. - * Useful for some GPUs that may attempt to keep them and/or write them back to - * external/uniform memory, actions that are useless for Quake 2 rendering path. - * https://registry.khronos.org/OpenGL/extensions/EXT/EXT_discard_framebuffer.txt - * This extension is used by 'gl1_discardfb', and regardless of its existence, - * that cvar will enable glClear at the start of each frame, helping mobile GPUs. - */ - -#ifdef YQ2_GL1_GLES - Com_Printf(" - Discard framebuffer: "); - - if (strstr(gl_config.extensions_string, "GL_EXT_discard_framebuffer")) - { - qglDiscardFramebufferEXT = (void (APIENTRY *)(GLenum, GLsizei, const GLenum *)) - RI_GetProcAddress ("glDiscardFramebufferEXT"); - } - - if (gl1_discardfb->value) - { - if (qglDiscardFramebufferEXT) // enough to verify availability - { - Com_Printf("Okay\n"); - } - else - { - Com_Printf("Failed\n"); - } - } - else - { - Com_Printf("Disabled\n"); - } -#endif - - // ---- - - R_ResetClearColor(); - R_SetDefaultState(); - - Scrap_Init(); - R_InitImages(); - Mod_Init(); - R_InitParticleTexture(); - Draw_InitLocal(); - R_ResetGLBuffer(); - - return true; -} - -void -RI_Shutdown(void) -{ - ri.Cmd_RemoveCommand("modellist"); - ri.Cmd_RemoveCommand("screenshot"); - ri.Cmd_RemoveCommand("imagelist"); - ri.Cmd_RemoveCommand("gl_strings"); - - LM_FreeLightmapBuffers(); - Mod_FreeAll(); - - R_ShutdownImages(); - - /* shutdown OS specific OpenGL stuff like contexts, etc. */ - RI_ShutdownContext(); - - /* shutdown our QGL subsystem */ - QGL_Shutdown(); -} - -void -RI_BeginFrame(float camera_separation) -{ - gl_state.camera_separation = camera_separation; - - // force a vid_restart if gl1_stereo has been modified. - if ( gl_state.stereo_mode != gl1_stereo->value ) - { - // If we've gone from one mode to another with the same special buffer requirements there's no need to restart. - if ( GL_GetSpecialBufferModeForStereoMode( gl_state.stereo_mode ) == GL_GetSpecialBufferModeForStereoMode( gl1_stereo->value ) ) - { - gl_state.stereo_mode = gl1_stereo->value; - } - else - { - Com_Printf("stereo supermode changed, restarting video!\n"); - ri.Cmd_ExecuteText(EXEC_APPEND, "vid_restart\n"); - } - } - - if (vid_gamma->modified) - { - vid_gamma->modified = false; - RI_UpdateGamma(); - } - - // Clamp overbrightbits - if (gl1_overbrightbits->modified) - { - int obb_val = (int)gl1_overbrightbits->value; - - obb_val = Q_clamp(obb_val, 0, 4); - if (obb_val == 3) // allowed values: 0,1,2,4 - { - obb_val = 2; - } - - ri.Cvar_SetValue("gl1_overbrightbits", obb_val); - gl1_overbrightbits->modified = false; - } - - /* go into 2D mode */ - - // FIXME: just call R_SetGL2D(); - - int x, w, y, h; - qboolean drawing_left_eye = gl_state.camera_separation < 0; - qboolean stereo_split_tb = ((gl_state.stereo_mode == STEREO_SPLIT_VERTICAL) && gl_state.camera_separation); - qboolean stereo_split_lr = ((gl_state.stereo_mode == STEREO_SPLIT_HORIZONTAL) && gl_state.camera_separation); - - x = 0; - w = vid.width; - y = 0; - h = vid.height; - - if(stereo_split_lr) { - w = w / 2; - x = drawing_left_eye ? 0 : w; - } - - if(stereo_split_tb) { - h = h / 2; - y = drawing_left_eye ? h : 0; - } - - glViewport(x, y, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0, vid.width, vid.height, 0, -99999, 99999); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - glDisable(GL_BLEND); - glEnable(GL_ALPHA_TEST); - glColor4f(1, 1, 1, 1); - - if (gl1_particle_square->modified) - { - if (gl_config.pointparameters) - { - /* GL_POINT_SMOOTH is not implemented by some OpenGL - drivers, especially the crappy Mesa3D backends like - i915.so. That the points are squares and not circles - is not a problem by Quake II! */ - if (gl1_particle_square->value) - { - glDisable(GL_POINT_SMOOTH); - } - else - { - glEnable(GL_POINT_SMOOTH); - } - } - else - { - // particles aren't drawn as GL_POINTS, but as textured triangles - // => update particle texture to look square - or circle-ish - R_InitParticleTexture(); - } - - gl1_particle_square->modified = false; - } - - /* draw buffer stuff */ - if (gl_drawbuffer->modified) - { - gl_drawbuffer->modified = false; - -#ifndef YQ2_GL1_GLES - if ((gl_state.camera_separation == 0) || gl_state.stereo_mode != STEREO_MODE_OPENGL) - { - if (Q_stricmp(gl_drawbuffer->string, "GL_FRONT") == 0) - { - glDrawBuffer(GL_FRONT); - } - else - { - glDrawBuffer(GL_BACK); - } - } -#endif - } - - /* texturemode stuff */ - if (gl_texturemode->modified || (gl_config.anisotropic && gl_anisotropic->modified) - || gl_nolerp_list->modified || r_lerp_list->modified - || r_2D_unfiltered->modified || r_videos_unfiltered->modified) - { - R_TextureMode(gl_texturemode->string); - gl_texturemode->modified = false; - gl_anisotropic->modified = false; - gl_nolerp_list->modified = false; - r_lerp_list->modified = false; - r_2D_unfiltered->modified = false; - r_videos_unfiltered->modified = false; - } - - if (gl1_texturealphamode->modified) - { - R_TextureAlphaMode(gl1_texturealphamode->string); - gl1_texturealphamode->modified = false; - } - - if (gl1_texturesolidmode->modified) - { - R_TextureSolidMode(gl1_texturesolidmode->string); - gl1_texturesolidmode->modified = false; - } - - if (r_vsync->modified) - { - r_vsync->modified = false; - RI_SetVsync(); - } - - /* clear screen if desired */ - R_Clear(); -} - -void -RI_SetPalette(const unsigned char *palette) -{ - int i; - - byte *rp = (byte *)r_rawpalette; - - if (palette) - { - for (i = 0; i < 256; i++) - { - rp[i * 4 + 0] = gammatable[palette[i * 3 + 0]]; - rp[i * 4 + 1] = gammatable[palette[i * 3 + 1]]; - rp[i * 4 + 2] = gammatable[palette[i * 3 + 2]]; - rp[i * 4 + 3] = 0xff; - } - } - else - { - for (i = 0; i < 256; i++) - { - rp[i * 4 + 0] = LittleLong(d_8to24table[i]) & 0xff; - rp[i * 4 + 1] = (LittleLong(d_8to24table[i]) >> 8) & 0xff; - rp[i * 4 + 2] = (LittleLong(d_8to24table[i]) >> 16) & 0xff; - rp[i * 4 + 3] = 0xff; - } - } - - R_SetTexturePalette(r_rawpalette); - - glClearColor(0, 0, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); - R_ResetClearColor(); -} - -/* R_DrawBeam */ -void -R_DrawBeam(entity_t *e) -{ - int i, clr[4]; - - vec3_t perpvec; - vec3_t direction, normalized_direction; - vec3_t start_points[NUM_BEAM_SEGS], end_points[NUM_BEAM_SEGS]; - vec3_t oldorigin, origin; - - GLfloat vtx[3*NUM_BEAM_SEGS*4]; - unsigned int index_vtx = 0; - unsigned int pointb; - - oldorigin[0] = e->oldorigin[0]; - oldorigin[1] = e->oldorigin[1]; - oldorigin[2] = e->oldorigin[2]; - - origin[0] = e->origin[0]; - origin[1] = e->origin[1]; - origin[2] = e->origin[2]; - - normalized_direction[0] = direction[0] = oldorigin[0] - origin[0]; - normalized_direction[1] = direction[1] = oldorigin[1] - origin[1]; - normalized_direction[2] = direction[2] = oldorigin[2] - origin[2]; - - if (VectorNormalize(normalized_direction) == 0) - { - return; - } - - PerpendicularVector(perpvec, normalized_direction); - VectorScale(perpvec, e->frame / 2, perpvec); - - for (i = 0; i < 6; i++) - { - RotatePointAroundVector(start_points[i], normalized_direction, perpvec, - (360.0 / NUM_BEAM_SEGS) * i); - VectorAdd(start_points[i], origin, start_points[i]); - VectorAdd(start_points[i], direction, end_points[i]); - } - - R_EnableMultitexture(false); - glDisable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glDepthMask(GL_FALSE); - - clr[0] = (LittleLong(d_8to24table[e->skinnum & 0xFF])) & 0xFF; - clr[1] = (LittleLong(d_8to24table[e->skinnum & 0xFF]) >> 8) & 0xFF; - clr[2] = (LittleLong(d_8to24table[e->skinnum & 0xFF]) >> 16) & 0xFF; - clr[3] = e->alpha * 255; - - glColor4ub(gammatable[clr[0]], gammatable[clr[1]], - gammatable[clr[2]], clr[3]); - - for ( i = 0; i < NUM_BEAM_SEGS; i++ ) - { - vtx[index_vtx++] = start_points [ i ][ 0 ]; - vtx[index_vtx++] = start_points [ i ][ 1 ]; - vtx[index_vtx++] = start_points [ i ][ 2 ]; - - vtx[index_vtx++] = end_points [ i ][ 0 ]; - vtx[index_vtx++] = end_points [ i ][ 1 ]; - vtx[index_vtx++] = end_points [ i ][ 2 ]; - - pointb = ( i + 1 ) % NUM_BEAM_SEGS; - vtx[index_vtx++] = start_points [ pointb ][ 0 ]; - vtx[index_vtx++] = start_points [ pointb ][ 1 ]; - vtx[index_vtx++] = start_points [ pointb ][ 2 ]; - - vtx[index_vtx++] = end_points [ pointb ][ 0 ]; - vtx[index_vtx++] = end_points [ pointb ][ 1 ]; - vtx[index_vtx++] = end_points [ pointb ][ 2 ]; - } - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtx ); - glDrawArrays( GL_TRIANGLE_STRIP, 0, NUM_BEAM_SEGS*4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - - glEnable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - glDepthMask(GL_TRUE); -} - -extern int RI_PrepareForWindow(void); -extern int RI_InitContext(void* win); - -extern void RI_BeginRegistration(const char *model); -extern struct model_s * RI_RegisterModel(const char *name); -extern struct image_s * RI_RegisterSkin(const char *name); - -extern void RI_SetSky(const char *name, float rotate, vec3_t axis); -extern void RI_EndRegistration(void); - -extern void RI_RenderFrame(refdef_t *fd); - -extern void RI_SetPalette(const unsigned char *palette); -extern qboolean RI_IsVSyncActive(void); -extern void RI_EndFrame(void); - -/* -===================== -RI_EndWorldRenderpass -===================== -*/ -static qboolean -RI_EndWorldRenderpass( void ) -{ - return true; -} - -Q2_DLL_EXPORTED refexport_t -GetRefAPI(refimport_t imp) -{ - refexport_t re = {0}; - - ri = imp; - - re.api_version = API_VERSION; - re.framework_version = RI_GetSDLVersion(); - - re.Init = RI_Init; - re.Shutdown = RI_Shutdown; - re.PrepareForWindow = RI_PrepareForWindow; - re.InitContext = RI_InitContext; - re.GetDrawableSize = RI_GetDrawableSize; - re.ShutdownContext = RI_ShutdownContext; - re.IsVSyncActive = RI_IsVSyncActive; - re.BeginRegistration = RI_BeginRegistration; - re.RegisterModel = RI_RegisterModel; - re.RegisterSkin = RI_RegisterSkin; - - re.SetSky = RI_SetSky; - re.EndRegistration = RI_EndRegistration; - - re.RenderFrame = RI_RenderFrame; - - re.DrawFindPic = RDraw_FindPic; - - re.DrawGetPicSize = RDraw_GetPicSize; - //re.DrawPic = Draw_Pic; - re.DrawPicScaled = RDraw_PicScaled; - re.DrawStretchPic = RDraw_StretchPic; - //re.DrawChar = Draw_Char; - re.DrawCharScaled = RDraw_CharScaled; - re.DrawTileClear = RDraw_TileClear; - re.DrawFill = RDraw_Fill; - re.DrawFadeScreen = RDraw_FadeScreen; - - re.DrawStretchRaw = RDraw_StretchRaw; - - re.SetPalette = RI_SetPalette; - re.BeginFrame = RI_BeginFrame; - re.EndWorldRenderpass = RI_EndWorldRenderpass; - re.EndFrame = RI_EndFrame; - - // Tell the client that we're unsing the - // new renderer restart API. - ri.Vid_RequestRestart(RESTART_NO); - - return re; -} - -#ifdef DEBUG -void -glCheckError_(const char *file, const char *function, int line) -{ - GLenum errorCode; - const char * msg; - -#define MY_ERROR_CASE(X) case X : msg = #X; break; - - while ((errorCode = glGetError()) != GL_NO_ERROR) - { - switch(errorCode) - { - MY_ERROR_CASE(GL_INVALID_ENUM); - MY_ERROR_CASE(GL_INVALID_VALUE); - MY_ERROR_CASE(GL_INVALID_OPERATION); - MY_ERROR_CASE(GL_STACK_OVERFLOW); - MY_ERROR_CASE(GL_STACK_UNDERFLOW); - MY_ERROR_CASE(GL_OUT_OF_MEMORY); - default: msg = "UNKNOWN"; - } - Com_Printf("glError: %s in %s (%s, %d)\n", msg, function, file, line); - } - -#undef MY_ERROR_CASE - -} -#endif diff --git a/src/client/refresh/gl1/gl1_mesh.c b/src/client/refresh/gl1/gl1_mesh.c deleted file mode 100644 index c3327897a..000000000 --- a/src/client/refresh/gl1/gl1_mesh.c +++ /dev/null @@ -1,738 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Mesh handling - * - * ======================================================================= - */ - -#include "header/local.h" - -#define NUMVERTEXNORMALS 162 -#define SHADEDOT_QUANT 16 - -float r_avertexnormals[NUMVERTEXNORMALS][3] = { -#include "../constants/anorms.h" -}; - -/* precalculated dot products for quantized angles */ -float r_avertexnormal_dots[SHADEDOT_QUANT][256] = { -#include "../constants/anormtab.h" -}; - -typedef float vec4_t[4]; -static vec4_t s_lerped[MAX_VERTS]; -vec3_t shadevector; -float shadelight[3]; -float *shadedots = r_avertexnormal_dots[0]; -extern vec3_t lightspot; - -extern unsigned char minlight[256]; - -static void -R_LerpVerts(entity_t *currententity, int nverts, dtrivertx_t *v, dtrivertx_t *ov, - dtrivertx_t *verts, float *lerp, float move[3], - float frontv[3], float backv[3]) -{ - int i; - - if (currententity->flags & - (RF_SHELL_RED | RF_SHELL_GREEN | - RF_SHELL_BLUE | RF_SHELL_DOUBLE | - RF_SHELL_HALF_DAM)) - { - for (i = 0; i < nverts; i++, v++, ov++, lerp += 4) - { - float *normal = r_avertexnormals[verts[i].lightnormalindex]; - - lerp[0] = move[0] + ov->v[0] * backv[0] + v->v[0] * frontv[0] + - normal[0] * POWERSUIT_SCALE; - lerp[1] = move[1] + ov->v[1] * backv[1] + v->v[1] * frontv[1] + - normal[1] * POWERSUIT_SCALE; - lerp[2] = move[2] + ov->v[2] * backv[2] + v->v[2] * frontv[2] + - normal[2] * POWERSUIT_SCALE; - } - } - else - { - for (i = 0; i < nverts; i++, v++, ov++, lerp += 4) - { - lerp[0] = move[0] + ov->v[0] * backv[0] + v->v[0] * frontv[0]; - lerp[1] = move[1] + ov->v[1] * backv[1] + v->v[1] * frontv[1]; - lerp[2] = move[2] + ov->v[2] * backv[2] + v->v[2] * frontv[2]; - } - } -} - -/* - * Interpolates between two frames and origins - */ -static void -R_DrawAliasFrameLerp(entity_t *currententity, dmdl_t *paliashdr, float backlerp) -{ - daliasframe_t *frame, *oldframe; - dtrivertx_t *v, *ov, *verts; - int *order; - int count, i, index_xyz; - float tex[2], frontlerp, l, alpha; - vec3_t move, delta, vectors[3]; - vec3_t frontv, backv; - float *lerp; - - frame = (daliasframe_t *)((byte *)paliashdr + paliashdr->ofs_frames - + currententity->frame * paliashdr->framesize); - verts = v = frame->verts; - - oldframe = (daliasframe_t *)((byte *)paliashdr + paliashdr->ofs_frames - + currententity->oldframe * paliashdr->framesize); - ov = oldframe->verts; - - order = (int *)((byte *)paliashdr + paliashdr->ofs_glcmds); - - if (currententity->flags & RF_TRANSLUCENT) - { - alpha = currententity->alpha; - } - else - { - alpha = 1.0; - } - - frontlerp = 1.0 - backlerp; - - /* move should be the delta back to the previous frame * backlerp */ - VectorSubtract(currententity->oldorigin, currententity->origin, delta); - AngleVectors(currententity->angles, vectors[0], vectors[1], vectors[2]); - - move[0] = DotProduct(delta, vectors[0]); /* forward */ - move[1] = -DotProduct(delta, vectors[1]); /* left */ - move[2] = DotProduct(delta, vectors[2]); /* up */ - - VectorAdd(move, oldframe->translate, move); - - for (i = 0; i < 3; i++) - { - move[i] = backlerp * move[i] + frontlerp * frame->translate[i]; - } - - for (i = 0; i < 3; i++) - { - frontv[i] = frontlerp * frame->scale[i]; - backv[i] = backlerp * oldframe->scale[i]; - } - - lerp = s_lerped[0]; - - R_LerpVerts(currententity, paliashdr->num_xyz, v, ov, verts, lerp, move, frontv, backv); - - while (1) - { - int idx[3]; - - /* get the vertex count and primitive type */ - count = *order++; - - if (!count) - { - break; /* done */ - } - - if (count < 0) - { - count = -count; - R_SetBufferIndices(GL_TRIANGLE_FAN, count); - } - else - { - R_SetBufferIndices(GL_TRIANGLE_STRIP, count); - } - - if (currententity->flags & - (RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE)) - { - do - { - index_xyz = order[2]; - order += 3; - - GLBUFFER_VERTEX(s_lerped[index_xyz][0], - s_lerped[index_xyz][1], s_lerped[index_xyz][2]) - - for (i = 0; i < 3; i++) - { - idx[i] = shadelight[i] * 255; - idx[i] = Q_clamp(idx[i], 0, 255); - } - - if (gl_state.minlight_set) - { - for (i = 0; i < 3; i++) - { - idx[i] = minlight[idx[i]]; - } - } - - GLBUFFER_COLOR(gammatable[idx[0]], - gammatable[idx[1]], - gammatable[idx[2]], alpha * 255) - } - while (--count); - } - else - { - do - { - /* texture coordinates come from the draw list */ - tex[0] = ((float *)order)[0]; - tex[1] = ((float *)order)[1]; - - index_xyz = order[2]; - order += 3; - - /* normals and vertexes come from the frame list */ - l = shadedots[verts[index_xyz].lightnormalindex]; - - GLBUFFER_VERTEX(s_lerped[index_xyz][0], - s_lerped[index_xyz][1], s_lerped[index_xyz][2]) - - GLBUFFER_SINGLETEX(tex[0], tex[1]) - - for (i = 0; i < 3; i++) - { - idx[i] = l * shadelight[i] * 255; - idx[i] = Q_clamp(idx[i], 0, 255); - } - - if (gl_state.minlight_set) - { - for (i = 0; i < 3; i++) - { - idx[i] = minlight[idx[i]]; - } - } - - GLBUFFER_COLOR(gammatable[idx[0]], - gammatable[idx[1]], - gammatable[idx[2]], alpha * 255) - } - while (--count); - } - } -} - -static void -R_DrawAliasShadow(entity_t *currententity, dmdl_t *paliashdr, int posenum) -{ - // Don't do stencil test on unsupported stereo modes - const qboolean stencilt = ( gl_state.stencil && gl1_stencilshadow->value && - ( gl_state.stereo_mode < STEREO_MODE_ROW_INTERLEAVED - || gl_state.stereo_mode > STEREO_MODE_PIXEL_INTERLEAVED ) ); - - int *order; - vec3_t point; - float height = 0, lheight; - int count; - - lheight = currententity->origin[2] - lightspot[2]; - order = (int *)((byte *)paliashdr + paliashdr->ofs_glcmds); - height = -lheight + 0.1f; - - R_UpdateGLBuffer(buf_shadow, 0, 0, 0, 1); - - /* stencilbuffer shadows */ - if (stencilt) - { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_EQUAL, 1, 2); - glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); - } - - while (1) - { - /* get the vertex count and primitive type */ - count = *order++; - - if (!count) - { - break; /* done */ - } - - if (count < 0) - { - count = -count; - R_SetBufferIndices(GL_TRIANGLE_FAN, count); - } - else - { - R_SetBufferIndices(GL_TRIANGLE_STRIP, count); - } - - do - { - /* normals and vertexes come from the frame list */ - memcpy(point, s_lerped[order[2]], sizeof(point)); - - point[0] -= shadevector[0] * (point[2] + lheight); - point[1] -= shadevector[1] * (point[2] + lheight); - point[2] = height; - - GLBUFFER_VERTEX( point[0], point[1], point[2] ) - - order += 3; - } - while (--count); - } - - R_ApplyGLBuffer(); - - /* stencilbuffer shadows */ - if (stencilt) - { - glDisable(GL_STENCIL_TEST); - } -} - -static qboolean -R_CullAliasModel(const model_t *currentmodel, vec3_t bbox[8], entity_t *e) -{ - int i; - vec3_t mins, maxs; - dmdl_t *paliashdr; - vec3_t vectors[3]; - vec3_t thismins, oldmins, thismaxs, oldmaxs; - daliasframe_t *pframe, *poldframe; - vec3_t angles; - - paliashdr = (dmdl_t *)currentmodel->extradata; - - if ((e->frame >= paliashdr->num_frames) || (e->frame < 0)) - { - Com_DPrintf("%s %s: no such frame %d\n", __func__, - currentmodel->name, e->frame); - e->frame = 0; - } - - if ((e->oldframe >= paliashdr->num_frames) || (e->oldframe < 0)) - { - Com_DPrintf("%s %s: no such oldframe %d\n", __func__, - currentmodel->name, e->oldframe); - e->oldframe = 0; - } - - pframe = (daliasframe_t *)((byte *)paliashdr + paliashdr->ofs_frames + - e->frame * paliashdr->framesize); - - poldframe = (daliasframe_t *)((byte *)paliashdr + paliashdr->ofs_frames + - e->oldframe * paliashdr->framesize); - - /* compute axially aligned mins and maxs */ - if (pframe == poldframe) - { - for (i = 0; i < 3; i++) - { - mins[i] = pframe->translate[i]; - maxs[i] = mins[i] + pframe->scale[i] * 255; - } - } - else - { - for (i = 0; i < 3; i++) - { - thismins[i] = pframe->translate[i]; - thismaxs[i] = thismins[i] + pframe->scale[i] * 255; - - oldmins[i] = poldframe->translate[i]; - oldmaxs[i] = oldmins[i] + poldframe->scale[i] * 255; - - if (thismins[i] < oldmins[i]) - { - mins[i] = thismins[i]; - } - else - { - mins[i] = oldmins[i]; - } - - if (thismaxs[i] > oldmaxs[i]) - { - maxs[i] = thismaxs[i]; - } - else - { - maxs[i] = oldmaxs[i]; - } - } - } - - /* compute a full bounding box */ - for (i = 0; i < 8; i++) - { - vec3_t tmp; - - if (i & 1) - { - tmp[0] = mins[0]; - } - else - { - tmp[0] = maxs[0]; - } - - if (i & 2) - { - tmp[1] = mins[1]; - } - else - { - tmp[1] = maxs[1]; - } - - if (i & 4) - { - tmp[2] = mins[2]; - } - else - { - tmp[2] = maxs[2]; - } - - VectorCopy(tmp, bbox[i]); - } - - /* rotate the bounding box */ - VectorCopy(e->angles, angles); - angles[YAW] = -angles[YAW]; - AngleVectors(angles, vectors[0], vectors[1], vectors[2]); - - for (i = 0; i < 8; i++) - { - vec3_t tmp; - - VectorCopy(bbox[i], tmp); - - bbox[i][0] = DotProduct(vectors[0], tmp); - bbox[i][1] = -DotProduct(vectors[1], tmp); - bbox[i][2] = DotProduct(vectors[2], tmp); - - VectorAdd(e->origin, bbox[i], bbox[i]); - } - - int p, f, aggregatemask = ~0; - - for (p = 0; p < 8; p++) - { - int mask = 0; - - for (f = 0; f < 4; f++) - { - float dp = DotProduct(frustum[f].normal, bbox[p]); - - if ((dp - frustum[f].dist) < 0) - { - mask |= (1 << f); - } - } - - aggregatemask &= mask; - } - - if (aggregatemask) - { - return true; - } - - return false; -} - -void -R_DrawAliasModel(entity_t *currententity, const model_t *currentmodel) -{ - int i; - dmdl_t *paliashdr; - float an; - vec3_t bbox[8]; - image_t *skin; - - if (!(currententity->flags & RF_WEAPONMODEL)) - { - if (R_CullAliasModel(currentmodel, bbox, currententity)) - { - return; - } - } - - if (currententity->flags & RF_WEAPONMODEL) - { - if (gl_lefthand->value == 2) - { - return; - } - } - - paliashdr = (dmdl_t *)currentmodel->extradata; - - /* get lighting information */ - if (currententity->flags & - (RF_SHELL_HALF_DAM | RF_SHELL_GREEN | RF_SHELL_RED | - RF_SHELL_BLUE | RF_SHELL_DOUBLE)) - { - VectorClear(shadelight); - - if (currententity->flags & RF_SHELL_HALF_DAM) - { - shadelight[0] = 0.56; - shadelight[1] = 0.59; - shadelight[2] = 0.45; - } - - if (currententity->flags & RF_SHELL_DOUBLE) - { - shadelight[0] = 0.9; - shadelight[1] = 0.7; - } - - if (currententity->flags & RF_SHELL_RED) - { - shadelight[0] = 1.0; - } - - if (currententity->flags & RF_SHELL_GREEN) - { - shadelight[1] = 1.0; - } - - if (currententity->flags & RF_SHELL_BLUE) - { - shadelight[2] = 1.0; - } - } - else if (currententity->flags & RF_FULLBRIGHT) - { - for (i = 0; i < 3; i++) - { - shadelight[i] = 1.0; - } - } - else - { - R_LightPoint(currententity, currententity->origin, shadelight); - - /* player lighting hack for communication back to server */ - if (currententity->flags & RF_WEAPONMODEL) - { - /* pick the greatest component, which should be - the same as the mono value returned by software */ - if (shadelight[0] > shadelight[1]) - { - if (shadelight[0] > shadelight[2]) - { - r_lightlevel->value = 150 * shadelight[0]; - } - else - { - r_lightlevel->value = 150 * shadelight[2]; - } - } - else - { - if (shadelight[1] > shadelight[2]) - { - r_lightlevel->value = 150 * shadelight[1]; - } - else - { - r_lightlevel->value = 150 * shadelight[2]; - } - } - } - } - - if (currententity->flags & RF_MINLIGHT) - { - for (i = 0; i < 3; i++) - { - if (shadelight[i] > 0.1) - { - break; - } - } - - if (i == 3) - { - shadelight[0] = 0.1; - shadelight[1] = 0.1; - shadelight[2] = 0.1; - } - } - - if (currententity->flags & RF_GLOW) - { - /* bonus items will pulse with time */ - float scale; - float min; - - scale = 0.1 * sin(r_newrefdef.time * 7); - - for (i = 0; i < 3; i++) - { - min = shadelight[i] * 0.8; - shadelight[i] += scale; - - if (shadelight[i] < min) - { - shadelight[i] = min; - } - } - } - - - // Apply gl1_overbrightbits to the mesh. If we don't do this they will appear slightly dimmer relative to walls. - if (gl1_overbrightbits->value) - { - for (i = 0; i < 3; ++i) - { - shadelight[i] *= gl1_overbrightbits->value; - } - } - - - /* ir goggles color override */ - if (r_newrefdef.rdflags & RDF_IRGOGGLES && currententity->flags & - RF_IR_VISIBLE) - { - shadelight[0] = 1.0; - shadelight[1] = 0.0; - shadelight[2] = 0.0; - } - - shadedots = r_avertexnormal_dots[((int)(currententity->angles[1] * - (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)]; - - an = currententity->angles[1] / 180 * M_PI; - shadevector[0] = cos(-an); - shadevector[1] = sin(-an); - shadevector[2] = 1; - VectorNormalize(shadevector); - - /* locate the proper data */ - c_alias_polys += paliashdr->num_tris; - - glPushMatrix(); - currententity->angles[PITCH] = -currententity->angles[PITCH]; - R_RotateForEntity(currententity); - currententity->angles[PITCH] = -currententity->angles[PITCH]; - - /* select skin */ - if (currententity->skin) - { - skin = currententity->skin; /* custom player skin */ - } - else - { - if (currententity->skinnum >= MAX_MD2SKINS) - { - skin = currentmodel->skins[0]; - } - else - { - skin = currentmodel->skins[currententity->skinnum]; - - if (!skin) - { - skin = currentmodel->skins[0]; - } - } - } - - if (!skin) - { - skin = r_notexture; /* fallback... */ - } - - if ((currententity->frame >= paliashdr->num_frames) || - (currententity->frame < 0)) - { - Com_DPrintf("%s %s: no such frame %d\n", __func__, - currentmodel->name, currententity->frame); - currententity->frame = 0; - currententity->oldframe = 0; - } - - if ((currententity->oldframe >= paliashdr->num_frames) || - (currententity->oldframe < 0)) - { - Com_DPrintf("%s %s: no such oldframe %d\n", __func__, - currentmodel->name, currententity->oldframe); - currententity->frame = 0; - currententity->oldframe = 0; - } - - if (!r_lerpmodels->value) - { - currententity->backlerp = 0; - } - - R_UpdateGLBuffer(buf_alias, skin->texnum, 0, currententity->flags, 1); - R_DrawAliasFrameLerp(currententity, paliashdr, currententity->backlerp); - R_ApplyGLBuffer(); - - R_TexEnv(GL_REPLACE); - glShadeModel(GL_FLAT); - - glPopMatrix(); - - if (gl_showbbox->value) - { - glDisable(GL_CULL_FACE); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glDisable(GL_TEXTURE_2D); - - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, 0, bbox); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 8); - glDisableClientState(GL_VERTEX_ARRAY); - - glEnable(GL_TEXTURE_2D); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_CULL_FACE); - } - - if (gl_shadows->value && - !(currententity->flags & (RF_TRANSLUCENT | RF_WEAPONMODEL | RF_NOSHADOW))) - { - glPushMatrix(); - - /* don't rotate shadows on ungodly axes */ - glTranslatef(currententity->origin[0], currententity->origin[1], currententity->origin[2]); - glRotatef(currententity->angles[1], 0, 0, 1); - - glDisable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glColor4f(0, 0, 0, 0.5f); - R_DrawAliasShadow(currententity, paliashdr, currententity->frame); - glEnable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - glPopMatrix(); - } - - glColor4f(1, 1, 1, 1); -} - diff --git a/src/client/refresh/gl1/gl1_misc.c b/src/client/refresh/gl1/gl1_misc.c deleted file mode 100644 index b1f7bc676..000000000 --- a/src/client/refresh/gl1/gl1_misc.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Misc refresher functions - * - * ======================================================================= - */ - -#include "header/local.h" - -static byte dottexture[16][16] = { - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 1, 2, 3, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 1, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0}, - {0, 2, 3, 3, 3, 3, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 2, 3, 3, 3, 3, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0}, - {0, 1, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 1, 2, 3, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -}; - -static byte squaretexture[16][16] = { - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -}; - -static byte notex[4][4] = { - {0, 0, 0, 0}, - {0, 0, 1, 1}, - {0, 1, 1, 1}, - {0, 1, 1, 1} -}; - -void -R_InitParticleTexture(void) -{ - int x, y; - byte partData[16][16][4]; - byte notexData[8][8][4]; - - /* particle texture */ - for (x = 0; x < 16; x++) - { - for (y = 0; y < 16; y++) - { - partData[y][x][0] = 255; - partData[y][x][1] = 255; - partData[y][x][2] = 255; - - if (!gl1_particle_square->value) - { - partData[y][x][3] = dottexture[x][y] * 85; - } - else - { - partData[y][x][3] = squaretexture[x][y] * 85; - } - } - } - - r_particletexture = R_LoadPic("***particle***", (byte *)partData, - 16, 0, 16, 0, 16 * 16, it_sprite, 32); - - /* also use this for bad textures, but without alpha */ - for (x = 0; x < 8; x++) - { - for (y = 0; y < 8; y++) - { - notexData[y][x][0] = notex[x & 3][y & 3] * 255; - notexData[y][x][1] = 0; - notexData[y][x][2] = 0; - notexData[y][x][3] = 255; - } - } - - r_notexture = R_LoadPic("***r_notexture***", (byte *)notexData, - 8, 0, 8, 0, 8 * 8, it_wall, 32); -} - -void -R_ScreenShot(void) -{ - int w=vid.width, h=vid.height; - byte *buffer = malloc(w*h*3); - - if (!buffer) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", __func__, w*h*3); - return; - } - - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, buffer); - - // the pixels are now row-wise left to right, bottom to top, - // but we need them row-wise left to right, top to bottom. - // so swap bottom rows with top rows - { - size_t bytesPerRow = 3*w; - YQ2_VLA(byte, rowBuffer, bytesPerRow); - byte *curRowL = buffer; // first byte of first row - byte *curRowH = buffer + bytesPerRow*(h-1); // first byte of last row - while(curRowL < curRowH) - { - memcpy(rowBuffer, curRowL, bytesPerRow); - memcpy(curRowL, curRowH, bytesPerRow); - memcpy(curRowH, rowBuffer, bytesPerRow); - - curRowL += bytesPerRow; - curRowH -= bytesPerRow; - } - YQ2_VLAFREE(rowBuffer); - } - - ri.Vid_WriteScreenshot(w, h, 3, buffer); - - free(buffer); -} - -void -R_Strings(void) -{ - Com_Printf("GL_VENDOR: %s\n", gl_config.vendor_string); - Com_Printf("GL_RENDERER: %s\n", gl_config.renderer_string); - Com_Printf("GL_VERSION: %s\n", gl_config.version_string); - Com_Printf("GL_EXTENSIONS: %s\n", gl_config.extensions_string); -} - -void -R_SetDefaultState(void) -{ - glDisable(GL_MULTISAMPLE); - glCullFace(GL_FRONT); - glEnable(GL_TEXTURE_2D); - - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.666); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - glDisable(GL_BLEND); - - glColor4f(1, 1, 1, 1); - - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glShadeModel(GL_FLAT); - - R_TextureMode(gl_texturemode->string); - R_TextureAlphaMode(gl1_texturealphamode->string); - R_TextureSolidMode(gl1_texturesolidmode->string); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - R_TexEnv(GL_REPLACE); - - if (gl_config.pointparameters) - { - float attenuations[3]; - - attenuations[0] = gl1_particle_att_a->value; - attenuations[1] = gl1_particle_att_b->value; - attenuations[2] = gl1_particle_att_c->value; - - qglPointParameterf(GL_POINT_SIZE_MIN, gl1_particle_min_size->value); - qglPointParameterf(GL_POINT_SIZE_MAX, gl1_particle_max_size->value); - qglPointParameterfv(GL_POINT_DISTANCE_ATTENUATION, attenuations); - - /* GL_POINT_SMOOTH is not implemented by some OpenGL - drivers, especially the crappy Mesa3D backends like - i915.so. That the points are squares and not circles - is not a problem by Quake II! */ - if (gl1_particle_square->value) - { - glDisable(GL_POINT_SMOOTH); - } - else - { - glEnable(GL_POINT_SMOOTH); - } - } - - if (gl_config.palettedtexture) - { - glEnable(GL_SHARED_TEXTURE_PALETTE_EXT); - R_SetTexturePalette(d_8to24table); - } - - if (gl_msaa_samples->value) - { - glEnable(GL_MULTISAMPLE); - glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST); - } -} diff --git a/src/client/refresh/gl1/gl1_model.c b/src/client/refresh/gl1/gl1_model.c deleted file mode 100644 index 41ac4da2e..000000000 --- a/src/client/refresh/gl1/gl1_model.c +++ /dev/null @@ -1,832 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Model loading and caching. Includes the .bsp file format - * - * ======================================================================= - */ - -#include "header/local.h" - -#define MAX_MOD_KNOWN 512 - -int modfilelen; -YQ2_ALIGNAS_TYPE(int) byte mod_novis[MAX_MAP_LEAFS / 8]; -static model_t mod_known[MAX_MOD_KNOWN]; -static int mod_numknown; -static int mod_max = 0; -int registration_sequence; - -static void Mod_LoadBrushModel(model_t *mod, void *buffer, int modfilelen); -void LM_BuildPolygonFromSurface(model_t *currentmodel, msurface_t *fa); -void LM_CreateSurfaceLightmap(msurface_t *surf); -void LM_EndBuildingLightmaps(void); -void LM_BeginBuildingLightmaps(model_t *m); - -//=============================================================================== - -static qboolean -Mod_HasFreeSpace(void) -{ - int i, used; - model_t *mod; - - used = 0; - - for (i=0, mod=mod_known ; i < mod_numknown ; i++, mod++) - { - if (!mod->name[0]) - continue; - if (mod->registration_sequence == registration_sequence) - { - used ++; - } - } - - if (mod_max < used) - { - mod_max = used; - } - - // should same size of free slots as currently used - return (mod_numknown + mod_max) < MAX_MOD_KNOWN; -} - -const byte * -Mod_ClusterPVS(int cluster, const model_t *model) -{ - if ((cluster == -1) || !model->vis) - { - return mod_novis; - } - - return Mod_DecompressVis((byte *)model->vis + - model->vis->bitofs[cluster][DVIS_PVS], - (model->vis->numclusters + 7) >> 3); -} - -void -Mod_Modellist_f(void) -{ - int i, total, used; - model_t *mod; - qboolean freeup; - - total = 0; - used = 0; - Com_Printf("Loaded models:\n"); - - for (i = 0, mod = mod_known; i < mod_numknown; i++, mod++) - { - char *in_use = ""; - - if (mod->registration_sequence == registration_sequence) - { - in_use = "*"; - used ++; - } - - if (!mod->name[0]) - { - continue; - } - - Com_Printf("%8i : %s %s\n", - mod->extradatasize, mod->name, in_use); - total += mod->extradatasize; - } - - Com_Printf("Total resident: %i\n", total); - // update statistics - freeup = Mod_HasFreeSpace(); - Com_Printf("Used %d of %d models%s.\n", used, mod_max, freeup ? ", has free space" : ""); -} - -void -Mod_Init(void) -{ - mod_max = 0; - memset(mod_novis, 0xff, sizeof(mod_novis)); -} - -/* - * Loads in a model for the given name - */ -static model_t * -Mod_ForName(const char *name, model_t *parent_model, qboolean crash) -{ - model_t *mod; - void *buf; - int i; - - if (!name[0]) - { - Com_Error(ERR_DROP, "%s: NULL name", __func__); - } - - /* inline models are grabbed only from worldmodel */ - if (name[0] == '*' && parent_model) - { - i = (int)strtol(name + 1, (char **)NULL, 10); - - if (i < 1 || i >= parent_model->numsubmodels) - { - Com_Error(ERR_DROP, "%s: bad inline model number", - __func__); - } - - return &parent_model->submodels[i]; - } - - /* search the currently loaded models */ - for (i = 0, mod = mod_known; i < mod_numknown; i++, mod++) - { - if (!mod->name[0]) - { - continue; - } - - if (!strcmp(mod->name, name)) - { - return mod; - } - } - - /* find a free model slot spot */ - for (i = 0, mod = mod_known; i < mod_numknown; i++, mod++) - { - if (!mod->name[0]) - { - break; /* free spot */ - } - } - - if (i == mod_numknown) - { - if (mod_numknown == MAX_MOD_KNOWN) - { - Com_Error(ERR_DROP, "%s: mod_numknown == MAX_MOD_KNOWN", __func__); - } - - mod_numknown++; - } - - strcpy(mod->name, name); - - /* load the file */ - modfilelen = ri.FS_LoadFile(mod->name, (void **)&buf); - - if (!buf) - { - if (crash) - { - Com_Error(ERR_DROP, "%s: %s not found", - __func__, mod->name); - } - - memset(mod->name, 0, sizeof(mod->name)); - return NULL; - } - - /* call the apropriate loader */ - switch (LittleLong(*(unsigned *)buf)) - { - case IDALIASHEADER: - { - mod->extradata = Mod_LoadMD2(mod->name, buf, modfilelen, - mod->mins, mod->maxs, - (struct image_s **)mod->skins, (findimage_t)R_FindImage, - &(mod->type)); - if (!mod->extradata) - { - Com_Error(ERR_DROP, "%s: Failed to load %s", - __func__, mod->name); - } - }; - break; - - case IDSPRITEHEADER: - { - mod->extradata = Mod_LoadSP2(mod->name, buf, modfilelen, - (struct image_s **)mod->skins, (findimage_t)R_FindImage, - &(mod->type)); - if (!mod->extradata) - { - Com_Error(ERR_DROP, "%s: Failed to load %s", - __func__, mod->name); - } - } - break; - - case IDBSPHEADER: - Mod_LoadBrushModel(mod, buf, modfilelen); - break; - - default: - Com_Error(ERR_DROP, "%s: unknown fileid for %s", - __func__, mod->name); - break; - } - - mod->extradatasize = Hunk_End(); - - ri.FS_FreeFile(buf); - - return mod; -} - -static void -Mod_LoadSubmodels (model_t *loadmodel, byte *mod_base, lump_t *l) -{ - dmodel_t *in; - model_t *out; - int i, j, count; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count * sizeof(*out)); - - loadmodel->submodels = out; - loadmodel->numsubmodels = count; - - for (i = 0; i < count; i++, in++, out++) - { - if (i == 0) - { - /* copy parent as template for first model */ - memcpy(out, loadmodel, sizeof(*out)); - } - else - { - /* copy first as template for model */ - memmove(out, loadmodel->submodels, sizeof(*out)); - } - - Com_sprintf (out->name, sizeof(out->name), "*%d", i); - - for (j = 0; j < 3; j++) - { - /* spread the mins / maxs by a pixel */ - out->mins[j] = LittleFloat(in->mins[j]) - 1; - out->maxs[j] = LittleFloat(in->maxs[j]) + 1; - out->origin[j] = LittleFloat(in->origin[j]); - } - - out->radius = Mod_RadiusFromBounds(out->mins, out->maxs); - out->firstnode = LittleLong (in->headnode); - out->firstmodelsurface = LittleLong (in->firstface); - out->nummodelsurfaces = LittleLong (in->numfaces); - // visleafs - out->numleafs = 0; - // check limits - if (out->firstnode >= loadmodel->numnodes) - { - Com_Error(ERR_DROP, "%s: Inline model %i has bad firstnode", - __func__, i); - } - } -} - -/* - * Fills in s->texturemins[] and s->extents[] - */ -static void -Mod_CalcSurfaceExtents(model_t *loadmodel, msurface_t *s) -{ - float mins[2], maxs[2], val; - int i, j, e; - mvertex_t *v; - mtexinfo_t *tex; - int bmins[2], bmaxs[2]; - - mins[0] = mins[1] = 999999; - maxs[0] = maxs[1] = -99999; - - tex = s->texinfo; - - for (i = 0; i < s->numedges; i++) - { - e = loadmodel->surfedges[s->firstedge + i]; - - if (e >= 0) - { - v = &loadmodel->vertexes[loadmodel->edges[e].v[0]]; - } - else - { - v = &loadmodel->vertexes[loadmodel->edges[-e].v[1]]; - } - - for (j = 0; j < 2; j++) - { - val = v->position[0] * tex->vecs[j][0] + - v->position[1] * tex->vecs[j][1] + - v->position[2] * tex->vecs[j][2] + - tex->vecs[j][3]; - - if (val < mins[j]) - { - mins[j] = val; - } - - if (val > maxs[j]) - { - maxs[j] = val; - } - } - } - - for (i = 0; i < 2; i++) - { - bmins[i] = floor(mins[i] / 16); - bmaxs[i] = ceil(maxs[i] / 16); - - s->texturemins[i] = bmins[i] * 16; - s->extents[i] = (bmaxs[i] - bmins[i]) * 16; - } -} - -static int calcTexinfoAndFacesSize(byte *mod_base, const lump_t *fl, const lump_t *tl) -{ - dface_t* face_in = (void *)(mod_base + fl->fileofs); - texinfo_t* texinfo_in = (void *)(mod_base + tl->fileofs); - - if (fl->filelen % sizeof(*face_in) || tl->filelen % sizeof(*texinfo_in)) - { - // will error out when actually loading it - return 0; - } - - int ret = 0; - - int face_count = fl->filelen / sizeof(*face_in); - int texinfo_count = tl->filelen / sizeof(*texinfo_in); - - { - // out = Hunk_Alloc(count * sizeof(*out)); - int baseSize = face_count * sizeof(msurface_t); - baseSize = (baseSize + 31) & ~31; - ret += baseSize; - - int ti_size = texinfo_count * sizeof(mtexinfo_t); - ti_size = (ti_size + 31) & ~31; - ret += ti_size; - } - - int numWarpFaces = 0; - - for (int surfnum = 0; surfnum < face_count; surfnum++, face_in++) - { - int numverts = LittleShort(face_in->numedges); - int ti = LittleShort(face_in->texinfo); - if ((ti < 0) || (ti >= texinfo_count)) - { - return 0; // will error out - } - int texFlags = LittleLong(texinfo_in[ti].flags); - - /* set the drawing flags */ - if (texFlags & SURF_WARP) - { - if (numverts > 60) - return 0; // will error out in R_SubdividePolygon() - - // GL3_SubdivideSurface(out, loadmodel); /* cut up polygon for warps */ - // for each (pot. recursive) call to R_SubdividePolygon(): - // sizeof(glpoly_t) + ((numverts - 4) + 2) * sizeof(gl3_3D_vtx_t) - - // this is tricky, how much is allocated depends on the size of the surface - // which we don't know (we'd need the vertices etc to know, but we can't load - // those without allocating...) - // so we just count warped faces and use a generous estimate below - - ++numWarpFaces; - } - else - { - // LM_BuildPolygonFromSurface(out); - // => poly = Hunk_Alloc(sizeof(glpoly_t) + (numverts - 4) * VERTEXSIZE * sizeof(float)); - int polySize = sizeof(glpoly_t) + (numverts - 4) * VERTEXSIZE * sizeof(float); - polySize = (polySize + 31) & ~31; - ret += polySize; - } - } - - // yeah, this is a bit hacky, but it looks like for each warped face - // 256-55000 bytes are allocated (usually on the lower end), - // so just assume 48k per face to be safe - ret += numWarpFaces * 49152; - ret += 5000000; // and 5MB extra just in case - - return ret; -} - -static void -Mod_LoadFaces(model_t *loadmodel, byte *mod_base, lump_t *l) -{ - dface_t *in; - msurface_t *out; - int i, count, surfnum; - int planenum, side; - int ti; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count * sizeof(*out)); - - loadmodel->surfaces = out; - loadmodel->numsurfaces = count; - - LM_BeginBuildingLightmaps(loadmodel); - - for (surfnum = 0; surfnum < count; surfnum++, in++, out++) - { - out->firstedge = LittleLong(in->firstedge); - out->numedges = LittleShort(in->numedges); - out->flags = 0; - out->polys = NULL; - - planenum = LittleShort(in->planenum); - side = LittleShort(in->side); - - if (side) - { - out->flags |= SURF_PLANEBACK; - } - - if (planenum < 0 || planenum >= loadmodel->numplanes) - { - Com_Error(ERR_DROP, "%s: Incorrect %d planenum.", - __func__, planenum); - } - out->plane = loadmodel->planes + planenum; - - ti = LittleShort(in->texinfo); - - if ((ti < 0) || (ti >= loadmodel->numtexinfo)) - { - Com_Error(ERR_DROP, "%s: bad texinfo number", - __func__); - } - - out->texinfo = loadmodel->texinfo + ti; - - Mod_CalcSurfaceExtents(loadmodel, out); - - /* lighting info */ - for (i = 0; i < MAXLIGHTMAPS; i++) - { - out->styles[i] = in->styles[i]; - } - - i = LittleLong(in->lightofs); - - if (i == -1) - { - out->samples = NULL; - } - else - { - out->samples = loadmodel->lightdata + i; - } - - /* set the drawing flags */ - if (out->texinfo->flags & SURF_WARP) - { - out->flags |= SURF_DRAWTURB; - - for (i = 0; i < 2; i++) - { - out->extents[i] = 16384; - out->texturemins[i] = -8192; - } - - R_SubdivideSurface(loadmodel, out); /* cut up polygon for warps */ - } - - if (r_fixsurfsky->value) - { - if (out->texinfo->flags & SURF_SKY) - { - out->flags |= SURF_DRAWSKY; - } - } - - /* create lightmaps and polygons */ - if (!(out->texinfo->flags & (SURF_SKY | SURF_TRANS33 | SURF_TRANS66 | SURF_WARP))) - { - LM_CreateSurfaceLightmap(out); - } - - if (!(out->texinfo->flags & SURF_WARP)) - { - LM_BuildPolygonFromSurface(loadmodel, out); - } - } - - LM_EndBuildingLightmaps(); -} - -static void -Mod_LoadLeafs(model_t *loadmodel, byte *mod_base, lump_t *l) -{ - dleaf_t *in; - mleaf_t *out; - int i, j, count, p; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count * sizeof(*out)); - - loadmodel->leafs = out; - loadmodel->numleafs = count; - - for (i = 0; i < count; i++, in++, out++) - { - unsigned firstleafface; - - for (j = 0; j < 3; j++) - { - out->minmaxs[j] = LittleShort(in->mins[j]); - out->minmaxs[3 + j] = LittleShort(in->maxs[j]); - } - - p = LittleLong(in->contents); - out->contents = p; - - out->cluster = LittleShort(in->cluster); - out->area = LittleShort(in->area); - - // make unsigned long from signed short - firstleafface = LittleShort(in->firstleafface) & 0xFFFF; - out->nummarksurfaces = LittleShort(in->numleaffaces) & 0xFFFF; - - out->firstmarksurface = loadmodel->marksurfaces + firstleafface; - if ((firstleafface + out->nummarksurfaces) > loadmodel->nummarksurfaces) - { - Com_Error(ERR_DROP, "%s: wrong marksurfaces position in %s", - __func__, loadmodel->name); - } - } -} - -static void -Mod_LoadMarksurfaces(model_t *loadmodel, byte *mod_base, lump_t *l) -{ - int i, j, count; - short *in; - msurface_t **out; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count * sizeof(*out)); - - loadmodel->marksurfaces = out; - loadmodel->nummarksurfaces = count; - - for (i = 0; i < count; i++) - { - j = LittleShort(in[i]); - - if ((j < 0) || (j >= loadmodel->numsurfaces)) - { - Com_Error(ERR_DROP, "%s: bad surface number", - __func__); - } - - out[i] = loadmodel->surfaces + j; - } -} - -static void -Mod_LoadBrushModel(model_t *mod, void *buffer, int modfilelen) -{ - int i; - dheader_t *header; - byte *mod_base; - - if (mod != mod_known) - { - Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__); - } - - header = (dheader_t *)buffer; - - i = LittleLong(header->version); - - if (i != BSPVERSION) - { - Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)", - __func__, mod->name, i, BSPVERSION); - } - - /* swap all the lumps */ - mod_base = (byte *)header; - - for (i = 0; i < sizeof(dheader_t) / 4; i++) - { - ((int *)header)[i] = LittleLong(((int *)header)[i]); - } - - // calculate the needed hunksize from the lumps - int hunkSize = 0; - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_VERTEXES], sizeof(dvertex_t), sizeof(mvertex_t), 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_EDGES], sizeof(dedge_t), sizeof(medge_t), 0); - hunkSize += sizeof(medge_t) + 31; // for count+1 in Mod_LoadEdges() - int surfEdgeCount = (header->lumps[LUMP_SURFEDGES].filelen+sizeof(int)-1)/sizeof(int); - if(surfEdgeCount < MAX_MAP_SURFEDGES) // else it errors out later anyway - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_SURFEDGES], sizeof(int), sizeof(int), 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_LIGHTING], 1, 1, 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_PLANES], sizeof(dplane_t), sizeof(cplane_t)*2, 0); - hunkSize += calcTexinfoAndFacesSize(mod_base, &header->lumps[LUMP_FACES], &header->lumps[LUMP_TEXINFO]); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_LEAFFACES], sizeof(short), sizeof(msurface_t *), 0); // yes, out is indeed a pointer! - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_VISIBILITY], 1, 1, 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_LEAFS], sizeof(dleaf_t), sizeof(mleaf_t), 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_NODES], sizeof(dnode_t), sizeof(mnode_t), 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS], sizeof(dmodel_t), sizeof(model_t), 0); - - mod->extradata = Hunk_Begin(hunkSize); - mod->type = mod_brush; - - /* load into heap */ - Mod_LoadVertexes(mod->name, &mod->vertexes, &mod->numvertexes, mod_base, - &header->lumps[LUMP_VERTEXES], 0); - Mod_LoadEdges(mod->name, &mod->edges, &mod->numedges, - mod_base, &header->lumps[LUMP_EDGES], 1); - Mod_LoadSurfedges(mod->name, &mod->surfedges, &mod->numsurfedges, - mod_base, &header->lumps[LUMP_SURFEDGES], 0); - Mod_LoadLighting(&mod->lightdata, mod_base, &header->lumps[LUMP_LIGHTING]); - Mod_LoadPlanes (mod->name, &mod->planes, &mod->numplanes, - mod_base, &header->lumps[LUMP_PLANES], 0); - Mod_LoadTexinfo(mod->name, &mod->texinfo, &mod->numtexinfo, - mod_base, &header->lumps[LUMP_TEXINFO], (findimage_t)R_FindImage, - r_notexture, 0); - Mod_LoadFaces(mod, mod_base, &header->lumps[LUMP_FACES]); - Mod_LoadMarksurfaces(mod, mod_base, &header->lumps[LUMP_LEAFFACES]); - Mod_LoadVisibility (&mod->vis, mod_base, &header->lumps[LUMP_VISIBILITY]); - Mod_LoadLeafs(mod, mod_base, &header->lumps[LUMP_LEAFS]); - Mod_LoadNodes(mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES]); - Mod_LoadSubmodels (mod, mod_base, &header->lumps[LUMP_MODELS]); - mod->numframes = 2; /* regular and alternate animation */ -} - -void -Mod_Free(model_t *mod) -{ - Hunk_Free(mod->extradata); - memset(mod, 0, sizeof(*mod)); -} - -void -Mod_FreeAll(void) -{ - int i; - - for (i = 0; i < mod_numknown; i++) - { - if (mod_known[i].extradatasize) - { - Mod_Free(&mod_known[i]); - } - } -} - -/* - * Specifies the model that will be used as the world - */ -void -RI_BeginRegistration(const char *model) -{ - char fullname[MAX_QPATH]; - cvar_t *flushmap; - - registration_sequence++; - r_oldviewcluster = -1; /* force markleafs */ - - Com_sprintf(fullname, sizeof(fullname), "maps/%s.bsp", model); - - /* explicitly free the old map if different - this guarantees that mod_known[0] is the - world map */ - flushmap = ri.Cvar_Get("flushmap", "0", 0); - - if (strcmp(mod_known[0].name, fullname) || flushmap->value) - { - Mod_Free(&mod_known[0]); - } - - r_worldmodel = Mod_ForName(fullname, NULL, true); - - r_viewcluster = -1; -} - -struct model_s * -RI_RegisterModel(const char *name) -{ - model_t *mod; - - mod = Mod_ForName(name, r_worldmodel, false); - - if (mod) - { - mod->registration_sequence = registration_sequence; - - /* register any images used by the models */ - if (mod->type == mod_brush) - { - int i; - - for (i = 0; i < mod->numtexinfo; i++) - { - mod->texinfo[i].image->registration_sequence = - registration_sequence; - } - } - else - { - /* numframes is unused for SP2 but lets set it also */ - mod->numframes = Mod_ReLoadSkins((struct image_s **)mod->skins, - (findimage_t)R_FindImage, mod->extradata, mod->type); - } - } - - return mod; -} - -void -RI_EndRegistration(void) -{ - int i; - model_t *mod; - - if (Mod_HasFreeSpace() && R_ImageHasFreeSpace()) - { - // should be enough space for load next maps - return; - } - - for (i = 0, mod = mod_known; i < mod_numknown; i++, mod++) - { - if (!mod->name[0]) - { - continue; - } - - if (mod->registration_sequence != registration_sequence) - { - /* don't need this model */ - Mod_Free(mod); - } - } - - R_FreeUnusedImages(); -} - diff --git a/src/client/refresh/gl1/gl1_scrap.c b/src/client/refresh/gl1/gl1_scrap.c deleted file mode 100644 index e5b72926d..000000000 --- a/src/client/refresh/gl1/gl1_scrap.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Allocate all the little status bar objects into a single texture - * to crutch up inefficient hardware / drivers. - * - * ======================================================================= - */ - -#include "header/local.h" - -static int scrap_allocated[MAX_SCRAPS][SCRAP_WIDTH]; -byte scrap_texels[MAX_SCRAPS][SCRAP_WIDTH * SCRAP_HEIGHT]; -qboolean scrap_dirty; - -qboolean R_Upload8(byte *data, - int width, - int height, - qboolean mipmap, - qboolean is_sky); - -/* returns a texture number and the position inside it */ -int -Scrap_AllocBlock(int w, int h, int *x, int *y) -{ - int i, j; - int best, best2; - int texnum; - w += 2; // add an empty border to all sides - h += 2; - - for (texnum = 0; texnum < MAX_SCRAPS; texnum++) - { - best = SCRAP_HEIGHT; - - for (i = 0; i < SCRAP_WIDTH - w; i++) - { - best2 = 0; - - for (j = 0; j < w; j++) - { - if (scrap_allocated[texnum][i + j] >= best) - { - break; - } - - if (scrap_allocated[texnum][i + j] > best2) - { - best2 = scrap_allocated[texnum][i + j]; - } - } - - if (j == w) - { /* this is a valid spot */ - *x = i; - *y = best = best2; - } - } - - if (best + h > SCRAP_HEIGHT) - { - continue; - } - - for (i = 0; i < w; i++) - { - scrap_allocated[texnum][*x + i] = best + h; - } - (*x)++; // jump the border - (*y)++; - - return texnum; - } - - return -1; -} - -void -Scrap_Upload(void) -{ - R_Bind(TEXNUM_SCRAPS); - R_Upload8(scrap_texels[0], SCRAP_WIDTH, SCRAP_HEIGHT, false, false); - scrap_dirty = false; -} - -void -Scrap_Init(void) -{ - memset (scrap_allocated, 0, sizeof(scrap_allocated)); // empty - memset (scrap_texels, 255, sizeof(scrap_texels)); // transparent -} - diff --git a/src/client/refresh/gl1/gl1_sdl.c b/src/client/refresh/gl1/gl1_sdl.c deleted file mode 100644 index 92e64fada..000000000 --- a/src/client/refresh/gl1/gl1_sdl.c +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * Copyright (C) 2016 Daniel Gibson - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * SDL backend for the GL1 renderer. - * - * ======================================================================= - */ - -#include "header/local.h" - -#ifdef USE_SDL3 -#include -#else -#include -#endif - -static SDL_Window* window = NULL; -static SDL_GLContext context = NULL; -qboolean IsHighDPIaware = false; -static qboolean vsyncActive = false; - -extern cvar_t *gl1_discardfb; - -// ---- - -/* - * Swaps the buffers and shows the next frame. - */ -void -RI_EndFrame(void) -{ - R_ApplyGLBuffer(); // to draw buffered 2D text - -#ifdef YQ2_GL1_GLES - static const GLenum attachments[3] = {GL_COLOR_EXT, GL_DEPTH_EXT, GL_STENCIL_EXT}; - - if (qglDiscardFramebufferEXT) - { - switch ((int)gl1_discardfb->value) - { - case 1: - qglDiscardFramebufferEXT(GL_FRAMEBUFFER_OES, 3, &attachments[0]); - break; - case 2: - qglDiscardFramebufferEXT(GL_FRAMEBUFFER_OES, 2, &attachments[1]); - break; - default: - break; - } - } -#endif - - SDL_GL_SwapWindow(window); -} - -/* - * Returns the adress of a GL function - */ -void * -RI_GetProcAddress(const char* proc) -{ - return SDL_GL_GetProcAddress(proc); -} - -/* - * Returns whether the vsync is enabled. - */ -qboolean RI_IsVSyncActive(void) -{ - return vsyncActive; -} - -/* - * This function returns the flags used at the SDL window - * creation by GLimp_InitGraphics(). In case of error -1 - * is returned. - */ -int RI_PrepareForWindow(void) -{ - // Set GL context attributs bound to the window. - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); - -#ifdef USE_SDL3 - if (SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8)) -#else - if (SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8) == 0) -#endif - { - gl_state.stencil = true; - } - else - { - gl_state.stencil = false; - } - -#ifdef YQ2_GL1_GLES - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); -#endif - - // Let's see if the driver supports MSAA. - int msaa_samples = 0; - - if (gl_msaa_samples->value) - { - msaa_samples = gl_msaa_samples->value; - -#ifdef USE_SDL3 - if (!SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1)) -#else - if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) < 0) -#endif - { - Com_Printf("MSAA is unsupported: %s\n", SDL_GetError()); - - ri.Cvar_SetValue ("r_msaa_samples", 0); - - SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); - SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); - } -#ifdef USE_SDL3 - else if (!SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaa_samples)) -#else - else if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaa_samples) < 0) -#endif - { - Com_Printf("MSAA %ix is unsupported: %s\n", msaa_samples, SDL_GetError()); - - ri.Cvar_SetValue("r_msaa_samples", 0); - - SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); - SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); - } - } - else - { - SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); - SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); - } - - return SDL_WINDOW_OPENGL; -} - -/* - * Enables or disables the vsync. - */ -void RI_SetVsync(void) -{ - // Make sure that the user given - // value is SDL compatible... - int vsync = 0; - - if (r_vsync->value == 1) - { - vsync = 1; - } - else if (r_vsync->value == 2) - { - vsync = -1; - } - -#ifdef USE_SDL3 - if (!SDL_GL_SetSwapInterval(vsync)) -#else - if (SDL_GL_SetSwapInterval(vsync) == -1) -#endif - { - if (vsync == -1) - { - // Not every system supports adaptive - // vsync, fallback to normal vsync. - Com_Printf("Failed to set adaptive vsync, reverting to normal vsync.\n"); - SDL_GL_SetSwapInterval(1); - } - } - -#ifdef USE_SDL3 - int vsyncState; - if (!SDL_GL_GetSwapInterval(&vsyncState)) - { - Com_Printf("Failed to get vsync state, assuming vsync inactive.\n"); - vsyncActive = false; - } - else - { - vsyncActive = vsyncState ? true : false; - } -#else - vsyncActive = SDL_GL_GetSwapInterval() != 0; -#endif -} - -/* - * Updates the gamma ramp. Only used with SDL2. - */ -void -RI_UpdateGamma(void) -{ -// Hardware gamma / gamma ramps are no longer supported with SDL3. -// There's no replacement and sdl2-compat won't support it either. -// See https://github.com/libsdl-org/SDL/pull/6617 for the rational. -// Gamma works with a lookup table when using SDL3 (or GLES1). -#ifndef GL1_GAMMATABLE - float gamma = (vid_gamma->value); - - Uint16 ramp[256]; - SDL_CalculateGammaRamp(gamma, ramp); - - if (SDL_SetWindowGammaRamp(window, ramp, ramp, ramp) != 0) - { - Com_Printf("Setting gamma failed: %s\n", SDL_GetError()); - } -#endif -} - -/* - * Initializes the OpenGL context. Returns true at - * success and false at failure. - */ -int RI_InitContext(void* win) -{ - // Coders are stupid. - if (win == NULL) - { - Com_Error(ERR_FATAL, "%s must not be called with NULL argument!", __func__); - - return false; - } - - window = (SDL_Window*)win; - - // Initialize GL context. - context = SDL_GL_CreateContext(window); - - if (context == NULL) - { - Com_Printf("%s: Creating OpenGL Context failed: %s\n", __func__, SDL_GetError()); - - window = NULL; - - return false; - } - -#ifdef YQ2_GL1_GLES - - // Load GL pointers through GLAD and check context. - if( !gladLoadGLES1Loader( (void * (*)(const char *)) SDL_GL_GetProcAddress ) ) - { - Com_Printf("%s ERROR: loading OpenGL ES function pointers failed!\n", __func__); - return false; - } - - gl_config.major_version = GLVersion.major; - gl_config.minor_version = GLVersion.minor; - Com_Printf("Initialized OpenGL ES version %d.%d context\n", gl_config.major_version, gl_config.minor_version); - -#else - - // Check if it's really OpenGL 1.4. - const char* glver = (char *)glGetString(GL_VERSION); - sscanf(glver, "%d.%d", &gl_config.major_version, &gl_config.minor_version); - - if (gl_config.major_version < 1 || (gl_config.major_version == 1 && gl_config.minor_version < 4)) - { - Com_Printf("%s: Got an OpenGL version %d.%d context - need (at least) 1.4!\n", __func__, gl_config.major_version, gl_config.minor_version); - - return false; - } - -#endif - - // Check if we've got the requested MSAA. - int msaa_samples = 0; - - if (gl_msaa_samples->value) - { -#ifdef USE_SDL3 - if (SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &msaa_samples)) -#else - if (SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &msaa_samples) == 0) -#endif - { - ri.Cvar_SetValue("r_msaa_samples", msaa_samples); - } - } - - // Enable vsync if requested. - RI_SetVsync(); - - // Check if we've got 8 stencil bits. - int stencil_bits = 0; - - if (gl_state.stencil) - { -#ifdef USE_SDL3 - if (!SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &stencil_bits) || stencil_bits < 8) -#else - if (SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &stencil_bits) < 0 || stencil_bits < 8) -#endif - { - gl_state.stencil = false; - } - } - - // Initialize gamma. - vid_gamma->modified = true; - - // Window title - set here so we can display renderer name in it. - char title[40] = {0}; - -#ifdef YQ2_GL1_GLES - snprintf(title, sizeof(title), "Yamagi Quake II %s - OpenGL ES 1.0", YQ2VERSION); -#else - snprintf(title, sizeof(title), "Yamagi Quake II %s - OpenGL 1.4", YQ2VERSION); -#endif - SDL_SetWindowTitle(window, title); - -#if SDL_VERSION_ATLEAST(2, 26, 0) - // Figure out if we are high dpi aware. - int flags = SDL_GetWindowFlags(win); -#ifdef USE_SDL3 - IsHighDPIaware = (flags & SDL_WINDOW_HIGH_PIXEL_DENSITY) ? true : false; -#else - IsHighDPIaware = (flags & SDL_WINDOW_ALLOW_HIGHDPI) ? true : false; -#endif -#endif - - return true; -} - -/* - * Fills the actual size of the drawable into width and height. - */ -void RI_GetDrawableSize(int* width, int* height) -{ -#ifdef USE_SDL3 - SDL_GetWindowSizeInPixels(window, width, height); -#else - SDL_GL_GetDrawableSize(window, width, height); -#endif -} - -/* - * Shuts the GL context down. - */ -void -RI_ShutdownContext(void) -{ - if (window) - { - if(context) - { -#ifdef USE_SDL3 - SDL_GL_DestroyContext(context); -#else - SDL_GL_DeleteContext(context); -#endif - context = NULL; - } - } -} - -/* - * Returns the SDL major version. Implemented - * here to not polute gl1_main.c with the SDL - * headers. - */ -int RI_GetSDLVersion() -{ -#ifdef USE_SDL3 - int version = SDL_GetVersion(); - return SDL_VERSIONNUM_MAJOR(version); -#else - SDL_version ver; - SDL_VERSION(&ver); - return ver.major; -#endif -} diff --git a/src/client/refresh/gl1/gl1_surf.c b/src/client/refresh/gl1/gl1_surf.c deleted file mode 100644 index c305b8335..000000000 --- a/src/client/refresh/gl1/gl1_surf.c +++ /dev/null @@ -1,1354 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Surface generation and drawing - * - * ======================================================================= - */ - -#include - -#include "header/local.h" - -typedef struct -{ - int top, bottom, left, right; -} lmrect_t; - -int c_visible_lightmaps; -int c_visible_textures; -static vec3_t modelorg; /* relative to viewpoint */ -msurface_t *r_alpha_surfaces; - -gllightmapstate_t gl_lms; -extern int cur_lm_copy; - -void LM_InitBlock(void); -void LM_UploadBlock(qboolean dynamic); -qboolean LM_AllocBlock(int w, int h, int *x, int *y); - -void R_SetCacheState(msurface_t *surf); -void R_BuildLightMap(msurface_t *surf, byte *dest, int stride); - -static void -R_DrawGLPoly(msurface_t *fa) -{ - int i, nv; - float *v, scroll; - - v = fa->polys->verts[0]; - nv = fa->polys->numverts; - - if (fa->texinfo->flags & SURF_FLOWING) - { - scroll = -64 * ((r_newrefdef.time / 40.0) - (int)(r_newrefdef.time / 40.0)); - - if (scroll == 0.0) - { - scroll = -64.0; - } - } - else - { - scroll = 0.0; - } - - R_SetBufferIndices(GL_TRIANGLE_FAN, nv); - - for ( i = 0; i < nv; i++, v += VERTEXSIZE ) - { - GLBUFFER_VERTEX( v[0], v[1], v[2] ) - GLBUFFER_SINGLETEX( v[3] + scroll, v[4] ) - } -} - -static void -R_DrawTriangleOutlines(void) -{ - int i, j; - glpoly_t *p; - - if (!gl_showtris->value) - { - return; - } - - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - glColor4f(1, 1, 1, 1); - - for (i = 0; i < MAX_LIGHTMAPS; i++) - { - msurface_t *surf; - - for (surf = gl_lms.lightmap_surfaces[i]; - surf != 0; - surf = surf->lightmapchain) - { - p = surf->polys; - - for ( ; p; p = p->chain) - { - for (j = 2; j < p->numverts; j++) - { - GLfloat vtx[12]; - unsigned int k; - - for (k=0; k<3; k++) - { - vtx[0+k] = p->verts [ 0 ][ k ]; - vtx[3+k] = p->verts [ j - 1 ][ k ]; - vtx[6+k] = p->verts [ j ][ k ]; - vtx[9+k] = p->verts [ 0 ][ k ]; - } - - glEnableClientState( GL_VERTEX_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, 0, vtx ); - glDrawArrays( GL_LINE_STRIP, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - } - } - } - } - - glEnable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); -} - -static void -R_DrawGLPolyChain(glpoly_t *p, float soffset, float toffset) -{ - if ((soffset == 0) && (toffset == 0)) - { - for ( ; p != 0; p = p->chain) - { - float *v; - - v = p->verts[0]; - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, VERTEXSIZE*sizeof(GLfloat), v ); - glTexCoordPointer( 2, GL_FLOAT, VERTEXSIZE*sizeof(GLfloat), v+5 ); - glDrawArrays( GL_TRIANGLE_FAN, 0, p->numverts ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - } - } - else - { - // workaround for lack of VLAs (=> our workaround uses alloca() which is bad in loops) -#ifdef _MSC_VER - int maxNumVerts = 0; - for (glpoly_t* tmp = p; tmp; tmp = tmp->chain) - { - if ( tmp->numverts > maxNumVerts ) - maxNumVerts = tmp->numverts; - } - - YQ2_VLA( GLfloat, tex, 2 * maxNumVerts ); -#endif - - for ( ; p != 0; p = p->chain) - { - float *v; - int j; - - v = p->verts[0]; -#ifndef _MSC_VER // we have real VLAs, so it's safe to use one in this loop - YQ2_VLA(GLfloat, tex, 2*p->numverts); -#endif - - unsigned int index_tex = 0; - - for ( j = 0; j < p->numverts; j++, v += VERTEXSIZE ) - { - tex[index_tex++] = v [ 5 ] - soffset; - tex[index_tex++] = v [ 6 ] - toffset; - } - - v = p->verts [ 0 ]; - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - - glVertexPointer( 3, GL_FLOAT, VERTEXSIZE*sizeof(GLfloat), v ); - glTexCoordPointer( 2, GL_FLOAT, 0, tex ); - glDrawArrays( GL_TRIANGLE_FAN, 0, p->numverts ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - } - - YQ2_VLAFREE( tex ); - } -} - -/* - * This routine takes all the given light mapped surfaces - * in the world and blends them into the framebuffer. - */ -static void -R_BlendLightmaps(const model_t *currentmodel) -{ - int i; - msurface_t *surf, *newdrawsurf = 0; - - /* don't bother if we're set to fullbright or multitexture is enabled */ - if (gl_config.multitexture || r_fullbright->value || !r_worldmodel->lightdata) - { - return; - } - - /* don't bother writing Z */ - glDepthMask(GL_FALSE); - - /* set the appropriate blending mode unless - we're only looking at the lightmaps. */ - if (!gl_lightmap->value) - { - glEnable(GL_BLEND); - - if (gl1_saturatelighting->value) - { - glBlendFunc(GL_ONE, GL_ONE); - } - else - { - glBlendFunc(GL_ZERO, GL_SRC_COLOR); - } - } - - if (currentmodel == r_worldmodel) - { - c_visible_lightmaps = 0; - } - - /* render static lightmaps first */ - for (i = 1; i < MAX_LIGHTMAPS; i++) - { - if (gl_lms.lightmap_surfaces[i]) - { - if (currentmodel == r_worldmodel) - { - c_visible_lightmaps++; - } - - R_Bind(gl_state.lightmap_textures + i); - - for (surf = gl_lms.lightmap_surfaces[i]; - surf != 0; - surf = surf->lightmapchain) - { - if (surf->polys) - { - // Apply overbright bits to the static lightmaps - if (gl1_overbrightbits->value) - { - R_TexEnv(GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, gl1_overbrightbits->value); - } - - R_DrawGLPolyChain(surf->polys, 0, 0); - } - } - } - } - - /* render dynamic lightmaps */ - if (gl1_dynamic->value) - { - LM_InitBlock(); - - R_Bind(gl_state.lightmap_textures + 0); - - if (currentmodel == r_worldmodel) - { - c_visible_lightmaps++; - } - - newdrawsurf = gl_lms.lightmap_surfaces[0]; - - for (surf = gl_lms.lightmap_surfaces[0]; - surf != 0; - surf = surf->lightmapchain) - { - int smax, tmax; - byte *base; - - smax = (surf->extents[0] >> 4) + 1; - tmax = (surf->extents[1] >> 4) + 1; - - if (LM_AllocBlock(smax, tmax, &surf->dlight_s, &surf->dlight_t)) - { - base = gl_lms.lightmap_buffer[0]; - base += (surf->dlight_t * BLOCK_WIDTH + - surf->dlight_s) * LIGHTMAP_BYTES; - - R_BuildLightMap(surf, base, BLOCK_WIDTH * LIGHTMAP_BYTES); - } - else - { - msurface_t *drawsurf; - - /* upload what we have so far */ - LM_UploadBlock(true); - - /* draw all surfaces that use this lightmap */ - for (drawsurf = newdrawsurf; - drawsurf != surf; - drawsurf = drawsurf->lightmapchain) - { - if (drawsurf->polys) - { - // Apply overbright bits to the dynamic lightmaps - if (gl1_overbrightbits->value) - { - R_TexEnv(GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, gl1_overbrightbits->value); - } - - R_DrawGLPolyChain(drawsurf->polys, - (drawsurf->light_s - drawsurf->dlight_s) * (float)(1.0 / BLOCK_WIDTH), - (drawsurf->light_t - drawsurf->dlight_t) * (float)(1.0 / BLOCK_HEIGHT)); - } - } - - newdrawsurf = drawsurf; - - /* clear the block */ - LM_InitBlock(); - - /* try uploading the block now */ - if (!LM_AllocBlock(smax, tmax, &surf->dlight_s, &surf->dlight_t)) - { - Com_Error(ERR_FATAL, - "%s: Consecutive calls to LM_AllocBlock(%d,%d) failed (dynamic)\n", - __func__, smax, tmax); - } - - base = gl_lms.lightmap_buffer[0]; - base += (surf->dlight_t * BLOCK_WIDTH + - surf->dlight_s) * LIGHTMAP_BYTES; - - R_BuildLightMap(surf, base, BLOCK_WIDTH * LIGHTMAP_BYTES); - } - } - - /* draw remainder of dynamic lightmaps that haven't been uploaded yet */ - if (newdrawsurf) - { - LM_UploadBlock(true); - } - - for (surf = newdrawsurf; surf != 0; surf = surf->lightmapchain) - { - if (surf->polys) - { - // Apply overbright bits to the remainder lightmaps - if (gl1_overbrightbits->value) - { - R_TexEnv(GL_COMBINE); - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, gl1_overbrightbits->value); - } - - R_DrawGLPolyChain(surf->polys, - (surf->light_s - surf->dlight_s) * (float)(1.0 / BLOCK_WIDTH), - (surf->light_t - surf->dlight_t) * (float)(1.0 / BLOCK_HEIGHT)); - } - } - } - - /* restore state */ - glDisable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDepthMask(GL_TRUE); -} - -static void -R_RenderBrushPoly(msurface_t *fa) -{ - int maps; - qboolean is_dynamic = false; - - c_brush_polys++; - - if (fa->flags & SURF_DRAWTURB) - { - R_EmitWaterPolys(fa); - return; - } - - R_DrawGLPoly(fa); - - if (gl_config.multitexture) - { - return; // lighting already done at this point for mtex - } - - /* check for lightmap modification */ - for (maps = 0; maps < MAXLIGHTMAPS && fa->styles[maps] != 255; maps++) - { - if (r_newrefdef.lightstyles[fa->styles[maps]].white != - fa->cached_light[maps]) - { - goto dynamic; - } - } - - /* dynamic this frame or dynamic previously */ - if (fa->dlightframe == r_framecount) - { - dynamic: - - if (gl1_dynamic->value) - { - if (!(fa->texinfo->flags & - (SURF_SKY | SURF_TRANS33 | - SURF_TRANS66 | SURF_WARP))) - { - is_dynamic = true; - } - } - } - - if (is_dynamic) - { - if (maps < MAXLIGHTMAPS && - ((fa->styles[maps] >= 32) || - (fa->styles[maps] == 0)) && - (fa->dlightframe != r_framecount)) - { - unsigned temp[34 * 34]; - int smax, tmax; - - smax = (fa->extents[0] >> 4) + 1; - tmax = (fa->extents[1] >> 4) + 1; - - R_BuildLightMap(fa, (void *)temp, smax * 4); - R_SetCacheState(fa); - - R_Bind(gl_state.lightmap_textures + fa->lightmaptexturenum); - - glTexSubImage2D(GL_TEXTURE_2D, 0, fa->light_s, fa->light_t, - smax, tmax, GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, temp); - - fa->lightmapchain = gl_lms.lightmap_surfaces[fa->lightmaptexturenum]; - gl_lms.lightmap_surfaces[fa->lightmaptexturenum] = fa; - } - else - { - fa->lightmapchain = gl_lms.lightmap_surfaces[0]; - gl_lms.lightmap_surfaces[0] = fa; - } - } - else - { - fa->lightmapchain = gl_lms.lightmap_surfaces[fa->lightmaptexturenum]; - gl_lms.lightmap_surfaces[fa->lightmaptexturenum] = fa; - } -} - -/* - * Draw water surfaces and windows. - * The BSP tree is waled front to back, so unwinding the chain - * of alpha_surfaces will draw back to front, giving proper ordering. - */ -void -R_DrawAlphaSurfaces(void) -{ - msurface_t *s; - float alpha; - - /* go back to the world matrix */ - glLoadMatrixf(r_world_matrix); - - glEnable(GL_BLEND); - R_TexEnv(GL_MODULATE); - - for (s = r_alpha_surfaces; s; s = s->texturechain) - { - c_brush_polys++; - - if (s->texinfo->flags & SURF_TRANS33) - { - alpha = 0.33f; - } - else if (s->texinfo->flags & SURF_TRANS66) - { - alpha = 0.66f; - } - else - { - alpha = 1.0f; - } - - R_UpdateGLBuffer(buf_alpha, s->texinfo->image->texnum, 0, 0, alpha); - - if (s->flags & SURF_DRAWTURB) - { - R_EmitWaterPolys(s); - } - else - { - R_DrawGLPoly(s); - } - } - R_ApplyGLBuffer(); // Flush the last batched array - - R_TexEnv(GL_REPLACE); - glColor4f(1, 1, 1, 1); - glDisable(GL_BLEND); - - r_alpha_surfaces = NULL; -} - -static void -R_RenderLightmappedPoly(msurface_t *surf) -{ - const int nv = surf->polys->numverts; - int i; - float scroll; - float *v; - - c_brush_polys++; - v = surf->polys->verts[0]; - - if (surf->texinfo->flags & SURF_FLOWING) - { - scroll = -64 * ((r_newrefdef.time / 40.0) - (int) (r_newrefdef.time / 40.0)); - - if (scroll == 0.0) - { - scroll = -64.0; - } - } - else - { - scroll = 0.0; - } - - R_SetBufferIndices(GL_TRIANGLE_FAN, nv); - - for (i = 0; i < nv; i++, v += VERTEXSIZE) - { - GLBUFFER_VERTEX( v[0], v[1], v[2] ) - GLBUFFER_MULTITEX( v[3] + scroll, v[4], v[5], v[6] ) - } -} - -/* Add "adding" area to "obj" */ -static void -R_JoinAreas(lmrect_t *adding, lmrect_t *obj) -{ - if (adding->top < obj->top) - { - obj->top = adding->top; - } - if (adding->bottom > obj->bottom) - { - obj->bottom = adding->bottom; - } - if (adding->left < obj->left) - { - obj->left = adding->left; - } - if (adding->right > obj->right) - { - obj->right = adding->right; - } -} - -/* Upload dynamic lights to each lightmap texture (multitexture path only) */ -static void -R_RegenAllLightmaps() -{ - static lmrect_t lmchange[MAX_LIGHTMAPS][MAX_LIGHTMAP_COPIES]; - static qboolean altered[MAX_LIGHTMAPS][MAX_LIGHTMAP_COPIES]; - - int i, lmtex; -#ifndef YQ2_GL1_GLES - qboolean pixelstore_set = false; -#endif - - if ( !gl_config.multitexture || r_fullbright->value || !gl1_dynamic->value ) - { - return; - } - - if (gl_config.lightmapcopies) - { - cur_lm_copy = (cur_lm_copy + 1) % MAX_LIGHTMAP_COPIES; // select the next lightmap copy - lmtex = MAX_LIGHTMAPS * cur_lm_copy; // ...and its corresponding texture - } - else - { - lmtex = 0; - } - - for (i = 1; i < MAX_LIGHTMAPS; i++) - { - lmrect_t current, best; - msurface_t *surf; - byte *base; - qboolean affected_lightmap; - - if (!gl_lms.lightmap_surfaces[i] || !gl_lms.lightmap_buffer[i]) - { - continue; - } - - affected_lightmap = false; - best.top = BLOCK_HEIGHT; - best.left = BLOCK_WIDTH; - best.bottom = best.right = 0; - - for (surf = gl_lms.lightmap_surfaces[i]; - surf != 0; - surf = surf->lightmapchain) - { - int map; - - if (surf->texinfo->flags & (SURF_SKY | SURF_TRANS33 | SURF_TRANS66 | SURF_WARP)) - { - continue; - } - - // Any dynamic lights on this surface? - for (map = 0; map < MAXLIGHTMAPS && surf->styles[map] != 255; map++) - { - if (r_newrefdef.lightstyles[surf->styles[map]].white != surf->cached_light[map]) - { - goto dynamic_surf; - } - } - - // Surface is considered to have dynamic lights if it had them in the previous frame - if ( surf->dlightframe != r_framecount && !surf->dirty_lightmap ) - { - continue; // no dynamic lights affect this surface in this frame - } - -dynamic_surf: - affected_lightmap = true; - - current.left = surf->light_s; - current.right = surf->light_s + (surf->extents[0] >> 4) + 1; // + smax - current.top = surf->light_t; - current.bottom = surf->light_t + (surf->extents[1] >> 4) + 1; // + tmax - - base = gl_lms.lightmap_buffer[i]; - base += (current.top * BLOCK_WIDTH + current.left) * LIGHTMAP_BYTES; - - R_BuildLightMap(surf, base, BLOCK_WIDTH * LIGHTMAP_BYTES); - - if (surf->dlightframe != r_framecount) - { - for (map = 0; map < MAXLIGHTMAPS && surf->styles[map] != 255; map++) - { - if ( (surf->styles[map] >= 32) || (surf->styles[map] == 0) ) - { - R_SetCacheState(surf); - break; - } - } - } - - surf->dirty_lightmap = (surf->dlightframe == r_framecount); - R_JoinAreas(¤t, &best); - } - - if (!gl_config.lightmapcopies && !affected_lightmap) - { - continue; - } - - if (gl_config.lightmapcopies) - { - // Add all the changes that have happened in the last few frames, - // at least just for consistency between them. - qboolean apply_changes = affected_lightmap; - current = best; // save state for next frames... + - - for (int k = 0; k < MAX_LIGHTMAP_COPIES; k++) - { - if (altered[i][k]) - { - apply_changes = true; - R_JoinAreas(&lmchange[i][k], &best); - } - } - - altered[i][cur_lm_copy] = affected_lightmap; - if (affected_lightmap) - { - lmchange[i][cur_lm_copy] = current; // + ...here - } - - if (!apply_changes) - { - continue; - } - } - -#ifndef YQ2_GL1_GLES - if (!pixelstore_set) - { - glPixelStorei(GL_UNPACK_ROW_LENGTH, BLOCK_WIDTH); - pixelstore_set = true; - } -#endif - - // upload changes - base = gl_lms.lightmap_buffer[i]; - -#ifdef YQ2_GL1_GLES - base += (best.top * BLOCK_WIDTH) * LIGHTMAP_BYTES; - - R_Bind(gl_state.lightmap_textures + i + lmtex); - - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, best.top, - BLOCK_WIDTH, best.bottom - best.top, - GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, base); -#else - base += (best.top * BLOCK_WIDTH + best.left) * LIGHTMAP_BYTES; - - R_Bind(gl_state.lightmap_textures + i + lmtex); - - glTexSubImage2D(GL_TEXTURE_2D, 0, best.left, best.top, - best.right - best.left, best.bottom - best.top, - GL_LIGHTMAP_FORMAT, GL_UNSIGNED_BYTE, base); -#endif - } - -#ifndef YQ2_GL1_GLES - if (pixelstore_set) - { - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - } -#endif -} - -static void -R_DrawTextureChains(void) -{ - int i; - msurface_t *s; - image_t *image; - - c_visible_textures = 0; - - if (!gl_config.multitexture) // classic path - { - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!image->registration_sequence) - { - continue; - } - - s = image->texturechain; - - if (!s) - { - continue; - } - - c_visible_textures++; - - for ( ; s; s = s->texturechain) - { - R_UpdateGLBuffer(buf_singletex, image->texnum, 0, s->flags, 1); - R_RenderBrushPoly(s); - } - - image->texturechain = NULL; - } - R_ApplyGLBuffer(); // Flush the last batched array - } - else // multitexture - { - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!image->registration_sequence || !image->texturechain) - { - continue; - } - - c_visible_textures++; - - for (s = image->texturechain; s; s = s->texturechain) - { - if (!(s->flags & SURF_DRAWTURB)) - { - R_UpdateGLBuffer(buf_mtex, image->texnum, s->lightmaptexturenum, 0, 1); - R_RenderLightmappedPoly(s); - } - } - } - R_ApplyGLBuffer(); - - R_EnableMultitexture(false); // force disabling, SURF_DRAWTURB surfaces may not exist - - for (i = 0, image = gltextures; i < numgltextures; i++, image++) - { - if (!image->registration_sequence || !image->texturechain) - { - continue; - } - - for (s = image->texturechain; s; s = s->texturechain) - { - if (s->flags & SURF_DRAWTURB) - { - R_UpdateGLBuffer(buf_singletex, image->texnum, 0, s->flags, 1); - R_RenderBrushPoly(s); - } - } - - image->texturechain = NULL; - } - R_ApplyGLBuffer(); - } -} - -static void -R_DrawInlineBModel(entity_t *currententity, const model_t *currentmodel) -{ - int i, k; - cplane_t *pplane; - float dot; - msurface_t *psurf; - dlight_t *lt; - image_t *image; - - /* calculate dynamic lighting for bmodel */ - if (!gl_config.multitexture && !gl1_flashblend->value) - { - lt = r_newrefdef.dlights; - - for (k = 0; k < r_newrefdef.num_dlights; k++, lt++) - { - R_MarkLights(lt, 1 << k, - currentmodel->nodes + currentmodel->firstnode, - r_dlightframecount, R_MarkSurfaceLights); - } - } - - psurf = ¤tmodel->surfaces[currentmodel->firstmodelsurface]; - - if (currententity->flags & RF_TRANSLUCENT) - { - glEnable(GL_BLEND); - glColor4f(1, 1, 1, 0.25); - R_TexEnv(GL_MODULATE); - } - - /* draw texture */ - for (i = 0; i < currentmodel->nummodelsurfaces; i++, psurf++) - { - /* find which side of the node we are on */ - pplane = psurf->plane; - - dot = DotProduct(modelorg, pplane->normal) - pplane->dist; - - /* draw the polygon */ - if (((psurf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || - (!(psurf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON))) - { - if (psurf->texinfo->flags & (SURF_TRANS33 | SURF_TRANS66)) - { - /* add to the translucent chain */ - psurf->texturechain = r_alpha_surfaces; - r_alpha_surfaces = psurf; - } - else - { - image = R_TextureAnimation(currententity, psurf->texinfo); - - if (gl_config.multitexture && !(psurf->flags & SURF_DRAWTURB)) - { - // Dynamic lighting already generated in R_GetBrushesLighting() - R_UpdateGLBuffer(buf_mtex, image->texnum, psurf->lightmaptexturenum, 0, 1); - R_RenderLightmappedPoly(psurf); - } - else - { - R_UpdateGLBuffer(buf_singletex, image->texnum, 0, psurf->flags, 1); - R_RenderBrushPoly(psurf); - } - } - } - } - R_ApplyGLBuffer(); - - if (!(currententity->flags & RF_TRANSLUCENT)) - { - R_BlendLightmaps(currentmodel); - } - else - { - glDisable(GL_BLEND); - glColor4f(1, 1, 1, 1); - R_TexEnv(GL_REPLACE); - } -} - -void -R_DrawBrushModel(entity_t *currententity, const model_t *currentmodel) -{ - vec3_t mins, maxs; - int i; - qboolean rotated; - - if (currentmodel->nummodelsurfaces == 0) - { - return; - } - - gl_state.currenttextures[0] = gl_state.currenttextures[1] = -1; - - if (currententity->angles[0] || currententity->angles[1] || currententity->angles[2]) - { - rotated = true; - - for (i = 0; i < 3; i++) - { - mins[i] = currententity->origin[i] - currentmodel->radius; - maxs[i] = currententity->origin[i] + currentmodel->radius; - } - } - else - { - rotated = false; - VectorAdd(currententity->origin, currentmodel->mins, mins); - VectorAdd(currententity->origin, currentmodel->maxs, maxs); - } - - if (r_cull->value && R_CullBox(mins, maxs, frustum)) - { - return; - } - - if (gl_zfix->value) - { - glEnable(GL_POLYGON_OFFSET_FILL); - } - - glColor4f(1, 1, 1, 1); - memset(gl_lms.lightmap_surfaces, 0, sizeof(gl_lms.lightmap_surfaces)); - - VectorSubtract(r_newrefdef.vieworg, currententity->origin, modelorg); - - if (rotated) - { - vec3_t temp; - vec3_t forward, right, up; - - VectorCopy(modelorg, temp); - AngleVectors(currententity->angles, forward, right, up); - modelorg[0] = DotProduct(temp, forward); - modelorg[1] = -DotProduct(temp, right); - modelorg[2] = DotProduct(temp, up); - } - - glPushMatrix(); - currententity->angles[0] = -currententity->angles[0]; - currententity->angles[2] = -currententity->angles[2]; - R_RotateForEntity(currententity); - currententity->angles[0] = -currententity->angles[0]; - currententity->angles[2] = -currententity->angles[2]; - - if (gl_lightmap->value) - { - R_TexEnv(GL_REPLACE); - } - else - { - R_TexEnv(GL_MODULATE); - } - - R_DrawInlineBModel(currententity, currentmodel); - - glPopMatrix(); - - if (gl_zfix->value) - { - glDisable(GL_POLYGON_OFFSET_FILL); - } -} - -static void -R_RecursiveWorldNode(entity_t *currententity, mnode_t *node) -{ - int c, side, sidebit; - cplane_t *plane; - msurface_t *surf, **mark; - mleaf_t *pleaf; - float dot; - image_t *image; - - if (node->contents == CONTENTS_SOLID) - { - return; /* solid */ - } - - if (node->visframe != r_visframecount) - { - return; - } - - if (r_cull->value && R_CullBox(node->minmaxs, node->minmaxs + 3, frustum)) - { - return; - } - - /* if a leaf node, draw stuff */ - if (node->contents != CONTENTS_NODE) - { - pleaf = (mleaf_t *)node; - - /* check for door connected areas */ - if (!R_AreaVisible(r_newrefdef.areabits, pleaf)) - return; // not visible - - mark = pleaf->firstmarksurface; - c = pleaf->nummarksurfaces; - - if (c) - { - do - { - (*mark)->visframe = r_framecount; - mark++; - } - while (--c); - } - - return; - } - - /* node is just a decision point, so go down the apropriate - sides find which side of the node we are on */ - plane = node->plane; - - switch (plane->type) - { - case PLANE_X: - dot = modelorg[0] - plane->dist; - break; - case PLANE_Y: - dot = modelorg[1] - plane->dist; - break; - case PLANE_Z: - dot = modelorg[2] - plane->dist; - break; - default: - dot = DotProduct(modelorg, plane->normal) - plane->dist; - break; - } - - if (dot >= 0) - { - side = 0; - sidebit = 0; - } - else - { - side = 1; - sidebit = SURF_PLANEBACK; - } - - /* recurse down the children, front side first */ - R_RecursiveWorldNode(currententity, node->children[side]); - - /* draw stuff */ - for (c = node->numsurfaces, - surf = r_worldmodel->surfaces + node->firstsurface; - c; c--, surf++) - { - if (surf->visframe != r_framecount) - { - continue; - } - - if ((surf->flags & SURF_PLANEBACK) != sidebit) - { - continue; /* wrong side */ - } - - if (surf->texinfo->flags & SURF_SKY) - { - /* just adds to visible sky bounds */ - R_AddSkySurface(surf); - } - else if (surf->texinfo->flags & (SURF_TRANS33 | SURF_TRANS66)) - { - /* add to the translucent chain */ - surf->texturechain = r_alpha_surfaces; - r_alpha_surfaces = surf; - r_alpha_surfaces->texinfo->image = R_TextureAnimation(currententity, surf->texinfo); - } - else - { - /* the polygon is visible, so add it to the texture sorted chain */ - image = R_TextureAnimation(currententity, surf->texinfo); - surf->texturechain = image->texturechain; - image->texturechain = surf; - - if (gl_config.multitexture && !(surf->texinfo->flags & SURF_WARP)) // needed for R_RegenAllLightmaps() - { - surf->lightmapchain = gl_lms.lightmap_surfaces[surf->lightmaptexturenum]; - gl_lms.lightmap_surfaces[surf->lightmaptexturenum] = surf; - } - } - } - - /* recurse down the back side */ - R_RecursiveWorldNode(currententity, node->children[!side]); -} - -/* - * This is for the RegenAllLightmaps() function to be able to regenerate - * lighting not only for the world, but also for the brushes in the entity list. - * Logic extracted from R_DrawBrushModel() & R_DrawInlineBModel(). - */ -static void -R_GetBrushesLighting(void) -{ - int i, k; - vec3_t mins, maxs; - msurface_t *surf; - cplane_t *pplane; - dlight_t *lt; - float dot; - - if (!gl_config.multitexture || !r_drawentities->value || gl1_flashblend->value) - { - return; - } - - for (i = 0; i < r_newrefdef.num_entities; i++) - { - entity_t *currententity = &r_newrefdef.entities[i]; - - if (currententity->flags & RF_BEAM) - { - continue; - } - - const model_t *currentmodel = currententity->model; - - if (!currentmodel || currentmodel->type != mod_brush || currentmodel->nummodelsurfaces == 0) - { - continue; - } - - // from R_DrawBrushModel() - if (currententity->angles[0] || currententity->angles[1] || currententity->angles[2]) - { - for (k = 0; k < 3; k++) - { - mins[k] = currententity->origin[k] - currentmodel->radius; - maxs[k] = currententity->origin[k] + currentmodel->radius; - } - } - else - { - VectorAdd(currententity->origin, currentmodel->mins, mins); - VectorAdd(currententity->origin, currentmodel->maxs, maxs); - } - - if (r_cull->value && R_CullBox(mins, maxs, frustum)) - { - continue; - } - - // from R_DrawInlineBModel() - lt = r_newrefdef.dlights; - - for (k = 0; k < r_newrefdef.num_dlights; k++, lt++) - { - R_MarkLights(lt, 1 << k, - currentmodel->nodes + currentmodel->firstnode, - r_dlightframecount, R_MarkSurfaceLights); - } - - surf = ¤tmodel->surfaces[currentmodel->firstmodelsurface]; - - for (k = 0; k < currentmodel->nummodelsurfaces; k++, surf++) - { - if (surf->texinfo->flags & (SURF_TRANS33 | SURF_TRANS66 | SURF_WARP) - || surf->flags & SURF_DRAWTURB || surf->lmchain_frame == r_framecount) - { - continue; // either not affected by light, or already in the chain - } - - // find which side of the node we are on - pplane = surf->plane; - dot = DotProduct(modelorg, pplane->normal) - pplane->dist; - - if (((surf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || - (!(surf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON))) - { - surf->lmchain_frame = r_framecount; // don't add this twice to the chain - surf->lightmapchain = gl_lms.lightmap_surfaces[surf->lightmaptexturenum]; - gl_lms.lightmap_surfaces[surf->lightmaptexturenum] = surf; - } - } - } -} - -void -R_DrawWorld(void) -{ - entity_t ent; - - if (!r_drawworld->value) - { - return; - } - - if (r_newrefdef.rdflags & RDF_NOWORLDMODEL) - { - return; - } - - VectorCopy(r_newrefdef.vieworg, modelorg); - - /* auto cycle the world frame for texture animation */ - memset(&ent, 0, sizeof(ent)); - ent.frame = (int)(r_newrefdef.time * 2); - - gl_state.currenttextures[0] = gl_state.currenttextures[1] = -1; - - glColor4f(1, 1, 1, 1); - memset(gl_lms.lightmap_surfaces, 0, sizeof(gl_lms.lightmap_surfaces)); - - R_ClearSkyBox(); - R_RecursiveWorldNode(&ent, r_worldmodel->nodes); - R_GetBrushesLighting(); - R_RegenAllLightmaps(); - R_DrawTextureChains(); - R_BlendLightmaps(r_worldmodel); - R_DrawSkyBox(); - R_DrawTriangleOutlines(); -} - -/* - * Mark the leaves and nodes that are - * in the PVS for the current cluster - */ -void -R_MarkLeaves(void) -{ - const byte *vis; - YQ2_ALIGNAS_TYPE(int) byte fatvis[MAX_MAP_LEAFS / 8]; - mnode_t *node; - int i, c; - mleaf_t *leaf; - int cluster; - - if ((r_oldviewcluster == r_viewcluster) && - (r_oldviewcluster2 == r_viewcluster2) && - !r_novis->value && - (r_viewcluster != -1)) - { - return; - } - - /* development aid to let you run around - and see exactly where the pvs ends */ - if (r_lockpvs->value) - { - return; - } - - r_visframecount++; - r_oldviewcluster = r_viewcluster; - r_oldviewcluster2 = r_viewcluster2; - - if (r_novis->value || (r_viewcluster == -1) || !r_worldmodel->vis) - { - /* mark everything */ - for (i = 0; i < r_worldmodel->numleafs; i++) - { - r_worldmodel->leafs[i].visframe = r_visframecount; - } - - for (i = 0; i < r_worldmodel->numnodes; i++) - { - r_worldmodel->nodes[i].visframe = r_visframecount; - } - - return; - } - - vis = Mod_ClusterPVS(r_viewcluster, r_worldmodel); - - /* may have to combine two clusters because of solid water boundaries */ - if (r_viewcluster2 != r_viewcluster) - { - memcpy(fatvis, vis, (r_worldmodel->numleafs + 7) / 8); - vis = Mod_ClusterPVS(r_viewcluster2, r_worldmodel); - c = (r_worldmodel->numleafs + 31) / 32; - - for (i = 0; i < c; i++) - { - ((int *)fatvis)[i] |= ((int *)vis)[i]; - } - - vis = fatvis; - } - - for (i = 0, leaf = r_worldmodel->leafs; - i < r_worldmodel->numleafs; - i++, leaf++) - { - cluster = leaf->cluster; - - if (cluster == -1) - { - continue; - } - - if (vis[cluster >> 3] & (1 << (cluster & 7))) - { - node = (mnode_t *)leaf; - - do - { - if (node->visframe == r_visframecount) - { - break; - } - - node->visframe = r_visframecount; - node = node->parent; - } - while (node); - } - } -} diff --git a/src/client/refresh/gl1/gl1_warp.c b/src/client/refresh/gl1/gl1_warp.c deleted file mode 100644 index 4c5a1885b..000000000 --- a/src/client/refresh/gl1/gl1_warp.c +++ /dev/null @@ -1,741 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Warps. Used on water surfaces und for skybox rotation. - * - * ======================================================================= - */ - -#include "header/local.h" - -#define TURBSCALE (256.0 / (2 * M_PI)) -#define SUBDIVIDE_SIZE 64 -#define ON_EPSILON 0.1 /* point on plane side epsilon */ -#define MAX_CLIP_VERTS 64 -#define MAX_SUBDIVIDE_VERTS 60 - -float skyrotate; -vec3_t skyaxis; -image_t *sky_images[6]; -msurface_t *warpface; -int skytexorder[6] = {0, 2, 1, 3, 4, 5}; - -GLfloat vtx_sky[12]; -GLfloat tex_sky[8]; -unsigned int index_vtx = 0; -unsigned int index_tex = 0; - -/* 3dstudio environment map names */ -char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"}; - -float r_turbsin[] = { -#include "../constants/warpsin.h" -}; - -vec3_t skyclip[6] = { - {1, 1, 0}, - {1, -1, 0}, - {0, -1, 1}, - {0, 1, 1}, - {1, 0, 1}, - {-1, 0, 1} -}; -int c_sky; - -int st_to_vec[6][3] = { - {3, -1, 2}, - {-3, 1, 2}, - - {1, 3, 2}, - {-1, -3, 2}, - - {-2, -1, 3}, /* 0 degrees yaw, look straight up */ - {2, -1, -3} /* look straight down */ -}; - -int vec_to_st[6][3] = { - {-2, 3, 1}, - {2, 3, -1}, - - {1, 3, 2}, - {-1, 3, -2}, - - {-2, -1, 3}, - {-2, 1, -3} -}; - -float skymins[2][6], skymaxs[2][6]; -float sky_min, sky_max; - -void -R_BoundPoly(int numverts, float *verts, vec3_t mins, vec3_t maxs) -{ - int i, j; - float *v; - - mins[0] = mins[1] = mins[2] = 9999; - maxs[0] = maxs[1] = maxs[2] = -9999; - v = verts; - - for (i = 0; i < numverts; i++) - { - for (j = 0; j < 3; j++, v++) - { - if (*v < mins[j]) - { - mins[j] = *v; - } - - if (*v > maxs[j]) - { - maxs[j] = *v; - } - } - } -} - -void -R_SubdividePolygon(int numverts, float *verts) -{ - int i, j, k; - vec3_t mins, maxs; - float m; - float *v; - vec3_t front[64], back[64]; - int f, b; - float dist[64]; - float frac; - glpoly_t *poly; - float s, t; - vec3_t total; - float total_s, total_t; - - if (numverts > MAX_SUBDIVIDE_VERTS) - { - Com_Error(ERR_DROP, "%s: numverts = %i", __func__, numverts); - } - - R_BoundPoly(numverts, verts, mins, maxs); - - for (i = 0; i < 3; i++) - { - m = (mins[i] + maxs[i]) * 0.5; - m = SUBDIVIDE_SIZE * floor(m / SUBDIVIDE_SIZE + 0.5); - - if (maxs[i] - m < 8) - { - continue; - } - - if (m - mins[i] < 8) - { - continue; - } - - /* cut it */ - v = verts + i; - - for (j = 0; j < numverts; j++, v += 3) - { - dist[j] = *v - m; - } - - /* wrap cases */ - dist[j] = dist[0]; - v -= i; - VectorCopy(verts, v); - - f = b = 0; - v = verts; - - for (j = 0; j < numverts; j++, v += 3) - { - if (dist[j] >= 0) - { - VectorCopy(v, front[f]); - f++; - } - - if (dist[j] <= 0) - { - VectorCopy(v, back[b]); - b++; - } - - if ((dist[j] == 0) || (dist[j + 1] == 0)) - { - continue; - } - - if ((dist[j] > 0) != (dist[j + 1] > 0)) - { - /* clip point */ - frac = dist[j] / (dist[j] - dist[j + 1]); - - for (k = 0; k < 3; k++) - { - front[f][k] = back[b][k] = v[k] + frac * (v[3 + k] - v[k]); - } - - f++; - b++; - } - } - - R_SubdividePolygon(f, front[0]); - R_SubdividePolygon(b, back[0]); - return; - } - - /* add a point in the center to help keep warp valid */ - poly = Hunk_Alloc(sizeof(glpoly_t) + ((numverts - 4) + 2) * VERTEXSIZE * sizeof(float)); - poly->next = warpface->polys; - warpface->polys = poly; - poly->numverts = numverts + 2; - VectorClear(total); - total_s = 0; - total_t = 0; - - for (i = 0; i < numverts; i++, verts += 3) - { - VectorCopy(verts, poly->verts[i + 1]); - s = DotProduct(verts, warpface->texinfo->vecs[0]); - t = DotProduct(verts, warpface->texinfo->vecs[1]); - - total_s += s; - total_t += t; - VectorAdd(total, verts, total); - - poly->verts[i + 1][3] = s; - poly->verts[i + 1][4] = t; - } - - VectorScale(total, (1.0 / numverts), poly->verts[0]); - poly->verts[0][3] = total_s / numverts; - poly->verts[0][4] = total_t / numverts; - - /* copy first vertex to last */ - memcpy(poly->verts[i + 1], poly->verts[1], sizeof(poly->verts[0])); -} - -/* - * Breaks a polygon up along axial 64 unit - * boundaries so that turbulent and sky warps - * can be done reasonably. - */ -void -R_SubdivideSurface(model_t *loadmodel, msurface_t *fa) -{ - vec3_t verts[64]; - int numverts; - int i; - int lindex; - float *vec; - - warpface = fa; - - /* convert edges back to a normal polygon */ - numverts = 0; - - for (i = 0; i < fa->numedges; i++) - { - lindex = loadmodel->surfedges[fa->firstedge + i]; - - if (lindex > 0) - { - vec = loadmodel->vertexes[loadmodel->edges[lindex].v[0]].position; - } - else - { - vec = loadmodel->vertexes[loadmodel->edges[-lindex].v[1]].position; - } - - VectorCopy(vec, verts[numverts]); - numverts++; - } - - R_SubdividePolygon(numverts, verts[0]); -} - -/* - * Does a water warp on the pre-fragmented glpoly_t chain - */ -void -R_EmitWaterPolys(msurface_t *fa) -{ - glpoly_t *p, *bp; - float *v; - int i, nv; - float s, t, os, ot; - float scroll; - float rdt = r_newrefdef.time; - - if (fa->texinfo->flags & SURF_FLOWING) - { - scroll = -64 * ((r_newrefdef.time * 0.5) - (int)(r_newrefdef.time * 0.5)); - } - else - { - scroll = 0; - } - - for (bp = fa->polys; bp; bp = bp->next) - { - p = bp; - nv = p->numverts; - R_SetBufferIndices(GL_TRIANGLE_FAN, nv); - - for ( i = 0, v = p->verts [ 0 ]; i < nv; i++, v += VERTEXSIZE ) - { - os = v [ 3 ]; - ot = v [ 4 ]; - - s = os + r_turbsin [ (int) ( ( ot * 0.125 + rdt ) * TURBSCALE ) & 255 ] + scroll; - t = ot + r_turbsin [ (int) ( ( os * 0.125 + rdt ) * TURBSCALE ) & 255 ]; - - GLBUFFER_VERTEX( v[0], v[1], v[2] ) - GLBUFFER_SINGLETEX( s * ( 1.0 / 64 ), t * ( 1.0 / 64 ) ) - } - } -} - -void -R_DrawSkyPolygon(int nump, vec3_t vecs) -{ - int i, j; - vec3_t v, av; - float s, t, dv; - int axis; - float *vp; - - c_sky++; - - /* decide which face it maps to */ - VectorCopy(vec3_origin, v); - - for (i = 0, vp = vecs; i < nump; i++, vp += 3) - { - VectorAdd(vp, v, v); - } - - av[0] = fabs(v[0]); - av[1] = fabs(v[1]); - av[2] = fabs(v[2]); - - if ((av[0] > av[1]) && (av[0] > av[2])) - { - if (v[0] < 0) - { - axis = 1; - } - else - { - axis = 0; - } - } - else if ((av[1] > av[2]) && (av[1] > av[0])) - { - if (v[1] < 0) - { - axis = 3; - } - else - { - axis = 2; - } - } - else - { - if (v[2] < 0) - { - axis = 5; - } - else - { - axis = 4; - } - } - - /* project new texture coords */ - for (i = 0; i < nump; i++, vecs += 3) - { - j = vec_to_st[axis][2]; - - if (j > 0) - { - dv = vecs[j - 1]; - } - else - { - dv = -vecs[-j - 1]; - } - - if (dv < 0.001) - { - continue; /* don't divide by zero */ - } - - j = vec_to_st[axis][0]; - - if (j < 0) - { - s = -vecs[-j - 1] / dv; - } - else - { - s = vecs[j - 1] / dv; - } - - j = vec_to_st[axis][1]; - - if (j < 0) - { - t = -vecs[-j - 1] / dv; - } - else - { - t = vecs[j - 1] / dv; - } - - if (s < skymins[0][axis]) - { - skymins[0][axis] = s; - } - - if (t < skymins[1][axis]) - { - skymins[1][axis] = t; - } - - if (s > skymaxs[0][axis]) - { - skymaxs[0][axis] = s; - } - - if (t > skymaxs[1][axis]) - { - skymaxs[1][axis] = t; - } - } -} - -void -R_ClipSkyPolygon(int nump, vec3_t vecs, int stage) -{ - float *norm; - float *v; - qboolean front, back; - float d, e; - float dists[MAX_CLIP_VERTS]; - int sides[MAX_CLIP_VERTS]; - vec3_t newv[2][MAX_CLIP_VERTS]; - int newc[2]; - int i, j; - - if (nump > MAX_CLIP_VERTS - 2) - { - Com_Error(ERR_DROP, "%s: MAX_CLIP_VERTS", __func__); - } - - if (stage == 6) - { - /* fully clipped, so draw it */ - R_DrawSkyPolygon(nump, vecs); - return; - } - - front = back = false; - norm = skyclip[stage]; - - for (i = 0, v = vecs; i < nump; i++, v += 3) - { - d = DotProduct(v, norm); - - if (d > ON_EPSILON) - { - front = true; - sides[i] = SIDE_FRONT; - } - else if (d < -ON_EPSILON) - { - back = true; - sides[i] = SIDE_BACK; - } - else - { - sides[i] = SIDE_ON; - } - - dists[i] = d; - } - - if (!front || !back) - { - /* not clipped */ - R_ClipSkyPolygon(nump, vecs, stage + 1); - return; - } - - /* clip it */ - sides[i] = sides[0]; - dists[i] = dists[0]; - VectorCopy(vecs, (vecs + (i * 3))); - newc[0] = newc[1] = 0; - - for (i = 0, v = vecs; i < nump; i++, v += 3) - { - switch (sides[i]) - { - case SIDE_FRONT: - VectorCopy(v, newv[0][newc[0]]); - newc[0]++; - break; - case SIDE_BACK: - VectorCopy(v, newv[1][newc[1]]); - newc[1]++; - break; - case SIDE_ON: - VectorCopy(v, newv[0][newc[0]]); - newc[0]++; - VectorCopy(v, newv[1][newc[1]]); - newc[1]++; - break; - } - - if ((sides[i] == SIDE_ON) || - (sides[i + 1] == SIDE_ON) || - (sides[i + 1] == sides[i])) - { - continue; - } - - d = dists[i] / (dists[i] - dists[i + 1]); - - for (j = 0; j < 3; j++) - { - e = v[j] + d * (v[j + 3] - v[j]); - newv[0][newc[0]][j] = e; - newv[1][newc[1]][j] = e; - } - - newc[0]++; - newc[1]++; - } - - /* continue */ - R_ClipSkyPolygon(newc[0], newv[0][0], stage + 1); - R_ClipSkyPolygon(newc[1], newv[1][0], stage + 1); -} - -void -R_AddSkySurface(msurface_t *fa) -{ - int i; - vec3_t verts[MAX_CLIP_VERTS]; - glpoly_t *p; - - /* calculate vertex values for sky box */ - for (p = fa->polys; p; p = p->next) - { - for (i = 0; i < p->numverts; i++) - { - VectorSubtract(p->verts[i], r_origin, verts[i]); - } - - R_ClipSkyPolygon(p->numverts, verts[0], 0); - } -} - -void -R_ClearSkyBox(void) -{ - int i; - - for (i = 0; i < 6; i++) - { - skymins[0][i] = skymins[1][i] = 9999; - skymaxs[0][i] = skymaxs[1][i] = -9999; - } -} - -void -R_MakeSkyVec(float s, float t, int axis) -{ - vec3_t v, b; - int j, k; - - if (r_farsee->value == 0) - { - b[0] = s * 2300; - b[1] = t * 2300; - b[2] = 2300; - } - else - { - b[0] = s * 4096; - b[1] = t * 4096; - b[2] = 4096; - } - - for (j = 0; j < 3; j++) - { - k = st_to_vec[axis][j]; - - if (k < 0) - { - v[j] = -b[-k - 1]; - } - else - { - v[j] = b[k - 1]; - } - } - - /* avoid bilerp seam */ - s = (s + 1) * 0.5; - t = (t + 1) * 0.5; - - if (s < sky_min) - { - s = sky_min; - } - else if (s > sky_max) - { - s = sky_max; - } - - if (t < sky_min) - { - t = sky_min; - } - else if (t > sky_max) - { - t = sky_max; - } - - t = 1.0 - t; - - tex_sky[index_tex++] = s; - tex_sky[index_tex++] = t; - - vtx_sky[index_vtx++] = v[ 0 ]; - vtx_sky[index_vtx++] = v[ 1 ]; - vtx_sky[index_vtx++] = v[ 2 ]; -} - -void -R_DrawSkyBox(void) -{ - int i; - - if (skyrotate) - { /* check for no sky at all */ - for (i = 0; i < 6; i++) - { - if ((skymins[0][i] < skymaxs[0][i]) && - (skymins[1][i] < skymaxs[1][i])) - { - break; - } - } - - if (i == 6) - { - return; /* nothing visible */ - } - } - - glPushMatrix(); - glTranslatef(r_origin[0], r_origin[1], r_origin[2]); - glRotatef(r_newrefdef.time * skyrotate, skyaxis[0], skyaxis[1], skyaxis[2]); - - for (i = 0; i < 6; i++) - { - if (skyrotate) - { - skymins[0][i] = -1; - skymins[1][i] = -1; - skymaxs[0][i] = 1; - skymaxs[1][i] = 1; - } - - if ((skymins[0][i] >= skymaxs[0][i]) || - (skymins[1][i] >= skymaxs[1][i])) - { - continue; - } - - R_Bind(sky_images[skytexorder[i]]->texnum); - - glEnableClientState( GL_VERTEX_ARRAY ); - glEnableClientState( GL_TEXTURE_COORD_ARRAY ); - - - index_vtx = 0; - index_tex = 0; - - R_MakeSkyVec( skymins [ 0 ] [ i ], skymins [ 1 ] [ i ], i ); - R_MakeSkyVec( skymins [ 0 ] [ i ], skymaxs [ 1 ] [ i ], i ); - R_MakeSkyVec( skymaxs [ 0 ] [ i ], skymaxs [ 1 ] [ i ], i ); - R_MakeSkyVec( skymaxs [ 0 ] [ i ], skymins [ 1 ] [ i ], i ); - - glVertexPointer( 3, GL_FLOAT, 0, vtx_sky ); - glTexCoordPointer( 2, GL_FLOAT, 0, tex_sky ); - glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); - - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - } - - glPopMatrix(); -} - -void -RI_SetSky(const char *name, float rotate, vec3_t axis) -{ - char skyname[MAX_QPATH]; - int i; - - Q_strlcpy(skyname, name, sizeof(skyname)); - skyrotate = rotate; - VectorCopy(axis, skyaxis); - - for (i = 0; i < 6; i++) - { - image_t *image; - - image = (image_t *)GetSkyImage(skyname, suf[i], - gl_config.palettedtexture, (findimage_t)R_FindImage); - - if (!image) - { - Com_Printf("%s: can't load %s:%s sky\n", - __func__, skyname, suf[i]); - image = r_notexture; - } - - sky_images[i] = image; - } - - sky_min = 1.0 / 512; - sky_max = 511.0 / 512; -} - diff --git a/src/client/refresh/gl1/glad-gles1/include/KHR/khrplatform.h b/src/client/refresh/gl1/glad-gles1/include/KHR/khrplatform.h deleted file mode 100644 index 01646449c..000000000 --- a/src/client/refresh/gl1/glad-gles1/include/KHR/khrplatform.h +++ /dev/null @@ -1,311 +0,0 @@ -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. - * - * The master copy of khrplatform.h is maintained in the Khronos EGL - * Registry repository at https://github.com/KhronosGroup/EGL-Registry - * The last semantic modification to khrplatform.h was at commit ID: - * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 - * - * Adopters may modify this file to suit their platform. Adopters are - * encouraged to submit platform specific modifications to the Khronos - * group so that they can be included in future versions of this file. - * Please submit changes by filing pull requests or issues on - * the EGL Registry repository linked above. - * - * - * See the Implementer's Guidelines for information about where this file - * should be located on your system and for more details of its use: - * http://www.khronos.org/registry/implementers_guide.pdf - * - * This file should be included as - * #include - * by Khronos client API header files that use its types and defines. - * - * The types in khrplatform.h should only be used to define API-specific types. - * - * Types defined in khrplatform.h: - * khronos_int8_t signed 8 bit - * khronos_uint8_t unsigned 8 bit - * khronos_int16_t signed 16 bit - * khronos_uint16_t unsigned 16 bit - * khronos_int32_t signed 32 bit - * khronos_uint32_t unsigned 32 bit - * khronos_int64_t signed 64 bit - * khronos_uint64_t unsigned 64 bit - * khronos_intptr_t signed same number of bits as a pointer - * khronos_uintptr_t unsigned same number of bits as a pointer - * khronos_ssize_t signed size - * khronos_usize_t unsigned size - * khronos_float_t signed 32 bit floating point - * khronos_time_ns_t unsigned 64 bit time in nanoseconds - * khronos_utime_nanoseconds_t unsigned time interval or absolute time in - * nanoseconds - * khronos_stime_nanoseconds_t signed time interval in nanoseconds - * khronos_boolean_enum_t enumerated boolean type. This should - * only be used as a base type when a client API's boolean type is - * an enum. Client APIs which use an integer or other type for - * booleans cannot use this as the base type for their boolean. - * - * Tokens defined in khrplatform.h: - * - * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. - * - * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. - * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. - * - * Calling convention macros defined in this file: - * KHRONOS_APICALL - * KHRONOS_APIENTRY - * KHRONOS_APIATTRIBUTES - * - * These may be used in function prototypes as: - * - * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( - * int arg1, - * int arg2) KHRONOS_APIATTRIBUTES; - */ - -#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) -# define KHRONOS_STATIC 1 -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APICALL - *------------------------------------------------------------------------- - * This precedes the return type of the function in the function prototype. - */ -#if defined(KHRONOS_STATIC) - /* If the preprocessor constant KHRONOS_STATIC is defined, make the - * header compatible with static linking. */ -# define KHRONOS_APICALL -#elif defined(_WIN32) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#elif defined(__ANDROID__) -# define KHRONOS_APICALL __attribute__((visibility("default"))) -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIENTRY - *------------------------------------------------------------------------- - * This follows the return type of the function and precedes the function - * name in the function prototype. - */ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) - /* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIATTRIBUTES - *------------------------------------------------------------------------- - * This follows the closing parenthesis of the function prototype arguments. - */ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- - * basic type definitions - *-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 -/* - * To support platform where unsigned long cannot be used interchangeably with - * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. - * Ideally, we could just use (u)intptr_t everywhere, but this could result in - * ABI breakage if khronos_uintptr_t is changed from unsigned long to - * unsigned long long or similar (this results in different C++ name mangling). - * To avoid changes for existing platforms, we restrict usage of intptr_t to - * platforms where the size of a pointer is larger than the size of long. - */ -#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) -#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ -#define KHRONOS_USE_INTPTR_T -#endif -#endif - -#elif defined(__VMS ) || defined(__sgi) - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* - * Win32 - */ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* - * Sun or Digital - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* - * Hypothetical platform with no float or int64 support - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* - * Generic fallback - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* - * Types that are (so far) the same on all platforms - */ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* - * Types that differ between LLP64 and LP64 architectures - in LLP64, - * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears - * to be the only LLP64 architecture in current use. - */ -#ifdef KHRONOS_USE_INTPTR_T -typedef intptr_t khronos_intptr_t; -typedef uintptr_t khronos_uintptr_t; -#elif defined(_WIN64) -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -#endif - -#if defined(_WIN64) -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* - * Float type - */ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types - * - * These types can be used to represent a time interval in nanoseconds or - * an absolute Unadjusted System Time. Unadjusted System Time is the number - * of nanoseconds since some arbitrary system event (e.g. since the last - * time the system booted). The Unadjusted System Time is an unsigned - * 64 bit value that wraps back to 0 every 584 years. Time intervals - * may be either signed or unsigned. - */ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* - * Dummy value used to pad enum types to 32 bits. - */ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* - * Enumerated boolean type - * - * Values other than zero should be considered to be true. Therefore - * comparisons should not be made against KHRONOS_TRUE. - */ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ diff --git a/src/client/refresh/gl1/glad-gles1/include/glad/glad.h b/src/client/refresh/gl1/glad-gles1/include/glad/glad.h deleted file mode 100644 index 4d6a09250..000000000 --- a/src/client/refresh/gl1/glad-gles1/include/glad/glad.h +++ /dev/null @@ -1,1005 +0,0 @@ -/* - - OpenGL ES loader generated by glad 0.1.36 on Sun Aug 11 03:16:24 2024. - - Language/Generator: C/C++ - Specification: gl - APIs: gles1=1.0 - Profile: core - Extensions: - GL_EXT_discard_framebuffer, - GL_OES_framebuffer_object, - GL_OES_texture_npot - Loader: False - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --profile="core" --api="gles1=1.0" --generator="c" --spec="gl" --no-loader --extensions="GL_EXT_discard_framebuffer,GL_OES_framebuffer_object,GL_OES_texture_npot" - Online: - https://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gles1%3D1.0&extensions=GL_EXT_discard_framebuffer&extensions=GL_OES_framebuffer_object&extensions=GL_OES_texture_npot -*/ - - -#ifndef __glad_h_ -#define __glad_h_ - -#ifdef __gl_h_ -#error OpenGL ES 1 header already included, remove this include, glad already provides it -#endif -#define __gl_h_ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define APIENTRY __stdcall -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY APIENTRY -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -struct gladGLversionStruct { - int major; - int minor; -}; - -typedef void* (* GLADloadproc)(const char *name); - -#ifndef GLAPI -# if defined(GLAD_GLAPI_EXPORT) -# if defined(_WIN32) || defined(__CYGWIN__) -# if defined(GLAD_GLAPI_EXPORT_BUILD) -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllexport)) extern -# else -# define GLAPI __declspec(dllexport) extern -# endif -# else -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllimport)) extern -# else -# define GLAPI __declspec(dllimport) extern -# endif -# endif -# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) -# define GLAPI __attribute__ ((visibility ("default"))) extern -# else -# define GLAPI extern -# endif -# else -# define GLAPI extern -# endif -#endif - -GLAPI struct gladGLversionStruct GLVersion; -GLAPI int gladLoadGLES1Loader(GLADloadproc); - -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef khronos_int8_t GLbyte; -typedef khronos_uint8_t GLubyte; -typedef khronos_int16_t GLshort; -typedef khronos_uint16_t GLushort; -typedef int GLint; -typedef unsigned int GLuint; -typedef khronos_int32_t GLclampx; -typedef int GLsizei; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void *GLeglClientBufferEXT; -typedef void *GLeglImageOES; -typedef char GLchar; -typedef char GLcharARB; -#ifdef __APPLE__ -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif -typedef khronos_uint16_t GLhalf; -typedef khronos_uint16_t GLhalfARB; -typedef khronos_int32_t GLfixed; -typedef khronos_intptr_t GLintptr; -typedef khronos_intptr_t GLintptrARB; -typedef khronos_ssize_t GLsizeiptr; -typedef khronos_ssize_t GLsizeiptrARB; -typedef khronos_int64_t GLint64; -typedef khronos_int64_t GLint64EXT; -typedef khronos_uint64_t GLuint64; -typedef khronos_uint64_t GLuint64EXT; -typedef struct __GLsync *GLsync; -struct _cl_context; -struct _cl_event; -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); -typedef unsigned short GLhalfNV; -typedef GLintptr GLvdpauSurfaceNV; -typedef void (APIENTRY *GLVULKANPROCNV)(void); -#define GL_VERSION_ES_CL_1_0 1 -#define GL_VERSION_ES_CM_1_1 1 -#define GL_VERSION_ES_CL_1_1 1 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_FOG 0x0B60 -#define GL_LIGHTING 0x0B50 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_BLEND 0x0BE2 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_POINT_SMOOTH 0x0B10 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_NORMALIZE 0x0BA1 -#define GL_RESCALE_NORMAL 0x803A -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_LINE_WIDTH 0x0B21 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_SHADE_MODEL 0x0B54 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_VIEWPORT 0x0BA2 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_FOG_HINT 0x0C54 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -#define GL_ADD 0x0104 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_ENV 0x2300 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_SUBTRACT 0x84E7 -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_ALPHA_SCALE 0x0D1C -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC1_ALPHA 0x8589 -#define GL_SRC2_ALPHA 0x858A -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#ifndef GL_VERSION_ES_CM_1_0 -#define GL_VERSION_ES_CM_1_0 1 -GLAPI int GLAD_GL_VERSION_ES_CM_1_0; -typedef void (APIENTRYP PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref); -GLAPI PFNGLALPHAFUNCPROC glad_glAlphaFunc; -#define glAlphaFunc glad_glAlphaFunc -typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; -#define glClearColor glad_glClearColor -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d); -GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf; -#define glClearDepthf glad_glClearDepthf -typedef void (APIENTRYP PFNGLCLIPPLANEFPROC)(GLenum p, const GLfloat *eqn); -GLAPI PFNGLCLIPPLANEFPROC glad_glClipPlanef; -#define glClipPlanef glad_glClipPlanef -typedef void (APIENTRYP PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCOLOR4FPROC glad_glColor4f; -#define glColor4f glad_glColor4f -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); -GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef; -#define glDepthRangef glad_glDepthRangef -typedef void (APIENTRYP PFNGLFOGFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLFOGFPROC glad_glFogf; -#define glFogf glad_glFogf -typedef void (APIENTRYP PFNGLFOGFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLFOGFVPROC glad_glFogfv; -#define glFogfv glad_glFogfv -typedef void (APIENTRYP PFNGLFRUSTUMFPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI PFNGLFRUSTUMFPROC glad_glFrustumf; -#define glFrustumf glad_glFrustumf -typedef void (APIENTRYP PFNGLGETCLIPPLANEFPROC)(GLenum plane, GLfloat *equation); -GLAPI PFNGLGETCLIPPLANEFPROC glad_glGetClipPlanef; -#define glGetClipPlanef glad_glGetClipPlanef -typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); -GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; -#define glGetFloatv glad_glGetFloatv -typedef void (APIENTRYP PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat *params); -GLAPI PFNGLGETLIGHTFVPROC glad_glGetLightfv; -#define glGetLightfv glad_glGetLightfv -typedef void (APIENTRYP PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; -#define glGetMaterialfv glad_glGetMaterialfv -typedef void (APIENTRYP PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; -#define glGetTexEnvfv glad_glGetTexEnvfv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -#define glGetTexParameterfv glad_glGetTexParameterfv -typedef void (APIENTRYP PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLLIGHTMODELFPROC glad_glLightModelf; -#define glLightModelf glad_glLightModelf -typedef void (APIENTRYP PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLLIGHTMODELFVPROC glad_glLightModelfv; -#define glLightModelfv glad_glLightModelfv -typedef void (APIENTRYP PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param); -GLAPI PFNGLLIGHTFPROC glad_glLightf; -#define glLightf glad_glLightf -typedef void (APIENTRYP PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat *params); -GLAPI PFNGLLIGHTFVPROC glad_glLightfv; -#define glLightfv glad_glLightfv -typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); -GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; -#define glLineWidth glad_glLineWidth -typedef void (APIENTRYP PFNGLLOADMATRIXFPROC)(const GLfloat *m); -GLAPI PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; -#define glLoadMatrixf glad_glLoadMatrixf -typedef void (APIENTRYP PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param); -GLAPI PFNGLMATERIALFPROC glad_glMaterialf; -#define glMaterialf glad_glMaterialf -typedef void (APIENTRYP PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat *params); -GLAPI PFNGLMATERIALFVPROC glad_glMaterialfv; -#define glMaterialfv glad_glMaterialfv -typedef void (APIENTRYP PFNGLMULTMATRIXFPROC)(const GLfloat *m); -GLAPI PFNGLMULTMATRIXFPROC glad_glMultMatrixf; -#define glMultMatrixf glad_glMultMatrixf -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; -#define glMultiTexCoord4f glad_glMultiTexCoord4f -typedef void (APIENTRYP PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI PFNGLNORMAL3FPROC glad_glNormal3f; -#define glNormal3f glad_glNormal3f -typedef void (APIENTRYP PFNGLORTHOFPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI PFNGLORTHOFPROC glad_glOrthof; -#define glOrthof glad_glOrthof -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -#define glPointParameterf glad_glPointParameterf -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -#define glPointParameterfv glad_glPointParameterfv -typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); -GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; -#define glPointSize glad_glPointSize -typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); -GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -#define glPolygonOffset glad_glPolygonOffset -typedef void (APIENTRYP PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLROTATEFPROC glad_glRotatef; -#define glRotatef glad_glRotatef -typedef void (APIENTRYP PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLSCALEFPROC glad_glScalef; -#define glScalef glad_glScalef -typedef void (APIENTRYP PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXENVFPROC glad_glTexEnvf; -#define glTexEnvf glad_glTexEnvf -typedef void (APIENTRYP PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXENVFVPROC glad_glTexEnvfv; -#define glTexEnvfv glad_glTexEnvfv -typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -#define glTexParameterf glad_glTexParameterf -typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -#define glTexParameterfv glad_glTexParameterfv -typedef void (APIENTRYP PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTRANSLATEFPROC glad_glTranslatef; -#define glTranslatef glad_glTranslatef -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); -GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -#define glActiveTexture glad_glActiveTexture -typedef void (APIENTRYP PFNGLALPHAFUNCXPROC)(GLenum func, GLfixed ref); -GLAPI PFNGLALPHAFUNCXPROC glad_glAlphaFuncx; -#define glAlphaFuncx glad_glAlphaFuncx -typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); -GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; -#define glBindBuffer glad_glBindBuffer -typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); -GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; -#define glBindTexture glad_glBindTexture -typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); -GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; -#define glBlendFunc glad_glBlendFunc -typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; -#define glBufferData glad_glBufferData -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -#define glBufferSubData glad_glBufferSubData -typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); -GLAPI PFNGLCLEARPROC glad_glClear; -#define glClear glad_glClear -typedef void (APIENTRYP PFNGLCLEARCOLORXPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI PFNGLCLEARCOLORXPROC glad_glClearColorx; -#define glClearColorx glad_glClearColorx -typedef void (APIENTRYP PFNGLCLEARDEPTHXPROC)(GLfixed depth); -GLAPI PFNGLCLEARDEPTHXPROC glad_glClearDepthx; -#define glClearDepthx glad_glClearDepthx -typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); -GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; -#define glClearStencil glad_glClearStencil -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); -GLAPI PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; -#define glClientActiveTexture glad_glClientActiveTexture -typedef void (APIENTRYP PFNGLCLIPPLANEXPROC)(GLenum plane, const GLfixed *equation); -GLAPI PFNGLCLIPPLANEXPROC glad_glClipPlanex; -#define glClipPlanex glad_glClipPlanex -typedef void (APIENTRYP PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -GLAPI PFNGLCOLOR4UBPROC glad_glColor4ub; -#define glColor4ub glad_glColor4ub -typedef void (APIENTRYP PFNGLCOLOR4XPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI PFNGLCOLOR4XPROC glad_glColor4x; -#define glColor4x glad_glColor4x -typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI PFNGLCOLORMASKPROC glad_glColorMask; -#define glColorMask glad_glColorMask -typedef void (APIENTRYP PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLCOLORPOINTERPROC glad_glColorPointer; -#define glColorPointer glad_glColorPointer -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -#define glCompressedTexImage2D glad_glCompressedTexImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -#define glCopyTexImage2D glad_glCopyTexImage2D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -#define glCopyTexSubImage2D glad_glCopyTexSubImage2D -typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); -GLAPI PFNGLCULLFACEPROC glad_glCullFace; -#define glCullFace glad_glCullFace -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); -GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -#define glDeleteBuffers glad_glDeleteBuffers -typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); -GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -#define glDeleteTextures glad_glDeleteTextures -typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); -GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; -#define glDepthFunc glad_glDepthFunc -typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); -GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; -#define glDepthMask glad_glDepthMask -typedef void (APIENTRYP PFNGLDEPTHRANGEXPROC)(GLfixed n, GLfixed f); -GLAPI PFNGLDEPTHRANGEXPROC glad_glDepthRangex; -#define glDepthRangex glad_glDepthRangex -typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); -GLAPI PFNGLDISABLEPROC glad_glDisable; -#define glDisable glad_glDisable -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEPROC)(GLenum array); -GLAPI PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; -#define glDisableClientState glad_glDisableClientState -typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; -#define glDrawArrays glad_glDrawArrays -typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); -GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; -#define glDrawElements glad_glDrawElements -typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); -GLAPI PFNGLENABLEPROC glad_glEnable; -#define glEnable glad_glEnable -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEPROC)(GLenum array); -GLAPI PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; -#define glEnableClientState glad_glEnableClientState -typedef void (APIENTRYP PFNGLFINISHPROC)(void); -GLAPI PFNGLFINISHPROC glad_glFinish; -#define glFinish glad_glFinish -typedef void (APIENTRYP PFNGLFLUSHPROC)(void); -GLAPI PFNGLFLUSHPROC glad_glFlush; -#define glFlush glad_glFlush -typedef void (APIENTRYP PFNGLFOGXPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLFOGXPROC glad_glFogx; -#define glFogx glad_glFogx -typedef void (APIENTRYP PFNGLFOGXVPROC)(GLenum pname, const GLfixed *param); -GLAPI PFNGLFOGXVPROC glad_glFogxv; -#define glFogxv glad_glFogxv -typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); -GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; -#define glFrontFace glad_glFrontFace -typedef void (APIENTRYP PFNGLFRUSTUMXPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI PFNGLFRUSTUMXPROC glad_glFrustumx; -#define glFrustumx glad_glFrustumx -typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); -GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -#define glGetBooleanv glad_glGetBooleanv -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -#define glGetBufferParameteriv glad_glGetBufferParameteriv -typedef void (APIENTRYP PFNGLGETCLIPPLANEXPROC)(GLenum plane, GLfixed *equation); -GLAPI PFNGLGETCLIPPLANEXPROC glad_glGetClipPlanex; -#define glGetClipPlanex glad_glGetClipPlanex -typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); -GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; -#define glGenBuffers glad_glGenBuffers -typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); -GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; -#define glGenTextures glad_glGenTextures -typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); -GLAPI PFNGLGETERRORPROC glad_glGetError; -#define glGetError glad_glGetError -typedef void (APIENTRYP PFNGLGETFIXEDVPROC)(GLenum pname, GLfixed *params); -GLAPI PFNGLGETFIXEDVPROC glad_glGetFixedv; -#define glGetFixedv glad_glGetFixedv -typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); -GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; -#define glGetIntegerv glad_glGetIntegerv -typedef void (APIENTRYP PFNGLGETLIGHTXVPROC)(GLenum light, GLenum pname, GLfixed *params); -GLAPI PFNGLGETLIGHTXVPROC glad_glGetLightxv; -#define glGetLightxv glad_glGetLightxv -typedef void (APIENTRYP PFNGLGETMATERIALXVPROC)(GLenum face, GLenum pname, GLfixed *params); -GLAPI PFNGLGETMATERIALXVPROC glad_glGetMaterialxv; -#define glGetMaterialxv glad_glGetMaterialxv -typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); -GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; -#define glGetPointerv glad_glGetPointerv -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); -GLAPI PFNGLGETSTRINGPROC glad_glGetString; -#define glGetString glad_glGetString -typedef void (APIENTRYP PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; -#define glGetTexEnviv glad_glGetTexEnviv -typedef void (APIENTRYP PFNGLGETTEXENVXVPROC)(GLenum target, GLenum pname, GLfixed *params); -GLAPI PFNGLGETTEXENVXVPROC glad_glGetTexEnvxv; -#define glGetTexEnvxv glad_glGetTexEnvxv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -#define glGetTexParameteriv glad_glGetTexParameteriv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVPROC)(GLenum target, GLenum pname, GLfixed *params); -GLAPI PFNGLGETTEXPARAMETERXVPROC glad_glGetTexParameterxv; -#define glGetTexParameterxv glad_glGetTexParameterxv -typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); -GLAPI PFNGLHINTPROC glad_glHint; -#define glHint glad_glHint -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); -GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; -#define glIsBuffer glad_glIsBuffer -typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); -GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; -#define glIsEnabled glad_glIsEnabled -typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); -GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; -#define glIsTexture glad_glIsTexture -typedef void (APIENTRYP PFNGLLIGHTMODELXPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLLIGHTMODELXPROC glad_glLightModelx; -#define glLightModelx glad_glLightModelx -typedef void (APIENTRYP PFNGLLIGHTMODELXVPROC)(GLenum pname, const GLfixed *param); -GLAPI PFNGLLIGHTMODELXVPROC glad_glLightModelxv; -#define glLightModelxv glad_glLightModelxv -typedef void (APIENTRYP PFNGLLIGHTXPROC)(GLenum light, GLenum pname, GLfixed param); -GLAPI PFNGLLIGHTXPROC glad_glLightx; -#define glLightx glad_glLightx -typedef void (APIENTRYP PFNGLLIGHTXVPROC)(GLenum light, GLenum pname, const GLfixed *params); -GLAPI PFNGLLIGHTXVPROC glad_glLightxv; -#define glLightxv glad_glLightxv -typedef void (APIENTRYP PFNGLLINEWIDTHXPROC)(GLfixed width); -GLAPI PFNGLLINEWIDTHXPROC glad_glLineWidthx; -#define glLineWidthx glad_glLineWidthx -typedef void (APIENTRYP PFNGLLOADIDENTITYPROC)(void); -GLAPI PFNGLLOADIDENTITYPROC glad_glLoadIdentity; -#define glLoadIdentity glad_glLoadIdentity -typedef void (APIENTRYP PFNGLLOADMATRIXXPROC)(const GLfixed *m); -GLAPI PFNGLLOADMATRIXXPROC glad_glLoadMatrixx; -#define glLoadMatrixx glad_glLoadMatrixx -typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); -GLAPI PFNGLLOGICOPPROC glad_glLogicOp; -#define glLogicOp glad_glLogicOp -typedef void (APIENTRYP PFNGLMATERIALXPROC)(GLenum face, GLenum pname, GLfixed param); -GLAPI PFNGLMATERIALXPROC glad_glMaterialx; -#define glMaterialx glad_glMaterialx -typedef void (APIENTRYP PFNGLMATERIALXVPROC)(GLenum face, GLenum pname, const GLfixed *param); -GLAPI PFNGLMATERIALXVPROC glad_glMaterialxv; -#define glMaterialxv glad_glMaterialxv -typedef void (APIENTRYP PFNGLMATRIXMODEPROC)(GLenum mode); -GLAPI PFNGLMATRIXMODEPROC glad_glMatrixMode; -#define glMatrixMode glad_glMatrixMode -typedef void (APIENTRYP PFNGLMULTMATRIXXPROC)(const GLfixed *m); -GLAPI PFNGLMULTMATRIXXPROC glad_glMultMatrixx; -#define glMultMatrixx glad_glMultMatrixx -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI PFNGLMULTITEXCOORD4XPROC glad_glMultiTexCoord4x; -#define glMultiTexCoord4x glad_glMultiTexCoord4x -typedef void (APIENTRYP PFNGLNORMAL3XPROC)(GLfixed nx, GLfixed ny, GLfixed nz); -GLAPI PFNGLNORMAL3XPROC glad_glNormal3x; -#define glNormal3x glad_glNormal3x -typedef void (APIENTRYP PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLNORMALPOINTERPROC glad_glNormalPointer; -#define glNormalPointer glad_glNormalPointer -typedef void (APIENTRYP PFNGLORTHOXPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI PFNGLORTHOXPROC glad_glOrthox; -#define glOrthox glad_glOrthox -typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; -#define glPixelStorei glad_glPixelStorei -typedef void (APIENTRYP PFNGLPOINTPARAMETERXPROC)(GLenum pname, GLfixed param); -GLAPI PFNGLPOINTPARAMETERXPROC glad_glPointParameterx; -#define glPointParameterx glad_glPointParameterx -typedef void (APIENTRYP PFNGLPOINTPARAMETERXVPROC)(GLenum pname, const GLfixed *params); -GLAPI PFNGLPOINTPARAMETERXVPROC glad_glPointParameterxv; -#define glPointParameterxv glad_glPointParameterxv -typedef void (APIENTRYP PFNGLPOINTSIZEXPROC)(GLfixed size); -GLAPI PFNGLPOINTSIZEXPROC glad_glPointSizex; -#define glPointSizex glad_glPointSizex -typedef void (APIENTRYP PFNGLPOLYGONOFFSETXPROC)(GLfixed factor, GLfixed units); -GLAPI PFNGLPOLYGONOFFSETXPROC glad_glPolygonOffsetx; -#define glPolygonOffsetx glad_glPolygonOffsetx -typedef void (APIENTRYP PFNGLPOPMATRIXPROC)(void); -GLAPI PFNGLPOPMATRIXPROC glad_glPopMatrix; -#define glPopMatrix glad_glPopMatrix -typedef void (APIENTRYP PFNGLPUSHMATRIXPROC)(void); -GLAPI PFNGLPUSHMATRIXPROC glad_glPushMatrix; -#define glPushMatrix glad_glPushMatrix -typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; -#define glReadPixels glad_glReadPixels -typedef void (APIENTRYP PFNGLROTATEXPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLROTATEXPROC glad_glRotatex; -#define glRotatex glad_glRotatex -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -#define glSampleCoverage glad_glSampleCoverage -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEXPROC)(GLclampx value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEXPROC glad_glSampleCoveragex; -#define glSampleCoveragex glad_glSampleCoveragex -typedef void (APIENTRYP PFNGLSCALEXPROC)(GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLSCALEXPROC glad_glScalex; -#define glScalex glad_glScalex -typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORPROC glad_glScissor; -#define glScissor glad_glScissor -typedef void (APIENTRYP PFNGLSHADEMODELPROC)(GLenum mode); -GLAPI PFNGLSHADEMODELPROC glad_glShadeModel; -#define glShadeModel glad_glShadeModel -typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; -#define glStencilFunc glad_glStencilFunc -typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); -GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; -#define glStencilMask glad_glStencilMask -typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); -GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; -#define glStencilOp glad_glStencilOp -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; -#define glTexCoordPointer glad_glTexCoordPointer -typedef void (APIENTRYP PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXENVIPROC glad_glTexEnvi; -#define glTexEnvi glad_glTexEnvi -typedef void (APIENTRYP PFNGLTEXENVXPROC)(GLenum target, GLenum pname, GLfixed param); -GLAPI PFNGLTEXENVXPROC glad_glTexEnvx; -#define glTexEnvx glad_glTexEnvx -typedef void (APIENTRYP PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXENVIVPROC glad_glTexEnviv; -#define glTexEnviv glad_glTexEnviv -typedef void (APIENTRYP PFNGLTEXENVXVPROC)(GLenum target, GLenum pname, const GLfixed *params); -GLAPI PFNGLTEXENVXVPROC glad_glTexEnvxv; -#define glTexEnvxv glad_glTexEnvxv -typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -#define glTexImage2D glad_glTexImage2D -typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -#define glTexParameteri glad_glTexParameteri -typedef void (APIENTRYP PFNGLTEXPARAMETERXPROC)(GLenum target, GLenum pname, GLfixed param); -GLAPI PFNGLTEXPARAMETERXPROC glad_glTexParameterx; -#define glTexParameterx glad_glTexParameterx -typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -#define glTexParameteriv glad_glTexParameteriv -typedef void (APIENTRYP PFNGLTEXPARAMETERXVPROC)(GLenum target, GLenum pname, const GLfixed *params); -GLAPI PFNGLTEXPARAMETERXVPROC glad_glTexParameterxv; -#define glTexParameterxv glad_glTexParameterxv -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -#define glTexSubImage2D glad_glTexSubImage2D -typedef void (APIENTRYP PFNGLTRANSLATEXPROC)(GLfixed x, GLfixed y, GLfixed z); -GLAPI PFNGLTRANSLATEXPROC glad_glTranslatex; -#define glTranslatex glad_glTranslatex -typedef void (APIENTRYP PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXPOINTERPROC glad_glVertexPointer; -#define glVertexPointer glad_glVertexPointer -typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLVIEWPORTPROC glad_glViewport; -#define glViewport glad_glViewport -#endif -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -#define GL_NONE_OES 0 -#define GL_FRAMEBUFFER_OES 0x8D40 -#define GL_RENDERBUFFER_OES 0x8D41 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -#define GL_RENDERBUFFER_WIDTH_OES 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_OES 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES 0x8D44 -#define GL_RENDERBUFFER_RED_SIZE_OES 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_OES 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_OES 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_OES 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_OES 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_OES 0x8D55 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES 0x8CD3 -#define GL_COLOR_ATTACHMENT0_OES 0x8CE0 -#define GL_DEPTH_ATTACHMENT_OES 0x8D00 -#define GL_STENCIL_ATTACHMENT_OES 0x8D20 -#define GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA -#define GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD -#define GL_FRAMEBUFFER_BINDING_OES 0x8CA6 -#define GL_RENDERBUFFER_BINDING_OES 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8 -#define GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506 -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -GLAPI int GLAD_GL_EXT_discard_framebuffer; -typedef void (APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI PFNGLDISCARDFRAMEBUFFEREXTPROC glad_glDiscardFramebufferEXT; -#define glDiscardFramebufferEXT glad_glDiscardFramebufferEXT -#endif -#ifndef GL_OES_framebuffer_object -#define GL_OES_framebuffer_object 1 -GLAPI int GLAD_GL_OES_framebuffer_object; -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEROESPROC)(GLuint renderbuffer); -GLAPI PFNGLISRENDERBUFFEROESPROC glad_glIsRenderbufferOES; -#define glIsRenderbufferOES glad_glIsRenderbufferOES -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEROESPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLBINDRENDERBUFFEROESPROC glad_glBindRenderbufferOES; -#define glBindRenderbufferOES glad_glBindRenderbufferOES -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSOESPROC)(GLsizei n, const GLuint *renderbuffers); -GLAPI PFNGLDELETERENDERBUFFERSOESPROC glad_glDeleteRenderbuffersOES; -#define glDeleteRenderbuffersOES glad_glDeleteRenderbuffersOES -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSOESPROC)(GLsizei n, GLuint *renderbuffers); -GLAPI PFNGLGENRENDERBUFFERSOESPROC glad_glGenRenderbuffersOES; -#define glGenRenderbuffersOES glad_glGenRenderbuffersOES -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEOESPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEOESPROC glad_glRenderbufferStorageOES; -#define glRenderbufferStorageOES glad_glRenderbufferStorageOES -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVOESPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETRENDERBUFFERPARAMETERIVOESPROC glad_glGetRenderbufferParameterivOES; -#define glGetRenderbufferParameterivOES glad_glGetRenderbufferParameterivOES -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEROESPROC)(GLuint framebuffer); -GLAPI PFNGLISFRAMEBUFFEROESPROC glad_glIsFramebufferOES; -#define glIsFramebufferOES glad_glIsFramebufferOES -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEROESPROC)(GLenum target, GLuint framebuffer); -GLAPI PFNGLBINDFRAMEBUFFEROESPROC glad_glBindFramebufferOES; -#define glBindFramebufferOES glad_glBindFramebufferOES -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSOESPROC)(GLsizei n, const GLuint *framebuffers); -GLAPI PFNGLDELETEFRAMEBUFFERSOESPROC glad_glDeleteFramebuffersOES; -#define glDeleteFramebuffersOES glad_glDeleteFramebuffersOES -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSOESPROC)(GLsizei n, GLuint *framebuffers); -GLAPI PFNGLGENFRAMEBUFFERSOESPROC glad_glGenFramebuffersOES; -#define glGenFramebuffersOES glad_glGenFramebuffersOES -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSOESPROC)(GLenum target); -GLAPI PFNGLCHECKFRAMEBUFFERSTATUSOESPROC glad_glCheckFramebufferStatusOES; -#define glCheckFramebufferStatusOES glad_glCheckFramebufferStatusOES -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEROESPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLFRAMEBUFFERRENDERBUFFEROESPROC glad_glFramebufferRenderbufferOES; -#define glFramebufferRenderbufferOES glad_glFramebufferRenderbufferOES -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DOESPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DOESPROC glad_glFramebufferTexture2DOES; -#define glFramebufferTexture2DOES glad_glFramebufferTexture2DOES -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC glad_glGetFramebufferAttachmentParameterivOES; -#define glGetFramebufferAttachmentParameterivOES glad_glGetFramebufferAttachmentParameterivOES -typedef void (APIENTRYP PFNGLGENERATEMIPMAPOESPROC)(GLenum target); -GLAPI PFNGLGENERATEMIPMAPOESPROC glad_glGenerateMipmapOES; -#define glGenerateMipmapOES glad_glGenerateMipmapOES -#endif -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -GLAPI int GLAD_GL_OES_texture_npot; -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/client/refresh/gl1/glad-gles1/src/glad.c b/src/client/refresh/gl1/glad-gles1/src/glad.c deleted file mode 100644 index e465ef3ba..000000000 --- a/src/client/refresh/gl1/glad-gles1/src/glad.c +++ /dev/null @@ -1,526 +0,0 @@ -/* - - OpenGL ES loader generated by glad 0.1.36 on Sun Aug 11 03:16:24 2024. - - Language/Generator: C/C++ - Specification: gl - APIs: gles1=1.0 - Profile: core - Extensions: - GL_EXT_discard_framebuffer, - GL_OES_framebuffer_object, - GL_OES_texture_npot - Loader: False - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --profile="core" --api="gles1=1.0" --generator="c" --spec="gl" --no-loader --extensions="GL_EXT_discard_framebuffer,GL_OES_framebuffer_object,GL_OES_texture_npot" - Online: - https://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gles1%3D1.0&extensions=GL_EXT_discard_framebuffer&extensions=GL_OES_framebuffer_object&extensions=GL_OES_texture_npot -*/ - -#include -#include -#include -#include - -struct gladGLversionStruct GLVersion = { 0, 0 }; - -#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) -#define _GLAD_IS_SOME_NEW_VERSION 1 -#endif - -static int max_loaded_major; -static int max_loaded_minor; - -static const char *exts = NULL; -static int num_exts_i = 0; -static char **exts_i = NULL; - -static int get_exts(void) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif - exts = (const char *)glGetString(GL_EXTENSIONS); -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - int index; - - num_exts_i = 0; - glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); - if (num_exts_i > 0) { - exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); - } - - if (exts_i == NULL) { - return 0; - } - - for(index = 0; index < num_exts_i; index++) { - const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); - size_t len = strlen(gl_str_tmp); - - char *local_str = (char*)malloc((len+1) * sizeof(char)); - if(local_str != NULL) { - memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); - } - exts_i[index] = local_str; - } - } -#endif - return 1; -} - -static void free_exts(void) { - if (exts_i != NULL) { - int index; - for(index = 0; index < num_exts_i; index++) { - free((char *)exts_i[index]); - } - free((void *)exts_i); - exts_i = NULL; - } -} - -static int has_ext(const char *ext) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif - const char *extensions; - const char *loc; - const char *terminator; - extensions = exts; - if(extensions == NULL || ext == NULL) { - return 0; - } - - while(1) { - loc = strstr(extensions, ext); - if(loc == NULL) { - return 0; - } - - terminator = loc + strlen(ext); - if((loc == extensions || *(loc - 1) == ' ') && - (*terminator == ' ' || *terminator == '\0')) { - return 1; - } - extensions = terminator; - } -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - int index; - if(exts_i == NULL) return 0; - for(index = 0; index < num_exts_i; index++) { - const char *e = exts_i[index]; - - if(exts_i[index] != NULL && strcmp(e, ext) == 0) { - return 1; - } - } - } -#endif - - return 0; -} -int GLAD_GL_VERSION_ES_CM_1_0 = 0; -PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; -PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL; -PFNGLALPHAFUNCXPROC glad_glAlphaFuncx = NULL; -PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; -PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; -PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; -PFNGLBUFFERDATAPROC glad_glBufferData = NULL; -PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; -PFNGLCLEARPROC glad_glClear = NULL; -PFNGLCLEARCOLORPROC glad_glClearColor = NULL; -PFNGLCLEARCOLORXPROC glad_glClearColorx = NULL; -PFNGLCLEARDEPTHFPROC glad_glClearDepthf = NULL; -PFNGLCLEARDEPTHXPROC glad_glClearDepthx = NULL; -PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; -PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL; -PFNGLCLIPPLANEFPROC glad_glClipPlanef = NULL; -PFNGLCLIPPLANEXPROC glad_glClipPlanex = NULL; -PFNGLCOLOR4FPROC glad_glColor4f = NULL; -PFNGLCOLOR4UBPROC glad_glColor4ub = NULL; -PFNGLCOLOR4XPROC glad_glColor4x = NULL; -PFNGLCOLORMASKPROC glad_glColorMask = NULL; -PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; -PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; -PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; -PFNGLCULLFACEPROC glad_glCullFace = NULL; -PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; -PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; -PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; -PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; -PFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL; -PFNGLDEPTHRANGEXPROC glad_glDepthRangex = NULL; -PFNGLDISABLEPROC glad_glDisable = NULL; -PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL; -PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; -PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; -PFNGLENABLEPROC glad_glEnable = NULL; -PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL; -PFNGLFINISHPROC glad_glFinish = NULL; -PFNGLFLUSHPROC glad_glFlush = NULL; -PFNGLFOGFPROC glad_glFogf = NULL; -PFNGLFOGFVPROC glad_glFogfv = NULL; -PFNGLFOGXPROC glad_glFogx = NULL; -PFNGLFOGXVPROC glad_glFogxv = NULL; -PFNGLFRONTFACEPROC glad_glFrontFace = NULL; -PFNGLFRUSTUMFPROC glad_glFrustumf = NULL; -PFNGLFRUSTUMXPROC glad_glFrustumx = NULL; -PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; -PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; -PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; -PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; -PFNGLGETCLIPPLANEFPROC glad_glGetClipPlanef = NULL; -PFNGLGETCLIPPLANEXPROC glad_glGetClipPlanex = NULL; -PFNGLGETERRORPROC glad_glGetError = NULL; -PFNGLGETFIXEDVPROC glad_glGetFixedv = NULL; -PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; -PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; -PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL; -PFNGLGETLIGHTXVPROC glad_glGetLightxv = NULL; -PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL; -PFNGLGETMATERIALXVPROC glad_glGetMaterialxv = NULL; -PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; -PFNGLGETSTRINGPROC glad_glGetString = NULL; -PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL; -PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL; -PFNGLGETTEXENVXVPROC glad_glGetTexEnvxv = NULL; -PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; -PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; -PFNGLGETTEXPARAMETERXVPROC glad_glGetTexParameterxv = NULL; -PFNGLHINTPROC glad_glHint = NULL; -PFNGLISBUFFERPROC glad_glIsBuffer = NULL; -PFNGLISENABLEDPROC glad_glIsEnabled = NULL; -PFNGLISTEXTUREPROC glad_glIsTexture = NULL; -PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL; -PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL; -PFNGLLIGHTMODELXPROC glad_glLightModelx = NULL; -PFNGLLIGHTMODELXVPROC glad_glLightModelxv = NULL; -PFNGLLIGHTFPROC glad_glLightf = NULL; -PFNGLLIGHTFVPROC glad_glLightfv = NULL; -PFNGLLIGHTXPROC glad_glLightx = NULL; -PFNGLLIGHTXVPROC glad_glLightxv = NULL; -PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; -PFNGLLINEWIDTHXPROC glad_glLineWidthx = NULL; -PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL; -PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL; -PFNGLLOADMATRIXXPROC glad_glLoadMatrixx = NULL; -PFNGLLOGICOPPROC glad_glLogicOp = NULL; -PFNGLMATERIALFPROC glad_glMaterialf = NULL; -PFNGLMATERIALFVPROC glad_glMaterialfv = NULL; -PFNGLMATERIALXPROC glad_glMaterialx = NULL; -PFNGLMATERIALXVPROC glad_glMaterialxv = NULL; -PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL; -PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL; -PFNGLMULTMATRIXXPROC glad_glMultMatrixx = NULL; -PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL; -PFNGLMULTITEXCOORD4XPROC glad_glMultiTexCoord4x = NULL; -PFNGLNORMAL3FPROC glad_glNormal3f = NULL; -PFNGLNORMAL3XPROC glad_glNormal3x = NULL; -PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL; -PFNGLORTHOFPROC glad_glOrthof = NULL; -PFNGLORTHOXPROC glad_glOrthox = NULL; -PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; -PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; -PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; -PFNGLPOINTPARAMETERXPROC glad_glPointParameterx = NULL; -PFNGLPOINTPARAMETERXVPROC glad_glPointParameterxv = NULL; -PFNGLPOINTSIZEPROC glad_glPointSize = NULL; -PFNGLPOINTSIZEXPROC glad_glPointSizex = NULL; -PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; -PFNGLPOLYGONOFFSETXPROC glad_glPolygonOffsetx = NULL; -PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL; -PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL; -PFNGLREADPIXELSPROC glad_glReadPixels = NULL; -PFNGLROTATEFPROC glad_glRotatef = NULL; -PFNGLROTATEXPROC glad_glRotatex = NULL; -PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; -PFNGLSAMPLECOVERAGEXPROC glad_glSampleCoveragex = NULL; -PFNGLSCALEFPROC glad_glScalef = NULL; -PFNGLSCALEXPROC glad_glScalex = NULL; -PFNGLSCISSORPROC glad_glScissor = NULL; -PFNGLSHADEMODELPROC glad_glShadeModel = NULL; -PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; -PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; -PFNGLSTENCILOPPROC glad_glStencilOp = NULL; -PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL; -PFNGLTEXENVFPROC glad_glTexEnvf = NULL; -PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL; -PFNGLTEXENVIPROC glad_glTexEnvi = NULL; -PFNGLTEXENVIVPROC glad_glTexEnviv = NULL; -PFNGLTEXENVXPROC glad_glTexEnvx = NULL; -PFNGLTEXENVXVPROC glad_glTexEnvxv = NULL; -PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; -PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; -PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; -PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; -PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; -PFNGLTEXPARAMETERXPROC glad_glTexParameterx = NULL; -PFNGLTEXPARAMETERXVPROC glad_glTexParameterxv = NULL; -PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; -PFNGLTRANSLATEFPROC glad_glTranslatef = NULL; -PFNGLTRANSLATEXPROC glad_glTranslatex = NULL; -PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL; -PFNGLVIEWPORTPROC glad_glViewport = NULL; -int GLAD_GL_EXT_discard_framebuffer = 0; -int GLAD_GL_OES_framebuffer_object = 0; -int GLAD_GL_OES_texture_npot = 0; -PFNGLDISCARDFRAMEBUFFEREXTPROC glad_glDiscardFramebufferEXT = NULL; -PFNGLISRENDERBUFFEROESPROC glad_glIsRenderbufferOES = NULL; -PFNGLBINDRENDERBUFFEROESPROC glad_glBindRenderbufferOES = NULL; -PFNGLDELETERENDERBUFFERSOESPROC glad_glDeleteRenderbuffersOES = NULL; -PFNGLGENRENDERBUFFERSOESPROC glad_glGenRenderbuffersOES = NULL; -PFNGLRENDERBUFFERSTORAGEOESPROC glad_glRenderbufferStorageOES = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVOESPROC glad_glGetRenderbufferParameterivOES = NULL; -PFNGLISFRAMEBUFFEROESPROC glad_glIsFramebufferOES = NULL; -PFNGLBINDFRAMEBUFFEROESPROC glad_glBindFramebufferOES = NULL; -PFNGLDELETEFRAMEBUFFERSOESPROC glad_glDeleteFramebuffersOES = NULL; -PFNGLGENFRAMEBUFFERSOESPROC glad_glGenFramebuffersOES = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSOESPROC glad_glCheckFramebufferStatusOES = NULL; -PFNGLFRAMEBUFFERRENDERBUFFEROESPROC glad_glFramebufferRenderbufferOES = NULL; -PFNGLFRAMEBUFFERTEXTURE2DOESPROC glad_glFramebufferTexture2DOES = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC glad_glGetFramebufferAttachmentParameterivOES = NULL; -PFNGLGENERATEMIPMAPOESPROC glad_glGenerateMipmapOES = NULL; -static void load_GL_VERSION_ES_CM_1_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_ES_CM_1_0) return; - glad_glAlphaFunc = (PFNGLALPHAFUNCPROC)load("glAlphaFunc"); - glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); - glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); - glad_glClipPlanef = (PFNGLCLIPPLANEFPROC)load("glClipPlanef"); - glad_glColor4f = (PFNGLCOLOR4FPROC)load("glColor4f"); - glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); - glad_glFogf = (PFNGLFOGFPROC)load("glFogf"); - glad_glFogfv = (PFNGLFOGFVPROC)load("glFogfv"); - glad_glFrustumf = (PFNGLFRUSTUMFPROC)load("glFrustumf"); - glad_glGetClipPlanef = (PFNGLGETCLIPPLANEFPROC)load("glGetClipPlanef"); - glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); - glad_glGetLightfv = (PFNGLGETLIGHTFVPROC)load("glGetLightfv"); - glad_glGetMaterialfv = (PFNGLGETMATERIALFVPROC)load("glGetMaterialfv"); - glad_glGetTexEnvfv = (PFNGLGETTEXENVFVPROC)load("glGetTexEnvfv"); - glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); - glad_glLightModelf = (PFNGLLIGHTMODELFPROC)load("glLightModelf"); - glad_glLightModelfv = (PFNGLLIGHTMODELFVPROC)load("glLightModelfv"); - glad_glLightf = (PFNGLLIGHTFPROC)load("glLightf"); - glad_glLightfv = (PFNGLLIGHTFVPROC)load("glLightfv"); - glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); - glad_glLoadMatrixf = (PFNGLLOADMATRIXFPROC)load("glLoadMatrixf"); - glad_glMaterialf = (PFNGLMATERIALFPROC)load("glMaterialf"); - glad_glMaterialfv = (PFNGLMATERIALFVPROC)load("glMaterialfv"); - glad_glMultMatrixf = (PFNGLMULTMATRIXFPROC)load("glMultMatrixf"); - glad_glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)load("glMultiTexCoord4f"); - glad_glNormal3f = (PFNGLNORMAL3FPROC)load("glNormal3f"); - glad_glOrthof = (PFNGLORTHOFPROC)load("glOrthof"); - glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); - glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); - glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); - glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); - glad_glRotatef = (PFNGLROTATEFPROC)load("glRotatef"); - glad_glScalef = (PFNGLSCALEFPROC)load("glScalef"); - glad_glTexEnvf = (PFNGLTEXENVFPROC)load("glTexEnvf"); - glad_glTexEnvfv = (PFNGLTEXENVFVPROC)load("glTexEnvfv"); - glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); - glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); - glad_glTranslatef = (PFNGLTRANSLATEFPROC)load("glTranslatef"); - glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); - glad_glAlphaFuncx = (PFNGLALPHAFUNCXPROC)load("glAlphaFuncx"); - glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); - glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); - glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); - glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); - glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); - glad_glClear = (PFNGLCLEARPROC)load("glClear"); - glad_glClearColorx = (PFNGLCLEARCOLORXPROC)load("glClearColorx"); - glad_glClearDepthx = (PFNGLCLEARDEPTHXPROC)load("glClearDepthx"); - glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); - glad_glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)load("glClientActiveTexture"); - glad_glClipPlanex = (PFNGLCLIPPLANEXPROC)load("glClipPlanex"); - glad_glColor4ub = (PFNGLCOLOR4UBPROC)load("glColor4ub"); - glad_glColor4x = (PFNGLCOLOR4XPROC)load("glColor4x"); - glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); - glad_glColorPointer = (PFNGLCOLORPOINTERPROC)load("glColorPointer"); - glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); - glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); - glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); - glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); - glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); - glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); - glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); - glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); - glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); - glad_glDepthRangex = (PFNGLDEPTHRANGEXPROC)load("glDepthRangex"); - glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); - glad_glDisableClientState = (PFNGLDISABLECLIENTSTATEPROC)load("glDisableClientState"); - glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); - glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); - glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); - glad_glEnableClientState = (PFNGLENABLECLIENTSTATEPROC)load("glEnableClientState"); - glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); - glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); - glad_glFogx = (PFNGLFOGXPROC)load("glFogx"); - glad_glFogxv = (PFNGLFOGXVPROC)load("glFogxv"); - glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); - glad_glFrustumx = (PFNGLFRUSTUMXPROC)load("glFrustumx"); - glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); - glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); - glad_glGetClipPlanex = (PFNGLGETCLIPPLANEXPROC)load("glGetClipPlanex"); - glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); - glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); - glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); - glad_glGetFixedv = (PFNGLGETFIXEDVPROC)load("glGetFixedv"); - glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); - glad_glGetLightxv = (PFNGLGETLIGHTXVPROC)load("glGetLightxv"); - glad_glGetMaterialxv = (PFNGLGETMATERIALXVPROC)load("glGetMaterialxv"); - glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); - glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - glad_glGetTexEnviv = (PFNGLGETTEXENVIVPROC)load("glGetTexEnviv"); - glad_glGetTexEnvxv = (PFNGLGETTEXENVXVPROC)load("glGetTexEnvxv"); - glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); - glad_glGetTexParameterxv = (PFNGLGETTEXPARAMETERXVPROC)load("glGetTexParameterxv"); - glad_glHint = (PFNGLHINTPROC)load("glHint"); - glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); - glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); - glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); - glad_glLightModelx = (PFNGLLIGHTMODELXPROC)load("glLightModelx"); - glad_glLightModelxv = (PFNGLLIGHTMODELXVPROC)load("glLightModelxv"); - glad_glLightx = (PFNGLLIGHTXPROC)load("glLightx"); - glad_glLightxv = (PFNGLLIGHTXVPROC)load("glLightxv"); - glad_glLineWidthx = (PFNGLLINEWIDTHXPROC)load("glLineWidthx"); - glad_glLoadIdentity = (PFNGLLOADIDENTITYPROC)load("glLoadIdentity"); - glad_glLoadMatrixx = (PFNGLLOADMATRIXXPROC)load("glLoadMatrixx"); - glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); - glad_glMaterialx = (PFNGLMATERIALXPROC)load("glMaterialx"); - glad_glMaterialxv = (PFNGLMATERIALXVPROC)load("glMaterialxv"); - glad_glMatrixMode = (PFNGLMATRIXMODEPROC)load("glMatrixMode"); - glad_glMultMatrixx = (PFNGLMULTMATRIXXPROC)load("glMultMatrixx"); - glad_glMultiTexCoord4x = (PFNGLMULTITEXCOORD4XPROC)load("glMultiTexCoord4x"); - glad_glNormal3x = (PFNGLNORMAL3XPROC)load("glNormal3x"); - glad_glNormalPointer = (PFNGLNORMALPOINTERPROC)load("glNormalPointer"); - glad_glOrthox = (PFNGLORTHOXPROC)load("glOrthox"); - glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); - glad_glPointParameterx = (PFNGLPOINTPARAMETERXPROC)load("glPointParameterx"); - glad_glPointParameterxv = (PFNGLPOINTPARAMETERXVPROC)load("glPointParameterxv"); - glad_glPointSizex = (PFNGLPOINTSIZEXPROC)load("glPointSizex"); - glad_glPolygonOffsetx = (PFNGLPOLYGONOFFSETXPROC)load("glPolygonOffsetx"); - glad_glPopMatrix = (PFNGLPOPMATRIXPROC)load("glPopMatrix"); - glad_glPushMatrix = (PFNGLPUSHMATRIXPROC)load("glPushMatrix"); - glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); - glad_glRotatex = (PFNGLROTATEXPROC)load("glRotatex"); - glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); - glad_glSampleCoveragex = (PFNGLSAMPLECOVERAGEXPROC)load("glSampleCoveragex"); - glad_glScalex = (PFNGLSCALEXPROC)load("glScalex"); - glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); - glad_glShadeModel = (PFNGLSHADEMODELPROC)load("glShadeModel"); - glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); - glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); - glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); - glad_glTexCoordPointer = (PFNGLTEXCOORDPOINTERPROC)load("glTexCoordPointer"); - glad_glTexEnvi = (PFNGLTEXENVIPROC)load("glTexEnvi"); - glad_glTexEnvx = (PFNGLTEXENVXPROC)load("glTexEnvx"); - glad_glTexEnviv = (PFNGLTEXENVIVPROC)load("glTexEnviv"); - glad_glTexEnvxv = (PFNGLTEXENVXVPROC)load("glTexEnvxv"); - glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); - glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); - glad_glTexParameterx = (PFNGLTEXPARAMETERXPROC)load("glTexParameterx"); - glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); - glad_glTexParameterxv = (PFNGLTEXPARAMETERXVPROC)load("glTexParameterxv"); - glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); - glad_glTranslatex = (PFNGLTRANSLATEXPROC)load("glTranslatex"); - glad_glVertexPointer = (PFNGLVERTEXPOINTERPROC)load("glVertexPointer"); - glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); -} -static void load_GL_EXT_discard_framebuffer(GLADloadproc load) { - if(!GLAD_GL_EXT_discard_framebuffer) return; - glad_glDiscardFramebufferEXT = (PFNGLDISCARDFRAMEBUFFEREXTPROC)load("glDiscardFramebufferEXT"); -} -static void load_GL_OES_framebuffer_object(GLADloadproc load) { - if(!GLAD_GL_OES_framebuffer_object) return; - glad_glIsRenderbufferOES = (PFNGLISRENDERBUFFEROESPROC)load("glIsRenderbufferOES"); - glad_glBindRenderbufferOES = (PFNGLBINDRENDERBUFFEROESPROC)load("glBindRenderbufferOES"); - glad_glDeleteRenderbuffersOES = (PFNGLDELETERENDERBUFFERSOESPROC)load("glDeleteRenderbuffersOES"); - glad_glGenRenderbuffersOES = (PFNGLGENRENDERBUFFERSOESPROC)load("glGenRenderbuffersOES"); - glad_glRenderbufferStorageOES = (PFNGLRENDERBUFFERSTORAGEOESPROC)load("glRenderbufferStorageOES"); - glad_glGetRenderbufferParameterivOES = (PFNGLGETRENDERBUFFERPARAMETERIVOESPROC)load("glGetRenderbufferParameterivOES"); - glad_glIsFramebufferOES = (PFNGLISFRAMEBUFFEROESPROC)load("glIsFramebufferOES"); - glad_glBindFramebufferOES = (PFNGLBINDFRAMEBUFFEROESPROC)load("glBindFramebufferOES"); - glad_glDeleteFramebuffersOES = (PFNGLDELETEFRAMEBUFFERSOESPROC)load("glDeleteFramebuffersOES"); - glad_glGenFramebuffersOES = (PFNGLGENFRAMEBUFFERSOESPROC)load("glGenFramebuffersOES"); - glad_glCheckFramebufferStatusOES = (PFNGLCHECKFRAMEBUFFERSTATUSOESPROC)load("glCheckFramebufferStatusOES"); - glad_glFramebufferRenderbufferOES = (PFNGLFRAMEBUFFERRENDERBUFFEROESPROC)load("glFramebufferRenderbufferOES"); - glad_glFramebufferTexture2DOES = (PFNGLFRAMEBUFFERTEXTURE2DOESPROC)load("glFramebufferTexture2DOES"); - glad_glGetFramebufferAttachmentParameterivOES = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC)load("glGetFramebufferAttachmentParameterivOES"); - glad_glGenerateMipmapOES = (PFNGLGENERATEMIPMAPOESPROC)load("glGenerateMipmapOES"); -} -static int find_extensionsGLES1(void) { - if (!get_exts()) return 0; - GLAD_GL_EXT_discard_framebuffer = has_ext("GL_EXT_discard_framebuffer"); - GLAD_GL_OES_framebuffer_object = has_ext("GL_OES_framebuffer_object"); - GLAD_GL_OES_texture_npot = has_ext("GL_OES_texture_npot"); - free_exts(); - return 1; -} - -static void find_coreGLES1(void) { - - /* Thank you @elmindreda - * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 - * https://github.com/glfw/glfw/blob/master/src/context.c#L36 - */ - int i, major, minor; - - const char* version; - const char* prefixes[] = { - "OpenGL ES-CM ", - "OpenGL ES-CL ", - "OpenGL ES ", - NULL - }; - - version = (const char*) glGetString(GL_VERSION); - if (!version) return; - - for (i = 0; prefixes[i]; i++) { - const size_t length = strlen(prefixes[i]); - if (strncmp(version, prefixes[i], length) == 0) { - version += length; - break; - } - } - -/* PR #18 */ -#ifdef _MSC_VER - sscanf_s(version, "%d.%d", &major, &minor); -#else - sscanf(version, "%d.%d", &major, &minor); -#endif - - GLVersion.major = major; GLVersion.minor = minor; - max_loaded_major = major; max_loaded_minor = minor; - GLAD_GL_VERSION_ES_CM_1_0 = (major == 1 && minor >= 0) || major > 1; - if (GLVersion.major > 1 || (GLVersion.major >= 1 && GLVersion.minor >= 0)) { - max_loaded_major = 1; - max_loaded_minor = 0; - } -} - -int gladLoadGLES1Loader(GLADloadproc load) { - GLVersion.major = 0; GLVersion.minor = 0; - glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - if(glGetString == NULL) return 0; - if(glGetString(GL_VERSION) == NULL) return 0; - find_coreGLES1(); - load_GL_VERSION_ES_CM_1_0(load); - - if (!find_extensionsGLES1()) return 0; - load_GL_EXT_discard_framebuffer(load); - load_GL_OES_framebuffer_object(load); - return GLVersion.major != 0 || GLVersion.minor != 0; -} - diff --git a/src/client/refresh/gl1/header/local.h b/src/client/refresh/gl1/header/local.h deleted file mode 100644 index 36dcc4508..000000000 --- a/src/client/refresh/gl1/header/local.h +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Local header for the refresher. - * - * ======================================================================= - */ - -#ifndef REF_LOCAL_H -#define REF_LOCAL_H - -#include -#include -#include - -#include "../../ref_shared.h" -#include "qgl.h" - -#ifdef YQ2_GL1_GLES -#define REF_VERSION "Yamagi Quake II OpenGL ES1 Refresher" -#define GL_COLOR_INDEX GL_RGBA -#define GL_COLOR_INDEX8_EXT GL_RGBA -#else -#define REF_VERSION "Yamagi Quake II OpenGL Refresher" -#ifndef GL_COLOR_INDEX8_EXT -#define GL_COLOR_INDEX8_EXT GL_COLOR_INDEX -#endif -#endif - -#define MAX_LIGHTMAPS 128 -#define MAX_LIGHTMAP_COPIES 3 // Meant for tile / deferred rendering platforms -#define MAX_SCRAPS 1 -#define TEXNUM_LIGHTMAPS 1024 -#define TEXNUM_SCRAPS (TEXNUM_LIGHTMAPS + MAX_LIGHTMAPS * MAX_LIGHTMAP_COPIES) -#define TEXNUM_IMAGES (TEXNUM_SCRAPS + MAX_SCRAPS) -#define MAX_GLTEXTURES 1024 -#define BLOCK_WIDTH 128 -#define BLOCK_HEIGHT 128 -#define SCRAP_WIDTH (BLOCK_WIDTH * 2) -#define SCRAP_HEIGHT (BLOCK_HEIGHT * 2) -#define BACKFACE_EPSILON 0.01 -#define LIGHTMAP_BYTES 4 -#define MAX_TEXTURE_UNITS 2 -#define GL_LIGHTMAP_FORMAT GL_RGBA - -// GL buffer definitions -#define MAX_VERTICES 16384 -#define MAX_INDICES (MAX_VERTICES * 4) - -/* up / down */ -#define PITCH 0 - -/* left / right */ -#define YAW 1 - -/* fall over */ -#define ROLL 2 - -#if defined(USE_SDL3) || defined(YQ2_GL1_GLES) -// Use internal lookup table instead of SDL2 hw gamma funcs for GL1/GLES1 -#define GL1_GAMMATABLE -#endif - -enum stereo_modes { - STEREO_MODE_NONE, - STEREO_MODE_OPENGL, - STEREO_MODE_ANAGLYPH, - STEREO_MODE_ROW_INTERLEAVED, - STEREO_MODE_COLUMN_INTERLEAVED, - STEREO_MODE_PIXEL_INTERLEAVED, - STEREO_SPLIT_HORIZONTAL, - STEREO_SPLIT_VERTICAL, -}; - -enum opengl_special_buffer_modes { - OPENGL_SPECIAL_BUFFER_MODE_NONE, - OPENGL_SPECIAL_BUFFER_MODE_STEREO, - OPENGL_SPECIAL_BUFFER_MODE_STENCIL, -}; - -typedef struct image_s -{ - char name[MAX_QPATH]; /* game path, including extension */ - imagetype_t type; - int width, height; /* source image */ - int upload_width, upload_height; /* after power of two and picmip */ - int registration_sequence; /* 0 = free */ - struct msurface_s *texturechain; /* for sort-by-texture world drawing */ - int texnum; /* gl texture binding */ - float sl, tl, sh, th; /* 0,0 - 1,1 unless part of the scrap */ - qboolean scrap; - qboolean has_alpha; - - qboolean paletted; -} image_t; - -typedef enum -{ - rserr_ok, - - rserr_invalid_mode, - - rserr_unknown -} rserr_t; - -typedef enum -{ - buf_2d, - buf_singletex, - buf_mtex, - buf_alpha, - buf_alias, - buf_flash, - buf_shadow -} buffered_draw_t; - -typedef struct // 832k aprox. -{ - buffered_draw_t type; - - GLfloat - vtx[MAX_VERTICES * 3], // vertexes - tex[MAX_TEXTURE_UNITS][MAX_VERTICES * 2]; // texture coords - - GLubyte clr[MAX_VERTICES * 4]; // color components - - GLushort idx[MAX_INDICES]; // indices for the draw call - - GLuint vt, tx, cl; // indices for GLfloat arrays above - - int texture[MAX_TEXTURE_UNITS]; - int flags; // entity flags - float alpha; -} glbuffer_t; - -#include "model.h" - -extern glbuffer_t gl_buf; -extern float gldepthmin, gldepthmax; - -extern image_t gltextures[MAX_GLTEXTURES]; -extern int numgltextures; - -extern image_t *r_notexture; -extern image_t *r_particletexture; -extern int r_visframecount; -extern int r_framecount; -extern cplane_t frustum[4]; -extern int c_brush_polys, c_alias_polys; -extern int gl_filter_min, gl_filter_max; - -/* view origin */ -extern vec3_t vup; -extern vec3_t vpn; -extern vec3_t vright; -extern vec3_t r_origin; - -/* screen size info */ -extern int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2; - -extern qboolean IsHighDPIaware; - -extern cvar_t *r_norefresh; -extern cvar_t *gl_lefthand; -extern cvar_t *r_gunfov; -extern cvar_t *r_farsee; -extern cvar_t *r_drawentities; -extern cvar_t *r_drawworld; -extern cvar_t *r_speeds; -extern cvar_t *r_fullbright; -extern cvar_t *r_novis; -extern cvar_t *r_lerpmodels; -extern cvar_t *r_fixsurfsky; - -extern cvar_t *r_lightlevel; -extern cvar_t *gl1_overbrightbits; - -extern cvar_t *gl1_palettedtexture; -extern cvar_t *gl1_pointparameters; -extern cvar_t *gl1_multitexture; - -extern cvar_t *gl1_particle_min_size; -extern cvar_t *gl1_particle_max_size; -extern cvar_t *gl1_particle_size; -extern cvar_t *gl1_particle_att_a; -extern cvar_t *gl1_particle_att_b; -extern cvar_t *gl1_particle_att_c; -extern cvar_t *gl1_particle_square; - -extern cvar_t *r_mode; -extern cvar_t *r_customwidth; -extern cvar_t *r_customheight; - -extern cvar_t *r_retexturing; -extern cvar_t *r_scale8bittextures; -extern cvar_t *r_validation; - -extern cvar_t *gl_nolerp_list; -extern cvar_t *r_lerp_list; -extern cvar_t *r_2D_unfiltered; -extern cvar_t *r_videos_unfiltered; - -extern cvar_t *gl_lightmap; -extern cvar_t *gl_shadows; -extern cvar_t *gl1_stencilshadow; -extern cvar_t *gl1_dynamic; -extern cvar_t *gl_nobind; -extern cvar_t *gl1_round_down; -extern cvar_t *gl1_picmip; -extern cvar_t *gl_showtris; -extern cvar_t *gl_showbbox; -extern cvar_t *gl_finish; -extern cvar_t *gl1_ztrick; -extern cvar_t *gl_zfix; -extern cvar_t *r_clear; -extern cvar_t *r_cull; -extern cvar_t *gl1_polyblend; -extern cvar_t *gl1_flashblend; -extern cvar_t *r_modulate; -extern cvar_t *gl_drawbuffer; -extern cvar_t *r_vsync; -extern cvar_t *gl_anisotropic; -extern cvar_t *gl_texturemode; -extern cvar_t *gl1_texturealphamode; -extern cvar_t *gl1_texturesolidmode; -extern cvar_t *gl1_saturatelighting; -extern cvar_t *r_lockpvs; -extern cvar_t *gl_msaa_samples; - -extern cvar_t *vid_fullscreen; -extern cvar_t *vid_gamma; - -extern int gl_tex_solid_format; -extern int gl_tex_alpha_format; - -extern int c_visible_lightmaps; -extern int c_visible_textures; - -extern float r_world_matrix[16]; - -extern unsigned char gammatable[256]; - -qboolean R_Bind(int texnum); - -void R_TexEnv(GLenum value); -void R_SelectTexture(GLenum); -void R_MBind(GLenum target, int texnum); -void R_EnableMultitexture(qboolean enable); - -void R_LightPoint(entity_t *currententity, vec3_t p, vec3_t color); -void R_PushDlights(void); - -extern model_t *r_worldmodel; -extern unsigned d_8to24table[256]; -extern int registration_sequence; - -void V_AddBlend(float r, float g, float b, float a, float *v_blend); - -void R_ScreenShot(void); -void R_DrawAliasModel(entity_t *currententity, const model_t *currentmodel); -void R_DrawBrushModel(entity_t *currententity, const model_t *currentmodel); -void R_DrawSpriteModel(entity_t *currententity, const model_t *currentmodel); -void R_DrawBeam(entity_t *e); -void R_DrawWorld(void); -void R_RenderDlights(void); -void R_DrawAlphaSurfaces(void); -void R_InitParticleTexture(void); -void Draw_InitLocal(void); -void R_SubdivideSurface(model_t *loadmodel, msurface_t *fa); -void R_RotateForEntity(entity_t *e); -void R_MarkLeaves(void); - -extern int r_dlightframecount; -glpoly_t *WaterWarpPolyVerts(glpoly_t *p); -void R_EmitWaterPolys(msurface_t *fa); -void R_AddSkySurface(msurface_t *fa); -void R_ClearSkyBox(void); -void R_DrawSkyBox(void); -void R_MarkSurfaceLights(dlight_t *light, int bit, mnode_t *node, - int lightframecount); - -void COM_StripExtension(char *in, char *out); - -image_t *R_LoadPic(const char *name, byte *pic, int width, int realwidth, - int height, int realheight, size_t data_size, imagetype_t type, int bits); -image_t *R_FindImage(const char *name, imagetype_t type); -void R_TextureMode(const char *string); -void R_ImageList_f(void); - -void R_SetTexturePalette(const unsigned palette[256]); - -void R_InitImages(void); -void R_ShutdownImages(void); - -void R_FreeUnusedImages(void); -qboolean R_ImageHasFreeSpace(void); - -void R_TextureAlphaMode(const char *string); -void R_TextureSolidMode(const char *string); -int Scrap_AllocBlock(int w, int h, int *x, int *y); - -// GL buffer operations - -#define GLBUFFER_VERTEX(X, Y, Z) \ - gl_buf.vtx[gl_buf.vt] = X; gl_buf.vtx[gl_buf.vt+1] = Y; \ - gl_buf.vtx[gl_buf.vt+2] = Z; gl_buf.vt += 3; - -#define GLBUFFER_SINGLETEX(S, T) \ - gl_buf.tex[0][gl_buf.tx] = S; gl_buf.tex[0][gl_buf.tx+1] = T; gl_buf.tx += 2; - -#define GLBUFFER_MULTITEX(CS, CT, LS, LT) \ - gl_buf.tex[0][gl_buf.tx] = CS; gl_buf.tex[0][gl_buf.tx+1] = CT; \ - gl_buf.tex[1][gl_buf.tx] = LS; gl_buf.tex[1][gl_buf.tx+1] = LT; gl_buf.tx += 2; - -#define GLBUFFER_COLOR(R, G, B, A) \ - gl_buf.clr[gl_buf.cl] = R; gl_buf.clr[gl_buf.cl+1] = G; \ - gl_buf.clr[gl_buf.cl+2] = B; gl_buf.clr[gl_buf.cl+3] = A; gl_buf.cl += 4; - -void R_ApplyGLBuffer(void); -void R_UpdateGLBuffer(buffered_draw_t type, int colortex, int lighttex, int flags, float alpha); -void R_Buffer2DQuad(GLfloat ul_vx, GLfloat ul_vy, GLfloat dr_vx, GLfloat dr_vy, - GLfloat ul_tx, GLfloat ul_ty, GLfloat dr_tx, GLfloat dr_ty); -void R_SetBufferIndices(GLenum type, GLuint vertices_num); - -#ifdef YQ2_GL1_GLES -#define glPolygonMode(...) -#define glFrustum(...) glFrustumf(__VA_ARGS__) -#define glDepthRange(...) glDepthRangef(__VA_ARGS__) -#define glOrtho(...) glOrthof(__VA_ARGS__) -#else -#ifdef DEBUG -void glCheckError_(const char *file, const char *function, int line); -// Ideally, the following list should contain all OpenGL calls. -// Either way, errors are caught, since error flags are persisted until the next glGetError() call. -// So they show, even if the location of the error is inaccurate. -#define glDrawArrays(...) glDrawArrays(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDrawElements(...) glDrawElements(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTexImage2D(...) glTexImage2D(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTexSubImage2D(...) glTexSubImage2D(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTexEnvf(...) glTexEnvf(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTexEnvi(...) glTexEnvi(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glVertexPointer(...) glVertexPointer(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTexCoordPointer(...) glTexCoordPointer(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glColorPointer(...) glColorPointer(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTexParameteri(...) glTexParameteri(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glBindTexture(...) glBindTexture(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glFrustum(...) glFrustum(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glTranslatef(...) glTranslatef(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glRotatef(...) glRotatef(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glScalef(...) glScalef(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glScissor(...) glScissor(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glBlendFunc(...) glBlendFunc(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDepthFunc(...) glDepthFunc(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDepthMask(...) glDepthMask(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDepthRange(...) glDepthRange(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glEnable(...) glEnable(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDisable(...) glDisable(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glEnableClientState(...) glEnableClientState(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDisableClientState(...) glDisableClientState(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glPushMatrix(...) glPushMatrix(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glPopMatrix(...) glPopMatrix(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glMatrixMode(...) glMatrixMode(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glOrtho(...) glOrtho(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glColorMask(...) glColorMask(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glStencilOp(...) glStencilOp(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glStencilFunc(...) glStencilFunc(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDrawBuffer(...) glDrawBuffer(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glReadPixels(...) glReadPixels(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glClear(...) glClear(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glClearColor(...) glClearColor(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glClearStencil(...) glClearStencil(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glDeleteTextures(...) glDeleteTextures(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glFinish() glFinish(); glCheckError_(__FILE__, __func__, __LINE__) -#define glAlphaFunc(...) glAlphaFunc(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glHint(...) glHint(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glLoadIdentity() glLoadIdentity(); glCheckError_(__FILE__, __func__, __LINE__) -#define glBegin(...) glBegin(__VA_ARGS__); glCheckError_(__FILE__, __func__, __LINE__) -#define glEnd() glEnd(); glCheckError_(__FILE__, __func__, __LINE__) -#endif -#endif - -/* GL extension emulation functions */ -void R_DrawParticles2(int n, - const particle_t particles[], - const unsigned *colortable); - -/* - * GL config stuff - */ - -typedef struct -{ - const char *renderer_string; - const char *vendor_string; - const char *version_string; - const char *extensions_string; - - int major_version; - int minor_version; - - // ---- - - qboolean anisotropic; - qboolean npottextures; - qboolean palettedtexture; - qboolean pointparameters; - qboolean multitexture; - qboolean lightmapcopies; // many copies of same lightmap, for embedded - - // ---- - - float max_anisotropy; -} glconfig_t; - -typedef struct -{ - float inverse_intensity; - float sw_gamma; // always 1 if using SDL2 hw gamma - qboolean minlight_set; // is gl1_minlight > 0 ? - qboolean fullscreen; - - int prev_mode; - - unsigned char *d_16to8table; - - int lightmap_textures; - - int currenttextures[MAX_TEXTURE_UNITS]; - int currenttmu; - GLenum currenttarget; - - float camera_separation; - enum stereo_modes stereo_mode; - - qboolean stencil; -} glstate_t; - -typedef struct -{ - int current_lightmap_texture; - - msurface_t *lightmap_surfaces[MAX_LIGHTMAPS]; - - int allocated[BLOCK_WIDTH]; - - /* the lightmap texture data needs to be kept in - main memory so texsubimage can update properly */ - byte *lightmap_buffer[MAX_LIGHTMAPS]; -} gllightmapstate_t; - -extern glconfig_t gl_config; -extern glstate_t gl_state; - -/* - * Updates the gamma ramp. - */ -void RI_UpdateGamma(void); - -/* - * Enables or disables the vsync. - */ -void RI_SetVsync(void); - -/* - * Shuts the GL context down. - */ -void RI_ShutdownContext(void); - -/* - * Returns the address of the GL function proc, - * or NULL if the function is not found. - */ -void *RI_GetProcAddress (const char* proc); - -/* - * Fills the actual size of the drawable into width and height. - */ -void RI_GetDrawableSize(int* width, int* height); - -/* - * Returns the SDL major version. Implemented - * here to not polute gl1_main.c with the SDL - * headers. - */ -int RI_GetSDLVersion(); - -/* g11_draw */ -extern image_t * RDraw_FindPic(const char *name); -extern void RDraw_GetPicSize(int *w, int *h, const char *pic); -extern void RDraw_PicScaled(int x, int y, const char *pic, float factor); -extern void RDraw_StretchPic(int x, int y, int w, int h, const char *pic); -extern void RDraw_CharScaled(int x, int y, int num, float scale); -extern void RDraw_TileClear(int x, int y, int w, int h, const char *pic); -extern void RDraw_Fill(int x, int y, int w, int h, int c); -extern void RDraw_FadeScreen(void); -extern void RDraw_StretchRaw(int x, int y, int w, int h, int cols, int rows, const byte *data, int bits); - -#endif diff --git a/src/client/refresh/gl1/header/model.h b/src/client/refresh/gl1/header/model.h deleted file mode 100644 index 43b296ec9..000000000 --- a/src/client/refresh/gl1/header/model.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Header for the model stuff. - * - * ======================================================================= - */ - -#ifndef REF_MODEL_H -#define REF_MODEL_H - -#define VERTEXSIZE 7 - -/* in memory representation */ - -typedef struct glpoly_s -{ - struct glpoly_s *next; - struct glpoly_s *chain; - int numverts; - int flags; /* for SURF_UNDERWATER (not needed anymore?) */ - float verts[4][VERTEXSIZE]; /* variable sized (xyz s1t1 s2t2) */ -} glpoly_t; - -typedef struct msurface_s -{ - int visframe; /* should be drawn when node is crossed */ - - cplane_t *plane; - int flags; - - int firstedge; /* look up in model->surfedges[], negative numbers */ - int numedges; /* are backwards edges */ - - short texturemins[2]; - short extents[2]; - - int light_s, light_t; /* gl lightmap coordinates */ - int dlight_s, dlight_t; /* gl lightmap coordinates for dynamic lightmaps */ - - glpoly_t *polys; /* multiple if warped */ - struct msurface_s *texturechain; - struct msurface_s *lightmapchain; - int lmchain_frame; // avoids adding this surface twice to the lightmap chain - - mtexinfo_t *texinfo; - - /* lighting info */ - int dlightframe; - int dlightbits; - qboolean dirty_lightmap; // lightmap has dynamic lights from previous frame (mtex only) - - int lightmaptexturenum; - byte styles[MAXLIGHTMAPS]; - float cached_light[MAXLIGHTMAPS]; /* values currently used in lightmap */ - byte *samples; /* [numstyles*surfsize] */ -} msurface_t; - -/* Whole model */ - -typedef struct model_s -{ - char name[MAX_QPATH]; - - int registration_sequence; - - modtype_t type; - int numframes; - - int flags; - - /* volume occupied by the model graphics */ - vec3_t mins, maxs; - float radius; - - /* solid volume for clipping */ - qboolean clipbox; - vec3_t clipmins, clipmaxs; - - /* brush model */ - int firstmodelsurface, nummodelsurfaces; - int lightmap; /* only for submodels */ - - int numsubmodels; - struct model_s *submodels; - - int numplanes; - cplane_t *planes; - - int numleafs; /* number of visible leafs, not counting 0 */ - mleaf_t *leafs; - - int numvertexes; - mvertex_t *vertexes; - - int numedges; - medge_t *edges; - - int numnodes; - int firstnode; - mnode_t *nodes; - - int numtexinfo; - mtexinfo_t *texinfo; - - int numsurfaces; - msurface_t *surfaces; - - int numsurfedges; - int *surfedges; - - int nummarksurfaces; - msurface_t **marksurfaces; - - dvis_t *vis; - - byte *lightdata; - - /* for alias models and skins */ - image_t *skins[MAX_MD2SKINS]; - - int extradatasize; - void *extradata; - - // submodules - vec3_t origin; // for sounds or lights -} model_t; - -void Mod_Init(void); -void Mod_ClearAll(void); -const byte *Mod_ClusterPVS(int cluster, const model_t *model); - -void Mod_Modellist_f(void); - -void *Hunk_Begin(int maxsize); -void *Hunk_Alloc(int size); -int Hunk_End(void); -void Hunk_Free(void *base); - -void Mod_FreeAll(void); -void Mod_Free(model_t *mod); - -#endif diff --git a/src/client/refresh/gl1/header/qgl.h b/src/client/refresh/gl1/header/qgl.h deleted file mode 100644 index 2c0e01ae9..000000000 --- a/src/client/refresh/gl1/header/qgl.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2013 Alejandro Ricoveri - * Copyright (C) 1999-2005 Id Software, Inc. - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * Quake GL prototypes based on ioquake3 source code - * - * ======================================================================= - */ - -#ifndef REF_QGL_H -#define REF_QGL_H - -#ifdef _WIN32 -#include -#endif - -#ifdef YQ2_GL1_GLES -#include "../glad-gles1/include/glad/glad.h" -#else -#if defined(__APPLE__) -#define GL_SILENCE_DEPRECATION -#include -#else -#include -#endif -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif - -// Extracted from -#ifndef GL_VERSION_1_4 -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#endif - -#ifndef GL_VERSION_1_3 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_MULTISAMPLE 0x809D -#define GL_COMBINE 0x8570 -#define GL_RGB_SCALE 0x8573 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif - -// ======================================================================= - -/* - * This is responsible for setting up our QGL extension pointers - */ -void QGL_Init ( void ); - -/* - * Unloads the specified DLL then nulls out all the proc pointers. - */ -void QGL_Shutdown ( void ); - -/* GL extensions */ -extern void ( APIENTRY *qglPointParameterf ) ( GLenum param, GLfloat value ); -extern void ( APIENTRY *qglPointParameterfv ) ( GLenum param, - const GLfloat *value ); -extern void ( APIENTRY *qglColorTableEXT ) ( GLenum, GLenum, GLsizei, GLenum, - GLenum, const GLvoid * ); -extern void ( APIENTRY *qglActiveTexture ) ( GLenum texture ); -extern void ( APIENTRY *qglClientActiveTexture ) ( GLenum texture ); -extern void ( APIENTRY *qglDiscardFramebufferEXT ) ( GLenum target, - GLsizei numAttachments, const GLenum *attachments ); - -#endif diff --git a/src/client/refresh/gl1/qgl.c b/src/client/refresh/gl1/qgl.c deleted file mode 100644 index 7c8f4ad03..000000000 --- a/src/client/refresh/gl1/qgl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2013 Alejandro Ricoveri - * Copyright (C) 1997-2001 Id Software, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * ======================================================================= - * - * This file implements the operating system binding of GL to QGL function - * pointers. When doing a port of Quake2 you must implement the following - * two functions: - * - * QGL_Init() - loads libraries, assigns function pointers, etc. - * QGL_Shutdown() - unloads libraries, NULLs function pointers - * - * This implementation should work for Windows and unixoid platforms, - * other platforms may need an own implementation. - * - * ======================================================================= - */ - -#include "header/local.h" - -/* - * GL extensions - */ -void (APIENTRY *qglPointParameterf)(GLenum param, GLfloat value); -void (APIENTRY *qglPointParameterfv)(GLenum param, const GLfloat *value); -void (APIENTRY *qglColorTableEXT)(GLenum, GLenum, GLsizei, GLenum, GLenum, - const GLvoid *); -void (APIENTRY *qglActiveTexture) (GLenum texture); -void (APIENTRY *qglClientActiveTexture) (GLenum texture); -void (APIENTRY *qglDiscardFramebufferEXT) (GLenum target, - GLsizei numAttachments, const GLenum *attachments); - -/* ========================================================================= */ - -void QGL_EXT_Reset ( void ) -{ - qglPointParameterf = NULL; - qglPointParameterfv = NULL; - qglColorTableEXT = NULL; - qglActiveTexture = NULL; - qglClientActiveTexture = NULL; - qglDiscardFramebufferEXT = NULL; -} - -/* ========================================================================= */ - -void -QGL_Shutdown ( void ) -{ - // Reset GL extension pointers - QGL_EXT_Reset(); -} - -/* ========================================================================= */ - -void -QGL_Init (void) -{ - // Reset GL extension pointers - QGL_EXT_Reset(); -} - diff --git a/src/client/refresh/gl3/CMakeLists.txt b/src/client/refresh/gl3/CMakeLists.txt new file mode 100644 index 000000000..edc585d80 --- /dev/null +++ b/src/client/refresh/gl3/CMakeLists.txt @@ -0,0 +1,56 @@ +# GL3 renderer (ref_gl3) + +set(GL3-Source + ${REF_SRC_DIR}/gl3/gl3_draw.c + ${REF_SRC_DIR}/gl3/gl3_image.c + ${REF_SRC_DIR}/gl3/gl3_light.c + ${REF_SRC_DIR}/gl3/gl3_lightmap.c + ${REF_SRC_DIR}/gl3/gl3_main.c + ${REF_SRC_DIR}/gl3/gl3_mesh.c + ${REF_SRC_DIR}/gl3/gl3_misc.c + ${REF_SRC_DIR}/gl3/gl3_model.c + ${REF_SRC_DIR}/gl3/gl3_sdl.c + ${REF_SRC_DIR}/gl3/gl3_surf.c + ${REF_SRC_DIR}/gl3/gl3_warp.c + ${REF_SRC_DIR}/gl3/gl3_shaders.c + ${REF_SRC_DIR}/files/common.c + ${REF_SRC_DIR}/files/models.c + ${REF_SRC_DIR}/files/pcx.c + ${REF_SRC_DIR}/files/stb.c + ${REF_SRC_DIR}/files/surf.c + ${REF_SRC_DIR}/files/wal.c + ${REF_SRC_DIR}/files/pvs.c + ${COMMON_SRC_DIR}/shared/shared.c + ${COMMON_SRC_DIR}/md4.c +) + +set(Glad-GL3-Source ${REF_SRC_DIR}/gl3/glad/src/glad.c) + +set(GL3-Header + ${REF_SRC_DIR}/ref_shared.h + ${REF_SRC_DIR}/constants/anorms.h + ${REF_SRC_DIR}/constants/anormtab.h + ${REF_SRC_DIR}/constants/warpsin.h + ${REF_SRC_DIR}/files/stb_image.h + ${REF_SRC_DIR}/gl3/header/DG_dynarr.h + ${REF_SRC_DIR}/gl3/header/HandmadeMath.h + ${REF_SRC_DIR}/gl3/header/local.h + ${REF_SRC_DIR}/gl3/header/model.h + ${COMMON_SRC_DIR}/header/shared.h +) + +set(Glad-GL3-Header + ${REF_SRC_DIR}/gl3/glad/include/glad/glad.h + ${REF_SRC_DIR}/gl3/glad/include/KHR/khrplatform.h +) + +add_library(ref_gl3 MODULE ${GL3-Source} ${Glad-GL3-Source} ${GL3-Header} ${Glad-GL3-Header} ${REF-Platform-Specific-Source}) +set_target_properties(ref_gl3 PROPERTIES + PREFIX "" + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} +) +target_include_directories(ref_gl3 PRIVATE ${CMAKE_SOURCE_DIR}/src/client/refresh/gl3/glad/include) +target_link_libraries(ref_gl3 ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) +target_link_libraries(ref_gl3 SDL3::SDL3) \ No newline at end of file diff --git a/src/client/refresh/gl3/header/local.h b/src/client/refresh/gl3/header/local.h index a9dffd0e9..9505fcfd8 100644 --- a/src/client/refresh/gl3/header/local.h +++ b/src/client/refresh/gl3/header/local.h @@ -44,13 +44,7 @@ #else -#ifdef YQ2_GL3_GLES3 - #include "../glad-gles3/include/glad/glad.h" - // yes, this is a bit hacky, but it works :-P - #define glDepthRange glDepthRangef -#else // desktop GL3 - #include "../glad/include/glad/glad.h" -#endif +#include "../glad/include/glad/glad.h" #endif diff --git a/src/client/refresh/soft/header/local.h b/src/client/refresh/soft/header/local.h deleted file mode 100644 index 2cbea8f7f..000000000 --- a/src/client/refresh/soft/header/local.h +++ /dev/null @@ -1,618 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#ifndef __R_LOCAL__ -#define __R_LOCAL__ - -#include -#include -#include - -#include "../../ref_shared.h" - -#include -#include -#include - -#define REF_VERSION "SOFT 0.01" - -// up / down -#define PITCH 0 - -// left / right -#define YAW 1 - -// fall over -#define ROLL 2 - - -/* - - skins will be outline flood filled and mip mapped - pics and sprites with alpha will be outline flood filled - pic won't be mip mapped - - model skin - sprite frame - wall texture - pic - -*/ - -#define NUM_MIPS 4 - -typedef struct image_s -{ - char name[MAX_QPATH]; // game path, including extension - imagetype_t type; - int width, height; - int asset_width, asset_height; // asset texture size - qboolean transparent; // true if any 255 pixels in image - int registration_sequence; // 0 = free - byte *pixels[NUM_MIPS]; // mip levels - int mip_levels; // count of mip levels -} image_t; - - -//=================================================================== - -typedef unsigned char pixel_t; -typedef int shift20_t; -typedef int zvalue_t; -typedef unsigned int light_t; -typedef int light3_t[3]; - -// xyz-prescale to 16.16 fixed-point -#define SHIFT16XYZ 16 -#define SHIFT16XYZ_MULT (1 << SHIFT16XYZ) - -typedef enum -{ - rserr_ok, - - rserr_invalid_mode, - - rserr_unknown -} rserr_t; - -/* 64 light grades available */ -#define LIGHTMASK 0xFF00 - -extern pixel_t *vid_buffer; // invisible buffer -extern pixel_t *vid_colormap; // 256 * VID_GRADES size -extern pixel_t *vid_alphamap; // 256 * 256 translucency map -extern light_t vid_lightthreshold; // full light distance maximum -extern char shift_size; // shift size in fixed-point - -typedef struct -{ - vrect_t vrect; // subwindow in video for refresh - // FIXME: not need vrect next field here? - vrect_t aliasvrect; // scaled Alias version - shift20_t vrectright, vrectbottom; // right & bottom screen coords - shift20_t aliasvrectright, aliasvrectbottom; // scaled Alias versions - float vrectrightedge; // rightmost right edge we care about, - // for use in edge list - float fvrectx, fvrecty; // for floating-point compares - float fvrectx_adj, fvrecty_adj; // left and top edges, for clamping - shift20_t vrect_x_adj_shift20; // (vrect.x + 0.5 - epsilon) << 20 - shift20_t vrectright_adj_shift20; // (vrectright + 0.5 - epsilon) << 20 - float fvrectright_adj, fvrectbottom_adj; // right and bottom edges, for clamping - float fvrectright; // rightmost edge, for Alias clamping - float fvrectbottom; // bottommost edge, for Alias clamping - float horizontalFieldOfView; // at Z = 1.0, this many X is visible - // 2.0 = 90 degrees - float xOrigin; // should probably always be 0.5 - float yOrigin; // between be around 0.3 to 0.5 - - vec3_t vieworg; - vec3_t viewangles; - - int ambientlight; -} oldrefdef_t; - -extern oldrefdef_t r_refdef; - -#include "model.h" - -/* -==================================================== - - CONSTANTS - -==================================================== -*/ - -#define VID_CBITS 6 -#define VID_GRADES (1 << VID_CBITS) - - -// sw_local.h: general refresh-related stuff shared between the refresh and the -// driver - - -#define MAXVERTS 64 // max points in a surface polygon -#define MAXWORKINGVERTS (MAXVERTS+4) // max points in an intermediate - // polygon (while processing) - -#define PARTICLE_Z_CLIP 8.0 - -#define TRANSPARENT_COLOR 0xFF - -#define CYCLE 128 // turbulent cycle size - -// flags in finalvert_t.flags -#define ALIAS_LEFT_CLIP 0x0001 -#define ALIAS_TOP_CLIP 0x0002 -#define ALIAS_RIGHT_CLIP 0x0004 -#define ALIAS_BOTTOM_CLIP 0x0008 -#define ALIAS_Z_CLIP 0x0010 -#define ALIAS_XY_CLIP_MASK 0x000F - -#define BMODEL_FULLY_CLIPPED 0x10 // value returned by R_BmodelCheckBBox () - // if bbox is trivially rejected - -#define XCENTERING (1.0 / 2.0) -#define YCENTERING (1.0 / 2.0) - -#define BACKFACE_EPSILON 0.01 - -#define NEAR_CLIP 0.01 - -#define ALIAS_Z_CLIP_PLANE 4 - -// turbulence stuff -#define AMP 8*0x10000 -#define AMP2 3 -#define SPEED 20 - - -/* -==================================================== - -TYPES - -==================================================== -*/ - -typedef struct -{ - float u, v; - float s, t; - float zi; -} emitpoint_t; - -/* -** if you change this structure be sure to change the #defines -** listed after it! -*/ -typedef struct compactvert_s { - int u, v, s, t; - light3_t l; // full color light - zvalue_t zi; -} compactvert_t; - -typedef struct finalvert_s { - compactvert_t cv; // reuse compacted type - int flags; - float xyz[3]; // eye space -} finalvert_t; - -typedef struct -{ - pixel_t *pskin; - int skinwidth; - int skinheight; - float scalewidth; - float scaleheight; -} affinetridesc_t; - -typedef struct -{ - byte *surfdat; // destination for generated surface - int rowbytes; // destination logical width in bytes - msurface_t *surf; // description for surface to generate - fixed8_t lightadj[MAXLIGHTMAPS]; // adjust for lightmap levels for dynamic lighting - image_t *image; - int surfmip; // mipmapped ratio of surface texels / world pixels - int surfwidth; // in mipmapped texels - int surfheight; // in mipmapped texels -} drawsurf_t; - -// clipped bmodel edges -typedef struct bedge_s -{ - mvertex_t *v[2]; - struct bedge_s *pnext; -} bedge_t; - -typedef struct clipplane_s -{ - vec3_t normal; - float dist; - struct clipplane_s *next; - byte leftedge; - byte rightedge; - byte reserved[2]; -} clipplane_t; - -typedef struct surfcache_s -{ - struct surfcache_s *next; - struct surfcache_s **owner; // NULL is an empty chunk of memory - int lightadj[MAXLIGHTMAPS]; // checked for strobe flush - int dlight; - int size; // including header - unsigned width; - unsigned height; // DEBUG only needed for debug - float mipscale; - image_t *image; - byte data[4]; // width*height elements -} surfcache_t; - -typedef struct espan_s -{ - int u, v, count; - struct espan_s *pnext; -} espan_t; -extern espan_t *vid_polygon_spans; // space for spans in r_poly - -// used by the polygon drawer (sw_poly.c) and sprite setup code (sw_sprite.c) -typedef struct -{ - int nump; - emitpoint_t *pverts; - byte *pixels; // image - int pixel_width; // image width - int pixel_height; // image height - vec3_t vup, vright, vpn; // in worldspace, for plane eq - float dist; - float s_offset, t_offset; - float viewer_position[3]; - void (*drawspanlet)(const int *r_turb_turb); - int stipple_parity; -} polydesc_t; - -// FIXME: compress, make a union if that will help -// insubmodel is only 1, flags is fewer than 32, spanstate could be a byte -typedef struct surf_s -{ - struct surf_s *next; // active surface stack in r_edge.c - struct surf_s *prev; // used in r_edge.c for active surf stack - struct espan_s *spans; // pointer to linked list of spans to draw - int key; // sorting key (BSP order) - shift20_t last_u; // set during tracing - int spanstate; // 0 = not in span - // 1 = in span - // -1 = in inverted span (end before - // start) - int flags; // currentface flags - msurface_t *msurf; - entity_t *entity; - float nearzi; // nearest 1/z on surface, for mipmapping - qboolean insubmodel; - float d_ziorigin, d_zistepu, d_zistepv; -} surf_t; - -typedef unsigned short surfindex_t; - -// surface index size -#define SURFINDEX_MAX (1 << (sizeof(surfindex_t) * 8)) - -typedef struct edge_s -{ - shift20_t u; - shift20_t u_step; - struct edge_s *prev, *next; - surfindex_t surfs[2]; - struct edge_s *nextremove; - float nearzi; - medge_t *owner; -} edge_t; - - -/* -==================================================== - -VARS - -==================================================== -*/ -extern int r_framecount; // sequence # of current frame since Quake - // started -extern float r_aliasuvscale; // scale-up factor for screen u and v - // on Alias vertices passed to driver -extern qboolean r_dowarp; - -extern affinetridesc_t r_affinetridesc; - -void D_WarpScreen(void); - -//=======================================================================// - -// callbacks to Quake - -extern int c_surf; - -extern pixel_t *r_warpbuffer; - -extern float scale_for_mip; - -extern float d_sdivzstepu, d_tdivzstepu; -extern float d_sdivzstepv, d_tdivzstepv; -extern float d_sdivzorigin, d_tdivzorigin; - -void D_DrawSpansPow2(espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv); -void D_DrawZSpans(espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv); -void TurbulentPow2(espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv); -void NonTurbulentPow2(espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv); - -surfcache_t *D_CacheSurface(const entity_t *currententity, msurface_t *surface, int miplevel); - -extern int d_vrectx, d_vrecty, d_vrectright_particle, d_vrectbottom_particle; - -extern int d_pix_min, d_pix_max, d_pix_mul; - -extern pixel_t *d_viewbuffer; -extern zvalue_t *d_pzbuffer; - -extern int d_minmip; -extern float d_scalemip[NUM_MIPS-1]; - -extern int vid_buffer_height; -extern int vid_buffer_width; - - -//=================================================================== - -extern int cachewidth; -extern pixel_t *cacheblock; - -extern int r_drawnpolycount; - -extern int *sintable; -extern int *intsintable; -extern int *blanktable; - -extern vec3_t vup, base_vup; -extern vec3_t vpn, base_vpn; -extern vec3_t vright, base_vright; - -extern surf_t *surfaces, *surface_p, *surf_max; -// allow some very large lightmaps -extern light_t *blocklights, *blocklight_max; - -// surfaces are generated in back to front order by the bsp, so if a surf -// pointer is greater than another one, it should be drawn in front -// surfaces[1] is the background, and is used as the active surface stack. -// surfaces[0] is a dummy, because index 0 is used to indicate no surface -// attached to an edge_t - -//=================================================================== - -extern float xcenter, ycenter; -extern float xscale, yscale; -extern float xscaleinv, yscaleinv; -extern float xscaleshrink, yscaleshrink; - -extern void TransformVector(const vec3_t in, vec3_t out); - -//=========================================================================== - -extern cvar_t *sw_clearcolor; -extern cvar_t *sw_drawflat; -extern cvar_t *sw_draworder; -extern cvar_t *sw_mipcap; -extern cvar_t *sw_mipscale; -extern cvar_t *sw_stipplealpha; -extern cvar_t *sw_surfcacheoverride; -extern cvar_t *sw_waterwarp; -extern cvar_t *sw_gunzposition; -extern cvar_t *r_validation; -extern cvar_t *r_retexturing; -extern cvar_t *r_scale8bittextures; - -extern cvar_t *r_fullbright; -extern cvar_t *r_lefthand; -extern cvar_t *r_gunfov; -extern cvar_t *r_farsee; -extern cvar_t *r_lightmap; -extern cvar_t *r_colorlight; -extern cvar_t *r_drawworld; -extern cvar_t *r_lerpmodels; -extern cvar_t *r_lightlevel; -extern cvar_t *r_modulate; -extern cvar_t *r_fixsurfsky; -extern cvar_t *r_cull; - - -extern clipplane_t view_clipplanes[4]; -extern int *pfrustum_indexes[4]; -extern cplane_t frustum[4]; - - -//============================================================================= - -void R_RenderWorld(entity_t *currententity); - -//============================================================================= - -extern cplane_t screenedge[4]; - -extern vec3_t r_origin; - -extern vec3_t modelorg; -extern vec3_t r_entorigin; - -extern int r_visframecount; - -extern msurface_t *r_alpha_surfaces; - -//============================================================================= - -// -// current entity info -// -void R_DrawAlphaSurfaces(const entity_t *currententity); - -void R_DrawSprite(entity_t *currententity, const model_t *currentmodel); -void R_ClipAndDrawPoly(float alpha, int isturbulent, qboolean textured); -void R_RenderFace(entity_t *currententity, const model_t *currentmodel, msurface_t *fa, int clipflags, qboolean insubmodel); -void R_RenderBmodelFace(entity_t *currententity, bedge_t *pedges, msurface_t *psurf, int r_currentbkey); -void R_TransformFrustum(void); - -void R_DrawSubmodelPolygons(entity_t *currententity, const model_t *currentmodel, int clipflags, mnode_t *topnode); -void R_DrawSolidClippedSubmodelPolygons(entity_t *currententity, const model_t *currentmodel, mnode_t *topnode); - -void R_DrawAliasModel(entity_t *currententity, const model_t *currentmodel); -void R_BeginEdgeFrame(void); -void R_ScanEdges(entity_t *currententity, const surf_t *surface); -void R_PushDlights(const model_t *model); -void R_RotateBmodel(const entity_t *currententity); - -extern int c_faceclip; -extern int r_polycount; - -extern int sadjust, tadjust; -extern int bbextents, bbextentt; - -extern int r_currentkey; - -void R_DrawParticles (void); - -extern int r_amodels_drawn; -extern int r_numallocatededges; -extern edge_t *r_edges, *edge_p, *edge_max; - -extern edge_t **newedges; -extern edge_t **removeedges; - -typedef struct { - int u, v, count; - pixel_t *ptex; - int sfrac, tfrac; - light3_t light; - zvalue_t zi; -} spanpackage_t; -extern spanpackage_t *triangle_spans, *triangles_max; - -void R_PolysetDrawSpans8_33(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpans8_66(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpans8_Opaque(const entity_t *currententity, spanpackage_t *pspanpackage); - -extern byte **warp_rowptr; -extern int *warp_column; -extern espan_t *edge_basespans; -extern espan_t *max_span_p; -extern int r_numallocatedverts; -extern int r_numallocatededgebasespans; -extern finalvert_t *finalverts, *finalverts_max; - -extern int r_aliasblendcolor; - -extern float aliasxscale, aliasyscale, aliasxcenter, aliasycenter; - -extern qboolean r_outofsurfaces; -extern qboolean r_outofedges; -extern qboolean r_outofverts; -extern qboolean r_outoftriangles; -extern qboolean r_outoflights; -extern qboolean r_outedgebasespans; - -extern mvertex_t *r_pcurrentvertbase; - -void R_DrawTriangle(const entity_t *currententity, const finalvert_t *a, const finalvert_t *b, const finalvert_t *c); -void R_AliasClipTriangle(const entity_t *currententity, const finalvert_t *index0, const finalvert_t *index1, const finalvert_t *index2); - - -extern float r_time1; -extern float da_time1, da_time2; -extern float dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2; -extern float se_time1, se_time2, de_time1, de_time2; -extern int r_viewcluster, r_oldviewcluster; - -extern int r_clipflags; - -extern image_t *r_notexture_mip; -extern model_t *r_worldmodel; - -void R_PrintAliasStats (void); -void R_PrintTimes (void); -void R_PrintDSpeeds (void); -void R_LightPoint (const entity_t *currententity, vec3_t p, vec3_t color); -void R_SetupFrame (void); - -extern surfcache_t *sc_base; - -extern void *colormap; - -//==================================================================== - -void R_NewMap (void); -void Draw_InitLocal(void); -void R_InitCaches(void); -void D_FlushCaches(void); - -void RE_BeginRegistration (const char *model); -struct model_s *RE_RegisterModel (const char *name); -void RE_EndRegistration (void); - -struct image_s *RE_Draw_FindPic (const char *name); - -void RE_Draw_GetPicSize (int *w, int *h, const char *name); -void RE_Draw_PicScaled (int x, int y, const char *name, float scale); -void RE_Draw_StretchPic (int x, int y, int w, int h, const char *name); -void RE_Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte *data, int bits); -void RE_Draw_CharScaled (int x, int y, int c, float scale); -void RE_Draw_TileClear (int x, int y, int w, int h, const char *name); -void RE_Draw_Fill (int x, int y, int w, int h, int c); -void RE_Draw_FadeScreen (void); - -extern byte d_8to24table[256 * 4]; -void R_InitImages(void); -void R_ShutdownImages(void); -image_t *R_FindImage(const char *name, imagetype_t type); -byte *Get_BestImageSize(const image_t *image, int *req_width, int *req_height); -void R_FreeUnusedImages(void); -qboolean R_ImageHasFreeSpace(void); -pixel_t R_ApplyLight(pixel_t pix, const light3_t light); -void R_Convert32To8bit(const unsigned char* pic_in, pixel_t* pic_out, size_t size, qboolean transparent); - -void R_InitSkyBox(model_t *loadmodel); -void R_IMFlatShadedQuad( const vec3_t a, const vec3_t b, const vec3_t c, const vec3_t d, int color, float alpha ); - -// VID Buffer damage -void VID_DamageBuffer(int u, int v); - -// VID zBuffer damage -extern qboolean fastmoving; -void VID_DamageZBuffer(int u, int v); -qboolean VID_CheckDamageZBuffer(int u, int v, int ucount, int vcount); - -/* -==================================================================== - -IMPORTED FUNCTIONS - -==================================================================== -*/ -extern refimport_t ri; - -#endif diff --git a/src/client/refresh/soft/header/model.h b/src/client/refresh/soft/header/model.h deleted file mode 100644 index 8156b417a..000000000 --- a/src/client/refresh/soft/header/model.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#ifndef __MODEL__ -#define __MODEL__ - -/* - -d*_t structures are on-disk representations -m*_t structures are in-memory - -*/ - - -/* -============================================================================== - -BRUSH MODELS - -============================================================================== -*/ - -// -// in memory representation -// - -typedef struct msurface_s -{ - int visframe; // should be drawn when node is crossed - - int dlightframe; - int dlightbits; - - cplane_t *plane; - int flags; - - int firstedge; // look up in model->surfedges[], negative numbers - int numedges; // are backwards edges - - // surface generation data - struct surfcache_s *cachespots[MIPLEVELS]; - - short texturemins[2]; - short extents[2]; - - mtexinfo_t *texinfo; - - // lighting info - byte styles[MAXLIGHTMAPS]; - byte *samples; // [numstyles*surfsize*3] - - struct msurface_s *nextalphasurface; -} msurface_t; - -//=================================================================== - -// -// Whole model -// - -typedef struct model_s -{ - char name[MAX_QPATH]; - - int registration_sequence; - - modtype_t type; - int numframes; - - int flags; - - // - // volume occupied by the model graphics - // - vec3_t mins, maxs; - float radius; - - // - // solid volume for clipping (sent from server) - // - qboolean clipbox; - vec3_t clipmins, clipmaxs; - - // - // brush model - // - int firstmodelsurface, nummodelsurfaces; - - int numsubmodels; - struct model_s *submodels; - - int numplanes; - cplane_t *planes; - - int numleafs; // number of visible leafs, not counting 0 - mleaf_t *leafs; - - int numvertexes; - mvertex_t *vertexes; - - int numedges; - medge_t *edges; - - int numnodes; - int firstnode; - mnode_t *nodes; - - int numtexinfo; - mtexinfo_t *texinfo; - - int numsurfaces; - msurface_t *surfaces; - - int numsurfedges; - int *surfedges; - - int nummarksurfaces; - msurface_t **marksurfaces; - - dvis_t *vis; - - byte *lightdata; - - // for alias models and sprites - image_t *skins[MAX_MD2SKINS]; - void *extradata; - int extradatasize; - - // submodules - vec3_t origin; // for sounds or lights -} model_t; - -//============================================================================ - -void Mod_Init(void); - -const byte *Mod_ClusterPVS(int cluster, const model_t *model); - -void Mod_Modellist_f(void); -void Mod_FreeAll(void); -void Mod_Free(model_t *mod); - -extern int registration_sequence; - -#endif // __MODEL__ diff --git a/src/client/refresh/soft/sw_aclip.c b/src/client/refresh/soft/sw_aclip.c deleted file mode 100644 index df6d3a063..000000000 --- a/src/client/refresh/soft/sw_aclip.c +++ /dev/null @@ -1,298 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_aclip.c: clip routines for drawing Alias models directly to the screen - -#include "header/local.h" - -void R_AliasProjectAndClipTestFinalVert (finalvert_t *fv); - -/* -================ -R_Alias_clip_z - -pfv0 is the unclipped vertex, pfv1 is the z-clipped vertex -================ -*/ -static void -R_Alias_clip_z (const finalvert_t *pfv0, const finalvert_t *pfv1, finalvert_t *out) -{ - float scale; - int i; - - scale = (ALIAS_Z_CLIP_PLANE - pfv0->xyz[2]) / - (pfv1->xyz[2] - pfv0->xyz[2]); - - out->xyz[0] = pfv0->xyz[0] + (pfv1->xyz[0] - pfv0->xyz[0]) * scale; - out->xyz[1] = pfv0->xyz[1] + (pfv1->xyz[1] - pfv0->xyz[1]) * scale; - out->xyz[2] = ALIAS_Z_CLIP_PLANE; - - out->cv.s = pfv0->cv.s + (pfv1->cv.s - pfv0->cv.s) * scale; - out->cv.t = pfv0->cv.t + (pfv1->cv.t - pfv0->cv.t) * scale; - - for(i=0; i<3; i++) - out->cv.l[i] = pfv0->cv.l[i] + (pfv1->cv.l[i] - pfv0->cv.l[i]) * scale; - - R_AliasProjectAndClipTestFinalVert (out); -} - -static void -R_Alias_clip_scale (const finalvert_t *pfv0, const finalvert_t *pfv1, float scale, finalvert_t *out) -{ - int i; - - out->cv.u = pfv1->cv.u + ( pfv0->cv.u - pfv1->cv.u ) * scale + 0.5; - out->cv.v = pfv1->cv.v + ( pfv0->cv.v - pfv1->cv.v ) * scale + 0.5; - out->cv.s = pfv1->cv.s + ( pfv0->cv.s - pfv1->cv.s ) * scale + 0.5; - out->cv.t = pfv1->cv.t + ( pfv0->cv.t - pfv1->cv.t ) * scale + 0.5; - - for(i=0; i<3; i++) - out->cv.l[i] = pfv1->cv.l[i] + ( pfv0->cv.l[i] - pfv1->cv.l[i] ) * scale + 0.5; - - out->cv.zi = pfv1->cv.zi + ( pfv0->cv.zi - pfv1->cv.zi) * scale + 0.5; -} - -static void -R_Alias_clip_left (const finalvert_t *pfv0, const finalvert_t *pfv1, finalvert_t *out) -{ - float scale; - - if (pfv0->cv.v >= pfv1->cv.v ) - { - scale = (float)(r_refdef.aliasvrect.x - pfv0->cv.u) / - (pfv1->cv.u - pfv0->cv.u); - - R_Alias_clip_scale (pfv1, pfv0, scale, out); - } - else - { - scale = (float)(r_refdef.aliasvrect.x - pfv1->cv.u) / - (pfv0->cv.u - pfv1->cv.u); - - R_Alias_clip_scale (pfv0, pfv1, scale, out); - } -} - -static void -R_Alias_clip_right (const finalvert_t *pfv0, const finalvert_t *pfv1, finalvert_t *out) -{ - float scale; - - if ( pfv0->cv.v >= pfv1->cv.v ) - { - scale = (float)(r_refdef.aliasvrectright - pfv0->cv.u ) / - (pfv1->cv.u - pfv0->cv.u ); - - R_Alias_clip_scale (pfv1, pfv0, scale, out); - } - else - { - scale = (float)(r_refdef.aliasvrectright - pfv1->cv.u ) / - (pfv0->cv.u - pfv1->cv.u ); - - R_Alias_clip_scale (pfv0, pfv1, scale, out); - } -} - -static void -R_Alias_clip_top (const finalvert_t *pfv0, const finalvert_t *pfv1, finalvert_t *out) -{ - float scale; - - if (pfv0->cv.v >= pfv1->cv.v) - { - scale = (float)(r_refdef.aliasvrect.y - pfv0->cv.v) / - (pfv1->cv.v - pfv0->cv.v); - - R_Alias_clip_scale (pfv1, pfv0, scale, out); - } - else - { - scale = (float)(r_refdef.aliasvrect.y - pfv1->cv.v) / - (pfv0->cv.v - pfv1->cv.v); - - R_Alias_clip_scale (pfv0, pfv1, scale, out); - } -} - - -static void -R_Alias_clip_bottom (const finalvert_t *pfv0, const finalvert_t *pfv1, finalvert_t *out) -{ - float scale; - - if (pfv0->cv.v >= pfv1->cv.v) - { - scale = (float)(r_refdef.aliasvrectbottom - pfv0->cv.v) / - (pfv1->cv.v - pfv0->cv.v); - - R_Alias_clip_scale (pfv1, pfv0, scale, out); - } - else - { - scale = (float)(r_refdef.aliasvrectbottom - pfv1->cv.v) / - (pfv0->cv.v - pfv1->cv.v); - - R_Alias_clip_scale (pfv0, pfv1, scale, out); - } -} - - -int -R_AliasClip (const finalvert_t *in, finalvert_t *out, int flag, int count, - void(*clip)(const finalvert_t *pfv0, const finalvert_t *pfv1, finalvert_t *out) ) -{ - int i,j,k; - - j = count-1; - k = 0; - for (i=0 ; i r_refdef.aliasvrectright) - out[k].flags |= ALIAS_RIGHT_CLIP; - if (out[k].cv.v > r_refdef.aliasvrectbottom) - out[k].flags |= ALIAS_BOTTOM_CLIP; - k++; - } - if (!flags) - { - out[k] = in[i]; - k++; - } - j = i; - } - - return k; -} - - -/* -================ -R_AliasClipTriangle -================ -*/ -void -R_AliasClipTriangle(const entity_t *currententity, const finalvert_t *index0, const finalvert_t *index1, const finalvert_t *index2) -{ - int i, k, pingpong; - unsigned clipflags; - finalvert_t fv[2][8]; - - // copy vertexes and fix seam texture coordinates - fv[0][0] = *index0; - fv[0][1] = *index1; - fv[0][2] = *index2; - - // clip - clipflags = fv[0][0].flags | fv[0][1].flags | fv[0][2].flags; - - if (clipflags & ALIAS_Z_CLIP) - { - k = R_AliasClip (fv[0], fv[1], ALIAS_Z_CLIP, 3, R_Alias_clip_z); - if (k == 0) - return; - - pingpong = 1; - clipflags = fv[1][0].flags | fv[1][1].flags | fv[1][2].flags; - } - else - { - pingpong = 0; - k = 3; - } - - if (clipflags & ALIAS_LEFT_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_LEFT_CLIP, k, R_Alias_clip_left); - if (k == 0) - return; - - pingpong ^= 1; - } - - if (clipflags & ALIAS_RIGHT_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_RIGHT_CLIP, k, R_Alias_clip_right); - if (k == 0) - return; - - pingpong ^= 1; - } - - if (clipflags & ALIAS_BOTTOM_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_BOTTOM_CLIP, k, R_Alias_clip_bottom); - if (k == 0) - return; - - pingpong ^= 1; - } - - if (clipflags & ALIAS_TOP_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_TOP_CLIP, k, R_Alias_clip_top); - if (k == 0) - return; - - pingpong ^= 1; - } - - for (i=0 ; i r_refdef.aliasvrectright) - fv[pingpong][i].cv.u = r_refdef.aliasvrectright; - - if (fv[pingpong][i].cv.v < r_refdef.aliasvrect.y) - fv[pingpong][i].cv.v = r_refdef.aliasvrect.y; - else if (fv[pingpong][i].cv.v > r_refdef.aliasvrectbottom) - fv[pingpong][i].cv.v = r_refdef.aliasvrectbottom; - - fv[pingpong][i].flags = 0; - } - - // draw triangles - for (i=1 ; i -#include "header/local.h" - -#define LIGHT_MIN 5 // lowest light value we'll allow, to avoid the - // need for inner-loop light clamping - -int r_amodels_drawn; - -affinetridesc_t r_affinetridesc; - -static vec3_t r_plightvec; -static vec3_t r_lerp_frontv, r_lerp_backv, r_lerp_move; - -static light3_t r_ambientlight; -int r_aliasblendcolor; -static vec3_t r_shadelight; - - -static daliasframe_t *r_thisframe, *r_lastframe; -static dmdl_t *s_pmdl; - -static float aliastransform[3][4]; -static float aliasworldtransform[3][4]; -static float aliasoldworldtransform[3][4]; - -static float s_ziscale; -static vec3_t s_alias_forward, s_alias_right, s_alias_up; - - -#define NUMVERTEXNORMALS 162 - -static const float r_avertexnormals[NUMVERTEXNORMALS][3] = { -#include "../constants/anorms.h" -}; - - -static void R_AliasTransformVector(const vec3_t in, vec3_t out, const float xf[3][4]); -static void R_AliasTransformFinalVerts(const entity_t *currententity, int numpoints, finalvert_t *fv, dtrivertx_t *oldv, dtrivertx_t *newv ); - -void R_AliasProjectAndClipTestFinalVert(finalvert_t *fv); - - -/* -================ -R_AliasCheckBBox -================ -*/ - -#define BBOX_TRIVIAL_ACCEPT 0 -#define BBOX_MUST_CLIP_XY 1 -#define BBOX_MUST_CLIP_Z 2 -#define BBOX_TRIVIAL_REJECT 8 - -/* -** R_AliasCheckFrameBBox -** -** Checks a specific alias frame bounding box -*/ -static unsigned long -R_AliasCheckFrameBBox( daliasframe_t *frame, float worldxf[3][4] ) -{ - // FIXME: should this really be using long and not int32_t or sth? - unsigned long aggregate_and_clipcode = ~0U, - aggregate_or_clipcode = 0; - int i; - vec3_t mins, maxs; - vec3_t transformed_min, transformed_max; - qboolean zfullyclipped = true; - - /* - ** get the exact frame bounding box - */ - for (i=0 ; i<3 ; i++) - { - mins[i] = frame->translate[i]; - maxs[i] = mins[i] + frame->scale[i] * 255; - } - - /* - ** transform the min and max values into view space - */ - R_AliasTransformVector( mins, transformed_min, aliastransform ); - R_AliasTransformVector( maxs, transformed_max, aliastransform ); - - if ( transformed_min[2] >= ALIAS_Z_CLIP_PLANE ) - { - zfullyclipped = false; - } - - if ( transformed_max[2] >= ALIAS_Z_CLIP_PLANE ) - { - zfullyclipped = false; - } - - if ( zfullyclipped ) - { - return BBOX_TRIVIAL_REJECT; - } - - /* - ** build a transformed bounding box from the given min and max - */ - for ( i = 0; i < 8; i++ ) - { - int j; - vec3_t tmp, transformed; - unsigned long clipcode = 0; - - if ( i & 1 ) - { - tmp[0] = mins[0]; - } - else - { - tmp[0] = maxs[0]; - } - - if ( i & 2 ) - { - tmp[1] = mins[1]; - } - else - { - tmp[1] = maxs[1]; - } - - if ( i & 4 ) - { - tmp[2] = mins[2]; - } - else - { - tmp[2] = maxs[2]; - } - - R_AliasTransformVector( tmp, transformed, worldxf ); - - for ( j = 0; j < 4; j++ ) - { - float dp = DotProduct( transformed, view_clipplanes[j].normal ); - - if ( ( dp - view_clipplanes[j].dist ) < 0.0F ) - { - clipcode |= 1 << j; - } - } - - aggregate_and_clipcode &= clipcode; - aggregate_or_clipcode |= clipcode; - } - - if ( aggregate_and_clipcode ) - { - return BBOX_TRIVIAL_REJECT; - } - if ( !aggregate_or_clipcode ) - { - return BBOX_TRIVIAL_ACCEPT; - } - - return BBOX_MUST_CLIP_XY; -} - -static int -R_AliasCheckBBox (const entity_t *currententity) -{ - unsigned long ccodes[2] = { 0, 0 }; - - ccodes[0] = R_AliasCheckFrameBBox( r_thisframe, aliasworldtransform ); - - /* - ** non-lerping model - */ - if ( currententity->backlerp == 0 ) - { - if ( ccodes[0] == BBOX_TRIVIAL_ACCEPT ) - return BBOX_TRIVIAL_ACCEPT; - else if ( ccodes[0] & BBOX_TRIVIAL_REJECT ) - return BBOX_TRIVIAL_REJECT; - else - return ( ccodes[0] & ~BBOX_TRIVIAL_REJECT ); - } - - ccodes[1] = R_AliasCheckFrameBBox( r_lastframe, aliasoldworldtransform ); - - if ( ( ccodes[0] | ccodes[1] ) == BBOX_TRIVIAL_ACCEPT ) - return BBOX_TRIVIAL_ACCEPT; - else if ( ( ccodes[0] & ccodes[1] ) & BBOX_TRIVIAL_REJECT ) - return BBOX_TRIVIAL_REJECT; - else - return ( ccodes[0] | ccodes[1] ) & ~BBOX_TRIVIAL_REJECT; -} - - -/* -================ -R_AliasTransformVector -================ -*/ -static void -R_AliasTransformVector(const vec3_t in, vec3_t out, const float xf[3][4] ) -{ - out[0] = DotProduct(in, xf[0]) + xf[0][3]; - out[1] = DotProduct(in, xf[1]) + xf[1][3]; - out[2] = DotProduct(in, xf[2]) + xf[2][3]; -} - - -/* -================ -R_AliasPreparePoints - -General clipped case -================ -*/ - -static void -R_AliasPreparePoints (const entity_t *currententity, finalvert_t *verts, const finalvert_t *verts_max) -{ - int i; - dstvert_t *pstverts; - dtriangle_t *ptri; - finalvert_t *pfv[3]; - - if ((verts + s_pmdl->num_xyz) >= verts_max) - { - r_outofverts = true; - return; - } - - R_AliasTransformFinalVerts(currententity, - s_pmdl->num_xyz, - verts, // destination for transformed verts - r_lastframe->verts, // verts from the last frame - r_thisframe->verts // verts from this frame - ); - - // clip and draw all triangles - // - pstverts = (dstvert_t *)((byte *)s_pmdl + s_pmdl->ofs_st); - ptri = (dtriangle_t *)((byte *)s_pmdl + s_pmdl->ofs_tris); - - if ( ( currententity->flags & RF_WEAPONMODEL ) && ( r_lefthand->value == 1.0F ) ) - { - for (i=0 ; inum_tris ; i++, ptri++) - { - pfv[0] = &verts[ptri->index_xyz[0]]; - pfv[1] = &verts[ptri->index_xyz[1]]; - pfv[2] = &verts[ptri->index_xyz[2]]; - - if ( pfv[0]->flags & pfv[1]->flags & pfv[2]->flags ) - continue; // completely clipped - - // insert s/t coordinates - pfv[0]->cv.s = pstverts[ptri->index_st[0]].s << SHIFT16XYZ; - pfv[0]->cv.t = pstverts[ptri->index_st[0]].t << SHIFT16XYZ; - - pfv[1]->cv.s = pstverts[ptri->index_st[1]].s << SHIFT16XYZ; - pfv[1]->cv.t = pstverts[ptri->index_st[1]].t << SHIFT16XYZ; - - pfv[2]->cv.s = pstverts[ptri->index_st[2]].s << SHIFT16XYZ; - pfv[2]->cv.t = pstverts[ptri->index_st[2]].t << SHIFT16XYZ; - - if ( ! (pfv[0]->flags | pfv[1]->flags | pfv[2]->flags) ) - { - // totally unclipped - R_DrawTriangle(currententity, pfv[2], pfv[1], pfv[0]); - } - else - { - R_AliasClipTriangle(currententity, pfv[2], pfv[1], pfv[0]); - } - } - } - else - { - for (i=0 ; inum_tris ; i++, ptri++) - { - pfv[0] = &verts[ptri->index_xyz[0]]; - pfv[1] = &verts[ptri->index_xyz[1]]; - pfv[2] = &verts[ptri->index_xyz[2]]; - - if ( pfv[0]->flags & pfv[1]->flags & pfv[2]->flags ) - continue; // completely clipped - - // insert s/t coordinates - pfv[0]->cv.s = pstverts[ptri->index_st[0]].s << SHIFT16XYZ; - pfv[0]->cv.t = pstverts[ptri->index_st[0]].t << SHIFT16XYZ; - - pfv[1]->cv.s = pstverts[ptri->index_st[1]].s << SHIFT16XYZ; - pfv[1]->cv.t = pstverts[ptri->index_st[1]].t << SHIFT16XYZ; - - pfv[2]->cv.s = pstverts[ptri->index_st[2]].s << SHIFT16XYZ; - pfv[2]->cv.t = pstverts[ptri->index_st[2]].t << SHIFT16XYZ; - - if ( ! (pfv[0]->flags | pfv[1]->flags | pfv[2]->flags) ) - { - // totally unclipped - R_DrawTriangle(currententity, pfv[0], pfv[1], pfv[2]); - } - else - { // partially clipped - R_AliasClipTriangle(currententity, pfv[0], pfv[1], pfv[2]); - } - } - } -} - - -/* -================ -R_AliasSetUpTransform -================ -*/ -static void -R_AliasSetUpTransform(const entity_t *currententity) -{ - int i; - static float viewmatrix[3][4]; - - // TODO: should really be stored with the entity instead of being reconstructed - // TODO: should use a look-up table - // TODO: could cache lazily, stored in the entity - // - // AngleVectors never change angles, we can convert from const - AngleVectors((float *)currententity->angles, s_alias_forward, s_alias_right, s_alias_up ); - - // TODO: can do this with simple matrix rearrangement - memset( aliasworldtransform, 0, sizeof( aliasworldtransform ) ); - memset( aliasoldworldtransform, 0, sizeof( aliasworldtransform ) ); - - for (i=0 ; i<3 ; i++) - { - aliasoldworldtransform[i][0] = aliasworldtransform[i][0] = s_alias_forward[i]; - aliasoldworldtransform[i][1] = aliasworldtransform[i][1] = -s_alias_right[i]; - aliasoldworldtransform[i][2] = aliasworldtransform[i][2] = s_alias_up[i]; - } - - aliasworldtransform[0][3] = currententity->origin[0]-r_origin[0]; - aliasworldtransform[1][3] = currententity->origin[1]-r_origin[1]; - aliasworldtransform[2][3] = currententity->origin[2]-r_origin[2]; - - aliasoldworldtransform[0][3] = currententity->oldorigin[0]-r_origin[0]; - aliasoldworldtransform[1][3] = currententity->oldorigin[1]-r_origin[1]; - aliasoldworldtransform[2][3] = currententity->oldorigin[2]-r_origin[2]; - - // FIXME: can do more efficiently than full concatenation - // memcpy( rotationmatrix, t2matrix, sizeof( rotationmatrix ) ); - - // R_ConcatTransforms (t2matrix, tmatrix, rotationmatrix); - - // TODO: should be global, set when vright, etc., set - VectorCopy (vright, viewmatrix[0]); - VectorCopy (vup, viewmatrix[1]); - VectorInverse (viewmatrix[1]); - VectorCopy (vpn, viewmatrix[2]); - - if ( currententity->flags & RF_WEAPONMODEL ) - { - viewmatrix[0][3] = 0; - viewmatrix[1][3] = 0; - viewmatrix[2][3] = sw_gunzposition->value; - } - else - { - viewmatrix[0][3] = 0; - viewmatrix[1][3] = 0; - viewmatrix[2][3] = 0; - } - - // memcpy( aliasworldtransform, rotationmatrix, sizeof( aliastransform ) ); - - R_ConcatTransforms (viewmatrix, aliasworldtransform, aliastransform); - - aliasworldtransform[0][3] = currententity->origin[0]; - aliasworldtransform[1][3] = currententity->origin[1]; - aliasworldtransform[2][3] = currententity->origin[2]; - - aliasoldworldtransform[0][3] = currententity->oldorigin[0]; - aliasoldworldtransform[1][3] = currententity->oldorigin[1]; - aliasoldworldtransform[2][3] = currententity->oldorigin[2]; -} - - -/* -================ -R_AliasTransformFinalVerts -================ -*/ -static void -R_AliasTransformFinalVerts(const entity_t *currententity, int numpoints, finalvert_t *fv, dtrivertx_t *oldv, dtrivertx_t *newv ) -{ - int i; - - for ( i = 0; i < numpoints; i++, fv++, oldv++, newv++ ) - { - float lightcos; - const float *plightnormal; - vec3_t lerped_vert; - - lerped_vert[0] = r_lerp_move[0] + oldv->v[0]*r_lerp_backv[0] + newv->v[0]*r_lerp_frontv[0]; - lerped_vert[1] = r_lerp_move[1] + oldv->v[1]*r_lerp_backv[1] + newv->v[1]*r_lerp_frontv[1]; - lerped_vert[2] = r_lerp_move[2] + oldv->v[2]*r_lerp_backv[2] + newv->v[2]*r_lerp_frontv[2]; - - plightnormal = r_avertexnormals[newv->lightnormalindex]; - - // added double damage shell - if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM) ) - { - lerped_vert[0] += plightnormal[0] * POWERSUIT_SCALE; - lerped_vert[1] += plightnormal[1] * POWERSUIT_SCALE; - lerped_vert[2] += plightnormal[2] * POWERSUIT_SCALE; - } - - fv->xyz[0] = DotProduct(lerped_vert, aliastransform[0]) + aliastransform[0][3]; - fv->xyz[1] = DotProduct(lerped_vert, aliastransform[1]) + aliastransform[1][3]; - fv->xyz[2] = DotProduct(lerped_vert, aliastransform[2]) + aliastransform[2][3]; - - fv->flags = 0; - - // lighting - lightcos = DotProduct (plightnormal, r_plightvec); - - if (lightcos < 0) - { - int j; - - for(j=0; j<3; j++) - { - int temp; - - temp = r_ambientlight[j]; - - temp += (r_shadelight[j] * lightcos); - - // clamp; because we limited the minimum ambient and shading light, we - // don't have to clamp low light, just bright - if (temp < 0) - temp = 0; - - fv->cv.l[j] = temp; - } - } - else - memcpy(fv->cv.l, r_ambientlight, sizeof(light3_t)); - - if ( fv->xyz[2] < ALIAS_Z_CLIP_PLANE ) - { - fv->flags |= ALIAS_Z_CLIP; - } - else - { - R_AliasProjectAndClipTestFinalVert( fv ); - } - } - -} - -/* -================ -R_AliasProjectAndClipTestFinalVert -================ -*/ -void -R_AliasProjectAndClipTestFinalVert( finalvert_t *fv ) -{ - float zi; - float x, y, z; - - // project points - x = fv->xyz[0]; - y = fv->xyz[1]; - z = fv->xyz[2]; - zi = 1.0 / z; - - fv->cv.zi = zi * s_ziscale; - - fv->cv.u = (x * aliasxscale * zi) + aliasxcenter; - fv->cv.v = (y * aliasyscale * zi) + aliasycenter; - - if (fv->cv.u < r_refdef.aliasvrect.x) - fv->flags |= ALIAS_LEFT_CLIP; - if (fv->cv.v < r_refdef.aliasvrect.y) - fv->flags |= ALIAS_TOP_CLIP; - if (fv->cv.u > r_refdef.aliasvrectright) - fv->flags |= ALIAS_RIGHT_CLIP; - if (fv->cv.v > r_refdef.aliasvrectbottom) - fv->flags |= ALIAS_BOTTOM_CLIP; -} - -/* -=============== -R_AliasSetupSkin -=============== -*/ -static qboolean -R_AliasSetupSkin(const entity_t *currententity, const model_t *currentmodel) -{ - image_t *pskindesc; - - if (currententity->skin) - { - pskindesc = currententity->skin; - } - else - { - int skinnum; - - skinnum = currententity->skinnum; - if ((skinnum >= s_pmdl->num_skins) || (skinnum < 0)) - { - Com_Printf("%s %s: no such skin # %d\n", - __func__, currentmodel->name, skinnum); - skinnum = 0; - } - - pskindesc = currentmodel->skins[skinnum]; - } - - if ( !pskindesc ) - return false; - - r_affinetridesc.pskin = pskindesc->pixels[0]; - r_affinetridesc.skinwidth = pskindesc->asset_width; - r_affinetridesc.skinheight = pskindesc->asset_height; - r_affinetridesc.scalewidth = (float)pskindesc->asset_width / s_pmdl->skinwidth; - r_affinetridesc.scaleheight = (float)pskindesc->asset_height / s_pmdl->skinheight; - - return true; -} - - -/* -================ -R_AliasSetupLighting - - FIXME: put lighting into tables -================ -*/ -static void -R_AliasSetupLighting(entity_t *currententity) -{ - const vec3_t lightvec = {-1, 0, 0}; - vec3_t light; - int i; - - // all components of light should be identical in software - if ( currententity->flags & RF_FULLBRIGHT ) - { - for (i=0 ; i<3 ; i++) - light[i] = 1.0; - } - else - { - R_LightPoint (currententity, currententity->origin, light); - } - - // save off light value for server to look at (BIG HACK!) - if ( currententity->flags & RF_WEAPONMODEL ) - r_lightlevel->value = 150.0 * light[0]; - - - if ( currententity->flags & RF_MINLIGHT ) - { - for (i=0 ; i<3 ; i++) - if (light[i] < 0.1) - light[i] = 0.1; - } - - if ( currententity->flags & RF_GLOW ) - { // bonus items will pulse with time - float scale; - - scale = 0.1 * sin(r_newrefdef.time*7); - for (i=0 ; i<3 ; i++) - { - float min; - - min = light[i] * 0.8; - light[i] += scale; - if (light[i] < min) - light[i] = min; - } - } - - if(r_colorlight->value == 0) - { - float temp = (light[0] + light[1] + light[2]) / 3.0; - - light[0] = light[1] = light[2] = temp; - } - - for(i=0; i<3; i++) - { - int j; - - j = light[i] * 255; - - r_ambientlight[i] = j; - r_shadelight[i] = j; - - // clamp lighting so it doesn't overbright as much - if (r_ambientlight[i] > 128) - r_ambientlight[i] = 128; - if (r_ambientlight[i] + r_shadelight[i] > 192) - r_shadelight[i] = 192 - r_ambientlight[i]; - - // guarantee that no vertex will ever be lit below LIGHT_MIN, so we don't have - // to clamp off the bottom - if (r_ambientlight[i] < LIGHT_MIN) - r_ambientlight[i] = LIGHT_MIN; - - r_ambientlight[i] = (255 - r_ambientlight[i]) << VID_CBITS; - - if (r_shadelight[i] < 0) - r_shadelight[i] = 0; - - r_shadelight[i] *= VID_GRADES; - } - - // rotate the lighting vector into the model's frame of reference - r_plightvec[0] = DotProduct( lightvec, s_alias_forward ); - r_plightvec[1] = -DotProduct( lightvec, s_alias_right ); - r_plightvec[2] = DotProduct( lightvec, s_alias_up ); -} - - -/* -================= -R_AliasSetupFrames - -================= -*/ -static void -R_AliasSetupFrames(const entity_t *currententity, const model_t *currentmodel, dmdl_t *pmdl) -{ - int thisframe = currententity->frame; - int lastframe = currententity->oldframe; - - if ( ( thisframe >= pmdl->num_frames ) || ( thisframe < 0 ) ) - { - Com_Printf("%s %s: no such thisframe %d\n", - __func__, currentmodel->name, thisframe); - thisframe = 0; - } - if ( ( lastframe >= pmdl->num_frames ) || ( lastframe < 0 ) ) - { - Com_Printf("%s %s: no such lastframe %d\n", - __func__, currentmodel->name, lastframe); - lastframe = 0; - } - - r_thisframe = (daliasframe_t *)((byte *)pmdl + pmdl->ofs_frames - + thisframe * pmdl->framesize); - - r_lastframe = (daliasframe_t *)((byte *)pmdl + pmdl->ofs_frames - + lastframe * pmdl->framesize); -} - -/* -** R_AliasSetUpLerpData -** -** Precomputes lerp coefficients used for the whole frame. -*/ -static void -R_AliasSetUpLerpData(entity_t *currententity, dmdl_t *pmdl, float backlerp) -{ - float frontlerp; - vec3_t translation, vectors[3]; - int i; - - frontlerp = 1.0F - backlerp; - - /* - ** convert entity's angles into discrete vectors for R, U, and F - */ - AngleVectors (currententity->angles, vectors[0], vectors[1], vectors[2]); - - /* - ** translation is the vector from last position to this position - */ - VectorSubtract (currententity->oldorigin, currententity->origin, translation); - - /* - ** move should be the delta back to the previous frame * backlerp - */ - r_lerp_move[0] = DotProduct(translation, vectors[0]); // forward - r_lerp_move[1] = -DotProduct(translation, vectors[1]); // left - r_lerp_move[2] = DotProduct(translation, vectors[2]); // up - - VectorAdd( r_lerp_move, r_lastframe->translate, r_lerp_move ); - - for (i=0 ; i<3 ; i++) - { - r_lerp_move[i] = backlerp*r_lerp_move[i] + frontlerp * r_thisframe->translate[i]; - } - - for (i=0 ; i<3 ; i++) - { - r_lerp_frontv[i] = frontlerp * r_thisframe->scale[i]; - r_lerp_backv[i] = backlerp * r_lastframe->scale[i]; - } -} - -finalvert_t *finalverts = NULL, *finalverts_max = NULL; - -extern void (*d_pdrawspans)(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpans8_Opaque(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpans8_33(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpans8_66(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpansConstant8_33(const entity_t *currententity, spanpackage_t *pspanpackage); -void R_PolysetDrawSpansConstant8_66(const entity_t *currententity, spanpackage_t *pspanpackage); - -/* -================ -R_DrawAliasModel -================ -*/ -void -R_DrawAliasModel(entity_t *currententity, const model_t *currentmodel) -{ - s_pmdl = (dmdl_t *)currentmodel->extradata; - - if ( r_lerpmodels->value == 0 ) - currententity->backlerp = 0; - - float oldAliasxscale = aliasxscale; - float oldAliasyscale = aliasyscale; - - if ( currententity->flags & RF_WEAPONMODEL ) - { - if ( r_lefthand->value == 2.0F ) - { - return; - } - - if (r_gunfov->value >= 0) - { - float gunfov = 2 * tan((float)r_gunfov->value / 360 * M_PI); - aliasxscale = ((float)r_refdef.vrect.width / gunfov) * r_aliasuvscale; - aliasyscale = aliasxscale; - } - - if ( r_lefthand->value == 1.0F ) - aliasxscale = -aliasxscale; - } - - /* - ** we have to set our frame pointers and transformations before - ** doing any real work - */ - R_AliasSetupFrames(currententity, currentmodel, s_pmdl); - R_AliasSetUpTransform(currententity); - - // see if the bounding box lets us trivially reject, also sets - // trivial accept status - if ( R_AliasCheckBBox(currententity) == BBOX_TRIVIAL_REJECT ) - { - if ( currententity->flags & RF_WEAPONMODEL ) - { - aliasxscale = oldAliasxscale; - aliasyscale = oldAliasyscale; - } - return; - } - - // set up the skin and verify it exists - if ( !R_AliasSetupSkin(currententity, currentmodel) ) - { - Com_Printf("R_DrawAliasModel %s: NULL skin found\n", - currentmodel->name); - aliasxscale = oldAliasxscale; - aliasyscale = oldAliasyscale; - return; - } - - r_amodels_drawn++; - R_AliasSetupLighting(currententity); - - /* - ** select the proper span routine based on translucency - */ - // added double damage shell - // reordered to handle blending - if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM) ) - { - int color; - - // added double - color = currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM); - - // reordered, new shells after old shells (so they get overriden) - if ( color == RF_SHELL_RED ) - r_aliasblendcolor = SHELL_RED_COLOR; - else if ( color == RF_SHELL_GREEN ) - r_aliasblendcolor = SHELL_GREEN_COLOR; - else if ( color == RF_SHELL_BLUE ) - r_aliasblendcolor = SHELL_BLUE_COLOR; - else if ( color == (RF_SHELL_RED | RF_SHELL_GREEN) ) - r_aliasblendcolor = SHELL_RG_COLOR; - else if ( color == (RF_SHELL_RED | RF_SHELL_BLUE) ) - r_aliasblendcolor = SHELL_RB_COLOR; - else if ( color == (RF_SHELL_BLUE | RF_SHELL_GREEN) ) - r_aliasblendcolor = SHELL_BG_COLOR; - // added this .. it's yellowish - else if ( color == (RF_SHELL_DOUBLE) ) - r_aliasblendcolor = SHELL_DOUBLE_COLOR; - else if ( color == (RF_SHELL_HALF_DAM) ) - r_aliasblendcolor = SHELL_HALF_DAM_COLOR; - else - r_aliasblendcolor = SHELL_WHITE_COLOR; - - if ( currententity->alpha > 0.33 ) - d_pdrawspans = R_PolysetDrawSpansConstant8_66; - else - d_pdrawspans = R_PolysetDrawSpansConstant8_33; - } - else if ( currententity->flags & RF_TRANSLUCENT ) - { - if ( currententity->alpha > 0.66 ) - d_pdrawspans = R_PolysetDrawSpans8_Opaque; - else if ( currententity->alpha > 0.33 ) - d_pdrawspans = R_PolysetDrawSpans8_66; - else - d_pdrawspans = R_PolysetDrawSpans8_33; - } - else - { - d_pdrawspans = R_PolysetDrawSpans8_Opaque; - } - - /* - ** compute this_frame and old_frame addresses - */ - R_AliasSetUpLerpData(currententity, s_pmdl, currententity->backlerp); - - if (currententity->flags & RF_DEPTHHACK) - s_ziscale = (float)0x8000 * (float)SHIFT16XYZ_MULT * 3.0; - else - s_ziscale = (float)0x8000 * (float)SHIFT16XYZ_MULT; - - R_AliasPreparePoints(currententity, finalverts, finalverts_max); - - if ( currententity->flags & RF_WEAPONMODEL ) - { - aliasxscale = oldAliasxscale; - aliasyscale = oldAliasyscale; - } -} diff --git a/src/client/refresh/soft/sw_bsp.c b/src/client/refresh/soft/sw_bsp.c deleted file mode 100644 index 8288d3b4b..000000000 --- a/src/client/refresh/soft/sw_bsp.c +++ /dev/null @@ -1,622 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_bsp.c - -#include "header/local.h" - -// -// current entity info -// -vec3_t modelorg; // modelorg is the viewpoint reletive to - // the currently rendering entity -vec3_t r_entorigin; // the currently rendering entity in world - // coordinates - -static float entity_rotation[3][3]; - -typedef enum {touchessolid, drawnode, nodrawnode} solidstate_t; - -#define MAX_BMODEL_VERTS 500 // 6K -#define MAX_BMODEL_EDGES 1000 // 12K - -static int numbverts, numbedges; -static mvertex_t bverts[MAX_BMODEL_VERTS]; -static bedge_t bedges[MAX_BMODEL_EDGES]; - -//=========================================================================== - -/* -================ -R_EntityRotate -================ -*/ -static void -R_EntityRotate (vec3_t vec) -{ - vec3_t tvec; - - VectorCopy (vec, tvec); - vec[0] = DotProduct (entity_rotation[0], tvec); - vec[1] = DotProduct (entity_rotation[1], tvec); - vec[2] = DotProduct (entity_rotation[2], tvec); -} - -/* -================ -R_RotateBmodel -================ -*/ -void -R_RotateBmodel(const entity_t *currententity) -{ - float angle, s, c, temp1[3][3], temp2[3][3], temp3[3][3]; - - // TODO: should use a look-up table - // TODO: should really be stored with the entity instead of being reconstructed - // TODO: could cache lazily, stored in the entity - // TODO: share work with R_SetUpAliasTransform - - // yaw - angle = currententity->angles[YAW]; - angle = angle * M_PI*2 / 360; - s = sin(angle); - c = cos(angle); - - temp1[0][0] = c; - temp1[0][1] = s; - temp1[0][2] = 0; - temp1[1][0] = -s; - temp1[1][1] = c; - temp1[1][2] = 0; - temp1[2][0] = 0; - temp1[2][1] = 0; - temp1[2][2] = 1; - - - // pitch - angle = currententity->angles[PITCH]; - angle = angle * M_PI*2 / 360; - s = sin(angle); - c = cos(angle); - - temp2[0][0] = c; - temp2[0][1] = 0; - temp2[0][2] = -s; - temp2[1][0] = 0; - temp2[1][1] = 1; - temp2[1][2] = 0; - temp2[2][0] = s; - temp2[2][1] = 0; - temp2[2][2] = c; - - R_ConcatRotations (temp2, temp1, temp3); - - // roll - angle = currententity->angles[ROLL]; - angle = angle * M_PI*2 / 360; - s = sin(angle); - c = cos(angle); - - temp1[0][0] = 1; - temp1[0][1] = 0; - temp1[0][2] = 0; - temp1[1][0] = 0; - temp1[1][1] = c; - temp1[1][2] = s; - temp1[2][0] = 0; - temp1[2][1] = -s; - temp1[2][2] = c; - - R_ConcatRotations (temp1, temp3, entity_rotation); - - // - // rotate modelorg and the transformation matrix - // - R_EntityRotate (modelorg); - R_EntityRotate (vpn); - R_EntityRotate (vright); - R_EntityRotate (vup); - - R_TransformFrustum (); -} - -/* -================ -R_RecursiveClipBPoly - -Clip a bmodel poly down the world bsp tree -================ -*/ -static void -R_RecursiveClipBPoly(entity_t *currententity, bedge_t *pedges, mnode_t *pnode, msurface_t *psurf) -{ - bedge_t *psideedges[2], *pnextedge; - int i, side, lastside; - cplane_t *splitplane, tplane; - mvertex_t *pvert, *plastvert, *ptvert; - mnode_t *pn; - mvertex_t *prevclipvert = NULL; - - psideedges[0] = psideedges[1] = NULL; - - // transform the BSP plane into model space - // FIXME: cache these? - splitplane = pnode->plane; - tplane.dist = splitplane->dist - - DotProduct(r_entorigin, splitplane->normal); - tplane.normal[0] = DotProduct (entity_rotation[0], splitplane->normal); - tplane.normal[1] = DotProduct (entity_rotation[1], splitplane->normal); - tplane.normal[2] = DotProduct (entity_rotation[2], splitplane->normal); - - // clip edges to BSP plane - for (; pedges; pedges = pnextedge) - { - float dist, lastdist; - bedge_t *ptedge; - - pnextedge = pedges->pnext; - - // set the status for the last point as the previous point - // FIXME: cache this stuff somehow? - plastvert = pedges->v[0]; - lastdist = DotProduct (plastvert->position, tplane.normal) - tplane.dist; - if (lastdist >= 0) - lastside = 0; - else - lastside = 1; - - pvert = pedges->v[1]; - dist = DotProduct (pvert->position, tplane.normal) - tplane.dist; - if (dist >= 0) - side = 0; - else - side = 1; - - if (side != lastside) - { - float frac; - - // clipped - if (numbverts >= MAX_BMODEL_VERTS) - return; - - // generate the clipped vertex - frac = lastdist / (lastdist - dist); - ptvert = &bverts[numbverts++]; - ptvert->position[0] = plastvert->position[0] + - frac * (pvert->position[0] - - plastvert->position[0]); - ptvert->position[1] = plastvert->position[1] + - frac * (pvert->position[1] - - plastvert->position[1]); - ptvert->position[2] = plastvert->position[2] + - frac * (pvert->position[2] - - plastvert->position[2]); - - // split into two edges, one on each side, and remember entering - // and exiting points - // FIXME: share the clip edge by having a winding direction flag? - if (numbedges + 4 > MAX_BMODEL_EDGES) - { - Com_Printf("Out of edges for bmodel\n"); - return; - } - - // outside: last vert, clip vert - ptedge = &bedges[numbedges++]; - ptedge->pnext = psideedges[lastside]; - psideedges[lastside] = ptedge; - ptedge->v[0] = plastvert; - ptedge->v[1] = ptvert; - - // each two clipped verts we get a clipped-off contour; - // connect the verts by two edges (one per side) - // going in opposite directions - // this fixes surface 0 of model *50 (fan) in mine2: - // teleport 1231 770 -579 - if (prevclipvert) - { - ptedge = &bedges[numbedges++]; - ptedge->pnext = psideedges[lastside]; - psideedges[lastside] = ptedge; - ptedge->v[0] = ptvert; - ptedge->v[1] = prevclipvert; - - ptedge = &bedges[numbedges++]; - ptedge->pnext = psideedges[side]; - psideedges[side] = ptedge; - ptedge->v[0] = prevclipvert; - ptedge->v[1] = ptvert; - - prevclipvert = NULL; - } else - prevclipvert = ptvert; - - // inside: clip vert, current vert - ptedge = &bedges[numbedges++]; - ptedge->pnext = psideedges[side]; - psideedges[side] = ptedge; - ptedge->v[0] = ptvert; - ptedge->v[1] = pvert; - } - else - { - // add the edge to the appropriate side - pedges->pnext = psideedges[side]; - psideedges[side] = pedges; - } - } - - // draw or recurse further - for (i=0 ; i<2 ; i++) - { - if (psideedges[i]) - { - // draw if we've reached a non-solid leaf, done if all that's left is a - // solid leaf, and continue down the tree if it's not a leaf - pn = pnode->children[i]; - - // we're done with this branch if the node or leaf isn't in the PVS - if (pn->visframe == r_visframecount) - { - if (pn->contents != CONTENTS_NODE) - { - if (pn->contents != CONTENTS_SOLID) - { - int r_currentbkey; - - if (!R_AreaVisible(r_newrefdef.areabits, (mleaf_t *)pn)) - continue; - - r_currentbkey = ((mleaf_t *)pn)->key; - R_RenderBmodelFace(currententity, psideedges[i], psurf, r_currentbkey); - } - } - else - { - R_RecursiveClipBPoly(currententity, psideedges[i], pnode->children[i], - psurf); - } - } - } - } -} - -/* -================ -R_DrawSolidClippedSubmodelPolygons - -Bmodel crosses multiple leafs -================ -*/ -void -R_DrawSolidClippedSubmodelPolygons(entity_t *currententity, const model_t *currentmodel, mnode_t *topnode) -{ - int i; - msurface_t *psurf; - int numsurfaces; - medge_t *pedges; - - // FIXME: use bounding-box-based frustum clipping info? - psurf = ¤tmodel->surfaces[currentmodel->firstmodelsurface]; - numsurfaces = currentmodel->nummodelsurfaces; - pedges = currentmodel->edges; - - for (i=0 ; iplane; - - dot = DotProduct (modelorg, pplane->normal) - pplane->dist; - - // draw the polygon - if (( !(psurf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || - ((psurf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON))) - continue; - - // FIXME: use bounding-box-based frustum clipping info? - - // copy the edges to bedges, flipping if necessary so always - // clockwise winding - // FIXME: if edges and vertices get caches, these assignments must move - // outside the loop, and overflow checking must be done here - numbverts = numbedges = 0; - pbedge = &bedges[numbedges]; - numbedges += psurf->numedges; - - for (j=0 ; jnumedges ; j++) - { - int lindex; - - lindex = currentmodel->surfedges[psurf->firstedge+j]; - - if (lindex > 0) - { - medge_t *pedge; - - pedge = &pedges[lindex]; - pbedge[j].v[0] = &r_pcurrentvertbase[pedge->v[0]]; - pbedge[j].v[1] = &r_pcurrentvertbase[pedge->v[1]]; - } - else - { - medge_t *pedge; - - lindex = -lindex; - pedge = &pedges[lindex]; - pbedge[j].v[0] = &r_pcurrentvertbase[pedge->v[1]]; - pbedge[j].v[1] = &r_pcurrentvertbase[pedge->v[0]]; - } - - pbedge[j].pnext = &pbedge[j+1]; - } - - pbedge[j-1].pnext = NULL; // mark end of edges - - if ( !( psurf->texinfo->flags & ( SURF_TRANS66 | SURF_TRANS33 ) )) - { - R_RecursiveClipBPoly(currententity, pbedge, topnode, psurf); - } - else - { - R_RenderBmodelFace(currententity, pbedge, psurf, ((mleaf_t *)topnode)->key); - } - } -} - - -/* -================ -R_DrawSubmodelPolygons - -All in one leaf -================ -*/ -void -R_DrawSubmodelPolygons(entity_t *currententity, const model_t *currentmodel, int clipflags, mnode_t *topnode) -{ - int i; - msurface_t *psurf; - int numsurfaces; - - // FIXME: use bounding-box-based frustum clipping info? - psurf = ¤tmodel->surfaces[currentmodel->firstmodelsurface]; - numsurfaces = currentmodel->nummodelsurfaces; - - for (i=0 ; iplane; - - dot = DotProduct (modelorg, pplane->normal) - pplane->dist; - - // draw the polygon - if (((psurf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || - (!(psurf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON))) - { - r_currentkey = ((mleaf_t *)topnode)->key; - - // FIXME: use bounding-box-based frustum clipping info? - R_RenderFace(currententity, currentmodel, psurf, clipflags, true); - } - } -} - -/* -================ -R_RecursiveWorldNode -================ -*/ -static void -R_RecursiveWorldNode (entity_t *currententity, const model_t *currentmodel, mnode_t *node, - int clipflags, qboolean insubmodel) -{ - int c; - vec3_t acceptpt, rejectpt; - mleaf_t *pleaf; - - if (node->contents == CONTENTS_SOLID) - { - return; // solid - } - - if (node->visframe != r_visframecount) - { - return; - } - - if (r_cull->value && R_CullBox(node->minmaxs, node->minmaxs + 3, frustum)) - { - return; - } - - // cull the clipping planes if not trivial accept - // FIXME: the compiler is doing a lousy job of optimizing here; it could be - // twice as fast in ASM - if (clipflags) - { - int i; - for (i=0 ; i<4 ; i++) - { - int *pindex; - float d; - if (! (clipflags & (1<minmaxs[pindex[0]]; - rejectpt[1] = node->minmaxs[pindex[1]]; - rejectpt[2] = node->minmaxs[pindex[2]]; - - d = DotProduct (rejectpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; - if (d <= 0) - return; - acceptpt[0] = node->minmaxs[pindex[3+0]]; - acceptpt[1] = node->minmaxs[pindex[3+1]]; - acceptpt[2] = node->minmaxs[pindex[3+2]]; - - d = DotProduct (acceptpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; - - if (d >= 0) - clipflags &= ~(1<contents != CONTENTS_NODE) - { - msurface_t **mark; - pleaf = (mleaf_t *)node; - - if (!R_AreaVisible(r_newrefdef.areabits, pleaf)) - return; // not visible - - mark = pleaf->firstmarksurface; - c = pleaf->nummarksurfaces; - - if (c) - { - do - { - (*mark)->visframe = r_framecount; - mark++; - } while (--c); - } - - pleaf->key = r_currentkey; - r_currentkey++; // all bmodels in a leaf share the same key - } - else - { - float dot; - int side; - cplane_t *plane; - - // node is just a decision point, so go down the apropriate sides - // find which side of the node we are on - plane = node->plane; - - switch (plane->type) - { - case PLANE_X: - dot = modelorg[0] - plane->dist; - break; - case PLANE_Y: - dot = modelorg[1] - plane->dist; - break; - case PLANE_Z: - dot = modelorg[2] - plane->dist; - break; - default: - dot = DotProduct (modelorg, plane->normal) - plane->dist; - break; - } - - if (dot >= 0) - side = 0; - else - side = 1; - - // recurse down the children, front side first - R_RecursiveWorldNode (currententity, currentmodel, node->children[side], clipflags, insubmodel); - - // draw stuff - c = node->numsurfaces; - - if (c) - { - msurface_t *surf; - - surf = currentmodel->surfaces + node->firstsurface; - - if (dot < -BACKFACE_EPSILON) - { - do - { - if ((surf->flags & SURF_PLANEBACK) && - (surf->visframe == r_framecount)) - { - R_RenderFace (currententity, currentmodel, surf, clipflags, insubmodel); - } - - surf++; - } while (--c); - } - else if (dot > BACKFACE_EPSILON) - { - do - { - if (!(surf->flags & SURF_PLANEBACK) && - (surf->visframe == r_framecount)) - { - R_RenderFace (currententity, currentmodel, surf, clipflags, insubmodel); - } - - surf++; - } while (--c); - } - - // all surfaces on the same node share the same sequence number - r_currentkey++; - } - - // recurse down the back side - R_RecursiveWorldNode (currententity, currentmodel, node->children[!side], clipflags, insubmodel); - } -} - -/* -================ -R_RenderWorld -================ -*/ -void -R_RenderWorld (entity_t *currententity) -{ - const model_t *currentmodel = r_worldmodel; - - if (!r_drawworld->value) - return; - if ( r_newrefdef.rdflags & RDF_NOWORLDMODEL ) - return; - - // auto cycle the world frame for texture animation - currententity->frame = (int)(r_newrefdef.time*2); - - VectorCopy (r_origin, modelorg); - r_pcurrentvertbase = currentmodel->vertexes; - - R_RecursiveWorldNode (currententity, currentmodel, currentmodel->nodes, ALIAS_XY_CLIP_MASK, false); -} diff --git a/src/client/refresh/soft/sw_draw.c b/src/client/refresh/soft/sw_draw.c deleted file mode 100644 index edc7fab53..000000000 --- a/src/client/refresh/soft/sw_draw.c +++ /dev/null @@ -1,523 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -// draw.c - -#include "header/local.h" - - -static image_t *draw_chars; // 8*8 graphic characters - -//============================================================================= - -/* -================ -RE_Draw_FindPic -================ -*/ -image_t * -RE_Draw_FindPic (const char *name) -{ - return R_FindPic(name, (findimage_t)R_FindImage); -} - - - -/* -=============== -Draw_InitLocal -=============== -*/ -void -Draw_InitLocal (void) -{ - draw_chars = R_FindPic ("conchars", (findimage_t)R_FindImage); - if (!draw_chars) - { - Com_Error(ERR_FATAL, "%s: Couldn't load pics/conchars.pcx", __func__); - } -} - -/* -================ -Draw_Char - -Draws one 8*8 graphics character -It can be clipped to the top of the screen to allow the console to be -smoothly scrolled off. -================ -*/ -void -RE_Draw_CharScaled(int x, int y, int c, float scale) -{ - pixel_t *dest; - byte *source, *pic_pixels; - int drawline; - int row, col, v, iscale, sscale, width, height; - - iscale = (int) scale; - - if (iscale < 1) - return; - - c &= 255; - - if ((c&127) == 32) - return; - - if (y <= -8) - return; // totally off screen - - if ( ( y + 8 ) > vid_buffer_height ) // status text was missing in sw... - return; - - row = c>>4; - col = c&15; - - width = draw_chars->asset_width * iscale; - height = draw_chars->asset_height * iscale; - pic_pixels = Get_BestImageSize(draw_chars, &width, &height); - - sscale = width / draw_chars->asset_width; - pic_pixels += ((row<<10) * sscale + (col<<3)) * sscale; - - if (y < 0) - { // clipped - drawline = 8 + y; - pic_pixels -= width * y * sscale; - y = 0; - } - else - drawline = 8; - - dest = vid_buffer + y * vid_buffer_width + x; - - // clipped last lines - if ((y + iscale * (drawline + 1)) > vid_buffer_height) - { - drawline = (vid_buffer_height - y) / scale; - } - - VID_DamageBuffer(x, y); - VID_DamageBuffer(x + (scale * 8), y + (scale * drawline)); - - drawline = drawline * scale; - - for (v=0 ; v < drawline; v++, dest += vid_buffer_width) - { - int f, fstep, u; - int sv = v * height / (iscale * draw_chars->asset_height); - source = pic_pixels + sv * width; - f = 0; - fstep = (width << SHIFT16XYZ) / (scale * draw_chars->asset_width); - for (u=0 ; u < (8 * iscale) ; u++) - { - if (source[f>>16] != TRANSPARENT_COLOR) - { - dest[u] = source[f>>16]; - } - f += fstep; - } - } -} - -/* -============= -RE_Draw_GetPicSize -============= -*/ -void -RE_Draw_GetPicSize (int *w, int *h, const char *name) -{ - image_t *image; - - image = R_FindPic (name, (findimage_t)R_FindImage); - if (!image) - { - *w = *h = -1; - return; - } - *w = image->asset_width; - *h = image->asset_height; -} - -/* -============= -RE_Draw_StretchPicImplementation -============= -*/ -static void -RE_Draw_StretchPicImplementation (int x, int y, int w, int h, const image_t *pic) -{ - pixel_t *dest; - byte *source; - int height; - int skip; - int pic_height, pic_width; - byte *pic_pixels; - - if ((x < 0) || - (x + w > vid_buffer_width) || - (y + h > vid_buffer_height)) - { - Com_Printf("%s: bad coordinates %dx%d[%dx%d]", - __func__, x, y, w, h); - return; - } - - VID_DamageBuffer(x, y); - VID_DamageBuffer(x + w, y + h); - - height = h; - if (y < 0) - { - skip = -y; - height += y; - y = 0; - } - else - skip = 0; - - dest = vid_buffer + y * vid_buffer_width + x; - - pic_height = h; - pic_width = w; - pic_pixels = Get_BestImageSize(pic, &pic_width, &pic_height); - - if (!pic->transparent) - { - if (w == pic_width) - { - int v; - - for (v=0 ; v>16]; - f += fstep; - } - if (picupscale > 1) - { - int i; - int pu = Q_min(height-v, picupscale); - pixel_t *dest_orig = dest; - - // copy first line to fill whole sector - for (i=1; i < pu; i++) - { - // go to next line - dest += vid_buffer_width; - memcpy (dest, dest_orig, w); - } - // skip updated lines - v += (picupscale - 1); - } - } - } - } - else - { - source = pic_pixels; - - if (h == pic_height && w == pic_width) - { - int v; - - for (v = 0; v < pic_height; v++) - { - int u; - - for (u = 0; u < pic_width; u++) - { - if (source[u] != TRANSPARENT_COLOR) - dest[u] = source[u]; - } - dest += vid_buffer_width; - source += pic_width; - } - } - else - { - int v; - - for (v=0 ; v>16] != TRANSPARENT_COLOR) - { - dest[u] = source[f>>16]; - } - f += fstep; - } - } - } - } -} - -/* -============= -RE_Draw_StretchPic -============= -*/ -void -RE_Draw_StretchPic (int x, int y, int w, int h, const char *name) -{ - image_t *pic; - - pic = R_FindPic (name, (findimage_t)R_FindImage); - if (!pic) - { - Com_Printf("Can't find pic: %s\n", name); - return; - } - RE_Draw_StretchPicImplementation (x, y, w, h, pic); -} - -/* -============= -RE_Draw_StretchRaw -============= -*/ -void -RE_Draw_StretchRaw(int x, int y, int w, int h, int cols, int rows, const byte *data, int bits) -{ - byte *image_scaled; - image_t pic = {0}; - - // we have only one image size - pic.mip_levels = 1; - - if (bits == 32) - { - image_scaled = malloc(cols * rows); - R_Convert32To8bit(data, image_scaled, cols * rows, false); - } - else if (r_retexturing->value) - { - if (cols < (w / 3) || rows < (h / 3)) - { - image_scaled = malloc(cols * rows * 9); - - scale3x(data, image_scaled, cols, rows); - - cols = cols * 3; - rows = rows * 3; - } - else - { - image_scaled = malloc(cols * rows * 4); - - scale2x(data, image_scaled, cols, rows); - - cols = cols * 2; - rows = rows * 2; - } - } - else - { - image_scaled = (byte *)data; - } - - pic.pixels[0] = image_scaled; - pic.width = cols; - pic.height = rows; - pic.asset_width = cols; - pic.asset_height = rows; - - RE_Draw_StretchPicImplementation (x, y, w, h, &pic); - - if (r_retexturing->value) - { - free(image_scaled); - } -} - -/* -============= -Draw_Pic -============= -*/ -void -RE_Draw_PicScaled(int x, int y, const char *name, float scale) -{ - const image_t *pic; - - pic = R_FindPic (name, (findimage_t)R_FindImage); - if (!pic) - { - Com_Printf("Can't find pic: %s\n", name); - return; - } - - RE_Draw_StretchPicImplementation ( - x, y, - scale * pic->asset_width, scale * pic->asset_height, - pic); -} - -/* -============= -RE_Draw_TileClear - -This repeats a 64*64 tile graphic to fill the screen around a sized down -refresh window. -============= -*/ -void -RE_Draw_TileClear (int x, int y, int w, int h, const char *name) -{ - int i, j; - byte *psrc; - pixel_t *pdest; - image_t *pic; - int x2; - - if (x < 0) - { - w += x; - x = 0; - } - if (y < 0) - { - h += y; - y = 0; - } - if (x + w > vid_buffer_width) - w = vid_buffer_width - x; - if (y + h > vid_buffer_height) - h = vid_buffer_height - y; - if (w <= 0 || h <= 0) - return; - - VID_DamageBuffer(x, y); - VID_DamageBuffer(x + w, y + h); - - pic = R_FindPic (name, (findimage_t)R_FindImage); - if (!pic) - { - Com_Printf("Can't find pic: %s\n", name); - return; - } - x2 = x + w; - pdest = vid_buffer + y * vid_buffer_width; - for (i=0 ; ipixels[0] + pic->width * ((i+y) % pic->height); - for (j=x ; jwidth]; - } -} - - -/* -============= -RE_Draw_Fill - -Fills a box of pixels with a single color -============= -*/ -void -RE_Draw_Fill (int x, int y, int w, int h, int c) -{ - pixel_t *dest; - int v; - - if (x+w > vid_buffer_width) - w = vid_buffer_width - x; - if (y+h > vid_buffer_height) - h = vid_buffer_height - y; - - if (x < 0) - { - w += x; - x = 0; - } - if (y < 0) - { - h += y; - y = 0; - } - - if (w < 0 || h < 0) - return; - - VID_DamageBuffer(x, y); - VID_DamageBuffer(x + w, y + h); - - dest = vid_buffer + y * vid_buffer_width + x; - for (v=0 ; v -#include -#include "header/local.h" -/* -the complex cases add new polys on most lines, so dont optimize for keeping them the same -have multiple free span lists to try to get better coherence? -low depth complexity -- 1 to 3 or so - -have a sentinal at both ends? -*/ - -// surfaces are generated in back to front order by the bsp, so if a surf -// pointer is greater than another one, it should be drawn in front -// surfaces[1] is the background, and is used as the active surface stack - -edge_t **newedges; -edge_t **removeedges; -espan_t *edge_basespans; -espan_t *max_span_p; - -static espan_t *span_p; - -int r_currentkey; - -static shift20_t current_iv; -static shift20_t edge_head_u_shift20, edge_tail_u_shift20; - -static void (*pdrawfunc)(void); - -static edge_t edge_head; -static edge_t edge_tail; -static edge_t edge_aftertail; -static edge_t edge_sentinel; -static float fv; -static int miplevel; - -float scale_for_mip; - -static void R_GenerateSpans (void); -static void R_GenerateSpansBackward (void); - -static void R_TrailingEdge (surf_t *surf, edge_t *edge); - -/* -=============================================================================== - -EDGE SCANNING - -=============================================================================== -*/ - -/* -============== -R_BeginEdgeFrame -============== -*/ -void -R_BeginEdgeFrame (void) -{ - surfaces[1].spans = NULL; // no background spans yet - surfaces[1].flags = SURF_DRAWBACKGROUND; - - // put the background behind everything in the world - if (sw_draworder->value) - { - pdrawfunc = R_GenerateSpansBackward; - surfaces[1].key = 0; - r_currentkey = 1; - } - else - { - pdrawfunc = R_GenerateSpans; - surfaces[1].key = 0x7FFfFFFF; - r_currentkey = 0; - } - - if ((r_refdef.vrectbottom - r_refdef.vrect.y) > 0) - { - memset(newedges + r_refdef.vrect.y, 0, - (r_refdef.vrectbottom - r_refdef.vrect.y) * sizeof(edge_t*)); - memset(removeedges + r_refdef.vrect.y, 0, - (r_refdef.vrectbottom - r_refdef.vrect.y) * sizeof(edge_t*)); - } -} - -/* -============== -R_InsertNewEdges - -Adds the edges in the linked list edgestoadd, adding them to the edges in the -linked list edgelist. edgestoadd is assumed to be sorted on u, and non-empty -(this is actually newedges[v]). edgelist is assumed to be sorted on u, with a -sentinel at the end (actually, this is the active edge table starting at -edge_head.next). -============== -*/ -static void -R_InsertNewEdges (edge_t *edgestoadd, edge_t *edgelist) -{ - edge_t *next_edge; - - do - { - next_edge = edgestoadd->next; - - while (edgelist->u < edgestoadd->u) - { - edgelist = edgelist->next; - } - - // insert edgestoadd before edgelist - edgestoadd->next = edgelist; - edgestoadd->prev = edgelist->prev; - edgelist->prev->next = edgestoadd; - edgelist->prev = edgestoadd; - } while ((edgestoadd = next_edge) != NULL); -} - -/* -============== -R_RemoveEdges -============== -*/ -static void -R_RemoveEdges (edge_t *pedge) -{ - - do - { - pedge->next->prev = pedge->prev; - pedge->prev->next = pedge->next; - } while ((pedge = pedge->nextremove) != NULL); -} - -/* -============== -R_StepActiveU -============== -*/ -static void -R_StepActiveU (edge_t *pedge) -{ - edge_t *pnext_edge, *pwedge; - - while (1) - { - pedge->u += pedge->u_step; - if (pedge->u < pedge->prev->u) - { - if (pedge == &edge_aftertail) - return; - - if (pedge->prev == &edge_head) - { - Com_Printf("Already in head.\n"); - } - - // push it back to keep it sorted - pnext_edge = pedge->next; - - // pull the edge out of the edge list - pedge->next->prev = pedge->prev; - pedge->prev->next = pedge->next; - - // find out where the edge goes in the edge list - pwedge = pedge->prev->prev; - - while (pwedge->u > pedge->u) - { - pwedge = pwedge->prev; - } - - // put the edge back into the edge list - pedge->next = pwedge->next; - pedge->prev = pwedge; - pedge->next->prev = pedge; - pwedge->next = pedge; - - pedge = pnext_edge; - if (pedge == &edge_tail) - return; - } - else - { - pedge = pedge->next; - } - } -} - -static void -R_InsertSpan (surf_t *surf, shift20_t iu) -{ - if (iu > surf->last_u) - { - espan_t *span; - - span = span_p++; - span->u = surf->last_u; - span->count = iu - span->u; - span->v = current_iv; - span->pnext = surf->spans; - surf->spans = span; - } -} - -/* -============== -R_CleanupSpan -============== -*/ -static void -R_CleanupSpan (void) -{ - surf_t *surf; - - // now that we've reached the right edge of the screen, we're done with any - // unfinished surfaces, so emit a span for whatever's on top - surf = surfaces[1].next; - R_InsertSpan (surf, edge_tail_u_shift20); - - // reset spanstate for all surfaces in the surface stack - do - { - surf->spanstate = 0; - surf = surf->next; - } while (surf != &surfaces[1]); -} - - -/* -============== -D_SurfSearchBackwards -============== -*/ -static surf_t* -D_SurfSearchBackwards(const surf_t *surf, surf_t *surf2) -{ - do - { - do - { - surf2 = surf2->next; - } while (surf->key < surf2->key); - - // if it's two surfaces on the same plane, the one that's already - // active is in front, so keep going unless it's a bmodel - // must be two bmodels in the same leaf; don't care which is really - // in front, because they'll never be farthest anyway - } while (surf->key == surf2->key && !surf->insubmodel); - - return surf2; -} - - -/* -============== -R_LeadingEdgeBackwards -============== -*/ -static void -R_LeadingEdgeBackwards (const edge_t *edge) -{ - surf_t *surf, *surf2; - - // it's adding a new surface in, so find the correct place - surf = &surfaces[edge->surfs[1]]; - - // don't start a span if this is an inverted span, with the end - // edge preceding the start edge (that is, we've already seen the - // end edge) - if (++surf->spanstate == 1) - { - surf2 = surfaces[1].next; - - // if it's two surfaces on the same plane, the one that's already - // active is in front, so keep going unless it's a bmodel - // must be two bmodels in the same leaf; don't care, because they'll - // never be farthest anyway - if (surf->key > surf2->key || (surf->insubmodel && (surf->key == surf2->key))) { - shift20_t iu; - - // emit a span (obscures current top) - iu = edge->u >> shift_size; - - R_InsertSpan (surf2, iu); - - // set last_u on the new span - surf->last_u = iu; - } - else - { - surf2 = D_SurfSearchBackwards(surf, surf2); - } - - // insert before surf2 - surf->next = surf2; - surf->prev = surf2->prev; - surf2->prev->next = surf; - surf2->prev = surf; - } -} - - -/* -============== -R_TrailingEdge -============== -*/ -static void -R_TrailingEdge (surf_t *surf, edge_t *edge) -{ - // don't generate a span if this is an inverted span, with the end - // edge preceding the start edge (that is, we haven't seen the - // start edge yet) - if (--surf->spanstate == 0) - { - if (surf == surfaces[1].next) - { - shift20_t iu; - - // emit a span (current top going away) - iu = edge->u >> shift_size; - R_InsertSpan (surf, iu); - - // set last_u on the surface below - surf->next->last_u = iu; - } - - surf->prev->next = surf->next; - surf->next->prev = surf->prev; - } -} - -/* -============== -D_SurfSearchForward -============== -*/ -static surf_t* -D_SurfSearchForward(const surf_t *surf, surf_t *surf2) -{ - do - { - do - { - surf2 = surf2->next; - } while (surf->key > surf2->key); - // if it's two surfaces on the same plane, the one that's already - // active is in front, so keep going unless it's a bmodel - } while (surf->key == surf2->key && !surf->insubmodel); - - return surf2; -} - -/* -============== -R_LeadingEdgeSearch -============== -*/ -static surf_t* -R_LeadingEdgeSearch (const edge_t *edge, const surf_t *surf, surf_t *surf2) -{ - float testzi, newzitop; - - do - { - float fu, newzi, newzibottom; - - surf2 = D_SurfSearchForward(surf, surf2); - - if (surf->key != surf2->key) - return surf2; - - // must be two bmodels in the same leaf; sort on 1/z - fu = (float)(edge->u - (1<d_ziorigin + fv*surf->d_zistepv + - fu*surf->d_zistepu; - newzibottom = newzi * 0.99; - - testzi = surf2->d_ziorigin + fv*surf2->d_zistepv + - fu*surf2->d_zistepu; - - if (newzibottom >= testzi) - { - return surf2; - } - - newzitop = newzi * 1.01; - } - while(newzitop < testzi || surf->d_zistepu < surf2->d_zistepu); - - return surf2; -} - -/* -============== -R_InsertBeforeSurf -============== -*/ -static void -R_InsertBeforeSurf(surf_t *surf, surf_t *surf2) -{ - surf->next = surf2; - surf->prev = surf2->prev; - surf2->prev->next = surf; - surf2->prev = surf; -} - -/* -============== -R_EmitSpanBeforeTop -============== -*/ -static void -R_EmitSpanBeforeTop(const edge_t *edge, surf_t *surf, surf_t *surf2) -{ - shift20_t iu; - - iu = edge->u >> shift_size; - - R_InsertSpan (surf2, iu); - - // set last_u on the new span - surf->last_u = iu; - - // insert before surf2 - R_InsertBeforeSurf(surf, surf2); -} - -/* -============== -R_LeadingEdge -============== -*/ -static void -R_LeadingEdge (const edge_t *edge) -{ - if (edge->surfs[1]) - { - surf_t *surf; - - // it's adding a new surface in, so find the correct place - surf = &surfaces[edge->surfs[1]]; - - // don't start a span if this is an inverted span, with the end - // edge preceding the start edge (that is, we've already seen the - // end edge) - if (++surf->spanstate == 1) - { - surf_t *surf2; - - surf2 = surfaces[1].next; - - if (surf->key < surf2->key) - { - // emit a span (obscures current top) - R_EmitSpanBeforeTop(edge, surf, surf2); - return; - } - - // if it's two surfaces on the same plane, the one that's already - // active is in front, so keep going unless it's a bmodel - if (surf->insubmodel && (surf->key == surf2->key)) - { - float fu, newzi, testzi, newzitop, newzibottom; - - // must be two bmodels in the same leaf; sort on 1/z - fu = (float)(edge->u - (1<d_ziorigin + fv*surf->d_zistepv + - fu*surf->d_zistepu; - newzibottom = newzi * 0.99; - - testzi = surf2->d_ziorigin + fv*surf2->d_zistepv + - fu*surf2->d_zistepu; - - if (newzibottom >= testzi) - { - // emit a span (obscures current top) - R_EmitSpanBeforeTop(edge, surf, surf2); - return; - } - - newzitop = newzi * 1.01; - if (newzitop >= testzi) - { - if (surf->d_zistepu >= surf2->d_zistepu) - { - // emit a span (obscures current top) - R_EmitSpanBeforeTop(edge, surf, surf2); - return; - } - } - } - - surf2 = R_LeadingEdgeSearch (edge, surf, surf2); - // insert before surf2 - R_InsertBeforeSurf(surf, surf2); - } - } -} - -/* -============== -R_GenerateSpans -============== -*/ -static void -R_GenerateSpans (void) -{ - edge_t *edge; - surf_t *surf; - - // clear active surfaces to just the background surface - surfaces[1].next = surfaces[1].prev = &surfaces[1]; - surfaces[1].last_u = edge_head_u_shift20; - - // generate spans - for (edge=edge_head.next ; edge != &edge_tail; edge=edge->next) - { - if (edge->surfs[0]) - { - // it has a left surface, so a surface is going away for this span - surf = &surfaces[edge->surfs[0]]; - - R_TrailingEdge (surf, edge); - - if (!edge->surfs[1]) - continue; - } - - R_LeadingEdge (edge); - } - - R_CleanupSpan (); -} - -/* -============== -R_GenerateSpansBackward -============== -*/ -static void -R_GenerateSpansBackward (void) -{ - edge_t *edge; - - // clear active surfaces to just the background surface - surfaces[1].next = surfaces[1].prev = &surfaces[1]; - surfaces[1].last_u = edge_head_u_shift20; - - // generate spans - for (edge=edge_head.next ; edge != &edge_tail; edge=edge->next) - { - if (edge->surfs[0]) - R_TrailingEdge (&surfaces[edge->surfs[0]], edge); - - if (edge->surfs[1]) - R_LeadingEdgeBackwards (edge); - } - - R_CleanupSpan (); -} - -static void D_DrawSurfaces (entity_t *currententity, const surf_t *surface); - -/* -============== -R_ScanEdges - -Input: -newedges[] array - this has links to edges, which have links to surfaces - -Output: -Each surface has a linked list of its visible spans - -============== -*/ -void -R_ScanEdges (entity_t *currententity, const surf_t *surface) -{ - shift20_t iv, bottom; - surf_t *s; - - // clear the surface span pointers - for (s = &surfaces[1] ; slast_u = 0; - s->spans = NULL; - } - - span_p = edge_basespans; - if (span_p + r_refdef.vrect.width >= max_span_p) - { - // Need to more space - r_outedgebasespans = true; - - return; - } - - // clear active edges to just the background edges around the whole screen - // FIXME: most of this only needs to be set up once - edge_head.u = r_refdef.vrect.x << shift_size; - edge_head_u_shift20 = edge_head.u >> shift_size; - edge_head.u_step = 0; - edge_head.prev = NULL; - edge_head.next = &edge_tail; - edge_head.surfs[0] = 0; - edge_head.surfs[1] = 1; - - edge_tail.u = (r_refdef.vrectright << shift_size) + (1 << shift_size) - 1; - edge_tail_u_shift20 = edge_tail.u >> shift_size; - edge_tail.u_step = 0; - edge_tail.prev = &edge_head; - edge_tail.next = &edge_aftertail; - edge_tail.surfs[0] = 1; - edge_tail.surfs[1] = 0; - - edge_aftertail.u = -1; // force a move - edge_aftertail.u_step = 0; - edge_aftertail.next = &edge_sentinel; - edge_aftertail.prev = &edge_tail; - - // FIXME: do we need this now that we clamp x in r_draw.c? - edge_sentinel.u = INT_MAX; // make sure nothing sorts past this - edge_sentinel.prev = &edge_aftertail; - - // - // process all scan lines - // - bottom = r_refdef.vrectbottom - 1; - - for (iv=r_refdef.vrect.y ; iv= max_span_p) - { - // Draw stuff on screen - D_DrawSurfaces (currententity, surface); - - // clear the surface span pointers - for (s = &surfaces[1] ; sspans = NULL; - - span_p = edge_basespans; - - // Need to more space - r_outedgebasespans = true; - } - - if (removeedges[iv]) - R_RemoveEdges (removeedges[iv]); - - if (edge_head.next != &edge_tail) - R_StepActiveU (edge_head.next); - } - - // do the last scan (no need to step or sort or remove on the last scan) - current_iv = iv; - fv = (float)iv; - - // mark that the head (background start) span is pre-included - surfaces[1].spanstate = 1; - - // Flush span buffer - if (newedges[iv]) - // Update AET with GET event - R_InsertNewEdges (newedges[iv], edge_head.next); - - // Update AET with GET event - (*pdrawfunc) (); - - // draw whatever's left in the span list - D_DrawSurfaces (currententity, surface); -} - - -/* -========================================================================= - -SURFACE FILLING - -========================================================================= -*/ - -static msurface_t *pface; -static surfcache_t *pcurrentcache; -static vec3_t transformed_modelorg; -static vec3_t world_transformed_modelorg; - -/* -============= -D_MipLevelForScale -============= -*/ -static int -D_MipLevelForScale (float scale) -{ - int lmiplevel = NUM_MIPS-1, i; - - for (i=0; i < NUM_MIPS-1; i ++) - { - if (scale >= d_scalemip[i]) - { - lmiplevel = i; - break; - } - } - - if (lmiplevel < d_minmip) - lmiplevel = d_minmip; - - return lmiplevel; -} - - -/* -============== -D_FlatFillSurface - -Simple single color fill with no texture mapping -============== -*/ -static void -D_FlatFillSurface (surf_t *surf, pixel_t color) -{ - espan_t *span; - - for (span=surf->spans ; span ; span=span->pnext) - { - pixel_t *pdest; - - pdest = d_viewbuffer + vid_buffer_width*span->v + span->u; - memset(pdest, color&0xFF, span->count * sizeof(pixel_t)); - } -} - - -/* -============== -D_CalcGradients -============== -*/ -static void -D_CalcGradients (msurface_t *pface, float d_ziorigin, float d_zistepu, float d_zistepv) -{ - float mipscale; - vec3_t p_temp1; - vec3_t p_saxis, p_taxis; - float t; - - mipscale = 1.0 / (float)(1 << miplevel); - - TransformVector (pface->texinfo->vecs[0], p_saxis); - TransformVector (pface->texinfo->vecs[1], p_taxis); - - t = xscaleinv * mipscale; - d_sdivzstepu = p_saxis[0] * t; - d_tdivzstepu = p_taxis[0] * t; - - t = yscaleinv * mipscale; - d_sdivzstepv = -p_saxis[1] * t; - d_tdivzstepv = -p_taxis[1] * t; - - d_sdivzorigin = p_saxis[2] * mipscale - xcenter * d_sdivzstepu - - ycenter * d_sdivzstepv; - d_tdivzorigin = p_taxis[2] * mipscale - xcenter * d_tdivzstepu - - ycenter * d_tdivzstepv; - - VectorScale (transformed_modelorg, mipscale, p_temp1); - - t = SHIFT16XYZ_MULT * mipscale; - sadjust = ((int)(DotProduct (p_temp1, p_saxis) * SHIFT16XYZ_MULT + 0.5)) - - ((pface->texturemins[0] << SHIFT16XYZ) >> miplevel) - + pface->texinfo->vecs[0][3]*t; - tadjust = ((int)(DotProduct (p_temp1, p_taxis) * SHIFT16XYZ_MULT + 0.5)) - - ((pface->texturemins[1] << SHIFT16XYZ) >> miplevel) - + pface->texinfo->vecs[1][3]*t; - - // changing flow speed for non-warping textures. - if (pface->texinfo->flags & SURF_FLOWING) - { - if(pface->texinfo->flags & SURF_WARP) - sadjust += SHIFT16XYZ_MULT * (-128 * ( (r_newrefdef.time * 0.25) - (int)(r_newrefdef.time * 0.25) )); - else - sadjust += SHIFT16XYZ_MULT * (-128 * ( (r_newrefdef.time * 0.77) - (int)(r_newrefdef.time * 0.77) )); - } - - // - // -1 (-epsilon) so we never wander off the edge of the texture - // - bbextents = ((pface->extents[0] << SHIFT16XYZ) >> miplevel) - 1; - bbextentt = ((pface->extents[1] << SHIFT16XYZ) >> miplevel) - 1; -} - - -/* -============== -D_BackgroundSurf - -The grey background filler seen when there is a hole in the map -============== -*/ -static void -D_BackgroundSurf (surf_t *s) -{ - D_FlatFillSurface (s, (int)sw_clearcolor->value & 0xFF); - // set up a gradient for the background surface that places it - // effectively at infinity distance from the viewpoint - D_DrawZSpans (s->spans, -0.9, 0, 0); -} - -/* -================= -D_TurbulentSurf -================= -*/ -static void -D_TurbulentSurf(surf_t *s) -{ - pface = s->msurf; - miplevel = 0; - cacheblock = pface->texinfo->image->pixels[0]; - cachewidth = 64; - - if (s->insubmodel) - { - entity_t *currententity; - vec3_t local_modelorg; - - // FIXME: we don't want to do all this for every polygon! - // TODO: store once at start of frame - currententity = s->entity; - VectorSubtract (r_origin, currententity->origin, - local_modelorg); - TransformVector (local_modelorg, transformed_modelorg); - - R_RotateBmodel(currententity); // FIXME: don't mess with the frustum, - // make entity passed in - } - - D_CalcGradients (pface, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - //============ - // textures that aren't warping are just flowing. Use NonTurbulentPow2 instead - if(!(pface->texinfo->flags & SURF_WARP)) - NonTurbulentPow2 (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - else - TurbulentPow2 (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - //============ - - D_DrawZSpans (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - if (s->insubmodel) - { - // - // restore the old drawing state - // FIXME: we don't want to do this every time! - // TODO: speed up - // - VectorCopy (world_transformed_modelorg, - transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - R_TransformFrustum (); - } -} - -/* -============== -D_SkySurf -============== -*/ -static void -D_SkySurf (surf_t *s) -{ - pface = s->msurf; - miplevel = 0; - if (!pface->texinfo->image) - return; - cacheblock = pface->texinfo->image->pixels[0]; - cachewidth = 256; - - D_CalcGradients (pface, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - D_DrawSpansPow2 (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - // set up a gradient for the background surface that places it - // effectively at infinity distance from the viewpoint - D_DrawZSpans (s->spans, -0.9, 0, 0); -} - -/* -============== -D_SolidSurf - -Normal surface cached, texture mapped surface -============== -*/ -static void -D_SolidSurf (entity_t *currententity, surf_t *s) -{ - float len1, len2, mipadjust; - - if (s->insubmodel) - { - vec3_t local_modelorg; - - // FIXME: we don't want to do all this for every polygon! - // TODO: store once at start of frame - currententity = s->entity; - VectorSubtract(r_origin, currententity->origin, local_modelorg); - TransformVector(local_modelorg, transformed_modelorg); - - R_RotateBmodel(currententity); // FIXME: don't mess with the frustum, - // make entity passed in - } - - pface = s->msurf; - - len1 = VectorLength (pface->texinfo->vecs[0]); - len2 = VectorLength (pface->texinfo->vecs[1]); - mipadjust = sqrt(len1*len1 + len2*len2); - if (mipadjust < 0.01) - { - mipadjust = 0.01; - } - miplevel = D_MipLevelForScale(s->nearzi * scale_for_mip * mipadjust); - - // FIXME: make this passed in to D_CacheSurface - pcurrentcache = D_CacheSurface (currententity, pface, miplevel); - - cacheblock = (pixel_t *)pcurrentcache->data; - cachewidth = pcurrentcache->width; - - D_CalcGradients (pface, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - D_DrawSpansPow2 (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - D_DrawZSpans (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - if (s->insubmodel) - { - // - // restore the old drawing state - // FIXME: we don't want to do this every time! - // TODO: speed up - // - VectorCopy (world_transformed_modelorg, - transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - R_TransformFrustum (); - } -} - -/* -============= -D_DrawflatSurfaces - -To allow developers to see the polygon carving of the world -============= -*/ -static void -D_DrawflatSurfaces (const surf_t *surface) -{ - surf_t *s; - int color = 0; - - for (s = &surfaces[1] ; sspans) - continue; - - // make a stable color for each surface by taking the low - // bits of the msurface pointer - D_FlatFillSurface (s, color & 0xFF); - D_DrawZSpans (s->spans, s->d_ziorigin, s->d_zistepu, s->d_zistepv); - - color ++; - } -} - -/* -============== -D_DrawSurfaces - -Rasterize all the span lists. Guaranteed zero overdraw. -May be called more than once a frame if the surf list overflows (higher res) -============== -*/ -static void -D_DrawSurfaces (entity_t *currententity, const surf_t *surface) -{ - VectorSubtract (r_origin, vec3_origin, modelorg); - TransformVector (modelorg, transformed_modelorg); - VectorCopy (transformed_modelorg, world_transformed_modelorg); - - if (!sw_drawflat->value) - { - surf_t *s; - - for (s = &surfaces[1] ; sspans) - continue; - - r_drawnpolycount++; - - if (! (s->flags & (SURF_DRAWSKY|SURF_DRAWBACKGROUND|SURF_DRAWTURB) ) ) - D_SolidSurf (currententity, s); - else if (s->flags & SURF_DRAWSKY) - D_SkySurf (s); - else if (s->flags & SURF_DRAWBACKGROUND) - D_BackgroundSurf (s); - else if (s->flags & SURF_DRAWTURB) - D_TurbulentSurf (s); - } - } - else - D_DrawflatSurfaces (surface); - - VectorSubtract (r_origin, vec3_origin, modelorg); - R_TransformFrustum (); -} diff --git a/src/client/refresh/soft/sw_image.c b/src/client/refresh/soft/sw_image.c deleted file mode 100644 index 3a65a768c..000000000 --- a/src/client/refresh/soft/sw_image.c +++ /dev/null @@ -1,747 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#include "header/local.h" - -#define MAX_RIMAGES 1024 -static image_t *r_whitetexture_mip = NULL; -static image_t r_images[MAX_RIMAGES]; -static int numr_images; -static int image_max = 0; - - -/* -=============== -R_ImageList_f -=============== -*/ -void -R_ImageList_f (void) -{ - int i, used, texels; - image_t *image; - qboolean freeup; - - Com_Printf("------------------\n"); - texels = 0; - used = 0; - - for (i=0, image=r_images ; iregistration_sequence == registration_sequence) - { - in_use = "*"; - used++; - } - - if (image->registration_sequence <= 0) - continue; - texels += image->width*image->height; - switch (image->type) - { - case it_skin: - Com_Printf("M"); - break; - case it_sprite: - Com_Printf("S"); - break; - case it_wall: - Com_Printf("W"); - break; - case it_pic: - Com_Printf("P"); - break; - default: - Com_Printf(" "); - break; - } - - Com_Printf(" %3i %3i : %s (%dx%d) %s\n", - image->asset_width, image->asset_height, image->name, - image->width, image->height, in_use); - } - Com_Printf("Total texel count: %i\n", texels); - freeup = R_ImageHasFreeSpace(); - Com_Printf("Used %d of %d images%s.\n", used, image_max, freeup ? ", has free space" : ""); -} - -//======================================================= - -static image_t * -R_FindFreeImage (void) -{ - image_t *image; - int i; - - // find a free image_t - for (i=0, image=r_images ; iregistration_sequence) - { - break; - } - } - - if (i == numr_images) - { - if (numr_images == MAX_RIMAGES) - Com_Error(ERR_DROP, "%s: Max images", __func__); - numr_images++; - } - image = &r_images[i]; - - return image; -} - -static void -R_ImageShrink(const unsigned char* src, unsigned char *dst, int width, int realwidth, int height, int realheight) -{ - int x, y; - float xstep, ystep; - - xstep = (float)width / realwidth; - ystep = (float)height / realheight; - - for (y=0; ypixels[i], image->pixels[i + 1], - image->width >> i, image->width >> (i + 1), - image->height >> i, image->height >> (i + 1)); - } -} - -static size_t -R_GetImageMipsSize(size_t mip1_size) -{ - size_t full_size = 0; - int i; - - for (i=0; i> (i * 2); - } - return full_size; -} - -static void -R_RestoreImagePointers(image_t *image, int min_mips) -{ - int i; - - for (i=min_mips; ipixels[i + 1] = image->pixels[i] + ( - image->width * image->height / (1 << (i * 2))); - } - image->mip_levels = NUM_MIPS; -} - -byte * -Get_BestImageSize(const image_t *image, int *req_width, int *req_height) -{ - int width, height, i; - width = image->width; - height = image->height; - - // return last mip before smaller image size - for (i = 0; i < (image->mip_levels - 1); i++) - { - if (image->pixels[i] && - ((width / 2) < *req_width || - (height / 2) < *req_height)) - { - *req_width = width; - *req_height = height; - return image->pixels[i]; - } - - width = width / 2; - height = height / 2; - } - - if (image->pixels[image->mip_levels - 1]) - { - *req_width = image->width >> (image->mip_levels - 1); - *req_height = image->height >> (image->mip_levels - 1); - return image->pixels[image->mip_levels - 1]; - } - else - { - *req_width = image->width; - *req_height = image->height; - return image->pixels[0]; - } -} - -static byte *d_16to8table = NULL; // 16 to 8 bit conversion table - -void -R_Convert32To8bit(const unsigned char* pic_in, pixel_t* pic_out, size_t size, - qboolean transparent) -{ - size_t i; - - if (!d_16to8table) - return; - - for(i=0; i < size; i++) - { - if (pic_in[3] > 128 || !transparent) - { - unsigned int r, g, b, c; - - r = ( pic_in[0] >> 3 ) & 31; - g = ( pic_in[1] >> 2 ) & 63; - b = ( pic_in[2] >> 3 ) & 31; - - c = r | ( g << 5 ) | ( b << 11 ); - - pic_out[i] = d_16to8table[c & 0xFFFF]; - } - else - { - pic_out[i] = TRANSPARENT_COLOR; - } - - pic_in += 4; - } -} - -/* -================ -R_LoadPic - -================ -*/ -static image_t * -R_LoadPic8(const char *name, const byte *pic, int width, int realwidth, int height, int realheight, - size_t data_size, imagetype_t type) -{ - image_t *image; - size_t size, full_size; - - size = width * height; - - /* data_size/size are unsigned */ - if (!pic || data_size == 0 || width <= 0 || height <= 0 || size == 0) - { - return NULL; - } - - image = R_FindFreeImage(); - if (strlen(name) >= sizeof(image->name)) - Com_Error(ERR_DROP, "%s: '%s' is too long", __func__, name); - strcpy (image->name, name); - image->registration_sequence = registration_sequence; - - image->width = width; - image->height = height; - image->asset_width = realwidth; - image->asset_height = realheight; - image->type = type; - - full_size = R_GetImageMipsSize(size); - image->pixels[0] = malloc(full_size); - if (!image->pixels[0]) - { - Com_Error(ERR_FATAL, "%s: Can't allocate image.", __func__); - // code never returns after ERR_FATAL - return NULL; - } - - // some file types can have more data in file than code needs - if (data_size > full_size) - { - data_size = full_size; - } - - image->transparent = false; - memcpy(image->pixels[0], pic, data_size); - - if (type != it_wall) - { - size_t i; - - for (i=0 ; ipixels[0][i] == TRANSPARENT_COLOR) - { - image->transparent = true; - break; - } - } - } - - // restore mips - R_RestoreImagePointers(image, 0); - - if (full_size > data_size) - { - // looks short, restore everything from first image - R_RestoreMips(image, 0); - } - - return image; -} - -static image_t * -R_LoadPic(const char *name, const byte *pic, int width, int realwidth, int height, int realheight, - size_t data_size, imagetype_t type, int bits) -{ - if (!realwidth || !realheight) - { - realwidth = width; - realheight = height; - } - - if (data_size <= 0 || !width || !height) - { - return NULL; - } - - /* Code used with HIColor calls */ - if (bits == 32) - { - image_t *image = NULL; - byte *pic8; - - pic8 = malloc(data_size); - if (!pic8) - { - Com_Error(ERR_FATAL, "%s: Can't allocate image.", __func__); - // code never returns after ERR_FATAL - return NULL; - } - - if (width != realwidth || height != realheight) - { - // temporary place for shrinked image - byte* pic32 = NULL; - // temporary image memory size - int uploadwidth, uploadheight; - - if (type == it_pic) - { - uploadwidth = realwidth; - uploadheight = realheight; - - // search next scale up - while ((uploadwidth < width) && (uploadheight < height)) - { - uploadwidth *= 2; - uploadheight *= 2; - } - - // one step back - if ((uploadwidth > width) || (uploadheight > height)) - { - uploadwidth /= 2; - uploadheight /= 2; - } - } - else - { - uploadwidth = realwidth; - uploadheight = realheight; - } - - // resize image - pic32 = malloc(uploadwidth * uploadheight * 4); - if (ResizeSTB(pic, width, height, pic32, uploadwidth, uploadheight)) - { - R_Convert32To8bit(pic32, pic8, uploadwidth * uploadheight, type != it_wall); - image = R_LoadPic8(name, pic8, - uploadwidth, realwidth, - uploadheight, realheight, - uploadwidth * uploadheight, type); - } - else - { - R_Convert32To8bit(pic, pic8, data_size, type != it_wall); - image = R_LoadPic8 (name, pic8, - width, realwidth, - height, realheight, - data_size, type); - } - free(pic32); - } - else - { - R_Convert32To8bit(pic, pic8, data_size, type != it_wall); - image = R_LoadPic8 (name, pic8, - width, realwidth, - height, realheight, - data_size, type); - } - free(pic8); - - return image; - } - else - /* used with WAL and 8bit textures */ - { - if (r_scale8bittextures->value && type == it_pic) - { - byte *scaled = NULL; - image_t *image; - - scaled = malloc(width * height * 4); - if (!scaled) - return NULL; - - scale2x(pic, scaled, width, height); - width *= 2; - height *= 2; - - image = R_LoadPic8(name, scaled, - width, realwidth, - height, realheight, - width * height, type); - free(scaled); - - return image; - } - else - { - return R_LoadPic8 (name, pic, - width, realwidth, - height, realheight, - data_size, type); - } - } -} - -/* - * Apply color light to texture pixel - * - * TODO: -22% fps lost - */ -pixel_t -R_ApplyLight(pixel_t pix, const light3_t light) -{ - light3_t light_masked; - pixel_t i_r, i_g, i_b; - byte b_r, b_g, b_b; - int i_c; - - light_masked[0] = light[0] & LIGHTMASK; - light_masked[1] = light[1] & LIGHTMASK; - light_masked[2] = light[2] & LIGHTMASK; - - /* same light or colorlight == 0 */ - if (light_masked[0] == light_masked[1] && light_masked[0] == light_masked[2]) - return vid_colormap[pix + light_masked[0]]; - - /* get index of color component of each component */ - i_r = vid_colormap[light_masked[0] + pix]; - i_g = vid_colormap[light_masked[1] + pix]; - i_b = vid_colormap[light_masked[2] + pix]; - - /* get color component for each component */ - b_r = d_8to24table[i_r * 4 + 0]; - b_g = d_8to24table[i_g * 4 + 1]; - b_b = d_8to24table[i_b * 4 + 2]; - - /* convert back to indexed color */ - b_r = ( b_r >> 3 ) & 31; - b_g = ( b_g >> 2 ) & 63; - b_b = ( b_b >> 3 ) & 31; - - i_c = b_r | ( b_g << 5 ) | ( b_b << 11 ); - - return d_16to8table[i_c & 0xFFFF]; -} - -/* -=============== -R_FindImage - -Finds or loads the given image or NULL -=============== -*/ -image_t * -R_FindImage(const char *name, imagetype_t type) -{ - image_t *image; - size_t len; - int i; - char *ptr; - char namewe[256]; - const char* ext; - - if (!name) - { - return NULL; - } - - /* just return white image if show lightmap only */ - if ((type == it_wall || type == it_skin) && r_lightmap->value) - { - return r_whitetexture_mip; - } - - ext = COM_FileExtension(name); - if (!ext[0]) - { - /* file has no extension */ - return NULL; - } - - /* Remove the extension */ - len = (ext - name) - 1; - if ((len < 1) || (len > sizeof(namewe) - 1)) - { - return NULL; - } - - memcpy(namewe, name, len); - namewe[len] = 0; - - /* fix backslashes */ - while ((ptr = strchr(name, '\\'))) - { - *ptr = '/'; - } - - // look for it - for (i=0, image=r_images ; iname)) - { - image->registration_sequence = registration_sequence; - return image; - } - } - - // - // load the pic from disk - // - image = (image_t *)R_LoadImage(name, namewe, ext, type, - r_retexturing->value, (loadimage_t)R_LoadPic); - - if (!image && r_validation->value) - { - Com_Printf("%s: can't load %s\n", __func__, name); - } - - return image; -} - -/* -================ -R_FreeUnusedImages - -Any image that was not touched on this registration sequence -will be freed. -================ -*/ -void -R_FreeUnusedImages (void) -{ - int i; - image_t *image; - - for (i=0, image=r_images ; iregistration_sequence == registration_sequence) - { - continue; // used this sequence - } - if (!image->registration_sequence) - continue; // free texture - if (image->type == it_pic) - continue; // don't free pics - // free it - free (image->pixels[0]); // the other mip levels just follow - memset(image, 0, sizeof(*image)); - } -} - -qboolean -R_ImageHasFreeSpace(void) -{ - int i, used; - image_t *image; - - used = 0; - - for (i = 0, image = r_images; i < numr_images; i++, image++) - { - if (!image->name[0]) - continue; - if (image->registration_sequence == registration_sequence) - { - used ++; - } - } - - if (image_max < used) - { - image_max = used; - } - - // should same size of free slots as currently used - return (numr_images + used) < MAX_RIMAGES; -} - -static struct texture_buffer { - image_t image; - byte buffer[4096]; -} r_notexture_buffer, r_whitetexture_buffer; - -static void -R_InitNoTexture(void) -{ - int m; - - // create a simple checkerboard texture for the default - r_notexture_mip = &r_notexture_buffer.image; - - r_notexture_mip->width = r_notexture_mip->height = 16; - r_notexture_mip->asset_width = r_notexture_mip->asset_height = 16; - - r_notexture_mip->pixels[0] = r_notexture_buffer.buffer; - R_RestoreImagePointers(r_notexture_mip, 0); - - for (m=0 ; mpixels[m]; - for (y=0 ; y< (16>>m) ; y++) - for (x=0 ; x< (16>>m) ; x++) - { - if ( (y< (8>>m) ) ^ (x< (8>>m) ) ) - - *dest++ = d_16to8table[0x0000]; - else - *dest++ = d_16to8table[0xFFFF]; - } - } -} - -static void -R_InitWhiteTexture(void) -{ - // create a simple white texture for the default - r_whitetexture_mip = &r_whitetexture_buffer.image; - - r_whitetexture_mip->width = r_whitetexture_mip->height = 16; - r_whitetexture_mip->asset_width = r_whitetexture_mip->asset_height = 16; - - r_whitetexture_mip->pixels[0] = r_whitetexture_buffer.buffer; - R_RestoreImagePointers(r_whitetexture_mip, 0); - - memset(r_whitetexture_buffer.buffer, d_16to8table[0xFFFF], - sizeof(r_whitetexture_buffer.buffer)); -} - -/* -================== -R_InitTextures -================== -*/ -static void -R_InitTextures (void) -{ - R_InitNoTexture(); - /* empty white texture for r_lightmap = 1*/ - R_InitWhiteTexture(); -} - -/* -=============== -R_InitImages -=============== -*/ -void -R_InitImages (void) -{ - unsigned char * table16to8; - registration_sequence = 1; - image_max = 0; - - d_16to8table = NULL; - ri.FS_LoadFile("pics/16to8.dat", (void **)&table16to8); - - if ( !table16to8 ) - { - Com_Error(ERR_FATAL, "%s: Couldn't load pics/16to8.dat", __func__); - // code never returns after ERR_FATAL - return; - } - - d_16to8table = malloc(0x10000); - if ( !d_16to8table ) - { - Com_Error(ERR_FATAL, "%s: Couldn't allocate memory for d_16to8table", __func__); - // code never returns after ERR_FATAL - return; - } - memcpy(d_16to8table, table16to8, 0x10000); - ri.FS_FreeFile((void *)table16to8); - - R_InitTextures (); -} - -/* -=============== -R_ShutdownImages -=============== -*/ -void -R_ShutdownImages (void) -{ - int i; - image_t *image; - - for (i=0, image=r_images ; iregistration_sequence) - continue; // free texture - - // free it - if (image->pixels[0]) - free(image->pixels[0]); // the other mip levels just follow - - memset(image, 0, sizeof(*image)); - } - - if (d_16to8table) - free(d_16to8table); -} diff --git a/src/client/refresh/soft/sw_light.c b/src/client/refresh/soft/sw_light.c deleted file mode 100644 index 12a10950e..000000000 --- a/src/client/refresh/soft/sw_light.c +++ /dev/null @@ -1,483 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_light.c - -#include "header/local.h" - -/* -============================================================================= - -DYNAMIC LIGHTS - -============================================================================= -*/ - -static void -R_MarkSurfaceLights(dlight_t *light, int bit, mnode_t *node, int lightframecount) -{ - msurface_t *surf; - int i; - - // mark the polygons - surf = r_worldmodel->surfaces + node->firstsurface; - for (i = 0; i < node->numsurfaces; i++, surf++) - { - if (surf->dlightframe != lightframecount) - { - surf->dlightbits = 0; - surf->dlightframe = lightframecount; - } - surf->dlightbits |= bit; - } -} - -/* -============= -R_PushDlights -============= -*/ -void -R_PushDlights (const model_t *model) -{ - int i; - dlight_t *l; - - for (i=0, l = r_newrefdef.dlights ; inodes + model->firstnode, - r_framecount, R_MarkSurfaceLights); - } -} - - -/* -============================================================================= - -LIGHT SAMPLING - -============================================================================= -*/ -static int -RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end, vec3_t pointcolor) -{ - float front, back, frac; - qboolean side; - cplane_t *plane; - vec3_t mid; - msurface_t *surf; - int s, t, ds, dt; - int i; - mtexinfo_t *tex; - int maps; - int r; - - if (node->contents != CONTENTS_NODE) - return -1; // didn't hit anything - - // calculate mid point - - // FIXME: optimize for axial - plane = node->plane; - front = DotProduct (start, plane->normal) - plane->dist; - back = DotProduct (end, plane->normal) - plane->dist; - side = front < 0; - - if ( (back < 0) == side) - return RecursiveLightPoint (node->children[side], start, end, pointcolor); - - frac = front / (front-back); - mid[0] = start[0] + (end[0] - start[0])*frac; - mid[1] = start[1] + (end[1] - start[1])*frac; - mid[2] = start[2] + (end[2] - start[2])*frac; - if (plane->type < 3) // axial planes - mid[plane->type] = plane->dist; - - // go down front side - r = RecursiveLightPoint (node->children[side], start, mid, pointcolor); - if (r >= 0) - return r; // hit something - - // check for impact on this node - surf = r_worldmodel->surfaces + node->firstsurface; - for (i=0 ; inumsurfaces ; i++, surf++) - { - byte *lightmap; - - if (surf->flags&(SURF_DRAWTURB|SURF_DRAWSKY)) - continue; // no lightmaps - - tex = surf->texinfo; - - s = DotProduct (mid, tex->vecs[0]) + tex->vecs[0][3]; - t = DotProduct (mid, tex->vecs[1]) + tex->vecs[1][3]; - if (s < surf->texturemins[0] || - t < surf->texturemins[1]) - continue; - - ds = s - surf->texturemins[0]; - dt = t - surf->texturemins[1]; - - if ( ds > surf->extents[0] || dt > surf->extents[1] ) - continue; - - if (!surf->samples) - return 0; - - ds >>= 4; - dt >>= 4; - - lightmap = surf->samples; - VectorCopy (vec3_origin, pointcolor); - - lightmap += 3 * (dt * ((surf->extents[0] >> 4) + 1) + ds); - - for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ; - maps++) - { - const float *rgb; - int j; - - rgb = r_newrefdef.lightstyles[surf->styles[maps]].rgb; - - /* Apply light level to models */ - for (j = 0; j < 3; j++) - { - float scale; - - scale = rgb[j] * r_modulate->value; - pointcolor[j] += lightmap[j] * scale * (1.0 / 255); - } - - lightmap += 3 * ((surf->extents[0] >> 4) + 1) * - ((surf->extents[1] >> 4) + 1); - } - - return 1; - } - - // go down back side - return RecursiveLightPoint (node->children[!side], mid, end, pointcolor); -} - -/* -=============== -R_LightPoint -=============== -*/ -void -R_LightPoint (const entity_t *currententity, vec3_t p, vec3_t color) -{ - vec3_t end; - float r; - int lnum; - dlight_t *dl; - vec3_t dist; - vec3_t pointcolor; - - if (!r_worldmodel->lightdata) - { - color[0] = color[1] = color[2] = 1.0; - return; - } - - end[0] = p[0]; - end[1] = p[1]; - end[2] = p[2] - 2048; - - r = RecursiveLightPoint (r_worldmodel->nodes, p, end, pointcolor); - - if (r == -1) - { - VectorCopy (vec3_origin, color); - } - else - { - VectorCopy (pointcolor, color); - } - - // - // add dynamic lights - // - for (lnum=0 ; lnumorigin, - dl->origin, - dist); - add = dl->intensity - VectorLength(dist); - add *= (1.0/256); - if (add > 0) - { - VectorMA (color, add, dl->color, color); - } - } -} - -//=================================================================== - - -light_t *blocklights = NULL, *blocklight_max = NULL; - -/* -=============== -R_AddDynamicLights -=============== -*/ -static void -R_AddDynamicLights (drawsurf_t* drawsurf) -{ - msurface_t *surf; - int lnum; - int smax, tmax; - mtexinfo_t *tex; - - surf = drawsurf->surf; - smax = (surf->extents[0]>>4)+1; - tmax = (surf->extents[1]>>4)+1; - tex = surf->texinfo; - - if (blocklight_max <= blocklights + smax*tmax*3) - { - r_outoflights = true; - return; - } - - for (lnum=0; lnum < r_newrefdef.num_dlights; lnum++) - { - vec3_t impact, local, color; - float dist, rad, minlight; - int t; - int i; - dlight_t *dl; - int negativeLight; - light_t *plightdest = blocklights; - - if (!(surf->dlightbits & (1<intensity; - - if(r_colorlight->value == 0) - { - for(i=0; i<3; i++) - color[i] = 256; - } - else - { - for(i=0; i<3; i++) - color[i] = 256 * dl->color[i]; - } - - //===== - negativeLight = 0; - if(rad < 0) - { - negativeLight = 1; - rad = -rad; - } - //===== - - dist = DotProduct (dl->origin, surf->plane->normal) - - surf->plane->dist; - rad -= fabs(dist); - minlight = DLIGHT_CUTOFF; // dl->minlight; - if (rad < minlight) - continue; - minlight = rad - minlight; - - for (i=0 ; i<3 ; i++) - { - impact[i] = dl->origin[i] - - surf->plane->normal[i]*dist; - } - - local[0] = DotProduct (impact, tex->vecs[0]) + tex->vecs[0][3]; - local[1] = DotProduct (impact, tex->vecs[1]) + tex->vecs[1][3]; - - local[0] -= surf->texturemins[0]; - local[1] -= surf->texturemins[1]; - - for (t = 0 ; t td) - dist = sd + (td>>1); - else - dist = td + (sd>>1); - - for (i=0; i<3; i++) - { - //==== - if(!negativeLight) - { - if (dist < minlight) - *plightdest += (rad - dist) * color[i]; - - } - else - { - if (dist < minlight) - *plightdest -= (rad - dist) * color[i]; - if(*plightdest < minlight) - *plightdest = minlight; - } - //==== - plightdest ++; - } - } - } - } -} - -/* -=============== -R_BuildLightMap - -Combine and scale multiple lightmaps into the 8.8 format in blocklights -=============== -*/ -void -R_BuildLightMap (drawsurf_t* drawsurf) -{ - int smax, tmax; - int size; - byte *lightmap; - msurface_t *surf; - - surf = drawsurf->surf; - - smax = (surf->extents[0]>>4)+1; - tmax = (surf->extents[1]>>4)+1; - size = smax*tmax*3; - - if (blocklight_max <= blocklights + size) - { - r_outoflights = true; - return; - } - - // clear to no light - memset(blocklights, 0, size * sizeof(light_t)); - - if (r_fullbright->value || !r_worldmodel->lightdata) - { - return; - } - - // add all the lightmaps - lightmap = surf->samples; - if (lightmap) - { - int maps; - - for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ; - maps++) - { - unsigned scale; - light_t *curr_light, *max_light; - - curr_light = blocklights; - max_light = blocklights + size; - - scale = drawsurf->lightadj[maps]; // 8.8 fraction - - if(r_colorlight->value == 0) - { - do - { - light_t light; - - light = lightmap[0]; - if (light < lightmap[1]) - light = lightmap[1]; - if (light < lightmap[2]) - light = lightmap[2]; - - light *= scale; - - *curr_light += light; - curr_light++; - *curr_light += light; - curr_light++; - *curr_light += light; - curr_light++; - - lightmap += 3; /* skip to next lightmap */ - } - while(curr_light < max_light); - } - else - { - do - { - *curr_light += *lightmap * scale; - curr_light++; - lightmap ++; /* skip to next lightmap */ - } - while(curr_light < max_light); - } - } - } - - // add all the dynamic lights - if (surf->dlightframe == r_framecount) - R_AddDynamicLights (drawsurf); - - // bound, invert, and shift - { - light_t *curr_light, *max_light; - - curr_light = blocklights; - max_light = blocklights + size; - - do - { - int t; - - t = (int)*curr_light; - - if (t < 0) - t = 0; - t = (255*256 - t) >> (8 - VID_CBITS); - - if (t < (1 << 6)) - t = (1 << 6); - - *curr_light = t; - curr_light++; - } - while(curr_light < max_light); - } -} diff --git a/src/client/refresh/soft/sw_main.c b/src/client/refresh/soft/sw_main.c deleted file mode 100644 index 4cc76d190..000000000 --- a/src/client/refresh/soft/sw_main.c +++ /dev/null @@ -1,2698 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#include - -#ifdef USE_SDL3 -#include -#else -#include -#include -#endif - -#include "header/local.h" - -#define NUMSTACKEDGES 2048 -#define NUMSTACKSURFACES 1024 -#define MAXALIASVERTS 2048 -#define MAXLIGHTS 1024 // allow some very large lightmaps - -pixel_t *vid_buffer = NULL; -static pixel_t *swap_buffers = NULL; -static pixel_t *swap_frames[2] = {NULL, NULL}; -static int swap_current = 0; -espan_t *vid_polygon_spans = NULL; -pixel_t *vid_colormap = NULL; -pixel_t *vid_alphamap = NULL; -light_t vid_lightthreshold = 0; -static int vid_minu, vid_minv, vid_maxu, vid_maxv; -static int vid_zminu, vid_zminv, vid_zmaxu, vid_zmaxv; -static qboolean IsHighDPIaware = false; -static qboolean texture_high_color = false; - -// last position on map -static vec3_t lastvieworg; -static vec3_t lastviewangles; -qboolean fastmoving; -static qboolean palette_changed; - -refimport_t ri; - -byte d_8to24table[256 * 4]; - -vec3_t skyaxis; - -model_t *r_worldmodel; - -pixel_t *r_warpbuffer; - -typedef struct swstate_s -{ - int prev_mode; /* last valid SW mode */ - - unsigned char gammatable[256]; - unsigned char currentpalette[1024]; -} swstate_t; - -static swstate_t sw_state; - -void *colormap; -float r_time1; -int r_numallocatededges; -int r_numallocatedverts; -int r_numallocatedtriangles; -int r_numallocatedlights; -int r_numallocatededgebasespans; -float r_aliasuvscale = 1.0; -qboolean r_outofsurfaces; -qboolean r_outofedges; -qboolean r_outofverts; -qboolean r_outoftriangles; -qboolean r_outoflights; -qboolean r_outedgebasespans; - -qboolean r_dowarp; - -mvertex_t *r_pcurrentvertbase; - -int c_surf; -static int r_cnumsurfs; -int r_clipflags; - -// -// view origin -// -vec3_t vup, base_vup; -vec3_t vpn, base_vpn; -vec3_t vright, base_vright; -vec3_t r_origin; - -// -// screen size info -// -oldrefdef_t r_refdef; -float xscale, yscale; -float xscaleinv, yscaleinv; -float xscaleshrink, yscaleshrink; -float aliasxscale, aliasyscale, aliasxcenter, aliasycenter; - -cplane_t screenedge[4]; - -// -// refresh flags -// -int r_framecount = 1; // so frame counts initialized to 0 don't match -int r_visframecount; -int r_polycount; -int r_drawnpolycount; - -int *pfrustum_indexes[4]; -int r_viewcluster, r_oldviewcluster; - -image_t *r_notexture_mip; - -float da_time1, da_time2, dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2; -float se_time1, se_time2, de_time1, de_time2; - -cvar_t *r_lefthand; -cvar_t *r_gunfov; -cvar_t *r_farsee; -cvar_t *r_lightmap; -cvar_t *r_colorlight; -static cvar_t *sw_aliasstats; -cvar_t *sw_clearcolor; -cvar_t *sw_drawflat; -cvar_t *sw_draworder; -static cvar_t *r_mode; -cvar_t *sw_stipplealpha; -cvar_t *sw_surfcacheoverride; -cvar_t *sw_waterwarp; -static cvar_t *sw_overbrightbits; -cvar_t *sw_custom_particles; -static cvar_t *sw_anisotropic; -cvar_t *sw_texture_filtering; -cvar_t *r_retexturing; -cvar_t *r_scale8bittextures; -cvar_t *sw_gunzposition; -cvar_t *r_validation; -static cvar_t *sw_partialrefresh; - -cvar_t *r_drawworld; -static cvar_t *r_drawentities; -static cvar_t *r_dspeeds; -cvar_t *r_fullbright; -cvar_t *r_lerpmodels; -static cvar_t *r_novis; -cvar_t *r_modulate; -static cvar_t *r_vsync; -static cvar_t *r_customwidth; -static cvar_t *r_customheight; - -static cvar_t *r_speeds; -cvar_t *r_lightlevel; //FIXME HACK -cvar_t *r_fixsurfsky; - -static cvar_t *vid_fullscreen; -static cvar_t *vid_gamma; - -static cvar_t *r_lockpvs; -static cvar_t *r_palettedtexture; -cvar_t *r_cull; - -// sw_vars.c - -// all global and static refresh variables are collected in a contiguous block -// to avoid cache conflicts. - -//------------------------------------------------------- -// global refresh variables -//------------------------------------------------------- - -// FIXME: make into one big structure, like cl or sv -// FIXME: do separately for refresh engine and driver - - -// d_vars.c - -// all global and static refresh variables are collected in a contiguous block -// to avoid cache conflicts. - -//------------------------------------------------------- -// global refresh variables -//------------------------------------------------------- - -// FIXME: make into one big structure, like cl or sv -// FIXME: do separately for refresh engine and driver - -float d_sdivzstepu, d_tdivzstepu; -float d_sdivzstepv, d_tdivzstepv; -float d_sdivzorigin, d_tdivzorigin; - -int sadjust, tadjust, bbextents, bbextentt; - -pixel_t *cacheblock; -int cachewidth; -pixel_t *d_viewbuffer; -zvalue_t *d_pzbuffer; - -static void RE_BeginFrame(float camera_separation); -static void Draw_BuildGammaTable(void); -static void RE_CleanFrame(void); -static void RE_EndFrame(void); -static void R_DrawBeam(const entity_t *e); - -/* -================ -VID_DamageZBuffer - -Mark VID Z buffer as damaged and need to be recalculated -================ -*/ -void -VID_DamageZBuffer(int u, int v) -{ - // update U - if (vid_zminu > u) - { - vid_zminu = u; - } - if (vid_zmaxu < u) - { - vid_zmaxu = u; - } - - // update V - if (vid_zminv > v) - { - vid_zminv = v; - } - if (vid_zmaxv < v) - { - vid_zmaxv = v; - } -} - -// clean z damage state -static void -VID_NoDamageZBuffer(void) -{ - vid_zminu = vid_buffer_width; - vid_zmaxu = 0; - vid_zminv = vid_buffer_height; - vid_zmaxv = 0; -} - -qboolean -VID_CheckDamageZBuffer(int u, int v, int ucount, int vcount) -{ - if (vid_zminv > (v + vcount) || vid_zmaxv < v) - { - // can be used previous zbuffer - return false; - } - - if (vid_zminu > u && vid_zminu > (u + ucount)) - { - // can be used previous zbuffer - return false; - } - - if (vid_zmaxu < u && vid_zmaxu < (u + ucount)) - { - // can be used previous zbuffer - return false; - } - return true; -} - -// Need to recalculate whole z buffer -static void -VID_WholeDamageZBuffer(void) -{ - vid_zminu = 0; - vid_zmaxu = vid_buffer_width; - vid_zminv = 0; - vid_zmaxv = vid_buffer_height; -} - -/* -================ -VID_DamageBuffer - -Mark VID buffer as damaged and need to be rewritten -================ -*/ -void -VID_DamageBuffer(int u, int v) -{ - // update U - if (vid_minu > u) - { - vid_minu = u; - } - if (vid_maxu < u) - { - vid_maxu = u; - } - // update V - if (vid_minv > v) - { - vid_minv = v; - } - if (vid_maxv < v) - { - vid_maxv = v; - } - - /* Should copy internal buffer */ - texture_high_color = false; -} - -// clean damage state -static void -VID_NoDamageBuffer(void) -{ - vid_minu = vid_buffer_width; - vid_maxu = 0; - vid_minv = vid_buffer_height; - vid_maxv = 0; -} - -// Need to rewrite whole buffer -static void -VID_WholeDamageBuffer(void) -{ - vid_minu = 0; - vid_maxu = vid_buffer_width; - vid_minv = 0; - vid_maxv = vid_buffer_height; -} - -/* -================ -R_InitTurb -================ -*/ -static void -R_InitTurb (int width) -{ - int i; - - memset(blanktable, 0, (width+CYCLE) * sizeof(int)); - for (i = 0; i < (width+CYCLE); i++) - { - sintable[i] = AMP + sin(i*3.14159*2/CYCLE)*AMP; - intsintable[i] = AMP2 + sin(i*3.14159*2/CYCLE)*AMP2; // AMP2, not 20 - } -} - -void R_ImageList_f(void); -static void R_ScreenShot_f(void); - -static void -R_RegisterVariables (void) -{ - sw_aliasstats = ri.Cvar_Get ("sw_polymodelstats", "0", 0); - sw_clearcolor = ri.Cvar_Get ("sw_clearcolor", "2", 0); - sw_drawflat = ri.Cvar_Get ("sw_drawflat", "0", 0); - sw_draworder = ri.Cvar_Get ("sw_draworder", "0", 0); - sw_mipcap = ri.Cvar_Get ("sw_mipcap", "0", 0); - sw_mipscale = ri.Cvar_Get ("sw_mipscale", "1", 0); - sw_stipplealpha = ri.Cvar_Get( "sw_stipplealpha", "0", CVAR_ARCHIVE ); - sw_surfcacheoverride = ri.Cvar_Get ("sw_surfcacheoverride", "0", 0); - sw_waterwarp = ri.Cvar_Get ("sw_waterwarp", "1", 0); - sw_overbrightbits = ri.Cvar_Get("sw_overbrightbits", "1.0", CVAR_ARCHIVE); - sw_custom_particles = ri.Cvar_Get("sw_custom_particles", "0", CVAR_ARCHIVE); - sw_texture_filtering = ri.Cvar_Get("sw_texture_filtering", "0", CVAR_ARCHIVE); - sw_anisotropic = ri.Cvar_Get("r_anisotropic", "0", CVAR_ARCHIVE); - r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE); - r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE); - sw_gunzposition = ri.Cvar_Get("sw_gunzposition", "8", CVAR_ARCHIVE); - r_validation = ri.Cvar_Get("r_validation", "0", CVAR_ARCHIVE); - - // On MacOS texture is cleaned up after render and code have to copy a whole - // screen to texture, other platforms save previous texture content and can be - // copied only changed parts -#if defined(__APPLE__) || defined(USE_SDL3) - sw_partialrefresh = ri.Cvar_Get("sw_partialrefresh", "0", CVAR_ARCHIVE); -#else - sw_partialrefresh = ri.Cvar_Get("sw_partialrefresh", "1", CVAR_ARCHIVE); -#endif - - r_mode = ri.Cvar_Get( "r_mode", "0", CVAR_ARCHIVE ); - - r_lefthand = ri.Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE ); - r_gunfov = ri.Cvar_Get( "r_gunfov", "80", CVAR_ARCHIVE ); - r_farsee = ri.Cvar_Get("r_farsee", "0", CVAR_LATCH | CVAR_ARCHIVE); - r_lightmap = ri.Cvar_Get("r_lightmap", "0", 0); - r_colorlight = ri.Cvar_Get("sw_colorlight", "0", CVAR_ARCHIVE); - r_speeds = ri.Cvar_Get ("r_speeds", "0", 0); - r_fullbright = ri.Cvar_Get ("r_fullbright", "0", 0); - r_drawentities = ri.Cvar_Get ("r_drawentities", "1", 0); - r_drawworld = ri.Cvar_Get ("r_drawworld", "1", 0); - r_dspeeds = ri.Cvar_Get ("r_dspeeds", "0", 0); - r_lightlevel = ri.Cvar_Get ("r_lightlevel", "0", 0); - r_lerpmodels = ri.Cvar_Get( "r_lerpmodels", "1", 0 ); - r_novis = ri.Cvar_Get( "r_novis", "0", 0 ); - r_modulate = ri.Cvar_Get("r_modulate", "1", CVAR_ARCHIVE); - r_vsync = ri.Cvar_Get("r_vsync", "1", CVAR_ARCHIVE); - r_customwidth = ri.Cvar_Get("r_customwidth", "1024", CVAR_ARCHIVE); - r_customheight = ri.Cvar_Get("r_customheight", "768", CVAR_ARCHIVE); - r_fixsurfsky = ri.Cvar_Get("r_fixsurfsky", "0", CVAR_ARCHIVE); - r_palettedtexture = ri.Cvar_Get("r_palettedtexture", "0", 0); - r_cull = ri.Cvar_Get("r_cull", "1", 0); - - vid_fullscreen = ri.Cvar_Get( "vid_fullscreen", "0", CVAR_ARCHIVE ); - vid_gamma = ri.Cvar_Get( "vid_gamma", "1.0", CVAR_ARCHIVE ); - - ri.Cmd_AddCommand("modellist", Mod_Modellist_f); - ri.Cmd_AddCommand("screenshot", R_ScreenShot_f); - ri.Cmd_AddCommand("imagelist", R_ImageList_f); - - r_mode->modified = true; // force us to do mode specific stuff later - vid_gamma->modified = true; // force us to rebuild the gamma table later - sw_overbrightbits->modified = true; // force us to rebuild palette later - - r_lockpvs = ri.Cvar_Get ("r_lockpvs", "0", 0); -} - -static void -R_UnRegister (void) -{ - ri.Cmd_RemoveCommand( "screenshot" ); - ri.Cmd_RemoveCommand( "modellist" ); - ri.Cmd_RemoveCommand( "imagelist" ); -} - -static void RE_ShutdownContext(void); -static void SWimp_CreateRender(int width, int height); -static int RE_InitContext(void *win); -static void RE_GetDrawableSize(int* width, int* height); -static qboolean RE_SetMode(void); - -/* -=============== -R_Init -=============== -*/ -static qboolean -RE_Init(void) -{ - R_RegisterVariables (); - R_InitImages (); - Mod_Init (); - Draw_InitLocal (); - - view_clipplanes[0].leftedge = true; - view_clipplanes[1].rightedge = true; - view_clipplanes[1].leftedge = view_clipplanes[2].leftedge = - view_clipplanes[3].leftedge = false; - view_clipplanes[0].rightedge = view_clipplanes[2].rightedge = - view_clipplanes[3].rightedge = false; - - r_refdef.xOrigin = XCENTERING; - r_refdef.yOrigin = YCENTERING; - - r_aliasuvscale = 1.0; - - GetPCXPalette (&vid_colormap, (unsigned *)d_8to24table); - vid_alphamap = vid_colormap + 64*256; - - /* set our "safe" mode */ - sw_state.prev_mode = 4; - - /* create the window and set up the context */ - if (!RE_SetMode()) - { - Com_Printf("%s() could not R_SetMode()\n", __func__); - return false; - } - - // create the window - ri.Vid_MenuInit(); - - Com_Printf("ref_soft version: "REF_VERSION"\n"); - - return true; -} - -/* -=============== -RE_Shutdown -=============== -*/ -static void -RE_Shutdown (void) -{ - // free z buffer - if (d_pzbuffer) - { - free (d_pzbuffer); - d_pzbuffer = NULL; - } - // free surface cache - if (sc_base) - { - D_FlushCaches (); - free (sc_base); - sc_base = NULL; - } - - // free colormap - if (vid_colormap) - { - free (vid_colormap); - vid_colormap = NULL; - } - - R_UnRegister (); - Mod_FreeAll (); - R_ShutdownImages (); - - RE_ShutdownContext(); -} - -/* -=============== -R_NewMap -=============== -*/ -void -R_NewMap (void) -{ - r_viewcluster = -1; -} - -static surf_t *lsurfs; - -/* -=============== -R_ReallocateMapBuffers -=============== -*/ -static void -R_ReallocateMapBuffers (void) -{ - if (!r_cnumsurfs || r_outofsurfaces) - { - if (lsurfs) - { - free(lsurfs); - } - - if (r_outofsurfaces) - { - r_cnumsurfs *= 2; - r_outofsurfaces = false; - } - - if ((r_farsee->value > 0) && (r_cnumsurfs < NUMSTACKSURFACES)) - r_cnumsurfs = NUMSTACKSURFACES * 2; - else if (r_cnumsurfs < NUMSTACKSURFACES) - r_cnumsurfs = NUMSTACKSURFACES; - - // edge_t->surf limited size to short - if (r_cnumsurfs > SURFINDEX_MAX) - { - r_cnumsurfs = SURFINDEX_MAX; - Com_Printf("%s: Code has limitation to surfaces count.\n", - __func__); - } - - lsurfs = malloc (r_cnumsurfs * sizeof(surf_t)); - if (!lsurfs) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, (int)(r_cnumsurfs * sizeof(surf_t))); - return; - } - - surfaces = lsurfs; - // set limits - surf_max = &surfaces[r_cnumsurfs]; - // surface 0 doesn't really exist; it's just a dummy because index 0 - // is used to indicate no edge attached to surface - surfaces--; - - surface_p = &surfaces[2]; // background is surface 1, - // surface 0 is a dummy - - Com_DPrintf("Allocated %d surfaces.\n", r_cnumsurfs); - } - - if (!r_numallocatedlights || r_outoflights) - { - free(blocklights); - - if (r_outoflights) - { - r_numallocatedlights *= 2; - r_outoflights = false; - } - - if (r_numallocatedlights < MAXLIGHTS) - r_numallocatedlights = MAXLIGHTS; - - blocklights = malloc (r_numallocatedlights * sizeof(light_t)); - if (!blocklights) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, (int)(r_numallocatedlights * sizeof(light_t))); - return; - } - - // set limits - blocklight_max = &blocklights[r_numallocatedlights]; - - Com_DPrintf("Allocated %d lights.\n", r_numallocatedlights); - } - - if (!r_numallocatededges || r_outofedges) - { - free(r_edges); - - if (r_outofedges) - { - r_numallocatededges *= 2; - r_outofedges = false; - } - - if ((r_farsee->value > 0) && (r_numallocatededges < NUMSTACKEDGES * 2)) - r_numallocatededges = NUMSTACKEDGES * 2; - else if (r_numallocatededges < NUMSTACKEDGES) - r_numallocatededges = NUMSTACKEDGES; - - r_edges = malloc (r_numallocatededges * sizeof(edge_t)); - if (!r_edges) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, (int)(r_numallocatededges * sizeof(edge_t))); - return; - } - - // set limits - edge_max = &r_edges[r_numallocatededges]; - edge_p = r_edges; - - Com_DPrintf("Allocated %d edges.\n", r_numallocatededges); - } - - if (!r_numallocatedverts || r_outofverts) - { - if (finalverts) - { - free(finalverts); - } - - if (r_outofverts) - { - r_numallocatedverts *= 2; - r_outofverts = false; - } - - if (r_numallocatedverts < MAXALIASVERTS) - r_numallocatedverts = MAXALIASVERTS; - - finalverts = malloc(r_numallocatedverts * sizeof(finalvert_t)); - if (!finalverts) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, (int)(r_numallocatedverts * sizeof(finalvert_t))); - return; - } - finalverts_max = &finalverts[r_numallocatedverts]; - - Com_DPrintf("Allocated %d verts.\n", r_numallocatedverts); - } - - if (!r_numallocatedtriangles || r_outoftriangles) - { - if (triangle_spans) - { - free(triangle_spans); - } - - if (r_outoftriangles) - { - r_numallocatedtriangles *= 2; - r_outoftriangles = false; - } - - // one more for the terminator - if (r_numallocatedtriangles < vid.height + 1) - { - r_numallocatedtriangles = vid.height + 1; - } - - triangle_spans = malloc(r_numallocatedtriangles * sizeof(spanpackage_t)); - if (!triangle_spans) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, (int)(r_numallocatedtriangles * sizeof(spanpackage_t))); - return; - } - triangles_max = &triangle_spans[r_numallocatedtriangles]; - - Com_DPrintf("Allocated %d triangle spans.\n", r_numallocatedtriangles); - } - - if (!r_numallocatededgebasespans || r_outedgebasespans) - { - if (edge_basespans) - { - free(edge_basespans); - } - - if (r_outedgebasespans) - { - r_numallocatededgebasespans *= 2; - r_outedgebasespans = false; - } - - // used up to 8 * width spans for render, allocate once before use - if (r_numallocatededgebasespans < vid_buffer_width * 8) - r_numallocatededgebasespans = vid_buffer_width * 8; - - edge_basespans = malloc(r_numallocatededgebasespans * sizeof(espan_t)); - if (!edge_basespans) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, (int)(r_numallocatededgebasespans * sizeof(espan_t))); - return; - } - max_span_p = &edge_basespans[r_numallocatededgebasespans]; - - Com_DPrintf("Allocated %d edgespans.\n", r_numallocatededgebasespans); - } -} - - -/* -=============== -R_MarkLeaves - -Mark the leaves and nodes that are in the PVS for the current -cluster -=============== -*/ -static void -R_MarkLeaves (void) -{ - const byte *vis; - mnode_t *node; - int i; - mleaf_t *leaf; - - if (r_oldviewcluster == r_viewcluster && !r_novis->value && r_viewcluster != -1) - return; - - // development aid to let you run around and see exactly where - // the pvs ends - if (r_lockpvs->value) - return; - - r_visframecount++; - r_oldviewcluster = r_viewcluster; - - if (r_novis->value || r_viewcluster == -1 || !r_worldmodel->vis) - { - // mark everything - for (i=0 ; inumleafs ; i++) - r_worldmodel->leafs[i].visframe = r_visframecount; - for (i=0 ; inumnodes ; i++) - r_worldmodel->nodes[i].visframe = r_visframecount; - return; - } - - vis = Mod_ClusterPVS (r_viewcluster, r_worldmodel); - - for (i=0,leaf=r_worldmodel->leafs ; inumleafs ; i++, leaf++) - { - int cluster; - - cluster = leaf->cluster; - if (cluster == -1) - continue; - if (vis[cluster>>3] & (1<<(cluster&7))) - { - node = (mnode_t *)leaf; - do - { - if (node->visframe == r_visframecount) - break; - node->visframe = r_visframecount; - node = node->parent; - } while (node); - } - } -} - -/* -** R_DrawNullModel -** -** IMPLEMENT THIS! -*/ -static void -R_DrawNullModel(void) -{ -} - -/* -============= -R_DrawEntitiesOnList -============= -*/ -static void -R_DrawEntitiesOnList (void) -{ - qboolean translucent_entities = false; - int i; - - if (!r_drawentities->value) - { - return; - } - - // all bmodels have already been drawn by the edge list - for (i = 0; i < r_newrefdef.num_entities; i++) - { - entity_t *currententity = &r_newrefdef.entities[i]; - - if (currententity->flags & RF_TRANSLUCENT) - { - translucent_entities = true; - continue; /* not solid */ - } - - if ( currententity->flags & RF_BEAM ) - { - modelorg[0] = -r_origin[0]; - modelorg[1] = -r_origin[1]; - modelorg[2] = -r_origin[2]; - VectorCopy(vec3_origin, r_entorigin); - R_DrawBeam(currententity); - } - else - { - const model_t *currentmodel = currententity->model; - if (!currentmodel) - { - R_DrawNullModel(); - continue; - } - VectorCopy (currententity->origin, r_entorigin); - VectorSubtract (r_origin, r_entorigin, modelorg); - - switch (currentmodel->type) - { - case mod_sprite: - R_DrawSprite(currententity, currentmodel); - break; - - case mod_alias: - R_DrawAliasModel(currententity, currentmodel); - break; - - case mod_brush: - break; - - default: - Com_Printf("%s: Bad modeltype %d\n", - __func__, currentmodel->type); - return; - } - } - } - - if (!translucent_entities) - { - return; - } - - for (i = 0; i < r_newrefdef.num_entities; i++) - { - entity_t *currententity = &r_newrefdef.entities[i]; - - if (!(currententity->flags & RF_TRANSLUCENT)) - { - continue; /* solid */ - } - - if (currententity->flags & RF_BEAM) - { - modelorg[0] = -r_origin[0]; - modelorg[1] = -r_origin[1]; - modelorg[2] = -r_origin[2]; - VectorCopy(vec3_origin, r_entorigin); - R_DrawBeam(currententity); - } - else - { - const model_t *currentmodel = currententity->model; - if (!currentmodel) - { - R_DrawNullModel(); - continue; - } - VectorCopy (currententity->origin, r_entorigin); - VectorSubtract (r_origin, r_entorigin, modelorg); - - switch (currentmodel->type) - { - case mod_sprite: - R_DrawSprite(currententity, currentmodel); - break; - - case mod_alias: - R_DrawAliasModel(currententity, currentmodel); - break; - - case mod_brush: - break; - - default: - Com_Printf("%s: Bad modeltype %d\n", - __func__, currentmodel->type); - return; - } - } - } -} - - -/* -============= -R_BmodelCheckBBox -============= -*/ -static int -R_BmodelCheckBBox(const float *minmaxs) -{ - int i, clipflags; - - clipflags = 0; - - for (i=0 ; i<4 ; i++) - { - vec3_t acceptpt, rejectpt; - const int *pindex; - float d; - - // generate accept and reject points - // FIXME: do with fast look-ups or integer tests based on the sign bit - // of the floating point values - pindex = pfrustum_indexes[i]; - - rejectpt[0] = minmaxs[pindex[0]]; - rejectpt[1] = minmaxs[pindex[1]]; - rejectpt[2] = minmaxs[pindex[2]]; - - d = DotProduct (rejectpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; - - if (d <= 0) - return BMODEL_FULLY_CLIPPED; - - acceptpt[0] = minmaxs[pindex[3+0]]; - acceptpt[1] = minmaxs[pindex[3+1]]; - acceptpt[2] = minmaxs[pindex[3+2]]; - - d = DotProduct (acceptpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; - - if (d <= 0) - clipflags |= (1<nodes; - - while (1) - { - const cplane_t *splitplane; - int sides; - - if (node->visframe != r_visframecount) - return NULL; // not visible at all - - if (node->contents != CONTENTS_NODE) - { - if (node->contents != CONTENTS_SOLID) - return node; // we've reached a non-solid leaf, so it's - // visible and not BSP clipped - return NULL; // in solid, so not visible - } - - splitplane = node->plane; - sides = BOX_ON_PLANE_SIDE(mins, maxs, splitplane); - - if (sides == 3) - return node; // this is the splitter - - // not split yet; recurse down the contacted side - if (sides & 1) - node = node->children[0]; - else - node = node->children[1]; - } -} - - -/* -============= -RotatedBBox - -Returns an axially aligned box that contains the input box at the given rotation -============= -*/ -static void -RotatedBBox (const vec3_t mins, const vec3_t maxs, vec3_t angles, vec3_t tmins, vec3_t tmaxs) -{ - vec3_t tmp, v; - int i, j; - vec3_t forward, right, up; - - if (!angles[0] && !angles[1] && !angles[2]) - { - VectorCopy (mins, tmins); - VectorCopy (maxs, tmaxs); - return; - } - - for (i=0 ; i<3 ; i++) - { - tmins[i] = (vec_t)INT_MAX; // Set maximum values for world range - tmaxs[i] = (vec_t)INT_MIN; // Set minimal values for world range - } - - AngleVectors (angles, forward, right, up); - - for ( i = 0; i < 8; i++ ) - { - if ( i & 1 ) - tmp[0] = mins[0]; - else - tmp[0] = maxs[0]; - - if ( i & 2 ) - tmp[1] = mins[1]; - else - tmp[1] = maxs[1]; - - if ( i & 4 ) - tmp[2] = mins[2]; - else - tmp[2] = maxs[2]; - - - VectorScale (forward, tmp[0], v); - VectorMA (v, -tmp[1], right, v); - VectorMA (v, tmp[2], up, v); - - for (j=0 ; j<3 ; j++) - { - if (v[j] < tmins[j]) - tmins[j] = v[j]; - if (v[j] > tmaxs[j]) - tmaxs[j] = v[j]; - } - } -} - -/* -============= -R_DrawBEntitiesOnList -============= -*/ -static void -R_DrawBEntitiesOnList (void) -{ - int i, clipflags; - vec3_t oldorigin; - vec3_t mins, maxs; - float minmaxs[6]; - mnode_t *topnode; - - if (!r_drawentities->value) - return; - - VectorCopy (modelorg, oldorigin); - - for (i = 0; i < r_newrefdef.num_entities; i++) - { - entity_t *currententity = &r_newrefdef.entities[i]; - const model_t *currentmodel = currententity->model; - if ( currententity->flags & RF_BEAM ) - continue; - if (!currentmodel) - continue; - if (currentmodel->nummodelsurfaces == 0) - continue; // clip brush only - if (currentmodel->type != mod_brush) - continue; - // see if the bounding box lets us trivially reject, also sets - // trivial accept status - RotatedBBox (currentmodel->mins, currentmodel->maxs, - currententity->angles, mins, maxs); - VectorAdd (mins, currententity->origin, minmaxs); - VectorAdd (maxs, currententity->origin, (minmaxs+3)); - - clipflags = R_BmodelCheckBBox (minmaxs); - if (clipflags == BMODEL_FULLY_CLIPPED) - continue; // off the edge of the screen - - topnode = R_FindTopnode (minmaxs, minmaxs+3); - if (!topnode) - continue; // no part in a visible leaf - - VectorCopy (currententity->origin, r_entorigin); - VectorSubtract (r_origin, r_entorigin, modelorg); - - r_pcurrentvertbase = currentmodel->vertexes; - - // FIXME: stop transforming twice - R_RotateBmodel(currententity); - - // calculate dynamic lighting for bmodel - R_PushDlights(currentmodel); - - if (topnode->contents == CONTENTS_NODE) - { - // not a leaf; has to be clipped to the world BSP - r_clipflags = clipflags; - R_DrawSolidClippedSubmodelPolygons(currententity, currentmodel, topnode); - } - else - { - // falls entirely in one leaf, so we just put all the - // edges in the edge list and let 1/z sorting handle - // drawing order - R_DrawSubmodelPolygons(currententity, currentmodel, clipflags, topnode); - } - - // put back world rotation and frustum clipping - // FIXME: R_RotateBmodel should just work off base_vxx - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - VectorCopy (oldorigin, modelorg); - R_TransformFrustum (); - } -} - -/* -================ -R_EdgeDrawing - -Render the map -================ -*/ -static void -R_EdgeDrawing (entity_t *currententity) -{ - if ( r_newrefdef.rdflags & RDF_NOWORLDMODEL ) - return; - - // Set function pointer pdrawfunc used later in this function - R_BeginEdgeFrame (); - edge_p = r_edges; - surface_p = &surfaces[2]; // background is surface 1, - // surface 0 is a dummy - - if (r_dspeeds->value) - { - rw_time1 = SDL_GetTicks(); - } - - // Build the Global Edget Table - // Also populate the surface stack and count # surfaces to render (surf_max is the max) - R_RenderWorld (currententity); - - if (r_dspeeds->value) - { - rw_time2 = SDL_GetTicks(); - db_time1 = rw_time2; - } - - R_DrawBEntitiesOnList(); - - if (r_dspeeds->value) - { - db_time2 = SDL_GetTicks(); - se_time1 = db_time2; - } - - // Use the Global Edge Table to maintin the Active Edge Table: Draw the world as scanlines - // Write the Z-Buffer (but no read) - R_ScanEdges (currententity, surface_p); -} - -//======================================================================= - -static void R_GammaCorrectAndSetPalette(const unsigned char *palette); - -/* -============= -R_CalcPalette - -============= -*/ -static void -R_CalcPalette (void) -{ - static qboolean modified; - byte palette[256][4], *in, *out; - int i, j; - float alpha, one_minus_alpha; - vec3_t premult; - int v; - - alpha = r_newrefdef.blend[3]; - if (alpha <= 0) - { - if (modified) - { // set back to default - modified = false; - R_GammaCorrectAndSetPalette( d_8to24table ); - return; - } - return; - } - - modified = true; - if (alpha > 1) - alpha = 1; - - premult[0] = r_newrefdef.blend[0]*alpha*255; - premult[1] = r_newrefdef.blend[1]*alpha*255; - premult[2] = r_newrefdef.blend[2]*alpha*255; - - one_minus_alpha = (1.0 - alpha); - - in = d_8to24table; - out = palette[0]; - for (i=0 ; i<256 ; i++, in+=4, out+=4) - { - for (j=0 ; j<3 ; j++) - { - v = premult[j] + one_minus_alpha * in[j]; - if (v > 255) - v = 255; - out[j] = v; - } - out[3] = 255; - } - - R_GammaCorrectAndSetPalette( ( const unsigned char * ) palette[0] ); -} - -//======================================================================= - -static void -R_SetLightLevel(const entity_t *currententity) -{ - vec3_t shadelight = {0}; - - if ((r_newrefdef.rdflags & RDF_NOWORLDMODEL) || (!r_drawentities->value) || (!currententity)) - { - r_lightlevel->value = 150.0; - return; - } - - /* save off light value for server to look at (BIG HACK!) */ - R_LightPoint(currententity, r_newrefdef.vieworg, shadelight); - - /* pick the greatest component, which should be the - * same as the mono value returned by before color light apply */ - if (shadelight[0] > shadelight[1]) - { - if (shadelight[0] > shadelight[2]) - { - r_lightlevel->value = 150 * shadelight[0]; - } - else - { - r_lightlevel->value = 150 * shadelight[2]; - } - } - else - { - if (shadelight[1] > shadelight[2]) - { - r_lightlevel->value = 150 * shadelight[1]; - } - else - { - r_lightlevel->value = 150 * shadelight[2]; - } - } -} - -static int -VectorCompareRound(const vec3_t v1, const vec3_t v2) -{ - if ((int)(v1[0] - v2[0]) || (int)(v1[1] - v2[1]) || (int)(v1[2] - v2[2])) - { - return 0; - } - - return 1; -} - -cplane_t frustum[4]; - - -/* -================ -RE_RenderFrame - -================ -*/ -static void -RE_RenderFrame(refdef_t *fd) -{ - r_newrefdef = *fd; - entity_t ent; - - if (!r_worldmodel && !( r_newrefdef.rdflags & RDF_NOWORLDMODEL ) ) - { - Com_Error(ERR_FATAL, "%s: NULL worldmodel", __func__); - } - - // Need to rerender whole frame - VID_WholeDamageBuffer(); - - VectorCopy (fd->vieworg, r_refdef.vieworg); - VectorCopy (fd->viewangles, r_refdef.viewangles); - - // compare current position with old - if (vid_buffer_width <= 640 || - !VectorCompareRound(fd->vieworg, lastvieworg) || - !VectorCompareRound(fd->viewangles, lastviewangles)) - { - fastmoving = true; - } - else - { - fastmoving = false; - } - - // save position for next check - VectorCopy (fd->vieworg, lastvieworg); - VectorCopy (fd->viewangles, lastviewangles); - - if (r_speeds->value || r_dspeeds->value) - r_time1 = SDL_GetTicks(); - - R_SetupFrame (); - - R_SetFrustum(vup, vpn, vright, r_origin, r_newrefdef.fov_x, r_newrefdef.fov_y, - frustum); - - // Using the current view cluster (r_viewcluster), retrieve and decompress - // the PVS (Potentially Visible Set) - R_MarkLeaves(); // done here so we know if we're in water - - // For each dlight_t* passed via r_newrefdef.dlights, mark polygons affected by a light. - R_PushDlights(r_worldmodel); - - // TODO: rearrange code same as in GL*_DrawWorld? - /* auto cycle the world frame for texture animation */ - memset(&ent, 0, sizeof(ent)); - ent.frame = (int)(r_newrefdef.time * 2); - - // Build the Global Edge Table and render it via the Active Edge Table - // Render the map - R_EdgeDrawing (&ent); - - if (r_dspeeds->value) - { - se_time2 = SDL_GetTicks(); - de_time1 = se_time2; - } - - if (fastmoving) - { - // redraw all - VID_WholeDamageZBuffer(); - } - else - { - // No Z rewrite required - VID_NoDamageZBuffer(); - } - // Draw enemies, barrel etc... - // Use Z-Buffer mostly in read mode only. - R_DrawEntitiesOnList(); - - if (r_dspeeds->value) - { - de_time2 = SDL_GetTicks(); - dp_time1 = SDL_GetTicks(); - } - - // Duh ! - R_DrawParticles(); - - if (r_dspeeds->value) - { - dp_time2 = SDL_GetTicks(); - } - - // Perform pixel palette blending ia the pics/colormap.pcx lower part lookup table. - R_DrawAlphaSurfaces(&ent); - - // Save off light value for server to look at (BIG HACK!) - R_SetLightLevel(&ent); - - if (r_dowarp) - { - D_WarpScreen (); - } - - if (r_dspeeds->value) - { - da_time1 = SDL_GetTicks(); - da_time2 = SDL_GetTicks(); - } - - // Modify the palette (when taking hit or pickup item) so all colors are modified - R_CalcPalette (); - - if (sw_aliasstats->value) - { - R_PrintAliasStats(); - } - - if (r_speeds->value) - { - R_PrintTimes(); - } - - if (r_dspeeds->value) - { - R_PrintDSpeeds(); - } - - R_ReallocateMapBuffers(); -} - -/* -** R_InitGraphics -*/ -static void -R_InitGraphics( int width, int height ) -{ - // free z buffer - if ( d_pzbuffer ) - { - free(d_pzbuffer); - d_pzbuffer = NULL; - } - - // free surface cache - if ( sc_base ) - { - D_FlushCaches(); - free(sc_base); - sc_base = NULL; - } - - d_pzbuffer = malloc(width * height * sizeof(zvalue_t)); - - R_InitCaches(); - - R_GammaCorrectAndSetPalette(d_8to24table); -} - -static rserr_t SWimp_SetMode(int *pwidth, int *pheight, int mode, int fullscreen); - -/* -** RE_BeginFrame -*/ -static void -RE_BeginFrame(float camera_separation) -{ - /* pallete without changes */ - palette_changed = false; - /* run without speed optimization */ - fastmoving = false; - /* texture could redraw */ - texture_high_color = false; - - while (r_vsync->modified) - { - RE_SetMode(); - } - - /* - ** rebuild the gamma correction palette if necessary - */ - if ( vid_gamma->modified || sw_overbrightbits->modified ) - { - Draw_BuildGammaTable(); - R_GammaCorrectAndSetPalette(d_8to24table); - // we need redraw everything - VID_WholeDamageBuffer(); - // and backbuffer should be zeroed - memset(swap_buffers + ((swap_current + 1)&1), 0, - vid_buffer_height * vid_buffer_width * sizeof(pixel_t)); - - vid_gamma->modified = false; - sw_overbrightbits->modified = false; - } -} - -/* -================== -R_SetMode -================== -*/ -static qboolean -RE_SetMode(void) -{ - int err; - int fullscreen; - - fullscreen = (int)vid_fullscreen->value; - - r_vsync->modified = false; - - /* a bit hackish approach to enable custom resolutions: - Glimp_SetMode needs these values set for mode -1 */ - vid.width = r_customwidth->value; - vid.height = r_customheight->value; - - /* - ** if this returns rserr_invalid_mode then it set previous resolution - */ - if ((err = SWimp_SetMode(&vid.width, &vid.height, r_mode->value, fullscreen)) == rserr_ok) - { - if (r_mode->value == -1) - { - sw_state.prev_mode = 4; /* safe default for custom mode */ - } - else - { - sw_state.prev_mode = r_mode->value; - } - } - else - { - if (err == rserr_invalid_mode) - { - Com_Printf("%s() - invalid mode\n", __func__); - - if (r_mode->value == sw_state.prev_mode) - { - // trying again would result in a crash anyway, give up already - // (this would happen if your initing fails at all and your resolution already was 640x480) - return false; - } - - ri.Cvar_SetValue("r_mode", sw_state.prev_mode); - r_mode->modified = false; - } - - /* try setting it back to something safe */ - if (SWimp_SetMode(&vid.width, &vid.height, sw_state.prev_mode, 0) != rserr_ok) - { - Com_Printf("%s() - could not revert to safe mode\n", __func__); - return false; - } - } - - return true; -} - -/* -** R_GammaCorrectAndSetPalette -*/ -static void -R_GammaCorrectAndSetPalette( const unsigned char *palette ) -{ - int i; - - // Replace palette - for ( i = 0; i < 256; i++ ) - { - if (sw_state.currentpalette[i * 4 + 0] != sw_state.gammatable[palette[i * 4 + 2]] || - sw_state.currentpalette[i * 4 + 1] != sw_state.gammatable[palette[i * 4 + 1]] || - sw_state.currentpalette[i * 4 + 2] != sw_state.gammatable[palette[i * 4 + 0]]) - { - sw_state.currentpalette[i * 4 + 0] = sw_state.gammatable[palette[i * 4 + 2]]; // blue - sw_state.currentpalette[i * 4 + 1] = sw_state.gammatable[palette[i * 4 + 1]]; // green - sw_state.currentpalette[i * 4 + 2] = sw_state.gammatable[palette[i * 4 + 0]]; // red - - sw_state.currentpalette[i * 4 + 3] = 255; // alpha - palette_changed = true; - } - } -} - -/* -** RE_SetPalette -*/ -static void -RE_SetPalette(const unsigned char *palette) -{ - // clear screen to black to avoid any palette flash - RE_CleanFrame(); - - if (palette) - { - byte palette32[1024]; - int i; - - for ( i = 0; i < 256; i++ ) - { - palette32[i*4+0] = palette[i*3+0]; - palette32[i*4+1] = palette[i*3+1]; - palette32[i*4+2] = palette[i*3+2]; - palette32[i*4+3] = 0xFF; - } - - R_GammaCorrectAndSetPalette( palette32 ); - } - else - { - R_GammaCorrectAndSetPalette(d_8to24table); - } -} - -/* -================ -Draw_BuildGammaTable -================ -*/ -static void -Draw_BuildGammaTable (void) -{ - int i; - float g; - float overbright; - - overbright = sw_overbrightbits->value; - - if (overbright < 0.5) - overbright = 0.5; - - if (overbright > 4.0) - overbright = 4.0; - - g = (2.1 - vid_gamma->value); - - if (g == 1.0) - { - for (i=0 ; i<256 ; i++) { - int inf; - - inf = i * overbright; - - if (inf < 0) - inf = 0; - if (inf > 255) - inf = 255; - - sw_state.gammatable[i] = inf; - } - } - else - for (i=0 ; i<256 ; i++) - { - int inf; - - inf = (255 * pow ( (i+0.5)/255.5 , g ) + 0.5) * overbright; - if (inf < 0) - inf = 0; - if (inf > 255) - inf = 255; - sw_state.gammatable[i] = inf; - } -} - -/* -** R_DrawBeam -*/ -static void -R_DrawBeam(const entity_t *e) -{ -#define NUM_BEAM_SEGS 6 - - int i; - - vec3_t perpvec; - vec3_t direction, normalized_direction; - vec3_t start_points[NUM_BEAM_SEGS], end_points[NUM_BEAM_SEGS]; - vec3_t oldorigin, origin; - - oldorigin[0] = e->oldorigin[0]; - oldorigin[1] = e->oldorigin[1]; - oldorigin[2] = e->oldorigin[2]; - - origin[0] = e->origin[0]; - origin[1] = e->origin[1]; - origin[2] = e->origin[2]; - - normalized_direction[0] = direction[0] = oldorigin[0] - origin[0]; - normalized_direction[1] = direction[1] = oldorigin[1] - origin[1]; - normalized_direction[2] = direction[2] = oldorigin[2] - origin[2]; - - if ( VectorNormalize( normalized_direction ) == 0 ) - return; - - PerpendicularVector( perpvec, normalized_direction ); - VectorScale( perpvec, e->frame / 2, perpvec ); - - for ( i = 0; i < NUM_BEAM_SEGS; i++ ) - { - RotatePointAroundVector( start_points[i], normalized_direction, perpvec, (360.0/NUM_BEAM_SEGS)*i ); - VectorAdd( start_points[i], origin, start_points[i] ); - VectorAdd( start_points[i], direction, end_points[i] ); - } - - for ( i = 0; i < NUM_BEAM_SEGS; i++ ) - { - R_IMFlatShadedQuad( start_points[i], - end_points[i], - end_points[(i+1)%NUM_BEAM_SEGS], - start_points[(i+1)%NUM_BEAM_SEGS], - e->skinnum & 0xFF, - e->alpha ); - } -} - - -//=================================================================== - -/* - * FIXME: The following functions implement the render backend - * through SDL renderer. Only small parts belong here, refresh.c - * (at client side) needs to grow support funtions for software - * renderers and the renderer must use them. What's left here - * should be moved to a new file sw_sdl.c. - * - * Very, very problematic is at least the SDL initalization and - * window creation in this code. That is guaranteed to clash with - * the GL renderers (when switching GL -> Soft or the other way - * round) and works only by pure luck. And only as long as there - * is only one software renderer. - */ - -static SDL_Window *window = NULL; -static SDL_Texture *texture = NULL; -static SDL_Renderer *renderer = NULL; - -/* -============ -RE_SetSky -============ -*/ -// 3dstudio environment map names -static const char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"}; -static const int r_skysideimage[6] = {5, 2, 4, 1, 0, 3}; -extern mtexinfo_t r_skytexinfo[6]; - -static void -RE_SetSky (const char *name, float rotate, vec3_t axis) -{ - char skyname[MAX_QPATH]; - int i; - - Q_strlcpy (skyname, name, sizeof(skyname)); - VectorCopy (axis, skyaxis); - - for (i=0 ; i<6 ; i++) - { - image_t *image; - - image = (image_t *)GetSkyImage(skyname, suf[r_skysideimage[i]], - r_palettedtexture->value, (findimage_t)R_FindImage); - - if (!image) - { - Com_Printf("%s: can't load %s:%s sky\n", - __func__, skyname, suf[r_skysideimage[i]]); - image = r_notexture_mip; - } - - r_skytexinfo[i].image = image; - } -} - -/* -=============== -RE_RegisterSkin -=============== -*/ -static struct image_s * -RE_RegisterSkin (const char *name) -{ - return R_FindImage (name, it_skin); -} - -static qboolean -RE_IsVsyncActive(void) -{ - if (r_vsync->value) - { - return true; - } - else - { - return false; - } -} - -static int RE_PrepareForWindow(void) -{ - return 0; -} - -/* -===================== -RE_EndWorldRenderpass -===================== -*/ -static qboolean -RE_EndWorldRenderpass( void ) -{ - return true; -} - -static void -RE_Draw_StretchRawColor(int x, int y, int w, int h, int cols, int rows, - const byte *data, int bits) -{ - int pitch, i; - Uint32 *pixels; - - if (!cols || !rows || !data) - { - return; - } - - /* Copy to original buffers */ - RE_Draw_StretchRaw(x, y, w, h, cols, rows, data, bits); - - if (bits != 32 || x || y || - (w != vid_buffer_width) || - (h != vid_buffer_height) || - (cols != vid_buffer_width) || - (rows != vid_buffer_height)) - { - return; - } - - /* Full screen update should be faster */ -#ifdef USE_SDL3 - if (!SDL_LockTexture(texture, NULL, (void**)&pixels, &pitch)) -#else - if (SDL_LockTexture(texture, NULL, (void**)&pixels, &pitch)) -#endif - { - Com_Printf("Can't lock texture: %s\n", SDL_GetError()); - return; - } - - if ((pitch / sizeof(Uint32)) != vid_buffer_width) - { - SDL_UnlockTexture(texture); - Com_Printf("Different pitch in texture %d != %d\n", - pitch, vid_buffer_width); - return; - } - - for (i = 0; i < vid_buffer_width * vid_buffer_height; i ++) - { -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - /* SDL_PIXELFORMAT_BGRA8888 */ - ((byte*)pixels)[i * 4 + 0] = 255; - ((byte*)pixels)[i * 4 + 1] = data[i * 4 + 0]; /* Red */ - ((byte*)pixels)[i * 4 + 2] = data[i * 4 + 1]; /* Green */ - ((byte*)pixels)[i * 4 + 3] = data[i * 4 + 2]; /* Blue */ -#else - /* SDL_PIXELFORMAT_ARGB8888 */ - ((byte*)pixels)[i * 4 + 0] = data[i * 4 + 2]; /* Blue */ - ((byte*)pixels)[i * 4 + 1] = data[i * 4 + 1]; /* Green */ - ((byte*)pixels)[i * 4 + 2] = data[i * 4 + 0]; /* Red */ - ((byte*)pixels)[i * 4 + 3] = 255; -#endif - } - - SDL_UnlockTexture(texture); - - texture_high_color = true; -} - -/* -=============== -GetRefAPI -=============== -*/ -Q2_DLL_EXPORTED refexport_t -GetRefAPI(refimport_t imp) -{ - // struct for save refexport callbacks, copy of re struct from main file - // used different variable name for prevent confusion and cppcheck warnings - refexport_t refexport; - - // Need to communicate the SDL major version to the client. -#ifdef USE_SDL3 - int version = SDL_VERSIONNUM_MAJOR(SDL_GetVersion()); -#else - SDL_version ver; - SDL_VERSION(&ver); - int version = ver.major; -#endif - - memset(&refexport, 0, sizeof(refexport_t)); - ri = imp; - - refexport.api_version = API_VERSION; - refexport.framework_version = version; - - refexport.BeginRegistration = RE_BeginRegistration; - refexport.RegisterModel = RE_RegisterModel; - refexport.RegisterSkin = RE_RegisterSkin; - refexport.DrawFindPic = RE_Draw_FindPic; - refexport.SetSky = RE_SetSky; - refexport.EndRegistration = RE_EndRegistration; - - refexport.RenderFrame = RE_RenderFrame; - - refexport.DrawGetPicSize = RE_Draw_GetPicSize; - - refexport.DrawPicScaled = RE_Draw_PicScaled; - refexport.DrawStretchPic = RE_Draw_StretchPic; - refexport.DrawCharScaled = RE_Draw_CharScaled; - refexport.DrawTileClear = RE_Draw_TileClear; - refexport.DrawFill = RE_Draw_Fill; - refexport.DrawFadeScreen = RE_Draw_FadeScreen; - - refexport.DrawStretchRaw = RE_Draw_StretchRawColor; - - refexport.Init = RE_Init; - refexport.IsVSyncActive = RE_IsVsyncActive; - refexport.Shutdown = RE_Shutdown; - refexport.InitContext = RE_InitContext; - refexport.GetDrawableSize = RE_GetDrawableSize; - refexport.ShutdownContext = RE_ShutdownContext; - refexport.PrepareForWindow = RE_PrepareForWindow; - - refexport.SetPalette = RE_SetPalette; - refexport.BeginFrame = RE_BeginFrame; - refexport.EndWorldRenderpass = RE_EndWorldRenderpass; - refexport.EndFrame = RE_EndFrame; - - // Tell the client that we're unsing the - // new renderer restart API. - ri.Vid_RequestRestart(RESTART_NO); - - Swap_Init (); - - return refexport; -} - -int vid_buffer_height = 0; -int vid_buffer_width = 0; - -static int -RE_InitContext(void *win) -{ - char title[40] = {0}; - - if (win == NULL) - { - Com_Error(ERR_FATAL, "%s() must not be called with NULL argument!", __func__); - return false; - } - - window = (SDL_Window *)win; - - /* Window title - set here so we can display renderer name in it */ - snprintf(title, sizeof(title), "Yamagi Quake II %s - Soft Render", YQ2VERSION); - SDL_SetWindowTitle(window, title); - - if (r_vsync->value) - { -#ifdef USE_SDL3 - renderer = SDL_CreateRenderer(window, NULL); - SDL_SetRenderVSync(renderer, 1); -#else - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - if (!renderer) - { - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC); - } -#endif - } - else - { -#ifdef USE_SDL3 - renderer = SDL_CreateRenderer(window, NULL); -#else - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); - if (!renderer) - { - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE); - } -#endif - } - - if (!renderer) - { - Com_Printf("Can't create renderer: %s\n", SDL_GetError()); - return false; - } - - /* Select the color for drawing. It is set to black here. */ - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); - - /* Clear the entire screen to our selected color. */ - SDL_RenderClear(renderer); - - /* Up until now everything was drawn behind the scenes. - This will show the new, black contents of the window. */ - SDL_RenderPresent(renderer); - -#if SDL_VERSION_ATLEAST(2, 26, 0) - // Figure out if we are high dpi aware. - int flags = SDL_GetWindowFlags(win); -#ifdef USE_SDL3 - IsHighDPIaware = (flags & SDL_WINDOW_HIGH_PIXEL_DENSITY) ? true : false; -#else - IsHighDPIaware = (flags & SDL_WINDOW_ALLOW_HIGHDPI) ? true : false; -#endif -#endif - - /* We can't rely on vid, because the context is created - before we had a chance to overwrite it with the drawable - size. */ - if (IsHighDPIaware) - { - RE_GetDrawableSize(&vid_buffer_width, &vid_buffer_height); - } - else - { - vid_buffer_height = vid.height; - vid_buffer_width = vid.width; - } - - /* just buffer for 8bit -> 32bit covert and render */ - texture = SDL_CreateTexture(renderer, -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - SDL_PIXELFORMAT_BGRA8888, -#else - SDL_PIXELFORMAT_ARGB8888, -#endif - SDL_TEXTUREACCESS_STREAMING, - vid_buffer_width, vid_buffer_height); - - if (!texture) - { - Com_Printf("Can't create texture: %s\n", SDL_GetError()); - return false; - } - - R_InitGraphics(vid_buffer_width, vid_buffer_height); - SWimp_CreateRender(vid_buffer_width, vid_buffer_height); - - return true; -} - -/* - * Fills the actual size of the drawable into width and height. - */ -void RE_GetDrawableSize(int* width, int* height) -{ -#ifdef USE_SDL3 - SDL_GetCurrentRenderOutputSize(renderer, width, height); -#else - SDL_GetRendererOutputSize(renderer, width, height); -#endif -} - - -static void -RE_ShutdownContext(void) -{ - if (swap_buffers) - { - free(swap_buffers); - } - - swap_buffers = NULL; - vid_buffer = NULL; - swap_frames[0] = NULL; - swap_frames[1] = NULL; - - if (sintable) - { - free(sintable); - } - sintable = NULL; - - if (intsintable) - { - free(intsintable); - } - intsintable = NULL; - - if (blanktable) - { - free(blanktable); - } - blanktable = NULL; - - if (vid_polygon_spans) - { - free(vid_polygon_spans); - } - vid_polygon_spans = NULL; - - if (newedges) - { - free(newedges); - } - newedges = NULL; - - if (removeedges) - { - free(removeedges); - } - removeedges = NULL; - - if (triangle_spans) - { - free(triangle_spans); - } - triangle_spans = NULL; - - if (warp_rowptr) - { - free(warp_rowptr); - } - warp_rowptr = NULL; - - if (warp_column) - { - free(warp_column); - } - warp_column = NULL; - - if (edge_basespans) - { - free(edge_basespans); - } - edge_basespans = NULL; - - if (finalverts) - { - free(finalverts); - } - finalverts = NULL; - - if (blocklights) - { - free(blocklights); - } - blocklights = NULL; - - if (r_edges) - { - free(r_edges); - } - r_edges = NULL; - - if (lsurfs) - { - free(lsurfs); - } - lsurfs = NULL; - - if (r_warpbuffer) - { - free(r_warpbuffer); - } - r_warpbuffer = NULL; - - if (texture) - { - SDL_DestroyTexture(texture); - } - texture = NULL; - - if (renderer) - { - SDL_DestroyRenderer(renderer); - } - renderer = NULL; -} - -/* -be careful if you ever want to change width: 12.20 fixed -point math used in R_ScanEdges() overflows at width 2048 !! -*/ -char shift_size; - -static void -RE_CopyFrame(Uint32 *pixels, int pitch, SDL_Rect *rect) -{ - const unsigned *sdl_palette; - - sdl_palette = (unsigned *)sw_state.currentpalette; - - /* no gaps between images rows */ - if (pitch == vid_buffer_width) - { - const byte *src_max; - Uint32 *dst; - byte *src; - - dst = pixels; - src = vid_buffer + rect->y * vid_buffer_width; - src_max = src + rect->h * vid_buffer_width; - - while (src < src_max) - { - *dst = sdl_palette[*src]; - - src++; - dst++; - } - } - else - { - int y, buffer_pos; - Uint32 *dst; - - buffer_pos = rect->y * vid_buffer_width; - dst = pixels; - - for (y = rect->y; y < rect->y + rect->h; y++) - { - int x; - - for (x = 0; x < vid_buffer_width; x++) - { - dst[x] = sdl_palette[vid_buffer[buffer_pos]]; - buffer_pos ++; - } - - dst += pitch; - } - } - - if ((sw_anisotropic->value > 0) && !fastmoving) - { - SmoothColorImage((unsigned *)pixels, rect->h * vid_buffer_width, - sw_anisotropic->value); - } -} - -static int -RE_BufferDifferenceStart(int vmin, int vmax) -{ - int *front_buffer, *back_buffer; - const int *back_max; - - back_buffer = (int*)(swap_frames[0] + vmin); - front_buffer = (int*)(swap_frames[1] + vmin); - back_max = (int*)(swap_frames[0] + vmax); - - while (back_buffer < back_max && *back_buffer == *front_buffer) { - back_buffer ++; - front_buffer ++; - } - return (pixel_t*)back_buffer - swap_frames[0]; -} - -static size_t -RE_BufferDifferenceEnd(int vmin, int vmax) -{ - int *front_buffer, *back_buffer; - const int *back_min; - - back_buffer = (int*)(swap_frames[0] + vmax); - front_buffer = (int*)(swap_frames[1] + vmax); - back_min = (int*)(swap_frames[0] + vmin); - - do - { - back_buffer --; - front_buffer --; - } - while (back_buffer > back_min && *back_buffer == *front_buffer); - - /* +1 for fully cover changes */ - return (pixel_t*)back_buffer - swap_frames[0] + sizeof(int); -} - -static void -RE_CleanFrame(void) -{ - int pitch; - Uint32 *pixels; - - memset(swap_buffers, 0, - vid_buffer_height * vid_buffer_width * sizeof(pixel_t) * 2); - -#ifdef USE_SDL3 - if (!SDL_LockTexture(texture, NULL, (void**)&pixels, &pitch)) -#else - if (SDL_LockTexture(texture, NULL, (void**)&pixels, &pitch)) -#endif - { - Com_Printf("Can't lock texture: %s\n", SDL_GetError()); - return; - } - - // only cleanup texture without flush texture to screen - memset(pixels, 0, pitch * vid_buffer_height); - SDL_UnlockTexture(texture); - - // All changes flushed - VID_NoDamageBuffer(); -} - -static void -RE_FlushFrame(int vmin, int vmax) -{ - int pitch; - Uint32 *pixels; - SDL_Rect rect; - - if (vmin >= vmax) - { - /* Looks like we already updated everything */ - return; - } - - if (!texture_high_color) - { - if (sw_partialrefresh->value) - { - vmin = vmin / vid_buffer_width; - vmax = vmax / vid_buffer_width + 1; - if (vmax > vid_buffer_height) - { - vmax = vid_buffer_height; - } - } - else - { - // On MacOS texture is cleaned up after render, - // code have to copy a whole screen to the texture - vmin = 0; - vmax = vid_buffer_height; - } - - /* set section to update */ - rect.x = 0; - rect.y = vmin; - rect.w = vid_buffer_width; - rect.h = vmax - vmin; - -#ifdef USE_SDL3 - if (!SDL_LockTexture(texture, &rect, (void**)&pixels, &pitch)) -#else - if (SDL_LockTexture(texture, &rect, (void**)&pixels, &pitch)) -#endif - { - Com_Printf("Can't lock texture: %s\n", SDL_GetError()); - return; - } - - RE_CopyFrame(pixels, pitch / sizeof(Uint32), &rect); - - SDL_UnlockTexture(texture); - } - -#ifdef USE_SDL3 - SDL_RenderTexture(renderer, texture, NULL, NULL); -#else - SDL_RenderCopy(renderer, texture, NULL, NULL); -#endif - - SDL_RenderPresent(renderer); - - // replace use next buffer - swap_current ++; - vid_buffer = swap_frames[swap_current&1]; - - /* All changes flushed */ - VID_NoDamageBuffer(); -} - -/* -** RE_EndFrame -** -** This does an implementation specific copy from the backbuffer to the -** front buffer. -*/ -static void -RE_EndFrame(void) -{ - int vmin, vmax; - - // fix possible issue with min/max - if (vid_minu < 0) - { - vid_minu = 0; - } - - if (vid_minv < 0) - { - vid_minv = 0; - } - - if (vid_maxu > vid_buffer_width) - { - vid_maxu = vid_buffer_width; - } - - if (vid_maxv > vid_buffer_height) - { - vid_maxv = vid_buffer_height; - } - - vmin = vid_minu + vid_minv * vid_buffer_width; - vmax = vid_maxu + vid_maxv * vid_buffer_width; - - // fix to correct limit - if (vmax > (vid_buffer_height * vid_buffer_width)) - { - vmax = vid_buffer_height * vid_buffer_width; - } - - // if palette changed need to flush whole buffer - if (!palette_changed && sw_partialrefresh->value) - { - // search real begin/end of difference - vmin = RE_BufferDifferenceStart(vmin, vmax); - - // no differences found - if (vmin >= vmax) - { - return; - } - - // search difference end - vmax = RE_BufferDifferenceEnd(vmin, vmax); - if (vmax > (vid_buffer_height * vid_buffer_width)) - { - vmax = vid_buffer_height * vid_buffer_width; - } - } - - RE_FlushFrame(vmin, vmax); -} - -/* -** SWimp_SetMode -*/ -static rserr_t -SWimp_SetMode(int *pwidth, int *pheight, int mode, int fullscreen ) -{ - rserr_t retval = rserr_ok; - - Com_Printf("Setting mode %d:", mode ); - - if ((mode >= 0) && !ri.Vid_GetModeInfo( pwidth, pheight, mode ) ) - { - Com_Printf(" invalid mode\n"); - return rserr_invalid_mode; - } - - /* We trying to get resolution from desktop */ - if (mode == -2) - { - if (!ri.GLimp_GetDesktopMode(pwidth, pheight)) - { - Com_Printf(" can't detect mode\n"); - return rserr_invalid_mode; - } - } - - Com_Printf(" %dx%d (vid_fullscreen %i)\n", *pwidth, *pheight, fullscreen); - - if (fullscreen == 2) - { - int real_height, real_width; - - if (ri.GLimp_GetDesktopMode(&real_width, &real_height)) - { - if (real_height) - { - if (real_height != *pheight) - { - *pwidth = ((*pheight) * real_width) / real_height; - } - else - { - *pwidth = real_width; - } - } - } - - Com_Printf("Used corrected %dx%d mode\n", *pwidth, *pheight); - } - - if (!ri.GLimp_InitGraphics(fullscreen, pwidth, pheight)) - { - // failed to set a valid mode in windowed mode - return rserr_invalid_mode; - } - - /* This is totaly obscure: For some strange reasons the renderer - maintains three(!) repesentations of the resolution. One comes - from the client and is saved in r_newrefdef. The other one - is determined here and saved in vid. The third one is used by - the backbuffer. Some calculations take all three representations - into account. - - The values will always be the same. The GLimp_InitGraphics() - call above communicates the requested resolution to the client - where it ends up in the vid subsystem and the vid system writes - it into r_newrefdef. The backbuffer is derived from vid. - - We can't avoid the client roundtrip, because we can get the - real size of the drawable (which can differ from the resolution - due to high dpi awareness) only after the render context was - created by GLimp_InitGraphics() and need to communicate it - somehow to the client. So we just overwrite the values saved - in vid with a call to RE_GetDrawableSize(), just like the - client does. This makes sure that both values are the same - and everything is okay. - - We also need to take the special case fullscreen window into - account. With the fullscreen windows we cannot use the - drawable size, it would scale all cases to the size of the - window. Instead use the drawable size when the user wants - native resolution (the fullscreen window fills the screen) - and use the requested resolution in all other cases. */ - if (IsHighDPIaware) - { - if (vid_fullscreen->value != 2) - { - RE_GetDrawableSize(pwidth, pheight); - } - else - { - if (r_mode->value == -2) - { - /* User requested native resolution. */ - RE_GetDrawableSize(pwidth, pheight); - } - } - } - return retval; -} - -static void -SWimp_CreateRender(int width, int height) -{ - swap_current = 0; - swap_buffers = malloc(height * width * sizeof(pixel_t) * 2); - if (!swap_buffers) - { - Com_Error(ERR_FATAL, "%s: Can't allocate swapbuffer.", __func__); - /* code never returns after ERR_FATAL */ - return; - } - swap_frames[0] = swap_buffers; - swap_frames[1] = swap_buffers + height * width * sizeof(pixel_t); - vid_buffer = swap_frames[swap_current&1]; - // Need to rewrite whole frame - VID_WholeDamageBuffer(); - - sintable = malloc((width+CYCLE) * sizeof(int)); - intsintable = malloc((width+CYCLE) * sizeof(int)); - blanktable = malloc((width+CYCLE) * sizeof(int)); - - newedges = malloc(width * sizeof(edge_t *)); - removeedges = malloc(width * sizeof(edge_t *)); - - warp_rowptr = malloc((width+AMP2*2) * sizeof(byte*)); - warp_column = malloc((width+AMP2*2) * sizeof(int)); - - // count of "out of items" - r_outofsurfaces = false; - r_outofedges = false; - r_outofverts = false; - r_outoftriangles = false; - r_outoflights = false; - r_outedgebasespans = false; - // pointers to allocated buffers - finalverts = NULL; - r_edges = NULL; - lsurfs = NULL; - triangle_spans = NULL; - blocklights = NULL; - edge_basespans = NULL; - // curently allocated items - r_cnumsurfs = 0; - r_numallocatededges = 0; - r_numallocatedverts = 0; - r_numallocatedtriangles = 0; - r_numallocatedlights = 0; - r_numallocatededgebasespans = 0; - - R_ReallocateMapBuffers(); - - r_warpbuffer = malloc(height * width * sizeof(pixel_t)); - - // 2k+ resolution and 32 == shift20_t - if ((width >= 2048) && (sizeof(shift20_t) == 4)) - { - shift_size = 18; - } - else - { - shift_size = 20; - } - - R_InitTurb (width); - - vid_polygon_spans = malloc(sizeof(espan_t) * (height + 1)); - - /* Use nontransparent white as default value */ - memset(sw_state.currentpalette, 255, sizeof(sw_state.currentpalette)); - - R_GammaCorrectAndSetPalette( d_8to24table ); -} - -/* -============================================================================== - -SCREEN SHOTS - -============================================================================== -*/ - -/* -================== -R_ScreenShot_f -================== -*/ -static void -R_ScreenShot_f(void) -{ - int x, y; - byte *buffer = malloc(vid_buffer_width * vid_buffer_height * 3); - const unsigned char *palette = sw_state.currentpalette; - - if (!buffer) - { - Com_Printf("%s: Couldn't malloc %d bytes\n", - __func__, vid_buffer_width * vid_buffer_height * 3); - return; - } - - for (x=0; x < vid_buffer_width; x ++) - { - for (y = 0; y < vid_buffer_height; y ++) { - int buffer_pos = y * vid_buffer_width + x; - buffer[buffer_pos * 3 + 0] = palette[vid_buffer[buffer_pos] * 4 + 2]; // red - buffer[buffer_pos * 3 + 1] = palette[vid_buffer[buffer_pos] * 4 + 1]; // green - buffer[buffer_pos * 3 + 2] = palette[vid_buffer[buffer_pos] * 4 + 0]; // blue - } - } - - ri.Vid_WriteScreenshot(vid_buffer_width, vid_buffer_height, 3, buffer); - - free(buffer); -} diff --git a/src/client/refresh/soft/sw_misc.c b/src/client/refresh/soft/sw_misc.c deleted file mode 100644 index 6164ac0ee..000000000 --- a/src/client/refresh/soft/sw_misc.c +++ /dev/null @@ -1,406 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -#ifdef USE_SDL3 -#include -#else -#include -#endif - -#include "header/local.h" - -cvar_t *sw_mipcap; -cvar_t *sw_mipscale; - -float verticalFieldOfView; -int d_minmip; -float d_scalemip[NUM_MIPS-1]; - -static int r_frustum_indexes[4*6]; -static const float basemip[NUM_MIPS-1] = {1.0, 0.5*0.8, 0.25*0.8}; -int d_vrectx, d_vrecty, d_vrectright_particle, d_vrectbottom_particle; -float xcenter, ycenter; -int d_pix_min, d_pix_max, d_pix_mul; - -/* -================ -D_ViewChanged -================ -*/ -static void -D_ViewChanged (void) -{ - scale_for_mip = sqrt(xscale*xscale + yscale*yscale); - - d_pix_min = r_refdef.vrect.height / 240; - if (d_pix_min < 1) - d_pix_min = 1; - - d_pix_max = (int)((float)r_refdef.vrect.height / (240.0 / 4.0) + 0.5); - if (d_pix_max < 1) - d_pix_max = 1; - - d_pix_mul = (int)((float)r_refdef.vrect.height / 240.0 + 0.5); - - d_vrectx = r_refdef.vrect.x; - d_vrecty = r_refdef.vrect.y; - d_vrectright_particle = r_refdef.vrectright - d_pix_max; - d_vrectbottom_particle = - r_refdef.vrectbottom - d_pix_max; - - /* - ** clear Z-buffer and color-buffers if we're doing the gallery - */ - if ( r_newrefdef.rdflags & RDF_NOWORLDMODEL ) - { - memset( d_pzbuffer, 0xff, vid_buffer_width * vid_buffer_height * sizeof(zvalue_t) ); - RE_Draw_Fill( r_newrefdef.x, r_newrefdef.y, r_newrefdef.width, r_newrefdef.height,( int ) sw_clearcolor->value & 0xff ); - } -} - - - -/* -============= -R_PrintTimes -============= -*/ -void -R_PrintTimes (void) -{ - int r_time2; - int ms; - - r_time2 = SDL_GetTicks(); - - ms = r_time2 - r_time1; - - Com_Printf("%5i ms %3i/%3i/%3i poly %3i surf\n", - ms, c_faceclip, r_polycount, r_drawnpolycount, c_surf); - c_surf = 0; -} - - -/* -============= -R_PrintDSpeeds -============= -*/ -void -R_PrintDSpeeds (void) -{ - int ms, dp_time, r_time2, rw_time, db_time, se_time, de_time, da_time; - - r_time2 = SDL_GetTicks(); - - da_time = (da_time2 - da_time1); - dp_time = (dp_time2 - dp_time1); - rw_time = (rw_time2 - rw_time1); - db_time = (db_time2 - db_time1); - se_time = (se_time2 - se_time1); - de_time = (de_time2 - de_time1); - ms = (r_time2 - r_time1); - - Com_Printf("%3i %2ip %2iw %2ib %2is %2ie %2ia\n", - ms, dp_time, rw_time, db_time, se_time, de_time, da_time); -} - - -/* -============= -R_PrintAliasStats -============= -*/ -void -R_PrintAliasStats (void) -{ - Com_Printf("%3i polygon model drawn\n", r_amodels_drawn); -} - - - -/* -=================== -R_TransformFrustum -=================== -*/ -void -R_TransformFrustum (void) -{ - int i; - vec3_t v, v2; - - for (i=0 ; i<4 ; i++) - { - v[0] = screenedge[i].normal[2]; - v[1] = -screenedge[i].normal[0]; - v[2] = screenedge[i].normal[1]; - - v2[0] = v[1]*vright[0] + v[2]*vup[0] + v[0]*vpn[0]; - v2[1] = v[1]*vright[1] + v[2]*vup[1] + v[0]*vpn[1]; - v2[2] = v[1]*vright[2] + v[2]*vup[2] + v[0]*vpn[2]; - - VectorCopy (v2, view_clipplanes[i].normal); - - view_clipplanes[i].dist = DotProduct (modelorg, v2); - } -} - - -/* -================ -TransformVector -================ -*/ -void -TransformVector (const vec3_t in, vec3_t out) -{ - out[0] = DotProduct(in,vright); - out[1] = DotProduct(in,vup); - out[2] = DotProduct(in,vpn); -} - -/* -=============== -R_SetUpFrustumIndexes -=============== -*/ -static void -R_SetUpFrustumIndexes (void) -{ - int i, j, *pindex; - - pindex = r_frustum_indexes; - - for (i=0 ; i<4 ; i++) - { - for (j=0 ; j<3 ; j++) - { - if (view_clipplanes[i].normal[j] < 0) - { - pindex[j] = j; - pindex[j+3] = j+3; - } - else - { - pindex[j] = j+3; - pindex[j+3] = j; - } - } - - // FIXME: do just once at start - pfrustum_indexes[i] = pindex; - pindex += 6; - } -} - -/* -=============== -R_ViewChanged - -Called every time the vid structure or r_refdef changes. -Guaranteed to be called before the first refresh -=============== -*/ -static void -R_ViewChanged (const vrect_t *vr) -{ - int i; - float xOrigin, yOrigin; - - r_refdef.vrect = *vr; - - r_refdef.horizontalFieldOfView = 2*tan((float)r_newrefdef.fov_x/360*M_PI);; - verticalFieldOfView = 2*tan((float)r_newrefdef.fov_y/360*M_PI); - - r_refdef.fvrectx = (float)r_refdef.vrect.x; - r_refdef.fvrectx_adj = (float)r_refdef.vrect.x - 0.5; - r_refdef.vrect_x_adj_shift20 = (r_refdef.vrect.x<modified) - { - r_fullbright->modified = false; - D_FlushCaches (); // so all lighting changes - } - - r_framecount++; - - - // build the transformation matrix for the given view angles - VectorCopy (r_refdef.vieworg, modelorg); - VectorCopy (r_refdef.vieworg, r_origin); - - AngleVectors (r_refdef.viewangles, vpn, vright, vup); - - // current viewleaf - if ( !( r_newrefdef.rdflags & RDF_NOWORLDMODEL ) ) - { - mleaf_t *r_viewleaf; - - if (!r_worldmodel) - { - Com_Error(ERR_DROP, "%s: bad world model", __func__); - return; - } - - // Determine what is the current view cluster (walking the BSP tree) - // and store it in r_viewcluster - r_viewleaf = Mod_PointInLeaf (r_origin, r_worldmodel->nodes); - r_viewcluster = r_viewleaf->cluster; - } - - if (sw_waterwarp->value && (r_newrefdef.rdflags & RDF_UNDERWATER) ) - r_dowarp = true; - else - r_dowarp = false; - - if (r_dowarp) - { - // warp into off screen buffer - vrect.x = 0; - vrect.y = 0; - vrect.width = r_newrefdef.width; - vrect.height = r_newrefdef.height; - - d_viewbuffer = r_warpbuffer; - } - else - { - vrect.x = r_newrefdef.x; - vrect.y = r_newrefdef.y; - vrect.width = r_newrefdef.width; - vrect.height = r_newrefdef.height; - - d_viewbuffer = vid_buffer; - } - - R_ViewChanged (&vrect); - - // start off with just the four screen edge clip planes - R_TransformFrustum (); - R_SetUpFrustumIndexes (); - - // save base values - VectorCopy (vpn, base_vpn); - VectorCopy (vright, base_vright); - VectorCopy (vup, base_vup); - - // clear frame counts - c_faceclip = 0; - r_polycount = 0; - r_drawnpolycount = 0; - r_amodels_drawn = 0; - - // d_setup - d_minmip = sw_mipcap->value; - if (d_minmip > 3) - d_minmip = 3; - else if (d_minmip < 0) - d_minmip = 0; - - for (i=0 ; i<(NUM_MIPS-1) ; i++) - d_scalemip[i] = basemip[i] * sw_mipscale->value; -} diff --git a/src/client/refresh/soft/sw_model.c b/src/client/refresh/soft/sw_model.c deleted file mode 100644 index 0e56482d8..000000000 --- a/src/client/refresh/soft/sw_model.c +++ /dev/null @@ -1,816 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// models.c -- model loading and caching - -// models are the only shared resource between a client and server running -// on the same machine. - -#include -#include "header/local.h" - -static void Mod_LoadBrushModel(model_t *mod, void *buffer, int modfilelen); - -static YQ2_ALIGNAS_TYPE(int) byte mod_novis[MAX_MAP_LEAFS/8]; - -#define MAX_MOD_KNOWN 512 -static model_t mod_known[MAX_MOD_KNOWN]; -static int mod_numknown; -static int mod_max = 0; - -int registration_sequence; - -//=============================================================================== - -static qboolean -Mod_HasFreeSpace(void) -{ - int i, used; - model_t *mod; - - used = 0; - - for (i=0, mod=mod_known ; i < mod_numknown ; i++, mod++) - { - if (!mod->name[0]) - continue; - if (mod->registration_sequence == registration_sequence) - { - used ++; - } - } - - if (mod_max < used) - { - mod_max = used; - } - - // should same size of free slots as currently used - return (mod_numknown + mod_max) < MAX_MOD_KNOWN; -} - -/* -================ -Mod_Modellist_f -================ -*/ -void -Mod_Modellist_f (void) -{ - int i, total, used; - model_t *mod; - qboolean freeup; - - total = 0; - used = 0; - - Com_Printf("Loaded models:\n"); - for (i=0, mod=mod_known ; i < mod_numknown ; i++, mod++) - { - char *in_use = ""; - - if (mod->registration_sequence == registration_sequence) - { - in_use = "*"; - used ++; - } - - if (!mod->name[0]) - continue; - Com_Printf("%8i : %s %s\n", - mod->extradatasize, mod->name, in_use); - total += mod->extradatasize; - } - Com_Printf("Total resident: %i\n", total); - // update statistics - freeup = Mod_HasFreeSpace(); - Com_Printf("Used %d of %d models%s.\n", used, mod_max, freeup ? ", has free space" : ""); -} - -/* -=============== -Mod_Init -=============== -*/ -void -Mod_Init (void) -{ - mod_max = 0; - memset (mod_novis, 0xff, sizeof(mod_novis)); -} - -/* -================== -Mod_ForName - -Loads in a model for the given name -================== -*/ -static model_t * -Mod_ForName(const char *name, model_t *parent_model, qboolean crash) -{ - model_t *mod; - void *buf; - int i, modfilelen; - - if (!name[0]) - { - Com_Error(ERR_DROP, "%s: NULL name", __func__); - } - - // - // inline models are grabbed only from worldmodel - // - if (name[0] == '*' && parent_model) - { - i = atoi(name+1); - if (i < 1 || i >= parent_model->numsubmodels) - { - Com_Error(ERR_DROP, "%s: bad inline model number", - __func__); - } - - return &parent_model->submodels[i]; - } - - // - // search the currently loaded models - // - for (i=0 , mod=mod_known ; iname, name) ) - return mod; - - // - // find a free model slot spot - // - for (i=0 , mod=mod_known ; iname[0]) - break; // free spot - } - if (i == mod_numknown) - { - if (mod_numknown == MAX_MOD_KNOWN) - Com_Error(ERR_DROP, "%s: mod_numknown == MAX_MOD_KNOWN", __func__); - mod_numknown++; - } - strcpy (mod->name, name); - - // - // load the file - // - modfilelen = ri.FS_LoadFile (mod->name, (void **)&buf); - if (!buf) - { - if (crash) - { - Com_Error(ERR_DROP, "%s: %s not found", - __func__, mod->name); - } - - memset (mod->name, 0, sizeof(mod->name)); - return NULL; - } - - // - // fill it in - // - - // call the apropriate loader - - switch (LittleLong(*(unsigned *)buf)) - { - case IDALIASHEADER: - { - mod->extradata = Mod_LoadMD2(mod->name, buf, modfilelen, - mod->mins, mod->maxs, - (struct image_s **)mod->skins, (findimage_t)R_FindImage, - &(mod->type)); - if (!mod->extradata) - { - Com_Error(ERR_DROP, "%s: Failed to load %s", - __func__, mod->name); - } - }; - break; - - case IDSPRITEHEADER: - { - mod->extradata = Mod_LoadSP2(mod->name, buf, modfilelen, - (struct image_s **)mod->skins, (findimage_t)R_FindImage, - &(mod->type)); - if (!mod->extradata) - { - Com_Error(ERR_DROP, "%s: Failed to load %s", - __func__, mod->name); - } - } - break; - - case IDBSPHEADER: - Mod_LoadBrushModel(mod, buf, modfilelen); - break; - - default: - Com_Error(ERR_DROP, "%s: unknown fileid for %s", - __func__, mod->name); - break; - } - - mod->extradatasize = Hunk_End(); - - ri.FS_FreeFile(buf); - - return mod; -} - -/* -============== -Mod_ClusterPVS -============== -*/ -const byte * -Mod_ClusterPVS (int cluster, const model_t *model) -{ - if (cluster == -1 || !model->vis) - return mod_novis; - return Mod_DecompressVis ( (byte *)model->vis + - model->vis->bitofs[cluster][DVIS_PVS], - (model->vis->numclusters+7)>>3); -} - -/* -=============================================================================== - - BRUSHMODEL LOADING - -=============================================================================== -*/ - -/* -================= -Mod_LoadSubmodels -================= -*/ -static void -Mod_LoadSubmodels (model_t *loadmodel, byte *mod_base, lump_t *l) -{ - dmodel_t *in; - model_t *out; - int i, j, count; - - in = (void *)(mod_base + l->fileofs); - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count*sizeof(*out)); - - loadmodel->submodels = out; - loadmodel->numsubmodels = count; - - for ( i=0 ; isubmodels, sizeof(*out)); - } - - Com_sprintf (out->name, sizeof(out->name), "*%d", i); - - for (j=0 ; j<3 ; j++) - { // spread the mins / maxs by a pixel - out->mins[j] = LittleFloat (in->mins[j]) - 1; - out->maxs[j] = LittleFloat (in->maxs[j]) + 1; - out->origin[j] = LittleFloat (in->origin[j]); - } - - out->radius = Mod_RadiusFromBounds (out->mins, out->maxs); - out->firstnode = LittleLong (in->headnode); - out->firstmodelsurface = LittleLong (in->firstface); - out->nummodelsurfaces = LittleLong (in->numfaces); - // visleafs - out->numleafs = 0; - // check limits - if (out->firstnode >= loadmodel->numnodes) - { - Com_Error(ERR_DROP, "%s: Inline model %i has bad firstnode", - __func__, i); - } - } -} - -/* -================ -CalcSurfaceExtents - -Fills in s->texturemins[] and s->extents[] -================ -*/ -static void -CalcSurfaceExtents (model_t *loadmodel, msurface_t *s) -{ - float mins[2], maxs[2], val; - int i; - mtexinfo_t *tex; - int bmins[2], bmaxs[2]; - - mins[0] = mins[1] = (float)INT_MAX; // Set maximum values for world range - maxs[0] = maxs[1] = (float)INT_MIN; // Set minimal values for world range - - tex = s->texinfo; - - for (i=0 ; inumedges ; i++) - { - int e, j; - mvertex_t *v; - - e = loadmodel->surfedges[s->firstedge+i]; - - if (e >= 0) - { - v = &loadmodel->vertexes[loadmodel->edges[e].v[0]]; - } - else - { - v = &loadmodel->vertexes[loadmodel->edges[-e].v[1]]; - } - for (j=0 ; j<2 ; j++) - { - val = v->position[0] * tex->vecs[j][0] + - v->position[1] * tex->vecs[j][1] + - v->position[2] * tex->vecs[j][2] + - tex->vecs[j][3]; - if (val < mins[j]) - mins[j] = val; - if (val > maxs[j]) - maxs[j] = val; - } - } - - for (i=0 ; i<2 ; i++) - { - bmins[i] = floor(mins[i]/16); - bmaxs[i] = ceil(maxs[i]/16); - - s->texturemins[i] = bmins[i] * 16; - s->extents[i] = (bmaxs[i] - bmins[i]) * 16; - if (s->extents[i] < 16) - s->extents[i] = 16; // take at least one cache block - if ( !(tex->flags & (SURF_WARP|SURF_SKY)) && s->extents[i] > 256) - { - Com_Error(ERR_DROP, "%s: Bad surface extents", __func__); - } - } -} - - -/* -================= -Mod_LoadFaces -================= -*/ -static void -Mod_LoadFaces (model_t *loadmodel, byte *mod_base, lump_t *l) -{ - dface_t *in; - msurface_t *out; - int i, count, surfnum; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc((count+6)*sizeof(*out)); // extra for skybox - - loadmodel->surfaces = out; - loadmodel->numsurfaces = count; - - for ( surfnum=0 ; surfnumfirstedge = LittleLong(in->firstedge); - out->numedges = LittleShort(in->numedges); - if (out->numedges < 3) - { - Com_Error(ERR_DROP, "%s: Surface with %d edges", - __func__, out->numedges); - } - out->flags = 0; - - planenum = LittleShort(in->planenum); - side = LittleShort(in->side); - if (side) - out->flags |= SURF_PLANEBACK; - - if (planenum < 0 || planenum >= loadmodel->numplanes) - { - Com_Error(ERR_DROP, "%s: Incorrect %d planenum.", - __func__, planenum); - } - out->plane = loadmodel->planes + planenum; - - ti = LittleShort(in->texinfo); - if (ti < 0 || ti >= loadmodel->numtexinfo) - { - Com_Error(ERR_DROP, "%s: bad texinfo number", __func__); - } - out->texinfo = loadmodel->texinfo + ti; - - CalcSurfaceExtents (loadmodel, out); - - // lighting is saved as its with 24 bit color - for (i=0 ; istyles[i] = in->styles[i]; - } - - i = LittleLong(in->lightofs); - - if (i == -1) - { - out->samples = NULL; - } - else - { - out->samples = loadmodel->lightdata + i; - } - - // set the drawing flags flag - - if (!out->texinfo->image) - continue; - - if (r_fixsurfsky->value) - { - if (out->texinfo->flags & SURF_SKY) - { - out->flags |= SURF_DRAWSKY; - continue; - } - } - - if (out->texinfo->flags & SURF_WARP) - { - out->flags |= SURF_DRAWTURB; - for (i=0 ; i<2 ; i++) - { - out->extents[i] = 16384; - out->texturemins[i] = -8192; - } - continue; - } - - //============== - // this marks flowing surfaces as turbulent. - if (out->texinfo->flags & SURF_FLOWING) - { - out->flags |= SURF_DRAWTURB; - for (i=0 ; i<2 ; i++) - { - out->extents[i] = 16384; - out->texturemins[i] = -8192; - } - continue; - } - //============== - } -} - -/* -================= -Mod_LoadLeafs -================= -*/ -static void -Mod_LoadLeafs (model_t *loadmodel, byte *mod_base, lump_t *l) -{ - dleaf_t *in; - mleaf_t *out; - int i, j, count; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count*sizeof(*out)); - - loadmodel->leafs = out; - loadmodel->numleafs = count; - - for ( i=0 ; iminmaxs[j] = LittleShort (in->mins[j]); - out->minmaxs[3+j] = LittleShort (in->maxs[j]); - } - - out->contents = LittleLong(in->contents); - out->cluster = LittleShort(in->cluster); - out->area = LittleShort(in->area); - - // make unsigned long from signed short - firstleafface = LittleShort(in->firstleafface) & 0xFFFF; - out->nummarksurfaces = LittleShort(in->numleaffaces) & 0xFFFF; - - out->firstmarksurface = loadmodel->marksurfaces + firstleafface; - if ((firstleafface + out->nummarksurfaces) > loadmodel->nummarksurfaces) - { - Com_Error(ERR_DROP, "%s: wrong marksurfaces position in %s", - __func__, loadmodel->name); - } - } -} - - -/* -================= -Mod_LoadMarksurfaces -================= -*/ -static void -Mod_LoadMarksurfaces (model_t *loadmodel, byte *mod_base, lump_t *l) -{ - int i, count; - short *in; - msurface_t **out; - - in = (void *)(mod_base + l->fileofs); - - if (l->filelen % sizeof(*in)) - { - Com_Error(ERR_DROP, "%s: funny lump size in %s", - __func__, loadmodel->name); - } - - count = l->filelen / sizeof(*in); - out = Hunk_Alloc(count*sizeof(*out)); - - loadmodel->marksurfaces = out; - loadmodel->nummarksurfaces = count; - - for ( i=0 ; i= loadmodel->numsurfaces) - { - Com_Error(ERR_DROP, "%s: bad surface number", __func__); - } - out[i] = loadmodel->surfaces + j; - } -} - -/* -================= -Mod_LoadBrushModel -================= -*/ -static void -Mod_LoadBrushModel(model_t *mod, void *buffer, int modfilelen) -{ - int i; - dheader_t *header; - byte *mod_base; - - if (mod != mod_known) - Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__); - - header = (dheader_t *)buffer; - - i = LittleLong (header->version); - if (i != BSPVERSION) - { - Com_Error(ERR_DROP, "%s: %s has wrong version number (%i should be %i)", - __func__, mod->name, i, BSPVERSION); - } - - // swap all the lumps - mod_base = (byte *)header; - - for (i=0 ; ilumps[LUMP_VERTEXES], sizeof(dvertex_t), sizeof(mvertex_t), 8); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_EDGES], sizeof(dedge_t), sizeof(medge_t), 13); - float surfEdgeCount = (float)header->lumps[LUMP_SURFEDGES].filelen / sizeof(int); - if(surfEdgeCount < MAX_MAP_SURFEDGES) // else it errors out later anyway - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_SURFEDGES], sizeof(int), sizeof(int), 24); - - // lighting is a special case, because we keep only 1 byte out of 3 - // (=> no colored lighting in soft renderer by default) - { - int size = header->lumps[LUMP_LIGHTING].filelen; - size = (size + 31) & ~31; - /* save color data */ - hunkSize += size; - } - - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_PLANES], sizeof(dplane_t), sizeof(cplane_t)*2, 6); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_TEXINFO], sizeof(texinfo_t), sizeof(mtexinfo_t), 6); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_FACES], sizeof(dface_t), sizeof(msurface_t), 6); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_LEAFFACES], sizeof(short), sizeof(msurface_t *), 0); // yes, out is indeed a pointer! - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_VISIBILITY], 1, 1, 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_LEAFS], sizeof(dleaf_t), sizeof(mleaf_t), 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_NODES], sizeof(dnode_t), sizeof(mnode_t), 0); - hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_MODELS], sizeof(dmodel_t), sizeof(model_t), 0); - - hunkSize += 1048576; // 1MB extra just in case - - mod->extradata = Hunk_Begin(hunkSize); - - mod->type = mod_brush; - - // load into heap - Mod_LoadVertexes (mod->name, &mod->vertexes, &mod->numvertexes, mod_base, - &header->lumps[LUMP_VERTEXES], 8); - Mod_LoadEdges (mod->name, &mod->edges, &mod->numedges, - mod_base, &header->lumps[LUMP_EDGES], 13); - Mod_LoadSurfedges (mod->name, &mod->surfedges, &mod->numsurfedges, - mod_base, &header->lumps[LUMP_SURFEDGES], 24); - Mod_LoadLighting (&mod->lightdata, mod_base, &header->lumps[LUMP_LIGHTING]); - Mod_LoadPlanes (mod->name, &mod->planes, &mod->numplanes, - mod_base, &header->lumps[LUMP_PLANES], 6); - Mod_LoadTexinfo (mod->name, &mod->texinfo, &mod->numtexinfo, - mod_base, &header->lumps[LUMP_TEXINFO], (findimage_t)R_FindImage, - r_notexture_mip, 6); - Mod_LoadFaces (mod, mod_base, &header->lumps[LUMP_FACES]); - Mod_LoadMarksurfaces (mod, mod_base, &header->lumps[LUMP_LEAFFACES]); - Mod_LoadVisibility (&mod->vis, mod_base, &header->lumps[LUMP_VISIBILITY]); - Mod_LoadLeafs (mod, mod_base, &header->lumps[LUMP_LEAFS]); - Mod_LoadNodes (mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES]); - Mod_LoadSubmodels (mod, mod_base, &header->lumps[LUMP_MODELS]); - - R_InitSkyBox (mod); -} - -//============================================================================= - -/* -===================== -RE_BeginRegistration - -Specifies the model that will be used as the world -===================== -*/ -void -RE_BeginRegistration(const char *model) -{ - char fullname[MAX_QPATH]; - cvar_t *flushmap; - - registration_sequence++; - r_oldviewcluster = -1; // force markleafs - Com_sprintf (fullname, sizeof(fullname), "maps/%s.bsp", model); - - D_FlushCaches (); - // explicitly free the old map if different - // this guarantees that mod_known[0] is the world map - flushmap = ri.Cvar_Get ("flushmap", "0", 0); - if ( strcmp(mod_known[0].name, fullname) || flushmap->value) - Mod_Free (&mod_known[0]); - r_worldmodel = RE_RegisterModel (fullname); - R_NewMap (); -} - - -/* -===================== -RE_RegisterModel - -===================== -*/ -struct model_s * -RE_RegisterModel (const char *name) -{ - model_t *mod; - - mod = Mod_ForName(name, r_worldmodel, false); - if (mod) - { - mod->registration_sequence = registration_sequence; - - // register any images used by the models - if (mod->type == mod_brush) - { - int i; - - for (i=0 ; inumtexinfo ; i++) - mod->texinfo[i].image->registration_sequence = registration_sequence; - } - else - { - /* numframes is unused for SP2 but lets set it also */ - mod->numframes = Mod_ReLoadSkins((struct image_s **)mod->skins, - (findimage_t)R_FindImage, mod->extradata, mod->type); - } - } - return mod; -} - -/* -===================== -RE_EndRegistration - -===================== -*/ -void -RE_EndRegistration (void) -{ - int i; - model_t *mod; - - if (Mod_HasFreeSpace() && R_ImageHasFreeSpace()) - { - // should be enough space for load next maps - return; - } - - for (i=0, mod=mod_known ; iname[0]) - continue; - if (mod->registration_sequence != registration_sequence) - { - // don't need this model - Mod_Free (mod); - } - } - - R_FreeUnusedImages (); -} - - -//============================================================================= - -/* -================ -Mod_Free -================ -*/ -void -Mod_Free (model_t *mod) -{ - Hunk_Free (mod->extradata); - memset (mod, 0, sizeof(*mod)); -} - -/* -================ -Mod_FreeAll -================ -*/ -void -Mod_FreeAll (void) -{ - int i; - - for (i=0 ; icolor; - int i, pix, count, u, v; - zvalue_t izi; - int custom_particle = (int)sw_custom_particles->value; - - /* - ** transform the particle - */ - VectorSubtract (pparticle->origin, r_origin, local); - - transformed[0] = DotProduct(local, r_pright); - transformed[1] = DotProduct(local, r_pup); - transformed[2] = DotProduct(local, r_ppn); - - if (transformed[2] < PARTICLE_Z_CLIP) - return; - - /* - ** project the point - */ - // FIXME: preadjust xcenter and ycenter - zi = 1.0 / transformed[2]; - u = (int)(xcenter + zi * transformed[0] + 0.5); - v = (int)(ycenter - zi * transformed[1] + 0.5); - - if ((v > d_vrectbottom_particle) || - (u > d_vrectright_particle) || - (v < d_vrecty) || - (u < d_vrectx)) - { - return; - } - - /* - ** compute addresses of zbuffer, framebuffer, and - ** compute the Z-buffer reference value. - */ - pz = d_pzbuffer + (vid_buffer_width * v) + u; - pdest = d_viewbuffer + vid_buffer_width * v + u; - izi = (int)(zi * 0x8000); - - /* - ** determine the screen area covered by the particle, - ** which also means clamping to a min and max - */ - pix = (izi * d_pix_mul) >> 7; - if (pix < d_pix_min) - pix = d_pix_min; - else if (pix > d_pix_max) - pix = d_pix_max; - - /* - ** render the appropriate pixels - */ - count = pix; - if ((pz[(vid_buffer_width * count / 2) + (count / 2)]) > izi) - { - // looks like under some object - return; - } - - // zbuffer particles damage - VID_DamageZBuffer(u, v); - VID_DamageZBuffer(u + count, v + count); - - if (custom_particle == 0) - { - switch (level) { - case PARTICLE_33 : - for ( ; count ; count--, pz += vid_buffer_width, pdest += vid_buffer_width) - { - //FIXME--do it in blocks of 8? - for (i=0 ; i= min_int && pos <= max_int && pz[i] <= izi) - { - pz[i] = izi; - pdest[i] = vid_alphamap[color + ((int)pdest[i]<<8)]; - } - } - } - break; - - case PARTICLE_66 : - { - int color_part = (color<<8); - for ( ; count ; count--, pz += vid_buffer_width, pdest += vid_buffer_width) - { - for (i=0 ; i= min_int && pos <= max_int && pz[i] <= izi) - { - pz[i] = izi; - pdest[i] = vid_alphamap[color_part + (int)pdest[i]]; - } - } - } - break; - } - - default: //100 - for ( ; count ; count--, pz += vid_buffer_width, pdest += vid_buffer_width) - { - for (i=0 ; i= min_int && pos <= max_int && pz[i] <= izi) - { - pz[i] = izi; - pdest[i] = color; - } - } - } - break; - } - } -} - -/* -** R_DrawParticles -** -** Responsible for drawing all of the particles in the particle list -** throughout the world. Doesn't care if we're using the C path or -** if we're using the asm path, it simply assigns a function pointer -** and goes. -*/ -void -R_DrawParticles (void) -{ - particle_t *p; - int i; - - VectorScale( vright, xscaleshrink, r_pright ); - VectorScale( vup, yscaleshrink, r_pup ); - VectorCopy( vpn, r_ppn ); - - for (p=r_newrefdef.particles, i=0 ; ialpha > 0.66 ) - level = PARTICLE_OPAQUE; - else if ( p->alpha > 0.33 ) - level = PARTICLE_66; - else - level = PARTICLE_33; - - R_DrawParticle(p, level); - } -} diff --git a/src/client/refresh/soft/sw_poly.c b/src/client/refresh/soft/sw_poly.c deleted file mode 100644 index b8f6df309..000000000 --- a/src/client/refresh/soft/sw_poly.c +++ /dev/null @@ -1,1282 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -#include -#include -#include "header/local.h" - -#define AFFINE_SPANLET_SIZE 16 -#define AFFINE_SPANLET_SIZE_BITS 4 - -typedef struct -{ - pixel_t *pbase, *pdest; - zvalue_t *pz; - int s, t; - int sstep, tstep; - int izi, izistep, izistep_times_2; - int spancount; - unsigned u, v; -} spanletvars_t; - -static spanletvars_t s_spanletvars; - -static int r_polyblendcolor; - -polydesc_t r_polydesc; - -msurface_t *r_alpha_surfaces; - -static int clip_current; -vec5_t r_clip_verts[2][MAXWORKINGVERTS+2]; -static emitpoint_t outverts[MAXWORKINGVERTS+3]; - -static int s_minindex, s_maxindex; - -static void R_DrawPoly(int iswater, espan_t *spans); - -/* -** R_DrawSpanletOpaque -*/ -static void -R_DrawSpanletOpaque(const int *r_turb_turb) -{ - do - { - unsigned btemp; - unsigned ts, tt; - - ts = s_spanletvars.s >> SHIFT16XYZ; - tt = s_spanletvars.t >> SHIFT16XYZ; - - btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth); - if (btemp != TRANSPARENT_COLOR) - { - if (*s_spanletvars.pz <= (s_spanletvars.izi >> SHIFT16XYZ)) - { - *s_spanletvars.pz = s_spanletvars.izi >> SHIFT16XYZ; - *s_spanletvars.pdest = btemp; - } - } - - s_spanletvars.izi += s_spanletvars.izistep; - s_spanletvars.pdest++; - s_spanletvars.pz++; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - } while (--s_spanletvars.spancount > 0); -} - -/* -** R_DrawSpanletTurbulentStipple33 -*/ -static void -R_DrawSpanletTurbulentStipple33(const int *r_turb_turb) -{ - pixel_t *pdest = s_spanletvars.pdest; - zvalue_t *pz = s_spanletvars.pz; - zvalue_t izi = s_spanletvars.izi; - - if ( s_spanletvars.v & 1 ) - { - s_spanletvars.pdest += s_spanletvars.spancount; - s_spanletvars.pz += s_spanletvars.spancount; - - if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE ) - s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS; - else - s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep; - - if ( s_spanletvars.u & 1 ) - { - izi += s_spanletvars.izistep; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest++; - pz++; - s_spanletvars.spancount--; - } - - s_spanletvars.sstep *= 2; - s_spanletvars.tstep *= 2; - - while ( s_spanletvars.spancount > 0 ) - { - unsigned btemp; - int sturb, tturb; - - sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63; - tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63; - - btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) ); - - if ( *pz <= ( izi >> SHIFT16XYZ ) ) - *pdest = btemp; - - izi += s_spanletvars.izistep_times_2; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest += 2; - pz += 2; - - s_spanletvars.spancount -= 2; - } - } -} - -/* -** R_DrawSpanletTurbulentStipple66 -*/ -static void -R_DrawSpanletTurbulentStipple66(const int *r_turb_turb) -{ - unsigned btemp; - int sturb, tturb; - pixel_t *pdest = s_spanletvars.pdest; - zvalue_t *pz = s_spanletvars.pz; - zvalue_t izi = s_spanletvars.izi; - - if ( !( s_spanletvars.v & 1 ) ) - { - s_spanletvars.pdest += s_spanletvars.spancount; - s_spanletvars.pz += s_spanletvars.spancount; - - if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE ) - s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS; - else - s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep; - - if ( s_spanletvars.u & 1 ) - { - izi += s_spanletvars.izistep; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest++; - pz++; - s_spanletvars.spancount--; - } - - s_spanletvars.sstep *= 2; - s_spanletvars.tstep *= 2; - - while ( s_spanletvars.spancount > 0 ) - { - sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63; - tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63; - - btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) ); - - if ( *pz <= ( izi >> SHIFT16XYZ ) ) - *pdest = btemp; - - izi += s_spanletvars.izistep_times_2; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest += 2; - pz += 2; - - s_spanletvars.spancount -= 2; - } - } - else - { - s_spanletvars.pdest += s_spanletvars.spancount; - s_spanletvars.pz += s_spanletvars.spancount; - - if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE ) - s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS; - else - s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep; - - while ( s_spanletvars.spancount > 0 ) - { - sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63; - tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63; - - btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) ); - - if ( *pz <= ( izi >> SHIFT16XYZ ) ) - *pdest = btemp; - - izi += s_spanletvars.izistep; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest++; - pz++; - - s_spanletvars.spancount--; - } - } -} - -/* -** R_DrawSpanletTurbulentBlended -*/ -static void -R_DrawSpanletTurbulentBlended66(const int *r_turb_turb) -{ - do - { - unsigned btemp; - int sturb, tturb; - - sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63; - tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63; - - btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) ); - - if ( *s_spanletvars.pz <= ( s_spanletvars.izi >> SHIFT16XYZ ) ) - *s_spanletvars.pdest = vid_alphamap[btemp*256+*s_spanletvars.pdest]; - - s_spanletvars.izi += s_spanletvars.izistep; - s_spanletvars.pdest++; - s_spanletvars.pz++; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - } while ( --s_spanletvars.spancount > 0 ); -} - -static void -R_DrawSpanletTurbulentBlended33(const int *r_turb_turb) -{ - do - { - unsigned btemp; - int sturb, tturb; - - sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63; - tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63; - - btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) ); - - if ( *s_spanletvars.pz <= ( s_spanletvars.izi >> SHIFT16XYZ ) ) - *s_spanletvars.pdest = vid_alphamap[btemp+*s_spanletvars.pdest*256]; - - s_spanletvars.izi += s_spanletvars.izistep; - s_spanletvars.pdest++; - s_spanletvars.pz++; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - } while ( --s_spanletvars.spancount > 0 ); -} - -/* -** R_DrawSpanlet33 -*/ -static void -R_DrawSpanlet33(const int *r_turb_turb) -{ - do - { - unsigned btemp; - unsigned ts, tt; - - ts = s_spanletvars.s >> SHIFT16XYZ; - tt = s_spanletvars.t >> SHIFT16XYZ; - - btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth); - - if ( btemp != TRANSPARENT_COLOR ) - { - if (*s_spanletvars.pz <= (s_spanletvars.izi >> SHIFT16XYZ)) - { - *s_spanletvars.pdest = vid_alphamap[btemp+*s_spanletvars.pdest*256]; - } - } - - s_spanletvars.izi += s_spanletvars.izistep; - s_spanletvars.pdest++; - s_spanletvars.pz++; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - } while (--s_spanletvars.spancount > 0); -} - -static void -R_DrawSpanletConstant33(const int *r_turb_turb) -{ - do - { - if (*s_spanletvars.pz <= (s_spanletvars.izi >> SHIFT16XYZ)) - { - *s_spanletvars.pdest = vid_alphamap[r_polyblendcolor+*s_spanletvars.pdest*256]; - } - - s_spanletvars.izi += s_spanletvars.izistep; - s_spanletvars.pdest++; - s_spanletvars.pz++; - } while (--s_spanletvars.spancount > 0); -} - -/* -** R_DrawSpanlet66 -*/ -static void -R_DrawSpanlet66(const int *r_turb_turb) -{ - do - { - unsigned btemp; - unsigned ts, tt; - - ts = s_spanletvars.s >> SHIFT16XYZ; - tt = s_spanletvars.t >> SHIFT16XYZ; - - btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth); - - if ( btemp != TRANSPARENT_COLOR ) - { - if (*s_spanletvars.pz <= (s_spanletvars.izi >> SHIFT16XYZ)) - { - *s_spanletvars.pdest = vid_alphamap[btemp*256+*s_spanletvars.pdest]; - } - } - - s_spanletvars.izi += s_spanletvars.izistep; - s_spanletvars.pdest++; - s_spanletvars.pz++; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - } while (--s_spanletvars.spancount > 0); -} - -/* -** R_DrawSpanlet33Stipple -*/ -static void -R_DrawSpanlet33Stipple(const int *r_turb_turb) -{ - pixel_t *pdest = s_spanletvars.pdest; - zvalue_t *pz = s_spanletvars.pz; - zvalue_t izi = s_spanletvars.izi; - - if ( r_polydesc.stipple_parity ^ ( s_spanletvars.v & 1 ) ) - { - s_spanletvars.pdest += s_spanletvars.spancount; - s_spanletvars.pz += s_spanletvars.spancount; - - if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE ) - s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS; - else - s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep; - - if ( r_polydesc.stipple_parity ^ ( s_spanletvars.u & 1 ) ) - { - izi += s_spanletvars.izistep; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest++; - pz++; - s_spanletvars.spancount--; - } - - s_spanletvars.sstep *= 2; - s_spanletvars.tstep *= 2; - - while ( s_spanletvars.spancount > 0 ) - { - unsigned btemp; - unsigned s = s_spanletvars.s >> SHIFT16XYZ; - unsigned t = s_spanletvars.t >> SHIFT16XYZ; - - btemp = *( s_spanletvars.pbase + ( s ) + ( t * cachewidth ) ); - - if ( btemp != TRANSPARENT_COLOR ) - { - if ( *pz <= ( izi >> SHIFT16XYZ ) ) - *pdest = btemp; - } - - izi += s_spanletvars.izistep_times_2; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest += 2; - pz += 2; - - s_spanletvars.spancount -= 2; - } - } -} - -/* -** R_DrawSpanlet66Stipple -*/ -static void -R_DrawSpanlet66Stipple(const int *r_turb_turb) -{ - unsigned btemp; - pixel_t *pdest = s_spanletvars.pdest; - zvalue_t *pz = s_spanletvars.pz; - zvalue_t izi = s_spanletvars.izi; - - s_spanletvars.pdest += s_spanletvars.spancount; - s_spanletvars.pz += s_spanletvars.spancount; - - if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE ) - s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS; - else - s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep; - - if ( r_polydesc.stipple_parity ^ ( s_spanletvars.v & 1 ) ) - { - if ( r_polydesc.stipple_parity ^ ( s_spanletvars.u & 1 ) ) - { - izi += s_spanletvars.izistep; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest++; - pz++; - s_spanletvars.spancount--; - } - - s_spanletvars.sstep *= 2; - s_spanletvars.tstep *= 2; - - while ( s_spanletvars.spancount > 0 ) - { - unsigned s = s_spanletvars.s >> SHIFT16XYZ; - unsigned t = s_spanletvars.t >> SHIFT16XYZ; - - btemp = *( s_spanletvars.pbase + ( s ) + ( t * cachewidth ) ); - - if ( btemp != TRANSPARENT_COLOR ) - { - if ( *pz <= ( izi >> SHIFT16XYZ ) ) - *pdest = btemp; - } - - izi += s_spanletvars.izistep_times_2; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest += 2; - pz += 2; - - s_spanletvars.spancount -= 2; - } - } - else - { - while ( s_spanletvars.spancount > 0 ) - { - unsigned s = s_spanletvars.s >> SHIFT16XYZ; - unsigned t = s_spanletvars.t >> SHIFT16XYZ; - - btemp = *( s_spanletvars.pbase + ( s ) + ( t * cachewidth ) ); - - if ( btemp != TRANSPARENT_COLOR ) - { - if ( *pz <= ( izi >> SHIFT16XYZ ) ) - *pdest = btemp; - } - - izi += s_spanletvars.izistep; - s_spanletvars.s += s_spanletvars.sstep; - s_spanletvars.t += s_spanletvars.tstep; - - pdest++; - pz++; - - s_spanletvars.spancount--; - } - } -} - -/* -** R_ClipPolyFace -** -** Clips the winding at clip_verts[clip_current] and changes clip_current -** Throws out the back side -*/ -static int -R_ClipPolyFace (int nump, clipplane_t *pclipplane) -{ - int i, outcount; - float frac, clipdist, *pclipnormal; - float *in, *instep, *outstep, *vert2; - float dists[MAXWORKINGVERTS+3] = {0}; - - clipdist = pclipplane->dist; - pclipnormal = pclipplane->normal; - - // calc dists - if (clip_current) - { - in = r_clip_verts[1][0]; - outstep = r_clip_verts[0][0]; - clip_current = 0; - } - else - { - in = r_clip_verts[0][0]; - outstep = r_clip_verts[1][0]; - clip_current = 1; - } - - instep = in; - for (i=0 ; i= 0) - { - memcpy (outstep, instep, sizeof (vec5_t)); - outstep += sizeof (vec5_t) / sizeof (vec_t); - outcount++; - } - - if (dists[i] == 0 || dists[i+1] == 0) - continue; - - if ( (dists[i] > 0) == (dists[i+1] > 0) ) - continue; - - // split it into a new vertex - frac = dists[i] / (dists[i] - dists[i+1]); - - vert2 = instep + sizeof (vec5_t) / sizeof (vec_t); - - outstep[0] = instep[0] + frac*(vert2[0] - instep[0]); - outstep[1] = instep[1] + frac*(vert2[1] - instep[1]); - outstep[2] = instep[2] + frac*(vert2[2] - instep[2]); - outstep[3] = instep[3] + frac*(vert2[3] - instep[3]); - outstep[4] = instep[4] + frac*(vert2[4] - instep[4]); - - outstep += sizeof (vec5_t) / sizeof (vec_t); - outcount++; - } - - return outcount; -} - -/* -** R_PolygonDrawSpans -*/ -// iswater was qboolean. changed to allow passing more flags -static void -R_PolygonDrawSpans(espan_t *pspan, int iswater, float d_ziorigin, float d_zistepu, float d_zistepv) -{ - int snext, tnext; - float sdivz, tdivz, zi, z, du, dv, spancountminus1; - float sdivzspanletstepu, tdivzspanletstepu, zispanletstepu; - int *r_turb_turb; - - s_spanletvars.pbase = cacheblock; - - if ( iswater & SURF_WARP) - r_turb_turb = sintable + ((int)(r_newrefdef.time*SPEED)&(CYCLE-1)); - else - // iswater & SURF_FLOWING - r_turb_turb = blanktable; - - sdivzspanletstepu = d_sdivzstepu * AFFINE_SPANLET_SIZE; - tdivzspanletstepu = d_tdivzstepu * AFFINE_SPANLET_SIZE; - zispanletstepu = d_zistepu * AFFINE_SPANLET_SIZE; - - // we count on FP exceptions being turned off to avoid range problems - s_spanletvars.izistep = (int)(d_zistepu * 0x8000 * SHIFT16XYZ_MULT); - s_spanletvars.izistep_times_2 = s_spanletvars.izistep * 2; - - s_spanletvars.pz = 0; - - do - { - int count; - - s_spanletvars.pdest = d_viewbuffer + (vid_buffer_width * pspan->v) + pspan->u; - s_spanletvars.pz = d_pzbuffer + (vid_buffer_width * pspan->v) + pspan->u; - s_spanletvars.u = pspan->u; - s_spanletvars.v = pspan->v; - count = pspan->count; - - if (count > 0) - { - // transparent spans damage z buffer - VID_DamageZBuffer(pspan->u, pspan->v); - VID_DamageZBuffer(pspan->u + count, pspan->v); - - // calculate the initial s/z, t/z, 1/z, s, and t and clamp - du = (float)pspan->u; - dv = (float)pspan->v; - - sdivz = d_sdivzorigin + dv*d_sdivzstepv + du*d_sdivzstepu; - tdivz = d_tdivzorigin + dv*d_tdivzstepv + du*d_tdivzstepu; - - zi = d_ziorigin + dv*d_zistepv + du*d_zistepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - // we count on FP exceptions being turned off to avoid range problems - s_spanletvars.izi = (int)(zi * 0x8000 * SHIFT16XYZ_MULT); - - s_spanletvars.s = (int)(sdivz * z) + sadjust; - s_spanletvars.t = (int)(tdivz * z) + tadjust; - - if ( !iswater ) - { - if (s_spanletvars.s > bbextents) - s_spanletvars.s = bbextents; - else if (s_spanletvars.s < 0) - s_spanletvars.s = 0; - - if (s_spanletvars.t > bbextentt) - s_spanletvars.t = bbextentt; - else if (s_spanletvars.t < 0) - s_spanletvars.t = 0; - } - - do - { - // calculate s and t at the far end of the span - if (count >= AFFINE_SPANLET_SIZE ) - s_spanletvars.spancount = AFFINE_SPANLET_SIZE; - else - s_spanletvars.spancount = count; - - count -= s_spanletvars.spancount; - - if (count) - { - // calculate s/z, t/z, zi->fixed s and t at far end of span, - // calculate s and t steps across span by shifting - sdivz += sdivzspanletstepu; - tdivz += tdivzspanletstepu; - zi += zispanletstepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - snext = (int)(sdivz * z) + sadjust; - tnext = (int)(tdivz * z) + tadjust; - - if ( !iswater ) - { - if (snext > bbextents) - snext = bbextents; - else if (snext < AFFINE_SPANLET_SIZE) - snext = AFFINE_SPANLET_SIZE; // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < AFFINE_SPANLET_SIZE) - tnext = AFFINE_SPANLET_SIZE; // guard against round-off error on <0 steps - } - - s_spanletvars.sstep = (snext - s_spanletvars.s) >> AFFINE_SPANLET_SIZE_BITS; - s_spanletvars.tstep = (tnext - s_spanletvars.t) >> AFFINE_SPANLET_SIZE_BITS; - } - else - { - // calculate s/z, t/z, zi->fixed s and t at last pixel in span (so - // can't step off polygon), clamp, calculate s and t steps across - // span by division, biasing steps low so we don't run off the - // texture - spancountminus1 = (float)(s_spanletvars.spancount - 1); - sdivz += d_sdivzstepu * spancountminus1; - tdivz += d_tdivzstepu * spancountminus1; - zi += d_zistepu * spancountminus1; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - snext = (int)(sdivz * z) + sadjust; - tnext = (int)(tdivz * z) + tadjust; - - if ( !iswater ) - { - if (snext > bbextents) - snext = bbextents; - else if (snext < AFFINE_SPANLET_SIZE) - snext = AFFINE_SPANLET_SIZE; // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < AFFINE_SPANLET_SIZE) - tnext = AFFINE_SPANLET_SIZE; // guard against round-off error on <0 steps - } - - if (s_spanletvars.spancount > 1) - { - s_spanletvars.sstep = (snext - s_spanletvars.s) / (s_spanletvars.spancount - 1); - s_spanletvars.tstep = (tnext - s_spanletvars.t) / (s_spanletvars.spancount - 1); - } - } - - if ( iswater ) - { - s_spanletvars.s = s_spanletvars.s & ((CYCLE<<16)-1); - s_spanletvars.t = s_spanletvars.t & ((CYCLE<<16)-1); - } - - r_polydesc.drawspanlet(r_turb_turb); - - s_spanletvars.s = snext; - s_spanletvars.t = tnext; - - } while (count > 0); - } - - pspan++; - - } while (pspan->count != INT_MIN); -} - -/* -** -** R_PolygonScanLeftEdge -** -** Goes through the polygon and scans the left edge, filling in -** screen coordinate data for the spans -*/ -static void -R_PolygonScanLeftEdge (espan_t *s_polygon_spans) -{ - int i, lmaxindex; - emitpoint_t *pvert, *pnext; - espan_t *pspan; - float du, dv, vtop, u_step; - - pspan = s_polygon_spans; - i = s_minindex; - if (i == 0) - i = r_polydesc.nump; - - lmaxindex = s_maxindex; - if (lmaxindex == 0) - lmaxindex = r_polydesc.nump; - - vtop = ceil (r_polydesc.pverts[i].v); - - do - { - float vbottom; - - pvert = &r_polydesc.pverts[i]; - pnext = pvert - 1; - - vbottom = ceil (pnext->v); - - if (vtop < vbottom) - { - int v, u, istep, itop, ibottom; - - du = pnext->u - pvert->u; - dv = pnext->v - pvert->v; - - u_step = (du * SHIFT16XYZ_MULT) / dv; - // adjust u to ceil the integer portion - u = (int)((pvert->u * SHIFT16XYZ_MULT) + u_step * (vtop - pvert->v)) + - (SHIFT16XYZ_MULT - 1); - itop = (int)vtop; - ibottom = (int)vbottom; - istep = (int)u_step; - - for (v=itop ; vu = u >> SHIFT16XYZ; - pspan->v = v; - u += istep; - pspan++; - } - } - - vtop = vbottom; - - i--; - if (i == 0) - i = r_polydesc.nump; - - } while (i != lmaxindex); - - pspan->count = INT_MIN; // mark the end of the span list -} - -/* -** R_PolygonScanRightEdge -** -** Goes through the polygon and scans the right edge, filling in -** count values. -*/ -static void -R_PolygonScanRightEdge(espan_t *s_polygon_spans) -{ - int i; - emitpoint_t *pvert, *pnext; - espan_t *pspan; - float du, dv, vtop, u_step, uvert, unext, vvert; - - pspan = s_polygon_spans; - i = s_minindex; - - vvert = r_polydesc.pverts[i].v; - if (vvert < r_refdef.fvrecty_adj) - vvert = r_refdef.fvrecty_adj; - if (vvert > r_refdef.fvrectbottom_adj) - vvert = r_refdef.fvrectbottom_adj; - - vtop = ceil (vvert); - - do - { - float vbottom, vnext; - - pvert = &r_polydesc.pverts[i]; - pnext = pvert + 1; - - vnext = pnext->v; - if (vnext < r_refdef.fvrecty_adj) - vnext = r_refdef.fvrecty_adj; - if (vnext > r_refdef.fvrectbottom_adj) - vnext = r_refdef.fvrectbottom_adj; - - vbottom = ceil (vnext); - - if (vtop < vbottom) - { - int v, u, istep, itop, ibottom; - - uvert = pvert->u; - if (uvert < r_refdef.fvrectx_adj) - uvert = r_refdef.fvrectx_adj; - if (uvert > r_refdef.fvrectright_adj) - uvert = r_refdef.fvrectright_adj; - - unext = pnext->u; - if (unext < r_refdef.fvrectx_adj) - unext = r_refdef.fvrectx_adj; - if (unext > r_refdef.fvrectright_adj) - unext = r_refdef.fvrectright_adj; - - du = unext - uvert; - dv = vnext - vvert; - u_step = (du * SHIFT16XYZ_MULT) / dv; - // adjust u to ceil the integer portion - u = (int)((uvert * SHIFT16XYZ_MULT) + u_step * (vtop - vvert)) + - (SHIFT16XYZ_MULT - 1); - itop = (int)vtop; - ibottom = (int)vbottom; - istep = (int)u_step; - - for (v=itop ; vcount = (u >> SHIFT16XYZ) - pspan->u; - u += istep; - pspan++; - } - } - - vtop = vbottom; - vvert = vnext; - - i++; - if (i == r_polydesc.nump) - i = 0; - - } while (i != s_maxindex); - - pspan->count = INT_MIN; // mark the end of the span list -} - -/* -** R_ClipAndDrawPoly -*/ -// isturbulent was qboolean. changed to int to allow passing more flags -void -R_ClipAndDrawPoly ( float alpha, int isturbulent, qboolean textured ) -{ - vec_t *pv; - int i, nump; - vec3_t transformed, local; - - if ( !textured ) - { - r_polydesc.drawspanlet = R_DrawSpanletConstant33; - } - else - { - - /* - ** choose the correct spanlet routine based on alpha - */ - if ( alpha == 1 ) - { - // isturbulent is ignored because we know that turbulent surfaces - // can't be opaque - r_polydesc.drawspanlet = R_DrawSpanletOpaque; - } - else - { - if ( sw_stipplealpha->value ) - { - if ( isturbulent ) - { - if ( alpha > 0.33 ) - r_polydesc.drawspanlet = R_DrawSpanletTurbulentStipple66; - else - r_polydesc.drawspanlet = R_DrawSpanletTurbulentStipple33; - } - else - { - if ( alpha > 0.33 ) - r_polydesc.drawspanlet = R_DrawSpanlet66Stipple; - else - r_polydesc.drawspanlet = R_DrawSpanlet33Stipple; - } - } - else - { - if ( isturbulent ) - { - if ( alpha > 0.33 ) - r_polydesc.drawspanlet = R_DrawSpanletTurbulentBlended66; - else - r_polydesc.drawspanlet = R_DrawSpanletTurbulentBlended33; - } - else - { - if ( alpha > 0.33 ) - r_polydesc.drawspanlet = R_DrawSpanlet66; - else - r_polydesc.drawspanlet = R_DrawSpanlet33; - } - } - } - } - - // clip to the frustum in worldspace - nump = r_polydesc.nump; - clip_current = 0; - - for (i=0 ; i<4 ; i++) - { - nump = R_ClipPolyFace (nump, &view_clipplanes[i]); - if (nump < 3) - return; - if (nump > MAXWORKINGVERTS) - { - Com_Error(ERR_DROP, "%s: too many points: %d", __func__, nump); - } - } - - // transform vertices into viewspace and project - pv = &r_clip_verts[clip_current][0][0]; - - for (i=0 ; izi = 1.0 / transformed[2]; - - pout->s = pv[3]; - pout->t = pv[4]; - - scale = xscale * pout->zi; - pout->u = (xcenter + scale * transformed[0]); - - scale = yscale * pout->zi; - pout->v = (ycenter - scale * transformed[1]); - - pv += sizeof (vec5_t) / sizeof (vec_t); - } - - // draw it - r_polydesc.nump = nump; - r_polydesc.pverts = outverts; - - R_DrawPoly(isturbulent, vid_polygon_spans); -} - -/* -** R_BuildPolygonFromSurface -*/ -static void -R_BuildPolygonFromSurface(const entity_t *currententity, const model_t *currentmodel, msurface_t *fa) -{ - int i, lnumverts; - medge_t *pedges, *r_pedge; - float *vec; - vec5_t *pverts; - float tmins[2] = { 0, 0 }; - - r_polydesc.nump = 0; - - // reconstruct the polygon - pedges = currentmodel->edges; - lnumverts = fa->numedges; - - pverts = r_clip_verts[0]; - - for (i=0 ; isurfedges[fa->firstedge + i]; - - if (lindex > 0) - { - r_pedge = &pedges[lindex]; - vec = currentmodel->vertexes[r_pedge->v[0]].position; - } - else - { - r_pedge = &pedges[-lindex]; - vec = currentmodel->vertexes[r_pedge->v[1]].position; - } - - VectorCopy (vec, pverts[i] ); - } - - VectorCopy( fa->texinfo->vecs[0], r_polydesc.vright ); - VectorCopy( fa->texinfo->vecs[1], r_polydesc.vup ); - VectorCopy( fa->plane->normal, r_polydesc.vpn ); - VectorCopy( r_origin, r_polydesc.viewer_position ); - - if ( fa->flags & SURF_PLANEBACK ) - { - VectorSubtract( vec3_origin, r_polydesc.vpn, r_polydesc.vpn ); - } - - if ( fa->texinfo->flags & (SURF_WARP|SURF_FLOWING) ) - { - r_polydesc.pixels = fa->texinfo->image->pixels[0]; - r_polydesc.pixel_width = fa->texinfo->image->width; - r_polydesc.pixel_height = fa->texinfo->image->height; - } - else - { - surfcache_t *scache; - - scache = D_CacheSurface(currententity, fa, 0); - - r_polydesc.pixels = scache->data; - r_polydesc.pixel_width = scache->width; - r_polydesc.pixel_height = scache->height; - - tmins[0] = fa->texturemins[0]; - tmins[1] = fa->texturemins[1]; - } - - r_polydesc.dist = DotProduct( r_polydesc.vpn, pverts[0] ); - - r_polydesc.s_offset = fa->texinfo->vecs[0][3] - tmins[0]; - r_polydesc.t_offset = fa->texinfo->vecs[1][3] - tmins[1]; - - // scrolling texture addition - if (fa->texinfo->flags & SURF_FLOWING) - { - r_polydesc.s_offset += -128 * ( (r_newrefdef.time*0.25) - (int)(r_newrefdef.time*0.25) ); - } - - r_polydesc.nump = lnumverts; -} - -/* -** R_PolygonCalculateGradients -*/ -static void -R_PolygonCalculateGradients (float *p_ziorigin, float *p_zistepu, float *p_zistepv) -{ - vec3_t p_normal, p_saxis, p_taxis; - float distinv; - float d_ziorigin, d_zistepu, d_zistepv; - - TransformVector (r_polydesc.vpn, p_normal); - TransformVector (r_polydesc.vright, p_saxis); - TransformVector (r_polydesc.vup, p_taxis); - - distinv = 1.0 / (-(DotProduct (r_polydesc.viewer_position, r_polydesc.vpn)) + r_polydesc.dist ); - - d_sdivzstepu = p_saxis[0] * xscaleinv; - d_sdivzstepv = -p_saxis[1] * yscaleinv; - d_sdivzorigin = p_saxis[2] - xcenter * d_sdivzstepu - ycenter * d_sdivzstepv; - - d_tdivzstepu = p_taxis[0] * xscaleinv; - d_tdivzstepv = -p_taxis[1] * yscaleinv; - d_tdivzorigin = p_taxis[2] - xcenter * d_tdivzstepu - ycenter * d_tdivzstepv; - - d_zistepu = p_normal[0] * xscaleinv * distinv; - d_zistepv = -p_normal[1] * yscaleinv * distinv; - d_ziorigin = p_normal[2] * distinv - xcenter * d_zistepu - ycenter * d_zistepv; - - sadjust = (int) ( ( DotProduct( r_polydesc.viewer_position, r_polydesc.vright) + r_polydesc.s_offset ) * SHIFT16XYZ_MULT ); - tadjust = (int) ( ( DotProduct( r_polydesc.viewer_position, r_polydesc.vup ) + r_polydesc.t_offset ) * SHIFT16XYZ_MULT ); - - // -1 (-epsilon) so we never wander off the edge of the texture - bbextents = (r_polydesc.pixel_width << SHIFT16XYZ) - 1; - bbextentt = (r_polydesc.pixel_height << SHIFT16XYZ) - 1; - - *p_zistepu = d_zistepu; - *p_zistepv = d_zistepv; - *p_ziorigin = d_ziorigin; -} - -/* -** R_DrawPoly -** -** Polygon drawing function. Uses the polygon described in r_polydesc -** to calculate edges and gradients, then renders the resultant spans. -** -** This should NOT be called externally since it doesn't do clipping! -*/ -// iswater was qboolean. changed to support passing more flags -static void -R_DrawPoly(int iswater, espan_t *spans) -{ - int i, nump; - float ymin, ymax; - emitpoint_t *pverts; - float d_ziorigin, d_zistepu, d_zistepv; - - // find the top and bottom vertices, and make sure there's at least one scan to - // draw - ymin = (float)INT_MAX; // Set maximum values for world range - ymax = (float)INT_MIN; // Set minimal values for world range - pverts = r_polydesc.pverts; - - for (i=0 ; iv < ymin) - { - ymin = pverts->v; - s_minindex = i; - } - - if (pverts->v > ymax) - { - ymax = pverts->v; - s_maxindex = i; - } - - pverts++; - } - - ymin = ceil (ymin); - ymax = ceil (ymax); - - if (ymin >= ymax) - return; // doesn't cross any scans at all - - cachewidth = r_polydesc.pixel_width; - cacheblock = r_polydesc.pixels; - - // copy the first vertex to the last vertex, so we don't have to deal with - // wrapping - nump = r_polydesc.nump; - pverts = r_polydesc.pverts; - pverts[nump] = pverts[0]; - - R_PolygonCalculateGradients(&d_ziorigin, &d_zistepu, &d_zistepv); - R_PolygonScanLeftEdge(spans); - R_PolygonScanRightEdge(spans); - - R_PolygonDrawSpans(spans, iswater, d_ziorigin, d_zistepu, d_zistepv); -} - -/* -** R_DrawAlphaSurfaces -*/ -void -R_DrawAlphaSurfaces(const entity_t *currententity) -{ - msurface_t *s = r_alpha_surfaces; - const model_t *currentmodel = r_worldmodel; - - modelorg[0] = -r_origin[0]; - modelorg[1] = -r_origin[1]; - modelorg[2] = -r_origin[2]; - - while ( s ) - { - R_BuildPolygonFromSurface(currententity, currentmodel, s); - - // pass down all the texinfo flags, not just SURF_WARP. - if (s->texinfo->flags & SURF_TRANS66) - R_ClipAndDrawPoly( 0.60f, (s->texinfo->flags & (SURF_WARP|SURF_FLOWING)), true ); - else - R_ClipAndDrawPoly( 0.30f, (s->texinfo->flags & (SURF_WARP|SURF_FLOWING)), true ); - - s = s->nextalphasurface; - } - - r_alpha_surfaces = NULL; -} - -/* -** R_IMFlatShadedQuad -*/ -void -R_IMFlatShadedQuad( const vec3_t a, const vec3_t b, const vec3_t c, const vec3_t d, int color, float alpha ) -{ - vec3_t s0, s1; - - r_polydesc.nump = 4; - VectorCopy( r_origin, r_polydesc.viewer_position ); - - VectorCopy( a, r_clip_verts[0][0] ); - VectorCopy( b, r_clip_verts[0][1] ); - VectorCopy( c, r_clip_verts[0][2] ); - VectorCopy( d, r_clip_verts[0][3] ); - - r_clip_verts[0][0][3] = 0; - r_clip_verts[0][1][3] = 0; - r_clip_verts[0][2][3] = 0; - r_clip_verts[0][3][3] = 0; - - r_clip_verts[0][0][4] = 0; - r_clip_verts[0][1][4] = 0; - r_clip_verts[0][2][4] = 0; - r_clip_verts[0][3][4] = 0; - - VectorSubtract( d, c, s0 ); - VectorSubtract( c, b, s1 ); - CrossProduct( s0, s1, r_polydesc.vpn ); - VectorNormalize( r_polydesc.vpn ); - - r_polydesc.dist = DotProduct( r_polydesc.vpn, r_clip_verts[0][0] ); - - r_polyblendcolor = color; - - R_ClipAndDrawPoly( alpha, false, false ); -} diff --git a/src/client/refresh/soft/sw_polyset.c b/src/client/refresh/soft/sw_polyset.c deleted file mode 100644 index a3c8bbe01..000000000 --- a/src/client/refresh/soft/sw_polyset.c +++ /dev/null @@ -1,1002 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_polyset.c: routines for drawing sets of polygons sharing the same -// texture (used for Alias models) - -#include "header/local.h" -#include - -typedef struct { - int numleftedges; - compactvert_t *pleftedgevert0; - compactvert_t *pleftedgevert1; - compactvert_t *pleftedgevert2; - int numrightedges; - compactvert_t *prightedgevert0; - compactvert_t *prightedgevert1; - compactvert_t *prightedgevert2; -} edgetable; - -static int ubasestep, errorterm, erroradjustup, erroradjustdown; - -static compactvert_t r_p0, r_p1, r_p2; - -static int d_xdenom; - -static edgetable *pedgetable; - -static edgetable edgetables[12] = { - {1, &r_p0, &r_p2, &r_p2, 2, &r_p0, &r_p1, &r_p2}, - {2, &r_p1, &r_p0, &r_p2, 1, &r_p1, &r_p2, &r_p2}, - {1, &r_p0, &r_p2, &r_p2, 1, &r_p1, &r_p2, &r_p2}, // flat top - {1, &r_p1, &r_p0, &r_p0, 2, &r_p1, &r_p2, &r_p0}, - {2, &r_p0, &r_p2, &r_p1, 1, &r_p0, &r_p1, &r_p1}, - {1, &r_p2, &r_p1, &r_p1, 1, &r_p2, &r_p0, &r_p0}, - {1, &r_p2, &r_p1, &r_p1, 2, &r_p2, &r_p0, &r_p1}, - {2, &r_p2, &r_p1, &r_p0, 1, &r_p2, &r_p0, &r_p0}, - {1, &r_p1, &r_p0, &r_p0, 1, &r_p1, &r_p2, &r_p2}, - {1, &r_p2, &r_p1, &r_p1, 1, &r_p0, &r_p1, &r_p1}, // flat top - {1, &r_p1, &r_p0, &r_p0, 1, &r_p2, &r_p0, &r_p0}, // flat top - {1, &r_p0, &r_p2, &r_p2, 1, &r_p0, &r_p1, &r_p1}, -}; - -// FIXME: some of these can become statics -static int a_sstepxfrac, a_tstepxfrac, a_ststepxwhole; -static int r_sstepx, r_tstepx, r_sstepy, r_tstepy; -static light3_t r_lstepx, r_lstepy; -static zvalue_t r_zistepx, r_zistepy; -static int d_aspancount; - -static spanpackage_t *d_pedgespanpackage; - -spanpackage_t *triangle_spans, *triangles_max; - -static int d_sfrac, d_tfrac; -static light3_t d_light; -static zvalue_t d_zi; -static int d_ptexextrastep, d_sfracextrastep; -static int d_tfracextrastep, d_ptexbasestep; -static light3_t d_lightbasestep, d_lightextrastep; -static int d_sfracbasestep, d_tfracbasestep; -static zvalue_t d_ziextrastep, d_zibasestep; - -void (*d_pdrawspans)(const entity_t *currententity, spanpackage_t *pspanpackage); - -static void R_PolysetSetEdgeTable(void); -static void R_RasterizeAliasPolySmooth(const entity_t *currententity); - -// ====================== -// 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 -static const byte irtable[256] = { - 79, 78, 77, 76, 75, 74, 73, 72, // black/white - 71, 70, 69, 68, 67, 66, 65, 64, - 64, 65, 66, 67, 68, 69, 70, 71, // dark taupe - 72, 73, 74, 75, 76, 77, 78, 79, - - 64, 65, 66, 67, 68, 69, 70, 71, // slate grey - 72, 73, 74, 75, 76, 77, 78, 79, - 208, 208, 208, 208, 208, 208, 208, 208, // unused?' - 64, 66, 68, 70, 72, 74, 76, 78, // dark yellow - - 64, 65, 66, 67, 68, 69, 70, 71, // dark red - 72, 73, 74, 75, 76, 77, 78, 79, - 64, 65, 66, 67, 68, 69, 70, 71, // grey/tan - 72, 73, 74, 75, 76, 77, 78, 79, - - 64, 66, 68, 70, 72, 74, 76, 78, // chocolate - 68, 67, 66, 65, 64, 65, 66, 67, // mauve / teal - 68, 69, 70, 71, 72, 73, 74, 75, - 76, 76, 77, 77, 78, 78, 79, 79, - - 64, 65, 66, 67, 68, 69, 70, 71, // more mauve - 72, 73, 74, 75, 76, 77, 78, 79, - 64, 65, 66, 67, 68, 69, 70, 71, // olive - 72, 73, 74, 75, 76, 77, 78, 79, - - 64, 65, 66, 67, 68, 69, 70, 71, // maroon - 72, 73, 74, 75, 76, 77, 78, 79, - 64, 65, 66, 67, 68, 69, 70, 71, // sky blue - 72, 73, 74, 75, 76, 77, 78, 79, - - 64, 65, 66, 67, 68, 69, 70, 71, // olive again - 72, 73, 74, 75, 76, 77, 78, 79, - 64, 65, 66, 67, 68, 69, 70, 71, // nuclear green - 64, 65, 66, 67, 68, 69, 70, 71, // bright yellow - - 64, 65, 66, 67, 68, 69, 70, 71, // fire colors - 72, 73, 74, 75, 76, 77, 78, 79, - 208, 208, 64, 64, 70, 71, 72, 64, // mishmash1 - 66, 68, 70, 64, 65, 66, 67, 68}; // mishmash2 - -// ====================== - -/* -================ -R_DrawTriangle -================ -*/ -void -R_DrawTriangle(const entity_t *currententity, const finalvert_t *a, const finalvert_t *b, const finalvert_t *c) -{ - int dv1_ab, dv0_ac; - int dv0_ab, dv1_ac; - - /* - d_xdenom = ( a->v[1] - b->v[1] ) * ( a->v[0] - c->v[0] ) - - ( a->v[0] - b->v[0] ) * ( a->v[1] - c->v[1] ); - */ - - dv0_ab = a->cv.u - b->cv.u; - dv1_ab = a->cv.v - b->cv.v; - - if ( !( dv0_ab | dv1_ab ) ) - return; - - dv0_ac = a->cv.u - c->cv.u; - dv1_ac = a->cv.v - c->cv.v; - - if ( !( dv0_ac | dv1_ac ) ) - return; - - d_xdenom = ( dv0_ac * dv1_ab ) - ( dv0_ab * dv1_ac ); - - if ( d_xdenom < 0 ) - { - memcpy(&r_p0, &a->cv, sizeof(compactvert_t)); - memcpy(&r_p1, &b->cv, sizeof(compactvert_t)); - memcpy(&r_p2, &c->cv, sizeof(compactvert_t)); - - R_PolysetSetEdgeTable (); - R_RasterizeAliasPolySmooth(currententity); - } -} - -static void -R_PushEdgesSpan(int u, int v, int count, - pixel_t* d_ptex, int d_sfrac, int d_tfrac, light3_t d_light, zvalue_t d_zi) -{ - d_pedgespanpackage->u = u; - d_pedgespanpackage->v = v; - d_pedgespanpackage->count = count; - d_pedgespanpackage->ptex = d_ptex; - - d_pedgespanpackage->sfrac = d_sfrac; - d_pedgespanpackage->tfrac = d_tfrac; - - // FIXME: need to clamp l, s, t, at both ends? - memcpy(d_pedgespanpackage->light, d_light, sizeof(light3_t)); - d_pedgespanpackage->zi = d_zi; - - d_pedgespanpackage++; -} - -/* -=================== -R_PolysetScanLeftEdge_C -==================== -*/ -static void -R_PolysetScanLeftEdge_C(int height, pixel_t *d_ptex, int u, int v) -{ - do - { - R_PushEdgesSpan(u, v, d_aspancount, - d_ptex, d_sfrac, d_tfrac, d_light, d_zi); - - v ++; - u += ubasestep; - d_aspancount += ubasestep; - - errorterm += erroradjustup; - if (errorterm >= 0) - { - int i; - - // addtional step for compensate error - u ++; - d_aspancount ++; - - d_ptex += d_ptexextrastep; - d_sfrac += d_sfracextrastep; - d_ptex += d_sfrac >> SHIFT16XYZ; - - d_sfrac &= 0xFFFF; - d_tfrac += d_tfracextrastep; - if (d_tfrac & 0x10000) - { - d_ptex += r_affinetridesc.skinwidth; - d_tfrac &= 0xFFFF; - } - - for(i=0; i<3; i++) - d_light[i] += d_lightextrastep[i]; - - d_zi += d_ziextrastep; - errorterm -= erroradjustdown; - } - else - { - int i; - - d_ptex += d_ptexbasestep; - d_sfrac += d_sfracbasestep; - d_ptex += d_sfrac >> SHIFT16XYZ; - d_sfrac &= 0xFFFF; - d_tfrac += d_tfracbasestep; - if (d_tfrac & 0x10000) - { - d_ptex += r_affinetridesc.skinwidth; - d_tfrac &= 0xFFFF; - } - - for(i=0; i<3; i++) - d_light[i] += d_lightbasestep[i]; - - d_zi += d_zibasestep; - } - } while (--height); -} - -/* -=================== -FloorDivMod - -Returns mathematically correct (floor-based) quotient and remainder for -numer and denom, both of which should contain no fractional part. The -quotient must fit in 32 bits. -FIXME: GET RID OF THIS! (FloorDivMod) -==================== -*/ -static void -FloorDivMod(int numer, int denom, int *quo, int *rem) -{ - int q, r; - -// just exclude ARM32 with FPU, e.g. Pi 1 -#if defined(__i386__) || defined(__amd64__) - q = numer / denom; - r = numer - q * denom; - - if (-1/2 || 1/-2 || -1/-2) { - // long live C89 - if (r < 0 && r < denom) { - q += 1; - r -= denom; - } - } - else - { - // C99 always truncates to 0 - if ((numer ^ denom) < 0 && r != 0) - { - q -= 1; - r += denom; - } - } - - if ((numer < 0) ^ (denom < 0)) - { - assert(q <= 0); - } - else - { - assert(q >= 0); - } - - if (denom < 0) - { - assert(r > denom && r <= 0); - } - else - { - assert(r >= 0 && r < denom); - } -#else - float num = numer, den = denom; - float x; - - if (numer >= 0) - { - - x = floor(num / den); - q = (int)x; - r = (int)floor(num - (x * den)); - } - else - { - // - // perform operations with positive values, and fix mod to make floor-based - // - x = floor(-num / den); - q = -(int)x; - r = (int)floor(-num - (x * den)); - if (r != 0) - { - q--; - r = denom - r; - } - } -#endif - *quo = q; - *rem = r; -} - -/* -=================== -R_PolysetSetUpForLineScan -==================== -*/ -static void -R_PolysetSetUpForLineScan(fixed8_t startvertu, fixed8_t startvertv, - fixed8_t endvertu, fixed8_t endvertv) -{ - int tm, tn; - - tm = endvertu - startvertu; - tn = endvertv - startvertv; - - errorterm = -1; - erroradjustdown = tn; - - FloorDivMod (tm, tn, &ubasestep, &erroradjustup); -} - -/* -================ -R_PolysetCalcGradients -================ -*/ -static void -R_PolysetCalcGradients (int skinwidth) -{ - float xstepdenominv, ystepdenominv, t0, t1; - float p01_minus_p21, p11_minus_p21, p00_minus_p20, p10_minus_p20; - int i; - - p00_minus_p20 = r_p0.u - r_p2.u; - p01_minus_p21 = r_p0.v - r_p2.v; - p10_minus_p20 = r_p1.u - r_p2.u; - p11_minus_p21 = r_p1.v - r_p2.v; - - xstepdenominv = 1.0 / (float)d_xdenom; - - ystepdenominv = -xstepdenominv; - - // ceil () for light so positive steps are exaggerated, negative steps - // diminished, pushing us away from underflow toward overflow. Underflow is - // very visible, overflow is very unlikely, because of ambient lighting - for (i=0; i<3; i++) - { - t0 = r_p0.l[i] - r_p2.l[i]; - t1 = r_p1.l[i] - r_p2.l[i]; - r_lstepx[i] = (int) - ceil((t1 * p01_minus_p21 - t0 * p11_minus_p21) * xstepdenominv); - r_lstepy[i] = (int) - ceil((t1 * p00_minus_p20 - t0 * p10_minus_p20) * ystepdenominv); - } - - t0 = r_p0.s - r_p2.s; - t1 = r_p1.s - r_p2.s; - r_sstepx = (int)((t1 * p01_minus_p21 - t0 * p11_minus_p21) * - xstepdenominv); - r_sstepy = (int)((t1 * p00_minus_p20 - t0* p10_minus_p20) * - ystepdenominv); - - t0 = r_p0.t - r_p2.t; - t1 = r_p1.t - r_p2.t; - r_tstepx = (int)((t1 * p01_minus_p21 - t0 * p11_minus_p21) * - xstepdenominv); - r_tstepy = (int)((t1 * p00_minus_p20 - t0 * p10_minus_p20) * - ystepdenominv); - - t0 = r_p0.zi - r_p2.zi; - t1 = r_p1.zi - r_p2.zi; - r_zistepx = (int)((t1 * p01_minus_p21 - t0 * p11_minus_p21) * - xstepdenominv); - r_zistepy = (int)((t1 * p00_minus_p20 - t0 * p10_minus_p20) * - ystepdenominv); - - { - a_sstepxfrac = r_sstepx & 0xFFFF; - a_tstepxfrac = r_tstepx & 0xFFFF; - } - - a_ststepxwhole = skinwidth * (r_tstepx >> SHIFT16XYZ) + (r_sstepx >> SHIFT16XYZ); -} - - -/* -================ -R_PolysetDrawSpans8 -================ -*/ -void -R_PolysetDrawSpans8_33(const entity_t *currententity, spanpackage_t *pspanpackage) -{ - pixel_t *lpdest; - pixel_t *lptex; - int lsfrac, ltfrac; - light3_t llight; - zvalue_t lzi; - zvalue_t *lpz; - - do - { - int lcount; - - lcount = d_aspancount - pspanpackage->count; - - errorterm += erroradjustup; - d_aspancount += ubasestep; - - if (errorterm >= 0) - { - // addtional step for compensate error - d_aspancount ++; - errorterm -= erroradjustdown; - } - - if (lcount > 0) - { - int pos_shift = (pspanpackage->v * vid_buffer_width) + pspanpackage->u; - - lpdest = d_viewbuffer + pos_shift; - lpz = d_pzbuffer + pos_shift; - lptex = pspanpackage->ptex; - lsfrac = pspanpackage->sfrac; - ltfrac = pspanpackage->tfrac; - memcpy(llight, pspanpackage->light, sizeof(light3_t)); - lzi = pspanpackage->zi; - - do - { - int i; - - if ((lzi >> SHIFT16XYZ) >= *lpz) - { - int temp = R_ApplyLight(*lptex, llight); - - *lpdest = vid_alphamap[temp + *lpdest*256]; - } - lpdest++; - lzi += r_zistepx; - lpz++; - for(i=0; i<3; i++) - llight[i] += r_lstepx[i]; - lptex += a_ststepxwhole; - lsfrac += a_sstepxfrac; - lptex += lsfrac >> SHIFT16XYZ; - lsfrac &= 0xFFFF; - ltfrac += a_tstepxfrac; - if (ltfrac & 0x10000) - { - lptex += r_affinetridesc.skinwidth; - ltfrac &= 0xFFFF; - } - } while (--lcount); - } - - pspanpackage++; - } while (pspanpackage->count != INT_MIN); -} - -void -R_PolysetDrawSpansConstant8_33(const entity_t *currententity, spanpackage_t *pspanpackage) -{ - pixel_t *lpdest; - int lzi; - zvalue_t *lpz; - - do - { - int lcount; - - lcount = d_aspancount - pspanpackage->count; - - errorterm += erroradjustup; - d_aspancount += ubasestep; - - if (errorterm >= 0) - { - // addtional step for compensate error - d_aspancount ++; - errorterm -= erroradjustdown; - } - - if (lcount > 0) - { - int pos_shift = (pspanpackage->v * vid_buffer_width) + pspanpackage->u; - - lpdest = d_viewbuffer + pos_shift; - lpz = d_pzbuffer + pos_shift; - lzi = pspanpackage->zi; - - do - { - if ((lzi >> SHIFT16XYZ) >= *lpz) - { - *lpdest = vid_alphamap[r_aliasblendcolor + *lpdest*256]; - } - lpdest++; - lzi += r_zistepx; - lpz++; - } while (--lcount); - } - - pspanpackage++; - } while (pspanpackage->count != INT_MIN); -} - -void -R_PolysetDrawSpans8_66(const entity_t *currententity, spanpackage_t *pspanpackage) -{ - pixel_t *lpdest; - pixel_t *lptex; - int lsfrac, ltfrac; - light3_t llight; - zvalue_t lzi; - zvalue_t *lpz; - - do - { - int lcount; - - lcount = d_aspancount - pspanpackage->count; - - errorterm += erroradjustup; - d_aspancount += ubasestep; - - if (errorterm >= 0) - { - // addtional step for compensate error - d_aspancount ++; - errorterm -= erroradjustdown; - } - - if (lcount > 0) - { - int pos_shift = (pspanpackage->v * vid_buffer_width) + pspanpackage->u; - qboolean zdamaged = false; - - lpdest = d_viewbuffer + pos_shift; - lpz = d_pzbuffer + pos_shift; - lptex = pspanpackage->ptex; - lsfrac = pspanpackage->sfrac; - ltfrac = pspanpackage->tfrac; - memcpy(llight, pspanpackage->light, sizeof(light3_t)); - lzi = pspanpackage->zi; - - do - { - int i; - - if ((lzi >> SHIFT16XYZ) >= *lpz) - { - int temp = R_ApplyLight(*lptex, llight); - - *lpdest = vid_alphamap[temp*256 + *lpdest]; - *lpz = lzi >> SHIFT16XYZ; - zdamaged = true; - } - lpdest++; - lzi += r_zistepx; - lpz++; - for(i=0; i<3; i++) - llight[i] += r_lstepx[i]; - lptex += a_ststepxwhole; - lsfrac += a_sstepxfrac; - lptex += lsfrac >> SHIFT16XYZ; - lsfrac &= 0xFFFF; - ltfrac += a_tstepxfrac; - if (ltfrac & 0x10000) - { - lptex += r_affinetridesc.skinwidth; - ltfrac &= 0xFFFF; - } - } while (--lcount); - - if (zdamaged) - { - // damaged only current line - VID_DamageZBuffer(pspanpackage->u, pspanpackage->v); - VID_DamageZBuffer( - pspanpackage->u + d_aspancount - pspanpackage->count, - pspanpackage->v); - } - } - - pspanpackage++; - } while (pspanpackage->count != INT_MIN); -} - -void -R_PolysetDrawSpansConstant8_66(const entity_t *currententity, spanpackage_t *pspanpackage) -{ - pixel_t *lpdest; - zvalue_t lzi; - zvalue_t *lpz; - - do - { - int lcount; - - lcount = d_aspancount - pspanpackage->count; - - errorterm += erroradjustup; - d_aspancount += ubasestep; - - if (errorterm >= 0) - { - // addtional step for compensate error - d_aspancount ++; - errorterm -= erroradjustdown; - } - - if (lcount > 0) - { - int pos_shift = (pspanpackage->v * vid_buffer_width) + pspanpackage->u; - qboolean zdamaged = false; - - lpdest = d_viewbuffer + pos_shift; - lpz = d_pzbuffer + pos_shift; - lzi = pspanpackage->zi; - - do - { - if ((lzi >> SHIFT16XYZ) >= *lpz) - { - *lpdest = vid_alphamap[r_aliasblendcolor*256 + *lpdest]; - zdamaged = true; - } - lpdest++; - lzi += r_zistepx; - lpz++; - } while (--lcount); - - if (zdamaged) - { - // damaged only current line - VID_DamageZBuffer(pspanpackage->u, pspanpackage->v); - VID_DamageZBuffer( - pspanpackage->u + d_aspancount - pspanpackage->count, - pspanpackage->v); - } - } - - pspanpackage++; - } while (pspanpackage->count != INT_MIN); -} - -void -R_PolysetDrawSpans8_Opaque (const entity_t *currententity, spanpackage_t *pspanpackage) -{ - do - { - int lcount; - - lcount = d_aspancount - pspanpackage->count; - errorterm += erroradjustup; - d_aspancount += ubasestep; - - if (errorterm >= 0) - { - // addtional step for compensate error - d_aspancount ++; - errorterm -= erroradjustdown; - } - - if (lcount > 0) - { - int lsfrac, ltfrac; - pixel_t *lpdest; - pixel_t *lptex; - light3_t llight; - zvalue_t lzi; - zvalue_t *lpz; - int pos_shift = (pspanpackage->v * vid_buffer_width) + pspanpackage->u; - qboolean zdamaged = false; - - lpdest = d_viewbuffer + pos_shift; - lpz = d_pzbuffer + pos_shift; - - lptex = pspanpackage->ptex; - lsfrac = pspanpackage->sfrac; - ltfrac = pspanpackage->tfrac; - memcpy(llight, pspanpackage->light, sizeof(light3_t)); - lzi = pspanpackage->zi; - - do - { - int i; - - if ((lzi >> SHIFT16XYZ) >= *lpz) - { - if(r_newrefdef.rdflags & RDF_IRGOGGLES && currententity->flags & RF_IR_VISIBLE) - *lpdest = vid_colormap[irtable[*lptex]]; - else - *lpdest = R_ApplyLight(*lptex, llight); - - *lpz = lzi >> SHIFT16XYZ; - zdamaged = true; - } - lpdest++; - lzi += r_zistepx; - lpz++; - for(i=0; i<3; i++) - llight[i] += r_lstepx[i]; - lptex += a_ststepxwhole; - lsfrac += a_sstepxfrac; - lptex += lsfrac >> SHIFT16XYZ; - lsfrac &= 0xFFFF; - ltfrac += a_tstepxfrac; - if (ltfrac & 0x10000) - { - lptex += r_affinetridesc.skinwidth; - ltfrac &= 0xFFFF; - } - } while (--lcount); - - if (zdamaged) - { - // damaged only current line - VID_DamageZBuffer(pspanpackage->u, pspanpackage->v); - VID_DamageZBuffer( - pspanpackage->u + d_aspancount - pspanpackage->count, - pspanpackage->v); - } - } - - pspanpackage++; - } while (pspanpackage->count != INT_MIN); -} - -static void -R_ProcessLeftEdge(const compactvert_t *plefttop, const compactvert_t *prighttop, - const compactvert_t *pleftbottom) -{ - light3_t working_lstepx; - pixel_t *d_ptex; - int u, v; - int s, t; - int height; - int i; - - u = plefttop->u; - v = plefttop->v; - d_aspancount = plefttop->u - prighttop->u; - - s = plefttop->s * r_affinetridesc.scalewidth; - t = plefttop->t * r_affinetridesc.scaleheight; - i = (s >> SHIFT16XYZ) + (t >> SHIFT16XYZ) * r_affinetridesc.skinwidth; - d_ptex = &r_affinetridesc.pskin[i]; - d_sfrac = s & 0xFFFF; - d_tfrac = t & 0xFFFF; - - memcpy(d_light, plefttop->l, sizeof(light3_t)); - d_zi = plefttop->zi; - - height = pleftbottom->v - plefttop->v; - if (height == 1) - { - // skip calculations needed for 2+ spans - R_PushEdgesSpan(u, v, d_aspancount, - d_ptex, d_sfrac, d_tfrac, d_light, d_zi); - return; - } - R_PolysetSetUpForLineScan(plefttop->u, plefttop->v, - pleftbottom->u, pleftbottom->v); - - // for negative steps in x along left edge, bias toward overflow rather than - // underflow (sort of turning the floor () we did in the gradient calcs into - // ceil (), but plus a little bit) - t = ubasestep < 0; - for (i = 0; i < 3; i++) - { - working_lstepx[i] = r_lstepx[i] - t; - } - - // base steps for drawers - s = r_sstepy + r_sstepx * ubasestep; - t = r_tstepy + r_tstepx * ubasestep; - d_ptexbasestep = (s >> SHIFT16XYZ) + - (t >> SHIFT16XYZ) * r_affinetridesc.skinwidth; - d_sfracbasestep = s & 0xFFFF; - d_tfracbasestep = t & 0xFFFF; - - for (i = 0; i < 3; i++) - { - d_lightbasestep[i] = r_lstepy[i] + working_lstepx[i] * ubasestep; - } - - d_zibasestep = r_zistepy + r_zistepx * ubasestep; - - // extra steps for drawers - s += r_sstepx; - t += r_tstepx; - d_ptexextrastep = (s >> SHIFT16XYZ) + - (t >> SHIFT16XYZ) * r_affinetridesc.skinwidth; - d_sfracextrastep = s & 0xFFFF; - d_tfracextrastep = t & 0xFFFF; - - for (i = 0; i < 3; i++) - { - d_lightextrastep[i] = d_lightbasestep[i] + working_lstepx[i]; - } - - d_ziextrastep = d_zibasestep + r_zistepx; - - R_PolysetScanLeftEdge_C(height, d_ptex, u, v); -} - -/* -================ -R_RasterizeAliasPolySmooth -================ -*/ -static void -R_RasterizeAliasPolySmooth(const entity_t *currententity) -{ - const compactvert_t *pleftbottom, *prightbottom; - const compactvert_t *plefttop, *prighttop; - spanpackage_t *pstart; - int originalcount; - int leftheight, rightheight; - - // set the s, t, and light gradients, which are consistent across - // the triangle because being a triangle, things are affine - R_PolysetCalcGradients (r_affinetridesc.skinwidth); - - plefttop = pedgetable->pleftedgevert0; - prighttop = pedgetable->prightedgevert0; - - pleftbottom = pedgetable->pleftedgevert1; - prightbottom = pedgetable->prightedgevert1; - - // make sure we have enough spans for the full height - // plus 1 more for the list terminator. - // vert2 in the edgetable is always the lowest. - // (this is silly anyway, just allocate vid.height+1) - leftheight = pedgetable->pleftedgevert2->v - plefttop->v; - rightheight = pedgetable->prightedgevert2->v - prighttop->v; - if (leftheight < rightheight) - leftheight = rightheight; - if (&triangle_spans[leftheight] >= triangles_max) - { - r_outoftriangles = true; - return; - } - // init span allocation ptr - d_pedgespanpackage = triangle_spans; - - // 1. scan out the top (and possibly only) part of the left edge - R_ProcessLeftEdge(plefttop, prighttop, pleftbottom); - - // 2. scan out the bottom part of the left edge, if it exists - if (pedgetable->numleftedges == 2) - { - plefttop = pleftbottom; - pleftbottom = pedgetable->pleftedgevert2; - - R_ProcessLeftEdge(plefttop, prighttop, pleftbottom); - } - assert(d_pedgespanpackage <= triangles_max); - - // 3. scan out the top (and possibly only) part of the right edge, - // drawing spans that terminate on it - rightheight = prightbottom->v - prighttop->v; - - // reset u delta before drawing the top - d_aspancount = 0; - - // save for step 4 - pstart = &triangle_spans[rightheight]; - originalcount = pstart->count; - // mark end of the spanpackages - pstart->count = INT_MIN; - - R_PolysetSetUpForLineScan(prighttop->u, prighttop->v, - prightbottom->u, prightbottom->v); - (*d_pdrawspans) (currententity, triangle_spans); - - // 4. scan out the bottom part of the right edge, if it exists - if (pedgetable->numrightedges == 2) - { - // 4.1 restore the starting span count - pstart->count = originalcount; - - d_aspancount = prightbottom->u - prighttop->u; - - // 4.2 shift verts like in step 2 - prighttop = prightbottom; - prightbottom = pedgetable->prightedgevert2; - - // 4.3 increase right height - rightheight += prightbottom->v - prighttop->v; - - // mark end of the spanpackages - triangle_spans[rightheight].count = INT_MIN; - - R_PolysetSetUpForLineScan(prighttop->u, prighttop->v, - prightbottom->u, prightbottom->v); - (*d_pdrawspans) (currententity, pstart); - } -} - -/* -================ -R_PolysetSetEdgeTable -================ -*/ -static void -R_PolysetSetEdgeTable(void) -{ - int edgetableindex; - - edgetableindex = 0; // assume the vertices are already in - // top to bottom order - - // - // determine which edges are right & left, and the order in which - // to rasterize them - // - if (r_p0.v >= r_p1.v) - { - if (r_p0.v == r_p1.v) - { - if (r_p0.v < r_p2.v) - pedgetable = &edgetables[2]; - else - pedgetable = &edgetables[5]; - - return; - } - else - { - edgetableindex = 1; - } - } - - if (r_p0.v == r_p2.v) - { - if (edgetableindex) - pedgetable = &edgetables[8]; - else - pedgetable = &edgetables[9]; - - return; - } - else if (r_p1.v == r_p2.v) - { - if (edgetableindex) - pedgetable = &edgetables[10]; - else - pedgetable = &edgetables[11]; - - return; - } - - if (r_p0.v > r_p2.v) - edgetableindex += 2; - - if (r_p1.v > r_p2.v) - edgetableindex += 4; - - pedgetable = &edgetables[edgetableindex]; -} diff --git a/src/client/refresh/soft/sw_rast.c b/src/client/refresh/soft/sw_rast.c deleted file mode 100644 index d964058b9..000000000 --- a/src/client/refresh/soft/sw_rast.c +++ /dev/null @@ -1,864 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_rast.c - -#include -#include - -#include "header/local.h" - -#define MAXLEFTCLIPEDGES 100 - -#define FULLY_CLIPPED_CACHED 0x80000000 -#define FRAMECOUNT_MASK 0x7FFFFFFF - -static unsigned int cacheoffset; - -int c_faceclip; // number of faces clipped - -clipplane_t view_clipplanes[4]; - -edge_t *r_edges = NULL, *edge_p = NULL, *edge_max = NULL; -surf_t *surfaces = NULL, *surface_p = NULL, *surf_max = NULL; - -int *sintable; -int *intsintable; -int *blanktable; - -static mvertex_t r_leftenter, r_leftexit; -static mvertex_t r_rightenter, r_rightexit; - -static int r_emitted; -static float r_nearzi; -static float r_u1, r_v1, r_lzi1; -static int r_ceilv1; - -static qboolean r_lastvertvalid; -static int r_skyframe; - -static msurface_t *r_skyfaces; -static cplane_t r_skyplanes[6]; -mtexinfo_t r_skytexinfo[6]; -static mvertex_t *r_skyverts; -static medge_t *r_skyedges; -static int *r_skysurfedges; - -// I just copied this data from a box map... -static const int skybox_planes[12] = {2,-128, 0,-128, 2,128, 1,128, 0,128, 1,-128}; - -static const int box_surfedges[24] = { 1,2,3,4, -1,5,6,7, 8,9,-6,10, -2,-7,-9,11, - 12,-3,-11,-8, -12,-10,-5,-4}; -static const int box_edges[24] = { 1,2, 2,3, 3,4, 4,1, 1,5, 5,6, 6,2, 7,8, 8,6, 5,7, 8,3, 7,4}; - -static const int box_faces[6] = { - 0, 0, - SURF_PLANEBACK, SURF_PLANEBACK, - SURF_PLANEBACK, 0 -}; - -static const vec3_t box_vecs[6][2] = { - { {0,-1,0}, {-1,0,0} }, - { {0,1,0}, {0,0,-1} }, - { {0,-1,0}, {1,0,0} }, - { {1,0,0}, {0,0,-1} }, - { {0,-1,0}, {0,0,-1} }, - { {-1,0,0}, {0,0,-1} } -}; - -static const float box_verts[8][3] = { - {-1,-1,-1}, - {-1,1,-1}, - {1,1,-1}, - {1,-1,-1}, - {-1,-1,1}, - {-1,1,1}, - {1,-1,1}, - {1,1,1} -}; - -// down, west, up, north, east, south -// {"rt", "bk", "lf", "ft", "up", "dn"}; - -/* -================ -R_InitSkyBox - -================ -*/ -void -R_InitSkyBox (model_t *loadmodel) -{ - int i; - - r_skyfaces = loadmodel->surfaces + loadmodel->numsurfaces; - loadmodel->numsurfaces += 6; - r_skyverts = loadmodel->vertexes + loadmodel->numvertexes; - loadmodel->numvertexes += 8; - r_skyedges = loadmodel->edges + loadmodel->numedges; - loadmodel->numedges += 12; - r_skysurfedges = loadmodel->surfedges + loadmodel->numsurfedges; - loadmodel->numsurfedges += 24; - if (loadmodel->numsurfaces > MAX_MAP_FACES - || loadmodel->numvertexes > MAX_MAP_VERTS - || loadmodel->numedges > MAX_MAP_EDGES) - ri.Sys_Error (ERR_DROP, "InitSkyBox: map overflow"); - - memset (r_skyfaces, 0, 6*sizeof(*r_skyfaces)); - for (i=0 ; i<6 ; i++) - { - r_skyplanes[i].normal[skybox_planes[i*2]] = 1; - r_skyplanes[i].dist = skybox_planes[i*2+1]; - - VectorCopy (box_vecs[i][0], r_skytexinfo[i].vecs[0]); - VectorCopy (box_vecs[i][1], r_skytexinfo[i].vecs[1]); - - r_skyfaces[i].plane = &r_skyplanes[i]; - r_skyfaces[i].numedges = 4; - r_skyfaces[i].flags = box_faces[i] | SURF_DRAWSKY; - r_skyfaces[i].firstedge = loadmodel->numsurfedges-24+i*4; - r_skyfaces[i].texinfo = &r_skytexinfo[i]; - r_skyfaces[i].texturemins[0] = -128; - r_skyfaces[i].texturemins[1] = -128; - r_skyfaces[i].extents[0] = 256; - r_skyfaces[i].extents[1] = 256; - } - - for (i=0 ; i<24 ; i++) - if (box_surfedges[i] > 0) - r_skysurfedges[i] = loadmodel->numedges-13 + box_surfedges[i]; - else - r_skysurfedges[i] = - (loadmodel->numedges-13 + -box_surfedges[i]); - - for(i=0 ; i<12 ; i++) - { - r_skyedges[i].v[0] = loadmodel->numvertexes-9+box_edges[i*2+0]; - r_skyedges[i].v[1] = loadmodel->numvertexes-9+box_edges[i*2+1]; - r_skyedges[i].cachededgeoffset = 0; - } -} - -/* -================ -R_EmitSkyBox -================ -*/ -static void -R_EmitSkyBox(entity_t *currententity, const model_t *currentmodel, qboolean insubmodel) -{ - int i, j; - int oldkey; - - if (insubmodel) - return; // submodels should never have skies - if (r_skyframe == r_framecount) - return; // already set this frame - - r_skyframe = r_framecount; - - // set the eight fake vertexes - for (i=0 ; i<8 ; i++) - for (j=0 ; j<3 ; j++) - r_skyverts[i].position[j] = r_origin[j] + box_verts[i][j]*128; - - // set the six fake planes - for (i=0 ; i<6 ; i++) - if (skybox_planes[i*2+1] > 0) - r_skyplanes[i].dist = r_origin[skybox_planes[i*2]]+128; - else - r_skyplanes[i].dist = r_origin[skybox_planes[i*2]]-128; - - // fix texture offseets - for (i=0 ; i<6 ; i++) - { - r_skytexinfo[i].vecs[0][3] = -DotProduct (r_origin, r_skytexinfo[i].vecs[0]); - r_skytexinfo[i].vecs[1][3] = -DotProduct (r_origin, r_skytexinfo[i].vecs[1]); - } - - // emit the six faces - oldkey = r_currentkey; - r_currentkey = 0x7ffffff0; - for (i=0 ; i<6 ; i++) - { - R_RenderFace(currententity, currentmodel, r_skyfaces + i, ALIAS_XY_CLIP_MASK, insubmodel); - } - r_currentkey = oldkey; // bsp sorting order -} - -/* -================ -R_EmitEdge -================ -*/ -static void -R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1, medge_t *r_pedge, qboolean r_nearzionly) -{ - edge_t *edge, *pcheck; - int u_check; - float u, u_step; - vec3_t local, transformed; - float *world; - int v, v2, ceilv0; - float scale, lzi0, u0, v0; - int side; - - if (r_lastvertvalid) - { - u0 = r_u1; - v0 = r_v1; - lzi0 = r_lzi1; - ceilv0 = r_ceilv1; - } - else - { - world = &pv0->position[0]; - - // transform and project - VectorSubtract (world, modelorg, local); - TransformVector (local, transformed); - - if (transformed[2] < NEAR_CLIP) - transformed[2] = NEAR_CLIP; - - lzi0 = 1.0 / transformed[2]; - - // FIXME: build x/yscale into transform? - scale = xscale * lzi0; - u0 = (xcenter + scale*transformed[0]); - if (u0 < r_refdef.fvrectx_adj) - u0 = r_refdef.fvrectx_adj; - if (u0 > r_refdef.fvrectright_adj) - u0 = r_refdef.fvrectright_adj; - - scale = yscale * lzi0; - v0 = (ycenter - scale*transformed[1]); - if (v0 < r_refdef.fvrecty_adj) - v0 = r_refdef.fvrecty_adj; - if (v0 > r_refdef.fvrectbottom_adj) - v0 = r_refdef.fvrectbottom_adj; - - ceilv0 = (int) ceil(v0); - } - - world = &pv1->position[0]; - - // transform and project - VectorSubtract (world, modelorg, local); - TransformVector (local, transformed); - - if (transformed[2] < NEAR_CLIP) - transformed[2] = NEAR_CLIP; - - r_lzi1 = 1.0 / transformed[2]; - - scale = xscale * r_lzi1; - r_u1 = (xcenter + scale*transformed[0]); - if (r_u1 < r_refdef.fvrectx_adj) - r_u1 = r_refdef.fvrectx_adj; - if (r_u1 > r_refdef.fvrectright_adj) - r_u1 = r_refdef.fvrectright_adj; - - scale = yscale * r_lzi1; - r_v1 = (ycenter - scale*transformed[1]); - if (r_v1 < r_refdef.fvrecty_adj) - r_v1 = r_refdef.fvrecty_adj; - if (r_v1 > r_refdef.fvrectbottom_adj) - r_v1 = r_refdef.fvrectbottom_adj; - - if (r_lzi1 > lzi0) - lzi0 = r_lzi1; - - if (lzi0 > r_nearzi) // for mipmap finding - r_nearzi = lzi0; - - // for right edges, all we want is the effect on 1/z - if (r_nearzionly) - return; - - r_emitted = 1; - - r_ceilv1 = (int) ceil(r_v1); - - - // create the edge - if (ceilv0 == r_ceilv1) - { - // we cache unclipped horizontal edges as fully clipped - if (cacheoffset != 0x7FFFFFFF) - { - cacheoffset = FULLY_CLIPPED_CACHED | - (r_framecount & FRAMECOUNT_MASK); - } - - return; // horizontal edge - } - - side = ceilv0 > r_ceilv1; - - edge = edge_p++; - - edge->owner = r_pedge; - - edge->nearzi = lzi0; - - if (side == 0) - { - // trailing edge (go from p1 to p2) - v = ceilv0; - v2 = r_ceilv1 - 1; - - edge->surfs[0] = surface_p - surfaces; - edge->surfs[1] = 0; - - u_step = ((r_u1 - u0) / (r_v1 - v0)); - u = u0 + ((float)v - v0) * u_step; - } - else - { - // leading edge (go from p2 to p1) - v2 = ceilv0 - 1; - v = r_ceilv1; - - edge->surfs[0] = 0; - edge->surfs[1] = surface_p - surfaces; - - u_step = ((u0 - r_u1) / (v0 - r_v1)); - u = r_u1 + ((float)v - r_v1) * u_step; - } - - edge->u_step = u_step*(1<u = u*(1<u < r_refdef.vrect_x_adj_shift20) - { - edge->u = r_refdef.vrect_x_adj_shift20; - } - else if (edge->u > r_refdef.vrectright_adj_shift20) - { - edge->u = r_refdef.vrectright_adj_shift20; - } - - // - // sort the edge in normally - // - u_check = edge->u; - if (edge->surfs[0]) - u_check++; // sort trailers after leaders - - if (!newedges[v] || newedges[v]->u >= u_check) - { - edge->next = newedges[v]; - newedges[v] = edge; - } - else - { - pcheck = newedges[v]; - while (pcheck->next && pcheck->next->u < u_check) - pcheck = pcheck->next; - edge->next = pcheck->next; - pcheck->next = edge; - } - - edge->nextremove = removeedges[v2]; - removeedges[v2] = edge; -} - -/* -================ -R_ClipEdge -================ -*/ -static void -R_ClipEdge (mvertex_t *pv0, mvertex_t *pv1, clipplane_t *clip, medge_t *r_pedge, - qboolean *r_leftclipped, qboolean *r_rightclipped, - qboolean r_nearzionly) -{ - if (clip) - { - do - { - float d0, d1, f; - mvertex_t clipvert; - - d0 = DotProduct (pv0->position, clip->normal) - clip->dist; - d1 = DotProduct (pv1->position, clip->normal) - clip->dist; - - if (d0 >= 0) - { - // point 0 is unclipped - if (d1 >= 0) - { - // both points are unclipped - continue; - } - - // only point 1 is clipped - // we don't cache clipped edges - cacheoffset = 0x7FFFFFFF; - - f = d0 / (d0 - d1); - clipvert.position[0] = pv0->position[0] + - f * (pv1->position[0] - pv0->position[0]); - clipvert.position[1] = pv0->position[1] + - f * (pv1->position[1] - pv0->position[1]); - clipvert.position[2] = pv0->position[2] + - f * (pv1->position[2] - pv0->position[2]); - - if (clip->leftedge) - { - *r_leftclipped = true; - r_leftexit = clipvert; - } - else if (clip->rightedge) - { - *r_rightclipped = true; - r_rightexit = clipvert; - } - - R_ClipEdge (pv0, &clipvert, clip->next, r_pedge, - r_leftclipped, r_rightclipped, - r_nearzionly); - return; - } - else - { - // point 0 is clipped - if (d1 < 0) - { - // both points are clipped - // we do cache fully clipped edges - if (!r_leftclipped) - cacheoffset = FULLY_CLIPPED_CACHED | - (r_framecount & FRAMECOUNT_MASK); - return; - } - - // only point 0 is clipped - r_lastvertvalid = false; - - // we don't cache partially clipped edges - cacheoffset = 0x7FFFFFFF; - - f = d0 / (d0 - d1); - clipvert.position[0] = pv0->position[0] + - f * (pv1->position[0] - pv0->position[0]); - clipvert.position[1] = pv0->position[1] + - f * (pv1->position[1] - pv0->position[1]); - clipvert.position[2] = pv0->position[2] + - f * (pv1->position[2] - pv0->position[2]); - - if (clip->leftedge) - { - *r_leftclipped = true; - r_leftenter = clipvert; - } - else if (clip->rightedge) - { - *r_rightclipped = true; - r_rightenter = clipvert; - } - - R_ClipEdge (&clipvert, pv1, clip->next, r_pedge, - r_leftclipped, r_rightclipped, - r_nearzionly); - return; - } - } while ((clip = clip->next) != NULL); - } - - // add the edge - R_EmitEdge (pv0, pv1, r_pedge, r_nearzionly); -} - -/* -================ -R_EmitCachedEdge -================ -*/ -static void -R_EmitCachedEdge (medge_t *r_pedge) -{ - edge_t *pedge_t; - - pedge_t = (edge_t *)((uintptr_t)r_edges + r_pedge->cachededgeoffset); - - if (!pedge_t->surfs[0]) - pedge_t->surfs[0] = surface_p - surfaces; - else - pedge_t->surfs[1] = surface_p - surfaces; - - if (pedge_t->nearzi > r_nearzi) // for mipmap finding - r_nearzi = pedge_t->nearzi; - - r_emitted = 1; -} - - -/* -================ -R_RenderFace -================ -*/ -void -R_RenderFace (entity_t *currententity, const model_t *currentmodel, msurface_t *fa, - int clipflags, qboolean insubmodel) -{ - int i; - unsigned mask; - cplane_t *pplane; - float distinv; - vec3_t p_normal; - medge_t *pedges, tedge; - clipplane_t *pclip; - qboolean r_leftclipped, r_rightclipped; - qboolean makeleftedge, makerightedge; - qboolean r_nearzionly; - - // translucent surfaces are not drawn by the edge renderer - if (fa->texinfo->flags & (SURF_TRANS33|SURF_TRANS66)) - { - fa->nextalphasurface = r_alpha_surfaces; - r_alpha_surfaces = fa; - return; - } - - // sky surfaces encountered in the world will cause the - // environment box surfaces to be emited - if ( fa->texinfo->flags & SURF_SKY ) - { - R_EmitSkyBox (currententity, currentmodel, insubmodel); - return; - } - - // skip out if no more surfs - if ((surface_p) >= surf_max) - { - r_outofsurfaces = true; - return; - } - - // ditto if not enough edges left - if ((edge_p + fa->numedges + 4) >= edge_max) - { - r_outofedges = true; - return; - } - - c_faceclip++; - - // set up clip planes - pclip = NULL; - - for (i=3, mask = 0x08 ; i>=0 ; i--, mask >>= 1) - { - if (clipflags & mask) - { - view_clipplanes[i].next = pclip; - pclip = &view_clipplanes[i]; - } - } - - // push the edges through - r_emitted = 0; - r_nearzi = 0; - r_nearzionly = false; - makeleftedge = makerightedge = false; - pedges = currentmodel->edges; - r_lastvertvalid = false; - - for (i=0 ; inumedges ; i++) - { - int lindex; - - lindex = currentmodel->surfedges[fa->firstedge + i]; - - if (lindex > 0) - { - medge_t *r_pedge = &pedges[lindex]; - - // if the edge is cached, we can just reuse the edge - if (!insubmodel) - { - if (r_pedge->cachededgeoffset & FULLY_CLIPPED_CACHED) - { - if ((r_pedge->cachededgeoffset & FRAMECOUNT_MASK) == - r_framecount) - { - r_lastvertvalid = false; - continue; - } - } - else - { - if ((((uintptr_t)edge_p - (uintptr_t)r_edges) > - r_pedge->cachededgeoffset) && - (((edge_t *)((uintptr_t)r_edges + - r_pedge->cachededgeoffset))->owner == r_pedge)) - { - R_EmitCachedEdge (r_pedge); - r_lastvertvalid = false; - continue; - } - } - } - - // assume it's cacheable - cacheoffset = (byte *)edge_p - (byte *)r_edges; - r_leftclipped = r_rightclipped = false; - R_ClipEdge (&r_pcurrentvertbase[r_pedge->v[0]], - &r_pcurrentvertbase[r_pedge->v[1]], - pclip, r_pedge, - &r_leftclipped, &r_rightclipped, - r_nearzionly); - r_pedge->cachededgeoffset = cacheoffset; - - if (r_leftclipped) - makeleftedge = true; - if (r_rightclipped) - makerightedge = true; - r_lastvertvalid = true; - } - else - { - medge_t *r_pedge; - - lindex = -lindex; - r_pedge = &pedges[lindex]; - // if the edge is cached, we can just reuse the edge - if (!insubmodel) - { - if (r_pedge->cachededgeoffset & FULLY_CLIPPED_CACHED) - { - if ((r_pedge->cachededgeoffset & FRAMECOUNT_MASK) == - r_framecount) - { - r_lastvertvalid = false; - continue; - } - } - else - { - // it's cached if the cached edge is valid and is owned - // by this medge_t - if ((((uintptr_t)edge_p - (uintptr_t)r_edges) > - r_pedge->cachededgeoffset) && - (((edge_t *)((uintptr_t)r_edges + - r_pedge->cachededgeoffset))->owner == r_pedge)) - { - R_EmitCachedEdge (r_pedge); - r_lastvertvalid = false; - continue; - } - } - } - - // assume it's cacheable - cacheoffset = (byte *)edge_p - (byte *)r_edges; - r_leftclipped = r_rightclipped = false; - R_ClipEdge (&r_pcurrentvertbase[r_pedge->v[1]], - &r_pcurrentvertbase[r_pedge->v[0]], - pclip, r_pedge, - &r_leftclipped, &r_rightclipped, - r_nearzionly); - r_pedge->cachededgeoffset = cacheoffset; - - if (r_leftclipped) - makeleftedge = true; - if (r_rightclipped) - makerightedge = true; - r_lastvertvalid = true; - } - } - - // if there was a clip off the left edge, add that edge too - // FIXME: faster to do in screen space? - // FIXME: share clipped edges? - if (makeleftedge) - { - r_lastvertvalid = false; - R_ClipEdge (&r_leftexit, &r_leftenter, pclip->next, &tedge, - &r_leftclipped, &r_rightclipped, r_nearzionly); - } - - // if there was a clip off the right edge, get the right r_nearzi - if (makerightedge) - { - r_lastvertvalid = false; - r_nearzionly = true; - R_ClipEdge (&r_rightexit, &r_rightenter, view_clipplanes[1].next, &tedge, - &r_leftclipped, &r_rightclipped, r_nearzionly); - } - - // if no edges made it out, return without posting the surface - if (!r_emitted) - return; - - r_polycount++; - - surface_p->msurf = fa; - surface_p->nearzi = r_nearzi; - surface_p->flags = fa->flags; - surface_p->insubmodel = insubmodel; - surface_p->spanstate = 0; - surface_p->entity = currententity; - surface_p->key = r_currentkey++; - surface_p->spans = NULL; - - pplane = fa->plane; - // FIXME: cache this? - TransformVector (pplane->normal, p_normal); - // FIXME: cache this? - distinv = 1.0 / (pplane->dist - DotProduct (modelorg, pplane->normal)); - - surface_p->d_zistepu = p_normal[0] * xscaleinv * distinv; - surface_p->d_zistepv = -p_normal[1] * yscaleinv * distinv; - surface_p->d_ziorigin = p_normal[2] * distinv - - xcenter * surface_p->d_zistepu - - ycenter * surface_p->d_zistepv; - - surface_p++; -} - - -/* -================ -R_RenderBmodelFace -================ -*/ -void -R_RenderBmodelFace(entity_t *currententity, bedge_t *pedges, msurface_t *psurf, int r_currentbkey) -{ - int i; - unsigned mask; - cplane_t *pplane; - float distinv; - vec3_t p_normal; - medge_t tedge; - clipplane_t *pclip; - qboolean r_leftclipped, r_rightclipped; - qboolean makeleftedge, makerightedge; - qboolean r_nearzionly; - - if (psurf->texinfo->flags & (SURF_TRANS33|SURF_TRANS66)) - { - psurf->nextalphasurface = r_alpha_surfaces; - r_alpha_surfaces = psurf; - return; - } - - // skip out if no more surfs - if (surface_p >= surf_max) - { - r_outofsurfaces = true; - return; - } - - // ditto if not enough edges left - if ((edge_p + psurf->numedges + 4) >= edge_max) - { - r_outofedges = true; - return; - } - - c_faceclip++; - - // set up clip planes - pclip = NULL; - - for (i=3, mask = 0x08 ; i>=0 ; i--, mask >>= 1) - { - if (r_clipflags & mask) - { - view_clipplanes[i].next = pclip; - pclip = &view_clipplanes[i]; - } - } - - // push the edges through - r_emitted = 0; - r_nearzi = 0; - r_nearzionly = false; - makeleftedge = makerightedge = false; - // FIXME: keep clipped bmodel edges in clockwise order so last vertex caching - // can be used? - r_lastvertvalid = false; - - for ( ; pedges ; pedges = pedges->pnext) - { - r_leftclipped = r_rightclipped = false; - R_ClipEdge (pedges->v[0], pedges->v[1], pclip, &tedge, - &r_leftclipped, &r_rightclipped, r_nearzionly); - - if (r_leftclipped) - makeleftedge = true; - if (r_rightclipped) - makerightedge = true; - } - - // if there was a clip off the left edge, add that edge too - // FIXME: faster to do in screen space? - // FIXME: share clipped edges? - if (makeleftedge) - { - R_ClipEdge (&r_leftexit, &r_leftenter, pclip->next, &tedge, - &r_leftclipped, &r_rightclipped, r_nearzionly); - } - - // if there was a clip off the right edge, get the right r_nearzi - if (makerightedge) - { - r_nearzionly = true; - R_ClipEdge (&r_rightexit, &r_rightenter, view_clipplanes[1].next, &tedge, - &r_leftclipped, &r_rightclipped, r_nearzionly); - } - - // if no edges made it out, return without posting the surface - if (!r_emitted) - return; - - r_polycount++; - - surface_p->msurf = psurf; - surface_p->nearzi = r_nearzi; - surface_p->flags = psurf->flags; - surface_p->insubmodel = true; - surface_p->spanstate = 0; - surface_p->entity = currententity; - surface_p->key = r_currentbkey; - surface_p->spans = NULL; - - pplane = psurf->plane; - // FIXME: cache this? - TransformVector (pplane->normal, p_normal); - // FIXME: cache this? - distinv = 1.0 / (pplane->dist - DotProduct (modelorg, pplane->normal)); - - surface_p->d_zistepu = p_normal[0] * xscaleinv * distinv; - surface_p->d_zistepv = -p_normal[1] * yscaleinv * distinv; - surface_p->d_ziorigin = p_normal[2] * distinv - - xcenter * surface_p->d_zistepu - - ycenter * surface_p->d_zistepv; - - surface_p++; -} diff --git a/src/client/refresh/soft/sw_scan.c b/src/client/refresh/soft/sw_scan.c deleted file mode 100644 index 2283ce398..000000000 --- a/src/client/refresh/soft/sw_scan.c +++ /dev/null @@ -1,809 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// d_scan.c -// -// Portable C scan-level rasterization code, all pixel depths. - -#include "header/local.h" - - -#define SPANSTEP_SHIFT 4 - -byte **warp_rowptr; -int *warp_column; - -/* -============= -D_WarpScreen - -this performs a slight compression of the screen at the same time as -the sine warp, to keep the edges from wrapping -============= -*/ -void -D_WarpScreen (void) -{ - int w, h; - int u,v; - pixel_t *dest; - int *turb; - byte **row; - - static int cached_width, cached_height; - - // - // these are constant over resolutions, and can be saved - // - w = r_newrefdef.width; - h = r_newrefdef.height; - if (w != cached_width || h != cached_height) - { - cached_width = w; - cached_height = h; - for (v=0 ; v> SHIFT16XYZ == 0 && count < vid_buffer_width) - { - count <<= 1; - } - - return count; -} - -/* -============= -D_DrawTurbulentSpan -============= -*/ -static pixel_t * -D_DrawTurbulentSpan (pixel_t *pdest, const pixel_t *pbase, - int s, int t, - int sstep, int tstep, - int spancount, - const int *turb) -{ - do - { - int sturb, tturb; - sturb = ((s + turb[(t>>SHIFT16XYZ)&(CYCLE-1)])>>16)&63; - tturb = ((t + turb[(s>>SHIFT16XYZ)&(CYCLE-1)])>>16)&63; - *pdest++ = *(pbase + (tturb<<6) + sturb); - s += sstep; - t += tstep; - } while (--spancount > 0); - return pdest; -} - -/* -============= -TurbulentPow2 -============= -*/ -void -TurbulentPow2 (espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv) -{ - float spancountminus1; - float sdivzpow2stepu, tdivzpow2stepu, zipow2stepu; - pixel_t *r_turb_pbase; - int *r_turb_turb; - int spanstep_shift, spanstep_value; - - spanstep_shift = D_DrawSpanGetStep(d_zistepu, d_zistepv); - spanstep_value = (1 << spanstep_shift); - - r_turb_turb = sintable + ((int)(r_newrefdef.time*SPEED)&(CYCLE-1)); - - r_turb_pbase = (unsigned char *)cacheblock; - - sdivzpow2stepu = d_sdivzstepu * spanstep_value; - tdivzpow2stepu = d_tdivzstepu * spanstep_value; - zipow2stepu = d_zistepu * spanstep_value; - - do - { - int count, r_turb_s, r_turb_t; - float sdivz, tdivz, zi, z, du, dv; - pixel_t *r_turb_pdest; - - r_turb_pdest = d_viewbuffer + (vid_buffer_width * pspan->v) + pspan->u; - - count = pspan->count; - - // calculate the initial s/z, t/z, 1/z, s, and t and clamp - du = (float)pspan->u; - dv = (float)pspan->v; - - sdivz = d_sdivzorigin + dv*d_sdivzstepv + du*d_sdivzstepu; - tdivz = d_tdivzorigin + dv*d_tdivzstepv + du*d_tdivzstepu; - zi = d_ziorigin + dv*d_zistepv + du*d_zistepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - r_turb_s = (int)(sdivz * z) + sadjust; - if (r_turb_s > bbextents) - r_turb_s = bbextents; - else if (r_turb_s < 0) - r_turb_s = 0; - - r_turb_t = (int)(tdivz * z) + tadjust; - if (r_turb_t > bbextentt) - r_turb_t = bbextentt; - else if (r_turb_t < 0) - r_turb_t = 0; - - do - { - int snext, tnext; - int r_turb_sstep, r_turb_tstep; - int r_turb_spancount; - - r_turb_sstep = 0; // keep compiler happy - r_turb_tstep = 0; // ditto - - // calculate s and t at the far end of the span - if (count >= spanstep_value) - r_turb_spancount = spanstep_value; - else - r_turb_spancount = count; - - count -= r_turb_spancount; - - if (count) - { - // calculate s/z, t/z, zi->fixed s and t at far end of span, - // calculate s and t steps across span by shifting - sdivz += sdivzpow2stepu; - tdivz += tdivzpow2stepu; - zi += zipow2stepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - snext = (int)(sdivz * z) + sadjust; - if (snext > bbextents) - snext = bbextents; - else if (snext < spanstep_value) - // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - snext = spanstep_value; - - tnext = (int)(tdivz * z) + tadjust; - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < spanstep_value) - // guard against round-off error on <0 steps - tnext = spanstep_value; - - r_turb_sstep = (snext - r_turb_s) >> spanstep_shift; - r_turb_tstep = (tnext - r_turb_t) >> spanstep_shift; - } - else - { - // calculate s/z, t/z, zi->fixed s and t at last pixel in span (so - // can't step off polygon), clamp, calculate s and t steps across - // span by division, biasing steps low so we don't run off the - // texture - spancountminus1 = (float)(r_turb_spancount - 1); - sdivz += d_sdivzstepu * spancountminus1; - tdivz += d_tdivzstepu * spancountminus1; - zi += d_zistepu * spancountminus1; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - snext = (int)(sdivz * z) + sadjust; - if (snext > bbextents) - snext = bbextents; - else if (snext < spanstep_value) - // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - snext = spanstep_value; - - tnext = (int)(tdivz * z) + tadjust; - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < spanstep_value) - // guard against round-off error on <0 steps - tnext = spanstep_value; - - if (r_turb_spancount > 1) - { - r_turb_sstep = (snext - r_turb_s) / (r_turb_spancount - 1); - r_turb_tstep = (tnext - r_turb_t) / (r_turb_spancount - 1); - } - } - - r_turb_s = r_turb_s & ((CYCLE< 0); - - } while ((pspan = pspan->pnext) != NULL); -} - -//==================== -/* -============= -NonTurbulentPow2 - this is for drawing scrolling textures. they're warping water textures - but the turbulence is automatically 0. -============= -*/ -void -NonTurbulentPow2 (espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv) -{ - float spancountminus1; - float sdivzpow2stepu, tdivzpow2stepu, zipow2stepu; - pixel_t *r_turb_pbase; - int *r_turb_turb; - int spanstep_shift, spanstep_value; - - spanstep_shift = D_DrawSpanGetStep(d_zistepu, d_zistepv); - spanstep_value = (1 << spanstep_shift); - - r_turb_turb = blanktable; - - r_turb_pbase = (unsigned char *)cacheblock; - - sdivzpow2stepu = d_sdivzstepu * spanstep_value; - tdivzpow2stepu = d_tdivzstepu * spanstep_value; - zipow2stepu = d_zistepu * spanstep_value; - - do - { - int count, r_turb_s, r_turb_t; - float sdivz, tdivz, zi, z, dv, du; - pixel_t *r_turb_pdest; - - r_turb_pdest = d_viewbuffer + (vid_buffer_width * pspan->v) + pspan->u; - - count = pspan->count; - - // calculate the initial s/z, t/z, 1/z, s, and t and clamp - du = (float)pspan->u; - dv = (float)pspan->v; - - sdivz = d_sdivzorigin + dv*d_sdivzstepv + du*d_sdivzstepu; - tdivz = d_tdivzorigin + dv*d_tdivzstepv + du*d_tdivzstepu; - zi = d_ziorigin + dv*d_zistepv + du*d_zistepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - r_turb_s = (int)(sdivz * z) + sadjust; - if (r_turb_s > bbextents) - r_turb_s = bbextents; - else if (r_turb_s < 0) - r_turb_s = 0; - - r_turb_t = (int)(tdivz * z) + tadjust; - if (r_turb_t > bbextentt) - r_turb_t = bbextentt; - else if (r_turb_t < 0) - r_turb_t = 0; - - do - { - int snext, tnext; - int r_turb_sstep, r_turb_tstep; - int r_turb_spancount; - - r_turb_sstep = 0; // keep compiler happy - r_turb_tstep = 0; // ditto - - // calculate s and t at the far end of the span - if (count >= spanstep_value) - r_turb_spancount = spanstep_value; - else - r_turb_spancount = count; - - count -= r_turb_spancount; - - if (count) - { - // calculate s/z, t/z, zi->fixed s and t at far end of span, - // calculate s and t steps across span by shifting - sdivz += sdivzpow2stepu; - tdivz += tdivzpow2stepu; - zi += zipow2stepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - snext = (int)(sdivz * z) + sadjust; - if (snext > bbextents) - snext = bbextents; - else if (snext < spanstep_value) - // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - snext = spanstep_value; - - tnext = (int)(tdivz * z) + tadjust; - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < spanstep_value) - // guard against round-off error on <0 steps - tnext = spanstep_value; - - r_turb_sstep = (snext - r_turb_s) >> spanstep_shift; - r_turb_tstep = (tnext - r_turb_t) >> spanstep_shift; - } - else - { - // calculate s/z, t/z, zi->fixed s and t at last pixel in span (so - // can't step off polygon), clamp, calculate s and t steps across - // span by division, biasing steps low so we don't run off the - // texture - spancountminus1 = (float)(r_turb_spancount - 1); - sdivz += d_sdivzstepu * spancountminus1; - tdivz += d_tdivzstepu * spancountminus1; - zi += d_zistepu * spancountminus1; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - snext = (int)(sdivz * z) + sadjust; - if (snext > bbextents) - snext = bbextents; - else if (snext < spanstep_value) - // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - snext = spanstep_value; - - tnext = (int)(tdivz * z) + tadjust; - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < spanstep_value) - // guard against round-off error on <0 steps - tnext = spanstep_value; - - if (r_turb_spancount > 1) - { - r_turb_sstep = (snext - r_turb_s) / (r_turb_spancount - 1); - r_turb_tstep = (tnext - r_turb_t) / (r_turb_spancount - 1); - } - } - - r_turb_s = r_turb_s & ((CYCLE< 0); - - } while ((pspan = pspan->pnext) != NULL); -} - -//==================== - -// Enable custom filtering -extern cvar_t *sw_texture_filtering; -static const int filtering_kernel[2][2][2] = { - { - {0x1 << (SHIFT16XYZ-2), 0x0}, - {0xC << (SHIFT16XYZ-4), 0x1 << (SHIFT16XYZ-1)} - }, - { - {0x1 << (SHIFT16XYZ-1), 0xC << (SHIFT16XYZ-4)}, - {0x0, 0x1 << (SHIFT16XYZ-2)} - } -}; - -/* -============= -D_DrawSpan -============= -*/ -static pixel_t * -D_DrawSpan(pixel_t *pdest, const pixel_t *pbase, int s, int t, int sstep, int tstep, int spancount) -{ - const pixel_t *tdest_max = pdest + spancount; - - // horisontal span (span in same row) - if (((t + tstep * spancount) >> SHIFT16XYZ) == (t >> SHIFT16XYZ)) - { - // position in texture - const pixel_t *tbase = pbase + (t >> SHIFT16XYZ) * cachewidth; - - do - { - *pdest++ = *(tbase + (s >> SHIFT16XYZ)); - s += sstep; - } while (pdest < tdest_max); - } - // vertical span (span in same column) - else if (((s + sstep * spancount) >> SHIFT16XYZ) == (s >> SHIFT16XYZ)) - { - // position in texture - const pixel_t *tbase = pbase + (s >> SHIFT16XYZ); - - do - { - *pdest++ = *(tbase + (t >> SHIFT16XYZ) * cachewidth); - t += tstep; - } while (pdest < tdest_max); - } - // diagonal span - else - { - do - { - *pdest++ = *(pbase + (s >> SHIFT16XYZ) + (t >> SHIFT16XYZ) * cachewidth); - s += sstep; - t += tstep; - } while (pdest < tdest_max); - } - - return pdest; -} - -/* -============= -D_DrawSpanFiltered -============= -*/ -static pixel_t * -D_DrawSpanFiltered(pixel_t *pdest, pixel_t *pbase, int s, int t, int sstep, int tstep, int spancount, - const espan_t *pspan) -{ - do - { - int idiths = s; - int iditht = t; - - int X = (pspan->u + spancount) & 1; - int Y = (pspan->v)&1; - - //Using the kernel - idiths += filtering_kernel[X][Y][0]; - iditht += filtering_kernel[X][Y][1]; - - idiths = idiths >> SHIFT16XYZ; - idiths = idiths ? idiths -1 : idiths; - - - iditht = iditht >> SHIFT16XYZ; - iditht = iditht ? iditht -1 : iditht; - - - *pdest++ = *(pbase + idiths + iditht * cachewidth); - s += sstep; - t += tstep; - } while (--spancount > 0); - - return pdest; -} - -/* -============= -D_DrawSpansPow2 -============= -*/ -void -D_DrawSpansPow2 (espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv) -{ - int spancount; - pixel_t *pbase; - int snext, tnext; - float spancountminus1; - float sdivzpow2stepu, tdivzpow2stepu, zipow2stepu; - int texture_filtering; - int spanstep_shift, spanstep_value; - - spanstep_shift = D_DrawSpanGetStep(d_zistepu, d_zistepv); - spanstep_value = (1 << spanstep_shift); - - pbase = (unsigned char *)cacheblock; - - texture_filtering = (int)sw_texture_filtering->value; - sdivzpow2stepu = d_sdivzstepu * spanstep_value; - tdivzpow2stepu = d_tdivzstepu * spanstep_value; - zipow2stepu = d_zistepu * spanstep_value; - - do - { - pixel_t *pdest; - int count, s, t; - float sdivz, tdivz, zi, z, du, dv; - - pdest = d_viewbuffer + (vid_buffer_width * pspan->v) + pspan->u; - - count = pspan->count; - - // calculate the initial s/z, t/z, 1/z, s, and t and clamp - du = (float)pspan->u; - dv = (float)pspan->v; - - sdivz = d_sdivzorigin + dv*d_sdivzstepv + du*d_sdivzstepu; - tdivz = d_tdivzorigin + dv*d_tdivzstepv + du*d_tdivzstepu; - zi = d_ziorigin + dv*d_zistepv + du*d_zistepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - s = (int)(sdivz * z) + sadjust; - if (s > bbextents) - s = bbextents; - else if (s < 0) - s = 0; - - t = (int)(tdivz * z) + tadjust; - if (t > bbextentt) - t = bbextentt; - else if (t < 0) - t = 0; - - do - { - int sstep, tstep; - - sstep = 0; // keep compiler happy - tstep = 0; // ditto - - // calculate s and t at the far end of the span - if (count >= spanstep_value) - spancount = spanstep_value; - else - spancount = count; - - count -= spancount; - - if (count) - { - // calculate s/z, t/z, zi->fixed s and t at far end of span, - // calculate s and t steps across span by shifting - sdivz += sdivzpow2stepu; - tdivz += tdivzpow2stepu; - zi += zipow2stepu; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - - snext = (int)(sdivz * z) + sadjust; - if (snext > bbextents) - snext = bbextents; - else if (snext < spanstep_value) - // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - snext = spanstep_value; - - tnext = (int)(tdivz * z) + tadjust; - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < spanstep_value) - // guard against round-off error on <0 steps - tnext = spanstep_value; - - sstep = (snext - s) >> spanstep_shift; - tstep = (tnext - t) >> spanstep_shift; - } - else - { - // calculate s/z, t/z, zi->fixed s and t at last pixel in span (so - // can't step off polygon), clamp, calculate s and t steps across - // span by division, biasing steps low so we don't run off the - // texture - spancountminus1 = (float)(spancount - 1); - sdivz += d_sdivzstepu * spancountminus1; - tdivz += d_tdivzstepu * spancountminus1; - zi += d_zistepu * spancountminus1; - z = (float)SHIFT16XYZ_MULT / zi; // prescale to 16.16 fixed-point - snext = (int)(sdivz * z) + sadjust; - if (snext > bbextents) - snext = bbextents; - else if (snext < spanstep_value) - // prevent round-off error on <0 steps from - // from causing overstepping & running off the - // edge of the texture - snext = spanstep_value; - - tnext = (int)(tdivz * z) + tadjust; - if (tnext > bbextentt) - tnext = bbextentt; - else if (tnext < spanstep_value) - // guard against round-off error on <0 steps - tnext = spanstep_value; - - if (spancount > 1) - { - sstep = (snext - s) / (spancount - 1); - tstep = (tnext - t) / (spancount - 1); - } - } - - // Drawing phrase - if ((texture_filtering == 0) || fastmoving) - { - pdest = D_DrawSpan(pdest, pbase, s, t, sstep, tstep, - spancount); - } - else - { - pdest = D_DrawSpanFiltered(pdest, pbase, s, t, sstep, tstep, - spancount, pspan); - } - s = snext; - t = tnext; - } while (count > 0); - - } while ((pspan = pspan->pnext) != NULL); -} - -/* -============= -D_DrawZSpans -============= -*/ -void -D_DrawZSpans (espan_t *pspan, float d_ziorigin, float d_zistepu, float d_zistepv) -{ - zvalue_t izistep; - int safe_step; - - // FIXME: check for clamping/range problems - // we count on FP exceptions being turned off to avoid range problems - izistep = (int)(d_zistepu * 0x8000 * (float)SHIFT16XYZ_MULT); - safe_step = D_DrawZSpanGetStepValue(izistep); - - do - { - int count; - zvalue_t izi; - zvalue_t *pdest; - float zi; - float du, dv; - - if (!VID_CheckDamageZBuffer(pspan->u, pspan->v, pspan->count, 0)) - { - continue; - } - - // solid map walls damage - VID_DamageZBuffer(pspan->u, pspan->v); - VID_DamageZBuffer(pspan->u + pspan->count, pspan->v); - - pdest = d_pzbuffer + (vid_buffer_width * pspan->v) + pspan->u; - - count = pspan->count; - - // calculate the initial 1/z - du = (float)pspan->u; - dv = (float)pspan->v; - - zi = d_ziorigin + dv*d_zistepv + du*d_zistepu; - // we count on FP exceptions being turned off to avoid range problems - izi = (int)(zi * 0x8000 * (float)SHIFT16XYZ_MULT); - - if (safe_step > 1) - { - const zvalue_t *tdest_max = pdest + count; - do - { - int step; - zvalue_t izi_shifted = izi >> SHIFT16XYZ; - - for(step = 0; (step < safe_step) && (pdest < tdest_max); step++) - { - *pdest++ = izi_shifted; - } - izi += (izistep * safe_step); - } while (pdest < tdest_max); - } - else - { - while (count > 0) - { - *pdest++ = izi >> SHIFT16XYZ; - izi += izistep; - count--; - } - } - } while ((pspan = pspan->pnext) != NULL); -} diff --git a/src/client/refresh/soft/sw_sprite.c b/src/client/refresh/soft/sw_sprite.c deleted file mode 100644 index 23d77f8d1..000000000 --- a/src/client/refresh/soft/sw_sprite.c +++ /dev/null @@ -1,113 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_sprite.c -#include "header/local.h" - -extern polydesc_t r_polydesc; - -extern vec5_t r_clip_verts[2][MAXWORKINGVERTS+2]; - -/* -** R_DrawSprite -** -** Draw currententity / currentmodel as a single texture -** mapped polygon -*/ -void -R_DrawSprite(entity_t *currententity, const model_t *currentmodel) -{ - vec5_t *pverts; - vec3_t left, up, right, down; - dsprite_t *s_psprite; - dsprframe_t *s_psprframe; - image_t *skin; - - s_psprite = (dsprite_t *)currentmodel->extradata; - currententity->frame %= s_psprite->numframes; - - s_psprframe = &s_psprite->frames[currententity->frame]; - - skin = currentmodel->skins[currententity->frame]; - if (!skin) - { - skin = r_notexture_mip; - } - - r_polydesc.pixels = skin->pixels[0]; - r_polydesc.pixel_width = Q_min(s_psprframe->width, skin->width); - r_polydesc.pixel_height = Q_min(s_psprframe->height, skin->height); - r_polydesc.dist = 0; - - // generate the sprite's axes, completely parallel to the viewplane. - VectorCopy (vup, r_polydesc.vup); - VectorCopy (vright, r_polydesc.vright); - VectorCopy (vpn, r_polydesc.vpn); - - // build the sprite poster in worldspace - VectorScale (r_polydesc.vright, - s_psprframe->width - s_psprframe->origin_x, right); - VectorScale (r_polydesc.vup, - s_psprframe->height - s_psprframe->origin_y, up); - VectorScale (r_polydesc.vright, - -s_psprframe->origin_x, left); - VectorScale (r_polydesc.vup, - -s_psprframe->origin_y, down); - - // invert UP vector for sprites - VectorInverse( r_polydesc.vup ); - - pverts = r_clip_verts[0]; - - pverts[0][0] = r_entorigin[0] + up[0] + left[0]; - pverts[0][1] = r_entorigin[1] + up[1] + left[1]; - pverts[0][2] = r_entorigin[2] + up[2] + left[2]; - pverts[0][3] = 0; - pverts[0][4] = 0; - - pverts[1][0] = r_entorigin[0] + up[0] + right[0]; - pverts[1][1] = r_entorigin[1] + up[1] + right[1]; - pverts[1][2] = r_entorigin[2] + up[2] + right[2]; - pverts[1][3] = s_psprframe->width; - pverts[1][4] = 0; - - pverts[2][0] = r_entorigin[0] + down[0] + right[0]; - pverts[2][1] = r_entorigin[1] + down[1] + right[1]; - pverts[2][2] = r_entorigin[2] + down[2] + right[2]; - pverts[2][3] = s_psprframe->width; - pverts[2][4] = s_psprframe->height; - - pverts[3][0] = r_entorigin[0] + down[0] + left[0]; - pverts[3][1] = r_entorigin[1] + down[1] + left[1]; - pverts[3][2] = r_entorigin[2] + down[2] + left[2]; - pverts[3][3] = 0; - pverts[3][4] = s_psprframe->height; - - r_polydesc.nump = 4; - r_polydesc.s_offset = ( r_polydesc.pixel_width >> 1); - r_polydesc.t_offset = ( r_polydesc.pixel_height >> 1); - VectorCopy( modelorg, r_polydesc.viewer_position ); - - r_polydesc.stipple_parity = 1; - if ( currententity->flags & RF_TRANSLUCENT ) - R_ClipAndDrawPoly ( currententity->alpha, false, true ); - else - R_ClipAndDrawPoly ( 1.0F, false, true ); - r_polydesc.stipple_parity = 0; -} diff --git a/src/client/refresh/soft/sw_surf.c b/src/client/refresh/soft/sw_surf.c deleted file mode 100644 index b7c498ec3..000000000 --- a/src/client/refresh/soft/sw_surf.c +++ /dev/null @@ -1,491 +0,0 @@ -/* -Copyright (C) 1997-2001 Id Software, Inc. - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// sw_surf.c: surface-related refresh code - -#include "header/local.h" - -static int sourcetstep; -static void *prowdestbase; -static unsigned char *pbasesource; -static int r_stepback; -static int r_lightwidth; -static int r_numvblocks; -static unsigned char *r_source, *r_sourcemax; -static unsigned *r_lightptr; - -void R_BuildLightMap (drawsurf_t *drawsurf); - -static int sc_size; -static surfcache_t *sc_rover; -surfcache_t *sc_base; - -/* - * Color light apply is not required - */ -static int -R_GreyscaledLight(const light3_t light) -{ - light3_t light_masked; - - light_masked[0] = light[0] & LIGHTMASK; - light_masked[1] = light[1] & LIGHTMASK; - light_masked[2] = light[2] & LIGHTMASK; - - if (light_masked[0] == light_masked[1] && light_masked[0] == light_masked[2]) - return light_masked[0]; - - return LIGHTMASK; -} - -static void -R_DrawSurfaceBlock_Light (pixel_t *prowdest, pixel_t *psource, size_t size, - int level, light3_t lightleft, light3_t lightright) -{ - int light_masked_right, light_masked_left; - - light_masked_right = R_GreyscaledLight(lightright); - if (light_masked_right != LIGHTMASK) - { - light_masked_left = R_GreyscaledLight(lightleft); - } - - // Full same light from both side - if (light_masked_right != LIGHTMASK && light_masked_left == light_masked_right) - { - pixel_t *dest, *dest_max, *src; - - dest = prowdest; - dest_max = prowdest + size; - src = psource; - - while (dest < dest_max) - { - *dest = vid_colormap[*src + light_masked_right]; - - dest++; - src++; - } - - return; - } - - // same color light shades - { - int b, j; - light3_t lightstep, light; - - for(j=0; j<3; j++) - { - int lighttemp; - - lighttemp = lightleft[j] - lightright[j]; - lightstep[j] = lighttemp >> level; - } - - memcpy(light, lightright, sizeof(light3_t)); - - for (b=(size-1); b>=0; b--) - { - pixel_t pix; - int j; - - pix = psource[b]; - prowdest[b] = R_ApplyLight(pix, light); - - for(j=0; j<3; j++) - light[j] += lightstep[j]; - } - } -} - - -/* -================ -R_DrawSurfaceBlock8_anymip -================ -*/ -static void -R_DrawSurfaceBlock8_anymip (int level, int surfrowbytes) -{ - int v, i, size; - pixel_t *psource, *prowdest; - - size = 1 << level; - psource = pbasesource; - prowdest = prowdestbase; - - for (v=0 ; v> level; - lightrightstep[i] = (r_lightptr[i + 3] - lightright[i]) >> level; - } - - for (i=0 ; i= r_sourcemax) - psource -= r_stepback; - } -} - - -/* -=============== -R_DrawSurface -=============== -*/ -static void -R_DrawSurface (drawsurf_t *drawsurf) -{ - unsigned char *basetptr; - int smax, tmax, twidth; - int u; - int soffset, basetoffset, texwidth; - int blocksize; - unsigned char *pcolumndest; - image_t *mt; - int blockdivshift; - int r_numhblocks; - - mt = drawsurf->image; - - r_source = mt->pixels[drawsurf->surfmip]; - - // the fractional light values should range from 0 to (VID_GRADES - 1) << 16 - // from a source range of 0 - 255 - - texwidth = mt->width >> drawsurf->surfmip; - - blocksize = 16 >> drawsurf->surfmip; - blockdivshift = NUM_MIPS - drawsurf->surfmip; - - r_lightwidth = (drawsurf->surf->extents[0]>>4)+1; - - r_numhblocks = drawsurf->surfwidth >> blockdivshift; - r_numvblocks = drawsurf->surfheight >> blockdivshift; - - //============================== - - smax = mt->width >> drawsurf->surfmip; - twidth = texwidth; - tmax = mt->height >> drawsurf->surfmip; - sourcetstep = texwidth; - r_stepback = tmax * twidth; - - r_sourcemax = r_source + (tmax * smax); - - soffset = drawsurf->surf->texturemins[0]; - basetoffset = drawsurf->surf->texturemins[1]; - - // << 16 components are to guarantee positive values for % - soffset = ((soffset >> drawsurf->surfmip) + (smax << SHIFT16XYZ)) % smax; - basetptr = &r_source[((((basetoffset >> drawsurf->surfmip) - + (tmax << SHIFT16XYZ)) % tmax) * twidth)]; - - pcolumndest = drawsurf->surfdat; - - for (u=0 ; u= blocklight_max) - { - r_outoflights = true; - continue; - } - - prowdestbase = pcolumndest; - - pbasesource = basetptr + soffset; - - R_DrawSurfaceBlock8_anymip(NUM_MIPS - drawsurf->surfmip, drawsurf->rowbytes); - - soffset = soffset + blocksize; - if (soffset >= smax) - soffset = 0; - - pcolumndest += blocksize; - } -} - - -//============================================================================= - -/* -================ -R_InitCaches - -================ -*/ -void -R_InitCaches (void) -{ - int size; - - // calculate size to allocate - int pix; - // surface cache size at 320X240 - size = 1024*768; - - pix = vid_buffer_width*vid_buffer_height; - if (pix > 64000) - size += (pix-64000)*3; - - if (r_farsee->value > 0) - size *= 2; - - if (sw_surfcacheoverride->value > size) - { - size = sw_surfcacheoverride->value; - } - - // round up to page size - size = (size + 8191) & ~8191; - - Com_DPrintf("%ik surface cache.\n", size / 1024); - - sc_size = size; - sc_base = (surfcache_t *)malloc(size); - if (!sc_base) - { - Com_Error(ERR_FATAL, "%s: Can't allocate cache.", __func__); - // code never returns after ERR_FATAL - return; - } - sc_rover = sc_base; - - sc_base->next = NULL; - sc_base->owner = NULL; - sc_base->size = sc_size; -} - - -/* -================== -D_FlushCaches -================== -*/ -void -D_FlushCaches (void) -{ - surfcache_t *c; - - if (!sc_base) - return; - - for (c = sc_base ; c ; c = c->next) - { - if (c->owner) - *c->owner = NULL; - } - - sc_rover = sc_base; - sc_base->next = NULL; - sc_base->owner = NULL; - sc_base->size = sc_size; -} - -/* -================= -D_SCAlloc -================= -*/ -static surfcache_t * -D_SCAlloc (int width, int size) -{ - surfcache_t *new; - - if ((width < 0) || (width > 256)) - { - Com_Error(ERR_FATAL, "%s: bad cache width %d\n", __func__, width); - } - - if ((size <= 0) || (size > 0x10000)) - { - Com_Error(ERR_FATAL, "%s: bad cache size %d\n", __func__, size); - } - - // Add header size - size += ((char*)sc_base->data - (char*)sc_base); - size = (size + 3) & ~3; - if (size > sc_size) - { - Com_Error(ERR_FATAL, "%s: %i > cache size of %i", __func__, size, sc_size); - } - - // if there is not size bytes after the rover, reset to the start - if ( !sc_rover || (byte *)sc_rover - (byte *)sc_base > sc_size - size) - { - sc_rover = sc_base; - } - - // colect and free surfcache_t blocks until the rover block is large enough - new = sc_rover; - if (sc_rover->owner) - *sc_rover->owner = NULL; - - while (new->size < size) - { - // free another - sc_rover = sc_rover->next; - if (!sc_rover) - { - Com_Error(ERR_FATAL, "%s: hit the end of memory", __func__); - } - if (sc_rover->owner) - *sc_rover->owner = NULL; - - new->size += sc_rover->size; - new->next = sc_rover->next; - } - - // create a fragment out of any leftovers - if (new->size - size > 256) - { - sc_rover = (surfcache_t *)( (byte *)new + size); - sc_rover->size = new->size - size; - sc_rover->next = new->next; - sc_rover->width = 0; - sc_rover->owner = NULL; - new->next = sc_rover; - new->size = size; - } - else - sc_rover = new->next; - - new->width = width; - // DEBUG - if (width > 0) - new->height = (size - sizeof(*new) + sizeof(new->data)) / width; - - new->owner = NULL; // should be set properly after return - - return new; -} - -//============================================================================= - -static drawsurf_t r_drawsurf; - -/* -================ -D_CacheSurface -================ -*/ -surfcache_t * -D_CacheSurface (const entity_t *currententity, msurface_t *surface, int miplevel) -{ - surfcache_t *cache; - float surfscale; - - // - // if the surface is animating or flashing, flush the cache - // - r_drawsurf.image = R_TextureAnimation (currententity, surface->texinfo); - r_drawsurf.lightadj[0] = r_newrefdef.lightstyles[surface->styles[0]].white*128; - r_drawsurf.lightadj[1] = r_newrefdef.lightstyles[surface->styles[1]].white*128; - r_drawsurf.lightadj[2] = r_newrefdef.lightstyles[surface->styles[2]].white*128; - r_drawsurf.lightadj[3] = r_newrefdef.lightstyles[surface->styles[3]].white*128; - - // - // see if the cache holds apropriate data - // - cache = surface->cachespots[miplevel]; - - if (cache && !cache->dlight && surface->dlightframe != r_framecount - && cache->image == r_drawsurf.image - && cache->lightadj[0] == r_drawsurf.lightadj[0] - && cache->lightadj[1] == r_drawsurf.lightadj[1] - && cache->lightadj[2] == r_drawsurf.lightadj[2] - && cache->lightadj[3] == r_drawsurf.lightadj[3] ) - return cache; - - // - // determine shape of surface - // - surfscale = 1.0 / (1<extents[0] >> miplevel; - r_drawsurf.rowbytes = r_drawsurf.surfwidth; - r_drawsurf.surfheight = surface->extents[1] >> miplevel; - - // - // allocate memory if needed - // - if (!cache) // if a texture just animated, don't reallocate it - { - cache = D_SCAlloc (r_drawsurf.surfwidth, - r_drawsurf.surfwidth * r_drawsurf.surfheight); - surface->cachespots[miplevel] = cache; - cache->owner = &surface->cachespots[miplevel]; - cache->mipscale = surfscale; - } - - if (surface->dlightframe == r_framecount) - cache->dlight = 1; - else - cache->dlight = 0; - - r_drawsurf.surfdat = (pixel_t *)cache->data; - - cache->image = r_drawsurf.image; - cache->lightadj[0] = r_drawsurf.lightadj[0]; - cache->lightadj[1] = r_drawsurf.lightadj[1]; - cache->lightadj[2] = r_drawsurf.lightadj[2]; - cache->lightadj[3] = r_drawsurf.lightadj[3]; - - // - // draw and light the surface texture - // - r_drawsurf.surf = surface; - - c_surf++; - - // calculate the lightings - R_BuildLightMap (&r_drawsurf); - - // rasterize the surface into the cache - R_DrawSurface (&r_drawsurf); - - return cache; -} diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt new file mode 100644 index 000000000..131908fcf --- /dev/null +++ b/src/game/CMakeLists.txt @@ -0,0 +1,108 @@ +# Game library (baseq2) + +set(Game-Source + ${COMMON_SRC_DIR}/shared/flash.c + ${COMMON_SRC_DIR}/shared/rand.c + ${COMMON_SRC_DIR}/shared/shared.c + ${GAME_SRC_DIR}/g_ai.c + ${GAME_SRC_DIR}/g_chase.c + ${GAME_SRC_DIR}/g_cmds.c + ${GAME_SRC_DIR}/g_combat.c + ${GAME_SRC_DIR}/g_func.c + ${GAME_SRC_DIR}/g_items.c + ${GAME_SRC_DIR}/g_main.c + ${GAME_SRC_DIR}/g_misc.c + ${GAME_SRC_DIR}/g_monster.c + ${GAME_SRC_DIR}/g_phys.c + ${GAME_SRC_DIR}/g_spawn.c + ${GAME_SRC_DIR}/g_svcmds.c + ${GAME_SRC_DIR}/g_target.c + ${GAME_SRC_DIR}/g_trigger.c + ${GAME_SRC_DIR}/g_turret.c + ${GAME_SRC_DIR}/g_utils.c + ${GAME_SRC_DIR}/g_weapon.c + ${GAME_SRC_DIR}/monster/berserker/berserker.c + ${GAME_SRC_DIR}/monster/boss2/boss2.c + ${GAME_SRC_DIR}/monster/boss3/boss3.c + ${GAME_SRC_DIR}/monster/boss3/boss31.c + ${GAME_SRC_DIR}/monster/boss3/boss32.c + ${GAME_SRC_DIR}/monster/brain/brain.c + ${GAME_SRC_DIR}/monster/chick/chick.c + ${GAME_SRC_DIR}/monster/flipper/flipper.c + ${GAME_SRC_DIR}/monster/float/float.c + ${GAME_SRC_DIR}/monster/flyer/flyer.c + ${GAME_SRC_DIR}/monster/gladiator/gladiator.c + ${GAME_SRC_DIR}/monster/gunner/gunner.c + ${GAME_SRC_DIR}/monster/hover/hover.c + ${GAME_SRC_DIR}/monster/infantry/infantry.c + ${GAME_SRC_DIR}/monster/insane/insane.c + ${GAME_SRC_DIR}/monster/medic/medic.c + ${GAME_SRC_DIR}/monster/misc/move.c + ${GAME_SRC_DIR}/monster/mutant/mutant.c + ${GAME_SRC_DIR}/monster/parasite/parasite.c + ${GAME_SRC_DIR}/monster/soldier/soldier.c + ${GAME_SRC_DIR}/monster/supertank/supertank.c + ${GAME_SRC_DIR}/monster/tank/tank.c + ${GAME_SRC_DIR}/player/client.c + ${GAME_SRC_DIR}/player/hud.c + ${GAME_SRC_DIR}/player/trail.c + ${GAME_SRC_DIR}/player/view.c + ${GAME_SRC_DIR}/player/weapon.c + ${GAME_SRC_DIR}/savegame/savegame.c +) + +set(Game-Header + ${GAME_SRC_DIR}/header/game.h + ${GAME_SRC_DIR}/header/local.h + ${GAME_SRC_DIR}/monster/berserker/berserker.h + ${GAME_SRC_DIR}/monster/boss2/boss2.h + ${GAME_SRC_DIR}/monster/boss3/boss31.h + ${GAME_SRC_DIR}/monster/boss3/boss32.h + ${GAME_SRC_DIR}/monster/brain/brain.h + ${GAME_SRC_DIR}/monster/chick/chick.h + ${GAME_SRC_DIR}/monster/flipper/flipper.h + ${GAME_SRC_DIR}/monster/float/float.h + ${GAME_SRC_DIR}/monster/flyer/flyer.h + ${GAME_SRC_DIR}/monster/gladiator/gladiator.h + ${GAME_SRC_DIR}/monster/gunner/gunner.h + ${GAME_SRC_DIR}/monster/hover/hover.h + ${GAME_SRC_DIR}/monster/infantry/infantry.h + ${GAME_SRC_DIR}/monster/insane/insane.h + ${GAME_SRC_DIR}/monster/medic/medic.h + ${GAME_SRC_DIR}/monster/misc/player.h + ${GAME_SRC_DIR}/monster/mutant/mutant.h + ${GAME_SRC_DIR}/monster/parasite/parasite.h + ${GAME_SRC_DIR}/monster/soldier/soldier.h + ${GAME_SRC_DIR}/monster/supertank/supertank.h + ${GAME_SRC_DIR}/monster/tank/tank.h + ${GAME_SRC_DIR}/savegame/tables/clientfields.h + ${GAME_SRC_DIR}/savegame/tables/fields.h + ${GAME_SRC_DIR}/savegame/tables/gamefunc_decs.h + ${GAME_SRC_DIR}/savegame/tables/gamefunc_list.h + ${GAME_SRC_DIR}/savegame/tables/gamemmove_decs.h + ${GAME_SRC_DIR}/savegame/tables/gamemmove_list.h + ${GAME_SRC_DIR}/savegame/tables/levelfields.h +) + +add_library(game MODULE ${Game-Source} ${Game-Header}) +set_target_properties(game PROPERTIES + PREFIX "" + SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} +) + +get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(isMultiConfig) + set_target_properties(game PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$/baseq2 + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$/baseq2 + ) +else() + set_target_properties(game PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/baseq2 + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/baseq2 + ) +endif() + +target_link_libraries(game ${yquake2LinkerFlags}) + + diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt new file mode 100644 index 000000000..1b2368261 --- /dev/null +++ b/src/server/CMakeLists.txt @@ -0,0 +1,66 @@ +# Dedicated server executable (q2ded) + +set(Server-Source + ${COMMON_SRC_DIR}/argproc.c + ${COMMON_SRC_DIR}/clientserver.c + ${COMMON_SRC_DIR}/collision.c + ${COMMON_SRC_DIR}/crc.c + ${COMMON_SRC_DIR}/cmdparser.c + ${COMMON_SRC_DIR}/cvar.c + ${COMMON_SRC_DIR}/filesystem.c + ${COMMON_SRC_DIR}/glob.c + ${COMMON_SRC_DIR}/md4.c + ${COMMON_SRC_DIR}/frame.c + ${COMMON_SRC_DIR}/movemsg.c + ${COMMON_SRC_DIR}/netchan.c + ${COMMON_SRC_DIR}/pmove.c + ${COMMON_SRC_DIR}/szone.c + ${COMMON_SRC_DIR}/zone.c + ${COMMON_SRC_DIR}/shared/rand.c + ${COMMON_SRC_DIR}/shared/shared.c + ${COMMON_SRC_DIR}/unzip/ioapi.c + ${COMMON_SRC_DIR}/unzip/unzip.c + ${COMMON_SRC_DIR}/unzip/miniz/miniz.c + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.c + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.c + ${SERVER_SRC_DIR}/sv_cmd.c + ${SERVER_SRC_DIR}/sv_conless.c + ${SERVER_SRC_DIR}/sv_entities.c + ${SERVER_SRC_DIR}/sv_game.c + ${SERVER_SRC_DIR}/sv_init.c + ${SERVER_SRC_DIR}/sv_main.c + ${SERVER_SRC_DIR}/sv_save.c + ${SERVER_SRC_DIR}/sv_send.c + ${SERVER_SRC_DIR}/sv_user.c + ${SERVER_SRC_DIR}/sv_world.c +) + +set(Server-Header + ${COMMON_SRC_DIR}/header/common.h + ${COMMON_SRC_DIR}/header/crc.h + ${COMMON_SRC_DIR}/header/files.h + ${COMMON_SRC_DIR}/header/glob.h + ${COMMON_SRC_DIR}/header/shared.h + ${COMMON_SRC_DIR}/header/zone.h + ${COMMON_SRC_DIR}/unzip/ioapi.h + ${COMMON_SRC_DIR}/unzip/unzip.h + ${COMMON_SRC_DIR}/unzip/miniz/miniz.h + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.h + ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.h + ${COMMON_SRC_DIR}/unzip/miniz/minizconf.h + ${SERVER_SRC_DIR}/header/server.h +) + +add_executable(q2ded ${Server-Source} ${Server-Header} ${Platform-Specific-Source} + ${Backends-Generic-Source}) +set_target_properties(q2ded PROPERTIES + COMPILE_DEFINITIONS "DEDICATED_ONLY" + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) +if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm) +else() + target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ServerLinkerFlags} ${yquake2ZLibLinkerFlags}) +endif() + + diff --git a/stuff/cdripper.sh b/stuff/cdripper.sh deleted file mode 100755 index c4ff179eb..000000000 --- a/stuff/cdripper.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -set -eu - -# simple script that rips CDs to a format useable by Yamagis Quake2 client -# Needs cdparanoia and oggenc, useable with Quake II and both addons. - -# Create directory -mkdir -p music -cd music - -# rip all tracks beginning with second one (the first track is data) -cdparanoia -B "2-" - -for I in track*.cdda.wav; do - NUM="${I#track}" - NUM="${NUM%.cdda.wav}" - oggenc -q 6 -o "$NUM.ogg" "$I" -done - -# remove .wav files -rm *.wav - -echo ' -Ripping done, move music/ directory to /your/path/to/quake2/game/music/' diff --git a/stuff/cmake/modules/FindSDL2.cmake b/stuff/cmake/modules/FindSDL2.cmake deleted file mode 100644 index 99a02d907..000000000 --- a/stuff/cmake/modules/FindSDL2.cmake +++ /dev/null @@ -1,175 +0,0 @@ - -# This module defines -# SDL2_LIBRARY, the name of the library to link against -# SDL2_FOUND, if false, do not try to link to SDL2 -# SDL2_INCLUDE_DIR, where to find SDL.h -# -# This module responds to the the flag: -# SDL2_BUILDING_LIBRARY -# If this is defined, then no SDL2main will be linked in because -# only applications need main(). -# Otherwise, it is assumed you are building an application and this -# module will attempt to locate and set the the proper link flags -# as part of the returned SDL2_LIBRARY variable. -# -# Don't forget to include SDLmain.h and SDLmain.m your project for the -# OS X framework based version. (Other versions link to -lSDL2main which -# this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf. -# -# -# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration -# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library -# (SDL2.dll, libsdl2.so, SDL2.framework, etc). -# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. -# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value -# as appropriate. These values are used to generate the final SDL2_LIBRARY -# variable, but when these values are unset, SDL2_LIBRARY does not get created. -# -# -# $SDL2DIR is an environment variable that would -# correspond to the ./configure --prefix=$SDL2DIR -# used in building SDL2. -# l.e.galup 9-20-02 -# -# Modified by Eric Wing. -# Added code to assist with automated building by using environmental variables -# and providing a more controlled/consistent search behavior. -# Added new modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). -# Also corrected the header search path to follow "proper" SDL guidelines. -# Added a search for SDL2main which is needed by some platforms. -# Added a search for threads which is needed by some platforms. -# Added needed compile switches for MinGW. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of -# SDL2_LIBRARY to override this selection or set the CMake environment -# CMAKE_INCLUDE_PATH to modify the search paths. -# -# Note that the header path has changed from SDL2/SDL.h to just SDL.h -# This needed to change because "proper" SDL convention -# is #include "SDL.h", not . This is done for portability -# reasons because not all systems place things in SDL2/ (see FreeBSD). - -#============================================================================= -# Copyright 2003-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# message("") - -SET(SDL2_SEARCH_PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /sw # Fink - /opt/homebrew # Homebrew - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt - /boot/system/develop - ${SDL2_PATH} -) - -FIND_PATH(SDL2_INCLUDE_DIR SDL.h - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES include/SDL2 include headers/SDL2 - PATHS ${SDL2_SEARCH_PATHS} -) - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(PATH_SUFFIXES lib64 lib/x64 lib) -else() - set(PATH_SUFFIXES lib/x86 lib) -endif() - -FIND_LIBRARY(SDL2_LIBRARY_TEMP - NAMES SDL2 - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES ${PATH_SUFFIXES} - PATHS ${SDL2_SEARCH_PATHS} -) - -IF(NOT SDL2_BUILDING_LIBRARY) - IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") - # Non-OS X framework versions expect you to also dynamically link to - # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms - # seem to provide SDL2main for compatibility even though they don't - # necessarily need it. - FIND_LIBRARY(SDL2MAIN_LIBRARY - NAMES SDL2main - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES ${PATH_SUFFIXES} - PATHS ${SDL2_SEARCH_PATHS} - ) - ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") -ENDIF(NOT SDL2_BUILDING_LIBRARY) - -# SDL2 may require threads on your system. -# The Apple build may not need an explicit flag because one of the -# frameworks may already provide it. -# But for non-OSX systems, I will use the CMake Threads package. -IF(NOT APPLE) - FIND_PACKAGE(Threads) -ENDIF(NOT APPLE) - -# MinGW needs an additional link flag, -mwindows -# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows -IF(MINGW) - SET(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "mwindows for MinGW") -ENDIF(MINGW) - -IF(SDL2_LIBRARY_TEMP) - # For SDL2main - IF(NOT SDL2_BUILDING_LIBRARY) - IF(SDL2MAIN_LIBRARY) - SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(SDL2MAIN_LIBRARY) - ENDIF(NOT SDL2_BUILDING_LIBRARY) - - # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. - # CMake doesn't display the -framework Cocoa string in the UI even - # though it actually is there if I modify a pre-used variable. - # I think it has something to do with the CACHE STRING. - # So I use a temporary variable until the end so I can set the - # "real" variable in one-shot. - IF(APPLE) - SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") - ENDIF(APPLE) - - # For threads, as mentioned Apple doesn't need this. - # In fact, there seems to be a problem if I used the Threads package - # and try using this line, so I'm just skipping it entirely for OS X. - IF(NOT APPLE) - SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) - ENDIF(NOT APPLE) - - # For MinGW library - IF(MINGW) - SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(MINGW) - - # Set the final string here so the GUI reflects the final state. - SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") - # Set the temp variable to INTERNAL so it is not seen in the CMake GUI - SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") -ENDIF(SDL2_LIBRARY_TEMP) - -# message("") - -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) diff --git a/stuff/mapfixes/baseq2/base2@0ae9.ent b/stuff/mapfixes/baseq2/base2@0ae9.ent deleted file mode 100644 index 1e51eeea2..000000000 --- a/stuff/mapfixes/baseq2/base2@0ae9.ent +++ /dev/null @@ -1,3708 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed unused target_explosive (222) -// -// This explosion is by the ceiling fan near the start of the level. -{ -"nextmap" "base3" -"classname" "worldspawn" -"message" "Installation" -"sky" "unit1_" -"sounds" "7" -} -{ -"origin" "112 -800 8" -"targetname" "base3b" -"classname" "info_player_coop" -"angle" "0" -} -{ -"origin" "112 -752 8" -"targetname" "base3b" -"classname" "info_player_coop" -"angle" "0" -} -{ -"origin" "112 -852 8" -"targetname" "base3b" -"angle" "0" -"classname" "info_player_coop" -} -{ -"origin" "828 2232 -224" -"targetname" "base1" -"classname" "info_player_coop" -"angle" "180" -} -{ -"origin" "876 2232 -224" -"targetname" "base1" -"classname" "info_player_coop" -"angle" "180" -} -{ -"origin" "856 2356 -224" -"targetname" "base1" -"angle" "180" -"classname" "info_player_coop" -} -{ -"origin" "804 -1768 44" -"light" "80" -"classname" "light" -} -{ -"origin" "544 -1888 24" -"spawnflags" "769" -"angle" "90" -"classname" "monster_gunner" -} -{ -"origin" "336 -1792 24" -"targetname" "t88" -"angle" "90" -"spawnflags" "1" -"classname" "monster_gunner" -} -{ -"origin" "96 -96 8" -"spawnflags" "1" -"angle" "180" -"classname" "monster_infantry" -} -{ -"origin" "-616 320 -128" -"spawnflags" "769" -"angle" "225" -"classname" "monster_soldier_light" -} -{ -"origin" "424 1688 24" -"spawnflags" "769" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "808 1792 32" -"spawnflags" "769" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"origin" "32 1568 -168" -"item" "ammo_bullets" -"spawnflags" "769" -"angle" "270" -"classname" "monster_infantry" -} -{ -"origin" "480 1632 -168" -"spawnflags" "769" -"angle" "180" -"classname" "monster_infantry" -} -{ -"origin" "-112 2144 -160" -"spawnflags" "768" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "800 2528 32" -"spawnflags" "768" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"light" "80" -"classname" "light" -"origin" "296 1192 -104" -} -{ -"classname" "light" -"light" "80" -"origin" "400 1184 -104" -} -{ -"classname" "func_timer" -"wait" "90" -"targetname" "t107" -"target" "t108" -"origin" "480 1384 64" -"spawnflags" "2048" -} -{ -"model" "*1" -"classname" "trigger_once" -"spawnflags" "2048" -"target" "t107" -} -{ -"classname" "target_speaker" -"noise" "world/v_bas6.wav" -"spawnflags" "2048" -"attenuation" "-1" -"origin" "504 1416 72" -"targetname" "t108" -} -{ -"model" "*2" -"target" "t106" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"targetname" "t106" -"origin" "-80 400 96" -"target" "t105" -"wait" "90" -"classname" "func_timer" -} -{ -"origin" "-120 424 96" -"delay" ".5" -"targetname" "t102" -"target" "t103" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-120 448 96" -"delay" ".3" -"targetname" "t103" -"target" "t104" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-120 400 96" -"targetname" "t105" -"target" "t102" -"spawnflags" "2048" -"classname" "trigger_relay" -} -{ -"targetname" "t103" -"spawnflags" "2048" -"origin" "-144 424 96" -"noise" "world/flyby1.wav" -"attenuation" "-1" -"classname" "target_speaker" -} -{ -"targetname" "t102" -"spawnflags" "2048" -"origin" "-144 400 96" -"noise" "world/flyby1.wav" -"attenuation" "-1" -"classname" "target_speaker" -} -{ -"targetname" "t104" -"spawnflags" "2048" -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/flyby1.wav" -"origin" "-144 448 96" -} -{ -"origin" "88 1896 -128" -"targetname" "t101" -"noise" "world/v_bas1.wav" -"spawnflags" "2048" -"attenuation" "-1" -"classname" "target_speaker" -} -{ -"model" "*3" -"target" "t101" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"origin" "-80 1768 -120" -"classname" "target_explosion" -"targetname" "t20" -"dmg" "1" -} -{ -"origin" "-72 1824 -120" -"delay" ".2" -"targetname" "t20" -"classname" "target_explosion" -"dmg" "1" -} -{ -"origin" "-16 1672 -120" -"delay" ".4" -"targetname" "t20" -"dmg" "1" -"classname" "target_explosion" -} -{ -"origin" "672 2320 -192" -"targetname" "t100" -"attenuation" "-1" -"noise" "world/v_bas3.wav" -"spawnflags" "2048" -"classname" "target_speaker" -} -{ -"model" "*4" -"target" "t100" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"origin" "624 2264 -200" -"targetname" "t97" -"spawnflags" "0" -"target" "t98" -"classname" "trigger_relay" -"delay" "1" -} -{ -"origin" "648 2264 -200" -"spawnflags" "0" -"targetname" "t76" -"target" "t97" -"classname" "trigger_relay" -"delay" "1" -} -{ -"origin" "600 2264 -200" -"targetname" "t98" -"spawnflags" "0" -"target" "t99" -"delay" "3" -"classname" "trigger_relay" -} -{ -"origin" "624 2240 -200" -"targetname" "t98" -"spawnflags" "2048" -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/explod1.wav" -} -{ -"origin" "648 2240 -200" -"targetname" "t97" -"spawnflags" "2048" -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/explod1.wav" -} -{ -"origin" "600 2240 -200" -"targetname" "t99" -"spawnflags" "2048" -"noise" "world/explod1.wav" -"attenuation" "-1" -"classname" "target_speaker" -} -{ -"origin" "624 2360 -256" -"classname" "misc_deadsoldier" -"spawnflags" "2" -} -{ -"origin" "384 992 88" -"target" "t96" -"targetname" "t61" -"delay" "4" -"classname" "trigger_relay" -} -{ -"origin" "368 936 88" -"attenuation" "-1" -"spawnflags" "2048" -"noise" "world/v_bas2.wav" -"classname" "target_speaker" -"targetname" "t96" -} -{ -"origin" "-112 360 96" -"random" "15" -"wait" "30" -"spawnflags" "2049" -"target" "t95" -"classname" "func_timer" -} -{ -"spawnflags" "2048" -"origin" "-144 360 96" -"targetname" "t95" -"noise" "world/flyby1.wav" -"attenuation" "-1" -"classname" "target_speaker" -} -{ -"classname" "monster_soldier_light" -"angle" "270" -"spawnflags" "257" -"origin" "576 1776 24" -} -{ -"classname" "ammo_slugs" -"spawnflags" "1792" -"origin" "576 2656 16" -} -{ -"origin" "0 1976 136" -"angles" "20 45 0" -"classname" "info_player_intermission" -} -{ -"classname" "info_player_intermission" -"angles" "20 215 0" -"origin" "856 670 220" -} -{ -"model" "*5" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "ammo_shells" -"spawnflags" "1536" -"origin" "88 -1384 16" -} -{ -"model" "*6" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t67" -"origin" "256 -856 72" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-296 -352 0" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-96 -200 0" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-96 -160 0" -} -{ -"classname" "item_health_small" -"spawnflags" "1792" -"origin" "-96 -240 0" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "-96 -416 0" -} -{ -"classname" "light" -"light" "64" -"origin" "-224 -36 44" -} -{ -"classname" "item_invulnerability" -"spawnflags" "1792" -"origin" "-224 -36 16" -} -{ -"model" "*7" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*8" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "weapon_rocketlauncher" -"spawnflags" "1792" -"origin" "704 -704 -136" -} -{ -"model" "*9" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*10" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-224 -416 -4" -"light" "80" -"classname" "light" -} -{ -"origin" "-224 -352 44" -"light" "100" -"classname" "light" -} -{ -"origin" "-96 -304 44" -"classname" "light" -"light" "100" -} -{ -"origin" "-96 -416 44" -"classname" "light" -"light" "100" -} -{ -"origin" "-96 -160 44" -"light" "100" -"classname" "light" -} -{ -"origin" "412 -1856 16" -"spawnflags" "1792" -"classname" "item_armor_jacket" -} -{ -"origin" "304 -1856 16" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"origin" "344 -1856 16" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "80 -1576 16" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "80 -1624 16" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "608 1440 16" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "608 1404 16" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "-856 360 -136" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-856 264 -136" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "500 -1056 16" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "464 -1056 16" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "536 -1056 16" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"classname" "light" -"light" "120" -"origin" "840 2608 72" -} -{ -"classname" "light" -"light" "120" -"origin" "720 2608 72" -} -{ -"origin" "32 2444 -176" -"classname" "weapon_shotgun" -"spawnflags" "1792" -} -{ -"origin" "32 2480 -176" -"classname" "ammo_shells" -} -{ -"origin" "704 -704 -112" -"light" "80" -"classname" "light" -} -{ -"model" "*11" -"_minlight" ".1" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"spawnflags" "1536" -"classname" "item_health" -"origin" "-656 360 -140" -} -{ -"classname" "item_health" -"origin" "-616 360 -140" -} -{ -"origin" "-616 240 -136" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"model" "*12" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-32 -32 8" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "112 -1296 24" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "-912 -72 -136" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "96 1632 -168" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "688 2520 -232" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "360 1896 24" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "424 -224 8" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "24 -320 8" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "280 -1976 24" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-224 2400 -168" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-96 2600 24" -"angle" "315" -"classname" "info_player_deathmatch" -} -{ -"origin" "152 -960 0" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "864 2568 16" -"spawnflags" "1792" -"classname" "weapon_railgun" -} -{ -"spawnflags" "1024" -"origin" "240 -1632 -72" -"classname" "ammo_grenades" -} -{ -"classname" "weapon_shotgun" -"origin" "-224 -344 -144" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "1012 -704 232" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "-4 -1792 248" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "-4 -1600 248" -} -{ -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"origin" "184 -1052 180" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-232 456 120" -"volume" ".2" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "296 456 120" -"volume" ".4" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "736 456 120" -"volume" ".4" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "480 184 120" -"volume" ".4" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "0 168 120" -"volume" ".2" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "792 280 120" -"volume" ".4" -} -{ -"attenuation" "-1" -"classname" "target_speaker" -"noise" "world/battle2.wav" -"spawnflags" "2048" -"targetname" "t93" -"origin" "636 626 96" -} -{ -"wait" "19" -"random" "8" -"classname" "func_timer" -"spawnflags" "1" -"target" "t93" -"origin" "644 594 96" -} -{ -"spawnflags" "1" -"classname" "func_timer" -"random" "4" -"wait" "15" -"target" "t91" -"origin" "620 234 96" -} -{ -"attenuation" "-1" -"spawnflags" "2048" -"noise" "world/battle3.wav" -"classname" "target_speaker" -"targetname" "t91" -"origin" "612 250 96" -} -{ -"spawnflags" "1" -"classname" "func_timer" -"random" "8" -"wait" "19" -"target" "t92" -"origin" "660 458 96" -} -{ -"attenuation" "-1" -"spawnflags" "2048" -"noise" "world/explod2.wav" -"classname" "target_speaker" -"targetname" "t92" -"volume" ".5" -"origin" "652 490 32" -} -{ -"classname" "func_timer" -"spawnflags" "1" -"target" "t94" -"random" "7" -"wait" "16" -"origin" "-42 474 62" -} -{ -"attenuation" "-1" -"classname" "target_speaker" -"noise" "world/battle1.wav" -"spawnflags" "2048" -"targetname" "t94" -"origin" "-50 514 62" -} -{ -"classname" "item_armor_shard" -"origin" "40 2128 -168" -} -{ -"classname" "item_armor_shard" -"origin" "40 2088 -168" -} -{ -"classname" "item_armor_shard" -"origin" "40 2168 -168" -} -{ -"spawnflags" "2048" -"classname" "item_armor_shard" -"origin" "840 2552 16" -} -{ -"spawnflags" "2048" -"classname" "item_armor_shard" -"origin" "872 2584 16" -} -{ -"spawnflags" "2048" -"origin" "840 2640 24" -"classname" "ammo_bullets" -} -{ -"spawnflags" "2048" -"origin" "760 2640 24" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_grenades" -"origin" "116 -994 0" -} -{ -"classname" "item_health_large" -"origin" "28 -480 72" -"spawnflags" "2048" -} -{ -"classname" "ammo_rockets" -"origin" "272 -544 8" -"spawnflags" "1792" -} -{ -"spawnflags" "1" -"classname" "monster_gunner" -"angle" "270" -"target" "t89" -"origin" "120 -2136 24" -"item" "ammo_bullets" -} -{ -"classname" "path_corner" -"targetname" "t89" -"target" "t90" -"origin" "120 -2272 8" -} -{ -"classname" "path_corner" -"target" "t89" -"targetname" "t90" -"origin" "120 -2048 8" -} -{ -"model" "*13" -"classname" "trigger_once" -"target" "t88" -} -{ -"classname" "monster_soldier_ss" -"angle" "0" -"targetname" "t48" -"spawnflags" "1" -"origin" "544 -1296 24" -} -{ -"classname" "ammo_shells" -"origin" "368 -1008 16" -} -{ -"classname" "ammo_shells" -"origin" "368 -1048 16" -} -{ -"classname" "light" -"light" "64" -"origin" "76 -704 0" -} -{ -"origin" "216 -1824 -78" -"classname" "ammo_shells" -} -{ -"origin" "160 -152 0" -"classname" "ammo_shells" -} -{ -"origin" "160 -200 0" -"classname" "ammo_shells" -} -{ -"classname" "target_speaker" -"noise" "world/lite_on2.wav" -"targetname" "t74" -"attenuation" "-1" -"origin" "648 -1024 112" -"spawnflags" "2048" -} -{ -"origin" "236 2016 -160" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_shells" -"origin" "32 2520 -176" -} -{ -"classname" "item_health_large" -"origin" "288 2464 -176" -} -{ -"classname" "ammo_bullets" -"origin" "258 -992 0" -} -{ -"origin" "712 440 168" -"spawnflags" "1" -"target" "t77" -"classname" "target_crosslevel_target" -} -{ -"origin" "776 512 184" -"targetname" "t77" -"classname" "monster_flyer" -"angle" "225" -"spawnflags" "3" -} -{ -"origin" "744 568 96" -"targetname" "t77" -"classname" "monster_flyer" -"angle" "225" -"spawnflags" "3" -} -{ -"origin" "600 632 184" -"targetname" "t77" -"spawnflags" "3" -"angle" "225" -"classname" "monster_flyer" -} -{ -"classname" "target_help" -"targetname" "t76" -"origin" "808 2344 -208" -"message" "Use sewer tunnels to gain\naccess to the Comm Center." -} -{ -"model" "*14" -"classname" "trigger_once" -"target" "t76" -} -{ -"origin" "16 -416 40" -"light" "80" -"classname" "light" -} -{ -"origin" "16 -416 88" -"classname" "light" -"light" "80" -} -{ -"origin" "16 -288 88" -"light" "80" -"classname" "light" -} -{ -"origin" "16 -288 40" -"classname" "light" -"light" "80" -} -{ -"classname" "target_secret" -"targetname" "t75" -"message" "You have found a secret area." -"origin" "-168 -344 -88" -} -{ -"classname" "target_secret" -"targetname" "t73" -"message" "You have found a secret." -"origin" "248 -1816 -56" -} -{ -"spawnflags" "2048" -"targetname" "t67" -"classname" "target_goal" -"origin" "272 -752 48" -} -{ -"classname" "target_goal" -"targetname" "t5" -"origin" "-856 296 -64" -} -{ -"targetname" "t73" -"origin" "-44 -2272 -72" -"angle" "0" -"classname" "monster_soldier_light" -} -{ -"origin" "624 -1040 96" -"target" "t74" -"delay" "3.5" -"targetname" "t6" -"classname" "trigger_relay" -} -{ -"origin" "848 2296 -72" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"model" "*15" -"targetname" "block" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "64 -2080 72" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "56 -2216 72" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-24 -96 72" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "352 -1880 104" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "88 -1296 72" -} -{ -"origin" "416 -1456 0" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "552 -1728 -56" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "768 -1384 72" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "672 2608 96" -} -{ -"noise" "world/drip_amb.wav" -"origin" "720 -888 -136" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"origin" "816 -696 -136" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"origin" "496 -736 -136" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "224 -2096 -56" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "360 -2272 -56" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "536 -2256 -56" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "552 -2016 -56" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "544 -1456 0" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "208 -1856 -56" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "616 1352 64" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "352 -1992 72" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "392 1688 32" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"origin" "552 1888 32" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"origin" "104 1784 32" -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "208 2008 96" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-40 2464 96" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "320 1184 64" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "288 2600 96" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-240 2240 -144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-240 1984 -144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "64 1960 -144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-40 2080 96" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "440 1880 -176" -"noise" "world/spark2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/comp_hum2.wav" -"origin" "416 1952 -104" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"targetname" "t20" -"origin" "-128 1800 -104" -"noise" "world/turbine1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "320 1176 -128" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "624 1360 -128" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "624 1176 -128" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "480 1000 104" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "24 1176 -128" -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "720 -384 8" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "832 -144 8" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "392 -248 8" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "800 -536 8" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "160 -744 -88" -"noise" "world/amb5.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "96 -240 -88" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb14.wav" -} -{ -"origin" "96 -416 -88" -"noise" "world/amb14.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "32 -352 72" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-736 256 -152" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/water1.wav" -} -{ -"origin" "-568 96 -152" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/water1.wav" -} -{ -"origin" "-424 104 -152" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/water1.wav" -} -{ -"origin" "-360 288 -152" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/water1.wav" -} -{ -"origin" "-768 -56 -152" -"noise" "world/water1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/drip_amb.wav" -"origin" "24 -248 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/drip_amb.wav" -"origin" "-96 -304 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"origin" "-192 -376 -144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb" -} -{ -"noise" "world/drip_amb.wav" -"origin" "104 -416 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/drip_amb.wav" -"origin" "48 -808 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/drip_amb.wav" -"origin" "152 -672 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/drip_amb.wav" -"origin" "248 -672 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/drip_amb.wav" -"origin" "256 -864 -152" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/drip_amb.wav" -"origin" "-160 -96 -152" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "272 -840 40" -"killtarget" "block" -"targetname" "t6" -"classname" "trigger_relay" -} -{ -"origin" "544 1568 -176" -"classname" "item_health" -} -{ -"origin" "600 1568 -176" -"classname" "item_health" -} -{ -"origin" "64 -488 88" -"light" "100" -"classname" "light" -} -{ -"origin" "152 -8 8" -"classname" "item_health_large" -} -{ -"origin" "-56 1696 -176" -"classname" "item_health_large" -} -{ -"model" "*16" -"spawnflags" "2048" -"speed" "200" -"wait" "-1" -"angle" "-2" -"classname" "func_door" -"targetname" "t73" -"_minlight" ".1" -} -{ -"origin" "-40 -1760 -72" -"angle" "0" -"classname" "monster_soldier_light" -"targetname" "t73" -} -{ -"model" "*17" -"spawnflags" "2048" -"classname" "func_door" -"angle" "-2" -"wait" "-1" -"speed" "200" -"targetname" "t73" -"_minlight" ".1" -} -{ -"light" "64" -"classname" "light" -"origin" "456 -1944 -84" -} -{ -"model" "*18" -"targetname" "block" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "monster_soldier_light" -"angle" "0" -"targetname" "t73" -"origin" "0 -2272 -72" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "16" -"angle" "0" -"origin" "-240 -432 -160" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t48" -} -{ -"origin" "288 -1384 24" -"classname" "item_health_small" -} -{ -"origin" "168 -1408 0" -"classname" "misc_deadsoldier" -"spawnflags" "9" -} -{ -"origin" "256 -1344 0" -"classname" "misc_deadsoldier" -"spawnflags" "1" -} -{ -"origin" "160 -1304 0" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "936 -1280 24" -"classname" "ammo_bullets" -} -{ -"origin" "936 -1328 24" -"classname" "ammo_bullets" -} -{ -"origin" "440 352 -96" -"light" "100" -"classname" "light" -} -{ -"origin" "808 1832 24" -"classname" "item_armor_jacket" -} -{ -"origin" "224 1696 24" -"classname" "item_health" -} -{ -"origin" "160 1696 24" -"classname" "item_health" -} -{ -"origin" "-48 2520 72" -"classname" "light" -"light" "120" -} -{ -"origin" "-48 2416 72" -"light" "120" -"classname" "light" -} -{ -"origin" "240 2608 72" -"classname" "light" -"light" "120" -} -{ -"origin" "344 2608 72" -"light" "120" -"classname" "light" -} -{ -"origin" "616 2608 72" -"classname" "light" -"light" "120" -} -{ -"origin" "840 2520 72" -"light" "120" -"classname" "light" -} -{ -"origin" "-40 2032 72" -"classname" "light" -"light" "120" -} -{ -"origin" "-40 2136 72" -"light" "120" -"classname" "light" -} -{ -"model" "*19" -"classname" "trigger_once" -"target" "t68" -} -{ -"origin" "-232 -344 -120" -"light" "80" -"classname" "light" -} -{ -"angle" "90" -"origin" "448 352 -136" -"spawnflags" "32" -"classname" "misc_deadsoldier" -} -{ -"origin" "100 -540 -16" -"classname" "misc_explobox" -} -{ -"model" "*20" -"target" "t67" -"classname" "trigger_once" -} -{ -"origin" "160 -2024 24" -"classname" "ammo_shells" -} -{ -"origin" "424 -2024 24" -"classname" "item_health_small" -} -{ -"origin" "424 -2072 24" -"classname" "item_health_small" -} -{ -"origin" "560 -1776 -96" -"spawnflags" "4" -"classname" "misc_deadsoldier" -} -{ -"origin" "88 -1720 -96" -"spawnflags" "4" -"classname" "misc_deadsoldier" -} -{ -"origin" "304 -1824 -96" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"origin" "304 -1888 -72" -"classname" "weapon_supershotgun" -"target" "t73" -} -{ -"origin" "920 -1008 24" -"classname" "item_health_small" -} -{ -"origin" "920 -1048 24" -"classname" "item_health_small" -} -{ -"origin" "864 -616 8" -"classname" "ammo_shells" -} -{ -"origin" "32 -416 0" -"classname" "item_health" -} -{ -"origin" "32 -376 0" -"classname" "item_health" -} -{ -"origin" "190 -992 0" -"classname" "ammo_bullets" -} -{ -"origin" "224 -992 0" -"classname" "ammo_bullets" -} -{ -"origin" "448 -704 32" -"angle" "0" -"classname" "monster_infantry" -"targetname" "t68" -} -{ -"origin" "576 -1032 32" -"angle" "45" -"classname" "monster_soldier_light" -"targetname" "t68" -} -{ -"style" "6" -"light" "130" -"origin" "-224 -352 -80" -"classname" "light" -"_color" "1.000000 0.976000 0.064000" -} -{ -"model" "*21" -"mass" "800" -"dmg" "1" -"health" "20" -"classname" "func_explosive" -"target" "t75" -} -{ -"spawnflags" "1536" -"origin" "-696 360 -140" -"classname" "item_health" -} -{ -"origin" "608 1016 16" -"classname" "item_health_small" -} -{ -"origin" "608 1056 16" -"classname" "item_health_small" -} -{ -"origin" "608 976 16" -"classname" "item_health_small" -} -{ -"origin" "608 1248 -168" -"classname" "ammo_bullets" -} -{ -"origin" "608 1312 -168" -"classname" "ammo_bullets" -} -{ -"spawnflags" "2048" -"origin" "800 2640 24" -"classname" "ammo_bullets" -} -{ -"light" "80" -"classname" "light" -"origin" "512 864 124" -} -{ -"classname" "light" -"light" "80" -"origin" "512 800 124" -} -{ -"classname" "light" -"light" "80" -"origin" "480 1008 128" -} -{ -"origin" "432 1056 128" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "432 1056 48" -} -{ -"classname" "light" -"light" "80" -"origin" "544 1020 48" -} -{ -"classname" "light" -"light" "120" -"origin" "624 992 80" -} -{ -"origin" "192 1696 80" -"classname" "light" -"light" "80" -} -{ -"origin" "384 1696 80" -"classname" "light" -"light" "80" -} -{ -"origin" "768 1792 80" -"light" "130" -"classname" "light" -} -{ -"origin" "80 1472 80" -"classname" "light" -"light" "120" -} -{ -"origin" "80 1360 80" -"light" "120" -"classname" "light" -} -{ -"origin" "192 1624 -104" -"classname" "light" -"light" "100" -} -{ -"origin" "384 1624 -104" -"light" "100" -"classname" "light" -} -{ -"origin" "384 1696 -104" -"light" "80" -"classname" "light" -} -{ -"origin" "384 1496 -104" -"classname" "light" -"light" "100" -} -{ -"origin" "192 1688 -104" -"classname" "light" -"light" "80" -} -{ -"origin" "192 1496 -104" -"light" "100" -"classname" "light" -} -{ -"origin" "64 2432 -120" -"classname" "light" -"light" "120" -} -{ -"origin" "64 2176 -120" -"light" "120" -"classname" "light" -} -{ -"origin" "848 2360 -184" -"classname" "light" -"light" "100" -} -{ -"origin" "848 2232 -184" -"light" "100" -"classname" "light" -} -{ -"origin" "832 2292 -224" -"angle" "180" -"classname" "info_player_start" -} -{ -"light" "80" -"classname" "light" -"origin" "156 1964 -132" -} -{ -"classname" "light" -"light" "80" -"origin" "232 1964 -132" -} -{ -"origin" "-12 2028 8" -"targetname" "t66" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "408 1504 -176" -"targetname" "t37" -"classname" "point_combat" -} -{ -"origin" "-936 -72 -128" -"angle" "45" -"classname" "monster_soldier_light" -} -{ -"model" "*22" -"target" "t65" -"classname" "trigger_once" -} -{ -"origin" "-848 360 -128" -"targetname" "t65" -"angle" "315" -"classname" "monster_soldier_light" -} -{ -"classname" "monster_soldier_light" -"angle" "90" -"target" "t60" -"spawnflags" "1" -"origin" "752 -568 16" -} -{ -"origin" "760 1792 32" -"targetname" "t62" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"model" "*23" -"spawnflags" "2048" -"target" "t62" -"classname" "trigger_once" -} -{ -"model" "*24" -"spawnflags" "2048" -"targetname" "t62" -"speed" "200" -"_minlight" ".2" -"wait" "-1" -"angle" "-2" -"classname" "func_door" -} -{ -"origin" "552 1216 24" -"classname" "item_health_small" -} -{ -"origin" "600 1216 24" -"classname" "item_health_small" -} -{ -"origin" "-24 1896 16" -"classname" "ammo_bullets" -} -{ -"origin" "32 1896 16" -"classname" "ammo_bullets" -} -{ -"origin" "-96 2408 -168" -"classname" "item_health_small" -} -{ -"origin" "-144 2408 -168" -"classname" "item_health_small" -} -{ -"origin" "480 2112 -240" -"classname" "item_health" -} -{ -"model" "*25" -"target" "t61" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "544 344 40" -"dmg" "1" -"targetname" "t61" -"classname" "target_explosion" -"delay" "1.5" -} -{ -"origin" "520 392 40" -"dmg" "1" -"delay" "1" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"origin" "488 296 40" -"dmg" "1" -"delay" ".4" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"origin" "400 336 56" -"dmg" "1" -"delay" ".2" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"origin" "448 416 72" -"dmg" "1" -"delay" ".4" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"origin" "424 464 40" -"dmg" "1" -"delay" ".8" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"origin" "416 432 40" -"dmg" "1" -"delay" ".1" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"origin" "544 448 40" -"dmg" "1" -"delay" "1.2" -"targetname" "t61" -"classname" "target_explosion" -} -{ -"classname" "info_player_start" -"angle" "0" -"targetname" "base3b" -"origin" "8 -800 8" -} -{ -"item" "ammo_bullets" -"classname" "monster_infantry" -"angle" "90" -"target" "t56" -"spawnflags" "257" -"origin" "808 -480 8" -} -{ -"classname" "path_corner" -"targetname" "t57" -"target" "t58" -"origin" "752 -200 -8" -} -{ -"classname" "path_corner" -"targetname" "t59" -"target" "t60" -"origin" "752 -200 -8" -} -{ -"classname" "path_corner" -"target" "t57" -"targetname" "t60" -"origin" "752 -520 -8" -} -{ -"classname" "path_corner" -"targetname" "t58" -"target" "t59" -"origin" "576 -200 -8" -} -{ -"classname" "path_corner" -"targetname" "t55" -"target" "t56" -"origin" "808 -192 -8" -} -{ -"classname" "path_corner" -"target" "t55" -"targetname" "t56" -"origin" "808 -448 -8" -} -{ -"model" "*26" -"classname" "trigger_once" -"target" "t52" -} -{ -"classname" "monster_soldier_light" -"angle" "270" -"targetname" "t52" -"origin" "272 -288 24" -"spawnflags" "1" -} -{ -"angle" "270" -"classname" "monster_soldier_ss" -"targetname" "t48" -"origin" "312 -1328 24" -"spawnflags" "768" -} -{ -"classname" "light" -"light" "120" -"origin" "96 -184 96" -} -{ -"classname" "func_group" -} -{ -"origin" "74 -704 76" -"light" "80" -"classname" "light" -} -{ -"origin" "76 -896 0" -"light" "64" -"classname" "light" -} -{ -"classname" "light" -"light" "120" -"origin" "88 -800 64" -} -{ -"origin" "8 -800 116" -"classname" "light" -"light" "64" -} -{ -"model" "*27" -"_minlight" ".2" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "432 592 24" -"targetname" "t45" -"classname" "monster_soldier_light" -"angle" "90" -"spawnflags" "1" -} -{ -"model" "*28" -"target" "t44" -"classname" "trigger_once" -} -{ -"origin" "192 536 24" -"targetname" "t44" -"angle" "0" -"classname" "monster_soldier_light" -"spawnflags" "257" -} -{ -"origin" "88 544 24" -"target" "t43" -"angle" "90" -"classname" "monster_soldier_light" -"spawnflags" "1" -} -{ -"origin" "-288 600 -144" -"target" "t43" -"targetname" "t42" -"classname" "path_corner" -} -{ -"origin" "88 600 8" -"targetname" "t43" -"target" "t42" -"classname" "path_corner" -} -{ -"origin" "512 800 24" -"target" "t45" -"targetname" "t41" -"angle" "90" -"classname" "monster_infantry" -"spawnflags" "1" -} -{ -"model" "*29" -"target" "t41" -"classname" "trigger_once" -} -{ -"origin" "592 976 8" -"targetname" "t40" -"target" "t39" -"classname" "path_corner" -} -{ -"origin" "248 976 8" -"target" "t40" -"targetname" "t39" -"classname" "path_corner" -} -{ -"item" "ammo_bullets" -"spawnflags" "1" -"origin" "304 976 24" -"target" "t39" -"angle" "180" -"classname" "monster_infantry" -} -{ -"model" "*30" -"target" "t38" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"origin" "304 1800 24" -"targetname" "t38" -"angle" "0" -"classname" "monster_soldier_light" -} -{ -"origin" "496 1216 24" -"target" "t36" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"origin" "144 1216 8" -"target" "t36" -"targetname" "t35" -"classname" "path_corner" -} -{ -"origin" "440 1216 8" -"targetname" "t36" -"target" "t35" -"classname" "path_corner" -} -{ -"spawnflags" "1" -"origin" "96 1320 -160" -"target" "t34" -"angle" "270" -"classname" "monster_soldier_ss" -} -{ -"origin" "96 1272 -176" -"targetname" "t34" -"target" "t33" -"classname" "path_corner" -} -{ -"origin" "576 1224 -176" -"target" "t33" -"targetname" "t32" -"classname" "path_corner" -} -{ -"origin" "48 1224 -176" -"targetname" "t33" -"target" "t32" -"classname" "path_corner" -} -{ -"origin" "48 1456 -176" -"target" "t33" -"targetname" "t32" -"classname" "path_corner" -} -{ -"spawnflags" "257" -"origin" "32 1512 32" -"targetname" "t30" -"classname" "monster_soldier_light" -} -{ -"model" "*31" -"target" "t30" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"target" "t37" -"origin" "560 1504 -160" -"targetname" "t31" -"angle" "180" -"classname" "monster_infantry" -} -{ -"origin" "464 1512 -104" -"target" "t31" -"targetname" "t30" -"classname" "trigger_relay" -} -{ -"model" "*32" -"target" "t30" -"classname" "trigger_multiple" -} -{ -"origin" "320 1968 -152" -"light" "80" -"classname" "light" -} -{ -"origin" "288 1896 -112" -"light" "150" -"classname" "light" -} -{ -"origin" "400 1896 -112" -"light" "150" -"classname" "light" -} -{ -"model" "*33" -"speed" "100" -"classname" "func_door" -"angle" "-1" -"wait" "-1" -"_minlight" ".2" -"targetname" "t29" -"spawnflags" "2048" -} -{ -"model" "*34" -"classname" "func_button" -"angle" "90" -"wait" "-1" -"target" "t29" -"spawnflags" "2048" -} -{ -"classname" "ammo_bullets" -"origin" "202 2016 -160" -} -{ -"classname" "weapon_machinegun" -"origin" "162 2016 -160" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "270" -"target" "t28" -"origin" "384 1816 -160" -} -{ -"classname" "path_corner" -"target" "t25" -"targetname" "t26" -"origin" "192 1768 -176" -} -{ -"classname" "path_corner" -"targetname" "t27" -"target" "t28" -"origin" "384 1496 -176" -} -{ -"classname" "path_corner" -"targetname" "t25" -"target" "t27" -"origin" "192 1488 -176" -} -{ -"classname" "path_corner" -"targetname" "t25" -"target" "t26" -"origin" "40 1768 -176" -} -{ -"classname" "path_corner" -"targetname" "t28" -"target" "t26" -"origin" "384 1768 -176" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "180" -"target" "t23" -"origin" "240 1912 -160" -} -{ -"classname" "path_corner" -"targetname" "t23" -"target" "t24" -"origin" "128 1912 -176" -} -{ -"classname" "path_corner" -"target" "t23" -"targetname" "t24" -"origin" "376 1912 -176" -} -{ -"target" "t66" -"spawnflags" "257" -"classname" "monster_soldier_light" -"angle" "90" -"targetname" "t21" -"origin" "184 1792 32" -} -{ -"model" "*35" -"classname" "trigger_multiple" -"target" "t21" -} -{ -"spawnflags" "257" -"classname" "monster_soldier_light" -"angle" "180" -"targetname" "t21" -"origin" "816 2576 32" -} -{ -"model" "*36" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t20" -} -{ -"spawnflags" "1" -"classname" "monster_infantry" -"angle" "180" -"targetname" "t20" -"origin" "-80 1896 -168" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "180" -"targetname" "t19" -"origin" "288 2528 -232" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "90" -"targetname" "t19" -"origin" "120 2088 -232" -} -{ -"angle" "135" -"classname" "monster_soldier_ss" -"target" "t18" -"origin" "416 2208 -232" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "90" -"targetname" "t18" -"target" "t19" -"origin" "352 2144 -232" -} -{ -"classname" "path_corner" -"targetname" "t16" -"target" "t17" -"origin" "-200 2000 -176" -} -{ -"classname" "path_corner" -"targetname" "t15" -"target" "t16" -"origin" "-160 2304 -176" -} -{ -"classname" "path_corner" -"targetname" "t14" -"target" "t15" -"origin" "-64 2304 -176" -} -{ -"target" "t16" -"classname" "path_corner" -"targetname" "t17" -"origin" "-200 2152 -176" -} -{ -"classname" "path_corner" -"targetname" "t13" -"target" "t14" -"origin" "272 2304 -248" -} -{ -"classname" "path_corner" -"targetname" "t12" -"target" "t13" -"origin" "384 2368 -248" -} -{ -"classname" "path_corner" -"target" "t12" -"origin" "440 2368 -248" -"targetname" "t22" -} -{ -"origin" "-120 -760 72" -"map" "base3$base2b" -"targetname" "t11" -"classname" "target_changelevel" -} -{ -"model" "*37" -"target" "t11" -"classname" "trigger_multiple" -"angle" "180" -} -{ -"classname" "target_changelevel" -"targetname" "t9" -"origin" "-912 104 -232" -"map" "base3$base2a" -} -{ -"model" "*38" -"classname" "trigger_multiple" -"target" "t9" -} -{ -"model" "*39" -"target" "t8" -"classname" "trigger_multiple" -} -{ -"origin" "856 2264 56" -"map" "base1$base2" -"targetname" "t8" -"classname" "target_changelevel" -} -{ -"origin" "480 2448 -256" -"classname" "misc_explobox" -} -{ -"origin" "544 2496 -256" -"classname" "misc_explobox" -} -{ -"origin" "-248 544 -24" -"light" "150" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "248 -1992 -84" -} -{ -"light" "64" -"classname" "light" -"origin" "56 -2040 -84" -} -{ -"light" "64" -"classname" "light" -"origin" "376 -1800 -84" -} -{ -"origin" "56 -1848 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "200 -1656 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "200 -1496 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "208 -1912 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "376 -1912 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "248 -2184 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "56 -2184 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "584 -2184 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "584 -2104 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "456 -2184 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "456 -2104 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "456 -1800 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "56 -1672 -84" -"light" "64" -"classname" "light" -} -{ -"origin" "64 -2080 32" -"classname" "light" -"light" "80" -} -{ -"origin" "64 -2208 32" -"light" "80" -"classname" "light" -} -{ -"origin" "40 -2080 160" -"classname" "light" -"light" "80" -} -{ -"origin" "40 -2208 160" -"light" "80" -"classname" "light" -} -{ -"origin" "48 -2208 104" -"classname" "light" -"light" "80" -} -{ -"origin" "48 -2080 104" -"light" "80" -"classname" "light" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"light" "150" -"classname" "light" -"origin" "352 -2288 56" -} -{ -"light" "150" -"classname" "light" -"origin" "144 -2288 56" -} -{ -"light" "150" -"classname" "light" -"origin" "160 -2064 56" -} -{ -"light" "200" -"classname" "light" -"origin" "352 -2080 56" -} -{ -"light" "120" -"classname" "light" -"origin" "352 -1968 64" -} -{ -"classname" "light" -"origin" "-4 -1596 148" -"light" "450" -} -{ -"classname" "light" -"origin" "1012 -708 124" -"light" "450" -} -{ -"origin" "280 -800 24" -"classname" "light" -"light" "80" -} -{ -"origin" "224 -800 24" -"light" "120" -"classname" "light" -} -{ -"origin" "560 -848 -88" -"classname" "light" -"light" "150" -} -{ -"origin" "832 -832 -88" -"light" "150" -"classname" "light" -} -{ -"origin" "832 -680 -136" -"classname" "light" -"light" "120" -} -{ -"origin" "560 -696 -136" -"light" "120" -"classname" "light" -} -{ -"style" "32" -"targetname" "t74" -"spawnflags" "1" -"origin" "768 -1072 80" -"light" "175" -"classname" "light" -} -{ -"origin" "920 -616 168" -"classname" "light" -"light" "100" -} -{ -"origin" "920 -616 40" -"light" "100" -"classname" "light" -} -{ -"origin" "928 -800 40" -"classname" "light" -"light" "100" -} -{ -"origin" "928 -800 168" -"light" "100" -"classname" "light" -} -{ -"model" "*40" -"origin" "450 -958 -18" -"targetname" "t6" -"distance" "90" -"spawnflags" "65" -"wait" "-1" -"speed" "35" -"classname" "func_door_rotating" -} -{ -"origin" "944 -1024 68" -"light" "150" -"classname" "light" -} -{ -"light" "450" -"origin" "-4 -1788 148" -"classname" "light" -} -{ -"classname" "func_group" -} -{ -"origin" "416 -1696 56" -"classname" "light" -"light" "150" -} -{ -"origin" "576 -1576 56" -"classname" "light" -"light" "150" -} -{ -"origin" "120 -1872 56" -"classname" "light" -"light" "150" -} -{ -"origin" "184 -1672 56" -"classname" "light" -"light" "150" -} -{ -"model" "*41" -"_minlight" ".2" -"target" "t7" -"classname" "func_button" -"angle" "0" -} -{ -"model" "*42" -"spawnflags" "2048" -"team" "1" -"classname" "func_door" -"angle" "270" -"speed" "50" -"lip" "32" -} -{ -"model" "*43" -"spawnflags" "2048" -"team" "1" -"angle" "90" -"classname" "func_door" -"speed" "50" -"lip" "32" -} -{ -"classname" "light" -"light" "64" -"origin" "904 2304 -216" -} -{ -"classname" "light" -"light" "120" -"origin" "712 2368 -184" -} -{ -"light" "120" -"classname" "light" -"origin" "712 2240 -184" -} -{ -"origin" "848 2296 -28" -"classname" "light" -"light" "150" -} -{ -"model" "*44" -"_minlight" ".2" -"targetname" "t7" -"angle" "-1" -"classname" "func_door" -} -{ -"classname" "light" -"light" "150" -"origin" "848 2360 -124" -} -{ -"light" "150" -"classname" "light" -"origin" "848 2232 -124" -} -{ -"origin" "704 2232 -160" -"light" "200" -"classname" "light" -} -{ -"classname" "func_group" -} -{ -"classname" "light" -"light" "120" -"origin" "832 -1296 80" -} -{ -"classname" "light" -"light" "120" -"origin" "696 -1296 80" -} -{ -"classname" "light" -"light" "120" -"origin" "608 -1296 80" -} -{ -"light" "120" -"classname" "light" -"origin" "480 -1296 80" -} -{ -"light" "120" -"classname" "light" -"origin" "768 -1216 80" -} -{ -"classname" "light" -"light" "120" -"origin" "344 -1296 80" -} -{ -"model" "*45" -"_minlight" ".1" -"classname" "func_door" -"angle" "-1" -"target" "t48" -} -{ -"classname" "func_group" -} -{ -"origin" "-888 92 -308" -"light" "80" -"classname" "light" -} -{ -"origin" "-888 96 -208" -"light" "80" -"classname" "light" -} -{ -"origin" "-888 92 20" -"light" "80" -"classname" "light" -} -{ -"origin" "-748 292 -208" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-696 224 -208" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-648 160 -208" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-644 56 -208" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-636 -44 -208" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-860 -68 -204" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-784 -60 -204" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-728 -4 -204" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-724 92 -204" -"classname" "light" -"light" "100" -"_color" "0.666667 1.000000 0.986928" -} -{ -"origin" "-728 184 -204" -"classname" "light" -"light" "100" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "-816 268 -208" -"_color" "0.666667 1.000000 0.986928" -"light" "100" -"classname" "light" -} -{ -"origin" "-968 -72 -96" -"classname" "light" -"light" "120" -} -{ -"origin" "-608 288 -96" -"light" "120" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-888 92 -404" -} -{ -"classname" "light" -"light" "100" -"origin" "-888 92 -108" -} -{ -"model" "*46" -"spawnflags" "2048" -"target" "t5" -"angle" "180" -"classname" "func_button" -"wait" "-1" -} -{ -"origin" "-728 96 -40" -"light" "150" -"classname" "light" -} -{ -"origin" "-896 -64 -72" -"classname" "light" -"light" "120" -} -{ -"origin" "-876 264 -108" -"classname" "light" -"light" "80" -} -{ -"origin" "-888 92 124" -"light" "64" -"classname" "light" -} -{ -"model" "*47" -"origin" "-888 180 -156" -"_minlight" ".2" -"targetname" "t5" -"wait" "-1" -"speed" "35" -"spawnflags" "64" -"distance" "-90" -"classname" "func_door_rotating" -} -{ -"model" "*48" -"origin" "-888 12 -156" -"_minlight" ".2" -"targetname" "t5" -"distance" "90" -"wait" "-1" -"speed" "35" -"spawnflags" "64" -"classname" "func_door_rotating" -} -{ -"light" "200" -"classname" "light" -"origin" "448 -768 80" -} -{ -"light" "200" -"classname" "light" -"origin" "448 -640 80" -} -{ -"classname" "light" -"light" "200" -"origin" "448 -896 80" -} -{ -"classname" "func_group" -} -{ -"light" "150" -"classname" "light" -"origin" "168 -584 96" -} -{ -"light" "150" -"classname" "light" -"origin" "168 -888 96" -} -{ -"classname" "light" -"light" "150" -"origin" "168 -768 96" -} -{ -"classname" "func_group" -} -{ -"light" "80" -"classname" "light" -"origin" "-56 -96 96" -} -{ -"classname" "light" -"light" "80" -"origin" "-48 -96 24" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"light" "120" -"classname" "light" -"origin" "188 -1048 176" -} -{ -"light" "250" -"classname" "light" -"origin" "188 -1048 96" -} -{ -"classname" "light" -"light" "120" -"origin" "188 -1048 20" -} -{ -"model" "*49" -"origin" "256 -800 -9" -"targetname" "t67" -"classname" "func_door_rotating" -"wait" "-1" -"distance" "90" -"spawnflags" "144" -"speed" "50" -"target" "t6" -"dmg" "1" -} -{ -"light" "300" -"classname" "light" -"origin" "416 -864 352" -} -{ -"light" "250" -"classname" "light" -"origin" "560 -912 112" -} -{ -"classname" "light" -"light" "300" -"origin" "416 -728 352" -} -{ -"style" "32" -"targetname" "t74" -"spawnflags" "1" -"origin" "672 -1076 16" -"classname" "light" -"light" "120" -} -{ -"style" "32" -"targetname" "t74" -"spawnflags" "1" -"origin" "864 -1076 16" -"light" "120" -"classname" "light" -} -{ -"model" "*50" -"dmg" "10" -"_minlight" ".2" -"lip" "132" -"classname" "func_plat" -} -{ -"origin" "8 1248 -28" -"light" "64" -"classname" "light" -"_color" "0.643137 0.882353 1.000000" -} -{ -"origin" "12 1312 -168" -"classname" "light" -"light" "64" -} -{ -"origin" "12 1504 -168" -"light" "64" -"classname" "light" -} -{ -"origin" "632 1376 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "632 1312 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "632 1176 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "544 1176 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "416 1184 -36" -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "352 1184 -36" -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "288 1184 -36" -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "160 1176 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "96 1176 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "8 1176 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "8 1592 -28" -"_color" "0.643137 0.882353 1.000000" -"classname" "light" -"light" "64" -} -{ -"origin" "632 1504 -28" -"_color" "0.643137 0.882353 1.000000" -"light" "64" -"classname" "light" -} -{ -"origin" "-128 1792 16" -"classname" "light" -"light" "120" -} -{ -"origin" "-128 1792 128" -"classname" "light" -"light" "120" -} -{ -"origin" "-128 1792 -88" -"light" "120" -"classname" "light" -} -{ -"model" "*51" -"origin" "-128 1792 -32" -"classname" "func_rotating" -"spawnflags" "1" -"speed" "450" -"_minlight" ".2" -} -{ -"model" "*52" -"origin" "-128 1792 184" -"_minlight" ".2" -"speed" "450" -"spawnflags" "2051" -"classname" "func_rotating" -} -{ -"origin" "-80 1408 -96" -"light" "150" -"classname" "light" -} -{ -"origin" "480 1008 48" -"light" "80" -"classname" "light" -} -{ -"origin" "200 1880 -88" -"classname" "light" -"light" "150" -} -{ -"origin" "16 1832 -88" -"classname" "light" -"light" "150" -} -{ -"origin" "-176 1928 -88" -"classname" "light" -"light" "200" -} -{ -"origin" "-176 2112 -88" -"classname" "light" -"light" "200" -} -{ -"origin" "-168 2304 -88" -"classname" "light" -"light" "200" -} -{ -"origin" "416 1864 -88" -"light" "150" -"classname" "light" -} -{ -"origin" "224 1816 88" -"classname" "light" -"light" "150" -} -{ -"origin" "416 1808 88" -"classname" "light" -"light" "150" -} -{ -"origin" "576 1816 88" -"classname" "light" -"light" "150" -} -{ -"origin" "584 1664 88" -"classname" "light" -"light" "200" -} -{ -"origin" "576 1464 88" -"classname" "light" -"light" "200" -} -{ -"origin" "432 1288 176" -"light" "200" -"classname" "light" -} -{ -"origin" "432 1472 176" -"classname" "light" -"light" "150" -} -{ -"origin" "432 1472 -32" -"classname" "light" -"light" "150" -} -{ -"origin" "432 1288 -32" -"light" "200" -"classname" "light" -} -{ -"origin" "128 1296 -32" -"light" "200" -"classname" "light" -} -{ -"origin" "128 1472 -32" -"light" "150" -"classname" "light" -} -{ -"origin" "576 1280 88" -"classname" "light" -"light" "200" -} -{ -"origin" "128 1296 176" -"classname" "light" -"light" "200" -} -{ -"origin" "128 1472 176" -"classname" "light" -"light" "150" -} -{ -"origin" "528 2136 128" -"light" "250" -"classname" "light" -} -{ -"origin" "352 2160 128" -"light" "250" -"classname" "light" -} -{ -"origin" "304 2376 128" -"light" "250" -"classname" "light" -} -{ -"light" "250" -"classname" "light" -"origin" "504 2280 128" -} -{ -"light" "250" -"classname" "light" -"origin" "616 2360 128" -} -{ -"light" "200" -"classname" "light" -"origin" "456 2248 -160" -} -{ -"light" "200" -"classname" "light" -"origin" "248 2232 -160" -} -{ -"light" "200" -"classname" "light" -"origin" "248 2464 -160" -} -{ -"light" "200" -"classname" "light" -"origin" "440 2456 -160" -} -{ -"light" "200" -"classname" "light" -"origin" "576 2464 -160" -} -{ -"origin" "568 584 40" -"classname" "light" -} -{ -"origin" "280 384 40" -"classname" "light" -} -{ -"origin" "-8 408 40" -"classname" "light" -} -{ -"origin" "-96 232 48" -"classname" "light" -} -{ -"origin" "-104 240 304" -"classname" "light" -} -{ -"origin" "-104 496 304" -"classname" "light" -} -{ -"origin" "120 336 304" -"classname" "light" -} -{ -"origin" "336 344 304" -"classname" "light" -} -{ -"origin" "624 344 304" -"classname" "light" -} -{ -"origin" "616 592 304" -"classname" "light" -} -{ -"origin" "-48 632 440" -"classname" "light" -} -{ -"origin" "768 744 440" -"classname" "light" -} -{ -"origin" "648 344 40" -"classname" "light" -} -{ -"origin" "848 2292 -224" -"angle" "180" -"classname" "info_player_start" -"targetname" "base1" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "-80 1408 148" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "-80 1408 104" -} -{ -"origin" "608 -704 24" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "608 -704 104" -} -{ -"origin" "608 -704 200" -"light" "100" -"classname" "light" -} -{ -"model" "*53" -"message" "This door is opened elsewhere." -"classname" "func_door" -"angle" "-1" -"_minlight" ".2" -"targetname" "t6" -"wait" "-1" -} -{ -"classname" "light" -"light" "64" -"origin" "-120 -800 116" -} -{ -"model" "*54" -"target" "t4" -"classname" "func_button" -"angle" "0" -} -{ -"model" "*55" -"spawnflags" "2048" -"wait" "-1" -"targetname" "t72" -"classname" "func_door" -"angle" "270" -"speed" "50" -"lip" "32" -"_minlight" ".2" -"team" "tits" -} -{ -"model" "*56" -"spawnflags" "2048" -"targetname" "t72" -"wait" "-1" -"angle" "90" -"classname" "func_door" -"speed" "50" -"lip" "32" -"_minlight" ".2" -"team" "tits" -} -{ -"classname" "light" -"light" "64" -"origin" "825 -1728 40" -} -{ -"classname" "light" -"light" "150" -"origin" "632 -1744 56" -} -{ -"light" "150" -"classname" "light" -"origin" "576 -1872 56" -} -{ -"light" "150" -"classname" "light" -"origin" "592 -2272 56" -} -{ -"model" "*57" -"classname" "func_door" -"angle" "-2" -"targetname" "t4" -"_minlight" ".2" -} -{ -"origin" "576 -2096 56" -"classname" "light" -"light" "150" -} -{ -"light" "64" -"classname" "light" -"origin" "648 -1848 -84" -} -{ -"light" "64" -"classname" "light" -"origin" "648 -1928 -84" -} -{ -"light" "64" -"classname" "light" -"origin" "584 -2104 -84" -} -{ -"light" "64" -"classname" "light" -"origin" "584 -2184 -84" -} -{ -"classname" "light" -"light" "80" -"origin" "632 -1800 104" -} -{ -"light" "80" -"classname" "light" -"origin" "632 -1720 104" -} -{ -"classname" "light" -"light" "80" -"origin" "632 -1720 248" -} -{ -"light" "80" -"classname" "light" -"origin" "632 -1800 248" -} -{ -"classname" "light" -"light" "80" -"origin" "632 -1720 168" -} -{ -"light" "80" -"classname" "light" -"origin" "632 -1800 168" -} -{ -"classname" "light" -"light" "150" -"origin" "776 -1824 120" -} -{ -"light" "150" -"classname" "light" -"origin" "776 -1696 120" -} -{ -"spawnflags" "1" -"origin" "800 -1836 40" -"map" "eou1_.cin+*bunk1$start" -"classname" "target_changelevel" -"targetname" "t69" -} -{ -"classname" "misc_gib_head" -"origin" "600 -1816 -80" -} -{ -"classname" "item_quad" -"origin" "624 -2192 88" -} -{ -"classname" "light" -"light" "130" -"origin" "624 -1888 96" -} -{ -"light" "130" -"classname" "light" -"origin" "624 -1632 96" -} -{ -"classname" "trigger_relay" -"targetname" "t4" -"delay" "1" -"target" "t69" -"origin" "800 -1816 64" -} -{ -"model" "*58" -"spawnflags" "2048" -"message" "This is the end of the unit." -"classname" "trigger_once" -} -{ -"model" "*59" -"wait" "-1" -"target" "t72" -"angle" "0" -"classname" "func_button" -} -{ -"origin" "744 -2272 -72" -"targetname" "t73" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"model" "*60" -"spawnflags" "2048" -"_minlight" ".1" -"targetname" "t73" -"classname" "func_door" -"angle" "-2" -"wait" "-1" -"speed" "200" -} -{ -"targetname" "t73" -"classname" "monster_soldier_light" -"angle" "180" -"origin" "696 -2272 -72" -} -{ -"model" "*61" -"spawnflags" "2048" -"_minlight" ".1" -"targetname" "t73" -"classname" "func_door" -"angle" "-2" -"wait" "-1" -"speed" "200" -} -{ -"targetname" "t73" -"classname" "monster_soldier_light" -"angle" "180" -"origin" "696 -2016 -72" -} -{ -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/amb12.wav" -"origin" "776 -1760 -56" -} -{ -"origin" "616 -1864 48" -"targetname" "t72" -"classname" "target_goal" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/base3@1597.ent b/stuff/mapfixes/baseq2/base3@1597.ent deleted file mode 100644 index e7bd9865e..000000000 --- a/stuff/mapfixes/baseq2/base3@1597.ent +++ /dev/null @@ -1,4958 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed a messed-up explosive box model -// -// The offending box is func_explosive (1757). The model -// is inline so it can't be fixed from the entity string, -// but it is possible to reference one of the other 3 -// and apply an offset (for inline models, the "origin" -// field acts as such). Changed model *17 to *16 and -// applied an offset of -160 -32 0 -{ -"sky" "unit1_" -"sounds" "2" -"message" "Comm Center" -"classname" "worldspawn" -"spawnflags" "0" -"nextmap" "bunk1" -} -{ -"origin" "2088 800 -300" -"targetname" "t108" -"spawnflags" "771" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "668 992 -1032" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "740 992 -1032" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"classname" "item_invulnerability" -"spawnflags" "1792" -"origin" "1912 1424 -544" -} -{ -"model" "*1" -"targetname" "t44" -"target" "t176" -"classname" "trigger_once" -} -{ -"angle" "180" -"spawnflags" "769" -"classname" "monster_soldier_ss" -"origin" "1696 32 -488" -} -{ -"classname" "monster_soldier_ss" -"spawnflags" "769" -"angle" "180" -"origin" "1688 -96 -488" -} -{ -"classname" "monster_soldier_ss" -"angle" "0" -"spawnflags" "257" -"target" "t174" -"origin" "1464 -160 -480" -} -{ -"classname" "path_corner" -"targetname" "t174" -"target" "t175" -"origin" "1496 -160 -496" -} -{ -"classname" "path_corner" -"target" "t174" -"targetname" "t175" -"origin" "1632 -160 -496" -} -{ -"spawnflags" "768" -"angle" "0" -"classname" "monster_soldier_light" -"origin" "608 96 -232" -} -{ -"classname" "monster_soldier_light" -"angle" "270" -"spawnflags" "768" -"origin" "992 224 -232" -} -{ -"origin" "100 1708 -848" -"targetname" "train" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "96 1768 -848" -"targetname" "train" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "160 1768 -848" -"targetname" "train" -"angle" "270" -"classname" "info_player_coop" -} -{ -"classname" "info_player_coop" -"targetname" "base2b" -"origin" "2224 904 -296" -} -{ -"classname" "info_player_coop" -"targetname" "base2b" -"origin" "2248 960 -296" -} -{ -"classname" "info_player_coop" -"targetname" "base2b" -"origin" "2256 848 -296" -} -{ -"angle" "180" -"classname" "info_player_coop" -"targetname" "base2a" -"origin" "1576 1408 -800" -} -{ -"angle" "180" -"classname" "info_player_coop" -"targetname" "base2a" -"origin" "1624 1408 -800" -} -{ -"classname" "info_player_coop" -"angle" "180" -"targetname" "base2a" -"origin" "1528 1408 -800" -} -{ -"origin" "832 80 -420" -"targetname" "t108" -"spawnflags" "770" -"angle" "0" -"classname" "monster_gunner" -} -{ -"origin" "744 -576 -228" -"targetname" "t108" -"angle" "180" -"spawnflags" "770" -"classname" "monster_gunner" -} -{ -"origin" "64 -472 -228" -"targetname" "t108" -"spawnflags" "770" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "-40 -896 -280" -"targetname" "t100" -"spawnflags" "769" -"angle" "180" -"classname" "monster_parasite" -} -{ -"origin" "-680 -856 -272" -"target" "t172" -"spawnflags" "768" -"angle" "0" -"classname" "monster_gunner" -} -{ -"origin" "-448 -856 -288" -"targetname" "t173" -"target" "t172" -"classname" "path_corner" -} -{ -"origin" "-648 -856 -288" -"target" "t173" -"targetname" "t172" -"classname" "path_corner" -} -{ -"classname" "target_speaker" -"targetname" "t171" -"noise" "world/voice5.wav" -"spawnflags" "2048" -"attenuation" "-1" -"origin" "784 -288 -208" -} -{ -"model" "*2" -"classname" "trigger_once" -"spawnflags" "2048" -"target" "t171" -} -{ -"spawnflags" "2048" -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/v_bas5.wav" -"targetname" "t170" -"origin" "1384 -264 -440" -} -{ -"model" "*3" -"classname" "trigger_once" -"target" "t170" -} -{ -"classname" "target_speaker" -"noise" "world/v_bas4.wav" -"attenuation" "-1" -"targetname" "t169" -"spawnflags" "2048" -"origin" "1432 1464 -784" -} -{ -"model" "*4" -"classname" "trigger_once" -"spawnflags" "2048" -"target" "t169" -} -{ -"classname" "trigger_relay" -"delay" "1" -"target" "t168" -"spawnflags" "2048" -"targetname" "t29" -"origin" "1564 52 -292" -} -{ -"wait" "61" -"classname" "func_timer" -"target" "t167" -"targetname" "t168" -"spawnflags" "2048" -"origin" "1564 76 -292" -} -{ -"noise" "world/flyby2.wav" -"attenuation" "-1" -"classname" "target_speaker" -"targetname" "t167" -"spawnflags" "2048" -"origin" "1564 100 -292" -} -{ -"classname" "func_timer" -"wait" "60" -"target" "t166" -"spawnflags" "2048" -"targetname" "t29" -"origin" "1536 76 -292" -} -{ -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/flyby1.wav" -"targetname" "t166" -"spawnflags" "2048" -"origin" "1536 100 -292" -} -{ -"origin" "-152 -340 -164" -"target" "t165" -"targetname" "t101" -"classname" "trigger_relay" -} -{ -"origin" "-136 -340 -164" -"target" "t165" -"targetname" "t101" -"delay" "0.1" -"classname" "trigger_relay" -} -{ -"style" "32" -"origin" "-148 -320 -176" -"targetname" "t165" -"spawnflags" "1" -"light" "100" -"classname" "light" -} -{ -"origin" "-416 -312 -320" -"light" "80" -"classname" "light" -} -{ -"origin" "-424 -552 -224" -"spawnflags" "1792" -"target" "t164" -"classname" "trigger_always" -} -{ -"origin" "-424 -504 -224" -"targetname" "t164" -"delay" "5" -"target" "t145" -"classname" "trigger_relay" -} -{ -"origin" "272 1736 -856" -"target" "t163" -"spawnflags" "1792" -"angle" "225" -"classname" "misc_teleporter" -} -{ -"origin" "-784 -912 -280" -"spawnflags" "1792" -"targetname" "t163" -"angle" "45" -"classname" "misc_teleporter_dest" -} -{ -"origin" "-512 -368 -200" -"target" "t108" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"targetname" "t176" -"classname" "target_secret" -"message" "You have found a secret level." -"origin" "32 1712 -824" -} -{ -"classname" "info_player_deathmatch" -"angle" "315" -"origin" "296 1188 -808" -} -{ -"origin" "1616 24 -504" -"classname" "item_armor_shard" -} -{ -"origin" "1616 -16 -504" -"classname" "item_armor_shard" -} -{ -"origin" "1616 64 -504" -"classname" "item_armor_shard" -} -{ -"origin" "1616 -96 -440" -"spawnflags" "1792" -"team" "lita" -"classname" "item_adrenaline" -} -{ -"team" "lita" -"origin" "1616 -96 -440" -"spawnflags" "1792" -"classname" "item_health_mega" -} -{ -"model" "*5" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "1372 1668 -944" -"spawnflags" "1792" -"classname" "item_adrenaline" -} -{ -"model" "*6" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "-120 -248 -232" -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -} -{ -"origin" "328 -832 -240" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"origin" "328 -752 -240" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "288 -792 -240" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "800 -544 -240" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "800 -608 -240" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-8 1736 -864" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"spawnflags" "1792" -"origin" "136 1664 -864" -"classname" "weapon_rocketlauncher" -} -{ -"spawnflags" "1792" -"origin" "784 -1248 -680" -"classname" "ammo_cells" -} -{ -"spawnflags" "1792" -"origin" "704 -1248 -680" -"classname" "ammo_cells" -} -{ -"origin" "744 -1208 -680" -"spawnflags" "1792" -"classname" "weapon_bfg" -} -{ -"origin" "-640 -704 -288" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-600 -744 -288" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-640 -744 -288" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-600 -704 -288" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-544 -376 -272" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "1232 -96 -488" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "1896 904 -472" -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -} -{ -"origin" "1392 360 -472" -"classname" "ammo_cells" -"spawnflags" "1792" -} -{ -"origin" "1432 360 -472" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "96 612 -912" -"spawnflags" "1792" -"classname" "item_silencer" -} -{ -"origin" "-20 580 -608" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-20 616 -608" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-20 544 -608" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "416 284 -912" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"model" "*7" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "624 -160 -232" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "24 1632 -856" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "608 600 -808" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "2120 592 -464" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "520 -1088 -480" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "-288 -928 -280" -} -{ -"classname" "info_player_deathmatch" -"angle" "315" -"origin" "-352 -1048 -280" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "224 -864 -232" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "152 -424 -488" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "40 112 -800" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "1168 1616 -808" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "2208 744 -304" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "1824 -224 -280" -} -{ -"classname" "info_player_intermission" -"angles" "35 215 0" -"origin" "1064 -480 -172" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t138" -"origin" "1528 328 -360" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "256 1704 -864" -} -{ -"classname" "ammo_bullets" -"spawnflags" "2048" -"origin" "224 1744 -864" -} -{ -"classname" "item_armor_shard" -"origin" "628 1184 -816" -} -{ -"classname" "item_armor_shard" -"origin" "592 1184 -816" -} -{ -"classname" "item_armor_shard" -"origin" "556 1184 -816" -} -{ -"origin" "-416 -312 -248" -"light" "80" -"classname" "light" -} -{ -"classname" "ammo_grenades" -"origin" "1416 1672 -944" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "1" -"origin" "1440 1640 -960" -} -{ -"classname" "func_timer" -"wait" "30" -"random" "10" -"spawnflags" "1" -"target" "t162" -"origin" "-88 -1248 -168" -} -{ -"noise" "world/battle1.wav" -"classname" "target_speaker" -"targetname" "t162" -"origin" "-96 -1272 -168" -} -{ -"spawnflags" "1" -"random" "3" -"wait" "7" -"classname" "func_timer" -"target" "t161" -"origin" "-176 -1224 -176" -} -{ -"classname" "target_speaker" -"noise" "world/battle4.wav" -"targetname" "t161" -"origin" "-168 -1248 -176" -} -{ -"noise" "world/battle3.wav" -"classname" "target_speaker" -"targetname" "t159" -"origin" "1304 -128 -440" -"spawnflags" "2048" -"attenuation" "-1" -} -{ -"noise" "world/battle4.wav" -"classname" "target_speaker" -"targetname" "t160" -"origin" "1368 80 -440" -"attenuation" "-1" -"spawnflags" "2048" -} -{ -"noise" "world/battle1.wav" -"classname" "target_speaker" -"targetname" "t157" -"origin" "1648 136 -440" -"spawnflags" "2048" -"attenuation" "-1" -} -{ -"classname" "target_speaker" -"noise" "world/battle1.wav" -"targetname" "t158" -"origin" "1656 -160 -440" -"attenuation" "-1" -"spawnflags" "2048" -} -{ -"spawnflags" "1" -"random" "6" -"wait" "20" -"classname" "func_timer" -"target" "t159" -"origin" "1304 -160 -440" -} -{ -"spawnflags" "1" -"random" "10" -"wait" "30" -"classname" "func_timer" -"target" "t158" -"origin" "1664 -136 -440" -} -{ -"spawnflags" "1" -"random" "6" -"wait" "10" -"classname" "func_timer" -"target" "t157" -"origin" "1632 160 -440" -} -{ -"classname" "func_timer" -"wait" "7" -"random" "3" -"spawnflags" "1" -"target" "t160" -"origin" "1360 96 -440" -} -{ -"classname" "monster_soldier_ss" -"angle" "270" -"origin" "1374 -192 -480" -} -{ -"classname" "monster_soldier_ss" -"angle" "90" -"target" "t156" -"spawnflags" "1" -"origin" "1344 -100 -480" -} -{ -"classname" "path_corner" -"targetname" "t155" -"target" "t156" -"origin" "1344 -128 -496" -} -{ -"classname" "path_corner" -"target" "t155" -"targetname" "t156" -"origin" "1344 128 -496" -} -{ -"origin" "-288 -648 -176" -"targetname" "t154" -"noise" "world/brkglas.wav" -"classname" "target_speaker" -} -{ -"origin" "-288 -696 -176" -"target" "t154" -"targetname" "t153" -"classname" "trigger_relay" -} -{ -"origin" "-384 -736 -176" -"targetname" "t153" -"target" "t142" -"classname" "trigger_relay" -} -{ -"origin" "-800 -824 -296" -"targetname" "t151" -"classname" "point_combat" -} -{ -"origin" "-800 -536 -280" -"targetname" "t142" -"target" "t151" -"angle" "270" -"classname" "monster_soldier" -} -{ -"origin" "1168 712 -808" -"classname" "ammo_shells" -} -{ -"origin" "1144 678 -808" -"classname" "ammo_shells" -} -{ -"origin" "992 -1096 -488" -"classname" "ammo_bullets" -} -{ -"origin" "-40 168 -816" -"classname" "ammo_rockets" -"spawnflags" "1792" -} -{ -"origin" "1824 1052 -460" -"classname" "ammo_grenades" -} -{ -"spawnflags" "1024" -"origin" "-32 -216 -232" -"classname" "ammo_grenades" -} -{ -"spawnflags" "1792" -"origin" "-72 -216 -232" -"classname" "ammo_grenades" -} -{ -"origin" "1152 160 -488" -"classname" "item_health_large" -} -{ -"spawnflags" "1536" -"origin" "1144 -136 -488" -"classname" "ammo_bullets" -} -{ -"origin" "1144 -96 -488" -"classname" "ammo_bullets" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2" -"angle" "45" -"origin" "260 1652 -880" -} -{ -"classname" "light" -"light" "64" -"origin" "2292 800 -312" -} -{ -"origin" "152 1668 -832" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -} -{ -"origin" "152 1568 -832" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -} -{ -"origin" "152 1464 -832" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -} -{ -"origin" "180 1724 -880" -"angle" "315" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"classname" "func_group" -} -{ -"model" "*8" -"wait" "-1" -"target" "t135" -"targetname" "lita" -"angle" "90" -"classname" "func_button" -"spawnflags" "2048" -} -{ -"classname" "ammo_shells" -"origin" "1512 648 -472" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"message" "This item must be activated to use it." -"targetname" "t150" -"origin" "680 696 -776" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"message" "This item must be activated to use it." -"targetname" "t149" -"origin" "1048 -720 -328" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"targetname" "t148" -"message" "This item must be activated to use it." -"origin" "408 568 -512" -} -{ -"origin" "1824 992 -452" -"light" "64" -"classname" "light" -} -{ -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/lite_on1.wav" -"targetname" "t135" -"origin" "664 224 -384" -} -{ -"classname" "target_speaker" -"targetname" "t147" -"spawnflags" "2048" -"attenuation" "-1" -"noise" "world/uplink2.wav" -"origin" "-584 -360 -264" -} -{ -"classname" "ammo_shells" -"origin" "-756 -692 -288" -} -{ -"classname" "ammo_shells" -"origin" "104 -552 -232" -} -{ -"classname" "ammo_shells" -"origin" "1568 -288 -488" -} -{ -"classname" "ammo_shells" -"origin" "8 704 -816" -} -{ -"spawnflags" "2048" -"classname" "item_adrenaline" -"origin" "744 -1216 -680" -} -{ -"origin" "-664 -328 -88" -"spawnflags" "1" -"targetname" "t108" -"classname" "target_crosslevel_trigger" -} -{ -"origin" "-616 -400 -256" -"message" "Primary unit objective\ncompleted." -"spawnflags" "1" -"targetname" "t141" -"classname" "target_help" -} -{ -"message" "Locate communication center." -"origin" "1640 1416 -768" -"targetname" "t146" -"classname" "target_help" -} -{ -"model" "*9" -"target" "t146" -"classname" "trigger_once" -} -{ -"classname" "ammo_bullets" -"origin" "1184 -96 -488" -} -{ -"spawnflags" "1536" -"classname" "ammo_bullets" -"origin" "1184 -136 -488" -} -{ -"origin" "1640 328 -440" -"targetname" "t143" -"classname" "target_goal" -} -{ -"origin" "-472 -368 -264" -"targetname" "t108" -"classname" "target_goal" -} -{ -"classname" "ammo_grenades" -"origin" "1824 1012 -460" -} -{ -"classname" "light" -"light" "64" -"origin" "1824 1056 -452" -} -{ -"spawnflags" "2048" -"classname" "target_speaker" -"targetname" "t132" -"attenuation" "-1" -"origin" "-540 28 -168" -"noise" "world/dish1.wav" -} -{ -"origin" "-296 -444 -232" -"targetname" "t145" -"target" "t144" -"classname" "trigger_relay" -} -{ -"targetname" "t144" -"noise" "world/l_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-284 -418 -254" -} -{ -"targetname" "t144" -"origin" "-542 -420 -254" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/l_hum1.wav" -} -{ -"targetname" "t144" -"origin" "-812 -416 -256" -"noise" "world/l_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"dmg" "100" -"targetname" "t145" -"origin" "-266 -400 -280" -"classname" "target_laser" -"spawnflags" "3" -"angle" "180" -} -{ -"dmg" "100" -"targetname" "t145" -"origin" "-266 -400 -232" -"angle" "180" -"spawnflags" "3" -"classname" "target_laser" -} -{ -"angle" "225" -"classname" "monster_flyer" -"spawnflags" "3" -"targetname" "t108" -"origin" "1728 184 -264" -} -{ -"angle" "225" -"classname" "monster_flyer" -"spawnflags" "3" -"targetname" "t108" -"origin" "1648 304 -328" -} -{ -"classname" "monster_flyer" -"angle" "225" -"spawnflags" "259" -"targetname" "t108" -"origin" "1704 256 -224" -} -{ -"origin" "2096 1072 -288" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "1744 888 -424" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "1376 -344 -448" -} -{ -"origin" "1672 360 -424" -"targetname" "t143" -"classname" "target_help" -"message" "Locate unit exit\nand kill all resistance." -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-704 -496 -264" -} -{ -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-624 -584 -264" -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-696 -752 -264" -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "104 -1120 -216" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -"origin" "56 -552 -216" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb11.wav" -"origin" "-792 -600 -264" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "208 -768 -216" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "200 -392 -216" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-152 -648 -216" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/spark2.wav" -"origin" "-64 -248 -176" -} -{ -"origin" "-208 -896 -216" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-440 -1144 -216" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "8 -1208 -216" -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "296 -880 -216" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -"origin" "64 -840 -216" -} -{ -"origin" "760 -408 -168" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "752 -248 -168" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-416 -240 -240" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"origin" "-544 -336 -240" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "1600 472 -448" -} -{ -"origin" "2080 744 -288" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "480 -784 -384" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb12.wav" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-64 -248 -216" -} -{ -"origin" "-552 -1032 -216" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"spawnflags" "1" -"origin" "272 1056 -760" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "992 1152 -760" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"origin" "600 744 -760" -"spawnflags" "1" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/spark2.wav" -"origin" "1152 704 -736" -} -{ -"origin" "648 -160 -376" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "920 -168 -376" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "1024 -480 -376" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/bigpump2.wav" -} -{ -"origin" "312 -352 -456" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "1376 -576 -448" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/curnt2.wav" -"origin" "672 1192 -912" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "472 -344 -456" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "1608 352 -448" -} -{ -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "656 200 -376" -} -{ -"noise" "world/bigpump2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1192 -960 -376" -} -{ -"noise" "world/amb15.wav" -"classname" "target_speaker" -"origin" "744 -1224 -584" -} -{ -"classname" "target_speaker" -"noise" "world/amb15.wav" -"origin" "736 -904 -680" -} -{ -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "480 -568 -384" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb12.wav" -"origin" "480 -952 -384" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "176 488 -616" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "328 352 -616" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "328 480 -616" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "176 352 -616" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "64 1320 -832" -} -{ -"noise" "world/amb13.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-24 1672 -812" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-24 1736 -864" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "104 1144 -824" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "72 1224 -824" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "72 1224 -992" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "176 1112 -992" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "264 1096 -992" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "304 1176 -992" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "416 1136 -992" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "680 1160 -984" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "752 1032 -984" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1128 712 -776" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "952 1144 -776" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1168 1512 -776" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1152 1248 -776" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1064 1352 -776" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1360 1680 -776" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1392 1408 -800" -} -{ -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "1648 1408 -776" -} -{ -"origin" "128 1384 -824" -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -} -{ -"classname" "item_health" -"origin" "-336 -608 -280" -} -{ -"classname" "item_health" -"origin" "1120 1632 -816" -} -{ -"classname" "item_health" -"origin" "1120 1584 -816" -} -{ -"origin" "32 480 -816" -"classname" "item_health_large" -} -{ -"origin" "-612 -360 -264" -"targetname" "t108" -"classname" "trigger_relay" -"delay" "7" -"target" "t147" -} -{ -"model" "*10" -"mass" "100" -"targetname" "t100" -"dmg" "1" -"classname" "func_explosive" -} -{ -"origin" "808 -112 -236" -"classname" "item_health_small" -} -{ -"origin" "808 -148 -236" -"classname" "item_health_small" -} -{ -"origin" "1012 -64 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "1012 -160 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "928 -180 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "608 -180 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "628 244 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "588 228 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "588 96 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "588 -32 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "1012 60 -216" -"light" "80" -"classname" "light" -} -{ -"origin" "608 -160 -428" -"classname" "item_health" -} -{ -"style" "33" -"origin" "640 238 -412" -"targetname" "t135" -"light" "150" -"classname" "light" -} -{ -"model" "*11" -"classname" "trigger_once" -"target" "t142" -} -{ -"classname" "target_help" -"targetname" "t141" -"message" "Use blue key-card to enter\nalien bunker installation." -"origin" "-656 -400 -256" -} -{ -"classname" "trigger_relay" -"targetname" "t108" -"delay" "4" -"target" "t141" -"origin" "-656 -360 -264" -} -{ -"spawnflags" "2048" -"classname" "key_blue_key" -"origin" "-416 -312 -320" -} -{ -"origin" "2208 1048 -304" -"classname" "item_health_small" -} -{ -"origin" "2208 1008 -304" -"classname" "item_health_small" -} -{ -"origin" "2016 1056 -472" -"classname" "ammo_bullets" -} -{ -"origin" "1976 1056 -472" -"classname" "ammo_bullets" -} -{ -"origin" "928 160 -400" -"delay" ".3" -"targetname" "t135" -"target" "t140" -"classname" "trigger_relay" -} -{ -"origin" "1168 -1048 -488" -"classname" "item_health" -} -{ -"origin" "1128 -1048 -488" -"classname" "item_health" -} -{ -"origin" "1008 -1096 -448" -"light" "80" -"classname" "light" -} -{ -"origin" "344 -792 -200" -"light" "80" -"classname" "light" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "368 -792 -240" -} -{ -"origin" "-72 -280 -232" -"classname" "item_health_small" -} -{ -"origin" "-32 -280 -232" -"classname" "item_health_small" -} -{ -"origin" "-336 -672 -280" -"classname" "item_health_large" -} -{ -"origin" "-756 -728 -288" -"classname" "ammo_shells" -} -{ -"origin" "112 1224 -840" -"targetname" "t139" -"classname" "target_secret" -"message" "You have found a secret area." -} -{ -"model" "*12" -"target" "t139" -"classname" "trigger_once" -} -{ -"spawnflags" "1792" -"origin" "288 1600 -864" -"classname" "item_armor_jacket" -} -{ -"origin" "72 1304 -824" -"light" "100" -"classname" "light" -} -{ -"origin" "648 656 -816" -"classname" "item_breather" -"target" "t150" -} -{ -"origin" "464 648 -792" -"classname" "light" -"light" "80" -} -{ -"origin" "464 528 -792" -"light" "80" -"classname" "light" -} -{ -"classname" "item_health" -"origin" "496 656 -816" -} -{ -"classname" "item_health" -"origin" "496 704 -816" -} -{ -"model" "*13" -"target" "t137" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"origin" "1528 372 -364" -"item" "key_blue_key" -"target" "t138" -"targetname" "t137" -"classname" "trigger_key" -} -{ -"classname" "ammo_shells" -"origin" "844 -160 -432" -} -{ -"classname" "point_combat" -"targetname" "t136" -"origin" "-192 -448 -248" -} -{ -"classname" "light" -"light" "80" -"origin" "464 544 -512" -} -{ -"classname" "item_quad" -"origin" "464 544 -544" -"target" "t148" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "16" -"angle" "90" -"origin" "368 112 -624" -} -{ -"classname" "light" -"light" "150" -"origin" "744 -1216 -640" -} -{ -"model" "*14" -"dmg" "50" -"classname" "func_explosive" -"targetname" "t135" -"spawnflags" "2048" -} -{ -"model" "*15" -"targetname" "t140" -"dmg" "75" -"classname" "func_explosive" -"spawnflags" "2048" -} -{ -"model" "*16" -"dmg" "75" -"classname" "func_explosive" -"targetname" "t135" -"spawnflags" "2048" -} -{ -"model" "*16" // was *17 -"origin" "-160 -32 0" // added this -"targetname" "t140" -"classname" "func_explosive" -"dmg" "50" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "64" -"origin" "648 -96 -372" -} -{ -"classname" "light" -"light" "80" -"origin" "1064 32 -324" -} -{ -"model" "*18" -"classname" "trigger_once" -"target" "lita" -} -{ -"origin" "996 -96 -372" -"light" "64" -"classname" "light" -} -{ -"origin" "992 192 -372" -"light" "64" -"classname" "light" -} -{ -"origin" "652 32 -372" -"light" "64" -"classname" "light" -} -{ -"origin" "720 -56 -372" -"light" "64" -"classname" "light" -} -{ -"origin" "616 -96 -424" -"light" "64" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "592 -536 -336" -} -{ -"classname" "light" -"light" "150" -"origin" "600 -576 -416" -} -{ -"light" "120" -"classname" "light" -"origin" "1504 -240 -440" -} -{ -"classname" "light" -"light" "120" -"origin" "1248 -240 -440" -} -{ -"origin" "992 -888 -440" -"light" "130" -"classname" "light" -} -{ -"origin" "904 -712 -440" -"light" "130" -"classname" "light" -} -{ -"origin" "832 -744 -440" -"light" "130" -"classname" "light" -} -{ -"origin" "632 -892 -572" -"light" "150" -"classname" "light" -} -{ -"origin" "740 -1000 -572" -"classname" "light" -"light" "150" -} -{ -"origin" "828 -892 -572" -"classname" "light" -"light" "150" -} -{ -"origin" "744 -752 -572" -"classname" "light" -"light" "150" -} -{ -"light" "80" -"classname" "light" -"origin" "120 464 -768" -} -{ -"origin" "120 552 -768" -"classname" "light" -"light" "80" -} -{ -"origin" "128 336 -768" -"light" "80" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "32 528 -768" -} -{ -"classname" "light" -"light" "100" -"origin" "40 400 -768" -} -{ -"light" "64" -"classname" "light" -"origin" "32 784 -736" -} -{ -"classname" "light" -"light" "64" -"origin" "-24 744 -736" -} -{ -"light" "80" -"classname" "light" -"origin" "176 704 -720" -} -{ -"light" "100" -"classname" "light" -"origin" "64 704 -704" -} -{ -"light" "100" -"classname" "light" -"origin" "64 424 -576" -} -{ -"light" "100" -"classname" "light" -"origin" "72 504 -624" -} -{ -"light" "100" -"classname" "light" -"origin" "64 584 -656" -} -{ -"classname" "light" -"light" "180" -"origin" "738 1092 -736" -} -{ -"light" "150" -"classname" "light" -"origin" "344 648 -512" -} -{ -"light" "100" -"classname" "light" -"origin" "392 696 -408" -} -{ -"light" "100" -"classname" "light" -"origin" "360 224 -728" -} -{ -"light" "100" -"classname" "light" -"origin" "240 216 -728" -} -{ -"light" "80" -"classname" "light" -"origin" "192 136 -728" -} -{ -"light" "100" -"classname" "light" -"origin" "40 144 -728" -} -{ -"light" "100" -"classname" "light" -"origin" "0 192 -728" -} -{ -"light" "100" -"classname" "light" -"origin" "0 416 -728" -} -{ -"light" "100" -"classname" "light" -"origin" "-48 416 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "-48 160 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "96 96 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "256 96 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "424 96 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "496 160 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "496 416 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "496 672 -672" -} -{ -"light" "80" -"classname" "light" -"origin" "384 816 -672" -} -{ -"light" "80" -"classname" "light" -"origin" "256 816 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "96 816 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "-48 672 -672" -} -{ -"classname" "light" -"light" "80" -"origin" "456 256 -728" -} -{ -"origin" "64 640 -440" -"classname" "light" -"light" "250" -} -{ -"classname" "light" -"light" "80" -"origin" "904 664 -736" -} -{ -"classname" "light" -"light" "200" -"origin" "268 1056 -760" -} -{ -"light" "100" -"classname" "light" -"origin" "1152 1328 -776" -} -{ -"light" "100" -"classname" "light" -"origin" "1152 1472 -776" -} -{ -"light" "100" -"classname" "light" -"origin" "1152 1584 -776" -} -{ -"classname" "light" -"light" "80" -"origin" "1256 1600 -808" -} -{ -"light" "64" -"classname" "light" -"origin" "1472 1616 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1408 1616 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1408 1544 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1408 1472 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1408 1400 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1408 1328 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1336 1328 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1336 1392 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1336 1464 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1336 1536 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1336 1616 -840" -} -{ -"light" "64" -"classname" "light" -"origin" "1336 1680 -840" -} -{ -"classname" "light" -"light" "64" -"origin" "1464 1544 -840" -} -{ -"classname" "light" -"light" "80" -"origin" "-708 -288 -232" -} -{ -"light" "80" -"classname" "light" -"origin" "48 -1248 -168" -} -{ -"light" "80" -"classname" "light" -"origin" "48 -1248 -264" -} -{ -"light" "80" -"classname" "light" -"origin" "92 -1144 -228" -} -{ -"light" "80" -"classname" "light" -"origin" "56 -1180 -228" -} -{ -"light" "80" -"classname" "light" -"origin" "-164 -1092 -260" -} -{ -"origin" "100 -1204 -168" -"classname" "light" -"light" "80" -} -{ -"origin" "-276 -1052 -260" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-224 -1108 -260" -} -{ -"origin" "-224 -1108 -200" -"light" "80" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "-112 -1044 -260" -} -{ -"classname" "light" -"light" "80" -"origin" "-276 -1052 -200" -} -{ -"model" "*19" -"target" "t153" -"classname" "func_explosive" -"health" "10" -"mass" "100" -"dmg" "1" -} -{ -"classname" "trigger_relay" -"targetname" "t133" -"target" "t134" -"origin" "-436 -280 -212" -"delay" "3" -} -{ -"classname" "trigger_relay" -"target" "t133" -"targetname" "t108" -"origin" "-456 -280 -212" -"delay" "3" -} -{ -"model" "*20" -"classname" "func_door" -"angle" "-1" -"wait" "-1" -"targetname" "t134" -"_minlight" ".5" -} -{ -"model" "*21" -"classname" "func_door" -"angle" "90" -"wait" "-1" -"lip" "-2" -"targetname" "t133" -} -{ -"classname" "trigger_relay" -"target" "t132" -"delay" "2" -"targetname" "t108" -"origin" "-536 -8 -168" -} -{ -"origin" "-756 -236 -232" -"light" "80" -"classname" "light" -} -{ -"origin" "-736 -336 -256" -"light" "64" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "-532 -269 -272" -} -{ -"classname" "light" -"light" "64" -"origin" "-556 -269 -272" -} -{ -"style" "34" -"spawnflags" "1" -"light" "120" -"classname" "light" -"targetname" "t131" -"origin" "-480 -280 -64" -} -{ -"style" "34" -"spawnflags" "1" -"light" "120" -"classname" "light" -"targetname" "t131" -"origin" "-608 -284 -64" -} -{ -"style" "34" -"classname" "light" -"light" "120" -"targetname" "t131" -"spawnflags" "1" -"origin" "-412 -280 -64" -} -{ -"classname" "trigger_relay" -"targetname" "t109" -"delay" "1" -"target" "t131" -"origin" "-552 -292 -76" -} -{ -"classname" "light" -"light" "80" -"origin" "-752 -236 -160" -} -{ -"style" "35" -"classname" "light" -"light" "150" -"targetname" "t108" -"origin" "-488 -312 -224" -"spawnflags" "1" -} -{ -"model" "*22" -"targetname" "t22" -"spawnflags" "1" -"angle" "-2" -"classname" "func_water" -"lip" "32" -"speed" "50" -"wait" "240" -} -{ -"origin" "1016 -760 -368" -"classname" "item_enviro" -"target" "t149" -} -{ -"style" "1" -"targetname" "t130" -"classname" "func_areaportal" -} -{ -"model" "*23" -"target" "t130" -"_minlight" ".2" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "1688 1412 -784" -"angle" "180" -"classname" "info_player_start" -} -{ -"origin" "1108 32 -252" -"classname" "misc_banner" -"spawnflags" "2048" -} -{ -"origin" "-640 -24 -200" -"light" "100" -"classname" "light" -} -{ -"target" "t145" -"origin" "-536 -472 -272" -"spawnflags" "1" -"angle" "90" -"classname" "monster_gunner" -"targetname" "t142" -} -{ -"classname" "light" -"light" "150" -"origin" "-640 -24 -296" -} -{ -"classname" "misc_satellite_dish" -"angle" "0" -"origin" "-640 -16 -236" -"targetname" "t132" -} -{ -"origin" "496 608 -816" -"classname" "item_health" -} -{ -"origin" "1696 944 -464" -"classname" "item_health" -} -{ -"origin" "1696 896 -464" -"classname" "item_health" -} -{ -"origin" "40 -1248 -288" -"classname" "item_health" -} -{ -"origin" "-32 -1248 -288" -"classname" "item_health" -} -{ -"classname" "light" -"light" "150" -"origin" "-520 -640 -200" -} -{ -"origin" "392 112 -608" -"classname" "weapon_machinegun" -} -{ -"origin" "1280 1412 -704" -"classname" "light" -"light" "150" -} -{ -"origin" "1280 1604 -704" -"classname" "light" -"light" "150" -} -{ -"origin" "1288 1220 -704" -"light" "150" -"classname" "light" -} -{ -"origin" "1160 1404 -704" -"classname" "light" -"light" "150" -} -{ -"origin" "1160 1596 -704" -"classname" "light" -"light" "150" -} -{ -"origin" "1168 1212 -704" -"light" "150" -"classname" "light" -} -{ -"origin" "24 -552 -232" -"classname" "item_health" -} -{ -"origin" "800 -160 -432" -"classname" "ammo_shells" -} -{ -"origin" "456 776 -600" -"classname" "item_health_small" -} -{ -"origin" "456 720 -600" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "328 -792 -240" -"classname" "ammo_bullets" -} -{ -"origin" "320 -856 -232" -"spawnflags" "1" -"classname" "monster_soldier_light" -"angle" "90" -} -{ -"origin" "224 -800 -232" -"spawnflags" "1" -"angle" "45" -"classname" "monster_soldier_light" -} -{ -"model" "*24" -"target" "t129" -"classname" "trigger_once" -} -{ -"origin" "328 -680 -248" -"targetname" "t128" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "296 -480 -232" -"spawnflags" "1" -"targetname" "t129" -"target" "t128" -"angle" "270" -"classname" "monster_soldier_light" -} -{ -"origin" "936 196 -376" -"light" "80" -"classname" "light" -} -{ -"origin" "1148 -576 -496" -"target" "t126" -"targetname" "t125" -"classname" "point_combat" -} -{ -"origin" "1376 -576 -496" -"target" "t125" -"targetname" "t121" -"classname" "point_combat" -} -{ -"origin" "1072 -752 -496" -"spawnflags" "1" -"targetname" "t126" -"classname" "point_combat" -} -{ -"targetname" "t124" -"spawnflags" "1" -"target" "t121" -"origin" "1376 -424 -480" -"angle" "270" -"classname" "monster_infantry" -} -{ -"model" "*25" -"target" "t124" -"classname" "trigger_once" -} -{ -"origin" "568 -472 -496" -"spawnflags" "1" -"targetname" "t120" -"classname" "point_combat" -} -{ -"origin" "536 -576 -496" -"target" "t120" -"targetname" "t119" -"classname" "point_combat" -} -{ -"origin" "400 688 -624" -"classname" "misc_explobox" -} -{ -"origin" "96 304 -816" -"targetname" "t118" -"classname" "point_combat" -} -{ -"spawnflags" "1" -"origin" "638 236 -440" -"targetname" "t117" -"classname" "point_combat" -"pathtarget" "lita" -} -{ -"origin" "1880 800 -480" -"spawnflags" "1" -"targetname" "t116" -"classname" "point_combat" -} -{ -"origin" "1984 576 -472" -"targetname" "t114" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "1904 632 -472" -"targetname" "t115" -"classname" "point_combat" -} -{ -"style" "36" -"spawnflags" "1" -"light" "200" -"classname" "light" -"targetname" "t112" -"origin" "-756 96 -228" -} -{ -"style" "37" -"spawnflags" "1" -"light" "200" -"classname" "light" -"targetname" "t111" -"origin" "-756 -32 -228" -} -{ -"style" "38" -"classname" "light" -"light" "200" -"spawnflags" "1" -"targetname" "t113" -"origin" "-756 224 -228" -} -{ -"classname" "trigger_relay" -"target" "t113" -"delay" "3.4" -"origin" "-788 224 -96" -"targetname" "t108" -} -{ -"classname" "trigger_relay" -"target" "t112" -"delay" "3.2" -"origin" "-792 96 -96" -"targetname" "t108" -} -{ -"classname" "trigger_relay" -"target" "t111" -"delay" "3" -"origin" "-788 -32 -96" -"targetname" "t108" -} -{ -"style" "37" -"spawnflags" "1" -"origin" "-428 32 32" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t111" -} -{ -"style" "36" -"spawnflags" "1" -"origin" "-428 96 32" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t112" -} -{ -"style" "38" -"spawnflags" "1" -"origin" "-492 224 32" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t113" -} -{ -"style" "38" -"spawnflags" "1" -"origin" "-492 288 32" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t113" -} -{ -"style" "38" -"spawnflags" "1" -"origin" "-816 224 -96" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t113" -} -{ -"style" "36" -"spawnflags" "1" -"origin" "-816 96 -96" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t112" -} -{ -"style" "37" -"spawnflags" "1" -"origin" "-816 -32 -96" -"classname" "light" -"light" "200" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t111" -} -{ -"origin" "-832 -32 -96" -"classname" "light" -"light" "64" -"_color" "1.000000 0.019608 0.000000" -} -{ -"classname" "trigger_relay" -"delay" "2" -"targetname" "t108" -"target" "t110" -"origin" "-536 -176 -88" -} -{ -"style" "39" -"light" "150" -"classname" "light" -"spawnflags" "1" -"targetname" "t110" -"origin" "-484 -164 -88" -} -{ -"style" "39" -"light" "150" -"classname" "light" -"spawnflags" "1" -"targetname" "t110" -"origin" "-420 -164 -88" -} -{ -"style" "39" -"classname" "light" -"light" "150" -"spawnflags" "1" -"targetname" "t110" -"origin" "-600 -168 -88" -} -{ -"style" "40" -"spawnflags" "1" -"light" "150" -"classname" "light" -"targetname" "t109" -"origin" "-476 -272 -120" -} -{ -"style" "40" -"spawnflags" "1" -"light" "150" -"classname" "light" -"targetname" "t109" -"origin" "-612 -264 -120" -} -{ -"style" "40" -"classname" "light" -"light" "150" -"spawnflags" "1" -"targetname" "t109" -"origin" "-412 -272 -120" -} -{ -"classname" "trigger_relay" -"targetname" "t108" -"delay" "1" -"target" "t109" -"origin" "-420 -344 -144" -} -{ -"light" "64" -"classname" "light" -"origin" "-476 -164 -276" -} -{ -"style" "35" -"spawnflags" "1" -"light" "150" -"classname" "light" -"targetname" "t108" -"origin" "-376 -184 -236" -} -{ -"style" "35" -"spawnflags" "1" -"light" "150" -"classname" "light" -"targetname" "t108" -"origin" "-456 -192 -236" -} -{ -"style" "35" -"classname" "light" -"light" "150" -"spawnflags" "1" -"targetname" "t108" -"origin" "-604 -316 -220" -} -{ -"light" "64" -"classname" "light" -"origin" "-412 32 32" -"_color" "1.000000 0.019608 0.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-412 96 32" -"_color" "1.000000 0.019608 0.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-476 224 32" -"_color" "1.000000 0.019608 0.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-476 288 32" -"_color" "1.000000 0.019608 0.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-832 224 -96" -"_color" "1.000000 0.019608 0.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-832 96 -96" -"_color" "1.000000 0.019608 0.000000" -} -{ -"style" "37" -"light" "200" -"classname" "light" -"origin" "-428 -32 32" -"spawnflags" "1" -"_color" "1.000000 0.019608 0.000000" -"targetname" "t111" -} -{ -"classname" "light" -"light" "64" -"origin" "-412 -32 32" -"_color" "1.000000 0.019608 0.000000" -} -{ -"classname" "info_player_start" -"angle" "180" -"targetname" "base2b" -"origin" "2368 896 -296" -} -{ -"target" "t116" -"origin" "1752 792 -464" -"spawnflags" "1" -"targetname" "t107" -"classname" "monster_soldier" -"angle" "315" -} -{ -"origin" "1824 928 -464" -"spawnflags" "1" -"targetname" "t107" -"angle" "270" -"classname" "monster_soldier" -} -{ -"model" "*26" -"target" "t107" -"classname" "trigger_once" -} -{ -"model" "*27" -"target" "t106" -"classname" "trigger_once" -} -{ -"model" "*28" -"target" "t105" -"classname" "trigger_multiple" -} -{ -"spawnflags" "1" -"origin" "1744 600 -464" -"targetname" "t105" -"angle" "180" -"classname" "monster_infantry" -} -{ -"target" "t115" -"origin" "1920 912 -464" -"spawnflags" "1" -"targetname" "t106" -"classname" "monster_soldier_light" -"angle" "270" -} -{ -"target" "t114" -"origin" "1984 912 -464" -"spawnflags" "1" -"targetname" "t106" -"angle" "270" -"classname" "monster_soldier_light" -} -{ -"origin" "1952 800 -480" -"target" "t104" -"targetname" "t103" -"classname" "point_combat" -} -{ -"origin" "1952 600 -480" -"targetname" "t104" -"classname" "point_combat" -} -{ -"origin" "1952 600 -464" -"spawnflags" "1" -"target" "t103" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"spawnflags" "1" -"origin" "64 -508 -232" -"angle" "90" -"classname" "monster_infantry" -} -{ -"random" "0.2" -"wait" "2" -"origin" "-168 -328 -164" -"targetname" "t100" -"target" "t101" -"classname" "func_timer" -} -{ -"origin" "-148 -312 -180" -"targetname" "t101" -"sounds" "1" -"angle" "-2" -"classname" "target_splash" -} -{ -"origin" "-192 -336 -200" -"dmg" "1" -"delay" ".3" -"targetname" "t100" -"classname" "target_explosion" -} -{ -"origin" "-144 -328 -200" -"dmg" "1" -"delay" ".3" -"targetname" "t100" -"classname" "target_explosion" -} -{ -"origin" "-216 -344 -160" -"dmg" "1" -"delay" ".7" -"targetname" "t100" -"classname" "target_explosion" -} -{ -"model" "*29" -"spawnflags" "2048" -"target" "t100" -"classname" "trigger_once" -} -{ -"origin" "-56 -248 -140" -"classname" "light" -"light" "64" -} -{ -"origin" "-184 -248 -140" -"light" "64" -"classname" "light" -} -{ -"origin" "-192 -236 -232" -"angle" "270" -"classname" "monster_parasite" -"target" "t136" -} -{ -"origin" "-372 -1156 -288" -"target" "t98" -"targetname" "t97" -"classname" "path_corner" -} -{ -"origin" "-532 -1156 -288" -"targetname" "t98" -"classname" "path_corner" -} -{ -"model" "*30" -"target" "t96" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"origin" "768 -376 -232" -"target" "t94" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "768 -240 -248" -"target" "t95" -"targetname" "t94" -"classname" "path_corner" -} -{ -"origin" "768 -424 -248" -"targetname" "t95" -"target" "t94" -"classname" "path_corner" -} -{ -"spawnflags" "1" -"origin" "632 -136 -232" -"target" "t91" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "632 -88 -248" -"target" "t92" -"targetname" "t91" -"classname" "path_corner" -} -{ -"origin" "632 208 -248" -"target" "t91" -"targetname" "t90" -"classname" "path_corner" -} -{ -"origin" "832 208 -248" -"targetname" "t93" -"target" "t90" -"classname" "path_corner" -} -{ -"origin" "648 192 -248" -"target" "t93" -"targetname" "t92" -"classname" "path_corner" -} -{ -"spawnflags" "1793" -"origin" "984 160 -232" -"target" "t89" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"origin" "680 -104 -248" -"target" "t86" -"targetname" "t85" -"classname" "path_corner" -} -{ -"origin" "784 -96 -248" -"target" "t87" -"targetname" "t86" -"classname" "path_corner" -} -{ -"origin" "680 -96 -248" -"target" "t88" -"targetname" "t87" -"classname" "path_corner" -} -{ -"origin" "680 152 -248" -"target" "t89" -"targetname" "t88" -"classname" "path_corner" -} -{ -"origin" "944 160 -248" -"targetname" "t89" -"target" "t84" -"classname" "path_corner" -} -{ -"origin" "672 160 -248" -"target" "t85" -"targetname" "t84" -"classname" "path_corner" -} -{ -"model" "*31" -"target" "t83" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"target" "t117" -"origin" "640 -144 -424" -"targetname" "t83" -"angle" "90" -"classname" "monster_infantry" -"item" "ammo_bullets" -} -{ -"origin" "1016 -576 -480" -"target" "t68" -"angle" "0" -"classname" "monster_infantry" -} -{ -"origin" "1072 -576 -496" -"target" "t69" -"targetname" "t68" -"classname" "path_corner" -} -{ -"origin" "768 -576 -496" -"targetname" "t69" -"target" "t68" -"classname" "path_corner" -} -{ -"target" "t119" -"spawnflags" "1" -"origin" "536 -1072 -480" -"targetname" "t67" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"model" "*32" -"target" "t67" -"classname" "trigger_once" -} -{ -"spawnflags" "257" -"origin" "176 672 -600" -"target" "t66" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"origin" "208 672 -616" -"target" "t66" -"targetname" "t65" -"classname" "path_corner" -} -{ -"origin" "24 672 -616" -"targetname" "t66" -"target" "t65" -"classname" "path_corner" -} -{ -"spawnflags" "1" -"origin" "448 256 -600" -"target" "t64" -"angle" "270" -"classname" "monster_soldier_light" -} -{ -"origin" "448 152 -616" -"target" "t63" -"targetname" "t62" -"classname" "path_corner" -} -{ -"origin" "104 152 -616" -"target" "t62" -"targetname" "t63" -"classname" "path_corner" -} -{ -"targetname" "t64" -"origin" "448 208 -616" -"target" "t62" -"classname" "path_corner" -} -{ -"origin" "448 376 -616" -"target" "t62" -"targetname" "t63" -"classname" "path_corner" -} -{ -"classname" "misc_explobox" -"origin" "436 596 -624" -} -{ -"model" "*33" -"classname" "trigger_once" -"target" "t61" -} -{ -"spawnflags" "1" -"classname" "monster_infantry" -"angle" "0" -"targetname" "t61" -"origin" "352 104 -808" -} -{ -"spawnflags" "1" -"angle" "90" -"origin" "416 288 -904" -"classname" "monster_parasite" -"targetname" "t29" -} -{ -"origin" "420 440 -836" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "96 456 -836" -} -{ -"target" "t118" -"spawnflags" "257" -"classname" "monster_parasite" -"origin" "96 616 -904" -"angle" "270" -} -{ -"origin" "360 1008 -816" -"target" "t59" -"targetname" "t60" -"classname" "path_corner" -} -{ -"origin" "576 1112 -816" -"target" "t59" -"targetname" "t60" -"classname" "path_corner" -} -{ -"origin" "376 1112 -816" -"target" "t60" -"targetname" "t59" -"classname" "path_corner" -} -{ -"origin" "432 1008 -800" -"targetname" "t57" -"target" "t59" -"classname" "path_corner" -} -{ -"item" "ammo_bullets" -"spawnflags" "1" -"classname" "monster_infantry" -"angle" "0" -"target" "t25" -"origin" "832 704 -800" -} -{ -"classname" "monster_soldier_light" -"angle" "90" -"targetname" "t46" -"origin" "880 1224 -808" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_light" -"target" "t54" -"origin" "312 960 -800" -} -{ -"spawnflags" "1" -"classname" "monster_soldier_light" -"angle" "90" -"target" "t57" -"origin" "400 960 -800" -} -{ -"classname" "path_corner" -"targetname" "t53" -"target" "t54" -"origin" "320 1152 -816" -} -{ -"classname" "path_corner" -"target" "t52" -"targetname" "t54" -"origin" "296 1000 -816" -} -{ -"classname" "path_corner" -"targetname" "t51" -"target" "t53" -"origin" "736 1168 -816" -} -{ -"classname" "path_corner" -"target" "t51" -"targetname" "t52" -"origin" "304 1160 -816" -} -{ -"classname" "path_corner" -"targetname" "t51" -"target" "t53" -"origin" "312 1000 -816" -} -{ -"model" "*34" -"classname" "trigger_once" -"target" "t46" -} -{ -"light" "180" -"classname" "light" -"origin" "896 704 -736" -} -{ -"classname" "light" -"light" "120" -"origin" "-8 1168 -824" -} -{ -"light" "150" -"classname" "light" -"origin" "128 1752 -760" -} -{ -"classname" "light" -"light" "150" -"origin" "136 1592 -760" -} -{ -"classname" "path_corner" -"targetname" "t36" -"target" "t37" -"origin" "1296 1288 -928" -} -{ -"classname" "path_corner" -"target" "t40" -"targetname" "t41" -"origin" "1416 1640 -928" -} -{ -"classname" "path_corner" -"targetname" "t40" -"target" "t41" -"origin" "1416 1440 -928" -} -{ -"classname" "path_corner" -"targetname" "t42" -"target" "t43" -"origin" "1448 1344 -928" -} -{ -"classname" "path_corner" -"target" "t42" -"targetname" "t43" -"origin" "1448 1192 -928" -} -{ -"classname" "path_corner" -"target" "t36" -"targetname" "t37" -"origin" "1392 1152 -928" -} -{ -"classname" "ammo_bullets" -"origin" "600 864 -816" -} -{ -"classname" "ammo_bullets" -"origin" "600 808 -816" -} -{ -"origin" "1168 744 -784" -"light" "80" -"classname" "light" -} -{ -"classname" "weapon_shotgun" -"origin" "1168 752 -808" -} -{ -"light" "150" -"classname" "light" -"origin" "1416 1412 -704" -} -{ -"light" "150" -"classname" "light" -"origin" "1416 1604 -704" -} -{ -"classname" "light" -"light" "150" -"origin" "1424 1220 -704" -} -{ -"_color" "0.458824 0.823529 1.000000" -"light" "80" -"classname" "light" -"origin" "1280 1128 -832" -} -{ -"_color" "0.458824 0.823529 1.000000" -"light" "80" -"classname" "light" -"origin" "1152 1128 -832" -} -{ -"_color" "0.458824 0.823529 1.000000" -"light" "80" -"classname" "light" -"origin" "1152 1736 -832" -} -{ -"_color" "0.458824 0.823529 1.000000" -"light" "80" -"classname" "light" -"origin" "1280 1736 -832" -} -{ -"_color" "0.458824 0.823529 1.000000" -"light" "80" -"classname" "light" -"origin" "1408 1736 -832" -} -{ -"classname" "light" -"light" "80" -"_color" "0.458824 0.823529 1.000000" -"origin" "1408 1128 -832" -} -{ -"classname" "target_changelevel" -"targetname" "t35" -"map" "base2$base3b" -"origin" "2496 864 -248" -} -{ -"model" "*35" -"angle" "360" -"classname" "trigger_multiple" -"target" "t35" -} -{ -"origin" "-424 -832 -200" -"light" "150" -"classname" "light" -} -{ -"target" "t97" -"origin" "-332 -1156 -272" -"classname" "monster_soldier" -"angle" "45" -} -{ -"spawnflags" "256" -"origin" "-336 -1256 -272" -"classname" "monster_soldier" -"angle" "90" -} -{ -"targetname" "t96" -"origin" "-80 -1056 -272" -"angle" "0" -"classname" "monster_soldier" -} -{ -"origin" "560 -368 -488" -"target" "t32" -"targetname" "t31" -"classname" "path_corner" -} -{ -"origin" "208 -368 -488" -"targetname" "t32" -"target" "t31" -"classname" "path_corner" -} -{ -"spawnflags" "1" -"origin" "480 -360 -472" -"target" "t31" -"classname" "monster_infantry" -} -{ -"origin" "384 392 -736" -"classname" "light" -"light" "150" -} -{ -"origin" "384 512 -736" -"classname" "light" -"light" "150" -} -{ -"origin" "384 656 -736" -"classname" "light" -"light" "150" -} -{ -"origin" "384 768 -736" -"classname" "light" -"light" "150" -} -{ -"origin" "280 712 -736" -"light" "150" -"classname" "light" -} -{ -"model" "*36" -"classname" "trigger_once" -"target" "t29" -} -{ -"classname" "light" -"light" "80" -"origin" "1072 696 -784" -} -{ -"classname" "path_corner" -"targetname" "t24" -"target" "t25" -"origin" "752 696 -816" -} -{ -"classname" "path_corner" -"target" "t24" -"targetname" "t25" -"origin" "928 688 -816" -} -{ -"origin" "1012 1152 -760" -"light" "200" -"classname" "light" -} -{ -"origin" "316 480 -632" -"light" "200" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "880 1248 -720" -} -{ -"light" "64" -"classname" "light" -"origin" "880 1336 -720" -} -{ -"classname" "light" -"light" "64" -"origin" "1032 1336 -720" -} -{ -"classname" "light" -"light" "200" -"origin" "588 736 -760" -} -{ -"light" "64" -"classname" "light" -"origin" "644 1216 -908" -} -{ -"classname" "light" -"light" "64" -"origin" "712 1216 -908" -} -{ -"light" "75" -"classname" "light" -"origin" "48 1216 -1004" -} -{ -"origin" "48 1128 -1004" -"classname" "light" -"light" "75" -} -{ -"light" "85" -"classname" "light" -"origin" "136 1152 -1004" -} -{ -"light" "75" -"classname" "light" -"origin" "100 1224 -976" -} -{ -"origin" "48 1216 -920" -"classname" "light" -"light" "100" -} -{ -"origin" "128 1224 -920" -"classname" "light" -"light" "100" -} -{ -"origin" "136 1152 -920" -"classname" "light" -"light" "100" -} -{ -"origin" "224 1120 -992" -"classname" "light" -"light" "64" -} -{ -"origin" "292 1128 -1016" -"classname" "light" -"light" "64" -} -{ -"origin" "292 1192 -1016" -"classname" "light" -"light" "64" -} -{ -"origin" "356 1184 -1016" -"classname" "light" -"light" "64" -} -{ -"origin" "428 1120 -1016" -"classname" "light" -"light" "64" -} -{ -"origin" "428 1184 -1016" -"classname" "light" -"light" "64" -} -{ -"origin" "500 1176 -1016" -"classname" "light" -"light" "85" -} -{ -"light" "150" -"classname" "light" -"origin" "0 1672 -756" -} -{ -"light" "64" -"classname" "light" -"origin" "144 1504 -756" -} -{ -"style" "6" -"classname" "light" -"light" "170" -"origin" "72 1176 -824" -} -{ -"origin" "240 1672 -756" -"classname" "light" -"light" "150" -} -{ -"origin" "144 1376 -756" -"classname" "light" -"light" "64" -} -{ -"origin" "16 1376 -756" -"classname" "light" -"light" "64" -"style" "4" -} -{ -"origin" "1248 -576 -388" -"classname" "light" -"light" "64" -} -{ -"origin" "1376 -576 -388" -"classname" "light" -"light" "64" -} -{ -"origin" "1376 -448 -388" -"classname" "light" -"light" "64" -} -{ -"origin" "1376 -320 -388" -"classname" "light" -"light" "64" -} -{ -"model" "*37" -"classname" "func_plat" -"lip" "132" -"_minlight" ".2" -} -{ -"classname" "light" -"light" "150" -"origin" "832 336 -152" -} -{ -"origin" "832 336 -352" -"light" "150" -"classname" "light" -} -{ -"origin" "736 224 -424" -"classname" "light" -"light" "64" -} -{ -"light" "100" -"classname" "light" -"origin" "1200 -576 -448" -} -{ -"light" "150" -"classname" "light" -"origin" "1088 -576 -416" -} -{ -"light" "80" -"classname" "light" -"origin" "288 -880 -160" -} -{ -"light" "80" -"classname" "light" -"origin" "280 -888 -208" -} -{ -"light" "80" -"classname" "light" -"origin" "224 -888 -208" -} -{ -"light" "150" -"classname" "light" -"origin" "548 -572 -132" -} -{ -"origin" "1048 -904 -352" -"classname" "light" -"light" "200" -} -{ -"light" "130" -"classname" "light" -"origin" "584 -1076 -240" -} -{ -"light" "130" -"classname" "light" -"origin" "584 -1076 -80" -} -{ -"classname" "ammo_bullets" -"origin" "952 -1096 -488" -} -{ -"classname" "ammo_bullets" -"origin" "1032 -1096 -488" -} -{ -"classname" "misc_explobox" -"origin" "1040 -840 -512" -} -{ -"classname" "misc_explobox" -"origin" "1120 -896 -512" -} -{ -"light" "130" -"classname" "light" -"origin" "904 -880 -440" -} -{ -"light" "130" -"classname" "light" -"origin" "848 -992 -440" -} -{ -"light" "130" -"classname" "light" -"origin" "760 -1040 -440" -} -{ -"light" "130" -"classname" "light" -"origin" "616 -1024 -440" -} -{ -"light" "130" -"classname" "light" -"origin" "552 -912 -440" -} -{ -"light" "130" -"classname" "light" -"origin" "552 -800 -440" -} -{ -"light" "130" -"classname" "light" -"origin" "616 -704 -440" -} -{ -"classname" "light" -"light" "130" -"origin" "1080 -1016 -440" -} -{ -"classname" "light" -"light" "250" -"origin" "1048 -912 -216" -} -{ -"light" "250" -"classname" "light" -"origin" "1048 -728 -216" -} -{ -"light" "150" -"classname" "light" -"origin" "1088 -1036 -352" -} -{ -"classname" "light" -"light" "200" -"origin" "1048 -576 -296" -} -{ -"light" "80" -"classname" "light" -"origin" "1120 -992 -16" -} -{ -"light" "80" -"classname" "light" -"origin" "1056 -800 -16" -} -{ -"light" "80" -"classname" "light" -"origin" "992 -736 -16" -} -{ -"light" "80" -"classname" "light" -"origin" "992 -608 -16" -} -{ -"classname" "light" -"light" "80" -"origin" "992 -992 -16" -} -{ -"model" "*38" -"classname" "func_button" -"angle" "90" -"wait" "240" -"target" "t22" -} -{ -"light" "80" -"classname" "light" -"origin" "828 -892 -652" -} -{ -"light" "80" -"classname" "light" -"origin" "740 -1000 -652" -} -{ -"light" "80" -"classname" "light" -"origin" "744 -752 -652" -} -{ -"classname" "light" -"light" "80" -"origin" "632 -892 -652" -} -{ -"model" "*39" -"origin" "716 -1062 -652" -"classname" "func_door_rotating" -"_minlight" ".2" -"spawnflags" "1" -"wait" "240" -"distance" "90" -"targetname" "t22" -"speed" "30" -} -{ -"origin" "1484 328 -284" -"classname" "light" -"light" "150" -} -{ -"origin" "1708 328 -284" -"light" "150" -"classname" "light" -} -{ -"origin" "992 -160 -96" -"classname" "light" -"light" "80" -} -{ -"origin" "864 -160 -96" -"classname" "light" -"light" "80" -} -{ -"origin" "992 -32 -96" -"light" "64" -"classname" "light" -} -{ -"light" "250" -"classname" "light" -"origin" "800 48 -160" -} -{ -"classname" "light" -"light" "200" -"origin" "800 48 -360" -} -{ -"light" "64" -"classname" "light" -"origin" "768 -256 -160" -} -{ -"light" "64" -"classname" "light" -"origin" "704 -96 -44" -} -{ -"origin" "616 32 -424" -"light" "64" -"classname" "light" -} -{ -"origin" "616 160 -424" -"light" "64" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "832 32 -44" -} -{ -"light" "64" -"classname" "light" -"origin" "704 32 -44" -} -{ -"light" "64" -"classname" "light" -"origin" "704 160 -44" -} -{ -"light" "64" -"classname" "light" -"origin" "832 160 -44" -} -{ -"classname" "light" -"light" "64" -"origin" "768 -384 -160" -} -{ -"origin" "2080 592 -416" -"classname" "light" -"light" "130" -} -{ -"origin" "1952 592 -416" -"classname" "light" -"light" "130" -} -{ -"origin" "1832 592 -416" -"classname" "light" -"light" "130" -} -{ -"origin" "1696 592 -416" -"classname" "light" -"light" "130" -} -{ -"origin" "1568 592 -416" -"classname" "light" -"light" "130" -} -{ -"origin" "1920 696 -416" -"light" "130" -"classname" "light" -} -{ -"origin" "1856 928 -392" -"classname" "light" -"light" "150" -} -{ -"origin" "1856 816 -392" -"light" "150" -"classname" "light" -} -{ -"origin" "2272 800 -84" -"light" "64" -"classname" "light" -} -{ -"origin" "2292 806 -236" -"light" "80" -"classname" "light" -} -{ -"origin" "2292 992 -312" -"light" "64" -"classname" "light" -} -{ -"origin" "2208 1076 -312" -"light" "64" -"classname" "light" -} -{ -"origin" "2208 720 -248" -"classname" "light" -"light" "64" -} -{ -"origin" "2208 720 -312" -"light" "64" -"classname" "light" -} -{ -"origin" "2080 720 -312" -"classname" "light" -"light" "64" -} -{ -"origin" "2080 1076 -312" -"light" "64" -"classname" "light" -} -{ -"origin" "2272 992 -84" -"classname" "light" -"light" "64" -} -{ -"origin" "2208 1076 -248" -"light" "64" -"classname" "light" -} -{ -"origin" "1696 592 -272" -"classname" "light" -"light" "64" -} -{ -"origin" "1952 592 -272" -"classname" "light" -"light" "64" -} -{ -"origin" "2080 592 -272" -"classname" "light" -"light" "64" -} -{ -"origin" "1568 592 -272" -"light" "64" -"classname" "light" -} -{ -"origin" "1504 592 -404" -"classname" "light" -"light" "120" -} -{ -"origin" "1684 800 -404" -"classname" "light" -"light" "120" -} -{ -"origin" "1684 992 -404" -"classname" "light" -"light" "120" -} -{ -"origin" "1952 1068 -404" -"classname" "light" -"light" "120" -} -{ -"origin" "2156 592 -404" -"light" "120" -"classname" "light" -} -{ -"classname" "func_group" -} -{ -"classname" "light" -"light" "120" -"origin" "2152 896 -248" -} -{ -"classname" "light" -"light" "120" -"origin" "2280 896 -248" -} -{ -"origin" "2360 896 -196" -"classname" "light" -"light" "64" -} -{ -"origin" "2488 896 -196" -"light" "64" -"classname" "light" -} -{ -"model" "*40" -"_minlight" ".2" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "2024 896 -248" -"light" "120" -"classname" "light" -} -{ -"model" "*41" -"_minlight" ".2" -"spawnflags" "1" -"classname" "func_plat" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "light" -"light" "180" -"origin" "520 1088 -736" -} -{ -"origin" "712 1024 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "748 872 -1016" -"classname" "light" -"light" "64" -} -{ -"light" "64" -"classname" "light" -"origin" "972 888 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "916 816 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "988 792 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "980 728 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "960 600 -992" -} -{ -"light" "64" -"classname" "light" -"origin" "804 648 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "788 600 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "724 640 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "740 712 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "748 792 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "812 800 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "748 944 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "728 984 -992" -} -{ -"light" "85" -"classname" "light" -"origin" "660 1000 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "588 1024 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "500 1016 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "500 1104 -1016" -} -{ -"light" "100" -"classname" "light" -"origin" "48 1128 -920" -} -{ -"light" "85" -"classname" "light" -"origin" "564 1176 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "636 1176 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "700 1168 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "756 1168 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "828 1168 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "900 1168 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "964 1168 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "836 1088 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "912 1088 -992" -} -{ -"light" "85" -"classname" "light" -"origin" "1004 1088 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "988 1000 -1016" -} -{ -"light" "64" -"classname" "light" -"origin" "900 1000 -1016" -} -{ -"light" "85" -"classname" "light" -"origin" "804 1000 -1016" -} -{ -"classname" "light" -"light" "64" -"origin" "884 896 -1016" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "704 1152 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1432 1688 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1344 1600 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1448 1584 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1448 1488 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1336 1488 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1336 1376 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1432 1368 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1440 1248 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1336 1248 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1192 1152 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1336 1152 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "1440 1160 -912" -} -{ -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -"origin" "824 1024 -912" -} -{ -"origin" "952 704 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "960 808 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "864 808 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "784 904 -908" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "1336 1704 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "960 1152 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "832 1152 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "576 1144 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "576 1024 -912" -"classname" "light" -"light" "150" -"_color" "0.000000 0.666667 1.000000" -} -{ -"origin" "840 664 -912" -"_color" "0.000000 0.666667 1.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "1152 704 -688" -"light" "130" -"classname" "light" -"style" "4" -} -{ -"light" "80" -"classname" "light" -"origin" "88 392 -360" -} -{ -"light" "80" -"classname" "light" -"origin" "80 256 -360" -} -{ -"light" "250" -"classname" "light" -"origin" "424 376 -440" -} -{ -"light" "250" -"classname" "light" -"origin" "416 216 -440" -} -{ -"light" "250" -"classname" "light" -"origin" "64 208 -440" -} -{ -"light" "250" -"classname" "light" -"origin" "64 432 -440" -} -{ -"light" "250" -"classname" "light" -"origin" "232 640 -440" -} -{ -"origin" "316 352 -632" -"classname" "light" -"light" "200" -} -{ -"origin" "196 352 -632" -"classname" "light" -"light" "200" -} -{ -"origin" "196 480 -632" -"classname" "light" -"light" "200" -} -{ -"origin" "308 1664 -824" -"light" "200" -"classname" "light" -} -{ -"light" "180" -"classname" "light" -"origin" "672 960 -768" -} -{ -"origin" "888 1072 -736" -"classname" "light" -"light" "180" -} -{ -"origin" "760 720 -736" -"classname" "light" -"light" "180" -} -{ -"origin" "626 1100 -768" -"light" "100" -"classname" "light" -} -{ -"origin" "424 984 -768" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "1568 -248 -48" -} -{ -"classname" "light" -"light" "150" -"origin" "1440 -248 -48" -} -{ -"light" "150" -"classname" "light" -"origin" "1312 -248 -48" -} -{ -"light" "150" -"classname" "light" -"origin" "1440 -208 -296" -} -{ -"light" "150" -"classname" "light" -"origin" "1568 -208 -296" -} -{ -"light" "150" -"classname" "light" -"origin" "1712 -248 -48" -} -{ -"classname" "light" -"light" "150" -"origin" "1312 -208 -296" -} -{ -"origin" "1012 -64 -432" -"classname" "light" -"light" "64" -} -{ -"light" "64" -"classname" "light" -"origin" "1012 128 -432" -} -{ -"classname" "light" -"light" "64" -"origin" "856 -20 -372" -} -{ -"classname" "light" -"light" "200" -"origin" "720 128 -288" -} -{ -"origin" "-544 -1152 -184" -"classname" "light" -"light" "64" -} -{ -"origin" "-544 -1024 -184" -"classname" "light" -"light" "64" -} -{ -"origin" "-416 -1152 -184" -"light" "64" -"classname" "light" -} -{ -"origin" "-544 -928 -224" -"light" "130" -"classname" "light" -} -{ -"origin" "-448 -948 -288" -"classname" "light" -"light" "64" -} -{ -"origin" "-640 -948 -288" -"light" "64" -"classname" "light" -} -{ -"classname" "info_player_start" -"angle" "180" -"origin" "1720 1412 -688" -"targetname" "base2a" -} -{ -"model" "*42" -"target" "t102" -"angle" "-1" -"classname" "func_door" -"_minlight" ".2" -} -{ -"origin" "-72 -376 -152" -"classname" "light" -"light" "100" -} -{ -"origin" "248 -376 -152" -"classname" "light" -"light" "100" -} -{ -"light" "150" -"classname" "light" -"origin" "-648 -712 -192" -} -{ -"origin" "-784 -728 -192" -"classname" "light" -"light" "150" -} -{ -"origin" "-784 -624 -192" -"classname" "light" -"light" "150" -} -{ -"origin" "-792 -504 -192" -"classname" "light" -"light" "150" -} -{ -"origin" "-544 -456 -144" -"classname" "light" -"light" "200" -} -{ -"light" "100" -"classname" "light" -"origin" "-416 -240 -144" -} -{ -"light" "100" -"classname" "light" -"origin" "-544 -232 -144" -} -{ -"light" "100" -"classname" "light" -"origin" "-672 -272 -144" -} -{ -"classname" "light" -"light" "64" -"origin" "-372 -1056 -288" -} -{ -"light" "64" -"classname" "light" -"origin" "-372 -1248 -288" -} -{ -"classname" "light" -"light" "150" -"origin" "-360 -416 -144" -} -{ -"light" "150" -"classname" "light" -"origin" "-712 -448 -144" -} -{ -"origin" "724 -580 -180" -"classname" "light" -"light" "150" -} -{ -"origin" "640 -1076 -412" -"classname" "light" -"light" "130" -} -{ -"origin" "924 -1056 -44" -"classname" "light" -"light" "80" -} -{ -"origin" "1088 -576 -132" -"classname" "light" -"light" "150" -} -{ -"origin" "844 -576 -132" -"classname" "light" -"light" "150" -} -{ -"origin" "248 72 -488" -"light" "150" -"classname" "light" -} -{ -"origin" "352 320 -360" -"classname" "light" -"light" "80" -} -{ -"origin" "160 192 -360" -"classname" "light" -"light" "80" -} -{ -"origin" "384 560 -408" -"classname" "light" -"light" "150" -} -{ -"origin" "416 744 -512" -"classname" "light" -"light" "150" -} -{ -"origin" "416 632 -440" -"classname" "light" -"light" "250" -} -{ -"origin" "160 160 -504" -"classname" "light" -"light" "175" -} -{ -"origin" "344 160 -504" -"classname" "light" -"light" "175" -} -{ -"origin" "288 -576 -152" -"classname" "light" -"light" "80" -} -{ -"origin" "472 -576 -152" -"light" "80" -"classname" "light" -} -{ -"origin" "808 -576 -416" -"classname" "light" -"light" "150" -} -{ -"origin" "952 -576 -416" -"classname" "light" -"light" "150" -} -{ -"origin" "1376 -248 -448" -"classname" "light" -"light" "100" -} -{ -"origin" "784 -536 -336" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "256 -144 -400" -} -{ -"classname" "light" -"light" "64" -"origin" "1720 1404 -276" -} -{ -"light" "80" -"classname" "light" -"origin" "1732 1576 -508" -} -{ -"light" "120" -"classname" "light" -"origin" "1712 1248 -472" -} -{ -"classname" "light" -"light" "150" -"origin" "1880 1408 -440" -} -{ -"origin" "1720 1404 -508" -"light" "100" -"classname" "light" -} -{ -"origin" "1504 1412 -756" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "1720 1404 -380" -} -{ -"classname" "light" -"light" "80" -"origin" "1720 1408 -608" -} -{ -"classname" "light" -"light" "80" -"origin" "1720 1404 -708" -} -{ -"classname" "light" -"light" "80" -"origin" "1720 1404 -804" -} -{ -"classname" "light" -"light" "80" -"origin" "1608 1404 -756" -} -{ -"classname" "light" -"origin" "1224 24 -304" -"light" "250" -} -{ -"origin" "1504 372 -472" -"light" "64" -"classname" "light" -} -{ -"origin" "1696 372 -472" -"classname" "light" -"light" "64" -} -{ -"model" "*43" -"spawnflags" "16" -"target" "t143" -"targetname" "t138" -"classname" "func_door" -"angle" "-1" -"wait" "-1" -"_minlight" ".1" -} -{ -"origin" "1600 368 -408" -"light" "150" -"classname" "light" -} -{ -"model" "*44" -"classname" "func_wall" -} -{ -"classname" "func_group" -} -{ -"model" "*45" -"spawnflags" "2048" -"lip" "16" -"wait" "-1" -"target" "t108" -"angle" "90" -"classname" "func_button" -} -{ -"origin" "-556 -317 -272" -"light" "64" -"classname" "light" -} -{ -"origin" "-532 -317 -272" -"classname" "light" -"light" "64" -} -{ -"classname" "light" -"light" "150" -"origin" "128 1872 -776" -} -{ -"origin" "128 1872 -976" -"light" "150" -"classname" "light" -} -{ -"model" "*46" -"targetname" "t44" -"_minlight" ".3" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*47" -"target" "t44" -"angle" "90" -"classname" "func_button" -} -{ -"model" "*48" -"target" "t45" -"classname" "trigger_multiple" -} -{ -"origin" "160 1896 -944" -"map" "train$base3c" -"targetname" "t45" -"classname" "target_changelevel" -} -{ -"origin" "128 1872 -848" -"targetname" "train" -"angle" "270" -"classname" "info_player_start" -} diff --git a/stuff/mapfixes/baseq2/biggun@2c96.ent b/stuff/mapfixes/baseq2/biggun@2c96.ent deleted file mode 100644 index 9e4722127..000000000 --- a/stuff/mapfixes/baseq2/biggun@2c96.ent +++ /dev/null @@ -1,2766 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Removed unusable entity target_actor (2016) -// -// 2. Renamed field "duration" to "count" for target_earthquake (1377) -// -// This makes the earthquake last 15 seconds instead of just 5. -// If you want the earthquake length to go back to the way it was, -// simply remove this field line (1384) entirely. -// -// 3. Set "ambush" spawnflag on monster_boss2. -// -// Targeted monsters must spawn in ambsuh mode, otherwise the AI messes -// up. Additionally this may fix a corner case with the monster slipping -// into the void while pushed out of it's compartment. -{ -"message" "Big Gun" -"nextmap" "hangar1" -"classname" "worldspawn" -"sky" "unit7_" -"sounds" "10" -"spawnflags" "1792" -} -{ -"origin" "1752 648 -240" -"classname" "ammo_bullets" -"spawnflags" "1024" -} -{ -"origin" "1792 624 -240" -"classname" "ammo_bullets" -"spawnflags" "1024" -} -{ -"origin" "1792 664 -240" -"spawnflags" "1536" -"classname" "ammo_bullets" -} -{ -"model" "*1" -"classname" "trigger_push" -"angle" "270" -"speed" "50" -} -{ -"classname" "monster_flyer" -"angle" "270" -"targetname" "t132" -"spawnflags" "258" -"origin" "1440 480 48" -} -{ -"angle" "270" -"classname" "monster_flyer" -"targetname" "t132" -"spawnflags" "258" -"origin" "1440 528 48" -} -{ -"classname" "monster_flyer" -"angle" "270" -"targetname" "t132" -"spawnflags" "258" -"origin" "1440 432 48" -} -{ -"classname" "light" -"light" "80" -"origin" "1440 448 56" -} -{ -"model" "*2" -"classname" "func_explosive" -"dmg" "1" -"targetname" "t132" -} -{ -"classname" "trigger_relay" -"delay" "1.3" -"target" "t134" -"targetname" "t133" -"origin" "1504 320 -184" -} -{ -"noise" "world/klaxon2.wav" -"attenuation" "-1" -"classname" "target_speaker" -"targetname" "t134" -"origin" "1504 344 -184" -} -{ -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/klaxon2.wav" -"targetname" "t133" -"origin" "1536 344 -184" -} -{ -"classname" "trigger_relay" -"target" "t131" -"targetname" "t133" -"delay" "2.5" -"origin" "1360 296 -184" -} -{ -"classname" "ammo_rockets" -"origin" "2016 -24 -240" -} -{ -"classname" "item_armor_shard" -"origin" "1424 360 -240" -} -{ -"classname" "item_armor_shard" -"origin" "1384 360 -240" -} -{ -"classname" "item_armor_shard" -"origin" "1408 320 -240" -} -{ -"classname" "item_health" -"origin" "1248 232 -240" -} -{ -"classname" "item_health" -"origin" "1248 192 -240" -} -{ -"classname" "ammo_bullets" -"origin" "1416 -168 -240" -} -{ -"classname" "ammo_bullets" -"origin" "1376 -168 -240" -} -{ -"classname" "ammo_bullets" -"origin" "1376 -128 -240" -} -{ -"classname" "target_explosion" -"delay" "1.8" -"origin" "1352 128 -168" -"dmg" "1" -"targetname" "t131" -} -{ -"classname" "target_explosion" -"delay" "1.6" -"origin" "1344 48 -176" -"dmg" "1" -"targetname" "t131" -} -{ -"origin" "1360 88 -104" -"delay" "2" -"classname" "target_explosion" -"dmg" "1" -"targetname" "t131" -} -{ -"classname" "light" -"light" "120" -"origin" "1352 96 -368" -} -{ -"classname" "target_explosion" -"delay" "1" -"targetname" "t131" -"origin" "1312 136 -208" -} -{ -"classname" "target_explosion" -"delay" ".9" -"targetname" "t131" -"origin" "1408 176 -192" -} -{ -"classname" "target_explosion" -"delay" ".8" -"targetname" "t131" -"origin" "1336 96 -240" -} -{ -"classname" "target_explosion" -"targetname" "t131" -"origin" "1376 16 -232" -} -{ -"classname" "target_explosion" -"delay" ".6" -"targetname" "t131" -"origin" "1304 56 -240" -} -{ -"classname" "target_explosion" -"delay" ".4" -"targetname" "t131" -"origin" "1408 80 -240" -} -{ -"classname" "target_explosion" -"delay" ".2" -"targetname" "t131" -"origin" "1352 208 -232" -} -{ -"classname" "target_explosion" -"delay" "1.4" -"targetname" "t131" -"origin" "1360 136 -152" -} -{ -"classname" "trigger_relay" -"target" "t132" -"targetname" "t131" -"delay" "1.4" -"origin" "1352 -24 -208" -} -{ -"model" "*3" -"classname" "func_explosive" -"dmg" "1" -"targetname" "t132" -} -{ -"classname" "trigger_relay" -"delay" "1.9" -"target" "t130" -"targetname" "t131" -"origin" "1440 224 -208" -} -{ -"model" "*4" -"classname" "trigger_once" -"target" "t133" -} -{ -"model" "*5" -"classname" "func_door" -"angle" "-2" -"wait" "-1" -"speed" "300" -"spawnflags" "1" -"targetname" "t130" -} -{ -"origin" "1816 -1744 -128" -"_color" "1.000000 0.500000 0.500000" -"light" "200" -"classname" "light" -} -{ -"origin" "1904 -1344 -312" -"_color" "1.000000 0.500000 0.500000" -"light" "200" -"classname" "light" -} -{ -"origin" "1904 -1152 -312" -"_color" "1.000000 0.500000 0.500000" -"light" "200" -"classname" "light" -} -{ -"origin" "1576 -1744 -128" -"classname" "light" -"light" "200" -"_color" "1.000000 0.500000 0.500000" -} -{ -"origin" "1488 -1152 -312" -"classname" "light" -"light" "200" -"_color" "1.000000 0.500000 0.500000" -} -{ -"origin" "1488 -1344 -312" -"_color" "1.000000 0.500000 0.500000" -"light" "200" -"classname" "light" -} -{ -"model" "*6" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*7" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*8" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*9" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*10" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*11" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*12" -"classname" "func_killbox" -"targetname" "t117" -} -{ -"angle" "270" -"classname" "info_player_deathmatch" -"origin" "1696 1000 -232" -} -{ -"angle" "180" -"classname" "info_player_deathmatch" -"origin" "2144 288 -40" -} -{ -"angle" "180" -"classname" "info_player_deathmatch" -"origin" "1088 -896 -360" -} -{ -"angle" "180" -"classname" "info_player_deathmatch" -"origin" "2304 -896 -360" -} -{ -"angle" "90" -"classname" "info_player_deathmatch" -"origin" "2112 -1600 -232" -} -{ -"angle" "90" -"classname" "info_player_deathmatch" -"origin" "1280 -1600 -232" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "2592 800 -376" -} -{ -"origin" "1600 -1576 -160" -"delay" "10" -"target" "t129" -"targetname" "t41" -"classname" "trigger_relay" -} -{ -"origin" "1592 -1648 -144" -"targetname" "t129" -"attenuation" "-1" -"noise" "world/v_gun2.wav" -"classname" "target_speaker" -} -{ -"origin" "1712 616 -248" -"noise" "world/v_gun1.wav" -"attenuation" "-1" -"targetname" "t128" -"classname" "target_speaker" -} -{ -"model" "*13" -"target" "t128" -"classname" "trigger_once" -} -{ -"origin" "1504 -1248 -328" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "1456 -608 -232" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "1712 864 -168" -"noise" "world/amb23.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"model" "*14" -"wait" "-1" -"team" "fps" -"spawnflags" "8" -"message" "This door is opened elsewhere." -"classname" "func_door" -"angle" "270" -"target" "t96" -"targetname" "t106" -} -{ -"model" "*15" -"classname" "func_door" -"spawnflags" "8" -"target" "t96" -"targetname" "t106" -"team" "fps" -"wait" "-1" -"angle" "90" -} -{ -"model" "*16" -"classname" "func_door" -"angle" "180" -"_minlight" "0.2" -"targetname" "t94" -"target" "t78" -"spawnflags" "2048" -"team" "fps4343" -} -{ -"model" "*17" -"classname" "func_door" -"angle" "0" -"_minlight" "0.2" -"targetname" "t94" -"target" "t78" -"spawnflags" "2048" -"team" "fps4343" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "1728 960 -168" -} -{ -"origin" "1544 96 -168" -"spawnflags" "1" -"noise" "world/amb21.wav" -"classname" "target_speaker" -} -{ -"origin" "1696 -56 -168" -"spawnflags" "1" -"noise" "world/amb21.wav" -"classname" "target_speaker" -} -{ -"origin" "1696 248 -168" -"spawnflags" "1" -"noise" "world/amb21.wav" -"classname" "target_speaker" -} -{ -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1888 -1248 -328" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "1936 -608 -232" -} -{ -"model" "*18" -"classname" "func_wall" -"_minlight" "0.2" -"spawnflags" "2050" -"targetname" "t98" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "2760 840 -384" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "2688 840 -384" -} -{ -"classname" "weapon_bfg" -"spawnflags" "1792" -"origin" "2528 800 -384" -} -{ -"classname" "ammo_slugs" -"spawnflags" "0" -"origin" "1936 480 -48" -} -{ -"classname" "weapon_railgun" -"spawnflags" "1792" -"origin" "2128 -144 -48" -} -{ -"spawnflags" "1792" -"classname" "ammo_rockets" -"origin" "1552 -968 -368" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "1840 -968 -368" -} -{ -"classname" "weapon_rocketlauncher" -"spawnflags" "1792" -"origin" "1696 -856 -368" -} -{ -"spawnflags" "1792" -"classname" "ammo_shells" -"origin" "1440 -1424 -368" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "1952 -1424 -368" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "1440 -1088 -368" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "1904 -1680 -176" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "1488 -1680 -176" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "1696 -1728 -176" -} -{ -"classname" "trigger_always" -"target" "t97" -"spawnflags" "1792" -"origin" "1784 -160 -232" -} -{ -"classname" "trigger_always" -"target" "t93" -"spawnflags" "1792" -"origin" "1640 -128 -232" -} -{ -"classname" "trigger_always" -"target" "t78" -"origin" "1744 344 -224" -} -{ -"origin" "2784 704 -336" -"classname" "light" -"light" "110" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "2880 704 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "110" -"classname" "light" -} -{ -"classname" "trigger_relay" -"targetname" "t124" -"target" "t126" -"origin" "1040 760 184" -"delay" "0.1" -} -{ -"classname" "trigger_relay" -"targetname" "t124" -"target" "t127" -"origin" "984 784 184" -"delay" "0.3" -} -{ -"classname" "trigger_relay" -"targetname" "t124" -"target" "t125" -"origin" "1024 712 168" -"delay" "0.2" -} -{ -"classname" "func_timer" -"target" "t124" -"origin" "984 720 168" -"spawnflags" "1" -"wait" "1.5" -"random" "0.5" -} -{ -"classname" "trigger_relay" -"targetname" "t120" -"target" "t122" -"origin" "1016 744 120" -"delay" "0.4" -} -{ -"classname" "trigger_relay" -"targetname" "t120" -"target" "t123" -"origin" "1056 712 120" -"delay" "0.3" -} -{ -"classname" "trigger_relay" -"targetname" "t120" -"target" "t121" -"delay" "0.1" -"origin" "960 760 120" -} -{ -"classname" "func_timer" -"target" "t120" -"origin" "984 720 120" -"spawnflags" "1" -"wait" "1.5" -"random" "0.5" -} -{ -"classname" "target_explosion" -"targetname" "t122" -"origin" "1056 792 120" -} -{ -"classname" "target_explosion" -"targetname" "t123" -"origin" "1096 712 120" -} -{ -"classname" "target_explosion" -"targetname" "t125" -"origin" "1088 704 184" -} -{ -"classname" "target_explosion" -"targetname" "t126" -"origin" "1088 832 184" -} -{ -"classname" "target_explosion" -"targetname" "t127" -"origin" "960 832 120" -} -{ -"classname" "target_explosion" -"targetname" "t121" -"origin" "936 792 120" -} -{ -"classname" "info_player_intermission" -"angles" "0 45 0" -"origin" "944 688 136" -} -{ -"origin" "1656 -1592 -168" -"angle" "180" -"classname" "monster_soldier_ss" -} -{ -"model" "*19" -"target" "t119" -"classname" "trigger_once" -} -{ -"model" "*20" -"target" "t118" -"classname" "trigger_once" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1856 688 -168" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1872 776 -168" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1632 1024 -176" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1632 896 -176" -} -{ -"origin" "1408 136 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1792 56 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1792 136 56" -"classname" "light" -"light" "130" -} -{ -"origin" "1792 256 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1792 -64 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1920 56 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1920 136 56" -"classname" "light" -"light" "130" -} -{ -"origin" "1920 256 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1920 -64 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1408 56 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1472 256 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1472 -64 56" -"light" "130" -"classname" "light" -} -{ -"origin" "1600 56 56" -"classname" "light" -"light" "130" -} -{ -"origin" "1600 -64 56" -"classname" "light" -"light" "130" -} -{ -"origin" "1600 256 56" -"classname" "light" -"light" "130" -} -{ -"origin" "1600 136 56" -"light" "130" -"classname" "light" -} -{ -"targetname" "t117" -"origin" "2496 576 -232" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "2496 832 -232" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "2496 256 -232" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "2240 96 -192" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "2144 176 24" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -"origin" "1664 768 -144" -} -{ -"targetname" "t117" -"origin" "1664 1096 -144" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "1696 96 24" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -"origin" "2784 704 -352" -} -{ -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -"origin" "1960 952 8" -} -{ -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -"origin" "1408 -320 -144" -} -{ -"targetname" "t117" -"origin" "2016 360 -200" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "1088 -896 -304" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -"origin" "1984 -320 -144" -} -{ -"targetname" "t117" -"origin" "1696 -888 -248" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"origin" "1440 -1248 -168" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -"origin" "2304 -896 -304" -} -{ -"targetname" "t117" -"origin" "1536 -1664 -80" -"dmg" "10000" -"classname" "target_explosion" -} -{ -"origin" "1952 -1248 -168" -"targetname" "t117" -"classname" "target_explosion" -"dmg" "10000" -} -{ -"origin" "1856 -1664 -80" -"targetname" "t117" -"dmg" "10000" -"classname" "target_explosion" -} -{ -"origin" "1696 -856 -160" -"target" "t117" -"delay" "10" -"targetname" "t107" -"classname" "trigger_relay" -} -{ -"model" "*21" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*22" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*23" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*24" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*25" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*26" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*27" -"team" "countdown" -"classname" "target_character" -"count" "1" -} -{ -"model" "*28" -"team" "countdown" -"classname" "target_character" -"count" "2" -} -{ -"classname" "item_health" -"origin" "1632 -328 -240" -} -{ -"classname" "item_health" -"origin" "1760 -328 -240" -} -{ -"classname" "monster_soldier_ss" -"angle" "0" -"spawnflags" "1" -"origin" "1416 -328 -232" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"spawnflags" "1" -"origin" "1976 -328 -232" -} -{ -"model" "*29" -"message" "This door is opened elsewhere." -"target" "t95" -"classname" "func_door" -"angle" "-1" -"targetname" "t92" -"_minlight" "0.2" -} -{ -"classname" "ammo_shells" -"origin" "2144 -224 -48" -} -{ -"classname" "ammo_shells" -"origin" "2080 -224 -48" -} -{ -"classname" "item_health_large" -"origin" "1856 424 -48" -} -{ -"_color" "1.000000 0.694118 0.392157" -"light" "120" -"classname" "light" -"origin" "2000 336 -160" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1728 576 88" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1632 832 88" -} -{ -"classname" "item_health_small" -"origin" "1600 616 -240" -} -{ -"classname" "item_health_small" -"origin" "1600 576 -240" -} -{ -"classname" "item_health_small" -"origin" "1600 536 -240" -} -{ -"classname" "item_health_small" -"origin" "1600 656 -240" -} -{ -"classname" "ammo_rockets" -"origin" "1856 680 -240" -} -{ -"classname" "item_armor_combat" -"origin" "1912 760 -176" -} -{ -"classname" "item_health" -"origin" "1592 864 -240" -} -{ -"classname" "item_health" -"origin" "1888 1128 -240" -} -{ -"classname" "target_speaker" -"noise" "world/amb21.wav" -"spawnflags" "1" -"origin" "1848 96 -168" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb20.wav" -"origin" "1696 -776 -336" -} -{ -"targetname" "t119" -"angle" "180" -"classname" "monster_soldier_ss" -"origin" "1928 -1152 -360" -} -{ -"targetname" "t119" -"angle" "180" -"classname" "monster_soldier_ss" -"origin" "1928 -1344 -360" -} -{ -"targetname" "t118" -"angle" "0" -"classname" "monster_soldier_ss" -"origin" "1464 -1344 -360" -} -{ -"targetname" "t118" -"angle" "0" -"classname" "monster_soldier_ss" -"origin" "1464 -1152 -360" -} -{ -"classname" "monster_soldier_ss" -"angle" "0" -"origin" "1736 -1592 -168" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb18.wav" -"origin" "1696 -1496 -120" -} -{ -"classname" "target_goal" -"targetname" "t41" -"origin" "1768 -1624 -40" -} -{ -"classname" "target_goal" -"targetname" "t93" -"origin" "1432 -72 -40" -} -{ -"classname" "target_explosion" -"targetname" "t116" -"origin" "1920 -672 -208" -} -{ -"classname" "target_explosion" -"targetname" "t115" -"origin" "1920 -544 -208" -} -{ -"random" "0.5" -"wait" "2" -"delay" "0.6" -"classname" "func_timer" -"targetname" "t114" -"target" "t116" -"origin" "1960 -656 -224" -} -{ -"random" "0.5" -"wait" "2" -"delay" "0.6" -"classname" "func_timer" -"targetname" "t114" -"target" "t115" -"origin" "1960 -568 -224" -} -{ -"classname" "func_timer" -"target" "t113" -"targetname" "t114" -"delay" "0.6" -"wait" "2" -"random" "0.5" -"origin" "1432 -560 -224" -} -{ -"classname" "func_timer" -"target" "t112" -"targetname" "t114" -"delay" "0.6" -"wait" "2" -"random" "0.5" -"origin" "1432 -648 -224" -} -{ -"model" "*30" -"spawnflags" "4" -"classname" "trigger_once" -"target" "t114" -"targetname" "t109" -} -{ -"classname" "target_explosion" -"targetname" "t113" -"origin" "1472 -544 -208" -} -{ -"classname" "target_explosion" -"targetname" "t112" -"origin" "1472 -672 -208" -} -{ -"classname" "target_help" -"targetname" "t93" -"message" "Lock down laser guard." -"origin" "1464 336 -200" -} -{ -"classname" "target_help" -"targetname" "t111" -"message" "Eliminate all resistance." -"origin" "1648 1072 -200" -} -{ -"classname" "target_help" -"targetname" "t111" -"spawnflags" "1" -"message" "Destroy Big Gun." -"origin" "1744 1072 -200" -} -{ -"model" "*31" -"classname" "trigger_once" -"target" "t111" -} -{ -"origin" "2144 96 -160" -"classname" "light" -"light" "120" -"_color" "1.000000 0.694118 0.392157" -} -{ -"origin" "2016 96 -160" -"classname" "light" -"light" "120" -"_color" "1.000000 0.694118 0.392157" -} -{ -"origin" "2048 384 -112" -"classname" "light" -"light" "110" -"_color" "1.000000 0.694118 0.392157" -} -{ -"classname" "trigger_relay" -"target" "t110" -"targetname" "t108" -"delay" "0.6" -"origin" "1808 -944 16" -} -{ -"classname" "target_explosion" -"targetname" "t110" -"origin" "1896 -912 16" -} -{ -"model" "*32" -"spawnflags" "4" -"classname" "trigger_once" -"targetname" "t41" -"target" "t109" -} -{ -"model" "*33" -"_minlight" "0.2" -"spawnflags" "1" -"classname" "func_object" -"targetname" "t110" -} -{ -"classname" "light" -"light" "120" -"origin" "1376 -640 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1376 -512 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1376 -384 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1760 -288 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1632 -288 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1504 -288 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1376 -288 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1888 -288 0" -} -{ -"classname" "light" -"light" "120" -"origin" "2016 -288 0" -} -{ -"classname" "light" -"light" "120" -"origin" "2016 -384 0" -} -{ -"classname" "light" -"light" "120" -"origin" "2016 -512 0" -} -{ -"classname" "light" -"light" "120" -"origin" "2016 -640 0" -} -{ -"classname" "light" -"light" "120" -"origin" "2016 -768 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1984 -896 0" -} -{ -"light" "120" -"classname" "light" -"origin" "1536 -896 0" -} -{ -"light" "120" -"classname" "light" -"origin" "1408 -896 0" -} -{ -"light" "120" -"classname" "light" -"origin" "1376 -768 0" -} -{ -"light" "120" -"classname" "light" -"origin" "1856 -896 0" -} -{ -"classname" "light" -"light" "120" -"origin" "1696 -896 0" -} -{ -"model" "*34" -"classname" "trigger_once" -"target" "t109" -"spawnflags" "4" -"targetname" "t41" -} -{ -"classname" "trigger_relay" -"target" "t108" -"targetname" "t109" -"origin" "1528 -872 -64" -} -{ -"classname" "target_explosion" -"targetname" "t108" -"origin" "1536 -904 16" -} -{ -"model" "*35" -"classname" "func_object" -"spawnflags" "1" -"targetname" "t108" -"_minlight" "0.2" -} -{ -"model" "*36" -"classname" "trigger_once" -"message" "Evacuate immediately." -"targetname" "t41" -"delay" "2" -} -{ -"classname" "trigger_relay" -"targetname" "t41" -"target" "t107" -"delay" "12" -"origin" "1720 -1576 -160" -} -{ -"classname" "target_earthquake" -"speed" "100" -"count" "15" -"targetname" "t107" -"origin" "1776 -1584 -160" -} -{ -"classname" "trigger_relay" -"targetname" "t97" -"target" "t106" -"origin" "1744 -80 -184" -} -{ -"classname" "target_explosion" -"targetname" "t104" -"origin" "1592 160 -256" -} -{ -"classname" "target_explosion" -"targetname" "t105" -"origin" "1616 16 -256" -} -{ -"classname" "target_explosion" -"targetname" "t102" -"origin" "1776 176 -256" -} -{ -"classname" "target_explosion" -"targetname" "t100" -"origin" "1696 -24 -256" -} -{ -"classname" "target_explosion" -"targetname" "t103" -"origin" "1696 216 -256" -} -{ -"classname" "target_explosion" -"targetname" "t101" -"origin" "1768 16 -256" -} -{ -"classname" "func_timer" -"targetname" "t99" -"random" "2" -"wait" "5" -"delay" "0.5" -"origin" "1672 80 -104" -"target" "t105" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"targetname" "t99" -"random" "2" -"wait" "5" -"delay" "1" -"origin" "1720 80 -104" -"target" "t101" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"targetname" "t99" -"random" "2" -"wait" "5" -"delay" "0.5" -"origin" "1720 112 -104" -"target" "t102" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"targetname" "t99" -"random" "2" -"wait" "5" -"delay" "1" -"origin" "1672 112 -104" -"target" "t104" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"targetname" "t99" -"random" "2" -"wait" "5" -"origin" "1696 136 -104" -"target" "t103" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"targetname" "t99" -"random" "2" -"wait" "5" -"origin" "1696 56 -104" -"target" "t100" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"target" "t99" -"origin" "1696 96 -48" -"targetname" "t106" -} -{ -"classname" "trigger_relay" -"targetname" "t97" -"killtarget" "mifs" -"origin" "1640 -80 -184" -} -{ -"classname" "target_speaker" -"noise" "world/10_0.wav" -"spawnflags" "4" -"origin" "1648 -1568 -160" -"attenuation" "-1" -"targetname" "t107" -} -{ -"classname" "trigger_relay" -"targetname" "t97" -"origin" "1672 -80 -184" -"target" "t98" -} -{ -"classname" "trigger_relay" -"targetname" "t97" -"killtarget" "t76" -"origin" "1696 -80 -184" -} -{ -"style" "1" -"targetname" "t96" -"classname" "func_areaportal" -} -{ -"classname" "func_group" -} -{ -"style" "2" -"targetname" "t95" -"classname" "func_areaportal" -} -{ -"model" "*37" -"target" "t94" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"model" "*38" -"targetname" "t93" -"target" "t92" -"spawnflags" "4" -"classname" "trigger_multiple" -} -{ -"classname" "light" -"light" "120" -"_color" "1.000000 0.694118 0.392157" -"origin" "2048 384 32" -} -{ -"_color" "1.000000 0.694118 0.392157" -"light" "120" -"classname" "light" -"origin" "2080 -32 32" -} -{ -"_color" "1.000000 0.694118 0.392157" -"light" "120" -"classname" "light" -"origin" "2080 96 32" -} -{ -"_color" "1.000000 0.694118 0.392157" -"light" "120" -"classname" "light" -"origin" "2080 224 32" -} -{ -"_color" "1.000000 0.694118 0.392157" -"light" "120" -"classname" "light" -"origin" "2272 96 -160" -} -{ -"_color" "1.000000 0.694118 0.392157" -"light" "120" -"classname" "light" -"origin" "1888 416 32" -} -{ -"classname" "light" -"light" "120" -"_color" "1.000000 0.694118 0.392157" -"origin" "2016 -160 32" -} -{ -"model" "*39" -"classname" "func_plat" -"_minlight" "0.2" -} -{ -"deathtarget" "t93" -"classname" "monster_boss2" -"angle" "0" -"origin" "1352 96 -360" -"spawnflags" "1" -"targetname" "t131" -} -{ -"classname" "func_timer" -"target" "t90" -"wait" "20" -"spawnflags" "2049" -"origin" "1560 264 -232" -} -{ -"classname" "trigger_relay" -"target" "t89" -"delay" "2" -"origin" "1608 320 -232" -"targetname" "t90" -} -{ -"classname" "trigger_relay" -"target" "t89" -"delay" "10" -"origin" "1608 288 -232" -"targetname" "t90" -} -{ -"classname" "path_corner" -"targetname" "t88" -"origin" "1696 96 -24" -} -{ -"classname" "target_laser" -"target" "t88" -"spawnflags" "66" -"targetname" "t89" -"origin" "1696 96 -240" -} -{ -"_color" "1.000000 0.501961 0.000000" -"light" "80" -"classname" "light" -"origin" "1696 -472 -336" -} -{ -"_color" "1.000000 0.501961 0.000000" -"light" "80" -"classname" "light" -"origin" "1696 -592 -336" -} -{ -"_color" "1.000000 0.501961 0.000000" -"light" "80" -"classname" "light" -"origin" "1696 -688 -336" -} -{ -"classname" "trigger_relay" -"targetname" "t86" -"target" "t87" -"delay" "0.1" -"origin" "1704 -400 -336" -} -{ -"classname" "func_timer" -"target" "t86" -"spawnflags" "1" -"delay" "0.2" -"origin" "1696 -384 -336" -} -{ -"classname" "trigger_relay" -"targetname" "t86" -"target" "t87" -"origin" "1688 -400 -336" -} -{ -"classname" "trigger_relay" -"targetname" "t84" -"target" "t85" -"delay" "0.1" -"origin" "1704 -528 -336" -} -{ -"classname" "func_timer" -"target" "t84" -"delay" "0.4" -"origin" "1696 -512 -336" -"spawnflags" "1" -} -{ -"classname" "trigger_relay" -"targetname" "t84" -"target" "t85" -"origin" "1688 -528 -336" -} -{ -"classname" "trigger_relay" -"target" "t82" -"targetname" "t83" -"origin" "1688 -648 -336" -} -{ -"classname" "trigger_relay" -"target" "t82" -"targetname" "t83" -"delay" "0.1" -"origin" "1704 -648 -336" -} -{ -"classname" "func_timer" -"target" "t83" -"spawnflags" "1" -"delay" "0.6" -"origin" "1696 -632 -336" -} -{ -"classname" "func_timer" -"target" "t81" -"spawnflags" "1" -"wait" "1" -"origin" "1696 -712 -336" -"delay" "0.8" -} -{ -"classname" "trigger_relay" -"target" "t80" -"targetname" "t81" -"origin" "1688 -728 -336" -} -{ -"classname" "trigger_relay" -"target" "t80" -"targetname" "t81" -"delay" "0.1" -"origin" "1704 -728 -336" -} -{ -"style" "32" -"classname" "light" -"_color" "1.000000 0.349020 0.035294" -"targetname" "t82" -"origin" "1696 -664 -336" -"spawnflags" "1" -} -{ -"style" "33" -"_color" "1.000000 0.349020 0.035294" -"classname" "light" -"targetname" "t85" -"origin" "1696 -544 -336" -"spawnflags" "1" -} -{ -"style" "34" -"_color" "1.000000 0.349020 0.035294" -"classname" "light" -"targetname" "t80" -"origin" "1696 -744 -336" -"spawnflags" "1" -} -{ -"style" "35" -"classname" "light" -"_color" "1.000000 0.349020 0.035294" -"targetname" "t87" -"origin" "1696 -416 -336" -"spawnflags" "1" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1568 -360 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1696 -360 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1824 -360 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1696 -792 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1824 -792 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1944 -360 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1448 -792 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1448 -704 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1448 -576 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1448 -448 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1448 -360 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1944 -704 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1944 -576 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1944 -448 -104" -} -{ -"_color" "1.000000 0.351064 0.037234" -"light" "130" -"classname" "light" -"origin" "1568 -792 -104" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.351064 0.037234" -"origin" "1944 -792 -104" -} -{ -"classname" "path_corner" -"targetname" "t79" -"origin" "1696 -352 -336" -} -{ -"classname" "target_laser" -"origin" "1696 -920 -336" -"target" "t79" -"spawnflags" "2115" -"dmg" "1000" -} -{ -"classname" "func_timer" -"target" "t77" -"spawnflags" "2049" -"wait" "10" -"origin" "1560 304 -232" -"delay" "5" -"targetname" "mifs" -} -{ -"origin" "1696 384 -192" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t78" -} -{ -"origin" "1632 640 -192" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"model" "*40" -"_minlight" "0.2" -"lip" "48" -"speed" "40" -"targetname" "t76" -"spawnflags" "32" -"wait" "-1" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "1696 96 -224" -"targetname" "t77" -"target" "t76" -"classname" "trigger_relay" -} -{ -"model" "*41" -"team" "llama" -"lip" "32" -"targetname" "t76" -"spawnflags" "2088" -"wait" "-1" -"classname" "func_door" -"angle" "270" -} -{ -"model" "*42" -"team" "llama" -"lip" "32" -"targetname" "t76" -"spawnflags" "2088" -"wait" "-1" -"classname" "func_door" -"angle" "0" -} -{ -"model" "*43" -"team" "llama" -"lip" "32" -"targetname" "t76" -"spawnflags" "2050" -"wait" "-1" -"classname" "func_door" -"angle" "180" -} -{ -"model" "*44" -"team" "llama" -"lip" "32" -"targetname" "t76" -"spawnflags" "2050" -"wait" "-1" -"angle" "90" -"classname" "func_door" -} -{ -"origin" "1760 768 -192" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1632 768 -192" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1760 640 -192" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1760 896 -192" -} -{ -"origin" "1696 896 -176" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1696 1024 -176" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1760 1024 -192" -} -{ -"origin" "1632 1128 -192" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1760 1128 -192" -} -{ -"origin" "1816 776 -168" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1888 1128 -192" -"classname" "light" -"light" "100" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1760 1088 88" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -//{ -//"origin" "1904 960 -248" -//"targetname" "t73" -//"spawnflags" "16" -//"classname" "target_actor" -//} -{ -"origin" "1632 704 -96" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1600 576 88" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1888 704 88" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1760 832 88" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1760 640 -96" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1632 960 88" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1760 960 88" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "100" -"classname" "light" -"origin" "1696 512 -192" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "1632 1088 88" -} -{ -"origin" "1664 816 -232" -"classname" "info_player_coop" -"angle" "180" -} -{ -"origin" "1792 768 -232" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "1624 728 -232" -"classname" "info_player_coop" -"angle" "180" -} -{ -"origin" "1744 816 -232" -"angle" "180" -"classname" "info_player_coop" -} -{ -"classname" "light" -"origin" "1888 896 -128" -"light" "130" -"_color" "0.984127 1.000000 0.662698" -} -{ -"classname" "light" -"origin" "2040 896 -128" -"light" "130" -"_color" "0.984127 1.000000 0.662698" -} -{ -"classname" "light" -"origin" "2040 1024 -128" -"light" "130" -"_color" "0.984127 1.000000 0.662698" -} -{ -"delay" "1.8" -"target" "t66" -"targetname" "t61" -"origin" "1952 880 -144" -"classname" "trigger_relay" -} -{ -"origin" "1912 976 -184" -"targetname" "t65" -"noise" "world/explod2.wav" -"classname" "target_speaker" -} -{ -"targetname" "t66" -"origin" "1928 848 -184" -"noise" "weapons/grenlx1a.wav" -"classname" "target_speaker" -} -{ -"origin" "1968 912 -144" -"delay" "0.6" -"target" "t64" -"targetname" "t61" -"classname" "trigger_relay" -} -{ -"delay" "1.4" -"origin" "2016 904 -144" -"target" "t65" -"targetname" "t61" -"classname" "trigger_relay" -} -{ -"model" "*45" -"targetname" "t65" -"mass" "400" -"classname" "func_explosive" -} -{ -"_color" "0.984127 1.000000 0.662698" -"light" "130" -"origin" "1888 1024 -128" -"classname" "light" -} -{ -"origin" "1840 896 -256" -"wait" "-1" -"target" "t63" -"targetname" "t62" -"classname" "path_corner" -} -{ -"origin" "1840 896 384" -"wait" "-1" -"targetname" "t63" -"target" "t62" -"classname" "path_corner" -} -{ -"model" "*46" -"target" "t61" -"classname" "trigger_once" -} -{ -"wait" "-1" -"origin" "1904 960 -272" -"target" "t60" -"targetname" "t59" -"classname" "path_corner" -} -{ -"origin" "1904 960 384" -"wait" "-1" -"targetname" "t60" -"target" "t59" -"classname" "path_corner" -} -{ -"model" "*47" -"_minlight" "0.2" -"targetname" "t64" -"speed" "600" -"dmg" "1000" -"spawnflags" "2" -"target" "t63" -"classname" "func_train" -} -{ -"model" "*48" -"targetname" "t61" -"mass" "800" -"dmg" "1" -"classname" "func_explosive" -} -{ -"model" "*49" -"speed" "600" -"targetname" "t61" -"dmg" "1000" -"spawnflags" "2" -"_minlight" "0.2" -"target" "t60" -"classname" "func_train" -} -{ -"classname" "target_changelevel" -"targetname" "t58" -"map" "eou7_.cin+*hangar1$unitstart" -"origin" "2888 696 -328" -} -{ -"model" "*50" -"classname" "func_button" -"angle" "0" -"target" "t58" -"wait" "-1" -} -{ -"model" "*51" -"message" "Laser guard locked down." -"targetname" "t41" -"classname" "trigger_once" -"target" "t97" -} -{ -"model" "*52" -"wait" "-1" -"angle" "90" -"classname" "func_button" -"target" "t41" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t3" -"origin" "1696 -1072 -336" -} -{ -"classname" "target_laser" -"target" "t3" -"spawnflags" "67" -"origin" "1696 -1200 -336" -} -{ -"model" "*53" -"classname" "func_plat" -} -{ -"model" "*54" -"classname" "func_plat" -} -{ -"light" "120" -"classname" "light" -"origin" "2112 -1600 32" -} -{ -"light" "120" -"classname" "light" -"origin" "2112 -1504 -128" -} -{ -"light" "150" -"_color" "1.000000 1.000000 0.000000" -"classname" "light" -"origin" "2416 968 -288" -} -{ -"light" "150" -"_color" "1.000000 1.000000 0.000000" -"classname" "light" -"origin" "2528 968 -288" -} -{ -"classname" "light" -"_color" "1.000000 1.000000 0.000000" -"light" "150" -"origin" "2640 968 -288" -} -{ -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -"origin" "2344 704 -336" -} -{ -"light" "120" -"origin" "2560 896 -232" -"classname" "light" -} -{ -"classname" "light" -"origin" "2688 896 -232" -"light" "120" -} -{ -"classname" "light" -"origin" "2816 896 -232" -"light" "120" -} -{ -"light" "120" -"origin" "2560 512 -232" -"classname" "light" -} -{ -"classname" "light" -"origin" "2688 512 -232" -"light" "120" -} -{ -"classname" "light" -"origin" "2816 512 -232" -"light" "120" -} -{ -"light" "120" -"origin" "2400 704 -232" -"classname" "light" -} -{ -"light" "120" -"origin" "2400 608 -232" -"classname" "light" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "2496 224 -40" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "2496 96 -40" -} -{ -"_color" "1.000000 1.000000 1.000000" -"light" "120" -"classname" "light" -"origin" "2368 96 -40" -} -{ -"classname" "light" -"origin" "2400 800 -232" -"light" "120" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "1280 -1600 32" -"classname" "light" -"light" "120" -} -{ -"origin" "1280 -1504 -128" -"light" "120" -"classname" "light" -} -{ -"model" "*55" -"origin" "1696 -1664 -130" -"classname" "func_rotating" -"spawnflags" "1" -"speed" "30" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1552 -968 -256" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1408 -960 -160" -} -{ -"origin" "2496 448 -296" -"classname" "light" -"light" "120" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "1728 -1536 -88" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1664 -1536 -88" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "1536 -1600 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1728 -1600 32" -} -{ -"origin" "1728 -1728 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1664 -1600 32" -} -{ -"origin" "1664 -1728 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1856 -1728 32" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1536 -1728 32" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1664 -1344 32" -} -{ -"classname" "light" -"_color" "1.000000 0.000000 0.000000" -"origin" "1576 -1780 -136" -} -{ -"classname" "light" -"_color" "1.000000 0.000000 0.000000" -"origin" "1520 -1492 -328" -} -{ -"origin" "1760 704 88" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -{ -"origin" "2496 352 -40" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 1.000000" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1984 -960 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2144 -976 -160" -} -{ -"origin" "1840 -1040 -32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"origin" "2144 -1040 -32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"origin" "1248 -1040 -32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"origin" "1248 -976 -160" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1552 -1040 -32" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1088 -1024 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1728 -1216 32" -} -{ -"origin" "1728 -1344 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1664 -1216 32" -} -{ -"origin" "1856 -1600 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1536 -1216 32" -} -{ -"origin" "1536 -1344 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1856 -1344 32" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1088 -1408 -160" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "120" -"classname" "light" -"origin" "2112 -896 -272" -} -{ -"origin" "2176 -896 -272" -"classname" "light" -"light" "120" -"_color" "1.000000 0.000000 0.000000" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "120" -"classname" "light" -"origin" "1280 -896 -272" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2304 -896 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1088 -896 -160" -} -{ -"origin" "1840 -968 -256" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"origin" "1088 -1152 -160" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"origin" "1088 -1280 -160" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"origin" "1856 -1216 32" -"classname" "light" -"light" "120" -"_color" "0.923729 1.000000 0.385593" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2304 -1024 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2304 -1152 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2304 -1280 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2304 -1408 -160" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1376 -1376 -112" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1376 -1120 -112" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1376 -1248 -112" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2016 -1248 -112" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2016 -1376 -112" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "2016 -1120 -112" -} -{ -"origin" "1872 -1494 -332" -"classname" "light" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "1816 -1780 -136" -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -} -{ -"classname" "func_group" -"spawnflags" "1" -} -{ -"targetname" "bstart" -"origin" "1696 1128 -232" -"angle" "270" -"classname" "info_player_start" -} -{ -"_color" "0.923729 1.000000 0.385593" -"light" "120" -"classname" "light" -"origin" "1696 -800 16" -} -{ -"origin" "1216 -896 -272" -"classname" "light" -"light" "120" -"_color" "1.000000 0.000000 0.000000" -} -{ -"model" "*56" -"count" "1" -"classname" "target_character" -"team" "countdown" -} -{ -"model" "*57" -"count" "2" -"classname" "target_character" -"team" "countdown" -} -{ -"classname" "target_string" -"origin" "1672 -1120 -240" -"team" "countdown" -"targetname" "t14" -} -{ -"targetname" "t107" -"style" "0" -"origin" "1720 -1120 -240" -"classname" "func_clock" -"target" "t14" -"spawnflags" "14" -"count" "10" -"pathtarget" "boom" -} diff --git a/stuff/mapfixes/baseq2/city1@1555.ent b/stuff/mapfixes/baseq2/city1@1555.ent deleted file mode 100644 index 4e1c1107f..000000000 --- a/stuff/mapfixes/baseq2/city1@1555.ent +++ /dev/null @@ -1,6759 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed 3x monster_hover (1162, 4068, 4274) never activating on Easy -// -// Was caused by spawnflags not being set to Medium+. Changed their -// spawnflags from 2 to 258. -{ -"spawnflags" "1" -"classname" "worldspawn" -"message" "Outer Courts" -"sky" "unit9_" -"sounds" "6" -"nextmap" "city2" -} -{ -"classname" "misc_teleporter" -"angle" "45" -"target" "t304" -"spawnflags" "1792" -"origin" "-792 -1076 78" -} -{ -"classname" "misc_teleporter_dest" -"angle" "270" -"origin" "-784 -2464 1080" -"targetname" "t304" -"spawnflags" "1792" -} -{ -"origin" "24 -2632 456" -"spawnflags" "2048" -"classname" "item_adrenaline" -} -{ -"origin" "198 -2504 668" -"classname" "light" -"light" "64" -"_color" "0.000000 1.000000 0.500000" -} -{ -"origin" "204 -2552 672" -"spawnflags" "1792" -"classname" "light" -"light" "64" -"_color" "0.000000 1.000000 0.500000" -} -{ -"origin" "254 -2488 668" -"classname" "light" -"light" "64" -"_color" "0.000000 1.000000 0.500000" -} -{ -"targetname" "t91" -"classname" "monster_hover" -"spawnflags" "2" -"origin" "-1651 -146 380" -"item" "ammo_cells" -} -{ -"origin" "-1980 -1544 104" -"targetname" "t1" -"classname" "info_notnull" -} -{ -"targetname" "t74" -"spawnflags" "1" -"angle" "180" -"origin" "-2632 -168 -280" -"classname" "monster_soldier" -"item" "ammo_shells" -} -{ -"origin" "-2948 -124 -232" -"volume" "0.4" -"spawnflags" "2048" -"noise" "world/explod1.wav" -"targetname" "t101" -"classname" "target_speaker" -} -{ -"origin" "-3052 -116 -252" -"targetname" "t101" -"item" "ammo_bullets" -"spawnflags" "1026" -"classname" "monster_soldier_ss" -} -{ -"origin" "-3052 -164 -252" -"targetname" "t101" -"spawnflags" "1282" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "2048" -"delay" "0.5" -"target" "t246" -"origin" "-664 -2116 1024" -"targetname" "t302" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"delay" "0.5" -"target" "t64" -"origin" "-664 -2140 1024" -"targetname" "t302" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"delay" "0.5" -"target" "t303" -"origin" "-664 -2092 1024" -"targetname" "t302" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-684 -2164 1024" -"target" "t302" -"targetname" "t301" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-692 -2192 1024" -"target" "t301" -"targetname" "t240" -"classname" "trigger_relay" -} -{ -"origin" "-168 -2628 488" -"target" "t301" -"targetname" "t121" -"classname" "trigger_relay" -} -{ -"target" "t301" -"origin" "-540 -1880 248" -"targetname" "t46" -"classname" "trigger_relay" -} -{ -"origin" "184 -2464 736" -"spawnflags" "2048" -"targetname" "t300" -"classname" "target_secret" -} -{ -"model" "*1" -"message" "You have found a secret area." -"spawnflags" "2048" -"target" "t300" -"classname" "trigger_once" -} -{ -"style" "32" -"origin" "-2414 184 -264" -"targetname" "red2" -"_color" "1.000000 0.156863 0.125490" -"spawnflags" "2048" -"light" "120" -"classname" "light" -} -{ -"classname" "info_player_start" -"origin" "176 -2384 336" -"angle" "180" -} -{ -"model" "*2" -"classname" "trigger_multiple" -"delay" "0.5" -"target" "t297" -} -{ -"origin" "-2056 96 -168" -"targetname" "city1XL" -"angle" "270" -"classname" "info_player_coop" -} -{ -"origin" "-2040 -56 -168" -"targetname" "city1XL" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "-2000 96 -168" -"targetname" "city1XL" -"angle" "270" -"classname" "info_player_coop" -} -{ -"origin" "-2096 128 72" -"targetname" "city1XH" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "-1976 128 72" -"targetname" "city1XH" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "-2032 -8 72" -"targetname" "city1XH" -"angle" "270" -"classname" "info_player_coop" -} -{ -"origin" "216 -2464 328" -"angle" "135" -"targetname" "unitstart" -"classname" "info_player_coop" -} -{ -"origin" "64 -2296 328" -"angle" "180" -"targetname" "unitstart" -"classname" "info_player_coop" -} -{ -"origin" "152 -2240 328" -"angle" "225" -"targetname" "unitstart" -"classname" "info_player_coop" -} -{ -"model" "*3" -"classname" "trigger_multiple" -"wait" "10" -"target" "t297" -} -{ -"model" "*4" -"classname" "trigger_multiple" -"target" "t299" -"targetname" "sewmsg" -"spawnflags" "2048" -"wait" "320" -} -{ -"classname" "trigger_relay" -"killtarget" "sewmsg" -"targetname" "t184" -"origin" "-1280 624 464" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"targetname" "t299" -"attenuation" "-1" -"noise" "world/v_bas2.wav" -"origin" "-2056 -208 112" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"targetname" "t298" -"attenuation" "-1" -"origin" "-72 -2328 376" -"noise" "world/v_cit1.wav" -"spawnflags" "2048" -} -{ -"model" "*5" -"classname" "trigger_once" -"target" "t298" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"origin" "-288 -2352 512" -"targetname" "t297" -"noise" "world/flyby1.wav" -"attenuation" "-1" -"spawnflags" "2048" -} -{ -"model" "*6" -"classname" "trigger_once" -"target" "t297" -"attenuation" "-1" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-376 -2680 312" -"target" "t292" -"targetname" "t295" -} -{ -"classname" "point_combat" -"origin" "-392 -2664 312" -"target" "t291" -"targetname" "t294" -} -{ -"classname" "point_combat" -"origin" "-360 -2664 312" -"target" "t293" -"targetname" "t296" -} -{ -"classname" "point_combat" -"origin" "-552 -2664 304" -"targetname" "t293" -} -{ -"classname" "point_combat" -"origin" "-584 -2664 304" -"targetname" "t291" -} -{ -"classname" "point_combat" -"origin" "-568 -2680 312" -"targetname" "t292" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-784 -2576 1072" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-784 -2528 1072" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "-780 -2686 1080" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "100" -"origin" "-1645 -155 241" -} -{ -"origin" "-2141 -126 -128" -"noise" "world/amb24.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2896 32 -272" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "150" -"origin" "-1800 -144 72" -"classname" "light" -} -{ -"origin" "-1732 16 8" -"classname" "ammo_shells" -} -{ -"origin" "-2779 292 -397" -"classname" "ammo_grenades" -} -{ -"origin" "-1648 -153 196" -"targetname" "t290" -"classname" "info_null" -} -{ -"style" "33" -"targetname" "t290" -"origin" "-1648 -152 456" -"_color" "1.000000 0.976471 0.501961" -"light" "100" -"classname" "light" -} -{ -"origin" "-1384 608 456" -"targetname" "t289" -"volume" "0.7" -"attenuation" "1" -"noise" "world/brkglas.wav" -"classname" "target_speaker" -"spawnflags" "2048" -} -{ -"origin" "-32 -2502 656" -"classname" "point_combat" -"targetname" "t288" -"target" "t296" -} -{ -"origin" "-32 -2492 656" -"classname" "point_combat" -"targetname" "t287" -"target" "t295" -} -{ -"spawnflags" "2048" -"origin" "174 -2486 640" -"classname" "point_combat" -"targetname" "t285" -"target" "t288" -} -{ -"spawnflags" "2048" -"origin" "172 -2490 640" -"classname" "point_combat" -"targetname" "t286" -"target" "t287" -} -{ -"_color" "0.000000 1.000000 0.500000" -"light" "64" -"classname" "light" -"origin" "174 -2488 680" -} -{ -"_color" "0.000000 1.000000 0.500000" -"light" "64" -"classname" "light" -"origin" "206 -2448 668" -} -{ -"_color" "0.000000 1.000000 0.500000" -"classname" "light" -"light" "64" -"origin" "234 -2600 664" -} -{ -"model" "*7" -"target" "t289" -"spawnflags" "2048" -"_minlight" "0.8" -"dmg" "1" -"health" "25" -"mass" "99" -"classname" "func_explosive" -} -{ -"team" "hidey1" -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "578 -2656 480" -} -{ -"spawnflags" "0" -"classname" "item_power_shield" -"origin" "-420 -714 100" -} -{ -"_cone" "30" -"target" "t290" -"classname" "light" -"light" "400" -"_color" "1.000000 0.976471 0.501961" -"origin" "-1648 -154 484" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-1728 -176 512" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-1628 -188 524" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "-1740 -132 516" -} -{ -"model" "*8" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "-936 448 256" -} -{ -"model" "*9" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*10" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "-1808 336 614" -"classname" "light" -"light" "32" -} -{ -"classname" "misc_teleporter_dest" -"angle" "270" -"targetname" "valley" -"origin" "592 -2440 456" -"spawnflags" "1792" -} -{ -"classname" "misc_teleporter" -"angle" "90" -"spawnflags" "1792" -"target" "valley" -"origin" "-1780 -268 16" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "-2708 -100 -280" -} -{ -"classname" "ammo_rockets" -"spawnflags" "512" -"origin" "-2544 -100 -280" -} -{ -"classname" "misc_teleporter" -"origin" "-3080 -136 -272" -"angle" "0" -"spawnflags" "1792" -"target" "t284" -} -{ -"origin" "-1864 -1928 408" -"spawnflags" "1792" -"light" "120" -"classname" "light" -} -{ -"origin" "-2032 -1928 408" -"spawnflags" "1792" -"light" "120" -"classname" "light" -} -{ -"classname" "misc_teleporter_dest" -"angle" "0" -"origin" "-2232 -1928 376" -"spawnflags" "1792" -"targetname" "t284" -} -{ -"origin" "-1748 -1548 4" -"angles" "-45 132 0" -"classname" "info_player_intermission" -} -{ -"classname" "weapon_machinegun" -"origin" "-2168 -1016 -56" -"spawnflags" "1792" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1896 -1056 -56" -} -{ -"spawnflags" "1792" -"classname" "ammo_slugs" -"origin" "-880 -2160 912" -} -{ -"spawnflags" "2048" -"classname" "item_adrenaline" -"origin" "-1152 788 420" -} -{ -"spawnflags" "2048" -"classname" "item_invulnerability" -"origin" "-952 -1718 588" -} -{ -"model" "*11" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"origin" "-892 -1580 590" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "-28 -1904 112" -"_minlight" "0.8" -} -{ -"spawnflags" "1792" -"classname" "ammo_cells" -"origin" "-672 -1048 112" -} -{ -"classname" "weapon_hyperblaster" -"spawnflags" "1792" -"origin" "-612 -1052 112" -} -{ -"classname" "weapon_hyperblaster" -"spawnflags" "1792" -"origin" "-2112 -236 -88" -} -{ -"classname" "misc_teleporter" -"angle" "90" -"_minlight" "0.1" -"target" "t282" -"origin" "-1812 192 548" -} -{ -"origin" "-1808 432 584" -"light" "64" -"classname" "light" -} -{ -"classname" "misc_teleporter_dest" -"angle" "180" -"_minlight" "0.1" -"origin" "-1696 448 544" -"targetname" "t283" -} -{ -"light" "56" -"classname" "light" -"origin" "-1808 504 584" -} -{ -"light" "32" -"classname" "light" -"origin" "-1816 192 614" -} -{ -"classname" "light" -"light" "32" -"origin" "-1696 448 612" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-1808 328 544" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-1832 376 544" -} -{ -"spawnflags" "1792" -"classname" "misc_teleporter_dest" -"angle" "90" -"origin" "-2536 48 472" -"targetname" "t282" -} -{ -"model" "*12" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*13" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"angle" "90" -"classname" "misc_teleporter" -"spawnflags" "1792" -"_minlight" "0.1" -"origin" "-1836 -1342 -48" -"target" "t283" -} -{ -"classname" "misc_teleporter" -"angle" "90" -"target" "t281" -"spawnflags" "1792" -"_minlight" "0.1" -"origin" "-2236 -1334 -48" -} -{ -"classname" "misc_teleporter_dest" -"angle" "270" -"origin" "-912 -2008 1000" -"targetname" "t281" -"spawnflags" "1792" -} -{ -"origin" "184 -2496 328" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-2040 -1960 48" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"classname" "ammo_bullets" -"origin" "-984 -1816 544" -} -{ -"spawnflags" "2048" -"origin" "8 -1992 104" -"classname" "item_armor_combat" -} -{ -"classname" "ammo_grenades" -"origin" "532 -2456 448" -"spawnflags" "2048" -} -{ -"origin" "608 -2456 448" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"spawnflags" "0" -"origin" "656 -2496 448" -"classname" "ammo_slugs" -} -{ -"model" "*14" -"classname" "trigger_once" -"target" "t199" -} -{ -"model" "*15" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"classname" "item_armor_combat" -"origin" "-2496 -680 -56" -} -{ -"classname" "item_quad" -"origin" "-2176 -1120 336" -"team" "q2best" -"spawnflags" "1792" -} -{ -"model" "*16" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*17" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-960 128 412" -} -{ -"classname" "info_player_deathmatch" -"angle" "315" -"origin" "-1452 768 256" -} -{ -"spawnflags" "2048" -"classname" "ammo_rockets" -"origin" "-1352 568 72" -} -{ -"classname" "item_armor_combat" -"spawnflags" "1792" -"origin" "-1676 -160 212" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1860 -108 28" -} -{ -"classname" "ammo_bullets" -"spawnflags" "2048" -"origin" "-2488 160 -400" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-2564 156 -388" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-2748 152 -388" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-2008 -120 -176" -} -{ -"classname" "ammo_cells" -"spawnflags" "1536" -"origin" "-2116 -64 -164" -} -{ -"spawnflags" "2048" -"origin" "-3096 -104 -280" -"classname" "ammo_grenades" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-2000 -144 104" -} -{ -"classname" "item_health_small" -"origin" "-2060 -360 16" -} -{ -"classname" "item_health_small" -"origin" "-2060 -304 24" -} -{ -"classname" "item_health_small" -"origin" "-2056 -400 16" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "-2312 -1556 92" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "-1380 -1556 104" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "188 -2592 656" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "-116 -2440 656" -} -{ -"classname" "weapon_railgun" -"spawnflags" "1792" -"origin" "-904 -2148 1012" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "278 -2591 656" -} -{ -"_color" "0.000000 1.000000 0.500000" -"light" "64" -"classname" "light" -"spawnflags" "1792" -"origin" "260 -2544 672" -} -{ -"classname" "item_invulnerability" -"team" "qbest" -"origin" "256 -2640 664" -"spawnflags" "1792" -} -{ -"classname" "weapon_rocketlauncher" -"spawnflags" "1792" -"origin" "-232 -2344 512" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-842 -2694 712" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "168 -2424 336" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "160 -2192 320" -} -{ -"spawnflags" "2048" -"classname" "key_red_key" -"origin" "-2520 192 -240" -} -{ -"model" "*18" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-2220 -860 -56" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "-1050 776 416" -} -{ -"spawnflags" "1792" -"classname" "item_armor_body" -"origin" "-1429 610 465" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t20" -"origin" "-1245 752 456" -} -{ -"model" "*19" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*20" -"_minlight" "0.1" -"spawnflags" "2048" -"wait" "-1" -"health" "5" -"delay" "10" -"lip" "64" -"angle" "180" -"classname" "func_door" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "-2800 212 8" -} -{ -"model" "*21" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "-1992 -248 -168" -} -{ -"classname" "light" -"_color" "1.000000 0.796078 0.003922" -"light" "64" -"origin" "-1808 520 612" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "-1808 532 548" -"_minlight" "0.1" -} -{ -"target" "pumpdoor" -"classname" "trigger_always" -"origin" "-1776 -128 -276" -"spawnflags" "1792" -} -{ -"model" "*22" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "light" -"light" "120" -"spawnflags" "1792" -"origin" "-2224 -1928 408" -} -{ -"model" "*23" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*24" -"spawnflags" "1792" -"message" "This door is opened elsewhere." -"wait" "-1" -"_minlight" "0.2" -"team" "medicdoor" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*25" -"spawnflags" "1792" -"message" "This door is opened elsewhere." -"wait" "-1" -"_minlight" "0.2" -"team" "medicdoor" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*26" -"classname" "trigger_once" -"target" "m1" -"spawnflags" "2048" -} -{ -"classname" "trigger_always" -"target" "t209" -"spawnflags" "1792" -"origin" "104 -2344 360" -} -{ -"model" "*27" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"classname" "light" -"light" "175" -"origin" "-608 -2648 368" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-704 -2656 368" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2032 112 -74" -"_color" "1.000000 0.920949 0.343874" -"light" "90" -"classname" "light" -} -{ -"origin" "-2032 180 -188" -"targetname" "t278" -"classname" "info_notnull" -} -{ -"origin" "-2032 32 -188" -"targetname" "t277" -"classname" "info_notnull" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.920949 0.343874" -"origin" "-2032 176 -74" -} -{ -"spawnflags" "1792" -"classname" "weapon_railgun" -"origin" "-2040 -1940 384" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "-1864 -1928 376" -} -{ -"model" "*28" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "point_combat" -"targetname" "t276" -"origin" "-32 -2480 656" -"target" "t294" -} -{ -"classname" "point_combat" -"targetname" "t180" -"target" "t276" -"origin" "174 -2496 640" -"spawnflags" "2048" -} -{ -"model" "*29" -"classname" "trigger_monsterjump" -"speed" "400" -"height" "16" -"angle" "180" -"spawnflags" "2048" -} -{ -"model" "*30" -"classname" "func_door" -"angle" "270" -"team" "medicdoor" -"targetname" "medguy1" -"_minlight" "0.1" -"wait" "-1" -"message" "This door is opened elsewhere." -"spawnflags" "2048" -} -{ -"model" "*31" -"classname" "func_door" -"angle" "90" -"team" "medicdoor" -"targetname" "medguy1" -"_minlight" "0.1" -"wait" "-1" -"message" "This door is opened elsewhere." -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"targetname" "t273" -"target" "t274" -"origin" "-2080 -864 -72" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"targetname" "t274" -"origin" "-2080 -904 -72" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"targetname" "t55" -"target" "t273" -"origin" "-1912 -864 -72" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"random" "2" -"wait" "4" -"origin" "-2600 256 464" -"target" "t272" -"targetname" "hv1" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"origin" "-2600 232 464" -"target" "t271" -"targetname" "t272" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"killtarget" "hv1" -"origin" "-2600 208 464" -"targetname" "t271" -"delay" ".75" -"spawnflags" "2048" -} -{ -"origin" "-2548 208 496" -"classname" "monster_hover" -"spawnflags" "258" -"targetname" "t271" -"deathtarget" "hv2" -} -{ -"origin" "-2032 -1112 112" -"target" "t190" -"delay" "1" -"targetname" "t10" -"classname" "trigger_relay" -} -{ -"origin" "-2584 0 472" -"killtarget" "hv4" -"targetname" "t267" -"classname" "trigger_relay" -"delay" ".75" -"spawnflags" "2048" -} -{ -"targetname" "hv4" -"target" "t266" -"origin" "-2584 48 464" -"wait" "4" -"random" "2" -"classname" "func_timer" -"spawnflags" "2048" -} -{ -"target" "t267" -"targetname" "t266" -"origin" "-2584 24 472" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"target" "t264" -"targetname" "hv2" -"origin" "-2624 304 464" -"wait" "4" -"random" "2" -"classname" "func_timer" -"spawnflags" "2048" -} -{ -"target" "t265" -"targetname" "t264" -"origin" "-2624 280 464" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"targetname" "t265" -"origin" "-2624 256 464" -"killtarget" "hv2" -"classname" "trigger_relay" -"delay" ".75" -"spawnflags" "2048" -} -{ -"origin" "-2576 208 464" -"targetname" "hv3" -"target" "t262" -"wait" "4" -"random" "2" -"classname" "func_timer" -"spawnflags" "2048" -} -{ -"origin" "-2576 184 464" -"target" "t263" -"targetname" "t262" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-2576 160 464" -"killtarget" "hv3" -"targetname" "t263" -"classname" "trigger_relay" -"delay" ".75" -"spawnflags" "2048" -} -{ -"targetname" "t135" -"message" "Find Communications Laser\nData CD in Upper Palace." -"origin" "-1264 720 480" -"classname" "target_help" -"spawnflags" "2048" -} -{ -"model" "*32" -"angle" "-2" -"classname" "trigger_push" -"spawnflags" "2048" -} -{ -"model" "*33" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-528 -1968 1032" -"targetname" "t61" -"target" "t260" -"classname" "trigger_relay" -"spawnflags" "2304" -} -{ -"origin" "-552 -1992 1032" -"targetname" "t121" -"target" "t260" -"classname" "trigger_relay" -"spawnflags" "2304" -} -{ -"model" "*34" -"spawnflags" "2305" -"target" "t242" -"targetname" "t260" -"classname" "trigger_counter" -"count" "2" -} -{ -"origin" "-672 -2392 488" -"target" "t259" -"targetname" "t257" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-536 -2608 488" -"target" "t257" -"targetname" "t256" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-184 -2608 488" -"targetname" "t259" -"target" "t256" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-624 -2600 1032" -"target" "t255" -"targetname" "t254" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-680 -1904 1032" -"target" "t254" -"targetname" "t253" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-576 -1976 1032" -"targetname" "t255" -"target" "t253" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-840 -1800 248" -"target" "t251" -"targetname" "t250" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-600 -1872 248" -"target" "t252" -"targetname" "t251" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"origin" "-848 -2192 248" -"targetname" "t252" -"target" "t250" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"classname" "ammo_shells" -"origin" "-2544 -632 -56" -} -{ -"origin" "-1624 -1584 552" -"spawnflags" "1" -"targetname" "t40" -"angle" "180" -"classname" "monster_hover" -} -{ -"origin" "-1744 -1608 136" -"target" "medguy1" -"targetname" "t40" -"classname" "trigger_relay" -} -{ -"origin" "-456 -712 120" -"targetname" "t249" -"classname" "target_secret" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "200" -"origin" "-1888 -1264 1248" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-1832 -1256 1248" -"light" "200" -"classname" "light" -} -{ -"classname" "light" -"light" "200" -"origin" "-1944 -1264 1248" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-1992 -1264 1248" -"light" "200" -"classname" "light" -} -{ -"classname" "light" -"light" "200" -"origin" "-2048 -1264 1248" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "300" -"origin" "-2136 -1304 1136" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2136 -1304 1088" -"light" "300" -"classname" "light" -} -{ -"classname" "light" -"light" "200" -"origin" "-2112 -1264 1248" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-1848 -1264 1072" -"light" "300" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2128 -1304 1208" -"light" "300" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-1872 -1264 1208" -"light" "200" -"classname" "light" -} -{ -"classname" "item_health" -"origin" "-96 -1944 104" -} -{ -"spawnflags" "1536" -"classname" "item_health" -"origin" "-144 -1936 104" -} -{ -"classname" "item_armor_jacket" -"origin" "8 -1992 136" -"spawnflags" "1792" -} -{ -"model" "*35" -"classname" "trigger_push" -"angle" "-2" -"speed" "150" -"spawnflags" "2048" -} -{ -"model" "*36" -"spawnflags" "2048" -"classname" "trigger_push" -"angle" "0" -"speed" "150" -} -{ -"classname" "ammo_bullets" -"origin" "-2616 208 -24" -} -{ -"model" "*37" -"angle" "-2" -"speed" "100" -"classname" "trigger_push" -"spawnflags" "2048" -} -{ -"origin" "-888 -1912 536" -"target" "t238" -"targetname" "g2" -"classname" "trigger_relay" -} -{ -"origin" "-240 -1360 88" -"target" "t239" -"targetname" "t238" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*38" -"target" "t238" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"targetname" "t237" -"classname" "point_combat" -"origin" "-532 -1760 88" -"spawnflags" "2048" -} -{ -"targetname" "t236" -"origin" "-508 -1648 96" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"targetname" "t235" -"target" "t233" -"origin" "-300 -1448 96" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"targetname" "t234" -"target" "t232" -"classname" "point_combat" -"origin" "-332 -1448 96" -"spawnflags" "2048" -} -{ -"target" "t236" -"targetname" "t232" -"origin" "-484 -1664 88" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"target" "t237" -"targetname" "t233" -"classname" "point_combat" -"origin" "-364 -1656 88" -} -{ -"item" "item_armor_shard" -"spawnflags" "1" -"targetname" "t239" -"angle" "225" -"origin" "-336 -1344 104" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "1" -"targetname" "t239" -"target" "t235" -"angle" "225" -"origin" "-320 -1280 104" -"classname" "monster_soldier_ss" -} -{ -"item" "item_armor_shard" -"spawnflags" "257" -"targetname" "t239" -"target" "t234" -"angle" "270" -"origin" "-368 -1264 104" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "769" -"targetname" "t239" -"angle" "270" -"origin" "-416 -1208 104" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "1" -"targetname" "t239" -"angle" "225" -"origin" "-280 -1344 104" -"classname" "monster_soldier_ss" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/fan1.wav" -"origin" "-1812 444 528" -} -{ -"origin" "-1928 -1264 128" -"targetname" "t231" -"target" "t181" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-1912 -1240 120" -"delay" "360" -"targetname" "t231" -"target" "t181" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"wait" "20" -"random" "10" -"classname" "func_timer" -"origin" "-776 -2120 1000" -"targetname" "t121" -"target" "t227" -"spawnflags" "2304" -} -{ -"classname" "trigger_relay" -"origin" "-776 -2088 1000" -"delay" "4" -"targetname" "t227" -"target" "t228" -"spawnflags" "2304" -} -{ -"killtarget" "t121" -"delay" ".5" -"classname" "trigger_relay" -"origin" "-776 -2056 1000" -"targetname" "t228" -"spawnflags" "2304" -} -{ -"target" "t225" -"wait" "18" -"random" "9" -"classname" "func_timer" -"origin" "-792 -2216 1000" -"targetname" "t240" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"origin" "-792 -2184 1000" -"delay" "4" -"targetname" "t225" -"target" "t226" -"spawnflags" "2048" -} -{ -"killtarget" "t43" -"delay" ".5" -"classname" "trigger_relay" -"origin" "-792 -2152 1000" -"targetname" "t226" -"spawnflags" "2048" -} -{ -"wait" "16" -"origin" "-776 -2008 1000" -"classname" "func_timer" -"random" "8" -"targetname" "t243" -"target" "t229" -"spawnflags" "2304" -} -{ -"delay" "10" -"origin" "-776 -1976 1000" -"classname" "trigger_relay" -"targetname" "t229" -"target" "t230" -"spawnflags" "2304" -} -{ -"origin" "-776 -1944 1000" -"classname" "trigger_relay" -"delay" ".5" -"killtarget" "t65" -"targetname" "t230" -"spawnflags" "2304" -} -{ -"killtarget" "t61" -"delay" ".5" -"classname" "trigger_relay" -"origin" "-712 -2488 1000" -"targetname" "t223" -"spawnflags" "2048" -} -{ -"wait" "4" -"random" "3" -"classname" "func_timer" -"origin" "-712 -2552 1000" -"target" "t224" -"targetname" "t243" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"targetname" "t222" -"delay" ".5" -"killtarget" "t46" -"origin" "-712 -2584 1000" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"random" "3" -"wait" "4" -"targetname" "t46" -"target" "t221" -"origin" "-712 -2648 1000" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"origin" "-712 -2520 1000" -"delay" "4" -"target" "t223" -"targetname" "t224" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"origin" "-712 -2616 1000" -"targetname" "t221" -"target" "t222" -"spawnflags" "2048" -} -{ -"origin" "-2512 -352 32" -"spawnflags" "1" -"angle" "270" -"classname" "monster_tank_commander" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-1632 -160 -184" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-1632 -160 -120" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-1632 -160 -56" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-1632 -160 8" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-1632 -160 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1192 -40 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1192 -104 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1256 -168 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1632 -160 -312" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1576 -168 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1512 -168 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1448 -168 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1384 -168 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-1320 -168 72" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-1192 24 72" -} -{ -"origin" "-2896 48 -272" -"light" "120" -"classname" "light" -} -{ -"attenuation" "-1" -"volume" ".1" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-2200 -1248 336" -"targetname" "t219" -"wait" "11" -} -{ -"wait" "5" -"random" "1" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-2208 -1296 320" -"target" "t219" -} -{ -"attenuation" "-1" -"volume" ".35" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-2232 -1248 336" -"targetname" "t218" -} -{ -"wait" "15" -"random" "5" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-2240 -1296 320" -"target" "t218" -} -{ -"origin" "-2264 -1248 336" -"classname" "target_speaker" -"noise" "World/battle5.wav" -"volume" ".2" -"attenuation" "-1" -"targetname" "t217" -} -{ -"origin" "-2272 -1296 320" -"classname" "func_timer" -"spawnflags" "1" -"random" "4" -"wait" "16" -"target" "t217" -} -{ -"model" "*39" -"classname" "trigger_once" -"target" "t9" -} -{ -"spawnflags" "2048" -"origin" "228 -2352 380" -"message" "Find functioning\nData Spinner\nin Outer Courts." -"classname" "target_help" -"targetname" "t139" -} -{ -"origin" "-2880 208 104" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "11" -"target" "t220" -} -{ -"origin" "-2872 256 104" -"classname" "target_speaker" -"noise" "World/battle5.wav" -"volume" "0.3" -"attenuation" "1" -"targetname" "t220" -} -{ -"attenuation" "1" -"volume" "0.3" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-2792 160 -136" -"targetname" "t212" -} -{ -"wait" "12" -"random" "4" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-2904 136 -136" -"target" "t212" -} -{ -"attenuation" "1" -"volume" "0.4" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-2728 48 320" -"targetname" "t211" -} -{ -"wait" "6" -"random" "1" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-2736 0 320" -"target" "t211" -} -{ -"attenuation" "1" -"volume" ".5" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-1712 -1536 416" -"targetname" "t215" -} -{ -"wait" "16" -"random" "2" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-1720 -1584 416" -"target" "t215" -} -{ -"attenuation" "1" -"volume" "1" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-2016 -1608 328" -"targetname" "t214" -} -{ -"wait" "6" -"random" "3" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-2024 -1656 328" -"target" "t214" -} -{ -"attenuation" "1" -"volume" ".6" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-2200 -1424 200" -"targetname" "t213" -} -{ -"wait" "10" -"random" "3" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-2208 -1472 200" -"target" "t213" -} -{ -"model" "*40" -"speed" "150" -"angle" "-2" -"classname" "trigger_push" -} -{ -"origin" "104 -2360 360" -"target" "t209" -"delay" "2" -"targetname" "t139" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*41" -"targetname" "t209" -"wait" "-1" -"_minlight" "0.1" -"team" "dent2" -"classname" "func_door" -"angle" "270" -"spawnflags" "4" -} -{ -"model" "*42" -"targetname" "t209" -"wait" "-1" -"_minlight" "0.1" -"team" "dent2" -"classname" "func_door" -"angle" "90" -"spawnflags" "4" -} -{ -"model" "*43" -"targetname" "t209" -"wait" "-1" -"_minlight" "0.1" -"team" "dent2" -"classname" "func_door" -"angle" "-1" -"spawnflags" "4" -} -{ -"origin" "-1816 444 292" -"noise" "world/curnt3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1812 444 528" -"noise" "world/fan1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"spawnflags" "2048" -"origin" "-2072 -1920 48" -"classname" "item_health" -} -{ -"light" "150" -"_style" "2" -"origin" "24 -2664 528" -"spawnflags" "1" -"classname" "light" -} -{ -"model" "*44" -"message" "You have found a secret area." -"target" "t198" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"targetname" "t198" -"origin" "304 -2648 312" -"classname" "target_secret" -"spawnflags" "2048" -} -{ -"origin" "568 -2616 480" -"classname" "target_speaker" -"noise" "world/amb3.wav" -"spawnflags" "1" -"attenuation" "3" -"volume" "0.4" -} -{ -"origin" "320 -2632 400" -"classname" "target_speaker" -"noise" "world/amb3.wav" -"spawnflags" "1" -"attenuation" "3" -"volume" "0.4" -} -{ -"origin" "-8 -2336 400" -"classname" "target_speaker" -"noise" "world/amb3.wav" -"spawnflags" "1" -"attenuation" "3" -"volume" "0.4" -} -{ -"origin" "144 -2336 400" -"classname" "target_speaker" -"noise" "world/amb3.wav" -"spawnflags" "1" -"attenuation" "3" -"volume" "0.4" -} -{ -"origin" "-232 -2336 424" -"classname" "target_speaker" -"noise" "World/battle5.wav" -"volume" ".4" -"attenuation" "3" -"targetname" "t192" -} -{ -"classname" "item_adrenaline" -"origin" "-3096 -152 -280" -"team" "adren" -"spawnflags" "2048" -} -{ -"angle" "180" -"classname" "monster_soldier" -"targetname" "t58" -"spawnflags" "1536" -"origin" "-2896 -96 40" -} -{ -"classname" "monster_soldier" -"angle" "180" -"targetname" "t58" -"spawnflags" "512" -"origin" "-2544 -56 40" -} -{ -"classname" "item_health" -"origin" "-2008 -1920 48" -} -{ -"spawnflags" "1792" -"classname" "item_armor_jacket" -"origin" "-2040 -1960 80" -} -{ -"model" "*45" -"classname" "trigger_once" -"target" "t10" -"wait" "1" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "125" -"origin" "-2040 -1928 40" -} -{ -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -"origin" "-1080 -1920 80" -} -{ -"origin" "-736 -1832 712" -"attenuation" "1" -"volume" "1" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"targetname" "t195" -} -{ -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "14" -"origin" "-736 -1824 408" -"target" "t195" -} -{ -"classname" "func_timer" -"spawnflags" "1" -"random" "2" -"wait" "16" -"origin" "-728 -2208 536" -"target" "t196" -} -{ -"origin" "-728 -2168 536" -"attenuation" "1" -"volume" "1" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"targetname" "t196" -"random" "4" -} -{ -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "9" -"origin" "-656 -2616 336" -"targetname" "t197" -} -{ -"origin" "-656 -2576 336" -"attenuation" "1" -"volume" ".3" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"target" "t197" -} -{ -"classname" "target_speaker" -"noise" "World/battle5.wav" -"volume" "1" -"attenuation" "1" -"origin" "-352 -1696 680" -"targetname" "t194" -} -{ -"origin" "-352 -1736 680" -"wait" "7" -"random" "2" -"spawnflags" "1" -"classname" "func_timer" -"target" "t194" -} -{ -"origin" "-560 -2872 632" -"attenuation" "1" -"volume" "1" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"targetname" "t191" -} -{ -"origin" "-584 -2848 640" -"wait" "6" -"random" "2" -"spawnflags" "1" -"classname" "func_timer" -"target" "t191" -} -{ -"attenuation" "1" -"volume" ".6" -"noise" "World/battle5.wav" -"classname" "target_speaker" -"origin" "-368 -2336 440" -"targetname" "t192" -} -{ -"wait" "10" -"random" "9" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-376 -2384 440" -"target" "t192" -} -{ -"classname" "func_timer" -"spawnflags" "1" -"random" "4" -"wait" "10" -"origin" "-416 -1840 312" -"target" "t193" -} -{ -"classname" "target_speaker" -"noise" "World/battle5.wav" -"volume" "1" -"attenuation" "1" -"origin" "-416 -1800 312" -"targetname" "t193" -} -{ -"origin" "-2016 -1736 72" -"targetname" "t10" -"classname" "target_explosion" -"spawnflags" "2048" -} -{ -"origin" "-2072 -1732 32" -"delay" "2.5" -"targetname" "t10" -"classname" "target_explosion" -"spawnflags" "2048" -} -{ -"origin" "-2004 -1628 288" -"target" "t189" -"delay" "3" -"targetname" "t10" -"classname" "trigger_relay" -} -{ -"origin" "-2044 -1628 288" -"target" "t186" -"delay" "2.5" -"targetname" "t10" -"classname" "trigger_relay" -} -{ -"delay" "1" -"origin" "-2088 -1628 288" -"target" "t185" -"targetname" "t10" -"classname" "trigger_relay" -} -{ -"origin" "-2036 -1932 132" -"noise" "world/fan1.wav" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"model" "*46" -"targetname" "t190" -"mass" "500" -"dmg" "0" -"classname" "func_explosive" -"spawnflags" "2048" -} -{ -"origin" "258 -2640 656" -"classname" "item_health_large" -"spawnflags" "3072" -} -{ -"origin" "262 -2539 656" -"classname" "item_health_large" -"spawnflags" "1792" -} -{ -"classname" "light" -"light" "90" -"origin" "-3016 -136 -232" -} -{ -"classname" "trigger_relay" -"targetname" "t184" -"target" "t135" -"origin" "-1344 744 440" -"spawnflags" "2048" -} -{ -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-2194 -1302 -82" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -"origin" "-1850 -1294 -80" -} -{ -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -"origin" "-562 -874 56" -} -{ -"classname" "target_speaker" -"noise" "world/pump2.wav" -"spawnflags" "1" -"origin" "-1312 600 448" -} -{ -"dmg" "0" -"classname" "target_explosion" -"targetname" "t101" -"delay" ".5" -"origin" "-2952 -144 -232" -"spawnflags" "2048" -} -{ -"dmg" "0" -"classname" "target_explosion" -"targetname" "t101" -"delay" "2" -"origin" "-2952 -104 -240" -"spawnflags" "2048" -} -{ -"classname" "target_explosion" -"dmg" "0" -"targetname" "t101" -"delay" "3.25" -"origin" "-2944 -160 -264" -"spawnflags" "2048" -} -{ -"classname" "item_health_large" -"origin" "-2544 -592 -56" -} -{ -"origin" "-2040 -1192 112" -"classname" "target_speaker" -"spawnflags" "2" -"noise" "world/klaxon1.wav" -"targetname" "t181" -} -{ -"classname" "ammo_shells" -"origin" "-1852 436 316" -} -{ -"origin" "-1158 522 448" -"spawnflags" "1" -"noise" "world/pump2.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"noise" "world/curnt1.wav" -"classname" "target_speaker" -"origin" "-1232 488 400" -} -{ -"spawnflags" "1" -"noise" "world/bigpump.wav" -"classname" "target_speaker" -"origin" "-1232 480 24" -} -{ -"classname" "target_speaker" -"noise" "world/l_hum1.wav" -"spawnflags" "1" -"origin" "-1432 608 448" -} -{ -"classname" "item_breather" -"origin" "-2400 152 -288" -"spawnflags" "2048" -} -{ -"model" "*47" -"classname" "func_explosive" -"dmg" "1" -"mass" "700" -"targetname" "t101" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/fan1.wav" -"origin" "-3024 -144 -216" -} -{ -"classname" "trigger_relay" -"targetname" "t10" -"target" "t182" -"origin" "-1720 -1480 536" -} -{ -"model" "*48" -"classname" "trigger_counter" -"spawnflags" "1" -"targetname" "t182" -"count" "2" -"target" "t183" -} -{ -"classname" "trigger_relay" -"targetname" "medguy1" -"target" "t182" -"origin" "-1688 -1480 536" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-1432 -1576 152" -"targetname" "t181" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-1800 -1384 88" -"targetname" "t181" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-2232 -1384 88" -"targetname" "t181" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-2040 -952 88" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-2040 -1192 112" -"targetname" "t181" -} -{ -"classname" "target_speaker" -"spawnflags" "2" -"noise" "world/klaxon1.wav" -"origin" "-1384 -1784 184" -"targetname" "t181" -} -{ -"model" "*49" -"target" "t231" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"spawnflags" "256" -"target" "monster_hover" -"angle" "135" -"classname" "target_spawner" -"targetname" "t62" -"origin" "-248 -2692 528" -} -{ -"spawnflags" "256" -"classname" "target_spawner" -"targetname" "t62" -"angle" "135" -"target" "monster_hover" -"origin" "-324 -2744 528" -} -{ -"origin" "-580 -1056 68" -"classname" "point_combat" -"targetname" "t178" -"target" "t179" -} -{ -"classname" "point_combat" -"origin" "-600 -1032 64" -"targetname" "t177" -"target" "t178" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-272 -1456 92" -"targetname" "t179" -"spawnflags" "2048" -} -{ -"model" "*50" -"origin" "-964 -2000 72" -"targetname" "drtrp1" -"wait" "6" -"team" "drtrp" -"speed" "100" -"distance" "-90" -"angle" "-2" -"spawnflags" "2124" -"classname" "func_door_rotating" -} -{ -"origin" "24 -2664 500" -"classname" "item_health_mega" -"spawnflags" "1792" -} -{ -"classname" "item_health" -"origin" "-1360 696 408" -} -{ -"origin" "-1200 -80 104" -"noise" "world/curnt3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1368 -168 104" -"noise" "world/curnt3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1584 -168 104" -"noise" "world/curnt3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1632 -152 0" -"noise" "world/curnt1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1632 -152 -128" -"noise" "world/curnt1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1632 -160 -296" -"noise" "world/curnt1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1632 -160 -376" -"noise" "world/bigpump.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "-1832 -136 64" -"classname" "target_speaker" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "-1792 -200 -8" -"classname" "target_speaker" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "-1800 -160 -240" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"origin" "-1760 -96 160" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"classname" "target_speaker" -"origin" "-1880 -168 -304" -"spawnflags" "1" -"noise" "world/curnt3.wav" -} -{ -"classname" "target_speaker" -"origin" "-2064 -164 -304" -"spawnflags" "1" -"noise" "world/curnt3.wav" -} -{ -"classname" "target_speaker" -"origin" "-2256 -160 -304" -"spawnflags" "1" -"noise" "world/curnt3.wav" -} -{ -"origin" "-2408 184 -240" -"noise" "world/force1.wav" -"targetname" "red2" -"classname" "target_speaker" -"spawnflags" "2049" -} -{ -"origin" "-2624 176 -280" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-2768 184 -288" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-2872 240 -288" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-2264 136 -280" -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -} -{ -"origin" "-2008 -80 -176" -"classname" "item_health_large" -} -{ -"origin" "-2008 -196 -176" -"classname" "item_health_large" -"spawnflags" "1536" -} -{ -"origin" "-1360 736 408" -"classname" "item_health" -"spawnflags" "3072" -} -{ -"origin" "-1360 656 408" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-2448 160 -416" -"angle" "135" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"origin" "-2400 -640 53" -"_color" "1.000000 0.853755 0.268775" -"light" "175" -"classname" "light" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/curnt3.wav" -"origin" "-1200 88 104" -} -{ -"classname" "target_goal" -"targetname" "t135" -"origin" "-1336 664 440" -"spawnflags" "2048" -} -{ -"origin" "320 -2376 312" -"targetname" "t174" -"classname" "target_speaker" -"noise" "world/spark1.wav" -"attenuation" "1" -"volume" "0.5" -} -{ -"origin" "328 -2312 312" -"targetname" "t175" -"volume" "0.5" -"attenuation" "1" -"noise" "world/spark2.wav" -"classname" "target_speaker" -} -{ -"target" "t175" -"classname" "func_timer" -"random" "2.5" -"wait" "5" -"origin" "308 -2328 312" -"spawnflags" "1" -} -{ -"targetname" "t148" -"origin" "152 -2520 320" -"volume" "0.2" -"attenuation" "1" -"noise" "world/spark5.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "4" -"origin" "-1360 596 444" -"targetname" "t135" -"classname" "target_crosslevel_trigger" -} -{ -"targetname" "t172" -"target" "red2" -"origin" "-2396 176 -256" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"classname" "ammo_rockets" -"origin" "660 -2608 448" -"spawnflags" "2048" -} -{ -"origin" "-1488 104 344" -"classname" "item_health" -} -{ -"classname" "ammo_cells" -"origin" "-1208 408 4" -} -{ -"classname" "ammo_bullets" -"origin" "-1240 300 4" -} -{ -"origin" "-952 -1718 620" -"target" "t162" -"classname" "weapon_machinegun" -"spawnflags" "1792" -} -{ -"spawnflags" "1536" -"origin" "-2448 -328 24" -"classname" "ammo_bullets" -} -{ -"origin" "-2464 -288 24" -"classname" "ammo_bullets" -} -{ -"classname" "item_health" -"origin" "-1400 -1920 96" -} -{ -"classname" "ammo_bullets" -"origin" "-1400 -1960 96" -} -{ -"target" "t242" -"origin" "-336 -1816 104" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"classname" "ammo_bullets" -"origin" "-328 -2184 320" -"spawnflags" "512" -} -{ -"classname" "item_health" -"origin" "-288 -2144 320" -"spawnflags" "2048" -} -{ -"classname" "ammo_bullets" -"origin" "-912 -1640 584" -} -{ -"spawnflags" "2560" -"origin" "-912 -1600 584" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_bullets" -"origin" "-816 -2624 704" -} -{ -"spawnflags" "3584" -"origin" "-312 -2816 488" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_bullets" -"origin" "-280 -2540 320" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-320 -2536 320" -} -{ -"classname" "ammo_shells" -"origin" "660 -2656 480" -"spawnflags" "1792" -"team" "hidey1" -} -{ -"classname" "ammo_slugs" -"origin" "660 -2532 480" -"spawnflags" "1792" -"team" "hidey2" -} -{ -"origin" "-1424 -1856 112" -"angle" "270" -"spawnflags" "258" -"targetname" "t160" -"classname" "monster_gladiator" -} -{ -"origin" "-336 -2304 320" -"classname" "item_health" -} -{ -"target" "t160" -"classname" "item_health" -"origin" "420 -2584 320" -"spawnflags" "2048" -} -{ -"target" "t160" -"classname" "item_health" -"origin" "460 -2584 320" -} -{ -"origin" "-224 -2380 580" -"target" "big_secret" -"targetname" "t159" -"message" "A secret door has opened elsewhere." -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*51" -"wait" "-1" -"target" "t159" -"sounds" "3" -"angle" "0" -"classname" "func_button" -"_minlight" "0.3" -"spawnflags" "2048" -} -{ -"light" "125" -"classname" "light" -"origin" "360 -2616 504" -} -{ -"classname" "light" -"light" "125" -"origin" "296 -2616 504" -} -{ -"origin" "456 -2616 504" -"light" "125" -"classname" "light" -} -{ -"origin" "552 -2616 504" -"classname" "light" -"light" "125" -} -{ -"classname" "light" -"light" "125" -"origin" "392 -2616 440" -} -{ -"light" "125" -"classname" "light" -"origin" "456 -2616 440" -} -{ -"origin" "296 -2616 440" -"classname" "light" -"light" "125" -} -{ -"origin" "232 -2616 440" -"light" "100" -"classname" "light" -} -{ -"target" "t160" -"origin" "648 -2420 448" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"origin" "546 -2510 480" -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"team" "hidey1" -} -{ -"target" "t160" -"origin" "532 -2420 448" -"classname" "ammo_grenades" -"spawnflags" "2048" -"team" "hidey2" -} -{ -"target" "t160" -"origin" "660 -2568 448" -"classname" "item_armor_body" -"spawnflags" "2048" -} -{ -"origin" "632 -2616 436" -"targetname" "t157" -"classname" "info_null" -} -{ -"origin" "632 -2552 436" -"targetname" "t156" -"classname" "info_null" -} -{ -"origin" "600 -2520 436" -"targetname" "t155" -"classname" "info_null" -} -{ -"origin" "520 -2520 436" -"targetname" "t154" -"classname" "info_null" -} -{ -"origin" "632 -2680 436" -"targetname" "t158" -"classname" "info_null" -} -{ -"origin" "632 -2616 504" -"target" "t157" -"classname" "light" -"light" "125" -} -{ -"origin" "632 -2552 504" -"target" "t156" -"classname" "light" -"light" "150" -} -{ -"origin" "600 -2520 504" -"target" "t155" -"classname" "light" -"light" "150" -} -{ -"origin" "520 -2520 504" -"target" "t154" -"classname" "light" -"light" "150" -} -{ -"origin" "632 -2680 504" -"target" "t158" -"light" "150" -"classname" "light" -} -{ -"model" "*52" -"_minlight" "0.1" -"targetname" "big_secret" -"wait" "-1" -"angle" "-2" -"classname" "func_door" -"spawnflags" "2048" -} -{ -"targetname" "t152" -"classname" "target_splash" -"angle" "270" -"sounds" "1" -"origin" "328 -2364 320" -} -{ -"targetname" "t174" -"origin" "312 -2388 312" -"target" "t152" -"delay" ".5" -"classname" "trigger_relay" -} -{ -"targetname" "t175" -"origin" "340 -2388 312" -"delay" ".2" -"target" "t151" -"classname" "trigger_relay" -} -{ -"targetname" "t175" -"target" "t153" -"origin" "296 -2304 312" -"classname" "trigger_relay" -} -{ -"targetname" "t175" -"origin" "356 -2312 312" -"target" "t150" -"classname" "trigger_relay" -} -{ -"targetname" "t151" -"origin" "360 -2384 320" -"classname" "target_splash" -"angle" "225" -"sounds" "1" -} -{ -"targetname" "t153" -"origin" "336 -2308 328" -"sounds" "1" -"angle" "180" -"classname" "target_splash" -} -{ -"targetname" "t175" -"target" "t150" -"origin" "364 -2336 352" -"delay" ".2" -"classname" "trigger_relay" -} -{ -"target" "t174" -"spawnflags" "1" -"origin" "308 -2352 312" -"wait" "10" -"random" "5" -"classname" "func_timer" -} -{ -"style" "34" -"light" "500" -"targetname" "t150" -"origin" "364 -2340 312" -"spawnflags" "1" -"classname" "light" -} -{ -"origin" "196 -2520 332" -"Wait" "3" -"random" ".5" -"target" "t148" -"classname" "func_timer" -} -{ -"style" "35" -"targetname" "t148" -"origin" "151 -2524 316" -"_style" "1" -"light" "200" -"classname" "light" -} -{ -"origin" "-648 -840 80" -"classname" "ammo_rockets" -"spawnflags" "2048" -} -{ -"origin" "-568 -1068 80" -"classname" "ammo_shells" -"spawnflags" "0" -} -{ -"origin" "-328 -2144 320" -"classname" "ammo_bullets" -"spawnflags" "2560" -} -{ -"model" "*53" -"spawnflags" "2048" -"speed" "50" -"angle" "135" -"classname" "trigger_push" -} -{ -"model" "*54" -"spawnflags" "2048" -"angle" "180" -"speed" "50" -"classname" "trigger_push" -} -{ -"classname" "light" -"light" "80" -"origin" "-1352 -1552 88" -} -{ -"classname" "light" -"light" "100" -"origin" "-1464 -1584 184" -} -{ -"classname" "light" -"light" "100" -"origin" "-1528 -1584 184" -} -{ -"light" "100" -"origin" "-1208 752 248" -"classname" "light" -"_color" "1.000000 0.933333 0.549020" -} -{ -"light" "100" -"origin" "-1320 752 312" -"classname" "light" -"_color" "1.000000 0.933333 0.549020" -} -{ -"light" "100" -"origin" "-1440 752 312" -"classname" "light" -"_color" "1.000000 0.933333 0.549020" -} -{ -"light" "100" -"origin" "-1080 752 248" -"_color" "1.000000 0.933333 0.549020" -"classname" "light" -} -{ -"origin" "-2664 328 468" -"spawnflags" "1792" -"classname" "weapon_bfg" -} -{ -"origin" "-2533 336 473" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-2720 -352 32" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1858 -601 -56" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"angle" "270" -"origin" "-2064 -24 72" -"classname" "info_player_deathmatch" -} -{ -"model" "*55" -"spawnflags" "2048" -"speed" "125" -"angle" "270" -"classname" "trigger_push" -} -{ -"model" "*56" -"spawnflags" "2048" -"classname" "trigger_push" -"angle" "0" -"speed" "200" -} -{ -"model" "*57" -"target" "t249" -"classname" "trigger_once" -"message" "You have found a secret area." -"spawnflags" "2048" -} -{ -"classname" "target_explosion" -"delay" ".1.25" -"targetname" "t146" -"origin" "-452 -784 74" -"spawnflags" "2048" -"dmg" "1" -} -{ -"classname" "target_explosion" -"delay" "1" -"targetname" "t146" -"origin" "-484 -786 160" -"spawnflags" "2048" -"dmg" "1" -} -{ -"classname" "target_explosion" -"delay" ".5" -"targetname" "t146" -"origin" "-456 -784 130" -"spawnflags" "2048" -"dmg" "1" -} -{ -"model" "*58" -"classname" "func_explosive" -"spawnflags" "2048" -"dmg" "0" -"mass" "800" -"target" "t146" -"health" "50" -} -{ -"delay" "10" -"origin" "-1249 719 444" -"classname" "trigger_relay" -"targetname" "brdswit2" -"target" "t143" -"spawnflags" "2048" -} -{ -"model" "*59" -"classname" "trigger_counter" -"count" "2" -"targetname" "brdswit" -"spawnflags" "2049" -"target" "t144" -} -{ -"targetname" "t242" -"classname" "monster_gladiator" -"angle" "180" -"item" "ammo_slugs" -"origin" "-34 -1930 112" -"spawnflags" "770" -} -{ -"classname" "target_secret" -"targetname" "t141" -"origin" "-1320 758 438" -"spawnflags" "2048" -} -{ -"model" "*60" -"classname" "trigger_once" -"target" "t141" -"message" "You have found a secret area." -"spawnflags" "2048" -} -{ -"model" "*61" -"wait" "-1" -"classname" "func_button" -"angle" "0" -"lip" "3" -"target" "brdswit2" -"spawnflags" "2048" -} -{ -"classname" "target_secret" -"targetname" "t140" -"origin" "-2320 160 -328" -} -{ -"model" "*62" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t140" -"message" "You have found a secret area." -} -{ -"classname" "target_help" -"targetname" "t139" -"message" "Neutralize Strogg Leader's\n Communication System." -"origin" "160 -2260 336" -"spawnflags" "2049" -} -{ -"model" "*63" -"classname" "trigger_once" -"target" "t139" -"spawnflags" "2048" -} -{ -"origin" "184 -2540 680" -"delay" "30" -"classname" "trigger_relay" -"targetname" "medguy1" -"target" "t122" -"spawnflags" "2048" -} -{ -"origin" "-280 -2580 320" -"classname" "ammo_bullets" -} -{ -"targetname" "t138" -"origin" "-2032 72 68" -"classname" "info_null" -} -{ -"target" "t138" -"classname" "light" -"light" "400" -"origin" "-2032 72 298" -"_cone" "15" -} -{ -"light" "100" -"classname" "light" -"origin" "-2032 72 314" -} -{ -"targetname" "t136" -"classname" "info_null" -"origin" "-2032 16 68" -} -{ -"light" "100" -"classname" "light" -"origin" "-2032 184 314" -} -{ -"target" "t137" -"classname" "light" -"light" "400" -"origin" "-2032 184 298" -"_cone" "15" -} -{ -"targetname" "t137" -"classname" "info_null" -"origin" "-2032 184 68" -} -{ -"origin" "-2032 0 294" -"classname" "light" -"light" "100" -} -{ -"_cone" "15" -"target" "t136" -"origin" "-2032 0 278" -"light" "400" -"classname" "light" -} -{ -"classname" "light" -"light" "175" -"origin" "-832 -2608 400" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "item_health" -"origin" "-885 -2697 327" -} -{ -"classname" "ammo_bullets" -"origin" "-600 -2344 336" -"spawnflags" "2048" -} -{ -"spawnflags" "512" -"origin" "-636 -2316 328" -"classname" "ammo_bullets" -} -{ -"origin" "-1192 172 4" -"classname" "ammo_shells" -} -{ -"origin" "-1252 356 -12" -"spawnflags" "2057" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1352 568 108" -"classname" "ammo_slugs" -"spawnflags" "1792" -} -{ -"origin" "-1152 788 460" -"classname" "ammo_cells" -"spawnflags" "1792" -} -{ -"origin" "-1852 476 316" -"classname" "ammo_shells" -"spawnflags" "1024" -} -{ -"origin" "-1804 60 300" -"classname" "item_health" -"spawnflags" "3072" -} -{ -"origin" "-1608 -160 212" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-1784 0 -8" -"angle" "90" -"spawnflags" "2049" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1768 -252 60" -"classname" "ammo_rockets" -"spawnflags" "2048" -} -{ -"origin" "-1864 -220 28" -"classname" "item_health" -} -{ -"origin" "-1860 -92 60" -"classname" "weapon_supershotgun" -"spawnflags" "1792" -} -{ -"_minlight" "0.2" -"origin" "-2540 -680 -72" -"angle" "45" -"spawnflags" "2056" -"classname" "misc_deadsoldier" -} -{ -"origin" "-2480 220 -288" -"classname" "ammo_cells" -"spawnflags" "2048" -} -{ -"origin" "-2520 220 -288" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"origin" "-2516 184 -288" -"classname" "ammo_slugs" -"spawnflags" "2048" -} -{ -"origin" "-2480 148 -288" -"classname" "ammo_rockets" -"spawnflags" "0" -} -{ -"origin" "-2520 192 -231" -"classname" "weapon_chaingun" -"spawnflags" "1792" -} -{ -"origin" "-2520 144 -288" -"classname" "item_health_large" -"spawnflags" "0" -} -{ -"origin" "-2520 152 -240" -"classname" "item_power_shield" -"spawnflags" "2048" -} -{ -"target" "t172" -"origin" "-2384 220 -296" -"spawnflags" "2049" -"classname" "target_crosslevel_target" -} -{ -"origin" "-2400 208 -288" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"origin" "-2800 208 -24" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-2920 -136 40" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-2312 -1496 80" -"classname" "ammo_shells" -"spawnflags" "0" -} -{ -"origin" "-2272 -1512 80" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"origin" "-704 -832 72" -"classname" "info_player_deathmatch" -} -{ -"spawnflags" "0" -"origin" "-1624 -1624 112" -"classname" "ammo_rockets" -} -{ -"model" "*64" -"classname" "trigger_hurt" -} -{ -"origin" "-976 -2024 544" -"classname" "item_health" -} -{ -"origin" "-1360 -1920 96" -"classname" "ammo_bullets" -} -{ -"classname" "item_health" -"origin" "-2016 -688 -64" -"spawnflags" "2048" -} -{ -"origin" "-984 -1920 544" -"classname" "item_armor_combat" -"spawnflags" "1792" -} -{ -"origin" "-408 -1848 104" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-600 -840 80" -} -{ -"classname" "item_health" -"origin" "-528 -1148 80" -"spawnflags" "2048" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2896 48 -384" -"light" "70" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2872 120 -384" -"light" "80" -"classname" "light" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t124" -} -{ -"model" "*65" -"team" "redportal3" -"lip" "8" -"wait" "6" -"sounds" "4" -"speed" "75" -"angle" "270" -"classname" "func_door" -"target" "t124" -"_minlight" "0.2" -} -{ -"model" "*66" -"team" "redportal3" -"lip" "8" -"wait" "6" -"sounds" "4" -"speed" "75" -"classname" "func_door" -"angle" "90" -"target" "t124" -"_minlight" "0.2" -} -{ -"item" "ammo_cells" -"origin" "269 -2460 665" -"spawnflags" "257" -"classname" "monster_medic" -"targetname" "t123" -"angle" "180" -"target" "t286" -} -{ -"classname" "trigger_relay" -"targetname" "medguy1" -"delay" "15" -"target" "t123" -"origin" "184 -2516 680" -"spawnflags" "2048" -} -{ -"classname" "monster_medic" -"spawnflags" "769" -"origin" "273 -2525 669" -"targetname" "t122" -"target" "t180" -"angle" "180" -} -{ -"item" "ammo_cells" -"origin" "-788 -2524 1084" -"spawnflags" "2" -"classname" "monster_hover" -"targetname" "t223" -} -{ -"style" "2" -"classname" "func_areaportal" -"targetname" "t120" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t119" -} -{ -"model" "*67" -"_minlight" "0.2" -"angle" "180" -"classname" "func_door" -"target" "t119" -"speed" "75" -"sounds" "4" -"wait" "4" -"lip" "24" -"team" "redportal1" -} -{ -"model" "*68" -"_minlight" "0.2" -"classname" "func_door" -"angle" "0" -"speed" "75" -"sounds" "4" -"wait" "4" -"lip" "24" -"team" "redportal1" -} -{ -"model" "*69" -"_minlight" "0.2" -"classname" "func_door" -"angle" "0" -"speed" "75" -"team" "big red" -} -{ -"model" "*70" -"_minlight" "0.2" -"team" "big red" -"speed" "75" -"angle" "180" -"classname" "func_door" -} -{ -"classname" "point_combat" -"targetname" "t117" -"origin" "-2712 -96 24" -"spawnflags" "2048" -} -{ -"model" "*71" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t106" -} -{ -"model" "*72" -"classname" "func_wall" -"targetname" "t106" -"spawnflags" "6" -} -{ -"light" "150" -"origin" "-980 446 456" -"_color" "0.862348 1.000000 0.085020" -"classname" "light" -} -{ -"target" "bigbridge" -"targetname" "brdswit2" -"origin" "-1247 771 476" -"classname" "trigger_relay" -"delay" "3" -"spawnflags" "2048" -} -{ -"model" "*73" -"target" "t111" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"light" "200" -"_style" "10" -"_color" "1.000000 1.000000 0.509804" -"origin" "-1426 608 478" -"classname" "light" -} -{ -"classname" "trigger_relay" -"targetname" "brdswit2" -"target" "brdswit" -"origin" "-1271 711 444" -"delay" "5" -"spawnflags" "2048" -} -{ -"classname" "item_health" -"origin" "-712 -1692 592" -} -{ -"origin" "-440 -1748 88" -"targetname" "t108" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"origin" "-428 -1740 88" -"target" "t108" -"targetname" "t107" -"classname" "point_combat" -"pathtarget" "killme" -"spawnflags" "2048" -} -{ -"targetname" "t178" -"target" "t107" -"origin" "-252 -1440 104" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"model" "*74" -"targetname" "red2" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"origin" "-904 -2064 1000" -"classname" "info_player_deathmatch" -} -{ -"origin" "-220 -2252 584" -"classname" "info_player_deathmatch" -} -{ -"item" "ammo_cells" -"origin" "209 -2472 657" -"targetname" "medguy1" -"spawnflags" "1" -"classname" "monster_medic" -"angle" "180" -"target" "t285" -} -{ -"classname" "ammo_bullets" -"origin" "-596 -2288 328" -"spawnflags" "2048" -} -{ -"item" "item_armor_shard" -"classname" "monster_soldier_ss" -"angle" "270" -"origin" "-888 -1544 608" -"spawnflags" "257" -"targetname" "m2" -} -{ -"origin" "-760 -1832 552" -"classname" "trigger_relay" -"killtarget" "g6" -"targetname" "g6" -"delay" ".4" -"spawnflags" "2048" -} -{ -"model" "*75" -"target" "t101" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-1382 188 340" -"targetname" "t93" -"classname" "point_combat" -} -{ -"origin" "-1248 120 344" -"targetname" "t94" -"classname" "point_combat" -} -{ -"spawnflags" "2049" -"origin" "-1060 592 428" -"targetname" "t98" -"classname" "point_combat" -} -{ -"model" "*76" -"target" "t91" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"angle" "0" -"item" "item_armor_shard" -"origin" "-1615 -154 260" -"spawnflags" "768" -"targetname" "t91" -"classname" "monster_hover" -} -{ -"origin" "-1122 415 431" -"spawnflags" "257" -"classname" "monster_soldier_ss" -"targetname" "t111" -} -{ -"target" "t98" -"origin" "-970 622 424" -"spawnflags" "1" -"classname" "monster_soldier_ss" -"targetname" "t111" -} -{ -"item" "ammo_bullets" -"target" "t93" -"origin" "-1004 132 422" -"spawnflags" "257" -"classname" "monster_soldier_ss" -"targetname" "t111" -} -{ -"target" "t94" -"origin" "-1108 104 406" -"spawnflags" "257" -"classname" "monster_soldier_ss" -"targetname" "t111" -} -{ -"item" "item_armor_shard" -"origin" "-964 290 424" -"angle" "270" -"spawnflags" "1" -"classname" "monster_soldier_ss" -"targetname" "t111" -} -{ -"item" "item_armor_shard" -"angle" "180" -"origin" "-876 -1992 1016" -"classname" "monster_hover" -"spawnflags" "258" -"targetname" "t230" -} -{ -"item" "ammo_rockets" -"classname" "monster_tank_commander" -"spawnflags" "257" -"targetname" "t1" -"origin" "-2024 -392 -8" -"angle" "270" -} -{ -"spawnflags" "258" -"targetname" "t1" -"classname" "monster_hover" -"origin" "-860 -1956 636" -} -{ -"item" "ammo_cells" -"spawnflags" "258" -"targetname" "t1" -"classname" "monster_hover" -"origin" "-812 -1876 620" -} -{ -"classname" "point_combat" -"origin" "-2216 -1520 40" -"targetname" "t77" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-2128 -1512 24" -"targetname" "t78" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-1960 -1488 40" -"targetname" "t79" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-1840 -1584 40" -"targetname" "t80" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-1768 -1496 64" -"targetname" "t81" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"origin" "-2288 -1512 56" -"targetname" "t77" -"spawnflags" "2048" -} -{ -"targetname" "t186" -"item" "ammo_bullets" -"origin" "-2036 -1908 380" -"classname" "monster_soldier_ss" -"target" "t79" -"spawnflags" "2" -} -{ -"targetname" "t189" -"origin" "-2036 -1948 380" -"classname" "monster_soldier_ss" -"target" "t78" -"spawnflags" "258" -} -{ -"targetname" "t185" -"classname" "monster_soldier_ss" -"origin" "-2076 -1908 380" -"target" "t77" -"spawnflags" "258" -} -{ -"targetname" "t189" -"item" "ammo_bullets" -"classname" "monster_soldier_ss" -"origin" "-1988 -1948 380" -"target" "t80" -"spawnflags" "514" -} -{ -"targetname" "t185" -"classname" "monster_soldier_ss" -"origin" "-1988 -1908 380" -"target" "t81" -"spawnflags" "770" -} -{ -"targetname" "t186" -"item" "ammo_bullets" -"angle" "180" -"classname" "monster_soldier_ss" -"origin" "-2076 -1948 380" -"spawnflags" "2" -} -{ -"item" "item_armor_shard" -"targetname" "t101" -"classname" "monster_gladiator" -"spawnflags" "770" -"origin" "-3020 -136 -270" -"angle" "0" -} -{ -"model" "*77" -"classname" "trigger_once" -"target" "t76" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"target" "t74" -"delay" "0.3" -"targetname" "t76" -"origin" "-2728 -136 -296" -} -{ -"classname" "monster_soldier" -"origin" "-2568 -144 -280" -"targetname" "t74" -"angle" "180" -"spawnflags" "769" -} -{ -"item" "ammo_shells" -"classname" "monster_soldier" -"origin" "-2608 -120 -280" -"targetname" "t76" -"angle" "180" -"spawnflags" "1" -} -{ -"item" "item_power_shield" -"targetname" "t76" -"classname" "monster_gladiator" -"origin" "-2112 -240 -168" -"angle" "270" -"spawnflags" "1" -} -{ -"targetname" "t58" -"spawnflags" "2" -"angle" "180" -"classname" "monster_hover" -"origin" "-2534 84 484" -"deathtarget" "hv4" -} -{ -"spawnflags" "258" -"classname" "monster_hover" -"origin" "-2536 264 504" -"targetname" "t265" -} -{ -"angle" "270" -"classname" "info_player_start" -"targetname" "city1XH" -"origin" "-2040 80 72" -} -{ -"classname" "info_player_start" -"angle" "270" -"targetname" "city1XL" -"origin" "-2040 48 -168" -} -{ -"classname" "point_combat" -"targetname" "t68" -"origin" "-1368 -1864 88" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"targetname" "t67" -"origin" "-1432 -1912 88" -"spawnflags" "2048" -} -{ -"targetname" "t303" -"deathtarget" "t121" -"target" "t259" -"classname" "monster_hover" -"origin" "-160 -2600 504" -"angle" "225" -"spawnflags" "1" -} -{ -"target" "g6" -"targetname" "g2" -"origin" "-792 -1832 552" -"classname" "trigger_relay" -"delay" "0.1" -"spawnflags" "2048" -} -{ -"target" "gate1" -"origin" "-792 -1800 552" -"classname" "trigger_relay" -"targetname" "g6" -"delay" "0.1" -"spawnflags" "2048" -} -{ -"targetname" "g4" -"target" "gate1" -"classname" "trigger_relay" -"origin" "-792 -1872 552" -"spawnflags" "2048" -} -{ -"target" "gate1" -"targetname" "g1" -"origin" "-808 -1760 288" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"spawnflags" "2" -"origin" "-1388 -1796 120" -"targetname" "m1" -"classname" "monster_soldier_ss" -"target" "t67" -} -{ -"item" "ammo_bullets" -"spawnflags" "258" -"origin" "-1436 -1796 128" -"angle" "270" -"targetname" "m1" -"classname" "monster_soldier_ss" -"target" "t68" -} -{ -"item" "item_armor_shard" -"targetname" "m2" -"spawnflags" "257" -"origin" "-936 -1568 596" -"angle" "135" -"classname" "monster_soldier_ss" -} -{ -"targetname" "g4" -"killtarget" "gatetrig1" -"classname" "trigger_relay" -"origin" "-792 -1912 552" -"spawnflags" "2048" -} -{ -"model" "*78" -"lip" "12" -"wait" "-1" -"sounds" "3" -"target" "g2" -"angle" "-2" -"classname" "func_button" -"spawnflags" "2048" -} -{ -"model" "*79" -"target" "g4" -"targetname" "gatetrig2" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-800 -1728 288" -"killtarget" "gatetrig2" -"targetname" "g1" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*80" -"targetname" "gatetrig1" -"target" "g1" -"classname" "trigger_once" -} -{ -"model" "*81" -"_minlight" "0.1" -"message" "ACCESS DENIED.\nThis gate is opened elsewhere." -"sounds" "4" -"lip" "64" -"dmg" "25" -"speed" "50" -"targetname" "gate1" -"spawnflags" "2093" -"angle" "-1" -"classname" "func_door" -} -{ -"classname" "light" -"light" "70" -"origin" "-1272 -1936 184" -} -{ -"item" "ammo_slugs" -"angle" "180" -"classname" "monster_gladiator" -"targetname" "t58" -"origin" "-2544 -120 32" -"target" "t117" -"spawnflags" "257" -} -{ -"classname" "ammo_bullets" -"origin" "-264 -2792 488" -"spawnflags" "2048" -} -{ -"classname" "item_health" -"origin" "-856 -2616 704" -} -{ -"classname" "item_health" -"origin" "-856 -2560 704" -} -{ -"model" "*82" -"classname" "trigger_once" -"spawnflags" "2308" -"targetname" "t40" -"target" "t62" -} -{ -"item" "item_armor_shard" -"targetname" "t106" -"angle" "270" -"classname" "monster_soldier_ss" -"origin" "-1248 792 422" -"spawnflags" "257" -} -{ -"targetname" "t106" -"classname" "monster_soldier_ss" -"angle" "180" -"origin" "-1320 604 430" -"spawnflags" "1" -} -{ -"targetname" "bigbridge" -"spawnflags" "1" -"classname" "monster_gladiator" -"origin" "-1015 366 436" -"angle" "225" -} -{ -"deathtarget" "t121" -"item" "ammo_cells" -"classname" "monster_hover" -"spawnflags" "2" -"origin" "-900 -2160 1044" -"targetname" "t226" -} -{ -"deathtarget" "t61" -"classname" "monster_hover" -"spawnflags" "258" -"origin" "-788 -2628 1092" -"targetname" "t222" -} -{ -"classname" "monster_hover" -"spawnflags" "258" -"origin" "-904 -2104 1016" -"targetname" "t228" -} -{ -"targetname" "t242" -"item" "ammo_slugs" -"classname" "monster_gladiator" -"spawnflags" "1" -"origin" "-108 -1880 108" -"deathtarget" "t243" -} -{ -"targetname" "t243" -"classname" "monster_gladiator" -"spawnflags" "257" -"origin" "-704 -1048 102" -"angle" "0" -} -{ -"model" "*83" -"origin" "-964 -1840 72" -"classname" "func_door_rotating" -"spawnflags" "2124" -"angle" "-2" -"distance" "90" -"speed" "100" -"team" "drtrp" -"targetname" "drtrp1" -"wait" "6" -} -{ -"model" "*84" -"classname" "func_plat" -"speed" "75" -"_minlight" "0.1" -} -{ -"model" "*85" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "t58" -} -{ -"classname" "path_corner" -"target" "t54" -"targetname" "t57" -"origin" "-2192 -832 -56" -} -{ -"classname" "item_health" -"origin" "-288 -2104 320" -} -{ -"model" "*86" -"spawnflags" "4" -"angle" "-1" -"classname" "func_door" -"team" "dent1" -"_minlight" "0.1" -} -{ -"model" "*87" -"spawnflags" "4" -"angle" "270" -"classname" "func_door" -"team" "dent1" -"_minlight" "0.1" -} -{ -"model" "*88" -"spawnflags" "4" -"angle" "90" -"classname" "func_door" -"team" "dent1" -"_minlight" "0.1" -"target" "t120" -} -{ -"classname" "light" -"origin" "-128 -2288 344" -"light" "150" -"_color" "0.650980 1.000000 0.650980" -} -{ -"_color" "0.650980 1.000000 0.650980" -"light" "150" -"origin" "-128 -2400 344" -"classname" "light" -} -{ -"classname" "light" -"origin" "-128 -2400 400" -"light" "150" -"_color" "0.650980 1.000000 0.650980" -} -{ -"_color" "0.650980 1.000000 0.650980" -"light" "150" -"origin" "-128 -2288 400" -"classname" "light" -} -{ -"origin" "-2000 -48 64" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"origin" "-2504 -288 24" -"classname" "ammo_bullets" -} -{ -"origin" "-2056 -688 -64" -"classname" "item_health" -} -{ -"origin" "-2496 -680 -8" -"classname" "item_armor_jacket" -"spawnflags" "1792" -} -{ -"angle" "270" -"origin" "-2664 312 520" -"classname" "monster_hover" -"targetname" "t58" -"deathtarget" "hv1" -"spawnflags" "257" -} -{ -"targetname" "t263" -"origin" "-2536 144 488" -"classname" "monster_hover" -"spawnflags" "2" -} -{ -"targetname" "t267" -"origin" "-2534 10 484" -"classname" "monster_hover" -"angle" "180" -"spawnflags" "2" -} -{ -"origin" "-2768 312 512" -"angle" "270" -"classname" "monster_hover" -"targetname" "t58" -"deathtarget" "hv3" -"spawnflags" "1" -} -{ -"model" "*89" -"classname" "func_plat" -"speed" "200" -"lip" "0" -"sounds" "2" -"_minlight" "0.1" -} -{ -"deathtarget" "t171" -"item" "ammo_bullets" -"origin" "-2032 -120 72" -"angle" "270" -"classname" "monster_tank_commander" -"spawnflags" "1" -} -{ -"angle" "45" -"deathtarget" "t46" -"target" "t251" -"spawnflags" "257" -"classname" "monster_hover" -"origin" "-568 -1880 264" -"targetname" "t246" -} -{ -"target" "t255" -"deathtarget" "t240" -"targetname" "t64" -"origin" "-720 -2180 1040" -"classname" "monster_hover" -"spawnflags" "1" -"angle" "45" -} -{ -"model" "*90" -"target" "drtrp1" -"delay" "0.1" -"wait" "6" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"target" "t242" -"origin" "-336 -1856 104" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "-560 -1108 80" -"classname" "item_health" -"spawnflags" "1024" -} -{ -"origin" "-488 -736 104" -"classname" "item_health_large" -"spawnflags" "0" -} -{ -"model" "*91" -"spawnflags" "2048" -"angle" "270" -"speed" "75" -"classname" "trigger_push" -} -{ -"origin" "-1608 -1640 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1592 -1640 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1576 -1640 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1608 -1528 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1592 -1528 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1576 -1528 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1544 -1528 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1528 -1528 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1512 -1528 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1480 -1528 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1464 -1528 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1448 -1528 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1416 -1528 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1400 -1528 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1384 -1528 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1352 -1600 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1352 -1568 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1352 -1536 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1352 -1664 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1352 -1632 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1352 -1616 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1352 -1696 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1352 -1680 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1352 -1744 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1352 -1840 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1352 -1824 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1352 -1808 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1464 -1888 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1464 -1872 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1464 -1856 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1464 -1744 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1512 -1640 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1528 -1640 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1544 -1640 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1464 -1952 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1464 -1936 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1464 -1920 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1464 -1792 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1464 -1808 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1464 -1824 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1440 -1976 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1424 -1976 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1408 -1976 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1280 -1976 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1296 -1976 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1312 -1976 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1344 -1976 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1360 -1976 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1376 -1976 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1280 -1872 88" -"light" "64" -"classname" "light" -} -{ -"origin" "-1296 -1872 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1312 -1872 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1464 -1680 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-1464 -1696 88" -"classname" "light" -"light" "64" -} -{ -"origin" "-1464 -1664 88" -"light" "64" -"classname" "light" -} -{ -"model" "*92" -"target" "t40" -"classname" "trigger_multiple" -} -{ -"classname" "light" -"light" "175" -"origin" "-448 -2288 448" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-472 -2344 360" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-496 -920 40" -"light" "100" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-544 -928 40" -"light" "100" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-536 -928 64" -"light" "100" -} -{ -"light" "100" -"origin" "-616 -928 64" -"classname" "light" -"_color" "1.000000 0.448000 0.208000" -} -{ -"light" "150" -"origin" "-440 -712 40" -"classname" "light" -"_color" "1.000000 0.448000 0.208000" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-472 -696 40" -"light" "150" -} -{ -"light" "100" -"origin" "-440 -712 88" -"classname" "light" -"_color" "1.000000 0.448000 0.208000" -} -{ -"light" "100" -"origin" "-632 -888 40" -"classname" "light" -"_color" "1.000000 0.448000 0.208000" -} -{ -"light" "100" -"origin" "-576 -872 64" -"classname" "light" -"_color" "1.000000 0.448000 0.208000" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-568 -984 88" -"light" "100" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-440 -744 40" -"light" "150" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-440 -808 32" -"light" "150" -} -{ -"_color" "1.000000 0.448000 0.208000" -"classname" "light" -"origin" "-624 -928 40" -"light" "100" -} -{ -"classname" "light" -"_color" "1.000000 0.448000 0.208000" -"origin" "-552 -1056 120" -"light" "150" -} -{ -"classname" "light" -"light" "175" -"origin" "-712 -2736 752" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-584 -2800 688" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-456 -2800 624" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-360 -2816 544" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-760 -2472 304" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-784 -2480 352" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "-720 -2576 384" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-880 -2480 352" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-800 -2368 336" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-864 -2208 240" -"light" "175" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "-800 -2208 240" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-816 -2064 176" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-280 -2736 488" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-800 -2648 784" -"light" "100" -"classname" "light" -} -{ -"origin" "-1656 -1584 168" -"light" "100" -"classname" "light" -} -{ -"origin" "-1592 -1584 168" -"light" "100" -"classname" "light" -} -{ -"origin" "-1400 -1584 184" -"light" "100" -"classname" "light" -} -{ -"origin" "-1400 -1664 184" -"light" "100" -"classname" "light" -} -{ -"origin" "-1400 -1792 184" -"light" "100" -"classname" "light" -} -{ -"origin" "-1400 -1856 184" -"light" "100" -"classname" "light" -} -{ -"origin" "-1400 -1920 184" -"light" "100" -"classname" "light" -} -{ -"origin" "-1336 -1920 184" -"light" "100" -"classname" "light" -} -{ -"origin" "-1272 -1904 184" -"light" "100" -"classname" "light" -} -{ -"angle" "270" -"origin" "-1584 -1160 960" -"targetname" "t10" -"spawnflags" "258" -"classname" "monster_hover" -} -{ -"item" "ammo_cells" -"origin" "-2432 -1704 656" -"targetname" "t10" -"spawnflags" "2" -"classname" "monster_hover" -} -{ -"angle" "270" -"origin" "-2072 -944 1032" -"targetname" "t10" -"spawnflags" "2" -"classname" "monster_hover" -} -{ -"model" "*93" -"classname" "func_button" -"angle" "-2" -"target" "t20" -"lip" "12" -"sounds" "3" -} -{ -"origin" "-2848 -64 -168" -"classname" "light" -"light" "100" -} -{ -"origin" "-2832 -80 -168" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-2832 -192 -168" -} -{ -"light" "100" -"classname" "light" -"origin" "-2848 -208 -168" -} -{ -"spawnflags" "258" -"origin" "-1992 -944 1032" -"classname" "monster_hover" -"targetname" "t183" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-318 -2066 448" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-446 -2066 512" -"light" "175" -"classname" "light" -} -{ -"classname" "light" -"light" "200" -"origin" "-512 -2512 512" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "200" -"origin" "-512 -2192 512" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "200" -"origin" "-512 -2384 512" -"_color" "1.000000 0.976471 0.501961" -} -{ -"spawnflags" "80" -"classname" "light" -"light" "200" -"origin" "-576 -2480 512" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-240 -2672 456" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-312 -2552 368" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-448 -2480 448" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "125" -"origin" "-464 -2248 400" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "200" -"origin" "-576 -2288 512" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "0.000000 1.000000 1.000000" -"origin" "-2960 232 -216" -"light" "70" -"classname" "light" -} -{ -"_color" "0.000000 1.000000 1.000000" -"origin" "-2960 280 -216" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "70" -"origin" "-2904 232 -216" -} -{ -"light" "70" -"classname" "light" -"origin" "-2904 280 -216" -} -{ -"_color" "0.000000 1.000000 1.000000" -"origin" "-2960 232 -280" -"light" "70" -"classname" "light" -} -{ -"_color" "0.000000 1.000000 1.000000" -"origin" "-2960 280 -280" -"classname" "light" -"light" "70" -} -{ -"_color" "0.000000 1.000000 1.000000" -"classname" "light" -"light" "70" -"origin" "-2904 232 -280" -} -{ -"_color" "0.000000 1.000000 1.000000" -"light" "70" -"classname" "light" -"origin" "-2904 280 -280" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2960 232 -336" -"light" "70" -"classname" "light" -} -{ -"origin" "-2960 280 -336" -"classname" "light" -"light" "70" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2904 232 -336" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "70" -"classname" "light" -"origin" "-2904 280 -336" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2968 224 -384" -"light" "70" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2968 272 -384" -"classname" "light" -"light" "70" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2912 224 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "70" -"classname" "light" -"origin" "-2912 272 -384" -} -{ -"origin" "-2904 232 -152" -"light" "70" -"classname" "light" -} -{ -"origin" "-2904 280 -152" -"classname" "light" -"light" "70" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2872 184 -384" -"light" "80" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2872 232 -384" -"classname" "light" -"light" "80" -} -{ -"origin" "-1664 -1568 233" -"_color" "1.000000 0.853755 0.268775" -"light" "150" -"classname" "light" -} -{ -"origin" "-2184 -752 53" -"_color" "1.000000 0.853755 0.268775" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2184 -720 53" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.853755 0.268775" -"origin" "-1664 -1600 233" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.853755 0.268775" -"origin" "-1880 -720 53" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2256 -640 53" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2288 -640 53" -} -{ -"classname" "light" -"light" "125" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2496 -632 21" -} -{ -"item" "ammo_rockets" -"spawnflags" "257" -"origin" "-1880 -650 -54" -"angle" "270" -"target" "t55" -"targetname" "t9" -"classname" "monster_tank_commander" -} -{ -"classname" "light" -"light" "175" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2440 -456 79" -} -{ -"classname" "light" -"light" "175" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2552 -456 79" -} -{ -"classname" "light" -"light" "175" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2496 -376 167" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.853755 0.268775" -"origin" "-2688 -240 167" -} -{ -"model" "*94" -"classname" "trigger_once" -"target" "bigbridge" -"delay" "1" -"spawnflags" "2048" -} -{ -"model" "*95" -"spawnflags" "32" -"classname" "func_door" -"angle" "0" -"speed" "35" -"targetname" "bigbridge" -"lip" "390" -} -{ -"model" "*96" -"_minlight" "0.1" -"wait" "-1" -"classname" "func_door" -"angle" "-1" -"lip" "8" -"speed" "75" -"spawnflags" "8" -"sounds" "2" -"targetname" "t20" -"delay" "10" -} -{ -"classname" "key_data_spinner" -"origin" "-1428 608 448" -"target" "t184" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "200" -"origin" "-1024 792 440" -} -{ -"origin" "-2072 152 -184" -"targetname" "exit_low" -"classname" "target_changelevel" -"map" "city2$city2NL" -} -{ -"model" "*97" -"target" "exit_low" -"classname" "trigger_multiple" -"angle" "90" -} -{ -"origin" "-2072 104 88" -"map" "city2$city2NH" -"targetname" "exit_high" -"classname" "target_changelevel" -} -{ -"model" "*98" -"target" "exit_high" -"classname" "trigger_multiple" -"angle" "90" -} -{ -"light" "200" -"classname" "light" -"origin" "-2040 -376 120" -} -{ -"light" "200" -"classname" "light" -"origin" "-2040 -504 120" -} -{ -"light" "200" -"classname" "light" -"origin" "-2040 -632 120" -} -{ -"classname" "light" -"light" "200" -"origin" "-2024 -248 120" -} -{ -"light" "200" -"classname" "light" -"origin" "-1896 -832 32" -} -{ -"light" "200" -"classname" "light" -"origin" "-1952 -632 56" -} -{ -"light" "200" -"classname" "light" -"origin" "-2112 -632 32" -} -{ -"classname" "light" -"light" "200" -"origin" "-2160 -824 32" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-832 -1920 176" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-720 -2000 176" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-768 -2112 240" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-864 -2336 304" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-656 -2576 384" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-872 -2536 400" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-784 -2568 368" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-320 -2736 480" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-448 -2608 448" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-640 -2384 512" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"origin" "-1816 -144 288" -"light" "100" -} -{ -"_color" "1.000000 0.709804 0.658824" -"classname" "light" -"origin" "-1785 -69 72" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"origin" "-1800 -144 168" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"origin" "-1800 -144 -272" -"light" "200" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"origin" "-1800 -144 -56" -"light" "150" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-1952 -168 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2016 -168 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2080 -168 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2144 -168 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2208 -168 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2272 -136 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2272 -72 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2272 -8 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "90" -"classname" "light" -"origin" "-1888 -168 -384" -} -{ -"origin" "-1636 -162 -434" -"_style" "5" -"light" "300" -"_color" "0.000000 1.000000 0.000000" -"classname" "light" -} -{ -"model" "*99" -"origin" "-1718 -214 -327" -"message" "The gate is blocked by debris." -"speed" "60" -"angle" "180" -"targetname" "pumpdoor" -"classname" "func_door_rotating" -"distance" "90" -"wait" "-1" -} -{ -"model" "*100" -"spawnflags" "2048" -"mass" "200" -"health" "20" -"target" "pumpdoor" -"classname" "func_explosive" -"dmg" "1" -} -{ -"item" "ammo_bullets" -"spawnflags" "1" -"targetname" "t9" -"target" "t1" -"classname" "monster_tank_commander" -"angle" "0" -"origin" "-2032 -1560 32" -} -{ -"light" "100" -"classname" "light" -"origin" "-2696 -192 -152" -} -{ -"light" "100" -"classname" "light" -"origin" "-2712 -176 -152" -} -{ -"origin" "-2712 -96 -152" -"classname" "light" -"light" "100" -} -{ -"origin" "-2696 -80 -152" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-1832 -1400 312" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "300" -"origin" "-1832 -1400 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "200" -"origin" "-1832 -1400 696" -} -{ -"_color" "1.000000 0.576471 0.501961" -"origin" "-2216 -1400 312" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "300" -"origin" "-2216 -1400 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "200" -"origin" "-2216 -1400 696" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2216 -1528 312" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "300" -"origin" "-2216 -1528 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "300" -"origin" "-2216 -1528 696" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2088 -1400 312" -"classname" "light" -"light" "200" -} -{ -"_color" "1.000000 0.576471 0.501961" -"origin" "-1960 -1400 312" -"classname" "light" -"light" "200" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "300" -"classname" "light" -"origin" "-2088 -1400 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "300" -"classname" "light" -"origin" "-1960 -1400 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "200" -"classname" "light" -"origin" "-1960 -1400 696" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "200" -"classname" "light" -"origin" "-2088 -1400 696" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2168 -1264 1248" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2088 -1528 312" -"classname" "light" -"light" "200" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-1960 -1528 312" -"classname" "light" -"light" "200" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "300" -"classname" "light" -"origin" "-2088 -1528 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "300" -"classname" "light" -"origin" "-1960 -1528 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "300" -"classname" "light" -"origin" "-1960 -1528 696" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "300" -"classname" "light" -"origin" "-2088 -1528 696" -} -{ -"origin" "-2472 -1528 504" -"light" "300" -"classname" "light" -"_color" "1.000000 0.576471 0.501961" -} -{ -"origin" "-2344 -1528 504" -"light" "300" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2088 -1272 504" -"classname" "light" -"light" "200" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1960 -1272 504" -"classname" "light" -"light" "200" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1832 -1528 504" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1704 -1528 504" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1576 -1528 520" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2472 -1528 696" -"light" "300" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2344 -1528 696" -"light" "300" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2088 -1272 696" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1960 -1272 696" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1832 -1528 696" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1704 -1528 696" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1576 -1528 696" -"classname" "light" -"light" "300" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-1816 -1272 1008" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2128 -1272 1008" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "200" -"origin" "-1872 -1264 1144" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "300" -"origin" "-1848 -1264 1024" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "300" -"classname" "light" -"origin" "-1576 -1528 376" -"_color" "1.000000 0.576471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-1704 -1528 312" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "200" -"origin" "-2328 -1528 312" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-1832 -1528 312" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-1960 -1272 376" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-2088 -1272 344" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-1880 -752 53" -"_color" "1.000000 0.853755 0.268775" -"light" "150" -"classname" "light" -} -{ -"origin" "-2688 -176 167" -"_color" "1.000000 0.853755 0.268775" -"light" "150" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-1912 -72 -384" -"light" "70" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "70" -"origin" "-1848 -72 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2272 72 -384" -"classname" "light" -"light" "90" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2232 120 -384" -"light" "70" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2232 184 -384" -"light" "70" -"classname" "light" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2296 120 -384" -"classname" "light" -"light" "70" -} -{ -"_color" "0.615686 1.000000 0.894118" -"origin" "-2296 184 -384" -"classname" "light" -"light" "70" -} -{ -"_color" "0.826772 0.539370 1.000000" -"origin" "-2520 -104 56" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "100" -"classname" "light" -"origin" "-2584 -104 56" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "100" -"classname" "light" -"origin" "-2648 -104 56" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2712 -104 56" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "100" -"classname" "light" -"origin" "-2776 -104 56" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 -104 56" -"classname" "light" -"light" "100" -} -{ -"_color" "0.826772 0.539370 1.000000" -"origin" "-2904 -104 56" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 -40 56" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 24 56" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 88 56" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 152 56" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "64" -"classname" "light" -"origin" "-2584 -104 216" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "64" -"classname" "light" -"origin" "-2648 -104 216" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2712 -104 216" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "64" -"classname" "light" -"origin" "-2776 -104 216" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 -104 216" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 -104 216" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 -40 216" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 24 216" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 88 188" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2904 152 188" -"classname" "light" -"light" "100" -} -{ -"classname" "light" -"light" "150" -"origin" "-2708 136 -128" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2836 136 -128" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2708 104 8" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2580 104 8" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2900 104 8" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2708 104 64" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2580 104 64" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2836 104 64" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2900 104 64" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2708 104 160" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2580 104 160" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2836 104 160" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "150" -"origin" "-2900 104 160" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2580 168 -224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.620553 0.529644" -"classname" "light" -"light" "150" -"origin" "-2324 168 -224" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2708 168 -224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2836 168 -224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2900 168 -224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2580 104 224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2708 104 224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2836 104 224" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2900 104 196" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.620553 0.529644" -"origin" "-2580 104 288" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2708 104 288" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2708 104 352" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.620553 0.529644" -"origin" "-2900 104 352" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2636 104 504" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2708 104 448" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2796 104 448" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2580 104 512" -"light" "300" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2708 104 512" -"light" "300" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2836 104 512" -"light" "300" -"classname" "light" -} -{ -"origin" "-2584 -104 152" -"classname" "light" -"light" "80" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2648 -104 152" -"classname" "light" -"light" "80" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "80" -"classname" "light" -"origin" "-2712 -104 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-2776 -104 152" -"classname" "light" -"light" "80" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "150" -"classname" "light" -"origin" "-2712 32 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2648 32 504" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-2584 32 504" -} -{ -"light" "150" -"classname" "light" -"origin" "-2520 32 504" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2776 32 504" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 32 504" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 56 504" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 120 504" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 184 504" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2840 248 504" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-2872 312 504" -"classname" "light" -"light" "200" -} -{ -"classname" "light" -"light" "125" -"origin" "-2840 568 376" -} -{ -"classname" "light" -"light" "125" -"origin" "-2864 504 376" -} -{ -"light" "125" -"classname" "light" -"origin" "-2880 504 376" -} -{ -"classname" "light" -"light" "125" -"origin" "-2968 568 376" -} -{ -"light" "125" -"classname" "light" -"origin" "-3032 504 376" -} -{ -"light" "64" -"classname" "light" -"origin" "-2904 152 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "80" -"classname" "light" -"origin" "-2904 88 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "80" -"classname" "light" -"origin" "-2904 24 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "80" -"classname" "light" -"origin" "-2904 -40 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "80" -"classname" "light" -"origin" "-2904 -104 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "80" -"classname" "light" -"origin" "-2840 -104 152" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "70" -"origin" "-2896 48 -352" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "70" -"origin" "-2960 232 -152" -} -{ -"_color" "1.000000 0.976471 0.501961" -"light" "70" -"classname" "light" -"origin" "-2960 280 -152" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2808 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2808 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2808 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2360 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2424 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2488 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2616 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2552 184 -384" -} -{ -"light" "80" -"classname" "light" -"origin" "-2680 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2744 184 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "70" -"origin" "-2296 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2360 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2360 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2424 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2424 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2488 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2488 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2552 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2552 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2616 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2616 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2680 232 -384" -} -{ -"light" "80" -"classname" "light" -"origin" "-2680 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"classname" "light" -"light" "80" -"origin" "-2744 232 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "80" -"classname" "light" -"origin" "-2744 120 -384" -} -{ -"_color" "0.615686 1.000000 0.894118" -"light" "70" -"classname" "light" -"origin" "-2232 232 -384" -} -{ -"_color" "1.000000 0.733333 0.733333" -"origin" "-2144 96 136" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "-2144 160 136" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "light" -"light" "100" -"origin" "-1920 96 136" -"_color" "1.000000 0.733333 0.733333" -} -{ -"_color" "1.000000 0.733333 0.733333" -"origin" "-1920 160 136" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.733333 0.733333" -"classname" "light" -"light" "150" -"origin" "-1880 288 248" -} -{ -"model" "*101" -"_minlight" "0.2" -"lip" "8" -"wait" "4" -"speed" "75" -"angle" "180" -"classname" "func_door" -"team" "b" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.920949 0.343874" -"origin" "-2032 32 -74" -} -{ -"target" "t278" -"_cone" "20" -"origin" "-2032 176 -78" -"_color" "1.000000 0.920949 0.343874" -"light" "200" -"classname" "light" -} -{ -"_cone" "20" -"target" "t277" -"origin" "-2032 32 -78" -"_color" "1.000000 0.920949 0.343874" -"light" "200" -"classname" "light" -} -{ -"model" "*102" -"_minlight" "0.2" -"team" "b" -"lip" "8" -"wait" "4" -"sounds" "3" -"speed" "75" -"angle" "0" -"classname" "func_door" -} -{ -"light" "100" -"classname" "light" -"origin" "-2464 -192 -152" -} -{ -"light" "100" -"classname" "light" -"origin" "-2448 -176 -152" -} -{ -"origin" "-2832 -24 -200" -"classname" "light" -"light" "100" -} -{ -"origin" "-2920 -208 -168" -"classname" "light" -"light" "100" -} -{ -"origin" "-2936 -192 -168" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-2936 -80 -168" -} -{ -"light" "100" -"classname" "light" -"origin" "-2920 -64 -168" -} -{ -"origin" "-2464 -80 -152" -"classname" "light" -"light" "100" -} -{ -"origin" "-2448 -96 -152" -"classname" "light" -"light" "100" -} -{ -"origin" "-1360 688 440" -"light" "110" -"classname" "light" -} -{ -"origin" "180 -2332 336" -"classname" "info_player_start" -"angle" "180" -"targetname" "unitstart" -} -{ -"classname" "light" -"light" "175" -"origin" "-504 -1771 192" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "175" -"classname" "light" -"origin" "-624 -1889 192" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-382 -2130 512" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "175" -"classname" "light" -"origin" "-327 -1948 448" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "175" -"origin" "-752 -1808 208" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "175" -"classname" "light" -"origin" "-744 -2288 448" -"_color" "1.000000 0.976471 0.501961" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/city2@4cc5.ent b/stuff/mapfixes/baseq2/city2@4cc5.ent deleted file mode 100644 index 12196c0f3..000000000 --- a/stuff/mapfixes/baseq2/city2@4cc5.ent +++ /dev/null @@ -1,6737 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed an unreachable monster_floater (3908) -// -// His targetname, t54, is never targeted. I changed it to t295 instead, which -// is targeted by target_crosslevel_target (680). -// That way he is triggered by picking up the Data CD in Upper Palace (city3). -// -// 2. Fixed unused target_splash (4090) -// -// This splash was in the level but had no targetname. Gave it what I -// believe is the one intended by the level creator ("py1"). -// -// 3. Fixed inactive trigger_multiple (613) without a targetname -// -// Changed spawnflags from 2052 to 2048 to remove triggered flag. -// -// 4. Removed useless trigger_relay (3174, 3272) -// -// Set their spawnflags to 3840 so that they never spawn. -{ -"nextmap" "city3" -"sounds" "6" -"sky" "unit9_" -"spawnflags" "1792" -"classname" "worldspawn" -"message" "Lower Palace" -} -{ -"model" "*1" -"classname" "func_wall" -"spawnflags" "2048" -"_minlight" "0.2" -} -{ -"model" "*2" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "216 -248 -680" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "216 -296 -680" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "-168 -440 -808" -"spawnflags" "0" -"classname" "item_pack" -} -{ -"origin" "40 -448 -808" -"spawnflags" "1792" -"classname" "item_armor_jacket" -} -{ -"origin" "-856 184 -568" -"spawnflags" "1024" -"classname" "ammo_bullets" -} -{ -"origin" "-856 232 -568" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-856 136 -568" -"spawnflags" "1536" -"classname" "ammo_bullets" -} -{ -"origin" "-688 24 -560" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "-720 -208 -592" -"spawnflags" "1792" -"classname" "item_armor_jacket" -} -{ -"origin" "360 -992 -928" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "360 -1040 -928" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-480 -552 -936" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"origin" "-264 -880 -936" -"classname" "weapon_hyperblaster" -"spawnflags" "1792" -} -{ -"origin" "-208 -880 -936" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"classname" "ammo_grenades" -"origin" "-70 -1014 -944" -} -{ -"origin" "-480 -1248 -688" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "-424 -1248 -688" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-864 -1240 -760" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "160 -152 -816" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "-64 -144 -744" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "368 -1416 -944" -"classname" "ammo_shells" -} -{ -"origin" "272 -1472 -944" -"classname" "ammo_shells" -} -{ -"spawnflags" "1792" -"origin" "360 -1472 -928" -"classname" "weapon_shotgun" -} -{ -"classname" "item_health" -"origin" "41 -1067 -944" -"spawnflags" "2048" -} -{ -"origin" "376 -1184 -700" -"classname" "ammo_cells" -"spawnflags" "2048" -} -{ -"origin" "368 -1240 -696" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"classname" "ammo_bullets" -"origin" "-286 394 -464" -"spawnflags" "2048" -} -{ -"origin" "-352 360 -472" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"classname" "target_speaker" -"targetname" "t303" -"noise" "world/spark7.wav" -"attenuation" "3" -"volume" "0.4" -"origin" "168 -200 -728" -} -{ -"classname" "func_timer" -"random" "1" -"wait" "1.5" -"target" "t303" -"origin" "200 -216 -728" -"spawnflags" "1" -} -{ -"light" "32" -"classname" "light" -"origin" "232 -328 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"light" "32" -"classname" "light" -"origin" "168 -328 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"light" "32" -"classname" "light" -"origin" "-280 -328 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"light" "32" -"classname" "light" -"origin" "-344 -328 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"light" "32" -"classname" "light" -"origin" "-344 -424 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-280 -424 -736" -"classname" "light" -"light" "32" -} -{ -"origin" "-544 16 -640" -"spawnflags" "1792" -"light" "80" -"classname" "light" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-896 -32 -380" -"classname" "light" -"light" "32" -} -{ -"light" "32" -"classname" "light" -"origin" "-896 416 -380" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-896 352 -380" -"classname" "light" -"light" "32" -} -{ -"light" "32" -"classname" "light" -"origin" "-896 224 -380" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-896 160 -380" -"classname" "light" -"light" "32" -} -{ -"light" "32" -"classname" "light" -"origin" "-728 -16 -380" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-896 96 -400" -"_color" "1.000000 0.875537 0.004292" -} -{ -"targetname" "t82" -"classname" "trigger_relay" -"origin" "-924 0 -564" -"spawnflags" "2304" -"killtarget" "guntrigger" -} -{ -"model" "*3" -"wait" "3" -"targetname" "t4" -"speed" "100" -"angle" "-2" -"_minlight" "0.2" -"classname" "func_door" -"lip" "16" -} -{ -"origin" "-416 -288 -816" -"classname" "item_health_large" -} -{ -"origin" "-416 -224 -816" -"spawnflags" "2048" -"classname" "item_health_large" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-376 -296 -736" -"classname" "light" -"light" "32" -} -{ -"style" "32" -"_color" "1.000000 0.948819 0.755906" -"origin" "168 -200 -736" -"classname" "light" -"light" "150" -"targetname" "t303" -"spawnflags" "1" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "232 -200 -736" -"classname" "light" -"light" "32" -} -{ -"light" "32" -"classname" "light" -"origin" "-376 -216 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-280 -184 -736" -"classname" "light" -"light" "100" -} -{ -"light" "32" -"classname" "light" -"origin" "-344 -184 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-280 -40 -752" -"classname" "light" -"light" "32" -} -{ -"light" "32" -"classname" "light" -"origin" "-344 -40 -752" -"_color" "1.000000 0.948819 0.755906" -} -{ -"classname" "monster_soldier_ss" -"spawnflags" "1536" -"angle" "180" -"origin" "-289 -984 -924" -} -{ -"classname" "monster_soldier_ss" -"spawnflags" "1536" -"targetname" "t13" -"angle" "135" -"origin" "-185 -529 -928" -} -{ -"spawnflags" "1792" -"classname" "weapon_supershotgun" -"origin" "280 -552 -832" -} -{ -"origin" "282 -656 -832" -"classname" "ammo_rockets" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"classname" "light" -"light" "100" -"origin" "-864 532 -532" -} -{ -"spawnflags" "769" -"angle" "270" -"classname" "monster_floater" -"origin" "-16 124 -334" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-172 -452 -328" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-172 -500 -328" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-168 -140 -328" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-168 -92 -328" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "180 -736 -574" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "224 -736 -574" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "268 -736 -574" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "268 -752 -614" -} -{ -"classname" "ammo_shells" -"spawnflags" "1024" -"origin" "-20 -876 -620" -} -{ -"classname" "ammo_shells" -"spawnflags" "1536" -"origin" "-64 -876 -620" -} -{ -"classname" "misc_deadsoldier" -"origin" "-120 -864 -640" -"spawnflags" "2052" -"angle" "45" -} -{ -"spawnflags" "1024" -"classname" "ammo_grenades" -"origin" "-664 -864 -920" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1536" -"origin" "-552 -856 -688" -} -{ -"spawnflags" "1792" -"classname" "weapon_machinegun" -"origin" "160 -152 -800" -} -{ -"origin" "160 -192 -816" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_bullets" -"origin" "160 -240 -816" -"spawnflags" "3072" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "576 56 -872" -} -{ -"spawnflags" "1792" -"classname" "weapon_machinegun" -"origin" "-408 -994 -696" -} -{ -"origin" "-24 -152 -712" -"message" "Access Central Computer\nkeyboard to return\ndata spinner." -"targetname" "t186" -"classname" "target_help" -} -{ -"model" "*4" -"wait" "3" -"classname" "trigger_multiple" -"target" "t301" -} -{ -"classname" "trigger_relay" -"target" "t301" -"targetname" "t46" -"origin" "-480 -1432 -1064" -} -{ -"spawnflags" "3328" -"speed" "1000" -"origin" "-388 -1424 -1064" -"angle" "180" -"dmg" "20" -"classname" "target_blaster" -"targetname" "t46" -} -{ -"spawnflags" "2816" -"speed" "1000" -"origin" "-388 -1424 -1064" -"angle" "180" -"dmg" "25" -"classname" "target_blaster" -"targetname" "t46" -} -{ -"classname" "trigger_relay" -"targetname" "t279" -"killtarget" "reminder" -"origin" "0 -808 -536" -} -{ -"model" "*5" -"classname" "trigger_multiple" -"target" "t300" -"targetname" "reminder" -} -{ -"origin" "0 632 -88" -"targetname" "city2XH" -"angle" "225" -"classname" "info_player_coop" -} -{ -"origin" "-128 632 -88" -"targetname" "city2XH" -"angle" "315" -"classname" "info_player_coop" -} -{ -"origin" "-64 488 -88" -"targetname" "city2XH" -"angle" "270" -"classname" "info_player_coop" -} -{ -"origin" "304 160 -880" -"targetname" "city2XL" -"angle" "0" -"classname" "info_player_coop" -} -{ -"origin" "304 224 -880" -"targetname" "city2XL" -"angle" "0" -"classname" "info_player_coop" -} -{ -"origin" "248 192 -888" -"targetname" "city2XL" -"angle" "0" -"classname" "info_player_coop" -} -{ -"targetname" "city2NL" -"angle" "90" -"origin" "-96 -1808 -1064" -"classname" "info_player_coop" -} -{ -"targetname" "city2NL" -"angle" "90" -"origin" "-64 -1944 -1056" -"classname" "info_player_coop" -} -{ -"targetname" "city2NL" -"classname" "info_player_coop" -"origin" "-32 -1808 -1064" -"angle" "90" -} -{ -"targetname" "city2NH" -"angle" "90" -"origin" "-120 -1702 -808" -"classname" "info_player_coop" -} -{ -"targetname" "city2NH" -"angle" "90" -"origin" "-96 -1918 -816" -"classname" "info_player_coop" -} -{ -"targetname" "city2NH" -"angle" "90" -"origin" "-64 -1862 -800" -"classname" "info_player_start" -} -{ -"model" "*6" -"classname" "trigger_multiple" -"spawnflags" "4" -"target" "t302" -"targetname" "reminder" -} -{ -"classname" "target_speaker" -"noise" "world/v_cit1.wav" -"origin" "-64 -1696 -1008" -"attenuation" "-1" -"targetname" "t302" -} -{ -"model" "*7" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "t5" -} -{ -"classname" "target_speaker" -"targetname" "t298" -"origin" "-384 -400 -592" -"spawnflags" "2048" -"noise" "world/voice5.wav" -"attenuation" "-1" -"volume" "0.7" -} -{ -"classname" "func_timer" -"target" "t298" -"attenuation" "-1" -"random" "34" -"wait" "120" -"targetname" "t89" -"origin" "-384 -368 -592" -"spawnflags" "2049" -} -{ -"classname" "target_speaker" -"targetname" "t297" -"origin" "-352 -400 -592" -"spawnflags" "2048" -"noise" "world/v_fac3.wav" -"attenuation" "-1" -"volume" "0.7" -} -{ -"delay" "3" -"classname" "func_timer" -"target" "t297" -"attenuation" "-1" -"random" "100" -"wait" "400" -"targetname" "t89" -"origin" "-352 -368 -592" -"spawnflags" "2049" -} -{ -"model" "*8" -"classname" "trigger_multiple" -"wait" "30" -"target" "t296" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"noise" "world/v_cit2.wav" -"attenuation" "-1" -"targetname" "t296" -"spawnflags" "2052" -"origin" "-24 -456 -544" -} -{ -"targetname" "t228" -"origin" "-256 24 -752" -"classname" "target_speaker" -"spawnflags" "2050" -"noise" "world/klaxon1.wav" -} -{ -"origin" "480 136 -896" -"target" "t295" -"spawnflags" "8" -"classname" "target_crosslevel_target" -} -{ -"model" "*9" -"targetname" "t295" -"target" "t294" -"spawnflags" "4" -"classname" "trigger_once" -} -{ -"targetname" "t294" -"origin" "520 -192 -816" -"angle" "90" -"classname" "target_spawner" -"target" "monster_berserk" -"spawnflags" "768" -} -{ -"targetname" "t294" -"origin" "576 -176 -816" -"angle" "90" -"classname" "target_spawner" -"target" "monster_berserk" -"spawnflags" "256" -} -{ -"targetname" "t292" -"deathtarget" "t57" -"origin" "-94 -416 -416" -"spawnflags" "3" -"angle" "270" -"classname" "monster_floater" -} -{ -"targetname" "t292" -"classname" "monster_floater" -"angle" "270" -"spawnflags" "3" -"origin" "-16 -416 -416" -"deathtarget" "t57" -} -{ -"origin" "-904 264 -568" -"targetname" "t292" -"spawnflags" "259" -"angle" "45" -"classname" "monster_berserk" -} -{ -"origin" "-872 0 -568" -"targetname" "t292" -"spawnflags" "3" -"angle" "45" -"classname" "monster_berserk" -} -{ -"origin" "-56 -8 -376" -"angle" "90" -"targetname" "t292" -"spawnflags" "3" -"classname" "monster_tank_commander" -} -{ -"origin" "0 -200 -784" -"targetname" "t293" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"spawnflags" "2056" -"origin" "32 -168 -672" -"target" "t292" -"classname" "target_crosslevel_target" -} -{ -"target" "t293" -"origin" "32 -168 -768" -"angle" "270" -"targetname" "t292" -"spawnflags" "3" -"classname" "monster_tank_commander" -} -{ -"classname" "trigger_relay" -"targetname" "t290" -"target" "t291" -"delay" "2" -"origin" "480 -144 -816" -} -{ -"volume" "0.8" -"classname" "target_speaker" -"spawnflags" "4" -"attenuation" "-1" -"noise" "world/deactivated.wav" -"origin" "484 -144 -832" -"targetname" "yfld" -} -{ -"model" "*10" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*11" -"classname" "func_button" -"angle" "90" -"sounds" "4" -"_minlight" "0.8" -"target" "redfieldbutton" -"lip" "4" -"wait" "-1" -"spawnflags" "2048" -} -{ -"model" "*12" -"classname" "func_button" -"angle" "180" -"sounds" "4" -"wait" "-1" -"spawnflags" "2048" -"_minlight" "0.8" -"target" "yfld" -} -{ -"model" "*13" -"classname" "func_wall" -"spawnflags" "2048" -"_minlight" "0.2" -"target" "t290" -} -{ -"targetname" "rfld" -"killtarget" "redmsg" -"origin" "-177 -814 -924" -"classname" "trigger_relay" -} -{ -"classname" "monster_brain" -"angle" "315" -"targetname" "brainguy" -"origin" "480 -156 -848" -} -{ -"classname" "monster_soldier_ss" -"angle" "45" -"origin" "504 -48 -856" -"item" "ammo_bullets" -"spawnflags" "256" -} -{ -"classname" "point_combat" -"origin" "304 -792 -624" -"spawnflags" "2048" -"targetname" "t289" -} -{ -"origin" "-184 -778 -846" -"targetname" "redfieldbutton" -"killtarget" "redforfld" -"classname" "trigger_relay" -} -{ -"targetname" "t148" -"killtarget" "t182" -"origin" "-32 -256 -768" -"spawnflags" "2064" -"classname" "target_crosslevel_trigger" -} -{ -"targetname" "t187" -"classname" "trigger_relay" -"origin" "-176 -192 -744" -"killtarget" "t190" -"spawnflags" "2048" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-68 403 -66" -} -{ -"origin" "-280 -1024 -896" -"light" "80" -"classname" "light" -} -{ -"origin" "-152 -840 -848" -"targetname" "redfieldbutton" -"target" "t288" -"delay" "2" -"classname" "trigger_relay" -} -{ -"classname" "info_player_intermission" -"angles" "20 68 0" -"origin" "-120 -456 -528" -} -{ -"model" "*14" -"spawnflags" "2048" -"targetname" "redmsg" -"message" "This force field is\ndeactivated elsewhere." -"classname" "trigger_multiple" -"wait" "3" -} -{ -"spawnflags" "1792" -"origin" "-64 -240 -920" -"target" "t286" -"angle" "90" -"classname" "misc_teleporter" -} -{ -"model" "*15" -"wait" "-1" -"classname" "func_door" -"angle" "90" -"sounds" "2" -"speed" "50" -"_minlight" "0.1" -"spawnflags" "2048" -"targetname" "spg1" -} -{ -"spawnflags" "1792" -"targetname" "t286" -"origin" "-288 -744 -696" -"angle" "225" -"classname" "misc_teleporter_dest" -} -{ -"origin" "112 -1424 -874" -"_color" "1.000000 0.796078 0.003922" -"light" "48" -"classname" "light" -} -{ -"light" "48" -"classname" "light" -"origin" "-8 -1784 -590" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-120 -1784 -590" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"_color" "1.000000 0.796078 0.003922" -"light" "48" -"classname" "light" -"origin" "-120 -1480 -590" -} -{ -"light" "100" -"classname" "light" -"origin" "-64 -1784 -590" -} -{ -"classname" "misc_teleporter_dest" -"targetname" "t285" -"spawnflags" "1792" -"origin" "-144 -288 -328" -"angle" "0" -} -{ -"model" "*16" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*17" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"origin" "-56 -1776 -920" -"target" "t285" -"angle" "180" -} -{ -"light" "64" -"classname" "light" -"origin" "128 -800 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "64" -"classname" "light" -"origin" "192 -800 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "80" -"classname" "light" -"origin" "256 -800 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "80" -"classname" "light" -"origin" "320 -800 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "320 -1184 -880" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "320 -1120 -880" -"classname" "light" -"light" "64" -} -{ -"light" "80" -"classname" "light" -"origin" "320 -864 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "64" -"classname" "light" -"origin" "320 -928 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "64" -"classname" "light" -"origin" "320 -992 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "64" -"classname" "light" -"origin" "320 -1056 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "64" -"classname" "light" -"origin" "320 -1248 -880" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "320 -1120 -816" -"_color" "1.000000 0.875537 0.004292" -} -{ -"classname" "misc_teleporter" -"target" "t283" -"origin" "0 480 -88" -"spawnflags" "1792" -} -{ -"classname" "misc_teleporter_dest" -"spawnflags" "1792" -"origin" "-480 472 -472" -"targetname" "t284" -"angle" "315" -} -{ -"classname" "misc_teleporter_dest" -"angle" "135" -"spawnflags" "1792" -"origin" "360 -1248 -696" -"targetname" "t283" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"origin" "-64 -1096 -760" -"target" "t284" -} -{ -"spawnflags" "1792" -"classname" "misc_teleporter_dest" -"targetname" "t282" -"origin" "-420 -1668 -920" -"angle" "135" -} -{ -"classname" "misc_teleporter" -"angle" "0" -"target" "t282" -"origin" "480 -144 -864" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-938 -34 -568" -} -{ -"model" "*18" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"classname" "ammo_shells" -"origin" "360 -656 -832" -} -{ -"classname" "item_health_large" -"spawnflags" "2048" -"origin" "320 -656 -816" -} -{ -"model" "*19" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "item_health_mega" -"spawnflags" "1792" -"origin" "-544 16 -672" -} -{ -"model" "*20" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*21" -"classname" "func_door" -"health" "5" -"angle" "90" -"spawnflags" "1792" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-66 -426 -636" -} -{ -"classname" "item_armor_combat" -"spawnflags" "1536" -"origin" "-108 -846 -612" -} -{ -"classname" "item_armor_body" -"spawnflags" "1792" -"origin" "544 352 -826" -} -{ -"classname" "light" -"light" "100" -"_color" "1.000000 0.578740 0.003937" -"origin" "544 352 -776" -} -{ -"model" "*22" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*23" -"spawnflags" "1792" -"angle" "-1" -"health" "5" -"classname" "func_door" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "632 -194 -872" -} -{ -"classname" "item_armor_jacket" -"spawnflags" "1792" -"origin" "70 -846 -938" -} -{ -"spawnflags" "2048" -"origin" "-279 -1023 -944" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-277 -1065 -944" -} -{ -"model" "*24" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*25" -"lip" "8" -"sounds" "2" -"speed" "200" -"wait" "3" -"angle" "0" -"classname" "func_door" -"team" "traphider" -"spawnflags" "1792" -"health" "5" -} -{ -"model" "*26" -"lip" "8" -"classname" "func_door" -"angle" "180" -"wait" "3" -"speed" "200" -"sounds" "0" -"team" "traphider" -"spawnflags" "1792" -"health" "5" -} -{ -"classname" "item_armor_combat" -"spawnflags" "1792" -"origin" "-898 520 -566" -} -{ -"model" "*27" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*28" -"classname" "func_wall" -"spawnflags" "1536" -} -{ -"model" "*29" -"classname" "func_wall" -"spawnflags" "1536" -} -{ -"classname" "ammo_grenades" -"origin" "152 -32 -808" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-328 -576 -944" -} -{ -"classname" "weapon_railgun" -"spawnflags" "1792" -"origin" "-64 -1216 -800" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "-168 -1480 -968" -} -{ -"classname" "weapon_rocketlauncher" -"spawnflags" "1792" -"origin" "-56 -1416 -928" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1536" -"origin" "-656 -728 -704" -} -{ -"classname" "item_health" -"origin" "-408 -1038 -696" -} -{ -"classname" "weapon_hyperblaster" -"origin" "-536 -728 -248" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-48 -864 -352" -} -{ -"spawnflags" "2048" -"origin" "-92 -864 -352" -"classname" "ammo_rockets" -} -{ -"classname" "ammo_rockets" -"origin" "-92 -864 -304" -"spawnflags" "1792" -"team" "ammo1" -} -{ -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -"origin" "-112 -8 -384" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-16 -8 -384" -} -{ -"classname" "item_health" -"spawnflags" "3584" -"origin" "-140 468 -88" -} -{ -"classname" "item_health" -"spawnflags" "3072" -"origin" "12 468 -92" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -"origin" "-48 688 120" -} -{ -"light" "80" -"classname" "light" -"origin" "-104 696 126" -} -{ -"light" "80" -"classname" "light" -"origin" "-24 696 126" -} -{ -"classname" "light" -"light" "80" -"origin" "-24 584 126" -} -{ -"classname" "light" -"light" "80" -"origin" "-104 584 126" -} -{ -"classname" "light" -"light" "64" -"_color" "1.000000 0.677165 0.003937" -"origin" "-408 8 -330" -} -{ -"classname" "trigger_always" -"target" "t14" -"origin" "102 -636 -830" -"spawnflags" "1792" -} -{ -"targetname" "t288" -"spawnflags" "2052" -"origin" "-167 -860 -849" -"attenuation" "-1" -"noise" "world/redforce.wav" -"classname" "target_speaker" -} -{ -"classname" "item_quad" -"team" "q2best" -"origin" "56 -280 -336" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "232 -456 -808" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "-416 -224 -808" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "224 48 -680" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "-208 -1200 -936" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "-296 -136 -664" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "352 -744 -616" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "24 -1728 -808" -} -{ -"spawnflags" "2052" -"attenuation" "-1" -"origin" "-72 -128 -696" -"targetname" "spg2" -"noise" "world/dataspin.wav" -"classname" "target_speaker" -} -{ -"noise" "world/force1.wav" -"origin" "320 -936 -568" -"spawnflags" "2049" -"targetname" "rfld" -"classname" "target_speaker" -} -{ -"model" "*30" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-316 -856 -460" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-316 -856 -396" -} -{ -"origin" "-316 -856 -588" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-316 -856 -524" -} -{ -"model" "*31" -"target" "t281" -"targetname" "rfld" -"spawnflags" "2052" -"classname" "trigger_once" -} -{ -"spawnflags" "2048" -"origin" "320 -784 -624" -"targetname" "t280" -"classname" "point_combat" -} -{ -"model" "*32" -"spawnflags" "2054" -"targetname" "redforfld" -"classname" "func_wall" -} -{ -"model" "*33" -"spawnflags" "2048" -"message" "This force field is\ndeactivated elsewhere." -"targetname" "redmsg" -"classname" "trigger_multiple" -"wait" "3" -} -{ -"origin" "0 -784 -584" -"target" "t279" -"spawnflags" "4" -"classname" "target_crosslevel_target" -} -{ -"attenuation" "2" -"noise" "world/spark5.wav" -"origin" "-280 -824 -264" -"classname" "target_speaker" -"targetname" "t108" -} -{ -"origin" "-424 -808 -600" -"wait" "1" -"random" ".9" -"spawnflags" "1" -"classname" "func_timer" -"target" "t108" -} -{ -"classname" "target_speaker" -"origin" "-616 -824 -600" -"noise" "world/spark5.wav" -"attenuation" "2" -"targetname" "t194" -} -{ -"classname" "func_timer" -"target" "t194" -"spawnflags" "1" -"random" ".9" -"wait" "1" -"origin" "-616 -808 -600" -} -{ -"classname" "func_timer" -"spawnflags" "2049" -"wait" "2" -"target" "t16" -"origin" "222 -1219 -881" -} -{ -"origin" "-64 -1528 -862" -"_color" "1.000000 0.799213 0.003937" -"light" "64" -"classname" "light" -} -{ -"origin" "-64 -1464 -862" -"classname" "light" -"light" "64" -"_color" "1.000000 0.799213 0.003937" -} -{ -"origin" "-64 -1592 -862" -"classname" "light" -"light" "64" -"_color" "1.000000 0.799213 0.003937" -} -{ -"origin" "-64 -1400 -862" -"_color" "1.000000 0.799213 0.003937" -"light" "64" -"classname" "light" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "320 -1288 -808" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "64 -800 -880" -"classname" "light" -"light" "64" -} -{ -"origin" "322 -536 -774" -"light" "80" -"classname" "light" -} -{ -"origin" "322 -608 -774" -"light" "80" -"classname" "light" -} -{ -"origin" "-320 -800 -824" -"classname" "light" -"_color" "1.000000 0.384921 0.011905" -"light" "64" -} -{ -"origin" "-312 -744 -824" -"classname" "light" -"_color" "1.000000 0.384921 0.011905" -"light" "64" -} -{ -"origin" "-248 -744 -824" -"classname" "light" -"_color" "1.000000 0.384921 0.011905" -"light" "64" -} -{ -"origin" "-168 -744 -824" -"classname" "light" -"_color" "1.000000 0.384921 0.011905" -"light" "64" -} -{ -"origin" "-104 -744 -824" -"classname" "light" -"_color" "1.000000 0.384921 0.011905" -"light" "64" -} -{ -"origin" "-320 -864 -824" -"light" "64" -"_color" "1.000000 0.384921 0.011905" -"classname" "light" -} -{ -"origin" "-724 -848 -808" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-722 -930 -806" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-724 -1078 -816" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-852 -1078 -816" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-878 -996 -816" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-878 -908 -816" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-852 -778 -816" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-724 -778 -816" -"classname" "light" -"_color" "1.000000 0.250980 0.000000" -"light" "64" -} -{ -"origin" "-818 -894 -808" -"light" "64" -"_color" "1.000000 0.250980 0.000000" -"classname" "light" -} -{ -"origin" "-448 -832 -546" -"classname" "light" -"light" "64" -"_color" "1.000000 0.850980 0.000000" -} -{ -"origin" "-448 -896 -546" -"classname" "light" -"light" "64" -"_color" "1.000000 0.850980 0.000000" -} -{ -"origin" "-448 -960 -546" -"classname" "light" -"light" "64" -"_color" "1.000000 0.850980 0.000000" -} -{ -"origin" "-448 -1024 -546" -"classname" "light" -"light" "64" -"_color" "1.000000 0.850980 0.000000" -} -{ -"origin" "-448 -768 -546" -"_color" "1.000000 0.850980 0.000000" -"light" "64" -"classname" "light" -} -{ -"origin" "-544 288 -456" -"classname" "light" -"light" "64" -} -{ -"origin" "-544 488 -456" -"light" "64" -"classname" "light" -} -{ -"origin" "-272 488 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-272 384 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-272 200 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-272 280 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-432 280 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-376 120 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-248 120 -330" -"classname" "light" -"light" "64" -} -{ -"origin" "-432 488 -330" -"light" "64" -"classname" "light" -} -{ -"classname" "monster_floater" -"angle" "0" -"spawnflags" "257" -"origin" "-310 -560 -630" -"deathtarget" "t57" -} -{ -"spawnflags" "2048" -"classname" "target_secret" -"targetname" "py1" -"message" "You have found a secret." -"origin" "34 -1114 -618" -} -{ -"model" "*34" -"classname" "trigger_once" -"target" "t155" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"classname" "target_help" -"targetname" "t148" -"origin" "-16 -312 -792" -"message" "Shut down communication\nlaser in Upper Palace." -} -{ -"classname" "misc_explobox" -"origin" "-36 -1484 -976" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-304 -68 -784" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-304 -132 -784" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-304 -196 -784" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-304 -260 -784" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-304 -324 -784" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-304 -388 -784" -"classname" "light" -"light" "70" -} -{ -"light" "70" -"classname" "light" -"origin" "-304 -4 -784" -"_color" "1.000000 0.948819 0.755906" -} -{ -"origin" "-260 -384 -824" -"targetname" "t273" -"classname" "info_null" -} -{ -"spawnflags" "2048" -"targetname" "t265" -"origin" "24 -360 -808" -"classname" "point_combat" -} -{ -"spawnflags" "2048" -"target" "t265" -"origin" "168 -392 -808" -"targetname" "t264" -"classname" "point_combat" -} -{ -"spawnflags" "2048" -"origin" "-72 -488 -456" -"target" "t263" -"targetname" "t262" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "-152 -280 -456" -"target" "t262" -"targetname" "t261" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "-56 -152 -456" -"target" "t261" -"targetname" "t260" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "40 -232 -456" -"targetname" "t263" -"target" "t260" -"classname" "path_corner" -} -{ -"origin" "264 -808 -536" -"classname" "light" -"light" "80" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"light" "80" -"classname" "light" -"origin" "212 -808 -536" -} -{ -"_color" "1.000000 0.875537 0.004292" -"light" "80" -"classname" "light" -"origin" "264 -764 -536" -} -{ -"origin" "368 -792 -536" -"classname" "light" -"light" "80" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"light" "80" -"classname" "light" -"origin" "212 -764 -536" -} -{ -"origin" "316 -836 -536" -"classname" "light" -"light" "80" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "100" -"origin" "-184 -288 -616" -"classname" "light" -"_color" "1.000000 0.255906 0.003937" -} -{ -"light" "100" -"origin" "-184 -288 -752" -"classname" "light" -"_color" "1.000000 0.255906 0.003937" -} -{ -"light" "80" -"classname" "light" -"origin" "-64 -392 -752" -} -{ -"light" "64" -"classname" "light" -"origin" "-64 -392 -792" -} -{ -"model" "*35" -"_minlight" "0.3" -"target" "t4" -"classname" "func_button" -"angle" "270" -"lip" "3" -} -{ -"model" "*36" -"wait" "5" -"target" "t4" -"delay" "1" -"classname" "trigger_multiple" -"spawnflags" "0" -} -{ -"origin" "-64 -360 -720" -"classname" "light" -"light" "80" -} -{ -"origin" "-64 -432 -816" -"light" "64" -"classname" "light" -} -{ -"origin" "-64 -348 -368" -"light" "125" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "85" -"origin" "-136 -348 -304" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "125" -"origin" "-88 -348 -256" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "125" -"origin" "-40 -348 -256" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "8 -348 -304" -"light" "85" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-40 -356 -368" -"light" "125" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "85" -"origin" "8 -156 -304" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-40 -164 -368" -} -{ -"_color" "1.000000 0.658824 0.576471" -"origin" "-136 -156 -304" -"light" "85" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-64 -156 -368" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-40 -220 -256" -"light" "125" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "85" -"origin" "8 -220 -304" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "100" -"origin" "-40 -228 -368" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-88 -220 -256" -"light" "125" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-136 -220 -304" -"light" "85" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-64 -220 -368" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "85" -"origin" "8 -412 -304" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-40 -420 -368" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-136 -412 -304" -"light" "85" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-64 -412 -368" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-40 -284 -256" -"light" "125" -"classname" "light" -} -{ -"_color" "1.000000 0.658824 0.576471" -"classname" "light" -"light" "85" -"origin" "8 -284 -304" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-40 -292 -368" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-88 -284 -256" -"light" "125" -"classname" "light" -} -{ -"_color" "1.000000 0.658824 0.576471" -"origin" "-136 -284 -304" -"light" "85" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "125" -"origin" "-64 -284 -368" -} -{ -"spawnflags" "2048" -"target" "t253" -"targetname" "t214" -"origin" "-476 -1208 -600" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"target" "t252" -"targetname" "t214" -"classname" "trigger_relay" -"origin" "-476 -1164 -600" -} -{ -"model" "*37" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t251" -} -{ -"origin" "-277 -1065 -912" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"model" "*38" -"classname" "trigger_once" -"delay" "0.5" -"target" "t250" -} -{ -"target" "t247" -"origin" "48 -528 -528" -"wait" "7" -"random" "5" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"targetname" "t247" -"origin" "48 -492 -528" -"volume" "0.12" -"attenuation" "1" -"noise" "world/battle5.wav" -"classname" "target_speaker" -} -{ -"target" "t248" -"origin" "32 -528 -528" -"wait" "20" -"random" "10" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"targetname" "t248" -"origin" "32 -492 -528" -"volume" "0.2" -"attenuation" "1" -"noise" "world/battle5.wav" -"classname" "target_speaker" -} -{ -"origin" "-4 -576 -528" -"target" "t244" -"wait" "12" -"random" "10" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-4 -540 -528" -"targetname" "t244" -"volume" "0.35" -"attenuation" "1" -"noise" "world/battle5.wav" -"classname" "target_speaker" -} -{ -"target" "t249" -"origin" "16 -528 -528" -"classname" "func_timer" -"spawnflags" "1" -"random" "12" -"wait" "35" -} -{ -"targetname" "t249" -"origin" "16 -492 -528" -"classname" "target_speaker" -"noise" "world/battle5.wav" -"attenuation" "1" -"volume" "0.35" -} -{ -"origin" "-76 -452 -420" -"target" "t245" -"classname" "func_timer" -"spawnflags" "1" -"random" "8" -"wait" "16" -} -{ -"origin" "-76 -416 -420" -"targetname" "t245" -"classname" "target_speaker" -"noise" "world/battle5.wav" -"attenuation" "1" -"volume" "0.6" -} -{ -"origin" "-128 -528 -528" -"volume" "0.4" -"attenuation" "1" -"noise" "world/battle5.wav" -"targetname" "t243" -"classname" "target_speaker" -} -{ -"origin" "-128 -564 -528" -"wait" "15" -"random" "10" -"spawnflags" "1" -"target" "t243" -"classname" "func_timer" -} -{ -"model" "*39" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"origin" "-64 -640 -388" -"targetname" "t241" -"classname" "info_notnull" -} -{ -"style" "33" -"light" "175" -"targetname" "t242" -"_cone" "25" -"origin" "-64 -640 -308" -"target" "t241" -"classname" "light" -} -{ -"spawnflags" "0" -"target" "t242" -"origin" "-64 -640 -368" -"classname" "item_invulnerability" -"team" "q2best" -} -{ -"origin" "-144 -744 -904" -"delay" "1" -"dmg" "1" -"targetname" "rfld" -"classname" "target_explosion" -} -{ -"classname" "weapon_shotgun" -"origin" "-279 -1023 -912" -"spawnflags" "1792" -} -{ -"model" "*40" -"targetname" "guntrigger" -"spawnflags" "2304" -"target" "trap_gun" -"delay" ".5" -"wait" ".8" -"classname" "trigger_multiple" -} -{ -"origin" "-108 -116 -684" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2" -} -{ -"origin" "-12 -116 -684" -"noise" "world/comp_hum2" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"model" "*41" -"_minlight" "0.5" -"classname" "func_wall" -} -{ -"model" "*42" -"spawnflags" "2048" -"_minlight" "0.6" -"targetname" "py1" -"dmg" "1" -"mass" "100" -"classname" "func_explosive" -} -{ -"model" "*43" -"target" "t240" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-832 -1024 -936" -"targetname" "t239" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"origin" "-736 -816 -920" -"targetname" "t240" -"spawnflags" "1025" -"angle" "180" -"classname" "monster_soldier" -} -{ -"origin" "-608 -856 -920" -"targetname" "t240" -"spawnflags" "769" -"angle" "180" -"classname" "monster_soldier" -} -{ -"origin" "-840 -840 -920" -"spawnflags" "1" -"target" "t239" -"targetname" "t238" -"angle" "270" -"classname" "monster_soldier" -} -{ -"angle" "270" -"spawnflags" "257" -"origin" "-288 -984 -936" -"classname" "monster_berserk" -} -{ -"origin" "-56 -1424 -960" -"classname" "monster_soldier_light" -} -{ -"classname" "item_health_small" -"spawnflags" "1536" -"origin" "-86 -1248 -936" -} -{ -"classname" "item_health_small" -"spawnflags" "1024" -"origin" "-126 -1248 -936" -} -{ -"classname" "item_health_small" -"spawnflags" "0" -"origin" "-166 -1248 -936" -} -{ -"classname" "item_health_small" -"spawnflags" "0" -"origin" "-206 -1248 -936" -} -{ -"light" "80" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "-92 -1678 -938" -} -{ -"spawnflags" "2048" -"classname" "target_goal" -"targetname" "t189" -"origin" "56 -160 -752" -} -{ -"spawnflags" "2048" -"classname" "target_goal" -"targetname" "t187" -"origin" "-184 -160 -752" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "328 -1000 -560" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "328 -1056 -560" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "320 -1120 -536" -"classname" "light" -"light" "150" -} -{ -"model" "*44" -"_minlight" "0.2" -"speed" "35" -"classname" "func_door" -"spawnflags" "2049" -"angle" "-2" -"sounds" "1" -"targetname" "spg2" -"wait" "-1" -} -{ -"style" "1" -"targetname" "t79" -"classname" "func_areaportal" -} -{ -"origin" "-64 -1208 -936" -"angle" "135" -"spawnflags" "257" -"classname" "monster_soldier" -"targetname" "t251" -} -{ -"target" "t5" -"origin" "-16 -1224 -928" -"angle" "0" -"spawnflags" "1" -"classname" "monster_soldier" -"targetname" "t251" -} -{ -"classname" "misc_explobox" -"origin" "-108 -1516 -976" -} -{ -"origin" "-144 -744 -920" -"volume" "1" -"attenuation" "1" -"noise" "world/explod2.wav" -"targetname" "rfld" -"classname" "target_speaker" -} -{ -"spawnflags" "2048" -"target" "t228" -"targetname" "t222" -"classname" "trigger_relay" -"killtarget" "t224" -"origin" "288 200 -848" -} -{ -"spawnflags" "2048" -"origin" "-8 608 -56" -"target" "t228" -"targetname" "t225" -"classname" "trigger_relay" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-64 600 32" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-64 -24 -320" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-80 264 -424" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-408 360 -424" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-856 368 -512" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-896 -8 -512" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-680 -184 -544" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-328 -192 -624" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-320 -488 -624" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-48 -464 -576" -} -{ -"targetname" "t228" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-64 -312 -728" -} -{ -"spawnflags" "2048" -"origin" "-112 584 -72" -"killtarget" "t222" -"targetname" "t225" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "312 224 -848" -"killtarget" "t224" -"targetname" "t222" -"classname" "trigger_relay" -} -{ -"origin" "0 576 -40" -"target" "t224" -"classname" "target_crosslevel_target" -"spawnflags" "2056" -"delay" "0.1" -} -{ -"model" "*45" -"target" "t225" -"targetname" "t224" -"classname" "trigger_once" -"spawnflags" "2052" -} -{ -"target" "t221" -"classname" "target_crosslevel_target" -"spawnflags" "2056" -"delay" "0.1" -"origin" "344 216 -840" -} -{ -"model" "*46" -"target" "t222" -"targetname" "t221" -"spawnflags" "2052" -"classname" "trigger_once" -} -{ -"targetname" "t228" -"origin" "-64 216 -272" -"classname" "target_speaker" -"spawnflags" "2" -"noise" "world/klaxon1.wav" -} -{ -"targetname" "t228" -"origin" "208 -256 -792" -"classname" "target_speaker" -"spawnflags" "2" -"noise" "world/klaxon1.wav" -} -{ -"targetname" "t228" -"origin" "352 -96 -792" -"classname" "target_speaker" -"spawnflags" "2050" -"noise" "world/klaxon1.wav" -} -{ -"targetname" "t228" -"origin" "616 168 -840" -"classname" "target_speaker" -"spawnflags" "2050" -"noise" "world/klaxon1.wav" -} -{ -"targetname" "t228" -"origin" "-64 -160 -712" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -} -{ -"model" "*47" -"target" "t218" -"targetname" "t214" -"classname" "trigger_counter" -"spawnflags" "2049" -"count" "2" -} -{ -"targetname" "t218" -"origin" "350 -1014 -640" -"spawnflags" "257" -"angle" "270" -"classname" "monster_berserk" -} -{ -"origin" "-800 -1534 -848" -"targetname" "t216" -"target" "t215" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-784 -1552 -848" -"targetname" "t217" -"target" "t215" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-840 -1544 -848" -"targetname" "t215" -"classname" "monster_berserk" -"spawnflags" "256" -} -{ -"model" "*48" -"targetname" "t252" -"target" "t216" -"count" "4" -"spawnflags" "2049" -"classname" "trigger_counter" -} -{ -"spawnflags" "2048" -"origin" "-392 -1212 -640" -"target" "t214" -"targetname" "t70" -"classname" "trigger_relay" -} -{ -"style" "2" -"classname" "func_areaportal" -"targetname" "t213" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t212" -} -{ -"style" "4" -"classname" "func_areaportal" -"targetname" "t211" -} -{ -"style" "5" -"classname" "func_areaportal" -"targetname" "t210" -} -{ -"style" "6" -"classname" "func_areaportal" -"targetname" "t209" -} -{ -"model" "*49" -"classname" "func_door" -"angle" "180" -"team" "comp3" -"_minlight" "0.2" -} -{ -"model" "*50" -"classname" "func_door" -"angle" "0" -"team" "comp3" -"_minlight" "0.2" -"target" "t211" -} -{ -"model" "*51" -"classname" "func_door" -"angle" "270" -"team" "comp1" -"_minlight" "0.2" -} -{ -"model" "*52" -"classname" "func_door" -"angle" "90" -"team" "comp1" -"_minlight" "0.2" -"target" "t210" -} -{ -"model" "*53" -"team" "comp4" -"angle" "0" -"classname" "func_door" -"_minlight" "0.2" -"target" "t213" -} -{ -"model" "*54" -"team" "comp4" -"angle" "180" -"classname" "func_door" -"_minlight" "0.2" -} -{ -"model" "*55" -"classname" "func_door" -"angle" "90" -"team" "comp2" -"_minlight" "0.2" -} -{ -"model" "*56" -"classname" "func_door" -"angle" "270" -"team" "comp2" -"_minlight" "0.2" -"target" "t209" -} -{ -"spawnflags" "2048" -"targetname" "t206" -"origin" "320 -1092 -696" -"classname" "point_combat" -} -{ -"origin" "352 -1048 -664" -"targetname" "t205" -"target" "t146" -"delay" "3" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*57" -"spawnflags" "2048" -"target" "t205" -"classname" "trigger_once" -} -{ -"target" "t206" -"targetname" "t205" -"origin" "298 -1014 -644" -"angle" "270" -"spawnflags" "1" -"classname" "monster_berserk" -} -{ -"model" "*58" -"target" "t21" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"wait" "3" -"origin" "-56 -1196 -808" -"target" "t202" -"targetname" "t201" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"wait" "3" -"origin" "-56 -1252 -808" -"target" "t199" -"targetname" "t198" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "324 -1192 -712" -"target" "t203" -"targetname" "t202" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "324 -1248 -712" -"target" "t200" -"targetname" "t199" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"wait" "3" -"origin" "-24 -1196 -808" -"target" "t204" -"targetname" "t203" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"wait" "3" -"origin" "-24 -1252 -808" -"target" "t197" -"targetname" "t200" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "-380 -1192 -712" -"targetname" "t204" -"target" "t201" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "-380 -1248 -712" -"target" "t198" -"targetname" "t197" -"classname" "path_corner" -} -{ -"origin" "-420 -1240 -676" -"angle" "0" -"target" "t197" -"classname" "monster_soldier" -} -{ -"origin" "-420 -1196 -676" -"angle" "0" -"target" "t204" -"classname" "monster_soldier" -"spawnflags" "256" -} -{ -"target" "t214" -"targetname" "t70" -"origin" "-692 -1180 -760" -"angle" "0" -"classname" "monster_soldier_ss" -"spawnflags" "1" -} -{ -"target" "t214" -"targetname" "t70" -"origin" "-692 -1244 -752" -"angle" "0" -"classname" "monster_soldier_ss" -"spawnflags" "1" -} -{ -"target" "t214" -"targetname" "t70" -"spawnflags" "257" -"classname" "monster_soldier_ss" -"angle" "0" -"origin" "-728 -1188 -772" -} -{ -"target" "t214" -"targetname" "t70" -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "0" -"origin" "-728 -1240 -772" -} -{ -"origin" "-448 -928 -872" -"targetname" "rfld" -"classname" "target_speaker" -"noise" "world/force2.wav" -"spawnflags" "0" -} -{ -"origin" "-608 -1208 -1064" -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "769" -"targetname" "rfld" -"origin" "-452 -1480 -928" -"angle" "270" -"classname" "monster_tank_commander" -} -{ -"origin" "-136 -848 -928" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier" -} -{ -"origin" "-233 -761 -944" -"classname" "item_health_large" -} -{ -"origin" "-336 -536 -944" -"classname" "item_health" -} -{ -"origin" "-416 -568 -936" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"origin" "-296 -536 -944" -"classname" "item_health" -} -{ -"origin" "232 -1400 -914" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "100" -} -{ -"origin" "136 -1400 -914" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "100" -} -{ -"origin" "24 -1400 -914" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "100" -} -{ -"origin" "-64 -1400 -914" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "100" -} -{ -"origin" "-64 -1464 -914" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "150" -} -{ -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"attenuation" "3" -"volume" "0.5" -"origin" "-488 -1416 -1064" -"spawnflags" "2048" -"targetname" "t301" -} -{ -"origin" "-364 466 -464" -"classname" "item_health" -} -{ -"origin" "-424 468 -464" -"classname" "item_health" -} -{ -"origin" "-296 478 -464" -"classname" "item_armor_jacket" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"origin" "-286 394 -424" -"classname" "ammo_shells" -} -{ -"origin" "-374 -800 -312" -"targetname" "t181" -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -} -{ -"origin" "220 -60 -752" -"target" "t192" -"targetname" "sd2" -"classname" "trigger_relay" -} -{ -"origin" "238 -60 -752" -"target" "t191" -"delay" "8.5" -"targetname" "sd2" -"classname" "trigger_relay" -} -{ -"targetname" "t192" -"origin" "198 12 -752" -"attenuation" "1" -"volume" "0.9" -"noise" "world/lite_on1.wav" -"classname" "target_speaker" -} -{ -"targetname" "t191" -"volume" "0.9" -"noise" "world/lite_out.wav" -"origin" "198 -16 -750" -"attenuation" "1" -"classname" "target_speaker" -} -{ -"classname" "item_health" -"origin" "632 -232 -872" -} -{ -"origin" "40 -1568 -816" -"classname" "item_health" -} -{ -"spawnflags" "3584" -"origin" "48 -1696 -816" -"classname" "item_health" -} -{ -"origin" "-168 -1568 -816" -"classname" "ammo_shells" -} -{ -"classname" "light" -"light" "100" -"origin" "-100 -92 -384" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-28 -92 -384" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-100 -92 -448" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -92 -448" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "-100 -284 -384" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-100 -284 -448" -"light" "125" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "-28 -284 -384" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -284 -448" -"light" "100" -"classname" "light" -} -{ -"origin" "-100 -476 -384" -"light" "100" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "100" -"origin" "-100 -476 -448" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -476 -448" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "-28 -476 -384" -"_color" "1.000000 0.976471 0.501961" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -92 -320" -"light" "125" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -284 -320" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "100" -"origin" "-100 -476 -320" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -476 -320" -"light" "100" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "-316 -856 -332" -} -{ -"classname" "light" -"light" "80" -"origin" "-316 -856 -652" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "-540 -1232 -1048" -} -{ -"classname" "item_adrenaline" -"origin" "-328 -1368 -1056" -"spawnflags" "2048" -} -{ -"classname" "item_armor_shard" -"origin" "232 -336 -816" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "target_goal" -"targetname" "t148" -"origin" "-16 -280 -788" -} -{ -"origin" "-152 -776 -888" -"targetname" "redfieldbutton" -"volume" "0.3" -"attenuation" "3" -"noise" "world/comp_hum1" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"origin" "440 -200 -824" -"targetname" "yfld" -"noise" "world/l_hum1.wav" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"origin" "232 -296 -816" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "232 -384 -816" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"classname" "ammo_shells" -"origin" "-336 -368 -816" -} -{ -"spawnflags" "2048" -"target" "t184" -"targetname" "t187" -"classname" "trigger_relay" -"origin" "-144 -192 -744" -} -{ -"spawnflags" "3840" -"targetname" "t187" -"classname" "trigger_relay" -"origin" "-136 -216 -744" -} -{ -"origin" "56 -200 -744" -"target" "t184" -"targetname" "t189" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"target" "t190" -"origin" "24 -200 -744" -"targetname" "t189" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"killtarget" "t188" -"origin" "40 -232 -744" -"targetname" "t189" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"target" "t188" -"origin" "-160 -200 -744" -"targetname" "t187" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-160 -240 -728" -"message" "Obtain the Data CD\nfrom the Upper Palace." -"targetname" "t188" -"classname" "target_help" -} -{ -"message" "Insert Data Spinner\nin next console." -"targetname" "t190" -"origin" "-16 -160 -608" -"classname" "target_help" -"spawnflags" "2048" -} -{ -"origin" "-88 -176 -752" -"target" "spg1" -"delay" "2" -"targetname" "spg" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-72 -168 -744" -"target" "spg2" -"delay" "3" -"targetname" "spg" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*59" -"targetname" "t186" -"lip" "4" -"sounds" "1" -"angle" "90" -"wait" "-1" -"spawnflags" "2056" -"classname" "func_door" -} -{ -"spawnflags" "2048" -"targetname" "2nd message" -"classname" "trigger_relay" -"origin" "-4 -92 -724" -"message" "Access keyboard\nto return Data Spinner." -"delay" "3" -} -{ -"spawnflags" "2048" -"target" "2nd message" -"delay" "3" -"message" "Data Spinner\n is now reprogrammed." -"origin" "-24 -92 -700" -"targetname" "t186" -"classname" "trigger_relay" -} -{ -"model" "*60" -"target" "t186" -"targetname" "t184" -"count" "2" -"classname" "trigger_counter" -"spawnflags" "2049" -} -{ -"origin" "-84 -224 -680" -"target" "t185" -"classname" "trigger_relay" -"spawnflags" "3840" -} -{ -"origin" "-44 -224 -680" -"target" "t185" -"targetname" "t148" -"classname" "trigger_relay" -} -{ -"origin" "-60 -132 -748" -"targetname" "t148" -"killtarget" "t182" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"target" "t187" -"message" "Data Spinner inserted for reprogramming." -"item" "key_data_spinner" -"origin" "-132 -156 -740" -"targetname" "t182" -"classname" "trigger_key" -} -{ -"spawnflags" "2048" -"target" "t189" -"message" "New program accepted." -"item" "key_data_cd" -"origin" "36 -176 -756" -"targetname" "t183" -"classname" "trigger_key" -} -{ -"model" "*61" -"spawnflags" "2048" -"target" "t182" -"classname" "trigger_multiple" -} -{ -"model" "*62" -"spawnflags" "2048" -"target" "t183" -"classname" "trigger_multiple" -} -{ -"model" "*63" -"health" "5" -"spawnflags" "3840" -"_minlight" "0.1" -"speed" "50" -"sounds" "2" -"angle" "90" -"classname" "func_door" -"wait" "3" -} -{ -"origin" "-874 -1170 -778" -"classname" "item_health" -} -{ -"classname" "target_crosslevel_target" -"target" "t181" -"spawnflags" "2050" -"origin" "-320 -784 -328" -} -{ -"classname" "target_crosslevel_trigger" -"spawnflags" "2064" -"targetname" "t148" -"origin" "-8 -256 -768" -} -{ -"model" "*64" -"classname" "trigger_once" -"target" "t180" -"spawnflags" "2048" -} -{ -"model" "*65" -"classname" "trigger_once" -"target" "t180" -"spawnflags" "2048" -} -{ -"origin" "-834 -1170 -778" -"classname" "item_health" -} -{ -"origin" "-848 -806 -926" -"angle" "315" -"classname" "info_player_deathmatch" -} -{ -"classname" "monster_tank_commander" -"angle" "270" -"spawnflags" "257" -"item" "ammo_bullets" -"origin" "-712 0 -584" -} -{ -"classname" "monster_tank_commander" -"angle" "270" -"item" "ammo_rockets" -"spawnflags" "257" -"origin" "216 24 -680" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 1.000000 0.874510" -"origin" "-64 504 120" -} -{ -"origin" "-64 504 112" -"_color" "1.000000 1.000000 1.000000" -"light" "300" -"classname" "light" -"_cone" "20" -"target" "t164" -} -{ -"origin" "-64 504 -100" -"classname" "info_notnull" -"targetname" "t164" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 1.000000 0.874510" -"origin" "-64 584 120" -} -{ -"origin" "-64 584 112" -"_color" "1.000000 1.000000 1.000000" -"light" "300" -"classname" "light" -"_cone" "20" -"target" "t163" -} -{ -"origin" "-64 584 -100" -"classname" "info_notnull" -"targetname" "t163" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 1.000000 0.874510" -"origin" "-64 696 120" -} -{ -"origin" "-64 696 112" -"_color" "1.000000 1.000000 1.000000" -"light" "300" -"classname" "light" -"_cone" "20" -"target" "t162" -} -{ -"origin" "-64 696 -100" -"classname" "info_notnull" -"targetname" "t162" -} -{ -"origin" "-68 355 -82" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-84 -60 -384" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"target" "t214" -"targetname" "t70" -"item" "ammo_bullets" -"origin" "-792 -1188 -772" -"angle" "0" -"classname" "monster_soldier_ss" -"spawnflags" "513" -} -{ -"target" "t214" -"targetname" "t70" -"origin" "-792 -1240 -772" -"angle" "0" -"classname" "monster_soldier_ss" -"spawnflags" "257" -} -{ -"origin" "-64 -1432 -824" -"targetname" "t160" -"classname" "info_notnull" -} -{ -"origin" "-64 -1432 -612" -"target" "t160" -"light" "300" -"classname" "light" -} -{ -"origin" "616 80 -872" -"classname" "item_health" -} -{ -"origin" "496 72 -864" -"classname" "ammo_bullets" -"spawnflags" "1536" -} -{ -"origin" "-862 -1630 -856" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "-132 -888 -936" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-204 -1194 -936" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "-46 -1248 -936" -"spawnflags" "1536" -"classname" "item_health_small" -} -{ -"origin" "-62 -1810 -1064" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "372 -632 -920" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "14 -1026 -944" -"classname" "item_health" -} -{ -"spawnflags" "1792" -"origin" "-158 -1078 -928" -"classname" "weapon_machinegun" -} -{ -"origin" "42 -1647 -958" -"classname" "item_health_small" -} -{ -"origin" "-216 -1720 -936" -"targetname" "t159" -"dmg" "0" -"classname" "target_explosion" -} -{ -"origin" "60 -1572 -992" -"classname" "misc_explobox" -} -{ -"targetname" "t13" -"item" "ammo_cells" -"classname" "monster_brain" -"angle" "270" -"origin" "-175 -530 -930" -"spawnflags" "257" -} -{ -"item" "ammo_cells" -"classname" "monster_brain" -"angle" "270" -"origin" "-295 -770 -930" -"spawnflags" "1" -} -{ -"origin" "-560 -1232 -1056" -"classname" "ammo_bullets" -"spawnflags" "3072" -} -{ -"origin" "-528 -1200 -1056" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-136 -816 -344" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-128 480 -88" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "-288 472 -472" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-224 0 -664" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "30 136 -392" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "464 -240 -864" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "546 222 -884" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"spawnflags" "0" -"classname" "ammo_rockets" -"origin" "120 16 -808" -} -{ -"spawnflags" "2048" -"classname" "item_armor_jacket" -"origin" "168 16 -808" -} -{ -"origin" "-344 32 -816" -"classname" "item_health" -} -{ -"origin" "-288 -416 -832" -"angle" "90" -"spawnflags" "2050" -"classname" "misc_deadsoldier" -} -{ -"origin" "136 -736 -574" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"origin" "-464 -798 -328" -"targetname" "t156" -"classname" "target_secret" -} -{ -"model" "*66" -"spawnflags" "2048" -"message" "You have found a secret area." -"target" "t156" -"classname" "trigger_once" -} -{ -"model" "*67" -"spawnflags" "2055" -"classname" "func_wall" -"targetname" "t181" -} -{ -"origin" "-60 -792 -368" -"targetname" "t154" -"classname" "point_combat" -} -{ -"targetname" "t155" -"origin" "-64 -708 -362" -"angle" "270" -"target" "t154" -"classname" "monster_soldier_light" -"spawnflags" "1" -} -{ -"classname" "ammo_cells" -"origin" "-452 -720 -702" -} -{ -"origin" "-408 -954 -640" -"classname" "ammo_rockets" -"spawnflags" "3584" -} -{ -"origin" "-504 -724 -352" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "-508 -828 -352" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-472 -828 -352" -"classname" "item_health" -"spawnflags" "1024" -} -{ -"origin" "-508 -764 -352" -"classname" "ammo_shells" -"spawnflags" "0" -} -{ -"origin" "-508 -868 -352" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"origin" "-472 -868 -352" -"classname" "item_health" -"spawnflags" "0" -} -{ -"origin" "-548 -868 -288" -"classname" "ammo_rockets" -"spawnflags" "2048" -} -{ -"origin" "-548 -796 -288" -"classname" "ammo_cells" -"spawnflags" "0" -} -{ -"origin" "-548 -760 -288" -"classname" "ammo_slugs" -"spawnflags" "2048" -} -{ -"origin" "-548 -724 -288" -"classname" "ammo_rockets" -"spawnflags" "2048" -} -{ -"origin" "-548 -760 -352" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"origin" "-548 -832 -352" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "-548 -868 -352" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "-132 -864 -352" -"classname" "ammo_rockets" -"team" "ammo1" -} -{ -"origin" "-48 -864 -304" -"classname" "ammo_bullets" -"spawnflags" "1792" -"team" "ammo1" -} -{ -"origin" "-48 -828 -352" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"origin" "-320 -1384 -1064" -"targetname" "t153" -"classname" "target_secret" -} -{ -"spawnflags" "2048" -"origin" "-280 -1408 -1064" -"target" "t153" -"targetname" "t152" -"message" "You have found a secret area." -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "208 -32 -808" -"targetname" "t149" -"classname" "target_secret" -} -{ -"model" "*68" -"spawnflags" "2048" -"message" "You have found a secret area." -"target" "t149" -"classname" "trigger_once" -} -{ -"target" "t280" -"targetname" "t281" -"classname" "monster_berserk" -"spawnflags" "769" -"angle" "270" -"origin" "220 -752 -612" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"origin" "376 -1184 -652" -} -{ -"classname" "monster_berserk" -"angle" "270" -"origin" "16 -712 -612" -"spawnflags" "1" -} -{ -"classname" "monster_berserk" -"angle" "270" -"origin" "-144 -712 -612" -"spawnflags" "257" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2" -"angle" "135" -"origin" "-112 -1568 -832" -} -{ -"targetname" "city2NH" -"angle" "90" -"origin" "-64 -1862 -800" -"classname" "info_player_start" -} -{ -"classname" "target_crosslevel_trigger" -"spawnflags" "2049" -"targetname" "rfld" -"origin" "-116 -872 -809" -} -{ -"target" "t217" -"spawnflags" "256" -"origin" "-448 -1184 -936" -"angle" "270" -"classname" "monster_soldier_ss" -} -{ -"origin" "-480 -1248 -936" -"angle" "225" -"classname" "monster_soldier_ss" -} -{ -"killtarget" "redfieldbutton" -"origin" "-155 -795 -822" -"targetname" "rfld" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*69" -"spawnflags" "2048" -"targetname" "pylon" -"classname" "func_wall" -} -{ -"origin" "-696 -1252 -776" -"target" "t137" -"targetname" "t136" -"classname" "trigger_relay" -} -{ -"angle" "0" -"spawnflags" "1" -"origin" "-492 -1204 -680" -"target" "t70" -"classname" "monster_soldier_ss" -"item" "ammo_bullets" -} -{ -"origin" "-64 -1864 -590" -"classname" "light" -"light" "100" -} -{ -"_cone" "15" -"origin" "-64 -1864 -598" -"target" "t133" -"classname" "light" -"light" "300" -} -{ -"origin" "-64 -1864 -808" -"targetname" "t133" -"classname" "info_notnull" -} -{ -"_color" "1.000000 0.796078 0.003922" -"origin" "-8 -1480 -590" -"classname" "light" -"light" "48" -} -{ -"_cone" "15" -"origin" "-64 -1784 -598" -"target" "t134" -"classname" "light" -"light" "300" -} -{ -"origin" "-64 -1784 -808" -"targetname" "t134" -"classname" "info_notnull" -} -{ -"origin" "-64 -1976 -808" -"targetname" "t132" -"classname" "info_notnull" -} -{ -"origin" "-64 -1976 -590" -"light" "100" -"classname" "light" -} -{ -"_cone" "15" -"origin" "-64 -1976 -598" -"light" "300" -"target" "t132" -"classname" "light" -} -{ -"origin" "192 -216 -616" -"angle" "270" -"spawnflags" "259" -"targetname" "t295" -"classname" "monster_floater" -} -{ -"origin" "-16 -1104 -632" -"targetname" "t57" -"spawnflags" "3" -"classname" "monster_floater" -} -{ -"spawnflags" "2048" -"origin" "-288 64 -672" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-248 64 -672" -"classname" "item_health" -} -{ -"origin" "-328 64 -664" -"classname" "ammo_rockets" -"spawnflags" "0" -} -{ -"origin" "632 -170 -824" -"classname" "item_armor_jacket" -"spawnflags" "1792" -} -{ -"origin" "592 -232 -872" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "192 -48 -808" -"classname" "item_health_mega" -} -{ -"spawnflags" "1792" -"origin" "152 -32 -776" -"classname" "weapon_rocketlauncher" -} -{ -"item" "ammo_bullets" -"origin" "464 -8 -856" -"angle" "45" -"classname" "monster_soldier_ss" -"deathtarget" "brainguy" -} -{ -"light" "64" -"classname" "light" -"origin" "-320 -804 -396" -} -{ -"light" "80" -"classname" "light" -"origin" "-316 -792 -524" -} -{ -"light" "64" -"classname" "light" -"origin" "-632 -832 -772" -} -{ -"light" "64" -"classname" "light" -"origin" "-632 -832 -836" -} -{ -"classname" "light" -"light" "64" -"origin" "-632 -832 -900" -} -{ -"classname" "info_null" -"targetname" "t130" -"origin" "-72 -832 -360" -} -{ -"style" "34" -"classname" "light" -"target" "t130" -"light" "350" -"_color" "1.000000 0.945098 0.643137" -"origin" "-72 -832 -238" -"spawnflags" "1" -"targetname" "t155" -"_cone" "25" -} -{ -"light" "100" -"classname" "light" -"origin" "-127 -798 -515" -} -{ -"light" "100" -"classname" "light" -"origin" "-81 -787 -532" -} -{ -"classname" "light" -"light" "100" -"origin" "-43 -793 -511" -} -{ -"origin" "-64 -1880 -982" -"_color" "1.000000 0.920900 0.343800" -"light" "90" -"classname" "light" -} -{ -"classname" "light" -"light" "200" -"_color" "1.000000 0.920900 0.343800" -"origin" "-64 -1880 -973" -"target" "t129" -"_cone" "20" -} -{ -"origin" "-64 -1872 -1080" -"classname" "info_notnull" -"targetname" "t129" -} -{ -"classname" "light" -"light" "200" -"_color" "1.000000 0.920900 0.343800" -"origin" "-64 -2032 -976" -"target" "t128" -"_cone" "20" -} -{ -"classname" "info_notnull" -"origin" "-64 -2032 -1080" -"targetname" "t128" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.920900 0.343800" -"origin" "-64 -2032 -974" -} -{ -"classname" "info_notnull" -"targetname" "t127" -"origin" "-64 -1808 -1080" -} -{ -"target" "t264" -"spawnflags" "1" -"item" "item_armor_shard" -"classname" "monster_brain" -"angle" "270" -"origin" "194 -222 -804" -} -{ -"spawnflags" "1" -"item" "Ammo_cells" -"classname" "monster_brain" -"angle" "225" -"origin" "238 -184 -804" -} -{ -"classname" "info_notnull" -"targetname" "t126" -"origin" "-64 -1096 -620" -} -{ -"classname" "trigger_relay" -"delay" "0.1" -"targetname" "py1" -"angle" "45" -"killtarget" "support_hose" -"origin" "-68 -1174 -632" -"target" "supporthose" -} -{ -"sounds" "2" -"origin" "-64 -1096 -748" -"angle" "-2" -"classname" "target_splash" -"targetname" "py1" -} -{ -"sounds" "2" -"origin" "-64 -1096 -684" -"classname" "target_splash" -"angle" "225" -"targetname" "py1" -} -{ -"sounds" "2" -"origin" "-64 -1096 -638" -"classname" "target_splash" -"angle" "-1" -"targetname" "py1" -} -{ -"model" "*70" -"classname" "func_door" -"angle" "0" -"Team" "door1" -"lip" "8" -"speed" "50" -"sounds" "4" -} -{ -"targetname" "rfld" -"killtarget" "ran3" -"origin" "-242 -826 -924" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"target" "t287" -"targetname" "ran4" -"random" ".8" -"wait" ".95" -"spawnflags" "2049" -"classname" "func_timer" -"origin" "-229 -901 -924" -} -{ -"targetname" "rfld" -"classname" "trigger_relay" -"origin" "-270 -820 -924" -"killtarget" "ran2" -"spawnflags" "2048" -} -{ -"targetname" "rfld" -"classname" "trigger_relay" -"origin" "-217 -826 -924" -"killtarget" "ran4" -} -{ -"targetname" "rfld" -"killtarget" "ran1" -"origin" "-288 -787 -924" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-262 -797 -924" -"targetname" "ran2" -"target" "t124" -"random" ".8" -"wait" "1" -"spawnflags" "2049" -"classname" "func_timer" -} -{ -"origin" "-238 -804 -924" -"targetname" "ran3" -"target" "t125" -"classname" "func_timer" -"spawnflags" "2049" -"wait" "3" -"random" "2.333333333" -} -{ -"origin" "-266 -764 -924" -"targetname" "ran1" -"target" "t118" -"random" ".9" -"wait" "4" -"spawnflags" "2049" -"classname" "func_timer" -} -{ -"targetname" "t121" -"noise" "world/spark1.wav" -"classname" "target_speaker" -"origin" "-106 -812 -883" -"spawnflags" "2048" -} -{ -"targetname" "t123" -"noise" "world/spark5.wav" -"classname" "target_speaker" -"origin" "-110 -791 -896" -"spawnflags" "2048" -} -{ -"targetname" "t122" -"origin" "-102 -771 -896" -"classname" "target_speaker" -"noise" "world/spark1.wav" -"spawnflags" "2048" -} -{ -"targetname" "t125" -"origin" "-232 -771 -941" -"target" "t123" -"classname" "trigger_relay" -} -{ -"targetname" "t124" -"origin" "-221 -761 -940" -"target" "t122" -"classname" "trigger_relay" -} -{ -"targetname" "t118" -"origin" "-241 -763 -940" -"target" "t121" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-148 -835 -864" -"_color" "1.000000 0.853175 0.011905" -"light" "100" -"classname" "light" -} -{ -"targetname" "rfld" -"classname" "trigger_relay" -"origin" "-177 -798 -924" -"killtarget" "t119" -} -{ -"model" "*71" -"_minlight" "0.9" -"targetname" "rfld" -"delay" ".25" -"spawnflags" "2054" -"classname" "func_wall" -} -{ -"model" "*72" -"_minlight" "0.8" -"targetname" "rfld" -"spawnflags" "2049" -"classname" "func_wall" -} -{ -"targetname" "t287" -"origin" "-100 -826 -847" -"target" "t119" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"style" "35" -"light" "200" -"targetname" "t119" -"origin" "-142 -744 -896" -"_color" "1.000000 0.391304 0.185771" -"classname" "light" -} -{ -"targetname" "t122" -"origin" "-154 -754 -938" -"classname" "target_splash" -"angle" "225" -"sounds" "1" -} -{ -"targetname" "t121" -"origin" "-130 -748 -924" -"classname" "target_splash" -"angle" "-1" -"sounds" "1" -} -{ -"targetname" "t123" -"origin" "-148 -754 -938" -"sounds" "1" -"angle" "315" -"classname" "target_splash" -"spawnflags" "2048" -} -{ -"model" "*73" -"message" "Red force fields deactivated." -"delay" ".5" -"target" "rfld" -"targetname" "redfieldbutton" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-256 254 -460" -"angle" "180" -"classname" "monster_tank_commander" -"item" "ammo_bullets" -"spawnflags" "1" -} -{ -"model" "*74" -"spawnflags" "2048" -"target" "t116" -"classname" "trigger_once" -} -{ -"targetname" "t116" -"origin" "-384 112 -440" -"angle" "90" -"classname" "monster_berserk" -} -{ -"origin" "-488 472 -488" -"targetname" "t112" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"spawnflags" "256" -"origin" "-368 352 -472" -"classname" "monster_soldier_ss" -"angle" "180" -} -{ -"item" "ammo_bullets" -"origin" "-416 384 -472" -"target" "t112" -"classname" "monster_soldier_ss" -"angle" "180" -} -{ -"origin" "-288 432 -472" -"angle" "180" -"classname" "monster_soldier_ss" -} -{ -"origin" "-316 -792 -588" -"classname" "light" -"light" "80" -} -{ -"origin" "-320 -804 -332" -"classname" "light" -"light" "64" -} -{ -"origin" "-316 -792 -652" -"light" "80" -"classname" "light" -} -{ -"origin" "-628 -884 -808" -"_color" "1.000000 0.172549 0.023529" -"light" "64" -"classname" "light" -} -{ -"origin" "-464 -1072 -680" -"angle" "90" -"classname" "monster_berserk" -"item" "item_armor_shard" -"spawnflags" "1" -"targetname" "t250" -} -{ -"style" "36" -"targetname" "t194" -"target" "t111" -"_color" "1.000000 0.996078 0.768627" -"classname" "light" -"_cone" "20" -"origin" "-632 -832 -600" -"light" "450" -"spawnflags" "1" -} -{ -"targetname" "t111" -"classname" "info_notnull" -"origin" "-633 -832 -936" -} -{ -"origin" "-281 -832 -712" -"targetname" "t106" -"classname" "info_notnull" -} -{ -"style" "37" -"targetname" "t108" -"spawnflags" "1" -"light" "900" -"origin" "-280 -832 -248" -"_cone" "20" -"target" "t106" -"classname" "light" -} -{ -"model" "*75" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*76" -"spawnflags" "2056" -"lip" "8" -"wait" "-1" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*77" -"target" "t238" -"lip" "8" -"spawnflags" "8" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*78" -"target" "sec2" -"classname" "trigger_multiple" -} -{ -"model" "*79" -"wait" "4" -"lip" "64" -"_minlight" "0.1" -"targetname" "sec2" -"speed" "100" -"angle" "-1" -"classname" "func_door" -} -{ -"target" "t102" -"classname" "light" -"_cone" "10" -"light" "200" -"origin" "0 -712 -486" -} -{ -"target" "t103" -"light" "200" -"_cone" "10" -"classname" "light" -"origin" "-48 -712 -486" -} -{ -"target" "t104" -"light" "200" -"_cone" "10" -"classname" "light" -"origin" "-80 -712 -486" -} -{ -"target" "t105" -"light" "200" -"_cone" "10" -"classname" "light" -"origin" "-128 -712 -486" -} -{ -"targetname" "t105" -"classname" "info_notnull" -"origin" "-128 -712 -636" -} -{ -"targetname" "t104" -"classname" "info_notnull" -"origin" "-80 -712 -636" -} -{ -"targetname" "t103" -"classname" "info_notnull" -"origin" "-48 -712 -636" -} -{ -"targetname" "t102" -"classname" "info_notnull" -"origin" "-4 -712 -636" -} -{ -"classname" "func_group" -} -{ -"model" "*80" -"target" "t100" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"model" "*81" -"spawnflags" "2304" -"target" "t82" -"targetname" "t81" -"classname" "trigger_once" -} -{ -"targetname" "t97" -"origin" "-48 -632 -636" -"classname" "info_null" -} -{ -"target" "t97" -"origin" "-48 -632 -486" -"classname" "light" -"_cone" "10" -"light" "200" -} -{ -"targetname" "t98" -"origin" "-80 -632 -636" -"classname" "info_null" -} -{ -"target" "t98" -"origin" "-80 -632 -486" -"classname" "light" -"_cone" "10" -"light" "200" -} -{ -"targetname" "t99" -"origin" "-128 -632 -636" -"classname" "info_null" -} -{ -"target" "t99" -"origin" "-128 -632 -486" -"classname" "light" -"_cone" "10" -"light" "200" -} -{ -"origin" "-4 -632 -636" -"targetname" "t96" -"classname" "info_null" -} -{ -"origin" "-4 -632 -486" -"target" "t96" -"light" "200" -"_cone" "10" -"classname" "light" -} -{ -"target" "t95" -"classname" "light" -"light" "300" -"_cone" "20" -"origin" "84 -384 -504" -} -{ -"targetname" "t95" -"classname" "info_null" -"origin" "84 -384 -664" -} -{ -"target" "t94" -"_cone" "20" -"light" "300" -"classname" "light" -"origin" "-216 -384 -504" -} -{ -"targetname" "t94" -"classname" "info_null" -"origin" "-216 -384 -664" -} -{ -"targetname" "t93" -"classname" "info_null" -"origin" "-216 -576 -664" -} -{ -"target" "t93" -"_cone" "20" -"light" "300" -"classname" "light" -"origin" "-216 -576 -504" -} -{ -"targetname" "t92" -"classname" "info_null" -"origin" "88 -576 -664" -} -{ -"target" "t92" -"classname" "light" -"light" "300" -"_cone" "20" -"origin" "88 -576 -504" -} -{ -"targetname" "t91" -"origin" "-216 -192 -664" -"classname" "info_null" -} -{ -"target" "t91" -"origin" "-216 -192 -504" -"classname" "light" -"light" "300" -"_cone" "20" -} -{ -"origin" "84 -192 -664" -"targetname" "t90" -"classname" "info_null" -} -{ -"origin" "84 -192 -504" -"target" "t90" -"_cone" "20" -"light" "300" -"classname" "light" -} -{ -"origin" "-320 -292 -668" -"targetname" "t86" -"target" "t85" -"classname" "path_corner" -} -{ -"origin" "212 -592 -700" -"targetname" "t84" -"target" "t83" -"classname" "path_corner" -} -{ -"killtarget" "trap_gun" -"spawnflags" "2304" -"origin" "-924 -16 -564" -"targetname" "t82" -"classname" "trigger_relay" -} -{ -"origin" "-936 456 -492" -"target" "t1" -"targetname" "t80" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"targetname" "t100" -"origin" "-408 120 -408" -"message" "You have found a secret passage." -"classname" "target_secret" -} -{ -"spawnflags" "2304" -"targetname" "t82" -"origin" "-928 32 -560" -"message" "You have found a secret.\nGun trap is deactivated." -"classname" "target_secret" -} -{ -"item" "item_armor_shard" -"targetname" "t89" -"origin" "195 -34 -673" -"spawnflags" "1" -"classname" "monster_berserk" -} -{ -"model" "*82" -"spawnflags" "2048" -"target" "t89" -"classname" "trigger_once" -} -{ -"item" "item_armor_shard" -"targetname" "t89" -"origin" "-717 -77 -576" -"spawnflags" "2" -"angle" "270" -"classname" "monster_berserk" -} -{ -"model" "*83" -"target" "t81" -"_minlight" "0.1" -"classname" "func_button" -"angle" "180" -"health" "1" -"lip" "4" -"spawnflags" "2304" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -156 -512" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-100 -156 -512" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -284 -512" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-100 -284 -512" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"origin" "-28 -476 -512" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.976471 0.501961" -"classname" "light" -"light" "100" -"origin" "-100 -476 -512" -} -{ -"model" "*84" -"spawnflags" "8" -"target" "t79" -"classname" "func_door" -"angle" "180" -"_minlight" "0.1" -"team" "sdr1" -"health" "80" -} -{ -"model" "*85" -"angle" "0" -"classname" "func_door" -"team" "bigredx" -"speed" "50" -"sounds" "4" -"wait" "4" -"_minlight" "0.2" -} -{ -"model" "*86" -"classname" "func_door" -"angle" "180" -"team" "bigredx" -"speed" "50" -"sounds" "4" -"wait" "4" -"_minlight" "0.2" -} -{ -"origin" "-924 532 -532" -"light" "100" -"classname" "light" -"spawnflags" "1792" -} -{ -"model" "*87" -"targetname" "t279" -"target" "bigredoor" -"spawnflags" "4" -"classname" "trigger_once" -} -{ -"model" "*88" -"spawnflags" "2080" -"message" "This door is opened elsewhere." -"sounds" "4" -"_minlight" "0.3" -"lip" "32" -"team" "bigred" -"targetname" "bigredoor" -"speed" "25" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*89" -"spawnflags" "2080" -"message" "This door is opened elsewhere." -"sounds" "2" -"_minlight" "0.3" -"lip" "32" -"team" "bigred" -"speed" "25" -"targetname" "bigredoor" -"angle" "0" -"classname" "func_door" -} -{ -"model" "*90" -"spawnflags" "2080" -"message" "This door is opened elsewhere." -"sounds" "2" -"_minlight" "0.3" -"lip" "8" -"targetname" "bigredoor" -"speed" "25" -"team" "bigred" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*91" -"spawnflags" "2080" -"message" "This door is opened elsewhere." -"sounds" "2" -"_minlight" "0.3" -"lip" "8" -"targetname" "bigredoor" -"team" "bigred" -"speed" "25" -"angle" "0" -"classname" "func_door" -} -{ -"dmg" "200" -"health" "50" -"classname" "misc_explobox" -"origin" "-36 -1824 -936" -"spawnflags" "2048" -} -{ -"model" "*92" -"spawnflags" "2048" -"classname" "func_explosive" -"target" "rly2" -"health" "5" -"dmg" "50" -"mass" "100" -"_minlight" "0.6" -} -{ -"model" "*93" -"wait" "-1" -"_minlight" "0.2" -"angle" "180" -"classname" "func_door" -"spawnflags" "2048" -"team" "Greendoor" -"targetname" "yfld" -"sounds" "3" -"message" "This door is opened elsewhere." -} -{ -"model" "*94" -"wait" "-1" -"_minlight" "0.2" -"classname" "func_door" -"angle" "0" -"spawnflags" "2048" -"message" "This door is opened elsewhere." -"team" "Greendoor" -"targetname" "yfld" -} -{ -"classname" "info_notnull" -"targetname" "t50" -"origin" "-64 -224 -812" -} -{ -"style" "38" -"targetname" "t185" -"classname" "light" -"light" "400" -"target" "t50" -"spawnflags" "1" -"_color" "1.000000 0.894118 0.290196" -"origin" "-64 -224 -680" -"_cone" "25" -} -{ -"target" "t57" -"item" "ammo_cells" -"targetname" "t56" -"origin" "-80 124 -334" -"classname" "monster_floater" -"angle" "270" -"spawnflags" "1" -} -{ -"model" "*95" -"sounds" "4" -"lip" "3" -"angle" "270" -"classname" "func_button" -"_minlight" "0.6" -"target" "sd2" -} -{ -"target" "t152" -"classname" "item_power_shield" -"origin" "-288 -1368 -1056" -"spawnflags" "0" -} -{ -"delay" "0" -"classname" "trigger_relay" -"targetname" "t46" -"target" "t47" -"origin" "-392 -1400 -1064" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"delay" "0.2" -"targetname" "t46" -"target" "t47" -"origin" "-392 -1440 -1064" -"spawnflags" "2048" -} -{ -"style" "39" -"classname" "light" -"light" "1000" -"_color" "1.000000 0.873016 0.154762" -"origin" "-393 -1424 -1064" -"spawnflags" "2049" -"targetname" "t47" -} -{ -"classname" "target_splash" -"angle" "180" -"sounds" "5" -"origin" "-382 -1424 -1064" -"targetname" "t46" -} -{ -"model" "*96" -"classname" "trigger_multiple" -"wait" "3" -"delay" ".5" -"target" "t46" -"spawnflags" "2048" -} -{ -"classname" "target_blaster" -"dmg" "15" -"angle" "180" -"origin" "-388 -1424 -1064" -"speed" "1000" -"targetname" "t46" -"spawnflags" "3584" -} -{ -"classname" "point_combat" -"targetname" "t44" -"origin" "-472 -1000 -952" -} -{ -"classname" "monster_brain" -"angle" "225" -"origin" "-68 -118 -742" -} -{ -"dmg" "10000" -"origin" "432 -218 -808" -"classname" "target_laser" -"angle" "90" -"spawnflags" "2053" -"targetname" "yfld" -} -{ -"sounds" "5" -"dmg" "10000" -"origin" "432 -218 -840" -"classname" "target_laser" -"spawnflags" "2053" -"angle" "90" -"targetname" "yfld" -} -{ -"model" "*97" -"spawnflags" "2048" -"target" "spg" -"classname" "func_button" -"angle" "90" -"lip" "6" -"speed" "50" -"wait" "-1" -"sounds" "5" -} -{ -"classname" "light" -"light" "135" -"origin" "-64 -232 -896" -} -{ -"target" "t148" -"classname" "key_data_spinner" -"origin" "-64 -224 -876" -"spawnflags" "2048" -} -{ -"angle" "90" -"classname" "target_splash" -"targetname" "py1" -"origin" "-64 -1096 -716" -"sounds" "2" -} -{ -"angle" "315" -"classname" "target_splash" -"targetname" "py1" -"origin" "-64 -1096 -658" -"sounds" "2" -} -{ -"spawnflags" "2048" -"origin" "-20 -1124 -612" -"killtarget" "pylon" -"classname" "trigger_relay" -"targetname" "py1" -} -{ -"model" "*98" -"spawnflags" "2048" -"classname" "func_wall" -"_minlight" "0.9" -"targetname" "pylon" -} -{ -"classname" "light" -"light" "200" -"_color" "0.145098 0.466667 1.000000" -"origin" "-64 -1095 -783" -} -{ -"origin" "-408 8 -376" -"light" "100" -"classname" "light" -} -{ -"model" "*99" -"spawnflags" "8" -"target" "t79" -"_minlight" "0.9" -"angle" "180" -"team" "sdr1" -"classname" "func_door" -"health" "2" -} -{ -"model" "*100" -"team" "condoor" -"classname" "func_door" -"angle" "90" -"speed" "100" -"sounds" "2" -"lip" "8" -"wait" "4" -"_minlight" "0.1" -} -{ -"deathtarget" "t57" -"target" "t261" -"origin" "-72 -352 -416" -"spawnflags" "1" -"angle" "270" -"classname" "monster_floater" -} -{ -"deathtarget" "t57" -"origin" "210 -576 -630" -"spawnflags" "1" -"angle" "180" -"classname" "monster_floater" -} -{ -"spawnflags" "1792" -"origin" "41 -1067 -904" -"classname" "ammo_slugs" -} -{ -"origin" "-161 -1701 -816" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"origin" "43 -1501 -816" -"classname" "ammo_rockets" -} -{ -"targetname" "t281" -"spawnflags" "1" -"origin" "124 -796 -616" -"classname" "monster_tank_commander" -"angle" "360" -"item" "ammo_rockets" -"target" "t289" -} -{ -"targetname" "t70" -"spawnflags" "1" -"origin" "-839 -1609 -860" -"angle" "90" -"classname" "monster_tank_commander" -"item" "ammo_rockets" -} -{ -"model" "*101" -"dmg" "25" -"targetname" "f1" -"mass" "300" -"classname" "func_explosive" -"spawnflags" "2048" -} -{ -"style" "40" -"spawnflags" "2048" -"_cone" "20" -"classname" "light" -"light" "250" -"targetname" "pylon" -"origin" "-64 -1096 -508" -"target" "t126" -} -{ -"spawnflags" "1024" -"classname" "item_health_small" -"origin" "42 -1689 -934" -} -{ -"model" "*102" -"spawnflags" "2048" -"dmg" "20" -"health" "200" -"classname" "func_explosive" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"health" "15" -"dmg" "55" -"origin" "336 -764 -944" -} -{ -"spawnflags" "1" -"classname" "monster_floater" -"targetname" "t17" -"origin" "-72 -654 -892" -} -{ -"targetname" "t16" -"classname" "target_laser" -"origin" "224 -1240 -956" -"spawnflags" "2057" -"angle" "-1" -"dmg" "25" -} -{ -"targetname" "t16" -"angle" "-1" -"classname" "target_laser" -"origin" "224 -1192 -956" -"spawnflags" "2057" -"dmg" "25" -} -{ -"targetname" "t16" -"spawnflags" "2056" -"angle" "90" -"origin" "224 -1280 -920" -"classname" "target_laser" -"dmg" "45" -} -{ -"targetname" "t16" -"spawnflags" "2056" -"origin" "224 -1280 -872" -"classname" "target_laser" -"angle" "90" -"dmg" "45" -} -{ -"spawnflags" "2048" -"origin" "336 -902 -944" -"dmg" "55" -"health" "15" -"classname" "misc_explobox" -} -{ -"target" "t15" -"origin" "-464 -612 -930" -"targetname" "t13" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"delay" ".5" -"targetname" "t15" -"origin" "96 -652 -872" -"classname" "target_explosion" -"spawnflags" "2048" -} -{ -"targetname" "t15" -"delay" "1.25" -"origin" "96 -652 -896" -"classname" "target_explosion" -"spawnflags" "2048" -} -{ -"origin" "96 -656 -1048" -"light" "150" -"classname" "light" -} -{ -"origin" "-488 -656 -936" -"targetname" "t13" -"delay" "0.5" -"target" "f1" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-472 -632 -944" -"delay" "2" -"target" "t14" -"targetname" "t13" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*103" -"target" "t13" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "88 -656 -1056" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"item" "ammo_cells" -"angle" "180" -"origin" "56 -648 -984" -"targetname" "t14" -"spawnflags" "2" -"classname" "monster_floater" -} -{ -"origin" "120 -664 -984" -"targetname" "t14" -"spawnflags" "258" -"classname" "monster_floater" -} -{ -"model" "*104" -"lip" "16" -"targetname" "t14" -"classname" "func_door" -"angle" "-2" -"spawnflags" "1" -"speed" "75" -"wait" "-1" -} -{ -"origin" "-416 -624 -936" -"targetname" "t12" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"origin" "-310 -852 -950" -"targetname" "t11" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"origin" "-462 -674 -938" -"targetname" "t10" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"spawnflags" "769" -"origin" "-215 -802 -930" -"angle" "270" -"classname" "monster_brain" -"target" "t11" -} -{ -"origin" "-72 -1804 -912" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "-112 -1800 -904" -"classname" "ammo_rockets" -"spawnflags" "2048" -} -{ -"origin" "-48 -1752 -936" -"targetname" "t8" -"classname" "point_combat" -"spawnflags" "1" -} -{ -"origin" "-80 -1752 -936" -"targetname" "t9" -"classname" "point_combat" -"spawnflags" "1" -"killtarget" "t9" -} -{ -"model" "*105" -"classname" "trigger_multiple" -"spawnflags" "2048" -"wait" "15" -"target" "t302" -"targetname" "reminder" -} -{ -"spawnflags" "1" -"targetname" "t28" -"target" "t8" -"origin" "-36 -1768 -920" -"classname" "monster_soldier_ss" -"angle" "90" -} -{ -"spawnflags" "1" -"targetname" "t28" -"target" "t9" -"origin" "-76 -1768 -920" -"angle" "90" -"classname" "monster_soldier_ss" -} -{ -"target" "t17" -"spawnflags" "1" -"targetname" "t5" -"origin" "36 -1748 -920" -"classname" "monster_berserk" -"angle" "90" -} -{ -"spawnflags" "768" -"targetname" "t6" -"origin" "-120 -1752 -920" -"angle" "315" -"classname" "monster_berserk" -} -{ -"model" "*106" -"spawnflags" "2054" -"classname" "func_wall" -"targetname" "redforfld" -} -{ -"origin" "-56 -96 -760" -"classname" "light" -"light" "32" -"_color" "0.215686 0.784314 1.000000" -} -{ -"origin" "-72 -96 -760" -"classname" "light" -"light" "32" -"_color" "0.215686 0.784314 1.000000" -} -{ -"origin" "-104 -112 -760" -"classname" "light" -"light" "64" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-168 -112 -632" -"classname" "light" -"light" "32" -"_color" "0.215686 0.784314 1.000000" -} -{ -"origin" "-160 -128 -712" -"_color" "0.220472 0.590551 1.000000" -"light" "64" -"classname" "light" -} -{ -"origin" "40 -136 -772" -"classname" "light" -"light" "64" -"_color" "0.220472 0.590551 1.000000" -} -{ -"origin" "-168 -136 -760" -"classname" "light" -"light" "64" -"_color" "0.215686 0.784314 1.000000" -} -{ -"origin" "32 -112 -632" -"_color" "0.215686 0.784314 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "32 -136 -696" -"classname" "light" -"light" "64" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-24 -112 -760" -"_color" "1.000000 0.976471 0.501961" -"light" "64" -"classname" "light" -} -{ -"model" "*107" -"spawnflags" "2048" -"health" "5" -"_minlight" "0.6" -"classname" "func_explosive" -"target" "t3" -"dmg" "50" -} -{ -"origin" "-107 -1331 -538" -"classname" "trigger_relay" -"targetname" "t3" -"target" "cntr1" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"targetname" "rly2" -"target" "cntr1" -"origin" "-109 -1025 -526" -} -{ -"model" "*108" -"spawnflags" "2048" -"classname" "trigger_counter" -"count" "2" -"targetname" "cntr1" -"target" "py1" -} -{ -"light" "150" -"classname" "light" -"origin" "-368 -648 -828" -"_color" "1.000000 0.875537 0.004292" -} -{ -"spawnflags" "2048" -"target" "pylon" -"classname" "item_quad" -"origin" "-64 -1096 -562" -} -{ -"classname" "light" -"light" "100" -"origin" "-100 -284 -576" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-152 -92 -368" -"light" "125" -"classname" "light" -"_color" "1.000000 0.603922 0.533333" -} -{ -"classname" "light" -"light" "85" -"origin" "-136 -92 -304" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-100 -156 -576" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-28 -156 -576" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-28 -284 -576" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-40 -100 -368" -"light" "125" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "100" -"origin" "-28 -476 -576" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "36 -476 -368" -"light" "125" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "light" -"light" "125" -"origin" "-164 -476 -368" -"_color" "1.000000 0.603922 0.533333" -} -{ -"origin" "-100 -476 -576" -"light" "100" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "8 -92 -304" -"light" "85" -"classname" "light" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "trigger_relay" -"target" "sdlight" -"targetname" "sd2" -"delay" "8.5" -"origin" "246 -20 -752" -} -{ -"classname" "trigger_relay" -"targetname" "sd2" -"target" "sdlight" -"origin" "228 24 -752" -} -{ -"model" "*109" -"spawnflags" "2048" -"sounds" "3" -"classname" "func_button" -"angle" "270" -"target" "sd2" -} -{ -"model" "*110" -"classname" "func_door" -"angle" "-2" -"speed" "75" -"spawnflags" "12" -"targetname" "sd2" -"sounds" "4" -"wait" "10" -"_minlight" "0.1" -} -{ -"light" "175" -"classname" "light" -"origin" "544 -145 -744" -} -{ -"light" "100" -"classname" "light" -"origin" "544 -49 -744" -} -{ -"light" "100" -"classname" "light" -"origin" "544 23 -744" -} -{ -"light" "100" -"classname" "light" -"origin" "544 119 -744" -} -{ -"classname" "light" -"light" "100" -"origin" "544 231 -744" -} -{ -"classname" "light" -"light" "100" -"origin" "544 -241 -744" -} -{ -"light" "32" -"classname" "light" -"origin" "232 -424 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "168 -424 -736" -"classname" "light" -"light" "32" -} -{ -"model" "*111" -"target" "t80" -"_minlight" "0.6" -"classname" "func_button" -"angle" "90" -"lip" "8" -"speed" "50" -"wait" "2" -"health" "1" -"spawnflags" "2304" -} -{ -"model" "*112" -"classname" "func_door" -"angle" "-2" -"spawnflags" "2057" -"wait" "4" -"speed" "150" -"targetname" "t1" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-448 -1312 -776" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-448 -1312 -824" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-448 -1120 -824" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-448 -1120 -776" -"_color" "1.000000 0.875537 0.004292" -} -{ -"origin" "-376 -800 -822" -"classname" "light" -"light" "150" -"_color" "1.000000 0.881423 0.217391" -} -{ -"origin" "-376 -864 -822" -"_color" "1.000000 0.881423 0.217391" -"light" "150" -"classname" "light" -} -{ -"light" "100" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "-90 -1566 -938" -} -{ -"origin" "-28 -1566 -938" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "100" -} -{ -"light" "80" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "-80 -1632 -938" -} -{ -"origin" "-48 -1632 -938" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "-28 -1676 -938" -} -{ -"light" "120" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "-64 -1632 -874" -} -{ -"model" "*113" -"team" "condoor" -"_minlight" "0.1" -"wait" "4" -"lip" "8" -"sounds" "2" -"speed" "100" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*114" -"classname" "func_door" -"angle" "-1" -"team" "pal1" -"_minlight" "0.2" -} -{ -"model" "*115" -"classname" "func_door" -"angle" "0" -"team" "pal1" -"sounds" "3" -"_minlight" "0.1" -"target" "t212" -} -{ -"model" "*116" -"classname" "func_door" -"angle" "180" -"team" "pal1" -"_minlight" "0.2" -} -{ -"classname" "info_player_start" -"angle" "270" -"targetname" "city2XH" -"origin" "-65 592 -80" -} -{ -"classname" "target_changelevel" -"targetname" "next_high" -"map" "city3$city3NH" -"origin" "-80 632 48" -} -{ -"model" "*117" -"angle" "90" -"classname" "trigger_multiple" -"target" "next_high" -} -{ -"classname" "info_player_start" -"angle" "0" -"targetname" "city2XL" -"origin" "356 176 -872" -} -{ -"classname" "target_changelevel" -"targetname" "next_low" -"map" "city3$city3NL" -"origin" "224 144 -840" -} -{ -"model" "*118" -"angle" "180" -"classname" "trigger_multiple" -"target" "next_low" -} -{ -"angle" "90" -"origin" "-64 -1888 -1056" -"classname" "info_player_start" -"targetname" "city2NL" -} -{ -"classname" "target_changelevel" -"targetname" "back_low" -"map" "city1$city1XL" -"origin" "-104 -1944 -1064" -} -{ -"model" "*119" -"classname" "trigger_multiple" -"target" "back_low" -"angle" "270" -} -{ -"classname" "target_changelevel" -"targetname" "back_high" -"map" "city1$city1XH" -"origin" "-24 -1944 -760" -} -{ -"model" "*120" -"classname" "trigger_multiple" -"target" "back_high" -"angle" "270" -} -{ -"classname" "light" -"light" "100" -"origin" "16 -1888 -744" -"_color" "1.000000 0.733333 0.733333" -} -{ -"_color" "1.000000 0.733333 0.733333" -"origin" "16 -1952 -744" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.255906 0.003937" -"classname" "light" -"origin" "-168 -1536 -728" -"light" "100" -} -{ -"_color" "1.000000 0.255906 0.003937" -"classname" "light" -"origin" "56 -288 -616" -"light" "100" -} -{ -"classname" "light" -"_color" "1.000000 0.255906 0.003937" -"origin" "-168 -1728 -728" -"light" "100" -} -{ -"_color" "1.000000 0.255906 0.003937" -"classname" "light" -"origin" "56 -288 -752" -"light" "100" -} -{ -"classname" "light" -"_color" "1.000000 0.255906 0.003937" -"origin" "-184 -488 -624" -"light" "100" -} -{ -"item" "ammo_bullets" -"spawnflags" "1" -"targetname" "t13" -"target" "t10" -"angle" "270" -"origin" "-474 -543 -928" -"classname" "monster_soldier_ss" -} -{ -"_color" "1.000000 0.733333 0.733333" -"origin" "416 -1184 -624" -"light" "225" -"classname" "light" -} -{ -"classname" "light" -"light" "225" -"origin" "416 -1248 -624" -"_color" "1.000000 0.733333 0.733333" -} -{ -"_color" "1.000000 0.733333 0.733333" -"origin" "-144 -1888 -744" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "-144 -1952 -744" -"_color" "1.000000 0.733333 0.733333" -} -{ -"_color" "1.000000 0.733333 0.733333" -"origin" "-928 -1184 -704" -"light" "225" -"classname" "light" -} -{ -"angle" "270" -"sounds" "1" -"classname" "target_splash" -"targetname" "gun3" -"origin" "-880 488 -564" -"spawnflags" "2048" -} -{ -"angle" "270" -"sounds" "1" -"classname" "target_splash" -"targetname" "gun2" -"origin" "-904 488 -564" -"spawnflags" "2048" -} -{ -"angle" "270" -"sounds" "1" -"classname" "target_splash" -"targetname" "gun1" -"origin" "-928 488 -564" -"spawnflags" "2048" -} -{ -"classname" "target_splash" -"sounds" "1" -"angle" "270" -"targetname" "gun4" -"origin" "-856 488 -564" -"spawnflags" "2048" -} -{ -"light" "200" -"classname" "light" -"origin" "88 -384 -528" -"_color" "1.000000 0.988189 0.724409" -} -{ -"light" "100" -"classname" "light" -"origin" "-216 -384 -528" -"_color" "1.000000 0.988189 0.724409" -} -{ -"item" "ammo_bullets" -"spawnflags" "1" -"targetname" "t13" -"target" "t12" -"classname" "monster_soldier_ss" -"origin" "-415 -535 -930" -"angle" "270" -} -{ -"origin" "-132 -1702 -914" -"_color" "1.000000 0.920949 0.343874" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-896 32 -380" -"classname" "light" -"light" "32" -} -{ -"model" "*121" -"spawnflags" "2048" -"delay" ".25" -"angle" "90" -"speed" "500" -"wait" ".25" -"lip" "6" -"classname" "func_door" -"targetname" "gun3" -"sounds" "2" -} -{ -"light" "150" -"classname" "light" -"origin" "-896 288 -416" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "100" -"classname" "light" -"origin" "88 -576 -528" -"_color" "1.000000 0.988189 0.724409" -} -{ -"origin" "-64 -1808 -971" -"_color" "1.000000 1.000000 1.000000" -"light" "200" -"classname" "light" -"target" "t127" -"_cone" "20" -} -{ -"origin" "-64 -1808 -975" -"_color" "1.000000 1.000000 1.000000" -"light" "90" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "-4 -1232 -912" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-132 -1232 -912" -"_color" "1.000000 0.875537 0.004292" -} -{ -"model" "*122" -"team" "B" -"lip" "8" -"wait" "4" -"sounds" "3" -"speed" "75" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*123" -"team" "B" -"classname" "func_door" -"angle" "0" -"speed" "75" -"wait" "4" -"lip" "8" -} -{ -"classname" "light" -"light" "100" -"origin" "300 -592 -848" -} -{ -"_color" "1.000000 0.920949 0.343874" -"light" "120" -"classname" "light" -"origin" "-64 -1824 -874" -} -{ -"light" "100" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "344 -1400 -914" -} -{ -"light" "150" -"classname" "light" -"_color" "1.000000 0.920949 0.343874" -"origin" "-64 -1528 -914" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.920900 0.343800" -"origin" "-64 -1936 -982" -} -{ -"style" "41" -"classname" "light" -"light" "300" -"origin" "200 0 -753" -"spawnflags" "1" -"targetname" "sdlight" -} -{ -"classname" "light" -"_color" "1.000000 0.259843 0.220472" -"origin" "-268 -1368 -1048" -"light" "100" -} -{ -"model" "*124" -"target" "t159" -"classname" "func_explosive" -"dmg" "15" -"health" "50" -"_minlight" "0.2" -"spawnflags" "2048" -} -{ -"model" "*125" -"Team" "door1" -"classname" "func_door" -"angle" "180" -"speed" "50" -"lip" "8" -} -{ -"classname" "light" -"light" "150" -"origin" "88 -1696 -648" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "light" -"light" "150" -"origin" "88 -1760 -648" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "info_player_coop" -"origin" "-8 -1702 -808" -"angle" "90" -"targetname" "city2NH" -} -{ -"_color" "1.000000 0.733333 0.733333" -"classname" "light" -"light" "150" -"origin" "-216 -1760 -648" -} -{ -"_color" "1.000000 0.733333 0.733333" -"classname" "light" -"light" "150" -"origin" "-216 -1696 -648" -} -{ -"model" "*126" -"spawnflags" "2048" -"wait" "-1" -"_minlight" "0.3" -"classname" "func_button" -"target" "droop_gate" -"angle" "270" -"lip" "3" -"sounds" "4" -} -{ -"model" "*127" -"spawnflags" "2048" -"classname" "func_door" -"angle" "-2" -"sounds" "1" -"speed" "75" -"wait" "-1" -"targetname" "droop_gate" -} -{ -"origin" "-552 -1216 -536" -"classname" "light" -"light" "150" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-736 -1216 -624" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-832 -1312 -624" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-640 -1136 -952" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-640 -1248 -952" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-624 -1408 -952" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-640 -1360 -952" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-544 -1600 -776" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-736 -1600 -712" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-832 -1504 -696" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "224 -1216 -536" -"classname" "light" -"light" "150" -} -{ -"light" "100" -"classname" "light" -"origin" "320 -1208 -584" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "64" -"classname" "light" -"origin" "320 -1336 -808" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"light" "80" -"classname" "light" -"origin" "368 -836 -536" -} -{ -"_color" "1.000000 0.948819 0.755906" -"origin" "-216 -16 -720" -"classname" "light" -"light" "100" -} -{ -"origin" "-64 152 -328" -"light" "150" -"classname" "light" -} -{ -"model" "*128" -"classname" "func_door" -"angle" "180" -"speed" "75" -"sounds" "3" -"wait" "4" -"lip" "8" -"team" "C" -} -{ -"model" "*129" -"lip" "8" -"wait" "4" -"speed" "75" -"angle" "0" -"classname" "func_door" -"team" "C" -} -{ -"light" "100" -"classname" "light" -"origin" "128 -384 -736" -"_color" "1.000000 0.948819 0.755906" -} -{ -"_cone" "25" -"target" "t273" -"_color" "1.000000 0.948819 0.755906" -"origin" "-260 -384 -740" -"classname" "light" -"light" "200" -} -{ -"_color" "1.000000 0.988189 0.724409" -"origin" "88 -192 -528" -"classname" "light" -"light" "200" -} -{ -"model" "*130" -"lip" "8" -"Team" "door4" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*131" -"lip" "8" -"Team" "door4" -"sounds" "3" -"angle" "90" -"classname" "func_door" -} -{ -"_color" "1.000000 0.988189 0.724409" -"origin" "-216 -192 -528" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-216 -576 -528" -"_color" "1.000000 0.988189 0.724409" -} -{ -"light" "100" -"classname" "light" -"origin" "-216 72 -720" -"_color" "1.000000 0.948819 0.755906" -} -{ -"light" "200" -"classname" "light" -"origin" "200 0 -536" -"_color" "1.000000 0.988189 0.724409" -} -{ -"light" "150" -"classname" "light" -"origin" "-416 -192 -536" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-608 -192 -432" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-608 384 -368" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-704 -96 -432" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-800 0 -400" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-640 -1008 -952" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "150" -"classname" "light" -"origin" "-448 -1504 -776" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-178 -1216 -912" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-124 -1016 -848" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "4 -1016 -848" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "320 -928 -816" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "88 -712 -828" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "8 -648 -828" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-144 -648 -832" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-448 -728 -828" -"classname" "light" -"light" "150" -} -{ -"model" "*132" -"spawnflags" "2054" -"classname" "func_wall" -"targetname" "redforfld" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-448 -1504 -824" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.875537 0.004292" -"origin" "-448 -1504 -776" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-800 384 -416" -"_color" "1.000000 0.875537 0.004292" -} -{ -"origin" "112 -1216 -640" -"classname" "light" -"light" "150" -"_color" "1.000000 0.875537 0.004292" -} -{ -"origin" "-240 -1216 -624" -"classname" "light" -"light" "150" -"_color" "1.000000 0.875537 0.004292" -} -{ -"origin" "-40 -784 -432" -"classname" "light" -"light" "200" -"_color" "1.000000 0.875537 0.004292" -} -{ -"origin" "96 -800 -536" -"classname" "light" -"light" "100" -"_color" "1.000000 0.875537 0.004292" -} -{ -"light" "200" -"classname" "light" -"origin" "-88 -784 -432" -"_color" "1.000000 0.875537 0.004292" -} -{ -"_color" "1.000000 1.000000 0.901961" -"light" "150" -"classname" "light" -"origin" "-64 -1432 -632" -} -{ -"light" "225" -"classname" "light" -"origin" "-352 -1216 -536" -"_color" "1.000000 0.875537 0.004292" -} -{ -"origin" "-96 -976 -488" -"light" "150" -"classname" "light" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-32 -976 -488" -"classname" "light" -"light" "150" -"_color" "0.756863 0.807843 1.000000" -} -{ -"light" "150" -"classname" "light" -"origin" "-64 -976 -560" -"_color" "0.756863 0.807843 1.000000" -} -{ -"classname" "light" -"light" "150" -"origin" "-96 -976 -600" -"_color" "0.756863 0.807843 1.000000" -} -{ -"spawnflags" "2048" -"classname" "light" -"light" "150" -"origin" "-32 -976 -600" -"_color" "0.756863 0.807843 1.000000" -} -{ -"light" "150" -"classname" "light" -"origin" "-64 -976 -640" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-96 -976 -680" -"light" "150" -"classname" "light" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-64 -976 -712" -"classname" "light" -"light" "150" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-32 -976 -680" -"light" "150" -"classname" "light" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-40 -1408 -544" -"light" "150" -"classname" "light" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-88 -1408 -544" -"classname" "light" -"light" "150" -"_color" "0.756863 0.807843 1.000000" -} -{ -"origin" "-96 -1408 -600" -"light" "200" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "-96 -976 -744" -"_color" "0.756863 0.807843 1.000000" -} -{ -"classname" "light" -"light" "150" -"origin" "-32 -976 -744" -"_color" "0.756863 0.807843 1.000000" -} -{ -"classname" "light" -"light" "150" -"origin" "-32 -1408 -488" -"_color" "0.756863 0.807843 1.000000" -} -{ -"light" "150" -"classname" "light" -"origin" "-96 -1408 -488" -"_color" "0.756863 0.807843 1.000000" -} -{ -"_color" "0.615686 0.615686 1.000000" -"classname" "light" -"light" "200" -"origin" "-64 256 80" -} -{ -"origin" "88 -1568 -648" -"light" "150" -"classname" "light" -"_color" "1.000000 0.733333 0.733333" -} -{ -"origin" "88 -1504 -648" -"light" "150" -"classname" "light" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "light" -"light" "225" -"origin" "-928 -1248 -704" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "light" -"light" "150" -"origin" "-216 -1568 -648" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "light" -"light" "150" -"origin" "-216 -1504 -648" -"_color" "1.000000 0.733333 0.733333" -} -{ -"classname" "target_blaster" -"angle" "270" -"targetname" "gun4" -"origin" "-856 488 -564" -"dmg" "15" -"spawnflags" "2048" -} -{ -"origin" "-928 488 -564" -"angle" "270" -"targetname" "gun1" -"classname" "target_blaster" -"dmg" "15" -"spawnflags" "2048" -} -{ -"angle" "270" -"origin" "-904 488 -564" -"targetname" "gun2" -"classname" "target_blaster" -"dmg" "15" -"spawnflags" "2048" -} -{ -"origin" "-880 488 -564" -"angle" "270" -"targetname" "gun3" -"classname" "target_blaster" -"dmg" "15" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "100" -"origin" "-832 528 -580" -} -{ -"model" "*133" -"classname" "func_door" -"lip" "6" -"wait" ".25" -"speed" "500" -"angle" "90" -"delay" ".25" -"targetname" "gun4" -"spawnflags" "2048" -"sounds" "2" -} -{ -"model" "*134" -"delay" ".25" -"angle" "90" -"speed" "500" -"wait" ".25" -"lip" "6" -"classname" "func_door" -"targetname" "gun2" -"spawnflags" "2048" -"sounds" "2" -} -{ -"model" "*135" -"delay" ".25" -"angle" "90" -"speed" "500" -"wait" ".25" -"lip" "6" -"classname" "func_door" -"targetname" "gun1" -"spawnflags" "2048" -"sounds" "2" -} -{ -"light" "100" -"classname" "light" -"origin" "-952 528 -580" -} -{ -"model" "*136" -"team" "traphider" -"sounds" "0" -"speed" "200" -"wait" "-1" -"angle" "180" -"classname" "func_door" -"lip" "8" -"targetname" "trap_gun" -"spawnflags" "2048" -} -{ -"model" "*137" -"team" "traphider" -"classname" "func_door" -"angle" "0" -"targetname" "trap_gun" -"wait" "-1" -"speed" "200" -"sounds" "2" -"lip" "8" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun1" -"delay" ".2" -"origin" "-776 400 -440" -"spawnflags" "2304" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun2" -"delay" ".4" -"origin" "-752 400 -440" -"spawnflags" "2304" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun3" -"delay" ".6" -"origin" "-728 400 -440" -"spawnflags" "2304" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun4" -"delay" ".8" -"origin" "-704 400 -440" -"spawnflags" "2304" -} -{ -"origin" "-64 408 96" -"_color" "1.000000 1.000000 0.874510" -"light" "80" -"classname" "light" -} -{ -"_cone" "20" -"classname" "light" -"light" "300" -"_color" "1.000000 1.000000 1.000000" -"origin" "-64 408 88" -"target" "t161" -} -{ -"classname" "info_notnull" -"origin" "-65 408 -104" -"targetname" "t161" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/city3@1de5.ent b/stuff/mapfixes/baseq2/city3@1de5.ent deleted file mode 100644 index a8a41f236..000000000 --- a/stuff/mapfixes/baseq2/city3@1de5.ent +++ /dev/null @@ -1,7243 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed 2x monster_chick not activating (5016, 5023) -// -// Their targetname, t125, was never triggered. Set it to t257 instead, -// which is activated by using the Data Spinner. Also set spawnflags of -// one of them from 2051 to 3, as the 2048 flag is unnecessary for monsters. -// -// 2. Removed DM-only items from SP/co-op -// -// A Grenade Launcher and Grenades (99, 104) are located in a room -// only accessible in DM. Set their spawnflags from 0 to 1792. -{ -"nextmap" "boss1" -"sky" "unit9_" -"sounds" "4" -"message" "Upper Palace" -"spawnflags" "0" -"classname" "worldspawn" -} -{ -"model" "*1" -"classname" "func_wall" -"spawnflags" "2048" -"_minlight" "0.2" -} -{ -"model" "*2" -"classname" "func_wall" -"_minlight" "0.8" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"spawnflags" "2052" -"targetname" "t304" -"noise" "world/x_alarm.wav" -"volume" "1.0" -"attenuation" "-1" -"origin" "-1568 -416 -1016" -} -{ -"spawnflags" "1792" -"classname" "misc_teleporter" -"angle" "135" -"target" "telly1" -"origin" "368 -336 220" -} -{ -"spawnflags" "1792" -"origin" "-408 -664 -88" -"targetname" "telly1" -"angle" "90" -"classname" "misc_teleporter_dest" -} -{ -"origin" "-56 -520 224" -"spawnflags" "2048" -"classname" "item_power_shield" -} -{ -"spawnflags" "2560" -"origin" "-208 -256 -408" -"classname" "item_health" -} -{ -"origin" "128 64 -96" -"spawnflags" "1792" -"classname" "weapon_railgun" -} -{ -"origin" "-608 -128 256" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-624 -448 224" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "247 544 236" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "295 544 236" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "343 544 236" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "199 544 252" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-414 436 242" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"spawnflags" "1792" -"origin" "-414 284 244" -"classname" "weapon_grenadelauncher" -} -{ -"model" "*3" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"origin" "584 520 82" -"angle" "-1" -"spawnflags" "2057" -"classname" "target_laser" -"target" "com8" -"targetname" "com7" -} -{ -"origin" "600 520 82" -"angle" "-1" -"spawnflags" "2057" -"classname" "target_laser" -"target" "com8" -"targetname" "com7" -} -{ -"origin" "600 504 82" -"angle" "-1" -"spawnflags" "2057" -"classname" "target_laser" -"target" "com8" -"targetname" "com7" -} -{ -"origin" "-120 -256 -408" -"classname" "item_silencer" -} -{ -"classname" "monster_gunner" -"angle" "0" -"spawnflags" "769" -"origin" "-168 -296 -400" -} -{ -"classname" "ammo_slugs" -"origin" "-208 -256 -360" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "48 -472 -104" -} -{ -"spawnflags" "1792" -"origin" "8 -472 -104" -"classname" "item_armor_shard" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "128 -472 -104" -} -{ -"spawnflags" "1792" -"origin" "88 -472 -104" -"classname" "item_armor_shard" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "208 -472 -104" -} -{ -"spawnflags" "1792" -"origin" "168 -472 -104" -"classname" "item_armor_shard" -} -{ -"spawnflags" "1792" -"origin" "-32 -472 -104" -"classname" "item_armor_shard" -} -{ -"origin" "312 -472 -104" -"classname" "item_health_large" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "184 -520 -552" -} -{ -"classname" "light" -"light" "64" -"origin" "-1651 -556 -1104" -} -{ -"origin" "-700 -470 -998" -"spawnflags" "259" -"classname" "monster_soldier_light" -"angle" "0" -"targetname" "pg1" -} -{ -"classname" "light" -"light" "32" -"origin" "488 1248 358" -"_color" "1.000000 0.292490 0.193676" -} -{ -"deathtarget" "t243" -"spawnflags" "257" -"origin" "128 -468 -540" -"angle" "180" -"classname" "monster_soldier" -"item" "ammo_shells" -} -{ -"classname" "monster_soldier_light" -"angle" "90" -"origin" "-606 -585 -87" -"spawnflags" "768" -} -{ -"classname" "monster_soldier_light" -"angle" "45" -"origin" "-486 -441 -87" -} -{ -"light" "32" -"classname" "light" -"origin" "-24 744 55" -} -{ -"light" "32" -"classname" "light" -"origin" "-24 616 55" -} -{ -"light" "32" -"classname" "light" -"origin" "40 744 55" -} -{ -"light" "32" -"classname" "light" -"origin" "40 680 55" -} -{ -"light" "32" -"classname" "light" -"origin" "40 616 55" -} -{ -"origin" "-88 744 55" -"classname" "light" -"light" "32" -} -{ -"origin" "-88 680 55" -"classname" "light" -"light" "32" -} -{ -"origin" "-88 616 55" -"classname" "light" -"light" "32" -} -{ -"origin" "40 536 23" -"classname" "light" -"light" "48" -} -{ -"light" "32" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "-64 -128 326" -} -{ -"light" "32" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "0 -128 326" -} -{ -"light" "32" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "64 -128 326" -} -{ -"light" "32" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "128 -128 326" -} -{ -"light" "32" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "192 -128 326" -} -{ -"light" "150" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "256 -128 294" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t303" -} -{ -"style" "2" -"classname" "func_areaportal" -"targetname" "t302" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t301" -} -{ -"model" "*4" -"classname" "func_door" -"angle" "180" -"team" "portal2" -"lip" "16" -"wait" "3" -"_minlight" "0.2" -"target" "t302" -"spawnflags" "8" -} -{ -"model" "*5" -"sounds" "3" -"classname" "func_door" -"angle" "0" -"team" "portal2" -"lip" "16" -"wait" "3" -"_minlight" "0.2" -"target" "t302" -"spawnflags" "8" -} -{ -"model" "*6" -"wait" "3" -"lip" "16" -"team" "p2" -"angle" "0" -"classname" "func_door" -"sounds" "3" -"_minlight" "0.2" -"target" "t301" -"spawnflags" "8" -} -{ -"model" "*7" -"wait" "3" -"lip" "16" -"team" "p2" -"angle" "180" -"classname" "func_door" -"_minlight" "0.2" -"target" "t301" -"spawnflags" "8" -} -{ -"model" "*8" -"classname" "func_door" -"spawnflags" "1" -"targetname" "left_elev" -"angle" "-2" -"sounds" "4" -"speed" "150" -"wait" "1.75" -} -{ -"model" "*9" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*10" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "trigger_relay" -"targetname" "pg1" -"killtarget" "yelmsg" -"spawnflags" "2048" -"origin" "948 1288 168" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "88 -568 -504" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "8 -568 -504" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "168 -568 -504" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-72 -568 -504" -} -{ -"origin" "16 -304 -648" -"noise" "world/pump1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "trigger_relay" -"killtarget" "bluemsg" -"targetname" "pg2" -"origin" "176 496 268" -} -{ -"model" "*11" -"message" "This force field is activated\nby the communication laser." -"classname" "trigger_multiple" -"targetname" "bluemsg" -"wait" "3" -"spawnflags" "2048" -} -{ -"model" "*12" -"classname" "trigger_multiple" -"targetname" "bluemsg" -"message" "This force field is activated\nby the communication laser." -"wait" "3" -"spawnflags" "2048" -} -{ -"model" "*13" -"classname" "trigger_multiple" -"message" "Security pass required\nto deactivate yellow force fields." -"targetname" "yelmsg" -"spawnflags" "2048" -"wait" "3" -} -{ -"model" "*14" -"classname" "trigger_multiple" -"targetname" "yelmsg" -"message" "Security pass required\nto deactivate yellow force fields." -"wait" "3" -"spawnflags" "2048" -} -{ -"origin" "-64 -552 -560" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"classname" "item_health_large" -"origin" "-24 -552 -560" -} -{ -"classname" "trigger_relay" -"targetname" "passmsg" -"message" "Security pass grants\naccess to\nforce field control chamber." -"origin" "-464 -240 -336" -} -{ -"model" "*15" -"classname" "trigger_multiple" -"target" "t281" -} -{ -"origin" "172 -168 -112" -"classname" "item_pack" -} -{ -"origin" "168 -376 -648" -"noise" "world/pump1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb11.wav" -"origin" "-40 80 -120" -} -{ -"targetname" "city3NH" -"origin" "-500 -902 -84" -"angle" "45" -"classname" "info_player_coop" -} -{ -"targetname" "city3NH" -"origin" "-400 -902 -84" -"angle" "135" -"classname" "info_player_coop" -} -{ -"targetname" "city3NH" -"classname" "info_player_coop" -"angle" "90" -"origin" "-492 -662 -88" -} -{ -"targetname" "city3NL" -"origin" "-112 -1188 -888" -"angle" "180" -"classname" "info_player_coop" -} -{ -"targetname" "city3NL" -"origin" "-168 -1224 -896" -"angle" "180" -"classname" "info_player_coop" -} -{ -"targetname" "city3NL" -"origin" "-224 -1216 -900" -"angle" "180" -"classname" "info_player_start" -} -{ -"model" "*16" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*17" -"classname" "func_wall" -"spawnflags" "3840" -} -{ -"origin" "176 680 -44" -"light" "150" -"spawnflags" "1792" -"classname" "light" -} -{ -"origin" "46 670 242" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-586 -588 -88" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"origin" "-576 384 232" -"spawnflags" "257" -"classname" "monster_floater" -} -{ -"origin" "-288 368 232" -"spawnflags" "257" -"classname" "monster_floater" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-72 -472 -104" -} -{ -"model" "*18" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "308 80 -96" -} -{ -"classname" "item_health" -"origin" "172 -80 -112" -} -{ -"angle" "270" -"classname" "monster_gunner" -"targetname" "bob" -"origin" "296 64 -92" -"item" "ammo_grenades" -} -{ -"item" "item_armor_shard" -"angle" "0" -"classname" "monster_gunner" -"targetname" "bob" -"origin" "168 64 -80" -} -{ -"classname" "path_corner" -"origin" "36 -448 -112" -"target" "t294" -"targetname" "t297" -"spawnflags" "2048" -} -{ -"origin" "-112 -444 -112" -"classname" "path_corner" -"targetname" "t294" -"target" "t295" -"spawnflags" "2048" -} -{ -"origin" "-116 -448 -112" -"classname" "path_corner" -"targetname" "t296" -"target" "t297" -"spawnflags" "2048" -} -{ -"origin" "-128 -300 -108" -"classname" "path_corner" -"targetname" "t295" -"target" "t296" -"spawnflags" "2048" -} -{ -"spawnflags" "1" -"angle" "0" -"classname" "monster_soldier" -"origin" "-124 -284 -96" -"target" "t295" -} -{ -"classname" "path_corner" -"origin" "276 -456 -112" -"targetname" "t290" -"target" "t291" -"spawnflags" "2048" -} -{ -"origin" "136 -468 -112" -"classname" "path_corner" -"target" "t290" -"targetname" "t293" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "300 -320 -108" -"targetname" "t291" -"target" "t292" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "280 -460 -112" -"targetname" "t292" -"target" "t293" -"spawnflags" "2048" -} -{ -"item" "ammo_shells" -"spawnflags" "1" -"angle" "0" -"classname" "monster_soldier" -"origin" "-40 -288 -96" -} -{ -"style" "4" -"targetname" "t289" -"classname" "func_areaportal" -} -{ -"model" "*19" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*20" -"target" "t289" -"spawnflags" "1792" -"lip" "8" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*21" -"classname" "func_door" -"angle" "-1" -"lip" "86" -"_minlight" "0.2" -"sounds" "1" -"speed" "100" -"targetname" "t149" -"wait" "2" -} -{ -"_color" "1.000000 0.940945 0.708661" -"origin" "-608 -624 -56" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.940945 0.708661" -"origin" "-304 -624 -56" -"light" "150" -"classname" "light" -} -{ -"origin" "-280 -284 -644" -"classname" "point_combat" -"spawnflags" "2048" -"targetname" "t287" -} -{ -"model" "*22" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*23" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*24" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*25" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*26" -"classname" "func_button" -"angle" "270" -"lip" "3" -"message" "Yellow Force Fields Deactivated." -"target" "t147" -"wait" "-1" -"_minlight" "0.8" -"spawnflags" "2048" -} -{ -"model" "*27" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*28" -"wait" "0.5" -"lip" "4" -"sounds" "4" -"spawnflags" "2048" -"angle" "180" -"_minlight" "0.8" -"classname" "func_button" -"target" "reddoor1" -} -{ -"model" "*29" -"spawnflags" "2048" -"_minlight" "0.1" -"classname" "func_wall" -} -{ -"model" "*30" -"classname" "func_wall" -"_minlight" "0.1" -"spawnflags" "2048" -} -{ -"model" "*31" -"wait" "0.5" -"classname" "func_button" -"_minlight" "0.8" -"angle" "180" -"spawnflags" "2048" -"sounds" "4" -"lip" "4" -"target" "reddoor2" -} -{ -"model" "*32" -"spawnflags" "2048" -"_minlight" "0.1" -"classname" "func_wall" -} -{ -"model" "*33" -"wait" "0.5" -"target" "reddoor2" -"lip" "4" -"sounds" "4" -"spawnflags" "2048" -"angle" "180" -"_minlight" "0.8" -"classname" "func_button" -} -{ -"model" "*34" -"wait" "0.5" -"classname" "func_button" -"_minlight" "0.8" -"angle" "0" -"spawnflags" "2048" -"sounds" "4" -"lip" "4" -"target" "t173" -} -{ -"model" "*35" -"classname" "func_wall" -"_minlight" "0.1" -"spawnflags" "2048" -} -{ -"targetname" "t286" -"origin" "-452 -296 -644" -"classname" "point_combat" -} -{ -"model" "*36" -"targetname" "t281" -"_minlight" "0.3" -"delay" ".25" -"wait" "4" -"lip" "20" -"speed" "225" -"angle" "-1" -"classname" "func_door" -"sounds" "4" -} -{ -"model" "*37" -"_minlight" "0.2" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"classname" "info_notnull" -"targetname" "t285" -"origin" "-336 36 -64" -} -{ -"style" "32" -"classname" "light" -"targetname" "com7" -"_color" "0.070866 0.444882 1.000000" -"origin" "592 512 80" -} -{ -"classname" "target_laser" -"spawnflags" "2057" -"angle" "-1" -"targetname" "com7" -"origin" "584 504 82" -"target" "com8" -} -{ -"model" "*38" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*39" -"origin" "592 512 320" -"classname" "func_rotating" -"spawnflags" "2049" -"speed" "50" -"targetname" "com2" -} -{ -"model" "*40" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*41" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "624 16 224" -} -{ -"model" "*42" -"classname" "func_wall" -"spawnflags" "2048" -"_minlight" "0.1" -} -{ -"model" "*43" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*44" -"classname" "func_wall" -"_minlight" "0.1" -"spawnflags" "1792" -} -{ -"model" "*45" -"classname" "func_button" -"angle" "90" -"lip" "4" -"_minlight" "0.6" -"spawnflags" "1792" -"target" "endplat" -} -{ -"model" "*46" -"classname" "trigger_once" -"target" "t275" -} -{ -"model" "*47" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "32 -368 -632" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"classname" "weapon_hyperblaster" -"spawnflags" "1792" -"origin" "-448 68 408" -} -{ -"origin" "-456 696 112" -"classname" "light" -"light" "120" -} -{ -"model" "*48" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-448 -1152 -728" -"targetname" "farend" -"angle" "0" -"classname" "misc_teleporter_dest" -} -{ -"origin" "-488 -1128 -664" -"light" "32" -"classname" "light" -} -{ -"origin" "-472 -1192 -664" -"light" "32" -"classname" "light" -} -{ -"origin" "-488 -1176 -664" -"light" "32" -"classname" "light" -} -{ -"origin" "-472 -1112 -664" -"light" "32" -"classname" "light" -} -{ -"model" "*49" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*50" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-376 -296 -760" -"spawnflags" "1792" -"classname" "item_power_shield" -"team" "shield" -} -{ -"origin" "-376 -296 -760" -"spawnflags" "1792" -"team" "shield" -"classname" "ammo_cells" -} -{ -"model" "*51" -"spawnflags" "1792" -"wait" "2" -"angle" "0" -"health" "2" -"classname" "func_door" -} -{ -"model" "*52" -"targetname" "t56" -"dmg" "1" -"classname" "func_explosive" -} -{ -"spawnflags" "1792" -"origin" "-504 -172 -968" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_grenades" -"origin" "-602 -164 -404" -"spawnflags" "0" -} -{ -"origin" "-312 32 -408" -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -} -{ -"origin" "-312 -24 -408" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"target" "bfgtpd" -"origin" "-216 16 -400" -"angle" "225" -"spawnflags" "1792" -"classname" "misc_teleporter" -} -{ -"model" "*53" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*54" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"origin" "696 896 80" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"targetname" "bfgtpd" -"origin" "-616 440 -104" -"spawnflags" "1792" -"angle" "315" -"classname" "misc_teleporter_dest" -} -{ -"origin" "912 1512 144" -"light" "64" -"classname" "light" -} -{ -"model" "*55" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*56" -"classname" "func_door_secret" -"spawnflags" "3" -"wait" "5" -"angle" "0" -"_minlight" "0.1" -} -{ -"team" "green" -"origin" "200 1496 312" -"spawnflags" "1792" -"classname" "item_power_shield" -} -{ -"origin" "336 1616 512" -"classname" "item_health_large" -"spawnflags" "3072" -} -{ -"target" "farend" -"origin" "592 512 216" -"spawnflags" "1792" -"angle" "90" -"classname" "misc_teleporter" -} -{ -"origin" "-628 244 -20" -"angles" "-45 45 0" -"classname" "info_player_intermission" -} -{ -"targetname" "t284" -"classname" "misc_teleporter_dest" -"angle" "90" -"origin" "-328 88 408" -"spawnflags" "1792" -} -{ -"model" "*57" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"target" "t284" -"classname" "misc_teleporter" -"spawnflags" "1792" -"origin" "-48 -32 -632" -} -{ -"model" "*58" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"origin" "216 552 311" -"classname" "light" -"light" "32" -} -{ -"origin" "296 472 311" -"classname" "light" -"light" "32" -} -{ -"origin" "216 472 311" -"classname" "light" -"light" "32" -} -{ -"origin" "296 552 311" -"light" "32" -"classname" "light" -} -{ -"origin" "360 1384 264" -"target" "t2" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*59" -"_minlight" "0.1" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "item_health" -"spawnflags" "1792" -"origin" "167 -169 215" -} -{ -"classname" "item_armor_combat" -"spawnflags" "1792" -"origin" "324 101 215" -} -{ -"spawnflags" "1792" -"classname" "item_health" -"origin" "119 -168 215" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "617 167 224" -} -{ -"origin" "480 1216 320" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "528 1216 320" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "528 1216 272" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"classname" "item_health_large" -"origin" "-144 1280 240" -} -{ -"model" "*60" -"angle" "-2" -"classname" "func_door" -"speed" "25" -"sounds" "1" -"spawnflags" "1824" -"targetname" "t282" -"_minlight" "0.3" -} -{ -"spawnflags" "1792" -"classname" "weapon_railgun" -"origin" "544 928 208" -} -{ -"classname" "item_armor_body" -"spawnflags" "1792" -"origin" "152 680 -80" -} -{ -"model" "*61" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*62" -"spawnflags" "1792" -"lip" "8" -"classname" "func_door" -"angle" "-1" -"wait" "5" -"speed" "200" -"sounds" "0" -"team" "door8" -"targetname" "t283" -"health" "5" -} -{ -"model" "*63" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "item_armor_jacket" -"spawnflags" "1792" -"origin" "-456 96 12" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "660 440 176" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "696 556 176" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "644 612 176" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "528 608 176" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "508 516 208" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "508 444 176" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "592 392 176" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-330 -592 -88" -} -{ -"light" "48" -"classname" "light" -"origin" "40 472 23" -} -{ -"light" "48" -"classname" "light" -"origin" "88 472 23" -} -{ -"light" "48" -"classname" "light" -"origin" "88 536 23" -} -{ -"light" "48" -"classname" "light" -"origin" "-8 536 23" -} -{ -"light" "48" -"classname" "light" -"origin" "-56 536 23" -} -{ -"classname" "light" -"light" "48" -"origin" "-8 472 23" -} -{ -"origin" "8 768 -112" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-32 768 -112" -"classname" "ammo_cells" -"spawnflags" "2048" -} -{ -"classname" "ammo_cells" -"origin" "-456 584 160" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-336 664 160" -} -{ -"classname" "ammo_bullets" -"origin" "-120 -400 216" -} -{ -"spawnflags" "2048" -"origin" "-1256 -392 -1072" -"classname" "item_armor_body" -} -{ -"classname" "item_health_small" -"origin" "-720 -560 -1000" -} -{ -"classname" "item_health_small" -"origin" "-800 -560 -1000" -} -{ -"classname" "item_health_small" -"origin" "-760 -560 -1000" -} -{ -"classname" "item_health_small" -"origin" "-680 -560 -1000" -} -{ -"origin" "-208 -464 -624" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"classname" "ammo_shells" -"origin" "-184 -424 -624" -} -{ -"spawnflags" "2048" -"classname" "ammo_slugs" -"origin" "-312 -1252 -732" -} -{ -"classname" "weapon_supershotgun" -"spawnflags" "1792" -"origin" "-368 -1256 -728" -} -{ -"spawnflags" "1792" -"classname" "weapon_machinegun" -"origin" "-432 -144 -784" -} -{ -"spawnflags" "2048" -"origin" "-504 -172 -984" -"classname" "ammo_grenades" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "-1376 -432 -1200" -} -{ -"origin" "-1376 -392 -1224" -"classname" "item_adrenaline" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"origin" "-602 -204 -364" -"classname" "ammo_cells" -} -{ -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -"origin" "-448 -148 -368" -} -{ -"spawnflags" "2048" -"classname" "key_pass" -"origin" "-448 -116 -344" -"target" "passmsg" -} -{ -"classname" "ammo_bullets" -"origin" "-320 -104 -408" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "0 -272 -408" -} -{ -"classname" "ammo_shells" -"spawnflags" "1024" -"origin" "48 -272 -408" -} -{ -"classname" "weapon_supershotgun" -"spawnflags" "1792" -"origin" "0 -298 -104" -} -{ -"classname" "ammo_slugs" -"origin" "184 -536 216" -} -{ -"spawnflags" "2048" -"origin" "212 -496 216" -"classname" "item_invulnerability" -} -{ -"team" "ammo2" -"classname" "ammo_rockets" -"origin" "-716 -250 -598" -"spawnflags" "1792" -} -{ -"team" "ammo2" -"classname" "ammo_cells" -"origin" "-715 -292 -598" -"spawnflags" "1792" -} -{ -"classname" "ammo_bullets" -"origin" "-716 -250 -638" -"spawnflags" "2048" -} -{ -"classname" "ammo_bullets" -"origin" "-715 -292 -638" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"origin" "-296 28 -48" -"classname" "ammo_slugs" -} -{ -"spawnflags" "2048" -"origin" "-372 32 -48" -"classname" "ammo_cells" -} -{ -"spawnflags" "2048" -"origin" "-332 40 -48" -"classname" "item_adrenaline" -} -{ -"classname" "weapon_machinegun" -"origin" "-464 156 -110" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-280 512 -40" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-232 512 -40" -} -{ -"classname" "weapon_bfg" -"spawnflags" "1792" -"origin" "912 1512 112" -} -{ -"spawnflags" "1792" -"classname" "item_health_large" -"origin" "872 1408 80" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "992 1056 88" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-608 176 -104" -} -{ -"spawnflags" "2048" -"classname" "item_quad" -"origin" "-280 600 -200" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "-16 -168 -112" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-1489 -368 -1119" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "-320 -1024 -744" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "-112 -352 224" -} -{ -"light" "48" -"_color" "1.000000 0.796078 0.003922" -"classname" "light" -"origin" "592 248 342" -} -{ -"light" "48" -"_color" "1.000000 0.796078 0.003922" -"classname" "light" -"origin" "592 208 342" -} -{ -"classname" "light" -"_color" "1.000000 0.796078 0.003922" -"light" "100" -"origin" "592 160 334" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "528 1000 200" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "520 1272 280" -} -{ -"model" "*64" -"classname" "func_wall" -"spawnflags" "1792" -"_color" "1.000000 0.796078 0.003922" -} -{ -"classname" "light" -"light" "32" -"origin" "-24 856 351" -} -{ -"light" "32" -"classname" "light" -"origin" "24 792 351" -} -{ -"classname" "light" -"light" "32" -"origin" "-24 792 351" -} -{ -"light" "32" -"classname" "light" -"origin" "24 728 351" -} -{ -"classname" "light" -"light" "32" -"origin" "-24 728 351" -} -{ -"light" "32" -"classname" "light" -"origin" "24 664 351" -} -{ -"classname" "light" -"light" "32" -"origin" "-24 664 351" -} -{ -"light" "32" -"classname" "light" -"origin" "24 600 351" -} -{ -"classname" "light" -"light" "32" -"origin" "-24 600 351" -} -{ -"light" "100" -"classname" "light" -"_color" "1.000000 0.796078 0.003922" -"origin" "0 904 327" -} -{ -"classname" "light" -"light" "32" -"origin" "24 856 351" -} -{ -"light" "32" -"classname" "light" -"origin" "-24 472 311" -} -{ -"classname" "light" -"light" "32" -"origin" "-24 552 311" -} -{ -"light" "32" -"classname" "light" -"origin" "-104 472 311" -} -{ -"classname" "light" -"light" "32" -"origin" "-104 552 311" -} -{ -"light" "32" -"classname" "light" -"origin" "56 552 311" -} -{ -"classname" "light" -"light" "32" -"origin" "56 472 311" -} -{ -"classname" "info_player_deathmatch" -"origin" "-344 624 160" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "-240 40 -48" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-80 488 248" -} -{ -"light" "48" -"classname" "light" -"origin" "-408 -592 -609" -} -{ -"classname" "light" -"light" "48" -"origin" "-488 -592 -609" -} -{ -"light" "48" -"classname" "light" -"origin" "-392 -968 -633" -} -{ -"light" "48" -"classname" "light" -"origin" "-392 -904 -633" -} -{ -"light" "48" -"classname" "light" -"origin" "-504 -904 -633" -} -{ -"classname" "light" -"light" "48" -"origin" "-504 -968 -633" -} -{ -"team" "green" -"spawnflags" "1792" -"origin" "200 1496 288" -"classname" "item_invulnerability" -} -{ -"origin" "120 1496 264" -"target" "t282" -"spawnflags" "1793" -"wait" "5" -"classname" "func_timer" -} -{ -"origin" "-448 -556 -1004" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-204 -368 -632" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-576 76 408" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "36 -380 -400" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "824 408 296" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"model" "*65" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "520 772 88" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-56 760 -104" -"angle" "315" -"classname" "info_player_deathmatch" -} -{ -"origin" "-448 -384 -88" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-456 -432 216" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "0 312 -208" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-440 -1040 -848" -"spawnflags" "1792" -"team" "qbest" -"classname" "item_quad" -} -{ -"_color" "0.003937 0.476378 1.000000" -"origin" "-696 -272 -554" -"light" "64" -"classname" "light" -} -{ -"model" "*66" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*67" -"target" "t281" -"delay" "0.5" -"classname" "trigger_multiple" -"wait" "15" -} -{ -"model" "*68" -"target" "t281" -"classname" "trigger_multiple" -} -{ -"model" "*69" -"spawnflags" "1792" -"target" "t280" -"wait" "1" -"classname" "func_button" -"angle" "-1" -"lip" "4" -"health" "5" -} -{ -"model" "*70" -"targetname" "t280" -"spawnflags" "1792" -"classname" "func_door" -"angle" "180" -"wait" "5" -"_minlight" "0.2" -"sounds" "3" -} -{ -"model" "*71" -"health" "5" -"classname" "func_door" -"angle" "-1" -"wait" "5" -"sounds" "2" -"spawnflags" "1792" -} -{ -"origin" "600 664 312" -"targetname" "t145" -"killtarget" "block" -"classname" "trigger_relay" -} -{ -"model" "*72" -"targetname" "block" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"light" "64" -"classname" "light" -"origin" "432 1255 304" -} -{ -"spawnflags" "2048" -"light" "48" -"classname" "light" -"origin" "480 1287 304" -} -{ -"origin" "528 1255 304" -"classname" "light" -"light" "64" -} -{ -"model" "*73" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*74" -"spawnflags" "2048" -"_minlight" "0.8" -"classname" "func_wall" -} -{ -"model" "*75" -"_minlight" "0.2" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-812 -536 -1004" -"target" "steps" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*76" -"spawnflags" "2048" -"_minlight" "0.1" -"classname" "func_wall" -} -{ -"origin" "-436 -1044 -848" -"classname" "light" -"light" "80" -} -{ -"origin" "-352 -1044 -848" -"light" "80" -"classname" "light" -} -{ -"model" "*77" -"health" "5" -"wait" "6" -"sounds" "3" -"spawnflags" "1792" -"angle" "-2" -"classname" "func_door" -"_minlight" "0.1" -} -{ -"model" "*78" -"health" "5" -"_minlight" "0.1" -"angle" "-1" -"spawnflags" "1792" -"classname" "func_door" -} -{ -"origin" "-424 -184 -376" -"target" "t80" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"targetname" "t162" -"origin" "-447 -956 52" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" -"classname" "target_speaker" -} -{ -"origin" "-448 -344 -24" -"noise" "world/amb14.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-560 32 280" -"noise" "world/amb2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-640 -464 248" -"noise" "world/amb2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb2.wav" -"origin" "-560 32 -8" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb11.wav" -"origin" "-448 -336 248" -} -{ -"noise" "World/amb15.wav" -"targetname" "pg2" -"classname" "target_speaker" -"spawnflags" "2049" -"origin" "664 504 232" -} -{ -"noise" "World/amb15.wav" -"targetname" "pg2" -"classname" "target_speaker" -"spawnflags" "2049" -"origin" "536 520 232" -} -{ -"noise" "World/amb15.wav" -"targetname" "pg2" -"classname" "target_speaker" -"spawnflags" "2049" -"origin" "600 568 232" -} -{ -"noise" "World/amb15.wav" -"targetname" "pg2" -"origin" "584 456 232" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"targetname" "t279" -"origin" "-576 56 424" -"classname" "target_explosion" -"dmg" "1" -"spawnflags" "2048" -} -{ -"wait" "5" -"origin" "-352 56 424" -"target" "t279" -"spawnflags" "2049" -"classname" "func_timer" -} -{ -"origin" "-328 56 424" -"targetname" "t279" -"dmg" "1" -"classname" "target_explosion" -"spawnflags" "2048" -} -{ -"origin" "-376 136 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-520 136 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-648 136 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-648 248 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-648 360 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-648 472 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-520 472 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-376 472 -120" -"classname" "light" -"light" "64" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-248 472 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-248 360 -120" -"classname" "light" -"light" "48" -"_color" "1.000000 0.796078 0.003922" -} -{ -"origin" "-248 136 -120" -"_color" "1.000000 0.796078 0.003922" -"light" "48" -"classname" "light" -} -{ -"origin" "-352 584 176" -"spawnflags" "2048" -"targetname" "t278" -"classname" "target_secret" -} -{ -"model" "*79" -"spawnflags" "2048" -"message" "You have found a secret area." -"target" "t278" -"classname" "trigger_once" -} -{ -"origin" "592 848 240" -"targetname" "pg2" -"spawnflags" "2052" -"attenuation" "-1" -"noise" "world/comlas1.wav" -"classname" "target_speaker" -} -{ -"origin" "544 1004 221" -"light" "64" -"classname" "light" -} -{ -"spawnflags" "2048" -"origin" "520 956 221" -"light" "200" -"classname" "light" -} -{ -"classname" "target_speaker" -"noise" "world/yelforce.wav" -"attenuation" "-1" -"spawnflags" "2052" -"origin" "920 1344 160" -"targetname" "t147" -} -{ -"classname" "light" -"light" "200" -"origin" "-336 40 40" -"target" "t285" -} -{ -"model" "*80" -"spawnflags" "2048" -"target" "t226" -"classname" "trigger_once" -} -{ -"spawnflags" "2048" -"origin" "-326 -230 243" -"targetname" "t277" -"classname" "point_combat" -} -{ -"origin" "-127 -146 223" -"target" "t277" -"targetname" "t276" -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -} -{ -"spawnflags" "257" -"targetname" "t171" -"angle" "270" -"origin" "-103 -103 223" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "769" -"targetname" "t171" -"angle" "180" -"origin" "-149 -104 223" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "1" -"targetname" "t171" -"angle" "270" -"origin" "-77 -143 223" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "257" -"targetname" "gunguy" -"origin" "592 280 224" -"classname" "monster_gunner" -} -{ -"spawnflags" "2048" -"origin" "664 600 168" -"target" "t273" -"targetname" "t272" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "528 616 168" -"target" "t272" -"targetname" "t271" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "496 512 184" -"wait" "3" -"target" "t271" -"targetname" "t270" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "528 408 168" -"target" "t270" -"targetname" "t269" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "648 400 168" -"target" "t269" -"targetname" "t268" -"classname" "path_corner" -} -{ -"spawnflags" "2048" -"origin" "704 512 168" -"wait" "3" -"targetname" "t273" -"target" "t268" -"classname" "path_corner" -} -{ -"origin" "584 384 200" -"target" "t269" -"classname" "monster_gunner" -} -{ -"model" "*81" -"spawnflags" "2048" -"sounds" "3" -"targetname" "t267" -"_minlight" "0.2" -"wait" "-1" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*82" -"spawnflags" "2048" -"target" "t267" -"health" "5" -"lip" "4" -"angle" "-1" -"classname" "func_button" -"wait" "-1" -} -{ -"classname" "item_health" -"spawnflags" "1024" -"origin" "-408 768 -216" -} -{ -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -"origin" "336 1616 496" -} -{ -"spawnflags" "1792" -"classname" "weapon_machinegun" -"origin" "432 1216 320" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "480 1216 272" -} -{ -"light" "200" -"classname" "light" -"_color" "1.000000 0.937255 0.705882" -"origin" "-644 -468 248" -} -{ -"classname" "light" -"light" "200" -"_color" "1.000000 0.937255 0.705882" -"origin" "-244 -468 248" -} -{ -"model" "*83" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "148" -} -{ -"classname" "point_combat" -"targetname" "t266" -"origin" "-428 -296 -644" -} -{ -"target" "t286" -"classname" "monster_soldier_ss" -"spawnflags" "1" -"origin" "-584 -288 -628" -"angle" "0" -"targetname" "t29" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"targetname" "t239" -"target" "t265" -"origin" "-176 -336 -648" -} -{ -"spawnflags" "2048" -"classname" "point_combat" -"targetname" "t264" -"origin" "-186 -294 -648" -"target" "t287" -} -{ -"model" "*84" -"classname" "func_button" -"angle" "0" -"sounds" "4" -"target" "left_elev" -"delay" "1.5" -} -{ -"model" "*85" -"_minlight" "0.3" -"classname" "func_button" -"angle" "0" -"lip" "2" -"target" "left_elev" -"sounds" "4" -} -{ -"origin" "12 1244 240" -"classname" "info_null" -"targetname" "t263" -} -{ -"_color" "1.000000 0.388235 0.239216" -"origin" "304 1240 344" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.388235 0.239216" -"origin" "176 1240 344" -"classname" "light" -"light" "80" -} -{ -"classname" "info_null" -"targetname" "t259" -"origin" "268 1244 268" -} -{ -"origin" "-64 1056 232" -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "light" -"_cone" "10" -"origin" "140 1244 468" -"target" "t261" -"light" "250" -} -{ -"origin" "460 1244 468" -"_cone" "25" -"classname" "light" -} -{ -"origin" "396 1244 468" -"_cone" "25" -"classname" "light" -} -{ -"origin" "268 1244 468" -"_cone" "10" -"classname" "light" -"target" "t259" -"light" "250" -} -{ -"origin" "12 1244 468" -"_cone" "10" -"classname" "light" -"target" "t263" -"light" "250" -} -{ -"spawnflags" "2048" -"origin" "480 1303 264" -"classname" "light" -"light" "48" -} -{ -"model" "*86" -"classname" "trigger_once" -"spawnflags" "2052" -"target" "pg2" -"targetname" "t257" -} -{ -"spawnflags" "2048" -"classname" "target_help" -"message" "Locate and use exit\n from Palace." -"targetname" "pg2" -"origin" "588 1000 200" -} -{ -"model" "*87" -"spawnflags" "2048" -"lip" "16" -"wait" "-1" -"angle" "90" -"classname" "func_button" -"target" "t1" -} -{ -"model" "*88" -"classname" "func_wall" -"spawnflags" "2055" -"targetname" "t250" -} -{ -"spawnflags" "2048" -"origin" "-416 -1064 -744" -"classname" "trigger_relay" -"targetname" "t32" -"target" "BobnFred" -} -{ -"spawnflags" "2048" -"classname" "point_combat" -"targetname" "t253" -"origin" "-352 -1280 -744" -} -{ -"spawnflags" "2048" -"classname" "point_combat" -"targetname" "t254" -"origin" "-336 -1232 -744" -} -{ -"model" "*89" -"targetname" "t80" -"speed" "10" -"spawnflags" "2" -"classname" "func_train" -"target" "t252" -} -{ -"origin" "-488 -152 -424" -"targetname" "t252" -"target" "t251" -"classname" "path_corner" -} -{ -"wait" "-1" -"origin" "-488 -168 -424" -"target" "t252" -"targetname" "t251" -"classname" "path_corner" -} -{ -"model" "*90" -"spawnflags" "2048" -"targetname" "t250" -"dmg" "10" -"classname" "func_explosive" -"_minlight" "0.1" -} -{ -"model" "*91" -"spawnflags" "2048" -"target" "t250" -"health" "40" -"dmg" "50" -"classname" "func_explosive" -"_minlight" "0.1" -} -{ -"spawnflags" "2048" -"classname" "target_secret" -"targetname" "t249" -"origin" "-1379 -632 -1144" -} -{ -"model" "*92" -"spawnflags" "2048" -"classname" "trigger_once" -"message" "You have found a secret area." -"target" "t249" -} -{ -"targetname" "pg2" -"origin" "-128 1256 312" -"noise" "world/klaxon2.wav" -"volume" "7" -"spawnflags" "2050" -"classname" "target_speaker" -} -{ -"targetname" "pg2" -"origin" "-32 648 304" -"classname" "target_speaker" -"spawnflags" "2050" -"volume" "7" -"noise" "world/klaxon2.wav" -} -{ -"origin" "-432 240 128" -"volume" ".7" -"noise" "world/battle5.wav" -"attenuation" "1" -"targetname" "t248" -"classname" "target_speaker" -} -{ -"origin" "-432 264 128" -"random" "10" -"wait" "20" -"target" "t248" -"classname" "func_timer" -} -{ -"origin" "-304 232 -96" -"volume" ".4" -"attenuation" "1" -"noise" "world/battle5.wav" -"targetname" "t247" -"classname" "target_speaker" -} -{ -"origin" "-304 256 -96" -"wait" "15" -"random" "5" -"target" "t247" -"classname" "func_timer" -} -{ -"origin" "-440 704 -192" -"targetname" "t246" -"classname" "target_secret" -"spawnflags" "2048" -} -{ -"model" "*93" -"message" "You have found a secret area." -"target" "t246" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"model" "*94" -"spawnflags" "1024" -"classname" "func_wall" -} -{ -"origin" "-280 512 -8" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-232 512 -8" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-688 184 -40" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "720 384 72" -} -{ -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -"origin" "648 456 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "672 432 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "696 408 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "464 384 72" -} -{ -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -"origin" "536 456 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "512 432 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "488 408 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "648 568 72" -} -{ -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -"origin" "720 640 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "696 616 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "672 592 72" -} -{ -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -"origin" "592 696 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "592 664 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "592 632 72" -} -{ -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -"origin" "592 600 72" -} -{ -"origin" "592 424 72" -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -} -{ -"origin" "592 392 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "592 360 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "592 328 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "680 512 72" -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -} -{ -"origin" "712 512 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "744 512 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "776 512 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"origin" "488 616 72" -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -} -{ -"origin" "512 592 72" -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -} -{ -"origin" "536 568 72" -"classname" "light" -"light" "32" -"_color" "0.284585 0.608696 1.000000" -} -{ -"origin" "464 640 72" -"_color" "0.284585 0.608696 1.000000" -"light" "32" -"classname" "light" -} -{ -"model" "*95" -"spawnflags" "2048" -"_minlight" ".6" -"targetname" "t80" -"sounds" "2" -"wait" "-1" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-448 -116 -388" -"targetname" "t244" -"classname" "info_notnull" -} -{ -"style" "33" -"origin" "-448 -116 -300" -"_cone" "30" -"light" "200" -"targetname" "t245" -"target" "t244" -"classname" "light" -} -{ -"origin" "-664 -296 -616" -"delay" "5" -"target" "t243" -"targetname" "t49" -"classname" "trigger_relay" -} -{ -"model" "*96" -"spawnflags" "2304" -"classname" "trigger_once" -"target" "t242" -"delay" "2" -} -{ -"model" "*97" -"spawnflags" "2048" -"target" "t239" -"classname" "trigger_once" -} -{ -"item" "item_armor_shard" -"origin" "-560 -216 -392" -"targetname" "t239" -"spawnflags" "1" -"angle" "225" -"classname" "monster_gunner" -} -{ -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -"origin" "-42 278 -212" -} -{ -"classname" "monster_gunner" -"angle" "90" -"spawnflags" "257" -"origin" "-428 286 -134" -} -{ -"classname" "target_secret" -"targetname" "t236" -"origin" "28 -500 220" -"spawnflags" "2048" -} -{ -"model" "*98" -"classname" "trigger_once" -"target" "t236" -"message" "You have found a secret area." -"spawnflags" "2048" -} -{ -"classname" "info_notnull" -"targetname" "t234" -"origin" "212 -496 244" -} -{ -"style" "34" -"classname" "light" -"target" "t234" -"light" "200" -"_cone" "30" -"targetname" "t235" -"origin" "212 -496 284" -} -{ -"classname" "weapon_railgun" -"origin" "212 -496 256" -"spawnflags" "1792" -"team" "tm1" -} -{ -"light" "150" -"classname" "light" -"origin" "148 -496 244" -} -{ -"classname" "light" -"light" "64" -"origin" "100 -504 228" -} -{ -"model" "*99" -"sounds" "2" -"team" "grate" -"angle" "270" -"classname" "func_door" -"lip" "4" -} -{ -"model" "*100" -"team" "grate" -"angle" "90" -"classname" "func_door" -"lip" "4" -} -{ -"model" "*101" -"spawnflags" "2048" -"targetname" "t243" -"classname" "func_explosive" -"mass" "700" -"dmg" "1" -} -{ -"target" "t51" -"spawnflags" "1" -"classname" "monster_chick" -"angle" "0" -"origin" "-200 -128 -616" -"targetname" "t265" -} -{ -"targetname" "t239" -"origin" "-180 -376 -632" -"classname" "monster_gunner" -"angle" "90" -"spawnflags" "1" -"target" "t264" -} -{ -"classname" "ammo_bullets" -"origin" "-498 -220 -968" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "item_adrenaline" -"origin" "-440 -1040 -896" -} -{ -"classname" "point_combat" -"targetname" "t26" -"target" "t233" -"origin" "-328 -1256 -872" -} -{ -"model" "*102" -"targetname" "t29" -"classname" "func_door" -"angle" "-2" -"spawnflags" "2048" -"sounds" "3" -"wait" "-1" -"_minlight" "0.1" -} -{ -"classname" "item_health_small" -"origin" "-460 -1284 -864" -} -{ -"classname" "item_health_small" -"origin" "-508 -1284 -848" -} -{ -"classname" "item_health_small" -"origin" "-548 -1284 -832" -} -{ -"classname" "item_health_small" -"origin" "-588 -1284 -824" -} -{ -"model" "*103" -"spawnflags" "2048" -"target" "t121" -"classname" "trigger_once" -} -{ -"targetname" "t121" -"origin" "-256 704 -104" -"angle" "270" -"spawnflags" "1" -"classname" "monster_soldier" -} -{ -"targetname" "t121" -"origin" "-240 648 -104" -"angle" "270" -"spawnflags" "1" -"classname" "monster_soldier" -} -{ -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -"origin" "-1376 -392 -1200" -} -{ -"_color" "0.567460 1.000000 0.250000" -"light" "100" -"classname" "light" -"origin" "-1264 -376 -1224" -} -{ -"_color" "0.567460 1.000000 0.250000" -"light" "100" -"classname" "light" -"origin" "-1176 -352 -1224" -} -{ -"classname" "light" -"light" "100" -"_color" "0.567460 1.000000 0.250000" -"origin" "-1112 -352 -1224" -} -{ -"classname" "light" -"light" "100" -"_color" "0.567460 1.000000 0.250000" -"origin" "-1336 -376 -1224" -} -{ -"classname" "target_laser" -"angle" "-1" -"spawnflags" "81" -"origin" "-1183 -547 -1060" -} -{ -"classname" "item_armor_combat" -"origin" "-1304 -392 -1072" -"spawnflags" "1792" -"team" "head" -} -{ -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "200 1480 224" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -"origin" "-220 1338 232" -} -{ -"spawnflags" "2048" -"origin" "648 736 264" -"targetname" "pg2" -"classname" "target_goal" -} -{ -"spawnflags" "2048" -"origin" "692 716 256" -"targetname" "t162" -"classname" "target_goal" -} -{ -"spawnflags" "1" -"targetname" "pg2" -"classname" "target_speaker" -"origin" "588 480 80" -"noise" "world/pump2.wav" -} -{ -"spawnflags" "2049" -"targetname" "com2" -"noise" "world/pump2.wav" -"origin" "584 528 80" -"classname" "target_speaker" -} -{ -"origin" "912 1440 120" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -} -{ -"style" "5" -"targetname" "t230" -"classname" "func_areaportal" -} -{ -"origin" "-404 -176 -408" -"classname" "item_health" -} -{ -"deathtarget" "gunguy" -"origin" "496 48 224" -"spawnflags" "257" -"angle" "180" -"classname" "monster_chick" -} -{ -"origin" "163 -273 -161" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/pump1.wav" -} -{ -"origin" "99 -273 95" -"noise" "world/pump1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"model" "*104" -"sounds" "3" -"spawnflags" "8" -"classname" "func_door" -"angle" "270" -"team" "portal2" -"lip" "16" -"wait" "4" -"_minlight" "0.2" -} -{ -"model" "*105" -"spawnflags" "8" -"target" "t230" -"classname" "func_door" -"angle" "90" -"team" "portal2" -"lip" "16" -"wait" "4" -"_minlight" "0.2" -} -{ -"classname" "ammo_bullets" -"origin" "848 448 80" -} -{ -"classname" "ammo_bullets" -"origin" "816 384 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/pump1.wav" -"origin" "-452 -732 -744" -} -{ -"origin" "-456 -1056 -752" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/pump2.wav" -} -{ -"origin" "-452 -484 -656" -"noise" "world/pump1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"volume" "0.3" -"attenuation" "1" -"targetname" "t229" -"noise" "world/battle4.wav" -"origin" "-424 352 464" -"classname" "target_speaker" -} -{ -"target" "t229" -"random" "10" -"wait" "60" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-416 280 496" -} -{ -"origin" "-448 152 496" -"targetname" "t226" -"target" "t228" -"classname" "func_timer" -"spawnflags" "0" -"wait" "60" -"random" "10" -} -{ -"attenuation" "1" -"volume" "0.6" -"targetname" "t228" -"classname" "target_speaker" -"origin" "-456 208 496" -"noise" "world/battle4.wav" -} -{ -"origin" "-328 104 304" -"target" "t227" -"random" "10" -"wait" "60" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"noise" "world/battle4.wav" -"targetname" "t227" -"origin" "-336 48 304" -"classname" "target_speaker" -} -{ -"targetname" "t225" -"origin" "-552 328 560" -"attenuation" "1" -"volume" "1" -"noise" "world/battle5.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb14.wav" -"origin" "-447 -953 126" -} -{ -"origin" "-256 -464 248" -"noise" "world/amb2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-344 -224 16" -"spawnflags" "2049" -"targetname" "reddoor1" -"noise" "world/force1.wav" -"classname" "target_speaker" -} -{ -"origin" "-576 -224 16" -"noise" "world/force1.wav" -"spawnflags" "2049" -"targetname" "reddoor2" -"classname" "target_speaker" -} -{ -"origin" "256 -324 224" -"noise" "world/force2.wav" -"spawnflags" "2048" -"classname" "target_speaker" -"targetname" "pg1" -"attenuation" "3" -"volume" "0.3" -} -{ -"classname" "trigger_relay" -"origin" "-536 -200 -632" -"targetname" "t210" -"delay" "1" -"target" "t211" -} -{ -"classname" "target_speaker" -"noise" "world/drip3.wav" -"attenuation" "1" -"origin" "-568 -184 -712" -"targetname" "t211" -} -{ -"classname" "func_timer" -"target" "t210" -"spawnflags" "1" -"wait" "2" -"random" "1.5" -"origin" "-504 -184 -632" -} -{ -"attenuation" "2" -"classname" "target_speaker" -"noise" "world/drip1.wav" -"targetname" "t210" -"volume" "0.6" -"origin" "-536 -184 -664" -} -{ -"classname" "target_speaker" -"origin" "-376 -152 -600" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"origin" "-464 -236 -1008" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"noise" "world/pump1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "216 -324 -648" -} -{ -"noise" "world/pump1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "112 -324 -648" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/pump1.wav" -"origin" "160 -480 -552" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "-368 -288 -316" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "-272 -136 -320" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"origin" "-584 -288 -344" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-444 -176 -392" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-764 -512 -1020" -} -{ -"classname" "func_timer" -"spawnflags" "1" -"wait" "4" -"random" "1.3" -"target" "t207" -"origin" "-536 -1096 -648" -} -{ -"volume" "0.4" -"attenuation" "2" -"noise" "world/l_hum2.wav" -"classname" "target_speaker" -"targetname" "t204" -"origin" "-576 -1056 -648" -} -{ -"classname" "target_speaker" -"noise" "world/spark1.wav" -"attenuation" "2" -"volume" "0.3" -"targetname" "t205" -"origin" "-576 -1056 -648" -} -{ -"classname" "trigger_relay" -"target" "t205" -"origin" "-468 -1056 -648" -"targetname" "t206" -"delay" "1.2" -} -{ -"classname" "target_splash" -"sounds" "1" -"angle" "180" -"targetname" "t205" -"origin" "-576 -1056 -648" -} -{ -"classname" "trigger_relay" -"target" "t204" -"targetname" "t200" -"delay" "1" -"origin" "-540 -1132 -648" -} -{ -"classname" "target_splash" -"angle" "225" -"sounds" "1" -"targetname" "t204" -"origin" "-576 -1056 -648" -} -{ -"origin" "-508 -1024 -648" -"classname" "trigger_relay" -"targetname" "t206" -"target" "t202" -} -{ -"classname" "trigger_relay" -"origin" "-536 -1064 -648" -"target" "t206" -"targetname" "t207" -} -{ -"classname" "trigger_relay" -"origin" "-492 -1080 -648" -"delay" "1.2" -"targetname" "t206" -"target" "t202" -} -{ -"style" "35" -"spawnflags" "1" -"origin" "-576 -1056 -648" -"classname" "light" -"light" "100" -"targetname" "t202" -} -{ -"classname" "trigger_relay" -"targetname" "t201" -"target" "t199" -"origin" "-560 -1104 -648" -} -{ -"classname" "trigger_relay" -"targetname" "t201" -"delay" "1" -"target" "t199" -"origin" "-592 -1112 -648" -} -{ -"classname" "trigger_relay" -"targetname" "t200" -"target" "t201" -"origin" "-572 -1144 -648" -} -{ -"classname" "func_timer" -"target" "t200" -"origin" "-556 -1208 -648" -"spawnflags" "1" -"wait" "3" -"random" "1.9" -} -{ -"classname" "func_timer" -"target" "t198" -"wait" "3" -"random" "2.5" -"origin" "-184 -1244 -812" -"spawnflags" "1" -} -{ -"origin" "-216 -1268 -812" -"noise" "world/drip1.wav" -"classname" "target_speaker" -"targetname" "t198" -"attenuation" "1" -"volume" "0.3" -} -{ -"classname" "func_timer" -"origin" "-232 -1252 -812" -"target" "t197" -"wait" "5" -"spawnflags" "1" -} -{ -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"origin" "-228 -1172 -812" -"targetname" "t197" -"attenuation" "2" -"volume" "0.4" -} -{ -"classname" "target_speaker" -"spawnflags" "2048" -"noise" "world/force1.wav" -"origin" "256 -324 240" -"targetname" "pg1" -} -{ -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -"origin" "912 1300 116" -"targetname" "pg1" -} -{ -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -"origin" "144 516 268" -"targetname" "pg2" -} -{ -"noise" "world/force1.wav" -"spawnflags" "2049" -"classname" "target_speaker" -"targetname" "pg1" -"origin" "-488 -400 -988" -} -{ -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -"targetname" "pg2" -"origin" "-152 672 268" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -"origin" "-396 676 -216" -} -{ -"style" "6" -"classname" "func_areaportal" -"targetname" "t196" -} -{ -"model" "*106" -"classname" "func_door" -"angle" "90" -"sounds" "1" -"team" "short_red" -"_minlight" "0.2" -} -{ -"model" "*107" -"classname" "func_door" -"angle" "270" -"sounds" "2" -"team" "short_red" -"target" "t196" -"_minlight" "0.2" -} -{ -"classname" "info_player_coop" -"angle" "180" -"targetname" "city3NL" -"origin" "-112 -1260 -888" -} -{ -"spawnflags" "2048" -"classname" "target_speaker" -"origin" "-343 -38 287" -"targetname" "fldsnd1" -"noise" "world/force3.wav" -"attenuation" "3" -"volume" "1" -} -{ -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2049" -"targetname" "pg1" -"origin" "-336 -32 296" -} -{ -"origin" "-192 276 -160" -"light" "64" -"classname" "light" -} -{ -"origin" "-256 276 -144" -"light" "56" -"classname" "light" -} -{ -"origin" "-320 276 -128" -"light" "56" -"classname" "light" -} -{ -"origin" "-384 276 -112" -"light" "56" -"classname" "light" -} -{ -"origin" "-448 276 -112" -"light" "56" -"classname" "light" -} -{ -"origin" "-448 660 -80" -"classname" "light" -"light" "64" -} -{ -"origin" "-448 596 -80" -"classname" "light" -"light" "56" -} -{ -"origin" "-448 532 -80" -"classname" "light" -"light" "56" -} -{ -"origin" "-448 468 -80" -"classname" "light" -"light" "56" -} -{ -"origin" "-448 404 -80" -"classname" "light" -"light" "56" -} -{ -"origin" "-448 340 -96" -"classname" "light" -"light" "56" -} -{ -"origin" "-128 276 -160" -"classname" "light" -"light" "64" -} -{ -"origin" "-384 672 -80" -"light" "64" -"classname" "light" -} -{ -"origin" "-264 404 -112" -"classname" "ammo_shells" -} -{ -"origin" "-264 456 -112" -"classname" "ammo_shells" -} -{ -"origin" "-288 672 -124" -"targetname" "t190" -"classname" "info_notnull" -} -{ -"origin" "-288 672 19" -"_color" "1.000000 0.889764 0.279528" -"light" "400" -"_cone" "20" -"target" "t190" -"classname" "light" -} -{ -"origin" "-224 672 -124" -"targetname" "t191" -"classname" "info_null" -} -{ -"origin" "-224 672 19" -"_color" "1.000000 0.889764 0.279528" -"light" "400" -"_cone" "20" -"target" "t191" -"classname" "light" -} -{ -"origin" "-160 672 -124" -"targetname" "t192" -"classname" "info_null" -} -{ -"origin" "-160 672 19" -"_color" "1.000000 0.889764 0.279528" -"light" "400" -"_cone" "20" -"target" "t192" -"classname" "light" -} -{ -"origin" "-352 672 -124" -"targetname" "t189" -"classname" "info_null" -} -{ -"origin" "-352 672 19" -"_color" "1.000000 0.889764 0.279528" -"light" "400" -"_cone" "20" -"target" "t189" -"classname" "light" -} -{ -"spawnflags" "2048" -"origin" "-392 -396 -92" -"classname" "ammo_shells" -} -{ -"classname" "ammo_bullets" -"origin" "-328 -472 208" -} -{ -"classname" "ammo_bullets" -"origin" "-272 -448 208" -} -{ -"noise" "world/klaxon2.wav" -"spawnflags" "2050" -"classname" "target_speaker" -"origin" "-448 -448 272" -"targetname" "pg2" -} -{ -"origin" "-440 280 408" -"classname" "target_speaker" -"spawnflags" "2" -"volume" "7" -"noise" "world/klaxon2.wav" -"targetname" "pg2" -} -{ -"targetname" "pg2" -"origin" "-56 -344 272" -"classname" "target_speaker" -"spawnflags" "2" -"volume" "7" -"noise" "world/klaxon2.wav" -} -{ -"origin" "360 -152 360" -"classname" "target_speaker" -"spawnflags" "2" -"volume" "7" -"noise" "world/klaxon2.wav" -} -{ -"origin" "616 520 360" -"classname" "target_speaker" -"spawnflags" "2050" -"volume" "7" -"noise" "world/klaxon2.wav" -} -{ -"noise" "world/klaxon2.wav" -"volume" "7" -"spawnflags" "2050" -"classname" "target_speaker" -"targetname" "pg2" -"origin" "536 588 304" -} -{ -"noise" "world/klaxon2.wav" -"volume" "7" -"spawnflags" "2" -"classname" "target_speaker" -"origin" "-448 -464 -24" -"targetname" "pg2" -} -{ -"classname" "target_speaker" -"spawnflags" "2050" -"volume" "7" -"noise" "world/klaxon2.wav" -"targetname" "pg2" -"origin" "264 1464 312" -} -{ -"classname" "light" -"origin" "-184 216 -40" -"_cone" "20" -"target" "t186" -"light" "325" -} -{ -"classname" "info_notnull" -"origin" "-176 216 120" -"targetname" "t186" -} -{ -"classname" "info_notnull" -"origin" "-176 144 120" -"targetname" "t187" -} -{ -"light" "325" -"classname" "light" -"origin" "-184 144 -48" -"_cone" "20" -"target" "t187" -} -{ -"classname" "light" -"origin" "-184 72 -48" -"_cone" "20" -"target" "t188" -"light" "325" -} -{ -"classname" "info_notnull" -"origin" "-176 72 120" -"targetname" "t188" -} -{ -"origin" "-184 328 -40" -"classname" "light" -"_cone" "20" -"target" "t185" -"light" "325" -} -{ -"origin" "-176 328 120" -"classname" "info_notnull" -"targetname" "t185" -} -{ -"origin" "-176 400 120" -"classname" "info_notnull" -"targetname" "t178" -} -{ -"light" "325" -"origin" "-184 400 -48" -"classname" "light" -"target" "t178" -"_cone" "20" -} -{ -"origin" "-184 472 -48" -"classname" "light" -"target" "t177" -"_cone" "20" -"light" "325" -} -{ -"origin" "-176 472 120" -"classname" "info_notnull" -"targetname" "t177" -} -{ -"origin" "-720 216 120" -"classname" "info_notnull" -"targetname" "t181" -} -{ -"origin" "-720 144 120" -"classname" "info_notnull" -"targetname" "t180" -} -{ -"origin" "-720 72 120" -"classname" "info_notnull" -"targetname" "t179" -} -{ -"origin" "-712 216 -48" -"classname" "light" -"_cone" "20" -"target" "t181" -"light" "325" -} -{ -"light" "325" -"origin" "-712 144 -48" -"classname" "light" -"_cone" "20" -"target" "t180" -} -{ -"origin" "-712 72 -48" -"classname" "light" -"_cone" "20" -"target" "t179" -"light" "325" -} -{ -"classname" "info_notnull" -"origin" "-720 400 120" -"targetname" "t183" -} -{ -"classname" "info_notnull" -"origin" "-720 328 120" -"targetname" "t182" -} -{ -"classname" "info_notnull" -"origin" "-720 472 120" -"targetname" "t184" -} -{ -"light" "325" -"classname" "light" -"origin" "-712 400 -48" -"_cone" "20" -"target" "t183" -} -{ -"classname" "light" -"origin" "-712 472 -48" -"_cone" "20" -"target" "t184" -"light" "325" -} -{ -"classname" "light" -"origin" "-712 328 -48" -"_cone" "20" -"target" "t182" -"light" "325" -} -{ -"style" "7" -"classname" "func_areaportal" -"targetname" "t176" -} -{ -"origin" "-328 -284 -16" -"targetname" "t173" -"target" "reddoor1" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-328 -292 -48" -"target" "t174" -"targetname" "t173" -"classname" "trigger_relay" -} -{ -"origin" "-48 -64 -116" -"spawnflags" "2" -"targetname" "t174" -"classname" "monster_soldier_light" -"angle" "180" -} -{ -"origin" "-20 -128 -116" -"spawnflags" "2" -"targetname" "t174" -"classname" "monster_soldier_light" -"angle" "180" -} -{ -"origin" "-100 -108 -100" -"spawnflags" "2" -"targetname" "t174" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"model" "*108" -"sounds" "4" -"team" "paldoor1" -"angle" "270" -"classname" "func_door" -"target" "t176" -"_minlight" "0.2" -"spawnflags" "8" -} -{ -"model" "*109" -"team" "paldoor1" -"angle" "90" -"classname" "func_door" -"_minlight" "0.2" -"spawnflags" "8" -} -{ -"model" "*110" -"classname" "func_door" -"angle" "270" -"team" "comexit" -"sounds" "3" -"target" "t175" -"_minlight" "0.2" -} -{ -"model" "*111" -"classname" "func_door" -"angle" "90" -"team" "comexit" -"_minlight" "0.2" -} -{ -"style" "8" -"classname" "func_areaportal" -"targetname" "t175" -} -{ -"light" "100" -"classname" "light" -"origin" "536 440 104" -} -{ -"light" "100" -"classname" "light" -"origin" "680 440 104" -} -{ -"light" "100" -"classname" "light" -"origin" "664 600 104" -} -{ -"light" "100" -"classname" "light" -"origin" "600 632 104" -} -{ -"light" "100" -"classname" "light" -"origin" "584 408 104" -} -{ -"light" "100" -"classname" "light" -"origin" "488 520 104" -} -{ -"light" "100" -"classname" "light" -"origin" "728 520 104" -} -{ -"classname" "light" -"light" "100" -"origin" "520 600 104" -} -{ -"spawnflags" "2048" -"classname" "target_explosion" -"dmg" "0" -"targetname" "t56" -"origin" "-384 -304 -892" -} -{ -"light" "125" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "280 -320 294" -} -{ -"classname" "info_null" -"targetname" "t169" -"origin" "104 -440 -572" -} -{ -"classname" "light" -"origin" "104 -440 -488" -"target" "t169" -"_cone" "20" -} -{ -"classname" "info_null" -"targetname" "t168" -"origin" "216 -440 -572" -} -{ -"classname" "light" -"target" "t168" -"origin" "216 -440 -488" -"_cone" "20" -} -{ -"spawnflags" "2048" -"classname" "target_secret" -"message" "You have found a secret." -"targetname" "t167" -"origin" "-376 -328 -808" -} -{ -"light" "80" -"classname" "light" -"origin" "-440 -264 -600" -} -{ -"classname" "light" -"light" "80" -"origin" "-376 -264 -600" -} -{ -"light" "80" -"classname" "light" -"origin" "-568 -264 -600" -} -{ -"classname" "light" -"light" "80" -"origin" "-504 -264 -600" -} -{ -"classname" "light" -"light" "80" -"origin" "-312 -264 -600" -} -{ -"origin" "-336 -1216 -696" -"light" "60" -"classname" "light" -} -{ -"origin" "-336 -1152 -696" -"light" "60" -"classname" "light" -} -{ -"origin" "-336 -1088 -696" -"light" "60" -"classname" "light" -} -{ -"origin" "-384 -1040 -680" -"light" "64" -"classname" "light" -} -{ -"origin" "-448 -1040 -696" -"light" "64" -"classname" "light" -} -{ -"origin" "-512 -1040 -712" -"light" "64" -"classname" "light" -} -{ -"origin" "-560 -1064 -728" -"light" "64" -"classname" "light" -} -{ -"origin" "-560 -1096 -744" -"light" "64" -"classname" "light" -} -{ -"origin" "-568 -1144 -760" -"light" "64" -"classname" "light" -} -{ -"origin" "-568 -1200 -776" -"light" "64" -"classname" "light" -} -{ -"origin" "-568 -1248 -792" -"light" "64" -"classname" "light" -} -{ -"origin" "-520 -1264 -808" -"light" "64" -"classname" "light" -} -{ -"origin" "-472 -1264 -824" -"light" "64" -"classname" "light" -} -{ -"origin" "-424 -1264 -840" -"light" "64" -"classname" "light" -} -{ -"origin" "-376 -1264 -856" -"light" "64" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "-328 -1264 -856" -} -{ -"light" "90" -"classname" "light" -"origin" "-232 -1216 -856" -} -{ -"light" "90" -"classname" "light" -"origin" "-168 -1216 -856" -} -{ -"light" "90" -"classname" "light" -"origin" "-104 -1232 -856" -} -{ -"light" "90" -"classname" "light" -"origin" "-40 -1248 -856" -} -{ -"classname" "light" -"light" "60" -"origin" "-336 -1264 -696" -} -{ -"spawnflags" "2048" -"origin" "700 752 272" -"message" "Reprogram Data Spinner\nat Central Computer." -"targetname" "t162" -"classname" "target_help" -} -{ -"spawnflags" "2048" -"origin" "-4 -264 -632" -"angle" "90" -"classname" "misc_insane" -} -{ -"origin" "336 64 232" -"target" "t142" -"classname" "monster_chick" -} -{ -"model" "*112" -"target" "t145" -"targetname" "t156" -"spawnflags" "2052" -"classname" "trigger_once" -} -{ -"origin" "632 680 256" -"targetname" "t162" -"spawnflags" "2056" -"classname" "target_crosslevel_trigger" -} -{ -"spawnflags" "2048" -"origin" "528 956 256" -"delay" "2" -"targetname" "t163" -"item" "key_data_spinner" -"classname" "trigger_key" -"target" "t257" -} -{ -"targetname" "t161" -"origin" "592 664 192" -"classname" "info_null" -} -{ -"light" "150" -"target" "t161" -"origin" "592 664 284" -"classname" "light" -} -{ -"spawnflags" "2048" -"target" "t162" -"origin" "592 664 196" -"classname" "key_data_cd" -} -{ -"origin" "848 1312 80" -"classname" "ammo_cells" -"spawnflags" "2048" -} -{ -"origin" "856 1352 80" -"classname" "ammo_cells" -"spawnflags" "2048" -} -{ -"origin" "912 1392 80" -"classname" "item_adrenaline" -"spawnflags" "2048" -} -{ -"spawnflags" "0" -"origin" "848 1272 80" -"classname" "ammo_cells" -} -{ -"model" "*113" -"spawnflags" "2048" -"target" "t145" -"classname" "trigger_once" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-72 736 -112" -} -{ -"spawnflags" "2048" -"origin" "-72 768 -112" -"classname" "ammo_cells" -} -{ -"classname" "item_health" -"origin" "-152 536 -216" -} -{ -"classname" "item_health" -"origin" "-184 576 -216" -} -{ -"model" "*114" -"classname" "func_wall" -"spawnflags" "2816" -} -{ -"model" "*115" -"classname" "func_wall" -"spawnflags" "1536" -} -{ -"model" "*116" -"classname" "func_wall" -"spawnflags" "1280" -} -{ -"model" "*117" -"classname" "func_wall" -"spawnflags" "3584" -} -{ -"origin" "140 1244 264" -"classname" "info_null" -"targetname" "t261" -} -{ -"classname" "light" -"_cone" "25" -"origin" "524 1244 468" -} -{ -"origin" "944 1308 168" -"spawnflags" "2050" -"targetname" "pg1" -"classname" "target_crosslevel_trigger" -} -{ -"origin" "624 602 280" -"spawnflags" "2076" -"target" "t156" -"classname" "target_crosslevel_target" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 1.000000 0.874510" -"origin" "-448 -840 120" -} -{ -"origin" "-448 -840 112" -"_color" "1.000000 1.000000 1.000000" -"light" "300" -"classname" "light" -"_cone" "20" -"target" "t154" -} -{ -"origin" "-448 -840 -100" -"classname" "info_notnull" -"targetname" "t154" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 1.000000 0.874510" -"origin" "-448 -756 120" -} -{ -"origin" "-448 -756 112" -"_color" "1.000000 1.000000 1.000000" -"light" "300" -"classname" "light" -"_cone" "20" -"target" "t155" -} -{ -"origin" "-448 -756 -100" -"classname" "info_notnull" -"targetname" "t155" -} -{ -"origin" "-456 620 160" -"classname" "item_armor_combat" -} -{ -"target" "t153" -"_color" "1.000000 0.255144 0.004115" -"origin" "-216 600 -152" -"light" "200" -"classname" "light" -} -{ -"targetname" "t153" -"origin" "-216 600 -232" -"classname" "info_notnull" -} -{ -"target" "t151" -"classname" "light" -"light" "200" -"origin" "-152 600 -152" -"_color" "1.000000 0.255144 0.004115" -} -{ -"targetname" "t151" -"classname" "info_notnull" -"origin" "-152 600 -232" -} -{ -"target" "t152" -"classname" "light" -"light" "200" -"origin" "-344 600 -152" -"_color" "1.000000 0.255144 0.004115" -} -{ -"targetname" "t152" -"classname" "info_notnull" -"origin" "-344 600 -228" -} -{ -"origin" "-280 600 -232" -"targetname" "t150" -"classname" "info_notnull" -} -{ -"_color" "1.000000 0.255144 0.004115" -"origin" "-280 600 -152" -"light" "200" -"target" "t150" -"classname" "light" -} -{ -"model" "*118" -"target" "t149" -"classname" "trigger_multiple" -} -{ -"origin" "-280 600 -168" -"classname" "item_health_mega" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"origin" "-456 584 184" -"classname" "ammo_shells" -} -{ -"spawnflags" "0" -"origin" "-392 704 160" -"classname" "ammo_slugs" -} -{ -"origin" "-352 704 160" -"classname" "item_health_large" -} -{ -"origin" "-512 -124 -984" -"classname" "item_health" -} -{ -"origin" "-568 -152 -1000" -"spawnflags" "2064" -"classname" "misc_deadsoldier" -} -{ -"origin" "-312 -1252 -692" -"classname" "item_bandolier" -"spawnflags" "1792" -} -{ -"origin" "-308 -1292 -732" -"classname" "item_health" -} -{ -"origin" "-588 -1224 -812" -"classname" "item_health_small" -} -{ -"origin" "-412 -1284 -880" -"classname" "item_health_small" -} -{ -"origin" "-592 -1156 -800" -"classname" "item_health_small" -} -{ -"model" "*119" -"target" "pg1" -"targetname" "t147" -"classname" "trigger_once" -"spawnflags" "2048" -"message" "Yellow force fields deactivated." -} -{ -"classname" "target_speaker" -"targetname" "com5" -"noise" "world/electro.wav" -"origin" "592 512 360" -} -{ -"spawnflags" "2048" -"classname" "target_speaker" -"targetname" "com7" -"origin" "592 520 360" -"noise" "world/spark2.wav" -} -{ -"spawnflags" "2048" -"classname" "target_speaker" -"targetname" "com6" -"noise" "world/spark2.wav" -"origin" "592 504 360" -} -{ -"classname" "target_speaker" -"targetname" "com3" -"noise" "world/spark1.wav" -"origin" "592 512 360" -} -{ -"classname" "target_speaker" -"targetname" "com4" -"noise" "world/electro.wav" -"origin" "592 512 360" -} -{ -"spawnflags" "2048" -"origin" "584 504 360" -"classname" "target_explosion" -"targetname" "com2" -} -{ -"spawnflags" "2048" -"origin" "600 512 376" -"classname" "target_explosion" -"targetname" "com7" -} -{ -"classname" "target_explosion" -"origin" "600 512 312" -"targetname" "com5" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com7" -"origin" "680 384 328" -"targetname" "pg2" -"delay" "3.5" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com6" -"origin" "648 384 328" -"targetname" "pg2" -"delay" "3.25" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com5" -"origin" "616 384 328" -"targetname" "pg2" -"delay" "3" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com4" -"origin" "584 384 328" -"targetname" "pg2" -"delay" "2.75" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com3" -"origin" "552 384 328" -"targetname" "pg2" -"delay" "2.5" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com2" -"origin" "520 384 328" -"targetname" "pg2" -"delay" "2" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"target" "com1" -"origin" "488 384 328" -"targetname" "pg2" -"delay" "1" -} -{ -"classname" "trigger_relay" -"target" "com8" -"origin" "712 384 328" -"targetname" "pg2" -"delay" "4.25" -} -{ -"model" "*120" -"classname" "func_explosive" -"targetname" "com8" -"dmg" "50" -"mass" "300" -} -{ -"attenuation" "3" -"volume" "3" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb12.wav" -"targetname" "com2" -"origin" "608 512 336" -} -{ -"model" "*121" -"spawnflags" "2048" -"target" "t163" -"classname" "trigger_once" -"message" "Warning. Communication laser shut down." -} -{ -"classname" "light" -"light" "64" -"origin" "544 916 221" -} -{ -"model" "*122" -"sounds" "4" -"spawnflags" "2089" -"classname" "func_door" -"angle" "-2" -"lip" "128" -"targetname" "t145" -"wait" "-1" -"_minlight" "0.1" -} -{ -"model" "*123" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"classname" "path_corner" -"origin" "328 -160 216" -"targetname" "t143" -"target" "t144" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t139" -"target" "t140" -"origin" "328 -160 216" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t140" -"target" "t141" -"origin" "328 40 216" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t141" -"target" "t142" -"origin" "376 40 216" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t142" -"origin" "328 40 216" -"target" "t143" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"target" "t139" -"origin" "28 -136 216" -"targetname" "t144" -} -{ -"classname" "item_health" -"origin" "840 600 80" -} -{ -"classname" "item_health" -"origin" "816 640 80" -} -{ -"classname" "item_health" -"origin" "656 752 80" -} -{ -"classname" "target_secret" -"targetname" "t138" -"message" "You have found a secret area." -"origin" "-312 -8 -56" -} -{ -"model" "*124" -"classname" "trigger_once" -"target" "t138" -} -{ -"light" "200" -"classname" "light" -"origin" "-544 392 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-440 360 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-440 408 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-336 392 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-336 168 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-440 200 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-544 200 392" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-544 360 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-544 408 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-440 360 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-440 408 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-336 360 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-336 408 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-336 168 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-440 168 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"light" "200" -"classname" "light" -"origin" "-544 168 520" -"_color" "1.000000 0.976471 0.501961" -} -{ -"classname" "item_health" -"origin" "-456 96 -56" -"spawnflags" "2048" -} -{ -"classname" "monster_tank_commander" -"angle" "270" -"origin" "4 964 244" -"targetname" "pg2" -"spawnflags" "1" -} -{ -"model" "*125" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t134" -} -{ -"origin" "120 1612 324" -"classname" "monster_floater" -"spawnflags" "769" -"item" "ammo_cells" -} -{ -"origin" "240 1424 384" -"classname" "monster_floater" -"spawnflags" "1" -"item" "ammo_cells" -} -{ -"angle" "180" -"classname" "monster_chick" -"spawnflags" "1" -"origin" "139 1242 284" -"targetname" "t134" -} -{ -"classname" "ammo_bullets" -"origin" "-372 32 -16" -"spawnflags" "1792" -} -{ -"classname" "weapon_chaingun" -"origin" "-332 40 -16" -"spawnflags" "1792" -} -{ -"classname" "ammo_bullets" -"origin" "-296 28 -16" -"spawnflags" "1792" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2049" -"angle" "45" -"origin" "-444 -408 -112" -} -{ -"origin" "-448 520 228" -"classname" "info_null" -"targetname" "t124" -} -{ -"origin" "-448 520 375" -"_cone" "20" -"classname" "light" -"target" "t124" -} -{ -"origin" "-448 520 383" -"light" "150" -"classname" "light" -} -{ -"classname" "monster_soldier" -"targetname" "t121" -"spawnflags" "257" -"angle" "270" -"origin" "-200 704 -104" -} -{ -"classname" "monster_soldier" -"targetname" "t121" -"spawnflags" "769" -"angle" "270" -"origin" "-312 680 -104" -} -{ -"classname" "monster_soldier" -"targetname" "t121" -"spawnflags" "1" -"angle" "270" -"origin" "-184 648 -104" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"origin" "-464 232 -128" -"targetname" "t226" -"target" "t121" -} -{ -"model" "*126" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t119" -} -{ -"classname" "monster_floater" -"origin" "-1124 -344 -1072" -"spawnflags" "258" -"targetname" "t119" -} -{ -"angle" "0" -"classname" "monster_soldier_light" -"spawnflags" "3" -"targetname" "pg1" -"origin" "-700 -518 -998" -} -{ -"angle" "0" -"classname" "monster_gunner" -"spawnflags" "259" -"targetname" "pg1" -"origin" "-804 -480 -998" -} -{ -"angle" "45" -"classname" "monster_soldier_light" -"spawnflags" "3" -"targetname" "pg1" -"origin" "-620 -528 -998" -} -{ -"classname" "target_secret" -"targetname" "t109" -"message" "You have found a secret area." -"origin" "-1246 -392 -1086" -} -{ -"model" "*127" -"classname" "trigger_once" -"target" "t109" -} -{ -"spawnflags" "1792" -"classname" "item_health" -"origin" "48 768 -112" -} -{ -"classname" "misc_deadsoldier" -"angle" "315" -"spawnflags" "2064" -"origin" "-111 759 -128" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t104" -"target" "t105" -"wait" "1" -"origin" "-576 168 -120" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t105" -"target" "t106" -"origin" "-592 168 -120" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t103" -"target" "t104" -"origin" "-576 400 -120" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"target" "t103" -"targetname" "t106" -"wait" "1" -"origin" "-592 400 -120" -} -{ -"classname" "monster_chick" -"target" "t103" -"item" "ammo_rockets" -"origin" "-560 416 -104" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_ss" -"origin" "-632 316 -104" -"angle" "0" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_ss" -"origin" "-632 252 -104" -"angle" "0" -"item" "ammo_shells" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_ss" -"origin" "-632 192 -104" -"spawnflags" "769" -} -{ -"classname" "monster_soldier_ss" -"origin" "-632 380 -104" -"angle" "0" -"item" "ammo_shells" -"spawnflags" "257" -} -{ -"origin" "-476 32 468" -"classname" "info_null" -"targetname" "t102" -} -{ -"origin" "-448 32 480" -"classname" "info_null" -"targetname" "t101" -} -{ -"classname" "info_null" -"origin" "-420 32 468" -"targetname" "t100" -} -{ -"_cone" "5" -"light" "200" -"classname" "light" -"origin" "-448 40 388" -"target" "t101" -} -{ -"_cone" "5" -"light" "200" -"classname" "light" -"target" "t100" -"origin" "-464 40 388" -} -{ -"_cone" "5" -"classname" "light" -"light" "200" -"origin" "-432 40 388" -"target" "t102" -} -{ -"classname" "info_notnull" -"targetname" "t99" -"origin" "-448 520 -124" -} -{ -"classname" "light" -"light" "150" -"origin" "-448 520 63" -} -{ -"classname" "light" -"target" "t99" -"_cone" "20" -"origin" "-448 520 55" -} -{ -"classname" "monster_chick" -"angle" "180" -"origin" "-196 704 256" -"spawnflags" "3" -"targetname" "t257" -} -{ -"classname" "monster_chick" -"angle" "180" -"origin" "-192 632 256" -"spawnflags" "3" -"targetname" "t257" -} -{ -"classname" "monster_tank_commander" -"angle" "90" -"origin" "-452 616 256" -"item" "ammo_rockets" -"spawnflags" "1" -} -{ -"classname" "func_group" -} -{ -"origin" "-208 -464 -584" -"classname" "weapon_shotgun" -"spawnflags" "1792" -} -{ -"origin" "-1183 -299 -1060" -"spawnflags" "81" -"angle" "-1" -"classname" "target_laser" -} -{ -"deathtarget" "t171" -"targetname" "t275" -"origin" "-380 -316 232" -"spawnflags" "1" -"angle" "270" -"classname" "monster_chick" -"item" "ammo_rockets" -} -{ -"targetname" "t275" -"origin" "-268 -336 232" -"spawnflags" "257" -"angle" "270" -"classname" "monster_chick" -"item" "item_armor_shard" -} -{ -"targetname" "t90" -"classname" "point_combat" -"origin" "-454 -576 -732" -} -{ -"origin" "296 -304 -96" -"classname" "monster_soldier" -"angle" "0" -"spawnflags" "257" -"item" "item_armor_shard" -"target" "t291" -"deathtarget" "bob" -} -{ -"origin" "-1119 -579 -1060" -"spawnflags" "81" -"angle" "-1" -"classname" "target_laser" -} -{ -"origin" "-318 -593 -87" -"angle" "90" -"classname" "monster_soldier_light" -"spawnflags" "768" -} -{ -"origin" "-384 -307 -56" -"angle" "135" -"classname" "monster_soldier_light" -"spawnflags" "256" -} -{ -"spawnflags" "2048" -"origin" "-16 -152 -640" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "40 -232 -656" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "-424 -288 -1008" -"target" "t84" -"targetname" "t83" -"classname" "path_corner" -} -{ -"origin" "-448 -168 -1016" -"target" "t83" -"targetname" "t82" -"classname" "path_corner" -} -{ -"origin" "-472 -344 -1016" -"targetname" "t84" -"target" "t82" -"classname" "path_corner" -} -{ -"item" "ammo_cells" -"origin" "-412 -340 -984" -"classname" "monster_soldier_light" -"spawnflags" "2304" -"angle" "180" -"targetname" "t242" -} -{ -"origin" "-496 -352 -984" -"target" "t84" -"angle" "180" -"spawnflags" "1" -"classname" "monster_soldier_light" -} -{ -"targetname" "148" -"classname" "trigger_key" -"spawnflags" "2052" -"message" "Security pass approved. \nYou may enter force field control." -"target" "t81" -"origin" "744 744 72" -"item" "key_pass" -} -{ -"classname" "light" -"light" "64" -"origin" "96 676 16" -} -{ -"spawnflags" "2048" -"classname" "ammo_grenades" -"origin" "-602 -204 -404" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"delay" "1" -"targetname" "t56" -"origin" "-497 -325 -1008" -"target" "t76" -} -{ -"classname" "info_notnull" -"targetname" "t75" -"origin" "-376 -296 -772" -} -{ -"classname" "light" -"origin" "-376 -296 -880" -"target" "t75" -"light" "150" -"_cone" "20" -} -{ -"spawnflags" "2048" -"classname" "item_enviro" -"origin" "-376 -296 -760" -} -{ -"model" "*128" -"spawnflags" "2048" -"classname" "func_explosive" -"dmg" "100" -"health" "1" -"mass" "500" -"_minlight" "0.2" -"target" "t167" -} -{ -"classname" "monster_floater" -"spawnflags" "1" -"origin" "-464 -224 -376" -"target" "t80" -} -{ -"classname" "light" -"origin" "872 1424 183" -"target" "t64" -"light" "175" -"_cone" "15" -} -{ -"classname" "info_null" -"origin" "872 1424 68" -"targetname" "t64" -} -{ -"classname" "light" -"origin" "952 1424 183" -"target" "t63" -"light" "175" -"_cone" "15" -} -{ -"classname" "info_null" -"origin" "952 1424 68" -"targetname" "t63" -} -{ -"classname" "light" -"origin" "952 1344 183" -"target" "t65" -"light" "175" -"_cone" "15" -} -{ -"classname" "info_null" -"origin" "952 1344 68" -"targetname" "t65" -} -{ -"classname" "info_null" -"origin" "872 1344 68" -"targetname" "t66" -} -{ -"classname" "light" -"origin" "872 1344 183" -"target" "t66" -"light" "175" -"_cone" "15" -} -{ -"model" "*129" -"sounds" "3" -"classname" "func_door" -"angle" "0" -"team" "p1" -"lip" "16" -"wait" "3" -"_minlight" "0.2" -"target" "t303" -} -{ -"model" "*130" -"classname" "func_door" -"angle" "180" -"team" "p1" -"lip" "16" -"wait" "3" -"_minlight" "0.2" -"target" "t303" -} -{ -"classname" "info_null" -"origin" "-392 -216 -628" -"targetname" "t60" -} -{ -"classname" "light" -"origin" "-392 -216 -568" -"target" "t60" -} -{ -"classname" "light" -"target" "t59" -"origin" "-320 -216 -568" -} -{ -"classname" "info_null" -"targetname" "t59" -"origin" "-320 -216 -644" -} -{ -"classname" "light" -"origin" "-504 -216 -568" -"target" "t61" -} -{ -"classname" "info_null" -"origin" "-504 -216 -620" -"targetname" "t61" -} -{ -"classname" "info_null" -"targetname" "t58" -"origin" "-264 -216 -644" -} -{ -"classname" "light" -"target" "t58" -"origin" "-264 -216 -568" -} -{ -"style" "9" -"targetname" "t57" -"classname" "func_areaportal" -} -{ -"model" "*131" -"sounds" "3" -"wait" "4" -"lip" "16" -"team" "portal1" -"angle" "180" -"classname" "func_door" -"_minlight" "0.2" -"spawnflags" "8" -} -{ -"model" "*132" -"target" "t57" -"wait" "4" -"lip" "16" -"team" "portal1" -"angle" "0" -"classname" "func_door" -"_minlight" "0.2" -"spawnflags" "8" -} -{ -"model" "*133" -"spawnflags" "2048" -"target" "t56" -"delay" "5" -"classname" "trigger_once" -} -{ -"model" "*134" -"angle" "-2" -"spawnflags" "1" -"classname" "trigger_push" -"speed" "25" -} -{ -"spawnflags" "2" -"origin" "-376 -290 -849" -"classname" "monster_floater" -"targetname" "t76" -} -{ -"classname" "monster_soldier_ss" -"spawnflags" "257" -"angle" "270" -"origin" "-480 -672 -728" -"targetname" "t11" -"item" "ammo_bullets" -} -{ -"classname" "monster_soldier_ss" -"spawnflags" "769" -"angle" "270" -"origin" "-416 -664 -728" -"targetname" "t11" -} -{ -"item" "item_armor_shard" -"angle" "180" -"classname" "monster_soldier" -"origin" "180 -488 -540" -"spawnflags" "1" -"deathtarget" "t243" -} -{ -"item" "ammo_shells" -"classname" "monster_soldier" -"angle" "180" -"origin" "156 -536 -540" -"spawnflags" "1" -"deathtarget" "t243" -} -{ -"item" "ammo_shells" -"classname" "monster_soldier" -"angle" "180" -"origin" "100 -524 -540" -"spawnflags" "769" -"deathtarget" "t243" -} -{ -"spawnflags" "2048" -"classname" "point_combat" -"targetname" "t51" -"origin" "-198 -262 -644" -} -{ -"target" "t266" -"targetname" "t243" -"item" "ammo_rockets" -"classname" "monster_chick" -"spawnflags" "2" -"angle" "90" -"origin" "-672 -272 -624" -} -{ -"style" "36" -"targetname" "t45" -"spawnflags" "0" -"_color" "1.000000 0.316206 0.142292" -"classname" "light" -"light" "175" -"origin" "-132 -368 232" -} -{ -"model" "*135" -"health" "5" -"lip" "4" -"classname" "func_door" -"angle" "0" -"team" "2grate" -} -{ -"model" "*136" -"health" "5" -"lip" "4" -"classname" "func_door" -"angle" "180" -"team" "2grate" -"sounds" "2" -} -{ -"style" "36" -"origin" "-128 -272 232" -"light" "175" -"classname" "light" -"targetname" "t45" -"_color" "1.000000 0.316206 0.142292" -"spawnflags" "0" -} -{ -"model" "*137" -"spawnflags" "2048" -"targetname" "t81" -"sounds" "2" -"wait" "-1" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "432 544 126" -"target" "t36" -"classname" "light" -"light" "100" -} -{ -"origin" "432 544 70" -"targetname" "t36" -"classname" "info_null" -} -{ -"origin" "432 480 70" -"targetname" "t35" -"classname" "info_null" -} -{ -"origin" "432 480 126" -"light" "100" -"target" "t35" -"classname" "light" -} -{ -"origin" "-480 -744 -728" -"angle" "270" -"targetname" "t11" -"spawnflags" "1" -"classname" "monster_soldier_ss" -} -{ -"origin" "-416 -736 -728" -"angle" "270" -"targetname" "t11" -"spawnflags" "1" -"classname" "monster_soldier_ss" -} -{ -"spawnflags" "2048" -"targetname" "t22" -"target" "t34" -"origin" "-576 -1264 -832" -"classname" "point_combat" -} -{ -"classname" "info_notnull" -"targetname" "t33" -"origin" "-448 -952 -100" -} -{ -"origin" "-448 -952 120" -"_color" "1.000000 1.000000 0.874510" -"light" "80" -"classname" "light" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"targetname" "t11" -"target" "t32" -"origin" "-344 -1112 -744" -} -{ -"origin" "-368 -1020 -760" -"spawnflags" "2048" -"classname" "point_combat" -"targetname" "t30" -"wait" "10" -} -{ -"classname" "point_combat" -"spawnflags" "2048" -"origin" "-320 -1040 -760" -"targetname" "t31" -"wait" "10" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"origin" "-312 -1020 -742" -"spawnflags" "0" -"target" "t30" -"targetname" "t32" -} -{ -"model" "*138" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t29" -} -{ -"target" "t90" -"classname" "point_combat" -"targetname" "t25" -"origin" "-454 -734 -712" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"target" "t25" -"targetname" "t28" -"origin" "-452 -1024 -736" -} -{ -"classname" "point_combat" -"targetname" "t27" -"target" "t28" -"origin" "-560 -1032 -720" -} -{ -"spawnflags" "2048" -"classname" "point_combat" -"target" "t27" -"origin" "-552 -1264 -776" -"targetname" "t233" -} -{ -"item" "ammo_cells" -"classname" "monster_floater" -"target" "t26" -"targetname" "t29" -"angle" "180" -"spawnflags" "1" -"origin" "-324 -1072 -864" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"origin" "-360 -1184 -728" -"spawnflags" "1" -"item" "ammo_bullets" -"target" "t253" -"targetname" "BobnFred" -} -{ -"spawnflags" "769" -"origin" "-364 -1144 -728" -"angle" "180" -"classname" "monster_soldier_ss" -"targetname" "t11" -"target" "t31" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"origin" "-312 -1152 -728" -"spawnflags" "257" -"target" "t254" -"Targetname" "BobnFred" -"targetname" "BobnFred" -} -{ -"model" "*139" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t23" -} -{ -"pathtarget" "BobnFred" -"wait" "1" -"targetname" "t34" -"classname" "point_combat" -"origin" "-592 -1176 -804" -} -{ -"spawnflags" "2048" -"origin" "592 514 3972" -"targetname" "jimmy" -"classname" "info_notnull" -} -{ -"model" "*140" -"spawnflags" "2048" -"target" "t11" -"classname" "trigger_once" -} -{ -"origin" "-560 -1160 -792" -"classname" "monster_soldier_ss" -"target" "t22" -"targetname" "t23" -"spawnflags" "1" -"angle" "270" -"wait" ".5" -"delay" ".25" -} -{ -"origin" "-312 -1107 -728" -"targetname" "t11" -"angle" "90" -"classname" "monster_chick" -"spawnflags" "257" -} -{ -"target" "jimmy" -"origin" "586 516 352" -"targetname" "com5" -"classname" "target_laser" -"spawnflags" "2057" -} -{ -"target" "jimmy" -"origin" "596 516 352" -"targetname" "com4" -"classname" "target_laser" -"spawnflags" "2057" -} -{ -"target" "jimmy" -"origin" "596 508 352" -"targetname" "com3" -"classname" "target_laser" -"spawnflags" "2057" -} -{ -"target" "jimmy" -"origin" "592 512 350" -"targetname" "com7" -"classname" "target_laser" -"spawnflags" "2057" -} -{ -"target" "jimmy" -"origin" "586 508 352" -"targetname" "com6" -"spawnflags" "2057" -"classname" "target_laser" -} -{ -"model" "*141" -"classname" "func_wall" -"spawnflags" "2055" -"targetname" "pg1" -} -{ -"model" "*142" -"spawnflags" "2055" -"classname" "func_wall" -"targetname" "pg2" -} -{ -"light" "150" -"classname" "light" -"origin" "-456 696 160" -} -{ -"item" "item_silencer" -"angle" "45" -"classname" "monster_soldier_light" -"origin" "-507 -311 -72" -"spawnflags" "256" -} -{ -"classname" "monster_soldier_light" -"angle" "135" -"origin" "-413 -463 -87" -} -{ -"model" "*143" -"spawnflags" "2055" -"classname" "func_wall" -"targetname" "reddoor2" -} -{ -"model" "*144" -"classname" "func_wall" -"spawnflags" "2055" -"targetname" "reddoor1" -} -{ -"origin" "-48 168 -154" -"_color" "1.000000 0.830709 0.263780" -"light" "100" -"classname" "light" -} -{ -"origin" "-40 96 -122" -"_color" "1.000000 0.830709 0.263780" -"light" "100" -"classname" "light" -} -{ -"origin" "-40 16 -90" -"_color" "1.000000 0.830709 0.263780" -"light" "100" -"classname" "light" -} -{ -"origin" "-40 -56 -74" -"_color" "1.000000 0.830709 0.263780" -"light" "100" -"classname" "light" -} -{ -"origin" "-40 -128 -58" -"_color" "1.000000 0.830709 0.263780" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"_color" "1.000000 0.830709 0.263780" -"origin" "-56 280 -154" -} -{ -"model" "*145" -"classname" "func_wall" -"spawnflags" "2055" -"targetname" "pg2" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-168 -328 -568" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-168 -216 -568" -} -{ -"origin" "-392 -104 -568" -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -} -{ -"classname" "trigger_relay" -"targetname" "endplat" -"target" "city3X" -"delay" "0.3" -"origin" "192 1472 344" -} -{ -"_color" "1.000000 1.000000 0.850980" -"light" "150" -"classname" "light" -"origin" "168 -320 -424" -} -{ -"_color" "1.000000 1.000000 0.850980" -"light" "150" -"classname" "light" -"origin" "168 -320 -296" -} -{ -"_color" "1.000000 1.000000 0.850980" -"light" "150" -"classname" "light" -"origin" "168 -320 -104" -} -{ -"_color" "1.000000 1.000000 0.850980" -"light" "150" -"classname" "light" -"origin" "168 -320 24" -} -{ -"_color" "1.000000 1.000000 0.850980" -"light" "150" -"classname" "light" -"origin" "168 -320 152" -} -{ -"_color" "1.000000 1.000000 0.850980" -"light" "150" -"classname" "light" -"origin" "168 -320 280" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 1.000000 0.850980" -"origin" "168 -320 -600" -} -{ -"model" "*146" -"lip" "4" -"spawnflags" "2048" -"classname" "func_button" -"angle" "45" -"sounds" "2" -"target" "endsecret" -"wait" "-1" -} -{ -"model" "*147" -"spawnflags" "2048" -"_minlight" "0.1" -"classname" "func_door" -"angle" "90" -"targetname" "endsecret" -"wait" "-1" -"speed" "50" -"sounds" "4" -} -{ -"model" "*148" -"spawnflags" "2048" -"classname" "func_explosive" -"health" "25" -"dmg" "25" -} -{ -"classname" "light" -"light" "100" -"_style" "6" -"origin" "-1268 -396 -1044" -} -{ -"model" "*149" -"spawnflags" "2048" -"sounds" "4" -"lip" "4" -"angle" "180" -"target" "steps" -"_minlight" "0.9" -"classname" "func_button" -"wait" "-1" -} -{ -"map" "city2$city2XH" -"classname" "target_changelevel" -"targetname" "back_high" -"target" "city2XH" -"origin" "-392 -920 -40" -} -{ -"model" "*150" -"angle" "270" -"classname" "trigger_multiple" -"target" "back_high" -} -{ -"classname" "target_changelevel" -"targetname" "back_low" -"map" "city2$city2XL" -"origin" "-72 -1176 -856" -} -{ -"model" "*151" -"angle" "360" -"classname" "trigger_multiple" -"target" "back_low" -} -{ -"classname" "target_changelevel" -"map" "*boss1$bosstart" -"origin" "128 1392 460" -"targetname" "city3X" -"spawnflags" "1" -} -{ -"light" "150" -"origin" "-424 -584 -992" -"_color" "0.071429 0.444444 1.000000" -"classname" "light" -} -{ -"light" "150" -"origin" "-424 -440 -992" -"_color" "0.071429 0.444444 1.000000" -"classname" "light" -} -{ -"origin" "-48 -16 -26" -"_color" "1.000000 0.830709 0.263780" -"light" "150" -"classname" "light" -} -{ -"origin" "-48 176 -98" -"_color" "1.000000 0.830709 0.263780" -"light" "150" -"classname" "light" -} -{ -"origin" "-160 272 -130" -"classname" "light" -"light" "150" -"_color" "1.000000 0.830709 0.263780" -} -{ -"origin" "-240 -128 14" -"classname" "light" -"light" "150" -"_color" "1.000000 0.830709 0.263780" -} -{ -"origin" "-208 272 -130" -"_color" "1.000000 0.830709 0.263780" -"light" "150" -"classname" "light" -} -{ -"model" "*152" -"classname" "func_button" -"lip" "6" -"angle" "0" -"health" "1" -"target" "blastshield" -"delay" "0" -"wait" "1" -"sounds" "4" -"_minlight" "0.8" -"spawnflags" "2048" -} -{ -"model" "*153" -"classname" "func_door" -"spawnflags" "2049" -"targetname" "blastshield" -"lip" "-2" -"speed" "100" -"sounds" "2" -"wait" "3" -"delay" "0" -"angle" "-2" -} -{ -"model" "*154" -"classname" "func_door" -"spawnflags" "2049" -"lip" "24" -"dmg" "0" -"targetname" "endplat" -"angle" "-2" -} -{ -"light" "100" -"classname" "light" -"origin" "364 1592 364" -} -{ -"light" "100" -"classname" "light" -"origin" "364 1636 364" -} -{ -"light" "100" -"classname" "light" -"origin" "308 1636 364" -} -{ -"classname" "light" -"light" "100" -"origin" "308 1592 364" -} -{ -"model" "*155" -"classname" "func_button" -"angle" "45" -"_minlight" "0.2" -"lip" "2" -"sounds" "4" -"target" "endplat" -"spawnflags" "2048" -} -{ -"model" "*156" -"classname" "func_wall" -"_minlight" "0.2" -"spawnflags" "2048" -} -{ -"light" "80" -"classname" "light" -"origin" "424 1244 344" -"_color" "1.000000 0.388235 0.239216" -} -{ -"_color" "1.000000 0.388235 0.239216" -"origin" "336 1616 572" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.937255 0.705882" -"light" "150" -"classname" "light" -"origin" "-568 24 284" -} -{ -"classname" "light" -"light" "100" -"origin" "-568 -128 256" -} -{ -"model" "*157" -"team" "exit1" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*158" -"classname" "func_door" -"angle" "270" -"team" "exit1" -"sounds" "2" -} -{ -"model" "*159" -"sounds" "2" -"wait" "2" -"classname" "func_plat" -"_minlight" "0.2" -} -{ -"origin" "-488 -616 -600" -"classname" "light" -"light" "100" -} -{ -"origin" "-504 -632 -600" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-504 -864 -600" -} -{ -"light" "100" -"classname" "light" -"origin" "-488 -880 -600" -} -{ -"origin" "-408 -880 -600" -"classname" "light" -"light" "100" -} -{ -"origin" "-392 -864 -600" -"classname" "light" -"light" "100" -} -{ -"targetname" "gun3" -"origin" "112 664 -104" -"angle" "180" -"sounds" "1" -"classname" "target_splash" -} -{ -"origin" "-440 408 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-440 360 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-336 392 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-544 392 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-336 168 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-544 200 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-440 200 328" -"classname" "light" -"light" "100" -"_color" "1.000000 0.976471 0.501961" -} -{ -"origin" "-376 -232 -952" -"light" "120" -"classname" "light" -"_color" "1.000000 0.892430 0.294821" -} -{ -"origin" "-504 -232 -952" -"light" "125" -"classname" "light" -"_color" "1.000000 0.892430 0.294821" -} -{ -"origin" "-408 -232 -952" -"light" "120" -"classname" "light" -"_color" "1.000000 0.892430 0.294821" -} -{ -"origin" "-296 -232 -952" -"light" "120" -"classname" "light" -"_color" "1.000000 0.892430 0.294821" -} -{ -"_color" "1.000000 0.968627 0.725490" -"light" "80" -"classname" "light" -"origin" "-408 -840 120" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 0.968627 0.725490" -"origin" "-488 -840 120" -} -{ -"_color" "1.000000 0.968627 0.725490" -"light" "80" -"classname" "light" -"origin" "-488 -952 120" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 0.968627 0.725490" -"origin" "-408 -952 120" -} -{ -"_cone" "20" -"classname" "light" -"light" "300" -"_color" "1.000000 1.000000 1.000000" -"origin" "-448 -952 112" -"target" "t33" -} -{ -"model" "*160" -"angle" "-2" -"targetname" "step2" -"classname" "func_door" -"lip" "26" -"wait" "-1" -"sounds" "1" -} -{ -"model" "*161" -"angle" "-2" -"targetname" "step3" -"classname" "func_door" -"lip" "42" -"wait" "-1" -"sounds" "1" -} -{ -"model" "*162" -"angle" "-2" -"targetname" "step4" -"classname" "func_door" -"lip" "58" -"wait" "-1" -"sounds" "1" -} -{ -"model" "*163" -"angle" "-2" -"targetname" "step5" -"classname" "func_door" -"lip" "74" -"wait" "-1" -"sounds" "1" -} -{ -"model" "*164" -"angle" "-2" -"targetname" "step6" -"classname" "func_door" -"lip" "90" -"wait" "-1" -"sounds" "1" -} -{ -"model" "*165" -"angle" "-2" -"targetname" "step7" -"classname" "func_door" -"lip" "106" -"wait" "-1" -"sounds" "1" -} -{ -"model" "*166" -"sounds" "3" -"angle" "-2" -"wait" "-1" -"targetname" "step1" -"lip" "10" -"classname" "func_door" -} -{ -"classname" "light" -"_color" "0.071429 0.444444 1.000000" -"origin" "-962 -506 -992" -"light" "100" -} -{ -"classname" "light" -"_color" "0.071429 0.444444 1.000000" -"origin" "-832 -461 -994" -"light" "150" -} -{ -"origin" "-568 -128 -40" -"light" "100" -"classname" "light" -} -{ -"model" "*167" -"spawnflags" "2055" -"classname" "func_wall" -"targetname" "pg1" -} -{ -"light" "150" -"origin" "-1000 -456 -992" -"_color" "0.071429 0.444444 1.000000" -"classname" "light" -} -{ -"light" "100" -"origin" "-836 -510 -992" -"_color" "0.071429 0.444444 1.000000" -"classname" "light" -} -{ -"origin" "360 -320 294" -"classname" "light" -"_color" "1.000000 0.774704 0.304348" -"light" "125" -} -{ -"origin" "216 -440 -488" -"classname" "light" -"_color" "1.000000 0.976471 0.792157" -"light" "64" -} -{ -"origin" "232 -504 -504" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "-136 -504 -504" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "-136 -264 -504" -"classname" "light" -"_color" "1.000000 1.000000 0.949020" -"light" "100" -} -{ -"origin" "-120 -216 -544" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-136 -216 -568" -} -{ -"light" "64" -"_color" "1.000000 0.976471 0.792157" -"classname" "light" -"origin" "104 -440 -488" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-40 -216 -544" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "40 -216 -544" -} -{ -"origin" "-232 -328 -568" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "8 -104 -568" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "-112 -104 -568" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "-232 -104 -568" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "-232 -216 -568" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -} -{ -"origin" "-264 -216 -568" -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "110" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step2" -"delay" "0.2" -"origin" "-960 -532 -1004" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step3" -"delay" "0.4" -"origin" "-940 -532 -1004" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step4" -"delay" "0.6" -"origin" "-916 -532 -1004" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step5" -"delay" "0.8" -"origin" "-892 -532 -1004" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step6" -"delay" "1.0" -"origin" "-868 -532 -1004" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step7" -"delay" "1.2" -"origin" "-844 -532 -1004" -} -{ -"classname" "trigger_relay" -"targetname" "steps" -"target" "step1" -"origin" "-984 -532 -1004" -} -{ -"origin" "-128 -128 294" -"classname" "light" -"_color" "1.000000 0.774704 0.304348" -"light" "175" -} -{ -"origin" "-504 -216 -568" -"light" "110" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -} -{ -"origin" "-448 -834 -84" -"angle" "90" -"classname" "info_player_start" -"targetname" "city3NH" -} -{ -"light" "110" -"classname" "light" -"origin" "-336 -1272 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-352 -1256 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-320 -1256 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-336 -1240 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-336 -1072 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-352 -1056 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-320 -1056 -648" -} -{ -"light" "110" -"classname" "light" -"origin" "-336 -1040 -648" -} -{ -"style" "37" -"light" "200" -"classname" "light" -"origin" "-576 -1056 -648" -"spawnflags" "1" -"targetname" "t199" -} -{ -"light" "100" -"classname" "light" -"origin" "-408 -616 -600" -} -{ -"light" "100" -"classname" "light" -"origin" "-392 -632 -600" -} -{ -"classname" "light" -"light" "120" -"origin" "-544 -1256 -648" -} -{ -"classname" "light" -"light" "120" -"origin" "-560 -1240 -648" -} -{ -"classname" "light" -"light" "120" -"origin" "-576 -1256 -648" -} -{ -"classname" "light" -"light" "120" -"origin" "-560 -1272 -648" -"wait" ".5" -} -{ -"model" "*168" -"spawnflags" "2055" -"classname" "func_wall" -"targetname" "pg1" -} -{ -"light" "150" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "232 -320 294" -} -{ -"light" "150" -"_color" "1.000000 0.774704 0.304348" -"classname" "light" -"origin" "344 -168 294" -} -{ -"_color" "0.071429 0.444444 1.000000" -"classname" "light" -"origin" "-568 -440 -1000" -"light" "150" -} -{ -"classname" "light" -"_color" "0.071429 0.444444 1.000000" -"origin" "-568 -584 -1000" -"light" "150" -} -{ -"classname" "light" -"_color" "0.071429 0.444444 1.000000" -"origin" "-996 -564 -992" -"light" "150" -} -{ -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -"origin" "-264 -104 -568" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-600 -104 -568" -} -{ -"light" "110" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "-320 -216 -568" -} -{ -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "110" -"origin" "-392 -216 -568" -} -{ -"light" "100" -"_color" "0.602362 1.000000 0.555118" -"classname" "light" -"origin" "56 -184 -568" -} -{ -"classname" "light" -"_color" "0.602362 1.000000 0.555118" -"light" "100" -"origin" "-504 -104 -568" -} -{ -"origin" "-328 24 296" -"classname" "light" -"light" "100" -} -{ -"origin" "-568 -40 104" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.937255 0.705882" -"origin" "-568 24 -16" -"classname" "light" -"light" "150" -} -{ -"origin" "-328 -136 -24" -"light" "150" -"classname" "light" -} -{ -"light" "100" -"classname" "light" -"origin" "-328 24 -24" -} -{ -"origin" "-328 -72 104" -"light" "150" -"classname" "light" -} -{ -"light" "100" -"classname" "light" -"origin" "-328 24 104" -} -{ -"model" "*169" -"team" "big_red" -"sounds" "4" -"classname" "func_door" -"angle" "0" -"speed" "50" -"lip" "8" -} -{ -"model" "*170" -"team" "big_red" -"lip" "8" -"speed" "50" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*171" -"origin" "372 1536 280" -"team" "grandexit" -"targetname" "t2" -"classname" "func_door_rotating" -"speed" "33" -"distance" "95" -"wait" "-1" -"angle" "-2" -"spawnflags" "68" -} -{ -"classname" "light" -"origin" "-200 1424 380" -"light" "200" -} -{ -"classname" "light" -"origin" "-136 1216 376" -"light" "200" -} -{ -"light" "80" -"classname" "light" -"origin" "48 1240 344" -"_color" "1.000000 0.388235 0.239216" -} -{ -"light" "150" -"classname" "light" -"origin" "152 728 -128" -} -{ -"model" "*172" -"delay" ".25" -"angle" "0" -"speed" "500" -"wait" ".25" -"lip" "6" -"classname" "func_door" -"targetname" "gun1" -"spawnflags" "2048" -"sounds" "2" -} -{ -"model" "*173" -"delay" ".25" -"angle" "0" -"speed" "500" -"wait" ".25" -"lip" "6" -"classname" "func_door" -"targetname" "gun2" -"spawnflags" "2048" -"sounds" "2" -} -{ -"model" "*174" -"classname" "func_door" -"lip" "6" -"wait" ".25" -"speed" "500" -"angle" "0" -"delay" ".25" -"targetname" "gun4" -"spawnflags" "2048" -"sounds" "2" -} -{ -"classname" "light" -"light" "150" -"origin" "152 616 -128" -} -{ -"origin" "112 664 -104" -"angle" "180" -"targetname" "gun3" -"classname" "target_blaster" -"dmg" "15" -} -{ -"angle" "180" -"origin" "112 688 -104" -"targetname" "gun2" -"classname" "target_blaster" -"dmg" "15" -} -{ -"origin" "112 712 -104" -"angle" "180" -"targetname" "gun1" -"classname" "target_blaster" -"dmg" "15" -} -{ -"classname" "target_blaster" -"angle" "180" -"targetname" "gun4" -"origin" "112 640 -104" -"dmg" "15" -} -{ -"model" "*175" -"spawnflags" "2048" -"delay" ".25" -"angle" "0" -"speed" "500" -"wait" ".25" -"lip" "6" -"classname" "func_door" -"targetname" "gun3" -"sounds" "2" -} -{ -"classname" "target_splash" -"sounds" "1" -"angle" "270" -"targetname" "gun4" -"origin" "112 640 -104" -} -{ -"angle" "180" -"sounds" "1" -"classname" "target_splash" -"targetname" "gun1" -"origin" "112 712 -104" -} -{ -"angle" "180" -"sounds" "1" -"classname" "target_splash" -"targetname" "gun2" -"origin" "112 688 -104" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun4" -"delay" ".8" -"origin" "40 680 24" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun3" -"delay" ".6" -"origin" "40 704 24" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun2" -"delay" ".4" -"origin" "40 728 24" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"targetname" "trap_gun" -"target" "gun1" -"delay" ".2" -"origin" "40 752 24" -"spawnflags" "2048" -} -{ -"model" "*176" -"classname" "trigger_multiple" -"wait" ".8" -"delay" ".5" -"target" "trap_gun" -"spawnflags" "2048" -} -{ -"model" "*177" -"team" "door8" -"sounds" "0" -"speed" "200" -"wait" "-1" -"angle" "-1" -"classname" "func_door" -"lip" "8" -"targetname" "trap_gun" -"spawnflags" "2048" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "696 272 295" -} -{ -"origin" "472 263 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"origin" "353 381 295" -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -} -{ -"origin" "426 759 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "533 801 295" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "484 780 295" -} -{ -"origin" "824 360 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"origin" "872 453 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "852 408 295" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "878 569 295" -} -{ -"origin" "836 670 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"origin" "857 619 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"origin" "754 756 295" -"classname" "light" -"light" "200" -"_color" "0.501961 0.501961 1.000000" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "648 797 295" -} -{ -"_color" "0.501961 0.501961 1.000000" -"light" "200" -"classname" "light" -"origin" "700 779 295" -} -{ -"model" "*178" -"spawnflags" "2048" -"classname" "func_button" -"angle" "180" -"wait" "-1" -"lip" "16" -} -{ -"classname" "trigger_relay" -"targetname" "t1" -"delay" "1" -"target" "t2" -"origin" "128 1404 268" -} -{ -"origin" "-1651 -532 -1104" -"classname" "light" -"light" "64" -} -{ -"origin" "-1635 -588 -1056" -"light" "64" -"classname" "light" -} -{ -"model" "*179" -"_minlight" "0.2" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*180" -"_minlight" "0.2" -"spawnflags" "2048" -"classname" "func_button" -"angle" "180" -"target" "a108" -"wait" "5" -"lip" "16" -} -{ -"classname" "light" -"light" "64" -"origin" "-1603 -556 -1104" -} -{ -"light" "64" -"classname" "light" -"origin" "-1603 -532 -1104" -} -{ -"spawnflags" "2048" -"classname" "item_ancient_head" -"origin" "-1632 -415 -1076" -"target" "t304" -} -{ -"classname" "light" -"origin" "-1464 -596 -1088" -"light" "175" -} -{ -"style" "38" -"_cone" "20" -"origin" "-1616 -416 -1088" -"targetname" "a6" -"light" "300" -"target" "a5" -"classname" "light" -"_color" "0.124498 1.000000 0.000000" -"spawnflags" "2048" -} -{ -"origin" "-1632 -416 -1036" -"targetname" "a5" -"classname" "info_notnull" -"spawnflags" "2048" -} -{ -"light" "76" -"origin" "-1584 -392 -1120" -"classname" "light" -} -{ -"light" "76" -"origin" "-1584 -440 -1120" -"classname" "light" -} -{ -"light" "76" -"origin" "-1584 -416 -1120" -"classname" "light" -} -{ -"model" "*181" -"spawnflags" "2048" -"targetname" "a_water" -"sounds" "1" -"speed" "10" -"angle" "-2" -"classname" "func_water" -} -{ -"model" "*182" -"targetname" "a134" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"spawnflags" "2048" -"origin" "-1524 -488 -1048" -"target" "a_water" -"targetname" "a108" -"classname" "trigger_relay" -} -{ -"targetname" "a134" -"origin" "-1632 -416 -1080" -"noise" "world/force1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1556 -424 -1058" -"volume" ".8" -"attenuation" "2" -"noise" "world/brkglas.wav" -"targetname" "a132" -"classname" "target_speaker" -"spawnflags" "2048" -} -{ -"model" "*183" -"spawnflags" "2048" -"target" "a132" -"health" "10" -"mass" "200" -"dmg" "0" -"classname" "func_explosive" -} -{ -"origin" "-1592 -440 -1068" -"attenuation" "1" -"volume" "0.6" -"noise" "world/bubbl4.wav" -"targetname" "a133" -"classname" "target_speaker" -"spawnflags" "2048" -} -{ -"targetname" "a_water" -"origin" "-1592 -408 -1064" -"noise" "world/bubl2.wav" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"targetname" "a_water" -"origin" "-1528 -392 -1064" -"wait" "5" -"random" "3" -"spawnflags" "2049" -"target" "a133" -"classname" "func_timer" -} -{ -"spawnflags" "2048" -"origin" "-1592 -504 -1080" -"target" "a134" -"targetname" "a108" -"item" "key_red_key" -"classname" "trigger_key" -} -{ -"spawnflags" "2048" -"origin" "-1560 -392 -1064" -"targetname" "a132" -"killtarget" "a_water" -"classname" "trigger_relay" -} -{ -"origin" "-1628 -620 -1096" -"classname" "item_enviro" -"team" "head" -} -{ -"classname" "target_speaker" -"origin" "-416 -400 -600" -"spawnflags" "2048" -"noise" "world/v_fac3.wav" -"attenuation" "-1" -"volume" "0.7" -"targetname" "t300" -} -{ -"classname" "target_speaker" -"targetname" "t298" -"origin" "-448 -400 -600" -"spawnflags" "2048" -"noise" "world/v_cit2.wav" -"attenuation" "-1" -"volume" "0.7" -} -{ -"classname" "target_speaker" -"targetname" "t299" -"origin" "-472 -400 -600" -"spawnflags" "2048" -"noise" "world/voice7.wav" -"attenuation" "-1" -"volume" "0.7" -} -{ -"classname" "func_timer" -"target" "t299" -"attenuation" "-1" -"random" "60" -"wait" "180" -"targetname" "t89" -"origin" "-472 -368 -600" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"target" "t298" -"attenuation" "-1" -"random" "20" -"wait" "200" -"targetname" "t89" -"origin" "-448 -368 -600" -"spawnflags" "2048" -} -{ -"classname" "func_timer" -"attenuation" "-1" -"random" "100" -"wait" "400" -"origin" "-416 -368 -600" -"spawnflags" "2048" -"target" "t300" -} -{ -"classname" "target_spawner" -"origin" "-1612 -428 -1068" -"target" "item_adrenaline" -"spawnflags" "2048" -"targetname" "t306" -} -{ -"origin" "-1612 -428 -1068" -"classname" "target_spawner" -"target" "item_adrenaline" -"spawnflags" "2048" -"targetname" "t304" -} -{ -"origin" "-1612 -404 -1068" -"classname" "target_spawner" -"target" "item_adrenaline" -"spawnflags" "2048" -"targetname" "t305" -} -{ -"classname" "target_spawner" -"origin" "-1612 -404 -1068" -"target" "item_adrenaline" -"spawnflags" "2048" -"targetname" "t307" -} -{ -"delay" ".05" -"origin" "-1592 -456 -1080" -"classname" "trigger_relay" -"targetname" "t304" -"spawnflags" "2048" -"target" "t305" -} -{ -"delay" ".1" -"origin" "-1584 -424 -1080" -"classname" "trigger_relay" -"targetname" "t304" -"spawnflags" "2048" -"target" "t306" -} -{ -"delay" ".15" -"origin" "-1588 -396 -1080" -"classname" "trigger_relay" -"targetname" "t304" -"spawnflags" "2048" -"target" "t307" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/cool1@0250.ent b/stuff/mapfixes/baseq2/cool1@0250.ent deleted file mode 100644 index d740d5fc7..000000000 --- a/stuff/mapfixes/baseq2/cool1@0250.ent +++ /dev/null @@ -1,4751 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed monster_gladiator (810) in box being inaccessible on Medium -// -// This gladiator spawns on Medium and above but the trigger_once (784) -// that blows up the box is only spawned on Hard and above, making the -// monster count off by 1 on Medium. I changed the gladiator's spawnflags -// from 259 to 771 to fix this inconsistency. -{ -"sky" "unit6_" -"classname" "worldspawn" -"message" "Cooling Facility" -"sounds" "5" -"nextmap" "waste1" -} -{ -"origin" "-192 -1704 -112" -"light" "150" -"classname" "light" -} -{ -"model" "*1" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "404 -624 16" -"spawnflags" "4" -"target" "t188" -"classname" "target_crosslevel_target" -} -{ -"model" "*2" -"targetname" "t188" -"classname" "func_explosive" -} -{ -"origin" "720 -932 68" -"classname" "light" -"light" "120" -} -{ -"origin" "732 -820 68" -"classname" "light" -"light" "120" -} -{ -"origin" "892 -940 68" -"light" "80" -"classname" "light" -} -{ -"model" "*3" -"message" "Design is law." -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "812 -896 68" -"light" "120" -"classname" "light" -} -{ -"model" "*4" -"dmg" "10" -"health" "10" -"classname" "func_explosive" -} -{ -"model" "*5" -"team" "td1" -"_minlight" ".18" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*6" -"classname" "trigger_once" -"killtarget" "prevent" -"spawnflags" "2048" -} -{ -"model" "*7" -"classname" "func_wall" -"targetname" "prevent" -"spawnflags" "2048" -} -{ -"targetname" "cool1b" -"origin" "-1496 -1308 24" -"classname" "info_player_coop" -"angle" "90" -} -{ -"targetname" "cool1b" -"origin" "-1652 -1208 24" -"classname" "info_player_coop" -"angle" "45" -} -{ -"targetname" "cool1b" -"origin" "-1388 -1308 24" -"angle" "90" -"classname" "info_player_coop" -} -{ -"origin" "-960 828 -388" -"classname" "light" -"light" "120" -"_color" "1.000000 0.931193 0.064220" -} -{ -"origin" "-1144 844 -388" -"classname" "light" -"light" "120" -"_color" "1.000000 0.931193 0.064220" -} -{ -"origin" "-1124 988 -388" -"classname" "light" -"light" "120" -"_color" "1.000000 0.931193 0.064220" -} -{ -"origin" "-980 988 -388" -"classname" "light" -"light" "120" -"_color" "1.000000 0.931193 0.064220" -} -{ -"origin" "-960 616 -388" -"_color" "1.000000 0.931193 0.064220" -"light" "120" -"classname" "light" -} -{ -"classname" "item_armor_shard" -"origin" "-1328 -1752 -728" -"spawnflags" "2048" -} -{ -"model" "*8" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "408 -264 24" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-2024 -128 -296" -"target" "t186" -"spawnflags" "1792" -"classname" "misc_teleporter" -} -{ -"origin" "-2432 -544 -960" -"targetname" "t186" -"spawnflags" "1792" -"angle" "270" -"classname" "misc_teleporter_dest" -} -{ -"targetname" "t187" -"origin" "-408 -80 24" -"spawnflags" "1792" -"angle" "0" -"classname" "misc_teleporter_dest" -} -{ -"model" "*9" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"target" "t187" -"origin" "-24 552 -360" -"classname" "misc_teleporter" -} -{ -"origin" "-80 888 -160" -"spawnflags" "1792" -"classname" "item_health_large" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "336 -1568 -452" -} -{ -"origin" "260 -1344 -216" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "220 -1344 -216" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "300 -1344 -216" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "312 -1500 -216" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "92 -1676 -452" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "92 -1636 -452" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "92 -1596 -452" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "92 -1716 -452" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-448 -1576 -256" -"classname" "ammo_cells" -"spawnflags" "1792" -} -{ -"origin" "-492 -1464 -244" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-416 -1516 -216" -"target" "t1" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "-440 -1496 -228" -"target" "t80" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "88 -1240 -216" -"spawnflags" "2048" -"classname" "ammo_shells" -} -{ -"origin" "64 -1364 -216" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "80 -1320 -216" -"spawnflags" "2048" -"classname" "ammo_bullets" -} -{ -"origin" "-156 -1288 -456" -"classname" "item_health" -} -{ -"origin" "-196 -1288 -456" -"classname" "item_health" -} -{ -"model" "*10" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*11" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "136 -1332 -228" -"spawnflags" "1792" -"target" "t185" -"classname" "trigger_always" -} -{ -"model" "*12" -"wait" "-1" -"targetname" "t185" -"target" "t182" -"angle" "-1" -"spawnflags" "8" -"classname" "func_door" -} -{ -"origin" "-148 -1588 -460" -"target" "t184" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*13" -"wait" "-1" -"targetname" "t184" -"target" "t183" -"spawnflags" "8" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*14" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*15" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"style" "1" -"targetname" "t183" -"classname" "func_areaportal" -} -{ -"style" "2" -"targetname" "t182" -"classname" "func_areaportal" -} -{ -"model" "*16" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"target" "t181" -"targetname" "t180" -"classname" "path_corner" -"origin" "-472 -1620 -448" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-332 -1636 -396" -} -{ -"classname" "item_armor_jacket" -"spawnflags" "1792" -"origin" "-1648 -456 -288" -} -{ -"model" "*17" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"classname" "ammo_shells" -"origin" "-2232 -588 -960" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-2272 -588 -960" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1716 104 -840" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-1752 104 -840" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "-1836 -136 -392" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"origin" "-1640 -1044 32" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-1640 -1008 32" -} -{ -"model" "*18" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "-76 -764 -216" -} -{ -"origin" "-520 1208 -88" -"classname" "light" -"light" "250" -} -{ -"origin" "-676 1164 -88" -"classname" "light" -"light" "250" -} -{ -"origin" "-812 840 -156" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-812 1136 -156" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-368 -808 -212" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-312 -1564 -448" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "-640 -1568 -340" -"_color" "1.000000 1.000000 0.000000" -"light" "120" -"classname" "light" -} -{ -"origin" "-604 -1664 -340" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "-576 -1568 -340" -"_color" "1.000000 1.000000 0.000000" -"light" "120" -"classname" "light" -} -{ -"origin" "-876 -1740 -648" -"classname" "light" -"light" "120" -} -{ -"origin" "-808 -1740 -648" -"light" "120" -"classname" "light" -} -{ -"model" "*19" -"target" "t179" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"model" "*20" -"origin" "-500 -1572 -704" -"targetname" "t179" -"distance" "180" -"wait" "-1" -"target" "t33" -"spawnflags" "2120" -"classname" "func_door_rotating" -} -{ -"model" "*21" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-2272 -548 -956" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-2232 -548 -956" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-2464 -1032 -952" -} -{ -"classname" "item_health_small" -"spawnflags" "1792" -"origin" "-2464 -1072 -952" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-1924 -648 -928" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-1924 -608 -928" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-1924 -568 -928" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-1924 -688 -928" -} -{ -"classname" "item_armor_body" -"spawnflags" "1792" -"origin" "-1504 -1316 -868" -} -{ -"classname" "weapon_rocketlauncher" -"spawnflags" "1792" -"origin" "-1728 -700 -728" -} -{ -"spawnflags" "1792" -"classname" "item_health" -"origin" "-948 -1500 -732" -} -{ -"classname" "item_health" -"spawnflags" "1792" -"origin" "-988 -1500 -732" -} -{ -"classname" "weapon_supershotgun" -"spawnflags" "1792" -"origin" "-1056 -1988 -724" -} -{ -"spawnflags" "2048" -"classname" "ammo_grenades" -"origin" "-984 -2016 -788" -} -{ -"classname" "ammo_grenades" -"spawnflags" "2048" -"origin" "-944 -2016 -788" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-1240 -2020 -728" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-1240 -1984 -728" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-1240 -1948 -728" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-888 -1984 -728" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-888 -1948 -728" -} -{ -"classname" "item_health_small" -"spawnflags" "1792" -"origin" "-888 -2020 -728" -} -{ -"classname" "item_armor_combat" -"spawnflags" "1792" -"origin" "-604 -1572 -424" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-736 -1320 -272" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-776 -1344 -272" -} -{ -"origin" "-1712 52 -1252" -"spawnflags" "1792" -"classname" "item_health_mega" -} -{ -"origin" "816 -532 12" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"origin" "816 -568 12" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "816 -760 16" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "884 -616 20" -"spawnflags" "1792" -"team" "pow" -"classname" "item_quad" -} -{ -"origin" "884 -616 12" -"spawnflags" "1792" -"team" "pow" -"classname" "item_invulnerability" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "340 -224 16" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-56 -592 24" -} -{ -"classname" "weapon_chaingun" -"spawnflags" "1792" -"origin" "-56 -552 24" -} -{ -"classname" "weapon_supershotgun" -"spawnflags" "1792" -"origin" "-220 1152 -136" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-384 1256 -160" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-344 1256 -160" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-1104 640 -280" -} -{ -"classname" "ammo_cells" -"origin" "-984 544 -432" -} -{ -"classname" "weapon_bfg" -"spawnflags" "1792" -"origin" "-1144 800 -424" -} -{ -"origin" "-1144 672 -280" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-1832 -16 -264" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-1760 -16 -264" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"model" "*22" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t33" -"origin" "-744 -1656 -648" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t173" -"origin" "-1464 -168 -304" -} -{ -"origin" "-96 680 -152" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1088 -456 -296" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-416 336 -848" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-968 -972 -724" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1768 -1496 -724" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "-160 -1336 -452" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-104 -616 -208" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "320 -296 24" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-424 1208 -152" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1840 -480 -296" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1224 -1376 24" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-608 -1296 -688" -"spawnflags" "2816" -"classname" "item_health" -} -{ -"origin" "-608 -1376 -632" -"spawnflags" "2816" -"classname" "item_health_large" -} -{ -"origin" "-1440 -1528 80" -"light" "130" -"classname" "light" -} -{ -"model" "*23" -"target" "t178" -"targetname" "t177" -"spawnflags" "2820" -"classname" "trigger_once" -} -{ -"origin" "-272 232 40" -"target" "t177" -"targetname" "t176" -"classname" "trigger_relay" -} -{ -"origin" "-248 192 40" -"spawnflags" "256" -"target" "t176" -"targetname" "t133" -"classname" "trigger_relay" -} -{ -"origin" "-304 752 -64" -"spawnflags" "256" -"targetname" "t175" -"classname" "target_explosion" -} -{ -"origin" "-384 832 -136" -"targetname" "t176" -"spawnflags" "771" -"angle" "315" -"classname" "monster_gladiator" -} -{ -"model" "*24" -"spawnflags" "2048" -"targetname" "t178" -"target" "t175" -"mass" "400" -"dmg" "5" -"classname" "func_explosive" -} -{ -"model" "*25" -"target" "t174" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "100" -"origin" "-2056 -88 -206" -} -{ -"classname" "light" -"light" "130" -"origin" "-2024 -128 -296" -} -{ -"classname" "light" -"light" "100" -"origin" "-1440 -280 -296" -} -{ -"classname" "target_goal" -"targetname" "t173" -"origin" "-2012 -104 -296" -"spawnflags" "2048" -} -{ -"model" "*26" -"target" "t173" -"speed" "150" -"wait" "-1" -"angle" "180" -"classname" "func_button" -"spawnflags" "2048" -} -{ -"style" "3" -"targetname" "t172" -"classname" "func_areaportal" -} -{ -"model" "*27" -"_minlight" ".2" -"angle" "270" -"lip" "132" -"targetname" "t173" -"target" "t172" -"classname" "func_door" -"speed" "40" -"wait" "-1" -} -{ -"origin" "-416 -1344 -548" -"targetname" "t157" -"noise" "world/explod1.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "2048" -"origin" "-780 -1324 -272" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-780 -1364 -272" -"classname" "item_health" -} -{ -"model" "*28" -"target" "t144" -"targetname" "ho1" -"spawnflags" "2052" -"classname" "trigger_once" -} -{ -"classname" "info_player_intermission" -"angles" "23 310 0" -"origin" "-1784 56 104" -} -{ -"origin" "-1872 -552 -296" -"classname" "ammo_shells" -} -{ -"origin" "-1872 -512 -296" -"classname" "ammo_shells" -} -{ -"spawnflags" "0" -"origin" "152 -1092 20" -"classname" "item_armor_shard" -} -{ -"spawnflags" "0" -"origin" "152 -1048 20" -"classname" "item_armor_shard" -} -{ -"spawnflags" "2048" -"origin" "-364 -600 -216" -"classname" "item_health_large" -} -{ -"origin" "-1936 -208 -1208" -"classname" "light" -"light" "120" -} -{ -"origin" "-1872 -184 -1208" -"classname" "light" -"light" "120" -} -{ -"origin" "-1936 -216 -1152" -"light" "120" -"classname" "light" -} -{ -"spawnflags" "2048" -"origin" "-1408 -1720 -720" -"classname" "ammo_slugs" -} -{ -"origin" "48 -1376 -232" -"angle" "45" -"spawnflags" "2050" -"classname" "misc_deadsoldier" -} -{ -"origin" "-604 -1572 -596" -"targetname" "t33" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "2" -} -{ -"origin" "-604 -1572 -532" -"targetname" "t33" -"spawnflags" "2" -"noise" "world/pump1.wav" -"classname" "target_speaker" -} -{ -"origin" "-604 -1572 -560" -"targetname" "t33" -"spawnflags" "2" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "2048" -"origin" "-1640 -948 28" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"origin" "-1240 -948 28" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"origin" "-424 -64 24" -"classname" "ammo_bullets" -} -{ -"spawnflags" "2048" -"origin" "-64 -656 20" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-64 -696 20" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-72 -756 -212" -"classname" "ammo_grenades" -} -{ -"light" "140" -"origin" "-272 -1740 -436" -"classname" "light" -} -{ -"spawnflags" "2048" -"origin" "-1304 -1704 -728" -"classname" "item_armor_shard" -} -{ -"origin" "-1392 -1700 -744" -"angle" "270" -"spawnflags" "2056" -"classname" "misc_deadsoldier" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "-416 -1820 -716" -} -{ -"spawnflags" "2048" -"origin" "-416 -1856 -716" -"classname" "item_health" -} -{ -"light" "140" -"classname" "light" -"origin" "-1648 -1248 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1500 -1260 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1244 -1260 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1184 -1144 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1188 -896 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1248 -776 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1416 -776 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1568 -776 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1620 -852 -1084" -} -{ -"light" "140" -"classname" "light" -"origin" "-1644 -992 -1084" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-220 960 -172" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-220 724 -172" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-220 544 -124" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-220 296 -8" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-180 84 -8" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "76 84 -8" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "120 -120 -8" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-52 -200 -8" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-296 -200 -8" -} -{ -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -"origin" "-844 208 -876" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "45" -"origin" "-324 -776 -236" -} -{ -"model" "*29" -"speed" "200" -"wait" "-1" -"target" "t1" -"angle" "270" -"classname" "func_button" -"spawnflags" "2048" -} -{ -"style" "4" -"classname" "func_areaportal" -"targetname" "t109" -} -{ -"style" "5" -"classname" "func_areaportal" -"targetname" "t171" -} -{ -"model" "*30" -"_minlight" ".18" -"classname" "func_door" -"angle" "-1" -"spawnflags" "8" -"target" "t171" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-812 840 -156" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-812 1136 -156" -} -{ -"origin" "-960 524 -408" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"target" "t169" -"wait" "10" -"random" "8" -"spawnflags" "1" -"classname" "func_timer" -"origin" "-960 628 -356" -} -{ -"target" "t170" -"wait" "16" -"random" "5" -"origin" "-1144 824 -368" -"classname" "func_timer" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-428 604 -352" -} -{ -"targetname" "t170" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "-1152 892 -368" -} -{ -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "-960 992 -408" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-1024 988 -336" -} -{ -"targetname" "kill1" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-912 988 -336" -} -{ -"volume" ".5" -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -"origin" "-1036 988 -176" -} -{ -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "116 84 48" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "284 -128 48" -} -{ -"origin" "-220 272 48" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -} -{ -"origin" "332 -184 116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "332 -448 -16" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "52 -448 -16" -} -{ -"origin" "352 -704 -16" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "188 -704 -16" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "188 -736 32" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"origin" "88 -636 116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-376 -168 116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-224 -428 116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-148 -436 -16" -} -{ -"origin" "-224 -636 116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-52 -128 48" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "68 -1120 116" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-220 -916 -28" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-164 -1116 -28" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "92 -1116 -28" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "92 -1116 -168" -} -{ -"origin" "88 -428 116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "148 -1112 -168" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "88 -1344 -168" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-120 -1344 -168" -} -{ -"origin" "-104 -1116 -168" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-340 -1344 -168" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-272 -1752 -376" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-896 -1740 -676" -} -{ -"killtarget" "kill1" -"origin" "-324 -1724 -424" -"target" "t168" -"targetname" "t1" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"targetname" "t168" -"origin" "-708 -1712 -376" -"spawnflags" "2" -"noise" "world/amb12.wav" -"classname" "target_speaker" -} -{ -"targetname" "t168" -"origin" "-496 -1716 -376" -"spawnflags" "2" -"noise" "world/amb12.wav" -"classname" "target_speaker" -} -{ -"targetname" "t168" -"classname" "target_speaker" -"noise" "world/amb12.wav" -"spawnflags" "2" -"origin" "-496 -1432 -376" -} -{ -"targetname" "t168" -"origin" "-712 -1432 -376" -"spawnflags" "2" -"noise" "world/amb12.wav" -"classname" "target_speaker" -} -{ -"targetname" "t168" -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2" -"origin" "-712 -1432 -456" -} -{ -"targetname" "t168" -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2" -"origin" "-708 -1712 -456" -} -{ -"targetname" "t168" -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2" -"origin" "-496 -1716 -456" -} -{ -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -"origin" "-28 -1344 -220" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-272 -1752 -400" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-256 -1252 -400" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-400 -1256 -688" -} -{ -"origin" "-704 -1904 -688" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"origin" "-604 -1792 -656" -} -{ -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"origin" "-604 -1816 -656" -} -{ -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "-512 -1904 -688" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-816 -1264 -704" -} -{ -"targetname" "t168" -"origin" "-496 -1432 -456" -"spawnflags" "2" -"noise" "world/force1.wav" -"classname" "target_speaker" -} -{ -"origin" "-340 -1344 -676" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1176 -1948 -676" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1196 -1720 -676" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-940 -1948 -676" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1056 -2100 -744" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-1176 -2100 -744" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-1064 -1932 -688" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-604 -1704 -656" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -} -{ -"origin" "-1392 -1680 -676" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1388 -1520 -676" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1080 -1108 -676" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1276 -1344 -676" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1716 -1176 -676" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-932 -2100 -744" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1680 -1296 -816" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1132 -728 -816" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1424 -720 -816" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1680 -720 -816" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1716 -816 -676" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1132 -1296 -816" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -"origin" "-2284 -1032 -928" -} -{ -"origin" "-2472 -688 -956" -"target" "t166" -"spawnflags" "1" -"classname" "func_timer" -"random" "4" -"wait" "12" -} -{ -"origin" "-2472 -824 -956" -"target" "t165" -"spawnflags" "1" -"classname" "func_timer" -"random" "4" -"wait" "9" -} -{ -"origin" "-2472 -544 -956" -"target" "t167" -"spawnflags" "1" -"wait" "11" -"random" "8" -"classname" "func_timer" -} -{ -"targetname" "t166" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/steam1.wav" -"origin" "-2500 -688 -956" -} -{ -"targetname" "t165" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/steam1.wav" -"origin" "-2500 -824 -956" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb14.wav" -"origin" "-2332 -724 -912" -} -{ -"targetname" "t167" -"origin" "-2500 -544 -956" -"noise" "world/steam1.wav" -"spawnflags" "0" -"classname" "target_speaker" -} -{ -"origin" "-1868 -704 -912" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2368 -1140 -912" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2028 -996 -980" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2056 -684 -928" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2056 -400 -928" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1980 208 -800" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2172 -96 -1120" -"target" "t163" -"classname" "func_timer" -"spawnflags" "1" -"random" "4" -"wait" "13" -} -{ -"origin" "-2172 -224 -1120" -"target" "t162" -"classname" "func_timer" -"spawnflags" "1" -"random" "6" -"wait" "15" -} -{ -"origin" "-2172 32 -1120" -"target" "t164" -"wait" "12" -"random" "7" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"targetname" "t163" -"origin" "-2192 -96 -1120" -"noise" "world/steam1.wav" -"spawnflags" "0" -"classname" "target_speaker" -} -{ -"targetname" "t162" -"origin" "-2192 -224 -1120" -"noise" "world/steam1.wav" -"spawnflags" "0" -"classname" "target_speaker" -} -{ -"origin" "-2052 -252 -1128" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2064 -196 -1164" -"target" "t161" -"classname" "func_timer" -"wait" "12" -"random" "3" -"spawnflags" "1" -} -{ -"targetname" "t161" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/drip2.wav" -"origin" "-2040 -196 -1164" -} -{ -"origin" "-1948 -192 -1116" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"targetname" "t160" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/drip1.wav" -"origin" "-2044 -8 -1116" -} -{ -"targetname" "t164" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/steam1.wav" -"origin" "-2192 32 -1120" -} -{ -"origin" "-2068 -8 -1116" -"target" "t160" -"spawnflags" "1" -"wait" "8" -"random" "4" -"classname" "func_timer" -} -{ -"origin" "-1724 108 -1204" -"target" "t159" -"spawnflags" "1" -"random" "3" -"wait" "12" -"classname" "func_timer" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb14.wav" -"origin" "-2332 -1012 -912" -} -{ -"targetname" "t159" -"origin" "-1700 108 -1204" -"noise" "world/drip2.wav" -"spawnflags" "0" -"classname" "target_speaker" -} -{ -"origin" "-896 208 -800" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1192 208 -800" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1532 208 -800" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1564 -16 -628" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1568 -192 -488" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1300 -192 -488" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "-1296 -16 -628" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-504 212 -636" -"noise" "world/pump3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-356 352 -800" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-2072 236 -800" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-504 212 -796" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/pump3.wav" -} -{ -"origin" "-356 96 -800" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-220 704 -44" -} -{ -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-256 984 -44" -} -{ -"volume" ".2" -"origin" "20 1056 -140" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"origin" "-220 1220 -44" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"origin" "-432 984 -44" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-608 984 -44" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-788 984 -116" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"origin" "-836 984 -176" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"targetname" "t169" -"origin" "-960 608 -356" -"spawnflags" "0" -"noise" "world/drip1.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"origin" "-1144 804 -176" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"origin" "-1292 688 -176" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"origin" "-1444 632 -176" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"origin" "-1444 460 -176" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"origin" "-1444 336 -144" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"origin" "-1444 196 -256" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"origin" "-1116 48 -256" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"origin" "-1828 48 -256" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"origin" "-1672 -320 -256" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-24 832 -140" -} -{ -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-1440 -216 -172" -} -{ -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-1440 -412 -172" -} -{ -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-1440 -608 -172" -} -{ -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1444 -812 -172" -} -{ -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1444 -932 -92" -} -{ -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1444 -932 224" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1340 -1040 168" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1712 -992 88" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1548 -1304 168" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-1548 -1304 24" -} -{ -"origin" "-1548 -1040 24" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-1340 -1040 24" -} -{ -"origin" "-1340 -1304 24" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1548 -1040 168" -} -{ -"origin" "-1176 -992 88" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1340 -1304 168" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1444 -1600 128" -} -{ -"volume" ".2" -"origin" "-1216 -320 -256" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "item_health_small" -"origin" "-872 1016 -420" -"spawnflags" "2048" -} -{ -"classname" "item_health_small" -"origin" "-872 952 -420" -"spawnflags" "2048" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "420 -64 24" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "420 -100 24" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2056" -"angle" "180" -"origin" "-296 -1360 -752" -} -{ -"spawnflags" "2048" -"classname" "item_quad" -"origin" "-276 -1376 -724" -} -{ -"spawnflags" "0" -"classname" "item_armor_shard" -"origin" "152 -1180 20" -} -{ -"classname" "misc_deadsoldier" -"angle" "45" -"spawnflags" "2050" -"origin" "-236 -1304 -476" -} -{ -"style" "6" -"classname" "func_areaportal" -"targetname" "t157" -} -{ -"classname" "target_secret" -"message" "You have found a secret." -"targetname" "t158" -"origin" "-352 -1328 -712" -} -{ -"model" "*31" -"classname" "trigger_once" -"target" "t158" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "-416 -1892 -716" -} -{ -"delay" ".3" -"dmg" "10" -"classname" "target_explosion" -"targetname" "t157" -"origin" "-392 -1318 -648" -} -{ -"classname" "target_explosion" -"dmg" "10" -"delay" ".6" -"targetname" "t157" -"origin" "-400 -1374 -696" -} -{ -"model" "*32" -"targetname" "exp69" -"classname" "func_explosive" -"mass" "100" -"dmg" "10" -"target" "t157" -} -{ -"spawnflags" "2816" -"classname" "weapon_rocketlauncher" -"origin" "-696 -1816 -728" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2816" -"angle" "135" -"origin" "-720 -1840 -744" -} -{ -"model" "*33" -"spawnflags" "4" -"classname" "func_train" -"target" "t27" -} -{ -"model" "*34" -"spawnflags" "4" -"classname" "func_train" -"target" "t31" -} -{ -"spawnflags" "0" -"classname" "ammo_rockets" -"origin" "-1776 -720 -728" -} -{ -"spawnflags" "0" -"classname" "ammo_rockets" -"origin" "-1776 -680 -728" -} -{ -"spawnflags" "2048" -"origin" "-1536 -1312 -864" -"targetname" "t155" -"message" "You have found a secret." -"classname" "target_secret" -} -{ -"spawnflags" "2048" -"origin" "-2464 -1112 -952" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "-112 1132 -148" -} -{ -"spawnflags" "0" -"origin" "-76 1132 -148" -"classname" "ammo_shells" -} -{ -"spawnflags" "2048" -"message" "You have found a secret." -"classname" "target_secret" -"targetname" "t154" -"origin" "-1712 -48 -1232" -} -{ -"spawnflags" "2048" -"classname" "target_help" -"targetname" "t36" -"origin" "-176 -1656 -184" -"message" "Coolant systems drained.\nReturn to the Reactor.\n" -} -{ -"spawnflags" "2048" -"classname" "weapon_railgun" -"origin" "-288 -1320 -720" -} -{ -"spawnflags" "2048" -"classname" "target_goal" -"targetname" "t36" -"origin" "-176 -1656 -120" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-552 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-844 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1040 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1276 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1504 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1752 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1952 208 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-2056 124 -872" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-2056 -36 -892" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-2056 -196 -960" -} -{ -"origin" "-2056 -392 -976" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-2052 -592 -976" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-2052 -752 -976" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-2256 -752 -976" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-2312 -924 -976" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-2140 -992 -980" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1940 -992 -1056" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1760 -992 -1116" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-1544 -776 -1116" -} -{ -"origin" "-1280 -776 -1116" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1280 -996 -1116" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-1544 -996 -1116" -} -{ -"origin" "-1544 -1220 -1116" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "-1280 -1220 -1116" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-1544 -1220 -1120" -} -{ -"origin" "-1544 -996 -1120" -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -} -{ -"origin" "-1544 -776 -1120" -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-1280 -776 -1120" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-1280 -996 -1120" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-1760 -992 -1120" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-1940 -992 -1060" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-2140 -992 -984" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-2312 -924 -980" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-2256 -752 -980" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-2052 -752 -980" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-2052 -592 -980" -} -{ -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"origin" "-2056 -392 -980" -} -{ -"origin" "-2056 -196 -964" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-2056 -36 -896" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-2056 124 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-1952 208 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-1752 208 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-1504 208 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-1276 208 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-1040 208 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-220 1232 -172" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-552 208 -876" -"classname" "target_speaker" -"noise" "world/curnt2.wav" -"spawnflags" "1" -} -{ -"origin" "-1280 -1220 -1120" -"spawnflags" "1" -"noise" "world/curnt2.wav" -"classname" "target_speaker" -} -{ -"classname" "light" -"light" "140" -"origin" "-664 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-816 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-960 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-1104 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-1268 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-1428 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-1608 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-1780 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-1912 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-2052 208 -856" -} -{ -"classname" "light" -"light" "140" -"origin" "-2052 52 -860" -} -{ -"classname" "light" -"light" "140" -"origin" "-2052 -96 -900" -} -{ -"classname" "light" -"light" "140" -"origin" "-2052 -260 -940" -} -{ -"classname" "light" -"light" "140" -"origin" "-2052 -376 -964" -} -{ -"classname" "light" -"light" "140" -"origin" "-2052 -516 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-1792 -992 -1028" -} -{ -"light" "140" -"classname" "light" -"origin" "-1920 -992 -992" -} -{ -"light" "140" -"classname" "light" -"origin" "-2052 -992 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-2176 -992 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-2312 -992 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-2312 -860 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-2312 -736 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-2176 -736 -964" -} -{ -"light" "140" -"classname" "light" -"origin" "-2056 -736 -964" -} -{ -"origin" "-2052 -624 -964" -"light" "140" -"classname" "light" -} -{ -"origin" "-1648 -1132 -1084" -"classname" "light" -"light" "140" -} -{ -"origin" "-528 208 -856" -"light" "140" -"classname" "light" -} -{ -"origin" "416 -600 12" -"classname" "light" -"light" "150" -} -{ -"origin" "296 -600 12" -"classname" "light" -"light" "150" -} -{ -"origin" "184 -600 12" -"classname" "light" -"light" "150" -} -{ -"origin" "52 -600 12" -"classname" "light" -"light" "150" -} -{ -"origin" "416 -440 12" -"classname" "light" -"light" "150" -} -{ -"origin" "296 -440 12" -"classname" "light" -"light" "150" -} -{ -"origin" "184 -440 12" -"classname" "light" -"light" "150" -} -{ -"origin" "52 -440 12" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "416 -752 12" -} -{ -"light" "150" -"classname" "light" -"origin" "296 -752 12" -} -{ -"light" "150" -"classname" "light" -"origin" "184 -752 12" -} -{ -"light" "150" -"classname" "light" -"origin" "52 -752 12" -} -{ -"light" "150" -"classname" "light" -"origin" "-84 -440 12" -} -{ -"light" "150" -"classname" "light" -"origin" "-200 -440 12" -} -{ -"light" "140" -"classname" "light" -"origin" "-436 -204 12" -} -{ -"light" "140" -"classname" "light" -"origin" "-288 -200 12" -} -{ -"light" "140" -"classname" "light" -"origin" "-156 -204 12" -} -{ -"light" "140" -"classname" "light" -"origin" "-28 -204 12" -} -{ -"light" "140" -"classname" "light" -"origin" "120 -204 12" -} -{ -"light" "140" -"classname" "light" -"origin" "120 -84 12" -} -{ -"light" "140" -"classname" "light" -"origin" "120 20 12" -} -{ -"light" "140" -"classname" "light" -"origin" "48 84 12" -} -{ -"light" "140" -"classname" "light" -"origin" "-80 84 12" -} -{ -"light" "140" -"classname" "light" -"origin" "-216 84 12" -} -{ -"spawnflags" "2048" -"classname" "weapon_hyperblaster" -"origin" "-2288 -1100 -968" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "180" -"origin" "-2268 -1116 -984" -} -{ -"model" "*35" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t154" -} -{ -"spawnflags" "2048" -"classname" "item_adrenaline" -"origin" "-1712 52 -1252" -} -{ -"spawnflags" "0" -"origin" "-1712 112 -1248" -"classname" "ammo_grenades" -} -{ -"spawnflags" "0" -"origin" "-2284 -632 -944" -"classname" "misc_explobox" -"mass" "80" -"health" "25" -"dmg" "40" -} -{ -"spawnflags" "2048" -"origin" "-2452 -880 -944" -"classname" "misc_explobox" -"mass" "80" -"health" "25" -"dmg" "40" -} -{ -"classname" "func_group" -} -{ -"spawnflags" "2048" -"origin" "-600 32 -864" -"classname" "ammo_rockets" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-76 656 -160" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-40 656 -160" -} -{ -"origin" "28 1088 -144" -"classname" "light" -"light" "140" -} -{ -"origin" "-220 1104 -116" -"classname" "light" -"light" "140" -} -{ -"light" "96" -"classname" "light" -"origin" "-1096 24 -816" -} -{ -"classname" "light" -"light" "96" -"origin" "-1096 80 -848" -} -{ -"light" "96" -"classname" "light" -"origin" "-1848 80 -848" -} -{ -"classname" "light" -"light" "96" -"origin" "-1848 24 -816" -} -{ -"light" "120" -"classname" "light" -"origin" "-1672 -1248 440" -} -{ -"classname" "light" -"light" "120" -"origin" "-1672 -1160 440" -} -{ -"classname" "light" -"light" "120" -"origin" "-1672 -1072 440" -} -{ -"light" "120" -"classname" "light" -"origin" "-1216 -1152 440" -} -{ -"light" "120" -"classname" "light" -"origin" "-1216 -1064 440" -} -{ -"classname" "light" -"light" "120" -"origin" "-1216 -1240 440" -} -{ -"light" "96" -"classname" "light" -"origin" "-1392 -1116 44" -} -{ -"classname" "light" -"light" "96" -"origin" "-1240 -1052 40" -} -{ -"classname" "light" -"light" "130" -"origin" "-1440 -1296 80" -} -{ -"classname" "light" -"light" "130" -"origin" "-1440 -1368 80" -} -{ -"classname" "light" -"light" "130" -"origin" "-1440 -1424 80" -} -{ -"light" "200" -"classname" "light" -"origin" "-1444 -1252 -60" -} -{ -"light" "200" -"classname" "light" -"origin" "-1444 -1132 -60" -} -{ -"classname" "light" -"light" "200" -"origin" "-1444 -1392 -60" -} -{ -"origin" "-1340 -1116 -60" -"classname" "light" -"light" "200" -} -{ -"classname" "light" -"light" "200" -"origin" "-1340 -1248 -60" -} -{ -"origin" "-1340 -1420 -60" -"light" "200" -"classname" "light" -} -{ -"origin" "-1552 -1216 -60" -"light" "200" -"classname" "light" -} -{ -"origin" "-1288 -1256 -60" -"classname" "light" -"light" "200" -} -{ -"origin" "-1288 -1112 -60" -"classname" "light" -"light" "200" -} -{ -"origin" "-1288 -968 -60" -"classname" "light" -"light" "200" -} -{ -"origin" "-1712 -992 136" -"light" "120" -"classname" "light" -} -{ -"classname" "light" -"light" "120" -"origin" "-1176 -992 136" -} -{ -"origin" "-1440 -1196 80" -"light" "130" -"classname" "light" -} -{ -"light" "200" -"classname" "light" -"origin" "-1552 -1084 -60" -} -{ -"light" "200" -"classname" "light" -"origin" "-1288 -1372 -60" -} -{ -"light" "200" -"classname" "light" -"origin" "-1608 -1004 -60" -} -{ -"light" "200" -"classname" "light" -"origin" "-1556 -1148 -60" -} -{ -"light" "200" -"classname" "light" -"origin" "-1556 -1280 -60" -} -{ -"classname" "light" -"light" "200" -"origin" "-1552 -1388 -60" -} -{ -"spawnflags" "2048" -"classname" "ammo_rockets" -"origin" "-1384 -1064 16" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "-1224 -1108 16" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1792 48 -304" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1828 48 -304" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1756 48 -304" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "315" -"origin" "-1784 -36 -288" -} -{ -"angle" "45" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -"origin" "-1240 -1052 0" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "90" -"origin" "-1392 -1116 0" -} -{ -"spawnflags" "2048" -"classname" "target_help" -"message" "Activate cooling pump to\nlower coolant around\nreactor." -"targetname" "t153" -"origin" "-1484 -1508 24" -} -{ -"model" "*36" -"classname" "trigger_once" -"target" "t153" -} -{ -"spawnflags" "2048" -"origin" "-1664 -1348 20" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-1664 -1384 20" -"classname" "item_health_small" -} -{ -"origin" "-152 -1536 -200" -"targetname" "t36" -"spawnflags" "2" -"classname" "target_crosslevel_trigger" -} -{ -"model" "*37" -"target" "t180" -"dmg" "5" -"spawnflags" "4" -"classname" "func_train" -"speed" "80" -"targetname" "t1" -} -{ -"model" "*38" -"dmg" "5" -"spawnflags" "4" -"classname" "func_train" -"target" "t76" -"targetname" "t80" -"speed" "70" -} -{ -"model" "*39" -"spawnflags" "4" -"classname" "func_train" -"target" "t28" -} -{ -"model" "*40" -"spawnflags" "4" -"classname" "func_train" -"target" "t29" -} -{ -"spawnflags" "2048" -"dmg" "40" -"health" "25" -"mass" "80" -"classname" "misc_explobox" -"origin" "-2164 -620 -944" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1768 44 -1248" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1656 48 -1248" -} -{ -"spawnflags" "0" -"classname" "ammo_bullets" -"origin" "-1672 112 -1248" -} -{ -"spawnflags" "0" -"classname" "ammo_bullets" -"origin" "-1752 112 -1248" -} -{ -"spawnflags" "0" -"classname" "item_armor_shard" -"origin" "-368 80 -864" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-368 124 -864" -} -{ -"spawnflags" "0" -"classname" "item_armor_shard" -"origin" "-368 168 -864" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-368 212 -864" -} -{ -"spawnflags" "0" -"classname" "item_armor_shard" -"origin" "-368 256 -864" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-368 300 -864" -} -{ -"spawnflags" "0" -"classname" "item_armor_shard" -"origin" "-368 344 -864" -} -{ -"classname" "ammo_slugs" -"origin" "-1124 792 -428" -"spawnflags" "2048" -} -{ -"classname" "monster_chick" -"angle" "90" -"spawnflags" "769" -"target" "t117" -"origin" "-216 -1732 -420" -} -{ -"classname" "light" -"light" "120" -"origin" "-396 212 -516" -} -{ -"model" "*41" -"classname" "trigger_once" -"target" "t148" -"spawnflags" "2048" -} -{ -"classname" "monster_chick" -"target" "t116" -"spawnflags" "769" -"angle" "270" -"origin" "-312 -1328 -416" -"item" "ammo_rockets" -} -{ -"classname" "path_corner" -"target" "t145" -"targetname" "t146" -"origin" "-1024 -1456 -712" -} -{ -"classname" "path_corner" -"targetname" "t145" -"target" "t146" -"origin" "-1368 -1456 -712" -} -{ -"targetname" "t174" -"classname" "monster_berserk" -"angle" "180" -"spawnflags" "770" -"target" "t146" -"origin" "-992 -1456 -696" -} -{ -"classname" "monster_berserk" -"targetname" "t144" -"spawnflags" "257" -"angle" "180" -"origin" "-1152 992 -264" -} -{ -"model" "*42" -"classname" "trigger_once" -"target" "t143" -"spawnflags" "2048" -} -{ -"classname" "monster_berserk" -"angle" "225" -"spawnflags" "1" -"targetname" "t144" -"origin" "-1144 760 -272" -} -{ -"classname" "path_corner" -"target" "t141" -"targetname" "t142" -"origin" "96 -1116 64" -} -{ -"classname" "path_corner" -"targetname" "t141" -"target" "t142" -"origin" "-260 -1116 64" -} -{ -"classname" "monster_hover" -"spawnflags" "1" -"target" "t142" -"angle" "180" -"origin" "128 -1116 80" -} -{ -"classname" "monster_chick" -"angle" "225" -"spawnflags" "769" -"origin" "-1920 -524 -940" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-1664 -1312 20" -} -{ -"spawnflags" "0" -"classname" "weapon_chaingun" -"origin" "-1796 -52 -264" -} -{ -"spawnflags" "1" -"classname" "point_combat" -"targetname" "t137" -"origin" "-1248 -416 -304" -} -{ -"spawnflags" "1" -"classname" "point_combat" -"targetname" "t138" -"origin" "-1648 -416 -304" -} -{ -"spawnflags" "0" -"classname" "ammo_grenades" -"origin" "-600 392 -864" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "-1112 -360 -400" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "-1112 -320 -400" -} -{ -"model" "*43" -"spawnflags" "2052" -"targetname" "ho1" -"classname" "trigger_once" -"target" "t133" -} -{ -"spawnflags" "3" -"angle" "270" -"classname" "monster_hover" -"targetname" "t133" -"origin" "-408 1048 320" -} -{ -"classname" "monster_hover" -"angle" "270" -"spawnflags" "771" -"targetname" "t133" -"origin" "-168 1152 80" -} -{ -"classname" "point_combat" -"targetname" "t130" -"origin" "208 -424 256" -} -{ -"classname" "point_combat" -"targetname" "t129" -"spawnflags" "1" -"origin" "0 -312 280" -} -{ -"classname" "point_combat" -"spawnflags" "0" -"targetname" "t131" -"origin" "132 -668 256" -} -{ -"classname" "monster_hover" -"target" "t129" -"spawnflags" "3" -"angle" "225" -"origin" "260 -164 348" -"targetname" "t132" -} -{ -"classname" "monster_hover" -"angle" "225" -"spawnflags" "771" -"target" "t130" -"origin" "368 -196 348" -"targetname" "t132" -"item" "ammo_cells" -} -{ -"classname" "monster_hover" -"angle" "180" -"spawnflags" "771" -"target" "t131" -"targetname" "t132" -"origin" "384 -672 300" -} -{ -"model" "*44" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t132" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-52 -560 8" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-72 -616 8" -} -{ -"spawnflags" "2048" -"origin" "-380 -100 8" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-100 -620 -192" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"spawnflags" "0" -"classname" "item_armor_shard" -"origin" "152 -1136 20" -} -{ -"classname" "point_combat" -"targetname" "t128" -"spawnflags" "1" -"origin" "396 -284 8" -} -{ -"classname" "monster_gunner" -"angle" "270" -"target" "t128" -"spawnflags" "1" -"origin" "360 -160 24" -} -{ -"classname" "point_combat" -"targetname" "t127" -"spawnflags" "1" -"origin" "256 -172 8" -} -{ -"spawnflags" "0" -"classname" "ammo_bullets" -"origin" "-76 -804 -212" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "-368 -808 -212" -} -{ -"spawnflags" "0" -"classname" "ammo_bullets" -"origin" "-328 -808 -212" -} -{ -"classname" "path_corner" -"targetname" "t126" -"target" "t121" -"origin" "-220 -920 -200" -} -{ -"classname" "path_corner" -"targetname" "t125" -"target" "t126" -"origin" "-220 -1120 -200" -} -{ -"classname" "path_corner" -"targetname" "t124" -"target" "t125" -"origin" "36 -1120 -200" -} -{ -"classname" "path_corner" -"targetname" "t123" -"target" "t124" -"origin" "36 -1120 -200" -} -{ -"classname" "path_corner" -"targetname" "t122" -"target" "t123" -"origin" "-220 -1120 -200" -} -{ -"classname" "path_corner" -"targetname" "t121" -"target" "t122" -"origin" "-220 -920 -200" -} -{ -"classname" "path_corner" -"targetname" "t120" -"target" "t121" -"origin" "-220 -792 -200" -} -{ -"item" "ammo_slugs" -"classname" "monster_gladiator" -"angle" "270" -"target" "t120" -"spawnflags" "1" -"origin" "-220 -740 -184" -} -{ -"origin" "-100 812 276" -"light" "150" -"classname" "light" -"_color" "1.000000 0.972549 0.043137" -} -{ -"_color" "1.000000 0.972549 0.043137" -"classname" "light" -"light" "150" -"origin" "-48 864 276" -} -{ -"origin" "-44 1112 276" -"light" "150" -"classname" "light" -"_color" "1.000000 0.972549 0.043137" -} -{ -"_color" "1.000000 0.972549 0.043137" -"classname" "light" -"light" "150" -"origin" "-96 1164 276" -} -{ -"origin" "-352 1164 276" -"light" "150" -"classname" "light" -"_color" "1.000000 0.972549 0.043137" -} -{ -"_color" "1.000000 0.972549 0.043137" -"classname" "light" -"light" "150" -"origin" "-404 1112 276" -} -{ -"origin" "-352 812 276" -"light" "150" -"classname" "light" -"_color" "1.000000 0.972549 0.043137" -} -{ -"origin" "-368 1128 276" -"light" "150" -"classname" "light" -"_color" "1.000000 0.972549 0.043137" -} -{ -"classname" "path_corner" -"target" "t117" -"targetname" "t118" -"origin" "-216 -1372 -436" -} -{ -"classname" "path_corner" -"targetname" "t117" -"target" "t118" -"origin" "-216 -1736 -436" -} -{ -"classname" "path_corner" -"targetname" "t115" -"target" "t116" -"origin" "-312 -1536 -436" -} -{ -"classname" "path_corner" -"target" "t115" -"targetname" "t116" -"origin" "-312 -1344 -436" -} -{ -"model" "*45" -"classname" "trigger_once" -"target" "t114" -"spawnflags" "2048" -} -{ -"classname" "monster_chick" -"angle" "270" -"targetname" "t114" -"origin" "-796 -1328 -720" -} -{ -"classname" "point_combat" -"targetname" "t112" -"spawnflags" "1" -"origin" "-448 -1596 -724" -} -{ -"item" "ammo_bullets" -"classname" "monster_gunner" -"angle" "135" -"target" "t112" -"origin" "-456 -1856 -708" -"targetname" "t114" -"spawnflags" "1" -} -{ -"spawnflags" "2048" -"classname" "item_armor_body" -"origin" "-252 -1344 -724" -} -{ -"spawnflags" "1" -"classname" "monster_gunner" -"angle" "270" -"origin" "-960 -1752 -712" -} -{ -"item" "ammo_bullets" -"classname" "monster_gunner" -"angle" "90" -"spawnflags" "1" -"target" "t59" -"targetname" "t109" -"origin" "-1176 -1888 -708" -} -{ -"spawnflags" "2048" -"target" "t155" -"classname" "item_health_mega" -"origin" "-1504 -1316 -880" -} -{ -"classname" "path_corner" -"target" "t107" -"targetname" "t108" -"origin" "-964 -984 -728" -} -{ -"classname" "path_corner" -"targetname" "t107" -"target" "t108" -"origin" "-1052 -1436 -728" -} -{ -"targetname" "t174" -"classname" "monster_berserk" -"angle" "270" -"target" "t108" -"origin" "-1012 -1088 -712" -"spawnflags" "3" -} -{ -"classname" "path_corner" -"target" "t105" -"targetname" "t106" -"origin" "-1708 -1316 -732" -} -{ -"classname" "path_corner" -"targetname" "t104" -"target" "t105" -"origin" "-1744 -1448 -732" -} -{ -"classname" "path_corner" -"target" "t104" -"targetname" "t105" -"origin" "-1740 -1320 -732" -} -{ -"classname" "path_corner" -"targetname" "t105" -"target" "t104" -"origin" "-1448 -1448 -732" -} -{ -"targetname" "t174" -"classname" "monster_berserk" -"target" "t106" -"spawnflags" "3" -"origin" "-1740 -1280 -716" -} -{ -"classname" "path_corner" -"target" "t99" -"targetname" "t100" -"origin" "-1948 -860 -956" -} -{ -"classname" "path_corner" -"targetname" "t99" -"target" "t100" -"origin" "-2200 -860 -956" -} -{ -"item" "ammo_rockets" -"classname" "monster_chick" -"target" "t100" -"spawnflags" "0" -"angle" "180" -"origin" "-1920 -860 -940" -} -{ -"model" "*46" -"classname" "trigger_once" -"target" "t98" -"spawnflags" "2048" -} -{ -"item" "ammo_cells" -"classname" "monster_floater" -"spawnflags" "769" -"angle" "90" -"targetname" "t98" -"origin" "-1816 -344 -544" -} -{ -"angle" "90" -"spawnflags" "3" -"classname" "monster_hover" -"targetname" "t96" -"origin" "-1248 -420 -64" -} -{ -"angle" "90" -"spawnflags" "771" -"classname" "monster_hover" -"targetname" "t96" -"origin" "-1040 -264 28" -} -{ -"classname" "monster_hover" -"spawnflags" "3" -"angle" "90" -"targetname" "t96" -"origin" "-1764 -340 104" -"item" "ammo_cells" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t97" -"origin" "16 1132 -160" -} -{ -"classname" "monster_gunner" -"spawnflags" "769" -"angle" "90" -"target" "t97" -"origin" "16 812 -144" -"targetname" "t96" -} -{ -"model" "*47" -"classname" "trigger_once" -"target" "t96" -"spawnflags" "2048" -} -{ -"classname" "point_combat" -"spawnflags" "0" -"targetname" "t95" -"origin" "-472 760 -160" -} -{ -"item" "ammo_bullets" -"classname" "monster_gunner" -"angle" "180" -"spawnflags" "1" -"target" "t95" -"targetname" "t96" -"origin" "-328 736 -136" -} -{ -"angle" "90" -"classname" "monster_gunner" -"origin" "-1248 -448 -288" -"target" "t137" -"spawnflags" "1" -"targetname" "t148" -"item" "ammo_grenades" -} -{ -"angle" "180" -"classname" "monster_floater" -"origin" "-864 244 -820" -"spawnflags" "1" -"targetname" "t98" -} -{ -"item" "ammo_cells" -"classname" "monster_floater" -"angle" "180" -"origin" "-888 176 -820" -"spawnflags" "1" -"targetname" "t98" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "-404 -792 24" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-404 -752 24" -} -{ -"classname" "path_corner" -"targetname" "t85" -"target" "t86" -"origin" "-2432 -784 -936" -} -{ -"classname" "path_corner" -"targetname" "t84" -"target" "t85" -"origin" "-2432 -584 -936" -} -{ -"classname" "path_corner" -"targetname" "t83" -"target" "t84" -"origin" "-2212 -584 -936" -} -{ -"classname" "path_corner" -"targetname" "t87" -"target" "t88" -"origin" "-2416 -600 -936" -} -{ -"classname" "path_corner" -"targetname" "t88" -"target" "t83" -"origin" "-2220 -600 -936" -} -{ -"classname" "path_corner" -"targetname" "t86" -"target" "t87" -"origin" "-2416 -800 -936" -} -{ -"spawnflags" "1" -"classname" "monster_chick" -"target" "t83" -"origin" "-2184 -584 -920" -} -{ -"classname" "point_combat" -"origin" "-44 832 -144" -"targetname" "t82" -"spawnflags" "1" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-56 -776 8" -} -{ -"spawnflags" "2048" -"origin" "-328 -88 8" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "-340 -700 -192" -"classname" "misc_explobox" -} -{ -"origin" "-148 -1752 -440" -"classname" "light" -"light" "72" -} -{ -"light" "72" -"classname" "light" -"origin" "-148 -1716 -412" -} -{ -"origin" "-148 -1680 -440" -"classname" "light" -"light" "72" -} -{ -"origin" "-480 -1572 -708" -"light" "130" -"classname" "light" -} -{ -"origin" "-224 -1700 -408" -"target" "t80" -"targetname" "t1" -"classname" "trigger_relay" -"delay" ".3" -"spawnflags" "2048" -} -{ -"origin" "-248 -1588 -408" -"target" "exp69" -"targetname" "t1" -"delay" ".6" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-536 -1508 -440" -"target" "t76" -"targetname" "t77" -"classname" "path_corner" -} -{ -"wait" ".5" -"origin" "-536 -1508 -508" -"target" "t77" -"targetname" "t76" -"classname" "path_corner" -} -{ -"target" "t180" -"targetname" "t181" -"wait" ".5" -"origin" "-472 -1620 -508" -"classname" "path_corner" -} -{ -"wait" ".5" -"origin" "-688 -1652 -812" -"target" "t73" -"targetname" "t72" -"classname" "path_corner" -} -{ -"wait" ".5" -"origin" "-688 -1652 -644" -"target" "t72" -"targetname" "t73" -"classname" "path_corner" -} -{ -"model" "*48" -"dmg" "15" -"spawnflags" "4" -"targetname" "t33" -"speed" "150" -"target" "t72" -"classname" "func_train" -} -{ -"_color" "1.000000 0.976471 0.023529" -"light" "64" -"classname" "light" -"origin" "-2216 -96 -1120" -} -{ -"_color" "1.000000 0.976471 0.023529" -"light" "64" -"classname" "light" -"origin" "-2216 32 -1120" -} -{ -"_color" "0.087379 1.000000 0.043689" -"light" "64" -"classname" "light" -"origin" "-2224 32 -1120" -} -{ -"spawnflags" "0" -"origin" "-2332 -560 -944" -"classname" "misc_explobox" -"mass" "80" -"health" "25" -"dmg" "40" -} -{ -"spawnflags" "2048" -"origin" "-1928 -776 -944" -"dmg" "40" -"health" "25" -"mass" "80" -"classname" "misc_explobox" -} -{ -"_color" "1.000000 0.976471 0.023529" -"light" "64" -"classname" "light" -"origin" "-2540 -688 -952" -} -{ -"_color" "1.000000 0.976471 0.023529" -"light" "64" -"classname" "light" -"origin" "-2540 -544 -952" -} -{ -"_color" "0.087379 1.000000 0.043689" -"light" "64" -"classname" "light" -"origin" "-2548 -544 -952" -} -{ -"origin" "-2548 -688 -952" -"_color" "0.087379 1.000000 0.043689" -"light" "64" -"classname" "light" -} -{ -"origin" "-2548 -824 -952" -"_color" "0.087379 1.000000 0.043689" -"light" "64" -"classname" "light" -} -{ -"origin" "-2224 -96 -1120" -"_color" "0.087379 1.000000 0.043689" -"light" "64" -"classname" "light" -} -{ -"origin" "-2540 -824 -952" -"classname" "light" -"light" "64" -"_color" "1.000000 0.976471 0.023529" -} -{ -"origin" "-2216 -224 -1120" -"classname" "light" -"light" "64" -"_color" "1.000000 0.976471 0.023529" -} -{ -"origin" "-2224 -224 -1120" -"_color" "0.087379 1.000000 0.043689" -"light" "64" -"classname" "light" -} -{ -"_color" "1.000000 0.972549 0.043137" -"classname" "light" -"light" "150" -"origin" "-404 864 276" -} -{ -"_color" "1.000000 0.972549 0.043137" -"classname" "light" -"light" "150" -"origin" "-80 1128 276" -} -{ -"_color" "1.000000 0.972549 0.043137" -"classname" "light" -"light" "150" -"origin" "-80 848 276" -} -{ -"classname" "light" -"light" "160" -"origin" "36 732 120" -} -{ -"model" "*49" -"target" "t71" -"classname" "trigger_multiple" -"angle" "360" -} -{ -"origin" "-376 592 -416" -"targetname" "t71" -"map" "power2$cool1a" -"classname" "target_changelevel" -} -{ -"model" "*50" -"target" "t70" -"classname" "trigger_multiple" -"angle" "270" -} -{ -"origin" "-1432 -1672 80" -"targetname" "t70" -"map" "power2$cool1" -"classname" "target_changelevel" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-1768 -240 -416" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-1800 -168 -416" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "-1824 -320 -416" -} -{ -"origin" "-1176 -1728 -728" -"target" "t61" -"targetname" "t60" -"classname" "path_corner" -} -{ -"origin" "-1176 -1728 -728" -"target" "t59" -"targetname" "t58" -"classname" "path_corner" -} -{ -"origin" "-1176 -1864 -728" -"target" "t60" -"targetname" "t59" -"classname" "path_corner" -} -{ -"origin" "-1392 -1728 -728" -"targetname" "t61" -"target" "t58" -"classname" "path_corner" -} -{ -"origin" "-1032 -1992 -712" -"target" "t57" -"classname" "monster_gunner" -"spawnflags" "1" -} -{ -"origin" "-944 -1984 -728" -"target" "t57" -"targetname" "t56" -"classname" "path_corner" -} -{ -"origin" "-1176 -1992 -728" -"targetname" "t57" -"target" "t56" -"classname" "path_corner" -} -{ -"origin" "320 -160 24" -"classname" "monster_gunner" -"spawnflags" "1" -"target" "t127" -"angle" "180" -"item" "ammo_bullets" -} -{ -"origin" "320 -296 24" -"target" "t52" -"classname" "monster_gladiator" -"spawnflags" "1" -} -{ -"origin" "-400 -328 8" -"targetname" "t53" -"target" "t52" -"classname" "path_corner" -} -{ -"origin" "256 -328 8" -"target" "t53" -"targetname" "t52" -"classname" "path_corner" -} -{ -"targetname" "t96" -"origin" "-24 936 -144" -"classname" "monster_gunner" -"angle" "270" -"spawnflags" "1" -"target" "t82" -} -{ -"spawnflags" "1" -"deathtarget" "ho1" -"item" "ammo_slugs" -"origin" "-440 1192 -136" -"target" "t48" -"classname" "monster_gladiator" -} -{ -"origin" "-528 1144 -152" -"classname" "path_corner" -"targetname" "t92" -"target" "t93" -} -{ -"origin" "-384 932 -152" -"classname" "path_corner" -"targetname" "t94" -"target" "t91" -} -{ -"origin" "-384 1144 -152" -"classname" "path_corner" -"targetname" "t91" -"target" "t92" -} -{ -"origin" "-384 1208 -152" -"classname" "path_corner" -"target" "t91" -"targetname" "t48" -} -{ -"origin" "-536 840 -152" -"classname" "path_corner" -"targetname" "t93" -"target" "t94" -} -{ -"origin" "-1648 -456 -288" -"angle" "90" -"classname" "monster_gunner" -"target" "t138" -"spawnflags" "1" -"targetname" "t148" -"item" "ammo_bullets" -} -{ -"origin" "-1264 -24 -384" -"target" "t38" -"classname" "monster_gladiator" -"spawnflags" "1" -} -{ -"origin" "-1168 -40 -400" -"target" "t38" -"targetname" "t37" -"classname" "path_corner" -} -{ -"origin" "-1652 -40 -400" -"targetname" "t38" -"target" "t37" -"classname" "path_corner" -} -{ -"model" "*51" -"spawnflags" "2048" -"target" "t36" -"targetname" "t35" -"classname" "trigger_counter" -} -{ -"model" "*52" -"targetname" "t1" -"target" "t35" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"model" "*53" -"targetname" "t33" -"target" "t35" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"model" "*54" -"lip" "-128" -"classname" "func_water" -"spawnflags" "0" -"targetname" "t1" -"angle" "-2" -} -{ -"model" "*55" -"targetname" "t36" -"classname" "func_water" -"spawnflags" "2048" -"angle" "-2" -} -{ -"origin" "-448 -1388 -624" -"classname" "light" -"light" "80" -} -{ -"origin" "-448 -1296 -624" -"classname" "light" -"light" "80" -} -{ -"origin" "-448 -1340 -572" -"light" "80" -"classname" "light" -} -{ -"origin" "-1544 -64 -552" -"light" "130" -"classname" "light" -} -{ -"origin" "-1168 -256 -496" -"light" "130" -"classname" "light" -} -{ -"origin" "-1344 -208 -496" -"light" "130" -"classname" "light" -} -{ -"origin" "-1440 -432 -240" -"classname" "light" -"light" "100" -} -{ -"origin" "-2056 -168 -206" -"light" "100" -"classname" "light" -} -{ -"origin" "-1444 -528 -176" -"light" "120" -"classname" "light" -} -{ -"classname" "light" -"light" "125" -"origin" "-1384 -1336 -684" -} -{ -"classname" "light" -"light" "100" -"origin" "-1384 -1336 -824" -} -{ -"origin" "-1384 -1336 -1216" -"classname" "light" -"light" "80" -} -{ -"origin" "-1384 -1336 -1048" -"light" "100" -"classname" "light" -} -{ -"origin" "-1384 -1336 -912" -"light" "100" -"classname" "light" -} -{ -"origin" "-1076 -1000 -684" -"light" "125" -"classname" "light" -} -{ -"origin" "-1076 -1000 -1048" -"classname" "light" -"light" "100" -} -{ -"origin" "-1076 -1000 -912" -"classname" "light" -"light" "100" -} -{ -"origin" "-1076 -1000 -824" -"classname" "light" -"light" "100" -} -{ -"origin" "-1076 -1000 -1216" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"origin" "-1384 -1520 -664" -} -{ -"classname" "light" -"light" "150" -"origin" "-1440 -1688 80" -} -{ -"model" "*56" -"angle" "270" -"classname" "func_door" -"sounds" "4" -"speed" "70" -"team" "cl1" -} -{ -"model" "*57" -"angle" "90" -"classname" "func_door" -"sounds" "4" -"team" "cl1" -} -{ -"model" "*58" -"classname" "func_plat" -} -{ -"light" "150" -"origin" "-168 -1344 -192" -"classname" "light" -} -{ -"target" "t26" -"targetname" "t25" -"origin" "-1464 -1366 -1336" -"classname" "path_corner" -} -{ -"target" "t27" -"targetname" "t26" -"origin" "-1464 -1366 -776" -"classname" "path_corner" -} -{ -"target" "t28" -"targetname" "t27" -"origin" "-1464 -1488 -776" -"classname" "path_corner" -} -{ -"target" "t25" -"targetname" "t28" -"origin" "-1464 -1488 -1336" -"classname" "path_corner" -} -{ -"classname" "light" -"light" "250" -"origin" "-676 812 -88" -} -{ -"light" "250" -"classname" "light" -"origin" "-520 768 -88" -} -{ -"origin" "-368 848 276" -"light" "150" -"classname" "light" -"_color" "1.000000 0.972549 0.043137" -} -{ -"origin" "36 1244 120" -"classname" "light" -"light" "160" -} -{ -"origin" "-620 988 176" -"classname" "light" -"light" "80" -} -{ -"origin" "-484 732 120" -"classname" "light" -"light" "160" -} -{ -"origin" "-484 1244 120" -"classname" "light" -"light" "160" -} -{ -"light" "80" -"classname" "light" -"origin" "-564 988 216" -} -{ -"classname" "light" -"light" "100" -"origin" "-1444 -704 -176" -} -{ -"light" "140" -"classname" "light" -"origin" "-1448 -936 -40" -} -{ -"light" "120" -"classname" "light" -"origin" "-1444 -936 -176" -} -{ -"light" "120" -"classname" "light" -"origin" "-1444 -808 -176" -} -{ -"classname" "light" -"light" "130" -"origin" "-1344 -56 -552" -} -{ -"origin" "-1448 -936 152" -"classname" "light" -"light" "150" -} -{ -"origin" "-1448 -936 296" -"classname" "light" -"light" "100" -} -{ -"classname" "path_corner" -"origin" "-1008 -1080 -1336" -"target" "t29" -"targetname" "t32" -} -{ -"classname" "path_corner" -"origin" "-1008 -1080 -776" -"targetname" "t31" -"target" "t32" -} -{ -"classname" "path_corner" -"origin" "-1130 -1080 -776" -"targetname" "t30" -"target" "t31" -} -{ -"classname" "path_corner" -"origin" "-1130 -1080 -1336" -"targetname" "t29" -"target" "t30" -} -{ -"classname" "light" -"light" "130" -"origin" "-1728 -280 -496" -} -{ -"light" "130" -"classname" "light" -"origin" "-1560 -208 -496" -} -{ -"light" "140" -"classname" "light" -"origin" "-224 1252 -116" -} -{ -"light" "140" -"classname" "light" -"origin" "28 880 -144" -} -{ -"light" "140" -"classname" "light" -"origin" "-220 928 -116" -} -{ -"light" "140" -"classname" "light" -"origin" "-220 752 -116" -} -{ -"light" "140" -"classname" "light" -"origin" "-220 576 -116" -} -{ -"light" "140" -"classname" "light" -"origin" "-220 440 -48" -} -{ -"origin" "-220 272 12" -"classname" "light" -"light" "140" -} -{ -"model" "*59" -"_minlight" ".18" -"sounds" "4" -"classname" "func_door" -"angle" "-1" -"target" "t109" -"spawnflags" "0" -} -{ -"light" "80" -"classname" "light" -"origin" "-1060 -2168 -816" -} -{ -"classname" "light" -"light" "80" -"origin" "-248 -1304 -700" -} -{ -"light" "80" -"classname" "light" -"origin" "-248 -1380 -700" -} -{ -"origin" "-496 604 -356" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "-368 604 -356" -} -{ -"model" "*60" -"angle" "0" -"classname" "func_door" -"team" "td1" -"_minlight" ".18" -} -{ -"origin" "-1448 -1520 24" -"angle" "90" -"classname" "info_player_start" -"targetname" "cool1b" -} -{ -"model" "*61" -"spawnflags" "2048" -"_minlight" ".18" -"targetname" "t36" -"classname" "func_door" -"angle" "270" -"wait" "-1" -"sounds" "4" -} -{ -"model" "*62" -"spawnflags" "2048" -"_minlight" ".18" -"targetname" "t36" -"classname" "func_door" -"angle" "90" -"wait" "-1" -"sounds" "4" -} -{ -"classname" "info_player_start" -"angle" "180" -"targetname" "power2a" -"origin" "-516 600 -480" -} -{ -"classname" "light" -"light" "100" -"origin" "-320 604 -412" -} -{ -"origin" "-608 604 -412" -"light" "100" -"classname" "light" -} -{ -"origin" "-552 604 -412" -"light" "100" -"classname" "light" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/hangar1@09a0.ent b/stuff/mapfixes/baseq2/hangar1@09a0.ent deleted file mode 100644 index f78d614c6..000000000 --- a/stuff/mapfixes/baseq2/hangar1@09a0.ent +++ /dev/null @@ -1,3212 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds and ConHuevosGuey) -// -// 1. Fixed missing spawnflag 1 on ambient target_speaker (b#1) -// -// 2. Fixed 2x stuck monster_infantry (b#2) -// -// 3. Flagged some non-DM entities with 2048 (b#3) -// -// 4. Fixed trigger_push overspeed (b#4) -// -// 5. Optimized trigger chains (b#5) -{ -"nextmap" "hangar2" -"message" "Outer Hangar" -"classname" "worldspawn" -"angle" "180" -"sounds" "2" -"sky" "unit8_" -} -{ -"origin" "1488 -584 1576" -"targetname" "t86" -"message" "You have found a secret level." -"classname" "target_secret" -} -{ -"model" "*1" -"target" "t86" -"targetname" "t82" -"classname" "trigger_once" -"spawnflags" "2048" // b#3: added this -} -{ -"classname" "target_speaker" -"targetname" "t85" -"noise" "misc/tele_up.wav" -"origin" "1512 -560 1424" -} -{ -"model" "*2" -"classname" "trigger_multiple" -"wait" "5" -"target" "t85" -} -{ -"classname" "target_help" -"targetname" "t84" -"message" "Resume previous mission." -"origin" "1656 -376 1344" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#5: added this -"targetname" "t83" -"target" "t84" -"delay" "2" -"origin" "1616 -360 1328" -} -{ -"classname" "target_crosslevel_target" -"spawnflags" "2048" // b#3: added this -"spawnflags" "32" -"target" "t84" // b#5: t83 -> t84 -"delay" "3" // b#5: moved here from trigger_relay (+1 for default delay of crosslevel targets) -"origin" "1616 -384 1328" -} -{ -"origin" "80 444 1536" -"light" "80" -"classname" "light" -} -{ -"origin" "-928 -552 1112" -"angle" "270" -"classname" "item_breather" -} -{ -"angle" "0" -"classname" "info_player_coop" -"targetname" "lab" -"origin" "-128 448 1400" -} -{ -"angle" "0" -"classname" "info_player_coop" -"targetname" "lab" -"origin" "-80 448 1400" -} -{ -"classname" "info_player_coop" -"angle" "0" -"targetname" "lab" -"origin" "-184 448 1400" -} -{ -"angle" "180" -"classname" "info_player_coop" -"targetname" "hangar2" -"origin" "1208 -88 1408" -} -{ -"angle" "180" -"classname" "info_player_coop" -"targetname" "hangar2" -"origin" "1208 -40 1408" -} -{ -"classname" "info_player_coop" -"angle" "180" -"targetname" "hangar2" -"origin" "1256 -56 1408" -} -{ -"angle" "270" -"classname" "info_player_coop" -"targetname" "space" -"origin" "1416 -328 1152" -} -{ -"angle" "270" -"classname" "info_player_coop" -"targetname" "space" -"origin" "1592 -336 1152" -} -{ -"classname" "info_player_coop" -"angle" "270" -"targetname" "space" -"origin" "1352 -360 1152" -} -{ -"angle" "0" -"classname" "info_player_coop" -"targetname" "unitstart" -"origin" "-1072 -600 1432" -} -{ -"angle" "0" -"classname" "info_player_coop" -"targetname" "unitstart" -"origin" "-1016 -600 1432" -} -{ -"classname" "info_player_coop" -"angle" "0" -"targetname" "unitstart" -"origin" "-1128 -600 1432" -} -{ -"origin" "1528 -560 1576" -"map" "space$hangar1" -"spawnflags" "2048" -"targetname" "t82" -"classname" "target_changelevel" -} -{ -"model" "*3" -"spawnflags" "2048" -"target" "t82" -"classname" "trigger_multiple" -} -{ -"origin" "1464 -560 1176" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/tele1.wav" -} -{ -"origin" "1512 -536 1176" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/tele1.wav" -} -{ -"origin" "1512 -472 1176" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/tele1.wav" -} -{ -"origin" "1560 -560 1176" -"noise" "world/tele1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1144 -584 1416" -"classname" "light" -} -{ -"origin" "1504 -308 1144" -"targetname" "t81" -"spawnflags" "1792" -"angle" "270" -"classname" "misc_teleporter_dest" -} -{ -"origin" "1056 -288 1384" -"target" "t81" -"spawnflags" "1792" -"angle" "315" -"classname" "misc_teleporter" -} -{ -"model" "*4" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"classname" "misc_teleporter_dest" -"angle" "135" -"spawnflags" "1792" -"targetname" "t80" -"origin" "504 272 1384" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"target" "t80" -"origin" "-464 -664 1120" -} -{ -"classname" "misc_teleporter_dest" -"spawnflags" "1792" -"angle" "90" -"targetname" "t79" -"origin" "-1216 -920 1432" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"target" "t79" -"origin" "1504 -1232 1160" -} -{ -"origin" "-300 -920 1444" -"angles" "25 130 0" -"classname" "info_player_intermission" -} -{ -"origin" "-896 -416 1424" -"classname" "item_health_small" -} -{ -"classname" "ammo_cells" -"origin" "-728 -992 1428" -} -{ -"classname" "item_health_large" -"origin" "-260 -676 1424" -} -{ -"noise" "world/bigpump.wav" -"origin" "-728 -536 1136" -"classname" "target_speaker" -"spawnflags" "1" // b#1: added this -} -{ -"classname" "target_speaker" -"spawnflags" "1" // b#1: added this -"origin" "-880 -528 1136" -"noise" "world/bigpump.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" // b#1: added this -"origin" "-728 -432 1136" -"noise" "world/bigpump.wav" -} -{ -"noise" "world/bigpump.wav" -"origin" "-616 -488 1024" -"classname" "target_speaker" -"spawnflags" "1" // b#1: added this -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"origin" "-992 -784 1136" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"origin" "-928 -752 1136" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"origin" "-1184 -784 1136" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-1232 -408 1176" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-1112 -424 1120" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-1024 -464 1120" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-952 -416 1464" -} -{ -"origin" "-694 -982 1408" -"classname" "misc_deadsoldier" -} -{ -"origin" "-728 -952 1428" -"classname" "ammo_cells" -} -{ -"origin" "-1184 -416 1112" -"classname" "ammo_bullets" -} -{ -"origin" "-1144 -416 1112" -"classname" "ammo_bullets" -} -{ -"model" "*5" -"target" "t76" -"classname" "trigger_once" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "-728 -712 1432" -"spawnflags" "1536" -"classname" "item_health" -} -{ -"origin" "-728 -672 1432" -"spawnflags" "1536" -"classname" "item_health" -} -{ -"origin" "-728 -752 1432" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "-424 -1000 904" -"target" "t5" -"spawnflags" "3840" // b#5: 1792 -> 3840 -"classname" "trigger_always" -} -{ -"origin" "-352 -1128 1128" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-344 -864 1128" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"spawnflags" "1792" -"origin" "-256 -864 1128" -"classname" "ammo_bullets" -} -{ -"spawnflags" "1792" -"origin" "-296 -864 1128" -"classname" "ammo_bullets" -} -{ -"origin" "-48 -48 1424" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "-88 -80 1424" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "168 304 1376" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "120 320 1376" -"classname" "ammo_bullets" -} -{ -"origin" "120 280 1376" -"classname" "ammo_bullets" -} -{ -"origin" "824 16 1376" -"classname" "ammo_grenades" -} -{ -"origin" "824 -24 1376" -"spawnflags" "1536" -"classname" "ammo_grenades" -} -{ -"origin" "864 -32 1376" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "1120 -576 1424" -"classname" "ammo_cells" -"spawnflags" "1536" -} -{ -"origin" "1120 -616 1424" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "1352 -984 1120" -"spawnflags" "256" -"classname" "item_armor_combat" -} -{ -"origin" "1576 -1144 1152" -"classname" "ammo_cells" -"spawnflags" "0" -} -{ -"origin" "1576 -1104 1152" -"spawnflags" "1536" -"classname" "ammo_cells" -} -{ -"origin" "1416 -1120 1152" -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -} -{ -"origin" "-1048 -664 1112" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-902 -864 1424" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "-896 -912 1408" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1248 -416 1120" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-704 -1032 1432" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-216 -728 1432" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-224 -568 1512" -"target" "t70" -"spawnflags" "3840" // b#5: 1792 -> 3840 -"classname" "trigger_always" -} -{ -"origin" "1720 -552 1144" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "880 -368 1432" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "984 -600 1432" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "408 488 1488" -"target" "t26" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "992 -64 1384" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "496 568 1384" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1248 -416 1432" -"angle" "315" -"classname" "info_player_deathmatch" -} -{ -"classname" "ammo_rockets" -"origin" "-728 -360 1424" -} -{ -"classname" "ammo_shells" -"origin" "-936 -936 1424" -} -{ -"classname" "ammo_shells" -"origin" "-936 -896 1424" -} -{ -"classname" "item_health_large" -"origin" "-1184 -808 1424" -} -{ -"classname" "item_health_large" -"origin" "-1184 -864 1424" -} -{ -"classname" "target_secret" -"targetname" "t75" -"message" "You have found a secret." -"origin" "-920 -416 1160" -} -{ -"classname" "item_adrenaline" -"origin" "-928 -416 1112" -"target" "t75" -} -{ -"classname" "item_pack" -"origin" "-1120 -536 1176" -} -{ -"classname" "ammo_shells" -"origin" "-912 -744 1112" -} -{ -"classname" "ammo_shells" -"origin" "-952 -744 1112" -} -{ -"classname" "item_health_large" -"origin" "-1248 -800 1112" -} -{ -"spawnflags" "1" -"angle" "270" -"classname" "monster_infantry" -"item" "ammo_bullets" -"origin" "-1056 -472 1120" -} -{ -"targetname" "t77" -"classname" "monster_infantry" -"angle" "270" -"spawnflags" "1" -"item" "ammo_bullets" -"origin" "-1248 -472 1120" -} -{ -"classname" "monster_infantry" -"spawnflags" "1" -"target" "t73" -"origin" "-1008 -712 1120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t73" -"target" "t74" -"origin" "-1176 -712 1104" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t73" -"targetname" "t74" -"origin" "-960 -712 1104" -} -{ -"target" "t77" -"targetname" "t76" -"classname" "monster_gunner" -"angle" "270" -"spawnflags" "1" -"origin" "-1176 -536 1120" -} -{ -"model" "*6" -"classname" "trigger_counter" -"spawnflags" "2049" // b#3: 1 -> 2049 -"target" "t71" -"targetname" "t72" -} -{ -"model" "*7" -"classname" "trigger_push" -"angle" "-1" -"speed" "50" -} -{ -"spawnflags" "2" -"angle" "180" -"classname" "monster_flyer" -"origin" "-152 -1024 1656" -"targetname" "t78" -} -{ -"classname" "monster_flyer" -"angle" "180" -"spawnflags" "2" -"targetname" "t71" -"origin" "-152 -1024 1720" -"target" "t78" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t70" -"delay" ".3" -"origin" "-256 -616 1464" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t70" -"origin" "-272 -624 1504" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // added this -"targetname" "t70" -"delay" ".5" -"origin" "-216 -624 1504" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t70" -"delay" ".1" -"origin" "-200 -632 1432" -} -{ -"model" "*8" -"classname" "trigger_counter" -"count" "5" -"targetname" "t69" -"spawnflags" "2049" // b#3: 1 -> 2049 -"target" "t70" -} -{ -"item" "ammo_bullets" -"angle" "180" -"classname" "monster_infantry" -"spawnflags" "1" -"target" "t69" -"origin" "320 48 1432" -} -{ -"angle" "225" -"classname" "monster_infantry" -"spawnflags" "1" -"target" "t69" -"origin" "64 -8 1432" -} -{ -"item" "ammo_bullets" -"angle" "225" -"classname" "monster_infantry" -"spawnflags" "1" -"target" "t69" -"origin" "-64 -96 1432" -} -{ -"angle" "225" -"classname" "monster_infantry" -"spawnflags" "1" -"target" "t69" -"origin" "-216 -312 1432" -} -{ -"classname" "monster_infantry" -"angle" "180" -"spawnflags" "1" -"target" "t69" -"origin" "560 -16 1432" -} -{ -"light" "80" -"classname" "light" -"origin" "-248 -688 1488" -} -{ -"classname" "light" -"light" "80" -"origin" "-192 -736 1488" -} -{ -"classname" "monster_medic" -"angle" "90" -"origin" "-216 -720 1432" -"targetname" "t70" -} -{ -"model" "*9" -"classname" "func_explosive" -"dmg" "1" -"targetname" "t70" -"mass" "100" -} -{ -"classname" "item_armor_shard" -"origin" "840 -224 1424" -} -{ -"classname" "item_armor_shard" -"origin" "816 -184 1424" -} -{ -"classname" "item_armor_shard" -"origin" "792 -144 1424" -} -{ -"classname" "item_armor_shard" -"origin" "760 -112 1424" -} -{ -"classname" "item_armor_shard" -"origin" "856 -264 1424" -} -{ -"light" "80" -"classname" "light" -"origin" "184 0 1480" -} -{ -"light" "80" -"classname" "light" -"origin" "-56 -144 1480" -} -{ -"light" "80" -"classname" "light" -"origin" "-184 -368 1480" -} -{ -"light" "80" -"classname" "light" -"origin" "-208 -512 1480" -} -{ -"classname" "light" -"light" "80" -"origin" "320 8 1480" -} -{ -"light" "150" -"classname" "light" -"origin" "320 464 1464" -} -{ -"classname" "light" -"light" "150" -"origin" "320 320 1464" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t67" -"target" "t68" -"origin" "160 448 1368" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t68" -"target" "t67" -"origin" "456 440 1368" -} -{ -"classname" "monster_tank" -"spawnflags" "1" -"target" "t51" -"origin" "1528 -328 1136" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t64" -"target" "t65" -"origin" "1384 -360 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t63" -"target" "t64" -"origin" "1328 -424 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t62" -"target" "t63" -"origin" "1288 -504 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t61" -"target" "t62" -"origin" "1296 -576 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t60" -"target" "t61" -"origin" "1312 -656 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t59" -"target" "t60" -"origin" "1368 -720 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t58" -"target" "t59" -"origin" "1456 -744 1144" -} -{ -"classname" "path_corner" -"spawnflags" "2048" -"targetname" "t57" -"target" "t58" -"origin" "1544 -752 1144" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t56" -"target" "t57" -"origin" "1624 -712 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t55" -"target" "t56" -"origin" "1688 -656 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t54" -"target" "t55" -"origin" "1720 -560 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t53" -"target" "t54" -"origin" "1712 -472 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t52" -"target" "t53" -"origin" "1664 -400 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t51" -"target" "t52" -"origin" "1600 -352 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t51" -"targetname" "t66" -"origin" "1504 -328 1128" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t65" -"target" "t66" -"origin" "1448 -336 1128" -} -{ -"classname" "target_goal" -"targetname" "t45" -"origin" "488 448 1488" -} -{ -"spawnflags" "2048" -"classname" "target_secret" -"targetname" "t50" -"origin" "952 -984 1176" -"message" "You found a secret area!" -} -{ -"model" "*10" -"classname" "trigger_once" -"spawnflags" "2048" // b#3: added this -"target" "t50" -} -{ -"classname" "item_armor_shard" -"origin" "-776 -412 1112" -} -{ -"classname" "item_armor_shard" -"origin" "-812 -412 1112" -} -{ -"classname" "item_armor_shard" -"origin" "-740 -412 1112" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2" -"origin" "-758 -574 1096" -} -{ -"classname" "ammo_bullets" -"origin" "-724 -572 1112" -} -{ -"classname" "ammo_bullets" -"origin" "-724 -536 1112" -} -{ -"classname" "item_armor_combat" -"origin" "-760 -540 1112" -} -{ -"classname" "light" -"light" "100" -"origin" "-816 -480 1200" -} -{ -"classname" "monster_hover" -"angle" "90" -"spawnflags" "1" -"origin" "-536 -1096 1744" -"target" "t72" -} -{ -"classname" "monster_gunner" -"angle" "90" -"target" "t48" -"origin" "-704 -912 1432" -"item" "ammo_grenades" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t48" -"targetname" "t49" -"origin" "-704 -576 1416" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t48" -"target" "t49" -"origin" "-704 -872 1416" -} -{ -"origin" "-1152 -704 1288" -"classname" "light" -"light" "150" -} -{ -"origin" "-960 -512 1288" -"classname" "light" -"light" "150" -} -{ -"origin" "-1152 -512 1288" -"classname" "light" -"light" "150" -} -{ -"origin" "-960 -704 1288" -"light" "150" -"classname" "light" -} -{ -"origin" "-1400 -704 1328" -"classname" "light" -"light" "64" -} -{ -"origin" "-1400 -704 1360" -"light" "64" -"classname" "light" -} -{ -"origin" "-1400 -704 1456" -"classname" "light" -"light" "64" -} -{ -"origin" "-1400 -704 1488" -"light" "64" -"classname" "light" -} -{ -"origin" "-1400 -704 1232" -"classname" "light" -"light" "64" -} -{ -"origin" "-1400 -704 1200" -"light" "64" -"classname" "light" -} -{ -"origin" "-1304 -704 1312" -"classname" "light" -"light" "80" -} -{ -"origin" "-1304 -704 1184" -"classname" "light" -"light" "80" -} -{ -"origin" "-1304 -704 1120" -"classname" "light" -"light" "80" -} -{ -"origin" "-1304 -704 1472" -"light" "80" -"classname" "light" -} -{ -"origin" "-952 -704 1176" -"classname" "light" -"light" "150" -} -{ -"origin" "-1152 -704 1176" -"classname" "light" -"light" "150" -} -{ -"origin" "-1064 -568 1200" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 1.000000 0.000000" -"light" "120" -"classname" "light" -"origin" "-768 -516 1464" -} -{ -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 0.000000" -"origin" "-832 -516 1468" -} -{ -"origin" "-1184 -808 1164" -"classname" "light" -"light" "80" -} -{ -"origin" "-1056 -808 1164" -"classname" "light" -"light" "80" -} -{ -"origin" "-992 -808 1164" -"classname" "light" -"light" "80" -} -{ -"origin" "-1184 -808 1236" -"light" "80" -"classname" "light" -} -{ -"origin" "-1088 -392 1204" -"classname" "light" -"light" "80" -} -{ -"origin" "-1220 -396 1204" -"light" "80" -"classname" "light" -} -{ -"light" "120" -"origin" "-1248 -576 1240" -"classname" "light" -} -{ -"classname" "light" -"origin" "-960 -416 1240" -"light" "120" -} -{ -"light" "120" -"origin" "-1088 -416 1240" -"classname" "light" -} -{ -"light" "120" -"origin" "-1216 -416 1240" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1216 -800 1240" -"light" "120" -} -{ -"classname" "light" -"origin" "-1248 -448 1240" -"light" "120" -} -{ -"classname" "light" -"origin" "-1248 -704 1240" -"light" "120" -} -{ -"classname" "light" -"origin" "-1248 -576 1576" -"light" "120" -} -{ -"model" "*11" -"lip" "8" -"_minlight" ".1" -"spawnflags" "1" -"classname" "func_plat" -} -{ -"light" "120" -"origin" "-1248 -704 1576" -"classname" "light" -} -{ -"style" "1" -"targetname" "t47" -"classname" "func_areaportal" -} -{ -"model" "*12" -"target" "t47" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-816 -640 1144" -"classname" "light" -"light" "120" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "-880 -640 1148" -"_color" "1.000000 1.000000 0.000000" -"light" "120" -"classname" "light" -} -{ -"style" "2" -"targetname" "t46" -"classname" "func_areaportal" -} -{ -"model" "*13" -"_minlight" ".2" -"target" "t46" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-1088 -536 1432" -"angle" "0" -"classname" "info_player_start" -} -{ -"classname" "target_help" -"targetname" "t45" -"message" "Move to main hangar bay\ninstallation." -"origin" "544 432 1480" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"targetname" "t26" -"killtarget" "message" -"origin" "536 472 1488" -"target" "t45" -} -{ -"model" "*14" -"classname" "trigger_multiple" -"spawnflags" "2048" // b#3: added this -"message" "Tank commander's head needed at scanner." -"wait" "5" -"targetname" "message" -} -{ -"classname" "target_help" -"targetname" "t44" -"message" "Find a way into the main\nhangar bay installation." -"origin" "-1032 -464 1512" -} -{ -"classname" "target_help" -"targetname" "t44" -"message" "Close main hangar bay door.\nDestroy blackhole generator." -"spawnflags" "1" -"origin" "-1088 -464 1512" -} -{ -"model" "*15" -"classname" "trigger_once" -"spawnflags" "2048" // b#3: added this -"target" "t44" -} -{ -"spawnflags" "2048" -"origin" "1000 -288 1376" -"classname" "item_armor_shard" -} -{ -"spawnflags" "2048" -"origin" "1032 -288 1376" -"classname" "item_armor_shard" -} -{ -"spawnflags" "2048" -"origin" "968 -288 1376" -"classname" "item_armor_shard" -} -{ -"origin" "1064 -288 1360" -"spawnflags" "2" -"angle" "135" -"classname" "misc_deadsoldier" -} -{ -"origin" "-320 480 1448" -"map" "lab$lstart" -"targetname" "t43" -"classname" "target_changelevel" -} -{ -"model" "*16" -"angle" "180" -"target" "t43" -"classname" "trigger_multiple" -} -{ -"classname" "info_player_start" -"angle" "90" -"targetname" "space" -"origin" "1510 -420 1160" -} -{ -"origin" "1136 -64 1408" -"angle" "180" -"classname" "info_player_start" -"targetname" "hangar2" -} -{ -"origin" "1344 -8 1472" -"map" "hangar2$hangar1" -"targetname" "t41" -"classname" "target_changelevel" -} -{ -"model" "*17" -"angle" "360" -"target" "t41" -"classname" "trigger_multiple" -} -{ -"_color" "0.000000 0.500000 1.000000" -"light" "180" -"origin" "384 -992 968" -"classname" "light" -} -{ -"_color" "0.000000 0.500000 1.000000" -"light" "180" -"origin" "256 -992 968" -"classname" "light" -} -{ -"_color" "0.000000 0.500000 1.000000" -"light" "180" -"origin" "128 -992 968" -"classname" "light" -} -{ -"_color" "0.000000 0.500000 1.000000" -"light" "180" -"origin" "0 -992 968" -"classname" "light" -} -{ -"_color" "0.000000 0.500000 1.000000" -"light" "180" -"origin" "-128 -992 968" -"classname" "light" -} -{ -"origin" "120 240 1376" -"classname" "item_health_small" -} -{ -"origin" "160 240 1376" -"classname" "item_health_small" -} -{ -"origin" "480 240 1376" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "520 240 1376" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1704 -624 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1720 -496 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1664 -392 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1576 -328 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1456 -328 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1352 -392 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1296 -488 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1312 -608 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1376 -704 1224" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1504 -744 1224" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "1624 -712 1224" -} -{ -"classname" "item_health_large" -"origin" "896 -636 1424" -} -{ -"classname" "light" -"origin" "1048 -452 1416" -} -{ -"classname" "item_health_small" -"origin" "120 624 1376" -} -{ -"classname" "item_health_small" -"origin" "160 624 1376" -} -{ -"classname" "item_health_small" -"origin" "480 624 1376" -} -{ -"classname" "item_health_small" -"origin" "520 624 1376" -} -{ -"classname" "item_health_small" -"origin" "-856 -416 1424" -} -{ -"classname" "monster_tank" -"angle" "270" -"spawnflags" "1" -"item" "ammo_rockets" -"origin" "264 456 1376" -"target" "t67" -} -{ -"spawnflags" "1" -"angle" "180" -"classname" "monster_infantry" -"origin" "992 8 1384" // b#2: 1008 -> 992 -} -{ -"classname" "monster_infantry" -"angle" "180" -"spawnflags" "1" -"origin" "992 -136 1384" // b#2: 1008 -> 992 -} -{ -"classname" "item_health_large" -"origin" "688 96 1384" -} -{ -"model" "*18" -"classname" "func_explosive" -"dmg" "50" -} -{ -"classname" "light" -"style" "10" -"light" "120" -"origin" "844 -488 1416" -} -{ -"classname" "ammo_bullets" -"origin" "864 -600 1424" -} -{ -"classname" "ammo_shells" -"origin" "864 -560 1424" -} -{ -"classname" "misc_deadsoldier" -"angle" "90" -"spawnflags" "2" -"origin" "896 -488 1408" -} -{ -"classname" "item_health_small" -"origin" "1488 -1160 1152" -} -{ -"classname" "item_health_small" -"origin" "1464 -1088 1152" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "1512 -1120 1152" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "8" -"angle" "135" -"origin" "1536 -1160 1136" -} -{ -"spawnflags" "1" -"angle" "180" -"classname" "monster_hover" -"item" "ammo_cells" -"origin" "1652 -924 1832" -} -{ -"classname" "monster_hover" -"angle" "180" -"spawnflags" "1" -"origin" "1664 -1088 1832" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t39" -"target" "t40" -"origin" "928 -920 992" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t39" -"targetname" "t40" -"origin" "752 -976 912" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t37" -"target" "t38" -"origin" "688 -1136 912" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t37" -"targetname" "t38" -"origin" "712 -928 912" -} -{ -"classname" "monster_flipper" -"target" "t37" -"origin" "688 -1096 928" -} -{ -"classname" "monster_flipper" -"target" "t39" -"origin" "760 -984 928" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t35" -"target" "t36" -"origin" "-376 -336 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t35" -"targetname" "t36" -"origin" "-600 -472 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t33" -"target" "t34" -"origin" "-376 -752 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t33" -"targetname" "t34" -"origin" "-376 -520 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t31" -"target" "t32" -"origin" "-584 -512 1064" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t31" -"targetname" "t32" -"origin" "-600 -744 1064" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t29" -"target" "t30" -"origin" "-464 -800 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t29" -"targetname" "t30" -"origin" "-520 -1128 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"targetname" "t27" -"target" "t28" -"origin" "-440 -1256 1032" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -"target" "t27" -"targetname" "t28" -"origin" "-680 -1120 1032" -} -{ -"classname" "monster_flipper" -"origin" "-464 -768 1048" -"target" "t29" -} -{ -"classname" "monster_flipper" -"origin" "-368 -624 1048" -"target" "t34" -} -{ -"classname" "monster_flipper" -"origin" "-600 -584 1048" -"target" "t32" -} -{ -"classname" "monster_flipper" -"origin" "-408 -320 1048" -"target" "t35" -} -{ -"classname" "monster_flipper" -"target" "t27" -"origin" "-496 -1176 1048" -} -{ -"spawnflags" "1" -"angle" "90" -"classname" "monster_hover" -"origin" "-432 -1192 1952" -"target" "t72" -} -{ -"origin" "936 -184 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1016 -64 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "856 -72 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "760 32 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "880 56 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1032 40 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1048 160 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "904 168 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "824 136 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "784 296 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "784 408 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "688 448 1416" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "272 64 1480" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "-1176 -416 1464" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-1056 -416 1464" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-1048 -784 1136" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-360 -984 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-528 -944 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-672 -936 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-496 -832 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-360 -776 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-680 -680 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-640 -832 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-536 -688 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-384 -640 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-416 -496 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-544 -344 1632" -} -{ -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-656 -512 1632" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-480 -1192 1632" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "848 -280 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "808 -208 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "736 -128 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "648 -40 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "544 8 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "440 48 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "320 184 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1032 -240 1416" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "168 40 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "56 -8 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-48 -88 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-136 -176 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-200 -280 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-248 -384 1480" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-256 -512 1480" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "880 -368 1480" -} -{ -"origin" "212 264 1388" -"_color" "0.215686 0.607843 1.000000" -"light" "100" -"classname" "light" -} -{ -"origin" "96 224 1496" -"_color" "0.215686 0.607843 1.000000" -"light" "100" -"classname" "light" -} -{ -"origin" "544 352 1496" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "544 544 1496" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "544 672 1496" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "96 672 1496" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "96 544 1496" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "428 264 1388" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "96 352 1496" -"classname" "light" -"light" "100" -"_color" "0.215686 0.607843 1.000000" -} -{ -"origin" "544 224 1496" -"_color" "0.215686 0.607843 1.000000" -"light" "100" -"classname" "light" -} -{ -"origin" "324 576 1584" -"light" "40" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -} -{ -"origin" "324 576 1560" -"light" "40" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -} -{ -"origin" "324 576 1536" -"light" "40" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -} -{ -"origin" "324 576 1512" -"light" "40" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -} -{ -"origin" "324 576 1488" -"light" "40" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -} -{ -"origin" "320 568 1424" -"light" "100" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -} -{ -"origin" "320 576 1424" -"light" "100" -"_color" "0.003937 0.653543 1.000000" -"classname" "light" -"style" "10" -} -{ -"origin" "520 488 1440" -"targetname" "t26" -"noise" "world/force1.wav" -"spawnflags" "2049" // b#3: 1 -> 2049 -"classname" "target_speaker" -} -{ -"model" "*19" -"classname" "func_wall" -"spawnflags" "2054" // b#3: 6 -> 2054 -"targetname" "t26" -} -{ -"classname" "trigger_key" -"spawnflags" "2048" // b#3: added this -"item" "key_commander_head" -"targetname" "t25" -"target" "t26" -"origin" "408 520 1488" -} -{ -"model" "*20" -"classname" "func_button" -"angle" "90" -"target" "t22" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"spawnflags" "2048" // b#3: added this -"noise" "world/scan1.wav" -"targetname" "t23" -"origin" "320 552 1424" -} -{ -"classname" "light" -"_color" "0.003937 0.653543 1.000000" -"light" "40" -"origin" "324 576 1608" -} -{ -"model" "*21" -"target" "t23" -"targetname" "t22" -"classname" "trigger_multiple" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "384 520 1488" -"delay" "1.2" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "t25" -} -{ -"targetname" "t23" -"origin" "328 552 1512" -"delay" "0.9" -"target" "t20" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "360 552 1512" -"delay" "1" -"target" "t20" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "328 552 1536" -"delay" "0.7" -"target" "t19" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "360 552 1536" -"delay" "0.8" -"target" "t19" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "328 552 1560" -"delay" "0.5" -"target" "t18" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "360 552 1560" -"delay" "0.6" -"target" "t18" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "328 552 1584" -"delay" "0.3" -"target" "t17" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "360 552 1584" -"delay" "0.4" -"target" "t17" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "328 552 1608" -"delay" "0.1" -"target" "t16" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "360 552 1608" -"delay" "0.2" -"target" "t16" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "360 552 1488" -"delay" "1.2" -"target" "t21" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t23" -"origin" "328 552 1488" -"delay" "1.1" -"target" "t21" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "224 608 1496" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "224 584 1432" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "432 608 1528" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "320 576 1456" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb15.wav" -} -{ -"origin" "408 584 1432" -"noise" "world/amb15.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "304 580 1584" -"targetname" "t11" -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "304 580 1560" -"targetname" "t12" -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "304 580 1536" -"targetname" "t13" -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "304 580 1512" -"targetname" "t14" -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "304 580 1488" -"targetname" "t15" -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -} -{ -"origin" "304 580 1608" -"targetname" "t10" -"classname" "path_corner" -"spawnflags" "2048" // b#3: added this -} -{ -"targetname" "t17" -"origin" "344 580 1584" -"target" "t11" -"classname" "target_laser" -"spawnflags" "2064" // b#3: 16 -> 2064 -} -{ -"targetname" "t18" -"origin" "344 580 1560" -"target" "t12" -"classname" "target_laser" -"spawnflags" "2064" // b#3: 16 -> 2064 -} -{ -"targetname" "t19" -"origin" "344 580 1536" -"target" "t13" -"classname" "target_laser" -"spawnflags" "2064" // b#3: 16 -> 2064 -} -{ -"targetname" "t20" -"origin" "344 580 1512" -"target" "t14" -"classname" "target_laser" -"spawnflags" "2064" // b#3: 16 -> 2064 -} -{ -"targetname" "t21" -"origin" "344 580 1488" -"target" "t15" -"classname" "target_laser" -"spawnflags" "2064" // b#3: 16 -> 2064 -} -{ -"targetname" "t16" -"origin" "344 580 1608" -"target" "t10" -"spawnflags" "2064" // b#3: 16 -> 2064 -"classname" "target_laser" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "960 248 1416" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "648 160 1416" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "736 320 1416" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "656 496 1416" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "656 400 1416" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1008 -312 1416" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "832 320 1416" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t9" -} -{ -"model" "*22" -"classname" "func_door" -"angle" "-2" -"target" "t9" -"health" "10" -"spawnflags" "0" -} -{ -"classname" "target_speaker" -"origin" "784 -1032 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "720 -1136 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "776 -912 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "648 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "528 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "400 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "256 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "112 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "-40 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "-240 -1000 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "-448 -1040 912" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"classname" "target_speaker" -"origin" "-456 -1048 1048" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-712 -1064 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-576 -1080 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "896 -896 1032" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-456 -880 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-360 -744 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-504 -768 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-608 -664 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-344 -648 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-368 -512 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-512 -536 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-680 -520 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-616 -344 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-400 -312 1048" -"classname" "target_speaker" -} -{ -"noise" "world/bubl2.wav" -"spawnflags" "1" -"origin" "-512 -408 1048" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"origin" "-560 -1248 1048" -"spawnflags" "1" -"noise" "world/bubl2.wav" -} -{ -"noise" "world/fan1.wav" -"spawnflags" "2049" // b#3: 1 -> 2049 -"classname" "target_speaker" -"origin" "-392 -976 944" -"targetname" "t5" -} -{ -"classname" "target_speaker" -"spawnflags" "2049" // b#3: 1 -> 2049 -"noise" "world/fan1.wav" -"targetname" "t5" -"origin" "-352 -976 944" -} -{ -"model" "*23" -"classname" "func_door" -"angle" "-1" -"target" "t8" -} -{ -"style" "4" -"classname" "func_areaportal" -"targetname" "t8" -} -{ -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -"origin" "808 -200 1648" -} -{ -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -"origin" "728 -104 1648" -} -{ -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -"origin" "616 -24 1648" -} -{ -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -"origin" "472 40 1648" -} -{ -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -"origin" "320 64 1648" -} -{ -"origin" "168 40 1648" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -} -{ -"origin" "24 -24 1648" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -} -{ -"origin" "-88 -104 1648" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -} -{ -"origin" "-168 -200 1648" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -} -{ -"origin" "-216 -328 1648" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -} -{ -"origin" "-248 -456 1648" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -"light" "195" -} -{ -"origin" "-248 -568 1648" -"light" "195" -"classname" "light" -"_color" "1.000000 0.780877 0.015936" -} -{ -"origin" "856 -328 1648" -"light" "195" -"_color" "1.000000 0.780877 0.015936" -"classname" "light" -} -{ -"style" "5" -"targetname" "t7" -"classname" "func_areaportal" -} -{ -"origin" "-512 -304 1124" -"angle" "0" -"spawnflags" "32" -"classname" "misc_deadsoldier" -} -{ -"model" "*24" -"classname" "trigger_hurt" -"spawnflags" "4" -"dmg" "1000" -} -{ -"model" "*25" -"classname" "trigger_push" -"angle" "270" -"speed" "180" // b#4: added this -} -{ -"model" "*26" -"_minlight" ".2" -"angle" "-1" -"classname" "func_door" -} -{ -"light" "120" -"classname" "light" -"origin" "992 -160 1440" -} -{ -"light" "120" -"classname" "light" -"origin" "928 -32 1440" -} -{ -"light" "120" -"classname" "light" -"origin" "800 96 1440" -} -{ -"light" "120" -"classname" "light" -"origin" "920 40 1440" -} -{ -"classname" "light" -"light" "120" -"origin" "784 216 1440" -} -{ -"model" "*27" -"target" "t7" -"sounds" "3" -"speed" "120" -"angle" "-1" -"classname" "func_door" -"_minlight" ".2" -} -{ -"origin" "320 192 1536" -"light" "120" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "1504 -896 1248" -} -{ -"dmg" "1" -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t5" -"origin" "-388 -1004 920" -} -{ -"dmg" "1" -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t5" -"delay" ".2" -"origin" "-396 -1112 920" -} -{ -"dmg" "1" -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t5" -"delay" ".4" -"origin" "-396 -1056 920" -} -{ -"dmg" "1" -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"targetname" "t5" -"origin" "-412 -1084 904" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#3: added this -"dmg" "1" -"targetname" "t5" -"delay" ".6" -"origin" "-372 -1020 952" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"targetname" "t5" -//"target" "t6" // not needed -"origin" "-432 -960 904" -"killtarget" "t6" -} -{ -"model" "*28" -"classname" "trigger_hurt" -"spawnflags" "2054" // b#3: 6 -> 2054 -"dmg" "1000" -"targetname" "t5" -} -{ -"model" "*29" -"classname" "trigger_push" -"angle" "180" -"speed" "50" -"targetname" "t6" -"spawnflags" "2048" // b#3: added this -} -{ -"model" "*30" -"classname" "func_explosive" -"dmg" "20" -"health" "20" -"target" "t5" -} -{ -"model" "*31" -"target" "t1" -"classname" "func_button" -"angle" "-2" -"wait" "-1" -} -{ -"light" "240" -"origin" "1240 -1264 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "1408 -1280 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "1696 -896 1336" -"classname" "light" -} -{ -"light" "240" -"origin" "1648 -896 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "1376 -928 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "1272 -872 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "1112 -888 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "1000 -960 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "960 -1192 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "800 -1160 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "880 -928 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "640 -1152 1280" -"classname" "light" -} -{ -"light" "240" -"origin" "-448 -1088 1280" -"classname" "light" -} -{ -"classname" "light" -"origin" "512 -992 968" -"light" "180" -"_color" "0.000000 0.500000 1.000000" -} -{ -"classname" "light" -"origin" "-288 -992 936" -"light" "180" -"_color" "0.000000 0.500000 1.000000" -} -{ -"classname" "light" -"origin" "-456 -992 960" -"light" "180" -"_color" "0.000000 0.500000 1.000000" -} -{ -"model" "*32" -"origin" "-380 -992 928" -"classname" "func_rotating" -"spawnflags" "2053" -"speed" "600" -"targetname" "t5" -} -{ -"model" "*33" -"lip" "64" -"wait" "-1" -"spawnflags" "1" -"targetname" "t1" -"angle" "180" -"classname" "func_door" -"_minlight" ".2" -} -{ -"classname" "light" -"origin" "-640 -1088 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "1088 -1216 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-352 -992 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-608 -744 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-320 -768 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-512 -640 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-640 -512 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-512 -384 1280" -"light" "240" -} -{ -"classname" "light" -"origin" "-960 -416 1576" -"light" "120" -} -{ -"light" "120" -"origin" "-1152 -416 1576" -"classname" "light" -} -{ -"light" "120" -"origin" "-1056 -416 1576" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1248 -832 1576" -"light" "120" -} -{ -"classname" "light" -"origin" "-1344 -704 1576" -"light" "120" -} -{ -"light" "120" -"origin" "-960 -800 1240" -"classname" "light" -} -{ -"classname" "light" -"origin" "-864 -832 1576" -"light" "120" -} -{ -"classname" "light" -"origin" "-864 -704 1576" -"light" "120" -} -{ -"light" "120" -"origin" "-864 -576 1576" -"classname" "light" -} -{ -"targetname" "unitstart" -"classname" "info_player_start" -"angle" "45" -"origin" "-1056 -536 1432" -} -{ -"light" "94" -"classname" "light" -"origin" "-64 448 1500" -} -{ -"origin" "-128 448 1500" -"classname" "light" -"light" "94" -} -{ -"light" "106" -"classname" "light" -"origin" "-176 536 1604" -} -{ -"classname" "light" -"light" "80" -"origin" "-176 508 1532" -} -{ -"origin" "-240 508 1532" -"classname" "light" -"light" "65" -} -{ -"light" "106" -"classname" "light" -"origin" "-304 536 1604" -} -{ -"light" "106" -"classname" "light" -"origin" "-240 536 1604" -} -{ -"light" "65" -"classname" "light" -"origin" "-240 388 1532" -} -{ -"light" "80" -"classname" "light" -"origin" "-176 388 1532" -} -{ -"light" "106" -"classname" "light" -"origin" "-176 360 1604" -} -{ -"classname" "light" -"light" "106" -"origin" "-240 360 1604" -} -{ -"light" "106" -"classname" "light" -"origin" "-304 360 1604" -} -{ -"targetname" "lab" -"classname" "info_player_start" -"angle" "0" -"origin" "-16 448 1400" -} -{ -"model" "*34" -"targetname" "t26" -"spawnflags" "32" -"team" "doorent" -"classname" "func_door" -"angle" "-1" -} -{ -"model" "*35" -"spawnflags" "32" -"team" "doorent" -"classname" "func_door" -"angle" "90" -} -{ -"model" "*36" -"spawnflags" "32" -"team" "doorent" -"classname" "func_door" -"angle" "270" -} -{ -"origin" "1552 -312 1440" -"targetname" "rings1" -"delay" "1.2" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring7" -} -{ -"origin" "1408 -312 1440" -"targetname" "rings1" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring1" -} -{ -"origin" "1432 -312 1440" -"targetname" "rings1" -"delay" "0.2" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring2" -} -{ -"origin" "1456 -312 1440" -"targetname" "rings1" -"delay" "0.4" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring3" -} -{ -"origin" "1480 -312 1440" -"targetname" "rings1" -"delay" "0.6" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring4" -} -{ -"origin" "1504 -312 1440" -"targetname" "rings1" -"delay" "0.8" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring5" -} -{ -"origin" "1528 -312 1440" -"targetname" "rings1" -"delay" "1" -"classname" "trigger_relay" -"spawnflags" "2048" // b#3: added this -"target" "ring6" -} -{ -"model" "*37" -"targetname" "tellift" -"_minlight" "0.2" -"angle" "-1" -"classname" "func_door" -"speed" "200" -} -{ -"model" "*38" -"target" "rings1" -"wait" "8" -"classname" "trigger_multiple" -} -{ -"origin" "1576 -312 1440" -"delay" "3" -"targetname" "rings1" -"classname" "trigger_relay" -"target" "tellift" -} -{ -"model" "*39" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-23" -"targetname" "ring7" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} -{ -"model" "*40" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-185" -"targetname" "ring1" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} -{ -"model" "*41" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-158" -"targetname" "ring2" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} -{ -"model" "*42" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-131" -"targetname" "ring3" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} -{ -"model" "*43" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-104" -"targetname" "ring4" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} -{ -"model" "*44" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-77" -"targetname" "ring5" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} -{ -"model" "*45" -"speed" "40" -"team" "telepteam" -"classname" "func_door" -"lip" "-50" -"targetname" "ring6" -"angle" "-2" -"_minlight" "2" -"spawnflags" "2048" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/jail2@ee5d.ent b/stuff/mapfixes/baseq2/jail2@ee5d.ent deleted file mode 100644 index 587c42807..000000000 --- a/stuff/mapfixes/baseq2/jail2@ee5d.ent +++ /dev/null @@ -1,5356 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed incorrect targetname for 3x info_player_coop (b#1) -// -// 2. Added missing targetname to info_player_start (b#2) -// -// 3. Added spawnflag 1 to target_speaker entities (b#3) -// -// 4. Fixed silent elevator at level start (b#4) -// -// 5. Added missing spawnflag 256-2048 to some entities (b#5) -// -// 6. Removed unused fields/entities (b#6) -{ -"message" "Detention Center" -"classname" "worldspawn" -"sky" "unit3_" -"sounds" "4" -"nextmap" "jail3" -} -{ -"classname" "monster_medic" -"target" "t176" -"angle" "270" -"origin" "-336 728 32" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"target" "t176" -"targetname" "t178" -"origin" "88 324 4" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t177" -"target" "t178" -"origin" "-340 308 4" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t176" -"target" "t177" -"origin" "-332 536 4" -} -{ -"origin" "-2688 -16 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2968 88 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2944 392 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2920 592 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2560 576 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2280 520 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1144 520 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb1.wav" -"origin" "-1928 320 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb1.wav" -"origin" "-1760 320 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb1.wav" -"origin" "-1592 312 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb1.wav" -"origin" "-1408 320 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "-2376 24 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "-960 872 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "832 392 64" -} -{ -"origin" "-1144 168 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-2128 320 80" -"noise" "world/amb1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-840 512 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-824 376 80" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-552 368 80" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-88 504 248" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "-880 160 80" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "320 296 192" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb19.wav" -"origin" "-16 888 176" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb19.wav" -"origin" "0 728 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb19.wav" -"origin" "1288 424 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "-40 16 296" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "648 32 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "904 -128 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "1080 -136 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "1280 -120 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "1528 40 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "1288 24 64" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb6.wav" -"origin" "832 800 64" -} -{ -"origin" "1616 664 -120" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1864 656 -24" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1864 928 -24" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1600 936 80" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1600 736 176" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1272 872 176" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1488 680 176" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1416 416 176" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "8 712 352" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1408 632 64" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1360 800 64" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1216 656 64" -"noise" "world/amb19.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1088 664 64" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "184 16 296" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "840 672 64" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-984 760 64" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "704 384 64" -"noise" "world/amb6.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "96 488 248" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "312 504 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-328 464 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-280 168 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-160 -640 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"angle" "0" -"classname" "info_player_coop" -"targetname" "jail3b" // b#1: jail1 -> jail3b -"origin" "-3200 296 -16" -} -{ -"angle" "0" -"classname" "info_player_coop" -"targetname" "jail3b" // b#1: jail1 -> jail3b -"origin" "-3200 384 -16" -} -{ -"classname" "info_player_coop" -"angle" "0" -"targetname" "jail3b" // b#1: jail1 -> jail3b -"origin" "-3192 232 -16" -} -{ -"angle" "270" -"classname" "info_player_coop" -"targetname" "jail1" -"origin" "-8 -1680 88" -} -{ -"angle" "270" -"classname" "info_player_coop" -"targetname" "jail1" -"origin" "-56 -1680 88" -} -{ -"classname" "info_player_coop" -"angle" "270" -"targetname" "jail1" -"origin" "40 -1680 88" -} -{ -"model" "*1" -"spawnflags" "2048" -"target" "t60" -"_minlight" ".2" -"angle" "270" -"classname" "func_button" -} -{ -"classname" "light" -"light" "80" -"origin" "-864 -672 -200" -} -{ -"model" "*2" -"_minlight" ".2" -"target" "t150" -"angle" "0" -"classname" "func_button" -} -{ -"origin" "-3184 392 56" -"spawnflags" "2064" // b#5: 16 -> 2064 -"target" "t175" -"delay" "2" // b#6: moved here from relay -"classname" "target_crosslevel_target" -} -{ -"origin" "-3184 360 56" -"targetname" "t175" -"target" "t173" -"delay" "2" -"classname" "trigger_relay" -"spawnflags" "3840" // b#6: added this -} -{ -"classname" "target_help" -"targetname" "t174" -"message" "Use blue keycard to\ngain access to the\ndetention center." -"origin" "-880 -624 -168" -} -{ -"classname" "target_help" -"targetname" "t161" -"message" "Locate blue keycard." -"origin" "-48 -1568 168" -} -{ -"classname" "target_help" -"targetname" "t175" // b#6: t173 -> t175 -"message" "Find the yellow laser\ncontrol computer." -"origin" "-3184 312 68" -} -{ -"classname" "item_armor_jacket" -"spawnflags" "2048" -"origin" "-16 -544 -336" -} -{ -"classname" "item_power_shield" -"origin" "-2768 584 -208" -} -{ -"model" "*3" -"spawnflags" "2048" -"angle" "180" -"classname" "func_button" -"target" "t61" -"_minlight" ".2" -} -{ -"model" "*4" -"spawnflags" "2048" -"classname" "func_button" -"angle" "0" -"target" "t29" -"_minlight" ".2" -} -{ -"classname" "item_adrenaline" -"origin" "-2792 624 -208" -} -{ -"spawnflags" "1024" -"classname" "ammo_bullets" -"origin" "-2584 -224 16" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1024" -"origin" "-2664 -176 16" -} -{ -"origin" "168 -1760 80" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"origin" "-224 -1792 88" -"spawnflags" "1792" -"targetname" "t172" -"angle" "0" -"classname" "misc_teleporter_dest" -} -{ -"origin" "-12 -548 -328" -"spawnflags" "1792" -"target" "t172" -"classname" "misc_teleporter" -} -{ -"origin" "-2976 -32 16" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "160 576 216" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "0 -1792 80" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"origin" "288 744 8" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "1120 248 16" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "-2664 -232 16" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"spawnflags" "2048" -"origin" "-1528 712 16" -"classname" "ammo_rockets" -} -{ -"spawnflags" "2048" -"origin" "-1528 672 16" -"classname" "ammo_rockets" -} -{ -"origin" "-1728 592 160" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-2428 292 -16" -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -} -{ -"classname" "info_player_intermission" -"angles" "-11 310 0" -"origin" "-1410 -350 -228" -} -{ -"classname" "info_player_deathmatch" -"angle" "315" -"origin" "-1792 832 168" -} -{ -"classname" "info_player_deathmatch" -"origin" "-3200 160 -24" -"angle" "45" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "272 -1824 88" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "144 -640 8" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "96 592 216" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "672 672 24" -} -{ -"spawnflags" "1024" -"classname" "ammo_cells" -"origin" "800 288 16" -} -{ -"classname" "ammo_cells" -"spawnflags" "1024" -"origin" "800 240 16" -} -{ -"classname" "info_player_deathmatch" -"angle" "225" -"origin" "1792 832 -168" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "1624 48 24" -} -{ -"model" "*5" -"spawnflags" "1792" -"classname" "trigger_once" -"target" "t141" -} -{ -"model" "*6" -"classname" "trigger_once" -"target" "t141" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"origin" "-1648 208 16" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"origin" "-1688 208 16" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1608 208 16" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-1952 32 16" -} -{ -"origin" "160 -24 248" -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -} -{ -"origin" "240 -24 248" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "280 -24 248" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "1444 416 112" -"spawnflags" "4" -"classname" "misc_deadsoldier" -} -{ -"origin" "1408 416 128" -"spawnflags" "0" -"classname" "weapon_machinegun" -} -{ -"origin" "224 -472 0" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"origin" "-928 -424 -232" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-816 -512 -240" -"spawnflags" "1792" -"angle" "180" -"classname" "weapon_railgun" -} -{ -"origin" "-1304 -648 -168" -"target" "t128" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*7" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-56 -160 144" -"target" "t144" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*8" -"height" "100" -"speed" "100" -"angle" "180" -"classname" "trigger_monsterjump" -} -{ -"origin" "-128 192 176" -"classname" "light" -"light" "100" -} -{ -"origin" "-128 512 160" -"classname" "light" -"light" "100" -} -{ -"origin" "128 512 160" -"classname" "light" -"light" "100" -} -{ -"origin" "128 192 176" -"light" "100" -"classname" "light" -} -{ -"origin" "1600 16 104" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1104 320 88" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-3056 576 96" -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -} -{ -"origin" "-3072 0 96" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-1488 680 200" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -} -{ -"origin" "-1832 800 200" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-992 936 96" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1536 872 224" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1728 872 224" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-856 832 96" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-1728 136 72" -"targetname" "t24" -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -} -{ -"origin" "-1984 136 72" -"targetname" "t25" -"classname" "target_speaker" -"spawnflags" "2050" -"noise" "world/force1.wav" -} -{ -"origin" "-1984 504 72" -"targetname" "t20" -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -} -{ -"origin" "-1728 504 72" -"targetname" "t21" -"classname" "target_speaker" -"spawnflags" "2050" -"noise" "world/force1.wav" -} -{ -"origin" "-1472 504 72" -"targetname" "t22" -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -} -{ -"origin" "-1472 136 72" -"targetname" "t23" -"noise" "world/force1.wav" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"classname" "light" -"light" "60" -"origin" "-864 112 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1120 112 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1056 112 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1200 224 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1112 352 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1112 416 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1192 416 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1192 480 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1184 552 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1120 552 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-1072 464 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-912 464 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-880 416 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-880 288 16" -"classname" "light" -"light" "60" -} -{ -"classname" "light" -"light" "60" -"origin" "-800 112 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-784 160 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-784 224 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-784 288 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-992 272 16" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "60" -"classname" "light" -"origin" "-944 272 16" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "60" -"classname" "light" -"origin" "-944 320 16" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "60" -"classname" "light" -"origin" "-880 352 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"light" "60" -"classname" "light" -"origin" "-880 224 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-808 560 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-784 536 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-784 480 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"classname" "light" -"light" "60" -"origin" "-736 432 16" -"_color" "0.717647 1.000000 0.717647" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1104 -656 -352" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-984 -536 -352" -} -{ -"origin" "-248 -472 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-416 -336 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-360 -480 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-352 -680 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-488 -584 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-608 -448 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-712 -560 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-832 -472 -352" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-128 -344 -352" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-840 -616 -184" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-840 -456 -184" -"classname" "target_speaker" -"spawnflags" "1" // b#3: 2 -> 1 -"noise" "world/comp_hum1.wav" -} -{ -"origin" "-888 -824 -112" -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-864 -400 -160" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-320 -1120 96" -} -{ -"light" "80" -"classname" "light" -"origin" "-464 -600 -112" -} -{ -"light" "80" -"classname" "light" -"origin" "-464 -584 -48" -} -{ -"light" "64" -"classname" "light" -"origin" "56 -672 -8" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-1160 -592 128" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-1136 -808 128" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-1376 -816 128" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-1304 -680 128" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-1288 -416 128" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-1400 -552 128" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-264 -496 192" -} -{ -"origin" "-392 -360 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1144 -456 128" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-8 -496 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb19.wav" -"origin" "1448 672 -120" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-160 -352 192" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "120 -360 192" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/wind2.wav" -"origin" "-416 -656 192" -} -{ -"origin" "176 -640 192" -"noise" "world/wind2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "136 -992 96" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "320 -1120 96" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "136 -1856 112" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"origin" "0 -1856 112" -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-192 -1848 112" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1056 -880 -160" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-320 -1536 144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "320 -1536 144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "168 -1744 144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-168 -1744 144" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-136 -992 96" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "616 8 24" -"target" "t171" -"targetname" "t170" -"spawnflags" "257" -"classname" "monster_infantry" -"angle" "90" -} -{ -"origin" "616 56 24" -"targetname" "t171" -"spawnflags" "257" -"angle" "270" -"classname" "monster_infantry" -} -{ -"model" "*9" -"target" "t170" -"classname" "trigger_once" -"spawnflags" "2304" // b#5: added this -} -{ -"origin" "1360 936 128" -"classname" "item_health_small" -} -{ -"origin" "1320 936 128" -"classname" "item_health_small" -} -{ -"origin" "1400 936 128" -"classname" "item_health_small" -} -{ -"origin" "1184 936 128" -"classname" "item_armor_jacket" -} -{ -"targetname" "t169" -"angle" "180" -"classname" "monster_infantry" -"spawnflags" "258" -"origin" "2024 792 -80" -} -{ -"targetname" "t169" -"classname" "monster_infantry" -"angle" "180" -"spawnflags" "2" -"origin" "2024 688 -80" -} -{ -"model" "*10" -"spawnflags" "2048" -"classname" "func_door" -"angle" "-2" -"wait" "-1" -"lip" "4" -"speed" "150" -"targetname" "t169" -"_minlight" ".1" -} -{ -"light" "80" -"classname" "light" -"origin" "2016 736 -16" -} -{ -"light" "80" -"classname" "light" -"origin" "2016 792 -16" -} -{ -"classname" "light" -"light" "80" -"origin" "2016 680 -16" -} -{ -"spawnflags" "1" -"classname" "monster_infantry" -"targetname" "t167" -"target" "t168" -"item" "ammo_bullets" -"origin" "976 -128 24" -} -{ -"spawnflags" "1" -"classname" "monster_infantry" -"targetname" "t166" -"target" "t167" -"origin" "1072 -128 24" -} -{ -"item" "ammo_bullets" -"classname" "monster_infantry" -"spawnflags" "1" -"targetname" "t168" -"origin" "760 -128 24" -} -{ -"model" "*11" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t165" -} -{ -"angle" "0" -"classname" "monster_infantry" -"targetname" "t165" -"spawnflags" "1" -"target" "t166" -"origin" "1152 -104 24" -} -{ -"classname" "monster_infantry" -"angle" "0" -"targetname" "t165" -"spawnflags" "1" -"item" "ammo_bullets" -"origin" "1152 -152 24" -} -{ -"origin" "424 288 112" -"light" "80" -"classname" "light" -} -{ -"classname" "item_armor_jacket" -"origin" "-288 736 8" -} -{ -"origin" "-792 -512 -208" -"light" "80" -"classname" "light" -} -{ -"origin" "-1408 872 96" -"message" "You have found a secret area." -"targetname" "t164" -"classname" "target_secret" -} -{ -"model" "*12" -"target" "t164" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -} -{ -"classname" "item_health_large" -"origin" "248 -408 0" -} -{ -"classname" "item_health_large" -"origin" "-168 80 248" -} -{ -"classname" "item_health_large" -"origin" "-168 40 248" -} -{ -"origin" "628 32 272" -"classname" "item_armor_jacket" -} -{ -"origin" "408 376 80" -"targetname" "t139" -"classname" "target_goal" -} -{ -"origin" "56 -184 32" -"targetname" "t138" -"classname" "target_goal" -} -{ -"origin" "-2416 404 32" -"message" "You have found a secret area." -"targetname" "t162" -"classname" "target_secret" -} -{ -"model" "*13" -"target" "t162" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -} -{ -"spawnflags" "2048" -"origin" "-2392 292 -12" -"classname" "item_adrenaline" -} -{ -"origin" "-1728 -88 72" -"item" "ammo_grenades" -"angle" "90" -"spawnflags" "8" -"classname" "misc_insane" -} -{ -"classname" "item_bandolier" -"origin" "200 -432 0" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "1" -"origin" "216 -400 -16" -} -{ -"message" "Locate red key card in the\nsecurity complex." -"origin" "104 -152 72" -"classname" "target_help" -"targetname" "t138" -} -{ -"model" "*14" -"target" "t161" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "1512 672 128" -"classname" "item_health" -} -{ -"classname" "item_health" -"origin" "-1424 56 16" -} -{ -"classname" "item_health" -"origin" "-2016 608 16" -} -{ -"origin" "-1220 878 224" -"classname" "ammo_bullets" -} -{ -"origin" "-1186 878 224" -"classname" "ammo_bullets" -} -{ -"classname" "ammo_bullets" -"origin" "-1254 878 224" -} -{ -"classname" "item_health_large" -"origin" "-2312 216 16" -} -{ -"classname" "item_health_large" -"origin" "-2312 176 16" -} -{ -"classname" "item_health_small" -"origin" "-1100 942 8" -} -{ -"classname" "item_health_small" -"origin" "-1066 942 8" -} -{ -"classname" "item_health_large" -"origin" "-600 472 0" -} -{ -"origin" "-2400 184 28" -"light" "150" -"classname" "light" -} -{ -"classname" "ammo_shells" -"origin" "-2584 652 16" -} -{ -"classname" "ammo_shells" -"origin" "-2548 652 16" -} -{ -"classname" "ammo_shells" -"origin" "-2900 812 16" -} -{ -"classname" "ammo_shells" -"origin" "-2900 776 16" -} -{ -"classname" "item_health" -"origin" "-3056 620 52" -} -{ -"classname" "item_health" -"origin" "-3056 580 52" -} -{ -"classname" "ammo_cells" -"origin" "-2792 276 -108" -} -{ -"classname" "ammo_cells" -"origin" "-2792 240 -108" -} -{ -"classname" "ammo_cells" -"origin" "-2792 312 -108" -} -{ -"classname" "item_health_large" -"origin" "-2704 160 16" -} -{ -"classname" "ammo_shells" -"origin" "284 88 248" -} -{ -"classname" "ammo_shells" -"origin" "248 88 248" -} -{ -"classname" "ammo_shells" -"origin" "320 88 248" -} -{ -"classname" "item_armor_shard" -"origin" "744 48 16" -} -{ -"classname" "item_armor_shard" -"origin" "744 88 16" -} -{ -"classname" "item_armor_shard" -"origin" "704 88 16" -} -{ -"classname" "item_health" -"origin" "1184 96 16" -} -{ -"classname" "item_health" -"origin" "1184 32 16" -} -{ -"model" "*15" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t160" -} -{ -"spawnflags" "2" -"angle" "180" -"classname" "monster_flyer" -"targetname" "t160" -"origin" "592 56 296" -} -{ -"spawnflags" "2" -"classname" "monster_flyer" -"angle" "180" -"targetname" "t160" -"origin" "592 16 296" -} -{ -"origin" "616 32 168" -"light" "80" -"classname" "light" -} -{ -"model" "*16" -"classname" "func_explosive" -"mass" "800" -"dmg" "1" -"targetname" "t160" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t159" -} -{ -"model" "*17" -"classname" "func_door" -"angle" "-1" -"_minlight" ".2" -"target" "t159" -} -{ -"classname" "monster_infantry" -"angle" "180" -"spawnflags" "257" -"origin" "1896 944 -80" -} -{ -"item" "ammo_bullets" -"classname" "monster_infantry" -"angle" "90" -"target" "t157" -"spawnflags" "1" -"origin" "1728 688 -168" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t157" -"target" "t158" -//"angle" "180" // b#6: never used -"origin" "1728 848 -184" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t158" -"target" "t157" -"origin" "1728 640 -184" -} -{ -"classname" "item_health_small" -"origin" "1956 764 -88" -} -{ -"classname" "item_health_small" -"origin" "1956 800 -88" -} -{ -"classname" "item_health_small" -"origin" "1956 836 -88" -} -{ -"classname" "item_health_small" -"origin" "1956 872 -88" -} -{ -"classname" "item_health_small" -"origin" "1956 728 -88" -} -{ -"classname" "ammo_grenades" -"origin" "1672 832 -176" -} -{ -"classname" "ammo_grenades" -"origin" "1672 872 -176" -} -{ -"classname" "ammo_grenades" -"origin" "1672 792 -176" -} -{ -"classname" "weapon_grenadelauncher" -"origin" "1304 696 -176" -"target" "t169" -} -{ -"item" "ammo_grenades" -"classname" "misc_insane" -"angle" "225" -"origin" "1368 728 -168" -} -{ -"classname" "ammo_shells" -"origin" "856 856 16" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2" -"origin" "832 824 0" -} -{ -"classname" "item_armor_jacket" -"origin" "808 856 16" -} -{ -"classname" "item_health_large" -"origin" "608 288 0" -} -{ -"classname" "item_health_large" -"origin" "544 280 0" -} -{ -"classname" "ammo_bullets" -"origin" "544 488 0" -} -{ -"classname" "ammo_bullets" -"origin" "592 488 0" -} -{ -"style" "2" -"classname" "func_areaportal" -"targetname" "t139" -} -{ -"origin" "-1320 872 232" -"delay" ".2" -"targetname" "t75" -"target" "t76" -"classname" "trigger_relay" -} -{ -"origin" "-1480 864 88" -"classname" "item_armor_combat" -} -{ -"origin" "-1432 728 160" -"classname" "ammo_shells" -} -{ -"origin" "-1760 32 0" -"classname" "misc_deadsoldier" -"spawnflags" "1" -} -{ -"origin" "-1720 -16 0" -"spawnflags" "8" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1472 600 32" -"angle" "270" -"spawnflags" "16" -"classname" "misc_insane" -} -{ -"origin" "-1168 176 16" -"classname" "ammo_bullets" -} -{ -"origin" "368 744 8" -"classname" "item_health_small" -} -{ -"origin" "368 704 8" -"classname" "item_health_small" -} -{ -"origin" "-384 736 8" -"classname" "item_health_large" -} -{ -"spawnflags" "2050" -"origin" "-1296 -432 -168" -"targetname" "t128" -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "2050" -"origin" "-868 -488 -168" -"targetname" "t128" -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "2050" -"origin" "-1296 -784 -168" -"targetname" "t128" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -} -{ -"item" "ammo_shells" -"origin" "-1952 680 24" -"target" "t155" -"classname" "misc_insane" -} -{ -"origin" "-1960 632 8" -"target" "t156" -"targetname" "t155" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-1952 712 8" -"target" "t155" -"targetname" "t154" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-2032 712 8" -"target" "t154" -"targetname" "t153" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-2032 640 8" -"targetname" "t156" -"target" "t153" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-1512 8 8" -"target" "t152" -"targetname" "t151" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-1424 -64 8" -"target" "t151" -"targetname" "t152" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"item" "ammo_bullets" -"origin" "-1512 -48 24" -"target" "t151" -"angle" "90" -"spawnflags" "4" -"classname" "misc_insane" -} -{ -"origin" "-948 808 -84" -"spawnflags" "4" -"classname" "misc_insane" -} -{ -"origin" "-968 936 -68" -"angle" "270" -"spawnflags" "8" -"classname" "misc_insane" -} -{ -"origin" "-938 388 12" -"targetname" "t150" -"classname" "target_laser" -"spawnflags" "3" -"angle" "180" -"dmg" "50" -} -{ -"origin" "-938 388 52" -"targetname" "t150" -"dmg" "50" -"angle" "180" -"spawnflags" "3" -"classname" "target_laser" -} -{ -"classname" "target_crosslevel_trigger" -"spawnflags" "2049" // b#5: 1 -> 2049 -"targetname" "t148" -"origin" "-28 0 320" -} -{ -"classname" "target_help" -"targetname" "t148" -"message" "Return to the\nsecurity complex." -"origin" "-100 60 320" -} -{ -"classname" "target_goal" -"targetname" "t148" -"origin" "-108 -40 320" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#6: added this -"target" "t149" -"targetname" "t148" -"origin" "-108 -16 320" -} -{ -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#5: added this -"attenuation" "-1" -"targetname" "t148" -"origin" "-76 -36 288" -} -{ -"light" "48" -"classname" "light" -"origin" "-84 -95 252" -} -{ -"classname" "light" -"light" "48" -"origin" "-60 -95 252" -} -{ -"classname" "item_health" -"origin" "-48 752 304" -} -{ -"origin" "-160 568 216" -"classname" "ammo_bullets" -} -{ -"spawnflags" "3584" -"origin" "-120 608 216" -"classname" "ammo_bullets" -} -{ -"origin" "-152 0 16" -"classname" "item_health_large" -} -{ -"origin" "64 24 16" -"classname" "ammo_shells" -} -{ -"origin" "32 24 16" -"classname" "ammo_shells" -} -{ -"origin" "-640 -472 -120" -"classname" "item_health" -} -{ -"origin" "-600 -472 -120" -"classname" "item_health" -} -{ -"origin" "-1240 -672 64" -"targetname" "t146" -"classname" "point_combat" -"spawnflags" "256" -} -{ -"origin" "-1240 -808 64" -"targetname" "t147" -"classname" "point_combat" -} -{ -"origin" "-1240 -544 64" -"targetname" "t145" -"classname" "point_combat" -} -{ -"origin" "-284 -1812 88" -"classname" "ammo_shells" -} -{ -"origin" "-284 -1848 88" -"classname" "ammo_shells" -} -{ -"origin" "-284 -1776 88" -"classname" "ammo_shells" -} -{ -"origin" "4 -1196 4" -"classname" "ammo_bullets" -} -{ -"origin" "40 -1196 4" -"classname" "ammo_bullets" -} -{ -"origin" "76 -1196 4" -"classname" "ammo_bullets" -} -{ -"model" "*18" -"spawnflags" "2048" -"wait" "-1" -"target" "brandon" -"classname" "trigger_multiple" -} -{ -"model" "*19" -"spawnflags" "2048" -"target" "t128" -"targetname" "brandon" -"wait" "-1" -"angle" "0" -"classname" "func_button" -} -{ -"spawnflags" "2048" -"origin" "-868 -672 -228" -"classname" "key_blue_key" -"target" "t174" -} -{ -"spawnflags" "2048" -"item" "key_blue_key" -"origin" "120 -308 68" -"target" "t144" -"targetname" "t143" -"classname" "trigger_key" -} -{ -"model" "*20" -"spawnflags" "2048" -"target" "t143" -"classname" "trigger_multiple" -} -{ -"origin" "416 416 88" -"item" "key_red_key" -"targetname" "t142" -"target" "t141" -"classname" "trigger_key" -"spawnflags" "2048" -} -{ -"model" "*21" -"target" "t142" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"style" "3" -"targetname" "t108" -"classname" "func_areaportal" -} -{ -"style" "4" -"targetname" "t112" -"classname" "func_areaportal" -} -{ -"style" "5" -"targetname" "t138" -"classname" "func_areaportal" -} -{ -"classname" "misc_explobox" -"origin" "-2840 640 0" -} -{ -"classname" "ammo_grenades" -"origin" "-2984 744 16" -} -{ -"classname" "item_health_large" -"origin" "-2584 -176 16" -} -{ -"model" "*22" -"spawnflags" "2048" -"classname" "func_door" -"speed" "300" -"angle" "-1" -"wait" "-1" -"_minlight" ".2" -"targetname" "t136" -} -{ -"model" "*23" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t135" -} -{ -"model" "*24" -"spawnflags" "2048" -"classname" "func_door" -"angle" "-1" -"wait" "-1" -"_minlight" ".2" -"targetname" "t136" -"lip" "8" -"speed" "300" -} -{ -"classname" "ammo_shells" -"origin" "-1466 728 160" -} -{ -"classname" "item_health" -"origin" "-1880 680 160" -} -{ -"classname" "item_health" -"origin" "-1824 680 160" -} -{ -"light" "80" -"classname" "light" -"origin" "-816 864 176" -} -{ -"classname" "light" -"light" "80" -"origin" "-816 800 176" -} -{ -"classname" "monster_gunner" -"angle" "180" -"origin" "-1208 832 232" -} -{ -"classname" "ammo_bullets" -"origin" "-1168 216 16" -} -{ -"classname" "ammo_bullets" -"origin" "-1168 136 16" -} -{ -"spawnflags" "2" -"classname" "monster_flyer" -"angle" "180" -"targetname" "t134" -"origin" "-796 864 156" -} -{ -"spawnflags" "2" -"classname" "monster_flyer" -"angle" "180" -"targetname" "t134" -"origin" "-796 800 156" -} -{ -"model" "*25" -"classname" "func_explosive" -"dmg" "1" -"targetname" "t134" -} -{ -"classname" "ammo_grenades" -"origin" "-856 936 16" -} -{ -"model" "*26" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t133" -} -{ -"classname" "monster_berserk" -"targetname" "t133" -"origin" "-1232 848 72" -"target" "t134" -"spawnflags" "1" -} -{ -"classname" "item_health" -"origin" "-88 792 0" -} -{ -"classname" "item_health" -"origin" "-88 736 0" -} -{ -"classname" "ammo_bullets" -"origin" "-120 568 216" -} -{ -"spawnflags" "3584" -"classname" "ammo_bullets" -"origin" "-160 608 216" -} -{ -"classname" "weapon_chaingun" -"origin" "0 480 216" -} -{ -"model" "*27" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t132" -} -{ -"classname" "monster_gladiator" -"angle" "90" -"targetname" "t132" -"origin" "0 160 264" -"spawnflags" "1" -} -{ -"model" "*28" -"classname" "trigger_once" -"target" "t131" -} -{ -"classname" "light" -"light" "100" -"origin" "0 -1488 96" -} -{ -"origin" "0 -1524 104" -"angle" "270" -"classname" "info_player_start" -"targetname" "jail1" // b#2: added this -} -{ -"model" "*29" -"classname" "func_button" -"angle" "90" -"target" "t130" -} -{ -"origin" "224 -1880 88" -"classname" "item_health_large" -} -{ -"origin" "280 -1880 88" -"classname" "item_health_large" -} -{ -"origin" "-64 -1184 8" -"classname" "ammo_grenades" -} -{ -"origin" "-672 -864 -120" -"classname" "ammo_shells" -} -{ -"origin" "-736 -864 -120" -"classname" "ammo_shells" -} -{ -"origin" "-984 -864 -240" -"classname" "ammo_bullets" -} -{ -"origin" "-1048 -864 -240" -"classname" "ammo_bullets" -} -{ -"origin" "-864 -416 -240" -"classname" "item_health" -} -{ -"origin" "-2944 800 28" -"classname" "monster_medic" -"angle" "270" -"spawnflags" "2" -"targetname" "t136" -} -{ -"spawnflags" "258" -"origin" "-2624 -232 28" -"angle" "90" -"classname" "monster_medic" -"targetname" "t136" -} -{ -"classname" "light" -"light" "130" -"origin" "-796 734 34" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#5: added this -"delay" "2" -"targetname" "t127" -"target" "t129" -"origin" "-1288 -616 -64" -} -{ -"target" "t146" -"angle" "0" -"spawnflags" "258" -"classname" "monster_flyer" -"targetname" "t129" -"origin" "-1008 -664 88" -} -{ -"target" "t145" -"angle" "180" -"spawnflags" "2" -"classname" "monster_flyer" -"targetname" "t129" -"origin" "-1008 -544 96" -} -{ -"target" "t147" -"classname" "monster_flyer" -"spawnflags" "2" -"angle" "45" -"targetname" "t129" -"origin" "-1008 -800 80" -} -{ -"style" "32" -"spawnflags" "1" -"light" "250" -"classname" "light" -"targetname" "t127" -"origin" "-1320 -688 -112" -} -{ -"style" "32" -"spawnflags" "1" -"light" "250" -"classname" "light" -"targetname" "t127" -"origin" "-1304 -496 -112" -} -{ -"style" "32" -"classname" "light" -"light" "250" -"spawnflags" "1" -"targetname" "t127" -"origin" "-1280 -824 -112" -} -{ -"origin" "-992 320 16" -"classname" "item_quad" -} -{ -"model" "*30" -"targetname" "t20" -"classname" "func_wall" -"spawnflags" "2054" -} -{ -"model" "*31" -"targetname" "t21" -"spawnflags" "2050" -"classname" "func_wall" -} -{ -"model" "*32" -"targetname" "t22" -"spawnflags" "2054" -"classname" "func_wall" -} -{ -"model" "*33" -"targetname" "t24" -"classname" "func_wall" -"spawnflags" "2054" -} -{ -"model" "*34" -"targetname" "t23" -"classname" "func_wall" -"spawnflags" "2054" -} -{ -"model" "*35" -"targetname" "t25" -"spawnflags" "2050" -"classname" "func_wall" -} -{ -"delay" "1" -"origin" "-1248 -668 -132" -"targetname" "t128" -"target" "t127" -"classname" "trigger_relay" -} -{ -"style" "32" -"origin" "-1160 -608 -28" -"targetname" "t127" -"classname" "light" -"spawnflags" "1" -} -{ -"style" "32" -"origin" "-1164 -736 -28" -"targetname" "t127" -"spawnflags" "1" -"classname" "light" -} -{ -"origin" "-1144 -608 -28" -"classname" "light" -"light" "80" -} -{ -"origin" "-1144 -736 -28" -"light" "80" -"classname" "light" -} -{ -"pathtarget" "brandon" -"origin" "-792 -512 -248" -"targetname" "t126" -"classname" "point_combat" -} -{ -"origin" "-1032 -448 -232" -"target" "t126" -"spawnflags" "1" -"angle" "315" -"classname" "monster_gladiator" -} -{ -"origin" "-2816 16 24" -"target" "t123" -"angle" "0" -"classname" "monster_infantry" -"spawnflags" "768" -} -{ -"origin" "-2776 8 8" -"target" "t124" -"targetname" "t123" -"classname" "path_corner" -"spawnflags" "2816" // b#5: added this -} -{ -"origin" "-2544 8 8" -"targetname" "t124" -"target" "t123" -"classname" "path_corner" -"spawnflags" "2816" // b#5: added this -} -{ -"light" "80" -"classname" "light" -"origin" "-2944 768 112" -} -{ -"light" "80" -"classname" "light" -"origin" "-2912 544 112" -} -{ -"origin" "-2968 296 16" -"classname" "monster_tank" -"angle" "0" -"targetname" "t135" -"target" "t136" -} -{ -"spawnflags" "1" -"origin" "-1360 240 24" -"target" "t116" -"angle" "180" -"classname" "monster_gladiator" -} -{ -"spawnflags" "257" -"origin" "-2040 408 24" -"target" "t119" -"angle" "0" -"classname" "monster_gladiator" -} -{ -"origin" "-1984 408 8" -"targetname" "t119" -"target" "t118" -"classname" "path_corner" -"spawnflags" "2304" // b#5: added this -} -{ -"origin" "-1488 408 8" -"target" "t119" -"targetname" "t118" -"classname" "path_corner" -"spawnflags" "2304" // b#5: added this -} -{ -"origin" "-1416 240 8" -"target" "t117" -"targetname" "t116" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-1912 240 8" -"targetname" "t117" -"target" "t116" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"model" "*36" -"target" "t115" -"classname" "trigger_once" -"spawnflags" "2304" // b#5: added this -} -{ -"spawnflags" "257" -"origin" "-1736 592 168" -"targetname" "t115" -"classname" "monster_infantry" -"angle" "270" -} -{ -"spawnflags" "257" -"origin" "-1504 576 168" -"targetname" "t115" -"angle" "270" -"classname" "monster_infantry" -} -{ -"spawnflags" "1" -"origin" "-1576 832 176" -"target" "t113" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "-1608 832 160" -"target" "t114" -"targetname" "t113" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "-1792 832 160" -"targetname" "t114" -"target" "t113" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"spawnflags" "1" -"origin" "-560 384 16" -"targetname" "t112" -"angle" "0" -"classname" "monster_berserk" -} -{ -"model" "*37" -"target" "t111" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "736 -16 32" -"targetname" "t111" -"angle" "180" -"classname" "monster_parasite" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"origin" "1280 80 32" -"targetname" "t108" -"angle" "90" -"classname" "monster_parasite" -} -{ -"spawnflags" "1" -"origin" "1248 880 144" -"target" "t107" -"angle" "270" -"classname" "monster_infantry" -} -{ -"model" "*38" -"target" "t107" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "1608 208 112" -"targetname" "t107" -"angle" "270" -"classname" "monster_infantry" -} -{ -"origin" "1144 504 8" -"spawnflags" "257" // b#5: 1 -> 257 -"targetname" "t105" -"classname" "point_combat" -} -{ -"origin" "1392 672 16" -"spawnflags" "1" -"targetname" "t104" -"classname" "point_combat" -} -{ -"spawnflags" "257" -"origin" "1224 408 24" -"target" "t105" -"classname" "monster_infantry" -"angle" "90" -"item" "ammo_bullets" -} -{ -"spawnflags" "1" -"origin" "1264 408 24" -"target" "t104" -"angle" "90" -"classname" "monster_infantry" -"item" "ammo_bullets" -} -{ -"spawnflags" "1" -"origin" "680 680 32" -"angle" "0" -"classname" "monster_parasite" -} -{ -"spawnflags" "1" -"origin" "832 248 32" -"angle" "90" -"classname" "monster_parasite" -} -{ -"spawnflags" "769" -"classname" "monster_medic" -"angle" "270" -"origin" "320 728 20" -} -{ -"model" "*39" -"lip" "4" -"wait" "-1" -"angle" "-2" -"classname" "func_door" -"targetname" "t131" -"_minlight" ".2" -} -{ -"classname" "light" -"light" "120" -"origin" "328 728 72" -} -{ -"origin" "-328 728 72" -"light" "120" -"classname" "light" -} -{ -"model" "*40" -"lip" "4" -"classname" "func_door" -"angle" "-2" -"wait" "-1" -"targetname" "t131" -"_minlight" ".2" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t97" -"target" "t98" -"origin" "280 496 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"target" "t97" -"targetname" "t98" -"origin" "280 208 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t95" -"target" "t94" -"origin" "0 304 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"targetname" "t94" -"target" "t95" -"origin" "-272 304 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"target" "t94" -"targetname" "t95" -"origin" "-272 512 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -"target" "t94" -"targetname" "t96" -"origin" "-240 320 0" -} -{ -"angle" "270" -"classname" "monster_berserk" -"target" "t96" -"origin" "-280 560 16" -"spawnflags" "0" -} -{ -"classname" "monster_berserk" -"angle" "270" -"target" "t97" -"origin" "280 560 16" -"spawnflags" "0" -} -{ -"model" "*41" -"_minlight" ".2" -"spawnflags" "1" -"classname" "func_plat" -} -{ -"spawnflags" "1" -"classname" "monster_gunner" -"angle" "270" -"origin" "88 520 224" -} -{ -"origin" "0 -896 0" -"target" "t88" -"targetname" "t87" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "0 -1072 0" -"targetname" "t88" -"target" "t87" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"spawnflags" "1" -"origin" "0 -936 16" -"target" "t88" -"classname" "monster_infantry" -} -{ -"model" "*42" -"target" "t86" -"classname" "trigger_once" -"spawnflags" "2304" // b#5: added this -} -{ -"origin" "8 -1128 8" -"spawnflags" "257" -"targetname" "t86" -"angle" "270" -"classname" "monster_infantry" -} -{ -"origin" "-264 -1456 88" -"spawnflags" "257" -"target" "t85" -"angle" "90" -"classname" "monster_gunner" -} -{ -"origin" "-264 -1112 16" -"target" "t85" -"targetname" "t84" -"classname" "path_corner" -"spawnflags" "2304" // b#5: added this -} -{ -"origin" "-264 -1408 72" -"targetname" "t85" -"target" "t84" -"classname" "path_corner" -"spawnflags" "2304" // b#5: added this -} -{ -"origin" "256 -1096 32" -"spawnflags" "1" -"target" "t82" -"angle" "270" -"classname" "monster_gunner" -} -{ -"origin" "256 -1128 16" -"target" "t83" -"targetname" "t82" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"origin" "256 -1408 80" -"targetname" "t83" -"target" "t82" -"classname" "path_corner" -"spawnflags" "2048" // b#5: added this -} -{ -"model" "*43" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t81" -} -{ -"spawnflags" "1" -"classname" "monster_infantry" -"angle" "90" -"targetname" "t81" -"origin" "-664 -656 -112" -} -{ -"model" "*44" -"classname" "trigger_once" -"spawnflags" "2048" // b#5: added this -"target" "t81" -} -{ -"spawnflags" "1" -"classname" "monster_tank" -"angle" "180" -"origin" "272 -352 8" -} -{ -"origin" "-3296 288 -16" -"targetname" "jail3b" -"classname" "info_player_start" -"angle" "0" -} -{ -"origin" "-3448 304 16" -"map" "jail3$jail2b" -"targetname" "t80" -"classname" "target_changelevel" -} -{ -"model" "*45" -"angle" "180" -"target" "t80" -"classname" "trigger_multiple" -} -{ -"origin" "-64 -1536 264" -"target" "jail2" -"map" "jail1$jail2" -"targetname" "t79" -"classname" "target_changelevel" -} -{ -"model" "*46" -"target" "t79" -"classname" "trigger_multiple" -} -{ -"spawnflags" "2081" -"origin" "182 112 320" -"dmg" "1000" -"angle" "180" -"classname" "target_laser" -"targetname" "t148" // b#6: t149 -> t148 -} -{ -"spawnflags" "2081" -"origin" "182 112 288" -"classname" "target_laser" -"angle" "180" -"dmg" "1000" -"targetname" "t148" // b#6: t149 -> t148 -} -{ -"spawnflags" "2081" -"origin" "182 112 254" -"classname" "target_laser" -"angle" "180" -"dmg" "1000" -"targetname" "t148" // b#6: t149 -> t148 -} -{ -"model" "*47" -"targetname" "t29" -"classname" "func_door" -"angle" "-2" -"_minlight" ".3" -"sounds" "3" -"wait" "5" -"spawnflags" "2048" -} -{ -"origin" "-2880 240 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2912 0 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2640 48 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2544 48 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2400 32 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2272 32 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2272 320 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2272 544 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2400 544 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2544 512 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2640 512 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2624 -208 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-2880 336 112" -"light" "80" -"classname" "light" -} -{ -"origin" "-3076 32 100" -"classname" "light" -"light" "100" -} -{ -"origin" "-3076 540 100" -"classname" "light" -"light" "100" -} -{ -"origin" "-3076 608 100" -"classname" "light" -"light" "100" -} -{ -"origin" "-3076 -36 100" -"light" "100" -"classname" "light" -} -{ -"origin" "-3248 360 96" -"classname" "light" -"light" "80" -} -{ -"origin" "-3248 416 96" -"light" "80" -"classname" "light" -} -{ -"origin" "-3248 224 96" -"classname" "light" -"light" "80" -} -{ -"origin" "-3248 168 96" -"light" "80" -"classname" "light" -} -{ -"model" "*48" -"sounds" "3" -"_minlight" ".3" -"targetname" "t27" -"angle" "-2" -"classname" "func_door" -"wait" "-1" -"spawnflags" "2048" -"message" "This door is opened elsewhere." -} -{ -"origin" "-2300 320 36" -"light" "64" -"classname" "light" -} -{ -"origin" "-3008 288 120" -"classname" "light" -"light" "200" -} -{ -"origin" "-3136 288 120" -"classname" "light" -"light" "200" -} -{ -"origin" "-2912 -64 120" -"light" "200" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "-2768 288 -24" -} -{ -"classname" "light" -"light" "64" -"origin" "-2768 584 -92" -} -{ -"light" "80" -"classname" "light" -"origin" "-96 608 272" -} -{ -"classname" "light" -"light" "80" -"origin" "96 608 272" -} -{ -"light" "80" -"classname" "light" -"origin" "0 136 344" -} -{ -"light" "80" -"classname" "light" -"origin" "0 -40 344" -} -{ -"light" "80" -"classname" "light" -"origin" "72 40 344" -} -{ -"light" "80" -"classname" "light" -"origin" "312 40 344" -} -{ -"light" "80" -"classname" "light" -"origin" "504 40 344" -} -{ -"classname" "light" -"light" "80" -"origin" "-72 40 344" -} -{ -"light" "80" -"classname" "light" -"origin" "728 32 168" -} -{ -"classname" "light" -"light" "80" -"origin" "616 32 328" -} -{ -"origin" "1648 656 148" -"classname" "light" -"light" "80" -} -{ -"origin" "1656 776 120" -"classname" "light" -"light" "80" -} -{ -"light" "48" -"classname" "light" -"origin" "1808 540 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1872 536 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1948 540 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1960 632 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1956 708 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1956 804 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1956 884 -84" -} -{ -"light" "48" -"classname" "light" -"origin" "1956 952 -84" -} -{ -"classname" "light" -"light" "48" -"origin" "1708 536 -84" -} -{ -"light" "80" -"classname" "light" -"origin" "1824 880 -64" -} -{ -"light" "80" -"classname" "light" -"origin" "1728 880 8" -} -{ -"light" "80" -"classname" "light" -"origin" "1656 864 72" -} -{ -"light" "80" -"classname" "light" -"origin" "1592 556 172" -} -{ -"classname" "light" -"light" "80" -"origin" "1824 760 -104" -} -{ -"classname" "light" -"light" "120" -"origin" "1320 672 -40" -} -{ -"light" "120" -"classname" "light" -"origin" "1768 672 -104" -} -{ -"classname" "light" -"light" "120" -"origin" "1760 800 -104" -} -{ -"classname" "light" -"light" "100" -"origin" "1152 800 88" -} -{ -"light" "200" -"classname" "light" -"origin" "1768 728 120" -} -{ -"light" "120" -"classname" "light" -"origin" "1472 64 120" -} -{ -"classname" "light" -"light" "120" -"origin" "1280 64 120" -} -{ -"light" "80" -"classname" "light" -"origin" "1440 64 240" -} -{ -"light" "80" -"classname" "light" -"origin" "1608 64 240" -} -{ -"light" "80" -"classname" "light" -"origin" "1608 256 240" -} -{ -"light" "80" -"classname" "light" -"origin" "1608 416 240" -} -{ -"classname" "light" -"light" "80" -"origin" "1280 64 240" -} -{ -"origin" "1108 320 92" -"light" "120" -"classname" "light" -} -{ -"origin" "1168 672 88" -"classname" "light" -"light" "175" -} -{ -"classname" "light" -"light" "80" -"origin" "1408 272 56" -} -{ -"light" "200" -"classname" "light" -"origin" "1296 672 120" -} -{ -"classname" "light" -"light" "150" -"origin" "1288 240 88" -} -{ -"classname" "light" -"light" "120" -"origin" "1600 20 108" -} -{ -"light" "80" -"classname" "light" -"origin" "1480 704 16" -} -{ -"light" "80" -"classname" "light" -"origin" "1480 832 16" -} -{ -"classname" "light" -"light" "80" -"origin" "1480 576 16" -} -{ -"light" "80" -"classname" "light" -"origin" "1464 800 128" -} -{ -"light" "80" -"classname" "light" -"origin" "1464 600 128" -} -{ -"light" "80" -"classname" "light" -"origin" "1336 416 128" -} -{ -"light" "80" -"classname" "light" -"origin" "1488 248 128" -} -{ -"classname" "light" -"light" "80" -"origin" "1248 824 128" -} -{ -"light" "150" -"classname" "light" -"origin" "1384 792 232" -} -{ -"light" "150" -"classname" "light" -"origin" "1408 544 232" -} -{ -"classname" "light" -"light" "150" -"origin" "1192 544 232" -} -{ -"light" "150" -"classname" "light" -"origin" "1408 288 232" -} -{ -"classname" "light" -"light" "150" -"origin" "1192 288 232" -} -{ -"light" "150" -"classname" "light" -"origin" "1168 792 232" -} -{ -"light" "64" -"classname" "light" -"origin" "1728 576 -176" -} -{ -"classname" "light" -"light" "64" -"origin" "1664 576 -176" -} -{ -"light" "64" -"classname" "light" -"origin" "1728 884 -176" -} -{ -"classname" "light" -"light" "64" -"origin" "1792 884 -176" -} -{ -"light" "64" -"classname" "light" -"origin" "1696 672 240" -} -{ -"light" "64" -"classname" "light" -"origin" "1840 672 240" -} -{ -"classname" "light" -"light" "64" -"origin" "1840 808 240" -} -{ -"light" "64" -"classname" "light" -"origin" "1696 808 240" -} -{ -"origin" "1288 912 200" -"light" "80" -"classname" "light" -} -{ -"origin" "1208 912 200" -"light" "80" -"classname" "light" -} -{ -"origin" "-1072 776 -40" -"classname" "light" -"light" "64" -} -{ -"origin" "-1072 888 -40" -"light" "64" -"classname" "light" -} -{ -"origin" "-848 776 -40" -"light" "64" -"classname" "light" -} -{ -"origin" "-848 888 -40" -"classname" "light" -"light" "64" -} -{ -"model" "*49" -"targetname" "t144" -"classname" "func_door" -"angle" "0" -"wait" "-1" -"speed" "30" -"sounds" "4" -"_minlight" ".3" -"lip" "64" -} -{ -"model" "*50" -"target" "t138" -"targetname" "t144" -"spawnflags" "0" -"classname" "func_door" -"angle" "180" -"_minlight" ".3" -"wait" "-1" -"sounds" "4" -"lip" "64" -"speed" "30" -} -{ -"origin" "-1344 248 80" -"classname" "light" -"light" "120" -} -{ -"origin" "-1344 392 80" -"light" "120" -"classname" "light" -} -{ -"origin" "-1376 832 192" -"classname" "light" -"light" "120" -} -{ -"origin" "-992 944 96" -"classname" "light" -"light" "150" -} -{ -"origin" "-1536 880 224" -"classname" "light" -"light" "150" -} -{ -"light" "120" -"classname" "light" -"origin" "-1248 832 120" -} -{ -"classname" "light" -"light" "80" -"origin" "-1280 832 256" -} -{ -"light" "48" -"classname" "light" -"origin" "1200 616 -40" -} -{ -"classname" "light" -"light" "48" -"origin" "1200 728 -40" -} -{ -"light" "48" -"classname" "light" -"origin" "1424 728 -40" -} -{ -"classname" "light" -"light" "48" -"origin" "1424 616 -40" -} -{ -"light" "80" -"classname" "light" -"origin" "-1984 64 224" -} -{ -"light" "80" -"classname" "light" -"origin" "-1728 64 224" -} -{ -"light" "150" -"classname" "light" -"origin" "-1728 880 224" -} -{ -"light" "150" -"classname" "light" -"origin" "-848 832 96" -} -{ -"classname" "light" -"light" "80" -"origin" "-1472 64 224" -} -{ -"classname" "light" -"light" "80" -"origin" "-1896 864 224" -} -{ -"classname" "light" -"light" "80" -"origin" "-1856 864 200" -} -{ -"light" "80" -"classname" "light" -"origin" "-1856 736 200" -} -{ -"classname" "light" -"light" "80" -"origin" "-1896 736 224" -} -{ -"classname" "light" -"light" "80" -"origin" "-1488 608 232" -} -{ -"light" "80" -"classname" "light" -"origin" "-1488 608 176" -} -{ -"classname" "light" -"light" "80" -"origin" "-1472 672 200" -} -{ -"classname" "light" -"light" "80" -"origin" "-1840 800 176" -} -{ -"light" "80" -"classname" "light" -"origin" "-1840 800 232" -} -{ -"light" "80" -"classname" "light" -"origin" "-1432 672 224" -} -{ -"classname" "light" -"light" "80" -"origin" "-1432 560 200" -} -{ -"model" "*51" -"classname" "func_button" -"angle" "0" -"health" "1" -"target" "t75" -} -{ -"classname" "light" -"light" "80" -"origin" "-1180 832 244" -} -{ -"light" "80" -"classname" "light" -"origin" "-1472 832 368" -} -{ -"light" "80" -"classname" "light" -"origin" "-1472 640 368" -} -{ -"light" "80" -"classname" "light" -"origin" "-1728 640 368" -} -{ -"light" "80" -"classname" "light" -"origin" "-1728 832 368" -} -{ -"light" "80" -"classname" "light" -"origin" "-2048 320 304" -} -{ -"light" "80" -"classname" "light" -"origin" "-1920 320 304" -} -{ -"light" "80" -"classname" "light" -"origin" "-1792 320 304" -} -{ -"light" "80" -"classname" "light" -"origin" "-1664 320 304" -} -{ -"light" "80" -"classname" "light" -"origin" "-1536 320 304" -} -{ -"light" "80" -"classname" "light" -"origin" "-1408 320 304" -} -{ -"classname" "light" -"light" "80" -"origin" "-1280 832 368" -} -{ -"light" "120" -"classname" "light" -"origin" "-2096 248 80" -} -{ -"classname" "light" -"light" "120" -"origin" "-2096 392 80" -} -{ -"classname" "light" -"light" "80" -"origin" "-224 -1844 92" -} -{ -"classname" "light" -"light" "80" -"origin" "-160 -1844 92" -} -{ -"light" "80" -"classname" "light" -"origin" "100 -1840 156" -} -{ -"classname" "light" -"light" "80" -"origin" "96 -1840 92" -} -{ -"light" "80" -"classname" "light" -"origin" "-224 -1888 144" -} -{ -"light" "80" -"classname" "light" -"origin" "160 -1856 116" -} -{ -"light" "80" -"classname" "light" -"origin" "28 -1856 116" -} -{ -"light" "80" -"classname" "light" -"origin" "-36 -1856 116" -} -{ -"light" "80" -"classname" "light" -"origin" "-100 -1916 160" -} -{ -"classname" "light" -"light" "80" -"origin" "-156 -1844 156" -} -{ -"origin" "-272 -1352 136" -"classname" "light" -"light" "130" -} -{ -"origin" "0 -1656 152" -"classname" "light" -"light" "130" -} -{ -"origin" "-76 -1692 152" -"classname" "light" -"light" "100" -} -{ -"origin" "-76 -1692 264" -"classname" "light" -"light" "120" -} -{ -"origin" "88 -1688 264" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "-88 -1824 264" -} -{ -"light" "120" -"classname" "light" -"origin" "-256 -1816 264" -} -{ -"light" "120" -"classname" "light" -"origin" "256 -1820 264" -} -{ -"light" "100" -"classname" "light" -"origin" "88 -1688 152" -} -{ -"light" "130" -"classname" "light" -"origin" "272 -1352 136" -} -{ -"classname" "light" -"light" "120" -"origin" "108 -1828 264" -} -{ -"light" "150" -"classname" "light" -"origin" "316 -1120 96" -} -{ -"light" "150" -"classname" "light" -"origin" "316 -1536 148" -} -{ -"light" "150" -"classname" "light" -"origin" "-316 -1536 148" -} -{ -"light" "150" -"classname" "light" -"origin" "-164 -1744 148" -} -{ -"light" "150" -"classname" "light" -"origin" "164 -1744 148" -} -{ -"classname" "light" -"light" "150" -"origin" "-316 -1120 96" -} -{ -"origin" "-840 -672 -200" -"light" "80" -"classname" "light" -} -{ -"origin" "-800 -672 -176" -"light" "80" -"classname" "light" -} -{ -"origin" "-848 -608 -200" -"classname" "light" -"light" "80" -} -{ -"origin" "-800 -608 -108" -"classname" "light" -"light" "80" -} -{ -"origin" "-1128 -720 -344" -"classname" "light" -"light" "80" -} -{ -"origin" "-1096 -632 -392" -"classname" "light" -"light" "80" -} -{ -"origin" "-1000 -568 -392" -"classname" "light" -"light" "80" -} -{ -"light" "130" -"classname" "light" -"origin" "-336 -656 -248" -} -{ -"light" "64" -"classname" "light" -"origin" "-272 -688 -360" -} -{ -"classname" "light" -"origin" "-40 -368 -240" -"light" "150" -} -{ -"origin" "-1192 -544 -336" -"classname" "light" -"light" "80" -} -{ -"origin" "-1192 -672 -336" -"classname" "light" -"light" "80" -} -{ -"origin" "-1192 -800 -336" -"classname" "light" -"light" "80" -} -{ -"origin" "-1048 -440 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-1088 -672 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-1016 -624 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-912 -584 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-760 -400 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-544 -440 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-520 -640 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-592 -584 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-704 -568 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-656 -416 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-720 -504 -352" -"light" "64" -"classname" "light" -} -{ -"origin" "-392 -328 -392" -"classname" "light" -"light" "64" -} -{ -"light" "64" -"classname" "light" -"origin" "-392 -472 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-400 -584 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-408 -688 -392" -} -{ -"origin" "-256 -472 -360" -"classname" "light" -"light" "64" -} -{ -"origin" "-264 -584 -360" -"classname" "light" -"light" "64" -} -{ -"origin" "-344 -336 -248" -"classname" "light" -"light" "130" -} -{ -"origin" "-496 -632 -392" -"classname" "light" -"light" "80" -} -{ -"origin" "-536 -440 -392" -"classname" "light" -"light" "80" -} -{ -"origin" "-592 -512 -392" -"classname" "light" -"light" "80" -} -{ -"light" "64" -"classname" "light" -"origin" "-984 -440 -352" -} -{ -"classname" "light" -"light" "64" -"origin" "-1000 -568 -352" -} -{ -"classname" "light" -"light" "64" -"origin" "-864 -520 -352" -} -{ -"classname" "light" -"light" "64" -"origin" "-1136 -496 -352" -} -{ -"classname" "light" -"light" "64" -"origin" "-592 -512 -352" -} -{ -"light" "80" -"classname" "light" -"origin" "-1160 -856 -344" -} -{ -"light" "80" -"classname" "light" -"origin" "-864 -520 -392" -} -{ -"light" "80" -"classname" "light" -"origin" "-720 -504 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-256 -328 -360" -} -{ -"classname" "light" -"light" "80" -"origin" "-984 -440 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-1160 -800 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-1160 -672 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-1160 -544 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "-1080 -672 -248" -} -{ -"light" "64" -"classname" "light" -"origin" "-1080 -544 -248" -} -{ -"classname" "light" -"light" "64" -"origin" "-1080 -800 -248" -} -{ -"light" "120" -"classname" "light" -"origin" "-1060 -876 -160" -} -{ -"classname" "light" -"light" "100" -"origin" "-864 -404 -160" -} -{ -"classname" "light" -"light" "64" -"origin" "-736 -884 -112" -} -{ -"origin" "-608 -816 -64" -"classname" "light" -"light" "80" -} -{ -"origin" "-992 -736 -32" -"light" "80" -"classname" "light" -} -{ -"origin" "-992 -608 -32" -"light" "80" -"classname" "light" -} -{ -"origin" "-848 -800 -32" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-672 -512 -40" -} -{ -"classname" "light" -"light" "80" -"origin" "-672 -640 -40" -} -{ -"classname" "light" -"light" "80" -"origin" "-672 -800 -32" -} -{ -"origin" "-804 -408 -108" -"classname" "light" -"light" "80" -} -{ -"origin" "-856 -872 -56" -"light" "80" -"classname" "light" -} -{ -"origin" "-752 -800 -32" -"light" "80" -"classname" "light" -} -{ -"origin" "-560 -512 -40" -"light" "80" -"classname" "light" -} -{ -"origin" "64 -1056 288" -"light" "80" -"classname" "light" -} -{ -"origin" "-1504 832 96" -"light" "100" -"classname" "light" -} -{ -"model" "*52" -"target" "t76" -"wait" "5" -"_minlight" ".2" -"angle" "180" -"classname" "func_button" -} -{ -"model" "*53" -"targetname" "t76" -"wait" "10" -"lip" "-108" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*54" -"targetname" "t76" -"lip" "-76" -"wait" "10" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*55" -"targetname" "t76" -"wait" "10" -"angle" "-1" -"lip" "-44" -"classname" "func_door" -} -{ -"model" "*56" -"lip" "-12" -"targetname" "t76" -"wait" "10" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*57" -"targetname" "t75" -"lip" "-4" -"wait" "-1" -"angle" "270" -"classname" "func_door" -} -{ -"classname" "light" -"light" "50" -"origin" "1608 40 24" -} -{ -"classname" "light" -"light" "50" -"origin" "1608 88 40" -} -{ -"classname" "item_health" -"origin" "1512 712 128" -} -{ -"origin" "1608 456 200" -"light" "80" -"classname" "light" -} -{ -"origin" "1608 376 200" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "50" -"origin" "1608 280 104" -} -{ -"light" "50" -"classname" "light" -"origin" "1608 328 120" -} -{ -"classname" "light" -"light" "50" -"origin" "1608 232 88" -} -{ -"classname" "light" -"light" "50" -"origin" "1608 184 72" -} -{ -"classname" "light" -"light" "50" -"origin" "1608 136 56" -} -{ -"light" "50" -"classname" "light" -"origin" "1592 104 24" -} -{ -"classname" "light" -"light" "80" -"origin" "1488 760 200" -} -{ -"classname" "light" -"light" "80" -"origin" "1488 840 200" -} -{ -"classname" "light" -"light" "80" -"origin" "1280 -32 104" -} -{ -"light" "80" -"classname" "light" -"origin" "1280 104 80" -} -{ -"classname" "light" -"light" "80" -"origin" "1280 184 80" -} -{ -"model" "*58" -"spawnflags" "8" -"target" "t108" -"_minlight" "0.4" -"classname" "func_door" -"angle" "-2" -"sounds" "2" -} -{ -"light" "80" -"classname" "light" -"origin" "1376 192 128" -} -{ -"classname" "light" -"light" "80" -"origin" "1480 456 200" -} -{ -"origin" "1480 376 200" -"light" "80" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "1280 32 104" -} -{ -"origin" "0 752 432" -"light" "80" -"classname" "light" -} -{ -"origin" "0 896 424" -"light" "80" -"classname" "light" -} -{ -"origin" "64 752 160" -"light" "80" -"classname" "light" -} -{ -"origin" "0 656 368" -"classname" "light" -"light" "80" -} -{ -"origin" "-64 752 160" -"light" "80" -"classname" "light" -} -{ -"model" "*59" -"_minlight" ".3" -"spawnflags" "1" -"classname" "func_plat" -} -{ -"origin" "-992 560 120" -"classname" "light" -"light" "40" -} -{ -"origin" "-1472 688 88" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1728 688 88" -} -{ -"classname" "light" -"light" "60" -"origin" "-1040 608 16" -} -{ -"light" "60" -"classname" "light" -"origin" "-944 608 16" -} -{ -"origin" "-160 -512 -104" -"classname" "light" -"light" "80" -} -{ -"origin" "-288 -512 -168" -"light" "80" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "-464 -440 -48" -} -{ -"light" "80" -"classname" "light" -"origin" "-432 -448 -196" -} -{ -"light" "175" -"classname" "light" -"origin" "-32 -496 -164" -} -{ -"origin" "-432 -576 -196" -"classname" "light" -"light" "80" -} -{ -"origin" "-32 -624 -164" -"classname" "light" -"light" "175" -} -{ -"origin" "-56 -672 -8" -"classname" "light" -"light" "64" -} -{ -"origin" "-464 -424 -112" -"classname" "light" -"light" "80" -} -{ -"light" "150" -"origin" "-32 -576 -240" -"classname" "light" -} -{ -"model" "*60" -"_minlight" ".1" -"wait" "-1" -"targetname" "t141" -"target" "t139" -"classname" "func_door" -"angle" "-2" -"sounds" "2" -"spawnflags" "0" -} -{ -"light" "80" -"classname" "light" -"origin" "-32 -1232 80" -} -{ -"classname" "light" -"light" "80" -"origin" "32 -1232 80" -} -{ -"origin" "64 -1120 288" -"light" "80" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "0 -1120 248" -} -{ -"classname" "light" -"light" "64" -"origin" "64 -1184 248" -} -{ -"light" "175" -"classname" "light" -"origin" "-32 -368 -164" -} -{ -"light" "80" -"classname" "light" -"origin" "-64 -1184 288" -} -{ -"classname" "light" -"light" "80" -"origin" "-928 -544 -32" -} -{ -"model" "*61" -"classname" "func_door" -"spawnflags" "1" -"_minlight" ".2" -//"sounds" "1" // b#4: removed this -"targetname" "t130" -"angle" "-2" -} -{ -"_color" "1.000000 0.000000 0.000000" -"origin" "-1040 272 16" -"classname" "light" -"light" "60" -} -{ -"_color" "1.000000 0.000000 0.000000" -"origin" "-1040 320 16" -"light" "60" -"classname" "light" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-1112 288 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-1200 160 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-1104 224 16" -"light" "60" -"classname" "light" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-1184 112 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-1056 208 16" -"light" "60" -"classname" "light" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-992 112 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-992 208 16" -"light" "60" -"classname" "light" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-928 112 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-928 208 16" -"light" "60" -"classname" "light" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-736 336 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-864 560 16" -"light" "60" -"classname" "light" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-672 336 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-672 432 16" -"light" "60" -"classname" "light" -} -{ -"_color" "1.000000 0.000000 0.000000" -"origin" "-1040 416 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-624 480 16" -"classname" "light" -"light" "60" -} -{ -"_color" "0.717647 1.000000 0.717647" -"origin" "-624 288 16" -"classname" "light" -"light" "60" -} -{ -"_color" "1.000000 0.000000 0.000000" -"origin" "-944 416 16" -"light" "60" -"classname" "light" -} -{ -"classname" "light" -"light" "60" -"origin" "-2408 376 40" -} -{ -"light" "60" -"classname" "light" -"origin" "-2440 408 40" -} -{ -"classname" "light" -"light" "60" -"origin" "-2440 408 120" -} -{ -"classname" "light" -"light" "60" -"origin" "-2408 376 120" -} -{ -"classname" "light" -"light" "60" -"origin" "-2744 168 40" -} -{ -"light" "60" -"classname" "light" -"origin" "-2776 200 40" -} -{ -"classname" "light" -"light" "60" -"origin" "-2776 200 120" -} -{ -"classname" "light" -"light" "60" -"origin" "-2744 168 120" -} -{ -"light" "60" -"classname" "light" -"origin" "-2776 376 40" -} -{ -"classname" "light" -"light" "60" -"origin" "-2744 408 40" -} -{ -"classname" "light" -"light" "60" -"origin" "-2744 408 120" -} -{ -"classname" "light" -"light" "60" -"origin" "-2776 376 120" -} -{ -"light" "60" -"classname" "light" -"origin" "-2408 200 40" -} -{ -"light" "60" -"classname" "light" -"origin" "-2408 200 120" -} -{ -"light" "60" -"classname" "light" -"origin" "-2440 168 120" -} -{ -"classname" "light" -"light" "60" -"origin" "-2440 168 40" -} -{ -"model" "*62" -"target" "t22" -"classname" "func_button" -"angle" "90" -"lip" "-8" -"sounds" "3" -} -{ -"classname" "light" -"light" "80" -"origin" "-1584 480 56" -} -{ -"model" "*63" -"sounds" "3" -"lip" "-8" -"angle" "270" -"classname" "func_button" -"target" "t24" -} -{ -"origin" "-1616 160 56" -"light" "80" -"classname" "light" -} -{ -"origin" "-1360 160 56" -"light" "80" -"classname" "light" -} -{ -"model" "*64" -"sounds" "3" -"lip" "-8" -"angle" "270" -"classname" "func_button" -"target" "t23" -} -{ -"model" "*65" -"classname" "func_button" -"angle" "270" -"lip" "-8" -"sounds" "3" -"target" "t25" -} -{ -"classname" "light" -"light" "80" -"origin" "-1872 160 56" -} -{ -"model" "*66" -"classname" "func_button" -"angle" "90" -"lip" "-8" -"sounds" "3" -"target" "t20" -} -{ -"classname" "light" -"light" "80" -"origin" "-2096 480 56" -} -{ -"light" "80" -"classname" "light" -"origin" "960 -128 104" -} -{ -"origin" "1088 -128 104" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "1216 -128 104" -} -{ -"light" "80" -"classname" "light" -"origin" "832 -128 104" -} -{ -"light" "80" -"classname" "light" -"origin" "1280 -128 104" -} -{ -"light" "80" -"classname" "light" -"origin" "768 672 104" -} -{ -"light" "80" -"classname" "light" -"origin" "832 768 104" -} -{ -"origin" "832 320 104" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "832 448 104" -} -{ -"origin" "768 384 104" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "640 384 104" -} -{ -"origin" "688 -128 104" -"classname" "light" -"light" "80" -} -{ -"origin" "-768 384 120" -"classname" "light" -"light" "40" -} -{ -"classname" "light" -"light" "80" -"origin" "640 32 56" -} -{ -"origin" "-912 160 120" -"classname" "light" -"light" "40" -} -{ -"targetname" "jail1" -"origin" "0 -1548 104" -"angle" "270" -"classname" "info_player_start" -} -{ -"origin" "424 384 64" -"classname" "light" -"light" "80" -} -{ -"origin" "504 384 64" -"light" "80" -"classname" "light" -} -{ -"origin" "-2752 544 104" -"classname" "light" -"light" "80" -} -{ -"origin" "-1472 -48 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1472 560 72" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-1472 496 72" -} -{ -"light" "100" -"classname" "light" -"origin" "-1472 144 72" -} -{ -"light" "100" -"classname" "light" -"origin" "-1472 80 72" -} -{ -"origin" "-1984 80 72" -"classname" "light" -"light" "100" -} -{ -"origin" "-1984 144 72" -"classname" "light" -"light" "100" -} -{ -"origin" "-2864 288 72" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "-2800 288 72" -} -{ -"origin" "-1728 80 72" -"classname" "light" -"light" "100" -} -{ -"origin" "-1728 144 72" -"classname" "light" -"light" "100" -} -{ -"origin" "-1728 496 72" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-1728 560 72" -} -{ -"classname" "light" -"light" "80" -"origin" "-1984 -48 88" -} -{ -"classname" "light" -"light" "80" -"origin" "-1728 -48 88" -} -{ -"origin" "-1984 688 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-1952 -48 16" -"classname" "item_health" -} -{ -"light" "100" -"classname" "light" -"origin" "-1984 496 72" -} -{ -"origin" "-1984 560 72" -"classname" "light" -"light" "100" -} -{ -"light" "120" -"classname" "light" -"origin" "-2592 432 72" -} -{ -"origin" "-2592 496 72" -"classname" "light" -"light" "120" -} -{ -"origin" "-2592 144 72" -"classname" "light" -"light" "120" -} -{ -"origin" "-504 384 64" -"classname" "light" -"light" "80" -} -{ -"origin" "-424 384 64" -"light" "80" -"classname" "light" -} -{ -"origin" "-2744 288 64" -"classname" "light" -"light" "100" -} -{ -"origin" "-2652 200 64" -"classname" "light" -"light" "100" -} -{ -"origin" "-2652 376 64" -"classname" "light" -"light" "100" -} -{ -"origin" "-2532 200 64" -"classname" "light" -"light" "100" -} -{ -"origin" "-2636 288 -48" -"classname" "light" -"light" "100" -} -{ -"origin" "-2504 288 64" -"classname" "light" -"light" "100" -} -{ -"origin" "-2440 288 64" -"classname" "light" -"light" "100" -} -{ -"origin" "-2560 288 32" -"classname" "light" -"light" "120" -} -{ -"origin" "720 48 56" -"light" "80" -"classname" "light" -} -{ -"origin" "512 32 56" -"classname" "light" -"light" "80" -} -{ -"origin" "-2664 160 16" -"classname" "item_health_large" -} -{ -"model" "*67" -"targetname" "t60" -"lip" "8" -"wait" "15" -"sounds" "3" -"speed" "30" -"angle" "-2" -"classname" "func_door" -"spawnflags" "2048" -} -{ -"model" "*68" -"angle" "180" -"target" "t60" -"classname" "func_button" -"wait" "13" -"spawnflags" "2048" -} -{ -"origin" "-2408 232 8" -"light" "80" -"classname" "light" -} -{ -"origin" "-2408 344 8" -"classname" "light" -"light" "100" -} -{ -"spawnflags" "2048" -"origin" "-2792 344 136" -"target" "t29" -"targetname" "t61" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-2536 424 136" -"target" "t27" -"targetname" "t61" -"classname" "trigger_relay" -} -{ -"model" "*69" -"target" "t112" -"classname" "func_door" -"angle" "-2" -"sounds" "2" -"_minlight" "0.5" -} -{ -"light" "40" -"classname" "light" -"origin" "-912 512 120" -} -{ -"light" "40" -"classname" "light" -"origin" "-832 448 120" -} -{ -"light" "80" -"classname" "light" -"origin" "832 576 104" -} -{ -"light" "40" -"classname" "light" -"origin" "-832 320 120" -} -{ -"light" "40" -"classname" "light" -"origin" "-832 208 120" -} -{ -"light" "40" -"classname" "light" -"origin" "-1072 160 120" -} -{ -"light" "40" -"classname" "light" -"origin" "-1152 240 120" -} -{ -"light" "40" -"classname" "light" -"origin" "-1152 416 120" -} -{ -"light" "40" -"classname" "light" -"origin" "-1072 512 120" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "40" -"classname" "light" -"origin" "-992 432 120" -} -{ -"light" "80" -"classname" "light" -"origin" "-1248 320 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-1600 320 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-1856 320 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-2256 320 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-2272 432 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-2272 224 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-2272 128 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-2832 544 104" -} -{ -"origin" "-2912 464 104" -"classname" "light" -"light" "80" -} -{ -"origin" "-2432 544 104" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-2352 544 104" -} -{ -"origin" "-2352 32 104" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-2432 32 104" -} -{ -"light" "80" -"classname" "light" -"origin" "-2912 112 104" -} -{ -"origin" "-2752 32 88" -"classname" "light" -"light" "80" -} -{ -"origin" "-2832 32 88" -"classname" "light" -"light" "80" -} -{ -"light" "100" -"classname" "light" -"origin" "-2680 288 64" -} -{ -"classname" "light" -"light" "100" -"origin" "-2624 288 32" -} -{ -"classname" "light" -"light" "100" -"origin" "-2624 288 -32" -} -{ -"light" "100" -"classname" "light" -"origin" "-2532 376 64" -} -{ -"model" "*70" -"sounds" "3" -"target" "t21" -"lip" "-8" -"angle" "90" -"classname" "func_button" -} -{ -"origin" "-1840 480 56" -"light" "80" -"classname" "light" -} -{ -"origin" "-48 720 304" -"classname" "item_health" -} -{ -"origin" "-32 -36 256" -"classname" "info_player_deathmatch" -"angle" "90" -} -{ -"origin" "-2024 -32 24" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"classname" "light" -"light" "150" -"origin" "-64 -1484 548" -} -{ -"light" "150" -"classname" "light" -"origin" "60 -1484 548" -} -{ -"classname" "light" -"light" "120" -"origin" "0 -1536 704" -} -{ -"light" "120" -"classname" "light" -"origin" "0 -1768 704" -} -{ -"light" "120" -"classname" "light" -"origin" "0 -1656 704" -} -{ -"classname" "light" -"light" "150" -"origin" "0 -1592 568" -} -{ -"light" "150" -"classname" "light" -"origin" "-8 -1736 568" -} -{ -"classname" "light" -"light" "120" -"origin" "-80 -1520 296" -} -{ -"light" "120" -"classname" "light" -"origin" "88 -1512 296" -} -{ -"classname" "light" -"light" "120" -"origin" "80 -1520 408" -} -{ -"light" "120" -"classname" "light" -"origin" "-88 -1528 408" -} -{ -"classname" "light" -"light" "80" -"origin" "-856 -832 -88" -} -{ -"classname" "light" -"light" "80" -"origin" "-920 -832 -88" -} -{ -"light" "80" -"classname" "light" -"origin" "-920 -872 -56" -} -{ -"classname" "light" -"light" "80" -"origin" "-784 -864 -56" -} -{ -"light" "80" -"classname" "light" -"origin" "-656 -864 -64" -} -{ -"light" "80" -"classname" "light" -"origin" "-800 -456 -176" -} -{ -"model" "*71" -"_minlight" ".3" -"angle" "-2" -"classname" "func_door" -"sounds" "4" -} -{ -"light" "80" -"classname" "light" -"origin" "-3436 224 -40" -} -{ -"origin" "-3316 224 -40" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-3316 352 -40" -} -{ -"origin" "-3436 352 -40" -"classname" "light" -"light" "80" -} -{ -"light" "150" -"classname" "light" -"origin" "-3376 288 80" -} -{ -"model" "*72" -"classname" "func_wall" -} -{ -"classname" "func_group" -} -{ -"model" "*73" -"lip" "16" -"wait" "-1" -"angle" "270" -"classname" "func_button" -"target" "t148" -"spawnflags" "2048" -} -{ -"origin" "-60 -71 252" -"light" "48" -"classname" "light" -} -{ -"origin" "-84 -71 252" -"classname" "light" -"light" "48" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/jail4@1969.ent b/stuff/mapfixes/baseq2/jail4@1969.ent deleted file mode 100644 index 7cf6a7fe3..000000000 --- a/stuff/mapfixes/baseq2/jail4@1969.ent +++ /dev/null @@ -1,4968 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Added missing targetnames to info_player_coop (b#1) -// -// 2. Removed unused targets on lights (b#2) -// -// 3. Fixed 2x func_door set to be silent (b#3) -// -// 4. Added missing spawnflags to entities (b#4) -// -// 5. Removed 2048 flag from 2x ambient target_speaker (b#5) -{ -"classname" "worldspawn" -"message" "The Torture Chambers" -"sounds" "3" -"sky" "unit3_" -"nextmap" "jail5" -} -{ -"origin" "-160 1696 -1008" -"classname" "item_health_large" -} -{ -"origin" "-848 936 -592" -"spawnflags" "2048" -"target" "t162" -"targetname" "t130" -"classname" "trigger_relay" -} -{ -"style" "32" -"targetname" "t162" -"spawnflags" "2049" -"light" "125" -"origin" "-848 936 -608" -"classname" "light" -} -{ -"model" "*1" -"target" "t162" -"targetname" "t130" -"spawnflags" "2052" -"classname" "trigger_once" -} -{ -"origin" "192 -1296 -56" -"spawnflags" "1" -"targetname" "t161" -"classname" "point_combat" -} -{ -"origin" "-256 176 -704" -"classname" "light" -"light" "100" -} -{ -"origin" "-384 136 -832" -"light" "100" -"classname" "light" -} -{ -"angle" "135" -"classname" "info_player_coop" -"targetname" "jail3b" // b#1: added this -"origin" "192 1600 -608" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "jail3b" // b#1: added this -"origin" "192 1352 -608" -} -{ -"classname" "info_player_coop" -"targetname" "jail3b" -"angle" "180" -"origin" "192 1664 -608" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "jail3" // b#1: added this -"origin" "-120 -2304 24" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "jail3" // b#1: added this -"origin" "-264 -2304 24" -} -{ -"classname" "info_player_coop" -"angle" "45" -"targetname" "jail3" -"origin" "-192 -2232 24" -} -{ -"origin" "776 384 -624" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"origin" "816 384 -624" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "864 -112 -880" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "-152 64 -752" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-96 64 -752" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "64 -64 -624" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-1224 704 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-1224 576 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-1224 448 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-1152 376 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-1024 376 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-896 376 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-768 376 -888" -} -{ -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -"origin" "-768 504 -760" -} -{ -"model" "*2" -"classname" "func_button" -"angle" "90" -"target" "key1" -"targetname" "keytrig1" -"spawnflags" "2048" -} -{ -"model" "*3" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -"origin" "-384 448 -648" -} -{ -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -"origin" "-256 448 -648" -} -{ -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -"origin" "-256 320 -648" -} -{ -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -"origin" "-512 288 -776" -} -{ -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -"origin" "-384 288 -776" -} -{ -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -"origin" "-440 0 -888" -} -{ -"_color" "0.156863 0.580392 1.000000" -"light" "80" -"classname" "light" -"origin" "-192 -120 -888" -} -{ -"classname" "light" -"light" "100" -"origin" "-1448 368 -696" -} -{ -"classname" "light" -"light" "100" -"origin" "-1464 488 -640" -} -{ -"classname" "light" -"light" "100" -"origin" "-1464 248 -640" -} -{ -"classname" "light" -"light" "100" -"origin" "1016 -56 -640" -} -{ -"light" "100" -"classname" "light" -"origin" "1000 64 -696" -} -{ -"light" "100" -"classname" "light" -"origin" "1016 184 -640" -} -{ -"light" "100" -"classname" "light" -"origin" "-1464 368 -584" -} -{ -"classname" "light" -"light" "100" -"origin" "1016 64 -584" -} -{ -"origin" "920 832 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "808 824 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "776 448 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "1032 712 -632" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -"classname" "light" -} -{ -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"classname" "light" -"origin" "864 640 -776" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "832 800 -392" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "696 952 -760" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "776 952 -760" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "952 952 -760" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1032 952 -760" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1144 840 -760" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1144 952 -760" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1144 712 -632" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1032 952 -632" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1144 952 -632" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1248 640 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1184 640 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1184 512 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1248 512 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1248 384 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1216 352 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1088 352 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "1088 416 -488" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "978 452 -540" -} -{ -"light" "100" -"_color" "0.047619 0.567460 1.000000" -"classname" "light" -"origin" "686 316 -540" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "686 452 -540" -} -{ -"light" "100" -"_color" "0.047619 0.567460 1.000000" -"classname" "light" -"origin" "1088 800 -392" -} -{ -"light" "100" -"_color" "0.047619 0.567460 1.000000" -"classname" "light" -"origin" "576 384 -520" -} -{ -"light" "100" -"_color" "0.047619 0.567460 1.000000" -"classname" "light" -"origin" "384 192 -520" -} -{ -"classname" "light" -"_color" "0.047619 0.567460 1.000000" -"light" "100" -"origin" "978 316 -540" -} -{ -"model" "*4" -"dmg" "1" -"health" "10" -"classname" "func_explosive" -} -{ -"model" "*5" -"target" "t160" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-192 -2360 -16" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -"origin" "-8 -2200 -16" -} -{ -"origin" "-160 -1512 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "192 -1280 -576" -} -{ -"classname" "misc_teleporter_dest" -"angle" "0" -"spawnflags" "1792" -"targetname" "t159" -"origin" "-320 -2208 24" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"target" "t159" -"origin" "-608 1728 -1000" -} -{ -"classname" "light" -"_color" "1.000000 0.245059 0.134387" -"light" "100" -"origin" "1376 -64 -784" -} -{ -"classname" "ammo_cells" -"origin" "536 -1768 8" -} -{ -"model" "*6" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*7" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"model" "*8" -"classname" "func_wall" -"spawnflags" "2056" -} -{ -"classname" "misc_teleporter_dest" -"angle" "180" -"spawnflags" "1792" -"targetname" "t158" -"origin" "-416 672 -616" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"target" "t158" -"origin" "-1536 136 -1164" -} -{ -"model" "*9" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "-1200 400 -752" -"classname" "ammo_grenades" -} -{ -"origin" "-1096 704 -760" -"classname" "light" -"_color" "0.200000 0.600000 1.000000" -"light" "64" -} -{ -"origin" "-896 504 -760" -"classname" "light" -"_color" "0.200000 0.600000 1.000000" -"light" "64" -} -{ -"origin" "-1224 832 -888" -"classname" "light" -"_color" "0.200000 0.600000 1.000000" -"light" "64" -} -{ -"origin" "-1096 832 -760" -"light" "64" -"_color" "0.200000 0.600000 1.000000" -"classname" "light" -} -{ -"model" "*10" -"target" "t157" -"spawnflags" "1792" -"targetname" "t156" -"delay" "0.5" -"classname" "trigger_once" -} -{ -"origin" "344 -1424 -248" -"target" "t156" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"classname" "weapon_bfg" -"spawnflags" "1792" -"origin" "-936 856 -1416" -} -{ -"origin" "-1536 384 -1192" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-928 2320 -1000" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1256 672 -880" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1368 240 -872" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "912 -144 -872" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "576 -704 -728" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-92 2188 -592" -"angles" "20 235 0" -"classname" "info_player_intermission" -} -{ -"origin" "1104 -120 -880" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1136 -120 -880" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1072 -120 -880" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "1056 768 -616" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "424 -56 -624" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "424 -96 -624" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-392 320 -880" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-264 488 -752" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-1536 312 -880" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-1568 312 -880" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-1472 832 -616" -"classname" "ammo_shells" -} -{ -"origin" "-904 1000 -624" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "-768 856 -616" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-448 992 -616" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1128 1704 -880" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "-1120 1312 -624" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "-992 1912 -1008" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "0 1664 -616" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-312 1984 -616" -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -} -{ -"origin" "-904 1112 -752" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-856 1112 -752" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1440 784 -616" -"spawnflags" "1792" -"classname" "item_armor_body" -} -{ -"origin" "-352 320 -880" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"spawnflags" "1792" -"origin" "-224 488 -752" -"classname" "ammo_rockets" -} -{ -"origin" "296 456 -592" -"classname" "ammo_cells" -"spawnflags" "1792" -} -{ -"origin" "336 456 -592" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "584 -360 -880" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"model" "*11" -"target" "doorb" -"delay" "0.8" -"targetname" "t155" -"classname" "trigger_once" -"spawnflags" "1792" -} -{ -"origin" "-320 -64 -760" -"target" "t155" -"classname" "trigger_always" -"spawnflags" "1792" -} -{ -"model" "*12" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*13" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*14" -"target" "t2" -"targetname" "t154" -"delay" "0.8" -"classname" "trigger_once" -} -{ -"origin" "-1296 720 -760" -"target" "t154" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*15" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*16" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*17" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*18" -"spawnflags" "2048" -"target" "t153" -"wait" "5" -"classname" "trigger_multiple" -} -{ -"origin" "-432 728 -872" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "-472 728 -872" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-1384 120 -1168" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-1384 384 -1168" -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "-1056 16 -880" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-1088 16 -880" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-1088 48 -880" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-1128 400 -752" -"spawnflags" "1792" -"classname" "weapon_railgun" -} -{ -"origin" "-376 -96 -880" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-416 -96 -880" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "168 592 -616" -"angle" "315" -"classname" "info_player_deathmatch" -} -{ -"origin" "-192 -2304 24" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-160 -1488 -12" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "64 -448 -616" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "864 1000 -720" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "1088 128 -880" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "1128 128 -880" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "840 -352 -880" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "744 64 -744" -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "-24 -560 -872" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-264 -2152 24" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"spawnflags" "1" -"origin" "960 -168 -856" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "960 88 -856" -"spawnflags" "1" -} -{ -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "800 -184 -856" -"spawnflags" "1" -} -{ -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "544 -184 -856" -"spawnflags" "1" -} -{ -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-424 96 -856" -"spawnflags" "1" // b#5: 2049 -> 1 -} -{ -"spawnflags" "1" -"origin" "-1408 352 -856" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"spawnflags" "1" -"origin" "-1376 200 -856" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"spawnflags" "1" -"origin" "-1120 200 -856" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"origin" "-1056 2112 -1024" -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -} -{ -"origin" "-1056 2240 -1024" -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -} -{ -"origin" "-608 2144 -1024" -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -} -{ -"origin" "-608 2016 -1024" -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -} -{ -"origin" "-608 1888 -1024" -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -} -{ -"origin" "-1056 1984 -1024" -"spawnflags" "1" -"noise" "world/lava1.wav" -"classname" "target_speaker" -} -{ -"origin" "-312 1984 -768" -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "56 1816 -576" -"classname" "light" -"_color" "1.000000 0.258824 0.011765" -"light" "50" -} -{ -"origin" "56 1832 -576" -"classname" "light" -"_color" "1.000000 0.258824 0.011765" -"light" "50" -} -{ -"origin" "56 1848 -576" -"classname" "light" -"_color" "1.000000 0.258824 0.011765" -"light" "50" -} -{ -"origin" "56 1864 -576" -"classname" "light" -"_color" "1.000000 0.258824 0.011765" -"light" "50" -} -{ -"origin" "56 1800 -576" -"light" "50" -"_color" "1.000000 0.258824 0.011765" -"classname" "light" -} -{ -"origin" "-768 936 -880" -"classname" "ammo_grenades" -} -{ -"origin" "-800 936 -880" -"classname" "ammo_shells" -} -{ -"origin" "-416 672 -464" -"classname" "light" -"light" "64" -"_color" "1.000000 0.258824 0.011765" -} -{ -"origin" "-616 672 -464" -"classname" "light" -"light" "64" -"_color" "1.000000 0.258824 0.011765" -} -{ -"origin" "-616 992 -464" -"classname" "light" -"light" "64" -"_color" "1.000000 0.258824 0.011765" -} -{ -"origin" "-928 992 -464" -"classname" "light" -"light" "64" -"_color" "1.000000 0.258824 0.011765" -} -{ -"origin" "-928 672 -464" -"classname" "light" -"light" "64" -"_color" "1.000000 0.258824 0.011765" -} -{ -"origin" "-416 992 -464" -"_color" "1.000000 0.258824 0.011765" -"light" "64" -"classname" "light" -} -{ -"origin" "-1200 432 -752" -"classname" "ammo_shells" -} -{ -"origin" "488 624 -624" -"classname" "item_armor_shard" -} -{ -"origin" "456 624 -624" -"classname" "item_armor_shard" -} -{ -"origin" "488 592 -624" -"classname" "item_armor_shard" -} -{ -"model" "*19" -"classname" "trigger_hurt" -"dmg" "50" -} -{ -"model" "*20" -"targetname" "t152" -"spawnflags" "32" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*21" -"classname" "func_plat" -} -{ -"model" "*22" -"target" "t152" -"targetname" "t150" -"spawnflags" "2" -"classname" "trigger_multiple" -} -{ -"origin" "-32 2216 -1008" -"targetname" "t151" -"target" "t150" -"delay" "1" -"classname" "trigger_relay" -} -{ -"model" "*23" -"classname" "func_plat" -} -{ -"model" "*24" -"targetname" "jelev1" -"lip" "16" -"angle" "-2" -"classname" "func_door" -} -{ -"light" "150" -"origin" "288 -704 -288" -"classname" "light" -} -{ -"light" "150" -"origin" "32 -704 -288" -"classname" "light" -} -{ -"light" "150" -"origin" "-224 -704 -288" -"classname" "light" -} -{ -"classname" "light" -"origin" "544 -704 -288" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "32 -480 -416" -} -{ -"light" "150" -"classname" "light" -"origin" "32 -224 -416" -} -{ -"light" "150" -"classname" "light" -"origin" "-96 -224 -416" -} -{ -"light" "150" -"classname" "light" -"origin" "-352 32 -416" -} -{ -"light" "150" -"classname" "light" -"origin" "-224 32 -416" -} -{ -"light" "150" -"classname" "light" -"origin" "-96 32 -416" -} -{ -"light" "150" -"classname" "light" -"origin" "32 32 -416" -} -{ -"classname" "light" -"light" "150" -"origin" "-96 -480 -416" -} -{ -"light" "100" -"classname" "light" -"origin" "64 -256 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "64 -448 -672" -} -{ -"classname" "light" -"light" "100" -"origin" "64 -64 -672" -} -{ -"classname" "target_secret" -"targetname" "t149" -"origin" "-312 1960 -888" -"message" "You found a secret area!" -} -{ -"model" "*25" -"classname" "trigger_once" -"target" "t149" -"spawnflags" "2048" -} -{ -"classname" "item_pack" -"origin" "-264 2016 -1008" -} -{ -"classname" "ammo_slugs" -"origin" "-304 2016 -1008" -} -{ -"classname" "ammo_shells" -"origin" "-344 2016 -1008" -} -{ -"classname" "ammo_rockets" -"origin" "-384 2016 -1008" -} -{ -"classname" "ammo_grenades" -"origin" "-264 2056 -1008" -} -{ -"classname" "ammo_cells" -"origin" "-304 2056 -1008" -} -{ -"classname" "ammo_bullets" -"origin" "-344 2056 -1008" -} -{ -"classname" "item_quad" -"origin" "-384 2056 -1008" -} -{ -"classname" "target_secret" -"targetname" "t147" -"origin" "1376 -16 -872" -"message" "You found a secret item!" -} -{ -"classname" "item_invulnerability" -"target" "t147" -"origin" "1376 -64 -872" -} -{ -"model" "*26" -"classname" "func_explosive" -"dmg" "10" -"health" "50" -"mass" "200" -} -{ -"classname" "ammo_bullets" -"origin" "-1000 2336 -1008" -} -{ -"classname" "item_health_small" -"origin" "264 1512 -624" -} -{ -"classname" "item_health_small" -"origin" "120 1512 -624" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-216 1688 -1008" -} -{ -"classname" "ammo_bullets" -"origin" "-32 1768 -1008" -} -{ -"classname" "ammo_shells" -"origin" "-120 1704 -1008" -} -{ -"classname" "misc_deadsoldier" -"angle" "135" -"spawnflags" "0" -"origin" "-64 1720 -1024" -} -{ -"origin" "992 768 -752" -"classname" "ammo_bullets" -} -{ -"classname" "target_secret" -"targetname" "t145" -"origin" "552 -1712 48" -"message" "You have found a secret." -} -{ -"origin" "-96 116 -704" -"classname" "light" -"light" "80" -} -{ -"origin" "-164 116 -704" -"light" "80" -"classname" "light" -} -{ -"origin" "32 116 -704" -"classname" "light" -"light" "80" -} -{ -"origin" "100 116 -704" -"light" "80" -"classname" "light" -} -{ -"model" "*27" -"targetname" "t157" -"spawnflags" "0" -"classname" "trigger_once" -"target" "t144" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t144" -} -{ -"style" "2" -"spawnflags" "1792" -"classname" "func_areaportal" -"targetname" "t144" -} -{ -"model" "*28" -"classname" "func_door" -"angle" "-2" -"target" "t59" -"lip" "-1" -"_minlight" "0.1" -} -{ -"origin" "-736 952 -400" -"spawnflags" "32" -"targetname" "t130" -"classname" "target_crosslevel_trigger" -} -{ -"classname" "func_group" -} -{ -"light" "130" -"_color" "0.435294 1.000000 0.435294" -"classname" "light" -"origin" "-640 856 -1368" -} -{ -"classname" "item_breather" -"origin" "-1376 568 -1168" -} -{ -"origin" "-1280 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-1152 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-1024 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-896 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-768 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-512 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-384 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-256 856 -1368" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-120 856 -1280" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"origin" "-120 856 -1152" -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -} -{ -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -"origin" "-120 856 -1024" -} -{ -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "130" -"origin" "-120 856 -896" -} -{ -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "100" -"origin" "-272 720 -880" -} -{ -"light" "130" -"_color" "0.435294 1.000000 0.435294" -"classname" "light" -"origin" "-1408 856 -1368" -} -{ -"light" "100" -"_color" "0.435294 1.000000 0.435294" -"classname" "light" -"origin" "-272 944 -880" -} -{ -"light" "100" -"_color" "0.435294 1.000000 0.435294" -"classname" "light" -"origin" "-496 944 -880" -} -{ -"classname" "light" -"_color" "0.435294 1.000000 0.435294" -"light" "100" -"origin" "-496 720 -880" -} -{ -"origin" "-384 840 -816" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-256 856 -816" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-160 856 -816" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-152 856 -936" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-160 856 -1088" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-160 856 -1200" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-160 856 -1336" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-248 856 -1424" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-376 856 -1424" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-504 856 -1424" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-640 856 -1424" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-776 856 -1424" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"origin" "-904 856 -1424" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "-1264 344 -888" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t142" -"target" "t143" -} -{ -"origin" "-1264 344 -888" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t140" -"target" "t141" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "-720 344 -888" -"target" "t140" -"targetname" "t143" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "-1264 832 -888" -"targetname" "t141" -"target" "t142" -} -{ -"classname" "misc_insane" -"origin" "-736 272 -872" -"spawnflags" "4" -"target" "t143" -"item" "weapon_grenadelauncher" -} -{ -"classname" "monster_parasite" -"spawnflags" "1" -"angle" "90" -"origin" "-1536 104 -1168" -} -{ -"angle" "180" -"classname" "monster_soldier_light" -"origin" "-672 208 -872" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"origin" "-676 356 -872" -"item" "ammo_bullets" -} -{ -"light" "80" -"classname" "light" -"origin" "-1128 208 -848" -} -{ -"model" "*29" -"wait" "2" -"classname" "func_button" -"angle" "270" -"lip" "8" -"sounds" "3" -"target" "t139" -} -{ -"model" "*30" -"classname" "func_wall" -"spawnflags" "2055" -"targetname" "t139" -} -{ -"origin" "-960 16 -880" -"classname" "item_health_small" -} -{ -"origin" "-1000 16 -880" -"classname" "item_health_small" -} -{ -"volume" "0.4" -"origin" "-1024 184 -832" -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2049" -"targetname" "t139" -} -{ -"model" "*31" -"spawnflags" "2048" -"targetname" "message" -"target" "t138" -"wait" "30" -"classname" "trigger_multiple" -"angle" "90" -} -{ -"origin" "-88 -2328 16" -"classname" "item_health_large" -} -{ -"origin" "-40 -2328 16" -"classname" "item_health" -} -{ -"model" "*32" -"spawnflags" "2048" -"target" "t2" -"sounds" "3" -"lip" "8" -"angle" "180" -"classname" "func_button" -} -{ -"model" "*33" -"spawnflags" "2048" -"target" "t2" -"classname" "func_button" -"angle" "180" -"lip" "8" -"sounds" "3" -} -{ -"model" "*34" -"spawnflags" "2048" -"target" "t2" -"sounds" "3" -"lip" "8" -"angle" "180" -"classname" "func_button" -} -{ -"model" "*35" -"origin" "-768 962 -628" -"angle" "-1" -"dmg" "400" -"distance" "90" -"targetname" "crunch1" -"speed" "15" -"spawnflags" "70" -"classname" "func_door_rotating" -} -{ -"classname" "trigger_relay" -"targetname" "t130" -"killtarget" "message" -"origin" "-764 948 -404" -} -{ -"origin" "-320 -120 -888" -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -} -{ -"origin" "-128 -64 -792" -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -} -{ -"origin" "-56 -256 -888" -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -} -{ -"origin" "-56 -384 -888" -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -} -{ -"origin" "-56 -512 -888" -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -} -{ -"origin" "-32 -632 -888" -"classname" "light" -"light" "80" -"_color" "0.156863 0.580392 1.000000" -} -{ -"origin" "-544 448 -648" -"_color" "0.156863 0.580392 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-168 -1320 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "1" -"angle" "270" -"origin" "968 816 -768" -} -{ -"classname" "ammo_bullets" -"origin" "952 768 -752" -} -{ -"origin" "-152 -1120 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-16 -1032 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "128 -1000 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "296 -992 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "472 -1016 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "560 -1176 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "568 -1352 88" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "568 -1504 88" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "568 -1664 88" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-168 -1720 88" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-32 -1088 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "0 -1344 0" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "416 -1088 0" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "0 -1536 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "0 -1728 0" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "384 -1728 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "384 -1536 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "384 -1344 0" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-64 -1728 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-64 -1536 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-64 -1344 0" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "448 -1536 0" -} -{ -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "448 -1344 0" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "448 -1728 0" -} -{ -"classname" "misc_deadsoldier" -"angle" "90" -"spawnflags" "2049" -"origin" "-320 -2200 0" -} -{ -"classname" "monster_tank" -"spawnflags" "1" -"item" "ammo_bullets" -"origin" "188 1532 -624" -"angle" "90" -} -{ -"classname" "item_health_large" -"origin" "-992 2248 -1008" -} -{ -"classname" "misc_deadsoldier" -"angle" "315" -"spawnflags" "8" -"origin" "-976 2296 -1024" -} -{ -"origin" "-1168 400 -768" -"spawnflags" "4" -"angle" "180" -"classname" "misc_deadsoldier" -} -{ -"origin" "-24 -528 -888" -"spawnflags" "1" -"angle" "270" -"classname" "misc_deadsoldier" -} -{ -"item" "ammo_cells" -"spawnflags" "256" -"origin" "320 552 -592" -"angle" "270" -"classname" "monster_soldier_light" -} -{ -"origin" "448 448 -592" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"origin" "-136 -704 -760" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t133" -"target" "t134" -} -{ -"origin" "-136 -704 -760" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t135" -"target" "t136" -} -{ -"origin" "448 -704 -760" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t134" -"target" "t135" -} -{ -"origin" "-840 952 -456" -"targetname" "t130" -"classname" "target_goal" -} -{ -"origin" "-808 952 -440" -"message" "Grab the passcard and\nreturn to the security\ncomplex." -"targetname" "t130" -"classname" "target_help" -} -{ -"origin" "-464 -304 -872" -"targetname" "doorb" -"classname" "target_goal" -} -{ -"targetname" "t138" -"origin" "-336 -2264 88" -"message" "Retrieve the data CD from\nCell Block A and gain\naccess to Cell Block B." -"classname" "target_help" -} -{ -"classname" "func_group" -} -{ -"spawnflags" "2048" -"classname" "target_spawner" -"target" "key_pass" -"angle" "180" -"targetname" "t130" -"origin" "-848 936 -560" -} -{ -"origin" "-1512 856 -1280" -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -} -{ -"classname" "light" -"light" "110" -"_color" "0.701961 1.000000 0.701961" -"origin" "-608 448 -696" -} -{ -"origin" "-640 448 -696" -"_color" "0.701961 1.000000 0.701961" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"_color" "0.701961 1.000000 0.701961" -"origin" "-600 288 -824" -} -{ -"origin" "-648 288 -824" -"_color" "0.701961 1.000000 0.701961" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"_color" "0.701961 1.000000 0.701961" -"origin" "-1312 944 -824" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t127" -} -{ -"style" "4" -"classname" "func_areaportal" -"targetname" "t128" -} -{ -"model" "*36" -"classname" "func_door" -"angle" "-2" -"target" "t127" -"_minlight" "0.1" -"lip" "-1" -} -{ -"model" "*37" -"classname" "func_door" -"angle" "-2" -"target" "t128" -"lip" "-1" -"_minlight" "0.1" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "light" -"light" "100" -"_color" "0.047059 0.564706 1.000000" -"origin" "-1312 1536 -408" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "-128 64 -760" -"target" "t133" -"targetname" "t136" -} -{ -"classname" "monster_gunner" -"target" "t119" -"origin" "-144 -480 -608" -"item" "ammo_bullets" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "64 -448 -624" -"targetname" "t120" -"target" "t121" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "-128 -448 -624" -"targetname" "t119" -"target" "t120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "64 -448 -624" -"targetname" "t118" -"target" "t119" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "64 -64 -624" -"targetname" "t117" -"target" "t118" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "64 -24 -624" -"target" "t117" -"targetname" "t122" -} -{ -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"origin" "-1528 816 -584" -} -{ -"origin" "-288 160 -728" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" // b#5: 2049 -> 1 -} -{ -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"origin" "-640 712 -576" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-768 856 -872" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-552 848 -816" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-1040 856 -1424" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-1192 856 -1424" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-1384 856 -1424" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-1512 856 -1424" -} -{ -"spawnflags" "1" -"noise" "world/bubl3.wav" -"classname" "target_speaker" -"origin" "-1512 856 -1208" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1512 552 -1184" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1520 416 -1184" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1520 264 -1184" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "-1512 80 -1184" -} -{ -"classname" "target_speaker" -"noise" "world/bubl3.wav" -"spawnflags" "1" -"origin" "-768 856 -736" -} -{ -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-1408 616 -856" -"spawnflags" "1" -} -{ -"origin" "288 -704 -280" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "32 -704 -280" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-224 -704 -280" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-96 -480 -408" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-224 32 -408" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-96 32 -408" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-96 -224 -408" -} -{ -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "32 -224 -408" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "544 -704 -280" -} -{ -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "32 -480 -408" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "32 32 -408" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "64 -448 -664" -} -{ -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "-352 32 -408" -} -{ -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"origin" "64 -64 -664" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "64 -256 -664" -} -{ -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2049" -"targetname" "key1" -"origin" "864 952 -720" -} -{ -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -"targetname" "cell3" -"origin" "-1416 256 -832" -"volume" "0.4" -} -{ -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -"targetname" "cell4" -"origin" "-1280 184 -832" -"volume" "0.4" -} -{ -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -"origin" "640 -200 -832" -"targetname" "cella2" -"volume" "0.4" -} -{ -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -"origin" "896 -200 -832" -"targetname" "cella3" -"volume" "0.4" -} -{ -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -"origin" "968 -64 -832" -"targetname" "cella4" -"volume" "0.4" -} -{ -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -"origin" "968 192 -832" -"targetname" "cella5" -"volume" "0.4" -} -{ -"classname" "target_speaker" -"noise" "world/force1.wav" -"spawnflags" "2049" -"targetname" "cell2" -"origin" "-1416 512 -832" -"volume" "0.4" -} -{ -"attenuation" "1" -"spawnflags" "2049" -"noise" "world/mach1.wav" -"classname" "target_speaker" -"origin" "288 488 -488" -"volume" "0.4" -} -{ -"attenuation" "1" -"spawnflags" "2049" -"noise" "world/mach1.wav" -"classname" "target_speaker" -"origin" "352 488 -488" -"volume" "0.4" -} -{ -"attenuation" "1" -"spawnflags" "2049" -"noise" "world/mach1.wav" -"classname" "target_speaker" -"origin" "352 408 -488" -"volume" "0.4" -} -{ -"classname" "target_speaker" -"noise" "world/mach1.wav" -"spawnflags" "2049" -"attenuation" "1" -"origin" "288 408 -488" -"volume" "0.4" -} -{ -"origin" "-1224 1400 -632" -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -} -{ -"style" "5" -"targetname" "t116" -"classname" "func_areaportal" -} -{ -"model" "*38" -"target" "t116" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"model" "*39" -"target" "t115" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "6" -"targetname" "t115" -"classname" "func_areaportal" -} -{ -"origin" "-1312 1536 -916" -"targetname" "t114" -"classname" "info_null" -} -{ -"origin" "-1312 1536 -392" -"_cone" "18" -"target" "t114" -"_color" "0.047059 0.564706 1.000000" -"light" "550" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-1400 1280 -888" -} -{ -"model" "*40" -"target" "t106" -"targetname" "t112" -"classname" "trigger_once" -"spawnflags" "2048" // b#4: added this -} -{ -"model" "*41" -"spawnflags" "2048" -"target" "t112" -"classname" "trigger_multiple" -} -{ -"item" "ammo_bullets" -"origin" "-792 1664 -616" -"angle" "180" -"spawnflags" "1" -"classname" "monster_gunner" -} -{ -"origin" "-712 2304 -944" -"classname" "light" -"light" "64" -"_color" "0.592157 1.000000 0.592157" -} -{ -"origin" "-760 2304 -944" -"_color" "0.592157 1.000000 0.592157" -"light" "64" -"classname" "light" -} -{ -"origin" "-760 1664 -560" -"classname" "light" -"light" "64" -"_color" "0.592157 1.000000 0.592157" -} -{ -"origin" "-712 1664 -560" -"_color" "0.592157 1.000000 0.592157" -"light" "64" -"classname" "light" -} -{ -"model" "*42" -"target" "t111" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "7" -"targetname" "t111" -"classname" "func_areaportal" -} -{ -"model" "*43" -"target" "t110" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "8" -"targetname" "t110" -"classname" "func_areaportal" -} -{ -"origin" "-768 948 -536" -"targetname" "t109" -"classname" "info_null" -} -{ -"light" "350" -"origin" "-768 840 -304" -"target" "t109" -"classname" "light" -} -{ -"targetname" "t160" -"origin" "-920 1000 -616" -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier_light" -} -{ -"targetname" "t108" -"pathtarget" "t107" -"origin" "-640 744 -632" -"classname" "point_combat" -} -{ -"model" "*44" -"spawnflags" "2048" -"target" "t107" -"classname" "trigger_once" -} -{ -"model" "*45" -"target" "jelev1" -"delay" "1" // b#3: added this -"lip" "2" -"angle" "-2" -"classname" "func_button" -} -{ -"targetname" "t160" -"target" "t108" -"origin" "-612 812 -616" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"model" "*46" -"classname" "func_door" -"angle" "-2" -"lip" "384" -"speed" "50" -"targetname" "t70" -"wait" "2" -} -{ -"classname" "item_health_small" -"origin" "-1584 192 -880" -} -{ -"classname" "item_health_small" -"origin" "-1584 232 -880" -} -{ -"classname" "item_health_small" -"origin" "-1256 16 -880" -} -{ -"classname" "item_health_small" -"origin" "-1216 16 -880" -} -{ -"classname" "item_health_small" -"origin" "-1584 448 -880" -} -{ -"classname" "item_health_small" -"origin" "-1584 488 -880" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-840 2056 -968" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-840 1992 -936" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-840 1928 -904" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-896 1792 -776" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-840 1664 -888" -} -{ -"origin" "-896 1096 -760" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-840 1152 -760" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-840 1280 -760" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-840 1408 -760" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-840 1536 -824" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-840 2120 -1000" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1024 1720 -888" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1144 1664 -888" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1144 1536 -888" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1144 1408 -888" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1216 1336 -888" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1312 1408 -776" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1400 1152 -888" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1464 1152 -632" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"origin" "-1464 1280 -632" -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-1312 1424 -584" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-1208 1416 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-1208 1536 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-1208 1664 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-1152 1720 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-1024 1720 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-896 1720 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-576 1608 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-320 1608 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "-64 1608 -632" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "80" -"classname" "light" -"origin" "56 1984 -632" -} -{ -"classname" "light" -"light" "80" -"_color" "0.047059 0.564706 1.000000" -"origin" "-1024 1096 -760" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "300" -"classname" "light" -"origin" "-1656 256 -1176" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "300" -"classname" "light" -"origin" "-1656 512 -1176" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "300" -"classname" "light" -"origin" "-1352 640 -1176" -} -{ -"_color" "0.047059 0.564706 1.000000" -"light" "300" -"classname" "light" -"origin" "-1352 384 -1176" -} -{ -"classname" "light" -"light" "300" -"_color" "0.047059 0.564706 1.000000" -"origin" "-1352 128 -1176" -} -{ -"origin" "960 -288 -880" -"classname" "item_health_small" -} -{ -"origin" "960 -328 -880" -"classname" "item_health_small" -} -{ -"origin" "1056 0 -880" -"classname" "item_health_small" -} -{ -"origin" "1096 0 -880" -"classname" "item_health_small" -} -{ -"classname" "item_health_small" -"origin" "1056 256 -880" -} -{ -"classname" "item_health_small" -"origin" "1096 256 -880" -} -{ -"classname" "item_health_small" -"origin" "704 -288 -880" -} -{ -"classname" "item_health_small" -"origin" "704 -328 -880" -} -{ -"origin" "-160 1984 -608" -"targetname" "t105" -"classname" "point_combat" -"pathtarget" "t106" -} -{ -"origin" "-56 1984 -608" -"target" "t105" -"spawnflags" "1" -"classname" "monster_soldier_light" -"angle" "180" -"item" "ammo_cells" -} -{ -"origin" "-1040 2128 -1040" -"targetname" "t86" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1040 2128 -1008" -"target" "t86" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1080 2128 -1008" -"target" "t85" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1080 2128 -1040" -"targetname" "t85" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1072 2096 -1008" -"target" "t87" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1072 2096 -1040" -"targetname" "t87" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1032 2096 -1040" -"targetname" "t88" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1032 2096 -1008" -"target" "t88" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1072 2000 -1040" -"targetname" "t89" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1072 2000 -1008" -"target" "t89" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1072 1960 -1008" -"target" "t90" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1072 1960 -1040" -"targetname" "t90" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1040 1968 -1008" -"target" "t91" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-1040 1968 -1040" -"targetname" "t91" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1040 2008 -1040" -"targetname" "t92" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-1040 2008 -1008" -"target" "t92" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-624 1904 -1040" -"targetname" "t101" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-624 1904 -1008" -"target" "t101" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-624 1864 -1008" -"target" "t104" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-624 1864 -1040" -"targetname" "t104" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-592 1872 -1008" -"target" "t103" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-592 1872 -1040" -"targetname" "t103" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-592 1912 -1040" -"targetname" "t102" -"classname" "target_splash" -"sounds" "5" -} -{ -"origin" "-592 1912 -1008" -"target" "t102" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-624 2160 -1008" -"target" "t93" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-584 2160 -1008" -"target" "t96" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-592 2128 -1008" -"target" "t95" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-592 2032 -1008" -"target" "t100" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-632 2032 -1008" -"target" "t97" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-624 2000 -1008" -"target" "t98" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-584 2000 -1008" -"target" "t99" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-1072 2256 -1008" -"target" "t82" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-1072 2216 -1008" -"target" "t83" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-1040 2224 -1008" -"target" "t84" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-1040 2264 -1008" -"target" "t81" -"classname" "func_timer" -"random" "3" -"wait" "4" -"spawnflags" "1" -} -{ -"origin" "-632 2128 -1008" -"target" "t94" -"spawnflags" "1" -"wait" "4" -"random" "3" -"classname" "func_timer" -} -{ -"origin" "-632 2032 -1040" -"targetname" "t97" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-584 2000 -1040" -"targetname" "t99" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-624 2000 -1040" -"targetname" "t98" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-592 2032 -1040" -"targetname" "t100" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-632 2128 -1040" -"targetname" "t94" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-584 2160 -1040" -"targetname" "t96" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-624 2160 -1040" -"targetname" "t93" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-592 2128 -1040" -"targetname" "t95" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-1040 2264 -1040" -"targetname" "t81" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-1072 2256 -1040" -"targetname" "t82" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-1040 2224 -1040" -"targetname" "t84" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-1072 2216 -1040" -"targetname" "t83" -"sounds" "5" -"classname" "target_splash" -} -{ -"classname" "ammo_shells" -"origin" "224 272 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t78" -"target" "t79" -"origin" "1216 768 -632" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t77" -"target" "t78" -"origin" "1216 384 -632" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"target" "t77" -"targetname" "t80" -"origin" "736 384 -632" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t79" -"target" "t80" -"origin" "1216 384 -632" -} -{ -"item" "ammo_cells" -"spawnflags" "256" -"classname" "monster_soldier_light" -"angle" "90" -"origin" "320 352 -592" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"target" "t75" -"targetname" "t76" -"origin" "-1184 768 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t75" -"target" "t76" -"origin" "-1456 768 -624" -} -{ -"classname" "monster_soldier_light" -"target" "pb51" -"origin" "-1416 1152 -616" -} -{ -"classname" "monster_soldier_light" -"target" "pc21" -"origin" "-888 1664 -608" -"item" "ammo_cells" -} -{ -"classname" "monster_gunner" -"target" "pi11" -"origin" "-1296 1112 -872" -"item" "ammo_bullets" -} -{ -"spawnflags" "2048" -"classname" "light" -"light" "64" -"origin" "-160 1984 -600" -"_color" "0.047244 0.566929 1.000000" -} -{ -"model" "*47" -"wait" "-1" -"classname" "func_button" -"angle" "-2" -"lip" "2" -"target" "t70" -"targetname" "t106" -"spawnflags" "2048" -} -{ -"origin" "-584 1664 -608" -"target" "pch11" -"classname" "monster_soldier_light" -} -{ -"origin" "-320 1936 -752" -"target" "t64" -"wait" "4" -"random" "3" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-240 1968 -752" -"target" "t62" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-256 2056 -752" -"target" "t63" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-320 2072 -752" -"target" "t66" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-384 2048 -752" -"target" "t67" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-400 1976 -752" -"target" "t68" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-384 1912 -752" -"target" "t69" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-320 1984 -752" -"target" "t65" -"classname" "func_timer" -"spawnflags" "1" -"random" "3" -"wait" "4" -} -{ -"origin" "-272 1904 -752" -"target" "t61" -"wait" "4" -"random" "3" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-320 2072 -792" -"targetname" "t66" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-400 1976 -792" -"targetname" "t68" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-256 2056 -792" -"targetname" "t63" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-240 1968 -792" -"targetname" "t62" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-272 1904 -792" -"targetname" "t61" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-384 1912 -792" -"targetname" "t69" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-320 1984 -792" -"targetname" "t65" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-384 2048 -792" -"targetname" "t67" -"classname" "target_splash" -"sounds" "5" -"angle" "-1" -} -{ -"origin" "-320 1936 -792" -"targetname" "t64" -"angle" "-1" -"sounds" "5" -"classname" "target_splash" -} -{ -"origin" "-784 2304 -992" -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -"item" "ammo_bullets" -} -{ -"origin" "-592 2304 -1000" -"target" "pg11" -"classname" "monster_gunner" -} -{ -"origin" "776 320 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "776 192 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "776 64 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "704 -8 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "576 -8 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "448 -8 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "320 -8 -888" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "320 120 -760" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "448 120 -760" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "648 320 -760" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "648 448 -760" -"classname" "light" -"light" "100" -"_color" "0.047619 0.567460 1.000000" -} -{ -"origin" "384 -64 -392" -"_color" "0.047619 0.567460 1.000000" -"light" "300" -"classname" "light" -} -{ -"origin" "-1512 815 -1288" -"_color" "0.356863 1.000000 0.356863" -"light" "130" -"classname" "light" -} -{ -"origin" "-1624 256 -1208" -"classname" "light" -"light" "300" -"_color" "0.047059 0.564706 1.000000" -} -{ -"origin" "-1416 384 -1208" -"classname" "light" -"light" "300" -"_color" "0.047059 0.564706 1.000000" -} -{ -"origin" "-1416 640 -1208" -"classname" "light" -"light" "300" -"_color" "0.047059 0.564706 1.000000" -} -{ -"origin" "-1624 512 -1208" -"classname" "light" -"light" "300" -"_color" "0.047059 0.564706 1.000000" -} -{ -"origin" "-1416 128 -1208" -"_color" "0.047059 0.564706 1.000000" -"light" "300" -"classname" "light" -} -{ -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier_light" -"origin" "-256 152 -744" -"item" "ammo_cells" -} -{ -"classname" "monster_soldier_light" -"angle" "270" -"spawnflags" "1" -"origin" "-384 112 -872" -"item" "ammo_cells" -} -{ -"_color" "0.666667 1.000000 0.666667" -"light" "110" -"classname" "light" -"origin" "-1056 768 -560" -} -{ -"classname" "light" -"light" "110" -"_color" "0.666667 1.000000 0.666667" -"origin" "-992 768 -560" -} -{ -"style" "9" -"classname" "func_areaportal" -"targetname" "t59" -} -{ -"origin" "-1312 1008 -824" -"classname" "light" -"light" "110" -"_color" "0.701961 1.000000 0.701961" -} -{ -"origin" "-1408 1008 -568" -"classname" "light" -"light" "110" -"_color" "0.701961 1.000000 0.701961" -} -{ -"origin" "-1408 944 -568" -"_color" "0.701961 1.000000 0.701961" -"light" "110" -"classname" "light" -} -{ -"origin" "-1152 952 -696" -"classname" "light" -"light" "110" -"_color" "0.701961 1.000000 0.701961" -} -{ -"origin" "-1152 1016 -696" -"_color" "0.701961 1.000000 0.701961" -"light" "110" -"classname" "light" -} -{ -"model" "*48" -"wait" "4" -"message" "This door is opened elsewhere." -"spawnflags" "32" -"targetname" "t2" -"target" "t57" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "10" -"targetname" "t57" -"classname" "func_areaportal" -} -{ -"model" "*49" -"wait" "4" -"message" "This door is opened elsewhere." -"spawnflags" "32" -"targetname" "t2" -"target" "t56" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "11" -"targetname" "t56" -"classname" "func_areaportal" -} -{ -"model" "*50" -"wait" "4" -"message" "This door is opened elsewhere." -"spawnflags" "32" -"targetname" "t2" -"target" "t55" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "12" -"targetname" "t55" -"classname" "func_areaportal" -} -{ -"classname" "item_health_large" -"origin" "136 -1304 -624" -} -{ -"style" "13" -"targetname" "t54" -"classname" "func_areaportal" -} -{ -"style" "14" -"targetname" "t53" -"classname" "func_areaportal" -} -{ -"model" "*51" -"spawnflags" "16" -"wait" "-1" -"target" "t53" -"targetname" "doorb" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"model" "*52" -"spawnflags" "16" -"wait" "-1" -"target" "t54" -"targetname" "doorb" -"angle" "-2" -"classname" "func_door" -"lip" "-1" -"_minlight" "0.1" -} -{ -"origin" "-1576 312 -872" -"angle" "315" -"spawnflags" "20" -"classname" "misc_insane" -} -{ -"origin" "-1376 608 -1184" -"spawnflags" "8" -"classname" "misc_deadsoldier" -} -{ -"origin" "-768 944 -544" -"spawnflags" "8" -"angle" "270" -"classname" "misc_insane" -"target" "t130" -} -{ -"item" "weapon_hyperblaster" -"origin" "-320 1984 -608" -"spawnflags" "16" -"angle" "0" -"classname" "misc_insane" -} -{ -"origin" "592 -312 -888" -"target" "t47" -"targetname" "t46" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "688 -360 -888" -"targetname" "t47" -"target" "t46" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "664 -336 -872" -"target" "t46" -"classname" "misc_insane" -} -{ -"origin" "1104 -64 -872" -"classname" "misc_insane" -"angle" "0" -"spawnflags" "16" -} -{ -"origin" "320 448 -608" -"angle" "180" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"style" "15" -"classname" "func_areaportal" -"targetname" "t43" -} -{ -"model" "*53" -"classname" "func_door" -"angle" "-2" -"target" "t43" -"lip" "-1" -"_minlight" "0.1" -} -{ -"light" "90" -"classname" "light" -"origin" "176 64 -696" -"_color" "0.733333 1.000000 0.733333" -} -{ -"_color" "0.733333 1.000000 0.733333" -"origin" "208 64 -696" -"classname" "light" -"light" "100" -} -{ -"style" "16" -"classname" "func_areaportal" -"targetname" "t42" -} -{ -"style" "17" -"classname" "func_areaportal" -"targetname" "t41" -} -{ -"light" "90" -"classname" "light" -"origin" "208 -64 -568" -"_color" "0.733333 1.000000 0.733333" -} -{ -"_color" "0.733333 1.000000 0.733333" -"origin" "240 -64 -568" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "240 -96 -824" -"_color" "0.733333 1.000000 0.733333" -} -{ -"light" "100" -"classname" "light" -"origin" "384 144 -568" -"_color" "0.733333 1.000000 0.733333" -} -{ -"model" "*54" -"classname" "func_door" -"angle" "-2" -"target" "t41" -"lip" "-1" -"_minlight" "0.1" -} -{ -"model" "*55" -"classname" "func_door" -"angle" "-2" -"target" "t42" -"lip" "-1" -"_minlight" "0.1" -} -{ -"style" "18" -"classname" "func_areaportal" -"targetname" "t40" -} -{ -"style" "19" -"classname" "func_areaportal" -"targetname" "t39" -} -{ -"origin" "112 1488 -464" -//"target" "t38" // b#2: never used -"classname" "light" -"_color" "1.000000 0.759036 0.265060" -} -{ -"origin" "112 1528 -464" -//"target" "t37" // b#2: never used -"classname" "light" -"_color" "1.000000 0.759036 0.265060" -} -{ -"origin" "272 1488 -464" -//"target" "t36" // b#2: never used -"_color" "1.000000 0.759036 0.265060" -"classname" "light" -} -{ -"origin" "272 1528 -464" -//"target" "t35" // b#2: never used -"_color" "1.000000 0.759036 0.265060" -"classname" "light" -} -{ -"origin" "536 -1728 8" -"classname" "ammo_cells" -"spawnflags" "1792" -} -{ -"classname" "item_armor_jacket" -"origin" "744 24 -744" -} -{ -"_color" "1.000000 0.408333 0.054167" -"origin" "-128 -2432 8" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.408333 0.054167" -"light" "80" -"classname" "light" -"origin" "-128 -2552 8" -} -{ -"_color" "1.000000 0.408333 0.054167" -"light" "80" -"classname" "light" -"origin" "-256 -2432 8" -} -{ -"_color" "1.000000 0.408333 0.054167" -"origin" "-256 -2552 8" -"classname" "light" -"light" "80" -} -{ -"model" "*56" -"lip" "0" -"sounds" "4" -"classname" "func_door" -"angle" "-2" -"_minlight" ".3" -} -{ -"origin" "-192 -2424 32" -"angle" "90" -"classname" "info_player_start" -"targetname" "jail3" -} -{ -"model" "*57" -"angle" "270" -"classname" "trigger_multiple" -"target" "t34" -} -{ -"classname" "target_changelevel" -"map" "jail3$jail4a" -"origin" "-168 -2552 48" -"targetname" "t34" -} -{ -"origin" "192 1416 -608" -"targetname" "jail3b" -"angle" "90" -"classname" "info_player_start" -} -{ -"model" "*58" -"spawnflags" "2048" -"target" "t33" -"classname" "trigger_multiple" -} -{ -"origin" "160 1304 -560" -"map" "jail3$jail4b" -"targetname" "t33" -"classname" "target_changelevel" -} -{ -"classname" "ammo_shells" -"origin" "192 -1312 -624" -} -{ -"classname" "ammo_shells" -"origin" "-304 -2144 24" -} -{ -"classname" "ammo_shells" -"origin" "-344 -2144 24" -} -{ -"classname" "weapon_hyperblaster" -"origin" "592 -1760 8" -"target" "t145" -} -{ -"classname" "weapon_machinegun" -"origin" "-24 -592 -872" -} -{ -"classname" "monster_gunner" -"angle" "180" -"spawnflags" "1" -"origin" "1048 768 -608" -"item" "ammo_grenades" -} -{ -"item" "ammo_bullets" -"classname" "monster_gunner" -"origin" "-1312 816 -872" -"target" "pb42" -} -{ -"spawnflags" "256" -"classname" "monster_gunner" -"target" "pa22" -"origin" "816 -112 -864" -} -{ -"classname" "monster_gunner" -"target" "pa12" -"origin" "864 528 -864" -} -{ -"item" "key_data_cd" -"classname" "trigger_key" -"origin" "-496 -272 -872" -"target" "doorb" -"targetname" "block2" -"spawnflags" "2049" // b#4: 1 -> 2049 -} -{ -"model" "*59" -"spawnflags" "2048" -"lip" "8" -"angle" "180" -"classname" "func_button" -"target" "block2" -} -{ -"model" "*60" -"spawnflags" "2048" -"lip" "8" -"classname" "func_button" -"angle" "180" -"target" "block2" -} -{ -"target" "t133" -"classname" "monster_gunner" -"angle" "90" -"origin" "-152 -664 -744" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"origin" "704 64 -752" -"targetname" "tank1" -"target" "tank4" -} -{ -"model" "*61" -"targetname" "cell2" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*62" -"targetname" "cell3" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*63" -"targetname" "cell4" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*64" -"targetname" "cella4" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*65" -"targetname" "cella3" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*66" -"targetname" "cella5" -"classname" "func_wall" -"spawnflags" "2055" -} -{ -"origin" "920 941 -720" -"light" "64" -"classname" "light" -"spawnflags" "2048" -} -{ -"model" "*67" -"wait" "2" -"target" "keytrig1" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"model" "*68" -"targetname" "key1" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*69" -"targetname" "cella2" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pg11" -"target" "pg12" -"origin" "-552 2304 -1016" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pg12" -"target" "pg11" -"origin" "-112 2304 -1016" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pch12" -"target" "pch13" -"origin" "0 1664 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pch14" -"target" "pch11" -"origin" "0 1664 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pch11" -"target" "pch12" -"origin" "-544 1664 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pch13" -"target" "pch14" -"origin" "0 2184 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pi12" -"target" "pi13" -"origin" "-1296 1280 -888" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pi13" -"target" "pi14" -"origin" "-1032 1280 -888" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pi15" -"target" "pi16" -"origin" "-1032 1280 -888" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pi16" -"target" "pi11" -"origin" "-1296 1280 -888" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pi11" -"target" "pi12" -"origin" "-1296 1144 -888" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pi14" -"target" "pi15" -"origin" "-1032 1616 -888" -} -{ -"classname" "monster_soldier_ss" -"target" "pc11" -"origin" "-1152 1152 -736" -"item" "ammo_bullets" -} -{ -"model" "*70" -"target" "cella2" -"sounds" "3" -"lip" "8" -"angle" "270" -"classname" "func_button" -"wait" "3" -} -{ -"classname" "light" -"light" "100" -"origin" "320 424 -520" -} -{ -"origin" "188 -1520 -592" -"_color" "0.733333 1.000000 0.733333" -"light" "100" -"classname" "light" -} -{ -"model" "*71" -"target" "jelev1" -"angle" "270" -"classname" "func_button" -} -{ -"target" "t161" -"origin" "192 -1256 -48" -"classname" "monster_tank" -"angle" "270" -"item" "ammo_bullets" -} -{ -"classname" "light" -"light" "100" -"origin" "368 424 -472" -} -{ -"light" "100" -"classname" "light" -"origin" "368 472 -472" -} -{ -"origin" "272 472 -472" -"classname" "light" -"light" "100" -} -{ -"origin" "272 424 -472" -"light" "100" -"classname" "light" -} -{ -"origin" "320 472 -520" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "320 472 -416" -} -{ -"classname" "light" -"light" "100" -"origin" "320 424 -416" -} -{ -"classname" "light" -"light" "500" -"origin" "-64 -1024 576" -} -{ -"light" "500" -"classname" "light" -"origin" "-192 -1024 576" -} -{ -"classname" "item_health" -"origin" "-656 984 -624" -} -{ -"classname" "item_health" -"origin" "-624 984 -624" -} -{ -"classname" "item_health" -"origin" "-592 984 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc23" -"target" "pc24" -"origin" "-1152 1408 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc22" -"target" "pc23" -"origin" "-1152 1664 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc21" -"target" "pc22" -"origin" "-888 1664 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc24" -"target" "pc21" -"origin" "-1152 1664 -624" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc13" -"target" "pc14" -"origin" "-896 1384 -752" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc14" -"target" "pc11" -"origin" "-896 1152 -752" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc12" -"target" "pc13" -"origin" "-896 1152 -752" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "pc11" -"target" "pc12" -"origin" "-1152 1152 -752" -} -{ -"classname" "item_health" -"origin" "144 272 -624" -} -{ -"classname" "item_health" -"origin" "184 272 -624" -} -{ -"classname" "item_health" -"origin" "144 312 -624" -} -{ -"spawnflags" "2048" -"classname" "key_data_cd" -"origin" "864 1000 -720" -} -{ -"origin" "296 -112 -888" -"target" "pa22" -"targetname" "pa21" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "816 -112 -888" -"target" "pa21" -"targetname" "pa22" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "864 528 -880" -"target" "pa11" -"targetname" "pa12" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "864 -112 -880" -"target" "pa12" -"targetname" "pa11" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1416 1352 -632" -"target" "pb53" -"targetname" "pb52" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1416 1352 -632" -"target" "pb51" -"targetname" "pb54" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1416 1152 -632" -"target" "pb52" -"targetname" "pb51" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1160 1352 -632" -"target" "pb54" -"targetname" "pb53" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1312 816 -888" -"target" "pb41" -"targetname" "pb42" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1312 256 -888" -"target" "pb42" -"targetname" "pb41" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1152 712 -752" -"target" "pb21" -"classname" "monster_tank" -"item" "ammo_cells" -} -{ -"origin" "-1152 448 -760" -"target" "pb12" -"targetname" "pb22" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1152 856 -760" -"target" "pb22" -"targetname" "pb21" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-704 448 -760" -"target" "pb11" -"targetname" "pb12" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1152 448 -760" -"target" "pb21" -"targetname" "pb11" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "64 -64 -624" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t121" -"target" "t122" -} -{ -"origin" "96 -1312 -88" -"classname" "light" -"light" "125" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "96 -1504 -88" -"light" "125" -"classname" "light" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "288 -1504 -88" -"classname" "light" -"light" "125" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "288 -1312 -88" -"light" "125" -"classname" "light" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "48 2304 -960" -"classname" "light" -"light" "80" -} -{ -"origin" "48 2176 -584" -"light" "80" -"classname" "light" -} -{ -"model" "*72" -"target" "t151" -"classname" "func_button" -"angle" "0" -"sounds" "2" -} -{ -"model" "*73" -"target" "t151" -"sounds" "2" -"angle" "0" -"classname" "func_button" -} -{ -"model" "*74" -"speed" "80" -"sounds" "1" -"height" "128" -"classname" "func_plat" -} -{ -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier" -"origin" "384 64 -616" -"item" "ammo_shells" -} -{ -"classname" "monster_soldier_light" -"angle" "0" -"spawnflags" "1" -"origin" "704 384 -616" -"target" "t80" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"origin" "-1152 768 -608" -"target" "t76" -} -{ -"classname" "light" -"light" "200" -"origin" "192 -1408 16" -} -{ -"origin" "384 64 -752" -"targetname" "tank4" -"target" "tank3" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "704 64 -752" -"targetname" "tank3" -"target" "tank2" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "704 512 -752" -"target" "tank1" -"targetname" "tank2" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "384 64 -744" -"target" "tank4" -"classname" "monster_tank" -"angle" "0" -"item" "ammo_bullets" -} -{ -"origin" "192 448 -592" -"classname" "monster_soldier_light" -"angle" "0" -} -{ -"_color" "0.733333 1.000000 0.733333" -"classname" "light" -"light" "100" -"origin" "192 -2152 72" -} -{ -"_color" "0.733333 1.000000 0.733333" -"classname" "light" -"light" "100" -"origin" "192 -2048 72" -} -{ -"_color" "0.733333 1.000000 0.733333" -"origin" "64 -2168 72" -"light" "100" -"classname" "light" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "-624 704 -584" -"light" "100" -"classname" "light" -} -{ -"model" "*75" -"targetname" "t107" -"sounds" "2" -"target" "crunch1" -"angle" "0" -"classname" "func_button" -} -{ -"light" "80" -"classname" "light" -"origin" "944 88 -848" -} -{ -"light" "80" -"classname" "light" -"origin" "944 -168 -848" -} -{ -"light" "80" -"classname" "light" -"origin" "792 -176 -848" -} -{ -"light" "80" -"classname" "light" -"origin" "536 -176 -848" -} -{ -"model" "*76" -"origin" "320 456 -472" -"_minlight" "0.6" -"dmg" "30" -"speed" "250" -"spawnflags" "11" -"classname" "func_rotating" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"model" "*77" -//"sounds" "1" // b#3 -"angle" "-2" -"classname" "func_door" -"target" "t40" -"lip" "-1" -"_minlight" "0.1" -} -{ -"_color" "0.733333 1.000000 0.733333" -"origin" "208 -96 -824" -"classname" "light" -"light" "90" -} -{ -"_color" "0.733333 1.000000 0.733333" -"origin" "624 384 -568" -"light" "100" -"classname" "light" -} -{ -"model" "*78" -//"sounds" "1" // b#3 -"angle" "-2" -"classname" "func_door" -"target" "t39" -"lip" "-1" -"_minlight" "0.1" -} -{ -"model" "*79" -"target" "cella3" -"wait" "3" -"classname" "func_button" -"angle" "270" -"lip" "8" -"sounds" "3" -} -{ -"model" "*80" -"target" "cella4" -"wait" "3" -"classname" "func_button" -"angle" "0" -"lip" "8" -"sounds" "3" -} -{ -"model" "*81" -"target" "cella5" -"wait" "3" -"classname" "func_button" -"angle" "0" -"lip" "8" -"sounds" "3" -} -{ -"origin" "-1384 208 -848" -"classname" "light" -"light" "80" -} -{ -"origin" "-1392 360 -848" -"classname" "light" -"light" "80" -} -{ -"origin" "-1392 616 -848" -"classname" "light" -"light" "80" -} -{ -"model" "*82" -"sounds" "3" -"lip" "8" -"angle" "180" -"classname" "func_button" -"target" "cell3" -} -{ -"model" "*83" -"sounds" "3" -"lip" "8" -"angle" "270" -"classname" "func_button" -"wait" "2" -"target" "cell4" -} -{ -"model" "*84" -"classname" "func_button" -"angle" "180" -"lip" "8" -"sounds" "3" -"target" "cell2" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"model" "*85" -"_minlight" ".3" -"angle" "-2" -"classname" "func_door" -"sounds" "4" -"lip" "4" -} -{ -"light" "80" -"classname" "light" -"origin" "128 1304 -632" -"_color" "1.000000 0.408333 0.054167" -} -{ -"origin" "128 1424 -632" -"classname" "light" -"light" "80" -"_color" "1.000000 0.408333 0.054167" -} -{ -"origin" "256 1304 -632" -"classname" "light" -"light" "80" -"_color" "1.000000 0.408333 0.054167" -} -{ -"light" "80" -"classname" "light" -"origin" "256 1424 -632" -"_color" "1.000000 0.408333 0.054167" -} -{ -"model" "*86" -"classname" "func_wall" -} -{ -"classname" "func_group" -} -{ -"model" "*87" -"targetname" "t153" -"classname" "func_button" -"angle" "180" -"target" "t1" -"lip" "16" -} -{ -"classname" "trigger_relay" -"targetname" "t1" -"delay" "1" -"target" "t2" -"origin" "-1540 848 -624" -} -{ -"classname" "light" -"light" "64" -"origin" "-1567 804 -620" -} -{ -"light" "64" -"classname" "light" -"origin" "-1567 828 -620" -} -{ -"model" "*88" -"origin" "-1512 755 -1072" -"speed" "225" -"target" "t113" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*89" -"origin" "-1484 755 -1080" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*90" -"origin" "-1464 755 -1100" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*91" -"origin" "-1456 755 -1128" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*92" -"origin" "-1464 755 -1156" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*93" -"origin" "-1484 755 -1176" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*94" -"origin" "-1512 755 -1184" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*95" -"origin" "-1540 755 -1176" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*96" -"origin" "-1560 755 -1156" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*97" -"origin" "-1568 755 -1128" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*98" -"origin" "-1560 755 -1100" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"model" "*99" -"origin" "-1540 755 -1080" -"speed" "225" -"classname" "func_door_rotating" -"distance" "80" -"team" "iris1" -"_minlight" "0.2" -"spawnflags" "128" -} -{ -"style" "20" -"targetname" "t113" -"classname" "func_areaportal" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/jail5@2ec5.ent b/stuff/mapfixes/baseq2/jail5@2ec5.ent deleted file mode 100644 index 338b8e6cc..000000000 --- a/stuff/mapfixes/baseq2/jail5@2ec5.ent +++ /dev/null @@ -1,3989 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed 2x monster_infantry stuck in wall (b#1) -{ -"nextmap" "security" -"message" "Guard House" -"classname" "worldspawn" -"_wad" "gfx/e1u3.wad" -"sounds" "8" -"sky" "unit3_" -} -{ -"classname" "light" -"light" "120" -"origin" "104 1184 -184" -} -{ -"origin" "160 1392 -144" -"light" "100" -"classname" "light" -} -{ -"origin" "352 1416 -144" -"light" "100" -"classname" "light" -} -{ -"origin" "192 1144 -232" -"light" "120" -"classname" "light" -} -{ -"origin" "64 1048 -184" -"classname" "light" -"light" "120" -} -{ -"origin" "200 1224 -144" -"classname" "light" -"light" "100" -} -{ -"origin" "-24 1184 -184" -"classname" "light" -"light" "120" -} -{ -"origin" "-104 1256 -184" -"classname" "light" -"light" "120" -} -{ -"origin" "56 1280 -184" -"classname" "light" -"light" "120" -} -{ -"origin" "152 1016 -192" -"light" "120" -"classname" "light" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "jail3" -"origin" "96 -392 24" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "jail3" -"origin" "160 -392 24" -} -{ -"classname" "info_player_coop" -"angle" "90" -"targetname" "jail3" -"origin" "48 -392 24" -} -{ -"model" "*1" -"classname" "func_button" -"angle" "90" -"_minlight" ".2" -"target" "t20" -"spawnflags" "2048" -} -{ -"origin" "-896 1660 -216" -"message" "You have found a secret area." -"targetname" "t77" -"classname" "target_secret" -} -{ -"model" "*2" -"classname" "func_wall" -} -{ -"origin" "192 568 -64" -"spawnflags" "1792" -"target" "t18" -"classname" "trigger_always" -} -{ -"origin" "-96 -488 232" -"angle" "90" -"targetname" "t104" -"classname" "misc_teleporter_dest" -"spawnflags" "1792" -} -{ -"origin" "544 416 -104" -"angle" "180" -"target" "t104" -"classname" "misc_teleporter" -"spawnflags" "1792" -} -{ -"origin" "544 224 -104" -"angle" "0" -"spawnflags" "1792" -"targetname" "t103" -"classname" "misc_teleporter_dest" -} -{ -"origin" "288 -416 232" -"angle" "270" -"spawnflags" "1792" -"target" "t103" -"classname" "misc_teleporter" -} -{ -"origin" "-1256 88 112" -"classname" "item_health" -} -{ -"origin" "-1216 108 112" -"spawnflags" "1792" -"classname" "item_armor_body" -} -{ -"origin" "-1256 196 96" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1220 220 116" -"classname" "item_pack" -} -{ -"origin" "-1216 192 172" -"classname" "light" -"light" "80" -} -{ -"origin" "-1216 128 172" -"light" "80" -"classname" "light" -} -{ -"origin" "-1108 218 180" -"message" "You have found a secret area." -"targetname" "t102" -"classname" "target_secret" -} -{ -"model" "*3" -"target" "t102" -"classname" "trigger_once" -} -{ -"origin" "-1106 190 136" -"targetname" "t101" -"classname" "target_explosion" -"dmg" "1" -"delay" ".2" -} -{ -"origin" "-1110 134 118" -"targetname" "t101" -"delay" ".2" -"dmg" "1" -"classname" "target_explosion" -} -{ -"model" "*4" -"target" "t101" -"health" "30" -"dmg" "1" -"classname" "func_explosive" -} -{ -"origin" "-296 856 80" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "-240 808 80" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"origin" "-950 2088 -320" -"spawnflags" "1792" -"classname" "weapon_bfg" -} -{ -"origin" "600 576 16" -"classname" "ammo_bullets" -"spawnflags" "1536" -} -{ -"origin" "600 536 16" -"spawnflags" "1536" -"classname" "ammo_bullets" -} -{ -"origin" "672 584 16" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "928 912 -128" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "544 2976 -136" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "480 2976 -136" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "480 3040 -128" -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -} -{ -"origin" "1120 2456 -224" -"classname" "ammo_shells" -} -{ -"origin" "1056 2464 -160" -"spawnflags" "0" -"classname" "weapon_supershotgun" -} -{ -"origin" "-828 1860 -216" -"angles" "20 135 0" -"classname" "info_player_intermission" -} -{ -"origin" "800 3352 -128" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "1408 3488 -256" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "1416 2312 -216" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "1312 800 -120" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "328 760 -104" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "736 224 -104" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-408 1728 -184" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "32 1120 -104" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1072 32 120" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "224 288 232" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "32 -344 24" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"classname" "ammo_cells" -"origin" "1296 1264 -128" -} -{ -"classname" "ammo_cells" -"origin" "1258 1240 -128" -} -{ -"classname" "item_power_shield" -"origin" "1196 2386 -336" -} -{ -"classname" "light" -"light" "80" -"origin" "-32 288 -88" -} -{ -"classname" "trigger_relay" -"targetname" "t80" -"target" "t100" -"delay" ".4" -"origin" "88 544 -104" -} -{ -"classname" "target_secret" -"targetname" "t99" -"message" "You have found a secret area." -"origin" "-416 1000 32" -} -{ -"model" "*5" -"classname" "trigger_once" -"target" "t99" -} -{ -"noise" "world/amb13.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "640 216 192" -} -{ -"classname" "target_speaker" -"noise" "world/amb13.wav" -"spawnflags" "1" -"origin" "640 416 192" -} -{ -"noise" "world/amb8.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "264 584 -24" -} -{ -"classname" "target_speaker" -"noise" "world/amb8.wav" -"spawnflags" "1" -"origin" "48 592 -40" -} -{ -"noise" "world/wind2" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-200 1088 192" -} -{ -"noise" "world/wind2.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-408 1112 192" -} -{ -"noise" "world/wind2.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-376 640 192" -} -{ -"noise" "world/wind2.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-144 640 192" -} -{ -"noise" "world/wind2.wav" -"classname" "target_speaker" -"spawnflags" "1" -"origin" "96 656 192" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "40 984 192" -} -{ -"noise" "world/water1.wav" -"origin" "104 1232 -200" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/water1.wav" -"origin" "-80 1232 -200" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "136 1072 -200" -"noise" "world/water1.wav" -} -{ -"classname" "item_health_small" -"origin" "1360 2376 -224" -} -{ -"classname" "item_health_small" -"origin" "1360 2336 -224" -} -{ -"classname" "item_health_small" -"origin" "1320 2360 -224" -} -{ -"spawnflags" "1" -"angle" "135" -"classname" "monster_soldier_ss" -"origin" "1096 2072 -216" -} -{ -"classname" "item_armor_combat" -"origin" "1088 904 -128" -} -{ -"classname" "ammo_bullets" -"origin" "976 3552 -264" -} -{ -"origin" "230 538 -310" -"angle" "270" -"classname" "misc_deadsoldier" -"spawnflags" "32" -} -{ -"model" "*6" -"dmg" "25" -"classname" "trigger_hurt" -} -{ -"model" "*7" -"classname" "trigger_hurt" -"dmg" "25" -} -{ -"model" "*8" -"dmg" "25" -"classname" "trigger_hurt" -} -{ -"spawnflags" "3" -"angle" "315" -"classname" "monster_flyer" -"origin" "-296 1248 208" -"targetname" "t75" -} -{ -"spawnflags" "3" -"classname" "monster_flyer" -"origin" "-344 1200 280" -"targetname" "t75" -} -{ -"classname" "monster_flyer" -"spawnflags" "3" -"origin" "-224 1248 280" -"targetname" "t75" -"angle" "315" -} -{ -"classname" "monster_mutant" -"angle" "270" -"targetname" "t97" -"origin" "1088 832 24" -} -{ -"light" "120" -"classname" "light" -"origin" "1272 1048 -48" -} -{ -"classname" "light" -"light" "120" -"origin" "1264 944 -48" -} -{ -"origin" "1016 3552 -264" -"classname" "ammo_bullets" -} -{ -"origin" "936 3552 -264" -"classname" "ammo_bullets" -} -{ -"origin" "1080 2312 -144" -"noise" "world/klaxon1.wav" -"targetname" "t94" -"classname" "target_speaker" -} -{ -"origin" "80 1118 -248" -"classname" "item_health_mega" -} -{ -"origin" "120 1100 -264" -"spawnflags" "2" -"angle" "0" -"classname" "misc_deadsoldier" -} -{ -"origin" "108 1154 -264" -"spawnflags" "1" -"angle" "180" -"classname" "misc_deadsoldier" -} -{ -"origin" "144 -128 24" -"classname" "monster_soldier_light" -"angle" "90" -} -{ -"classname" "target_crosslevel_trigger" -"targetname" "t75" -"spawnflags" "4" -"origin" "528 3112 -72" -} -{ -"model" "*9" -"targetname" "message" -"target" "t93" -"classname" "trigger_multiple" -"wait" "30" -"angle" "90" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t92" -} -{ -"origin" "672 2448 -208" -"classname" "item_armor_shard" -"angle" "45" -} -{ -"origin" "640 2400 -208" -"classname" "item_armor_shard" -"angle" "45" -} -{ -"origin" "592 2432 -208" -"classname" "item_armor_shard" -"angle" "45" -} -{ -"origin" "528 2416 -208" -"classname" "item_armor_shard" -"angle" "45" -} -{ -"origin" "704 2416 -208" -"angle" "45" -"classname" "item_armor_shard" -} -{ -"target" "t91" -"targetname" "t90" -"spawnflags" "1" -"classname" "monster_soldier" -"angle" "90" -"origin" "956 3180 -176" -} -{ -"target" "t90" -"targetname" "t89" -"spawnflags" "1" -"classname" "monster_soldier" -"angle" "90" -"origin" "984 3280 -192" -} -{ -"target" "t89" -"targetname" "t88" -"spawnflags" "1" -"origin" "936 3344 -224" -"classname" "monster_soldier" -"angle" "90" -} -{ -"item" "ammo_bullets" -"targetname" "t91" -"spawnflags" "1" -"origin" "796 3196 -124" -"angle" "0" -"classname" "monster_soldier" -} -{ -"model" "*10" -"target" "t88" -"classname" "trigger_once" -} -{ -"model" "*11" -"target" "t87" -"classname" "trigger_once" -} -{ -"origin" "1408 3320 -272" -"targetname" "t86" -"classname" "point_combat" -} -{ -"origin" "1128 3384 -272" -"targetname" "t84" -"classname" "point_combat" -} -{ -"origin" "1440 3384 -272" -"targetname" "t85" -"classname" "point_combat" -} -{ -"origin" "1152 3328 -272" -"targetname" "t83" -"classname" "point_combat" -} -{ -"origin" "1296 3432 -256" -"targetname" "t87" -"target" "t85" -"classname" "monster_soldier" -"angle" "0" -"spawnflags" "1" -} -{ -"origin" "1304 3368 -256" -"targetname" "t87" -"target" "t86" -"angle" "0" -"classname" "monster_soldier" -"spawnflags" "1" -} -{ -"origin" "1224 3368 -256" -"targetname" "t87" -"target" "t83" -"classname" "monster_soldier" -"angle" "180" -"spawnflags" "1" -} -{ -"origin" "1256 3432 -256" -"targetname" "t87" -"target" "t84" -"angle" "0" -"classname" "monster_soldier" -"spawnflags" "1" -} -{ -"origin" "1440 3208 -272" -"classname" "item_health" -} -{ -"origin" "1440 3168 -272" -"classname" "item_health" -} -{ -"origin" "1456 3488 -224" -"classname" "light" -"light" "80" -} -{ -"origin" "1456 3432 -224" -"light" "80" -"classname" "light" -} -{ -"model" "*12" -"target" "t94" -"classname" "trigger_once" -"spawnflags" "4" -"targetname" "t75" -} -{ -"targetname" "t94" -"angle" "270" -"classname" "monster_flyer" -"spawnflags" "2" -"origin" "1304 3168 80" -} -{ -"targetname" "t94" -"angle" "270" -"classname" "monster_flyer" -"spawnflags" "2" -"origin" "1256 3168 80" -} -{ -"targetname" "t94" -"classname" "monster_flyer" -"angle" "270" -"spawnflags" "2" -"origin" "1280 3112 80" -} -{ -"model" "*13" -"classname" "trigger_push" -"angle" "-1" -"speed" "30" -} -{ -"model" "*14" -"target" "t82" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"targetname" "t82" -"origin" "536 288 -96" -"classname" "monster_soldier_light" -"angle" "180" -} -{ -"spawnflags" "1" -"origin" "496 336 -96" -"targetname" "t82" -"classname" "monster_soldier_light" -"angle" "180" -} -{ -"spawnflags" "1" -"origin" "456 288 -96" -"targetname" "t80" -"classname" "monster_soldier_light" -"angle" "0" -} -{ -"spawnflags" "1" -"origin" "608 416 -96" -"targetname" "t82" -"angle" "180" -"classname" "monster_soldier_light" -} -{ -"origin" "152 608 -112" -"delay" ".6" -"target" "t81" -"targetname" "t80" -"classname" "trigger_relay" -} -{ -"origin" "-372 996 -104" -"item" "ammo_bullets" -"targetname" "t79" -"classname" "monster_soldier" -} -{ -"origin" "-440 996 -104" -"item" "ammo_bullets" -"targetname" "t79" -"classname" "monster_soldier" -} -{ -"origin" "-376 1088 -64" -"targetname" "t78" -"delay" ".5" -"classname" "target_explosion" -} -{ -"origin" "-432 1072 -32" -"targetname" "t78" -"delay" ".8" -"classname" "target_explosion" -} -{ -"model" "*15" -"dmg" "1" -"targetname" "t79" -"target" "t78" -"mass" "800" -"classname" "func_explosive" -} -{ -"origin" "-528 1304 -208" -"classname" "ammo_cells" -} -{ -"origin" "-568 1304 -208" -"classname" "ammo_cells" -} -{ -"spawnflags" "2048" -"origin" "-952 2088 -320" -"classname" "item_health_large" -} -{ -"origin" "-936 2008 -408" -"spawnflags" "32" -"angle" "0" -"classname" "misc_deadsoldier" -} -{ -"origin" "-584 1656 -224" -"angle" "90" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"target" "t79" -"origin" "-520 1656 -200" -"angle" "180" -"classname" "monster_mutant" -} -{ -"origin" "-568 1504 -224" -"classname" "misc_explobox" -} -{ -"origin" "-512 1568 -224" -"classname" "misc_explobox" -} -{ -"model" "*16" -"target" "t77" -"classname" "trigger_once" -} -{ -"origin" "1148 2464 -368" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "1196 2464 -336" -"classname" "item_health" -} -{ -"origin" "1196 2424 -336" -"classname" "item_health" -} -{ -"origin" "1088 2432 -344" -"targetname" "t76" -"classname" "monster_mutant" -} -{ -"light" "150" -"classname" "light" -"origin" "632 936 32" -} -{ -"light" "150" -"classname" "light" -"origin" "632 1080 32" -} -{ -"classname" "light" -"light" "150" -"origin" "640 808 72" -} -{ -"light" "100" -"classname" "light" -"origin" "736 320 -96" -} -{ -"classname" "light" -"light" "100" -"origin" "736 320 -32" -} -{ -"origin" "-48 -416 48" -"classname" "light" -"light" "80" -} -{ -"origin" "240 -416 48" -"classname" "light" -"light" "80" -} -{ -"origin" "240 -160 48" -"classname" "light" -"light" "80" -} -{ -"origin" "-48 -152 48" -"light" "80" -"classname" "light" -} -{ -"origin" "520 3064 -72" -"targetname" "t75" -"classname" "target_goal" -} -{ -"message" "Pyramid key acquired.\nReturn to security complex." -"origin" "504 2992 -56" -"targetname" "t75" -"classname" "target_help" -} -{ -"origin" "488 3088 -72" -"killtarget" "message" -"targetname" "t75" -"classname" "trigger_relay" -} -{ -"targetname" "t93" -"origin" "176 -320 136" -"message" "Locate pyramid key\n then return to the\nsecurity complex." -"classname" "target_help" -} -{ -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier_ss" -"origin" "752 2072 -216" -} -{ -"spawnflags" "2048" -"origin" "-1120 2000 -320" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "-1152 1928 -240" -"target" "t73" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1172 1928 -240" -"targetname" "t73" -"sounds" "1" -"angle" "0" -"classname" "target_splash" -} -{ -"classname" "light" -"light" "120" -"origin" "-916 1884 -240" -} -{ -"light" "210" -"classname" "light" -"origin" "296 456 -368" -"_color" "1.000000 0.309804 0.207843" -} -{ -"light" "210" -"classname" "light" -"origin" "24 456 -368" -"_color" "1.000000 0.309804 0.207843" -} -{ -"light" "210" -"classname" "light" -"origin" "24 632 -368" -"_color" "1.000000 0.309804 0.207843" -} -{ -"light" "84" -"classname" "light" -"origin" "32 224 -304" -"_color" "1.000000 0.309804 0.207843" -} -{ -"origin" "800 848 64" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "816 896 64" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "688 920 64" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "688 1000 64" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "800 1000 64" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "688 848 64" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "640 568 24" -"targetname" "t71" -"classname" "monster_soldier_ss" -"angle" "90" -"spawnflags" "1" -} -{ -"origin" "832 600 24" -"targetname" "t71" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_ss" -} -{ -"model" "*17" -"target" "t71" -"classname" "trigger_once" -} -{ -"targetname" "t69" -"origin" "736 224 -124" -"classname" "info_null" -} -{ -"targetname" "t68" -"origin" "544 224 -124" -"classname" "info_null" -} -{ -"targetname" "t67" -"origin" "544 416 -124" -"classname" "info_null" -} -{ -"targetname" "t66" -"origin" "736 416 -124" -"classname" "info_null" -} -{ -"light" "64" -"classname" "light" -"origin" "736 224 240" -"_color" "0.176471 0.588235 1.000000" -} -{ -"origin" "544 224 240" -"classname" "light" -"light" "64" -"_color" "0.176471 0.588235 1.000000" -} -{ -"classname" "light" -"light" "64" -"origin" "544 416 240" -"_color" "0.176471 0.588235 1.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "736 416 240" -"_color" "0.176471 0.588235 1.000000" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "832 416 72" -"classname" "target_speaker" -} -{ -"origin" "1368 2640 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1240 2712 -112" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1248 2528 -112" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1224 2352 -112" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1000 2368 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1040 2568 -112" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1056 2776 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "856 2456 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "888 2840 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "592 2640 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "600 2496 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "600 2784 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "872 2648 -40" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "1368 2440 -40" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"spawnflags" "1" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "480 2936 -64" -} -{ -"origin" "576 3224 -72" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb14.wav" -} -{ -"origin" "648 3296 -72" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb14.wav" -} -{ -"origin" "496 3152 -72" -"noise" "world/amb14.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1280 3224 -184" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "1280 3360 -200" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"model" "*18" -"speed" "150" -"angle" "-1" -"classname" "trigger_push" -} -{ -"origin" "1528 2728 -104" -"item" "ammo_cells" -"classname" "monster_flyer" -"angle" "180" -"spawnflags" "2" -"target" "t20" -} -{ -"origin" "1536 2784 -104" -"classname" "monster_flyer" -"angle" "180" -"spawnflags" "2" -"target" "t20" -} -{ -"origin" "1528 2664 -104" -"spawnflags" "2" -"angle" "180" -"classname" "monster_flyer" -"target" "t20" -} -{ -"origin" "1200 2812 -216" // b#1: 2816 -> 2812 -"classname" "monster_infantry" -"angle" "270" -"spawnflags" "1" -} -{ -"origin" "1360 2812 -216" // b#1: 2816 -> 2812 -"spawnflags" "1" -"angle" "270" -"classname" "monster_infantry" -} -{ -"origin" "952 2040 -216" -"classname" "monster_soldier_ss" -"angle" "180" -"spawnflags" "1" -"targetname" "t98" -} -{ -"origin" "824 2072 -216" -"item" "ammo_bullets" -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier_ss" -"target" "t98" -} -{ -"origin" "1056 1752 -216" -"item" "ammo_shells" -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier" -} -{ -"origin" "1112 1752 -216" -"spawnflags" "1" -"angle" "270" -"classname" "monster_soldier" -} -{ -"origin" "-680 1496 -112" -"light" "64" -"classname" "light" -"_color" "1.000000 0.338583 0.220472" -"style" "10" -} -{ -"origin" "-680 1624 -112" -"light" "64" -"classname" "light" -"_color" "1.000000 0.338583 0.220472" -"style" "10" -} -{ -"spawnflags" "1" -"origin" "-928 1904 -240" -"random" "0.2" -"wait" "2" -"target" "t64" -"classname" "func_timer" -} -{ -"origin" "-928 1872 -240" -"targetname" "t64" -"sounds" "1" -"angle" "90" -"classname" "target_splash" -} -{ -"origin" "-920 1808 -408" -"targetname" "t54" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-920 1808 -360" -"target" "t54" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1144 1816 -408" -"targetname" "t56" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1144 1816 -360" -"target" "t56" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1184 1744 -408" -"targetname" "t55" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1184 1744 -360" -"target" "t55" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1168 1880 -408" -"targetname" "t57" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1168 1880 -360" -"target" "t57" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1112 2208 -408" -"targetname" "t58" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1112 2208 -360" -"target" "t58" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1128 2136 -408" -"targetname" "t59" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1128 2136 -360" -"target" "t59" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1024 2144 -408" -"targetname" "t60" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1024 2144 -360" -"target" "t60" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-920 1992 -408" -"targetname" "t62" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-920 1992 -360" -"target" "t62" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-968 1952 -360" -"target" "t61" -"classname" "func_timer" -"spawnflags" "1" -"wait" "2" -"random" "0.2" -} -{ -"origin" "-968 1952 -408" -"targetname" "t61" -"classname" "target_splash" -"angle" "-1" -"sounds" "5" -} -{ -"origin" "-872 1712 -360" -"target" "t53" -"classname" "func_timer" -"spawnflags" "1" -"wait" "2" -"random" "0.2" -} -{ -"origin" "-872 1712 -408" -"targetname" "t53" -"classname" "target_splash" -"angle" "-1" -"sounds" "5" -} -{ -"origin" "-896 1904 -360" -"target" "t63" -"random" "0.2" -"wait" "2" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-896 1904 -408" -"targetname" "t63" -"sounds" "5" -"angle" "-1" -"classname" "target_splash" -} -{ -"origin" "-1088 1952 -336" -"angle" "90" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "-904 1760 -408" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "-928 1928 -408" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "-912 2032 -408" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "-1056 2192 -408" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "-1152 2176 -408" -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1168 2080 -408" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "-1152 1768 -408" -"noise" "world/lava1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-360 1560 -128" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-360 1752 -128" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-920 1832 -240" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "-912 1888 -240" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1072 1000 -136" -"classname" "light" -"_color" "0.666667 1.000000 0.666667" -"light" "50" -} -{ -"origin" "1104 1000 -136" -"light" "50" -"_color" "0.666667 1.000000 0.666667" -"classname" "light" -} -{ -"origin" "1128 944 -136" -"classname" "light" -"_color" "0.666667 1.000000 0.666667" -"light" "50" -} -{ -"origin" "1128 976 -136" -"light" "50" -"_color" "0.666667 1.000000 0.666667" -"classname" "light" -} -{ -"origin" "1048 944 -136" -"classname" "light" -"_color" "0.666667 1.000000 0.666667" -"light" "50" -} -{ -"origin" "1048 976 -136" -"light" "50" -"_color" "0.666667 1.000000 0.666667" -"classname" "light" -} -{ -"origin" "1104 920 -136" -"classname" "light" -"_color" "0.666667 1.000000 0.666667" -"light" "50" -} -{ -"origin" "1072 920 -136" -"light" "50" -"_color" "0.666667 1.000000 0.666667" -"classname" "light" -} -{ -"origin" "640 536 96" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "832 600 96" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1280 1288 -48" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "896 1288 -48" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1000 1720 -320" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "864 1728 -320" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "768 1816 -320" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "768 1960 -320" -} -{ -"origin" "824 2040 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "944 2056 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1072 2056 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1096 2184 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1120 2344 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1112 2512 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1016 2424 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "928 2344 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "936 2520 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "904 2416 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "768 2416 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "648 2424 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "528 2416 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "528 2544 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1184 1776 -320" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"origin" "528 2688 -320" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "1056 2984 -128" -} -{ -"origin" "544 2856 -128" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1056 3440 -192" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "768 3376 -64" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "472 2984 -112" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "960 3096 -64" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"targetname" "t72" -"origin" "-784 416 356" -"classname" "info_null" -} -{ -"origin" "-736 464 356" -"targetname" "t52" -"classname" "info_null" -} -{ -"origin" "-800 656 356" -"targetname" "t51" -"classname" "info_null" -} -{ -"origin" "-1024 432 356" -"targetname" "t50" -"classname" "info_null" -} -{ -"origin" "-1136 288 356" -"targetname" "t49" -"classname" "info_null" -} -{ -"origin" "-1136 96 356" -"targetname" "t48" -"classname" "info_null" -} -{ -"origin" "-1056 -48 356" -"targetname" "t47" -"classname" "info_null" -} -{ -"origin" "-864 -48 356" -"targetname" "t46" -"classname" "info_null" -} -{ -"origin" "-672 -48 356" -"targetname" "t45" -"classname" "info_null" -} -{ -"origin" "-608 240 356" -"targetname" "t44" -"classname" "info_null" -} -{ -"origin" "-736 240 356" -"targetname" "t42" -"classname" "info_null" -} -{ -"origin" "-784 280 356" -"targetname" "t43" -"classname" "info_null" -} -{ -"origin" "-736 464 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"_color" "0.243137 0.619608 1.000000" -"light" "64" -"classname" "light" -"origin" "-784 416 224" -} -{ -"origin" "-784 280 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-800 656 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-1024 432 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-1136 288 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-1136 96 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-1056 -48 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-864 -48 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-672 -48 224" -"light" "64" -"classname" "light" -"_color" "0.243137 0.619608 1.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-608 240 224" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-736 240 224" -"classname" "light" -"light" "64" -"_color" "0.243137 0.619608 1.000000" -} -{ -"_cone" "15" -"target" "t72" -"origin" "-784 416 232" -"classname" "light" -"light" "400" -"_color" "0.243137 0.619608 1.000000" -} -{ -"origin" "-48 -32 64" -"targetname" "t3" -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -} -{ -"origin" "-48 -288 64" -"targetname" "t2" -"noise" "world/force1.wav" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"origin" "240 -288 64" -"targetname" "t5" -"classname" "target_speaker" -"spawnflags" "2049" -"noise" "world/force1.wav" -} -{ -"origin" "240 -32 64" -"targetname" "t4" -"noise" "world/force1.wav" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "8" -"origin" "104 488 -384" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2" -"origin" "216 592 -384" -} -{ -"origin" "92 352 -376" -"target" "t41" -"targetname" "t40" -"classname" "path_corner" -} -{ -"origin" "96 244 -376" -"target" "t40" -"targetname" "t41" -"classname" "path_corner" -} -{ -"origin" "92 284 -360" -"target" "t40" -"spawnflags" "4" -"classname" "misc_insane" -} -{ -"origin" "160 220 -368" -"classname" "ammo_grenades" -} -{ -"origin" "160 352 -368" -"classname" "ammo_bullets" -} -{ -"origin" "160 316 -368" -"classname" "ammo_bullets" -} -{ -"target" "t80" -"classname" "weapon_hyperblaster" -"origin" "160 544 -120" -} -{ -"model" "*19" -"classname" "trigger_once" -"target" "t18" -} -{ -"spawnflags" "32" -"classname" "misc_deadsoldier" -"angle" "135" -"origin" "258 598 -330" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "32" -"angle" "315" -"origin" "68 580 -264" -} -{ -"model" "*20" -"dmg" "25" -"classname" "trigger_hurt" -} -{ -"model" "*21" -"dmg" "25" -"classname" "trigger_hurt" -} -{ -"model" "*22" -"dmg" "25" -"classname" "trigger_hurt" -} -{ -"model" "*23" -"classname" "trigger_hurt" -"dmg" "25" -} -{ -"_color" "1.000000 0.309804 0.207843" -"origin" "296 632 -368" -"classname" "light" -"light" "210" -} -{ -"origin" "-32 224 -160" -"classname" "light" -"light" "64" -} -{ -"origin" "32 416 16" -"classname" "light" -"light" "64" -} -{ -"origin" "904 952 16" -"classname" "ammo_shells" -} -{ -"origin" "880 984 0" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "880 912 -144" -"classname" "misc_explobox" -} -{ -"origin" "848 944 -144" -"classname" "misc_explobox" -} -{ -"origin" "1312 992 -120" -"classname" "item_adrenaline" -} -{ -"model" "*24" -"health" "25" -"dmg" "100" -"mass" "800" -"classname" "func_explosive" -} -{ -"origin" "-1096 256 112" -"classname" "ammo_shells" -} -{ -"classname" "ammo_shells" -"origin" "-1096 292 112" -} -{ -"origin" "-672 624 8" -"spawnflags" "1" -"classname" "monster_soldier_ss" -"angle" "180" -"targetname" "t31" -} -{ -"classname" "item_armor_shard" -"origin" "-68 360 224" -} -{ -"classname" "item_armor_shard" -"origin" "-104 360 224" -} -{ -"classname" "item_armor_shard" -"origin" "-32 360 224" -} -{ -"classname" "item_health_large" -"origin" "408 -240 16" -} -{ -"classname" "ammo_grenades" -"origin" "864 832 -128" -} -{ -"classname" "ammo_grenades" -"origin" "864 792 -128" -} -{ -"classname" "monster_mutant" -"angle" "0" -"target" "t35" -"origin" "1072 1144 -120" -} -{ -"classname" "path_corner" -"targetname" "t37" -"target" "t38" -"origin" "1040 832 -136" -} -{ -"classname" "path_corner" -"targetname" "t36" -"target" "t37" -"origin" "1240 840 -136" -} -{ -"classname" "path_corner" -"targetname" "t34" -"target" "t35" -"origin" "952 1144 -136" -} -{ -"classname" "path_corner" -"targetname" "t35" -"target" "t36" -"origin" "1208 1104 -136" -} -{ -"classname" "path_corner" -"target" "t34" -"targetname" "t38" -"origin" "928 912 -136" -} -{ -"classname" "item_health_large" -"origin" "744 672 16" -} -{ -"classname" "ammo_shells" -"origin" "376 584 80" -} -{ -"classname" "ammo_shells" -"origin" "336 584 80" -} -{ -"model" "*25" -"classname" "trigger_once" -"target" "t97" -} -{ -"model" "*26" -"classname" "trigger_once" -"target" "t97" -} -{ -"model" "*27" -"classname" "trigger_once" -"target" "t32" -} -{ -"model" "*28" -"classname" "trigger_once" -"target" "t32" -} -{ -"classname" "monster_mutant" -"angle" "270" -"spawnflags" "1" -"targetname" "t32" -"origin" "824 784 32" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-296 902 80" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-296 936 80" -} -{ -"classname" "ammo_cells" -"origin" "-262 918 80" -} -{ -"classname" "item_health" -"origin" "-608 680 0" -} -{ -"classname" "item_health" -"origin" "-656 680 0" -} -{ -"classname" "ammo_bullets" -"origin" "-736 544 224" -} -{ -"classname" "ammo_bullets" -"origin" "-736 584 224" -} -{ -"classname" "ammo_bullets" -"origin" "-736 624 224" -} -{ -"classname" "ammo_bullets" -"origin" "-736 504 224" -} -{ -"model" "*29" -"classname" "trigger_once" -"target" "t31" -} -{ -"angle" "180" -"classname" "monster_soldier_ss" -"spawnflags" "1" -"targetname" "t31" -"origin" "-616 496 8" -} -{ -"classname" "monster_soldier_ss" -"angle" "180" -"spawnflags" "1" -"targetname" "t31" -"origin" "-728 560 8" -} -{ -"model" "*30" -"classname" "trigger_once" -"target" "t30" -} -{ -"classname" "monster_soldier_ss" -"origin" "-541 -44 232" -"targetname" "t30" -"angle" "90" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_ss" -"origin" "-597 168 232" -"targetname" "t30" -"angle" "270" -"spawnflags" "1" -} -{ -"classname" "monster_infantry" -"angle" "0" -"spawnflags" "1" -"targetname" "t29" -"origin" "-472 32 232" -} -{ -"classname" "ammo_bullets" -"origin" "72 -24 16" -} -{ -"origin" "-1008 240 96" -"classname" "misc_explobox" -} -{ -"origin" "-1008 312 96" -"classname" "misc_explobox" -} -{ -"origin" "-608 -24 224" -"classname" "ammo_bullets" -} -{ -"origin" "-576 -24 224" -"classname" "ammo_bullets" -} -{ -"origin" "2 -480 224" -"classname" "item_health_small" -} -{ -"origin" "-32 -480 224" -"classname" "item_health_small" -} -{ -"origin" "36 -480 224" -"classname" "item_health_small" -} -{ -"origin" "224 96 16" -"classname" "ammo_grenades" -} -{ -"origin" "224 56 16" -"classname" "ammo_grenades" -} -{ -"origin" "224 344 228" -"classname" "item_health" -} -{ -"origin" "96 -48 0" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"origin" "-8 -160 0" -"spawnflags" "4" -"classname" "misc_deadsoldier" -} -{ -"origin" "-200 -288 24" -"spawnflags" "4" -"classname" "misc_insane" -"item" "ammo_shells" -} -{ -"angle" "90" -"origin" "-120 -288 0" -"classname" "misc_deadsoldier" -} -{ -"origin" "344 -288 24" -"spawnflags" "32" -"angle" "180" -"classname" "misc_insane" -"item" "ammo_cells" -} -{ -"origin" "-216 -88 8" -"target" "t28" -"targetname" "t27" -"classname" "path_corner" -} -{ -"origin" "-224 16 8" -"target" "t27" -"targetname" "t26" -"classname" "path_corner" -} -{ -"origin" "-128 -32 8" -"targetname" "t28" -"target" "t26" -"classname" "path_corner" -} -{ -"origin" "-176 -32 24" -"target" "t28" -"classname" "misc_insane" -} -{ -"origin" "-484 1028 80" -"classname" "item_health_small" -} -{ -"origin" "-484 988 80" -"classname" "item_health_small" -} -{ -"origin" "-484 1064 80" -"classname" "item_health_small" -} -{ -"origin" "-404 752 0" -"classname" "item_health_small" -} -{ -"origin" "-404 720 0" -"classname" "item_health_small" -} -{ -"origin" "224 616 64" -"classname" "misc_deadsoldier" -"spawnflags" "1" -} -{ -"origin" "232 744 64" -"angle" "180" -"spawnflags" "17" -"classname" "misc_deadsoldier" -} -{ -"origin" "-440 1192 64" -"spawnflags" "2" -"classname" "misc_deadsoldier" -} -{ -"origin" "-408 1160 80" -"target" "t24" -"classname" "item_armor_combat" -} -{ -"model" "*31" -"target" "t17" -"classname" "trigger_multiple" -} -{ -"origin" "-160 728 80" -"classname" "item_health" -} -{ -"origin" "-112 728 80" -"classname" "item_health" -} -{ -"origin" "-416 992 0" -"classname" "item_adrenaline" -} -{ -"model" "*32" -"classname" "trigger_push" -"angle" "-1" -"speed" "35" -} -{ -"model" "*33" -"speed" "35" -"angle" "-1" -"classname" "trigger_push" -} -{ -"targetname" "t25" -"origin" "464 1456 112" -"spawnflags" "2" -"classname" "monster_flyer" -"angle" "180" -} -{ -"targetname" "t25" -"origin" "352 1544 104" -"spawnflags" "2" -"classname" "monster_flyer" -} -{ -"targetname" "t25" -"origin" "216 1544 104" -"spawnflags" "2" -"classname" "monster_flyer" -} -{ -"targetname" "t25" -"origin" "464 1328 112" -"spawnflags" "2" -"angle" "180" -"classname" "monster_flyer" -} -{ -"model" "*34" -"_minlight" "0.5" -"classname" "func_door" -"angle" "-2" -"target" "t92" -} -{ -"model" "*35" -"angle" "270" -"classname" "trigger_monsterjump" -} -{ -"target" "t25" -"targetname" "t24" -"origin" "-416 1428 164" -"angle" "270" -"classname" "monster_mutant" -"spawnflags" "2" -} -{ -"origin" "-408 1436 220" -"light" "80" -"classname" "light" -} -{ -"model" "*36" -"targetname" "t24" -"mass" "800" -"dmg" "1" -"classname" "func_explosive" -} -{ -"model" "*37" -"target" "t17" -"angle" "90" -"classname" "func_button" -} -{ -"model" "*38" -"classname" "func_wall" -"spawnflags" "2054" -"targetname" "t20" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t19" -"origin" "796 2920 -148" -} -{ -"classname" "monster_tank" -"angle" "315" -"target" "t19" -"origin" "748 2976 -132" -} -{ -"spawnflags" "2048" -"target" "t75" -"classname" "key_pyramid" -"origin" "480 3040 -132" -} -{ -"origin" "336 624 16" -"classname" "light" -"light" "64" -} -{ -"model" "*39" -"targetname" "t81" -"classname" "func_explosive" -"dmg" "1" -} -{ -"model" "*40" -"targetname" "t18" -"dmg" "1" -"classname" "func_explosive" -} -{ -"model" "*41" -"origin" "28 564 -144" -"wait" "-1" -"classname" "func_door_rotating" -"spawnflags" "128" -"distance" "90" -"speed" "300" -"targetname" "t100" -} -{ -"model" "*42" -"origin" "292 524 -144" -"wait" "-1" -"targetname" "t18" -"speed" "300" -"distance" "-90" -"spawnflags" "128" -"classname" "func_door_rotating" -} -{ -"model" "*43" -"origin" "-450 772 -24" -"speed" "50" -"classname" "func_door_rotating" -"distance" "-26" -"spawnflags" "64" -"_minlight" ".1" -"targetname" "t17" -} -{ -"classname" "path_corner" -"targetname" "t12" -"target" "t13" -"origin" "-1064 312 104" -} -{ -"classname" "path_corner" -"target" "t12" -"targetname" "t13" -"origin" "-1064 96 104" -} -{ -"classname" "point_combat" -"targetname" "t11" -"spawnflags" "1" -"origin" "-1040 56 104" -} -{ -"classname" "monster_infantry" -"target" "t12" -"spawnflags" "1" -"origin" "-1064 352 120" -"item" "ammo_bullets" -} -{ -"classname" "monster_infantry" -"target" "t11" -"spawnflags" "1" -"origin" "-1088 8 120" -} -{ -"classname" "monster_infantry" -"angle" "90" -"targetname" "t10" -"origin" "-352 168 232" -"spawnflags" "1" -"target" "t29" -"item" "ammo_bullets" -} -{ -"model" "*44" -"classname" "trigger_once" -"target" "t10" -} -{ -"classname" "monster_gunner" -"angle" "90" -"origin" "16 232 240" -"targetname" "t39" -} -{ -"classname" "item_health" -"origin" "264 344 228" -} -{ -"classname" "monster_soldier_light" -"angle" "90" -"spawnflags" "0" -"origin" "96 -96 32" -"target" "t39" -} -{ -"model" "*45" -"targetname" "t3" -"classname" "func_wall" -"spawnflags" "2055" -} -{ -"model" "*46" -"targetname" "t4" -"classname" "func_wall" -"spawnflags" "2055" -} -{ -"model" "*47" -"targetname" "t5" -"classname" "func_wall" -"spawnflags" "2055" -} -{ -"model" "*48" -"targetname" "t2" -"spawnflags" "2055" -"classname" "func_wall" -} -{ -"model" "*49" -"classname" "func_explosive" -"health" "25" -"dmg" "1" -} -{ -"map" "jail3$jail5" -"classname" "target_changelevel" -"targetname" "t1" -"origin" "120 -632 72" -} -{ -"model" "*50" -"angle" "270" -"classname" "trigger_multiple" -"target" "t1" -} -{ -"origin" "1016 1584 -192" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "1176 1584 -192" -} -{ -"classname" "light" -"light" "100" -"origin" "1040 1560 -8" -} -{ -"classname" "light" -"light" "150" -"origin" "1056 1736 -192" -} -{ -"origin" "560 3236 -72" -"classname" "light" -"light" "80" -} -{ -"origin" "488 3164 -72" -"classname" "light" -"light" "80" -} -{ -"origin" "636 3308 -72" -"light" "80" -"classname" "light" -} -{ -"origin" "1168 3400 -104" -"light" "120" -"classname" "light" -} -{ -"model" "*51" -"angle" "-2" -"classname" "func_door" -"target" "t33" -} -{ -"light" "120" -"classname" "light" -"origin" "1056 2992 -132" -} -{ -"light" "130" -"classname" "light" -"origin" "-420 1288 -72" -} -{ -"light" "64" -"classname" "light" -"origin" "-356 1232 -112" -} -{ -"origin" "484 2928 -68" -"classname" "light" -"light" "120" -} -{ -"origin" "964 3088 -68" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "1060 3432 -196" -} -{ -"origin" "1012 3224 -184" -"classname" "light" -"light" "64" -} -{ -"origin" "1012 3176 -184" -"light" "64" -"classname" "light" -} -{ -"origin" "1128 3360 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "1136 3224 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "1424 3216 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "1280 3144 -216" -"classname" "light" -"light" "80" -} -{ -"origin" "1280 3232 -184" -"classname" "light" -"light" "80" -} -{ -"origin" "1120 2336 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "1120 2528 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "928 2528 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "768 2416 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "528 2416 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "528 2544 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "528 2688 -280" -"classname" "light" -"light" "64" -} -{ -"origin" "928 2336 -280" -"light" "64" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "1236 1468 -40" -} -{ -"light" "150" -"classname" "light" -"origin" "1084 1452 -40" -} -{ -"origin" "948 1468 -40" -"classname" "light" -"light" "150" -} -{ -"origin" "1084 1308 -40" -"classname" "light" -"light" "150" -} -{ -"origin" "64 760 -72" -"classname" "light" -"light" "150" -} -{ -"light" "64" -"classname" "light" -"origin" "-16 796 -112" -} -{ -"origin" "144 796 -112" -"classname" "light" -"light" "64" -} -{ -"origin" "-420 1432 -72" -"classname" "light" -"light" "130" -} -{ -"light" "64" -"classname" "light" -"origin" "-356 1072 -112" -} -{ -"light" "150" -"classname" "light" -"origin" "64 864 -72" -} -{ -"light" "64" -"classname" "light" -"origin" "-16 464 16" -} -{ -"light" "64" -"classname" "light" -"origin" "336 464 16" -} -{ -"light" "64" -"classname" "light" -"origin" "288 672 16" -} -{ -"light" "64" -"classname" "light" -"origin" "288 416 16" -} -{ -"_color" "1.000000 0.309804 0.207843" -"light" "84" -"classname" "light" -"origin" "160 224 -304" -} -{ -"light" "64" -"classname" "light" -"origin" "32 672 16" -} -{ -"target" "t68" -"_color" "0.176471 0.588235 1.000000" -"light" "450" -"classname" "light" -"origin" "544 224 232" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "1032 672 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "1144 512 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "1032 512 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "1032 376 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "1144 264 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "952 376 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "952 264 8" -"classname" "light" -"light" "80" -} -{ -"_color" "0.176471 0.588235 1.000000" -"origin" "1144 672 8" -"light" "80" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "896 1296 -52" -} -{ -"target" "t66" -"_color" "0.176471 0.588235 1.000000" -"origin" "736 416 232" -"classname" "light" -"light" "450" -} -{ -"target" "t69" -"_color" "0.176471 0.588235 1.000000" -"origin" "736 224 232" -"classname" "light" -"light" "450" -} -{ -"origin" "-16 624 16" -"classname" "light" -"light" "64" -} -{ -"target" "t67" -"_color" "0.176471 0.588235 1.000000" -"origin" "544 416 232" -"light" "450" -"classname" "light" -} -{ -"model" "*52" -"spawnflags" "1" -"classname" "func_plat" -} -{ -"origin" "544 2864 -132" -"classname" "light" -"light" "120" -} -{ -"classname" "light" -"light" "80" -"origin" "704 848 188" -} -{ -"light" "80" -"classname" "light" -"origin" "768 848 188" -} -{ -"origin" "832 424 76" -"classname" "light" -"light" "64" -} -{ -"origin" "1088 2096 -160" -"light" "150" -"classname" "light" -} -{ -"origin" "896 2056 -192" -"light" "150" -"classname" "light" -} -{ -"origin" "784 1936 -192" -"light" "150" -"classname" "light" -} -{ -"origin" "792 1760 -192" -"light" "150" -"classname" "light" -} -{ -"origin" "792 1760 -336" -"classname" "light" -"light" "150" -} -{ -"origin" "784 1936 -336" -"classname" "light" -"light" "150" -} -{ -"origin" "896 2056 -336" -"classname" "light" -"light" "150" -} -{ -"origin" "1088 2096 -304" -"classname" "light" -"light" "150" -} -{ -"origin" "1152 1576 -8" -"light" "100" -"classname" "light" -} -{ -"_color" "1.000000 0.694118 0.290196" -"origin" "352 736 228" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.694118 0.290196" -"origin" "352 608 228" -"classname" "light" -"light" "80" -} -{ -"origin" "1280 1296 -52" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "772 3376 -68" -} -{ -"light" "150" -"origin" "1200 1728 -176" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "1088 832 80" -} -{ -"light" "150" -"classname" "light" -"origin" "992 960 200" -} -{ -"light" "64" -"classname" "light" -"origin" "784 960 12" -} -{ -"light" "64" -"classname" "light" -"origin" "736 1200 96" -} -{ -"light" "64" -"classname" "light" -"origin" "672 1200 96" -} -{ -"light" "64" -"classname" "light" -"origin" "608 1200 96" -} -{ -"classname" "light" -"light" "64" -"origin" "784 896 12" -} -{ -"light" "150" -"classname" "light" -"origin" "1280 2904 -144" -} -{ -"light" "120" -"classname" "light" -"origin" "832 592 100" -} -{ -"origin" "976 960 -52" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "864 960 -52" -} -{ -"light" "64" -"classname" "light" -"origin" "1088 832 -52" -} -{ -"_color" "1.000000 0.696356 0.291498" -"light" "80" -"classname" "light" -"origin" "1344 2944 -84" -} -{ -"classname" "light" -"light" "120" -"origin" "640 528 100" -} -{ -"origin" "1184 960 200" -"classname" "light" -"light" "150" -} -{ -"origin" "960 960 80" -"classname" "light" -"light" "150" -} -{ -"origin" "800 1080 204" -"classname" "light" -"light" "80" -} -{ -"origin" "768 1004 188" -"classname" "light" -"light" "80" -} -{ -"origin" "1280 3284 -196" -"classname" "light" -"light" "80" -} -{ -"origin" "800 1032 204" -"light" "80" -"classname" "light" -} -{ -"origin" "768 928 188" -"light" "80" -"classname" "light" -} -{ -"origin" "704 928 188" -"classname" "light" -"light" "80" -} -{ -"origin" "704 1004 188" -"classname" "light" -"light" "80" -} -{ -"origin" "1280 3348 -196" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "120" -"origin" "-912 1836 -244" -} -{ -"light" "150" -"classname" "light" -"origin" "-528 1720 -96" -} -{ -"classname" "light" -"light" "150" -"origin" "-528 1520 -96" -} -{ -"origin" "-364 1624 -134" -"light" "120" -"classname" "light" -} -{ -"origin" "-1156 2216 100" -"classname" "light" -"light" "250" -} -{ -"origin" "-1164 2052 100" -"light" "250" -"classname" "light" -} -{ -"origin" "-1176 1928 -240" -"light" "120" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "-448 1624 112" -} -{ -"classname" "light" -"light" "80" -"origin" "-448 1448 112" -} -{ -"origin" "264 -288 112" -"classname" "light" -"light" "80" -} -{ -"origin" "-104 1104 -72" -"classname" "light" -"light" "150" -} -{ -"origin" "8 992 -72" -"classname" "light" -"light" "150" -} -{ -"origin" "-248 1144 -72" -"light" "150" -"classname" "light" -} -{ -"origin" "160 1312 -8" -"classname" "light" -"light" "200" -} -{ -"origin" "192 1112 -8" -"classname" "light" -"light" "200" -} -{ -"origin" "8 1344 -8" -"light" "200" -"classname" "light" -} -{ -"_color" "1.000000 0.750000 0.289683" -"light" "80" -"classname" "light" -"origin" "-640 512 164" -} -{ -"_color" "1.000000 0.750000 0.289683" -"origin" "-640 640 164" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.696356 0.291498" -"light" "80" -"classname" "light" -"origin" "1216 2944 -84" -} -{ -"light" "80" -"classname" "light" -"origin" "-264 288 312" -} -{ -"light" "64" -"classname" "light" -"origin" "-992 -88 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-760 -96 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-616 -104 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-544 -104 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-480 -40 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-488 104 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-528 272 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-696 376 408" -} -{ -"light" "64" -"classname" "light" -"origin" "-768 232 408" -} -{ -"origin" "-904 40 168" -"light" "120" -"classname" "light" -} -{ -"origin" "-536 112 240" -"classname" "light" -"light" "64" -} -{ -"_cone" "15" -"target" "t44" -"_color" "0.243137 0.619608 1.000000" -"origin" "-608 240 232" -"classname" "light" -"light" "400" -} -{ -"light" "48" -"classname" "light" -"origin" "-916 508 40" -} -{ -"classname" "light" -"light" "48" -"origin" "-864 500 40" -} -{ -"classname" "light" -"light" "48" -"origin" "-868 456 56" -} -{ -"light" "48" -"classname" "light" -"origin" "-928 456 56" -} -{ -"classname" "light" -"light" "48" -"origin" "-868 424 72" -} -{ -"light" "48" -"classname" "light" -"origin" "-928 424 72" -} -{ -"classname" "light" -"light" "48" -"origin" "-868 392 88" -} -{ -"light" "48" -"classname" "light" -"origin" "-928 392 88" -} -{ -"classname" "light" -"light" "48" -"origin" "-860 228 104" -} -{ -"light" "48" -"classname" "light" -"origin" "-920 212 104" -} -{ -"classname" "light" -"light" "48" -"origin" "-848 192 120" -} -{ -"light" "48" -"classname" "light" -"origin" "-888 156 120" -} -{ -"classname" "light" -"light" "48" -"origin" "-816 164 136" -} -{ -"light" "48" -"classname" "light" -"origin" "-832 100 136" -} -{ -"light" "48" -"classname" "light" -"origin" "-776 96 152" -} -{ -"classname" "light" -"light" "48" -"origin" "-776 160 152" -} -{ -"light" "48" -"classname" "light" -"origin" "-744 96 168" -} -{ -"classname" "light" -"light" "48" -"origin" "-744 160 168" -} -{ -"light" "48" -"classname" "light" -"origin" "-712 96 184" -} -{ -"classname" "light" -"light" "48" -"origin" "-712 160 184" -} -{ -"light" "48" -"classname" "light" -"origin" "-828 524 24" -} -{ -"classname" "light" -"light" "48" -"origin" "-868 564 24" -} -{ -"_cone" "15" -"target" "t46" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-864 -48 232" -} -{ -"_cone" "15" -"target" "t47" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-1056 -48 232" -} -{ -"_cone" "15" -"target" "t48" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-1136 96 232" -} -{ -"_cone" "15" -"target" "t49" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-1136 288 232" -} -{ -"_cone" "15" -"target" "t50" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-1024 432 232" -} -{ -"_cone" "15" -"target" "t51" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-800 656 232" -} -{ -"_cone" "15" -"target" "t52" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-736 464 232" -} -{ -"_cone" "15" -"target" "t43" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-784 280 232" -} -{ -"_cone" "15" -"target" "t42" -"_color" "0.243137 0.619608 1.000000" -"light" "400" -"classname" "light" -"origin" "-736 240 232" -} -{ -"light" "64" -"classname" "light" -"origin" "-536 -48 240" -} -{ -"_cone" "15" -"target" "t45" -"_color" "0.243137 0.619608 1.000000" -"classname" "light" -"light" "400" -"origin" "-672 -48 232" -} -{ -"origin" "-352 32 312" -"classname" "light" -"light" "80" -} -{ -"origin" "-352 160 312" -"classname" "light" -"light" "80" -} -{ -"origin" "-352 288 312" -"classname" "light" -"light" "80" -} -{ -"origin" "864 832 -52" -"classname" "light" -"light" "80" -} -{ -"origin" "-672 32 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-800 32 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-928 32 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-928 160 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-992 288 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-1120 416 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-984 416 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-736 544 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-864 480 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-864 352 352" -"classname" "light" -"light" "48" -} -{ -"origin" "-672 160 352" -"light" "48" -"classname" "light" -} -{ -"classname" "light" -"light" "64" -"origin" "-800 480 408" -} -{ -"classname" "light" -"light" "64" -"origin" "-856 624 408" -} -{ -"classname" "light" -"light" "64" -"origin" "-944 544 408" -} -{ -"classname" "light" -"light" "64" -"origin" "-928 440 408" -} -{ -"classname" "light" -"light" "64" -"origin" "-1184 360 408" -} -{ -"classname" "light" -"light" "64" -"origin" "-1176 192 408" -} -{ -"classname" "light" -"light" "64" -"origin" "-1064 224 408" -} -{ -"origin" "-1064 352 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-832 128 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-936 352 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-864 288 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-768 320 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-1160 -88 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-688 232 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-576 64 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-1168 32 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-1056 32 408" -"classname" "light" -"light" "64" -} -{ -"origin" "-992 96 408" -"classname" "light" -"light" "64" -} -{ -"light" "120" -"classname" "light" -"origin" "-1040 296 168" -} -{ -"light" "150" -"classname" "light" -"origin" "-904 272 200" -} -{ -"light" "150" -"classname" "light" -"origin" "-888 480 168" -} -{ -"light" "150" -"classname" "light" -"origin" "-808 560 168" -} -{ -"classname" "light" -"light" "120" -"origin" "-1048 136 168" -} -{ -"style" "10" -"_color" "1.000000 0.338583 0.220472" -"classname" "light" -"light" "64" -"origin" "-824 1496 -112" -} -{ -"light" "48" -"classname" "light" -"origin" "160 -96 320" -} -{ -"light" "48" -"classname" "light" -"origin" "224 -224 320" -} -{ -"light" "48" -"classname" "light" -"origin" "32 -224 320" -} -{ -"light" "48" -"classname" "light" -"origin" "32 -96 320" -} -{ -"light" "48" -"classname" "light" -"origin" "96 32 320" -} -{ -"classname" "light" -"light" "48" -"origin" "224 -416 248" -} -{ -"light" "80" -"classname" "light" -"origin" "-72 -288 112" -} -{ -"light" "80" -"classname" "light" -"origin" "264 -32 112" -} -{ -"classname" "light" -"light" "80" -"origin" "-72 -32 112" -} -{ -"classname" "light" -"light" "64" -"origin" "96 288 368" -} -{ -"classname" "light" -"light" "64" -"origin" "-32 224 368" -} -{ -"classname" "light" -"light" "64" -"origin" "-32 24 368" -} -{ -"classname" "light" -"light" "64" -"origin" "-32 -160 368" -} -{ -"classname" "light" -"light" "64" -"origin" "-32 -288 368" -} -{ -"classname" "light" -"light" "64" -"origin" "-32 -416 368" -} -{ -"classname" "light" -"light" "64" -"origin" "96 -352 368" -} -{ -"classname" "light" -"light" "64" -"origin" "160 -288 368" -} -{ -"classname" "light" -"light" "64" -"origin" "224 -152 368" -} -{ -"classname" "light" -"light" "64" -"origin" "104 -160 368" -} -{ -"light" "64" -"classname" "light" -"origin" "224 224 368" -} -{ -"light" "64" -"classname" "light" -"origin" "160 32 368" -} -{ -"classname" "light" -"light" "64" -"origin" "96 -32 368" -} -{ -"light" "200" -"classname" "light" -"origin" "96 -136 112" -} -{ -"light" "200" -"classname" "light" -"origin" "96 16 112" -} -{ -"classname" "light" -"light" "200" -"origin" "96 -368 112" -} -{ -"light" "64" -"classname" "light" -"origin" "96 160 148" -} -{ -"classname" "light" -"light" "64" -"origin" "96 160 72" -} -{ -"classname" "light" -"light" "64" -"origin" "96 160 236" -} -{ -"model" "*53" -"classname" "func_plat" -"spawnflags" "1" -} -{ -"targetname" "jail3" -"classname" "info_player_start" -"angle" "90" -"origin" "96 -504 24" -} -{ -"model" "*54" -"target" "t3" -"sounds" "3" -"lip" "-8" -"angle" "180" -"classname" "func_button" -} -{ -"model" "*55" -"target" "t2" -"classname" "func_button" -"angle" "180" -"lip" "-8" -"sounds" "3" -} -{ -"model" "*56" -"target" "t5" -"sounds" "3" -"lip" "-8" -"angle" "0" -"classname" "func_button" -} -{ -"light" "80" -"classname" "light" -"origin" "-448 32 312" -} -{ -"light" "80" -"classname" "light" -"origin" "-176 288 312" -} -{ -"model" "*57" -"target" "t4" -"classname" "func_button" -"angle" "0" -"lip" "-8" -"sounds" "3" -} -{ -"model" "*58" -"sounds" "4" -"classname" "func_door" -"angle" "-2" -"_minlight" ".3" -} -{ -"origin" "160 -628 8" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "160 -508 8" -} -{ -"origin" "32 -508 8" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "32 -628 8" -} -{ -"origin" "96 -564 128" -"classname" "light" -"light" "150" -} diff --git a/stuff/mapfixes/baseq2/lab@c170.ent b/stuff/mapfixes/baseq2/lab@c170.ent deleted file mode 100644 index 450d241f1..000000000 --- a/stuff/mapfixes/baseq2/lab@c170.ent +++ /dev/null @@ -1,9471 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed inaccessible monster_medic on easy (b#1) -// -// He spawns on all difficulties but the trigger_once that releases him is -// medium+. Changed his spawnflags from 0 to 256 (not-easy). -// -// 2. Fixed 2x inaccessible monster_parasite on easy/medium (b#2) -// -// These guys spawn on all difficulties but the trigger_once that releases -// them only spawns on hard+. -// Changed their spawnflags to 768 (not-easy + not-medium). -// -// 3. Added missing targetnames to info_player_coop (b#3) -// -// 4. Activated 4x target_speaker (b#4) -// -// These are ambient sounds so should be spawnflags 1. -// -// 5. Fixed insane marine screams in DM (b#5) -// -// In DM, a numbr of func_timer and target_speaker play -// random insane marine screams. I fixed some broken -// targeting and added 1792 spawnflags to the DM-only -// speaker entities. -// -// 6. Removed thud sound when triggered monsters are activated (b#6) -// -// 7. Removed unused entities + cleanup (b#7) -// -// 8. Fixed glitchy medic (b#8) -// -// This medic has a combat target but is not -// set to ambush. The AI was not designed for -// combat and sound targets co-operation so I -// set him to ambush mode and gave him -// a targetname so he is angered by the trigger -// -// 9. Fixed no-sound console button at the start -// -// 10. Removed leftover forcefield disable button from deathmatch mode -{ -"message" "Research Lab" -"classname" "worldspawn" -"sounds" "6" -"angle" "90" -"nextmap" "command" -} -{ -"classname" "point_combat" -"targetname" "t383" -"origin" "-456 -216 0" -} -{ -"classname" "point_combat" -"targetname" "t382" -"target" "t383" -"origin" "-424 -216 0" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1624 636 8" -} -{ -"classname" "item_health" -"spawnflags" "2048" -"origin" "-1660 636 8" -} -{ -"model" "*1" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"light" "100" -"classname" "light" -"origin" "-936 832 -400" -} -{ -"classname" "light" -"light" "100" -"origin" "-936 736 -400" -} -{ -"origin" "-2096 -128 -400" -"light" "100" -"classname" "light" -} -{ -"origin" "-2000 -128 -400" -"classname" "light" -"light" "100" -} -{ -"origin" "-936 832 48" -"classname" "light" -"light" "100" -} -{ -"origin" "-936 736 48" -"light" "100" -"classname" "light" -} -{ -"origin" "-2000 -128 48" -"classname" "light" -"light" "100" -} -{ -"origin" "-2096 -128 48" -"light" "100" -"classname" "light" -} -{ -"origin" "-1644 1632 -412" -"target" "makeitstop2" -"targetname" "killmenow" -"delay" "2" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"model" "*2" -"targetname" "makeitstop" -"spawnflags" "3840" // b#7: 4 -> 3840 -"classname" "trigger_once" -} -{ -"model" "*3" -"spawnflags" "1" -"mass" "100" -"targetname" "makeitstop2" -"classname" "func_explosive" -} -{ -"origin" "-1656 1608 -412" -"target" "makeitstop" -"delay" "1" -"targetname" "killmenow" -"classname" "trigger_relay" -"spawnflags" "3840" // b#7: now unnecessary trigger -} -{ -"origin" "-1676 1632 -412" -"killtarget" "dead" -"targetname" "killmenow" -"classname" "trigger_relay" -"spawnflags" "3840" // b#7: added this -} -{ -"model" "*4" -"targetname" "dead" -"classname" "func_wall" -} -{ -"model" "*5" -"message" "A.H.D.S.S.I.B.H.\nbjjc" -"classname" "trigger_once" -} -{ -"targetname" "t190" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-320 1216 72" -} -{ -"targetname" "t190" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-320 976 72" -} -{ -"targetname" "t190" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-368 776 72" -} -{ -"targetname" "t190" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-640 760 72" -} -{ -"targetname" "t190" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-640 464 72" -} -{ -"targetname" "t190" -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-640 256 72" -} -{ -"classname" "point_combat" -"targetname" "t379" -"origin" "-2848 888 -424" -} -{ -"model" "*6" -"target" "t339" -"pathtarget" "e1" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"model" "*7" -"target" "t341" -"pathtarget" "e4" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"origin" "-1604 1120 -416" -"target" "t378" -"targetname" "t343" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"model" "*8" -"targetname" "t378" -"spawnflags" "2051" -"classname" "func_wall" -} -{ -"model" "*9" -"_minlight" ".2" -"wait" "-1" -"targetname" "t375" -"lip" "-80" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*10" -"targetname" "t296" -"wait" "-1" -"_minlight" ".2" -"speed" "120" -"lip" "-126" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-1528 1632 -400" -"spawnflags" "2048" -"targetname" "t32" -"classname" "target_goal" -} -{ -"origin" "-1776 248 8" -"targetname" "t259" -"classname" "target_goal" -} -{ -"model" "*11" -"classname" "func_button" -"spawnflags" "2048" // b#10: this was missing -"wait" "-1" -"angle" "90" -"target" "t229" -"_minlight" ".3" -} -{ -"model" "*12" -"classname" "func_button" -"angle" "90" -"_minlight" ".3" -"target" "t228" -"wait" "-1" -"spawnflags" "2048" -} -{ -"origin" "-1440 -608 48" -"targetname" "t373" -"noise" "world/brkglas.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#7: added this -} -{ -"model" "*13" -"target" "t373" -"targetname" "t328" -"mass" "150" -"classname" "func_explosive" -} -{ -"classname" "info_player_coop" -"targetname" "lstart" // b#3: added this -"angle" "90" -"origin" "92 436 16" -} -{ -"classname" "info_player_coop" -"targetname" "lstart" // b#3: added this -"angle" "90" -"origin" "36 436 16" -} -{ -"origin" "64 368 16" -"angle" "90" -"classname" "info_player_coop" -"targetname" "lstart" // b#3: added this -} -{ -"origin" "-2092 144 8" -"spawnflags" "1536" -"classname" "ammo_slugs" -} -{ -"origin" "-824 1284 -472" -"spawnflags" "2048" -"classname" "ammo_shells" -} -{ -"model" "*14" -"classname" "trigger_counter" -"count" "20" -"spawnflags" "2049" // b#7: 1 -> 2049 -"targetname" "marduk" -"target" "killmenow" -"killtarget" "dead" // b#7: added this -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t371" -"target" "t372" -"origin" "-140 464 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t370" -"target" "t371" -"origin" "-140 636 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t369" -"target" "t370" -"origin" "-112 632 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t368" -"target" "t369" -"origin" "-112 432 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t367" -"target" "t368" -"origin" "-272 432 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t366" -"target" "t367" -"origin" "-324 376 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t365" -"target" "t366" -"origin" "-324 508 8" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t372" -"target" "t365" -"origin" "-276 464 8" -} -{ -"classname" "misc_insane" -"spawnflags" "4" -"target" "t365" -"origin" "-308 520 24" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "4" -"angle" "135" -"origin" "-428 492 16" -} -{ -"classname" "misc_insane" -"angle" "360" -"spawnflags" "48" -"origin" "-412 424 40" -} -{ -"_color" "1.000000 0.027451 0.027451" -"light" "96" -"classname" "light" -"origin" "-416 488 120" -} -{ -"classname" "light" -"light" "96" -"_color" "1.000000 0.027451 0.027451" -"origin" "-416 408 120" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-466 1784 -456" -} -{ -"classname" "item_health_large" -"spawnflags" "2048" -"origin" "-430 1784 -456" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-732 1768 -456" -} -{ -"classname" "ammo_cells" -"spawnflags" "2048" -"origin" "-732 1732 -456" -} -{ -"light" "140" -"classname" "light" -"origin" "-2792 1164 -384" -} -{ -"origin" "-2792 1224 -384" -"classname" "light" -"light" "140" -} -{ -"origin" "-2792 1292 -384" -"classname" "light" -"light" "140" -} -{ -"light" "140" -"classname" "light" -"origin" "-2792 1292 -332" -} -{ -"light" "140" -"classname" "light" -"origin" "-2792 1224 -332" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-1388 192 8" -} -{ -"classname" "ammo_bullets" -"spawnflags" "2048" -"origin" "-1388 156 8" -} -{ -"classname" "ammo_shells" -"origin" "-800 128 8" -} -{ -"classname" "ammo_grenades" -"origin" "-760 128 8" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "76 -404 48" -} -{ -"classname" "item_health" -"spawnflags" "3072" -"origin" "40 -404 48" -} -{ -"origin" "-1696 1896 -416" -"classname" "light" -"light" "150" -} -{ -"origin" "-1696 1928 -392" -"classname" "light" -"light" "150" -} -{ -"model" "*15" -"classname" "func_wall" -"spawnflags" "2051" -"targetname" "t267" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -"origin" "-536 976 -336" -} -{ -"model" "*16" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*17" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-1548 400 -104" -"classname" "ammo_shells" -"spawnflags" "1792" -} -{ -"origin" "-1548 360 -104" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-1218 -780 24" -"angles" "0 135 0" -"classname" "info_player_intermission" -} -{ -"origin" "-952 1512 -488" -"classname" "ammo_bullets" -"spawnflags" "1536" -} -{ -"origin" "-952 1548 -488" -"spawnflags" "1536" -"classname" "ammo_bullets" -} -{ -"origin" "-732 1772 -456" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "-732 1732 -456" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-1300 1036 -488" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-780 1036 -488" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "-1696 1916 -456" -"classname" "ammo_cells" -"spawnflags" "1792" -} -{ -"origin" "-1440 1908 -456" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-1568 1620 -460" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "-2080 1904 -432" -"classname" "ammo_slugs" -"spawnflags" "1792" -} -{ -"origin" "-2040 1904 -432" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "-3240 1360 -328" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-3240 1276 -328" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-3240 1188 -328" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-3240 1092 -328" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-1816 628 8" -} -{ -"origin" "-1816 592 8" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-2008 484 72" -"spawnflags" "1792" -"classname" "weapon_bfg" -} -{ -"origin" "-2000 524 84" -"target" "t364" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "-1924 516 100" -"target" "t364" -"targetname" "t190" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"model" "*18" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-872 784 16" -"target" "t363" -"spawnflags" "1792" -"angle" "180" -"classname" "misc_teleporter" -} -{ -"origin" "-872 784 -444" -"targetname" "t363" -"spawnflags" "1792" -"angle" "360" -"classname" "misc_teleporter_dest" -} -{ -"origin" "-1612 792 16" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1648 792 16" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1716 956 -456" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-1716 920 -456" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "-2312 716 -440" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-2312 612 -440" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-3152 1328 -416" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "-3152 1288 -416" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-3044 1212 -420" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"origin" "-2792 1164 -416" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-2828 1164 -416" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-2988 852 -416" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-2988 892 -416" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "-2700 912 -416" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "-2740 912 -416" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-2084 260 8" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-1496 336 -96" -"team" "doh1" -"spawnflags" "1792" -"classname" "item_health_mega" -} -{ -"origin" "-1496 336 -96" -"team" "doh1" -"spawnflags" "1792" -"classname" "weapon_railgun" -} -{ -"origin" "-1214 360 20" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-1090 360 20" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-1344 -428 40" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "-1000 -492 8" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-1000 -536 8" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-1000 -448 8" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "-384 -480 40" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-384 -544 48" -"classname" "item_health" -} -{ -"origin" "0 -480 40" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"origin" "64 -88 40" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "24 -88 40" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-668 44 8" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-612 44 8" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-640 84 8" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"model" "*19" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-320 1372 40" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-356 1372 40" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-284 1372 40" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-128 780 8" -"spawnflags" "1792" -"team" "doh" -"classname" "item_quad" -} -{ -"origin" "-128 780 8" -"team" "doh" -"spawnflags" "1792" -"classname" "weapon_railgun" -} -{ -"origin" "272 840 -24" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "224 828 -24" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"model" "*20" -"_minlight" ".2" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"angle" "90" -"targetname" "t362" -"origin" "64 672 16" -"classname" "misc_teleporter_dest" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"targetname" "t361" -"origin" "-1448 -432 48" -"angle" "315" -"classname" "misc_teleporter_dest" -} -{ -"angle" "90" -"origin" "-448 1760 -448" -"target" "t359" -"classname" "misc_teleporter" -"spawnflags" "1792" -} -{ -"origin" "-928 88 16" -"target" "t243" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"spawnflags" "1792" -"origin" "-656 480 64" -"target" "t256" -"classname" "trigger_always" -} -{ -"origin" "-640 104 64" -"target" "t240" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "64 1104 24" -"target" "t255" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"light" "100" -"classname" "light" -"origin" "-1760 424 140" -} -{ -"classname" "light" -"light" "100" -"origin" "-1760 552 140" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t211" -"origin" "-976 -656 48" -} -{ -"spawnflags" "1792" -"target" "t362" -"classname" "misc_teleporter" -"origin" "-1248 256 -96" -} -{ -"spawnflags" "1792" -"targetname" "t360" -"classname" "misc_teleporter_dest" -"angle" "90" -"origin" "-1792 184 -96" -} -{ -"spawnflags" "1792" -"target" "t358" -"classname" "misc_teleporter" -"origin" "-1696 1392 -440" -} -{ -"spawnflags" "1792" -"targetname" "t359" -"classname" "misc_teleporter_dest" -"angle" "90" -"origin" "-3240 992 -320" -} -{ -"spawnflags" "1792" -"target" "t360" -"classname" "misc_teleporter" -"origin" "-2656 1416 -320" -} -{ -"angle" "315" -"classname" "info_player_deathmatch" -"origin" "-920 1696 -448" -} -{ -"target" "t375" -"classname" "trigger_always" -"spawnflags" "1792" -"origin" "-3032 1166 -400" -} -{ -"angle" "270" -"classname" "info_player_deathmatch" -"origin" "-1216 1736 -480" -} -{ -"angle" "180" -"classname" "info_player_deathmatch" -"origin" "-2800 1304 -408" -} -{ -"angle" "90" -"classname" "info_player_deathmatch" -"origin" "-2840 736 -408" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "-2712 536 -408" -} -{ -"classname" "info_player_deathmatch" -"origin" "-1624 600 16" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-1320 -808 16" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-544 -480 48" -} -{ -"spawnflags" "1792" -"classname" "trigger_always" -"target" "t292" -"origin" "16 -144 72" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t296" -"origin" "-544 -480 72" -} -{ -"angle" "270" -"classname" "info_player_deathmatch" -"origin" "-168 96 16" -} -{ -"targetname" "t358" -"classname" "misc_teleporter_dest" -"angle" "90" -"spawnflags" "1792" -"origin" "-128 656 16" -} -{ -"target" "t361" -"classname" "misc_teleporter" -"spawnflags" "1792" -"origin" "-128 912 16" -} -{ -"angle" "180" -"classname" "info_player_deathmatch" -"origin" "352 784 -16" -} -{ -"origin" "-2968 1408 -320" -"target" "t354" -"classname" "misc_insane" -"spawnflags" "4" -"angle" "90" -} -{ -"origin" "-3116 1408 -320" -"target" "t353" -"classname" "misc_insane" -"spawnflags" "4" -"angle" "90" -} -{ -"origin" "-3236 1352 -320" -"target" "t352" -"classname" "misc_insane" -"spawnflags" "4" -"angle" "90" -} -{ -"origin" "-3236 1240 -320" -"target" "t351" -"classname" "misc_insane" -"spawnflags" "4" -"angle" "90" -} -{ -"origin" "-3236 1076 -320" -"target" "t350" -"classname" "misc_insane" -"spawnflags" "4" -"angle" "90" -} -{ -"origin" "-2800 1408 -320" -"target" "t355" -"angle" "90" -"spawnflags" "4" -"classname" "misc_insane" -} -{ -"origin" "-2752 1408 -336" -"target" "t356" -"targetname" "t355" -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -} -{ -"origin" "-2908 1408 -336" -"target" "t355" -"targetname" "t354" -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -} -{ -"origin" "-3072 1408 -336" -"target" "t354" -"targetname" "t353" -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -} -{ -"origin" "-3236 1408 -336" -"target" "t353" -"targetname" "t352" -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -} -{ -"origin" "-3236 1280 -336" -"target" "t352" -"targetname" "t351" -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -} -{ -"origin" "-3236 1152 -336" -"target" "t351" -"targetname" "t350" -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -} -{ -"targetname" "t357" -"spawnflags" "2049" // b#7: 1 -> 2049 -"origin" "-3236 988 -336" -"target" "t350" -"classname" "path_corner" -} -{ -"target" "t357" -"origin" "-2648 1408 -336" -"targetname" "t356" -"spawnflags" "2048" // b#7: 0 -> 2048 -"classname" "path_corner" -} -{ -"origin" "-2848 1408 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-2976 1408 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-3104 1408 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-3236 1408 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-3236 1280 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-3236 1152 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-3236 1020 -300" -"classname" "light" -"light" "200" -"_color" "1.000000 0.012658 0.012658" -} -{ -"origin" "-2720 1408 -300" -"_color" "1.000000 0.012658 0.012658" -"light" "200" -"classname" "light" -} -{ -"origin" "-3048 992 -408" -"classname" "monster_parasite" -"angle" "360" -} -{ -"origin" "-2864 1008 -408" -"angle" "270" -"classname" "monster_parasite" -} -{ -"origin" "-636 672 -8" -"dmg" "40" -"targetname" "t258" -"classname" "target_explosion" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-640 352 8" -"dmg" "40" -"targetname" "t257" -"classname" "target_explosion" -"spawnflags" "2048" // b#7: added this -} -{ -"classname" "point_combat" -"targetname" "t348" -"origin" "-156 1352 8" -} -{ -"classname" "point_combat" -"targetname" "t347" -"origin" "-200 1352 8" -} -{ -"classname" "point_combat" -"targetname" "t349" -"origin" "-112 1352 8" -} -{ -"classname" "point_combat" -"targetname" "t345" -"origin" "36 936 0" -} -{ -"classname" "point_combat" -"targetname" "t346" -"origin" "92 936 0" -} -{ -"model" "*21" -"wait" "2" -"classname" "func_button" -"angle" "360" -"target" "t343" -"pathtarget" "e6" -} -{ -"model" "*22" -"wait" "2" -"classname" "func_button" -"angle" "180" -"target" "t343" -"pathtarget" "e5" -} -{ -"model" "*23" -"spawnflags" "2048" -"classname" "func_button" -"angle" "270" -"target" "t341" -"pathtarget" "e4" -} -{ -"model" "*24" -"spawnflags" "2048" -"classname" "func_button" -"angle" "90" -"target" "t341" -"pathtarget" "e3" -} -{ -"model" "*25" -"classname" "func_button" -"target" "t339" -"pathtarget" "e1" -"angle" "360" -} -{ -"model" "*26" -"classname" "func_button" -"angle" "180" -"target" "t339" -"pathtarget" "e2" -} -{ -"model" "*27" -"speed" "150" -"classname" "func_train" -"targetname" "t344" -"target" "e5" -} -{ -"wait" "-1" -"origin" "-956 704 -480" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "e4" -} -{ -"wait" "-1" -"origin" "-956 704 -32" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "e3" -} -{ -"spawnflags" "2048" -"origin" "-868 780 -432" -"classname" "trigger_elevator" -"targetname" "t341" -"target" "t342" -} -{ -"model" "*28" -"spawnflags" "2048" -"speed" "150" -"classname" "func_train" -"targetname" "t342" -"target" "e4" -} -{ -"wait" "-1" -"origin" "-2128 -140 -480" -"classname" "path_corner" -"targetname" "e1" -} -{ -"origin" "-2044 -52 -432" -"classname" "trigger_elevator" -"targetname" "t339" -"target" "t340" -} -{ -"wait" "-1" -"origin" "-2128 -140 -32" -"classname" "path_corner" -"targetname" "e2" -} -{ -"light" "120" -"classname" "light" -"origin" "-2048 144 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-2004 224 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1904 224 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1820 224 24" -} -{ -"classname" "path_corner" -"origin" "-1744 1048 -480" -"wait" "-1" -"targetname" "e5" -} -{ -"classname" "path_corner" -"origin" "-1744 1048 -32" -"wait" "-1" -"targetname" "e6" -} -{ -"classname" "trigger_elevator" -"origin" "-1668 1124 -432" -"targetname" "t343" -"target" "t344" -} -{ -"model" "*29" -"classname" "func_train" -"speed" "150" -"targetname" "t340" -"target" "e2" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"classname" "target_speaker" -"targetname" "t190" -"origin" "-2352 344 -404" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"classname" "target_speaker" -"targetname" "t190" -"origin" "-2412 668 -404" -} -{ -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"classname" "target_speaker" -"targetname" "t190" -"origin" "-1924 660 -404" -} -{ -"classname" "target_speaker" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"targetname" "t190" -"origin" "-2408 1100 -404" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t338" -"origin" "128 824 16" -} -{ -"classname" "monster_chick" -"angle" "90" -"target" "t338" -"spawnflags" "2" -"targetname" "t190" -"origin" "128 768 -7" // b#6: 32 -> -7 -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t337" -"origin" "20 692 16" -} -{ -"classname" "monster_chick" -"angle" "90" -"target" "t337" -"spawnflags" "2" -"targetname" "t190" -"origin" "20 644 -7" // b#6: 32 -> -7 -} -{ -"classname" "point_combat" -"targetname" "t336" -"origin" "-640 212 4" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#7: added this -"targetname" "t198" -"origin" "-1928 560 24" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#7: added this -"target" "t190" -"targetname" "t198" -"origin" "-1924 536 100" -} -{ -"model" "*30" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t190" // b#7: t198 -> t190 -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t334" -"target" "t335" -"origin" "-2428 468 -436" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"target" "t333" -"targetname" "t335" -"origin" "-2404 656 -436" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t333" -"target" "t334" -"origin" "-2436 836 -436" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#7: added this -"targetname" "t332" -"origin" "-2428 616 -340" -} -{ -"model" "*31" -"spawnflags" "2816" // b#7: 768 -> 2816 -"classname" "trigger_once" -"target" "t331" -} -{ -"model" "*32" -"classname" "func_explosive" -"targetname" "t331" -"target" "t332" -} -{ -"angle" "90" -"origin" "-2408 536 -272" -"classname" "monster_parasite" -"spawnflags" "768" // b#2: 0 -> 768 -} -{ -"classname" "monster_parasite" -"spawnflags" "768" // b#2: 0 -> 768 -"origin" "-2408 588 -272" -"angle" "90" -} -{ -"light" "140" -"classname" "light" -"origin" "-832 1560 -456" -} -{ -"origin" "-832 1688 -410" -"light" "120" -"classname" "light" -} -{ -"model" "*33" -"targetname" "t308" -"classname" "func_explosive" -"mass" "100" -} -{ -"classname" "func_group" -} -{ -"model" "*34" -"classname" "func_wall" -"spawnflags" "16" -"_minlight" ".18" -} -{ -"model" "*35" -"classname" "func_wall" -"spawnflags" "16" -"_minlight" ".18" -} -{ -"model" "*36" -"spawnflags" "2048" -"_minlight" ".18" -"lip" "16" -"wait" "-1" -"angle" "90" -"classname" "func_button" -"target" "t42" -} -{ -"classname" "light" -"light" "160" -"origin" "-528 -480 -96" -} -{ -"classname" "path_corner" -"targetname" "t324" -"target" "t330" -"origin" "-1788 176 -112" -"spawnflags" "2049" // b#7: 1 -> 2049 -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"delay" "1.5" -"targetname" "t328" -"target" "t329" -"origin" "-1424 -684 116" -} -{ -"classname" "light" -"light" "170" -"origin" "-1440 -608 -20" -} -{ -"classname" "light" -"light" "140" -"origin" "-1224 -428 88" -} -{ -"model" "*37" -"classname" "func_door" -"angle" "-1" -"wait" "-1" -"speed" "50" -"targetname" "t329" -"_minlight" ".18" -} -{ -"model" "*38" -"classname" "func_button" -"angle" "360" -"wait" "-1" -"lip" "16" -"_minlight" ".18" -"spawnflags" "2048" -"target" "t58" -} -{ -"model" "*39" -"classname" "func_wall" -"spawnflags" "16" -} -{ -"origin" "-1500 384 -64" -"_color" "1.000000 0.015686 0.015686" -"light" "160" -"classname" "light" -} -{ -"origin" "-1332 384 -64" -"_color" "1.000000 0.015686 0.015686" -"light" "160" -"classname" "light" -} -{ -"classname" "light" -"light" "160" -"_color" "1.000000 0.015686 0.015686" -"origin" "-1500 264 -64" -} -{ -"classname" "misc_insane" -"angle" "270" -"spawnflags" "4" -"target" "t327" -"origin" "-1248 376 -96" -} -{ -"origin" "-1248 384 -112" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t326" -"target" "t327" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"origin" "-1248 240 -112" -"targetname" "t327" -"target" "t324" -} -{ -"origin" "-1652 292 -64" -"_color" "1.000000 0.015686 0.015686" -"light" "160" -"classname" "light" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t325" -"target" "t321" -"origin" "-1648 288 -112" -} -{ -"spawnflags" "4" -"classname" "misc_insane" -"target" "t322" -"origin" "-1496 328 -96" -} -{ -"classname" "misc_insane" -"spawnflags" "4" -"target" "t323" -"origin" "-1428 384 -96" -} -{ -"classname" "misc_insane" -"spawnflags" "4" -"target" "t321" -"origin" "-1548 288 -96" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"origin" "-1496 384 -112" -"targetname" "t322" -"target" "t323" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"origin" "-1496 288 -112" -"targetname" "t321" -"target" "t322" -} -{ -"classname" "path_corner" -"origin" "-1792 288 -112" -"spawnflags" "2048" // b#7: 0 -> 2048 -"target" "t325" -"targetname" "t330" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: 0 -> 2048 -"origin" "-1332 384 -112" -"targetname" "t323" -"target" "t326" -} -{ -"classname" "misc_insane" -"spawnflags" "4" -"angle" "360" -"origin" "-1680 288 -96" -"target" "t325" -} -{ -"origin" "-1244 336 -64" -"_color" "1.000000 0.015686 0.015686" -"light" "160" -"classname" "light" -} -{ -"classname" "light" -"light" "160" -"_color" "1.000000 0.015686 0.015686" -"origin" "-1764 292 -64" -} -{ -"classname" "point_combat" -"targetname" "t319" -"origin" "-1108 536 0" -} -{ -"classname" "point_combat" -"targetname" "t320" -"origin" "-1196 536 0" -} -{ -"classname" "point_combat" -"targetname" "t318" -"origin" "-428 -480 36" -"target" "t382" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t316" -"target" "t317" -"origin" "-660 -216 12" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t317" -"target" "t316" -"origin" "-228 -216 12" -} -{ -"classname" "misc_insane" -"angle" "360" -"target" "t316" -"origin" "-688 -216 28" -"deathtarget" "marduk" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t314" -"target" "t304" -"origin" "-2676 776 -416" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t304" -"target" "t311" -"origin" "-2356 776 -416" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t313" -"target" "t314" -"origin" "-2356 776 -416" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t311" -"target" "t312" -"origin" "-2356 1064 -416" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t312" -"target" "t313" -"origin" "-2356 1064 -416" -} -{ -"model" "*40" -"classname" "func_explosive" -"mass" "100" -"targetname" "t184" -} -{ -"model" "*41" -"classname" "trigger_once" -"spawnflags" "2048" // b#7: added this -"target" "t310" -} -{ -"spawnflags" "3" -"angle" "180" -"classname" "monster_brain" -"origin" "-2108 1184 -428" -"targetname" "t310" -} -{ -"spawnflags" "3" -"angle" "180" -"classname" "monster_brain" -"origin" "-2108 1236 -428" -"targetname" "t310" -} -{ -"classname" "monster_brain" -"angle" "180" -"spawnflags" "3" -"origin" "-2032 1212 -428" -"targetname" "t310" -} -{ -"target" "t375" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"targetname" "t308" -"delay" "1.2" -"origin" "-2928 1020 -412" -} -{ -"model" "*42" -"classname" "trigger_once" -"spawnflags" "2308" // b#7: 260 -> 2308 -"targetname" "t267" -"target" "t308" -} -{ -"classname" "monster_medic" -"spawnflags" "257" // b#1: 0 -> 256, b#8: 256 -> 257 -"angle" "315" -"origin" "-3044 1212 -488" -"target" "t379" -"targetname" "t375" // b#8: make a trigger anger him -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t303" -"target" "t304" -"origin" "-2664 776 -416" -} -{ -"classname" "misc_insane" -"spawnflags" "4" -"angle" "360" -"target" "t303" -"origin" "-2704 776 -400" -"deathtarget" "marduk" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t301" -"target" "t302" -"origin" "-2408 1176 -448" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t302" -"target" "t301" -"origin" "-2408 344 -448" -} -{ -"classname" "misc_insane" -"angle" "270" -"spawnflags" "32" -"target" "t301" -"origin" "-2408 1208 -432" -"deathtarget" "marduk" -} -{ -"classname" "monster_brain" -"spawnflags" "1" -"angle" "360" -"origin" "-2296 344 -432" -} -{ -"angle" "360" -"classname" "monster_parasite" -"spawnflags" "2" -"targetname" "t299" -"origin" "-1504 528 28" -"target" "t319" -} -{ -"classname" "monster_parasite" -"angle" "360" -"spawnflags" "2" -"targetname" "t299" -"origin" "-1568 528 28" -"target" "t320" -} -{ -"origin" "-1616 596 16" -"spawnflags" "1" -"classname" "point_combat" -"targetname" "t298" -} -{ -"origin" "-1152 596 20" -"spawnflags" "1" -"classname" "monster_medic" -"target" "t298" -"angle" "270" -} -{ -"model" "*43" -"classname" "trigger_once" -"spawnflags" "2048" // b#7: added this -"target" "t299" -} -{ -"model" "*44" -"target" "t238" -"spawnflags" "2052" // b#7: added this -"classname" "trigger_once" -"targetname" "t328" -} -{ -"classname" "func_group" -} -{ -"origin" "-1424 -448 48" // b#6: 72 -> 48 -"targetname" "t211" -"classname" "monster_brain" -"angle" "270" -"spawnflags" "259" -} -{ -"origin" "-1240 -592 16" // b#6: 32 -> 16 -"targetname" "t211" -"classname" "monster_brain" -"angle" "270" -"spawnflags" "3" -} -{ -"origin" "-1296 -656 16" // b#6: 48 -> 16 -"targetname" "t211" -"spawnflags" "3" -"angle" "360" -"classname" "monster_brain" -} -{ -"model" "*45" -"targetname" "t297" -"classname" "func_explosive" -} -{ -"targetname" "t328" -"target" "t297" -"origin" "-544 -376 56" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-560 -416 56" -"target" "t296" -"delay" ".5" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"targetname" "t297" -} -{ -"origin" "-1028 -376 16" // b#6: 32 -> 16 -"targetname" "t67" -"spawnflags" "3" -"angle" "90" -"classname" "monster_parasite" -} -{ -"origin" "-972 -408 16" // b#6: 24 -> 16 -"targetname" "t67" -"spawnflags" "3" -"angle" "90" -"classname" "monster_parasite" -} -{ -"angle" "45" -"origin" "-528 -480 -48" -"classname" "monster_medic" -"target" "t318" -"targetname" "t297" -} -{ -"origin" "-352 40 8" -"target" "t292" -"delay" "3.3" -"targetname" "t289" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-352 64 24" -"target" "t291" -"delay" "3.2" -"targetname" "t289" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-352 96 24" -"target" "t290" -"delay" "3" -"targetname" "t289" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"model" "*46" -"spawnflags" "2048" -"target" "t289" -"classname" "trigger_once" -} -{ -"targetname" "t291" -"origin" "0 -480 -64" -"spawnflags" "2" -"angle" "135" -"classname" "monster_chick" -} -{ -"origin" "0 -480 -88" -"classname" "light" -"light" "120" -} -{ -"origin" "16 -144 -88" -"light" "120" -"classname" "light" -} -{ -"model" "*47" -"targetname" "t292" -"_minlight" ".18" -"target" "t287" -"classname" "func_train" -} -{ -"origin" "-48 -528 -96" -"target" "t288" -"targetname" "t287" -"classname" "path_corner" -} -{ -"origin" "-48 -528 16" -"targetname" "t288" -"classname" "path_corner" -} -{ -"model" "*48" -"targetname" "t290" -"mass" "50" -"classname" "func_explosive" -} -{ -"model" "*49" -"targetname" "t290" -"classname" "func_explosive" -"mass" "50" -} -{ -"origin" "-32 -192 -104" -"target" "t286" -"targetname" "t285" -"classname" "path_corner" -} -{ -"origin" "-32 -192 16" -"targetname" "t286" -"classname" "path_corner" -} -{ -"model" "*50" -"targetname" "t292" -"target" "t285" -"speed" "120" -"_minlight" ".18" -"classname" "func_train" -} -{ -"item" "ammo_rockets" -"targetname" "t291" -"origin" "16 -144 -95" // b#6: -56 -> -95 -"angle" "225" -"spawnflags" "2" -"classname" "monster_chick" -} -{ -"origin" "-504 64 -8" // b#6: 16 -> -8 -"target" "t284" -"classname" "monster_chick" -"spawnflags" "2" -"angle" "135" -"targetname" "t315" -} -{ -"origin" "-616 120 0" -"targetname" "t284" -"classname" "point_combat" -"spawnflags" "1" -} -{ -"origin" "-664 152 0" -"targetname" "t283" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "-764 64 -8" // b#6: 16 -> -8 -"target" "t283" -"angle" "45" -"spawnflags" "2" -"classname" "monster_chick" -"targetname" "t315" -} -{ -"model" "*51" -"classname" "trigger_once" -"spawnflags" "2048" // b#7: added this -"target" "t315" -} -{ -"item" "ammo_rockets" -"origin" "-732 816 24" -"classname" "monster_chick" -"angle" "360" -"spawnflags" "257" -} -{ -"origin" "-640 676 24" -"spawnflags" "257" -"angle" "45" -"classname" "monster_chick" -} -{ -"origin" "-296 1368 0" -"target" "t280" -"targetname" "t281" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"target" "t281" -"targetname" "t280" -"origin" "80 1368 0" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"target" "t280" -"origin" "60 1364 16" -"angle" "180" -"spawnflags" "4" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"model" "*52" -"target" "t221" -"spawnflags" "2048" // b#7: 0 -> 2048 -"classname" "trigger_once" -} -{ -"origin" "92 1188 20" -"targetname" "t255" -"angle" "270" -"classname" "monster_parasite" -"target" "t346" -} -{ -"origin" "36 1188 20" -"targetname" "t255" -"angle" "270" -"classname" "monster_parasite" -"target" "t345" -} -{ -"origin" "64 1296 20" -"targetname" "t255" -"angle" "270" -"spawnflags" "768" -"classname" "monster_parasite" -} -{ -"origin" "388 816 36" -"target" "t279" -"targetname" "t278" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"message" "Access granted to\nResearch Lab." // b#9: moved here from button -"delay" "0.6" // b#9: added this -} -{ -"origin" "24 -344 88" -"spawnflags" "20" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"model" "*53" -"classname" "func_button" -"angle" "270" -"wait" "-1" -"lip" "16" -"_minlight" ".18" -"target" "t64" -"spawnflags" "2048" -} -{ -"model" "*54" -"classname" "func_wall" -"spawnflags" "16" -} -{ -"model" "*55" -"target" "t62" -"_minlight" ".18" -"lip" "16" -"wait" "-1" -"angle" "360" -"classname" "func_button" -"spawnflags" "2048" -} -{ -"origin" "-1692 692 -320" -"targetname" "t117" -"classname" "target_speaker" -"spawnflags" "2048" // b#7: added this -"noise" "world/brkglas.wav" -} -{ -"origin" "-2032 696 -320" -"targetname" "t115" -"noise" "world/brkglas.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#7: added this -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-440 -216 128" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-224 -208 128" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-224 -40 128" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-344 64 128" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-536 64 128" -} -{ -"style" "32" -"origin" "-304 -488 184" -"targetname" "t64" -"classname" "light" -"spawnflags" "2049" // b#7: 1 -> 2049 -"light" "300" -"_color" "1.000000 0.016949 0.016949" -} -{ -"style" "32" -"origin" "-304 -552 184" -"targetname" "t64" -"_color" "1.000000 0.016949 0.016949" -"light" "300" -"spawnflags" "2049" // b#7: 1 -> 2049 -"classname" "light" -} -{ -"style" "33" -"origin" "8 -344 184" -"targetname" "t62" -"classname" "light" -"spawnflags" "2049" // b#7: 1 -> 2049 -"light" "300" -"_color" "1.000000 0.016949 0.016949" -} -{ -"style" "33" -"origin" "72 -344 184" -"targetname" "t62" -"_color" "1.000000 0.016949 0.016949" -"light" "300" -"spawnflags" "2049" // b#7: 1 -> 2049 -"classname" "light" -} -{ -"origin" "-1568 1608 -392" -"classname" "target_speaker" -"noise" "world/amb23.wav" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "-1816 1616 -392" -"classname" "target_speaker" -"noise" "world/amb23.wav" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "-1296 1608 -392" -"noise" "world/amb23.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "-2768 1288 -312" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_goal" -"spawnflags" "2048" -"targetname" "t267" -"origin" "-2824 1240 -368" -} -{ -"classname" "key_blue_key" -"origin" "-1440 -608 -24" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"targetname" "t58" -"delay" "5.5" -"killtarget" "t276" -"origin" "-1380 -748 80" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"targetname" "t58" -"delay" "5.5" -"killtarget" "t277" -"origin" "-1384 -728 80" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"targetname" "t58" -"delay" ".5" -"target" "t277" -"origin" "-1408 -704 80" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -"targetname" "t58" -"delay" "5" -"target" "t276" -"origin" "-1416 -680 80" -} -{ -"model" "*56" -"classname" "trigger_hurt" -"spawnflags" "2051" // b#7: 3 -> 2051 -"dmg" "500" -"targetname" "t276" -} -{ -"style" "34" -"_color" "1.000000 0.003922 0.003922" -"light" "300" -"classname" "light" -"spawnflags" "1" -"targetname" "t277" -"origin" "-1312 -268 184" -} -{ -"style" "34" -"classname" "light" -"light" "300" -"_color" "1.000000 0.003922 0.003922" -"spawnflags" "1" -"targetname" "t277" -"origin" "-1384 -268 184" -} -{ -"style" "34" -"_color" "1.000000 0.003922 0.003922" -"light" "300" -"classname" "light" -"spawnflags" "1" -"targetname" "t277" -"origin" "-1384 -368 184" -} -{ -"style" "34" -"classname" "light" -"light" "300" -"_color" "1.000000 0.003922 0.003922" -"spawnflags" "1" -"targetname" "t277" -"origin" "-1312 -368 184" -} -{ -"classname" "misc_insane" -"spawnflags" "20" -"angle" "270" -"origin" "-1320 -328 88" -"deathtarget" "marduk" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t275" -"origin" "-1796 204 92" -} -{ -"classname" "trigger_key" -"targetname" "t274" -"target" "t275" -"item" "key_blue_key" -"spawnflags" "2048" -"origin" "-1804 248 92" -} -{ -"model" "*57" -"classname" "trigger_multiple" -"target" "t274" -"spawnflags" "2048" -} -{ -"origin" "-3068 1228 -424" -"target" "t273" -"targetname" "t272" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-2840 1224 -424" -"target" "t272" -"targetname" "t271" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-2848 1304 -424" -"target" "t271" -"targetname" "t270" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-3108 1304 -424" -"target" "t270" -"targetname" "t269" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-3104 1064 -424" -"target" "t269" -"targetname" "t268" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-2968 1108 -424" -"target" "t268" -"targetname" "t273" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-3104 1024 -408" -"target" "t268" -"spawnflags" "4" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"model" "*58" -"spawnflags" "2048" -"target" "t267" -"wait" "-1" -"speed" "130" -"message" "Maintenence bridge\nactivated." -"angle" "360" -"classname" "func_button" -} -{ -"origin" "-1500 416 108" -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -"origin" "-1500 516 108" -} -{ -"origin" "-1592 516 108" -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -"origin" "-1592 416 108" -} -{ -"origin" "-1592 416 156" -"classname" "target_speaker" -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -"origin" "-1592 516 156" -} -{ -"origin" "-1500 516 156" -"classname" "target_speaker" -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -} -{ -"origin" "-1412 160 76" -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -} -{ -"origin" "-3112 1152 -384" -"spawnflags" "1" -"noise" "world/amb23.wav" -"classname" "target_speaker" -} -{ -"origin" "-3012 1060 -384" -"spawnflags" "1" -"noise" "world/amb23.wav" -"classname" "target_speaker" -} -{ -"origin" "-2916 964 -384" -"spawnflags" "1" -"noise" "world/amb23.wav" -"classname" "target_speaker" -} -{ -"origin" "-2752 828 -396" -"classname" "light" -"light" "100" -} -{ -"origin" "-2688 780 -396" -"classname" "light" -"light" "100" -} -{ -"origin" "-2792 1164 -332" -"classname" "light" -"light" "140" -} -{ -"origin" "-2808 1208 -264" -"classname" "light" -"light" "130" -} -{ -"origin" "-3008 1096 -264" -"classname" "light" -"light" "130" -} -{ -"origin" "-2824 1008 -264" -"classname" "light" -"light" "130" -} -{ -"origin" "-2960 848 -264" -"classname" "light" -"light" "130" -} -{ -"origin" "-2832 720 -264" -"classname" "light" -"light" "130" -} -{ -"origin" "-2696 896 -264" -"classname" "light" -"light" "130" -} -{ -"origin" "-2856 1304 -312" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-2856 1192 -312" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"origin" "-2856 1304 -376" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-2768 1200 -312" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-2812 732 -312" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"origin" "-2572 780 -280" -} -{ -"model" "*59" -"target" "t184" -"classname" "trigger_multiple" -"spawnflags" "1792" -} -{ -"light" "150" -"classname" "light" -"origin" "-1440 1896 -432" -} -{ -"origin" "-1356 -324 104" -"target" "t266" -"random" "6" -"wait" "7" -"classname" "func_timer" -"spawnflags" "1793" -} -{ -"origin" "-1356 -344 104" -"targetname" "t266" -"classname" "target_speaker" -"noise" "insane/insane7.wav" -"spawnflags" "1792" // added this -} -{ -"origin" "-196 60 104" -"classname" "func_timer" -"spawnflags" "1793" // b#5: 1 -> 1793 -"target" "_fix1" // b#5: added this -"random" "5.5" // -"wait" "8" // -} -{ -"origin" "-196 40 104" -"targetname" "_fix1" // b#5: added this -"classname" "target_speaker" -"noise" "insane/insane7.wav" -"spawnflags" "1792" // b#5: added this -} -{ -"origin" "24 -308 104" -"wait" "10" -"random" "8" -"target" "t261" -"spawnflags" "1793" -"classname" "func_timer" -} -{ -"origin" "24 -328 104" -"targetname" "t261" -"classname" "target_speaker" -"noise" "insane/insane5.wav" -"spawnflags" "1792" // b#5: added this -} -{ -"origin" "-4 -308 104" -"random" "7.5" -"wait" "9" -"target" "t262" -"spawnflags" "1793" -"classname" "func_timer" -} -{ -"origin" "-4 -328 104" -"targetname" "t262" -"noise" "insane/insane7.wav" -"classname" "target_speaker" -"spawnflags" "1792" // b#5: added this -} -{ -"origin" "-320 -476 104" -"targetname" "t264" -"classname" "target_speaker" -"noise" "insane/insane7.wav" -"spawnflags" "1792" // b#5: added this -} -{ -"origin" "-292 -476 104" -"targetname" "t263" -"noise" "insane/insane5.wav" -"classname" "target_speaker" -"spawnflags" "1792" // b#5: added this -} -{ -"origin" "-320 -456 104" -"target" "t264" -"wait" "11" -"random" "8" -"classname" "func_timer" -"spawnflags" "1793" -} -{ -"origin" "-168 40 104" -"classname" "target_speaker" -"spawnflags" "3840" // b#7: added this -"noise" "insane/insane5.wav" -} -{ -"origin" "-1336 -344 104" -"targetname" "t265" -"noise" "insane/insane5.wav" -"classname" "target_speaker" -"spawnflags" "1792" // b#5: added this -} -{ -"origin" "-292 -456 104" -"target" "t263" -"wait" "9.5" -"random" "6" -"classname" "func_timer" -"spawnflags" "1793" -} -{ -"origin" "-1336 -324 104" -"target" "t265" -"random" "6.5" -"wait" "9.5" -"spawnflags" "1793" -"classname" "func_timer" -} -{ -"model" "*60" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*61" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*62" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-1496 1672 -400" -"target" "t32" -"spawnflags" "3840" // b#7: 1792 -> 3840 -"classname" "trigger_always" -} -{ -"model" "*63" -"spawnflags" "2048" -"target" "t201" -"classname" "trigger_once" -} -{ -"origin" "-640 624 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"origin" "-152 1336 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"origin" "-792 64 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"origin" "-1128 88 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"origin" "-1128 376 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"origin" "-1312 576 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"origin" "-1600 536 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"origin" "-1792 536 72" -"targetname" "t190" -} -{ -"origin" "-1600 344 72" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/klaxon1.wav" -"classname" "target_speaker" -"targetname" "t190" -} -{ -"spawnflags" "2048" -"classname" "target_help" -"targetname" "t190" -"message" "Return to Hangar.\nUse Commander's head to\ngain further access." -"origin" "-1896 460 40" -} -{ -"light" "140" -"classname" "light" -"origin" "-640 352 -112" -} -{ -"classname" "light" -"light" "160" -"origin" "-640 672 -112" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t259" -} -{ -"classname" "target_speaker" -"noise" "world/klaxon1.wav" -"spawnflags" "2050" // b#7: 2 -> 2050 -"targetname" "t190" -"origin" "-1880 624 72" -} -{ -"style" "2" -"classname" "func_areaportal" -"targetname" "t258" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t257" -} -{ -"model" "*64" -"classname" "trigger_once" -"spawnflags" "2052" -"target" "t256" -"targetname" "t190" -} -{ -"spawnflags" "1" -"angle" "90" -"classname" "monster_chick" -"origin" "-640 352 -84" -"item" "ammo_rockets" -} -{ -"classname" "monster_chick" -"angle" "270" -"spawnflags" "1" -"origin" "-640 672 -76" -} -{ -"model" "*65" -"classname" "func_door" -"angle" "-1" -"spawnflags" "8" -"wait" "-1" -"lip" "-104" -"targetname" "t256" -"speed" "200" -} -{ -"model" "*66" -"classname" "func_explosive" -"dmg" "5" -"targetname" "t256" -"target" "t258" -} -{ -"model" "*67" -"classname" "func_door" -"angle" "-1" -"spawnflags" "8" -"lip" "-104" -"wait" "-1" -"targetname" "t256" -"speed" "200" -} -{ -"model" "*68" -"classname" "func_explosive" -"targetname" "t256" -"dmg" "5" -"target" "t257" -} -{ -"style" "4" -"classname" "func_areaportal" -"targetname" "t255" -} -{ -"style" "5" -"classname" "func_areaportal" -"targetname" "t57" -} -{ -"origin" "-112 860 64" -"wait" "10" -"random" "6" -"spawnflags" "1" -"classname" "func_timer" -"target" "t247" -} -{ -"origin" "-56 840 64" -"noise" "insane/insane5.wav" -"classname" "target_speaker" -"targetname" "t247" -} -{ -"spawnflags" "1" -"wait" "8" -"random" "5" -"classname" "func_timer" -"target" "t246" -"origin" "-116 720 64" -} -{ -"classname" "func_timer" -"wait" "8.5" -"random" "5" -"spawnflags" "1" -"target" "t245" -"origin" "-144 836 64" -} -{ -"noise" "insane/insane7.wav" -"classname" "target_speaker" -"targetname" "t245" -"origin" "-72 784 64" -} -{ -"noise" "insane/insane7.wav" -"classname" "target_speaker" -"targetname" "t246" -"origin" "-56 704 64" -} -{ -"style" "6" -"classname" "func_areaportal" -"targetname" "t243" -} -{ -"model" "*69" -"classname" "func_door" -"angle" "-1" -"speed" "120" -"_minlight" ".2" -"dmg" "5" -"target" "t243" -"spawnflags" "2048" -} -{ -"light" "100" -"classname" "light" -"origin" "-28 1344 24" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t241" -"target" "t242" -"origin" "-96 904 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t242" -"target" "t241" -"origin" "-96 760 0" -} -{ -"classname" "misc_insane" -"angle" "270" -"spawnflags" "32" -"target" "t241" -"origin" "-96 932 16" -} -{ -"spawnflags" "2048" -"classname" "item_armor_combat" -"origin" "-128 1516 16" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-2700 616 -412" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "-2648 692 -412" -} -{ -"classname" "target_speaker" -"spawnflags" "2048" // b#7: added this -"noise" "world/lite_out.wav" -"targetname" "t32" -"origin" "-1568 1640 -400" -"attenuation" "-1" -} -{ -"origin" "-640 72 -112" -"light" "200" -"classname" "light" -} -{ -"model" "*70" -"target" "t240" -"classname" "trigger_once" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-640 64 -88" -"angle" "90" -"classname" "monster_medic" -"target" "t336" -} -{ -"model" "*71" -"targetname" "t240" -"classname" "func_explosive" -} -{ -"model" "*72" -"targetname" "t240" -"spawnflags" "8" -"lip" "-104" -"angle" "-1" -"classname" "func_door" -"wait" "-1" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"angle" "360" -"classname" "monster_parasite" -"origin" "-752 76 208" -} -{ -"classname" "monster_parasite" -"angle" "360" -"origin" "-792 52 208" -} -{ -"model" "*73" -"classname" "func_explosive" -"mass" "75" -"dmg" "5" -"targetname" "t238" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-176 1516 8" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-80 1516 8" -} -{ -"classname" "monster_parasite" -"angle" "270" -"spawnflags" "0" -"origin" "-128 1480 16" -"targetname" "t221" -"target" "t348" -} -{ -"spawnflags" "0" -"classname" "monster_parasite" -"angle" "270" -"origin" "-176 1480 16" -"targetname" "t221" -"target" "t347" -} -{ -"classname" "monster_parasite" -"angle" "270" -"origin" "-80 1480 16" -"targetname" "t221" -"target" "t349" -"spawnflags" "768" -} -{ -"model" "*74" -"classname" "func_explosive" -"mass" "50" -"dmg" "20" -"targetname" "t221" -} -{ -"spawnflags" "0" -"classname" "item_health_large" -"origin" "392 896 8" -} -{ -"spawnflags" "0" -"classname" "item_health_large" -"origin" "352 896 8" -} -{ -"spawnflags" "2048" -"origin" "-1910 546 28" -"targetname" "t190" -"classname" "target_goal" -} -{ -"message" "You have found a secret." -"spawnflags" "2048" -"classname" "target_secret" -"targetname" "t234" -"origin" "-1724 1380 -448" -} -{ -"origin" "-800 1656 -456" -"spawnflags" "1" -"noise" "world/amb23.wav" -"classname" "target_speaker" -"volume" "1" -"attenuation" "3" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -"origin" "-1500 416 156" -} -{ -"origin" "-1372 -304 200" -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -} -{ -"origin" "-304 -528 200" -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -} -{ -"origin" "56 -344 200" -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -} -{ -"origin" "-1316 -304 200" -"spawnflags" "1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -"origin" "-216 -504 92" -"volume" ".7" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -"origin" "20 -256 92" -"volume" ".7" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -"origin" "20 -256 104" -} -{ -"model" "*75" -"spawnflags" "2048" -"classname" "trigger_once" -"targetname" "t57" -"target" "t233" -} -{ -"origin" "-2572 556 -280" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-2572 552 -280" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "-2572 776 -280" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "-2856 1192 -376" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1664 992 -388" -"noise" "world/force1.wav" -"targetname" "for1" -"spawnflags" "2049" -"classname" "target_speaker" -} -{ -"origin" "-748 784 96" -"targetname" "for1" -"spawnflags" "2049" -"noise" "world/force1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"origin" "-546 1704 -320" -"noise" "world/amb10.wav" -"spawnflags" "1" -} -{ -"classname" "target_speaker" -"origin" "-650 1704 -320" -"noise" "world/amb10.wav" -"spawnflags" "1" -} -{ -"origin" "-468 812 -412" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" ".7" -"classname" "target_speaker" -} -{ -"origin" "-464 984 -396" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" ".7" -"classname" "target_speaker" -} -{ -"origin" "-464 1176 -408" -"noise" "world/amb15.wav" -"spawnflags" "1" -"volume" ".5" -"classname" "target_speaker" -} -{ -"origin" "-464 1392 -456" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" ".7" -"classname" "target_speaker" -} -{ -"origin" "-1248 1496 -456" -"noise" "world/amb15.wav" -"spawnflags" "1" -"volume" ".6" -"classname" "target_speaker" -} -{ -"origin" "-2004 672 100" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-1816 844 140" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-1664 948 140" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-2036 372 -408" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" "1" -"classname" "target_speaker" -} -{ -"origin" "-2268 380 -408" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" "1" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-2048 120 160" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-1908 224 160" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-1800 224 196" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-1424 344 72" -} -{ -"origin" "-1000 -552 120" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-1000 -324 120" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-844 -216 120" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-696 -216 44" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-1000 -684 44" -} -{ -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-304 -408 188" -} -{ -"volume" ".5" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -"origin" "-1828 1688 -372" -} -{ -"volume" ".5" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -"origin" "-1564 1692 -372" -} -{ -"volume" ".5" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -"origin" "-1312 1688 -372" -} -{ -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -"origin" "-1344 -384 72" -} -{ -"origin" "-1472 168 76" -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -} -{ -"origin" "-1408 292 92" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-1152 572 52" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-1152 328 192" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-948 64 192" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-756 64 128" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-584 -216 128" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-640 556 144" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-624 796 144" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"spawnflags" "2048" -"origin" "-1424 1928 -344" -"killtarget" "tr2" -"target" "t31" -"targetname" "t229" -"classname" "trigger_relay" -} -{ -"origin" "-1712 1924 -328" -"target" "t31" -"killtarget" "tr1" -"targetname" "t228" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1668 1812 -392" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr1" -"origin" "-1624 1712 -392" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1564 1684 -392" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr1" -"origin" "-1512 1712 -392" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1464 1812 -392" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1724 1812 -392" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"spawnflags" "1" -"targetname" "tr1" -"origin" "-1776 1712 -392" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1828 1684 -392" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-1888 1712 -392" -"targetname" "tr1" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1932 1812 -392" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"targetname" "tr1" -"origin" "-1260 1720 -392" -"classname" "target_speaker" -"noise" "world/amb10.wav" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1312 1692 -392" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"spawnflags" "1" -"targetname" "tr1" -"origin" "-1372 1720 -392" -"classname" "target_speaker" -"noise" "world/amb10.wav" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1416 1820 -392" -"classname" "target_speaker" -"noise" "world/amb4.wav" -} -{ -"spawnflags" "1" -"targetname" "tr2" -"origin" "-1212 1820 -392" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2228 1216 -408" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2408 1040 -408" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2040 132 -408" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2408 568 -408" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2404 748 -408" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2260 664 -408" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-2104 664 -408" -} -{ -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-2988 1260 -384" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-380 784 144" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-320 968 144" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-320 1160 132" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-284 1344 132" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "-72 1344 132" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "64 1236 132" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "64 1040 8" -} -{ -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"origin" "64 896 144" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -"origin" "336 836 8" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -"origin" "404 836 8" -} -{ -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -"origin" "404 732 8" -} -{ -"origin" "336 732 8" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"origin" "408 784 52" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-368 -504 116" -"targetname" "t65" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/l_hum1.wav" -"attenuation" "3" -"volume" "1" -"classname" "target_speaker" -} -{ -"origin" "24 -408 104" -"targetname" "t63" -"volume" "1" -"attenuation" "3" -"spawnflags" "2050" // b#7: 2 -> 2050 -"noise" "world/l_hum1.wav" -"classname" "target_speaker" -} -{ -"targetname" "t25" -"volume" ".8" -"origin" "-1388 -332 100" -"attenuation" "2" -"spawnflags" "2048" // b#7: 0 -> 2048 -"noise" "world/spark1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1388 -332 100" -"spawnflags" "1" -"noise" "world/turbine1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1484 -544 144" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-1484 -620 144" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-1440 -744 88" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -} -{ -"origin" "-1352 -444 188" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-1484 -472 144" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -} -{ -"origin" "-216 -504 104" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"volume" ".7" -"origin" "-1440 -744 92" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"origin" "-64 -348 188" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-2096 424 128" -"targetname" "mac2" -"spawnflags" "2048" // b#7: 0 -> 2048 -"classname" "target_speaker" -"volume" ".8" -"attenuation" "2" -"noise" "world/turbine1.wav" -} -{ -"origin" "-1880 424 72" -"targetname" "mac1" -"noise" "world/turbine1.wav" -"attenuation" "2" -"volume" ".8" -"classname" "target_speaker" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-2144 424 144" -"targetname" "mac2" -"volume" ".8" -"attenuation" "2" -"noise" "world/spark2.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#7: added this -} -{ -"volume" ".2" -"origin" "-592 1648 -372" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1424 528 72" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-2448 664 -384" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -} -{ -"origin" "-1704 664 -408" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" ".7" -"classname" "target_speaker" -} -{ -"origin" "-2032 1340 -408" -"noise" "world/amb22.wav" -"spawnflags" "1" -"volume" "1" -"classname" "target_speaker" -} -{ -"origin" "-1568 1552 -456" -"noise" "world/amb15.wav" -"spawnflags" "1" -"volume" ".6" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"volume" ".5" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-1664 960 -408" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-664 784 -412" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-1248 1312 -456" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-1248 1184 -456" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-1112 1088 -456" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-928 1088 -456" -} -{ -"classname" "target_speaker" -"volume" ".7" -"spawnflags" "1" // b#4: 2048 -> 1 -"noise" "world/amb22.wav" -"origin" "-832 1232 -456" -} -{ -"classname" "target_speaker" -"volume" "1" -"spawnflags" "1" -"noise" "world/amb15.wav" -"origin" "-832 1432 -456" -} -{ -"classname" "target_speaker" -"volume" ".6" -"spawnflags" "1" -"noise" "world/amb22.wav" -"origin" "-648 1608 -456" -} -{ -"model" "*76" -"targetname" "t226" -"spawnflags" "2051" -"classname" "func_wall" -} -{ -"model" "*77" -"targetname" "t225" -"spawnflags" "2051" -"classname" "func_wall" -} -{ -"model" "*78" -"targetname" "t225" -"spawnflags" "2071" -"classname" "func_wall" -} -{ -"origin" "-752 1628 -432" -"target" "t226" -"delay" "7" -"targetname" "t42" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-776 1636 -432" -"target" "t225" -"delay" "6.5" -"targetname" "t42" -"classname" "trigger_relay" -"spawnflags" "2048" -} -{ -"origin" "-800 1496 -456" -"spawnflags" "1" -"noise" "world/amb22.wav" -"classname" "target_speaker" -"volume" "1" -"attenuation" "3" -} -{ -"origin" "-496 1496 -456" -"classname" "target_speaker" -"noise" "world/amb22.wav" -"spawnflags" "1" -"attenuation" "3" -"volume" "1" -} -{ -"model" "*79" -"targetname" "t226" -"classname" "func_wall" -"spawnflags" "2071" -} -{ -"spawnflags" "2048" // b#7: 0 -> 2048 -"noise" "world/l_hum1.wav" -"classname" "target_speaker" -"targetname" "t44" -"origin" "-546 1760 -370" -"volume" "1" -"attenuation" "3" -} -{ -"spawnflags" "2048" // b#7: 0 -> 2048 -"noise" "world/l_hum1.wav" -"classname" "target_speaker" -"targetname" "t43" -"origin" "-650 1760 -370" -"volume" "1" -"attenuation" "3" -} -{ -"volume" "1" -"attenuation" "3" -"spawnflags" "1" -"noise" "world/amb23.wav" -"classname" "target_speaker" -"origin" "-496 1656 -456" -} -{ -"attenuation" "3" -"volume" "1" -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"origin" "-836 1720 -432" -} -{ -"light" "140" -"classname" "light" -"origin" "-546 1704 -452" -} -{ -"light" "140" -"classname" "light" -"origin" "-650 1704 -452" -} -{ -"classname" "light" -"light" "140" -"origin" "-490 1704 -452" -} -{ -"origin" "-1624 960 16" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"origin" "-868 1248 -472" -"classname" "weapon_supershotgun" -} -{ -"spawnflags" "2048" -"targetname" "t40" -"classname" "target_spawner" -"angle" "225" -"origin" "-840 1204 -428" -"target" "misc_gib_leg" -} -{ -"spawnflags" "2048" -"targetname" "t40" -"classname" "target_spawner" -"angle" "225" -"origin" "-820 1232 -428" -"target" "misc_gib_leg" -} -{ -"spawnflags" "2048" -"targetname" "t40" -"classname" "target_spawner" -"angle" "225" -"origin" "-896 1108 -428" -"target" "misc_gib_arm" -} -{ -"spawnflags" "2048" -"targetname" "t40" -"target" "misc_gib_head" -"origin" "-824 1264 -428" -"angle" "225" -"classname" "target_spawner" -} -{ -"spawnflags" "2048" -"targetname" "t40" -"origin" "-928 1076 -428" -"angle" "135" -"target" "misc_gib_arm" -"classname" "target_spawner" -} -{ -"origin" "-824 1316 -504" -"classname" "misc_deadsoldier" -"spawnflags" "2050" -"angle" "45" -} -{ -"origin" "-868 1264 -504" -"angle" "90" -"spawnflags" "2049" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1712 1280 -440" -"classname" "ammo_slugs" -} -{ -"light" "120" -"classname" "light" -"origin" "-288 64 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-384 64 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-544 64 24" -} -{ -"origin" "-470 944 -420" -"targetname" "t46" -"spawnflags" "769" -"classname" "monster_parasite" -} -{ -"spawnflags" "2048" -"origin" "-2028 1904 -432" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-2064 1904 -432" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-2728 520 -416" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-2728 808 -416" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-2304 704 -440" -"classname" "ammo_grenades" -} -{ -"origin" "-2328 688 -456" -"spawnflags" "2048" -"angle" "45" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1640 976 0" -"classname" "misc_deadsoldier" -"angle" "270" -"spawnflags" "2050" -} -{ -"spawnflags" "0" -"origin" "-1468 -828 40" -"classname" "ammo_shells" -} -{ -"origin" "-1000 -216 0" -"target" "t214" -"targetname" "t213" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-856 -216 0" -"target" "t213" -"targetname" "t212" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-1000 -464 0" -"target" "t213" -"targetname" "t214" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-824 -216 16" -"target" "t212" -"spawnflags" "4" -"angle" "180" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"spawnflags" "0" -"origin" "-512 132 12" -"classname" "item_health" -} -{ -"spawnflags" "0" -"origin" "-476 132 12" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-328 1204 16" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "-1764 192 -8" -"angle" "225" -"spawnflags" "2049" -"classname" "misc_deadsoldier" -} -{ -"style" "7" -"targetname" "t211" -"classname" "func_areaportal" -} -{ -"model" "*80" -"target" "t211" -"dmg" "5" -"spawnflags" "2052" -"_minlight" ".18" -"speed" "120" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-2008 472 32" -"light" "200" -"classname" "light" -} -{ -"origin" "-2106 422 108" -"light" "86" -"classname" "light" -} -{ -"classname" "light" -"light" "86" -"origin" "-2058 422 120" -} -{ -"origin" "-1886 428 92" -"light" "86" -"classname" "light" -} -{ -"model" "*81" -"targetname" "t364" -"_minlight" ".18" -"sounds" "1" -"speed" "10" -"classname" "func_train" -"target" "t196" -} -{ -"spawnflags" "2048" -"angle" "135" -"origin" "-1896 510 28" -"target" "t2" -"classname" "key_commander_head" -} -{ -"origin" "-1508 576 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-1408 576 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-1472 512 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-1472 416 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-1472 320 24" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "-1728 224 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1632 224 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1564 224 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1472 224 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1664 320 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1664 416 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1664 512 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1600 576 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1312 576 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1216 576 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1152 544 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1152 448 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1152 352 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1152 256 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1152 160 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1120 64 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-1024 64 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-924 64 24" -} -{ -"light" "120" -"classname" "light" -"origin" "-824 64 24" -} -{ -"origin" "-2048 64 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-732 64 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-192 64 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 64 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 160 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 240 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-600 416 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 448 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 544 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 640 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-640 720 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-704 784 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-604 784 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-512 784 24" -"classname" "light" -"light" "120" -} -{ -"origin" "440 872 116" -"classname" "light" -"light" "125" -} -{ -"origin" "440 784 116" -"classname" "light" -"light" "125" -} -{ -"origin" "-416 784 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-320 780 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-320 864 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-320 960 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-320 1060 24" -"classname" "light" -"light" "100" -} -{ -"origin" "-320 1152 24" -"classname" "light" -"light" "100" -} -{ -"origin" "-320 1252 24" -"classname" "light" -"light" "100" -} -{ -"classname" "light" -"light" "94" -"origin" "-320 1216 132" -} -{ -"origin" "-320 1344 24" -"classname" "light" -"light" "120" -} -{ -"origin" "-220 1344 24" -"classname" "light" -"light" "100" -} -{ -"origin" "-128 1344 24" -"classname" "light" -"light" "100" -} -{ -"origin" "64 1344 24" -"classname" "light" -"light" "100" -} -{ -"origin" "64 1248 24" -"classname" "light" -"light" "100" -} -{ -"origin" "64 1152 24" -"classname" "light" -"light" "100" -} -{ -"origin" "64 1060 24" -"classname" "light" -"light" "100" -} -{ -"origin" "64 924 24" -"classname" "light" -"light" "120" -} -{ -"origin" "64 832 24" -"classname" "light" -"light" "120" -} -{ -"origin" "64 736 24" -"classname" "light" -"light" "120" -} -{ -"origin" "64 640 24" -"classname" "light" -"light" "120" -} -{ -"origin" "64 640 104" -"classname" "light" -"light" "130" -} -{ -"origin" "-2204 344 -424" -"classname" "light" -"light" "80" -} -{ -"origin" "-2252 664 -380" -"classname" "light" -"light" "130" -} -{ -"light" "82" -"classname" "light" -"origin" "-2672 592 -300" -} -{ -"light" "82" -"classname" "light" -"origin" "-2672 736 -300" -} -{ -"light" "82" -"classname" "light" -"origin" "-2616 736 -300" -} -{ -"origin" "-1664 836 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-1664 748 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-1664 664 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-1772 664 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-1892 664 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-1984 664 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-2088 664 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-2184 664 -436" -"classname" "light" -"light" "80" -} -{ -"origin" "-2312 664 -424" -"classname" "light" -"light" "80" -} -{ -"origin" "-2408 664 -424" -"classname" "light" -"light" "80" -} -{ -"origin" "-2408 564 -424" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-2052 180 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2052 264 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2052 344 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2128 344 -424" -} -{ -"light" "100" -"classname" "light" -"origin" "-2308 344 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 344 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 460 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-1664 924 -436" -} -{ -"light" "100" -"classname" "light" -"origin" "-2512 564 -412" -} -{ -"light" "100" -"classname" "light" -"origin" "-2584 564 -396" -} -{ -"light" "100" -"classname" "light" -"origin" "-2688 564 -396" -} -{ -"light" "100" -"classname" "light" -"origin" "-2688 664 -396" -} -{ -"light" "100" -"classname" "light" -"origin" "-2800 872 -396" -} -{ -"light" "100" -"classname" "light" -"origin" "-2584 780 -396" -} -{ -"light" "100" -"classname" "light" -"origin" "-2512 780 -412" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 784 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 880 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 968 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 1064 -412" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 1136 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2408 1216 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2304 1216 -424" -} -{ -"light" "120" -"classname" "light" -"origin" "-2204 1216 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2116 1216 -424" -} -{ -"light" "100" -"classname" "light" -"origin" "-2032 1216 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2032 1292 -424" -} -{ -"light" "80" -"classname" "light" -"origin" "-2032 1372 -424" -} -{ -"light" "120" -"classname" "light" -"origin" "-2032 1480 -412" -} -{ -"light" "120" -"classname" "light" -"origin" "-1824 1600 -440" -} -{ -"origin" "-1248 1536 -456" -"classname" "light" -"light" "120" -} -{ -"light" "120" -"classname" "light" -"origin" "-1728 1600 -456" -} -{ -"light" "120" -"classname" "light" -"origin" "-1600 1600 -456" -} -{ -"light" "120" -"classname" "light" -"origin" "-1472 1600 -456" -} -{ -"light" "120" -"classname" "light" -"origin" "-1344 1600 -456" -} -{ -"light" "120" -"classname" "light" -"origin" "-1248 1600 -456" -} -{ -"light" "120" -"classname" "light" -"origin" "-1248 1452 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-1280 1300 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-1280 1220 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-1280 1152 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-1280 1060 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-1152 1060 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-1040 1060 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-928 1060 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-800 1060 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-800 1160 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-800 1248 -456" -} -{ -"light" "100" -"classname" "light" -"origin" "-800 1328 -456" -} -{ -"light" "140" -"classname" "light" -"origin" "-832 1452 -456" -} -{ -"origin" "-464 1472 -456" -"classname" "light" -"light" "140" -} -{ -"origin" "-464 1560 -456" -"classname" "light" -"light" "140" -} -{ -"origin" "-588 1560 -456" -"classname" "light" -"light" "140" -} -{ -"origin" "-708 1560 -456" -"classname" "light" -"light" "140" -} -{ -"origin" "-832 1656 -456" -"classname" "light" -"light" "140" -} -{ -"origin" "-2052 96 -404" -"classname" "light" -"light" "120" -} -{ -"origin" "-832 1416 -388" -"classname" "light" -"light" "120" -} -{ -"classname" "light" -"light" "96" -"_color" "1.000000 0.000000 0.000000" -"origin" "-960 1680 -288" -} -{ -"origin" "-884 1464 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-920 1516 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-960 1584 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-776 1480 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "125" -"classname" "light" -} -{ -"origin" "-744 1512 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "125" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "-464 1392 -364" -} -{ -"light" "120" -"classname" "light" -"origin" "-464 1488 -364" -} -{ -"light" "120" -"classname" "light" -"origin" "-832 1488 -388" -} -{ -"light" "140" -"classname" "light" -"origin" "-464 1372 -456" -} -{ -"light" "190" -"classname" "light" -"origin" "-1696 424 116" -} -{ -"light" "190" -"classname" "light" -"origin" "-1696 548 116" -} -{ -"classname" "path_corner" -"targetname" "t196" -"origin" "-2064 384 -132" -"target" "t197" -} -{ -"classname" "path_corner" -"origin" "-2064 384 -88" -"targetname" "t197" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "135" -"origin" "-2048 232 -8" -} -{ -"spawnflags" "2048" -"classname" "ammo_shells" -"origin" "-2084 260 16" -} -{ -"spawnflags" "3" -"angle" "0" -"classname" "monster_parasite" -"origin" "-1940 1588 -424" -"targetname" "t195" -} -{ -"spawnflags" "3" -"angle" "0" -"classname" "monster_parasite" -"origin" "-1940 1636 -424" -"targetname" "t195" -} -{ -"classname" "monster_parasite" -"angle" "0" -"spawnflags" "771" -"origin" "-2016 1612 -412" -"targetname" "t195" -} -{ -"model" "*82" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t195" -} -{ -"origin" "-2692 816 -288" -"classname" "light" -"light" "90" -} -{ -"light" "90" -"classname" "light" -"origin" "-2648 816 -288" -} -{ -"light" "90" -"classname" "light" -"origin" "-2692 512 -288" -} -{ -"light" "90" -"classname" "light" -"origin" "-2736 816 -288" -} -{ -"origin" "-1716 716 -312" -"light" "80" -"classname" "light" -} -{ -"model" "*83" -"classname" "func_explosive" -"target" "t184" -"health" "110" -"mass" "200" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-2200 592 16" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-2200 556 16" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-2200 628 16" -} -{ -"angle" "90" -"classname" "misc_insane" -"spawnflags" "2068" -"origin" "-304 -504 104" -"deathtarget" "marduk" -} -{ -"style" "8" -"targetname" "t188" -"classname" "func_areaportal" -} -{ -"model" "*84" -"target" "t188" -"speed" "120" -"spawnflags" "4" -"_minlight" ".18" -"angle" "-1" -"classname" "func_door" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1176 1160 -384" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1176 1248 -384" -} -{ -"origin" "-1568 1428 -384" -"angle" "180" -"spawnflags" "2049" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1680 1280 -440" -"classname" "item_quad" -} -{ -"model" "*85" -"speed" "120" -"wait" "-1" -"targetname" "t184" -"angle" "-1" -"classname" "func_door" -"target" "t234" -} -{ -"origin" "-1696 1284 -432" -"light" "150" -"classname" "light" -} -{ -"model" "*86" -"spawnflags" "2048" -"angle" "90" -"classname" "trigger_monsterjump" -} -{ -"origin" "-1444 -264 96" -"classname" "light" -"light" "140" -} -{ -"spawnflags" "2048" -"origin" "-1444 -272 40" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-1444 -308 40" -"classname" "item_health" -} -{ -"item" "ammo_shells" -"origin" "-904 64 20" -"spawnflags" "48" -"angle" "360" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"origin" "-2168 656 144" -"classname" "light" -"light" "110" -} -{ -"classname" "light" -"light" "110" -"origin" "-1848 656 144" -} -{ -"origin" "-1448 -800 96" -"classname" "light" -"light" "80" -} -{ -"origin" "-1444 -696 88" -"light" "80" -"classname" "light" -} -{ -"origin" "-140 -512 100" -"classname" "light" -"light" "82" -} -{ -"origin" "44 -176 100" -"light" "82" -"classname" "light" -} -{ -"classname" "light" -"light" "130" -"origin" "-640 276 112" -} -{ -"origin" "-592 408 12" -"targetname" "t173" -"target" "t172" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-688 408 12" -"target" "t173" -"targetname" "t172" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "468 896 40" -"classname" "light" -"light" "64" -} -{ -"origin" "468 676 40" -"light" "64" -"classname" "light" -} -{ -"origin" "-1696 1956 -320" -"classname" "light" -"light" "130" -} -{ -"origin" "-1440 1956 -320" -"light" "130" -"classname" "light" -} -{ -"origin" "-1896 510 60" -"light" "120" -"classname" "light" -} -{ -"classname" "light" -"light" "84" -"origin" "-800 -216 132" -} -{ -"classname" "light" -"light" "110" -"origin" "-896 64 220" -} -{ -"origin" "-1152 320 220" -"light" "110" -"classname" "light" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t138" -"target" "t139" -"origin" "-2048 656 -456" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t139" -"origin" "-1656 664 -456" -"target" "t335" -} -{ -"classname" "misc_insane" -"angle" "0" -"spawnflags" "16" -"origin" "-88 728 16" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t135" -"target" "t136" -"origin" "-156 696 0" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -"targetname" "t136" -"target" "t135" -"origin" "-156 912 0" -} -{ -"classname" "misc_insane" -"angle" "90" -"target" "t135" -"origin" "-156 672 16" -} -{ -"light" "120" -"classname" "light" -"origin" "-216 768 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "120" -"classname" "light" -"origin" "-336 680 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"light" "120" -"classname" "light" -"origin" "-128 880 52" -} -{ -"classname" "light" -"light" "120" -"origin" "-128 688 52" -} -{ -"origin" "64 504 228" -"classname" "light" -"light" "110" -} -{ -"origin" "64 440 228" -"classname" "light" -"light" "110" -} -{ -"origin" "64 384 228" -"classname" "light" -"light" "110" -} -{ -"origin" "64 344 180" -"classname" "light" -"light" "110" -} -{ -"origin" "64 320 132" -"classname" "light" -"light" "110" -} -{ -"origin" "-1712 648 -432" -"target" "t134" -"targetname" "t28" -"classname" "trigger_relay" -"spawnflags" "3840" // b#7: added this -} -{ -"classname" "light" -"light" "120" -"origin" "-1216 512 204" -} -{ -"light" "150" -"classname" "light" -"origin" "-1444 -292 76" -} -{ -"classname" "light" -"light" "160" -"origin" "-1248 -290 96" -} -{ -"classname" "light" -"light" "130" -"origin" "-396 64 100" -} -{ -"light" "100" -"classname" "light" -"origin" "-612 -496 208" -} -{ -"spawnflags" "32" -"target" "t173" -"classname" "misc_insane" -"angle" "90" -"origin" "-640 476 28" -"deathtarget" "marduk" -} -{ -"targetname" "t46" -"classname" "monster_parasite" -"angle" "90" -"spawnflags" "1" -"origin" "-496 980 -420" -} -{ -"targetname" "t46" -"classname" "monster_parasite" -"angle" "90" -"spawnflags" "1" -"origin" "-444 980 -420" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#7: added this -"dmg" "120" -"targetname" "t118" -"origin" "-1884 664 -228" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#7: added this -"dmg" "50" -"targetname" "t117" -"origin" "-1664 660 -228" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#7: added this -"dmg" "120" -"targetname" "t116" -"origin" "-1664 868 -228" -} -{ -"spawnflags" "20" -"angle" "180" -"classname" "misc_insane" -"origin" "-1664 660 -232" -"deathtarget" "marduk" -} -{ -"spawnflags" "16" -"angle" "90" -"classname" "misc_insane" -"origin" "-1884 664 -232" -"deathtarget" "marduk" -} -{ -"classname" "misc_insane" -"angle" "270" -"spawnflags" "4" -"origin" "-1664 868 -232" -"deathtarget" "marduk" -} -{ -"classname" "misc_insane" -"spawnflags" "4" -"angle" "180" -"origin" "-2084 660 -236" -"target" "t138" -"deathtarget" "marduk" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2050" -"angle" "90" -"origin" "-2672 552 -432" -} -{ -"light" "96" -"classname" "light" -"origin" "-440 1076 -332" -} -{ -"light" "96" -"classname" "light" -"origin" "-440 1016 -332" -} -{ -"light" "96" -"classname" "light" -"origin" "-440 956 -332" -} -{ -"light" "96" -"classname" "light" -"origin" "-440 904 -332" -} -{ -"light" "96" -"classname" "light" -"origin" "-440 844 -332" -} -{ -"light" "96" -"classname" "light" -"origin" "-448 784 -332" -} -{ -"spawnflags" "2048" -"classname" "weapon_hyperblaster" -"origin" "-1248 -320 48" -} -{ -"spawnflags" "2048" -"classname" "item_armor_body" -//"target" "t97" // never used -"origin" "-1248 -272 48" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2052" -"origin" "-352 1216 -8" -"angle" "45" -} -{ -"origin" "116 704 12" -"target" "t77" -"targetname" "t78" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "68 872 20" -"target" "t78" -"targetname" "t77" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "64 644 28" -"target" "t77" -"angle" "90" -"classname" "misc_insane" -"item" "ammo_slugs" -"deathtarget" "marduk" -} -{ -"spawnflags" "2048" -"origin" "64 680 92" -"message" "Locate Repair facility.\nSteal Commander's head." -"classname" "target_help" -"targetname" "t233" -} -{ -"origin" "-1488 -544 144" -"classname" "light" -"light" "96" -} -{ -"origin" "-1488 -620 144" -"classname" "light" -"light" "96" -} -{ -"origin" "-1488 -472 144" -"light" "96" -"classname" "light" -} -{ -"origin" "32 -232 92" -"classname" "light" -"light" "150" -} -{ -"origin" "-200 -504 92" -"light" "150" -"classname" "light" -} -{ -"origin" "-1436 -744 92" -"light" "150" -"classname" "light" -} -{ -"delay" "1.5" -"origin" "-1592 1660 -344" -"message" "Forcefields deactivated." -"targetname" "t32" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"style" "9" -"targetname" "t67" -"classname" "func_areaportal" -} -{ -"model" "*87" -"spawnflags" "2048" -"killtarget" "for1" -"targetname" "t31" -"target" "t32" -"classname" "trigger_counter" -} -{ -"spawnflags" "2048" -"origin" "-1416 -744 72" -"killtarget" "p2" -"targetname" "t58" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-140 -472 168" -"target" "t66" -"targetname" "t65" -"classname" "trigger_relay" -} -{ -"origin" "-20 -160 168" -"target" "t66" -"targetname" "t63" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"spawnflags" "2048" -"origin" "-168 -472 168" -"target" "t65" -"targetname" "t64" -"classname" "trigger_relay" -} -{ -"origin" "4 -160 168" -"target" "t63" -"targetname" "t62" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"model" "*88" -"spawnflags" "4" -"target" "t67" -"_minlight" ".18" -"angle" "-1" -"classname" "func_door" -"speed" "120" -} -{ -"origin" "-1696 624 -436" -"target" "t55" -"targetname" "t54" -"delay" ".6" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-1656 624 -436" -"target" "t54" -"targetname" "t28" -"delay" ".6" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-1732 624 -436" -"target" "t56" -"targetname" "t55" -"delay" ".6" -"classname" "trigger_relay" -"spawnflags" "2048" // b#7: added this -} -{ -"light" "82" -"classname" "light" -"origin" "-2616 592 -300" -} -{ -"light" "90" -"classname" "light" -"origin" "-2736 712 -288" -} -{ -"origin" "-2736 512 -288" -"classname" "light" -"light" "90" -} -{ -"origin" "-2736 568 -288" -"classname" "light" -"light" "90" -} -{ -"origin" "-2736 616 -288" -"classname" "light" -"light" "90" -} -{ -"origin" "-2736 664 -288" -"classname" "light" -"light" "90" -} -{ -"origin" "-2684 664 -300" -"classname" "light" -"light" "82" -} -{ -"origin" "-2736 760 -288" -"classname" "light" -"light" "90" -} -{ -"origin" "-2648 512 -288" -"classname" "light" -"light" "90" -} -{ -"origin" "-2664 776 -188" -"classname" "light" -"light" "92" -} -{ -"origin" "-2688 732 -188" -"classname" "light" -"light" "92" -} -{ -"origin" "-2688 664 -188" -"classname" "light" -"light" "92" -} -{ -"origin" "-2688 604 -188" -"classname" "light" -"light" "92" -} -{ -"origin" "-2672 552 -188" -"classname" "light" -"light" "92" -} -{ -"origin" "-2408 624 -332" -"classname" "light" -"light" "92" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2592 776 -240" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2480 784 -336" -} -{ -"angle" "90" -"origin" "-1368 -320 56" -"classname" "misc_deadsoldier" -"spawnflags" "2049" -} -{ -"origin" "24 -408 166" -"angle" "-2" -"targetname" "t51" -"sounds" "1" -"classname" "target_splash" -"spawnflags" "3840" // b#7: never used -} -{ -"origin" "-368 -504 166" -"angle" "-2" -"targetname" "t52" -"sounds" "1" -"classname" "target_splash" -"spawnflags" "3840" // b#7: never used -} -{ -"dmg" "7" -"origin" "-368 -504 168" -"targetname" "t65" -"spawnflags" "2050" // b#7: 2 -> 2050 -"target" "t50" -"classname" "target_laser" -} -{ -"model" "*89" -"spawnflags" "2049" // b#7: 1 -> 2049 -"targetname" "t50" -"target" "t48" -"classname" "func_train" -} -{ -"origin" "-304 -452 48" -"target" "t49" -"targetname" "t48" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-304 -570 48" -"target" "t48" -"targetname" "t49" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"light" "74" -"classname" "light" -"origin" "-1688 1848 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1688 1800 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1676 1756 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1652 1728 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1620 1704 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1568 1700 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1508 1704 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1476 1728 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1440 1800 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1440 1848 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1452 1756 -328" -} -{ -"origin" "-1948 1900 -328" -"classname" "light" -"light" "74" -} -{ -"light" "74" -"classname" "light" -"origin" "-1948 1848 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1948 1800 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1936 1756 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1912 1728 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1880 1704 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1828 1700 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1768 1704 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1736 1728 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1700 1800 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1700 1848 -328" -} -{ -"light" "74" -"classname" "light" -"origin" "-1712 1756 -328" -} -{ -"_color" "1.000000 0.000000 0.000000" -"origin" "-1948 1900 -268" -"classname" "light" -"light" "120" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "95" -"classname" "light" -"origin" "-1948 1800 -268" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "95" -"classname" "light" -"origin" "-1912 1728 -268" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "95" -"classname" "light" -"origin" "-1828 1700 -268" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "95" -"classname" "light" -"origin" "-1736 1728 -268" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "95" -"classname" "light" -"origin" "-1700 1800 -268" -} -{ -"light" "82" -"classname" "light" -"origin" "-832 1088 -388" -} -{ -"style" "10" -"targetname" "t47" -"classname" "func_areaportal" -} -{ -"model" "*90" -"target" "t47" -"_minlight" ".18" -"angle" "-1" -"spawnflags" "0" -"classname" "func_door" -"speed" "120" -} -{ -"model" "*91" -"target" "t46" -"_minlight" ".18" -"angle" "-1" -"spawnflags" "8" -"classname" "func_door" -"speed" "120" -} -{ -"style" "11" -"targetname" "t46" -"classname" "func_areaportal" -} -{ -"model" "*92" -"targetname" "t56" -"classname" "func_explosive" -"mass" "50" -"target" "t115" -} -{ -"model" "*93" -"targetname" "t55" -"classname" "func_explosive" -"mass" "50" -"target" "t118" -} -{ -"model" "*94" -"targetname" "t54" -"classname" "func_explosive" -"mass" "50" -"target" "t117" -} -{ -"light" "70" -"classname" "light" -"origin" "-1936 752 116" -} -{ -"light" "70" -"classname" "light" -"origin" "-1948 888 116" -} -{ -"light" "70" -"classname" "light" -"origin" "-2028 888 116" -} -{ -"light" "70" -"classname" "light" -"origin" "-2080 888 116" -} -{ -"light" "70" -"classname" "light" -"origin" "-2080 832 116" -} -{ -"classname" "light" -"light" "94" -"origin" "-512 64 132" -} -{ -"light" "130" -"classname" "light" -"origin" "64 224 100" -} -{ -"light" "110" -"classname" "light" -"origin" "64 256 132" -} -{ -"origin" "-2032 1384 -332" -"classname" "light" -"light" "92" -} -{ -"classname" "trigger_relay" -"delay" "7" -"targetname" "t42" -"target" "t44" -"origin" "-750 1656 -438" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"delay" "6.5" -"targetname" "t42" -"target" "t43" -"origin" "-776 1668 -438" -"spawnflags" "2048" -} -{ -"classname" "light" -"light" "120" -"origin" "-876 1696 -410" -} -{ -"classname" "trigger_relay" -"delay" "2" -"targetname" "t42" -"target" "t44" -"origin" "-750 1684 -432" -"spawnflags" "2048" -} -{ -"classname" "trigger_relay" -"delay" "1" -"targetname" "t42" -"target" "t43" -"origin" "-776 1698 -432" -"spawnflags" "2048" -} -{ -"dmg" "5" -"angle" "-2" -"spawnflags" "2114" -"classname" "target_laser" -"origin" "-546 1760 -340" -"targetname" "t44" -} -{ -"dmg" "5" -"angle" "-2" -"spawnflags" "2114" -"classname" "target_laser" -"origin" "-650 1760 -340" -"targetname" "t43" -} -{ -"origin" "-546 1759 -404" -"classname" "misc_insane" -"spawnflags" "16" -"angle" "270" -"deathtarget" "marduk" -} -{ -"origin" "-650 1760 -412" -"classname" "misc_insane" -"spawnflags" "16" -"angle" "270" -"deathtarget" "marduk" -} -{ -"style" "12" -"targetname" "t41" -"classname" "func_areaportal" -} -{ -"model" "*95" -"target" "t41" -"spawnflags" "8" -"angle" "-1" -"_minlight" ".18" -"classname" "func_door" -"speed" "120" -} -{ -"model" "*96" -"target" "t40" -"spawnflags" "8" -"_minlight" ".18" -"angle" "-1" -"classname" "func_door" -"speed" "120" -} -{ -"style" "13" -"targetname" "t40" -"classname" "func_areaportal" -} -{ -"origin" "-1568 1396 -368" -"classname" "light" -"light" "195" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1440 1396 -368" -"_color" "1.000000 0.000000 0.000000" -"light" "195" -"classname" "light" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "195" -"classname" "light" -"origin" "-1696 1396 -368" -} -{ -"angle" "90" -"origin" "-1696 1436 -464" -"spawnflags" "2064" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1568 1436 -436" -"angle" "90" -"spawnflags" "16" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"origin" "-1696 1416 -340" -"classname" "misc_insane" -"spawnflags" "20" -"angle" "90" -} -{ -"origin" "-1440 1436 -436" -"angle" "90" -"spawnflags" "20" -"classname" "misc_insane" -"deathtarget" "marduk" -} -{ -"model" "*97" -"wait" "-1" -"_minlight" ".2" -"dmg" "15" -"sounds" "3" -"speed" "120" -"angle" "-1" -"classname" "func_door" -"target" "t259" -"targetname" "t275" -"spawnflags" "16" -} -{ -"style" "14" -"targetname" "t37" -"classname" "func_areaportal" -} -{ -"model" "*98" -"targetname" "t35" -"target" "t34" -"spawnflags" "2049" // b#7: 1 -> 2049 -"speed" "100" -"classname" "func_train" -} -{ -"origin" "-28 -344 48" -"target" "t34" -"targetname" "t33" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "88 -344 48" -"target" "t33" -"targetname" "t34" -"classname" "path_corner" -"spawnflags" "2048" // b#7: added this -} -{ -"targetname" "t63" -"origin" "24 -408 168" -"target" "t35" -"spawnflags" "2050" -"classname" "target_laser" -"dmg" "7" -} -{ -"model" "*99" -"spawnflags" "2055" -"classname" "func_wall" -"targetname" "t32" -} -{ -"model" "*100" -"classname" "func_wall" -"spawnflags" "2055" -"targetname" "t32" -} -{ -"origin" "-584 1760 -268" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-546 1722 -268" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-508 1762 -268" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"_color" "1.000000 0.000000 0.000000" -"origin" "-546 1800 -268" -} -{ -"origin" "-688 1760 -268" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-650 1722 -268" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-612 1762 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "82" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"_color" "1.000000 0.000000 0.000000" -"origin" "-698 1800 -268" -} -{ -"origin" "-856 1640 -312" -"light" "85" -"classname" "light" -} -{ -"model" "*101" -"classname" "trigger_multiple" -"target" "t30" -"angle" "270" -} -{ -"classname" "target_changelevel" -"map" "hangar1$lab" -"targetname" "t30" -"origin" "16 240 112" -} -{ -"light" "130" -"classname" "light" -"origin" "-624 -496 108" -} -{ -"origin" "-544 -568 108" -"classname" "light" -"light" "130" -} -{ -"origin" "-516 -548 208" -"classname" "light" -"light" "100" -} -{ -"model" "*102" -"origin" "-1290 -301 100" -"_minlight" ".18" -"classname" "func_door_rotating" -"spawnflags" "2208" -"distance" "64" -"speed" "96" -"targetname" "t27" -} -{ -"model" "*103" -"classname" "func_explosive" -"dmg" "15" -"targetname" "t28" -"mass" "50" -"target" "t116" -} -{ -"model" "*104" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t28" -"delay" "0" -} -{ -"light" "130" -"classname" "light" -"origin" "-624 -368 108" -} -{ -"light" "100" -"classname" "light" -"origin" "-456 -616 200" -} -{ -"model" "*105" -"origin" "-1290 -285 100" -"_minlight" ".18" -"targetname" "t26" -"speed" "96" -"distance" "64" -"spawnflags" "2208" -"classname" "func_door_rotating" -} -{ -"wait" "8" -"origin" "-1326 -274 98" -"spawnflags" "2049" -"target" "t26" -"classname" "func_timer" -"random" "7" -} -{ -"wait" "10" -"origin" "-1326 -308 98" -"spawnflags" "2049" -"target" "t27" -"random" "9" -"classname" "func_timer" -} -{ -"spawnflags" "2048" -"origin" "-1388 -332 104" -"targetname" "t25" -"angle" "-2" -"sounds" "1" -"classname" "target_splash" -} -{ -"wait" "5" -"origin" "-1440 -396 112" -"target" "t25" -"spawnflags" "2049" -"random" "4" -"classname" "func_timer" -} -{ -"model" "*106" -"origin" "-1388 -332 112" -"dmg" "60" -"speed" "350" -"spawnflags" "2075" -"classname" "func_rotating" -"_minlight" ".3" -} -{ -"origin" "-1432 1852 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "92 -344 224" -"classname" "light" -"light" "120" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-304 -572 224" -"classname" "light" -"light" "120" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-24 688 236" -"classname" "light" -"light" "120" -} -{ -"origin" "-24 880 236" -"classname" "light" -"light" "120" -} -{ -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -"light" "165" -"origin" "-546 1760 -400" -} -{ -"_color" "1.000000 0.000000 0.000000" -"classname" "light" -"light" "165" -"origin" "-650 1760 -400" -} -{ -"origin" "-404 1740 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-404 1344 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-404 1600 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-404 1480 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "96" -"classname" "light" -} -{ -"origin" "-384 1536 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "130" -"classname" "light" -} -{ -"classname" "light" -"light" "125" -"_color" "1.000000 0.000000 0.000000" -"origin" "-520 1480 -288" -} -{ -"classname" "light" -"light" "125" -"_color" "1.000000 0.000000 0.000000" -"origin" "-552 1512 -288" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.000000 0.000000" -"origin" "-544 1408 -288" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.000000 0.000000" -"origin" "-384 1408 -288" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.000000 0.000000" -"origin" "-384 1664 -288" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1000 1680 -288" -} -{ -"classname" "light" -"light" "130" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1000 1584 -288" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-904 1248 -384" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1288 -276" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1344 -276" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1400 -276" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1456 -276" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1512 -276" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1568 -276" -} -{ -"light" "110" -"classname" "light" -"origin" "-464 1632 -276" -} -{ -"origin" "-464 1248 -276" -"classname" "light" -"light" "110" -} -{ -"origin" "-832 1608 -276" -"classname" "light" -"light" "110" -} -{ -"origin" "-832 1544 -276" -"classname" "light" -"light" "110" -} -{ -"origin" "-832 1480 -276" -"classname" "light" -"light" "110" -} -{ -"origin" "-832 1416 -276" -"classname" "light" -"light" "110" -} -{ -"origin" "-832 1416 -324" -"classname" "light" -"light" "110" -} -{ -"origin" "-832 1344 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-464 1292 -364" -"classname" "light" -"light" "120" -} -{ -"origin" "-832 1368 -388" -"classname" "light" -"light" "120" -} -{ -"origin" "-536 1072 -336" -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1248 1368 -388" -"classname" "light" -"light" "120" -} -{ -"origin" "-1248 1416 -388" -"classname" "light" -"light" "120" -} -{ -"origin" "-832 1280 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-832 1216 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-832 1152 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-888 1088 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-952 1088 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1024 1088 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1096 1088 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1168 1088 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1248 1088 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1248 1160 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1248 1224 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1248 1288 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1248 1352 -388" -"classname" "light" -"light" "82" -} -{ -"origin" "-1248 1528 -252" -"classname" "light" -"light" "110" -} -{ -"origin" "-648 1512 -288" -"_color" "1.000000 0.000000 0.000000" -"light" "125" -"classname" "light" -} -{ -"origin" "-992 1160 -384" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-1088 1160 -384" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-904 1160 -384" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-1176 1344 -384" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2200 1288 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1960 1384 -336" -} -{ -"light" "125" -"classname" "light" -"origin" "-1824 1600 -392" -} -{ -"origin" "-1696 1864 -252" -"classname" "light" -"light" "64" -} -{ -"origin" "-1952 1936 -392" -"classname" "light" -"light" "150" -} -{ -"light" "125" -"classname" "light" -"origin" "-1888 1600 -372" -} -{ -"light" "125" -"classname" "light" -"origin" "-1960 1600 -356" -} -{ -"light" "125" -"classname" "light" -"origin" "-2032 1600 -348" -} -{ -"light" "125" -"classname" "light" -"origin" "-2032 1528 -340" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1464 -340" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "75" -"classname" "light" -"origin" "-1696 1864 -248" -} -{ -"classname" "light" -"light" "75" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1440 1864 -248" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "120" -"classname" "light" -"origin" "-2120 1696 -256" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "120" -"classname" "light" -"origin" "-2120 1568 -256" -} -{ -"classname" "light" -"light" "120" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2120 1824 -256" -} -{ -"origin" "-1688 1800 -268" -"classname" "light" -"light" "95" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1652 1728 -268" -"classname" "light" -"light" "95" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1568 1700 -268" -"classname" "light" -"light" "95" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1476 1728 -268" -"classname" "light" -"light" "95" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1440 1800 -268" -"classname" "light" -"light" "95" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1432 1804 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1420 1760 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1364 1708 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1396 1732 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1312 1704 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1252 1708 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1220 1732 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1196 1760 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1184 1804 -328" -"classname" "light" -"light" "74" -} -{ -"origin" "-1184 1852 -328" -"classname" "light" -"light" "74" -} -{ -"light" "95" -"classname" "light" -"origin" "-1184 1804 -268" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "95" -"classname" "light" -"origin" "-1432 1804 -268" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "95" -"classname" "light" -"origin" "-1220 1732 -268" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "95" -"classname" "light" -"origin" "-1396 1732 -268" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "95" -"classname" "light" -"origin" "-1312 1704 -268" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "100" -"classname" "light" -"origin" "-1976 1532 -268" -} -{ -"origin" "-1400 1600 -252" -"classname" "light" -"light" "110" -} -{ -"origin" "-1568 1472 -284" -"classname" "light" -"light" "165" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1696 1472 -284" -"classname" "light" -"light" "165" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-1696 1408 -444" -"classname" "light" -"light" "160" -"_color" "1.000000 0.000000 0.000000" -} -{ -"light" "64" -"classname" "light" -"origin" "-1440 1864 -252" -} -{ -"classname" "light" -"light" "150" -"origin" "-1440 1928 -408" -} -{ -"light" "130" -"classname" "light" -"origin" "-464 1248 -332" -} -{ -"light" "110" -"classname" "light" -"origin" "-1248 1424 -308" -} -{ -"light" "110" -"classname" "light" -"origin" "-1248 1424 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1248 1464 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1248 1568 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1280 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1248 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1336 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1464 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1528 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1592 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1656 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1720 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1776 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1832 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1896 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-1960 1600 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1848 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1784 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1720 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1656 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1592 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1528 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1472 -252" -} -{ -"light" "110" -"classname" "light" -"origin" "-2032 1388 -352" -} -{ -"light" "92" -"classname" "light" -"origin" "-2032 1328 -332" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "160" -"classname" "light" -"origin" "-1568 1408 -444" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "165" -"classname" "light" -"origin" "-1440 1472 -284" -} -{ -"classname" "light" -"light" "160" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1440 1408 -444" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1960 1288 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-904 1344 -384" -} -{ -"origin" "-1152 448 220" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1960 1192 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2008 1144 -336" -} -{ -"light" "92" -"classname" "light" -"origin" "-2032 1280 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2032 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2080 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2144 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2208 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2272 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2336 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 1216 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 1144 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 1072 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 1008 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 936 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 864 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2408 792 -332" -} -{ -"origin" "-1664 1120 -392" -"classname" "light" -"light" "130" -} -{ -"light" "130" -"classname" "light" -"origin" "-1664 1120 56" -} -{ -"origin" "-536 856 -336" -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-656 856 -336" -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -} -{ -"origin" "-2120 160 -336" -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1976 160 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1976 256 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1976 352 -336" -} -{ -"light" "92" -"classname" "light" -"origin" "-2048 224 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2048 288 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2048 344 -332" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2048 416 -336" -} -{ -"light" "92" -"classname" "light" -"origin" "-2048 160 -332" -} -{ -"light" "92" -"classname" "light" -"origin" "-2048 80 -332" -} -{ -"spawnflags" "2048" -"angle" "90" -"origin" "-2008 480 53" -"targetname" "t2" -"classname" "monster_commander_body" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2296 1288 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2392 1288 -336" -} -{ -"origin" "-2104 1384 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2480 1200 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2336 1104 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2336 1008 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"light" "130" -"classname" "light" -"origin" "-864 784 -392" -} -{ -"origin" "-864 784 56" -"classname" "light" -"light" "130" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2104 1144 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2200 1144 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2296 1144 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2336 912 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2336 816 -336" -} -{ -"origin" "-2480 1104 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2480 1008 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2480 912 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2592 552 -240" -"_color" "1.000000 0.000000 0.000000" -"light" "130" -"classname" "light" -} -{ -"origin" "-2048 -48 -392" -"classname" "light" -"light" "150" -} -{ -"origin" "-1664 1052 -324" -"classname" "light" -"light" "120" -} -{ -"light" "130" -"classname" "light" -"origin" "-2184 664 -380" -} -{ -"origin" "-2320 664 -332" -"classname" "light" -"light" "82" -} -{ -"origin" "-1984 712 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1984 612 -312" -} -{ -"origin" "-1712 884 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1612 884 -312" -} -{ -"origin" "-1712 824 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1612 824 -312" -} -{ -"origin" "-1712 764 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1612 764 -312" -} -{ -"origin" "-1716 616 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1764 716 -312" -} -{ -"origin" "-1820 616 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1820 716 -312" -} -{ -"origin" "-1900 612 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1900 712 -312" -} -{ -"origin" "-2064 612 -312" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-2064 712 -312" -} -{ -"origin" "-1612 944 -312" -"light" "80" -"classname" "light" -} -{ -"_color" "1.000000 0.015686 0.015686" -"origin" "-1984 664 -308" -"light" "85" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "-2048 -48 56" -} -{ -"_color" "1.000000 0.015686 0.015686" -"classname" "light" -"light" "85" -"origin" "-1664 760 -308" -} -{ -"_color" "1.000000 0.015686 0.015686" -"classname" "light" -"light" "85" -"origin" "-1776 664 -308" -} -{ -"classname" "light" -"light" "80" -"origin" "-1712 944 -312" -} -{ -"_color" "1.000000 0.015686 0.015686" -"light" "85" -"classname" "light" -"origin" "-1664 968 -308" -} -{ -"origin" "-1660 656 -236" -"_color" "1.000000 0.000000 0.000000" -"light" "240" -"classname" "light" -} -{ -"origin" "-1884 664 -236" -"_color" "1.000000 0.000000 0.000000" -"light" "240" -"classname" "light" -} -{ -"origin" "-2080 664 -236" -"_color" "1.000000 0.000000 0.000000" -"light" "240" -"classname" "light" -} -{ -"light" "70" -"classname" "light" -"origin" "-2080 752 116" -} -{ -"light" "82" -"classname" "light" -"origin" "-1860 840 136" -} -{ -"origin" "-1780 840 104" -"classname" "light" -"light" "130" -} -{ -"origin" "-1664 1012 104" -"classname" "light" -"light" "130" -} -{ -"classname" "light" -"light" "64" -"origin" "-1664 1092 252" -} -{ -"origin" "-1724 1088 268" -"classname" "light" -"light" "105" -} -{ -"light" "105" -"classname" "light" -"origin" "-1604 1088 268" -} -{ -"origin" "-1604 1160 268" -"classname" "light" -"light" "105" -} -{ -"light" "105" -"classname" "light" -"origin" "-1724 1160 268" -} -{ -"classname" "light" -"light" "64" -"origin" "-1664 1052 184" -} -{ -"classname" "light" -"light" "64" -"origin" "-1664 1052 252" -} -{ -"origin" "-1728 1136 -144" -"light" "120" -"classname" "light" -} -{ -"origin" "-1600 1136 -144" -"light" "120" -"classname" "light" -} -{ -"origin" "-1664 988 -324" -"classname" "light" -"light" "120" -} -{ -"origin" "-1664 972 136" -"classname" "light" -"light" "82" -} -{ -"origin" "-1664 912 136" -"classname" "light" -"light" "82" -} -{ -"origin" "-1744 840 136" -"classname" "light" -"light" "82" -} -{ -"origin" "-1664 840 136" -"classname" "light" -"light" "82" -} -{ -"origin" "-1960 840 136" -"classname" "light" -"light" "95" -} -{ -"origin" "-1912 840 136" -"classname" "light" -"light" "95" -} -{ -"origin" "-2008 840 136" -"classname" "light" -"light" "95" -} -{ -"origin" "-1768 1600 -408" -"classname" "light" -"light" "125" -} -{ -"origin" "-2408 704 -332" -"classname" "light" -"light" "92" -} -{ -"origin" "-2408 536 -332" -"classname" "light" -"light" "92" -} -{ -"origin" "-2408 440 -332" -"classname" "light" -"light" "92" -} -{ -"origin" "-2408 344 -332" -"classname" "light" -"light" "92" -} -{ -"origin" "-2312 344 -332" -"classname" "light" -"light" "92" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2336 512 -336" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.000000 0.000000" -"origin" "-2240 416 -336" -} -{ -"origin" "-2480 544 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2480 416 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2480 320 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2432 272 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2336 272 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2240 272 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"origin" "-2200 344 -332" -"classname" "light" -"light" "92" -} -{ -"origin" "-2120 344 -332" -"classname" "light" -"light" "92" -} -{ -"origin" "-512 760 -332" -"classname" "light" -"light" "96" -} -{ -"origin" "-440 1136 -332" -"classname" "light" -"light" "96" -} -{ -"origin" "-576 760 -332" -"classname" "light" -"light" "96" -} -{ -"origin" "-640 760 -332" -"classname" "light" -"light" "96" -} -{ -"origin" "-720 760 -332" -"classname" "light" -"light" "96" -} -{ -"origin" "-2144 416 -336" -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.000000 0.000000" -"light" "150" -"classname" "light" -"origin" "-536 1168 -336" -} -{ -"light" "140" -"classname" "light" -"origin" "-2448 664 -348" -} -{ -"light" "130" -"classname" "light" -"origin" "-2048 20 -324" -} -{ -"classname" "light" -"light" "240" -"_color" "1.000000 0.000000 0.000000" -"origin" "-1664 864 -236" -} -{ -"model" "*107" -"spawnflags" "0" -"target" "t37" -"classname" "func_door" -"angle" "-1" -"speed" "120" -"sounds" "3" -"dmg" "15" -"_minlight" ".2" -} -{ -"classname" "light" -"light" "130" -"origin" "-2048 88 136" -} -{ -"classname" "light" -"light" "130" -"origin" "-1888 224 136" -} -{ -"origin" "-2048 96 164" -"light" "94" -"classname" "light" -} -{ -"origin" "-2048 96 220" -"light" "94" -"classname" "light" -} -{ -"origin" "-2048 160 220" -"light" "94" -"classname" "light" -} -{ -"origin" "-2048 224 220" -"light" "94" -"classname" "light" -} -{ -"origin" "-1984 224 220" -"light" "94" -"classname" "light" -} -{ -"origin" "-1920 224 220" -"light" "94" -"classname" "light" -} -{ -"origin" "-1664 224 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-904 844 268" -"classname" "light" -"light" "115" -} -{ -"light" "115" -"classname" "light" -"origin" "-832 844 268" -} -{ -"light" "115" -"classname" "light" -"origin" "-904 724 268" -} -{ -"origin" "-832 724 268" -"classname" "light" -"light" "115" -} -{ -"classname" "light" -"light" "74" -"origin" "-796 784 252" -} -{ -"classname" "light" -"light" "74" -"origin" "-836 784 252" -} -{ -"classname" "light" -"light" "74" -"origin" "-796 784 184" -} -{ -"origin" "-880 720 -144" -"light" "120" -"classname" "light" -} -{ -"origin" "-880 848 -144" -"light" "120" -"classname" "light" -} -{ -"_color" "1.000000 0.022727 0.022727" -"light" "150" -"classname" "light" -"origin" "-2104 352 208" -} -{ -"origin" "-2008 668 220" -"classname" "light" -"light" "85" -} -{ -"origin" "-2008 372 144" -"classname" "light" -"light" "110" -} -{ -"origin" "-2132 426 148" -"sounds" "1" -"targetname" "mac2" -"classname" "target_splash" -"spawnflags" "2048" // b#7: added this -} -{ -"origin" "-1848 600 220" -"classname" "light" -"light" "150" -"_color" "1.000000 0.022727 0.022727" -} -{ -"origin" "-1848 424 220" -"classname" "light" -"light" "150" -"_color" "1.000000 0.022727 0.022727" -} -{ -"targetname" "t201" -"spawnflags" "2048" -"origin" "-2172 504 130" -"random" "4" -"target" "mac2" -"classname" "func_timer" -"wait" "5" -} -{ -"model" "*108" -"origin" "-2132 425 136" -"_minlight" ".18" -"targetname" "mac2" -"speed" "78" -"distance" "64" -"spawnflags" "162" -"classname" "func_door_rotating" -} -{ -"model" "*109" -"origin" "-1872 422 78" -"_minlight" ".18" -"distance" "-64" -"speed" "96" -"targetname" "mac1" -"spawnflags" "32" -"classname" "func_door_rotating" -} -{ -"targetname" "t201" -"origin" "-1848 576 72" -"target" "mac1" -"random" "4" -"spawnflags" "2048" -"classname" "func_timer" -"wait" "5" -} -{ -"origin" "-2080 688 116" -"classname" "light" -"light" "70" -} -{ -"origin" "-1868 888 116" -"classname" "light" -"light" "70" -} -{ -"origin" "-1896 792 116" -"classname" "light" -"light" "70" -} -{ -"origin" "-2008 736 136" -"classname" "light" -"light" "95" -} -{ -"_color" "1.000000 0.022727 0.022727" -"light" "150" -"classname" "light" -"origin" "-1912 352 208" -} -{ -"_color" "1.000000 0.022727 0.022727" -"light" "150" -"classname" "light" -"origin" "-2168 600 220" -} -{ -"origin" "-2168 424 220" -"_color" "1.000000 0.022727 0.022727" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "86" -"origin" "-1918 408 108" -} -{ -"origin" "-2106 422 156" -"light" "86" -"classname" "light" -} -{ -"origin" "-1968 424 16" -"light" "96" -"classname" "light" -} -{ -"origin" "-2048 424 16" -"classname" "light" -"light" "96" -} -{ -"origin" "-1968 512 -8" -"classname" "light" -"light" "96" -} -{ -"origin" "-2048 512 -8" -"light" "96" -"classname" "light" -} -{ -"origin" "-2008 608 216" -"classname" "light" -"light" "85" -} -{ -"light" "85" -"classname" "light" -"origin" "-2008 544 216" -} -{ -"light" "85" -"classname" "light" -"origin" "-2008 696 172" -} -{ -"light" "70" -"classname" "light" -"origin" "-1936 688 116" -} -{ -"light" "95" -"classname" "light" -"origin" "-2008 800 136" -} -{ -"light" "130" -"classname" "light" -"origin" "-1836 840 104" -} -{ -"origin" "-2008 480 216" -"classname" "light" -"light" "85" -} -{ -"light" "96" -"classname" "light" -"origin" "-1696 560 220" -} -{ -"classname" "light" -"light" "130" -"origin" "-1984 -64 -144" -} -{ -"classname" "light" -"light" "130" -"origin" "-2112 -64 -144" -} -{ -"classname" "light" -"light" "130" -"origin" "-796 784 112" -} -{ -"origin" "-1472 224 220" -"light" "110" -"classname" "light" -} -{ -"light" "88" -"classname" "light" -"origin" "-1520 136 92" -} -{ -"origin" "-1424 136 92" -"classname" "light" -"light" "88" -} -{ -"light" "96" -"classname" "light" -"origin" "-1592 484 228" -} -{ -"light" "96" -"classname" "light" -"origin" "-1592 572 228" -} -{ -"light" "96" -"classname" "light" -"origin" "-1696 400 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1792 224 220" -} -{ -"classname" "light" -"light" "130" -"origin" "-1152 432 112" -} -{ -"light" "110" -"classname" "light" -"origin" "-8 688 164" -} -{ -"light" "110" -"classname" "light" -"origin" "-8 880 164" -} -{ -"classname" "light" -"light" "130" -"origin" "-1152 368 112" -} -{ -"classname" "light" -"light" "110" -"origin" "-1728 224 220" -} -{ -"classname" "light" -"light" "94" -"origin" "-1904 224 164" -} -{ -"classname" "light" -"light" "110" -"origin" "-1600 224 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1536 224 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1472 320 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1472 384 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1472 448 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1472 512 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1472 576 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1408 576 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1344 576 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1280 576 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1216 576 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1152 576 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1152 512 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1088 64 220" -} -{ -"light" "175" -"classname" "light" -"origin" "-1184 -40 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "175" -"classname" "light" -"origin" "-1256 32 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "175" -"classname" "light" -"origin" "-1256 160 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "175" -"classname" "light" -"origin" "-1056 264 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-2048 -20 252" -"light" "76" -"classname" "light" -} -{ -"origin" "-2048 20 252" -"light" "76" -"classname" "light" -} -{ -"origin" "-2048 20 184" -"light" "76" -"classname" "light" -} -{ -"origin" "-556 784 220" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "130" -"origin" "-760 784 112" -} -{ -"origin" "-2108 -16 268" -"classname" "light" -"light" "115" -} -{ -"light" "115" -"classname" "light" -"origin" "-2108 -88 268" -} -{ -"origin" "-1988 -88 268" -"classname" "light" -"light" "115" -} -{ -"origin" "-536 608 212" -"classname" "light" -"light" "120" -"_color" "0.989189 0.989189 1.000000" -} -{ -"classname" "light" -"light" "130" -"origin" "-880 64 112" -} -{ -"classname" "light" -"light" "130" -"origin" "-816 64 112" -} -{ -"light" "90" -"classname" "light" -"origin" "124 432 164" -} -{ -"origin" "-1152 256 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-1152 192 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-1152 128 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-1152 64 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-1792 224 172" -"light" "110" -"classname" "light" -} -{ -"origin" "-1024 64 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-960 64 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-888 64 176" -"light" "110" -"classname" "light" -} -{ -"origin" "-768 64 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-1056 -40 212" -"classname" "light" -"light" "175" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-960 160 212" -"light" "175" -"classname" "light" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-1468 -640 220" -"classname" "light" -"light" "110" -} -{ -"origin" "-1468 -704 220" -"classname" "light" -"light" "110" -} -{ -"origin" "-1468 -768 220" -"classname" "light" -"light" "110" -} -{ -"origin" "-1216 -880 196" -"classname" "light" -"light" "115" -} -{ -"origin" "-1040 -880 196" -"classname" "light" -"light" "115" -} -{ -"origin" "-896 -744 196" -"classname" "light" -"light" "115" -} -{ -"origin" "-612 -368 208" -"classname" "light" -"light" "100" -} -{ -"origin" "-716 -216 128" -"light" "74" -"classname" "light" -} -{ -"origin" "-96 48 200" -"classname" "light" -"light" "100" -} -{ -"origin" "-1212 -312 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1212 -384 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1212 -456 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1212 -520 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1212 -584 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1212 -648 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1188 -696 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1132 -696 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1076 -696 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1200 -428 216" -"light" "140" -"classname" "light" -} -{ -"origin" "-1272 -468 216" -"light" "140" -"classname" "light" -} -{ -"origin" "-1424 -468 216" -"light" "140" -"classname" "light" -} -{ -"origin" "-1352 -468 216" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"origin" "-1344 -712 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1344 -776 220" -} -{ -"origin" "-1064 -776 220" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"origin" "-1128 -776 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1192 -776 220" -} -{ -"origin" "-1000 -648 220" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"origin" "-1000 -712 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1000 -776 220" -} -{ -"origin" "-1344 -648 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-1000 -544 132" -"light" "130" -"classname" "light" -} -{ -"light" "130" -"classname" "light" -"origin" "-1348 -340 72" -} -{ -"light" "56" -"classname" "light" -"origin" "-1308 -304 224" -} -{ -"classname" "light" -"light" "56" -"origin" "-1388 -304 224" -} -{ -"light" "56" -"classname" "light" -"origin" "-1308 -364 224" -} -{ -"classname" "light" -"light" "56" -"origin" "-1388 -364 224" -} -{ -"light" "100" -"classname" "light" -"origin" "-92 -80 200" -} -{ -"origin" "-1000 -480 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-1000 -416 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-1000 -352 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-1000 -288 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-1000 -216 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-936 -216 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-872 -216 132" -"light" "84" -"classname" "light" -} -{ -"origin" "-800 -216 100" -"light" "130" -"classname" "light" -} -{ -"origin" "-512 -216 220" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "130" -"origin" "-1000 -632 128" -} -{ -"classname" "light" -"light" "84" -"origin" "-976 -216 220" -} -{ -"classname" "light" -"light" "84" -"origin" "-896 -216 220" -} -{ -"classname" "light" -"light" "84" -"origin" "-832 -216 220" -} -{ -"light" "110" -"classname" "light" -"origin" "-1468 -576 220" -} -{ -"classname" "light" -"light" "132" -"origin" "-228 -564 68" -} -{ -"classname" "light" -"light" "132" -"origin" "88 -268 68" -} -{ -"classname" "light" -"light" "150" -"origin" "-72 -348 216" -} -{ -"classname" "light" -"light" "110" -"origin" "-224 -172 220" -} -{ -"light" "100" -"classname" "light" -"origin" "28 -80 200" -} -{ -"light" "100" -"classname" "light" -"origin" "-92 -560 200" -} -{ -"light" "100" -"classname" "light" -"origin" "136 -192 200" -} -{ -"origin" "-208 168 200" -"classname" "light" -"light" "100" -} -{ -"classname" "light" -"light" "130" -"origin" "-224 -488 212" -} -{ -"origin" "-228 -408 212" -"light" "130" -"classname" "light" -} -{ -"origin" "-304 -404 216" -"light" "150" -"classname" "light" -} -{ -"origin" "-380 -408 212" -"light" "130" -"classname" "light" -} -{ -"origin" "-384 -488 212" -"light" "130" -"classname" "light" -} -{ -"origin" "-72 -268 212" -"light" "135" -"classname" "light" -} -{ -"classname" "light" -"light" "135" -"origin" "8 -264 212" -} -{ -"origin" "-72 -420 212" -"light" "135" -"classname" "light" -} -{ -"origin" "8 -424 212" -"light" "135" -"classname" "light" -} -{ -"classname" "light" -"light" "140" -"origin" "-1496 -428 216" -} -{ -"origin" "-336 168 200" -"classname" "light" -"light" "100" -} -{ -"origin" "28 -560 200" -"classname" "light" -"light" "100" -} -{ -"origin" "-224 -216 220" -"light" "110" -"classname" "light" -} -{ -"light" "140" -"origin" "-1348 -256 104" -"classname" "light" -"light" "130" -} -{ -"origin" "-304 -568 104" -"classname" "light" -"light" "130" -} -{ -"origin" "88 -344 104" -"light" "130" -"classname" "light" -} -{ -"light" "56" -"classname" "light" -"origin" "-304 -488 224" -} -{ -"light" "56" -"classname" "light" -"origin" "8 -344 224" -} -{ -"origin" "-152 -616 200" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "-600 -256 148" -} -{ -"classname" "light" -"light" "84" -"origin" "-768 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-704 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-640 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-576 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-1264 -776 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-448 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-384 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-320 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-264 -216 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-224 -128 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-224 -64 220" -} -{ -"origin" "-1308 -240 224" -"classname" "light" -"light" "56" -} -{ -"origin" "-1388 -240 224" -"light" "56" -"classname" "light" -} -{ -"origin" "-536 480 212" -"classname" "light" -"light" "120" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-716 -216 100" -"light" "130" -"classname" "light" -} -{ -"origin" "-224 0 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-224 64 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-308 64 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-384 64 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-640 400 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-744 480 212" -"classname" "light" -"light" "120" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-1808 224 112" -"light" "130" -"classname" "light" -} -{ -"origin" "-640 200 112" -"light" "130" -"classname" "light" -} -{ -"origin" "-704 64 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-576 64 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-640 64 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-640 128 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-640 192 132" -"light" "94" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "-464 680 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "120" -"classname" "light" -"origin" "-536 352 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "100" -"classname" "light" -"origin" "136 -496 200" -} -{ -"light" "115" -"classname" "light" -"origin" "-1988 -16 268" -} -{ -"light" "120" -"classname" "light" -"origin" "-744 608 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "120" -"classname" "light" -"origin" "-688 888 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"light" "120" -"classname" "light" -"origin" "-560 888 212" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-1592 396 228" -"classname" "light" -"light" "96" -} -{ -"origin" "-744 352 212" -"classname" "light" -"light" "120" -"_color" "0.989189 0.989189 1.000000" -} -{ -"origin" "-756 784 172" -"light" "110" -"classname" "light" -} -{ -"origin" "-728 784 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-640 784 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-796 784 -348" -"light" "130" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"origin" "-1152 368 192" -} -{ -"classname" "light" -"light" "110" -"origin" "-640 476 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-640 552 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-640 624 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-640 696 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-640 276 172" -} -{ -"classname" "light" -"light" "74" -"origin" "-892 784 252" -} -{ -"classname" "light" -"light" "110" -"origin" "-480 784 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-404 784 220" -} -{ -"classname" "light" -"light" "110" -"origin" "-320 784 220" -} -{ -"origin" "-640 312 220" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "110" -"origin" "-320 992 220" -} -{ -"origin" "-320 856 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-320 924 220" -"light" "110" -"classname" "light" -} -{ -"origin" "-320 992 168" -"light" "110" -"classname" "light" -} -{ -"origin" "-320 1088 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-216 896 212" -"classname" "light" -"light" "120" -"_color" "0.989189 0.989189 1.000000" -} -{ -"model" "*110" -"spawnflags" "8" -"target" "t57" -"sounds" "3" -"speed" "120" -"angle" "-1" -"classname" "func_door" -"_minlight" ".2" -} -{ -"origin" "-320 1152 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-320 1280 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-320 1344 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-256 1344 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-192 1344 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-128 1344 132" -"light" "94" -"classname" "light" -} -{ -"origin" "-64 1344 132" -"light" "94" -"classname" "light" -} -{ -"origin" "64 536 100" -"classname" "light" -"light" "130" -} -{ -"origin" "64 1344 132" -"classname" "light" -"light" "94" -} -{ -"light" "94" -"classname" "light" -"origin" "0 1344 132" -} -{ -"light" "110" -"classname" "light" -"origin" "64 520 180" -} -{ -"light" "94" -"classname" "light" -"origin" "64 1280 132" -} -{ -"light" "94" -"classname" "light" -"origin" "64 1216 132" -} -{ -"light" "94" -"classname" "light" -"origin" "64 1152 132" -} -{ -"light" "94" -"classname" "light" -"origin" "64 1088 132" -} -{ -"classname" "light" -"light" "130" -"origin" "-464 64 96" -} -{ -"model" "*111" -"target" "t278" -"spawnflags" "2048" -"_minlight" ".18" -"classname" "func_button" -"angle" "0" -"speed" "75" -"wait" "-1" -//"sounds" "0" // b#9: was 1 -} -{ -"model" "*112" -"targetname" "t279" -"classname" "func_door" -"angle" "-1" -"sounds" "3" -"speed" "160" -"spawnflags" "2088" -"_minlight" ".2" -"target" "t255" -} -{ -"light" "110" -"classname" "light" -"origin" "64 952 240" -} -{ -"light" "110" -"classname" "light" -"origin" "64 896 248" -} -{ -"light" "110" -"classname" "light" -"origin" "64 832 248" -} -{ -"light" "110" -"classname" "light" -"origin" "64 768 248" -} -{ -"light" "110" -"classname" "light" -"origin" "64 704 248" -} -{ -"light" "110" -"classname" "light" -"origin" "64 640 180" -} -{ -"light" "110" -"classname" "light" -"origin" "64 640 240" -} -{ -"light" "130" -"classname" "light" -"origin" "64 936 112" -} -{ -"light" "120" -"classname" "light" -"origin" "208 716 112" -} -{ -"light" "120" -"classname" "light" -"origin" "-456 64 24" -} -{ -"origin" "404 784 16" -"classname" "light" -"light" "125" -} -{ -"origin" "400 864 48" -"classname" "light" -"light" "125" -} -{ -"origin" "400 704 48" -"classname" "light" -"light" "125" -} -{ -"origin" "208 852 112" -"classname" "light" -"light" "120" -} -{ -"origin" "64 952 184" -"classname" "light" -"light" "110" -} -{ -"origin" "352 864 124" -"classname" "light" -"light" "130" -} -{ -"light" "110" -"classname" "light" -"origin" "240 680 260" -} -{ -"light" "110" -"classname" "light" -"origin" "240 896 260" -} -{ -"light" "125" -"classname" "light" -"origin" "440 696 116" -} -{ -"angle" "90" -"origin" "64 504 40" -"classname" "info_player_start" -"targetname" "lstart" -} -{ -"light" "130" -"classname" "light" -"origin" "352 704 124" -} -{ -"light" "125" -"classname" "light" -"origin" "-88 704 108" -} -{ -"origin" "240 784 260" -"classname" "light" -"light" "110" -} -{ -"origin" "-24 368 236" -"classname" "light" -"light" "120" -} -{ -"origin" "-24 432 236" -"light" "120" -"classname" "light" -} -{ -"light" "125" -"classname" "light" -"origin" "-88 864 108" -} -{ -"origin" "-24 496 236" -"classname" "light" -"light" "120" -} -{ -"origin" "4 432 164" -"classname" "light" -"light" "90" -} -{ -"origin" "4 368 164" -"classname" "light" -"light" "90" -} -{ -"origin" "124 368 164" -"light" "90" -"classname" "light" -} -{ -"origin" "152 496 236" -"classname" "light" -"light" "120" -} -{ -"origin" "152 432 236" -"classname" "light" -"light" "120" -} -{ -"origin" "152 368 236" -"classname" "light" -"light" "120" -} -{ -"classname" "func_group" -} -{ -"model" "*113" -"classname" "func_wall" -} -{ -"model" "*114" -"spawnflags" "2048" -"_minlight" ".18" -"wait" "-1" -"angle" "180" -"classname" "func_button" -"target" "t328" -} -{ -"origin" "-1471 -756 44" -"light" "48" -"classname" "light" -} -{ -"origin" "-1471 -732 44" -"classname" "light" -"light" "48" -} -{ -"model" "*115" -"classname" "func_wall" -} -{ -"classname" "light" -"light" "64" -"origin" "-188 -539 44" -} -{ -"light" "64" -"classname" "light" -"origin" "-212 -539 44" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/mine1@de20.ent b/stuff/mapfixes/baseq2/mine1@de20.ent deleted file mode 100644 index db846f5a7..000000000 --- a/stuff/mapfixes/baseq2/mine1@de20.ent +++ /dev/null @@ -1,6145 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Added missing target names to info_player_coop (b#1) -// -// 2. Swapped (b#21) and (b#22) info_player_start -// -// This makes the player spawn in the right bulkhead -// when loading from console. -// -// 3. Added spawnflag 1 to 4x target_speaker (b#3) -// -// 4. Removed unused entities/fields (b#4) -// -// 5. Moved secret message from trigger (b#5) -// -// 6. Added spawnflag 2048 to SP/co-op entities (b#6) -// -// 7. Added difficulty spawnflags to monster-related entities (b#7) -// -// 8. Fix target_splash near quad secret appearing in DM (b#8) -// -// 9. Moved triggered monster_mutant down a bit (b#9) -{ -"sky" "unit4_" -"sounds" "2" -"message" "Upper Mines" -"classname" "worldspawn" -"nextmap" "mine2" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t185" -"origin" "-1312 -2320 808" -} -{ -"model" "*1" -"classname" "func_door" -"angle" "180" -"_minlight" ".18" -"team" "d1" -} -{ -"model" "*2" -"team" "d2" -"_minlight" ".18" -"angle" "360" -"classname" "func_door" -} -{ -"classname" "ammo_rockets" -"origin" "-1768 -2356 792" -} -{ -"classname" "point_combat" -"targetname" "t184" -"origin" "-960 -2552 792" -"spawnflags" "1" -} -{ -"angle" "180" -"classname" "info_player_coop" -"targetname" "mine2" // b#1: added this -"origin" "-808 -112 -56" -} -{ -"angle" "270" -"classname" "info_player_coop" -"targetname" "mine2" // b#1: added this -"origin" "-984 464 -152" -} -{ -"classname" "info_player_coop" -"angle" "180" -"targetname" "mine2" -"origin" "-872 -24 -56" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "mintro" // b#1: added this -"origin" "-1184 -3008 120" -} -{ -"angle" "90" -"classname" "info_player_coop" -"targetname" "mintro" // added this -"origin" "-1248 -3008 120" -} -{ -"classname" "info_player_coop" -"angle" "90" -"targetname" "mintro" -"origin" "-1216 -3072 120" -} -{ -"model" "*3" -"classname" "trigger_once" -"spawnflags" "2048" // b#6: added this -"target" "t183" -} -{ -"origin" "-1272 -2556 116" -"spawnflags" "1792" -"light" "150" -"classname" "light" -} -{ -"spawnflags" "1792" -"target" "t181" -"origin" "-1272 -2556 108" -"angle" "90" -"classname" "misc_teleporter" -} -{ -"model" "*4" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"targetname" "t181" -"origin" "-152 -988 828" -"spawnflags" "1792" -"angle" "360" -"classname" "misc_teleporter_dest" -} -{ -"origin" "-1920 -2664 816" -"spawnflags" "2048" -"target" "t180" -"targetname" "t2" -"delay" "4" -"classname" "trigger_relay" -} -{ -"classname" "ammo_bullets" -"spawnflags" "2048" -"origin" "-360 -1936 888" -} -{ -"classname" "ammo_bullets" -"spawnflags" "2048" -"origin" "-360 -1968 888" -} -{ -"classname" "item_health_large" -"spawnflags" "2048" -"origin" "-400 -1952 888" -} -{ -"model" "*5" -"target" "t89" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"model" "*6" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-176 -1032 820" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-176 -944 820" -} -{ -"classname" "trigger_relay" -"targetname" "t77" -"spawnflags" "2816" // b#6: 768 -> 2816 -"target" "t179" -"origin" "60 -1972 820" -} -{ -"model" "*7" -"classname" "func_explosive" -"targetname" "t179" -"mass" "150" -} -{ -"model" "*8" -"classname" "trigger_once" -"spawnflags" "2048" // b#6: added this -"target" "t178" -} -{ -"classname" "monster_gunner" -"angle" "90" -"target" "t177" -"targetname" "t178" -"origin" "384 -944 832" -} -{ -"classname" "ammo_bullets" -"spawnflags" "2048" -"origin" "-672 -672 824" -} -{ -"classname" "monster_mutant" -"angle" "360" -"spawnflags" "1" -"targetname" "t89" -"origin" "-1304 -544 840" -} -{ -"classname" "monster_mutant" -"angle" "225" -"spawnflags" "768" -"targetname" "t89" -"origin" "-568 -368 840" -} -{ -"origin" "-1892 -2600 892" -"targetname" "t2" -"spawnflags" "2048" -"noise" "world/ventsys.wav" -"attenuation" "-1" -"classname" "target_speaker" -} -{ -"origin" "-2024 -1880 112" -"targetname" "t176" -"classname" "point_combat" -"spawnflags" "256" // b#7: added this -} -{ -"origin" "-960 -1728 888" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"model" "*9" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-1736 -1168 544" -"team" "woop" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"team" "woop" -"origin" "-1736 -1168 544" -"spawnflags" "1792" -"classname" "item_invulnerability" -} -{ -"classname" "weapon_railgun" -"spawnflags" "1792" -"origin" "-1784 -2296 792" -} -{ -"spawnflags" "1792" -"classname" "item_health" -"origin" "-40 -920 824" -} -{ -"classname" "item_health" -"spawnflags" "1792" -"origin" "-40 -1056 824" -} -{ -"model" "*10" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*11" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*12" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*13" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1968 -1328 544" -} -{ -"model" "*14" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "item_armor_combat" -"origin" "240 128 644" -} -{ -"classname" "light" -"light" "140" -"origin" "-352 -1952 948" -} -{ -"model" "*15" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "item_quad" -"spawnflags" "1792" -"origin" "-1232 -2576 736" -} -{ -"model" "*16" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "target_secret" -"message" "You have found a secret." -"spawnflags" "2048" -"origin" "-368 -1944 920" -"targetname" "t183" -} -{ -"model" "*17" -"classname" "func_door" -"angle" "-1" -"health" "1" -"spawnflags" "8" -"speed" "150" -} -{ -"classname" "item_armor_body" -"spawnflags" "1792" -"origin" "-368 -1952 888" -} -{ -"classname" "weapon_chaingun" -"spawnflags" "1792" -"origin" "168 144 648" -} -{ -"classname" "ammo_slugs" -"spawnflags" "1792" -"origin" "-40 -1896 824" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "232 -1896 832" -} -{ -"classname" "weapon_hyperblaster" -"spawnflags" "1792" -"origin" "96 -1528 824" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "176 -640 752" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "136 -624 752" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-512 -584 832" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-512 -544 832" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-1576 -216 640" -} -{ -"classname" "weapon_supershotgun" -"spawnflags" "1792" -"origin" "-1560 -256 640" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-1224 304 648" -} -{ -"classname" "item_health_small" -"spawnflags" "1792" -"origin" "-1264 304 648" -} -{ -"classname" "item_health_small" -"spawnflags" "1792" -"origin" "-1184 304 648" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-1240 -304 656" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-1200 -336 656" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "-856 -792 824" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-648 -832 824" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-608 -832 824" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-776 -1336 888" -} -{ -"classname" "ammo_rockets" -"spawnflags" "1792" -"origin" "-608 -1512 896" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-856 -1544 888" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-1224 -2024 816" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-1264 -2040 816" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-1616 -1888 744" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-1576 -1888 744" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-1656 -1888 744" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1832 -1880 752" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-1880 -1848 752" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-2184 -1024 720" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-2144 -1024 720" -} -{ -"classname" "weapon_chaingun" -"spawnflags" "1792" -"origin" "-1944 -1360 576" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1368 -2704 120" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-1408 -2704 120" -} -{ -"classname" "weapon_bfg" -"spawnflags" "1792" -"origin" "-976 -144 -64" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "-1568 56 656" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "-608 -1912 896" -} -{ -"classname" "info_player_deathmatch" -"angle" "315" -"origin" "-1896 -2328 800" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "-1504 -2368 800" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "-620 -2836 896" -} -{ -"origin" "-216 -2400 896" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-104 -1824 832" -"angle" "360" -"classname" "info_player_deathmatch" -} -{ -"origin" "280 -1824 832" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "424 -488 748" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-672 -676 832" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1376 -244 824" -"angle" "0" -"classname" "info_player_deathmatch" -} -{ -"origin" "-768 -1536 896" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1424 -2044 816" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1584 -1696 752" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1584 -1032 724" -"angle" "225" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1852 -1592 128" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1216 -2800 116" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1288 -2620 540" -"target" "t2" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "-936 -188 376" -"target" "t2" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*18" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*19" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*20" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-880 -1712 856" -"target" "t163" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"classname" "info_player_intermission" -"angles" "33 225 0" -"origin" "-808 -2288 1120" -} -{ -"model" "*21" -"classname" "func_plat" -"spawnflags" "1" -"dmg" "1" -"_minlight" ".18" -} -{ -"model" "*22" -"classname" "func_door" -"angle" "-2" -"dmg" "1" -"speed" "175" -"targetname" "t25" -"_minlight" ".18" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t173" -"target" "t174" -"origin" "-692 -24 1088" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t174" -"target" "t173" -"origin" "-1256 60 1088" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t171" -"target" "t172" -"origin" "-1232 4 1024" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t172" -"target" "t171" -"origin" "-900 -304 1024" -} -{ -"targetname" "t144" -"origin" "-1500 -2440 1236" -"classname" "monster_hover" -"angle" "0" -"spawnflags" "3" -} -{ -"origin" "184 -420 736" -"targetname" "t170" -"spawnflags" "257" // b#7: 1 -> 257 -"classname" "point_combat" -} -{ -"model" "*23" -"spawnflags" "2048" -"classname" "trigger_push" -"angle" "-1" -"speed" "40" -} -{ -"spawnflags" "2304" // b#6: 256 -> 2304 -"classname" "trigger_relay" -"targetname" "t167" -"target" "t168" -"delay" "1.5" -"origin" "-728 92 1024" -} -{ -"spawnflags" "2048" // b#6: 0 -> 2048 -"classname" "trigger_relay" -"targetname" "t166" -"target" "t167" -"origin" "-692 92 1024" -} -{ -"spawnflags" "2816" // b#6: 768 -> 2816 -"classname" "trigger_relay" -"targetname" "t168" -"delay" "1.5" -"origin" "-756 92 1024" -"target" "t169" -} -{ -"model" "*24" -"targetname" "poo" -"classname" "trigger_counter" -"spawnflags" "2049" -"target" "t166" -} -{ -"spawnflags" "258" -"angle" "225" -"classname" "monster_hover" -"origin" "-580 132 956" -"targetname" "t168" -} -{ -"spawnflags" "770" -"angle" "270" -"classname" "monster_hover" -"origin" "-580 132 864" -"targetname" "t169" -} -{ -"classname" "monster_hover" -"angle" "270" -"spawnflags" "2" -"origin" "-580 132 1024" -"targetname" "t167" -} -{ -"light" "72" -"origin" "-1844 -1328 36" -"classname" "light" -} -{ -"model" "*25" -"spawnflags" "2048" -"classname" "func_wall" -"targetname" "kp1" -} -{ -"origin" "-1944 -2568 841" -"noise" "world/lite_on3.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"targetname" "t2" -} -{ -"spawnflags" "2048" -"origin" "-1808 -2284 792" -"classname" "ammo_shells" -} -{ -"spawnflags" "2048" -"origin" "-1784 -2296 792" -"classname" "ammo_shells" -} -{ -"origin" "-1832 -2304 776" -"angle" "270" -"spawnflags" "2056" -"classname" "misc_deadsoldier" -} -{ -"model" "*26" -"spawnflags" "2048" -"targetname" "kp1" -"message" "Bridge access denied." -"classname" "trigger_once" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"targetname" "t77" -"killtarget" "t162" -"origin" "172 -1976 844" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#4: added this -"targetname" "t29" -"target" "t161" -"origin" "80 -1252 844" -} -{ -"delay" "1.75" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"targetname" "t29" -"target" "t162" -"origin" "104 -1252 844" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"targetname" "t29" -"target" "t39" -"origin" "128 -1252 844" -} -{ -"delay" "1.75" -"classname" "trigger_relay" -"spawnflags" "3840" // b#4: added this -"targetname" "t29" -"target" "t38" -"origin" "56 -1252 844" -} -{ -"classname" "light" -"light" "100" -"origin" "-776 -344 684" -} -{ -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"noise" "world/lite_on3.wav" -"targetname" "t2" -"origin" "-1944 -2616 841" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#4: added this, t2 (vent button) should not target the vent trap (t162) -"targetname" "t2" -"target" "t161" -"origin" "-1940 -2528 896" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1628 -1260 104" -} -{ -"classname" "target_explosion" -"spawnflags" "2048" // b#6: added this -"dmg" "10" -"targetname" "t154" -"origin" "-1932 -2840 848" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-1568 232 648" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-1156 -2028 892" -} -{ -"origin" "-1104 -2604 96" -"classname" "misc_deadsoldier" -"spawnflags" "2056" -"angle" "45" -} -{ -"spawnflags" "2048" -"origin" "-1440 -2724 124" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"origin" "-608 -2856 888" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-568 -2856 888" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-648 -2856 888" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "96 -1528 824" -"classname" "weapon_rocketlauncher" -} -{ -"target" "t170" -"origin" "200 -464 752" -"spawnflags" "257" -"angle" "90" -"classname" "monster_gladiator" -} -{ -"angle" "270" -"spawnflags" "0" -"origin" "-776 -344 648" -"classname" "item_health_mega" -} -{ -"spawnflags" "0" -"origin" "-1512 -2812 792" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-1512 -2852 792" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-1512 -2772 792" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-1256 -344 648" -"classname" "item_health" -} -{ -"spawnflags" "0" -"origin" "-1368 152 648" -"classname" "item_health" -} -{ -"model" "*27" -"spawnflags" "2064" -"targetname" "kp1" -"dmg" "1" -"classname" "trigger_hurt" -} -{ -"spawnflags" "0" -"origin" "-1072 -2648 116" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-2048 -1144 128" -"classname" "ammo_bullets" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "90" -"origin" "-1876 -2880 776" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1860 -2904 792" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1900 -2904 792" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "-1820 -2904 792" -} -{ -"classname" "target_speaker" -"noise" "world/airhiss1.wav" -"spawnflags" "2050" // b#6: 2 -> 2050 -"targetname" "t2" -"origin" "-1944 -2592 848" -} -{ -"spawnflags" "1" -"origin" "-572 -2116 888" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"volume" ".7" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2050" -"angle" "315" -"origin" "-556 -2252 872" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-536 -2280 888" -} -{ -"spawnflags" "2048" -"classname" "weapon_chaingun" -"origin" "-1292 -1992 808" -} -{ -"classname" "misc_deadsoldier" -"angle" "315" -"spawnflags" "2056" -"origin" "-1280 -1980 792" -} -{ -"spawnflags" "2048" -"origin" "-1580 -1888 760" -"classname" "ammo_bullets" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2050" -"angle" "135" -"origin" "-1120 -2356 120" -} -{ -"classname" "item_armor_jacket" -"origin" "-1148 -2340 136" -} -{ -"classname" "ammo_rockets" -"origin" "-1852 -1576 64" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"model" "*28" -"killtarget" "po1" -"classname" "trigger_once" -"spawnflags" "2048" // b#6: added this -"targetname" "t154" -} -{ -"classname" "target_secret" -"targetname" "t154" -"message" "You have found a secret." // b#5: moved this here from the trigger -"origin" "-1948 -2824 872" -} -{ -"targetname" "po1" -"classname" "func_timer" -"random" "3" -"wait" "4" -"target" "t153" -"spawnflags" "2049" // b#6, b#8: 1 -> 2049 -"origin" "-1916 -2848 872" -} -{ -"classname" "target_splash" -"spawnflags" "2048" // b#6, b#8: added this -"angle" "0" -"sounds" "1" -"targetname" "t153" -"origin" "-1958 -2868 872" -} -{ -"classname" "target_speaker" -"noise" "world/amb10.wav" -"spawnflags" "1" -"origin" "-1948 -2848 812" -} -{ -"spawnflags" "2048" -"classname" "item_quad" -"origin" "-1992 -2848 820" -} -{ -"model" "*29" -"classname" "func_explosive" -"mass" "600" -"target" "t154" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-484 -1908 888" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "135" -"origin" "-1484 -2816 776" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-320 -2668 888" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-284 -2668 888" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-356 -2668 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb10.wav" -"origin" "184 -2168 976" -"spawnflags" "1" -} -{ -"classname" "ammo_rockets" -"spawnflags" "2816" -"origin" "-168 -2144 824" -} -{ -"classname" "ammo_shells" -"spawnflags" "2816" -"origin" "256 -1976 824" -} -{ -"spawnflags" "0" -"classname" "ammo_shells" -"origin" "296 -1976 824" -} -{ -"spawnflags" "768" -"classname" "ammo_grenades" -"origin" "-40 -1976 824" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "296 -2208 832" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "296 -2168 832" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "296 -2248 832" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2048" -"angle" "45" -"origin" "112 -1504 808" -} -{ -"spawnflags" "2048" -"origin" "280 -1824 824" -"classname" "item_health" -} -{ -"classname" "item_health" -"origin" "-104 -1824 824" -"spawnflags" "2048" -} -{ -"spawnflags" "1" -"noise" "world/lava1.wav" -"classname" "target_speaker" -"origin" "216 -1632 800" -} -{ -"spawnflags" "1" -"noise" "world/lava1.wav" -"classname" "target_speaker" -"origin" "216 -1376 800" -} -{ -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -"origin" "-24 -1504 800" -} -{ -"classname" "item_health" -"spawnflags" "3072" -"origin" "152 -672 744" -} -{ -"classname" "item_health" -"spawnflags" "3072" -"origin" "192 -684 744" -} -{ -"classname" "misc_deadsoldier" -"angle" "225" -"spawnflags" "2052" -"origin" "196 124 624" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-32 172 644" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-1408 -296 632" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-1368 -296 632" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-1576 -296 632" -} -{ -"spawnflags" "2048" -"classname" "item_health_small" -"origin" "-1536 -296 632" -} -{ -"spawnflags" "2048" -"classname" "ammo_rockets" -"origin" "-1000 -84 -84" -} -{ -"classname" "misc_deadsoldier" -"angle" "135" -"spawnflags" "2050" -"origin" "-1016 -108 -112" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-884 -356 -68" -} -{ -"spawnflags" "0" -"classname" "item_health_large" -"origin" "-1068 -352 -68" -} -{ -"spawnflags" "0" -"origin" "-1172 -788 840" -"classname" "item_health" -} -{ -"spawnflags" "0" -"origin" "-1172 -972 840" -"classname" "item_health_large" -} -{ -"spawnflags" "0" -"origin" "-560 -944 848" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-560 -984 848" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-560 -864 848" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-560 -824 848" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-592 -1508 892" -"classname" "ammo_grenades" -} -{ -"spawnflags" "2048" -"origin" "-628 -1532 892" -"classname" "ammo_grenades" -} -{ -"origin" "-1236 -1300 808" -"classname" "item_health" -} -{ -"origin" "-1272 -1300 808" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-1896 -1896 744" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-1860 -1896 744" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-1948 -1368 544" -"classname" "weapon_machinegun" -} -{ -"spawnflags" "2048" -"origin" "-1908 -1396 544" -"classname" "item_adrenaline" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1628 -1224 104" -} -{ -"origin" "-1232 -2444 632" -"classname" "light" -"light" "120" -} -{ -"origin" "-976 -40 488" -"light" "120" -"classname" "light" -} -{ -"spawnflags" "2048" -"origin" "-1896 -2624 848" -"targetname" "t2" -"classname" "target_goal" -} -{ -"message" "Toxic conditions found in\nlower mines. Activate\nventilation systems." -"origin" "-1531 -2547 156" -"classname" "target_help" -"spawnflags" "2048" -"targetname" "t160" -} -{ -"model" "*30" -"classname" "trigger_once" -"target" "t160" -"spawnflags" "2048" -} -{ -"origin" "-756 -144 56" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#3: added this -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "-844 124 804" -"volume" ".6" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "-832 0 896" -"volume" ".8" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-632 -344 896" -} -{ -"model" "*31" -"spawnflags" "2048" -"targetname" "m1" -"classname" "func_wall" -} -{ -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-1012 -276 896" -} -{ -"volume" ".8" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-1208 -168 896" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "-984 -708 896" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"origin" "-828 -544 896" -} -{ -"targetname" "t151" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" // b#6: 2 -> 2050 -"origin" "-956 -144 548" -} -{ -"targetname" "t151" -"spawnflags" "2050" // b#6: 2 -> 2050 -"noise" "world/fan1.wav" -"classname" "target_speaker" -"origin" "-996 -144 548" -} -{ -"targetname" "t151" -"origin" "-1232 -2676 636" -"spawnflags" "2050" -"noise" "world/fan1.wav" -"classname" "target_speaker" -} -{ -"targetname" "t151" -"origin" "-1232 -2484 636" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" -} -{ -"classname" "light" -"light" "130" -"origin" "-1296 -1712 292" -} -{ -"classname" "light" -"light" "130" -"origin" "-1012 -1728 424" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-1740 -1676 160" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-2104 -1572 160" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-1988 -1724 160" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "-1192 260 700" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "-1452 260 700" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "-1560 44 700" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -"origin" "-1440 -140 700" -} -{ -"origin" "-1524 320 704" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "-1564 244 704" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "-1420 96 704" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "-1420 96 692" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-1524 320 692" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-1564 244 692" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "-1472 372 688" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1472 -308 688" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1440 -140 440" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "-1440 -140 264" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "-1440 -140 72" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"volume" ".7" -"origin" "-1256 -140 -40" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"volume" ".8" -"origin" "-1344 -140 -40" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"volume" ".6" -"origin" "-1168 -140 -40" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "-1292 284 700" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-976 284 -84" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-908 40 -64" -"classname" "target_speaker" -"noise" "world/amb7.wav" -} -{ -"spawnflags" "1" -"origin" "-1044 40 -64" -"classname" "target_speaker" -"noise" "world/amb7.wav" -} -{ -"targetname" "t151" -"origin" "-996 -144 232" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" // b#6: 2 -> 2050 -} -{ -"targetname" "t151" -"origin" "-956 -144 232" -"spawnflags" "2050" // b#6: 2 -> 2050 -"noise" "world/fan1.wav" -"classname" "target_speaker" -} -{ -"origin" "-936 -136 -36" -"target" "t152" -"wait" "4" -"random" "3" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-1016 -184 -16" -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -} -{ -"origin" "-936 -104 -16" -"targetname" "t152" -"spawnflags" "0" -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -} -{ -"origin" "-912 -76 -88" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-1044 -76 -88" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1044 -216 -88" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-912 -216 -88" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-696 -1984 888" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"volume" ".7" -} -{ -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-620 -1984 888" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"origin" "-572 -2184 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-792 -1984 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-952 -1984 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"volume" ".7" -"noise" "world/amb10.wav" -"classname" "target_speaker" -"origin" "-572 -2152 952" -"spawnflags" "1" -} -{ -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-952 -1864 888" -"spawnflags" "1" -} -{ -"origin" "-1824 -2268 912" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1840 -2908 912" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1608 -2704 864" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1608 -2456 864" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-400 -2384 928" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-256 -2240 928" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-100 -2240 928" -} -{ -"origin" "-320 -2664 960" -"spawnflags" "1" -"noise" "world/amb11.wav" -"classname" "target_speaker" -} -{ -"origin" "-208 -2400 960" -"spawnflags" "1" -"noise" "world/amb11.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-236 -2400 944" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-416 -2424 972" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb4.wav" -"origin" "-320 -2672 944" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"origin" "184 -2168 840" -"noise" "world/amb10.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-1336 -1500 868" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-980 -892 852" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-1076 -892 852" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-864 -892 852" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-672 -892 852" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-672 -1188 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-672 -1436 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-892 -1436 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-956 -1592 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-1340 -1976 868" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"origin" "-1336 -1476 868" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-1388 -1756 868" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"volume" ".7" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-756 -892 852" -"spawnflags" "1" -} -{ -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-1140 -1436 896" -"spawnflags" "1" -} -{ -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-1560 -1756 792" -"spawnflags" "1" -} -{ -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "-1772 -1752 792" -"spawnflags" "1" -} -{ -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -"origin" "-2104 -1096 792" -"spawnflags" "1" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1844 -1280 272" -} -{ -"light" "100" -"origin" "-1008 -2504 256" -"classname" "light" -} -{ -"light" "100" -"origin" "-1192 -2276 272" -"classname" "light" -} -{ -"light" "100" -"origin" "-1224 -2276 272" -"classname" "light" -} -{ -"light" "100" -"origin" "-1456 -2448 256" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1008 -2536 256" -"light" "100" -} -{ -"classname" "light" -"origin" "-1384 -2392 280" -"light" "140" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"light" "140" -"origin" "-1064 -2392 280" -"classname" "light" -} -{ -"spawnflags" "1" -"origin" "-1864 -1464 792" -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-1620 -1464 792" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-1620 -1096 792" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-1864 -1096 792" -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-2104 -1232 792" -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-1120 -1984 888" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-2104 -1464 792" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"volume" ".7" -} -{ -"spawnflags" "1" -"origin" "-1616 -1260 792" -"volume" ".7" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -"origin" "-2256 -1232 192" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1844 -1280 164" -} -{ -"origin" "-1096 -2192 1012" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1096 -2924 1012" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-872 -2412 1020" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".9" -"spawnflags" "1" -"origin" "-1032 -2420 924" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".9" -"spawnflags" "1" -"origin" "-1032 -2740 924" -"classname" "target_speaker" -"noise" "world/wind2.wav" -} -{ -"volume" ".5" -"spawnflags" "1" -"origin" "-1280 -2576 924" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".7" -"spawnflags" "1" -"origin" "-1172 -2740 924" -"classname" "target_speaker" -"noise" "world/wind2.wav" -} -{ -"volume" ".7" -"spawnflags" "1" -"origin" "-1172 -2420 924" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"spawnflags" "1" -"origin" "-1324 -2740 924" -"classname" "target_speaker" -"noise" "world/wind2.wav" -} -{ -"volume" ".5" -"spawnflags" "1" -"origin" "-1324 -2420 924" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".9" -"spawnflags" "1" -"origin" "-996 -2564 924" -"classname" "target_speaker" -"noise" "world/wind2.wav" -} -{ -"spawnflags" "1" -"origin" "-696 -2560 960" -"classname" "target_speaker" -"noise" "world/wind2.wav" -} -{ -"spawnflags" "1" -"origin" "-872 -2732 1020" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-1800 -2796 968" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-1800 -2368 968" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-1928 -2364 820" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -} -{ -"origin" "-1944 -2364 820" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"origin" "-1936 -2784 820" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -} -{ -"origin" "-1952 -2784 820" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"origin" "-1856 -2892 820" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -} -{ -"origin" "-1856 -2908 820" -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -} -{ -"origin" "-1808 -2288 820" -"classname" "target_speaker" -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -} -{ -"origin" "-1808 -2272 820" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -} -{ -"targetname" "t151" -"spawnflags" "2050" -"noise" "world/fan1.wav" -"classname" "target_speaker" -"origin" "-1252 -2576 724" -} -{ -"targetname" "t151" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" -"origin" "-1212 -2576 724" -} -{ -"targetname" "t151" -"origin" "-956 -144 624" -"spawnflags" "2050" // b#6: 2 -> 2050 -"noise" "world/fan1.wav" -"classname" "target_speaker" -} -{ -"targetname" "t151" -"origin" "-996 -144 624" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" // b#6: 2 -> 2050 -} -{ -"origin" "-1892 -2576 824" -"target" "t151" -"targetname" "t2" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"killtarget" "kp1" -} -{ -"targetname" "t151" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" // b#6: 2 -> 2050 -"origin" "-956 -144 80" -} -{ -"targetname" "t151" -"spawnflags" "2050" // b#6: 2 -> 2050 -"noise" "world/fan1.wav" -"classname" "target_speaker" -"origin" "-996 -144 80" -} -{ -"targetname" "t151" -"origin" "-1252 -2576 464" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "2050" // b#6: 2 -> 2050 -} -{ -"targetname" "t151" -"origin" "-1212 -2576 464" -"spawnflags" "2050" // b#6: 2 -> 2050 -"noise" "world/fan1.wav" -"classname" "target_speaker" -} -{ -"origin" "96 -2236 884" -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -} -{ -"origin" "96 -2056 884" -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -} -{ -"origin" "308 -2048 884" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-452 -2564 928" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "128 -2300 884" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/bigpump2.wav" -"origin" "96 -1680 900" -} -{ -"noise" "world/bigpump2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "96 -1388 900" -} -{ -"noise" "world/bigpump2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "96 -1224 900" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -"origin" "380 -800 836" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1844 -1280 52" -} -{ -"origin" "96 -1556 900" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/bigpump2.wav" -} -{ -"origin" "96 -1472 900" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/bigpump2.wav" -} -{ -"origin" "96 -1292 900" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/bigpump2.wav" -} -{ -"origin" "96 -1800 900" -"noise" "world/bigpump2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "12 -1632 864" -"targetname" "t36" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"noise" "world/airhiss1.wav" -} -{ -"origin" "8 -1504 864" -"targetname" "t36" // b#4: t28 -> t36 -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"noise" "world/airhiss1.wav" -} -{ -"origin" "172 -1632 864" -"targetname" "t37" -"noise" "world/airhiss1.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "188 -1376 864" -"targetname" "t37" // b#4: t35 -> t37 -"noise" "world/airhiss1.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "136 -556 656" -"spawnflags" "1" -"noise" "world/lava1.wav" -"classname" "target_speaker" -} -{ -"origin" "476 -600 820" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" // b#3: added this -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -"origin" "384 -516 820" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -"origin" "168 -580 820" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -"origin" "172 -356 820" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -"origin" "172 40 672" -} -{ -"origin" "76 -600 820" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" // b#3: added this -} -{ -"origin" "404 -968 884" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#3: added this -} -{ -"origin" "352 -592 596" -"wait" "4" -"random" "3" -"target" "t150" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "416 -220 596" -"classname" "target_speaker" -"noise" "world/lava1.wav" -"spawnflags" "1" -} -{ -"origin" "384 -560 656" -"targetname" "t150" -"spawnflags" "1" -"noise" "world/lava1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -"origin" "0 128 672" -} -{ -"origin" "-180 36 672" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "-180 -180 672" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "-40 -992 916" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"spawnflags" "1" -"origin" "-156 -128 600" -"classname" "target_speaker" -"noise" "world/lava1.wav" -} -{ -"spawnflags" "1" -"origin" "76 48 600" -"noise" "world/lava1.wav" -"classname" "target_speaker" -} -{ -"origin" "-832 -168 896" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-832 -344 896" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-1208 -344 896" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-464 -228 872" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".5" -"origin" "-1040 124 696" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-1208 0 896" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-632 -168 896" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-968 -4 896" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-560 -560 896" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-1128 -544 896" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"volume" ".8" -"origin" "-1136 200 896" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-836 200 896" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1408 -288 836" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-776 -616 936" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1208 -616 936" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1192 -904 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1088 -1000 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-960 -1000 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-736 -792 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-640 -792 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-568 -904 888" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-776 -1216 924" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-896 -1336 952" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1088 -1336 952" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1344 -1312 856" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1448 -1440 856" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1224 -1984 856" -} -{ -"origin" "-1448 -2008 856" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1728 -1896 808" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-1896 -1728 808" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-504 -228 840" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-2140 -1232 192" -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -} -{ -"origin" "-2032 -1120 216" -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/amb7.wav" -} -{ -"origin" "-1656 -1120 216" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1844 -1280 36" -} -{ -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -"origin" "-1988 -1980 160" -} -{ -"origin" "-1076 -1676 324" -"angle" "0" -"spawnflags" "2049" -"classname" "misc_deadsoldier" -} -{ -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"origin" "-1268 -1724 308" -} -{ -"origin" "-1432 -1700 308" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -} -{ -"origin" "-1140 -1696 344" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -} -{ -"origin" "-1844 -1280 424" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1556 -1672 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1988 -2180 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1988 -2384 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1988 -2584 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1800 -2584 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1624 -2584 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1456 -2584 160" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "-1844 -1280 68" -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -} -{ -"origin" "-1032 -2488 216" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -} -{ -"origin" "-1236 -2544 100" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1256 -2312 80" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-1360 -2832 80" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-1040 -2760 80" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -} -{ -"origin" "-1424 -2448 80" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1216 -3062 216" -} -{ -"angle" "180" -"origin" "-1924 -1372 528" -"spawnflags" "2056" -"classname" "misc_deadsoldier" -} -{ -"light" "100" -"classname" "light" -"origin" "-1940 -1356 624" -} -{ -"model" "*32" -"spawnflags" "2048" -"classname" "func_wall" -"targetname" "m1" -} -{ -"style" "32" -"classname" "light" -"light" "140" -"_color" "0.384615 1.000000 0.307692" -"origin" "-1036 248 -118" -"targetname" "t2" -} -{ -"style" "32" -"classname" "light" -"light" "140" -"_color" "0.384615 1.000000 0.307692" -"origin" "-976 240 -118" -"targetname" "t2" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"killtarget" "m1" -"targetname" "t2" -"origin" "-1912 -2560 824" -} -{ -"style" "32" -"origin" "-916 248 -118" -"_color" "0.384615 1.000000 0.307692" -"light" "140" -"classname" "light" -"targetname" "t2" -} -{ -"origin" "-1088 -1008 892" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-960 -1016 892" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-736 -784 888" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-640 -784 888" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-560 -904 888" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-784 -1216 924" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-896 -1328 952" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-1088 -1328 952" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-1344 -1304 856" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"classname" "light" -"_color" "1.000000 1.000000 0.207843" -"origin" "-1728 -1904 808" -} -{ -"classname" "light" -"_color" "1.000000 1.000000 0.207843" -"origin" "-1456 -2008 856" -} -{ -"origin" "-1456 -1440 856" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-1904 -1728 808" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "-1216 -1984 856" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"classname" "light" -"_color" "1.000000 1.000000 0.207843" -"origin" "-1200 -904 892" -} -{ -"classname" "func_group" -} -{ -"model" "*33" -"classname" "func_door" -"angle" "-1" -"speed" "24" -"spawnflags" "8" -"targetname" "t2" -"wait" "-1" -"sounds" "0" -} -{ -"classname" "target_lightramp" -"message" "az" -"speed" "2" -"target" "t149" -"targetname" "t2" -"origin" "-1944 -2560 906" -} -{ -"style" "33" -"classname" "light" -"light" "220" -"_color" "0.384615 1.000000 0.307692" -"spawnflags" "1" -"targetname" "t149" -"origin" "-2000 -2592 854" -} -{ -"classname" "func_group" -} -{ -"classname" "light" -"light" "80" -"origin" "-1944 -2592 808" -} -{ -"targetname" "t180" -"spawnflags" "2048" -"classname" "target_help" -"message" "Ventilation systems active.\nLower levels accessible." -"origin" "-1884 -2676 832" -} -{ -"light" "80" -"origin" "-1844 -1328 -120" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1844 -1232 -120" -"light" "80" -} -{ -"light" "72" -"origin" "-1844 -1232 36" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1844 -1276 -108" -"light" "72" -} -{ -"origin" "-1096 -1648 376" -"light" "100" -"classname" "light" -} -{ -"model" "*34" -"origin" "-1884 -1280 -20" -"_minlight" ".2" -"speed" "400" -"dmg" "10" -"spawnflags" "9" -"classname" "func_rotating" -} -{ -"model" "*35" -"origin" "-1804 -1280 -22" -"_minlight" ".2" -"dmg" "10" -"speed" "400" -"spawnflags" "11" -"classname" "func_rotating" -} -{ -"model" "*36" -"target" "t148" -"classname" "trigger_once" -"spawnflags" "2816" // b#6, b#7: added this -} -{ -"light" "88" -"classname" "light" -"origin" "-1936 -1252 624" -} -{ -"spawnflags" "2048" -"classname" "ammo_cells" -"origin" "-1580 -1688 760" -} -{ -"spawnflags" "0" -"classname" "item_health_large" -"origin" "-2188 -1512 720" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-2152 -1512 720" -} -{ -"classname" "light" -"light" "80" -"origin" "-1132 -1692 304" -} -{ -"classname" "weapon_rocketlauncher" -"origin" "-1096 -1648 368" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-2104 -1908 132" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1088 -2680 116" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1108 -2712 116" -} -{ -"spawnflags" "0" -"classname" "item_health_small" -"origin" "-1056 -2616 116" -} -{ -"spawnflags" "771" -"angle" "0" -"classname" "monster_hover" -"targetname" "t144" -"origin" "-1476 -2580 1300" -} -{ -"classname" "monster_hover" -"angle" "0" -"spawnflags" "3" -"targetname" "t144" -"origin" "-1440 -2704 1364" -} -{ -"model" "*37" -"classname" "trigger_once" -"target" "t144" -"spawnflags" "2052" -"targetname" "t2" -} -{ -"classname" "point_combat" -"targetname" "t140" -"origin" "-572 -2016 880" -} -{ -"item" "ammo_bullets" -"classname" "monster_gunner" -"spawnflags" "3" -"origin" "-704 -1992 904" -"target" "t140" -"targetname" "t139" -} -{ -"model" "*38" -"classname" "trigger_once" -"target" "t139" -"spawnflags" "2048" -} -{ -"model" "*39" -"classname" "trigger_once" -"target" "t137" -"spawnflags" "2048" -} -{ -"model" "*40" -"classname" "trigger_once" -"target" "t136" -"spawnflags" "2048" -} -{ -"classname" "monster_soldier" -"angle" "270" -"targetname" "t136" -"origin" "-964 -2456 808" -"target" "t184" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t134" -"target" "t135" -"origin" "-1012 -2828 792" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t135" -"target" "t134" -"origin" "-1412 -2832 792" -} -{ -"classname" "monster_soldier_light" -"angle" "180" -"spawnflags" "1" -"target" "t134" -"origin" "-972 -2832 808" -} -{ -"angle" "360" -"classname" "monster_soldier_light" -"origin" "-1480 -2324 824" -"target" "t185" -} -{ -"model" "*41" -"classname" "trigger_once" -"target" "t131" -"spawnflags" "2048" -} -{ -"classname" "monster_gladiator" -"angle" "90" -"spawnflags" "1" -"targetname" "t131" -"origin" "-1616 -2672 800" -} -{ -"classname" "point_combat" -"targetname" "t130" -"origin" "-868 -2468 964" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_light" -"angle" "270" -"target" "t130" -"origin" "-868 -2240 980" -"targetname" "t137" -} -{ -"classname" "point_combat" -"targetname" "t129" -"origin" "-860 -2656 960" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_light" -"angle" "90" -"target" "t129" -"origin" "-860 -2856 976" -"targetname" "t137" -} -{ -"model" "*42" -"classname" "trigger_once" -"target" "t128" -"spawnflags" "2048" -} -{ -"spawnflags" "257" -"angle" "135" -"classname" "monster_soldier" -"targetname" "t128" -"origin" "-1048 -296 -56" -} -{ -"classname" "monster_soldier" -"angle" "225" -"spawnflags" "257" -"targetname" "t128" -"origin" "-1080 -16 -56" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t125" -"target" "t126" -"origin" "-800 -144 -72" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t127" -"origin" "-800 -144 -72" -"target" "t124" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t124" -"target" "t125" -"origin" "-944 -336 -72" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t126" -"target" "t127" -"origin" "-952 8 -72" -} -{ -"classname" "monster_mutant" -"angle" "0" -"spawnflags" "1" -"target" "t124" -"origin" "-976 -336 -56" -} -{ -"model" "*43" -"classname" "trigger_once" -"target" "t123" -"spawnflags" "2048" -} -{ -"classname" "monster_gunner" -"angle" "0" -"targetname" "t123" -"origin" "-1568 56 672" -"item" "ammo_bullets" -"spawnflags" "0" -} -{ -"model" "*44" -"target" "t122" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"classname" "monster_soldier" -"angle" "0" -"origin" "48 -1040 828" -"spawnflags" "1" -} -{ -"origin" "-2136 -1340 720" -"targetname" "t118" -"classname" "point_combat" -} -{ -"origin" "-1368 -1400 812" -"target" "t117" -"targetname" "t116" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "-1372 -1900 812" -"target" "t116" -"targetname" "t117" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "-1368 -1356 828" -"target" "t116" -"spawnflags" "1" -"angle" "270" -"classname" "monster_gladiator" -} -{ -"origin" "-124 -988 830" // b#9: 848 -> 830 -"targetname" "t77" -"spawnflags" "770" -"angle" "360" -"classname" "monster_mutant" -} -{ -"model" "*45" -"delay" "1" -"target" "t112" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"model" "*46" -"target" "t111" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-396 -2560 880" -"spawnflags" "0" -"targetname" "t110" -"classname" "point_combat" -} -{ -"origin" "-564 -2560 896" -"targetname" "t112" -"target" "t110" -"angle" "0" -"classname" "monster_gunner" -"spawnflags" "1" -} -{ -"targetname" "t122" -"spawnflags" "1" -"origin" "-216 -2400 904" -"angle" "180" -"classname" "monster_gunner" -"item" "ammo_bullets" -} -{ -"target" "t109" -"targetname" "t108" -"origin" "-320 -2580 888" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"target" "t108" -"targetname" "t109" -"origin" "-320 -2240 888" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"spawnflags" "1" -"targetname" "t112" -"origin" "-320 -2624 904" -"target" "t108" -"angle" "90" -"classname" "monster_gladiator" -} -{ -"spawnflags" "1" -"origin" "-16 -2136 824" -"targetname" "t107" -"classname" "point_combat" -} -{ -"item" "ammo_bullets" -"spawnflags" "1" -"targetname" "t111" -"origin" "-128 -2140 840" -"target" "t107" -"angle" "0" -"classname" "monster_gunner" -} -{ -"origin" "136 -2264 828" -"targetname" "t106" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"spawnflags" "1" -"targetname" "t111" -"origin" "228 -2264 844" -"target" "t106" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "96 -1824 816" -"spawnflags" "769" // b#7: 1 -> 769 -"targetname" "t105" -"classname" "point_combat" -} -{ -"targetname" "t148" -"spawnflags" "769" -"origin" "-8 -2060 832" -"target" "t105" -"angle" "0" -"classname" "monster_gladiator" -} -{ -"origin" "52 -972 812" -"spawnflags" "1" -"targetname" "t104" -"classname" "point_combat" -} -{ -"spawnflags" "1" -"item" "ammo_shells" -"origin" "0 -972 828" -"target" "t104" -"angle" "0" -"classname" "monster_soldier" -} -{ -"spawnflags" "1" -"origin" "120 -928 828" -"angle" "0" -"classname" "monster_soldier" -} -{ -"origin" "380 -760 780" -"classname" "point_combat" -"targetname" "t177" -} -{ -"origin" "400 -600 772" -"target" "t101" -"targetname" "t100" -"classname" "path_corner" -"spawnflags" "2304" // b#6, b#7: added this -} -{ -"origin" "148 -596 772" -"target" "t100" -"targetname" "t101" -"classname" "path_corner" -"spawnflags" "2304" // b#6, b#7: added this -} -{ -"origin" "140 -488 772" -"target" "t99" -"targetname" "t98" -"classname" "path_corner" -"spawnflags" "2304" // b#6, b#7: added this -} -{ -"origin" "424 -488 772" -"target" "t98" -"targetname" "t99" -"classname" "path_corner" -"spawnflags" "2304" // b#6, b#7: added this -} -{ -"spawnflags" "257" -"origin" "112 -488 788" -"target" "t98" -"classname" "monster_soldier" -"angle" "0" -} -{ -"spawnflags" "257" -"origin" "424 -600 788" -"target" "t100" -"angle" "180" -"classname" "monster_soldier" -"item" "ammo_shells" -} -{ -"spawnflags" "768" // b#7: 0 -> 768 -"origin" "-56 140 640" -"targetname" "t95" -"classname" "point_combat" -} -{ -"origin" "104 144 656" -"targetname" "t97" -"target" "t95" -"classname" "monster_gunner" -"angle" "180" -"spawnflags" "768" -} -{ -"model" "*47" -"target" "t97" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-1140 -280 980" -"target" "t94" -"targetname" "t93" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "-712 -344 980" -"target" "t93" -"targetname" "t94" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"target" "t92" -"origin" "-1144 64 980" -"targetname" "t91" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"target" "t91" -"targetname" "t92" -"origin" "-808 144 980" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"targetname" "t151" -"target" "t93" -"spawnflags" "3" -"origin" "-1172 -280 996" -"classname" "monster_hover" -"angle" "0" -} -{ -"targetname" "t151" -"spawnflags" "3" -"origin" "-1176 64 996" -"target" "t91" -"angle" "0" -"classname" "monster_hover" -} -{ -"model" "*48" -"target" "t90" // never used -"classname" "trigger_once" -"spawnflags" "3840" // b#4: was 2048 -} -{ -"origin" "-1176 304 644" -"spawnflags" "3840" // b#4: was 0 -"targetname" "t87" // never used -"classname" "point_combat" -} -{ -"deathtarget" "poo" -"spawnflags" "1" -"origin" "-1256 24 1040" -"classname" "monster_hover" -"angle" "315" -"target" "t171" -} -{ -"deathtarget" "poo" -"spawnflags" "1" -"origin" "-672 -24 1104" -"angle" "180" -"classname" "monster_hover" -"target" "t173" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#4: added this -"killtarget" "t38" -"targetname" "t77" -"origin" "88 -1976 844" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"killtarget" "t39" -"targetname" "t77" -"origin" "124 -1976 844" -} -{ -"classname" "trigger_relay" -"spawnflags" "3840" // b#4: added this -"killtarget" "t161" -"origin" "148 -1976 844" -"targetname" "t77" -} -{ -"light" "64" -"classname" "light" -"origin" "-1972 -1832 168" -} -{ -"model" "*49" -"target" "t76" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-688 -1472 888" -"spawnflags" "1" -"targetname" "t75" -"classname" "point_combat" -} -{ -"spawnflags" "0" -"origin" "-776 -1400 888" -"targetname" "t74" -"classname" "point_combat" -} -{ -"spawnflags" "256" -"targetname" "t76" -"origin" "-1136 -840 840" -"classname" "monster_soldier" -"angle" "0" -} -{ -"origin" "-1124 -1436 900" -"target" "t72" -"delay" "2" -"targetname" "t70" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -} -{ -"target" "t74" -"origin" "-708 -1172 888" -"targetname" "t72" -"classname" "monster_gunner" -"angle" "270" -} -{ -"target" "t75" -"origin" "-640 -1172 888" -"targetname" "t72" -"angle" "270" -"classname" "monster_gunner" -} -{ -"spawnflags" "1" -"origin" "-672 -964 856" -"targetname" "t71" -"classname" "point_combat" -} -{ -"origin" "-672 -1436 908" -"target" "t71" -"targetname" "t70" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier" -} -{ -"origin" "-1000 -1920 900" -"targetname" "t69" -"classname" "point_combat" -} -{ -"origin" "-1152 -1976 916" -"targetname" "t70" -"target" "t69" -"spawnflags" "2" -"angle" "0" -"classname" "monster_gunner" -"item" "ammo_grenades" -} -{ -"model" "*50" -"target" "t70" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"spawnflags" "1" -"origin" "-920 -1912 884" -"targetname" "t67" -"classname" "point_combat" -} -{ -"item" "ammo_grenades" -"origin" "-652 -1980 900" -"targetname" "t70" -"target" "t67" -"spawnflags" "2" -"angle" "180" -"classname" "monster_gunner" -} -{ -"model" "*51" -"target" "t66" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-1160 -1400 892" -"targetname" "t65" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"spawnflags" "0" -"item" "ammo_grenades" -"origin" "-892 -1400 908" -"targetname" "t66" -"target" "t65" -"angle" "180" -"classname" "monster_gunner" -} -{ -"model" "*52" -"target" "t62" // never used -"classname" "trigger_once" -"spawnflags" "3840" // b#4: was 2048 -} -{ -"classname" "light" -"light" "88" -"origin" "-1836 -1380 624" -} -{ -"spawnflags" "1" -"origin" "-1756 -1696 744" -"targetname" "t60" -"classname" "point_combat" -} -{ -"item" "ammo_shells" -"targetname" "t59" -"origin" "-1584 -1696 760" -"target" "t60" -"spawnflags" "2" -"angle" "180" -"classname" "monster_soldier" -} -{ -"target" "t118" -"origin" "-2176 -1376 736" -"targetname" "t59" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier" -} -{ -"model" "*53" -"target" "t59" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-1920 -1260 700" -"targetname" "t58" -"classname" "point_combat" -"spawnflags" "256" // b#7: added this -} -{ -"targetname" "t59" -"origin" "-1788 -1260 460" -"angle" "180" -"target" "t58" -"spawnflags" "258" -"classname" "monster_hover" -} -{ -"origin" "-1784 -1028 708" -"spawnflags" "1" -"targetname" "t57" -"classname" "point_combat" -} -{ -"origin" "-1584 -1032 724" -"targetname" "t59" -"target" "t57" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier" -} -{ -"origin" "-1924 -1508 712" -"spawnflags" "1" -"targetname" "t56" -"classname" "point_combat" -} -{ -"targetname" "t59" -"origin" "-1588 -1504 728" -"spawnflags" "1" -"angle" "180" -"target" "t56" -"classname" "monster_soldier" -} -{ -"targetname" "t59" -"spawnflags" "1" -"origin" "-2124 -1044 732" -"angle" "270" -"classname" "monster_soldier" -"item" "ammo_shells" -} -{ -"origin" "-2032 -1120 240" -"light" "80" -"classname" "light" -} -{ -"origin" "-2032 -1120 192" -"classname" "light" -"light" "80" -} -{ -"origin" "-2032 -1424 240" -"light" "80" -"classname" "light" -} -{ -"origin" "-2032 -1424 192" -"classname" "light" -"light" "80" -} -{ -"origin" "-1656 -1432 240" -"light" "80" -"classname" "light" -} -{ -"origin" "-1656 -1432 192" -"classname" "light" -"light" "80" -} -{ -"origin" "-1656 -1528 240" -"light" "80" -"classname" "light" -} -{ -"origin" "-1656 -1528 192" -"classname" "light" -"light" "80" -} -{ -"origin" "-2032 -1520 240" -"light" "80" -"classname" "light" -} -{ -"origin" "-2032 -1520 192" -"classname" "light" -"light" "80" -} -{ -"origin" "-1656 -1120 240" -"classname" "light" -"light" "80" -} -{ -"origin" "-1656 -1120 192" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "72" -"origin" "-1796 -1596 64" -} -{ -"spawnflags" "0" -"origin" "-1628 -1188 104" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-1628 -1296 104" -"classname" "item_health_small" -} -{ -"origin" "-1844 -1540 64" -"classname" "ammo_bullets" -} -{ -"origin" "-1864 -1612 64" -"classname" "item_health_large" -} -{ -"origin" "-1160 -1712 340" -"light" "130" -"classname" "light" -} -{ -"origin" "-1140 -1704 720" -"targetname" "t53" -"classname" "point_combat" -"spawnflags" "768" // b#7: added this -} -{ -"origin" "-1140 -1772 720" -"targetname" "t52" -"classname" "point_combat" -} -{ -"target" "t53" -"origin" "-1288 -1708 900" -"targetname" "t51" -"angle" "0" -"spawnflags" "770" -"classname" "monster_hover" -} -{ -"target" "t52" -"origin" "-1308 -1768 900" -"targetname" "t51" -"spawnflags" "2" -"classname" "monster_hover" -"item" "ammo_cells" -} -{ -"model" "*54" -"spawnflags" "2048" -"target" "t51" -"classname" "trigger_once" -} -{ -"model" "*55" -"target" "t50" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"model" "*56" -"target" "t49" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "-1568 -1528 112" -"spawnflags" "1" -"targetname" "t47" -"classname" "point_combat" -} -{ -"origin" "-1484 -1502 128" -"spawnflags" "257" // b#7: 1 -> 257 -"targetname" "t48" -"classname" "point_combat" -} -{ -"origin" "-1632 -1428 100" -"targetname" "t50" -"spawnflags" "1" -"target" "t47" -"classname" "monster_soldier" -"angle" "0" -} -{ -"item" "ammo_shells" -"origin" "-1628 -1388 100" -"targetname" "t50" -"spawnflags" "257" -"target" "t48" -"angle" "0" -"classname" "monster_soldier" -} -{ -"origin" "-2104 -1360 160" -"target" "t46" -"targetname" "t45" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "-2104 -1588 160" -"target" "t45" -"targetname" "t46" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"targetname" "t50" -"origin" "-2104 -1328 176" -"spawnflags" "1" -"target" "t45" -"angle" "270" -"classname" "monster_soldier" -} -{ -"target" "t176" -"targetname" "t50" -"origin" "-2116 -1868 152" -"spawnflags" "257" -"angle" "0" -"classname" "monster_soldier" -} -{ -"spawnflags" "1" -"origin" "-1988 -2080 128" -"targetname" "t44" -"classname" "point_combat" -} -{ -"origin" "-1492 -2612 120" -"spawnflags" "1" -"targetname" "t43" -"classname" "point_combat" -} -{ -"origin" "-1468 -2556 120" -"spawnflags" "1" -"targetname" "t42" -"classname" "point_combat" -} -{ -"targetname" "t49" -"origin" "-1652 -2564 136" -"target" "t42" -"spawnflags" "1" -"classname" "monster_soldier" -} -{ -"item" "ammo_shells" -"targetname" "t49" -"origin" "-1740 -2576 136" -"target" "t44" -"spawnflags" "1" -"angle" "0" -"classname" "monster_soldier" -} -{ -"targetname" "t49" -"origin" "-1700 -2592 136" -"target" "t43" -"spawnflags" "1" -"classname" "monster_soldier" -"item" "ammo_shells" -} -{ -"origin" "-996 568 -132" -"map" "mine2$mine1" -"targetname" "t41" -"classname" "target_changelevel" -} -{ -"model" "*57" -"angle" "90" -"target" "t41" -"classname" "trigger_multiple" -} -{ // b#21: was mine2's spot -"targetname" "mintro" -"origin" "-1216 -2944 120" -"angle" "90" -"classname" "info_player_start" -} -{ -"map" "mintro$end" -"origin" "-1192 -3096 160" -"targetname" "t40" -"classname" "target_changelevel" -} -{ -"model" "*58" -"angle" "270" -"target" "t40" -"classname" "trigger_multiple" -} -{ -"model" "*59" -"spawnflags" "2048" -"wait" "-1" -"angle" "-2" -"_minlight" ".2" -"classname" "func_button" -"target" "t77" -} -{ -"origin" "184 -1632 904" -"wait" "3.5" -"target" "t37" -"classname" "func_timer" -"spawnflags" "2048" // b#6: added this -"targetname" "t162" -} -{ -"origin" "184 -1376 904" -"targetname" "t38" -"wait" "3.5" -"target" "t35" -"classname" "func_timer" -"spawnflags" "3840" // b#4: added this -} -{ -"origin" "8 -1632 904" -"targetname" "t39" -"wait" "3.5" -"target" "t36" -"classname" "func_timer" -"spawnflags" "2048" // b#6: added this -} -{ -"dmg" "50" -"origin" "128 -1624 864" -"targetname" "t37" -"classname" "target_explosion" -"spawnflags" "2048" // b#6: added this -} -{ -"dmg" "50" -"origin" "52 -1628 864" -"targetname" "t36" -"classname" "target_explosion" -"spawnflags" "2048" // b#6: added this -} -{ -"dmg" "50" -"origin" "136 -1392 864" -"targetname" "t37" // b#4: t35 -> t37 -"classname" "target_explosion" -"spawnflags" "2048" // b#6: added this -} -{ -"model" "*60" -"target" "t29" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "0 -1500 904" -"wait" "3.5" -"target" "t28" -"classname" "func_timer" -"targetname" "t161" -"spawnflags" "3840" // b#4: added this -} -{ -"dmg" "50" -"origin" "56 -1504 864" -"targetname" "t36" // b#4: t28 -> t36 -"classname" "target_explosion" -"spawnflags" "2048" // b#6: added this -} -{ -"model" "*61" -"target" "t25" -"classname" "func_button" -"angle" "270" -} -{ -"model" "*62" -"target" "t25" -"angle" "0" -"classname" "func_button" -} -{ -"origin" "-1524 -184 232" -"classname" "light" -"light" "96" -} -{ -"origin" "-1524 -104 232" -"light" "96" -"classname" "light" -} -{ -"origin" "-1524 -184 -24" -"classname" "light" -"light" "96" -} -{ -"origin" "-1524 -104 -24" -"light" "96" -"classname" "light" -} -{ -"origin" "-1524 -104 488" -"classname" "light" -"light" "96" -} -{ -"origin" "-1524 -184 488" -"light" "96" -"classname" "light" -} -{ -"origin" "-1408 64 696" -"classname" "light" -"light" "120" -} -{ -"origin" "-1536 64 696" -"light" "120" -"classname" "light" -} -{ -"origin" "-1408 -128 696" -"classname" "light" -"light" "120" -} -{ -"origin" "-1536 -128 696" -"light" "120" -"classname" "light" -} -{ -"origin" "-1536 256 696" -"classname" "light" -"light" "120" -} -{ -"origin" "-1408 256 696" -"light" "120" -"classname" "light" -} -{ -"origin" "-984 168 -40" -"light" "120" -"classname" "light" -} -{ -"model" "*63" -"message" "Access denied.\nToxic conditions present." -"spawnflags" "2056" -"targetname" "t2" -"wait" "-1" -"speed" "35" -"_minlight" ".2" -"angle" "-1" -"classname" "func_door" -"lip" "16" -} -{ -"light" "100" -"classname" "light" -"origin" "-1214 -2926 180" -} -{ -"light" "100" -"classname" "light" -"origin" "-1218 -3122 180" -} -{ -"classname" "light" -"light" "80" -"origin" "-1310 -2842 180" -} -{ -"model" "*64" -"classname" "func_door" -"angle" "0" -"team" "d1" -"_minlight" ".18" -} -{ -"classname" "light" -"origin" "-1328 -2848 800" -"light" "64" -} -{ -"classname" "light" -"origin" "-1256 -2848 800" -"light" "64" -} -{ -"classname" "light" -"origin" "-1152 -2848 800" -"light" "64" -} -{ -"classname" "light" -"origin" "-1088 -2848 800" -"light" "64" -} -{ -"origin" "-1218 -2842 180" -"light" "100" -"classname" "light" -} -{ -"origin" "-1126 -2838 180" -"light" "80" -"classname" "light" -} -{ // b#22: was mintro's spot -"origin" "-984 396 -136" -"targetname" "mine2" -"angle" "270" -"classname" "info_player_start" -} -{ -"light" "175" -"classname" "light" -"origin" "96 -1768 928" -} -{ -"light" "175" -"classname" "light" -"origin" "96 -1632 928" -} -{ -"light" "175" -"classname" "light" -"origin" "96 -1512 928" -} -{ -"light" "175" -"classname" "light" -"origin" "96 -1376 928" -} -{ -"light" "175" -"classname" "light" -"origin" "96 -1224 928" -} -{ -"classname" "light" -"light" "175" -"origin" "96 -1864 928" -} -{ -"_color" "1.000000 0.022727 0.000000" -"light" "80" -"classname" "light" -"origin" "88 -1568 1136" -} -{ -"_color" "1.000000 0.022727 0.000000" -"light" "80" -"classname" "light" -"origin" "96 -1440 1136" -} -{ -"_color" "1.000000 0.022727 0.000000" -"light" "80" -"classname" "light" -"origin" "96 -1312 1136" -} -{ -"classname" "light" -"light" "80" -"_color" "1.000000 0.022727 0.000000" -"origin" "96 -1696 1136" -} -{ -"targetname" "t76" -"angle" "0" -"classname" "monster_soldier" -"origin" "-936 -936 840" -} -{ -"item" "ammo_shells" -"targetname" "t76" -"angle" "0" -"classname" "monster_soldier" -"origin" "-960 -832 840" -} -{ -"targetname" "t76" -"classname" "monster_soldier" -"angle" "0" -"origin" "-1104 -936 840" -} -{ -"classname" "light" -"light" "180" -"origin" "-968 -328 64" -} -{ -"light" "120" -"classname" "light" -"origin" "-2160 -1160 832" -} -{ -"light" "120" -"classname" "light" -"origin" "-2072 -1032 832" -} -{ -"origin" "-2160 -1320 832" -"classname" "light" -"light" "120" -} -{ -"origin" "-1856 -1032 832" -"classname" "light" -"light" "120" -} -{ -"light" "180" -"classname" "light" -"origin" "-1088 40 64" -} -{ -"classname" "light" -"light" "180" -"origin" "-864 40 64" -} -{ -"classname" "light" -"light" "100" -"origin" "-424 -216 824" -} -{ -"classname" "light" -"light" "100" -"origin" "-296 -216 752" -} -{ -"classname" "light" -"light" "120" -"origin" "-176 -208 696" -} -{ -"classname" "light" -"light" "250" -"origin" "-992 -544 1056" -} -{ -"light" "100" -"classname" "light" -"origin" "200 -240 768" -} -{ -"light" "100" -"classname" "light" -"origin" "200 -384 792" -} -{ -"classname" "light" -"light" "100" -"origin" "200 -72 736" -} -{ -"classname" "light" -"light" "150" -"origin" "264 -576 824" -} -{ -"light" "200" -"classname" "light" -"origin" "352 -568 632" -} -{ -"classname" "light" -"light" "200" -"origin" "152 -576 632" -} -{ -"light" "80" -"classname" "light" -"origin" "464 -600 856" -} -{ -"classname" "light" -"light" "80" -"origin" "88 -592 856" -} -{ -"light" "150" -"classname" "light" -"origin" "272 -984 880" -} -{ -"classname" "light" -"light" "150" -"origin" "96 -992 880" -} -{ -"classname" "light" -"light" "80" -"origin" "384 -968 912" -} -{ -"classname" "light" -"light" "150" -"origin" "8 -2016 944" -} -{ -"light" "80" -"classname" "light" -"origin" "68 -2212 1096" -} -{ -"light" "80" -"classname" "light" -"origin" "212 -2048 1096" -} -{ -"light" "80" -"classname" "light" -"origin" "60 -2044 1088" -} -{ -"classname" "light" -"light" "80" -"origin" "224 -2212 1096" -} -{ -"classname" "light" -"light" "120" -"origin" "-4 -2160 892" -} -{ -"light" "80" -"classname" "light" -"origin" "128 -2280 924" -} -{ -"classname" "light" -"light" "80" -"origin" "292 -2052 924" -} -{ -"light" "120" -"classname" "light" -"origin" "-1232 -2396 728" -} -{ -"light" "120" -"classname" "light" -"origin" "-1232 -2424 680" -} -{ -"light" "140" -"classname" "light" -"origin" "-1232 -2576 596" -} -{ -"classname" "light" -"light" "120" -"origin" "-1232 -2704 632" -} -{ -"classname" "light" -"light" "120" -"origin" "-1232 -2724 680" -} -{ -"classname" "light" -"light" "120" -"origin" "-1232 -2752 728" -} -{ -"classname" "light" -"light" "130" -"origin" "-1800 -2584 1064" -} -{ -"light" "250" -"classname" "light" -"origin" "-1072 -2584 920" -} -{ -"light" "250" -"classname" "light" -"origin" "-1224 -2592 920" -} -{ -"classname" "light" -"light" "120" -"origin" "-888 -2576 872" -} -{ -"classname" "light" -"light" "80" -"origin" "-1752 -2568 864" -} -{ -"light" "80" -"classname" "light" -"origin" "-1904 -2304 864" -} -{ -"classname" "light" -"light" "80" -"origin" "-1760 -2872 864" -} -{ -"model" "*65" -"spawnflags" "2048" -"classname" "func_button" -"angle" "180" -"wait" "-1" -"target" "t2" -} -{ -"light" "80" -"classname" "light" -"origin" "-488 -2600 920" -} -{ -"classname" "light" -"light" "80" -"origin" "-488 -2512 920" -} -{ -"light" "80" -"classname" "light" -"origin" "-128 -2144 976" -} -{ -"light" "80" -"classname" "light" -"origin" "-568 -1088 880" -} -{ -"classname" "light" -"light" "80" -"origin" "-752 -1088 880" -} -{ -"light" "120" -"classname" "light" -"origin" "-864 -832 904" -} -{ -"light" "80" -"classname" "light" -"origin" "-856 -896 960" -} -{ -"classname" "light" -"light" "120" -"origin" "-864 -960 904" -} -{ -"light" "120" -"classname" "light" -"origin" "-1576 -1208 832" -} -{ -"light" "120" -"classname" "light" -"origin" "-2168 -1432 832" -} -{ -"light" "120" -"classname" "light" -"origin" "-1720 -1032 832" -} -{ -"light" "120" -"classname" "light" -"origin" "-1592 -1032 832" -} -{ -"classname" "light" -"light" "120" -"origin" "-1584 -1472 832" -} -{ -"light" "100" -"classname" "light" -"origin" "-672 -1184 904" -} -{ -"light" "100" -"classname" "light" -"origin" "-672 -1048 888" -} -{ -"classname" "light" -"light" "80" -"origin" "-672 -1304 912" -} -{ -"light" "100" -"classname" "light" -"origin" "-1408 -1656 888" -} -{ -"classname" "light" -"light" "100" -"origin" "-1408 -1776 888" -} -{ -"light" "100" -"classname" "light" -"origin" "-1104 -1504 984" -} -{ -"classname" "light" -"light" "100" -"origin" "-736 -864 1016" -} -{ -"light" "100" -"classname" "light" -"origin" "-952 -936 1016" -} -{ -"classname" "light" -"light" "100" -"origin" "-952 -856 1016" -} -{ -"light" "100" -"classname" "light" -"origin" "-1120 -936 1016" -} -{ -"classname" "light" -"light" "100" -"origin" "-1120 -856 1016" -} -{ -"light" "100" -"classname" "light" -"origin" "-632 -896 1016" -} -{ -"classname" "light" -"light" "100" -"origin" "-736 -944 1016" -} -{ -"origin" "-976 -1520 944" -"light" "150" -"classname" "light" -} -{ -"model" "*66" -"spawnflags" "2048" -"target" "t163" -"classname" "func_button" -"_minlight" ".2" -"angle" "-2" -"wait" "-1" -} -{ -"light" "100" -"classname" "light" -"origin" "-960 -1624 824" -} -{ -"classname" "light" -"light" "100" -"origin" "-960 -1832 824" -} -{ -"classname" "light" -"light" "120" -"origin" "-728 -1376 928" -} -{ -"classname" "light" -"light" "150" -"origin" "-1706 -1398 908" -} -{ -"light" "150" -"classname" "light" -"origin" "-1978 -1130 908" -} -{ -"origin" "-1832 -1252 388" -"light" "130" -"classname" "light" -} -{ -"origin" "-2124 -1432 184" -"classname" "light" -"light" "72" -} -{ -"origin" "-2124 -1580 184" -"classname" "light" -"light" "72" -} -{ -"origin" "-1996 -1592 168" -"classname" "light" -"light" "72" -} -{ -"origin" "-1852 -1592 168" -"classname" "light" -"light" "72" -} -{ -"origin" "-1904 -1724 168" -"classname" "light" -"light" "64" -} -{ -"origin" "-1984 -1984 168" -"classname" "light" -"light" "64" -} -{ -"origin" "-2120 -1264 184" -"light" "72" -"classname" "light" -} -{ -"origin" "-1808 -1680 64" -"classname" "light" -"light" "72" -} -{ -"origin" "-1856 -1756 64" -"classname" "light" -"light" "72" -} -{ -"origin" "-1876 -1852 64" -"classname" "light" -"light" "72" -} -{ -"origin" "-1860 -1580 80" -"light" "64" -"classname" "light" -} -{ -"origin" "-1040 -2772 144" -"light" "140" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1066 302 -84" -} -{ -"classname" "light" -"light" "100" -"origin" "-974 306 -84" -} -{ -"origin" "-1228 -2572 216" -"light" "140" -"classname" "light" -} -{ -"origin" "-1320 -2576 444" -"classname" "light" -"light" "150" -} -{ -"origin" "-1136 -2576 444" -"classname" "light" -"light" "150" -} -{ -"origin" "376 -856 884" -"classname" "light" -"light" "120" -} -{ -"origin" "380 -732 824" -"light" "120" -"classname" "light" -} -{ -"origin" "-1608 -1728 808" -"classname" "light" -"light" "80" -} -{ -"origin" "-1732 -1728 808" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "80" -"origin" "-1884 -1708 808" -} -{ -"light" "80" -"classname" "light" -"origin" "-1884 -1756 808" -} -{ -"classname" "light" -"light" "80" -"origin" "-1232 -1960 864" -} -{ -"light" "80" -"classname" "light" -"origin" "-1232 -2008 864" -} -{ -"classname" "light" -"light" "80" -"origin" "-1440 -1988 864" -} -{ -"light" "80" -"classname" "light" -"origin" "-1440 -2036 864" -} -{ -"classname" "light" -"light" "80" -"origin" "-1436 -1416 864" -} -{ -"light" "80" -"classname" "light" -"origin" "-1436 -1464 864" -} -{ -"classname" "light" -"light" "80" -"origin" "-1368 -1328 864" -} -{ -"light" "80" -"classname" "light" -"origin" "-1320 -1328 864" -} -{ -"classname" "light" -"light" "80" -"origin" "-1112 -1348 940" -} -{ -"light" "80" -"classname" "light" -"origin" "-1064 -1348 940" -} -{ -"origin" "-1008 -1632 996" -"classname" "light" -"light" "100" -} -{ -"origin" "-1004 -1828 996" -"light" "100" -"classname" "light" -} -{ -"origin" "-868 -1504 984" -"light" "100" -"classname" "light" -} -{ -"origin" "-760 -1352 984" -"light" "100" -"classname" "light" -} -{ -"origin" "-676 -1524 984" -"classname" "light" -"light" "100" -} -{ -"origin" "-1104 -1504 920" -"classname" "light" -"light" "80" -} -{ -"origin" "-600 -1412 984" -"light" "100" -"classname" "light" -} -{ -"origin" "-764 -984 892" -"light" "100" -"classname" "light" -} -{ -"origin" "-1076 -804 892" -"classname" "light" -"light" "100" -} -{ -"origin" "-912 -800 892" -"light" "100" -"classname" "light" -} -{ -"origin" "-576 -880 892" -"light" "80" -"classname" "light" -} -{ -"origin" "-576 -928 892" -"classname" "light" -"light" "80" -} -{ -"origin" "-1024 -980 892" -"light" "80" -"classname" "light" -} -{ -"origin" "-1176 -928 892" -"light" "80" -"classname" "light" -} -{ -"origin" "-1176 -880 892" -"classname" "light" -"light" "80" -} -{ -"origin" "-684 -808 892" -"classname" "light" -"light" "80" -} -{ -"origin" "-1128 -980 892" -"classname" "light" -"light" "80" -} -{ -"origin" "-936 -980 892" -"light" "80" -"classname" "light" -} -{ -"origin" "-764 -1240 940" -"classname" "light" -"light" "80" -} -{ -"origin" "-764 -1192 940" -"light" "80" -"classname" "light" -} -{ -"origin" "-872 -1348 940" -"classname" "light" -"light" "80" -} -{ -"origin" "-920 -1348 940" -"light" "80" -"classname" "light" -} -{ -"origin" "-1752 -1888 808" -"classname" "light" -"light" "80" -} -{ -"origin" "-1704 -1888 808" -"light" "80" -"classname" "light" -} -{ -"origin" "-616 -808 892" -"classname" "light" -"light" "80" -} -{ -"origin" "-760 -812 892" -"light" "80" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "-1816 -2608 176" -} -{ -"light" "64" -"classname" "light" -"origin" "-1984 -2544 176" -} -{ -"light" "64" -"classname" "light" -"origin" "-1984 -2328 176" -} -{ -"light" "64" -"classname" "light" -"origin" "-1984 -2088 176" -} -{ -"classname" "light" -"light" "64" -"origin" "-1672 -2600 176" -} -{ -"classname" "light" -"light" "175" -"origin" "-1576 -1792 864" -} -{ -"classname" "light" -"light" "100" -"origin" "-2112 -1240 768" -} -{ -"origin" "-1832 -1480 768" -"classname" "light" -"light" "130" -} -{ -"origin" "-2176 -1240 768" -"light" "100" -"classname" "light" -} -{ -"origin" "-1674 -1284 908" -"classname" "light" -"light" "150" -} -{ -"origin" "-1778 -1136 908" -"classname" "light" -"light" "150" -} -{ -"origin" "-1950 -1094 1036" -"classname" "light" -"light" "150" -} -{ -"origin" "-1970 -1308 908" -"classname" "light" -"light" "150" -} -{ -"origin" "-2068 -1442 908" -"classname" "light" -"light" "150" -} -{ -"origin" "-2072 -1240 908" -"classname" "light" -"light" "150" -} -{ -"origin" "-2074 -1072 908" -"classname" "light" -"light" "150" -} -{ -"origin" "-1610 -1434 1016" -"light" "150" -"classname" "light" -} -{ -"origin" "-1732 -1256 624" -"classname" "light" -"light" "88" -} -{ -"origin" "-1908 -1356 584" -"classname" "light" -"light" "100" -} -{ -"origin" "-1836 -1152 624" -"classname" "light" -"light" "88" -} -{ -"origin" "-1760 -1380 624" -"light" "88" -"classname" "light" -} -{ -"origin" "-1960 -1384 732" -"light" "200" -"classname" "light" -} -{ -"classname" "light" -"light" "200" -"origin" "-1964 -1172 732" -} -{ -"classname" "light" -"light" "200" -"origin" "-1676 -1384 732" -} -{ -"origin" "-1680 -1172 732" -"light" "200" -"classname" "light" -} -{ -"light" "100" -"classname" "light" -"origin" "-872 -208 -8" -} -{ -"classname" "light" -"light" "100" -"origin" "-872 -72 -8" -} -{ -"light" "100" -"classname" "light" -"origin" "-1072 -72 -8" -} -{ -"classname" "light" -"light" "100" -"origin" "-1072 -208 -8" -} -{ -"classname" "light" -"light" "140" -"origin" "-976 -144 440" -} -{ -"classname" "light" -"light" "120" -"origin" "-976 -16 528" -} -{ -"light" "120" -"classname" "light" -"origin" "-976 8 584" -} -{ -"light" "120" -"classname" "light" -"origin" "-976 -272 528" -} -{ -"light" "120" -"classname" "light" -"origin" "-976 -248 488" -} -{ -"classname" "light" -"light" "120" -"origin" "-976 -296 584" -} -{ -"light" "100" -"classname" "light" -"origin" "-936 -192 -96" -} -{ -"classname" "light" -"light" "100" -"origin" "-936 -104 -96" -} -{ -"light" "80" -"classname" "light" -"origin" "-1168 -192 56" -} -{ -"classname" "light" -"light" "80" -"origin" "-1168 -104 56" -} -{ -"light" "80" -"classname" "light" -"origin" "-768 -192 56" -} -{ -"classname" "light" -"light" "80" -"origin" "-768 -104 56" -} -{ -"light" "100" -"classname" "light" -"origin" "-1032 -104 -96" -} -{ -"classname" "light" -"light" "100" -"origin" "-1032 -192 -96" -} -{ -"light" "200" -"origin" "-1856 -2904 904" -"classname" "light" -} -{ -"light" "200" -"origin" "-1856 -2688 904" -"classname" "light" -} -{ -"light" "200" -"origin" "-1856 -2272 904" -"classname" "light" -} -{ -"light" "200" -"origin" "-1856 -2464 904" -"classname" "light" -} -{ -"origin" "-1704 -2712 840" -"classname" "light" -"light" "80" -} -{ -"origin" "-1912 -2456 1008" -"light" "100" -"classname" "light" -} -{ -"origin" "-1912 -2680 1008" -"light" "100" -"classname" "light" -} -{ -"origin" "-1912 -2896 1008" -"light" "100" -"classname" "light" -} -{ -"origin" "-1912 -2264 1008" -"light" "100" -"classname" "light" -} -{ -"model" "*67" -"targetname" "t163" -"sounds" "4" -"wait" "-1" -"spawnflags" "2049" -"angle" "270" -"classname" "func_door" -"_minlight" ".2" -} -{ -"origin" "-576 -2144 984" -"classname" "light" -"light" "150" -} -{ -"origin" "-608 -1984 984" -"classname" "light" -"light" "175" -} -{ -"origin" "-744 -1984 984" -"classname" "light" -"light" "175" -} -{ -"origin" "-912 -1992 984" -"classname" "light" -"light" "175" -} -{ -"origin" "-1064 -1984 984" -"classname" "light" -"light" "175" -} -{ -"origin" "-592 -2256 984" -"light" "150" -"classname" "light" -} -{ -"origin" "-392 -2304 920" -"classname" "light" -"light" "150" -} -{ -"origin" "-264 -2200 920" -"classname" "light" -"light" "150" -} -{ -"origin" "-400 -2200 920" -"classname" "light" -"light" "150" -} -{ -"origin" "148 -1092 884" -"classname" "light" -"light" "100" -} -{ -"origin" "28 -1092 884" -"light" "100" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "-296 -2400 920" -} -{ -"light" "150" -"classname" "light" -"origin" "-328 -2568 920" -} -{ -"light" "150" -"classname" "light" -"origin" "-672 -1184 1008" -} -{ -"classname" "light" -"light" "150" -"origin" "-680 -1412 1044" -} -{ -"light" "100" -"classname" "light" -"origin" "-1280 -1536 944" -} -{ -"classname" "light" -"light" "100" -"origin" "-1256 -1360 944" -} -{ -"classname" "light" -"light" "100" -"origin" "-880 -1728 984" -} -{ -"origin" "-1096 -1456 1112" -"classname" "light" -"light" "150" -} -{ -"origin" "-1336 -1440 992" -"classname" "light" -"light" "150" -} -{ -"origin" "-1328 -1664 992" -"classname" "light" -"light" "150" -} -{ -"classname" "light" -"light" "250" -"origin" "-1088 -1720 864" -} -{ -"light" "100" -"classname" "light" -"origin" "-1200 -1728 1016" -} -{ -"light" "150" -"classname" "light" -"origin" "-912 -1440 1128" -} -{ -"light" "150" -"classname" "light" -"origin" "-1328 -1880 992" -} -{ -"spawnflags" "256" -"light" "150" -"classname" "light" -"origin" "-1632 -1784 968" -} -{ -"light" "150" -"classname" "light" -"origin" "-1816 -1784 968" -} -{ -"light" "150" -"classname" "light" -"origin" "-1824 -1640 968" -} -{ -"light" "150" -"classname" "light" -"origin" "-1832 -1496 968" -} -{ -"classname" "light" -"light" "100" -"origin" "-1088 -1728 1000" -} -{ -"classname" "light" -"light" "125" -"origin" "-2280 -1242 800" -} -{ -"light" "150" -"classname" "light" -"origin" "-624 -2736 984" -} -{ -"light" "150" -"classname" "light" -"origin" "-752 -2352 984" -} -{ -"light" "150" -"classname" "light" -"origin" "-648 -2392 984" -} -{ -"light" "150" -"classname" "light" -"origin" "-632 -2560 984" -} -{ -"light" "250" -"classname" "light" -"origin" "-756 -2560 1080" -} -{ -"light" "150" -"classname" "light" -"origin" "-848 -2560 984" -} -{ -"light" "150" -"classname" "light" -"origin" "-760 -2744 984" -} -{ -"light" "150" -"classname" "light" -"origin" "-1360 -2696 1096" -} -{ -"light" "150" -"origin" "-1104 -2632 1096" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "-1304 -2520 1096" -} -{ -"light" "150" -"classname" "light" -"origin" "-1472 -2472 1096" -} -{ -"light" "150" -"classname" "light" -"origin" "-1352 -2336 1096" -} -{ -"light" "150" -"origin" "-1112 -2640 1424" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "-1112 -2392 1424" -} -{ -"light" "150" -"classname" "light" -"origin" "-1312 -2528 1424" -} -{ -"light" "150" -"classname" "light" -"origin" "-1480 -2480 1424" -} -{ -"light" "150" -"classname" "light" -"origin" "-1360 -2344 1424" -} -{ -"light" "150" -"classname" "light" -"origin" "-1368 -2704 1424" -} -{ -"light" "150" -"origin" "-1104 -2384 1096" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1312 -2312 800" -"light" "64" -} -{ -"light" "100" -"origin" "-1128 -312 136" -"classname" "light" -} -{ -"light" "100" -"origin" "-816 0 136" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1120 8 136" -"light" "100" -} -{ -"origin" "-976 88 104" -"classname" "light" -"light" "100" -} -{ -"origin" "-976 -328 104" -"classname" "light" -"light" "100" -} -{ -"model" "*68" -"origin" "-976 -144 372" -"speed" "400" -"classname" "func_rotating" -"spawnflags" "2048" -"_minlight" "0.3" -"targetname" "t2" -"dmg" "33" -} -{ -"origin" "-1344 -472 888" -"light" "150" -"classname" "light" -} -{ -"origin" "-696 -576 888" -"classname" "light" -"light" "150" -} -{ -"origin" "-896 -576 888" -"classname" "light" -"light" "150" -} -{ -"origin" "-1040 -576 888" -"classname" "light" -"light" "150" -} -{ -"origin" "-1256 -576 888" -"classname" "light" -"light" "150" -} -{ -"light" "100" -"origin" "-808 -296 136" -"classname" "light" -} -{ -"light" "150" -"classname" "light" -"origin" "-608 -472 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-616 -344 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-616 -192 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-624 -64 888" -} -{ -"light" "80" -"classname" "light" -"origin" "-704 24 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-720 128 888" -} -{ -"light" "80" -"classname" "light" -"origin" "-816 200 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-976 200 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-1192 200 888" -} -{ -"light" "80" -"classname" "light" -"origin" "-1320 168 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-1248 8 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-1280 -152 888" -} -{ -"light" "150" -"classname" "light" -"origin" "-1304 -264 888" -} -{ -"light" "64" -"origin" "-1272 -360 840" -"classname" "light" -} -{ -"light" "64" -"origin" "-896 128 696" -"classname" "light" -} -{ -"light" "64" -"origin" "-864 128 720" -"classname" "light" -} -{ -"light" "64" -"origin" "-832 128 736" -"classname" "light" -} -{ -"light" "64" -"origin" "-800 128 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-736 128 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-688 72 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-760 -8 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-688 -80 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-760 -160 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-688 -216 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-760 -288 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-688 -352 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-688 -440 760" -"classname" "light" -} -{ -"light" "64" -"origin" "-760 -440 784" -"classname" "light" -} -{ -"light" "64" -"origin" "-800 -440 808" -"classname" "light" -} -{ -"light" "64" -"origin" "-840 -440 840" -"classname" "light" -} -{ -"light" "64" -"origin" "-888 -360 840" -"classname" "light" -} -{ -"light" "64" -"origin" "-976 -360 840" -"classname" "light" -} -{ -"light" "64" -"origin" "-1048 -360 840" -"classname" "light" -} -{ -"classname" "light" -"origin" "-928 128 680" -"light" "64" -} -{ -"classname" "light" -"origin" "-992 128 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1056 120 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1128 120 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1192 120 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1256 88 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1256 24 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1240 -48 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1240 -112 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1248 -192 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1248 -248 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1248 -304 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1248 -368 656" -"light" "64" -} -{ -"classname" "light" -"origin" "-1136 -360 840" -"light" "64" -} -{ -"classname" "light" -"origin" "-1200 -360 840" -"light" "64" -} -{ -"classname" "light" -"origin" "-888 -440 840" -"light" "64" -} -{ -"classname" "light" -"origin" "-976 -440 840" -"light" "64" -} -{ -"classname" "light" -"origin" "-1048 -440 840" -"light" "64" -} -{ -"light" "64" -"origin" "-1136 -440 840" -"classname" "light" -} -{ -"light" "64" -"origin" "-1200 -440 840" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1272 -440 840" -"light" "64" -} -{ -"classname" "light" -"origin" "-688 -288 760" -"light" "64" -} -{ -"classname" "light" -"origin" "-688 -160 760" -"light" "64" -} -{ -"classname" "light" -"origin" "-688 -8 760" -"light" "64" -} -{ -"origin" "-184 -8 696" -"classname" "light" -"light" "120" -} -{ -"origin" "-552 -208 880" -"light" "100" -"classname" "light" -} -{ -"origin" "24 128 696" -"classname" "light" -"light" "150" -} -{ -"origin" "-224 128 696" -"classname" "light" -"light" "150" -} -{ -"light" "64" -"origin" "-1000 -2848 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1408 -2864 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1480 -2864 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1504 -2800 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1512 -2344 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1448 -2312 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1384 -2312 800" -"classname" "light" -} -{ -"light" "64" -"origin" "-1248 -2304 800" -"classname" "light" -} -{ -"classname" "light" -"origin" "-960 -2784 800" -"light" "64" -} -{ -"origin" "-1504 -2424 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-1576 -2264 1032" -"classname" "light" -"light" "80" -} -{ -"origin" "-1448 -2232 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-1232 -2232 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-1072 -2232 1032" -"classname" "light" -"light" "80" -} -{ -"origin" "-976 -2304 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-960 -2408 1032" -"classname" "light" -"light" "80" -} -{ -"origin" "-880 -2496 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-872 -2624 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-872 -2776 1032" -"classname" "light" -"light" "150" -} -{ -"origin" "-864 -2904 1032" -"classname" "light" -"light" "150" -} -{ -"classname" "light" -"origin" "-1024 -2632 280" -"light" "140" -} -{ -"classname" "light" -"origin" "-1064 -2776 280" -"light" "140" -} -{ -"classname" "light" -"light" "150" -"origin" "-1600 -2904 1032" -} -{ -"model" "*69" -"origin" "-1232 -2576 516" -"dmg" "33" -"_minlight" "0.3" -"spawnflags" "2048" -"classname" "func_rotating" -"speed" "400" -"targetname" "t2" -} -{ -"light" "140" -"classname" "light" -"origin" "-1232 -2808 248" -} -{ -"light" "140" -"classname" "light" -"origin" "-1240 -2312 248" -} -{ -"light" "100" -"origin" "-1464 -2480 256" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1132 -2284 280" -"light" "140" -} -{ -"light" "140" -"origin" "-1400 -2576 280" -"classname" "light" -} -{ -"classname" "light" -"origin" "-1384 -2792 280" -"light" "140" -} -{ -"model" "*70" -"spawnflags" "8" -"team" "d2" -"angle" "180" -"classname" "func_door" -"_minlight" ".18" -} -{ -"origin" "-882 306 -84" -"light" "80" -"classname" "light" -} -{ -"origin" "-974 586 -84" -"classname" "light" -"light" "100" -} -{ -"origin" "-978 390 -84" -"classname" "light" -"light" "100" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/mine2@4a1c.ent b/stuff/mapfixes/baseq2/mine2@4a1c.ent deleted file mode 100644 index c614cbf3c..000000000 --- a/stuff/mapfixes/baseq2/mine2@4a1c.ent +++ /dev/null @@ -1,5178 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Added missing target names to info_player_coop (b#1) -// -// 2. Swapped info_player_start entities (b#2) -// -// This makes sure the player spawns at the right spot -// when loading from console. -// -// 3. Adding missing target name to target_speaker for func_train pathtarget (b#3) -// -// 4. Added missing spawnflag 1 to ambient target_speaker entities (b#4) -// -// 5. Removed unused entities (b#5) -// -// 6. Added missing 256-2048 spawnflags to some entities (b#6) -// -// 7. Moved triggered monster_gunner down a bit to avoid thud sound (b#7) -{ -"nextmap" "mine3" -"sounds" "9" -"sky" "unit4_" -"message" "Borehole" -"classname" "worldspawn" -} -{ -"classname" "point_combat" -"targetname" "t160" -"origin" "2136 2072 -352" -} -{ -"classname" "point_combat" -"targetname" "t161" -"origin" "2144 2096 -352" -} -{ -"classname" "point_combat" -"targetname" "t159" -"origin" "2152 2120 -352" -} -{ -"classname" "point_combat" -"targetname" "t162" -"origin" "2040 2096 -352" -} -{ -"origin" "-1088 -416 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-992 -416 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-896 -416 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-800 -416 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-736 -480 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-1248 -480 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-1312 -576 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-1184 -416 -56" -"classname" "light" -"light" "110" -} -{ -"origin" "-1312 -704 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-1312 -832 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "-672 -704 -56" -"classname" "light" -"light" "110" -} -{ -"origin" "-672 -832 -56" -"classname" "light" -"light" "110" -} -{ -"origin" "-672 -576 -56" -"light" "110" -"classname" "light" -} -{ -"origin" "1984 1112 -168" -"spawnflags" "2048" -"classname" "item_health_large" -} -{ -"origin" "352 -832 -120" -"classname" "light" -"light" "150" -} -{ -"model" "*1" -"origin" "-1248 -512 -128" -"classname" "func_train" -"noise" "world/train1.wav" -"speed" "88" -"target" "p1" -"targetname" "t14" -} -{ -"light" "64" -"_color" "1.000000 0.384921 0.011905" -"classname" "light" -"origin" "764 -736 60" -} -{ -"classname" "light" -"_color" "1.000000 0.384921 0.011905" -"light" "64" -"origin" "764 -600 60" -} -{ -"style" "1" -"targetname" "t149" -"classname" "func_areaportal" -} -{ -"model" "*2" -"target" "t158" -"wait" "3" -"classname" "trigger_multiple" -} -{ -"light" "250" -"classname" "light" -"origin" "1928 936 -72" -} -{ -"light" "200" -"classname" "light" -"origin" "1936 768 -72" -} -{ -"origin" "1936 1104 -72" -"classname" "light" -"light" "200" -} -{ -"model" "*3" -"team" "d5" -"angle" "180" -"_minlight" ".18" -"classname" "func_door" -"target" "t155" -} -{ -"model" "*4" -"angle" "360" -"team" "d3" -"_minlight" ".18" -"classname" "func_door" -} -{ -"model" "*5" -"team" "d4" -"_minlight" ".18" -"classname" "func_door" -} -{ -"model" "*6" -"classname" "func_door" -"_minlight" ".18" -"angle" "90" -"team" "td13" -} -{ -"model" "*7" -"origin" "-480 800 -340" -"target" "t6" -"targetname" "t16" -"classname" "func_train" -"noise" "world/train1.wav" -"spawnflags" "2048" -} -{ -"model" "*8" -"origin" "-480 800 -532" -"target" "t1" -"targetname" "t16" -"classname" "func_train" -"noise" "world/train1.wav" -"spawnflags" "2048" -} -{ -"model" "*9" -"origin" "-480 800 -124" -"target" "t2" -"targetname" "t16" -"spawnflags" "2048" -"noise" "world/train1.wav" -"classname" "func_train" -} -{ -"origin" "-480 768 -104" -"classname" "target_speaker" -"noise" "world/train2.wav" -"targetname" "backit2" // b#3: added this -} -{ -"origin" "-480 768 -672" -"targetname" "backit1" // b#3: backit2 -> backit1 -"noise" "world/train2.wav" -"classname" "target_speaker" -} -{ -"origin" "24 -896 -384" -"targetname" "stop2" -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/train2.wav" -} -{ -"origin" "24 -896 -584" -"targetname" "stop1" -"classname" "target_speaker" -"attenuation" "-1" -"noise" "world/train2.wav" -} -{ -"origin" "24 -896 -144" -"attenuation" "-1" -"targetname" "stop3" -"classname" "target_speaker" -"noise" "world/train2.wav" -} -{ -"model" "*10" -"classname" "func_button" -"angle" "0" -"pathtarget" "p3" -"target" "t15" -} -{ -"classname" "light" -"light" "110" -"origin" "412 -304 -508" -} -{ -"origin" "-776 744 -360" -"targetname" "mine3c" // b#1: added this -"classname" "info_player_coop" -"angle" "360" -} -{ -"origin" "-776 856 -360" -"targetname" "mine3c" // b#1: added this -"classname" "info_player_coop" -"angle" "360" -} -{ -"origin" "-712 800 -360" -"targetname" "mine3c" -"angle" "360" -"classname" "info_player_coop" -} -{ -"origin" "384 -248 -528" -"targetname" "mine3a" // b#1: added this -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "320 -248 -528" -"targetname" "mine3a" // b#1: added this -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "352 -184 -528" -"targetname" "mine3a" -"angle" "270" -"classname" "info_player_coop" -} -{ -"origin" "-272 -552 -328" -"angle" "270" -"targetname" "mine3b" // b#1: added this -"classname" "info_player_coop" -} -{ -"origin" "-264 -384 -328" -"targetname" "mine3b" // b#1: added this -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "-272 -672 -328" -"angle" "360" -"targetname" "mine3b" -"classname" "info_player_coop" -} -{ -"origin" "768 -704 -80" -"classname" "info_player_coop" -"targetname" "mine1" // b#1: added this -"angle" "360" -} -{ -"origin" "768 -640 -80" -"targetname" "mine1" -"classname" "info_player_coop" -"angle" "360" -} -{ -"origin" "968 -968 -80" -"targetname" "mine1" -"angle" "90" -"classname" "info_player_coop" -} -{ -"model" "*11" -"classname" "trigger_once" -"targetname" "t157" -"target" "t156" -"spawnflags" "2048" -} -{ -"targetname" "t16" -"spawnflags" "2" -"noise" "world/drill1.wav" -"classname" "target_speaker" -"origin" "100 800 -392" -} -{ -"spawnflags" "2048" -"origin" "920 -808 -64" -"targetname" "t155" -"classname" "trigger_relay" -"target" "t157" -} -{ -"origin" "-64 -600 -316" -"light" "120" -"classname" "light" -} -{ -"model" "*12" -"spawnflags" "2048" -"targetname" "k9" -"classname" "func_wall" -} -{ -"classname" "item_health" -"spawnflags" "2048" -"origin" "428 988 -352" -} -{ -"origin" "744 1608 -664" -"angles" "-25 328 0" -"classname" "info_player_intermission" -} -{ -"classname" "light" -"origin" "1184 1308 -612" -"light" "130" -} -{ -"classname" "misc_teleporter_dest" -"angle" "90" -"spawnflags" "1792" -"origin" "1344 -420 112" -"targetname" "t154" -} -{ -"model" "*13" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"angle" "90" -"origin" "1184 1304 -648" -"target" "t154" -} -{ -"model" "*14" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "952 -780 -80" -} -{ -"origin" "1820 1120 -160" -"targetname" "t153" -"angle" "270" -"spawnflags" "1792" -"classname" "misc_teleporter_dest" -} -{ -"origin" "528 656 -344" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "568 656 -344" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "2232 728 -328" -"spawnflags" "1792" -"light" "140" -"classname" "light" -} -{ -"origin" "1676 956 -168" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "1676 916 -168" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "876 1432 -340" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "920 1412 -340" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "1348 1812 -632" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1304 1772 -632" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1264 1728 -632" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1400 1860 -632" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "872 1332 -644" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "916 1320 -660" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "1552 2088 -672" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"origin" "1916 1204 -168" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "1960 1204 -168" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "1612 696 -376" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "1628 732 -376" -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "1944 476 -168" -"classname" "ammo_grenades" -"spawnflags" "1792" -} -{ -"origin" "1768 476 -168" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "1952 232 -168" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "1952 152 -168" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "-144 -632 -336" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-96 -672 -336" -"spawnflags" "1792" -"classname" "weapon_bfg" -} -{ -"origin" "1608 344 -168" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "1576 304 -168" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "1344 -400 -88" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"origin" "1304 -400 -88" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1384 -400 -88" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "1304 -40 104" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "1344 -68 104" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "1220 296 -504" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "1180 296 -504" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "1484 936 -552" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "1512 896 -552" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "1640 1104 -784" -"spawnflags" "1792" -"classname" "item_health_mega" -} -{ -"origin" "1640 1304 -564" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1640 1344 -564" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "1640 1264 -564" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "1880 1456 -572" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "1928 1472 -572" -"spawnflags" "1792" -"classname" "weapon_supershotgun" -} -{ -"origin" "2180 2132 -344" -"spawnflags" "1792" -"classname" "ammo_shells" -} -{ -"origin" "1408 2128 -340" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "1792 2092 -340" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"origin" "-148 800 -412" -"spawnflags" "1792" -"classname" "weapon_hyperblaster" -} -{ -"target" "t153" -"origin" "792 532 -336" -"spawnflags" "1792" -"classname" "misc_teleporter" -} -{ -"origin" "-352 728 -648" -"spawnflags" "1792" -"team" "mine" -"classname" "item_health_mega" -} -{ -"origin" "-352 728 -648" -"spawnflags" "1792" -"team" "mine" -"classname" "item_quad" -} -{ -"origin" "-352 584 -424" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-392 576 -424" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-312 584 -424" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-432 576 -424" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-384 680 -624" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"angle" "90" -"classname" "info_player_deathmatch" -"origin" "1472 312 -500" -} -{ -"classname" "info_player_deathmatch" -"angle" "360" -"origin" "1432 2072 -568" -} -{ -"classname" "info_player_deathmatch" -"angle" "0" -"origin" "624 1544 -636" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "796 856 -336" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "1448 1408 -336" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "2224 1192 -336" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "2128 824 -352" -} -{ -"classname" "info_player_deathmatch" -"angle" "45" -"origin" "1688 672 -160" -} -{ -"classname" "info_player_deathmatch" -"angle" "360" -"origin" "1140 168 -160" -} -{ -"classname" "info_player_deathmatch" -"angle" "90" -"origin" "1344 -336 -92" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t152" -"origin" "564 1120 -352" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t16" -"origin" "792 640 -324" -} -{ -"model" "*15" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*16" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "-428 832 -412" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "-428 1064 -412" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "-100 1184 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "44 1184 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-428 624 -412" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "-236 1184 -316" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "172 1184 -316" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "612 1088 -316" -} -{ -"origin" "-196 800 -432" -"classname" "light" -"light" "80" -} -{ -"origin" "-196 672 -432" -"classname" "light" -"light" "80" -} -{ -"origin" "-196 928 -432" -"light" "80" -"classname" "light" -} -{ -"origin" "-358 1128 -456" -"classname" "item_armor_shard" -"spawnflags" "2048" -} -{ -"origin" "-392 1128 -456" -"classname" "item_armor_shard" -"spawnflags" "2048" -} -{ -"origin" "-324 1128 -456" -"classname" "item_armor_shard" -"spawnflags" "2048" -} -{ -"origin" "-488 1192 -456" -"classname" "item_adrenaline" -"spawnflags" "2048" -} -{ -"origin" "-424 744 -592" -"classname" "light" -"light" "150" -} -{ -"origin" "-432 904 -592" -"light" "150" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "-344 752 -592" -} -{ -"classname" "light" -"light" "120" -"origin" "-352 912 -592" -} -{ -"light" "150" -"classname" "light" -"origin" "-272 1024 -392" -} -{ -"light" "150" -"classname" "light" -"origin" "-304 776 -392" -} -{ -"light" "150" -"classname" "light" -"origin" "-416 712 -392" -} -{ -"light" "120" -"classname" "light" -"origin" "-424 1088 -416" -} -{ -"light" "120" -"classname" "light" -"origin" "-424 1176 -416" -} -{ -"light" "120" -"classname" "light" -"origin" "-440 1184 -340" -} -{ -"classname" "light" -"light" "64" -"origin" "-184 1184 -244" -} -{ -"classname" "light" -"light" "64" -"origin" "-188 1120 -244" -} -{ -"classname" "light" -"light" "64" -"origin" "-312 1120 -244" -} -{ -"classname" "light" -"light" "64" -"origin" "-312 1184 -244" -} -{ -"light" "64" -"classname" "light" -"origin" "-440 1184 -244" -} -{ -"classname" "light" -"light" "64" -"origin" "-440 1120 -244" -} -{ -"classname" "light" -"light" "64" -"origin" "-56 1120 -244" -} -{ -"classname" "light" -"light" "64" -"origin" "-56 1184 -244" -} -{ -"light" "120" -"classname" "light" -"origin" "-440 1120 -340" -} -{ -"light" "120" -"classname" "light" -"origin" "-312 1120 -340" -} -{ -"light" "120" -"classname" "light" -"origin" "-312 1184 -340" -} -{ -"light" "120" -"classname" "light" -"origin" "-184 1184 -340" -} -{ -"light" "120" -"classname" "light" -"origin" "-188 1120 -340" -} -{ -"light" "120" -"classname" "light" -"origin" "-56 1120 -340" -} -{ -"light" "120" -"classname" "light" -"origin" "-56 1184 -340" -} -{ -"light" "64" -"classname" "light" -"origin" "72 1184 -244" -} -{ -"light" "64" -"classname" "light" -"origin" "200 1184 -244" -} -{ -"light" "64" -"classname" "light" -"origin" "196 1120 -244" -} -{ -"light" "64" -"classname" "light" -"origin" "280 1120 -244" -} -{ -"light" "64" -"classname" "light" -"origin" "344 1120 -244" -} -{ -"light" "64" -"classname" "light" -"origin" "384 1120 -244" -} -{ -"classname" "light" -"light" "120" -"origin" "-428 980 -416" -} -{ -"model" "*17" -"classname" "func_door" -"angle" "-1" -"wait" "-1" -"health" "10" -"targetname" "t152" -} -{ -"origin" "792 668 -352" -"targetname" "t151" -"classname" "point_combat" -} -{ -"target" "t151" -"origin" "792 552 -336" // b#7: -312 -> -336 -"targetname" "t16" -"spawnflags" "2" -"angle" "90" -"classname" "monster_gunner" -} -{ -"origin" "792 504 -344" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"model" "*18" -"wait" "-1" -"speed" "200" -"targetname" "t16" -"spawnflags" "8" -"angle" "-1" -"classname" "func_door" -} -{ -"classname" "target_secret" -"targetname" "t109" -"message" "You have found a secret." -"origin" "1608 1152 -808" -"spawnflags" "2048" -} -{ -"classname" "ammo_rockets" -"origin" "876 768 -340" -"spawnflags" "0" -} -{ -"classname" "ammo_bullets" -"origin" "876 804 -340" -"spawnflags" "0" -} -{ -"classname" "monster_gunner" -"angle" "0" -"spawnflags" "2" -"targetname" "t83" -"target" "t150" -"origin" "448 1120 -336" // b#7: -304 -> -336 -} -{ -"classname" "point_combat" -"targetname" "t150" -"origin" "688 1124 -320" -} -{ -"classname" "ammo_rockets" -"origin" "2212 736 -356" -"spawnflags" "2048" -} -{ -"model" "*19" -"targetname" "t157" -"delay" ".1" -"classname" "trigger_once" -"target" "t115" -"spawnflags" "2048" -} -{ -"origin" "636 652 -324" -"target" "t148" -"targetname" "t143" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "564 652 -324" -"target" "t148" -"targetname" "t144" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -} -{ -"classname" "item_health_large" -"origin" "-576 840 -360" -"spawnflags" "2048" -} -{ -"classname" "item_health_large" -"origin" "-576 760 -360" -"spawnflags" "2048" -} -{ -"model" "*20" -"classname" "trigger_once" -"target" "t147" -"spawnflags" "2048" -} -{ -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"noise" "world/lite_on3.wav" -"targetname" "t16" -"origin" "404 820 -312" -} -{ -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"noise" "world/lite_on3.wav" -"targetname" "t16" -"origin" "404 760 -312" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"targetname" "t143" -"target" "t145" -"origin" "656 656 -312" -} -{ -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -"targetname" "t144" -"target" "t146" -"origin" "544 656 -312" -} -{ -"classname" "light" -"light" "160" -"origin" "544 628 -312" -} -{ -"classname" "light" -"light" "160" -"origin" "656 628 -312" -} -{ -"model" "*21" -"speed" "200" -"wait" "-1" -"angle" "270" -"classname" "func_button" -"target" "t143" -"spawnflags" "2048" -} -{ -"model" "*22" -"speed" "200" -"wait" "-1" -"classname" "func_button" -"angle" "270" -"target" "t144" -"spawnflags" "2048" -} -{ -"origin" "504 1108 -268" -"targetname" "t16" -"wait" "6" -"random" "4" -"target" "t142" -"classname" "func_timer" -} -{ -"origin" "488 1116 -248" -"targetname" "t142" -"angle" "-2" -"sounds" "1" -"classname" "target_splash" -} -{ -"origin" "920 -688 -88" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "520 1104 -276" -"delay" ".5" -"targetname" "t141" -"classname" "target_explosion" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "340 1120 -336" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"model" "*23" -"dmg" "5" -"target" "t141" -"mass" "500" -"targetname" "t16" -"classname" "func_explosive" -} -{ -"origin" "1556 364 -160" -"classname" "monster_soldier_ss" -"angle" "270" -"spawnflags" "1" -} -{ -"origin" "1172 168 -160" -"spawnflags" "1" -"angle" "0" -"classname" "monster_soldier_ss" -} -{ -"origin" "1336 1020 -556" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_ss" -} -{ -"origin" "1928 2080 -556" -"spawnflags" "1" -"angle" "225" -"classname" "monster_soldier_ss" -} -{ -"origin" "1224 1556 -680" -"target" "t140" -"targetname" "t139" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "1408 1460 -680" -"target" "t139" -"targetname" "t140" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "1224 1556 -640" -"angle" "315" -"target" "t139" -"classname" "monster_mutant" -"spawnflags" "1" -} -{ -"origin" "744 1568 -648" -"target" "t138" -"targetname" "t137" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "820 1392 -648" -"target" "t137" -"targetname" "t138" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "744 1568 -632" -"spawnflags" "1" -"target" "t137" -"angle" "0" -"classname" "monster_mutant" -} -{ -"origin" "816 1100 -320" -"targetname" "t136" -"classname" "monster_berserk" -"angle" "0" -"spawnflags" "1" -} -{ -"origin" "816 1060 -320" -"targetname" "t136" -"angle" "0" -"classname" "monster_berserk" -"spawnflags" "1" -} -{ -"model" "*24" -"target" "t136" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "2184 1340 -344" -"target" "t135" -"targetname" "t134" -"delay" "5" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "1844 2096 -336" -"targetname" "t135" -"angle" "360" -"classname" "monster_gladiator" -"target" "t162" -} -{ -"origin" "1952 2084 -336" -"targetname" "t134" -"classname" "monster_soldier_ss" -"angle" "360" -"target" "t160" -} -{ -"origin" "1992 2116 -336" -"targetname" "t134" -"classname" "monster_soldier_ss" -"angle" "360" -"target" "t159" -} -{ -"origin" "1904 2116 -336" -"targetname" "t134" -"angle" "360" -"classname" "monster_soldier_ss" -"target" "t161" -} -{ -"origin" "1924 1700 -580" -"targetname" "t133" -"classname" "point_combat" -"spawnflags" "1" -} -{ -"origin" "1780 1464 -580" -"targetname" "t132" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "1924 1888 -556" -"targetname" "t134" -"target" "t133" -"classname" "monster_soldier_ss" -"angle" "270" -} -{ -"origin" "1632 1464 -556" -"targetname" "t134" -"target" "t132" -"angle" "0" -"classname" "monster_soldier_ss" -} -{ -"model" "*25" -"target" "t134" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"spawnflags" "2" -"origin" "2112 1480 -324" -"targetname" "t131" -"angle" "270" -"classname" "monster_berserk" -} -{ -"spawnflags" "2" -"origin" "2168 1480 -324" -"targetname" "t131" -"angle" "270" -"classname" "monster_berserk" -} -{ -"model" "*26" -"target" "t131" -"delay" "5" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "2240 648 -344" -"angle" "180" -"spawnflags" "1" -"classname" "monster_berserk" -} -{ -"model" "*27" -"target" "t127" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "1768 656 -168" -"target" "t126" -"targetname" "t125" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "2216 656 -252" -"target" "t125" -"targetname" "t126" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -} -{ -"spawnflags" "2" -"origin" "1724 656 -152" -"targetname" "t127" -"target" "t125" -"angle" "0" -"classname" "monster_gladiator" -} -{ -"origin" "1344 116 -176" -"targetname" "t124" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "1124 208 -168" -"classname" "item_health_large" -"spawnflags" "2048" -} -{ -"origin" "1500 164 -160" -"target" "t124" -"item" "ammo_bullets" -"targetname" "t91" -"angle" "180" -"classname" "monster_gunner" -} -{ -"spawnflags" "2048" -"attenuation" "-1" -"targetname" "t156" -"classname" "target_speaker" -"noise" "gladiator/railgun.wav" -"origin" "952 -736 -24" -} -{ -"origin" "1464 360 -484" -"classname" "monster_berserk" -"angle" "90" -"spawnflags" "3" -"targetname" "t147" -} -{ -"origin" "1232 360 -492" -"spawnflags" "3" -"angle" "90" -"classname" "monster_berserk" -"targetname" "t147" -} -{ -"origin" "940 -604 -104" -"spawnflags" "2050" -"angle" "135" -"classname" "misc_deadsoldier" -} -{ -"origin" "924 -624 -88" -"classname" "weapon_grenadelauncher" -"spawnflags" "2048" -} -{ -"volume" "1" -"origin" "948 -696 -32" -"targetname" "t115" -"noise" "world/flesh1.wav" -"classname" "target_speaker" -} -{ -"volume" "1" -"origin" "956 -724 -52" -"targetname" "t115" -"noise" "player/death4.wav" -"classname" "target_speaker" -} -{ -"angle" "270" -"origin" "976 -700 -16" -"targetname" "t115" -"target" "misc_gib_arm" -"speed" "90" -"classname" "target_spawner" -"spawnflags" "2048" -} -{ -"origin" "928 -700 -32" -"targetname" "t115" -"angle" "270" -"target" "misc_gib_arm" -"speed" "90" -"classname" "target_spawner" -"spawnflags" "2048" -} -{ -"origin" "928 -712 -60" -"targetname" "t115" -"speed" "60" -"angle" "270" -"target" "misc_gib_leg" -"classname" "target_spawner" -"spawnflags" "2048" -} -{ -"origin" "952 -708 -8" -"targetname" "t115" -"speed" "100" -"angle" "270" -"target" "misc_gib_head" -"classname" "target_spawner" -"spawnflags" "2048" -} -{ -"angle" "270" -"origin" "976 -712 -72" -"targetname" "t115" -"speed" "60" -"target" "misc_gib_leg" -"classname" "target_spawner" -"spawnflags" "2048" -} -{ -"origin" "1340 -264 -76" -"targetname" "t122" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"origin" "932 -264 -60" -"target" "t122" -"spawnflags" "1" -"angle" "270" -"classname" "monster_gladiator" -} -{ -"classname" "target_help" -"targetname" "t115" -"message" "Activate mine machinery to\ngain access to\nDrilling Area." -"origin" "936 -940 -64" -"spawnflags" "2048" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2049" -"angle" "225" -"origin" "1148 140 -184" -} -{ -"classname" "item_health_small" -"origin" "1404 -236 -96" -"spawnflags" "2048" -} -{ -"light" "80" -"classname" "light" -"origin" "1372 284 -256" -} -{ -"origin" "1312 284 -256" -"classname" "light" -"light" "80" -} -{ -"origin" "1372 284 0" -"classname" "light" -"light" "80" -} -{ -"origin" "1440 328 -432" -"classname" "light" -"light" "100" -} -{ -"light" "80" -"classname" "light" -"origin" "1312 284 0" -} -{ -"light" "100" -"classname" "light" -"origin" "1248 328 -432" -} -{ -"classname" "weapon_hyperblaster" -"origin" "1620 748 -376" -"spawnflags" "2048" -} -{ -"classname" "ammo_cells" -"origin" "1644 720 -376" -"spawnflags" "2048" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2052" -"angle" "180" -"origin" "628 1528 -660" -} -{ -"classname" "item_health" -"origin" "1308 64 104" -"spawnflags" "2048" -} -{ -"classname" "item_health" -"origin" "1376 64 104" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t111" -"target" "t112" -"origin" "980 1420 -352" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t112" -"target" "t111" -"origin" "1408 1420 -352" -} -{ -"classname" "monster_gladiator" -"target" "t111" -"spawnflags" "1" -"angle" "0" -"origin" "928 1420 -336" -} -{ -"origin" "1940 476 -132" -"classname" "light" -"light" "150" -} -{ -"origin" "1940 356 -132" -"classname" "light" -"light" "150" -} -{ -"origin" "1772 356 -132" -"classname" "light" -"light" "150" -} -{ -"origin" "1772 476 -132" -"light" "150" -"classname" "light" -} -{ -"origin" "812 872 -344" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "776 872 -344" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "684 1196 -344" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"origin" "540 1196 -344" -"classname" "item_health" -"spawnflags" "0" -} -{ -"origin" "1468 1428 -344" -"classname" "ammo_cells" -"spawnflags" "2048" -} -{ -"origin" "1468 1388 -344" -"classname" "ammo_bullets" -"spawnflags" "2048" -} -{ -"origin" "1744 2116 -320" -"targetname" "t110" -"target" "misc_gib_head" -"speed" "30" -"angle" "180" -"classname" "target_spawner" -} -{ -"model" "*28" -"target" "t110" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "1588 2092 -344" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1664 2084 -344" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1704 2096 -344" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1480 2112 -344" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1792 2096 -264" -"_style" "10" -"_color" "1.000000 0.034884 0.011628" -"light" "250" -"classname" "light" -} -{ -"origin" "1756 2092 -344" -"classname" "weapon_machinegun" -"spawnflags" "2048" -} -{ -"origin" "1768 2112 -360" -"angle" "45" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"origin" "1348 2120 -628" -"classname" "item_health_large" -"spawnflags" "0" -} -{ -"target" "t109" -"origin" "1572 1176 -800" -"classname" "item_adrenaline" -"spawnflags" "2048" -} -{ -"origin" "1488 300 -508" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"origin" "1180 336 -504" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1180 296 -504" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1180 376 -504" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1620 704 -392" -"classname" "misc_deadsoldier" -} -{ -"classname" "misc_explobox" -"origin" "1636 668 -368" -"spawnflags" "2048" -} -{ -"origin" "2200 684 -316" -"targetname" "t108" -"classname" "target_secret" -"message" "You have found a secret." -"spawnflags" "2048" -} -{ -"model" "*29" -"target" "t108" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "2192 696 -360" -"classname" "misc_explobox" -"spawnflags" "2048" -} -{ -"origin" "2236 688 -360" -"classname" "misc_explobox" -"spawnflags" "2048" -} -{ -"origin" "2252 736 -352" -"classname" "item_armor_combat" -"spawnflags" "0" -} -{ -"origin" "1868 1196 -168" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"origin" "1844 1184 -184" -"angle" "135" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"origin" "1944 356 -168" -"classname" "item_health_small" -} -{ -"origin" "1768 356 -168" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "1768 476 -168" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "1944 476 -168" -"classname" "item_health_small" -} -{ -"origin" "1708 412 -160" -"classname" "item_health" -"spawnflags" "0" -} -{ -"origin" "1124 120 -168" -"classname" "ammo_grenades" -"spawnflags" "2048" -} -{ -"origin" "1160 208 -168" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"origin" "1388 -264 -96" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1340 -188 -96" -"classname" "item_health_small" -"spawnflags" "2048" -} -{ -"origin" "1380 -224 -116" -"angle" "90" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"origin" "16 884 -392" -"targetname" "t16" -"classname" "target_speaker" -"noise" "world/drill1.wav" -"spawnflags" "2" -} -{ -"origin" "-68 800 -392" -"targetname" "t16" -"classname" "target_speaker" -"noise" "world/drill1.wav" -"spawnflags" "2" -} -{ -"origin" "204 800 -392" -"targetname" "t16" -"classname" "target_speaker" -"noise" "world/drill1.wav" -"spawnflags" "2" -} -{ -"origin" "16 716 -392" -"targetname" "t16" -"spawnflags" "2" -"noise" "world/drill1.wav" -"classname" "target_speaker" -} -{ -"origin" "596 684 -320" -"targetname" "t16" -"noise" "world/lite_on1.wav" -"attenuation" "-1" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -} -{ -"volume" "1" -"origin" "544 652 -284" -"attenuation" "-1" -"noise" "world/lite_on1.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"targetname" "t146" -} -{ -"volume" "1" -"origin" "656 652 -284" -"attenuation" "-1" -"noise" "world/lite_on1.wav" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -"targetname" "t145" -} -{ -"origin" "600 578 -249" -"light" "96" -"classname" "light" -} -{ -"origin" "600 650 -296" -"spawnflags" "2" -"targetname" "t16" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"targetname" "t16" -"spawnflags" "0" -"noise" "world/electro.wav" -"origin" "600 650 -318" -"classname" "target_speaker" -"spawnflags" "2048" // b#6: added this -} -{ -"style" "32" -"_color" "1.000000 0.012000 0.012000" -"spawnflags" "1" -"origin" "656 630 -160" -"light" "220" -"classname" "light" -"targetname" "t145" -} -{ -"origin" "544 608 -312" -"light" "160" -"classname" "light" -} -{ -"style" "33" -"_color" "1.000000 0.012000 0.012000" -"spawnflags" "1" -"origin" "544 630 -160" -"classname" "light" -"light" "220" -"targetname" "t146" -} -{ -"origin" "656 608 -312" -"light" "160" -"classname" "light" -} -{ -"model" "*30" -"targetname" "t148" -"target" "t16" -"killtarget" "k9" // b#5: moved here -"classname" "trigger_counter" -"spawnflags" "2048" -} -{ -"model" "*31" -"origin" "600 592 -233" -"targetname" "t16" -"_minlight" ".3" -"speed" "750" -"classname" "func_rotating" -"spawnflags" "2048" -} -{ -"classname" "func_group" -} -{ -"origin" "-720 664 -312" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-720 936 -312" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "-680 800 -348" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "-680 800 -176" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-104 808 -356" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "168 808 -356" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-512 796 -620" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-520 872 -620" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-520 728 -620" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-456 900 -692" -"spawnflags" "1" -"classname" "target_speaker" -"noise" "world/water1.wav" -} -{ -"origin" "-480 720 -692" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "-56 676 -264" -"classname" "target_speaker" -"noise" "world/amb6.wav" -"spawnflags" "1" -} -{ -"origin" "-60 920 -264" -"spawnflags" "1" -"noise" "world/amb6.wav" -"classname" "target_speaker" -} -{ -"origin" "200 680 -264" -"classname" "target_speaker" -"noise" "world/amb6.wav" -"spawnflags" "1" -} -{ -"origin" "196 924 -264" -"spawnflags" "1" -"noise" "world/amb6.wav" -"classname" "target_speaker" -} -{ -"origin" "-184 916 -356" -"classname" "target_speaker" -"noise" "world/amb6.wav" -"spawnflags" "1" -} -{ -"origin" "404 796 -264" -"classname" "target_speaker" -"noise" "world/amb6.wav" -"spawnflags" "1" -} -{ -"origin" "-180 672 -356" -"spawnflags" "1" -"noise" "world/amb6.wav" -"classname" "target_speaker" -} -{ -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "824 824 -284" -} -{ -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "728 824 -284" -} -{ -"volume" ".6" -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "728 824 -296" -} -{ -"origin" "812 684 -284" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"volume" ".6" -"origin" "824 824 -296" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"volume" ".6" -"origin" "812 684 -264" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"volume" ".6" -"origin" "480 648 -264" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"origin" "536 992 -264" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"origin" "536 1120 -264" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb10.wav" -} -{ -"origin" "-316 1152 -412" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "784 1088 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "900 1148 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "900 1332 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1444 1828 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1328 1512 -276" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"origin" "1360 1760 -276" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"origin" "1048 1500 -276" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1668 2096 -276" -} -{ -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1948 2096 -276" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2088 2096 -316" -} -{ -"origin" "1444 1964 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1488 2096 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1688 2096 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1904 2096 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "2140 1904 -276" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "2140 1964 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "2140 1780 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1984 1328 -312" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "2068 1488 -256" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2212 1608 -256" -} -{ -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2164 1540 -528" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2144 1568 -316" -} -{ -"origin" "2144 1340 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "2204 1184 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1992 1184 -316" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1856 1184 -356" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "2232 1020 -356" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1640 1108 -216" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "1640 1108 -356" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "1640 1108 -52" -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1952 1020 -356" -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "688 864 -296" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2232 836 -292" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2228 656 -216" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2068 656 -168" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1856 656 -124" -} -{ -"noise" "world/amb10.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1856 448 -40" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "608 1196 -280" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1408 1384 -280" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1476 1408 -616" -} -{ -"origin" "720 1416 -468" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -} -{ -"origin" "584 1536 -596" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "1428 1456 -688" -"noise" "world/water1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1212 1552 -688" -"noise" "world/water1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "968 1540 -688" -"noise" "world/water1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "720 660 -296" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "1036 1356 -688" -"noise" "world/water1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1288 1824 -596" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "1432 2072 -540" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "1232 2140 -688" -} -{ -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -"origin" "1532 2104 -656" -} -{ -"spawnflags" "1" -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"origin" "764 1560 -496" -} -{ -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "1596 2072 -540" -} -{ -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -"origin" "1764 2072 -540" -} -{ -"origin" "1924 2040 -540" -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"origin" "1924 1892 -540" -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"origin" "1924 1716 -540" -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"origin" "1816 1464 -540" -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"origin" "1332 1104 -540" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" -} -{ -"origin" "1516 1108 -540" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" -} -{ -"origin" "1316 2140 -504" -"classname" "target_speaker" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -} -{ -"origin" "1632 1464 -540" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" -} -{ -"origin" "1636 1280 -540" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" -} -{ -"origin" "1332 932 -540" -"spawnflags" "1" -"noise" "world/amb4.wav" -"classname" "target_speaker" -} -{ -"origin" "2084 1392 -604" -"noise" "world/water1.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "1880 1384 -604" -"noise" "world/water1.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "1888 1580 -604" -"noise" "world/water1.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "1720 1164 -604" -"noise" "world/water1.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "2096 1556 -604" -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "1628 1028 -604" -"noise" "world/water1.wav" -"classname" "target_speaker" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "1344 328 -200" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "1344 328 -348" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "1344 328 -500" -"classname" "target_speaker" -"noise" "world/amb9.wav" -"spawnflags" "1" -} -{ -"origin" "1344 328 24" -"spawnflags" "1" -"noise" "world/amb9.wav" -"classname" "target_speaker" -} -{ -"origin" "1332 872 -608" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "1348 612 -432" -"wait" "4" -"random" "3" -"spawnflags" "1" -"target" "t100" -"classname" "func_timer" -} -{ -"origin" "1272 604 -432" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -} -{ -"origin" "1448 504 -432" -"targetname" "t100" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/water1.wav" -"spawnflags" "1" -"origin" "1412 800 -608" -} -{ -"origin" "1192 796 -608" -"spawnflags" "1" -"noise" "world/water1.wav" -"classname" "target_speaker" -} -{ -"origin" "1300 780 -324" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "1" -} -{ -"origin" "1352 780 -420" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "1" -} -{ -"origin" "1300 780 -420" -"spawnflags" "1" -"noise" "world/fan1.wav" -"classname" "target_speaker" -} -{ -"origin" "1352 780 -324" -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "1" -} -{ -"origin" "1440 284 -480" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "1246 284 -480" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1488 752 -504" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2144 1768 -264" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "2144 1152 -280" -} -{ -"origin" "1568 928 -312" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "1856 1232 -312" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1856 624 -312" -} -{ -"origin" "1112 736 -504" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "1840 744 -356" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1856 540 -124" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1860 352 -124" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1856 164 -124" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1700 164 -124" -} -{ -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1700 308 -124" -} -{ -"origin" "1700 308 -108" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -} -{ -"origin" "1572 376 -124" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -} -{ -"origin" "1640 424 -88" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1496 164 -124" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1344 164 -124" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1204 164 -124" -} -{ -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1572 376 -108" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1344 -24 -88" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1340 -160 -52" -} -{ -"origin" "1344 128 136" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1344 -56 136" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1248 -264 -52" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1344 284 136" -} -{ -"origin" "1156 164 -124" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "1344 -436 164" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1284 104 164" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1404 -8 164" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1508 -264 164" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1180 -264 164" -} -{ -"noise" "world/pump3.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1340 -264 16" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "1104 -264 -52" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "956 -344 -52" -} -{ -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "956 -528 -52" -} -{ -"spawnflags" "1" -"origin" "464 -816 -252" -"classname" "target_speaker" -"noise" "world/amb14.wav" -} -{ -"spawnflags" "1" -"origin" "240 -816 -252" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "160 -688 -52" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "352 -488 -52" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "512 -668 -52" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "352 -488 -296" -"volume" ".7" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "512 -668 -296" -"volume" ".7" -"noise" "world/amb9.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "644 -668 -52" -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "352 -456 -448" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "160 -688 -296" -"volume" ".7" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb9.wav" -} -{ -"origin" "800 -668 -52" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb4.wav" -} -{ -"origin" "1404 216 164" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"origin" "956 -744 -52" -"classname" "target_speaker" -"noise" "world/amb4.wav" -"spawnflags" "1" // b#4: added this -} -{ -"origin" "24 -664 -276" -"noise" "world/amb4.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "356 -668 -620" -"target" "t99" -"random" "4" -"wait" "5" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "520 -796 -632" -"volume" ".8" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "180 -796 -632" -"targetname" "t99" -"volume" ".8" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/lava1.wav" -} -{ -"origin" "180 -568 -632" -"volume" ".8" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/lava1.wav" -} -{ -"origin" "520 -568 -632" -"targetname" "t99" -"volume" ".8" -"noise" "world/lava1.wav" -"spawnflags" "0" -"classname" "target_speaker" -} -{ -"origin" "-992 800 -264" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-248 -352 -236" -} -{ -"origin" "352 -224 -428" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "948 -984 24" -"spawnflags" "1" // b#4: added this -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "712 724 -280" -"targetname" "t16" -"classname" "target_goal" -} -{ -"origin" "272 1116 -320" -"targetname" "t98" -"classname" "target_secret" -"message" "You have found a secret area." -"spawnflags" "2048" -} -{ -"model" "*32" -"target" "t98" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"origin" "1964 1336 -312" -"classname" "light" -"light" "64" -} -{ -"origin" "2004 1336 -312" -"light" "64" -"classname" "light" -} -{ -"origin" "1876 632 -312" -"classname" "light" -"light" "64" -} -{ -"origin" "1836 632 -312" -"light" "64" -"classname" "light" -} -{ -"origin" "1620 416 -88" -"light" "64" -"classname" "light" -} -{ -"origin" "1660 416 -88" -"classname" "light" -"light" "64" -} -{ -"origin" "1296 84 168" -"light" "64" -"classname" "light" -} -{ -"origin" "1296 124 168" -"classname" "light" -"light" "64" -} -{ -"origin" "1392 -28 168" -"light" "64" -"classname" "light" -} -{ -"origin" "1392 12 168" -"classname" "light" -"light" "64" -} -{ -"origin" "1364 -424 168" -"light" "64" -"classname" "light" -} -{ -"origin" "1324 -424 168" -"classname" "light" -"light" "64" -} -{ -"origin" "1192 -244 168" -"light" "64" -"classname" "light" -} -{ -"origin" "1192 -284 168" -"classname" "light" -"light" "64" -} -{ -"origin" "1496 -244 168" -"light" "64" -"classname" "light" -} -{ -"origin" "1496 -284 168" -"classname" "light" -"light" "64" -} -{ -"origin" "1392 196 168" -"classname" "light" -"light" "64" -} -{ -"origin" "1392 236 168" -"light" "64" -"classname" "light" -} -{ -"origin" "-720 656 -312" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "720 656 -296" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "608 1200 -280" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1408 1384 -280" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1104 736 -504" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"classname" "light" -"_color" "1.000000 1.000000 0.207843" -"origin" "-720 944 -312" -} -{ -"origin" "2144 1144 -280" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1496 752 -504" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1856 1240 -312" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1560 928 -312" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1856 616 -312" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1640 432 -88" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1408 216 168" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1280 104 168" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1408 -8 168" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1176 -264 168" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1512 -264 168" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"origin" "1344 -440 168" -"_color" "1.000000 1.000000 0.207843" -"classname" "light" -} -{ -"classname" "light" -"_color" "1.000000 1.000000 0.207843" -"origin" "1984 1320 -312" -} -{ -"classname" "target_help" -"targetname" "t16" -"message" "Return to elevator shaft.\nProceed to Drilling Area." -"origin" "744 728 -304" -} -{ -"model" "*33" -"target" "t91" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"style" "2" -"targetname" "t89" -"classname" "func_areaportal" -} -{ -"style" "3" -"targetname" "t88" -"classname" "func_areaportal" -} -{ -"model" "*34" -"target" "t86" -"angle" "270" -"classname" "trigger_once" -"spawnflags" "3840" // b#5: added this -} -{ -"origin" "676 708 -300" -"target" "t83" -"targetname" "t16" -"delay" "1" -"classname" "trigger_relay" -"spawnflags" "2048" // b#6: added this -} -{ -"origin" "624 1104 -320" -"targetname" "t84" -"spawnflags" "769" // b#5: 1 -> 769 -"classname" "point_combat" -} -{ -"item" "ammo_grenades" -"origin" "412 1120 -336" // b#7: -304 -> -336 -"target" "t84" -"targetname" "t83" -"spawnflags" "770" -"angle" "0" -"classname" "monster_gunner" -} -{ -"classname" "ammo_cells" -"origin" "608 1508 -636" -"spawnflags" "2048" -} -{ -"classname" "ammo_rockets" -"origin" "604 1544 -636" -"spawnflags" "2048" -} -{ -"classname" "item_health_large" -"origin" "600 1584 -636" -"spawnflags" "2048" -} -{ -"model" "*35" -"classname" "trigger_once" -"target" "t77" -"spawnflags" "3840" // b#5: 2048 -> 3840 -} -{ -"classname" "point_combat" -"targetname" "t61" -"spawnflags" "1" -"origin" "1300 -72 104" -} -{ -"classname" "point_combat" -"targetname" "t62" -"spawnflags" "1" -"origin" "1388 -88 104" -} -{ -"origin" "1308 -20 120" -"classname" "monster_gunner" -"angle" "270" -"target" "t61" -"spawnflags" "256" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t59" -"origin" "1496 900 -556" -} -{ -"item" "ammo_grenades" -"classname" "monster_gunner" -"angle" "180" -"spawnflags" "1" -"target" "t59" -"origin" "1496 944 -540" -} -{ -"origin" "1640 840 -368" -"classname" "misc_explobox" -"spawnflags" "2048" -} -{ -"origin" "1756 692 -368" -"classname" "misc_explobox" -"spawnflags" "2048" -} -{ -"spawnflags" "256" -"angle" "270" -"classname" "monster_gunner" -"origin" "1376 -20 120" -"target" "t62" -"item" "ammo_bullets" -} -{ -"model" "*36" -"classname" "trigger_once" -"delay" "2" -"target" "t21" -"spawnflags" "3840" // b#5: 2048 -> 3840 -} -{ -"wait" "3" -"classname" "func_timer" -"random" "2" -"target" "t19" -"targetname" "t16" -"origin" "-56 840 -224" -} -{ -"classname" "target_splash" -"sounds" "1" -"targetname" "t19" -"origin" "-32 840 -208" -} -{ -"wait" "4" -"classname" "func_timer" -"random" "3" -"target" "t18" -"targetname" "t16" -"origin" "88 760 -216" -} -{ -"classname" "target_splash" -"sounds" "1" -"targetname" "t18" -"origin" "64 760 -216" -} -{ -"classname" "target_lightramp" -"speed" "2" -"message" "az" -"targetname" "t16" -"target" "t17" -"origin" "160 800 -232" -} -{ -"style" "34" -"spawnflags" "1" -"light" "180" -"classname" "light" -"targetname" "t17" -"origin" "-56 728 -232" -} -{ -"style" "34" -"spawnflags" "1" -"light" "180" -"classname" "light" -"targetname" "t17" -"origin" "88 728 -232" -} -{ -"style" "34" -"spawnflags" "1" -"light" "180" -"classname" "light" -"targetname" "t17" -"origin" "88 872 -232" -} -{ -"style" "34" -"classname" "light" -"light" "180" -"spawnflags" "1" -"targetname" "t17" -"origin" "-56 872 -232" -} -{ -"classname" "item_health_small" -"origin" "-576 800 -368" -"spawnflags" "2048" -} -{ -"classname" "ammo_shells" -"origin" "-592 664 -360" -"spawnflags" "2048" -} -{ -"classname" "ammo_cells" -"origin" "-592 936 -360" -"spawnflags" "2048" -} -{ -"origin" "1552 2088 -672" -"classname" "item_quad" -//"target" "t68" // never used -"spawnflags" "2048" -} -{ -"origin" "868 816 -284" -"classname" "light" -"light" "80" -} -{ -"model" "*37" -"targetname" "k9" -"message" "Mine machinery inoperative." -"classname" "trigger_multiple" -"spawnflags" "2048" -"wait" "3" -} -{ -"origin" "852 800 -340" -"killtarget" "k9" // b#5: moved to trigger_counter -"targetname" "t16" -"classname" "trigger_relay" -"spawnflags" "3840" // b#5: added this -} -{ -"model" "*38" -"targetname" "t158" -"classname" "func_button" -"target" "t15" -"angle" "90" -"pathtarget" "p2" -} -{ -"origin" "1480 2040 -576" -"light" "70" -"classname" "light" -} -{ -"light" "70" -"classname" "light" -"origin" "1480 2112 -576" -} -{ -"origin" "1448 1976 -576" -"light" "64" -"classname" "light" -} -{ -"classname" "light" -"light" "64" -"origin" "1376 2040 -576" -} -{ -"classname" "light" -"light" "72" -"origin" "584 1500 -544" -} -{ -"classname" "light" -"light" "150" -"origin" "588 1536 -588" -} -{ -"light" "64" -"classname" "light" -"origin" "576 1584 -544" -} -{ -"classname" "light" -"light" "64" -"origin" "576 1584 -644" -} -{ -"light" "64" -"classname" "light" -"origin" "584 1500 -644" -} -{ -"classname" "func_group" -} -{ -"origin" "380 -392 -308" -"classname" "light" -"light" "110" -} -{ -"origin" "320 -392 -308" -"classname" "light" -"light" "110" -} -{ -"origin" "352 -392 -52" -"classname" "light" -"light" "110" -} -{ -"origin" "684 -704 -508" -"light" "110" -"classname" "light" -} -{ -"model" "*39" -"target" "t15" -"pathtarget" "p2" -"angle" "0" -"classname" "func_button" -} -{ -"targetname" "t15" -"target" "t14" -"classname" "trigger_elevator" -"origin" "0 0 0" -} -{ -"model" "*40" -"angle" "90" -"target" "t15" -"pathtarget" "p2" -"classname" "func_button" -} -{ -"model" "*41" -"angle" "90" -"target" "t15" -"pathtarget" "p3" -"classname" "func_button" -} -{ -"model" "*42" -"angle" "90" -"target" "t15" -"pathtarget" "p1" -"classname" "func_button" -} -{ -"pathtarget" "stop1" -"wait" "-1" -"targetname" "p3" -"origin" "0 -896 -584" -"classname" "path_corner" -} -{ -"pathtarget" "stop2" -"wait" "-1" -"targetname" "p2" -"origin" "0 -896 -388" -"classname" "path_corner" -} -{ -"pathtarget" "stop3" -"wait" "-1" -"origin" "0 -896 -140" -"targetname" "p1" -"classname" "path_corner" -} -{ -"model" "*43" -"classname" "trigger_multiple" -"target" "t13" -"angle" "180" -} -{ -"classname" "target_changelevel" -"map" "mine3$mine2c" -"targetname" "t13" -"origin" "-1072 840 -304" -} -{ -"model" "*44" -"classname" "trigger_multiple" -"target" "t12" -"angle" "90" -} -{ -"classname" "target_changelevel" -"map" "mine3$mine2a" -"targetname" "t12" -"origin" "312 -152 -440" -} -{ -"model" "*45" -"classname" "trigger_multiple" -"target" "t11" -"angle" "90" -} -{ -"classname" "target_changelevel" -"map" "mine3$mine2b" -"targetname" "t11" -"origin" "-280 -280 -288" -} -{ -"model" "*46" -"classname" "trigger_multiple" -"target" "t10" -"angle" "270" -} -{ -"classname" "target_changelevel" -"map" "mine1$mine2" -"targetname" "t10" -"origin" "976 -1040 -48" -} -{ -"light" "175" -"classname" "light" -"origin" "1640 1104 -344" -} -{ -"light" "200" -"classname" "light" -"origin" "2128 1088 -72" -} -{ -"origin" "812 680 -252" -"classname" "light" -"light" "100" -} -{ -"classname" "light" -"light" "200" -"origin" "-680 808 -208" -} -{ -"light" "64" -"classname" "light" -"origin" "-696 936 -320" -} -{ -"classname" "light" -"light" "64" -"origin" "-744 936 -320" -} -{ -"light" "64" -"classname" "light" -"origin" "-744 672 -320" -} -{ -"classname" "light" -"light" "64" -"origin" "-696 672 -320" -} -{ // b#2: swapped with mine3c's spot -"origin" "954 -898 -64" -"angle" "90" -"classname" "info_player_start" -"targetname" "mine1" -} -{ -"classname" "info_player_start" -"angle" "270" -"targetname" "mine3b" -"origin" "-248 -448 -336" -} -{ -"classname" "info_player_start" -"angle" "270" -"targetname" "mine3a" -"origin" "352 -312 -528" -} -{ -"origin" "1287 1818 -588" -"light" "125" -"classname" "light" -} -{ -"light" "100" -"classname" "light" -"origin" "2144 1568 -640" -} -{ -"light" "100" -"classname" "light" -"origin" "2096 1432 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "1920 1432 -672" -} -{ -"light" "100" -"classname" "light" -"origin" "1920 1608 -672" -} -{ -"model" "*47" -"target" "t89" -"team" "d4" -"angle" "180" -"classname" "func_door" -"_minlight" ".18" -} -{ -"origin" "-248 -260 -280" -"classname" "light" -"light" "100" -} -{ -"origin" "-248 -552 -280" -"light" "100" -"classname" "light" -} -{ -"origin" "-252 -444 -280" -"light" "100" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "176 872 -172" -} -{ -"classname" "light" -"light" "64" -"origin" "176 944 -172" -} -{ -"light" "64" -"classname" "light" -"origin" "172 732 -160" -} -{ -"classname" "light" -"light" "64" -"origin" "172 660 -160" -} -{ -"classname" "light" -"light" "150" -"origin" "-796 800 -12" -} -{ -"light" "60" -"classname" "light" -"origin" "16 664 -272" -} -{ -"light" "60" -"classname" "light" -"origin" "16 976 -216" -} -{ -"light" "80" -"classname" "light" -"origin" "16 632 -216" -} -{ -"light" "60" -"classname" "light" -"origin" "200 800 -216" -} -{ -"classname" "light" -"light" "60" -"origin" "-96 800 -272" -} -{ -"model" "*48" -"origin" "16 800 -324" -"dmg" "10" -"targetname" "t16" -"classname" "func_rotating" -"spawnflags" "2064" -"speed" "400" -"_minlight" ".05" -} -{ -"origin" "584 1160 -296" -"classname" "light" -"light" "64" -} -{ -"origin" "888 1096 -272" -"classname" "light" -"light" "100" -} -{ -"classname" "light" -"light" "80" -"origin" "904 1448 -312" -} -{ -"classname" "light" -"light" "80" -"origin" "1016 1472 -312" -} -{ -"classname" "light" -"light" "80" -"origin" "1904 1208 -312" -} -{ -"origin" "1860 548 -16" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "1860 404 -16" -} -{ -"origin" "1568 360 -88" -"classname" "light" -"light" "100" -} -{ -"origin" "1096 1352 -312" -"classname" "light" -"light" "80" -} -{ -"origin" "1096 1352 -248" -"classname" "light" -"light" "80" -} -{ -"origin" "792 1392 -312" -"light" "80" -"classname" "light" -} -{ -"origin" "1256 1392 -272" -"classname" "light" -"light" "80" -} -{ -"classname" "light" -"light" "130" -"origin" "1072 1440 -464" -} -{ -"classname" "light" -"light" "130" -"origin" "1304 1440 -464" -} -{ -"light" "100" -"classname" "light" -"origin" "1288 1648 -432" -} -{ -"light" "100" -"classname" "light" -"origin" "1280 1672 -272" -} -{ -"origin" "1400 1536 -464" -"classname" "light" -"light" "130" -} -{ -"origin" "896 1432 -464" -"light" "130" -"classname" "light" -} -{ -"origin" "1224 1320 -600" -"classname" "light" -"light" "80" -} -{ -"origin" "1224 1320 -496" -"light" "80" -"classname" "light" -} -{ -"origin" "864 1416 -608" -"classname" "light" -"light" "120" -} -{ -"origin" "864 1504 -608" -"classname" "light" -"light" "120" -} -{ -"origin" "984 1376 -608" -"light" "120" -"classname" "light" -} -{ -"light" "80" -"classname" "light" -"origin" "792 1336 -320" -} -{ -"classname" "light" -"light" "80" -"origin" "992 1336 -320" -} -{ -"origin" "1376 2112 -576" -"classname" "light" -"light" "64" -} -{ -"origin" "1448 1880 -576" -"light" "32" -"classname" "light" -} -{ -"origin" "1480 2040 -624" -"classname" "light" -"light" "48" -} -{ -"origin" "1480 2112 -624" -"light" "48" -"classname" "light" -} -{ -"origin" "1251 1814 -644" -"classname" "light" -"light" "32" -} -{ -"origin" "1251 1822 -544" -"light" "32" -"classname" "light" -} -{ -"origin" "1335 1830 -544" -"classname" "light" -"light" "48" -} -{ -"origin" "1335 1830 -644" -"light" "48" -"classname" "light" -} -{ -"origin" "1352 1504 -280" -"classname" "light" -"light" "100" -} -{ -"origin" "1440 1576 -280" -"classname" "light" -"light" "120" -} -{ -"origin" "1264 1536 -272" -"classname" "light" -"light" "100" -} -{ -"origin" "1104 1496 -432" -"classname" "light" -"light" "100" -} -{ -"origin" "1360 1784 -272" -"classname" "light" -"light" "120" -} -{ -"origin" "1440 1704 -280" -"classname" "light" -"light" "100" -} -{ -"origin" "1272 1488 -280" -"light" "120" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "1520 1784 -272" -} -{ -"light" "80" -"classname" "light" -"origin" "1120 1536 -272" -} -{ -"origin" "792 1416 -272" -"classname" "light" -"light" "100" -} -{ -"origin" "808 1336 -464" -"classname" "light" -"light" "80" -} -{ -"origin" "992 1336 -464" -"light" "80" -"classname" "light" -} -{ -"origin" "1440 1408 -272" -"classname" "light" -"light" "80" -} -{ -"origin" "1368 1408 -272" -"light" "80" -"classname" "light" -} -{ -"origin" "1440 2096 -320" -"classname" "light" -"light" "80" -} -{ -"origin" "1800 2096 -320" -"classname" "light" -"light" "80" -} -{ -"origin" "2144 2096 -320" -"classname" "light" -"light" "80" -} -{ -"origin" "2144 1768 -320" -"classname" "light" -"light" "80" -} -{ -"origin" "1440 1912 -320" -"light" "80" -"classname" "light" -} -{ -"origin" "2096 1624 -344" -"light" "64" -"classname" "light" -} -{ -"origin" "2184 1624 -344" -"light" "64" -"classname" "light" -} -{ -"origin" "2184 1512 -344" -"light" "64" -"classname" "light" -} -{ -"origin" "2096 1512 -344" -"classname" "light" -"light" "64" -} -{ -"origin" "2096 1384 -344" -"light" "64" -"classname" "light" -} -{ -"origin" "2184 1384 -344" -"light" "64" -"classname" "light" -} -{ -"origin" "2096 1384 -392" -"classname" "light" -"light" "64" -} -{ -"origin" "2184 1384 -392" -"classname" "light" -"light" "64" -} -{ -"origin" "2184 1512 -392" -"classname" "light" -"light" "64" -} -{ -"origin" "2184 1624 -392" -"classname" "light" -"light" "64" -} -{ -"origin" "2096 1624 -392" -"classname" "light" -"light" "64" -} -{ -"origin" "2096 1512 -392" -"light" "64" -"classname" "light" -} -{ -"origin" "2048 1352 -344" -"classname" "light" -"light" "80" -} -{ -"origin" "2232 1352 -344" -"light" "80" -"classname" "light" -} -{ -"origin" "1416 456 -432" -"classname" "light" -"light" "100" -} -{ -"origin" "1440 284 -480" -"classname" "light" -"light" "100" -} -{ -"origin" "1248 284 -480" -"classname" "light" -"light" "100" -} -{ -"origin" "1272 456 -432" -"light" "100" -"classname" "light" -} -{ -"origin" "1336 712 -496" -"light" "150" -"classname" "light" -} -{ -"origin" "1432 536 -448" -"classname" "light" -"light" "130" -} -{ -"origin" "1240 544 -448" -"light" "130" -"classname" "light" -} -{ -"origin" "1248 856 -448" -"classname" "light" -"light" "100" -} -{ -"origin" "1440 848 -448" -"light" "100" -"classname" "light" -} -{ -"origin" "1472 720 -496" -"classname" "light" -"light" "80" -} -{ -"origin" "1472 776 -496" -"light" "80" -"classname" "light" -} -{ -"origin" "1160 760 -496" -"classname" "light" -"light" "80" -} -{ -"origin" "1160 704 -496" -"light" "80" -"classname" "light" -} -{ -"origin" "1640 1112 -240" -"light" "150" -"classname" "light" -} -{ -"origin" "1328 776 -240" -"classname" "light" -"light" "80" -} -{ -"origin" "1328 776 -80" -"classname" "light" -"light" "100" -} -{ -"origin" "1328 776 72" -"classname" "light" -"light" "120" -} -{ -"origin" "1328 776 -376" -"light" "80" -"classname" "light" -} -{ -"classname" "light" -"light" "175" -"origin" "2004 888 -268" -} -{ -"light" "130" -"classname" "light" -"origin" "2032 1204 -240" -} -{ -"classname" "light" -"light" "130" -"origin" "2204 1200 -240" -} -{ -"origin" "1872 1112 -312" -"light" "120" -"classname" "light" -} -{ -"origin" "1824 1208 -312" -"light" "80" -"classname" "light" -} -{ -"light" "64" -"classname" "light" -"origin" "1760 1112 -344" -} -{ -"light" "64" -"classname" "light" -"origin" "1640 1216 -344" -} -{ -"light" "64" -"classname" "light" -"origin" "1528 1104 -344" -} -{ -"classname" "light" -"light" "64" -"origin" "1640 992 -344" -} -{ -"light" "80" -"classname" "light" -"origin" "1800 752 -248" -} -{ -"light" "80" -"classname" "light" -"origin" "1752 864 -248" -} -{ -"light" "80" -"classname" "light" -"origin" "1752 992 -248" -} -{ -"light" "80" -"classname" "light" -"origin" "1776 1208 -248" -} -{ -"light" "80" -"classname" "light" -"origin" "1808 1112 -248" -} -{ -"light" "80" -"classname" "light" -"origin" "1568 928 -40" -} -{ -"light" "80" -"classname" "light" -"origin" "1568 928 -184" -} -{ -"classname" "light" -"light" "80" -"origin" "1768 648 -248" -} -{ -"classname" "light" -"light" "80" -"origin" "2172 1180 -296" -} -{ -"classname" "light" -"light" "80" -"origin" "2092 1180 -296" -} -{ -"classname" "light" -"light" "120" -"origin" "1920 1136 -112" -} -{ -"classname" "light" -"light" "120" -"origin" "1840 1136 -112" -} -{ -"light" "80" -"classname" "light" -"origin" "1584 896 -312" -} -{ -"light" "80" -"classname" "light" -"origin" "1584 976 -312" -} -{ -"classname" "light" -"light" "100" -"origin" "1792 928 -72" -} -{ -"classname" "light" -"light" "80" -"origin" "1704 928 -104" -} -{ -"light" "80" -"classname" "light" -"origin" "1904 656 -104" -} -{ -"classname" "light" -"light" "80" -"origin" "1776 656 -104" -} -{ -"light" "100" -"classname" "light" -"origin" "1952 640 -296" -} -{ -"classname" "light" -"light" "64" -"origin" "2064 640 -296" -} -{ -"light" "120" -"classname" "light" -"origin" "2224 664 -160" -} -{ -"light" "100" -"classname" "light" -"origin" "2200 808 -248" -} -{ -"light" "150" -"classname" "light" -"origin" "2176 968 -304" -} -{ -"classname" "light" -"light" "120" -"origin" "2064 656 -112" -} -{ -"classname" "light" -"light" "150" -"origin" "1896 216 -96" -} -{ -"light" "80" -"classname" "light" -"origin" "1860 548 -144" -} -{ -"light" "80" -"classname" "light" -"origin" "1648 352 -88" -} -{ -"light" "100" -"classname" "light" -"origin" "1688 296 -88" -} -{ -"classname" "light" -"light" "80" -"origin" "1632 368 32" -} -{ -"origin" "-240 -664 -304" -"light" "100" -"classname" "light" -} -{ -"origin" "88 -488 -440" -"light" "125" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "356 -310 -472" -} -{ -"classname" "light" -"light" "100" -"origin" "352 -418 -472" -} -{ -"classname" "light" -"light" "80" -"origin" "-240 -664 -232" -} -{ -"classname" "light" -"light" "100" -"origin" "-104 -664 -280" -} -{ -"light" "100" -"classname" "light" -"origin" "352 -126 -472" -} -{ -"classname" "light" -"light" "125" -"origin" "608 -480 -440" -} -{ -"light" "125" -"classname" "light" -"origin" "24 -664 -240" -} -{ -"light" "125" -"classname" "light" -"origin" "608 -480 -216" -} -{ -"light" "125" -"classname" "light" -"origin" "88 -488 -216" -} -{ -"classname" "light" -"light" "125" -"origin" "352 -456 -536" -} -{ -"light" "125" -"classname" "light" -"origin" "192 -884 -404" -} -{ -"origin" "72 -884 -404" -"classname" "light" -"light" "125" -} -{ -"light" "125" -"classname" "light" -"origin" "536 -892 -404" -} -{ -"light" "125" -"classname" "light" -"origin" "120 -876 -84" -} -{ -"light" "150" -"classname" "light" -"origin" "352 -832 0" -} -{ -"light" "150" -"classname" "light" -"origin" "352 -832 -232" -} -{ -"light" "125" -"classname" "light" -"origin" "352 -832 -456" -} -{ -"light" "125" -"classname" "light" -"origin" "352 -832 -584" -} -{ -"classname" "light" -"light" "125" -"origin" "352 -832 -344" -} -{ -"light" "100" -"classname" "light" -"origin" "696 -744 -256" -} -{ -"classname" "light" -"light" "100" -"origin" "696 -672 -256" -} -{ -"classname" "light" -"light" "100" -"origin" "696 -608 -256" -} -{ -"classname" "light" -"light" "100" -"origin" "696 -544 -256" -} -{ -"light" "100" -"classname" "light" -"origin" "8 -672 -512" -} -{ -"light" "100" -"classname" "light" -"origin" "416 -392 -256" -} -{ -"classname" "light" -"light" "100" -"origin" "352 -392 -256" -} -{ -"classname" "light" -"light" "100" -"origin" "288 -392 -256" -} -{ -"light" "100" -"classname" "light" -"origin" "8 -608 -512" -} -{ -"light" "100" -"classname" "light" -"origin" "8 -544 -512" -} -{ -"classname" "light" -"light" "100" -"origin" "8 -744 -512" -} -{ -"light" "125" -"classname" "light" -"origin" "260 -452 -612" -} -{ -"origin" "1352 328 216" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "952 -888 -12" -} -{ -"light" "100" -"classname" "light" -"origin" "948 -1084 -12" -} -{ -"classname" "light" -"light" "100" -"origin" "948 -804 -12" -} -{ -"light" "110" -"classname" "light" -"origin" "720 664 -312" -} -{ -"classname" "light" -"light" "80" -"origin" "816 864 -284" -} -{ -"light" "80" -"classname" "light" -"origin" "680 864 -284" -} -{ -"light" "80" -"classname" "light" -"origin" "812 680 -328" -} -{ -"light" "100" -"classname" "light" -"origin" "708 680 -292" -} -{ -"classname" "light" -"light" "80" -"origin" "732 816 -284" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t6" -"target" "t7" -"origin" "-1200 768 -456" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t7" -"target" "t8" -"origin" "-672 764 -444" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t5" -"target" "t6" -"origin" "-1200 768 248" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t4" -"target" "t5" -"origin" "-952 764 248" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t3" -"target" "t4" -"origin" "-952 764 -104" -} -{ -"pathtarget" "backit2" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t2" -"target" "t3" -"origin" "-516 768 -104" -} -{ -"pathtarget" "backit1" -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"targetname" "t1" -"target" "t2" -"origin" "-516 768 -676" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#6: added this -"target" "t1" -"targetname" "t8" -"origin" "-672 764 -676" -} -{ -"origin" "608 936 -296" -"classname" "light" -"light" "100" -} -{ -"origin" "432 664 -296" -"classname" "light" -"light" "150" -} -{ -"origin" "448 872 -296" -"classname" "light" -"light" "150" -} -{ -"origin" "272 648 -344" -"classname" "light" -"light" "150" -} -{ -"origin" "272 968 -344" -"classname" "light" -"light" "150" -} -{ -"origin" "16 808 -392" -"classname" "light" -"light" "150" -} -{ -"origin" "-128 1000 -392" -"classname" "light" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "-128 640 -392" -} -{ -"light" "64" -"classname" "light" -"origin" "648 1160 -296" -} -{ -"origin" "-664 704 0" -"light" "130" -"classname" "light" -} -{ -"origin" "-656 896 0" -"classname" "light" -"light" "130" -} -{ -"origin" "-736 872 -224" -"light" "80" -"classname" "light" -} -{ -"origin" "-456 904 0" -"light" "150" -"classname" "light" -} -{ -"origin" "-448 744 -240" -"classname" "light" -"light" "150" -} -{ -"origin" "-456 904 -240" -"light" "150" -"classname" "light" -} -{ -"origin" "-424 736 -480" -"classname" "light" -"light" "150" -} -{ -"origin" "-432 896 -480" -"light" "150" -"classname" "light" -} -{ -"origin" "-744 680 -224" -"classname" "light" -"light" "80" -} -{ -"origin" "-288 864 -392" -"classname" "light" -"light" "150" -} -{ -"origin" "-360 936 -392" -"classname" "light" -"light" "150" -} -{ -"origin" "-448 744 0" -"light" "150" -"classname" "light" -} -{ // b#2: swapped with mine1's spot -"classname" "info_player_start" -"angle" "0" -"targetname" "mine3c" -"origin" "-896 800 -360" -} -{ -"model" "*49" -"team" "d5" -"spawnflags" "8" -"classname" "func_door" -"angle" "0" -"target" "t149" -"_minlight" ".18" -} -{ -"model" "*50" -"origin" "1326 779 207" -"_minlight" ".3" -"speed" "400" -"spawnflags" "1" -"classname" "func_rotating" -} -{ -"model" "*51" -"angle" "270" -"classname" "func_door" -"team" "td13" -"_minlight" ".18" -} -{ -"classname" "light" -"light" "100" -"origin" "952 -600 -16" -} -{ -"light" "150" -"classname" "light" -"origin" "968 1536 -576" -} -{ -"light" "100" -"classname" "light" -"origin" "896 1216 -272" -} -{ -"light" "120" -"classname" "light" -"origin" "896 1360 -248" -} -{ -"light" "100" -"classname" "light" -"origin" "1176 1400 -272" -} -{ -"light" "100" -"classname" "light" -"origin" "2072 1008 -296" -} -{ -"light" "175" -"classname" "light" -"origin" "1872 808 -296" -} -{ -"light" "175" -"classname" "light" -"origin" "1872 1016 -296" -} -{ -"classname" "light" -"light" "100" -"origin" "2064 856 -296" -} -{ -"light" "100" -"classname" "light" -"origin" "1852 196 -16" -} -{ -"origin" "792 1080 -272" -"classname" "light" -"light" "100" -} -{ -"origin" "1448 1800 -240" -"classname" "light" -"light" "80" -} -{ -"origin" "1424 1752 -576" -"classname" "light" -"light" "150" -} -{ -"origin" "1200 1704 -576" -"classname" "light" -"light" "200" -} -{ -"origin" "1328 1528 -576" -"classname" "light" -"light" "200" -} -{ -"origin" "1080 1360 -576" -"classname" "light" -"light" "150" -} -{ -"origin" "720 1448 -576" -"classname" "light" -"light" "100" -} -{ -"light" "100" -"classname" "light" -"origin" "968 1512 -272" -} -{ -"light" "100" -"classname" "light" -"origin" "1340 328 128" -} -{ -"light" "100" -"classname" "light" -"origin" "1336 120 216" -} -{ -"light" "100" -"classname" "light" -"origin" "1344 -88 216" -} -{ -"light" "100" -"classname" "light" -"origin" "1344 -256 216" -} -{ -"light" "150" -"classname" "light" -"origin" "1344 -256 -16" -} -{ -"origin" "944 -432 -16" -"classname" "light" -"light" "100" -} -{ -"origin" "960 -264 -16" -"classname" "light" -"light" "100" -} -{ -"origin" "1104 -256 -16" -"classname" "light" -"light" "125" -} -{ -"origin" "1344 -88 -16" -"classname" "light" -"light" "150" -} -{ -"origin" "1224 184 -16" -"classname" "light" -"light" "175" -} -{ -"origin" "1448 184 -16" -"classname" "light" -"light" "175" -} -{ -"origin" "1624 184 -16" -"classname" "light" -"light" "175" -} -{ -"origin" "1860 404 -144" -"classname" "light" -"light" "80" -} -{ -"model" "*52" -"spawnflags" "1" -"classname" "func_plat" -"_minlight" ".18" -} -{ -"origin" "584 -856 -84" -"classname" "light" -"light" "125" -} -{ -"origin" "656 -892 -404" -"classname" "light" -"light" "125" -} -{ -"origin" "636 -816 20" -"classname" "light" -"light" "150" -} -{ -"origin" "628 -520 20" -"classname" "light" -"light" "150" -} -{ -"origin" "256 -452 20" -"classname" "light" -"light" "150" -} -{ -"origin" "60 -812 20" -"classname" "light" -"light" "150" -} -{ -"origin" "60 -576 20" -"classname" "light" -"light" "150" -} -{ -"origin" "632 -520 -612" -"classname" "light" -"light" "125" -} -{ -"origin" "440 -444 20" -"classname" "light" -"light" "150" -} -{ -"origin" "460 -460 -612" -"classname" "light" -"light" "125" -} -{ -"origin" "64 -576 -612" -"classname" "light" -"light" "125" -} -{ -"origin" "64 -812 -612" -"classname" "light" -"light" "125" -} -{ -"origin" "640 -816 -612" -"classname" "light" -"light" "125" -} -{ -"model" "*53" -"target" "t88" -"spawnflags" "8" -"team" "d3" -"classname" "func_door" -"angle" "180" -"_minlight" ".18" -} -{ -"origin" "1928 920 -208" -"classname" "light" -"light" "150" -} -{ -"classname" "light" -"origin" "1632 1112 -684" -"light" "125" -} -{ -"light" "175" -"origin" "1560 1104 -616" -"classname" "light" -} -{ -"origin" "2120 920 -72" -"classname" "light" -"light" "250" -} -{ -"classname" "light" -"origin" "1936 1488 -216" -"light" "150" -} -{ -"light" "150" -"classname" "light" -"origin" "2136 1624 -208" -} -{ -"light" "150" -"classname" "light" -"origin" "2136 1352 -208" -} -{ -"classname" "light" -"origin" "1640 1104 0" -"light" "150" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/train@07c2.ent b/stuff/mapfixes/baseq2/train@07c2.ent deleted file mode 100644 index 9dfdcfbdb..000000000 --- a/stuff/mapfixes/baseq2/train@07c2.ent +++ /dev/null @@ -1,6937 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed spawnflags of DM-only weapon_supershotgun (1180) -// -// Was set to spawn in SP and co-op but is inaccessible due to -// func_wall (1190). -{ -"message" "Lost Station" -"classname" "worldspawn" -"spawnflags" "0" -"sky" "unit1_" -"sounds" "10" -"nextmap" "fact3" -} -{ -"spawnflags" "2048" -"origin" "-1720 -632 1032" -"killtarget" "dullsign" -"targetname" "t433" -"classname" "trigger_relay" -} -{ -"classname" "item_health_small" -"spawnflags" "2048" -"origin" "256 -600 112" -} -{ -"classname" "item_health_small" -"spawnflags" "2048" -"origin" "256 -680 112" -} -{ -"classname" "item_health_small" -"origin" "256 -720 112" -} -{ -"classname" "item_health_small" -"spawnflags" "2048" -"origin" "256 -640 112" -} -{ -"classname" "item_health_small" -"spawnflags" "1024" -"origin" "216 -720 112" -} -{ -"classname" "item_health_small" -"origin" "256 -560 112" -} -{ -"classname" "item_health_small" -"spawnflags" "1024" -"origin" "216 -560 112" -} -{ -"origin" "-752 -832 904" -"classname" "monster_infantry" -"angle" "90" -"item" "ammo_bullets" -} -{ -"origin" "-624 -832 904" -"angle" "90" -"classname" "monster_infantry" -} -{ -"classname" "ammo_bullets" -"origin" "-848 -288 176" -"spawnflags" "3584" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-848 -232 176" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-1328 760 192" -} -{ -"origin" "-96 -1952 864" -"classname" "item_armor_jacket" -"spawnflags" "3072" -} -{ -"classname" "trigger_relay" -"target" "BLR" -"targetname" "t444" -"origin" "-1096 -272 244" -} -{ -"model" "*1" -"classname" "trigger_once" -"target" "t443" -"targetname" "t444" -} -{ -"model" "*2" -"origin" "-1088 -316 88" -"classname" "func_train" -"target" "t442" -"noise" "world/mach1.wav" -"spawnflags" "2048" -"speed" "50" -"_minlight" "0.4" -"targetname" "t443" -} -{ -"classname" "path_corner" -"target" "t441" -"targetname" "t442" -"origin" "-1120 -332 32" -} -{ -"classname" "path_corner" -"targetname" "t441" -"target" "t442" -"origin" "-1120 -311 192" -"wait" "-1" -} -{ -"targetname" "t269" -"classname" "trigger_relay" -"killtarget" "trigbut" -"origin" "-828 -368 -126" -"spawnflags" "2048" -} -{ -"item" "item_armor_shard" -"classname" "monster_soldier_light" -"origin" "-692 -772 116" -"spawnflags" "769" -"targetname" "t377" -"angle" "270" -} -{ -"classname" "point_combat" -"targetname" "t440" -"origin" "-728 -1128 -24" -} -{ -"classname" "monster_soldier_light" -"origin" "-692 -884 68" -"spawnflags" "257" -"targetname" "t377" -"target" "t440" -"angle" "270" -} -{ -"classname" "monster_soldier" -"spawnflags" "769" -"origin" "-1380 -944 -40" -"angle" "45" -} -{ -"model" "*3" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"classname" "ammo_bullets" -"origin" "-1508 568 -164" -} -{ -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -"origin" "-600 -728 -72" -} -{ -"targetname" "corner0" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -"origin" "-536 -552 -104" -} -{ -"targetname" "corner8" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -"origin" "8 -744 -584" -} -{ -"targetname" "corner7" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -"origin" "40 -744 -536" -} -{ -"targetname" "corner7" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -"origin" "40 -536 -536" -} -{ -"targetname" "corner8" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -"origin" "8 -536 -584" -} -{ -"targetname" "close_out" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -"origin" "8 -744 1080" -} -{ -"targetname" "corner6" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -"origin" "40 -744 1032" -} -{ -"targetname" "corner6" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -"origin" "40 -536 1032" -} -{ -"targetname" "close_out" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -"origin" "8 -536 1080" -} -{ -"targetname" "open_in" -"origin" "-1672 -744 1080" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -} -{ -"targetname" "corner3" -"origin" "-1704 -744 1032" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -} -{ -"targetname" "corner3" -"origin" "-1704 -536 1032" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -} -{ -"targetname" "open_in" -"origin" "-1672 -536 1080" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -} -{ -"targetname" "corner1" -"origin" "-1672 -744 -72" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -} -{ -"targetname" "corner2" -"origin" "-1704 -744 -24" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -} -{ -"targetname" "corner2" -"origin" "-1704 -536 -24" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -"attenuation" "3" -} -{ -"targetname" "corner1" -"origin" "-1672 -536 -72" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -"attenuation" "3" -} -{ -"targetname" "corner9" -"origin" "-520 -760 -584" -"attenuation" "3" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -} -{ -"targetname" "corner0" -"origin" "-536 -624 -144" -"attenuation" "3" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -} -{ -"targetname" "corner0B" -"origin" "-600 -520 -72" -"attenuation" "3" -"classname" "target_speaker" -"volume" "0.6" -"noise" "world/train2.wav" -} -{ -"targetname" "corner9" -"origin" "-520 -552 -584" -"attenuation" "3" -"noise" "world/train2.wav" -"volume" "0.6" -"classname" "target_speaker" -} -{ -"model" "*4" -"origin" "420 388 -64" -"speed" "290" -"dmg" "10" -"_minlight" "0.2" -"team" "train1" -"spawnflags" "1" -"target" "t20" -"classname" "func_train" -} -{ -"model" "*5" -"origin" "36 388 -76" -"noise" "world/train1.wav" -"target" "t3" -"team" "train1" -"speed" "290" -"dmg" "10" -"spawnflags" "1" -"classname" "func_train" -"_minlight" "0.2" -} -{ -"spawnflags" "1" -"classname" "func_timer" -"random" "3" -"wait" "8" -"origin" "-1350 756 2" -"target" "t439" -} -{ -"noise" "world/drip1.wav" -"spawnflags" "0" -"classname" "target_speaker" -"attenuation" "2" -"volume" "0.6" -"origin" "-1330 774 2" -"targetname" "t439" -} -{ -"noise" "world/drip3.wav" -"spawnflags" "0" -"classname" "target_speaker" -"attenuation" "2" -"volume" "0.7" -"origin" "-1382 732 2" -"targetname" "t438" -} -{ -"spawnflags" "1" -"classname" "func_timer" -"random" "4" -"wait" "12" -"origin" "-1350 724 2" -"target" "t438" -} -{ -"classname" "info_player_deathmatch" -"origin" "-616 -616 88" -} -{ -"model" "*6" -"origin" "-772 -1526 916" -"classname" "func_door_rotating" -"spawnflags" "2048" -"distance" "90" -"message" "ACCESS DENIED\nDoor is opened elsewhere." -"wait" "4" -"speed" "40" -"targetname" "access_panel" -"_minlight" "0.2" -} -{ -"origin" "-1414 812 2" -"volume" "0.3" -"attenuation" "2" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/drip2.wav" -"targetname" "t437" -} -{ -"origin" "-1382 804 2" -"wait" "6" -"random" "3" -"classname" "func_timer" -"spawnflags" "1" -"target" "t437" -} -{ -"origin" "-1286 796 -30" -"wait" "6" -"random" "4" -"target" "t435" -"classname" "func_timer" -"spawnflags" "1" -"volume" "0.5" -} -{ -"origin" "-1266 814 -30" -"volume" "0.5" -"attenuation" "2" -"targetname" "t435" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/drip1.wav" -} -{ -"_color" "1.000000 0.880000 0.192000" -"classname" "light" -"light" "80" -"origin" "-1144 -1120 -104" -} -{ -"origin" "-1064 -1120 -104" -"light" "80" -"classname" "light" -"_color" "1.000000 0.880000 0.192000" -} -{ -"model" "*7" -"spawnflags" "2049" -"target" "t433" -"count" "13" -"targetname" "goons1" -"classname" "trigger_counter" -} -{ -"model" "*8" -"targetname" "t433" -"spawnflags" "2051" -"classname" "func_wall" -} -{ -"model" "*9" -"spawnflags" "0" -"targetname" "dullsign" -"classname" "func_wall" -} -{ -"light" "170" -"angle" "90" -"origin" "-912 -1182 -36" -"classname" "light_mine2" -} -{ -"classname" "ammo_shells" -"origin" "-1360 724 -60" -"spawnflags" "2048" -} -{ -"classname" "ammo_slugs" -"origin" "-1336 668 -60" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"origin" "-1864 918 178" -"classname" "ammo_shells" -} -{ -"model" "*10" -"classname" "func_button" -"angle" "90" -"_minlight" "0.8" -"lip" "3" -"target" "water_secret" -"spawnflags" "2048" -} -{ -"model" "*11" -"classname" "func_wall" -"spawnflags" "2048" -"_minlight" "0.2" -} -{ -"model" "*12" -"classname" "func_wall" -"spawnflags" "2048" -"_minlight" "0.2" -} -{ -"origin" "-672 -616 688" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-624 -624 688" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-480 -848 888" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-528 -1488 872" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"origin" "-544 -1184 896" -"classname" "info_player_deathmatch" -} -{ -"angle" "45" -"origin" "-96 -1680 880" -"targetname" "base3c" -"classname" "info_player_coop" -} -{ -"angle" "90" -"origin" "-112 -1736 880" -"targetname" "base3c" -"classname" "info_player_coop" -} -{ -"origin" "-128 -1800 880" -"targetname" "base3c" -"classname" "info_player_coop" -} -{ -"origin" "-1472 -528 816" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "-1360 -528 816" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1152 -528 824" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1440 -536 -328" -"angle" "315" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1120 -976 -256" -"classname" "info_player_deathmatch" -} -{ -"origin" "-976 -752 -176" -"noise" "world/amb2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"targetname" "hiss" -"classname" "target_speaker" -"spawnflags" "0" -"noise" "world/steam2.wav" -"origin" "-976 -752 -272" -"attenuation" "2" -"volume" "1" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb2.wav" -"origin" "-676 -760 976" -} -{ -"targetname" "hiss2" -"volume" "1" -"attenuation" "2" -"origin" "-700 -752 884" -"noise" "world/steam2.wav" -"spawnflags" "0" -"classname" "target_speaker" -} -{ -"classname" "light" -"light" "100" -"origin" "-996 -572 -256" -} -{ -"style" "1" -"classname" "func_areaportal" -"targetname" "t432" -} -{ -"origin" "424 416 -200" -"classname" "light" -"light" "64" -} -{ -"origin" "40 416 -200" -"light" "64" -"classname" "light" -} -{ -"origin" "336 368 -216" -"light" "48" -"classname" "light" -} -{ -"origin" "336 464 -216" -"classname" "light" -"light" "48" -} -{ -"origin" "-48 368 -216" -"classname" "light" -"light" "48" -} -{ -"origin" "-48 464 -216" -"light" "48" -"classname" "light" -} -{ -"classname" "light" -"light" "125" -"origin" "72 552 -8" -} -{ -"classname" "light" -"light" "125" -"origin" "-8 552 -8" -} -{ -"light" "125" -"classname" "light" -"origin" "-8 216 -8" -} -{ -"light" "125" -"classname" "light" -"origin" "72 216 -8" -} -{ -"classname" "light" -"light" "125" -"origin" "456 216 -8" -} -{ -"classname" "light" -"light" "125" -"origin" "376 216 -8" -} -{ -"classname" "light" -"light" "135" -"origin" "104 392 -8" -} -{ -"light" "135" -"classname" "light" -"origin" "552 392 -8" -} -{ -"light" "135" -"classname" "light" -"origin" "456 392 -8" -} -{ -"light" "135" -"classname" "light" -"origin" "360 392 -8" -} -{ -"light" "160" -"classname" "light" -"origin" "224 392 -8" -} -{ -"light" "125" -"classname" "light" -"origin" "456 552 -8" -} -{ -"light" "125" -"classname" "light" -"origin" "376 552 -8" -} -{ -"light" "135" -"classname" "light" -"origin" "24 392 -8" -} -{ -"light" "135" -"classname" "light" -"origin" "-72 392 -8" -} -{ -"light" "135" -"classname" "light" -"origin" "-152 392 -8" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-636 -640 808" -"classname" "light" -"light" "120" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-508 -640 808" -"classname" "light" -"light" "120" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-380 -640 808" -"classname" "light" -"light" "120" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-568 -640 744" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-632 -640 744" -"classname" "light" -"light" "120" -} -{ -"light" "64" -"classname" "light" -"origin" "-504 -640 744" -"_color" "1.000000 0.517647 0.223529" -} -{ -"light" "80" -"classname" "light" -"origin" "-760 -640 712" -"_color" "1.000000 0.517647 0.223529" -} -{ -"light" "130" -"classname" "light" -"origin" "-888 -640 680" -"_color" "1.000000 0.517647 0.223529" -} -{ -"model" "*13" -"team" "door1" -"lip" "12" -"angle" "0" -"speed" "100" -"wait" "4" -"sounds" "0" -"classname" "func_door" -"light" "64" -"_minlight" "0.2" -} -{ -"model" "*14" -"team" "door1" -"lip" "12" -"classname" "func_door" -"sounds" "2" -"wait" "4" -"speed" "100" -"angle" "180" -"light" "64" -"_minlight" "0.2" -} -{ -"model" "*15" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*16" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "info_player_intermission" -"origin" "-1044 416 256" -"angles" "20 135 0" -} -{ -"target" "t431" -"targetname" "t430" -"spawnflags" "2048" -"classname" "point_combat" -"origin" "-1664 1084 -64" -} -{ -"targetname" "t431" -"classname" "point_combat" -"origin" "-1656 320 140" -"spawnflags" "2048" -} -{ -"origin" "-1088 -952 -272" -"target" "t293" -"targetname" "t239" -"classname" "path_corner" -} -{ -"model" "*17" -"spawnflags" "2048" -"message" "This item must be activated to use it." -"targetname" "t428" -"classname" "trigger_once" -} -{ -"delay" "0.5" -"killtarget" "redkeygate" -"spawnflags" "2048" -"origin" "-1584 976 184" -"targetname" "rusty_gate" -"classname" "trigger_relay" -} -{ -"model" "*18" -"wait" "1" -"targetname" "redkeygate" -"target" "keyhole1" -"spawnflags" "2048" -"classname" "trigger_multiple" -} -{ -"origin" "-1164 -1172 -96" -"light" "110" -"classname" "light" -"_color" "1.000000 0.880000 0.192000" -} -{ -"origin" "-1224 -1120 -104" -"light" "80" -"classname" "light" -"_color" "1.000000 0.880000 0.192000" -} -{ -"origin" "-1304 -1120 -104" -"light" "120" -"classname" "light" -"_color" "1.000000 0.880000 0.192000" -} -{ -"light" "115" -"classname" "light" -"origin" "-992 -1648 936" -} -{ -"light" "115" -"classname" "light" -"origin" "-992 -1520 936" -} -{ -"spawnflags" "1" -"classname" "monster_parasite" -"target" "t364" -"origin" "-324 -714 -288" -} -{ -"model" "*19" -"classname" "func_wall" -"_minlight" "0.2" -"spawnflags" "2048" -} -{ -"classname" "misc_teleporter_dest" -"angle" "90" -"targetname" "t427" -"origin" "-1064 230 166" -"spawnflags" "1792" -} -{ -"classname" "misc_teleporter" -"spawnflags" "1792" -"angle" "90" -"target" "t426" -"origin" "-1920 904 180" -} -{ -"classname" "misc_teleporter_dest" -"origin" "-992 -536 824" -"targetname" "t426" -"angle" "270" -"spawnflags" "1792" -} -{ -"classname" "misc_teleporter_dest" -"origin" "-160 -536 824" -"targetname" "t426" -"angle" "270" -"spawnflags" "1792" -} -{ -"classname" "misc_teleporter" -"origin" "-384 -928 896" -"target" "t427" -"spawnflags" "1792" -} -{ -"classname" "target_secret" -"targetname" "t425" -"spawnflags" "2048" -"origin" "-968 -1120 -248" -} -{ -"model" "*20" -"classname" "trigger_once" -"target" "t425" -"message" "You have found a secret area." -"spawnflags" "2048" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-720 -1424 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-760 -1424 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-752 -1384 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-736 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-672 -1408 960" -} -{ -"spawnflags" "1792" -"classname" "ammo_slugs" -"team" "ammoland" -"origin" "-1360 712 184" -} -{ -"spawnflags" "1792" -"classname" "ammo_rockets" -"team" "ammoland" -"origin" "-1272 680 184" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"team" "ammoland" -"origin" "-1240 752 184" -} -{ -"spawnflags" "1792" -"classname" "ammo_cells" -"team" "ammoland" -"origin" "-1280 824 184" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"team" "ammoland" -"origin" "-1384 824 184" -} -{ -"spawnflags" "1792" -"classname" "ammo_shells" -"team" "ammoland" -"origin" "-1416 744 184" -} -{ -"spawnflags" "1792" -"classname" "ammo_shells" -"origin" "-1632 1184 -64" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-1672 1144 -64" -} -{ -"classname" "weapon_railgun" -"spawnflags" "1792" -"origin" "-888 -928 -440" -} -{ -"classname" "ammo_cells" -"spawnflags" "1792" -"origin" "-384 -968 968" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-232 -920 888" -} -{ -"origin" "-1310 328 168" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"model" "*21" -"_minlight" "0.1" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-1400 440 -40" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-1352 440 -40" -} -{ -"spawnflags" "2048" -"origin" "-928 -392 -176" -"classname" "item_armor_shard" -} -{ -"classname" "item_armor_shard" -"origin" "-888 -392 -176" -"spawnflags" "2048" -} -{ -"light" "160" -"classname" "light" -"origin" "-952 -640 212" -} -{ -"light" "120" -"classname" "light" -"origin" "-888 -640 212" -} -{ -"classname" "item_armor_shard" -"origin" "-1280 -848 0" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"origin" "-976 -1152 -256" -"classname" "weapon_hyperblaster" -} -{ -"spawnflags" "1792" -"origin" "-1024 -1152 -256" -"classname" "ammo_cells" -} -{ -"classname" "item_health_large" -"origin" "-972 -1084 -264" -} -{ -"origin" "-304 -416 -304" -"classname" "ammo_bullets" -"spawnflags" "1792" -} -{ -"origin" "-304 -368 -304" -"classname" "weapon_machinegun" -"spawnflags" "1792" -} -{ -"origin" "-304 -464 -304" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-512 -256 -698" -"_color" "1.000000 0.796078 0.003922" -"classname" "light" -"light" "64" -} -{ -"origin" "-448 -256 -698" -"_color" "1.000000 0.796078 0.003922" -"light" "64" -"classname" "light" -} -{ -"classname" "item_armor_shard" -"origin" "104 -588 -1000" -"spawnflags" "2048" -} -{ -"classname" "item_armor_shard" -"origin" "-944 -1856 888" -"spawnflags" "2048" -} -{ -"origin" "-56 -1808 872" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"spawnflags" "1" -"item" "ammo_bullets" -"classname" "monster_infantry" -"angle" "270" -"origin" "-897 -485 190" -} -{ -"spawnflags" "1792" -"origin" "-1020 -1084 -264" -"classname" "ammo_rockets" -} -{ -"model" "*22" -"_minlight" "0.8" -"target" "wallramp" -"lip" "8" -"angle" "0" -"classname" "func_button" -} -{ -"model" "*23" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*24" -"sounds" "2" -"wait" "5" -"spawnflags" "2049" -"height" "684" -"speed" "250" -"classname" "func_plat" -} -{ -"origin" "-480 -280 -792" -"classname" "weapon_supershotgun" -"spawnflags" "1792" -} -{ -"origin" "-480 -232 -792" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"model" "*25" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-896 -896 -144" -"spawnflags" "1792" -"classname" "weapon_shotgun" -} -{ -"spawnflags" "1792" -"origin" "-1152 560 -128" -"classname" "ammo_grenades" -} -{ -"origin" "-1568 768 -144" -"classname" "ammo_slugs" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"origin" "-1088 896 -144" -"classname" "ammo_cells" -} -{ -"model" "*26" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-1056 -532 96" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"classname" "light" -"light" "100" -"spawnflags" "1792" -"origin" "-1864 -640 728" -} -{ -"model" "*27" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"classname" "item_quad" -"origin" "-1864 -640 680" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "item_silencer" -"origin" "-216 -1112 952" -} -{ -"spawnflags" "2048" -"classname" "weapon_machinegun" -"origin" "-320 -976 888" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-640 -1448 1168" -} -{ -"classname" "item_armor_combat" -"origin" "-1008 -1840 944" -"spawnflags" "1792" -} -{ -"classname" "item_armor_jacket" -"spawnflags" "1792" -"origin" "-640 -648 -1008" -} -{ -"classname" "info_player_deathmatch" -"origin" "-313 -1245 -312" -"angle" "180" -} -{ -"classname" "info_player_deathmatch" -"angle" "135" -"origin" "-624 -1144 -24" -} -{ -"classname" "info_player_deathmatch" -"angle" "270" -"origin" "-1416 -896 -40" -} -{ -"origin" "-1520 1060 144" -"spawnflags" "1792" -"classname" "item_armor_combat" -} -{ -"model" "*28" -"_minlight" "0.1" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"origin" "-1224 640 -64" -"classname" "info_player_deathmatch" -"angle" "315" -} -{ -"origin" "-1232 880 -64" -"classname" "info_player_deathmatch" -"angle" "45" -} -{ -"origin" "-1520 1144 144" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-980 284 68" -"spawnflags" "1792" -"classname" "ammo_rockets" -} -{ -"origin" "-1304 440 -40" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-912 716 -24" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1944 744 184" -"classname" "ammo_shells" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"origin" "-1328 772 -60" -"classname" "ammo_shells" -} -{ -"team" "dm1" -"origin" "-1340 836 32" -"spawnflags" "1792" -"classname" "item_health_mega" -} -{ -"origin" "-840 -436 184" -"classname" "info_player_deathmatch" -"angle" "180" -} -{ -"origin" "-680 -800 -24" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-1920 792 236" -"spawnflags" "1792" -"classname" "weapon_rocketlauncher" -} -{ -"model" "*29" -"spawnflags" "1792" -"speed" "200" -"lip" "24" -"classname" "func_plat" -} -{ -"model" "*30" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-232 -920 928" -"classname" "item_power_shield" -"spawnflags" "1792" -} -{ -"origin" "-32 -1272 984" -"spawnflags" "1792" -"classname" "item_invulnerability" -} -{ -"model" "*31" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-888 -256 -160" -"spawnflags" "1792" -"classname" "weapon_chaingun" -} -{ -"model" "*32" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"spawnflags" "1792" -"origin" "-1056 -272 88" -"target" "BLR" -"classname" "trigger_always" -} -{ -"spawnflags" "1792" -"origin" "-1520 904 160" -"target" "rusty_gate" -"classname" "trigger_always" -} -{ -"origin" "-648 -1384 1148" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"model" "*33" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-848 -392 -176" -} -{ -"classname" "weapon_grenadelauncher" -"spawnflags" "1792" -"origin" "-1216 -928 96" -} -{ -"classname" "ammo_cells" -"origin" "168 -712 112" -"spawnflags" "1792" -} -{ -"classname" "weapon_bfg" -"spawnflags" "1792" -"origin" "152 -560 112" -} -{ -"classname" "info_player_deathmatch" -"angle" "180" -"origin" "238 -638 112" -} -{ -"origin" "-328 -1084 920" -"classname" "light" -"light" "120" -} -{ -"origin" "-328 -1164 920" -"classname" "light" -"light" "120" -} -{ -"origin" "-400 -1164 920" -"classname" "light" -"light" "110" -} -{ -"light" "100" -"classname" "light" -"origin" "-512 -1076 928" -} -{ -"light" "135" -"classname" "light" -"origin" "-656 -844 984" -} -{ -"origin" "-544 -908 984" -"classname" "light" -"light" "110" -} -{ -"_color" "1.000000 0.388235 0.239216" -"light" "80" -"classname" "light" -"origin" "-480 -1204 888" -} -{ -"origin" "-352 -1204 888" -"classname" "light" -"light" "80" -"_color" "1.000000 0.156863 0.125490" -} -{ -"origin" "-408 -988 888" -"classname" "light" -"light" "100" -"_color" "1.000000 0.388235 0.239216" -} -{ -"origin" "-568 -1116 888" -"classname" "light" -"light" "80" -"_color" "1.000000 0.388235 0.239216" -} -{ -"origin" "-608 -1004 888" -"classname" "light" -"light" "100" -"_color" "1.000000 0.388235 0.239216" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "196 -544 128" -"classname" "light" -"light" "105" -} -{ -"origin" "196 -648 128" -"classname" "light" -"light" "105" -"_color" "1.000000 0.274510 0.035294" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "148 -640 64" -"classname" "light" -"light" "105" -} -{ -"model" "*34" -"sounds" "2" -"lip" "0" -"spawnflags" "0" -"wait" "1" -"_minlight" "0.2" -"speed" "150" -"classname" "func_plat" -} -{ -"spawnflags" "2048" -"origin" "-1344 756 -84" -"targetname" "t424" -"classname" "target_secret" -} -{ -"model" "*35" -"spawnflags" "2048" -"message" "You have found a secret area." -"target" "t424" -"classname" "trigger_once" -} -{ -"spawnflags" "2" -"origin" "-978 -894 -14" -"targetname" "Response_troops" -"classname" "monster_flyer" -"angle" "0" -} -{ -"spawnflags" "2" -"origin" "-1026 -922 -14" -"targetname" "Response_troops" -"classname" "monster_flyer" -"angle" "225" -} -{ -"spawnflags" "2" -"origin" "-1022 -874 -14" -"targetname" "Response_troops" -"angle" "135" -"classname" "monster_flyer" -} -{ -"spawnflags" "2" -"origin" "-1136 548 124" -"targetname" "Response_troops" -"angle" "180" -"classname" "monster_flyer" -} -{ -"spawnflags" "2" -"origin" "-1324 1124 124" -"targetname" "Response_troops" -"angle" "180" -"classname" "monster_flyer" -} -{ -"spawnflags" "2" -"origin" "-1520 536 116" -"targetname" "Response_troops" -"angle" "180" -"classname" "monster_flyer" -} -{ -"spawnflags" "2" -"origin" "-640 -1352 1156" -"targetname" "Response_troops" -"classname" "monster_flyer" -"angle" "180" -} -{ -"spawnflags" "2" -"origin" "-640 -1308 1160" -"targetname" "Response_troops" -"angle" "180" -"classname" "monster_flyer" -} -{ -"spawnflags" "2" -"origin" "-640 -1444 1156" -"targetname" "Response_troops" -"angle" "180" -"classname" "monster_flyer" -} -{ -"light" "110" -"classname" "light" -"origin" "-764 -1132 984" -} -{ -"light" "110" -"classname" "light" -"origin" "-752 -908 984" -} -{ -"origin" "-656 -908 984" -"classname" "light" -"light" "110" -} -{ -"target" "monster_soldier" -"origin" "-744 -1112 900" -"angle" "90" -"targetname" "goons2" -"classname" "target_spawner" -} -{ -"target" "monster_soldier" -"origin" "-788 -1080 904" -"angle" "90" -"targetname" "goons2" -"classname" "target_spawner" -} -{ -"light" "200" -"classname" "light_mine2" -"angle" "270" -"origin" "-1343 366 244" -} -{ -"angle" "180" -"light" "200" -"classname" "light_mine2" -"origin" "-1222 258 316" -} -{ -"light" "200" -"classname" "light_mine2" -"angle" "0" -"origin" "-1466 257 316" -} -{ -"light" "200" -"classname" "light_mine2" -"angle" "270" -"origin" "-1283 366 244" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"origin" "-926 -239 93" -"target" "BLRguns" -"targetname" "t423" -} -{ -"spawnflags" "2048" -"classname" "target_help" -"targetname" "t422" -"message" "Locate a powerful weapon." -"origin" "-216 -1832 896" -} -{ -"model" "*36" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t422" -} -{ -"spawnflags" "1792" -"classname" "item_armor_body" -"origin" "-96 -1952 904" -} -{ -"classname" "light" -"light" "90" -"origin" "-1048 -1664 960" -"_color" "1.000000 0.517647 0.223529" -} -{ -"classname" "light" -"light" "90" -"origin" "-1048 -1792 960" -"_color" "1.000000 0.517647 0.223529" -} -{ -"classname" "info_notnull" -"targetname" "t419" -"origin" "-728 -1416 884" -} -{ -"classname" "info_notnull" -"targetname" "t421" -"origin" "-728 -1392 884" -} -{ -"classname" "info_notnull" -"targetname" "t420" -"origin" "-752 -1392 884" -} -{ -"classname" "info_notnull" -"targetname" "t418" -"origin" "-752 -1416 884" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "98 -574 -832" -"light" "120" -"classname" "light" -} -{ -"light" "120" -"classname" "light" -"origin" "148 -640 -832" -"_color" "1.000000 0.262745 0.243137" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "96 -708 -832" -"classname" "light" -"light" "120" -} -{ -"spawnflags" "2048" -"origin" "-324 -360 -184" -"targetname" "t417" -"target" "t345" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-308 -384 -184" -"killtarget" "lsecret" -"targetname" "t416" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-324 -384 -184" -"target" "t345" -"targetname" "t416" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-308 -360 -184" -"targetname" "t417" -"killtarget" "hsecret" -"classname" "trigger_relay" -} -{ -"origin" "-392 -976 992" -"classname" "weapon_supershotgun" -"spawnflags" "1792" -} -{ -"origin" "-296 -912 872" -"spawnflags" "2064" -"angle" "270" -"classname" "misc_deadsoldier" -} -{ -"spawnflags" "2048" -"origin" "-312 -984 976" -"targetname" "t415" -"classname" "target_secret" -} -{ -"model" "*37" -"spawnflags" "2048" -"message" "You have found a secret." -"target" "t415" -"classname" "trigger_once" -} -{ -"origin" "-1320 -848 -8" -"classname" "item_armor_shard" -} -{ -"classname" "item_health_small" -"origin" "104 -632 -1000" -} -{ -"origin" "-492 -508 -972" -"spawnflags" "1" -"classname" "monster_flipper" -"angle" "270" -} -{ -"origin" "-448 -484 -972" -"spawnflags" "1" -"angle" "270" -"classname" "monster_flipper" -} -{ -"origin" "-832 -244 64" -"classname" "item_armor_shard" -} -{ -"origin" "-876 -212 64" -"classname" "item_armor_shard" -} -{ -"origin" "-872 -260 48" -"spawnflags" "2050" -"classname" "misc_deadsoldier" -} -{ -"origin" "0 -1764 864" -"classname" "item_armor_shard" -} -{ -"team" "dm1" -"target" "t428" -"spawnflags" "2048" -"classname" "item_invulnerability" -"origin" "-1340 836 -68" -} -{ -"origin" "-1404 984 184" -"classname" "path_corner" -"targetname" "t392" -"target" "t393" -"spawnflags" "2048" -} -{ -"origin" "-1584 272 184" -"classname" "path_corner" -"target" "t386" -"targetname" "t400" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1640 376 184" -"targetname" "t399" -"target" "t400" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1600 544 184" -"targetname" "t395" -"target" "t396" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1464 592 184" -"targetname" "t398" -"target" "t399" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1448 504 184" -"targetname" "t397" -"target" "t398" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1520 496 184" -"targetname" "t396" -"target" "t397" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1616 696 184" -"targetname" "t394" -"target" "t395" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1536 1000 184" -"targetname" "t393" -"target" "t394" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1212 880 184" -"targetname" "t391" -"target" "t392" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1104 792 184" -"targetname" "t390" -"target" "t391" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1112 640 184" -"targetname" "t389" -"target" "t390" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1056 424 184" -"targetname" "t388" -"target" "t389" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1088 256 184" -"targetname" "t387" -"target" "t388" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1392 272 184" -"targetname" "t386" -"target" "t387" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1056 944 88" -"targetname" "t385" -"target" "t313" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1080 664 88" -"targetname" "t384" -"target" "t385" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1176 520 88" -"targetname" "t383" -"target" "t384" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1512 528 88" -"targetname" "t382" -"target" "t383" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1592 720 88" -"targetname" "t381" -"target" "t382" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1568 952 88" -"targetname" "t380" -"target" "t381" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1432 1032 88" -"targetname" "t305" -"target" "t380" -"spawnflags" "2048" -} -{ -"origin" "-1000 -648 -360" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"spawnflags" "2048" -"origin" "-906 -275 81" -"target" "BLR" -"targetname" "t379" -"classname" "trigger_relay" -"delay" "1" -} -{ -"origin" "-926 -218 97" -"targetname" "t379" -"delay" "1" -"target" "BLRguns" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-679 -800 -62" -"classname" "item_health" -} -{ -"origin" "-1256 -936 64" -"targetname" "t378" -"classname" "target_goal" -"spawnflags" "2048" -} -{ -"model" "*38" -"target" "t377" -"classname" "trigger_once" -} -{ -"origin" "-676 -1116 -36" -"targetname" "t376" -"classname" "point_combat" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"origin" "-1408 704 -72" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"origin" "-1292 676 -72" -"classname" "item_health_large" -} -{ -"angle" "90" -"targetname" "t347" -"origin" "-1312 752 -144" -"classname" "monster_flipper" -} -{ -"angle" "90" -"targetname" "t347" -"origin" "-1372 784 -152" -"classname" "monster_flipper" -} -{ -"spawnflags" "2048" -"origin" "-1300 836 -68" -"classname" "item_armor_jacket" -} -{ -"classname" "ammo_bullets" -"origin" "-928 -392 -112" -"spawnflags" "1792" -} -{ -"origin" "-888 -320 -152" -"noise" "world/curnt2.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1536 552 -88" -"noise" "world/curnt2.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1568 736 -88" -"noise" "world/curnt2.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1496 952 -88" -"noise" "world/curnt2.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1280 984 -88" -"noise" "world/curnt2.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1096 928 -88" -"noise" "world/curnt2.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1056 736 -88" -"noise" "world/curnt2.wav" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"origin" "-1136 520 -88" -"noise" "world/curnt2.wav" -} -{ -"noise" "world/curnt2.wav" -"origin" "-1344 536 -88" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"spawnflags" "2560" -"origin" "-1288 440 -72" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-1328 440 -72" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-1368 440 -72" -"classname" "item_health_small" -} -{ -"spawnflags" "2560" -"origin" "-1408 440 -72" -"classname" "item_health_small" -} -{ -"origin" "-1336 776 216" -"target" "t261" -"classname" "monster_infantry" -"spawnflags" "0" -} -{ -"item" "ammo_bullets" -"target" "t258" -"origin" "-1336 720 216" -"classname" "monster_infantry" -"spawnflags" "0" -} -{ -"classname" "light" -"light" "120" -"origin" "-1361 784 -50" -"_color" "0.465649 1.000000 0.671756" -} -{ -"classname" "light" -"light" "80" -"origin" "-1368 784 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"light" "80" -"classname" "light" -"origin" "-1304 784 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"light" "80" -"classname" "light" -"origin" "-1304 720 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1432 -536 256" -"classname" "target_speaker" -"noise" "world/short1.wav" -"spawnflags" "1" -} -{ -"origin" "-1448 -648 256" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-61 -1240 944" -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-45 -1976 944" -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -} -{ -"noise" "world/short1.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "35 -1784 944" -} -{ -"noise" "world/amb7.wav" -"spawnflags" "1" -"classname" "target_speaker" -"origin" "40 -1776 928" -} -{ -"classname" "target_speaker" -"spawnflags" "1" -"noise" "world/amb7.wav" -"origin" "35 -1416 944" -} -{ -"targetname" "Response_troops" -"origin" "-280 -1422 888" -"spawnflags" "3" -"angle" "180" -"classname" "monster_infantry" -} -{ -"origin" "-1916 900 204" -"message" "Resume previous mission." -"targetname" "Response_troops" -"classname" "target_help" -} -{ -"origin" "-1888 812 188" -"targetname" "Response_troops" -"classname" "target_goal" -} -{ -"model" "*39" -"target" "t372" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"targetname" "t370" -"classname" "point_combat" -"origin" "-1672 320 140" -"spawnflags" "2048" -} -{ -"target" "t430" -"targetname" "t372" -"origin" "-1516 1148 -52" -"spawnflags" "0" -"angle" "270" -"classname" "monster_soldier_light" -} -{ -"targetname" "t372" -"target" "t370" -"origin" "-1660 924 0" -"spawnflags" "0" -"angle" "135" -"classname" "monster_soldier_light" -} -{ -"targetname" "t372" -"origin" "-1332 1168 -52" -"spawnflags" "0" -"angle" "225" -"classname" "monster_soldier_light" -} -{ -"angle" "270" -"spawnflags" "769" -"classname" "monster_soldier" -"origin" "-1316 -232 184" -} -{ -"origin" "-884 -236 -176" -"target" "t269" -"classname" "item_adrenaline" -"spawnflags" "2048" -} -{ -"origin" "-1216 -928 4" -"targetname" "t369" -"classname" "info_notnull" -"spawnflags" "2048" -} -{ -"origin" "-1216 -928 80" -"_cone" "30" -"light" "200" -"target" "t369" -"classname" "light" -"spawnflags" "2048" -} -{ -"target" "t378" -"origin" "-1216 -928 56" -"classname" "key_red_key" -"spawnflags" "2048" -} -{ -"classname" "monster_soldier_light" -"angle" "270" -"spawnflags" "0" -"origin" "-744 -1320 896" -} -{ -"spawnflags" "1792" -"classname" "ammo_cells" -"origin" "-1944 744 224" -} -{ -"spawnflags" "1536" -"classname" "item_health_large" -"origin" "-1904 704 176" -} -{ -"spawnflags" "2048" -"classname" "item_health_large" -"origin" "-1944 704 176" -} -{ -"origin" "-1848 656 172" -"_color" "1.000000 0.858268 0.279528" -"light" "100" -"classname" "light" -} -{ -"origin" "-1904 656 172" -"classname" "light" -"light" "100" -"_color" "1.000000 0.858268 0.279528" -} -{ -"classname" "item_armor_shard" -"origin" "-1376 -200 168" -} -{ -"classname" "item_armor_shard" -"origin" "-1384 16 168" -} -{ -"classname" "item_armor_shard" -"origin" "-1376 -384 168" -} -{ -"classname" "path_corner" -"targetname" "t365" -"origin" "-332 -600 -304" -"target" "t364" -} -{ -"classname" "path_corner" -"targetname" "t364" -"target" "t365" -"origin" "-332 -904 -312" -} -{ -"origin" "-768 -1120 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"origin" "-768 -1056 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"origin" "-768 -992 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"origin" "-768 -928 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"origin" "-768 -864 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"origin" "-768 -800 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "90" -"classname" "light" -"origin" "-768 -736 -464" -} -{ -"origin" "-792 -640 -464" -"light" "90" -"classname" "light" -"_color" "1.000000 0.517647 0.223529" -} -{ -"origin" "-768 -1184 -464" -"classname" "light" -"light" "90" -"_color" "1.000000 0.432000 0.268000" -} -{ -"origin" "-768 -1248 -464" -"classname" "light" -"light" "75" -"_color" "1.000000 0.432000 0.268000" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-1024 -636 -228" -} -{ -"style" "2" -"classname" "func_areaportal" -"targetname" "t356" -} -{ -"style" "3" -"classname" "func_areaportal" -"targetname" "t355" -} -{ -"classname" "trigger_relay" -"targetname" "close_out" -"target" "t354" -"origin" "-88 -664 824" -} -{ -"classname" "trigger_relay" -"targetname" "open_in" -"target" "t353" -"origin" "-1768 -696 824" -} -{ -"origin" "-760 -680 888" -"classname" "trigger_relay" -"targetname" "close_in" -"delay" "4" -"target" "t354" -} -{ -"classname" "trigger_relay" -"targetname" "close_in" -"target" "t353" -"origin" "-744 -664 824" -} -{ -"origin" "-848 -760 832" -"classname" "path_corner" -"targetname" "t151" -"target" "t352" -"pathtarget" "close_in" -} -{ -"model" "*40" -"sounds" "4" -"angle" "270" -"classname" "func_door" -"team" "in" -"targetname" "t353" -"spawnflags" "44" -"speed" "100" -"target" "t355" -"_minlight" "0.2" -} -{ -"model" "*41" -"angle" "90" -"classname" "func_door" -"team" "in" -"targetname" "t353" -"spawnflags" "44" -"speed" "100" -"target" "t355" -"_minlight" "0.2" -} -{ -"model" "*42" -"sounds" "4" -"classname" "func_door" -"angle" "270" -"team" "out" -"targetname" "t354" -"target" "t356" -"spawnflags" "32" -} -{ -"model" "*43" -"classname" "func_door" -"angle" "90" -"team" "out" -"targetname" "t354" -"target" "t356" -"spawnflags" "32" -} -{ -"classname" "path_corner" -"origin" "-292 -1399 867" -"targetname" "t351" -"target" "t244" -} -{ -"origin" "-225 -1433 867" -"classname" "path_corner" -"targetname" "t350" -"target" "t351" -} -{ -"origin" "-632 -1456 864" -"classname" "path_corner" -"targetname" "t349" -"target" "t244" -} -{ -"classname" "item_health_small" -"origin" "-746 -560 88" -} -{ -"classname" "item_health_small" -"origin" "-712 -560 88" -} -{ -"classname" "item_health_small" -"origin" "-780 -560 88" -} -{ -"style" "4" -"classname" "func_areaportal" -"targetname" "t348" -} -{ -"model" "*44" -"classname" "func_door" -"angle" "90" -"team" "sgundoor" -"speed" "100" -"sounds" "2" -"wait" "3" -"spawnflags" "12" -"target" "t348" -"_minlight" "0.2" -} -{ -"model" "*45" -"classname" "func_door" -"angle" "270" -"team" "sgundoor" -"speed" "100" -"sounds" "2" -"wait" "3" -"spawnflags" "12" -"target" "t348" -"_minlight" "0.2" -} -{ -"model" "*46" -"wait" "-1" -"health" "5" -"classname" "func_door" -"angle" "-2" -"spawnflags" "2056" -"speed" "50" -"sounds" "2" -"lip" "12" -"_minlight" "0.2" -"target" "t347" -} -{ -"origin" "-1348 108 152" -"classname" "path_corner" -"target" "t346" -"targetname" "t254" -} -{ -"classname" "monster_infantry" -"target" "t266" -"angle" "180" -"origin" "-1328 248 172" -"spawnflags" "1" -} -{ -"origin" "-976 -1008 8" -"light" "100" -"classname" "light" -} -{ -"origin" "-1016 -640 212" -"classname" "light" -"light" "160" -} -{ -"origin" "-1064 -640 212" -"light" "120" -"classname" "light" -} -{ -"origin" "-296 -888 -292" -"classname" "item_health" -} -{ -"spawnflags" "1536" -"origin" "-292 -620 -292" -"classname" "item_health" -} -{ -"origin" "-292 -580 -292" -"classname" "item_health" -} -{ -"message" "You have found a secret area." -"spawnflags" "2048" -"origin" "-308 -408 -184" -"targetname" "t345" -"classname" "target_secret" -} -{ -"model" "*47" -"spawnflags" "2048" -"targetname" "hsecret" -"target" "t416" -"message" "You have found a secret area." -"classname" "trigger_once" -} -{ -"spawnflags" "2048" -"origin" "-864 -360 -172" -"targetname" "t343" -"classname" "target_secret" -} -{ -"model" "*48" -"spawnflags" "2048" -"message" "You have found a secret area." -"target" "t343" -"classname" "trigger_once" -} -{ -"style" "5" -"targetname" "t342" -"classname" "func_areaportal" -} -{ -"model" "*49" -"_minlight" "0.2" -"sounds" "0" -"team" "door4" -"wait" "4" -"speed" "100" -"angle" "90" -"classname" "func_door" -"lip" "12" -} -{ -"model" "*50" -"_minlight" "0.2" -"classname" "func_door" -"angle" "270" -"speed" "100" -"wait" "4" -"team" "door4" -"sounds" "2" -"lip" "12" -} -{ -"spawnflags" "2048" -"origin" "-760 -888 952" -"classname" "ammo_bullets" -} -{ -"spawnflags" "1792" -"origin" "-944 -1856 928" -"classname" "ammo_rockets" -} -{ -"spawnflags" "2048" -"origin" "-952 -1408 916" -"message" "You have found a secret area." -"targetname" "t341" -"classname" "target_secret" -} -{ -"model" "*51" -"spawnflags" "2048" -"target" "t341" -"classname" "trigger_once" -} -{ -"origin" "100 -676 -1000" -"classname" "item_health_small" -} -{ -"origin" "62 -632 -1000" -"classname" "ammo_grenades" -} -{ -"spawnflags" "1792" -"origin" "104 -588 -952" -"classname" "ammo_rockets" -} -{ -"spawnflags" "1024" -"origin" "-456 -636 -1008" -"classname" "ammo_bullets" -} -{ -"origin" "-384 -576 -828" -"_minlight" "0.2" -"spawnflags" "2080" -"classname" "misc_deadsoldier" -} -{ -"origin" "0 -1648 864" -"classname" "ammo_shells" -} -{ -"origin" "16 -1696 848" -"angle" "180" -"spawnflags" "2064" -"classname" "misc_deadsoldier" -} -{ -"origin" "-496 -1088 -288" -"classname" "ammo_bullets" -} -{ -"origin" "-258 -992 -234" -"angle" "180" -"classname" "light_mine2" -} -{ -"origin" "-258 -544 -234" -"classname" "light_mine2" -"angle" "180" -} -{ -"origin" "-258 -1184 -234" -"angle" "180" -"classname" "light_mine2" -} -{ -"light" "200" -"angle" "0" -"classname" "light_mine2" -"origin" "-1470 -1088 -190" -} -{ -"light" "175" -"angle" "0" -"classname" "light_mine2" -"origin" "-1470 -1088 2" -} -{ -"light" "175" -"origin" "-1370 -1182 2" -"classname" "light_mine2" -} -{ -"light" "175" -"angle" "0" -"origin" "-1470 -960 2" -"classname" "light_mine2" -} -{ -"light" "200" -"angle" "90" -"origin" "-1370 -1182 -190" -"classname" "light_mine2" -} -{ -"light" "170" -"angle" "90" -"origin" "-810 -1182 -4" -"classname" "light_mine2" -} -{ -"light" "170" -"angle" "90" -"origin" "-682 -1182 28" -"classname" "light_mine2" -} -{ -"light" "175" -"angle" "180" -"origin" "-578 -1120 28" -"classname" "light_mine2" -} -{ -"light" "175" -"angle" "180" -"origin" "-578 -960 116" -"classname" "light_mine2" -} -{ -"light" "175" -"angle" "180" -"origin" "-578 -832 188" -"classname" "light_mine2" -} -{ -"light" "200" -"angle" "0" -"origin" "-1470 -960 -190" -"classname" "light_mine2" -} -{ -"origin" "-864 -928 -440" -"light" "64" -"classname" "light" -} -{ -"classname" "item_armor_shard" -"origin" "-1364 -848 -22" -"spawnflags" "1024" -} -{ -"model" "*52" -"targetname" "rusty_gate" -"spawnflags" "2051" -"classname" "func_wall" -} -{ -"origin" "-1876 740 176" -"targetname" "t337" -"classname" "point_combat" -} -{ -"origin" "-1872 872 192" -"target" "t337" -"spawnflags" "3" -"angle" "270" -"targetname" "rusty_gate" -"classname" "monster_infantry" -} -{ -"origin" "-1952 812 192" -"spawnflags" "2" -"angle" "315" -"targetname" "rusty_gate" -"classname" "monster_infantry" -} -{ -"origin" "-1920 856 160" -"targetname" "t336" -"classname" "info_notnull" -} -{ -"origin" "-1920 856 268" -"_cone" "25" -"target" "t336" -"classname" "light" -} -{ -"light" "150" -"origin" "-1336 612 280" -"_color" "0.000000 1.000000 1.000000" -"classname" "light" -} -{ -"light" "150" -"origin" "-1464 756 264" -"_color" "0.000000 1.000000 1.000000" -"classname" "light" -} -{ -"light" "150" -"origin" "-1336 868 272" -"_color" "0.000000 1.000000 1.000000" -"classname" "light" -} -{ -"light" "150" -"origin" "-1208 756 272" -"_color" "0.000000 1.000000 1.000000" -"classname" "light" -} -{ -"light" "200" -"_cone" "15" -"origin" "-1376 752 276" -"target" "t334" -"_color" "0.343874 0.707510 1.000000" -"classname" "light" -} -{ -"origin" "-1080 -208 64" -"classname" "item_health" -} -{ -"origin" "-1048 -1152 960" -"light" "90" -"classname" "light" -"_color" "1.000000 0.517647 0.223529" -} -{ -"classname" "light" -"light" "90" -"origin" "-1048 -1280 960" -"_color" "1.000000 0.517647 0.223529" -} -{ -"classname" "light" -"light" "125" -"origin" "-64 -1664 984" -} -{ -"classname" "light" -"light" "125" -"origin" "-48 -1536 984" -} -{ -"light" "175\" -"classname" "light" -"origin" "-1656 -640 944" -"angle" "-2" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "175\" -"classname" "light" -"origin" "-1528 -640 944" -"angle" "-2" -"_color" "1.000000 0.274510 0.035294" -} -{ -"_color" "1.000000 0.274510 0.035294" -"classname" "light" -"light" "150" -"origin" "-896 -632 -384" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "150" -"classname" "light" -"origin" "-1176 -640 -208" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "175" -"classname" "light" -"origin" "-920 -632 -328" -} -{ -"_color" "1.000000 0.274510 0.035294" -"classname" "light" -"light" "175" -"origin" "-1560 -640 -208" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "175" -"classname" "light" -"origin" "-1432 -640 -208" -} -{ -"_color" "1.000000 0.274510 0.035294" -"classname" "light" -"light" "175" -"origin" "-1304 -640 -208" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "175" -"classname" "light" -"origin" "-1176 -640 -208" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "130" -"classname" "light" -"origin" "-1432 -640 -336" -} -{ -"_color" "1.000000 0.274510 0.035294" -"classname" "light" -"light" "130" -"origin" "-1304 -640 -336" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "130" -"classname" "light" -"origin" "-1176 -640 -336" -} -{ -"light" "105" -"classname" "light" -"origin" "-596 -640 -664" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "105" -"classname" "light" -"origin" "-508 -640 -664" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "105" -"classname" "light" -"origin" "-124 -640 -664" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "105" -"classname" "light" -"origin" "-252 -640 -664" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-184 -640 936" -"classname" "light" -"light" "150" -"_color" "1.000000 0.274510 0.035294" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-380 -640 936" -"classname" "light" -"light" "175" -} -{ -"light" "105" -"classname" "light" -"origin" "-380 -640 -664" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-504 -640 944" -"classname" "light" -"light" "175" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-632 -640 944" -"classname" "light" -"light" "175" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-760 -640 944" -"classname" "light" -"light" "175" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-888 -640 944" -"classname" "light" -"light" "175" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "64" -"classname" "light" -"origin" "-748 -640 808" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-184 -640 808" -"classname" "light" -"light" "120" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-888 -640 808" -"classname" "light" -"light" "120" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "120" -"classname" "light" -"origin" "-1020 -640 808" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "120" -"classname" "light" -"origin" "-1144 -640 808" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "120" -"classname" "light" -"origin" "-1272 -640 808" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1404 -640 808" -"classname" "light" -"light" "120" -"_color" "1.000000 0.274510 0.035294" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-608 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-544 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-480 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-416 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-352 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-288 -1408 960" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "90" -"classname" "light" -"origin" "-224 -1408 960" -} -{ -"origin" "-720 -1376 960" -"classname" "light" -"light" "90" -"_color" "1.000000 0.929412 0.435294" -} -{ -"origin" "-64 -1416 960" -"classname" "light" -"light" "125" -"_color" "1.000000 0.929412 0.435294" -} -{ -"origin" "-1288 616 4" -"classname" "info_notnull" -"targetname" "t320" -} -{ -"classname" "info_notnull" -"origin" "-1288 888 4" -"targetname" "t328" -} -{ -"classname" "info_notnull" -"origin" "-1384 616 4" -"targetname" "t322" -} -{ -"classname" "info_notnull" -"origin" "-1336 616 4" -"targetname" "t321" -} -{ -"classname" "info_notnull" -"origin" "-1184 664 4" -"targetname" "t319" -} -{ -"classname" "info_notnull" -"origin" "-1384 888 4" -"targetname" "t326" -} -{ -"classname" "info_notnull" -"origin" "-1336 888 4" -"targetname" "t327" -} -{ -"classname" "info_notnull" -"origin" "-1184 840 4" -"targetname" "t329" -} -{ -"classname" "info_notnull" -"origin" "-1472 760 4" -"targetname" "t324" -} -{ -"classname" "info_notnull" -"origin" "-1472 712 4" -"targetname" "t323" -} -{ -"classname" "info_notnull" -"origin" "-1472 808 4" -"targetname" "t325" -} -{ -"classname" "item_health_small" -"origin" "-1384 1200 -16" -} -{ -"classname" "item_health_small" -"origin" "-880 824 -24" -} -{ -"classname" "ammo_bullets" -"origin" "-888 784 -16" -} -{ -"classname" "item_health_small" -"origin" "-1280 1200 -24" -} -{ -"origin" "-1224 1032 88" -"classname" "path_corner" -"target" "t305" -"targetname" "t313" -"spawnflags" "2048" -} -{ -"classname" "monster_flyer" -"origin" "-1176 1032 88" -"angle" "180" -"target" "t313" -"spawnflags" "0" -} -{ -"target" "t391" -"classname" "monster_flyer" -"origin" "-1220 968 208" -"angle" "180" -"spawnflags" "0" -} -{ -"origin" "-1380 -316 184" -"classname" "monster_soldier" -"spawnflags" "257" -"angle" "270" -} -{ -"spawnflags" "1" -"classname" "monster_soldier" -"angle" "0" -"origin" "-1284 -936 12" -} -{ -"classname" "path_corner" -"origin" "-896 -804 -256" -"target" "t294" -"targetname" "t295" -} -{ -"target" "t295" -"origin" "-1080 -796 -272" -"classname" "path_corner" -"targetname" "t239" -} -{ -"angle" "135" -"origin" "-968 -936 -240" -"classname" "monster_infantry" -"spawnflags" "256" -"target" "t293" -} -{ -"spawnflags" "2048" -"classname" "item_health" -"origin" "-896 -896 -192" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2080" -"origin" "-1760 -592 -368" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t291" -"target" "t292" -"origin" "-280 -664 -888" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t290" -"target" "t291" -"origin" "-184 -680 -888" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t289" -"target" "t290" -"origin" "-200 -616 -888" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t288" -"target" "t289" -"origin" "-328 -664 -888" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"targetname" "t292" -"target" "t287" -"origin" "-104 -600 -888" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-232 -664 -888" -"targetname" "t285" -"target" "t286" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-424 -600 -888" -"targetname" "t284" -"target" "t285" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-600 -648 -888" -"targetname" "t284" -"target" "t288" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-600 -600 -888" -"targetname" "t283" -"target" "t284" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-472 -696 -888" -"targetname" "t282" -"target" "t283" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-296 -616 -888" -"targetname" "t281" -"target" "t282" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-88 -696 -888" -"targetname" "t280" -"target" "t281" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "40 -632 -888" -"targetname" "t279" -"target" "t280" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "56 -680 -888" -"target" "t279" -"targetname" "t287" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"origin" "-56 -600 -888" -"targetname" "t286" -"target" "t287" -} -{ -"classname" "monster_flipper" -"origin" "-144 -624 -872" -"target" "t290" -} -{ -"classname" "monster_flipper" -"origin" "-32 -656 -872" -"target" "t279" -} -{ -"spawnflags" "2048" -"origin" "-32 -1272 916" -"targetname" "t278" -"classname" "info_notnull" -} -{ -"style" "32" -"spawnflags" "2048" -"targetname" "t338" -"origin" "-32 -1272 1048" -"_cone" "15" -"target" "t278" -"classname" "light" -} -{ -"origin" "-1408 -1088 -56" -"targetname" "t224" -"target" "t225" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"classname" "monster_soldier" -"target" "t249" -"angle" "270" -"origin" "-1352 -1056 -4" -} -{ -"targetname" "t377" -"spawnflags" "1" -"target" "t376" -"origin" "-612 -880 68" -"classname" "monster_soldier_light" -"angle" "270" -} -{ -"spawnflags" "1792" -"origin" "-1280 -848 48" -"classname" "ammo_grenades" -} -{ -"origin" "-1424 -880 -40" -"classname" "item_health" -"spawnflags" "2048" -} -{ -"spawnflags" "1792" -"origin" "-888 -392 -112" -"classname" "ammo_bullets" -} -{ -"origin" "-848 -232 216" -"classname" "weapon_shotgun" -"spawnflags" "1792" -} -{ -"spawnflags" "1792" -"origin" "-848 -288 224" -"classname" "ammo_shells" -} -{ -"origin" "-1088 -472 152" -"targetname" "t277" -"classname" "point_combat" -} -{ -"origin" "-1232 -856 28" -"angle" "0" -"classname" "monster_soldier" -"spawnflags" "769" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "80" -"classname" "light" -"origin" "-660 -640 -960" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-660 -640 -832" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-660 -640 -704" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-660 -640 -576" -"classname" "light" -"light" "100" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "100" -"classname" "light" -"origin" "-660 -640 -448" -} -{ -"classname" "ammo_bullets" -"origin" "-856 -1856 888" -} -{ -"origin" "-896 -1856 888" -"classname" "ammo_shells" -} -{ -"spawnflags" "1024" -"origin" "-480 -1064 904" -"classname" "item_health_small" -} -{ -"origin" "-480 -1016 904" -"classname" "item_health_small" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1408 960" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1408 944" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1408 928" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1408 912" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1792 960" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1792 928" -"_style" "10" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.854902 0.278431" -"origin" "40 -1792 912" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.854902 0.278431" -"origin" "-56 -1984 944" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.854902 0.278431" -"origin" "-56 -1984 928" -} -{ -"origin" "-56 -1232 944" -"_color" "1.000000 0.854902 0.278431" -"light" "90" -"classname" "light" -} -{ -"origin" "-56 -1232 928" -"_color" "1.000000 0.854902 0.278431" -"light" "90" -"classname" "light" -} -{ -"origin" "-56 -1232 912" -"_color" "1.000000 0.854902 0.278431" -"light" "90" -"classname" "light" -} -{ -"origin" "-56 -1232 960" -"_color" "1.000000 0.854902 0.278431" -"light" "90" -"classname" "light" -} -{ -"classname" "ammo_bullets" -"origin" "-736 -832 -64" -} -{ -"classname" "item_health" -"origin" "-596 -788 -64" -} -{ -"classname" "ammo_grenades" -"origin" "-722 -799 -62" -} -{ -"classname" "item_health" -"origin" "-816 -816 -464" -} -{ -"classname" "item_health" -"origin" "-888 -928 -464" -"spawnflags" "2048" -} -{ -"classname" "ammo_shells" -"origin" "-1648 -688 -512" -} -{ -"classname" "ammo_bullets" -"origin" "-1696 -688 -528" -} -{ -"classname" "item_health_small" -"origin" "-1792 -672 -528" -} -{ -"classname" "item_health" -"origin" "-1680 -576 -528" -} -{ -"origin" "-1536 -640 -496" -"classname" "light" -"light" "80" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1664 -640 -528" -"classname" "light" -"light" "80" -"_color" "1.000000 0.274510 0.035294" -} -{ -"item" "ammo_bullets" -"classname" "monster_infantry" -"angle" "90" -"targetname" "Response_troops" -"spawnflags" "3" -"origin" "-66 -1596 884" -} -{ -"item" "ammo_bullets" -"classname" "monster_infantry" -"targetname" "goons1" -"angle" "90" -"origin" "-504 -1128 904" -"spawnflags" "3" -} -{ -"classname" "item_health" -"origin" "24 -1256 864" -} -{ -"classname" "ammo_shells" -"origin" "-96 -1256 864" -"spawnflags" "0" -} -{ -"spawnflags" "1536" -"classname" "ammo_shells" -"origin" "-104 -1296 864" -} -{ -"spawnflags" "2048" -"classname" "weapon_shotgun" -"origin" "-32 -1272 936" -} -{ -"classname" "item_health_small" -"origin" "-1024 -1608 888" -} -{ -"classname" "item_health_small" -"origin" "-1024 -1552 888" -} -{ -"classname" "item_armor_shard" -"origin" "-1024 -1504 888" -} -{ -"classname" "item_armor_shard" -"origin" "-1024 -1448 888" -} -{ -"classname" "item_armor_shard" -"origin" "-1024 -1392 888" -} -{ -"spawnflags" "2048" -"classname" "item_breather" -"origin" "-1004 -1843 902" -} -{ -"origin" "-1184 840 -76" -"light" "200" -"classname" "light" -"_cone" "25" -"target" "t329" -} -{ -"origin" "-1288 888 -76" -"light" "200" -"classname" "light" -"_cone" "25" -"target" "t328" -} -{ -"origin" "-1336 888 -76" -"light" "200" -"classname" "light" -"_cone" "25" -"target" "t327" -} -{ -"origin" "-1384 888 -76" -"light" "200" -"classname" "light" -"_cone" "25" -"target" "t326" -} -{ -"origin" "-1472 760 -76" -"classname" "light" -"light" "200" -"_cone" "25" -"target" "t324" -} -{ -"origin" "-1472 808 -76" -"classname" "light" -"light" "200" -"_cone" "25" -"target" "t325" -} -{ -"origin" "-1384 616 -76" -"classname" "light" -"light" "200" -"_cone" "25" -"target" "t322" -} -{ -"origin" "-1336 616 -76" -"classname" "light" -"light" "200" -"_cone" "25" -"target" "t321" -} -{ -"origin" "-1288 616 -76" -"classname" "light" -"light" "200" -"_cone" "25" -"target" "t320" -} -{ -"origin" "-1184 664 -76" -"classname" "light" -"light" "200" -"_cone" "25" -"target" "t319" -} -{ -"origin" "-1472 712 -76" -"light" "200" -"classname" "light" -"_cone" "25" -"target" "t323" -} -{ -"spawnflags" "2048" -"origin" "-1136 -256 56" -"targetname" "BL6" -"sounds" "1" -"classname" "target_splash" -} -{ -"spawnflags" "2048" -"origin" "-1136 -256 72" -"targetname" "BL5" -"sounds" "1" -"classname" "target_splash" -} -{ -"spawnflags" "2048" -"origin" "-1136 -224 72" -"targetname" "BL4" -"sounds" "1" -"classname" "target_splash" -} -{ -"spawnflags" "2048" -"origin" "-1136 -224 56" -"targetname" "BL2" -"angle" "0" -"sounds" "1" -"classname" "target_splash" -} -{ -"spawnflags" "2048" -"origin" "-1136 -288 72" -"targetname" "BL1" -"classname" "target_splash" -"angle" "0" -"sounds" "1" -} -{ -"spawnflags" "2048" -"origin" "-1136 -288 56" -"targetname" "BL3" -"sounds" "1" -"angle" "0" -"classname" "target_splash" -} -{ -"spawnflags" "2048" -"origin" "-852 -376 -126" -"targetname" "t269" -"killtarget" "trig1" -"classname" "trigger_relay" -} -{ -"target" "t277" -"origin" "-1137 -405 170" -"targetname" "s3" -"angle" "315" -"classname" "monster_infantry" -"item" "ammo_bullets" -"spawnflags" "1" -} -{ -"classname" "monster_soldier_light" -"angle" "45" -"origin" "-980 748 -12" -"spawnflags" "0" -} -{ -"classname" "path_corner" -"targetname" "t267" -"target" "t268" -"origin" "-1608 272 132" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"target" "t267" -"origin" "-1356 276 152" -"targetname" "t266" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"target" "t255" -"origin" "-1368 108 152" -"targetname" "t346" -} -{ -"spawnflags" "2048" -"classname" "path_corner" -"target" "t266" -"targetname" "t268" -"origin" "-1064 252 152" -} -{ -"classname" "path_corner" -"targetname" "t258" -"target" "t259" -"origin" "-1256 656 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"target" "t261" -"targetname" "t264" -"origin" "-1272 864 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"target" "t257" -"targetname" "t260" -"origin" "-1432 848 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t262" -"target" "t263" -"origin" "-1384 624 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t263" -"target" "t264" -"origin" "-1456 792 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t259" -"target" "t260" -"origin" "-1232 840 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t261" -"target" "t262" -"origin" "-1216 680 176" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t257" -"target" "t258" -"origin" "-1424 664 176" -"spawnflags" "2048" -} -{ -"classname" "monster_infantry" -"spawnflags" "3" -"targetname" "Response_troops" -"origin" "-1344 96 184" -"item" "ammo_bullets" -"angle" "90" -} -{ -"classname" "monster_infantry" -"target" "t255" -"origin" "-1344 40 184" -"item" "ammo_bullets" -"angle" "270" -"spawnflags" "1" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"delay" "1" -"origin" "-1008 -200 152" -"targetname" "BLRguns" -"target" "BL5" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"delay" "1.25" -"origin" "-976 -200 152" -"targetname" "BLRguns" -"target" "BL6" -} -{ -"spawnflags" "2048" -"origin" "-1136 -256 72" -"classname" "target_blaster" -"angle" "0" -"dmg" "5" -"targetname" "BL5" -} -{ -"spawnflags" "2048" -"origin" "-1136 -256 56" -"classname" "target_blaster" -"angle" "0" -"dmg" "5" -"targetname" "BL6" -} -{ -"model" "*53" -"wait" "-1" -"targetname" "BLR" -"classname" "func_door" -"angle" "-1" -"lip" "1" -} -{ -"classname" "light" -"light" "100" -"_color" "1.000000 0.858268 0.279528" -"origin" "-1960 960 172" -} -{ -"classname" "light" -"light" "100" -"_color" "1.000000 0.858268 0.279528" -"origin" "-1904 960 172" -} -{ -"_color" "1.000000 0.858268 0.279528" -"light" "100" -"classname" "light" -"origin" "-1848 960 172" -} -{ -"_color" "1.000000 0.858268 0.279528" -"light" "150" -"classname" "light" -"origin" "-1904 872 228" -} -{ -"_color" "1.000000 0.858268 0.279528" -"light" "100" -"classname" "light" -"origin" "-1960 656 172" -} -{ -"classname" "light" -"light" "150" -"_color" "1.000000 0.858268 0.279528" -"origin" "-1904 744 228" -} -{ -"origin" "-1356 -344 168" -"targetname" "t255" -"target" "t254" -"classname" "path_corner" -} -{ -"origin" "-1016 -200 224" -"killtarget" "fl1" -"targetname" "BLR" -"classname" "trigger_relay" -"target" "t423" -} -{ -"model" "*54" -"target" "t379" -"targetname" "trig1" -"wait" "1.25" -"classname" "trigger_multiple" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"origin" "-1056 -200 152" -"delay" ".5" -"target" "BL3" -"targetname" "BLRguns" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-1080 -200 152" -"delay" ".25" -"target" "BL2" -"targetname" "BLRguns" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-1112 -200 152" -"delay" "0" -"target" "BL1" -"targetname" "BLRguns" -"classname" "trigger_relay" -} -{ -"spawnflags" "2048" -"origin" "-1032 -200 152" -"delay" ".75" -"target" "BL4" -"targetname" "BLRguns" -"classname" "trigger_relay" -} -{ -"model" "*55" -"targetname" "fl1" -"classname" "func_wall" -"spawnflags" "2048" -} -{ -"_color" "1.000000 0.929412 0.443137" -"light" "80" -"classname" "light" -"origin" "-1096 -224 232" -} -{ -"spawnflags" "2048" -"dmg" "5" -"angle" "0" -"targetname" "BL4" -"classname" "target_blaster" -"origin" "-1136 -224 72" -} -{ -"spawnflags" "2048" -"dmg" "5" -"angle" "0" -"targetname" "BL2" -"classname" "target_blaster" -"origin" "-1136 -224 56" -} -{ -"spawnflags" "2048" -"dmg" "5" -"angle" "0" -"targetname" "BL3" -"classname" "target_blaster" -"origin" "-1136 -288 56" -} -{ -"spawnflags" "2048" -"dmg" "5" -"targetname" "BL1" -"angle" "0" -"classname" "target_blaster" -"origin" "-1136 -288 72" -} -{ -"model" "*56" -"targetname" "trigbut" -"spawnflags" "2048" -"classname" "func_button" -"angle" "180" -"lip" "8" -"health" "1" -"_minlight" "0.3" -"target" "t444" -} -{ -"angle" "180" -"classname" "monster_soldier_light" -"targetname" "Response_troops" -"origin" "-912 -672 104" -"spawnflags" "259" -} -{ -"angle" "180" -"classname" "monster_soldier_light" -"targetname" "Response_troops" -"origin" "-992 -608 104" -"spawnflags" "3" -} -{ -"classname" "monster_soldier_light" -"angle" "180" -"targetname" "Response_troops" -"origin" "-976 -688 104" -"spawnflags" "3" -} -{ -"classname" "monster_soldier_light" -"angle" "180" -"targetname" "Response_troops" -"origin" "-928 -624 104" -"spawnflags" "3" -} -{ -"spawnflags" "1" -"origin" "-1016 -662 88" -"targetname" "s3" -"classname" "monster_infantry" -"angle" "315" -} -{ -"model" "*57" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "s3" -} -{ -"model" "*58" -"classname" "trigger_multiple" -"delay" ".2" -"target" "s2" -} -{ -"spawnflags" "2048" -"classname" "trigger_relay" -"targetname" "scum1" -"target" "s2" -"delay" "2" -"origin" "-376 -1096 -248" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -800 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -864 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -928 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -992 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -1056 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -1120 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -1184 -400" -} -{ -"_color" "1.000000 0.432000 0.268000" -"light" "64" -"classname" "light" -"origin" "-768 -1248 -400" -} -{ -"classname" "light" -"light" "140" -"origin" "-1660 -641 -456" -} -{ -"light" "140" -"classname" "light" -"origin" "-1720 -638 -459" -} -{ -"light" "140" -"classname" "light" -"origin" "-1584 -641 -456" -} -{ -"classname" "monster_flipper" -"targetname" "mf" -"origin" "-1760 -624 -512" -} -{ -"model" "*59" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "mf" -} -{ -"classname" "monster_flipper" -"target" "t253" -"origin" "-728 -648 -440" -} -{ -"classname" "path_corner" -"targetname" "t252" -"target" "t253" -"origin" "-760 -904 -456" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t252" -"target" "t253" -"origin" "-800 -896 -456" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"target" "t252" -"targetname" "t253" -"origin" "-784 -672 -456" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t253" -"target" "t252" -"origin" "-768 -1200 -456" -"spawnflags" "2048" -} -{ -"_style" "10" -"origin" "-1456 -528 264" -"classname" "light" -"light" "175" -"_color" "1.000000 0.929412 0.435294" -} -{ -"origin" "-1456 -688 264" -"classname" "light" -"light" "125" -"_color" "1.000000 0.929412 0.435294" -} -{ -"classname" "path_corner" -"targetname" "t249" -"target" "t225" -"origin" "-1352 -1132 -52" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t224" -"target" "t249" -"origin" "-1440 -1128 -52" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"origin" "-1088 -1000 -272" -"targetname" "t240" -"target" "t239" -} -{ -"spawnflags" "256" -"angle" "45" -"classname" "monster_infantry" -"origin" "-984 -864 -256" -"target" "t240" -} -{ -"model" "*60" -"spawnflags" "2048" -"classname" "trigger_push" -"angle" "180" -"speed" "50" -} -{ -"model" "*61" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "paraspawn" -} -{ -"classname" "monster_parasite" -"targetname" "paraspawn" -"spawnflags" "2" -"origin" "-640 -1400 1156" -"angle" "225" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1361 720 -50" -"light" "120" -"classname" "light" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1297 784 -50" -"classname" "light" -"light" "120" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1297 720 -50" -"classname" "light" -"light" "120" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1432 720 -152" -"light" "80" -"classname" "light" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1240 784 -152" -"classname" "light" -"light" "80" -} -{ -"classname" "light" -"light" "80" -"origin" "-1240 720 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"light" "80" -"classname" "light" -"origin" "-1304 656 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1368 848 -152" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-1304 848 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1160 552 -152" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-1096 552 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"classname" "light" -"light" "80" -"origin" "-1160 488 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"light" "80" -"classname" "light" -"origin" "-1096 488 -152" -"_color" "0.465649 1.000000 0.671756" -} -{ -"_color" "0.465649 1.000000 0.671756" -"light" "80" -"classname" "light" -"origin" "-1544 552 -152" -} -{ -"classname" "light" -"light" "80" -"_color" "0.465649 1.000000 0.671756" -"origin" "-1496 1000 -152" -} -{ -"light" "80" -"classname" "light" -"_color" "0.465649 1.000000 0.671756" -"origin" "-1496 936 -152" -} -{ -"classname" "light" -"light" "80" -"_color" "0.465649 1.000000 0.671756" -"origin" "-1560 936 -152" -} -{ -"light" "80" -"classname" "light" -"_color" "0.465649 1.000000 0.671756" -"origin" "-1560 872 -152" -} -{ -"origin" "-1560 808 -152" -"classname" "light" -"light" "80" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1560 744 -152" -"light" "80" -"classname" "light" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1560 680 -152" -"classname" "light" -"light" "80" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1560 616 -152" -"light" "80" -"classname" "light" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1504 600 -152" -"classname" "light" -"light" "80" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1544 488 -152" -"light" "80" -"classname" "light" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1480 552 -152" -"classname" "light" -"light" "80" -"_color" "0.465649 1.000000 0.671756" -} -{ -"origin" "-1480 488 -152" -"light" "80" -"classname" "light" -"_color" "0.465649 1.000000 0.671756" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1416 552 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1392 520 -160" -"light" "70" -"classname" "light" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1328 520 -160" -"light" "70" -"classname" "light" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1264 520 -160" -"light" "70" -"classname" "light" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1200 520 -160" -"light" "70" -"classname" "light" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1152 600 -152" -"classname" "light" -"light" "80" -} -{ -"origin" "-1432 1000 -152" -"_color" "0.465649 1.000000 0.671756" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1032 424 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1032 488 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1032 744 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1032 680 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 616 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 680 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 744 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 808 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1032 872 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 872 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1160 936 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 936 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1096 1000 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1160 1000 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1224 1000 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1288 1000 -152" -"classname" "light" -"light" "80" -} -{ -"_color" "0.465649 1.000000 0.671756" -"origin" "-1352 1000 -152" -"classname" "light" -"light" "80" -} -{ -"origin" "-1432 1064 -152" -"_color" "0.465649 1.000000 0.671756" -"light" "80" -"classname" "light" -} -{ -"origin" "-1392 904 192" -"classname" "light" -"light" "150" -} -{ -"origin" "-1488 808 192" -"classname" "light" -"light" "150" -} -{ -"origin" "-1392 600 192" -"classname" "light" -"light" "150" -} -{ -"origin" "-1280 600 192" -"classname" "light" -"light" "150" -} -{ -"origin" "-1184 680 192" -"classname" "light" -"light" "150" -} -{ -"origin" "-1184 824 192" -"classname" "light" -"light" "150" -} -{ -"origin" "-1280 904 192" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "90" -"_color" "1.000000 0.299180 0.000000" -"origin" "-1008 840 -16" -} -{ -"_color" "1.000000 0.299180 0.000000" -"classname" "light" -"light" "90" -"origin" "-992 824 -16" -} -{ -"light" "90" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -"origin" "-992 856 -16" -} -{ -"light" "90" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -"origin" "-976 840 -16" -} -{ -"origin" "-976 664 -16" -"_color" "1.000000 0.299180 0.000000" -"classname" "light" -"light" "90" -} -{ -"origin" "-992 648 -16" -"light" "90" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-1008 664 -16" -"classname" "light" -"light" "90" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-992 680 -16" -"light" "90" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-1008 224 176" -"light" "125" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-992 208 176" -"classname" "light" -"light" "125" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-1024 208 176" -"light" "125" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-1488 400 144" -"classname" "light" -"light" "100" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-1504 416 144" -"light" "100" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -} -{ -"origin" "-1520 400 144" -"light" "100" -"classname" "light" -"_color" "1.000000 0.299180 0.000000" -} -{ -"model" "*62" -"wait" "1" -"delay" ".25" -"classname" "func_plat" -"sounds" "1" -"speed" "150" -"lip" "0" -"accel" "250" -} -{ -"light" "100" -"classname" "light" -"origin" "-104 -1760 1088" -} -{ -"light" "80" -"classname" "light" -"origin" "-104 -1632 1088" -} -{ -"classname" "light" -"light" "100" -"origin" "24 -1760 1088" -} -{ -"classname" "info_player_start" -"angle" "0" -"origin" "-248 -1792 880" -"targetname" "base3c" -} -{ -"model" "*63" -"classname" "func_button" -"angle" "90" -"lip" "4" -"sounds" "4" -"_minlight" "0.8" -"target" "access_panel" -"spawnflags" "2048" -} -{ -"spawnflags" "1" -"origin" "-328 -428 -294" -"targetname" "s2" -"classname" "monster_soldier" -"angle" "270" -} -{ -"_color" "1.000000 0.929412 0.435294" -"light" "125" -"classname" "light" -"origin" "-1456 -608 264" -} -{ -"origin" "-888 -184 -196" -"classname" "light" -"light" "64" -"_color" "1.000000 0.529881 0.306773" -} -{ -"item" "key_red_key" -"classname" "trigger_key" -"spawnflags" "2049" -"target" "rusty_gate" -"targetname" "keyhole1" -"origin" "-1584 952 184" -} -{ -"angle" "90" -"spawnflags" "2" -"classname" "monster_soldier" -"targetname" "goons1" -"origin" "-808 -1368 912" -} -{ -"classname" "monster_soldier" -"spawnflags" "2" -"angle" "270" -"targetname" "goons1" -"origin" "-760 -1368 912" -"item" "ammo_shells" -} -{ -"model" "*64" -"spawnflags" "2048" -"_minlight" "0.2" -"wait" "-1" -"classname" "func_door" -"lip" "8" -"targetname" "water_secret" -"angle" "90" -} -{ -"model" "*65" -"targetname" "lsecret" -"target" "t417" -"classname" "trigger_once" -"spawnflags" "2048" -} -{ -"spawnflags" "1" -"item" "ammo_bullets" -"classname" "monster_infantry" -"angle" "225" -"targetname" "scum1" -"origin" "-448 -1080 -280" -} -{ -"model" "*66" -"classname" "trigger_counter" -"targetname" "goons1" -"target" "goons2" -"spawnflags" "2049" -"count" "2" -} -{ -"classname" "path_corner" -"targetname" "t245" -"origin" "-219 -1385 856" -"target" "t350" -} -{ -"classname" "path_corner" -"targetname" "t244" -"target" "t245" -"origin" "-560 -1368 856" -} -{ -"classname" "path_corner" -"targetname" "t245" -"origin" "-590 -1456 864" -"target" "t349" -} -{ -"classname" "monster_soldier_light" -"origin" "-536 -1456 882" -"target" "t349" -} -{ -"light" "80" -"classname" "light" -"origin" "-376 -1460 864" -"_color" "1.000000 0.360000 0.268000" -} -{ -"classname" "light" -"light" "80" -"origin" "-376 -1356 864" -"_color" "1.000000 0.360000 0.268000" -} -{ -"origin" "-1032 -224 232" -"light" "80" -"classname" "light" -"_color" "1.000000 0.929412 0.443137" -} -{ -"_style" "11" -"origin" "-1168 -256 192" -"classname" "light" -"light" "80" -"_color" "1.000000 0.833992 0.276680" -} -{ -"classname" "light" -"light" "80" -"origin" "-1096 -192 176" -"_color" "1.000000 0.929412 0.443137" -} -{ -"light" "80" -"classname" "light" -"origin" "-1032 -192 176" -"_color" "1.000000 0.929412 0.443137" -} -{ -"origin" "-56 -1872 984" -"light" "125" -"classname" "light" -} -{ -"origin" "-684 -788 872" -"classname" "misc_explobox" -"health" "50" -"dmg" "200" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"dmg" "150" -"health" "80" -"classname" "misc_explobox" -"origin" "-580 -764 876" -} -{ -"spawnflags" "2048" -"origin" "-816 -840 872" -"classname" "misc_explobox" -} -{ -"light" "80" -"classname" "light" -"origin" "-512 -1308 864" -"_color" "1.000000 0.360000 0.268000" -} -{ -"light" "80" -"classname" "light" -"origin" "-512 -1516 864" -"_color" "1.000000 0.360000 0.268000" -} -{ -"spawnflags" "2048" -"classname" "weapon_supershotgun" -"origin" "-1920 856 184" -"target" "Response_troops" -} -{ -"model" "*67" -"_minlight" "0.2" -"target" "t342" -"lip" "12" -"classname" "func_door" -"angle" "0" -"speed" "100" -"wait" "4" -"team" "doorN" -"sounds" "0" -"spawnflags" "12" -} -{ -"model" "*68" -"_minlight" "0.2" -"lip" "12" -"sounds" "2" -"team" "doorN" -"wait" "4" -"speed" "100" -"angle" "180" -"classname" "func_door" -"spawnflags" "12" -"target" "t342" -} -{ -"light" "150" -"classname" "light" -"origin" "-1169 -642 268" -"_color" "1.000000 0.992157 0.701961" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "148 -640 -960" -"classname" "light" -"light" "120" -} -{ -"_color" "1.000000 0.262745 0.243137" -"classname" "light" -"light" "105" -"origin" "98 -574 -64" -} -{ -"light" "105" -"classname" "light" -"origin" "148 -640 -64" -"_color" "1.000000 0.262745 0.243137" -} -{ -"_color" "1.000000 0.262745 0.243137" -"light" "105" -"classname" "light" -"origin" "96 -708 -64" -} -{ -"_color" "1.000000 0.262745 0.243137" -"classname" "light" -"light" "90" -"origin" "98 -574 192" -} -{ -"light" "90" -"classname" "light" -"origin" "148 -640 192" -"_color" "1.000000 0.262745 0.243137" -} -{ -"_color" "1.000000 0.262745 0.243137" -"light" "90" -"classname" "light" -"origin" "96 -708 192" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "96 -708 320" -"classname" "light" -"light" "105" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "148 -640 320" -"classname" "light" -"light" "105" -} -{ -"origin" "98 -574 320" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"model" "*69" -"_minlight" "0.2" -"lip" "12" -"sounds" "2" -"team" "door3" -"wait" "4" -"speed" "100" -"angle" "270" -"classname" "func_door" -"target" "t432" -} -{ -"model" "*70" -"_minlight" "0.2" -"lip" "12" -"classname" "func_door" -"angle" "90" -"speed" "100" -"wait" "4" -"team" "door3" -"sounds" "0" -"target" "t432" -} -{ -"classname" "light" -"light" "100" -"origin" "-1232 -896 -136" -} -{ -"model" "*71" -"origin" "-932 -1120 -128" -"speed" "70" -"dmg" "5" -"wait" "6" -"targetname" "wallramp" -"distance" "33" -"sounds" "1" -"angle" "-1" -"classname" "func_door_rotating" -"spawnflags" "128" -} -{ -"model" "*72" -"_minlight" "0.2" -"lip" "12" -"classname" "func_door" -"angle" "90" -"speed" "100" -"wait" "4" -"team" "door2" -"sounds" "0" -} -{ -"model" "*73" -"_minlight" "0.2" -"lip" "12" -"sounds" "2" -"team" "door2" -"wait" "4" -"speed" "100" -"angle" "270" -"classname" "func_door" -} -{ -"origin" "-1396 -376 160" -"light" "75" -"classname" "light" -"_color" "1.000000 0.582677 0.204724" -} -{ -"origin" "-1396 -248 160" -"light" "75" -"classname" "light" -"_color" "1.000000 0.582677 0.204724" -} -{ -"light" "75" -"classname" "light" -"origin" "-1396 -104 160" -"_color" "1.000000 0.582677 0.204724" -} -{ -"light" "75" -"classname" "light" -"origin" "-1396 8 160" -"_color" "1.000000 0.582677 0.204724" -} -{ -"light" "75" -"classname" "light" -"origin" "-1292 8 160" -"_color" "1.000000 0.582677 0.204724" -} -{ -"light" "75" -"classname" "light" -"origin" "-1292 -104 160" -"_color" "1.000000 0.582677 0.204724" -} -{ -"origin" "-1292 -248 160" -"light" "75" -"classname" "light" -"_color" "1.000000 0.582677 0.204724" -} -{ -"origin" "-1292 -376 160" -"classname" "light" -"light" "75" -"_color" "1.000000 0.582677 0.204724" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "-1762 -574 -320" -"light" "100" -"classname" "light" -} -{ -"origin" "-1762 -574 -192" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1432 -640 -464" -"light" "120" -"classname" "light" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1304 -640 -464" -"classname" "light" -"light" "120" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1176 -640 -464" -"light" "120" -"classname" "light" -"_color" "1.000000 0.274510 0.035294" -} -{ -"model" "*74" -"origin" "-1552 808 160" -"wait" "-1" -"spawnflags" "137" -"angle" "-1" -"sounds" "1" -"distance" "90" -"speed" "75" -"classname" "func_door_rotating" -"targetname" "rusty_gate" -"_minlight" "0.3" -} -{ -"classname" "light" -"light" "70" -"origin" "-1088 -1008 -240" -"_color" "1.000000 0.517647 0.223529" -} -{ -"_color" "1.000000 0.992157 0.701961" -"origin" "-1169 -642 228" -"classname" "light" -"light" "150" -} -{ -"light" "200" -"classname" "light" -"origin" "-496 -392 -240" -} -{ -"origin" "-610 -574 -832" -"light" "80" -"classname" "light" -"_color" "1.000000 0.274510 0.035294" -} -{ -"_color" "1.000000 0.529881 0.306773" -"origin" "-888 -312 -196" -"classname" "light" -"light" "64" -} -{ -"_color" "1.000000 0.529881 0.306773" -"light" "32" -"classname" "light" -"origin" "-890 -152 -192" -} -{ -"_color" "1.000000 0.529881 0.306773" -"origin" "-888 -248 -200" -"classname" "light" -"light" "64" -} -{ -"model" "*75" -"spawnflags" "2048" -"light" "90" -"target" "water_secret" -"lip" "4" -"health" "1" -"angle" "180" -"classname" "func_button" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-320 -976 -280" -"classname" "light" -"light" "80" -} -{ -"origin" "-320 -848 -280" -"classname" "light" -"light" "80" -} -{ -"origin" "-320 -720 -280" -"classname" "light" -"light" "80" -} -{ -"origin" "-320 -592 -280" -"classname" "light" -"light" "80" -} -{ -"item" "item_armor_shard" -"origin" "-320 -464 -280" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-320 -336 -280" -"classname" "light" -"light" "150" -} -{ -"model" "*76" -"spawnflags" "2048" -"angle" "0" -"target" "scum1" -"classname" "trigger_multiple" -} -{ -"origin" "-984 -796 -256" -"classname" "path_corner" -"targetname" "t294" -"target" "t239" -} -{ -"origin" "-852 -980 -272" -"target" "t240" -"targetname" "t293" -"classname" "path_corner" -} -{ -"origin" "-640 -896 -272" -"classname" "light" -"light" "100" -} -{ -"origin" "-1416 792 152" -"classname" "light" -"light" "200" -} -{ -"light" "100" -"classname" "light" -"origin" "-992 -1136 920" -} -{ -"light" "110" -"classname" "light" -"origin" "-992 -1200 936" -} -{ -"light" "110" -"classname" "light" -"origin" "-992 -1328 936" -} -{ -"light" "115" -"classname" "light" -"origin" "-992 -1392 936" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-1032 -960 232" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-1096 -960 232" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.929412 0.443137" -"classname" "light" -"light" "150" -"origin" "-856 -960 232" -} -{ -"_color" "1.000000 0.929412 0.443137" -"light" "150" -"classname" "light" -"origin" "-920 -960 232" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-856 -224 232" -"light" "80" -"classname" "light" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-920 -224 232" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-856 -992 200" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-920 -992 200" -"classname" "light" -"light" "150" -} -{ -"origin" "-1060 -392 -88" -"light" "120" -"classname" "light" -} -{ -"origin" "-1060 -392 -152" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "120" -"origin" "-1060 -392 -24" -} -{ -"origin" "-984 -392 -152" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "150" -"origin" "-904 -392 -152" -} -{ -"_color" "1.000000 0.517647 0.223529" -"classname" "light" -"light" "90" -"origin" "-1048 -896 960" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1048 -1024 832" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1048 -1152 832" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1048 -1024 960" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1048 -1408 960" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1048 -1536 960" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-816 -1664 960" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-960 -1880 960" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-832 -1880 960" -"light" "90" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-704 -1880 960" -"light" "90" -"classname" "light" -} -{ -"origin" "-760 -1808 936" -"light" "115" -"classname" "light" -} -{ -"origin" "-776 -1584 1012" -"light" "125" -"classname" "light" -} -{ -"classname" "light" -"light" "125" -"origin" "-712 -1584 1012" -} -{ -"origin" "-728 -1564 896" -"light" "32" -"classname" "light" -} -{ -"origin" "-744 -1564 936" -"light" "64" -"classname" "light" -} -{ -"origin" "-742 -1568 988" -"light" "75" -"classname" "light" -} -{ -"classname" "light" -"light" "32" -"origin" "-760 -1564 896" -} -{ -"_color" "1.000000 0.517647 0.223529" -"classname" "light" -"light" "64" -"origin" "-1048 -896 704" -} -{ -"origin" "-864 -1808 936" -"classname" "light" -"light" "115" -} -{ -"origin" "-992 -1792 936" -"classname" "light" -"light" "110" -} -{ -"origin" "-992 -1264 936" -"classname" "light" -"light" "110" -} -{ -"origin" "-992 -1296 888" -"classname" "light" -"light" "50" -} -{ -"origin" "-992 -1200 840" -"classname" "light" -"light" "50" -} -{ -"origin" "-992 -1168 824" -"light" "50" -"classname" "light" -} -{ -"origin" "-992 -1136 808" -"light" "50" -"classname" "light" -} -{ -"origin" "-992 -1104 792" -"classname" "light" -"light" "50" -} -{ -"origin" "-992 -1072 776" -"light" "50" -"classname" "light" -} -{ -"origin" "-992 -1040 760" -"light" "50" -"classname" "light" -} -{ -"origin" "-992 -1008 744" -"classname" "light" -"light" "50" -} -{ -"origin" "-992 -976 728" -"light" "50" -"classname" "light" -} -{ -"origin" "-992 -944 712" -"light" "50" -"classname" "light" -} -{ -"origin" "-992 -1264 872" -"classname" "light" -"light" "50" -} -{ -"origin" "-992 -1232 856" -"classname" "light" -"light" "50" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-992 -904 680" -"classname" "light" -"light" "90" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-992 -776 680" -"classname" "light" -"light" "130" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1016 -640 680" -"classname" "light" -"light" "130" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-696 -640 744" -"classname" "light" -"light" "120" -} -{ -"origin" "-728 -1392 1208" -"classname" "light" -"light" "350" -"target" "t421" -"_cone" "15" -} -{ -"model" "*77" -"spawnflags" "2048" -"classname" "trigger_multiple" -"delay" ".25" -"target" "goons1" -"wait" "5" -} -{ -"origin" "-720 -780 936" -"classname" "light" -"light" "90" -} -{ -"origin" "-496 -1148 928" -"classname" "light" -"light" "100" -} -{ -"light" "90" -"classname" "light" -"origin" "-624 -780 936" -} -{ -"light" "120" -"classname" "light" -"origin" "-320 -972 920" -} -{ -"_color" "1.000000 0.388235 0.239216" -"light" "100" -"classname" "light" -"origin" "-344 -908 888" -} -{ -"classname" "light" -"light" "350" -"origin" "-728 -1416 1208" -"target" "t419" -"_cone" "15" -} -{ -"light" "100" -"classname" "light" -"origin" "-592 -1400 944" -} -{ -"light" "350" -"classname" "light" -"origin" "-752 -1392 1208" -"target" "t420" -"_cone" "15" -} -{ -"light" "350" -"classname" "light" -"origin" "-752 -1416 1208" -"target" "t418" -"_cone" "15" -} -{ -"_color" "1.000000 0.360000 0.268000" -"origin" "-328 -1460 864" -"classname" "light" -"light" "80" -} -{ -"light" "80" -"classname" "light" -"origin" "-649 -1347 1134" -} -{ -"light" "80" -"classname" "light" -"origin" "-719 -1481 1134" -} -{ -"light" "80" -"classname" "light" -"origin" "-827 -1369 1134" -} -{ -"light" "80" -"classname" "light" -"origin" "-799 -1471 1134" -} -{ -"classname" "light" -"light" "80" -"origin" "-649 -1471 1134" -} -{ -"origin" "-768 -1076 984" -"classname" "light" -"light" "110" -} -{ -"_color" "1.000000 0.388235 0.239216" -"origin" "-680 -1084 888" -"classname" "light" -"light" "96" -} -{ -"_color" "1.000000 0.388235 0.239216" -"origin" "-856 -1084 888" -"classname" "light" -"light" "96" -} -{ -"_color" "1.000000 0.388235 0.239216" -"light" "100" -"classname" "light" -"origin" "-856 -956 888" -} -{ -"_color" "1.000000 0.388235 0.239216" -"light" "96" -"classname" "light" -"origin" "-856 -1340 888" -} -{ -"_color" "1.000000 0.388235 0.239216" -"light" "96" -"classname" "light" -"origin" "-824 -1460 888" -} -{ -"classname" "light" -"light" "175" -"origin" "-770 -1240 1024" -} -{ -"classname" "func_group" -"light" "64" -} -{ -"_style" "6" -"light" "150" -"classname" "light" -"origin" "-1344 -176 388" -} -{ -"classname" "light" -"light" "100" -"origin" "-1344 -256 388" -} -{ -"light" "100" -"classname" "light" -"origin" "-1344 -336 388" -} -{ -"light" "75" -"classname" "light" -"origin" "-376 -1136 -304" -} -{ -"_color" "1.000000 0.517647 0.223529" -"light" "90" -"classname" "light" -"origin" "-448 -1040 -280" -} -{ -"origin" "-336 -1192 -296" -"classname" "light" -"light" "80" -} -{ -"_color" "1.000000 0.517647 0.223529" -"light" "150" -"classname" "light" -"origin" "-368 -512 -280" -} -{ -"light" "80" -"classname" "light" -"origin" "-320 -1104 -280" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-536 -1088 -280" -"classname" "light" -"light" "90" -} -{ -"light" "75" -"classname" "light" -"origin" "-464 -1088 -264" -} -{ -"light" "100" -"classname" "light" -"origin" "-512 -1208 -352" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-1096 -360 216" -"light" "175" -"classname" "light" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-1032 -360 216" -"classname" "light" -"light" "175" -} -{ -"_color" "1.000000 0.929412 0.443137" -"classname" "light" -"light" "80" -"origin" "-864 -192 176" -} -{ -"_color" "1.000000 0.929412 0.443137" -"light" "80" -"classname" "light" -"origin" "-920 -192 176" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-1032 -992 200" -"classname" "light" -"light" "150" -} -{ -"_color" "1.000000 0.929412 0.443137" -"origin" "-1088 -992 200" -"light" "150" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-1136 -824 -240" -"light" "70" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-960 -1008 -240" -"classname" "light" -"light" "70" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-816 -960 -240" -"light" "70" -"classname" "light" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-816 -832 -240" -"classname" "light" -"light" "70" -} -{ -"origin" "-832 -1008 -240" -"light" "70" -"classname" "light" -} -{ -"_color" "1.000000 0.929412 0.443137" -"light" "175" -"classname" "light" -"origin" "-1096 -392 272" -} -{ -"_color" "1.000000 0.929412 0.443137" -"classname" "light" -"light" "175" -"origin" "-1032 -392 272" -} -{ -"origin" "-768 -736 -400" -"classname" "light" -"light" "64" -"_color" "1.000000 0.432000 0.268000" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-600 -896 -464" -"classname" "light" -"light" "64" -} -{ -"light" "105" -"classname" "light" -"origin" "-404 -640 -360" -"_color" "1.000000 0.256917 0.007905" -} -{ -"light" "105" -"classname" "light" -"origin" "-404 -640 -488" -"_color" "1.000000 0.256917 0.007905" -} -{ -"light" "80" -"classname" "light" -"origin" "-420 -392 -688" -"_color" "1.000000 0.274510 0.035294" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-368 -768 -280" -"classname" "light" -"light" "150" -} -{ -"origin" "-480 -392 -968" -"light" "150" -"classname" "light" -} -{ -"origin" "-496 -392 -175" -"classname" "light" -"light" "200" -} -{ -"_color" "1.000000 0.517647 0.223529" -"origin" "-288 -1248 -280" -"classname" "light" -"light" "130" -} -{ -"model" "*78" -"angle" "45" -"sounds" "2" -"wait" "3" -"spawnflags" "1" -"height" "386" -"speed" "100" -"classname" "func_plat" -} -{ -"origin" "-1424 -924 -56" -"target" "t224" -"targetname" "t225" -"classname" "path_corner" -"spawnflags" "2048" -} -{ -"classname" "path_corner" -"targetname" "t221" -"target" "t223" -"origin" "-1408 -640 128" -} -{ -"classname" "path_corner" -"targetname" "t223" -"target" "t221" -"origin" "-1392 -448 152" -} -{ -"classname" "path_corner" -"targetname" "t221" -"target" "t222" -"origin" "-1224 -448 152" -} -{ -"classname" "path_corner" -"targetname" "t222" -"target" "t223" -"origin" "-1336 -480 152" -} -{ -"classname" "monster_soldier" -"target" "t221" -"origin" "-1328 -432 172" -"spawnflags" "1" -} -{ -"_color" "1.000000 0.517647 0.223529" -"classname" "light" -"light" "64" -"origin" "-792 -640 -400" -} -{ -"_color" "1.000000 0.517647 0.223529" -"classname" "light" -"light" "64" -"origin" "-728 -640 -464" -} -{ -"light" "64" -"classname" "light" -"origin" "-856 -640 -464" -} -{ -"_color" "1.000000 0.517647 0.223529" -"light" "64" -"classname" "light" -"origin" "-664 -896 -464" -} -{ -"_color" "1.000000 0.274510 0.035294" -"classname" "light" -"light" "80" -"origin" "-1792 -640 -528" -} -{ -"light" "100" -"classname" "light" -"origin" "-640 -896 -336" -} -{ -"light" "100" -"classname" "light" -"origin" "-640 -896 -144" -} -{ -"light" "64" -"classname" "light" -"origin" "-640 -896 -14" -} -{ -"classname" "light" -"light" "100" -"origin" "-648 -888 -400" -} -{ -"model" "*79" -"classname" "func_plat" -"speed" "150" -"height" "684" -"spawnflags" "1793" -"wait" "5" -"sounds" "1" -} -{ -"model" "*80" -"spawnflags" "8" -"sounds" "1" -"wait" "6" -"speed" "125" -"angle" "-2" -"classname" "func_door" -} -{ -"origin" "-1060 -416 76" -"light" "140" -"classname" "light" -} -{ -"origin" "-536 -640 -208" -"light" "175" -"classname" "light" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1024 -632 -384" -"classname" "light" -"light" "150" -"_color" "1.000000 0.274510 0.035294" -} -{ -"classname" "light" -"light" "130" -"origin" "-792 -640 -328" -"_color" "1.000000 0.274510 0.035294" -} -{ -"classname" "monster_soldier" -"angle" "0" -"origin" "-976 -240 76" -"spawnflags" "0" -} -{ -"origin" "-794 -640 242" -"light" "150" -"classname" "light" -} -{ -"classname" "light" -"light" "125" -"origin" "-606 -641 179" -} -{ -"_color" "1.000000 0.880000 0.192000" -"classname" "light" -"light" "110" -"origin" "-1036 -1172 -64" -} -{ -"origin" "-768 -1320 1128" -"light" "80" -"classname" "light" -} -{ -"origin" "148 -640 576" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "148 -640 960" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 192" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "148 -640 -192" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "98 -574 192" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "96 -708 64" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "196 -736 128" -"_color" "1.000000 0.274510 0.035294" -} -{ -"classname" "light" -"light" "105" -"origin" "98 -574 64" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "96 -708 448" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "98 -574 448" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "96 -708 576" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "148 -640 448" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "98 -574 576" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 704" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "148 -640 704" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "98 -574 704" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 -320" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "148 -640 -320" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "98 -574 -320" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 -192" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "148 -640 192" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "98 -574 -192" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "120" -"classname" "light" -"origin" "96 -708 -960" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "148 -640 -704" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "120" -"origin" "98 -574 -960" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "96 -708 -704" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "98 -574 -704" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "96 -708 -576" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "148 -640 -576" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "98 -574 -576" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 -448" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "148 -640 -448" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "98 -574 -448" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-608 -708 -960" -"classname" "light" -"light" "80" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-420 -392 -944" -"classname" "light" -"light" "80" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-610 -574 -960" -"light" "80" -"classname" "light" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "80" -"classname" "light" -"origin" "-420 -392 -816" -"_color" "1.000000 0.274510 0.035294" -} -{ -"classname" "light" -"light" "80" -"origin" "-608 -708 -832" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "100" -"classname" "light" -"origin" "-608 -708 -704" -"_color" "1.000000 0.274510 0.035294" -} -{ -"classname" "light" -"light" "100" -"origin" "-610 -574 -704" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "100" -"classname" "light" -"origin" "-608 -708 -576" -"_color" "1.000000 0.274510 0.035294" -} -{ -"light" "80" -"classname" "light" -"origin" "-420 -392 -560" -"_color" "1.000000 0.274510 0.035294" -} -{ -"classname" "light" -"light" "100" -"origin" "-610 -574 -576" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-608 -708 -448" -"classname" "light" -"light" "100" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-420 -392 -432" -"classname" "light" -"light" "80" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-610 -574 -448" -"light" "100" -"classname" "light" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1203 -901 58" -"light" "100" -"classname" "light" -} -{ -"classname" "light" -"light" "175" -"origin" "-794 -640 210" -} -{ -"pathtarget" "hiss2" -"wait" "5" -"target" "t3" -"classname" "path_corner" -"origin" "-768 -764 832" -"targetname" "t352" -} -{ -"pathtarget" "hiss" -"target" "t150" -"targetname" "t20" -"wait" "3" -"classname" "path_corner" -"origin" "-1092 -760 -320" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "-1272 -640 944" -"classname" "light" -"light" "175\" -"target" "t38" -} -{ -"_color" "1.000000 0.274510 0.035294" -"origin" "4 -640 -664" -"classname" "light" -"light" "105" -"target" "t46" -} -{ -"_color" "1.000000 0.274510 0.035294" -"light" "175\" -"classname" "light" -"origin" "-1404 -640 944" -"target" "t27" -} -{ -"_color" "1.000000 0.262745 0.243137" -"light" "105" -"classname" "light" -"origin" "-1760 -708 960" -} -{ -"_color" "1.000000 0.262745 0.243137" -"light" "105" -"classname" "light" -"origin" "-1812 -640 960" -} -{ -"_color" "1.000000 0.262745 0.243137" -"classname" "light" -"light" "105" -"origin" "-1762 -574 960" -} -{ -"light" "105" -"classname" "light" -"origin" "-1760 -708 704" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1812 -640 704" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "-1762 -574 704" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1760 -708 576" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1812 -640 576" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1762 -574 576" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1760 -708 448" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1812 -640 448" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "-1762 -574 448" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1760 -708 320" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1812 -640 320" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1762 -574 320" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1760 -708 192" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1812 -640 192" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "-1762 -574 192" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1760 -708 64" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1812 -640 64" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1762 -574 64" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1760 -708 -64" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "-1812 -640 -64" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "-1762 -574 -64" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1760 -708 -192" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1812 -640 -192" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "100" -"classname" "light" -"origin" "-1760 -708 -320" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "100" -"classname" "light" -"origin" "-1812 -640 -320" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1760 -708 -448" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-1804 -640 -448" -"classname" "light" -"light" "105" -"_color" "1.000000 0.274510 0.035294" -} -{ -"origin" "-1762 -574 -448" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"_color" "1.000000 0.262745 0.243137" -"light" "105" -"classname" "light" -"origin" "-1760 -708 832" -} -{ -"light" "105" -"classname" "light" -"origin" "-1812 -640 832" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "-1762 -574 832" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 960" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "148 -640 1088" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "98 -574 960" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "96 -708 1088" -"classname" "light" -"light" "105" -"_color" "1.000000 0.262745 0.243137" -} -{ -"origin" "-404 -640 -104" -"classname" "light" -"light" "64" -} -{ -"origin" "98 -574 1088" -"light" "105" -"classname" "light" -"_color" "1.000000 0.262745 0.243137" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "-1760 -708 1088" -"classname" "light" -"light" "105" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "-1812 -640 1088" -"classname" "light" -"light" "105" -} -{ -"_color" "1.000000 0.262745 0.243137" -"origin" "-1762 -574 1088" -"light" "105" -"classname" "light" -} -{ -"light" "105" -"classname" "light" -"origin" "96 -708 832" -"_color" "1.000000 0.262745 0.243137" -} -{ -"light" "105" -"classname" "light" -"origin" "148 -640 832" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "light" -"light" "105" -"origin" "98 -574 832" -"_color" "1.000000 0.262745 0.243137" -} -{ -"classname" "func_group" -} -{ -"wait" ".09" -"pathtarget" "corner2" -"origin" "-1820 -760 -288" -"classname" "path_corner" -"targetname" "t18" -"target" "t13" -"light" "64" -} -{ -"wait" ".09" -"pathtarget" "corner1" -"origin" "-1788 -760 -320" -"classname" "path_corner" -"targetname" "t150" -"target" "t18" -} -{ -"wait" ".09" -"pathtarget" "corner3" -"classname" "path_corner" -"origin" "-1820 -760 832" -"target" "t12" -"targetname" "t13" -"light" "64" -} -{ -"wait" ".09" -"classname" "path_corner" -"origin" "-1788 -760 848" -"targetname" "t12" -"target" "t151" -"light" "64" -"pathtarget" "open_in" -} -{ -"wait" ".09" -"pathtarget" "corner9" -"classname" "path_corner" -"origin" "-652 -760 -832" -"targetname" "t24" -"target" "t23" -"light" "64" -} -{ -"wait" ".09" -"pathtarget" "corner0B" -"target" "t20" -"classname" "path_corner" -"origin" "-680 -760 -320" -"targetname" "t21" -"light" "64" -} -{ -"wait" ".09" -"pathtarget" "corner0" -"classname" "path_corner" -"origin" "-652 -760 -336" -"target" "t21" -"targetname" "t22" -"light" "64" -} -{ -"classname" "path_corner" -"origin" "-656 -760 -784" -"target" "t22" -"targetname" "t23" -"light" "64" -} -{ -"_color" "1.000000 0.360000 0.268000" -"origin" "-328 -1356 864" -"light" "80" -"classname" "light" -} -{ -"_color" "1.000000 0.388235 0.239216" -"origin" "-856 -828 888" -"classname" "light" -"light" "100" -} -{ -"origin" "-1232 -896 -168" -"light" "100" -"classname" "light" -} -{ -"wait" ".09" -"pathtarget" "corner7" -"target" "t7" -"origin" "-80 -760 -800" -"targetname" "t8" -"classname" "path_corner" -"light" "64" -} -{ -"wait" ".09" -"pathtarget" "corner8" -"target" "t24" -"targetname" "t7" -"classname" "path_corner" -"origin" "-100 -760 -832" -"light" "64" -} -{ -"wait" ".09" -"pathtarget" "corner6" -"target" "t8" -"origin" "-80 -760 816" -"targetname" "t4" -"classname" "path_corner" -} -{ -"wait" ".09" -"origin" "-104 -760 832" -"target" "t4" -"targetname" "t3" -"classname" "path_corner" -"light" "64" -"pathtarget" "close_out" -} -{ -"model" "*81" -"_minlight" "0.2" -"sounds" "0" -"health" "1" -"lip" "8" -"angle" "180" -"target" "ws_trgr" -"classname" "func_button" -} -{ -"origin" "-1344 80 388" -"classname" "light" -"light" "100" -} -{ -"_style" "6" -"origin" "-1344 0 388" -"light" "150" -"classname" "light" -} -{ -"origin" "-1344 -80 388" -"classname" "light" -"light" "100" -} -{ -"origin" "-336 -1408 1092" -"classname" "light" -"light" "64" -} -{ -"targetname" "ws_trgr" -"classname" "trigger_relay" -"target" "wallramp" -"origin" "-1268 -1040 -224" -} -{ -"light" "100" -"classname" "light" -"origin" "-1344 176 388" -} -{ -"origin" "-244 -1792 952" -"light" "150" -"classname" "light" -} -{ -"model" "*82" -"classname" "func_door" -"angle" "-1" -"_minlight" ".2" -"targetname" "t247" -} -{ -"model" "*83" -"classname" "func_button" -"angle" "180" -"target" "t247" -"_minlight" "0.3" -} -{ -"model" "*84" -"spawnflags" "2048" -"classname" "trigger_multiple" -"target" "t246" -} -{ -"spawnflags" "2048" -"classname" "target_changelevel" -"map" "base3$train" -"origin" "-248 -1748 932" -"targetname" "t246" -} \ No newline at end of file diff --git a/stuff/mapfixes/baseq2/waste3@6a93.ent b/stuff/mapfixes/baseq2/waste3@6a93.ent deleted file mode 100644 index a4718b49e..000000000 --- a/stuff/mapfixes/baseq2/waste3@6a93.ent +++ /dev/null @@ -1,4554 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Fixed uncounted secret (b#11) -// -// This secret has a targetname (t117) but no entity -// targets this targetname. Changed the -// item_armor_body (b#12) to target it -// -// 2. Swapped waste1 and waste2 player starts -// (b#2) so the map beginning comes first -// -// 3. Fixed wrong secret message sound (b#3) -// -// 4. Added spawnflag 2048 to a bunch of SP/co-op only entities (b#4) -// -// 5. Added difficulty spawnflags to monster-related entities (b#5) -// -// 6. Fixed 2x monster_gunner with weird difficulty spawnflags (b#6) -// -// They had spawnflags 1024 (not hard/nightmare). It is much more likely -// the intention was 768 (not easy + not medium) and the mapper thought -// for a moment the spawnflags were inclusive instead of exclusive. -// -// 7. Fixed missing pumping sounds in DM (b#7) -// -// In DM the big pump has already been activated but is missing its sound -// effect. Added a trigger_always that starts those sounds -{ -"sounds" "3" -"classname" "worldspawn" -"light" "80" -"message" "Pumping Station 2" -"sky" "unit6_" -"nextmap" "biggun" -} -{ -"origin" "-848 -1520 -176" -"spawnflags" "2048" -"targetname" "t121" -"message" "You have found a secret." -"classname" "target_secret" -} -{ -"model" "*1" -"target" "t121" -"spawnflags" "2048" -"classname" "trigger_once" -} -{ -"model" "*2" -"classname" "func_door" -"angle" "360" -"team" "td5" -"_minlight" ".18" -} -{ -"model" "*3" -"team" "thor1" -"_minlight" ".18" -"angle" "360" -"classname" "func_door" -} -{ -"model" "*4" -"wait" "-1" -"spawnflags" "8" -"targetname" "t73" -"classname" "func_door" -"angle" "270" -"team" "ky1" -"_minlight" ".18" -} -{ -"classname" "light" -"light" "200" -"_color" "1.000000 1.000000 0.168627" -"_style" "4" -"origin" "-448 -2014 -180" -} -{ -"classname" "light" -"light" "200" -"_color" "1.000000 1.000000 0.168627" -"_style" "4" -"origin" "-588 -2014 -180" -} -{ -"classname" "light" -"light" "200" -"_color" "1.000000 1.000000 0.168627" -"_style" "4" -"origin" "-544 -1856 -180" -} -{ -"model" "*5" -"target" "t120" -"health" "20" -"_minlight" ".2" -"mass" "200" -"classname" "func_explosive" -} -{ -"origin" "-174 -2340 26" -"target" "t119" -"targetname" "t2" -"spawnflags" "2048" -"wait" "8" -"random" "6" -"classname" "func_timer" -} -{ -"origin" "-148 -2334 58" -"targetname" "t119" -"sounds" "1" -"angle" "-2" -"classname" "target_splash" -} -{ -"origin" "-160 -2348 76" -"classname" "misc_explobox" -} -{ -"origin" "-232 -2388 76" -"classname" "misc_explobox" -} -{ -"model" "*6" -"target" "t2" -"mass" "200" -"health" "10" -"classname" "func_explosive" -} -{ -"targetname" "waste2" -"angle" "225" -"origin" "-624 -752 -64" -"classname" "info_player_coop" -} -{ -"targetname" "waste2" -"classname" "info_player_coop" -"origin" "-720 -808 -64" -"angle" "225" -} -{ -"targetname" "waste2" -"angle" "270" -"origin" "-592 -584 -64" -"classname" "info_player_coop" -} -{ -"origin" "-2720 -1376 180" -"targetname" "waste1" -"classname" "info_player_coop" -"angle" "270" -} -{ -"origin" "-2832 -1376 180" -"targetname" "waste1" -"angle" "270" -"classname" "info_player_coop" -} -{ -"origin" "-2776 -1480 180" -"targetname" "waste1" -"angle" "270" -"classname" "info_player_coop" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-232 -2464 164" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-232 -2504 164" -} -{ -"model" "*7" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"origin" "-1136 -2620 -64" -"spawnflags" "16" -"angle" "180" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1152 -2656 -40" -"spawnflags" "2048" -"classname" "item_health_mega" -} -{ -"origin" "-1572 -1852 -268" -"angle" "45" -"spawnflags" "8" -"classname" "misc_deadsoldier" -} -{ -"model" "*8" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-1616 -1400 92" -"angle" "315" -"spawnflags" "8" -"classname" "misc_deadsoldier" -} -{ -"spawnflags" "2048" -"attenuation" "-1" -"targetname" "t4" -"noise" "world/pumping.wav" -"origin" "-48 -2200 104" -"classname" "target_speaker" -} -{ -"model" "*9" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*10" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*11" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*12" -"spawnflags" "8" -"health" "1" -"angle" "-1" -"classname" "func_door" -} -{ -"classname" "item_quad" -"spawnflags" "2048" -"origin" "-2656 -1668 -40" -} -{ -"model" "*13" -"classname" "trigger_once" -"spawnflags" "2048" -"target" "t118" -} -{ -"model" "*14" -"classname" "func_button" -"wait" "-1" -"angle" "0" -"spawnflags" "2048" -"lip" "8" -"targetname" "t4" -} -{ -"model" "*15" -"classname" "func_door" -"spawnflags" "2056" -"angle" "-2" -"speed" "500" -"target" "t4" -"message" "Pumping Station Two\nactivated." -"wait" "-1" -"targetname" "t118" -} -{ -"origin" "-248 -2130 122" -"target" "t5" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"origin" "-1896 -1456 116" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ // b#11 -"message" "You have found a secret." -"origin" "-1640 -1300 156" -"spawnflags" "2048" -"targetname" "t117" -"classname" "target_secret" -} -{ -"origin" "-2844 -1700 116" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "-1624 -1412 116" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "0 -2528 108" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "296 -2696 212" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-656 -3040 -36" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-656 -2932 -36" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1332 -2404 -244" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1848 -1024 -56" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-2300 -1448 116" -"classname" "info_player_deathmatch" -"angle" "270" -} -{ -"origin" "-2296 -1872 116" -"angle" "90" -"classname" "info_player_deathmatch" -} -{ -"origin" "-2760 -1792 240" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-2832 -1864 248" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "-2792 -1400 180" -"angle" "270" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1696 -1984 116" -"angle" "45" -"classname" "info_player_deathmatch" -} -{ -"origin" "-744 -1992 116" -"angle" "135" -"classname" "info_player_deathmatch" -} -{ -"origin" "-520 -828 -80" -"angle" "180" -"classname" "info_player_deathmatch" -} -{ -"origin" "-1622 -1238 156" -"spawnflags" "2048" -"classname" "item_armor_body" -"target" "t117" // b#12 added this -} -{ -"origin" "-1622 -1238 146" -"spawnflags" "1792" -"classname" "item_invulnerability" -} -{ -"origin" "-2444 -1888 112" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1828 -1272 116" -"spawnflags" "1792" -"classname" "ammo_slugs" -} -{ -"origin" "-788 -800 -88" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-824 -824 -88" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-744 -1328 120" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-824 -1140 120" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"classname" "item_armor_shard" -"origin" "-844 -1140 116" -"spawnflags" "2048" -} -{ -"classname" "item_armor_shard" -"origin" "-884 -1140 116" -"spawnflags" "0" -} -{ -"model" "*16" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"style" "1" -"targetname" "t116" -"classname" "func_areaportal" -} -{ -"origin" "-2600 -1328 100" -"target" "t115" -"spawnflags" "1792" -"classname" "trigger_always" -} -{ -"model" "*17" -"lip" "-8" -"target" "t116" -"targetname" "t115" -"spawnflags" "8" -"wait" "-1" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-2592 -1244 -48" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-2792 -1372 -48" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-2792 -1332 -48" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-2792 -1452 -48" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-2792 -1412 -48" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-2792 -1532 -48" -"classname" "item_health_small" -"spawnflags" "1792" -} -{ -"origin" "-2792 -1492 -48" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-2792 -1252 -48" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-2792 -1292 -48" -"spawnflags" "1792" -"classname" "item_health_small" -} -{ -"model" "*18" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*19" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"model" "*20" -"spawnflags" "1792" -"classname" "func_wall" -} -{ -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t73" -"origin" "-1800 -1456 172" -} -{ -"classname" "item_health" -"origin" "-2844 -1740 116" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-2528 -1868 124" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-2568 -1868 124" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-2576 -1424 120" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-2612 -1456 120" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"origin" "-2152 -860 -28" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-2072 -860 -28" -} -{ -"classname" "weapon_machinegun" -"spawnflags" "1792" -"origin" "-2112 -876 -28" -} -{ -"classname" "weapon_railgun" -"spawnflags" "1792" -"origin" "-2112 -668 0" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "-1196 -1960 112" -} -{ -"classname" "weapon_shotgun" -"spawnflags" "1792" -"origin" "-1180 -1920 112" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-596 -1568 108" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-364 -1568 108" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-80 -2088 100" -} -{ -"classname" "weapon_chaingun" -"spawnflags" "1792" -"origin" "-80 -2124 100" -} -{ -"spawnflags" "1792" -"classname" "ammo_bullets" -"origin" "-408 -2708 216" -} -{ -"classname" "ammo_bullets" -"spawnflags" "1792" -"origin" "-368 -2708 216" -} -{ -"classname" "item_armor_combat" -"spawnflags" "1792" -"origin" "-372 -2792 212" -} -{ -"classname" "ammo_shells" -"spawnflags" "1792" -"origin" "184 -2492 -204" -} -{ -"classname" "weapon_supershotgun" -"spawnflags" "1792" -"origin" "224 -2492 -204" -} -{ -"classname" "item_health_mega" -"spawnflags" "1792" -"origin" "-588 -1872 -236" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-176 -2672 -224" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-216 -2672 -224" -} -{ -"spawnflags" "1792" -"classname" "item_armor_shard" -"origin" "-256 -2672 -224" -} -{ -"classname" "item_armor_shard" -"spawnflags" "1792" -"origin" "-136 -2672 -224" -} -{ -"classname" "item_health" -"spawnflags" "1792" -"origin" "-796 -2932 -252" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-1552 -2240 -40" -} -{ -"spawnflags" "1792" -"classname" "item_health_small" -"origin" "-1516 -2240 -40" -} -{ -"classname" "item_health_small" -"spawnflags" "1792" -"origin" "-1588 -2240 -40" -} -{ -"spawnflags" "1792" -"classname" "ammo_grenades" -"origin" "-1248 -3128 -44" -} -{ -"classname" "ammo_grenades" -"spawnflags" "1792" -"origin" "-1288 -3128 -44" -} -{ -"classname" "item_quad" -"spawnflags" "1792" -"team" "w2" -"origin" "-1152 -2656 -48" -} -{ -"model" "*21" -"classname" "func_wall" -"spawnflags" "1792" -} -{ -"model" "*22" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"model" "*23" -"spawnflags" "2048" -"classname" "func_wall" -} -{ -"origin" "-1820 -2912 -248" -"classname" "item_health" -"spawnflags" "1792" -} -{ -"origin" "-1820 -2952 -248" -"spawnflags" "1792" -"classname" "item_health" -} -{ -"origin" "-1608 -2904 -248" -"spawnflags" "1792" -"classname" "ammo_bullets" -} -{ -"origin" "-1568 -2932 -252" -"spawnflags" "1792" -"classname" "weapon_machinegun" -} -{ -"origin" "-1548 -2100 -248" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-1548 -2056 -248" -"classname" "item_armor_shard" -"spawnflags" "1792" -} -{ -"origin" "-1548 -2144 -248" -"spawnflags" "1792" -"classname" "item_armor_shard" -} -{ -"origin" "-1576 -1784 -240" -"spawnflags" "1792" -"classname" "ammo_grenades" -} -{ -"origin" "-1552 -1824 -240" -"spawnflags" "1792" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "-1628 -1752 -252" -"spawnflags" "1792" -"classname" "item_health_large" -} -{ -"origin" "-1616 -1440 -152" -"spawnflags" "1792" -"classname" "item_enviro" -} -{ -"origin" "-800 -1400 -240" -"spawnflags" "1792" -"classname" "ammo_cells" -} -{ -"origin" "-824 -1440 -240" -"spawnflags" "1792" -"team" "w1" -"classname" "weapon_bfg" -} -{ -"origin" "-824 -1440 -240" -"team" "w1" -"spawnflags" "1792" -"classname" "item_armor_body" -} -{ -"origin" "-2534 -1668 72" -"angles" "80 0 0" -"classname" "info_player_intermission" -} -{ -"light" "140" -"classname" "light" -"origin" "-1624 -1432 176" -} -{ -"spawnflags" "0" -"origin" "-2280 -1888 112" -"classname" "item_health_large" -} -{ -"spawnflags" "0" -"origin" "-2280 -1848 112" -"classname" "item_health_large" -} -{ -"classname" "point_combat" -"targetname" "t114" -"spawnflags" "769" // b#5: was 1 -"origin" "-832 -1320 120" -} -{ -"classname" "monster_gladiator" -"angle" "270" -"spawnflags" "769" -"target" "t114" -"origin" "-832 -1288 136" -} -{ -"spawnflags" "1" -"classname" "point_combat" -"targetname" "t112" -"origin" "-200 -2432 -248" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t113" -"origin" "-200 -2672 -248" -} -{ -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier" -"target" "t112" -"origin" "-128 -2432 -224" -} -{ -"classname" "monster_soldier" -"angle" "180" -"spawnflags" "1" -"target" "t113" -"origin" "-128 -2672 -224" -} -{ -"classname" "monster_soldier" -"angle" "180" -"spawnflags" "1" -"origin" "-448 -2536 -232" -} -{ -"classname" "monster_soldier" -"angle" "180" -"spawnflags" "1" -"origin" "-448 -2576 -232" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t111" -"origin" "-1608 -2968 -256" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t110" -"origin" "-1816 -2768 -256" -} -{ -"origin" "-440 -2312 -272" -"angle" "270" -"spawnflags" "1" -"classname" "misc_deadsoldier" -} -{ -"origin" "-896 -2936 -248" -"target" "t105" -"targetname" "t104" -"wait" "4" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-896 -2576 -248" -"target" "t106" -"targetname" "t105" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-640 -2576 -248" -"target" "t107" -"targetname" "t106" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-964 -2936 -248" -"target" "t101" -"targetname" "t100" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"wait" "4" -} -{ -"origin" "-964 -2524 -248" -"target" "t100" -"targetname" "t99" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-640 -2524 -248" -"target" "t99" -"targetname" "t98" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-896 -2576 -248" -"target" "t109" -"targetname" "t108" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-896 -2936 -248" -"target" "t104" -"targetname" "t109" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"wait" "4" -} -{ -"origin" "-640 -2576 -248" -"target" "t108" -"targetname" "t107" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-964 -2524 -248" -"target" "t103" -"targetname" "t102" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-640 -2524 -248" -"targetname" "t103" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-964 -2936 -248" -"target" "t102" -"targetname" "t101" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "180 -2548 -204" -"target" "t97" -"targetname" "t96" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-324 -2548 -244" -"target" "t96" -"targetname" "t97" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "208 -2716 -188" -"classname" "monster_soldier" -"angle" "90" -} -{ -"spawnflags" "1" -"target" "t96" -"origin" "204 -2548 -188" -"classname" "monster_soldier" -"angle" "180" -} -{ -"target" "t98" -"origin" "-608 -2524 -232" -"classname" "monster_soldier" -"angle" "180" -} -{ -"target" "t104" -"origin" "-896 -2968 -232" -"classname" "monster_soldier" -"angle" "90" -} -{ -"origin" "252 -2716 -188" -"angle" "90" -"classname" "monster_soldier" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "-2656 -1728 120" -"targetname" "t95" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"targetname" "t94" -"origin" "-2784 -1664 120" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"targetname" "t32" -"target" "t95" -"origin" "-2600 -1856 136" -"classname" "monster_soldier" -"angle" "90" -} -{ -"item" "ammo_shells" -"targetname" "t32" -"target" "t94" -"origin" "-2784 -1424 192" -"angle" "270" -"classname" "monster_soldier" -} -{ -"origin" "-2656 -1584 104" -"targetname" "t93" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"targetname" "t32" -"origin" "-2656 -1480 120" -"target" "t93" -"angle" "270" -"classname" "monster_soldier" -} -{ -"spawnflags" "0" -"classname" "ammo_bullets" -"origin" "8 -1884 96" -} -{ -"origin" "-128 -2204 120" -"targetname" "t3" -"delay" "3" -"target" "t92" -"classname" "trigger_relay" -"spawnflags" "2048" // b#4: added this -} -{ -"spawnflags" "2048" -"origin" "-1928 -640 -24" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-2296 -640 -24" -"classname" "item_health" -} -{ -"origin" "-2152 -544 200" -"targetname" "t90" -"classname" "point_combat" -} -{ -"origin" "-2072 -544 200" -"targetname" "t91" -"classname" "point_combat" -} -{ -"origin" "-2144 -376 216" -"targetname" "t59" -"angle" "270" -"target" "t90" -"spawnflags" "2" -"classname" "monster_floater" -} -{ -"origin" "-2080 -376 216" -"targetname" "t59" -"angle" "270" -"target" "t91" -"spawnflags" "770" -"classname" "monster_floater" -} -{ -"light" "150" -"origin" "-2152 -356 264" -"classname" "light" -} -{ -"light" "150" -"origin" "-2040 -740 136" -"classname" "light" -} -{ -"target" "t89" -"targetname" "t88" -"origin" "-2176 -448 168" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"target" "t88" -"targetname" "t87" -"origin" "-2176 -480 168" -"classname" "path_corner" -} -{ -"targetname" "t89" -"origin" "-2176 -448 272" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"model" "*24" -"targetname" "t59" -"speed" "50" -"target" "t87" -"classname" "func_train" -} -{ -"model" "*25" -"spawnflags" "2048" -"angle" "90" -"classname" "trigger_push" -} -{ -"spawnflags" "2048" -"origin" "-2804 -1436 172" -"classname" "ammo_shells" -} -{ -"origin" "-2832 -1456 156" -"angle" "225" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"spawnflags" "0" -"origin" "-2428 -1432 120" -"classname" "item_armor_shard" -} -{ -"spawnflags" "0" -"origin" "-2388 -1432 120" -"classname" "item_armor_shard" -} -{ -"spawnflags" "0" -"origin" "-2348 -1432 120" -"classname" "item_armor_shard" -} -{ -"spawnflags" "2048" -"origin" "-1828 -1272 116" -"classname" "ammo_rockets" -} -{ -"spawnflags" "0" -"origin" "-2392 -1272 116" -"classname" "item_health" -} -{ -"spawnflags" "0" -"origin" "-1928 -1496 -88" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-1888 -1496 -88" -"classname" "item_health_small" -} -{ -"spawnflags" "0" -"origin" "-1968 -1496 -88" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-1472 -1912 -252" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"origin" "-1620 -1912 -252" -"classname" "item_health_large" -} -{ -"origin" "-816 -1456 -272" -"angle" "225" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"spawnflags" "2048" -"origin" "-848 -1448 -240" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-800 -1448 -240" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-1816 -2400 -248" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-1336 -2400 -248" -"classname" "item_health" -} -{ -"origin" "-1816 -2968 -240" -"classname" "monster_gunner" -"angle" "45" -"spawnflags" "1" -"target" "t110" -} -{ -"origin" "-1760 -2968 -240" -"spawnflags" "1" -"angle" "45" -"classname" "monster_gunner" -"target" "t111" -} -{ -"origin" "228 -2556 -112" -"spawnflags" "1" -"classname" "monster_floater" -"angle" "180" -} -{ -"origin" "240 -2632 -112" -"spawnflags" "1" -"angle" "225" -"classname" "monster_floater" -} -{ -"spawnflags" "0" -"origin" "320 -2648 204" -"classname" "ammo_shells" -} -{ -"spawnflags" "0" -"origin" "280 -2648 204" -"classname" "ammo_shells" -} -{ -"spawnflags" "2048" -"origin" "-32 -1884 96" -"classname" "ammo_bullets" -} -{ -"spawnflags" "0" -"origin" "-512 -2524 108" -"classname" "item_health_large" -} -{ -"spawnflags" "0" -"origin" "-364 -1608 108" -"classname" "item_health" -} -{ -"spawnflags" "0" -"origin" "-596 -1608 108" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-804 -1140 116" -"classname" "item_armor_shard" -} -{ -"spawnflags" "0" -"origin" "-764 -1140 116" -"classname" "item_armor_shard" -} -{ -"origin" "-892 -1160 100" -"angle" "135" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"origin" "-1172 -1332 104" -"targetname" "t86" -"spawnflags" "769" // b#5: was 1 -"classname" "point_combat" -} -{ -"model" "*26" -"spawnflags" "2048" -"target" "t85" -"classname" "trigger_once" -} -{ -"spawnflags" "768" // b#6: was 1024 -"origin" "-1104 -1232 120" -"target" "t86" -"targetname" "t85" -"classname" "monster_gunner" -"angle" "180" -} -{ -"origin" "-1144 -1260 120" -"item" "ammo_grenades" -"targetname" "t85" -"angle" "180" -"classname" "monster_gunner" -} -{ -"spawnflags" "0" -"origin" "-1660 -1368 124" -"classname" "item_health" -} -{ -"spawnflags" "0" -"origin" "-1588 -1368 124" -"classname" "item_health" -} -{ -"spawnflags" "2048" -"origin" "-748 -1988 116" -"classname" "item_health_large" -} -{ -"spawnflags" "2048" -"origin" "-588 -848 -88" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-672 -852 -88" -"classname" "item_health_small" -} -{ -"spawnflags" "2048" -"origin" "-528 -828 -88" -"classname" "ammo_cells" -} -{ -"origin" "-516 -812 -104" -"angle" "180" -"spawnflags" "2048" -"classname" "misc_deadsoldier" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "48 -2560 -144" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb15.wav" -"spawnflags" "1" -"origin" "-588 -1920 -200" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb15.wav" -"spawnflags" "1" -"origin" "-520 -2020 -200" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb15.wav" -"spawnflags" "1" -"origin" "-440 -2152 -200" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb15.wav" -"spawnflags" "1" -"origin" "-440 -2316 -200" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-256 -2560 -200" -} -{ -"origin" "12 -2204 16" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-316 -2560 -200" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-560 -2560 -200" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-512 -2560 -180" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-592 -2212 -136" -} -{ -"origin" "232 -2660 -144" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-588 -1992 -200" -"spawnflags" "1" -"noise" "world/drip_amb.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-68 -2560 -132" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-832 -2560 -200" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-924 -2808 -200" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-924 -2760 -128" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-992 -2932 -128" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-840 -2920 -268" -"angle" "135" -"spawnflags" "2052" -"classname" "misc_deadsoldier" -} -{ -"origin" "-820 -2904 -240" -"classname" "item_pack" -"spawnflags" "2048" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-776 -2932 -128" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "232 -2488 -176" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1252 -2932 -128" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1568 -2932 -128" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1564 -2880 -228" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1340 -2344 -228" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1556 -2456 -228" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1360 -2652 -228" -} -{ -"origin" "-1796 -2344 -228" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1764 -2656 -228" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-792 -2932 -256" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1564 -2880 -164" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1764 -2656 -164" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1556 -2456 -164" -} -{ -"origin" "-1552 -2260 -228" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1552 -2136 -228" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1360 -2652 -164" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1552 -2028 -228" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1624 -1904 -108" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1052 -1908 -184" -"wait" "13" -"random" "6" -"spawnflags" "1" -"target" "t83" -"classname" "func_timer" -} -{ -"origin" "-812 -1804 -192" -"wait" "9" -"random" "5" -"spawnflags" "1" -"target" "t84" -"classname" "func_timer" -} -{ -"origin" "-1280 -1920 -204" -"wait" "12" -"random" "4" -"spawnflags" "1" -"target" "t82" -"classname" "func_timer" -} -{ -"targetname" "t82" -"origin" "-1300 -1916 -184" -"spawnflags" "0" -"noise" "world/drip1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"targetname" "t83" -"origin" "-1048 -1896 -184" -"spawnflags" "0" -"noise" "world/drip1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1060 -1896 -108" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-824 -1832 -108" -} -{ -"targetname" "t84" -"volume" ".3" -"classname" "target_speaker" -"noise" "world/drip1.wav" -"spawnflags" "0" -"origin" "-816 -1784 -192" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-1288 -1900 -108" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1552 -2124 -228" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-1620 -1504 -108" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-1980 -1500 -40" -} -{ -"target" "t80" -"classname" "func_timer" -"origin" "-1624 -1344 -96" -"spawnflags" "1" -"random" "6" -"wait" "13" -} -{ -"target" "t81" -"classname" "func_timer" -"origin" "-1684 -1336 -96" -"spawnflags" "1" -"random" "3" -"wait" "10" -} -{ -"target" "t79" -"wait" "11" -"random" "8" -"spawnflags" "1" -"origin" "-1560 -1344 -96" -"classname" "func_timer" -} -{ -"targetname" "t80" -"origin" "-1624 -1320 -96" -"spawnflags" "0" -"noise" "world/steam1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"targetname" "t81" -"origin" "-1688 -1320 -96" -"spawnflags" "0" -"noise" "world/steam1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1828 -1500 -40" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-824 -1420 -248" -"spawnflags" "1" -"noise" "world/amb16.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"targetname" "t79" -"volume" ".3" -"classname" "target_speaker" -"noise" "world/steam1.wav" -"spawnflags" "0" -"origin" "-1560 -1320 -96" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb16.wav" -"spawnflags" "1" -"origin" "-2144 -1304 -40" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-2416 -1232 -40" -} -{ -"origin" "-2112 -516 208" -"spawnflags" "1" -"noise" "world/pump2.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2288 -1204 -40" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2120 -1500 -40" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1932 -1200 -40" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-2272 -620 28" -} -{ -"origin" "-2112 -516 168" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1952 -616 28" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1808 -1232 -40" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2240 -808 52" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2240 -964 224" -} -{ -"origin" "-2240 -964 124" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1984 -964 124" -} -{ -"origin" "-1984 -964 224" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2240 -1204 224" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2112 -1204 224" -} -{ -"origin" "-2240 -1204 124" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2112 -1204 124" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1984 -1204 224" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "1" -"origin" "-1984 -1204 124" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-1984 -808 152" -} -{ -"origin" "-2240 -808 152" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -"origin" "-2112 -656 312" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2120 -1420 224" -} -{ -"origin" "-2784 -1376 228" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-2712 -1668 124" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-2668 -1420 124" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-2752 -1476 428" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-2748 -1728 428" -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -} -{ -"origin" "-2608 -1896 148" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-2352 -1816 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/fan1.wav" -"spawnflags" "1" -"origin" "-2480 -1668 -28" -} -{ -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2780 -1184 232" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-2144 -1656 148" -} -{ -"origin" "-2476 -1584 296" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2476 -1584 64" -} -{ -"origin" "-2476 -1740 64" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2308 -1452 224" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2312 -1668 224" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2124 -1664 224" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-1984 -808 52" -"spawnflags" "1" -"noise" "world/pump1.wav" -"classname" "target_speaker" -"volume" ".3" -} -{ -"origin" "-2120 -1420 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-2480 -1668 64" -"spawnflags" "1" -"noise" "world/fan1.wav" -"classname" "target_speaker" -} -{ -"origin" "-1928 -1656 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1832 -1464 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1624 -1504 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-232 -2780 264" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-380 -2656 264" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"origin" "-16 -2648 264" -} -{ -"classname" "target_speaker" -"noise" "world/comp_hum2.wav" -"spawnflags" "1" -"origin" "-240 -2912 264" -} -{ -"origin" "64 -2928 244" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-208 -2928 244" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-440 -2752 244" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/comp_hum3.wav" -"spawnflags" "1" -"origin" "-384 -2868 264" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "244 -2804 264" -} -{ -"origin" "128 -2684 264" -"spawnflags" "1" -"noise" "world/comp_hum3.wav" -"classname" "target_speaker" -} -{ -"origin" "-128 -2756 264" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -} -{ -"origin" "-128 -2756 236" -"spawnflags" "1" -"noise" "world/comp_hum1.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/comp_hum1.wav" -"spawnflags" "1" -"origin" "-128 -2860 236" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "336 -2752 244" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-28 -2372 112" -} -{ -"targetname" "t4" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "2" -"origin" "-84 -2012 160" -} -{ -"targetname" "t4" -"origin" "-400 -2016 112" -"spawnflags" "2" -"noise" "world/pump1.wav" -"classname" "target_speaker" -} -{ -"targetname" "t4" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "2" -"origin" "-236 -2172 112" -} -{ -"targetname" "t4" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "2" -"origin" "-84 -2012 112" -} -{ -"targetname" "t4" -"classname" "target_speaker" -"noise" "world/pump1.wav" -"spawnflags" "2" -"origin" "-240 -1856 112" -} -{ -"targetname" "t4" -"origin" "-236 -2172 160" -"spawnflags" "2" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"targetname" "t4" -"origin" "-240 -2012 200" -"spawnflags" "2" -"noise" "world/pump2.wav" -"classname" "target_speaker" -} -{ -"targetname" "t4" -"origin" "-240 -1856 160" -"spawnflags" "2" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"origin" "-28 -2048 112" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"targetname" "t4" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "2" -"origin" "-400 -2016 160" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-8 -2208 112" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-480 -1760 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-476 -1568 148" -} -{ -"origin" "-344 -1684 220" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-344 -1572 220" -} -{ -"origin" "-612 -1572 220" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"origin" "-128 -2860 264" -"spawnflags" "1" -"noise" "world/comp_hum2.wav" -"classname" "target_speaker" -} -{ -"origin" "-480 -1368 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-612 -1684 220" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-672 -1232 148" -} -{ -"origin" "-480 -1236 148" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-980 -1232 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-1172 -1288 148" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-1304 -1484 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -"origin" "-824 -1140 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-1172 -1484 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-1408 -1484 148" -} -{ -"volume" ".3" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -"origin" "-2476 -1740 296" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-1624 -1728 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-1488 -1920 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-1228 -1920 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-992 -1920 148" -} -{ -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -"origin" "-828 -1780 148" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-1624 -1668 240" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-1584 -1920 240" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-1344 -1920 240" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-1112 -1920 240" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-828 -1880 236" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-828 -1628 236" -} -{ -"spawnflags" "1" -"noise" "world/wind2.wav" -"classname" "target_speaker" -"volume" ".2" -"origin" "-828 -1368 236" -} -{ -"origin" "-828 -1404 16" -"spawnflags" "1" -"noise" "world/amb14.wav" -"classname" "target_speaker" -} -{ -"origin" "-828 -1572 84" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1624 -1384 240" -"volume" ".2" -"classname" "target_speaker" -"noise" "world/wind2.wav" -"spawnflags" "1" -} -{ -"origin" "-824 -1228 -28" -"classname" "target_speaker" -"noise" "world/amb14.wav" -"spawnflags" "1" -} -{ -"origin" "-1172 -1384 148" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"origin" "-824 -1128 -28" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"origin" "-824 -948 -28" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"origin" "-728 -824 -28" -"spawnflags" "1" -"noise" "world/pump3.wav" -"classname" "target_speaker" -} -{ -"origin" "-616 -824 -28" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-824 -1100 12" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-592 -760 -28" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -} -{ -"origin" "-592 -548 -28" -"classname" "target_speaker" -"noise" "world/pump3.wav" -"spawnflags" "1" -} -{ -"origin" "-592 -560 68" -"classname" "target_speaker" -"noise" "world/amb7.wav" -"spawnflags" "1" -} -{ -"origin" "-824 -904 -28" -"spawnflags" "1" -"noise" "world/amb7.wav" -"classname" "target_speaker" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-816 -1948 108" -} -{ -"spawnflags" "2048" -"classname" "ammo_bullets" -"origin" "-904 -1976 108" -} -{ -"classname" "misc_deadsoldier" -"spawnflags" "2050" -"angle" "0" -"origin" "-788 -1936 92" -} -{ -"classname" "trigger_relay" -"spawnflags" "2816" // b#4, b#5: added this -"targetname" "t77" -"target" "t78" -"delay" "4" -"origin" "-832 -1352 0" -} -{ -"classname" "point_combat" -"targetname" "t75" -"spawnflags" "769" // b#5: was 1 -"origin" "-832 -1212 120" -} -{ -"spawnflags" "768" // b#6: was 1024 -"classname" "monster_gunner" -"angle" "0" -"target" "t75" -"targetname" "t78" -"item" "ammo_grenades" -"origin" "-1052 -1236 120" -} -{ -"model" "*27" -"spawnflags" "3072" // b#5: was 2048 -"classname" "trigger_once" -"target" "t77" -} -{ -"classname" "target_secret" -"targetname" "t74" -"origin" "-2632 -1672 -48" -"spawnflags" "2048" -"message" "You have found a secret." // b#3: moved this here from the trigger -} -{ -"model" "*28" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t74" -} -{ -"classname" "trigger_key" -"targetname" "t72" -"item" "key_blue_key" -"target" "t73" -"origin" "-1800 -1448 184" -"spawnflags" "2048" -} -{ -"model" "*29" -"classname" "trigger_multiple" -"target" "t72" -"spawnflags" "2048" -} -{ -"classname" "target_goal" -"targetname" "t71" -"origin" "-344 -2772 224" -"spawnflags" "2048" -} -{ -"spawnflags" "2048" -"message" "You have found a secret." -"classname" "target_secret" -"targetname" "t70" -"origin" "-628 -1916 -228" -} -{ -"model" "*30" -"targetname" "t120" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t70" -} -{ -"spawnflags" "2048" -"classname" "key_blue_key" -"origin" "-392 -2792 232" -"target" "t71" -} -{ -"spawnflags" "2048" -"targetname" "t92" -"classname" "target_help" -"message" "Proceed to reactor core.\nKill all resistance." -"origin" "-98 -2232 136" -} -{ -"spawnflags" "2048" -"classname" "target_goal" -"targetname" "t4" -"origin" "-8 -2196 120" -"message" "Pumping Station Two\nactivated." -} -{ -"spawnflags" "2048" -"origin" "-2112 -672 40" -"target" "t59" -"classname" "item_enviro" -} -{ -"style" "2" -"targetname" "t67" -"classname" "func_areaportal" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "72 -2812 200" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"origin" "92 -2864 200" -} -{ -"classname" "point_combat" -"targetname" "t65" -"origin" "-2156 -992 120" -} -{ -"classname" "monster_gunner" -"angle" "90" -"spawnflags" "3" -"targetname" "t59" -"target" "t65" -"origin" "-2372 -1148 152" -} -{ -"classname" "point_combat" -"targetname" "t64" -"origin" "-1984 -756 152" -} -{ -"model" "*31" -"spawnflags" "2048" -"classname" "trigger_once" -"target" "t63" -} -{ -"classname" "monster_floater" -"angle" "90" -"spawnflags" "3" -"targetname" "t60" -"origin" "-1984 -892 152" -"target" "t64" -} -{ -"dmg" "10" -"classname" "target_explosion" -"spawnflags" "2048" // b#4: added this -"delay" ".2" -"targetname" "t61" -"origin" "-1944 -824 116" -} -{ -"dmg" "10" -"classname" "target_explosion" -"spawnflags" "2048" // b#4: added this -"targetname" "t60" -"target" "t61" -"origin" "-2036 -828 148" -} -{ -"classname" "light" -"origin" "-2072 -356 264" -"light" "150" -} -{ -"model" "*32" -"classname" "func_explosive" -"dmg" "35" -"mass" "400" -"targetname" "t59" -"target" "t60" -} -{ -"classname" "func_group" -} -{ -"team" "w2" -"origin" "-2656 -1668 -40" -"classname" "item_quad" -"spawnflags" "1792" -} -{ -"spawnflags" "2048" -"classname" "item_adrenaline" -"origin" "-824 -1400 -248" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "304 -2920 208" -} -{ -"spawnflags" "0" -"classname" "item_health" -"origin" "264 -2920 208" -} -{ -"item" "ammo_cells" -"classname" "monster_floater" -"angle" "270" -"spawnflags" "2" -"targetname" "t48" -"origin" "-800 -1600 -120" -} -{ -"classname" "point_combat" -"spawnflags" "1" -"targetname" "t56" -"origin" "-2192 -640 0" -} -{ -"item" "ammo_bullets" -"classname" "monster_gunner" -"angle" "90" -"spawnflags" "0" -"target" "t56" -"origin" "-2112 -1008 120" -} -{ -"classname" "monster_berserk" -"spawnflags" "1" -"angle" "270" -"targetname" "t39" -"origin" "-2376 -1064 136" -} -{ -"classname" "monster_berserk" -"targetname" "t39" -"angle" "270" -"spawnflags" "1" -"origin" "-1848 -1064 136" -} -{ -"classname" "monster_berserk" -"angle" "180" -"spawnflags" "1" -"target" "t12" -"origin" "-1144 -1896 136" -} -{ -"classname" "monster_berserk" -"angle" "270" -"spawnflags" "1" -"target" "t20" -"origin" "-1680 -1448 136" -} -{ -"item" "ammo_bullets" -"origin" "-20 -2648 224" -"angle" "315" -"spawnflags" "1" -"classname" "monster_gunner" -"targetname" "t63" -} -{ -"origin" "-460 -2020 112" -"target" "t26" -"angle" "90" -"spawnflags" "1" -"classname" "monster_tank" -} -{ -"origin" "-2312 -1760 104" -"targetname" "t52" -"spawnflags" "1" -"classname" "point_combat" -} -{ -"spawnflags" "2048" -"origin" "-1844 -1500 -64" -"classname" "item_armor_body" -} -{ -"origin" "-624 -1856 -180" -"classname" "light" -"light" "200" -"_color" "1.000000 1.000000 0.168627" -"_style" "4" -} -{ -"origin" "-442 -2194 -180" -"_style" "4" -"_color" "1.000000 1.000000 0.168627" -"light" "200" -"classname" "light" -} -{ -"spawnflags" "2048" -"origin" "-588 -1876 -236" -"classname" "item_invulnerability" -} -{ -"model" "*33" -"target" "t51" -"classname" "trigger_once" -"spawnflags" "2048" // b#4: added this -} -{ -"item" "ammo_shells" -"origin" "-584 -1544 128" -"targetname" "t51" -"classname" "monster_soldier" -"angle" "0" -"spawnflags" "1" -} -{ -"item" "ammo_shells" -"origin" "-376 -1544 128" -"targetname" "t51" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier" -} -{ -"origin" "-64 -2904 208" -"targetname" "t50" -"classname" "point_combat" -} -{ -"target" "t50" -"origin" "-128 -2904 224" -"spawnflags" "1" -"angle" "0" -"classname" "monster_gunner" -} -{ -"angle" "270" -"origin" "-872 -1632 -120" -"targetname" "t48" -"classname" "monster_floater" -"spawnflags" "2" -} -{ -"angle" "270" -"origin" "-872 -1744 -120" -"targetname" "t48" -"spawnflags" "2" -"classname" "monster_floater" -} -{ -"spawnflags" "2048" -"origin" "-1552 -1824 -248" -"target" "t48" -"classname" "weapon_bfg" -} -{ -"model" "*34" -"spawnflags" "2048" -"target" "t47" -"classname" "trigger_once" -} -{ -"item" "ammo_bullets" -"origin" "-776 -1140 -64" -"targetname" "t47" -"spawnflags" "1" -"angle" "90" -"classname" "monster_gunner" -} -{ -"origin" "-1904 -1456 104" -"target" "t40" -"targetname" "t46" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1904 -1672 104" -"target" "t46" -"targetname" "t45" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1984 -1672 104" -"target" "t45" -"targetname" "t44" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1984 -1672 104" -"target" "t44" -"targetname" "t43" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1904 -1672 104" -"target" "t43" -"targetname" "t42" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1904 -1456 104" -"target" "t42" -"targetname" "t41" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-1864 -1456 104" -"target" "t41" -"targetname" "t40" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"model" "*35" -"spawnflags" "2048" -"target" "t39" -"classname" "trigger_once" -} -{ -"model" "*36" -"angle" "90" -"target" "t38" -"classname" "trigger_multiple" -} -{ -"origin" "-2788 -1144 212" -"targetname" "t38" -"map" "waste1$waste3" -"classname" "target_changelevel" -} -{ -"model" "*37" -"target" "t37" -"classname" "trigger_multiple" -"angle" "90" -} -{ -"origin" "-592 -504 -40" -"targetname" "t37" -"map" "waste2$waste3" -"classname" "target_changelevel" -} -{ -"origin" "-1798 -1476 -36" -"targetname" "t34" -"dmg" "5" -"delay" ".3" -"classname" "target_explosion" -"spawnflags" "2048" // b#4: added this -} -{ -"model" "*38" -"mass" "200" -"target" "t34" -"dmg" "20" -"health" "40" -"classname" "func_explosive" -"spawnflags" "0" -} -{ -"spawnflags" "2048" -"classname" "misc_explobox" -"angle" "270" -"origin" "-2616 -1440 100" -} -{ -"classname" "light" -"light" "72" -"_color" "1.000000 1.000000 0.000000" -"origin" "-1688 -1268 -108" -} -{ -"_color" "1.000000 1.000000 0.000000" -"light" "72" -"classname" "light" -"origin" "-1624 -1268 -108" -} -{ -"classname" "light" -"light" "72" -"_color" "1.000000 1.000000 0.000000" -"origin" "-1560 -1268 -108" -} -{ -"spawnflags" "2048" -"origin" "-524 -2484 92" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "176 -2708 200" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "-468 -2532 92" -"classname" "misc_explobox" -} -{ -"model" "*39" -"spawnflags" "1" -"classname" "func_plat" -"sounds" "1" -} -{ -"spawnflags" "2048" -"origin" "-2408 -1468 100" -"angle" "270" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "-2808 -1728 100" -"angle" "270" -"classname" "misc_explobox" -} -{ -"spawnflags" "2048" -"origin" "-2508 -1356 100" -"classname" "misc_explobox" -"angle" "270" -} -{ -"spawnflags" "2048" -"origin" "-2300 -1436 100" -"classname" "misc_explobox" -"angle" "270" -} -{ -"spawnflags" "2048" -"origin" "-2656 -1352 100" -"classname" "misc_explobox" -"angle" "315" -} -{ -"spawnflags" "2048" -"origin" "-2540 -1404 100" -"angle" "270" -"classname" "misc_explobox" -} -{ -"origin" "-1624 -1316 188" -"classname" "light" -"light" "180" -} -{ -"origin" "-824 -1092 188" -"light" "150" -"classname" "light" -} -{ -"origin" "-1504 -2468 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1424 -2520 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1380 -2592 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1380 -2720 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1432 -2792 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1504 -2844 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1636 -2844 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1708 -2792 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1756 -2720 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1756 -2592 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1704 -2516 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1680 -2340 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1804 -2340 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2408 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2520 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2624 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2688 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2780 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2880 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1868 -2980 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1776 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1680 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1600 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1504 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1392 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1288 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1192 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1080 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-952 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -3020 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -2852 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-840 -2748 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-840 -2648 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-708 -2648 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-604 -2648 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-512 -2680 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-512 -2432 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-400 -2432 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1632 -2468 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-584 -2472 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-712 -2472 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-840 -2472 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-952 -2472 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1016 -2540 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1016 -2652 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1016 -2784 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1096 -2852 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1212 -2852 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1268 -2760 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1268 -2632 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1268 -2504 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1268 -2384 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1352 -2340 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1452 -2340 -272" -} -{ -"classname" "light" -"light" "90" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1544 -1716 -272" -} -{ -"light" "145" -"classname" "light" -"origin" "-1272 -1912 176" -} -{ -"classname" "light" -"light" "72" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1688 -1264 -104" -} -{ -"_color" "0.123223 1.000000 0.094787" -"light" "72" -"classname" "light" -"origin" "-1624 -1264 -104" -} -{ -"classname" "light" -"light" "72" -"_color" "0.123223 1.000000 0.094787" -"origin" "-1560 -1264 -104" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"classname" "func_group" -} -{ -"origin" "-824 -1496 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -1552 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -1612 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -1680 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -1748 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -1820 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-824 -1900 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-880 -1904 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-956 -1904 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1028 -1904 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1108 -1904 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1200 -1904 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1284 -1904 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1364 -1908 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1428 -1844 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1428 -1952 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1664 -1948 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1664 -1828 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-400 -2680 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1428 -1716 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1664 -1716 -272" -"_color" "0.123223 1.000000 0.094787" -"light" "90" -"classname" "light" -} -{ -"origin" "-1560 -1380 -108" -"_color" "1.000000 1.000000 0.000000" -"light" "72" -"classname" "light" -} -{ -"origin" "-1624 -1380 -108" -"classname" "light" -"light" "72" -"_color" "1.000000 1.000000 0.000000" -} -{ -"origin" "-1688 -1380 -108" -"_color" "1.000000 1.000000 0.000000" -"light" "72" -"classname" "light" -} -{ -"target" "t40" -"spawnflags" "1" -"origin" "-1808 -1456 120" -"angle" "0" -"classname" "monster_berserk" -} -{ -"model" "*40" -"spawnflags" "2048" -"target" "t33" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"origin" "-2112 -1440 120" -"targetname" "t33" -"angle" "270" -"classname" "monster_gunner" -} -{ -"model" "*41" -"spawnflags" "2048" -"target" "t32" -"classname" "trigger_once" -} -{ -"spawnflags" "1" -"origin" "-2288 -1520 120" -"targetname" "t32" -"classname" "monster_gunner" -"angle" "270" -} -{ -"item" "ammo_grenades" -"target" "t52" -"spawnflags" "1" -"origin" "-2432 -1872 120" -"targetname" "t32" -"angle" "90" -"classname" "monster_gunner" -} -{ -"item" "ammo_rockets" -"spawnflags" "1" -"origin" "-184 -2232 96" -"target" "t29" -"classname" "monster_tank" -} -{ -"origin" "-128 -2240 88" -"target" "t29" -"targetname" "t28" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-360 -2240 88" -"targetname" "t29" -"target" "t28" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-472 -1872 104" -"target" "t27" -"targetname" "t26" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-488 -2400 104" -"targetname" "t27" -"target" "t26" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"item" "ammo_bullets" -"origin" "-496 -1376 128" -"target" "t23" -"classname" "monster_gunner" -"spawnflags" "1" -} -{ -"origin" "-488 -1240 112" -"target" "t25" -"targetname" "t24" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-472 -1224 112" -"target" "t23" -"targetname" "t22" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"origin" "-488 -1400 112" -"target" "t24" -"targetname" "t23" -"classname" "path_corner" -"spawnflags" "2048" // b#4 added this -} -{ -"origin" "-608 -1232 112" -"targetname" "t25" -"target" "t22" -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t19" -"target" "t20" -"origin" "-1680 -1936 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t18" -"target" "t19" -"origin" "-1208 -1960 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t11" -"target" "t12" -"origin" "-1592 -1848 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t13" -"target" "t14" -"origin" "-1568 -1888 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t12" -"target" "t13" -"origin" "-1160 -1896 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t16" -"target" "t17" -"origin" "-1240 -1960 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t15" -"target" "t16" -"origin" "-1656 -1928 112" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t17" -"target" "t18" -"origin" "-1656 -1952 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"target" "t15" -"targetname" "t20" -"origin" "-1672 -1480 120" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"target" "t11" -"targetname" "t14" -"origin" "-1576 -1488 120" -} -{ -"spawnflags" "1" -"classname" "monster_gladiator" -"target" "t9" -"origin" "-832 -1160 -64" -"item" "ammo_slugs" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"target" "t9" -"targetname" "t10" -"origin" "-816 -1920 104" -} -{ -"classname" "path_corner" -"spawnflags" "2048" // b#4: added this -"targetname" "t9" -"target" "t10" -"origin" "-832 -1208 -88" -} -{ -"model" "*42" -"spawnflags" "2048" -"classname" "trigger_once" -"targetname" "t4" -"target" "t5" -} -{ -"model" "*43" -"spawnflags" "2048" -"classname" "trigger_once" -"targetname" "t4" -"target" "t1" -} -{ -"origin" "-584 -568 0" -"classname" "target_crosslevel_target" -"spawnflags" "2176" // b#4: was 128 -"target" "t1" -} -{ -"origin" "-584 -620 0" -"classname" "target_crosslevel_trigger" -"spawnflags" "2052" // b#4: was 4 -"targetname" "t3" -} -{ -"model" "*44" -"lip" "24" -"classname" "func_water" -"angle" "-2" -"spawnflags" "2049" -"targetname" "t3" -} -{ -"model" "*45" -"spawnflags" "2049" -"classname" "trigger_counter" -"targetname" "t1" -"target" "t3" -} -{ -"classname" "light" -"light" "100" -"origin" "0 -2208 120" -} -{ -"classname" "light" -"light" "80" -"origin" "-2112 -976 20" -} -{ -"light" "80" -"classname" "light" -"origin" "-2372 -1048 -40" -} -{ -"light" "80" -"classname" "light" -"origin" "-1944 -1000 -40" -} -{ -"light" "80" -"classname" "light" -"origin" "-1872 -1016 -40" -} -{ -"classname" "light" -"light" "80" -"origin" "-2316 -1012 -40" -} -{ -"_color" "0.113725 1.000000 0.011765" -"classname" "light" -"light" "100" -"origin" "-2330 -738 -72" -} -{ -"_color" "0.113725 1.000000 0.011765" -"light" "100" -"classname" "light" -"origin" "-1892 -734 -72" -} -{ -"classname" "light" -"origin" "-832 -1300 -4" -"light" "145" -} -{ -"classname" "light" -"origin" "-832 -1216 -4" -"light" "145" -} -{ -"origin" "-592 -672 -16" -"light" "110" -"classname" "light" -} -{ -"classname" "light" -"light" "100" -"origin" "-592 -732 -16" -} -{ -"light" "95" -"classname" "light" -"origin" "-2216 -1664 244" -} -{ -"classname" "light" -"light" "150" -"origin" "-2348 -1668 160" -} -{ -"classname" "light" -"light" "80" -"origin" "-2784 -1280 212" -} -{ -"classname" "light" -"light" "100" -"origin" "-2784 -1236 280" -} -{ -"classname" "light" -"light" "100" -"origin" "-2784 -1132 280" -} -{ -"origin" "-1840 -1464 256" -"classname" "light" -"light" "95" -} -{ -"light" "110" -"classname" "light" -"origin" "-1084 -1236 272" -} -{ -"light" "90" -"classname" "light" -"origin" "-764 -824 72" -} -{ -"light" "90" -"classname" "light" -"origin" "-608 -824 72" -} -{ -"classname" "light" -"light" "90" -"origin" "-824 -928 72" -} -{ -"classname" "light" -"light" "110" -"origin" "-588 -448 -12" -} -{ // b#2: was waste1's spot -"classname" "info_player_start" -"angle" "270" -"origin" "-592 -648 -64" -"targetname" "waste2" -} -{ -"model" "*46" -"_minlight" ".18" -"target" "t67" -"classname" "func_door" -"angle" "-1" -} -{ -"origin" "-2784 -1100 212" -"light" "80" -"classname" "light" -} -{ -"origin" "-2784 -1332 236" -"light" "100" -"classname" "light" -} -{ -"model" "*47" -"origin" "-2480 -1668 -140" -"_minlight" "0.15" -"dmg" "100" -"spawnflags" "17" -"speed" "150" -"classname" "func_rotating" -} -{ -"model" "*48" -"origin" "-2480 -1668 -180" -"classname" "func_rotating" -"speed" "250" -"spawnflags" "3" -"dmg" "100" -"_minlight" "0.15" -} -{ // b#2: was the waste2 spot -"classname" "info_player_start" -"angle" "270" -"targetname" "waste1" -"origin" "-2784 -1260 180" -} -{ -"light" "120" -"classname" "light" -"origin" "-344 -2576 -208" -} -{ -"light" "120" -"classname" "light" -"origin" "-508 -2572 -208" -} -{ -"classname" "light" -"light" "120" -"origin" "-128 -2572 -160" -} -{ -"light" "145" -"origin" "-832 -1416 36" -"classname" "light" -} -{ -"model" "*49" -"wait" "-1" -"spawnflags" "8" -"classname" "func_door" -"angle" "90" -"team" "ky1" -"targetname" "t73" -"_minlight" ".18" -} -{ -"light" "130" -"classname" "light" -"origin" "-1864 -2744 -208" -} -{ -"light" "130" -"classname" "light" -"origin" "-1704 -2952 -208" -} -{ -"light" "130" -"classname" "light" -"origin" "-1480 -2944 -208" -} -{ -"light" "130" -"classname" "light" -"origin" "-1184 -2952 -208" -} -{ -"light" "130" -"classname" "light" -"origin" "-992 -2944 -208" -} -{ -"light" "130" -"classname" "light" -"origin" "-920 -2864 -208" -} -{ -"light" "130" -"classname" "light" -"origin" "-928 -2688 -208" -} -{ -"classname" "light" -"light" "130" -"origin" "-1864 -2528 -208" -} -{ -"light" "100" -"classname" "light" -"origin" "-1604 -1888 -236" -} -{ -"light" "100" -"classname" "light" -"origin" "-820 -1380 -236" -} -{ -"classname" "light" -"light" "100" -"origin" "-1496 -1776 -236" -} -{ -"light" "100" -"classname" "light" -"origin" "-808 -1664 -72" -} -{ -"light" "100" -"classname" "light" -"origin" "-808 -1816 -72" -} -{ -"light" "100" -"classname" "light" -"origin" "-920 -1892 -72" -} -{ -"light" "100" -"classname" "light" -"origin" "-1124 -1892 -72" -} -{ -"light" "100" -"classname" "light" -"origin" "-1364 -1892 -72" -} -{ -"light" "100" -"classname" "light" -"origin" "-1612 -1888 -72" -} -{ -"light" "100" -"classname" "light" -"origin" "-1612 -1708 -72" -} -{ -"classname" "light" -"light" "100" -"origin" "-812 -1544 -124" -} -{ -"light" "170" -"classname" "light" -"origin" "-480 -1864 240" -} -{ -"light" "200" -"classname" "light" -"origin" "-480 -2112 240" -} -{ -"light" "180" -"classname" "light" -"origin" "-480 -2496 240" -} -{ -"light" "180" -"classname" "light" -"origin" "-136 -2504 240" -} -{ -"light" "110" -"origin" "-480 -1432 172" -"classname" "light" -} -{ -"model" "*50" -"team" "td5" -"spawnflags" "8" -"classname" "func_door" -"angle" "180" -"sounds" "4" -"_minlight" ".18" -} -{ -"origin" "-480 -2216 404" -"classname" "light" -"light" "150" -} -{ -"model" "*51" -"speed" "165" -"classname" "func_train" -"sounds" "1" -"targetname" "t5" -"dmg" "9999" -"target" "t35" -} -{ -"classname" "path_corner" -"origin" "-328 -2096 80" -"targetname" "t36" -"target" "t35" -} -{ -"classname" "path_corner" -"origin" "-328 -2096 -64" -"targetname" "t35" -"target" "t36" -} -{ -"light" "150" -"classname" "light" -"origin" "-480 -1960 404" -} -{ -"light" "150" -"classname" "light" -"origin" "-480 -1736 404" -} -{ -"light" "110" -"classname" "light" -"origin" "-480 -1528 196" -} -{ -"origin" "-244 -2008 10" -"classname" "light" -"light" "160" -} -{ -"origin" "-56 -1896 404" -"light" "80" -"classname" "light" -} -{ -"origin" "-40 -2528 404" -"classname" "light" -"light" "80" -} -{ -"origin" "-40 -2256 404" -"classname" "light" -"light" "80" -} -{ -"origin" "-40 -2144 404" -"classname" "light" -"light" "80" -} -{ -"origin" "-480 -1648 236" -"classname" "light" -"light" "80" -} -{ -"origin" "-824 -1076 -16" -"light" "100" -"classname" "light" -} -{ -"origin" "-816 -1536 152" -"light" "145" -"classname" "light" -} -{ -"origin" "-1720 -1464 184" -"classname" "light" -"light" "140" -} -{ -"origin" "-1624 -1568 176" -"classname" "light" -"light" "145" -} -{ -"origin" "-1624 -1712 176" -"classname" "light" -"light" "145" -} -{ -"origin" "-1496 -1760 176" -"classname" "light" -"light" "140" -} -{ -"origin" "-1600 -1872 176" -"classname" "light" -"light" "145" -} -{ -"origin" "-1472 -1888 176" -"classname" "light" -"light" "145" -} -{ -"origin" "-1088 -1904 176" -"classname" "light" -"light" "145" -} -{ -"origin" "-832 -1904 176" -"classname" "light" -"light" "145" -} -{ -"origin" "-816 -1752 176" -"classname" "light" -"light" "145" -} -{ -"classname" "light" -"origin" "-824 -1208 212" -"light" "150" -} -{ -"classname" "light" -"origin" "-648 -1232 172" -"light" "110" -} -{ -"classname" "light" -"light" "100" -"origin" "-824 -1016 -16" -} -{ -"origin" "-1172 -1268 272" -"classname" "light" -"light" "110" -} -{ -"light" "110" -"origin" "-1176 -1460 272" -"classname" "light" -} -{ -"light" "110" -"classname" "light" -"origin" "-1344 -1464 272" -} -{ -"light" "95" -"classname" "light" -"origin" "-1896 -1648 256" -} -{ -"light" "120" -"origin" "-1880 -1240 160" -"classname" "light" -} -{ -"light" "120" -"origin" "-1944 -712 312" -"classname" "light" -} -{ -"light" "120" -"origin" "-1864 -976 160" -"classname" "light" -} -{ -"light" "100" -"origin" "-1984 -860 232" -"classname" "light" -} -{ -"light" "120" -"origin" "-2360 -976 160" -"classname" "light" -} -{ -"light" "120" -"origin" "-2352 -1224 160" -"classname" "light" -} -{ -"light" "120" -"origin" "-2112 -1232 160" -"classname" "light" -} -{ -"model" "*52" -"team" "thor1" -"angle" "180" -"classname" "func_door" -"_minlight" ".18" -} -{ -"light" "120" -"classname" "light" -"origin" "-2280 -712 312" -} -{ -"classname" "light" -"origin" "-2184 -740 136" -"light" "150" -} -{ -"classname" "light" -"origin" "-2184 -640 248" -"light" "125" -} -{ -"classname" "light" -"origin" "-2040 -628 248" -"light" "125" -} -{ -"origin" "-440 -2288 -256" -"light" "64" -"classname" "light" -} -{ -"origin" "-608 -2008 -256" -"classname" "light" -"light" "64" -} -{ -"origin" "-508 -2012 -256" -"classname" "light" -"light" "64" -} -{ -"origin" "-440 -2024 -256" -"classname" "light" -"light" "64" -} -{ -"origin" "-444 -2100 -256" -"classname" "light" -"light" "64" -} -{ -"origin" "-440 -2164 -256" -"classname" "light" -"light" "64" -} -{ -"origin" "-440 -2224 -256" -"classname" "light" -"light" "64" -} -{ -"origin" "176 -2768 224" -"light" "100" -"classname" "light" -} -{ -"origin" "280 -2768 224" -"classname" "light" -"light" "100" -} -{ -"origin" "280 -2856 224" -"classname" "light" -"light" "100" -} -{ -"origin" "176 -2856 224" -"classname" "light" -"light" "100" -} -{ -"origin" "-88 -2864 232" -"light" "80" -"classname" "light" -} -{ -"origin" "160 -2672 232" -"classname" "light" -"light" "80" -} -{ -"origin" "104 -2672 232" -"classname" "light" -"light" "100" -} -{ -"origin" "-96 -2752 232" -"classname" "light" -"light" "80" -} -{ -"origin" "-400 -2656 232" -"classname" "light" -"light" "80" -} -{ -"origin" "-160 -2864 232" -"classname" "light" -"light" "80" -} -{ -"origin" "-160 -2752 232" -"light" "80" -"classname" "light" -} -{ -"origin" "-344 -2880 232" -"light" "80" -"classname" "light" -} -{ -"origin" "-416 -2880 232" -"light" "80" -"classname" "light" -} -{ -"origin" "-304 -2904 392" -"light" "64" -"classname" "light" -} -{ -"origin" "-312 -2680 392" -"classname" "light" -"light" "64" -} -{ -"origin" "-312 -2792 392" -"classname" "light" -"light" "64" -} -{ -"origin" "128 -2672 392" -"light" "80" -"classname" "light" -} -{ -"origin" "128 -2784 392" -"light" "64" -"classname" "light" -} -{ -"origin" "136 -2896 392" -"classname" "light" -"light" "64" -} -{ -"origin" "-16 -2672 392" -"light" "64" -"classname" "light" -} -{ -"origin" "-16 -2784 392" -"light" "64" -"classname" "light" -} -{ -"origin" "-8 -2896 392" -"classname" "light" -"light" "64" -} -{ -"origin" "-176 -2680 392" -"light" "64" -"classname" "light" -} -{ -"origin" "-168 -2904 392" -"classname" "light" -"light" "64" -} -{ -"targetname" "t2" -"origin" "-192 -2368 24" -"classname" "target_explosion" -"spawnflags" "2048" // b#4: added this -} -{ -"delay" ".4" -"targetname" "t2" -"origin" "-256 -2320 40" -"classname" "target_explosion" -"spawnflags" "2048" // b#4: added this -} -{ // b#7 -"classname" "trigger_always" -"spawnflags" "1792" -"target" "t4" -} \ No newline at end of file diff --git a/stuff/mapfixes/juggernaut/jug13@7ed4.ent b/stuff/mapfixes/juggernaut/jug13@7ed4.ent deleted file mode 100644 index b7041aa2c..000000000 --- a/stuff/mapfixes/juggernaut/jug13@7ed4.ent +++ /dev/null @@ -1,2762 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Removed unused entities (b#1) -// -// 2. Renamed targets for clarity -// g_key* -> rkey* (red key) -// s_key* -> bkey* (blue key) -// bkey -> bkey_tr -// r_key* -> pkey* (security pass) -// -// 3. Fixed broken trigger chain due to r_cl / r_key_cl confusion (b#3) -// Renamed both to pkey_cl. -// -// 4. Shootable button that reveals red key remains permanently pressed (b#4) -// -// 5. Cleared unused 4096 spawnflag (b#5) -// -// 6. Fixed help icon appearing on every savegame load (b#6) -{ -"sky" "env4_" -"light" "0" -"sounds" "5" -"message" "THE CIVIC CENTER" -"classname" "worldspawn" -} -{ -"origin" "139 196 -128" -"angle" "270" -"classname" "info_player_start" -} -{ -"origin" "-264 128 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-280 128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-248 128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-280 -128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-248 -128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-264 -128 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "264 128 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "280 128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "248 128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "280 -128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "248 -128 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "264 -128 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-128 -248 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-128 -280 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "128 -248 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "128 -280 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-128 -264 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "128 -264 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-128 248 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-128 280 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "128 248 352" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "128 280 352" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-128 264 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "128 264 96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "202 122 332" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "202 -126 332" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "88 -32 592" -"target" "bkey_cl" -"classname" "key_blue_key" -} -{ -"origin" "-176 0 360" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-72 -80 432" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "88 32 336" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"target" "bkey" -"targetname" "bkey_cl" -"classname" "trigger_relay" -} -{ -"origin" "88 32 592" -"classname" "key_red_key" -} -{ -"target" "overhead" -"targetname" "bkey1" -"classname" "trigger_relay" -} -{ -"target" "bkey1" -"targetname" "bkey0" -"classname" "trigger_relay" -} -{ -"delay" "1" -"target" "bkey" -"targetname" "bkey1" -"classname" "trigger_relay" -} -{ -"target" "rkey1" -"targetname" "rkey0" -"classname" "trigger_relay" -"spawnflags" "3840" // b#1: added this -} -{ -"target" "overhead" -"targetname" "rkey1" -"classname" "trigger_relay" -} -{ -"delay" "1" -"target" "rkey" -"targetname" "rkey1" -"classname" "trigger_relay" -} -{ -"origin" "56 -40 612" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"delay" "1" -"target" "overhead" -"targetname" "bkey_cl" -"classname" "trigger_relay" -} -{ -"target" "rkey" -"targetname" "rkey_cl" -"classname" "trigger_relay" -} -{ -"delay" "1" -"target" "overhead" -"targetname" "rkey_cl" -"classname" "trigger_relay" -} -{ -"origin" "56 32 612" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*1" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "overhead" -"spawnflags" "32" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*2" -"dmg" "1000" -"lip" "160" -"wait" "4" -"sounds" "4" -"speed" "200" -"targetname" "rkey" -"spawnflags" "32" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*3" -"dmg" "1000" -"lip" "160" -"wait" "4" -"sounds" "4" -"speed" "200" -"targetname" "bkey" -"spawnflags" "32" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*4" -"dmg" "1000" -"lip" "160" -"wait" "4" -"sounds" "4" -"speed" "200" -"targetname" "pkey" -"spawnflags" "32" -"angle" "-2" -"classname" "func_door" -} -{ -"origin" "88 0 592" -"classname" "key_pass" -} -{ -"origin" "0 632 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-288 632 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-576 632 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-576 -632 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-288 -632 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "0 -632 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-576 0 296" -"target" "sham2" -"targetname" "sham1" -"classname" "path_corner" -} -{ -"origin" "0 0 296" -"target" "sham3" -"targetname" "sham2" -"classname" "path_corner" -} -{ -"origin" "0 -576 296" -"_color" ".7 .4 0" -"target" "sham4" -"targetname" "sham3" -"classname" "path_corner" -} -{ -"origin" "-576 576 296" -"target" "sham1" -"targetname" "sham0" -"classname" "path_corner" -} -{ -"origin" "-576 -576 296" -"_color" ".7 .4 0" -"target" "sham5" -"targetname" "sham4" -"classname" "path_corner" -} -{ -"origin" "-576 0 296" -"target" "sham6" -"targetname" "sham5" -"classname" "path_corner" -} -{ -"origin" "0 0 296" -"target" "sham7" -"targetname" "sham6" -"classname" "path_corner" -} -{ -"origin" "0 576 296" -"target" "sham0" -"targetname" "sham7" -"classname" "path_corner" -} -{ -"origin" "864 -56 64" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "864 504 64" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"model" "*5" -"wait" "-1" // b#4: 0.2 -> -1 -"target" "rkey1" // b#1: counter -> rkey1 -"health" "25" -"lip" "0" -"sounds" "2" -"speed" "100" -"angle" "270" -"message" "The red key is in the Jupiter Room." // b#1: moved from trigger_relay -"classname" "func_button" -} -{ -"target" "rkey1" // b#1: rkey0 -> rkey1 -"targetname" "rkey0" // b#1: counter -> rkey0 -"classname" "trigger_relay" // b#1: counter -> relay -"spawnflags" "3840" // b#1: added this -} -{ -"origin" "864 0 192" -"_color" ".7 .4 0" -"style" "0" -"light" "100" -"classname" "light" -} -{ -"origin" "864 448 192" -"_color" ".7 .4 0" -"style" "0" -"light" "100" -"classname" "light" -} -{ -"origin" "648 448 64" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "1080 448 64" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*7" -"target" "lift1" -"lip" "0" -"wait" "6" -"sounds" "2" -"speed" "100" -"angle" "270" -"classname" "func_button" -} -{ -"origin" "910 650 196" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "818 650 196" -"_color" ".7 .4 0" -"classname" "light" -} -{ -"origin" "864 608 47" -"_color" ".7 .4 0" -"style" "0" -"light" "125" -"classname" "light" -} -{ -"origin" "864 712 -88" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "674 670 148" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "674 834 148" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "1054 834 148" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "1054 670 148" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*8" -"targetname" "lift1" -"dmg" "25" -"lip" "-120" -"wait" "2" -"sounds" "4" -"speed" "100" -"angle" "-2" -"classname" "func_door" -} -{ -"origin" "790 954 148" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "938 954 148" -"_color" ".7 .4 0" -"classname" "light" -} -{ -"origin" "864 808 88" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1248 552 -8" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "480 552 -8" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1024 576 -24" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "704 576 -24" -"_color" ".7 .4 0" -"classname" "light" -} -{ -"origin" "1056 896 -112" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "672 896 -112" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*9" -"message" "Find a switch." -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "2nd" -"spawnflags" "2048" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*10" -"message" "Find a switch." -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "2nd" -"spawnflags" "2048" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*11" -"message" "Opens nearby." -"lip" "0" -"wait" "3" -"sounds" "1" -"speed" "100" -"spawnflags" "2048" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*12" -"message" "Opens nearby." -"lip" "0" -"wait" "3" -"sounds" "1" -"speed" "100" -"spawnflags" "2048" -"angle" "270" -"classname" "func_door" -} -{ -"origin" "-160 160 -64" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-160 -160 -64" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "392 1 -96" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-218 90 404" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-218 -90 404" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "206 122 84" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "206 -122 84" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-208 -208 96" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-208 208 96" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"model" "*13" -"sounds" "3" -"count" "2" -"target" "1st" -"lip" "0" -"wait" "4" -"speed" "100" -"targetname" "1st_c" -"classname" "trigger_counter" -"spawnflags" "3840" // b#1: added this -} -{ -"origin" "-1462 -82 340" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1462 82 340" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1610 82 340" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1610 -82 340" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1640 200 8" -"_color" ".7 .4 0" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-1640 -200 8" -"_color" ".7 .4 0" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-1464 0 8" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"model" "*14" -"height" "288" -"lip" "0" -"wait" "4" -"sounds" "2" -"speed" "100" -"classname" "func_plat" -} -{ -"origin" "-1344 0 -8" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*15" -"style" "32" -//"target" "shaft" // b#1: unused target -"lip" "0" -"wait" "1" -"classname" "trigger_multiple" -"spawnflags" "3840" // b#1: added this -} -{ -"origin" "-1344 0 400" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1312 192 112" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1312 -192 112" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*16" -"message" "A door has opened." -"target" "2nd" -"lip" "0" -"wait" "-1" -"sounds" "2" -"speed" "100" -"angle" "180" -"classname" "func_button" -} -{ -"origin" "-1848 -352 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1848 0 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1848 352 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1344 0 80" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*17" -"delay" "2" -"targetname" "rkey_cl" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"spawnflags" "2048" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*18" -"target" "6_cnt" -"lip" "0" -"wait" "-1" -"sounds" "3" -"speed" "100" -"angle" "270" -"classname" "func_button" -} -{ -"model" "*19" -"target" "6_cnt" -"lip" "0" -"wait" "-1" -"sounds" "3" -"speed" "100" -"angle" "90" -"classname" "func_button" -} -{ -"model" "*20" -"target" "6_cnt" -"lip" "0" -"wait" "-1" -"sounds" "3" -"speed" "100" -"classname" "func_button" -} -{ -"model" "*21" -"target" "6_cnt" -"lip" "0" -"wait" "-1" -"sounds" "3" -"speed" "100" -"angle" "180" -"classname" "func_button" -} -{ -"model" "*22" -"target" "6_cnt" -"lip" "0" -"wait" "-1" -"sounds" "3" -"speed" "100" -"angle" "-1" -"classname" "func_button" -} -{ -"model" "*23" -"target" "6_cnt" -"lip" "0" -"wait" "-1" -"sounds" "3" -"speed" "100" -"angle" "-2" -"classname" "func_button" -} -{ -"model" "*24" -"count" "6" -"target" "bkey0" -"message" "The blue key is available." -"wait" "4" -"targetname" "6_cnt" -"classname" "trigger_counter" -} -{ -"origin" "-1274 70 108" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1274 -54 108" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"model" "*25" -"height" "88" -"lip" "0" -"wait" "4" -"sounds" "1" -"speed" "100" -"classname" "func_plat" -} -{ -"origin" "-1200 192 416" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1200 -192 416" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1200 -64 416" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1360 -296 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1616 -296 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1200 -352 432" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1648 -16 -184" -"_color" ".7 .4 0" -"target" "brij1" -"targetname" "brij0" -"classname" "path_corner" -} -{ -"origin" "-1200 -352 224" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-1200 352 224" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-1360 296 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1616 296 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-928 408 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-928 -56 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-928 -72 32" -"_color" ".7 .4 0" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-352 -1 -24" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-544 0 -24" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"model" "*26" -"delay" "2" -"message" "The sewer doors open elsewhere..." -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "end" -"spawnflags" "2048" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*27" -"message" "The sewer doors open elsewhere..." -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "end" -"spawnflags" "2048" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*28" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "pkey_cl" // b#3: r_cl -> pkey_cl -"angle" "90" -"classname" "func_door" -} -{ -"origin" "8 928 200" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*29" -"target" "pkey1" // b#1: pkey0 -> pkey1 -"message" "The passkey is available." -"lip" "0" -"wait" "-1" -"sounds" "2" -"speed" "100" -"angle" "180" -"classname" "func_button" -} -{ -"origin" "-320 832 340" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"target" "pkey1" -"targetname" "pkey0" -"classname" "trigger_relay" -"spawnflags" "3840" // b#1: added this -} -{ -"delay" "1" -"target" "pkey" -"targetname" "pkey1" -"classname" "trigger_relay" -} -{ -"target" "overhead" -"targetname" "pkey1" -"classname" "trigger_relay" -} -{ -"target" "pkey" -"targetname" "pkey_cl" // b#3: r_key_cl -> pkey_cl -"classname" "trigger_relay" -} -{ -"delay" "1" -"target" "overhead" -"targetname" "pkey_cl" // b#3: r_key_cl -> pkey_cl -"classname" "trigger_relay" -} -{ -"model" "*30" -"targetname" "bluedoor" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"spawnflags" "2064" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*31" -"delay" "2" -"targetname" "bluedoor" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"spawnflags" "2064" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*32" -"targetname" "bluedoor" -"delay" "2" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"spawnflags" "2056" -"angle" "90" -"classname" "func_door" -} -{ -"model" "*33" -"delay" "2" -"targetname" "bluedoor" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"spawnflags" "2056" -"angle" "270" -"classname" "func_door" -} -{ -"model" "*34" -"target" "keyed" -"lip" "0" -"wait" "-1" -"sounds" "2" -"speed" "100" -"angle" "180" -"classname" "func_button" -} -{ -"origin" "922 810 -60" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "810 810 -60" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*35" -"target" "keyed" -"lip" "0" -"wait" "-1" -"sounds" "2" -"speed" "100" -"classname" "func_button" -} -{ -"model" "*36" -"message" "A door is now open!" -"count" "2" -"style" "32" -"target" "end" -"lip" "0" -"wait" "4" -"speed" "100" -"targetname" "keyed" -"classname" "trigger_counter" -} -{ -"origin" "-192 728 288" -"_color" ".7 .4 0" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-192 1128 288" -"_color" ".7 .4 0" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-104 1056 167" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-160 776 248" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "0 1040 464" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"target" "f1" -"angle" "30" -"classname" "light" -} -{ -"origin" "0 1040 448" -"_color" ".7 .4 0" -"style" "0" -"light" "100" -"classname" "light" -} -{ -"origin" "0 1040 312" -"_color" ".7 .4 0" -"targetname" "f1" -"style" "32" -"light" "200" -"classname" "light" -} -{ -"origin" "0 816 312" -"_color" ".7 .4 0" -"targetname" "f2" -"style" "33" -"light" "200" -"classname" "light" -} -{ -"origin" "0 816 448" -"_color" ".7 .4 0" -"style" "0" -"light" "100" -"classname" "light" -} -{ -"origin" "0 816 464" -"_color" ".7 .4 0" -"style" "0" -"light" "300" -"target" "f2" -"angle" "30" -"classname" "light" -} -{ -"model" "*37" -"message" "Opens nearby." -"dmg" "20" -"lip" "0" -"wait" "4" -"sounds" "1" -"speed" "100" -"spawnflags" "2048" -"angle" "180" -"classname" "func_door" -} -{ -"model" "*38" -"message" "Opens nearby." -"dmg" "20" -"lip" "0" -"wait" "4" -"sounds" "1" -"speed" "100" -"spawnflags" "2048" -"classname" "func_door" -} -{ -"origin" "864 1008 136" -"_color" ".7 .4 0" -"style" "0" -"light" "180" -"classname" "light" -} -{ -"origin" "768 1008 136" -"_color" ".7 .4 0" -"style" "0" -"light" "180" -"classname" "light" -} -{ -"origin" "960 1008 136" -"_color" ".7 .4 0" -"style" "0" -"light" "180" -"classname" "light" -} -{ -"origin" "1056 1008 136" -"_color" ".7 .4 0" -"style" "0" -"light" "180" -"classname" "light" -} -{ -"origin" "1064 1056 72" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "8 928 448" -"_color" ".7 .4 0" -"style" "0" -"light" "125" -"classname" "light" -} -{ -"origin" "-320 1024 340" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*39" -"height" "128" -"lip" "0" -"wait" "4" -"sounds" "2" -"speed" "100" -"classname" "func_plat" -} -{ -"origin" "312 928 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "312 576 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-522 138 412" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1072 -64 416" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1200 64 416" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1072 64 416" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-150 214 228" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-150 -214 228" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "0 -240 152" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "0 240 152" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-32 784 360" -"_color" ".7 .4 0" -"style" "0" -"light" "120" -"classname" "light" -} -{ -"origin" "128 928 488" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-152 0 40" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "592 -56 64" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "0 -320 168" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "0 320 168" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "344 -576 352" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-984 0 -96" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"model" "*40" -"target" "brij0" -"lip" "0" -"wait" "4" -"sounds" "1" -"speed" "50" -"targetname" "2nd" -"classname" "func_train" -} -{ -"origin" "-56 0 200" -"_color" ".7 .4 0" -"classname" "light" -} -{ -"origin" "-522 -130 412" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-872 -352 32" -"_color" ".7 .4 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-1032 0 64" -"_color" ".7 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1244 0 292" -"_color" ".7 .4 0" -"style" "0" -"light" "100" -"classname" "light" -} -{ -"origin" "-480 0 328" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-800 0 328" -"_color" ".7 .4 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1648 -16 -128" -"_color" ".7 .4 0" -"wait" "-1" -"target" "brij1" -"targetname" "brij1" -"classname" "path_corner" -} -{ -"model" "*41" -"delay" "1" -"target" "jug14" -"spawnflags" "2048" -"classname" "trigger_multiple" -} -{ -"origin" "0 908 240" -"map" "jug14" -"targetname" "jug14" -"classname" "target_changelevel" -} -{ -"origin" "-1225 -306 380" -"item" "key_red_key" -"wait" "0.2" -"target" "rkey_cl" -"targetname" "5butt" -"classname" "trigger_key" -} -{ -"model" "*42" -"target" "5butt" -"spawnflags" "2048" -"classname" "trigger_multiple" -} -{ -"origin" "-104 841 178" -"item" "key_pass" -"wait" "0.2" -"delay" "1" -"target" "pkey_cl" // b#3: r_cl -> pkey_cl -"targetname" "endkey" -"classname" "trigger_key" -} -{ -"model" "*43" -"wait" "0.2" -"target" "endkey" -"spawnflags" "2048" -"classname" "trigger_multiple" -} -{ -"model" "*44" -"lip" "0" -"wait" "-1" -"sounds" "1" -"speed" "100" -"targetname" "pkey_cl" // b#3: r_cl -> pkey_cl -"spawnflags" "2048" -"angle" "270" -"classname" "func_door" -} -{ -"origin" "684 845 -82" -"item" "key_blue_key" -"target" "bluedoor" -"targetname" "bkey_tr" -"classname" "trigger_key" -} -{ -"model" "*45" -"wait" "0.2" -"target" "bkey_tr" -"spawnflags" "2048" -"classname" "trigger_multiple" -} -{ -"model" "*46" -"wait" "0.2" -"target" "bkey_tr" -"spawnflags" "2048" -"classname" "trigger_multiple" -} -{ -"origin" "-166 188 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-82" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "-163 -144 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-86" -"classname" "ammo_grenades" -} -{ -"origin" "178 -182 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "24" -"classname" "item_armor_combat" -} -{ -"origin" "-829 -4 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "1" -"classname" "monster_soldier_light" -} -{ -"origin" "-762 -1 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "1" -"classname" "monster_soldier_light" -} -{ -"origin" "-641 1 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "1" -"classname" "monster_soldier_light" -} -{ -"origin" "-539 2 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "-431 1 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "-332 0 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "-928 -349 -23" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "92" -"classname" "monster_infantry" -} -{ -"origin" "-1177 -355 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "3" -"classname" "monster_gunner" -} -{ -"origin" "-1739 -6 312" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "5" -"classname" "monster_gunner" -} -{ -"origin" "0 -335 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-87" -"classname" "monster_gunner" -} -{ -"origin" "0 333 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "90" -"classname" "monster_gunner" -} -{ -"origin" "-167 1 320" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "monster_gunner" -} -{ -"origin" "247 873 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-91" -"classname" "monster_soldier_light" -} -{ -"origin" "244 790 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-91" -"classname" "monster_soldier_light" -} -{ -"origin" "241 697 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-91" -"classname" "monster_soldier_light" -} -{ -"origin" "237 611 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-102" -"classname" "monster_soldier_light" -} -{ -"origin" "-1757 264 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-58" -"classname" "monster_soldier_light" -} -{ -"origin" "-1584 299 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-98" -"classname" "monster_soldier_light" -} -{ -"origin" "-1746 -9 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "1" -"classname" "monster_soldier_light" -} -{ -"origin" "-1751 -305 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "34" -"classname" "monster_soldier_light" -} -{ -"origin" "-1543 -331 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "59" -"classname" "monster_soldier_light" -} -{ -"origin" "-1365 -190 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"classname" "monster_soldier_light" -} -{ -"origin" "-580 -437 312" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "89" -"classname" "monster_mutant" -} -{ -"origin" "-578 428 312" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-87" -"classname" "monster_mutant" -} -{ -"origin" "839 6 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "178" -"classname" "monster_soldier_light" -} -{ -"origin" "756 8 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "178" -"classname" "monster_soldier_light" -} -{ -"origin" "636 10 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "178" -"classname" "monster_soldier_light" -} -{ -"origin" "491 13 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "178" -"classname" "monster_soldier_light" -} -{ -"origin" "6 -331 152" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "177" -"classname" "monster_gunner" -} -{ -"origin" "4 -231 152" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "91" -"classname" "monster_gunner" -} -{ -"origin" "-12 328 152" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-179" -"classname" "monster_gunner" -} -{ -"origin" "-1 199 152" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-92" -"classname" "monster_gunner" -} -{ -"origin" "-1068 -44 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-149" -"classname" "monster_soldier_light" -} -{ -"origin" "-1069 87 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "133" -"classname" "monster_soldier_light" -} -{ -"origin" "-1210 377 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-88" -"classname" "monster_soldier_light" -} -{ -"origin" "-1387 190 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-11" -"classname" "monster_soldier_light" -} -{ -"origin" "-1475 309 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-108" -"classname" "monster_soldier_light" -} -{ -"origin" "-1751 72 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "-1742 -154 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-12" -"classname" "monster_soldier_light" -} -{ -"origin" "-1689 343 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "item_health_small" -} -{ -"origin" "-1624 341 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "item_health_small" -} -{ -"origin" "-1537 338 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1445 337 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1358 335 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1279 334 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1193 332 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1107 330 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1021 329 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-942 327 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-1293 354 312" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-177" -"classname" "monster_mutant" -} -{ -"origin" "-955 366 312" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-179" -"classname" "monster_mutant" -} -{ -"origin" "-922 7 312" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "89" -"classname" "monster_mutant" -} -{ -"origin" "475 434 -103" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-1" -"classname" "monster_mutant" -} -{ -"origin" "1232 459 -103" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "179" -"classname" "monster_mutant" -} -{ -"origin" "1049 906 -135" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-88" -"classname" "monster_infantry" -} -{ -"origin" "898 732 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-118" -"classname" "monster_soldier_light" -} -{ -"origin" "819 720 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-54" -"classname" "monster_soldier_light" -} -{ -"origin" "-556 -594 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "item_health_small" -} -{ -"origin" "-491 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-411 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-331 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-252 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-172 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-99 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-26 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "45 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "117 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "188 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "279 -595 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_armor_combat" -} -{ -"origin" "862 749 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "86" -"classname" "monster_medic" -} -{ -"origin" "989 832 168" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "89" -"classname" "item_armor_combat" -} -{ -"origin" "987 623 168" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "item_health_large" -} -{ -"origin" "744 611 168" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "171" -"classname" "item_health_large" -} -{ -"origin" "738 806 168" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "93" -"classname" "item_armor_combat" -} -{ -"origin" "315 203 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "89" -"classname" "item_health_small" -} -{ -"origin" "315 296 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "89" -"classname" "item_health_small" -} -{ -"origin" "217 317 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "item_health_small" -} -{ -"origin" "131 319 -104" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "item_health_small" -} -{ -"origin" "51 320 -70" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "item_health_small" -} -{ -"origin" "-34 320 -34" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-178" -"classname" "item_health_small" -} -{ -"origin" "-112 317 -2" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-178" -"classname" "item_health_small" -} -{ -"origin" "-190 316 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-178" -"classname" "item_health_small" -} -{ -"origin" "-281 314 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-178" -"classname" "item_health_small" -} -{ -"origin" "-325 125 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-89" -"classname" "item_health_small" -} -{ -"origin" "-325 41 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "item_health_small" -} -{ -"origin" "-325 -37 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "item_health_small" -} -{ -"origin" "-325 -121 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "item_health_small" -} -{ -"origin" "-325 -199 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "item_health_small" -} -{ -"origin" "-325 -277 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "item_health_small" -} -{ -"origin" "-223 -322 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "2" -"classname" "item_health_small" -} -{ -"origin" "-96 -318 -3" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-17 -316 -42" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "54 -316 -66" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "125 -316 -97" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "223 -316 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "301 -316 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "item_health_small" -} -{ -"origin" "-211 -4 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "2" -"classname" "ammo_bullets" -} -{ -"origin" "-133 0 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "2" -"classname" "ammo_bullets" -} -{ -"origin" "16 2 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "ammo_bullets" -} -{ -"origin" "142 0 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "ammo_bullets" -} -{ -"origin" "311 0 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "weapon_chaingun" -} -{ -"origin" "-939 4 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-91" -"classname" "ammo_bullets" -} -{ -"origin" "-939 -188 -65" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-87" -"classname" "ammo_bullets" -} -{ -"origin" "-1193 -93 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "91" -"classname" "ammo_bullets" -} -{ -"origin" "-1194 -16 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "91" -"classname" "ammo_bullets" -} -{ -"origin" "-1195 55 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "91" -"classname" "ammo_bullets" -} -{ -"origin" "-1044 14 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "item_health_large" -} -{ -"origin" "-1404 343 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "91" -"classname" "item_health_large" -} -{ -"origin" "-1566 -160 -55" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-96" -"classname" "item_armor_combat" -} -{ -"origin" "-1569 176 -55" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "88" -"classname" "item_armor_combat" -} -{ -"origin" "-1799 356 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "93" -"classname" "ammo_grenades" -} -{ -"origin" "-1812 -366 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-88" -"classname" "ammo_grenades" -} -{ -"origin" "-1676 351 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "ammo_grenades" -} -{ -"origin" "-1175 359 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "171" -"classname" "weapon_hyperblaster" -} -{ -"origin" "-748 -1 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "ammo_grenades" -} -{ -"origin" "-577 3 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "2" -"classname" "ammo_grenades" -} -{ -"origin" "-325 -325 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-2" -"classname" "monster_soldier_light" -} -{ -"origin" "-199 -327 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "-72 -327 -16" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "40 -327 -61" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "138 -327 -104" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"classname" "monster_soldier_light" -} -{ -"origin" "295 -300 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "84" -"classname" "monster_soldier_light" -} -{ -"origin" "-163 310 23" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "monster_soldier_light" -} -{ -"origin" "-84 307 -10" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "monster_soldier_light" -} -{ -"origin" "-5 304 -42" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "monster_soldier_light" -} -{ -"origin" "81 301 -83" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-1" -"classname" "monster_soldier_light" -} -{ -"origin" "323 280 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-90" -"classname" "monster_soldier_light" -} -{ -"origin" "147 1 24" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "178" -"classname" "monster_infantry" -} -{ -"origin" "-366 367 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-36" -"classname" "ammo_grenades" -} -{ -"origin" "-363 -367 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-139" -"classname" "ammo_grenades" -} -{ -"origin" "563 14 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "89" -"classname" "ammo_cells" -} -{ -"origin" "707 9 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "94" -"classname" "ammo_cells" -} -{ -"origin" "317 0 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "item_health_large" -} -{ -"origin" "555 6 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "177" -"classname" "item_health_large" -} -{ -"origin" "856 175 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-94" -"classname" "ammo_grenades" -} -{ -"origin" "1051 614 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-178" -"classname" "item_health_large" -} -{ -"origin" "660 611 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "176" -"classname" "item_health_large" -} -{ -"origin" "-603 324 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-89" -"classname" "monster_soldier_light" -} -{ -"origin" "-602 213 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-89" -"classname" "monster_soldier_light" -} -{ -"origin" "-579 -339 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "89" -"classname" "monster_soldier_light" -} -{ -"origin" "-575 -179 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "88" -"classname" "monster_soldier_light" -} -{ -"origin" "-122 -572 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-179" -"classname" "monster_soldier_light" -} -{ -"origin" "-226 -570 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "179" -"classname" "monster_soldier_light" -} -{ -"origin" "-409 -567 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "179" -"classname" "monster_soldier_light" -} -{ -"origin" "-190 578 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "monster_soldier_light" -} -{ -"origin" "-426 570 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-177" -"classname" "monster_soldier_light" -} -{ -"origin" "1 8 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-176" -"classname" "item_health_large" -} -{ -"origin" "-87 2 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-176" -"classname" "item_health_large" -} -{ -"origin" "-430 0 312" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "179" -"classname" "monster_medic" -} -{ -"origin" "450 592 -103" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-87" -"classname" "monster_soldier_light" -} -{ -"origin" "709 601 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "172" -"classname" "monster_soldier_light" -} -{ -"origin" "782 598 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-174" -"classname" "monster_soldier_light" -} -{ -"origin" "857 590 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "3" -"classname" "monster_soldier_light" -} -{ -"origin" "982 598 -135" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "4" -"classname" "monster_soldier_light" -} -{ -"origin" "1237 589 -103" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-85" -"classname" "monster_soldier_light" -} -{ -"origin" "904 21 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "90" -"classname" "item_health_large" -} -{ -"origin" "895 316 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "90" -"classname" "item_health_large" -} -{ -"origin" "822 119 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "80" -"classname" "ammo_grenades" -} -{ -"origin" "1062 766 -135" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-89" -"classname" "monster_soldier_ss" -} -{ -"origin" "669 892 -135" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-83" -"classname" "monster_medic" -} -{ -"origin" "670 746 -135" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-92" -"classname" "monster_soldier_ss" -} -{ -"origin" "553 600 -103" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-175" -"classname" "monster_soldier_ss" -} -{ -"origin" "855 668 -135" -"spawnflags" "2049" // b#5: 6145 -> 2049 -"angle" "-39" -"classname" "monster_soldier_ss" -} -{ -"origin" "733 717 168" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "109" -"classname" "ammo_rockets" -} -{ -"origin" "995 765 168" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "89" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "1271 625 -103" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "178" -"classname" "ammo_grenades" -} -{ -"origin" "1282 418 -103" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-89" -"classname" "ammo_grenades" -} -{ -"origin" "850 449 24" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-177" -"classname" "ammo_grenades" -} -{ -"origin" "501 594 -103" -"spawnflags" "2048" // b#5: 6144 -> 2048 -"angle" "-76" -"classname" "ammo_grenades" -} -{ -"origin" "-8 104 376" -"target" "helpmsg" -"delay" "0.3" // b#6: added this -"classname" "trigger_always" -} -{ -"origin" "4 108 372" -"message" "The Callistans have\nthe PCD. Yet still\nare conducting searches." -"targetname" "helpmsg" -"spawnflags" "1" -"classname" "target_help" -} -{ -"origin" "-8 108 348" -"message" "They have sabotaged the\ndoors and elevator\nsystems to slow your\nprogress." -"targetname" "helpmsg" -"classname" "target_help" -} -{ -"origin" "49 199 -135" -"angle" "-98" -"classname" "info_player_coop" -} -{ -"origin" "-72 204 -135" -"angle" "-93" -"classname" "info_player_coop" -} -{ -"origin" "-51 18 -135" -"angle" "1" -"classname" "info_player_coop" -} -{ -"origin" "-63 -153 -135" -"angle" "91" -"classname" "info_player_coop" -} -{ -"origin" "65 -157 -135" -"angle" "91" -"classname" "info_player_coop" -} -{ -"origin" "-184 -196 -135" -"angle" "58" -"classname" "info_player_coop" -} \ No newline at end of file diff --git a/stuff/mapfixes/juggernaut/jug19@a903.ent b/stuff/mapfixes/juggernaut/jug19@a903.ent deleted file mode 100644 index c573801a1..000000000 --- a/stuff/mapfixes/juggernaut/jug19@a903.ent +++ /dev/null @@ -1,4098 +0,0 @@ -// FIXED ENTITY STRING (by BjossiAlfreds) -// -// 1. Moved monster_soldier_ss out of solid space (b#1) -// -// 2. Added misc_teleporter and destination to get out of sled area (b#2) -// -// 3. Removed func_door and trigger_key (b#3) -// -// There is no power cube in the level and the doors served no purpose. -// -// 4. Added Power Shield to sled area to give it a purpose (b#4) -// -// 5. Removed unused entities and targets (b#5) -// -// The targetless trigger_relay might have something to do with -// the light entities with unused targetnames, judging by origins. -// Not enough context to know what the intention was. -// -// 6. Fixed help icon appearing after every savegame load (b#6) -{ -"sky" "env2_" -"skyrotate" "0" -"skyaxis" "0" -"gravity" "800" -"message" "THE HEART OF DARKNESS" -"light" "0" -"sounds" "5" -"classname" "worldspawn" -} -{ -"origin" "-79 949 30" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-80 688 32" -"_color" ".4 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-176 484 96" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "16 472 48" -"_color" ".4 1 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "111 159 96" -"_color" "0 .7 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-81 160 96" -"_color" "1 .4 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "112 368 216" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-80 367 216" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "16 216 216" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-248 288 216" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "16 816 160" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-176 815 160" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-24 1088 -160" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "-216 1088 -160" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "320 976 -158" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "192 1088 -158" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "193 656 -168" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "-16 656 -168" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "-225 656 -168" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "-225 912 -168" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "192 288 216" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "232 1064 152" -"_color" "1 .6 .1" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-316 288 24" -"_color" ".4 1 0" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-80 732 159" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-80 900 175" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "80 816 -16" -"_color" ".4 1 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "208 473 48" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "1052 -592 12" -"_color" ".2 .4 .6" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "1051 -435 12" -"_color" ".2 .4 .6" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "838 -592 11" -"_color" ".2 .4 .6" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "841 -435 12" -"_color" ".2 .4 .6" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "806 -504 -180" -"_color" ".2 .4 .6" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "1010 -504 -180" -"_color" ".2 .6 .4" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "1088 -1296 -141" -"_color" ".8 .5 .8" -//"targetname" "part" // b#5: never targeted -"style" "32" -"light" "500" -"classname" "light" -} -{ -"origin" "683 -1280 -1" -"_color" "1 0 0" -//"targetname" "full" // b#5: never targeted -"style" "33" -"light" "300" -"spawnflags" "1" -"classname" "light" -} -{ -"origin" "1004 -1364 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1172 -1196 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "969 -1276 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1196 -1275 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1085 -1165 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1087 -1392 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1004 -1196 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "1172 -1360 4" -"_color" ".1 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-632 312 104" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-864 432 104" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-712 312 104" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-564 686 32" -"_color" "0 .8 .5" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-864 312 104" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 528 64" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-896 -8 0" -"_color" ".3 .6 .5" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "66 816 -212" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-938 418 -24" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-940 546 -24" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1240 8 40" -"_color" ".5 1 3" -"style" "10" -"light" "200" -"classname" "light" -} -{ -"origin" "-880 808 104" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-880 720 192" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1296 80 72" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1168 80 72" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1168 -64 72" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1296 -64 72" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1295 144 200" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1167 144 200" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1169 -128 200" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1297 -128 200" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1392 65 200" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1392 -63 200" -"_color" ".5 1 3" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "1088 -1256 -139" -"_color" ".8 .5 .8" -//"targetname" "full" // b#5: never targeted -"style" "33" -"light" "500" -"spawnflags" "1" -"classname" "light" -} -{ -"origin" "-971 -995 -148" -"_color" ".6 .8 .1" -"style" "5" -"light" "200" -"classname" "light" -} -{ -"origin" "-968 -995 -52" -"_color" ".6 .8 .1" -"style" "5" -"light" "200" -"classname" "light" -} -{ -"origin" "-750 -987 -53" -"_color" ".6 .8 .1" -"style" "5" -"light" "200" -"classname" "light" -} -{ -"origin" "-753 -987 -149" -"_color" ".6 .8 .1" -"style" "5" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -631 -144" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -553 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -503 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -425 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -375 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -297 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -247 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -169 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -119 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1104 -41 -144" -"_color" ".2 .5 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -502 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -424 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -374 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -296 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -246 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -168 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -118 -144" -"_color" ".6 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-944 -40 -144" -"_color" ".2 .5 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-920 -640 56" -"_color" ".6 .8 .1" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-1024 -688 56" -"_color" ".6 .8 .1" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "320 -948 -200" -"_color" ".3 .5 .4" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "188 -948 -200" -"_color" ".3 .5 .4" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "60 -948 -200" -"_color" ".3 .5 .4" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-56 -944 -200" -"_color" ".3 .5 .4" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1024 176 -288" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-1024 112 -287" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-1168 656 -287" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-752 464 -168" -"_color" ".2 .5 .6" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-576 240 -181" -"_color" ".2 .5 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-392 -72 -160" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-168 -64 -240" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 -470 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 -470 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 -470 -368" -"_cone" "10" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 -470 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 -307 -368" -"_color" "0 .7 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 -307 -368" -"_color" "0 .7 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 -307 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 -307 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 -145 -368" -"_color" "0 .7 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 -145 -368" -"_color" "0 .7 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 -145 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 -145 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 16 -368" -"_color" ".5 .5 1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 16 -368" -"_color" ".5 .5 1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 16 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 16 -368" -"_color" "1 .7 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 -470 -304" -"_color" ".5 .5 1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 -470 -304" -"_color" ".5 .5 1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 -470 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 -470 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 -307 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 -307 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 -307 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 -307 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 -145 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 -145 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 -145 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 -145 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "24 16 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "176 16 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "327 16 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-127 16 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*1" -"delay" "2" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "56" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*2" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "112" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-696 -424 -128" -"_color" "0 .8 .7" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-456 -696 -168" -"_color" "0 .8 .7" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-464 -320 -168" -"_color" "0 .8 .7" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-1055 143 -287" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-991 143 -286" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-352 -632 -166" -"_color" "0 .8 .7" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-744 288 -288" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-743 232 -288" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-743 176 -288" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-920 672 -264" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*3" -"targetname" "p1" -"lip" "96" -"wait" "4" -"sounds" "2" -"speed" "100" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*4" -"target" "p1" -"wait" "0.2" -"delay" "2" -"classname" "trigger_multiple" -} -{ -"origin" "-1019 -675 -184" -"_color" ".6 .8 .1" -"classname" "light" -} -{ -"origin" "-987 -810 -155" -"_color" ".6 .8 .1" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*5" -"delay" "2" -"dmg" "220" -"lip" "-960" -"wait" "3" -"sounds" "1" -"speed" "600" -"targetname" "sled" -"spawnflags" "32" -"angle" "90" -"classname" "func_door" -} -{ -"origin" "-200 -800 -166" -"_color" "1 .7 .5" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "196 -768 -184" -"_cone" "10" -"_color" ".6 .6 1" -"style" "0" -"light" "600" -"classname" "light" -} -{ -"origin" "-64 -656 -165" -"_color" "1 .7 .5" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "692 -1280 0" -"_color" "1 0 0" -//"targetname" "part" // b#5: never targeted -"style" "32" -"light" "250" -"classname" "light" -} -{ -"origin" "544 -1104 -80" -"_color" ".7 .5 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "576 -848 -80" -"_color" ".7 .5 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "576 -592 -80" -"_color" ".7 .5 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "560 -1296 -80" -"_color" ".7 .5 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "552 -336 -64" -"_color" ".7 .5 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "560 -64 -16" -"_color" ".7 .5 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "576 192 -16" -"_color" ".7 .5 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "640 48 -16" -"_color" ".7 .5 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-446 -62 171" -"_color" "0 .2 .7" -"classname" "light" -} -{ -"origin" "-446 -62 27" -"classname" "light" -} -{ -"origin" "-734 816 190" -"_color" "0 .3 .6" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-766 528 254" -"_color" "0 .3 .6" -"classname" "light" -} -{ -"origin" "-686 272 254" -"_color" "0 .3 .6" -"classname" "light" -} -{ -"origin" "-702 64 254" -"classname" "light" -} -{ -"origin" "-702 -62 27" -"_color" ".2 .6 .4" -"classname" "light" -} -{ -"origin" "-702 194 75" -"_color" ".2 .6 .4" -"classname" "light" -} -{ -"origin" "-512 1104 -168" -"_color" ".7 1 .3" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-344 1088 -160" -"_color" "1 .5 0" -"style" "0" -"light" "175" -"classname" "light" -} -{ -"origin" "-664 528 64" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-664 448 64" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 448 64" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*6" -"wait" "5" -"delay" ".5" -"target" "m" -"classname" "trigger_multiple" -} -{ -"origin" "-592 688 144" -"_cone" "10" -"_color" "1 .5 0" -"style" "1" -"light" "250" -"classname" "light" -} -{ -"origin" "-784 734 44" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-816 496 32" -"_color" ".1 .5 .4" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*7" -"delay" "2" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "112" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*8" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "56" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*9" -"delay" "2" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "112" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*10" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "56" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*11" -"message" "Contamination - Sect4AQ Sealed" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "112" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*12" -"lip" "16" -"wait" "4" -"sounds" "1" -"speed" "56" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*13" -"delay" "4" -"target" "sled" -"wait" "4" -"sounds" "1" -"speed" "100" -"angle" "-2" -"classname" "func_button" -} -{ -"origin" "-446 -382 91" -"_color" "0 .8 .7" -"classname" "light" -} -{ -"origin" "-264 -912 -224" -"_color" ".2 .6 .5" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-496 -912 -292" -"_color" ".2 .6 .5" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 -930 -304" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 -802 -304" -"_color" ".2 .6 .5" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 -672 -304" -"_color" ".2 .6 .5" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 -516 -304" -"_color" ".2 .6 .5" -"light" "200" -"classname" "light" -} -{ -"origin" "-576 -360 -304" -"_color" ".2 .6 .5" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*14" -"target" "sled" -"wait" "5" -"delay" "2" -"classname" "trigger_multiple" -} -{ -"model" "*15" -"targetname" "enddoor" -"lip" "24" -"wait" "-1" -"sounds" "1" -"speed" "112" -"spawnflags" "3840" // b#3: added this -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*16" -"targetname" "enddoor" -"lip" "24" -"wait" "-1" -"sounds" "1" -"speed" "56" -"spawnflags" "3840" // b#3: added this -"angle" "-2" -"classname" "func_door" -} -{ -"origin" "-904 340 256" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "448 -624 -112" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "320 -768 -160" -"style" "0" -"light" "170" -"classname" "light" -} -{ -"origin" "-372 -912 -256" -"_color" ".2 .6 .5" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-1388 -528 222" -"_color" "1 .6 0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1324 -456 222" -"_color" "1 .6 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1236 -408 222" -"_color" "1 .6 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1100 -400 222" -"light" "150" -"_color" "1 .6 0" -"classname" "light" -} -{ -"origin" "-988 -432 222" -"_color" "1 .6 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-992 -536 136" -"_color" "1 .6 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1054 -536 135" -"_color" "1 .6 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1236 -304 222" -"_color" "1 .6 0" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-848 1040 0" -"_color" ".7 1 .3" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-720 1032 0" -"_color" ".7 1 .3" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-520 1104 80" -"_color" "1 .7 .2" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*17" -"lip" "16" -"wait" "10" -"sounds" "1" -"speed" "112" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*18" -"lip" "16" -"wait" "10" -"sounds" "1" -"speed" "224" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "416 192 12" -"_color" ".4 1 0" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-216 1104 144" -"_color" "1 .6 .1" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "320 520 153" -"_color" "1 .6 .1" -"style" "0" -"light" "450" -"classname" "light" -} -{ -"origin" "329 264 160" -"_color" "1 .6 .1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-304 624 52" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-304 964 52" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-408 -72 -296" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-560 -40 -235" -"_color" "0 .2 .7" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-568 112 -195" -"_color" "0 .2 .7" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "160 -302 0" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "159 -146 0" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "176 -162 0" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "176 -285 0" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "17 -286 0" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "34 -146 0" -"_color" "0 .5 1" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "18 -163 0" -"_color" "0 .5 1" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "34 -302 0" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "160 -302 128" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "184 -112 128" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "176 -162 128" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "208 -312 128" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "17 -286 128" -"_color" "0 .5 1" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "34 -146 128" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-15 -136 128" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "8 -336 128" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "160 -302 -128" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "184 -112 -128" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "176 -162 -128" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "208 -312 -128" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "17 -286 -128" -"_color" "0 .5 1" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "34 -146 -128" -"_color" "0 .5 1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-15 -136 -128" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "8 -336 -128" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-752 -800 -32" -"_color" "0 .5 .6" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-910 0 206" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "56 1152 -8" -"_color" "1 .7 .2" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "344 808 -48" -"_color" ".4 1 0" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-288 1168 -64" -"_color" "1 .7 .2" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"model" "*19" -"dmg" "0" -"wait" "4" -"spawnflags" "2" -"classname" "func_door_secret" -} -{ -"origin" "-1350 -302 52" -"_color" "1 .6 0" -//"targetname" "secret5" // b#5: never targeted -"style" "34" -"light" "150" -"classname" "light" -} -{ -"model" "*20" -"lip" "16" -"wait" "10" -"sounds" "1" -"speed" "112" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*21" -"lip" "16" -"wait" "10" -"sounds" "1" -"speed" "224" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "1088 -1584 -241" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "-864 -976 32" -"_color" ".6 1 0" -"style" "5" -"light" "200" -"classname" "light" -} -{ -"model" "*22" -"targetname" "o" -"lip" "-1" -"sounds" "1" -"speed" "100" -"spawnflags" "32" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*23" -"targetname" "m" -"lip" "16" -"sounds" "1" -"speed" "100" -"spawnflags" "32" -"angle" "-1" -"classname" "func_door" -} -{ -"origin" "-702 -62 203" -"classname" "light" -} -{ -"model" "*24" -"wait" "0.2" -"target" "endkey" -"classname" "trigger_multiple" -"spawnflags" "3840" // b#5: added this -} -{ -"origin" "672 -1132 -224" -"classname" "trigger_relay" -"spawnflags" "3840" // b#5: added this -} -{ -"origin" "-204 12 -147" -"classname" "trigger_relay" -"spawnflags" "3840" // b#5: added this -} -{ -"origin" "-204 -478 68" -"classname" "trigger_relay" -"spawnflags" "3840" // b#5: added this -} -{ -"origin" "-184 40 -146" -"classname" "trigger_relay" -"spawnflags" "3840" // b#5: added this -} -{ -"origin" "-1320 16 40" -"classname" "info_player_start" -} -{ -"origin" "1520 -1280 -48" -"light" "400" -"classname" "light" -} -{ -"origin" "106 -770 -168" -"angle" "180" -"classname" "key_commander_head" -} -{ -"origin" "584 -1104 -112" -"item" "key_commander_head" -"wait" "0.2" -"target" "headdoor" -"targetname" "headkey" -"classname" "trigger_key" -} -{ -"model" "*25" -"wait" "5" -"delay" "2" -"target" "o" -"classname" "trigger_multiple" -} -{ -"origin" "-512 1216 16" -"_color" "1 .7 .2" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"origin" "-1024 320 -176" -"_color" ".2 .5 .6" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"model" "*26" -"message" "The Head of Gorok!!" -"classname" "trigger_once" -} -{ -"model" "*27" -"message" "A foul stench of rotting flesh . . ." -"classname" "trigger_once" -} -{ -"model" "*28" -"delay" "2" -"target" "rumb" -"message" "oh oh. It's a trap--get out!" -"classname" "trigger_once" -} -{ -"origin" "-132 -764 -184" -"speed" "400" -"count" "5" -"targetname" "rumb" -"classname" "target_earthquake" -} -{ -"origin" "-84 -768 -184" -"dmg" "150" -"delay" "5" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-112 -812 -184" -"speed" "5" -"message" "az" -"target" "rumblite" -"targetname" "rumb" -"classname" "target_lightramp" -} -{ -"origin" "-76 -812 -184" -"_color" "1 0 0" -"_cone" "10" -"style" "35" -"light" "600" -"targetname" "rumblite" -"spawnflags" "1" -"classname" "light" -} -{ -"origin" "-240 -768 -184" -"dmg" "150" -"delay" "4" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-64 -684 -184" -"dmg" "150" -"delay" "5" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "16 -748 -184" -"dmg" "150" -"delay" "5.5" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-68 -512 -184" -"dmg" "150" -"delay" "6" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "92 -768 -236" -"_color" "1 .7 .5" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "132 -500 -80" -"dmg" "150" -"delay" "6.1" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "100 -372 -80" -"dmg" "150" -"delay" "6.3" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-76 -208 -80" -"dmg" "150" -"delay" "6.5" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "56 -388 8" -"dmg" "150" -"delay" "7" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "344 -804 -188" -"item" "key_power_cube" -"wait" "0.2" -"target" "enddoor" -"targetname" "endkey" -"classname" "trigger_key" -"spawnflags" "3840" // b#3: added this -} -{ -"model" "*29" -"dmg" "200" -"targetname" "rumboom" -"mass" "800" -"classname" "func_explosive" -} -{ -"origin" "-500 996 80" -"_color" ".7 1 .3" -"style" "0" -"light" "300" -"classname" "light" -} -{ -"origin" "-1344 -384 64" -"_color" "1 .6 0" -//"targetname" "secret5" // b#5: never targeted -"style" "34" -"light" "150" -"classname" "light" -} -{ -"origin" "-48 -448 -48" -"dmg" "150" -"delay" "6" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-96 -432 -40" -"dmg" "150" -"delay" "6" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-112 -512 -112" -"dmg" "150" -"delay" "6" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "-32 -520 -96" -"dmg" "150" -"delay" "6" -"targetname" "rumb" -"classname" "target_explosion" -} -{ -"origin" "944 -784 -160" -"_color" "1 .5 0" -"light" "250" -"classname" "light" -} -{ -"origin" "1200 -784 -160" -"_color" "1 .5 0" -"light" "250" -"classname" "light" -} -{ -"origin" "944 -256 -160" -"_color" "1 .5 0" -"light" "250" -"classname" "light" -} -{ -"origin" "1200 -256 -160" -"_color" "1 .5 0" -"light" "250" -"classname" "light" -} -{ -"origin" "728 -792 -152" -"_color" "1 .5 0" -"light" "250" -"classname" "light" -} -{ -"origin" "728 -264 -152" -"_color" "1 .5 0" -"light" "250" -"classname" "light" -} -{ -"origin" "-200 1160 456" -"_color" "1 .6 .1" -"style" "0" -"light" "350" -"classname" "light" -} -{ -"origin" "-64 956 487" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "32 872 472" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-64 788 471" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "128 424 528" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "345 320 472" -"_color" "1 .6 .1" -"style" "0" -"light" "250" -"classname" "light" -} -{ -"origin" "208 344 528" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "32 272 528" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-64 423 528" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "-232 344 528" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "336 576 465" -"_color" "1 .6 .1" -"style" "0" -"light" "450" -"classname" "light" -} -{ -"origin" "248 1120 464" -"_color" "1 .6 .1" -"style" "0" -"light" "400" -"classname" "light" -} -{ -"origin" "-160 871 472" -"_color" "1 .6 .1" -"style" "0" -"light" "200" -"classname" "light" -} -{ -"origin" "112 -416 -112" -"delay" "7" -"target" "rumboom" -"targetname" "rumb" -"classname" "trigger_relay" -} -{ -"origin" "-1220 0 40" -"classname" "weapon_machinegun" -} -{ -"origin" "-1264 44 40" -"classname" "ammo_bullets" -} -{ -"origin" "-980 -4 32" -"angle" "183" -"classname" "monster_soldier_light" -} -{ -"origin" "-1036 -4 32" -"angle" "158" -"classname" "monster_soldier_light" -} -{ -"origin" "-1308 152 152" -"classname" "item_health_large" -} -{ -"origin" "-1232 148 152" -"classname" "ammo_bullets" -} -{ -"origin" "-1308 -136 148" -"classname" "ammo_bullets" -} -{ -"origin" "-1224 -132 152" -"classname" "ammo_bullets" -} -{ -"origin" "-900 492 0" -"spawnflags" "1" -"angle" "274" -"classname" "monster_soldier_light" -} -{ -"origin" "-896 324 0" -"spawnflags" "1" -"angle" "274" -"classname" "monster_soldier_light" -} -{ -"origin" "-576 512 4" -"spawnflags" "1" -"angle" "232" -"classname" "monster_soldier_light" -} -{ -"origin" "-712 468 12" -"angle" "238" -"classname" "monster_soldier_light" -} -{ -"origin" "-800 864 -12" -"spawnflags" "1" -"angle" "274" -"classname" "monster_soldier_light" -} -{ -"origin" "-760 780 -36" -"spawnflags" "1" -"angle" "274" -"classname" "monster_soldier_light" -} -{ -"origin" "-788 724 -36" -"spawnflags" "1" -"angle" "274" -"classname" "monster_soldier_light" -} -{ -"origin" "-632 492 -16" -"classname" "ammo_bullets" -} -{ -"origin" "-632 440 -16" -"classname" "ammo_bullets" -} -{ -"origin" "-580 468 -16" -"classname" "item_health_large" -} -{ -"origin" "-632 996 12" -"spawnflags" "1" -"angle" "185" -"classname" "monster_infantry" -} -{ -"origin" "-572 1008 0" -"spawnflags" "1" -"angle" "185" -"classname" "monster_infantry" -} -{ -"origin" "-700 1004 8" -"angle" "176" -"classname" "monster_soldier_light" -} -{ -"origin" "-892 1016 4" -"classname" "weapon_supershotgun" -} -{ -"origin" "-504 1056 -200" -"spawnflags" "1" -"angle" "99" -"classname" "monster_infantry" -} -{ -"origin" "-384 1056 -204" -"angle" "182" -"classname" "monster_infantry" -} -{ -"origin" "232 996 -192" -"spawnflags" "1" -"angle" "177" -"classname" "monster_hover" -} -{ -"origin" "172 960 -180" -"spawnflags" "1" -"angle" "177" -"classname" "monster_hover" -} -{ -"origin" "140 1020 -180" -"spawnflags" "1" -"angle" "183" -"classname" "monster_soldier_light" -} -{ -"origin" "116 948 -168" -"spawnflags" "1" -"angle" "183" -"classname" "monster_soldier_light" -} -{ -"origin" "280 520 -36" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "288 580 -32" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "88 572 -60" -"spawnflags" "1" -"angle" "42" -"classname" "monster_soldier_light" -} -{ -"origin" "96 512 -64" -"spawnflags" "1" -"angle" "42" -"classname" "monster_soldier_light" -} -{ -"origin" "-92 572 -72" -"spawnflags" "1" -"angle" "42" -"classname" "monster_soldier_light" -} -{ -"origin" "-84 512 -76" -"spawnflags" "1" -"angle" "42" -"classname" "monster_soldier_light" -} -{ -"origin" "412 1020 544" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "412 636 544" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "-336 472 548" -"angle" "354" -"classname" "monster_gunner" -} -{ -"origin" "-352 852 548" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "-68 1248 552" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "128 1248 552" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "-72 812 488" -"targetname" "fball1" -"dmg" "100" -"classname" "target_explosion" -} -{ -"origin" "-100 812 492" -"random" "2" -"target" "fball1" -"pausetime" "0" -"wait" "5" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "-60 296 520" -"targetname" "fball3" -"dmg" "100" -"classname" "target_explosion" -} -{ -"origin" "-88 296 524" -"random" "1" -"target" "fball3" -"pausetime" "0" -"wait" "4" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "132 292 468" -"targetname" "fball2" -"dmg" "100" -"classname" "target_explosion" -} -{ -"origin" "104 292 472" -"random" "1" -"target" "fball2" -"pausetime" "1" -"wait" "3" -"spawnflags" "1" -"classname" "func_timer" -} -{ -"origin" "1088 -1280 -196" -"target" "theend" -"spawnflags" "1" -"angle" "182" -"classname" "monster_supertank" -} -{ -"origin" "336 296 -80" -"classname" "item_health_large" -} -{ -"origin" "392 296 -80" -"classname" "ammo_bullets" -} -{ -"origin" "336 224 -88" -"classname" "ammo_bullets" -} -{ -"origin" "-328 336 -80" -"classname" "weapon_hyperblaster" -} -{ -"origin" "-320 232 -80" -"classname" "ammo_cells" -} -{ -"origin" "-328 384 -80" -"classname" "ammo_cells" -} -{ -"origin" "-320 568 -24" -"spawnflags" "1" -"angle" "317" -"classname" "monster_hover" -} -{ -"origin" "-320 192 -16" -"spawnflags" "1" -"angle" "39" -"classname" "monster_hover" -} -{ -"origin" "632 104 -88" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "632 48 -80" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "632 -8 -80" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "552 -144 -96" -"spawnflags" "1" -"angle" "88" -"classname" "monster_soldier_light" -} -{ -"origin" "552 -216 -112" -"spawnflags" "1" -"angle" "88" -"classname" "monster_soldier_light" -} -{ -"origin" "552 -288 -88" -"spawnflags" "1" -"angle" "88" -"classname" "monster_soldier_light" -} -{ -"origin" "832 -552 -176" -"spawnflags" "1" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "968 -584 -176" -"spawnflags" "1" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "960 -440 -160" -"spawnflags" "1" -"angle" "183" -"classname" "monster_gunner" -} -{ -"origin" "600 -744 -152" -"spawnflags" "1" -"classname" "monster_infantry" -} -{ -"origin" "592 -888 -136" -"angle" "95" -"classname" "monster_soldier_ss" -} -{ -"origin" "728 -1288 -136" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "960 -1496 -152" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "1488 -1408 -136" -"classname" "item_health_mega" -} -{ -"origin" "1296 -1256 -160" -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "1304 -1344 -168" -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "1272 -1176 -144" -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "1376 -1200 -136" -"spawnflags" "1" -"angle" "180" -"classname" "monster_gunner" -} -{ -"origin" "208 -952 -208" -"classname" "monster_soldier_light" -} -{ -"origin" "112 -960 -208" -"classname" "monster_soldier_light" -} -{ -"origin" "-568 -736 -336" -"spawnflags" "1" -"angle" "267" -"classname" "monster_flipper" -} -{ -"origin" "-720 -456 -208" // b#1: -320 -> -208 -"spawnflags" "1" -"classname" "monster_soldier_ss" -} -{ -"origin" "-720 -504 -208" -"spawnflags" "1" -"classname" "monster_soldier_ss" -} -{ -"origin" "-608 -480 -224" -"classname" "monster_soldier_ss" -} -{ -"origin" "-560 -440 -216" -"classname" "monster_soldier_ss" -} -{ -"origin" "-240 1056 -200" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "-120 1056 -216" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "-48 1048 -184" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "128 776 -216" -"classname" "item_health_large" -} -{ -"origin" "128 824 -224" -"classname" "item_health_large" -} -{ -"origin" "256 -384 -152" -"spawnflags" "1" -"angle" "96" -"classname" "monster_medic" -} -{ -"origin" "288 -56 -80" -"spawnflags" "1" -"angle" "180" -"classname" "monster_medic" -} -{ -"origin" "-32 -64 -8" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier_ss" -} -{ -"origin" "80 -64 -56" -"spawnflags" "1" -"angle" "180" -"classname" "monster_soldier_ss" -} -{ -"origin" "-888 -744 -176" -"angle" "142" -"classname" "monster_soldier_ss" -} -{ -"origin" "-888 -824 -160" -"angle" "116" -"classname" "monster_soldier_ss" -} -{ -"origin" "-824 -800 -176" -"angle" "129" -"classname" "monster_soldier_ss" -} -{ -"origin" "-704 -920 -160" -"angle" "138" -"classname" "monster_soldier_ss" -} -{ -"origin" "-704 -840 -176" -"angle" "147" -"classname" "monster_soldier_ss" -} -{ -"origin" "-768 -784 -176" -"angle" "145" -"classname" "monster_soldier_ss" -} -{ -"origin" "-768 -864 -160" -"angle" "152" -"classname" "monster_soldier_ss" -} -{ -"origin" "-992 -576 -152" -"classname" "monster_soldier_ss" -} -{ -"origin" "-992 -496 -168" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1056 -440 -168" -"angle" "86" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1056 -520 -152" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1000 -328 -160" -"angle" "89" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1000 -248 -176" -"angle" "88" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1064 -192 -176" -"angle" "86" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1064 -272 -160" -"angle" "82" -"classname" "monster_soldier_ss" -} -{ -"origin" "-776 72 -296" -"spawnflags" "1" -"angle" "270" -"classname" "monster_flipper" -} -{ -"origin" "-896 256 -304" -"angle" "270" -"classname" "monster_flipper" -} -{ -"origin" "-1024 320 -200" -"classname" "weapon_hyperblaster" -} -{ -"origin" "-976 312 -200" -"classname" "ammo_cells" -} -{ -"origin" "-88 -56 -32" -"classname" "item_health_large" -} -{ -"origin" "-144 -392 24" -"classname" "weapon_hyperblaster" -} -{ -"origin" "-56 -392 40" -"classname" "ammo_cells" -} -{ -"origin" "-144 -64 -16" -"classname" "weapon_grenadelauncher" -} -{ -"origin" "40 -56 -8" -"classname" "item_health_large" -} -{ -"origin" "732 -1332 -156" -"classname" "ammo_rockets" -} -{ -"origin" "724 -1188 -132" -"classname" "item_health_large" -} -{ -"origin" "152 520 -64" -"classname" "item_health_large" -} -{ -"origin" "-40 508 -68" -"classname" "item_health_large" -} -{ -"origin" "1196 -468 -128" -"classname" "item_armor_body" -} -{ -"origin" "1200 -552 -132" -"classname" "item_health_large" -} -{ -"origin" "-595 689 -31" -"angle" "176" -"classname" "item_health_large" -} -{ -"origin" "293 720 -231" -"angle" "178" -"classname" "ammo_rockets" -} -{ -"origin" "-213 654 -231" -"angle" "114" -"classname" "ammo_rockets" -} -{ -"origin" "-224 972 -231" -"classname" "item_health_small" -} -{ -"origin" "-120 972 -231" -"angle" "1" -"classname" "item_health_small" -} -{ -"origin" "-21 974 -231" -"angle" "2" -"classname" "item_health_small" -} -{ -"origin" "-311 1170 -103" -"angle" "-51" -"classname" "ammo_bullets" -} -{ -"origin" "-82 1180 -103" -"angle" "35" -"classname" "ammo_bullets" -} -{ -"origin" "337 1236 -103" -"spawnflags" "1" -"angle" "-104" -"classname" "monster_soldier_light" -} -{ -"origin" "67 1223 -103" -"spawnflags" "1" -"angle" "-77" -"classname" "monster_soldier_light" -} -{ -"origin" "-293 1140 -103" -"spawnflags" "1" -"angle" "-90" -"classname" "monster_soldier_light" -} -{ -"origin" "-330 755 -103" -"spawnflags" "1" -"angle" "-53" -"classname" "monster_soldier_light" -} -{ -"origin" "-986 99 -7" -"angle" "137" -"classname" "item_health_small" -} -{ -"origin" "-833 -69 -7" -"angle" "-57" -"classname" "item_health_small" -} -{ -"origin" "-841 122 -7" -"angle" "90" -"classname" "item_health_small" -} -{ -"origin" "-905 137 -7" -"angle" "137" -"classname" "item_health_small" -} -{ -"origin" "-736 820 112" -"spawnflags" "1" -"angle" "-7" -"classname" "monster_soldier_light" -} -{ -"origin" "-344 832 112" -"spawnflags" "1" -"angle" "178" -"classname" "monster_soldier_light" -} -{ -"origin" "-92 705 112" -"spawnflags" "1" -"angle" "-95" -"classname" "monster_soldier_ss" -} -{ -"origin" "-718 247 176" -"spawnflags" "1" -"angle" "111" -"classname" "monster_soldier_light" -} -{ -"origin" "-318 297 176" -"spawnflags" "1" -"angle" "85" -"classname" "monster_soldier_light" -} -{ -"origin" "-486 -74 120" -"spawnflags" "1" -"angle" "-176" -"classname" "monster_soldier_light" -} -{ -"origin" "-635 -16 120" -"angle" "-171" -"classname" "ammo_grenades" -} -{ -"origin" "-360 -378 24" -"spawnflags" "1" -"angle" "178" -"classname" "monster_infantry" -} -{ -"origin" "-71 -212 -6" -"spawnflags" "1" -"angle" "-98" -"classname" "monster_soldier_light" -} -{ -"origin" "357 24 -391" -"angle" "-178" -"classname" "item_health_large" -} -{ -"origin" "338 -455 -391" -"angle" "-88" -"classname" "item_health_large" -} -{ -"origin" "-152 -462 -391" -"angle" "-87" -"classname" "weapon_chaingun" -} -{ -"origin" "-414 60 -327" -"angle" "-169" -"classname" "item_health_large" -} -{ -"origin" "259 -443 17" -"spawnflags" "1" -"angle" "147" -"classname" "monster_flyer" -} -{ -"origin" "315 -22 16" -"spawnflags" "1" -"angle" "-162" -"classname" "monster_flyer" -} -{ -"origin" "-903 49 -7" -"angle" "86" -"classname" "ammo_bullets" -} -{ -"origin" "-443 837 112" -"spawnflags" "1" -"angle" "-157" -"classname" "monster_soldier_light" -} -{ -"origin" "-68 933 112" -"spawnflags" "1" -"angle" "85" -"classname" "monster_soldier_light" -} -{ -"origin" "157 388 176" -"spawnflags" "1" -"angle" "108" -"classname" "monster_soldier_light" -} -{ -"origin" "-66 384 176" -"spawnflags" "1" -"angle" "94" -"classname" "monster_soldier_light" -} -{ -"origin" "-466 293 176" -"spawnflags" "1" -"angle" "-179" -"classname" "monster_soldier_light" -} -{ -"origin" "-900 211 176" -"spawnflags" "1" -"angle" "92" -"classname" "monster_soldier_ss" -} -{ -"origin" "-1017 -80 176" -"spawnflags" "1" -"angle" "8" -"classname" "monster_soldier_light" -} -{ -"origin" "-59 -391 24" -"spawnflags" "1" -"angle" "-177" -"classname" "monster_soldier_light" -} -{ -"origin" "-209 -783 -231" -"spawnflags" "1" -"angle" "1" -"classname" "monster_soldier_light" -} -{ -"origin" "-551 158 -31" -"spawnflags" "1" -"angle" "-173" -"classname" "monster_soldier_light" -} -{ -"origin" "-413 79 -39" -"angle" "-97" -"classname" "item_health_large" -} -{ -"origin" "-495 79 -39" -"angle" "-64" -"classname" "item_health_large" -} -{ -"origin" "-21 -938 -231" -"spawnflags" "1" -"angle" "-5" -"classname" "monster_soldier_light" -} -{ -"origin" "-1030 -871 -167" -"spawnflags" "1" -"angle" "90" -"classname" "monster_soldier_light" -} -{ -"origin" "-756 -509 -199" -"spawnflags" "1" -"angle" "1" -"classname" "monster_soldier_light" -} -{ -"origin" "-577 290 176" -"classname" "ammo_bullets" -} -{ -"origin" "-415 286 176" -"classname" "ammo_bullets" -} -{ -"origin" "-287 286 176" -"classname" "ammo_bullets" -} -{ -"origin" "-919 -88 176" -"angle" "178" -"classname" "item_health_small" -} -{ -"origin" "-903 103 176" -"angle" "-176" -"classname" "item_health_small" -} -{ -"origin" "-911 135 176" -"spawnflags" "1" -"angle" "-73" -"classname" "monster_soldier_light" -} -{ -"origin" "-650 -30 120" -"angle" "38" -"classname" "weapon_rocketlauncher" -} -{ -"origin" "-693 98 -31" -"angle" "-85" -"classname" "item_health_large" -} -{ -"origin" "-583 161 -31" -"angle" "-24" -"classname" "weapon_chaingun" -} -{ -"origin" "857 -1494 -167" -"angle" "-1" -"classname" "item_health_large" -} -{ -"origin" "1345 -1474 -167" -"angle" "-150" -"classname" "ammo_rockets" -} -{ -"origin" "1461 -1102 -167" -"angle" "164" -"classname" "ammo_rockets" -} -{ -"origin" "580 -1285 -167" -"angle" "3" -"classname" "ammo_grenades" -} -{ -"origin" "-789 -717 -183" -"spawnflags" "1" -"angle" "160" -"classname" "monster_soldier_light" -} -{ -"origin" "-897 -685 -199" -"spawnflags" "1" -"angle" "126" -"classname" "monster_soldier_light" -} -{ -"origin" "-695 -765 -183" -"spawnflags" "1" -"angle" "149" -"classname" "monster_soldier_light" -} -{ -"origin" "896 -1368 -64" -"map" "jug20" -"targetname" "te" -"classname" "target_changelevel" -} -{ -"origin" "-468 1086 -206" -"_color" ".7 1 .3" -"style" "0" -"light" "150" -"classname" "light" -} -{ -"model" "*30" -"targetname" "headdoor" -"lip" "16" -"wait" "-1" -"sounds" "1" -"speed" "56" -"angle" "-2" -"classname" "func_door" -} -{ -"model" "*31" -"targetname" "headdoor" -"lip" "16" -"wait" "-1" -"sounds" "1" -"speed" "112" -"angle" "-1" -"classname" "func_door" -} -{ -"model" "*32" -"target" "headkey" -"classname" "trigger_multiple" -} -{ -"origin" "928 -1320 -64" -"wait" "0.2" -"delay" "6" -"target" "te" -"targetname" "theend" -"classname" "trigger_relay" -} -{ -"origin" "-1319 16 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-907 25 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-741 342 -23" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-848 736 -55" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-798 1027 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-523 1066 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-486 1088 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-277 1058 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "224 869 -65" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-224 667 -42" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-310 279 -38" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-260 1047 -22" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-50 1076 110" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "78 594 154" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-141 470 240" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-260 249 219" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-256 1115 -10" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "206 939 -109" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-245 655 -89" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "584 -141 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "585 -300 -135" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "583 -517 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "542 -751 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "552 -969 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1126 -532 -167" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "941 -228 -167" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "945 -732 -167" -"noise" "world/drip_amb.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "822 -1482 -167" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1101 -1522 -167" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1410 -1441 -167" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1429 -1087 -167" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "949 -1109 -247" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1106 -1415 -247" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1229 -1224 -247" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1371 -1360 -247" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "868 -1266 -247" -"noise" "world/klaxon1.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1283 11 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1283 11 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1283 11 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-900 159 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-868 276 -23" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-832 341 -23" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-688 368 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-606 372 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-618 481 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-685 525 -7" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-702 607 -10" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-803 978 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-752 1063 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-619 1034 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-577 1066 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-515 1141 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-491 1155 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-447 1063 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-416 1046 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-203 1057 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-67 1058 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "84 1011 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "131 980 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "280 903 -218" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "257 756 -140" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "205 603 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "91 619 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "540 181 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "649 152 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "684 31 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "650 -80 -103" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "584 -168 -105" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "590 -299 -132" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "590 -455 -166" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "570 -600 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "553 -746 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "553 -899 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "568 -1020 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "743 -497 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "856 -476 -193" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "983 -501 -199" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "1098 -553 -174" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "30 629 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "244 635 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "375 752 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "343 965 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "222 1129 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-7 1141 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-203 1123 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-280 926 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-247 706 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-106 614 -103" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "70 773 -231" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "227 713 -231" -"noise" "world/amb12.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-102 653 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-181 656 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-255 728 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-242 847 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-231 935 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-555 857 112" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-617 848 112" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-703 784 112" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-726 663 150" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-760 539 184" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-763 411 184" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-711 294 176" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-569 282 176" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-498 276 176" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-685 169 170" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-724 22 168" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-769 -68 168" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-896 -69 176" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1006 -35 176" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1001 82 176" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-636 -110 154" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-515 -16 120" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-426 -104 120" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-422 -235 89" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-321 -426 24" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-135 -393 24" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-83 -241 3" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-121 -70 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-121 -70 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-121 -70 -39" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "196 -45 -100" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "197 -44 -100" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "197 -44 -100" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "269 -343 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "269 -343 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "269 -343 -167" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-57 -396 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-57 -396 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-57 -396 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-16 -778 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-16 -778 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-16 -778 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-16 -778 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-16 -778 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-16 -778 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-134 -782 -231" -"noise" "world/amb18.wav" -"spawnflags" "1" -"classname" "target_speaker" -} -{ -"origin" "-1334 4 36" -"target" "helpmsg" -"delay" "0.3" // b#x: added this -"classname" "trigger_always" -} -{ -"origin" "-1326 -12 24" -"message" "Ship...leave..\nstop... st... sh..." -"targetname" "helpmsg" -"spawnflags" "1" -"classname" "target_help" -} -{ -"origin" "-1350 26 24" -"message" "..." -"targetname" "helpmsg" -"classname" "target_help" -} -{ -"origin" "-1323 -68 -7" -"angle" "22" -"classname" "info_player_coop" -} -{ -"origin" "-1334 80 -7" -"angle" "-6" -"classname" "info_player_coop" -} -{ -"origin" "-1232 96 -7" -"angle" "-28" -"classname" "info_player_coop" -} -{ -"origin" "-1204 -73 -7" -"angle" "37" -"classname" "info_player_coop" -} -{ -"origin" "-1129 -63 -7" -"angle" "47" -"classname" "info_player_coop" -} -{ -"origin" "-1123 59 -7" -"angle" "-29" -"classname" "info_player_coop" -} -{ // b#2: added this -"classname" "path_corner" -"targetname" "teledest" -"origin" "-1320 16 0" -} -{ // b#2: added this -"classname" "misc_teleporter" -"origin" "315 -635 -223" -"target" "teledest" -} -{ // b#4: added this -"classname" "item_power_shield" -"origin" "-845 -965 8" -} \ No newline at end of file diff --git a/stuff/misc/Dockerfile b/stuff/misc/Dockerfile deleted file mode 100644 index cafca4f98..000000000 --- a/stuff/misc/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -FROM ubuntu:18.04 AS build - -WORKDIR /yquake2 -RUN apt-get update -RUN apt-get install libcurl4-openssl-dev build-essential -y -COPY . . - -RUN make server game - -FROM ubuntu:18.04 AS runtime - -ENV server_cfg="server.cfg" - -EXPOSE 27910 - -# Add the user UID:1000, GID:1000, home at /yquake2 -RUN groupadd -r yquake2 -g 1000 && useradd -u 1000 -r -g yquake2 -m -d /yquake2 -s /sbin/nologin -c "yquake2 user" yquake2 && \ - chmod 755 /yquake2 - -WORKDIR /yquake2 -COPY --from=build /yquake2/release ./ - -# Specify the user to execute all commands below -USER yquake2 - -RUN mkdir .yq2 -VOLUME ["/yquake2/.yq2"] -ENTRYPOINT ./q2ded +exec ${server_cfg} diff --git a/stuff/misc/uncrustify.cfg b/stuff/misc/uncrustify.cfg deleted file mode 100644 index b58405501..000000000 --- a/stuff/misc/uncrustify.cfg +++ /dev/null @@ -1,912 +0,0 @@ -# -# General options -# - -# The type of line endings -newlines = lf # auto/lf/crlf/cr - -# The original size of tabs in the input -input_tab_size = 4 # number - -# The size of tabs in the output (only used if align_with_tabs=true) -output_tab_size = 4 # number - -# The ascii value of the string escape char, usually 92 (\) or 94 (^). (Pawn) -string_escape_char = 92 # number - -# Alternate string escape char for Pawn. Only works right before the quote char. -string_escape_char2 = 0 # number - -# -# Indenting -# - -# The number of columns to indent per level. -# Usually 2, 3, 4, or 8. -indent_columns = 4 # number - -# How to use tabs when indenting code -# 0=spaces only -# 1=indent with tabs, align with spaces -# 2=indent and align with tabs -indent_with_tabs = 2 # number - -# Whether to indent strings broken by '\' so that they line up -indent_align_string = true # false/true - -# The number of spaces to indent multi-line XML strings. -# Requires indent_align_string=True -indent_xml_string = 0 # number - -# Spaces to indent '{' from level -indent_brace = 0 # number - -# Whether braces are indented to the body level -indent_braces = false # false/true - -# Disabled indenting function braces if indent_braces is true -indent_braces_no_func = false # false/true - -# Indent based on the size of the brace parent, ie 'if' => 3 spaces, 'for' => 4 spaces, etc. -indent_brace_parent = false # false/true - -# Whether the 'namespace' body is indented -indent_namespace = true # false/true - -# Whether the 'class' body is indented -indent_class = true # false/true - -# Whether to indent the stuff after a leading class colon -indent_class_colon = false # false/true - -# True: indent continued function call parameters one indent level -# False: align parameters under the open paren -indent_func_call_param = true # false/true - -# Same as indent_func_call_param, but for function defs -indent_func_def_param = true # false/true - -# Same as indent_func_call_param, but for function protos -indent_func_proto_param = true # false/true - -# Same as indent_func_call_param, but for class declarations -indent_func_class_param = true # false/true - -# Same as indent_func_call_param, but for class variable constructors -indent_func_ctor_var_param = true # false/true - -# Double the indent for indent_func_xxx_param options -indent_func_param_double = true # false/true - -# The number of spaces to indent a continued '->' or '.' -# Usually set to 0, 1, or indent_columns. -indent_member = 4 # number - -# Spaces to indent single line ('//') comments on lines before code -indent_sing_line_comments = 0 # number - -# Spaces to indent 'case' from 'switch' -# Usually 0 or indent_columns. -indent_switch_case = 4 # number - -# Spaces to shift the 'case' line, without affecting any other lines -# Usually 0. -indent_case_shift = 0 # number - -# Spaces to indent '{' from 'case'. -# By default, the brace will appear under the 'c' in case. -# Usually set to 0 or indent_columns. -indent_case_brace = 0 # number - -# Whether to indent comments found in first column -indent_col1_comment = false # false/true - -# How to indent goto labels -# >0 : absolute column where 1 is the leftmost column -# <=0 : subtract from brace indent -indent_label = -4 # number - -# Same as indent_label, but for access specifiers that are followed by a colon -indent_access_spec = -4 # number - -# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended) -indent_paren_nl = false # false/true - -# Controls the indent of a close paren after a newline. -# 0: Indent to body level -# 1: Align under the open paren -# 2: Indent to the brace level -indent_paren_close = 0 # number - -# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren -indent_comma_paren = false # false/true - -# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren -indent_bool_paren = false # false/true - -# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended) -indent_square_nl = false # false/true - -# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies -indent_preserve_sql = false # false/true - -# -# Spacing options -# - -# Add or remove space around arithmetic operator '+', '-', '/', '*', etc -sp_arith = force # ignore/add/remove/force - -# Add or remove space around assignment operator '=', '+=', etc -sp_assign = force # ignore/add/remove/force - -# Add or remove space around boolean operators '&&' and '||' -sp_bool = force # ignore/add/remove/force - -# Add or remove space around compare operator '<', '>', '==', etc -sp_compare = force # ignore/add/remove/force - -# Add or remove space inside '(' and ')' -sp_inside_paren = remove # ignore/add/remove/force - -# Add or remove space between nested parens -sp_paren_paren = remove # ignore/add/remove/force - -# Whether to balance spaces inside nested parens -sp_balance_nested_parens = false # false/true - -# Add or remove space between ')' and '{' -sp_paren_brace = force # ignore/add/remove/force - -# Add or remove space before pointer star '*' -sp_before_ptr_star = force # ignore/add/remove/force - -# Add or remove space between pointer stars '*' -sp_between_ptr_star = remove # ignore/add/remove/force - -# Add or remove space after pointer star '*', if followed by a word. -sp_after_ptr_star = remove # ignore/add/remove/force - -# Add or remove space before reference sign '&' -sp_before_byref = force # ignore/add/remove/force - -# Add or remove space after reference sign '&', if followed by a word. -sp_after_byref = remove # ignore/add/remove/force - -# Add or remove space before '<>' -sp_before_angle = remove # ignore/add/remove/force - -# Add or remove space after '<>' -sp_after_angle = remove # ignore/add/remove/force - -# Add or remove space between '<>' and '(' as found in 'new List();' -sp_angle_paren = force # ignore/add/remove/force - -# Add or remove space between '<>' and a word as in 'List m;' -sp_angle_word = force # ignore/add/remove/force - -# Add or remove space before '(' of 'if', 'for', 'switch', and 'while' -sp_before_sparen = force # ignore/add/remove/force - -# Add or remove space inside if-condition '(' and ')' -sp_inside_sparen = remove # ignore/add/remove/force - -# Add or remove space after ')' of 'if', 'for', 'switch', and 'while' -sp_after_sparen = remove # ignore/add/remove/force - -# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while' -sp_sparen_brace = force # ignore/add/remove/force - -# Add or remove space before empty statement ';' on 'if', 'for' and 'while' -sp_special_semi = force # ignore/add/remove/force - -# Add or remove space before ';' -sp_before_semi = remove # ignore/add/remove/force - -# Add or remove space before ';' in non-empty 'for' statements -sp_before_semi_for = remove # ignore/add/remove/force - -# Add or remove space before a semicolon of an empty part of a for statment. -sp_before_semi_for_empty = add # ignore/add/remove/force - -# Add or remove space after the final semicolon of an empty part of a for statment: for ( ; ; ). -sp_after_semi_for_empty = add # ignore/add/remove/force - -# Add or remove space before '[' (except '[]') -sp_before_square = remove # ignore/add/remove/force - -# Add or remove space before '[]' -sp_before_squares = remove # ignore/add/remove/force - -# Add or remove space inside '[' and ']' -sp_inside_square = remove # ignore/add/remove/force - -# Add or remove space after ',' -sp_after_comma = force # ignore/add/remove/force - -# Add or remove space before ',' -sp_before_comma = remove # ignore/add/remove/force - -# Add or remove space between 'operator' and operator sign -sp_after_operator = force # ignore/add/remove/force - -# Add or remove space after cast -sp_after_cast = remove # ignore/add/remove/force - -# Add or remove spaces inside cast parens -sp_inside_paren_cast = remove # ignore/add/remove/force - -# Add or remove space between 'sizeof' and '(' -sp_sizeof_paren = remove # ignore/add/remove/force - -# Add or remove space after the tag keyword (Pawn) -sp_after_tag = remove # ignore/add/remove/force - -# Add or remove space inside enum '{' and '}' -sp_inside_braces_enum = remove # ignore/add/remove/force - -# Add or remove space inside struct/union '{' and '}' -sp_inside_braces_struct = remove # ignore/add/remove/force - -# Add or remove space inside '{' and '}' -sp_inside_braces = remove # ignore/add/remove/force - -# Add or remove space inside '<' and '>' -sp_inside_angle = remove # ignore/add/remove/force - -# Add or remove space between return type and function name -# A minimum of 1 is forced except for pointer return types. -sp_type_func = remove # ignore/add/remove/force - -# Add or remove space between function name and '(' on function declaration -sp_func_proto_paren = remove # ignore/add/remove/force - -# Add or remove space between function name and '(' on function definition -sp_func_def_paren = remove # ignore/add/remove/force - -# Add or remove space inside empty function '()' -sp_inside_fparens = remove # ignore/add/remove/force - -# Add or remove space inside function '(' and ')' -sp_inside_fparen = remove # ignore/add/remove/force - -# Add or remove space between ']' and '(' when part of a function call. -sp_square_fparen = remove # ignore/add/remove/force - -# Add or remove space between ')' and '{' of function -sp_fparen_brace = remove # ignore/add/remove/force - -# Add or remove space between function name and '(' on function calls -sp_func_call_paren = remove # ignore/add/remove/force - -# Add or remove space between a constructor/destructor and the open paren -sp_func_class_paren = remove # ignore/add/remove/force - -# Add or remove space between 'return' and '(' -sp_return_paren = remove # ignore/add/remove/force - -# Add or remove space between '__attribute__' and '(' -sp_attribute_paren = remove # ignore/add/remove/force - -# Add or remove space between macro and value -sp_macro = remove # ignore/add/remove/force - -# Add or remove space between macro function ')' and value -sp_macro_func = force # ignore/add/remove/force - -# Add or remove space between 'else' and '{' if on the same line -sp_else_brace = force # ignore/add/remove/force - -# Add or remove space between '}' and 'else' if on the same line -sp_brace_else = force # ignore/add/remove/force - -# Add or remove space between 'catch' and '{' if on the same line -sp_catch_brace = force # ignore/add/remove/force - -# Add or remove space between '}' and 'catch' if on the same line -sp_brace_catch = force # ignore/add/remove/force - -# Add or remove space between 'finally' and '{' if on the same line -sp_finally_brace = force # ignore/add/remove/force - -# Add or remove space between '}' and 'finally' if on the same line -sp_brace_finally = force # ignore/add/remove/force - -# Add or remove space between 'try' and '{' if on the same line -sp_try_brace = force # ignore/add/remove/force - -# Add or remove space between get/set and '{' if on the same line -sp_getset_brace = force # ignore/add/remove/force - -# Add or remove space before the '::' operator -sp_before_dc = remove # ignore/add/remove/force - -# Add or remove space after the '::' operator -sp_after_dc = remove # ignore/add/remove/force - -# Add or remove around the D named array initializer ':' operator -sp_d_array_colon = remove # ignore/add/remove/force - -# Add or remove space after the '!' (not) operator. -sp_not = remove # ignore/add/remove/force - -# Add or remove space after the '~' (invert) operator. -sp_inv = remove # ignore/add/remove/force - -# Add or remove space after the '&' (address-of) operator. -# This does not affect the spacing after a '&' that is part of a type. -sp_addr = remove # ignore/add/remove/force - -# Add or remove space around the '.' or '->' operators -sp_member = remove # ignore/add/remove/force - -# Add or remove space after the '*' (dereference) operator. -# This does not affect the spacing after a '*' that is part of a type. -sp_deref = remove # ignore/add/remove/force - -# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7' -sp_sign = remove # ignore/add/remove/force - -# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;' -sp_incdec = remove # ignore/add/remove/force - -# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;' -sp_after_oc_scope = remove # ignore/add/remove/force - -# Add or remove space after the colon in message specs -# '-(int) f: (int) x;' vs '+(int) f : (int) x;' -sp_before_oc_colon = force # ignore/add/remove/force - -# Add or remove space after the (type) in message specs -# '-(int) f: (int) x;' vs '+(int)f : (int)x;' -sp_after_oc_type = remove # ignore/add/remove/force - -# -# Code alignment (not left column spaces/tabs) -# - -# Whether to keep non-indenting tabs -align_keep_tabs = false # false/true - -# Whether to use tabs for alinging -align_with_tabs = true # false/true - -# Whether to bump out to the next tab when aligning -align_on_tabstop = false # false/true - -# Whether to left-align numbers -align_number_left = false # false/true - -# Align variable definitions in prototypes and functions -align_func_params = false # false/true - -# The span for aligning variable definitions (0=don't align) -align_var_def_span = 0 # number - -# How to align the star in variable definitions. -# 0=Part of the type -# 1=Part of the variable -# 2=Dangling -align_var_def_star_style = 0 # number - -# How to align the '&' in variable definitions. -# 0=Part of the type -# 1=Part of the variable -# 2=Dangling -align_var_def_amp_style = 0 # number - -# The threshold for aligning variable definitions (0=no limit) -align_var_def_thresh = 100 # number - -# Whether to align the colon in struct bit fields -align_var_def_colon = true # false/true - -# Whether to align inline struct/enum/union variable definitions -align_var_def_inline = true # false/true - -# The span for aligning on '=' in assignments (0=don't align) -align_assign_span = 0 # number - -# The threshold for aligning on '=' in assignments (0=no limit) -align_assign_thresh = 0 # number - -# The span for aligning on '=' in enums (0=don't align) -align_enum_equ_span = 0 # number - -# The threshold for aligning on '=' in enums (0=no limit) -align_enum_equ_thresh = 0 # number - -# The span for aligning struct/union (0=don't align) -align_var_struct_span = 0 # number - -# The threshold for aligning struct/union member definitions (0=no limit) -align_var_struct_thresh = 0 # number - -# The span for aligning struct initializer values (0=don't align) -align_struct_init_span = 0 # number - -# The minimum space between the type and the synonym of a typedef -align_typedef_gap = 0 # number - -# The span for aligning single-line typedefs (0=don't align) -align_typedef_span = 0 # number - -# How to align typedef'd functions with other typedefs -# 0: Don't mix them at all -# 1: align the open paren with the types -# 2: align the function type name with the other type names -align_typedef_func = 0 # number - -# Controls the positioning of the '*' in typedefs. Just try it. -# 0: Align on typdef type, ignore '*' -# 1: The '*' is part of type name: typedef int *pint; -# 2: The '*' is part of the type, but dangling: typedef int *pint; -align_typedef_star_style = 0 # number - -# Controls the positioning of the '&' in typedefs. Just try it. -# 0: Align on typdef type, ignore '&' -# 1: The '&' is part of type name: typedef int &pint; -# 2: The '&' is part of the type, but dangling: typedef int &pint; -align_typedef_amp_style = 0 # number - -# The span for aligning comments that end lines (0=don't align) -align_right_cmt_span = 0 # number - -# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment -align_right_cmt_mix = false # false/true - -# The span for aligning function prototypes (0=don't align) -align_func_proto_span = 0 # number - -# The span for aligning function prototypes (0=don't align) -align_oc_msg_spec_span = 0 # number - -# Whether to align macros wrapped with a backslash and a newline. -# This will not work right if the macro contains a multi-line comment. -align_nl_cont = false # false/true - -# The minimum space between label and value of a preprocessor define -align_pp_define_gap = 0 # number - -# The span for aligning on '#define' bodies (0=don't align) -align_pp_define_span = 0 # number - -# -# Newline adding and removing options -# - -# Whether to collapse empty blocks between '{' and '}' -nl_collapse_empty_body = false # false/true - -# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };' -nl_assign_leave_one_liners = true # false/true - -# Don't split one-line braced statements inside a class xx { } body -nl_class_leave_one_liners = false # false/true - -# Don't split one-line enums: 'enum foo { BAR = 15 };' -nl_enum_leave_one_liners = true # false/true - -# Don't split one-line get or set functions -nl_getset_leave_one_liners = true # false/true - -# Don't split one-line function definitions - 'int foo() { return 0; }' -nl_func_leave_one_liners = true # false/true - -# Don't split one-line if/else statements - 'if(a) b++;' -nl_if_leave_one_liners = false # false/true - -# Add or remove newlines at the start of the file -nl_start_of_file = remove # ignore/add/remove/force - -# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force' -nl_start_of_file_min = 0 # number - -# Add or remove newline at the end of the file -nl_end_of_file = add # ignore/add/remove/force - -# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force') -nl_end_of_file_min = 1 # number - -# Add or remove newline between '=' and '{' -nl_assign_brace = remove # ignore/add/remove/force - -# Add or remove newline between '=' and '[' (D only) -nl_assign_square = ignore # ignore/add/remove/force - -# Add or remove newline after '= [' (D only). Will also affect the newline before the ']' -nl_after_square_assign = ignore # ignore/add/remove/force - -# The number of newlines after a block of variable definitions -nl_func_var_def_blk = 1 # number - -# Add or remove newline between a function call's ')' and '{', as in: -# list_for_each(item, &list) { } -nl_fcall_brace = add # ignore/add/remove/force - -# Add or remove newline between 'enum' and '{' -nl_enum_brace = add # ignore/add/remove/force - -# Add or remove newline between 'struct and '{' -nl_struct_brace = add # ignore/add/remove/force - -# Add or remove newline between 'union' and '{' -nl_union_brace = add # ignore/add/remove/force - -# Add or remove newline between 'if' and '{' -nl_if_brace = add # ignore/add/remove/force - -# Add or remove newline between '}' and 'else' -nl_brace_else = add # ignore/add/remove/force - -# Add or remove newline between 'else if' and '{' -# If set to ignore, nl_if_brace is used instead -nl_elseif_brace = add # ignore/add/remove/force - -# Add or remove newline between 'else' and '{' -nl_else_brace = add # ignore/add/remove/force - -# Add or remove newline between '}' and 'finally' -nl_brace_finally = add # ignore/add/remove/force - -# Add or remove newline between 'finally' and '{' -nl_finally_brace = add # ignore/add/remove/force - -# Add or remove newline between 'try' and '{' -nl_try_brace = add # ignore/add/remove/force - -# Add or remove newline between get/set and '{' -nl_getset_brace = add # ignore/add/remove/force - -# Add or remove newline between 'for' and '{' -nl_for_brace = add # ignore/add/remove/force - -# Add or remove newline between 'catch' and '{' -nl_catch_brace = add # ignore/add/remove/force - -# Add or remove newline between '}' and 'catch' -nl_brace_catch = add # ignore/add/remove/force - -# Add or remove newline between 'while' and '{' -nl_while_brace = add # ignore/add/remove/force - -# Add or remove newline between 'do' and '{' -nl_do_brace = add # ignore/add/remove/force - -# Add or remove newline between '}' and 'while' of 'do' statement -nl_brace_while = add # ignore/add/remove/force - -# Add or remove newline between 'switch' and '{' -nl_switch_brace = add # ignore/add/remove/force - -# Add or remove newline when condition spans two or more lines -nl_multi_line_cond = true # false/true - -# Force a newline in a define after the macro name for multi-line defines. -nl_multi_line_define = true # false/true - -# Whether to put a newline before 'case' statement -nl_before_case = false # false/true - -# Whether to put a newline after 'case' statement -nl_after_case = true # false/true - -# Newline between namespace and { -nl_namespace_brace = add # ignore/add/remove/force - -# Add or remove newline between 'template<>' and 'class' -nl_template_class = add # ignore/add/remove/force - -# Add or remove newline between 'class' and '{' -nl_class_brace = add # ignore/add/remove/force - -# Add or remove newline after each ',' in the constructor member initialization -nl_class_init_args = remove # ignore/add/remove/force - -# Add or remove newline between return type and function name in definition -nl_func_type_name = add # ignore/add/remove/force - -# Add or remove newline between return type and function name in a prototype -nl_func_proto_type_name = remove # ignore/add/remove/force - -# Add or remove newline between a function name and the opening '(' -nl_func_paren = remove # ignore/add/remove/force - -# Add or remove newline after '(' in a function declaration -nl_func_decl_start = remove # ignore/add/remove/force - -# Add or remove newline after each ',' in a function declaration -nl_func_decl_args = remove # ignore/add/remove/force - -# Add or remove newline before the ')' in a function declaration -nl_func_decl_end = remove # ignore/add/remove/force - -# Add or remove newline between function signature and '{' -nl_fdef_brace = add # ignore/add/remove/force - -# Whether to put a newline after 'return' statement -nl_after_return = false # false/true - -# Whether to put a newline after semicolons, except in 'for' statements -nl_after_semicolon = true # false/true - -# Whether to put a newline after brace open. -# This also adds a newline before the matching brace close. -nl_after_brace_open = false # false/true - -# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is -# placed between the open brace and a trailing single-line comment. -nl_after_brace_open_cmt = false # false/true - -# Whether to put a newline after a virtual brace open. -# These occur in un-braced if/while/do/for statement bodies. -nl_after_vbrace_open = false # false/true - -# Whether to alter newlines in '#define' macros -nl_define_macro = true # false/true - -# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif' -nl_squeeze_ifdef = false # false/true - -# Add or remove newline before 'if' -nl_before_if = add # ignore/add/remove/force - -# Add or remove newline after 'if' -nl_after_if = add # ignore/add/remove/force - -# Add or remove newline before 'for' -nl_before_for = add # ignore/add/remove/force - -# Add or remove newline after 'for' -nl_after_for = add # ignore/add/remove/force - -# Add or remove newline before 'while' -nl_before_while = add # ignore/add/remove/force - -# Add or remove newline after 'while' -nl_after_while = add # ignore/add/remove/force - -# Add or remove newline before 'switch' -nl_before_switch = add # ignore/add/remove/force - -# Add or remove newline after 'switch' -nl_after_switch = add # ignore/add/remove/force - -# Add or remove newline before 'do' -nl_before_do = add # ignore/add/remove/force - -# Add or remove newline after 'do' -nl_after_do = add # ignore/add/remove/force - -# Whether to double-space commented-entries in struct/enum -nl_ds_struct_enum_cmt = false # false/true - -# Whether to double-space before the close brace of a struct/union/enum -nl_ds_struct_enum_close_brace = false # false/true - -# Add or remove a newline around a class colon. -# Related to pos_class_colon, nl_class_init_args, and pos_comma. -nl_class_colon = remove # ignore/add/remove/force - -# Change simple unbraced if statements into a one-liner -# 'if(b)\n i++;' => 'if(b) i++;' -nl_create_if_one_liner = false # false/true - -# Change simple unbraced for statements into a one-liner -# 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);' -nl_create_for_one_liner = false # false/true - -# Change simple unbraced while statements into a one-liner -# 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);' -nl_create_while_one_liner = false # false/true - -# -# Positioning options -# - -# The position of boolean operators in wrapped expressions -pos_bool = trail # ignore/lead/trail - -# The position of the comma in wrapped expressions -pos_comma = trail # ignore/lead/trail - -# The position of the comma in the constructor initialization list -pos_class_comma = trail # ignore/lead/trail - -# The position of colons between constructor and member initialization -pos_class_colon = trail # ignore/lead/trail - -# -# Line Splitting options -# - -# Try to limit code width to N number of columns -code_width = 80 # number - -# Whether to fully split long 'for' statements at semi-colons -ls_for_split_full = true # false/true - -# Whether to fully split long function protos/calls at commas -ls_func_split_full = true # false/true - -# -# Blank line options -# - -# The maximum consecutive newlines -nl_max = 2 # number - -# The number of newlines after a function prototype, if followed by another function prototype -nl_after_func_proto = 1 # number - -# The number of newlines after a function prototype, if not followed by another function prototype -nl_after_func_proto_group = 2 # number - -# The number of newlines after '}' of a multi-line function body -nl_after_func_body = 2 # number - -# The number of newlines after '}' of a single line function body -nl_after_func_body_one_liner = 1 # number - -# The minimum number of newlines before a multi-line comment. -# Doesn't apply if after a brace open or another multi-line comment. -nl_before_block_comment = 2 # number - -# The minimum number of newlines before a single-line C comment. -# Doesn't apply if after a brace open or other single-line C comments. -nl_before_c_comment = 0 # number - -# The minimum number of newlines before a CPP comment. -# Doesn't apply if after a brace open or other CPP comments. -nl_before_cpp_comment = 0 # number - -# Whether to force a newline after a mulit-line comment. -nl_after_multiline_comment = false # false/true - -# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. -# Will not change the newline count if after a brace open. -# 0 = No change. -nl_before_access_spec = 1 # number - -# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. -# 0 = No change. -nl_after_access_spec = 1 # number - -# Whether to remove blank lines after '{' -eat_blanks_after_open_brace = true # false/true - -# Whether to remove blank lines before '}' -eat_blanks_before_close_brace = true # false/true - -# -# Code modifying options (non-whitespace) -# - -# Add or remove braces on single-line 'do' statement -mod_full_brace_do = add # ignore/add/remove/force - -# Add or remove braces on single-line 'for' statement -mod_full_brace_for = add # ignore/add/remove/force - -# Add or remove braces on single-line function defintions. (Pawn) -mod_full_brace_function = add # ignore/add/remove/force - -# Add or remove braces on single-line 'if' statement -mod_full_brace_if = add # ignore/add/remove/force - -# Don't remove braces around statements that span N newlines -mod_full_brace_nl = 0 # number - -# Add or remove braces on single-line 'while' statement -mod_full_brace_while = add # ignore/add/remove/force - -# Add or remove unnecessary paren on 'return' statement -mod_paren_on_return = remove # ignore/add/remove/force - -# Whether to change optional semicolons to real semicolons -mod_pawn_semicolon = false # false/true - -# Add parens on 'while' and 'if' statement around bools -mod_full_paren_if_bool = true # false/true - -# Whether to remove superfluous semicolons -mod_remove_extra_semicolon = true # false/true - -# If a function body exceeds the specified number of newlines and doesn't have a comment after -# the close brace, a comment will be added. -mod_add_long_function_closebrace_comment = 0 # number - -# If a switch body exceeds the specified number of newlines and doesn't have a comment after -# the close brace, a comment will be added. -mod_add_long_switch_closebrace_comment = 0 # number - -# If TRUE, will sort consecutive single-line 'import' statements [Java, D] -mod_sort_import = false # false/true - -# If TRUE, will sort consecutive single-line 'using' statements [C#] -mod_sort_using = false # false/true - -# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C] -# This is generally a bad idea, as it may break your code. -mod_sort_include = false # false/true - -# -# Comment modifications -# - -# Try to wrap comments at cmt_witdth columns -cmt_width = 0 # number - -# Whether to group c-comments that look like they are in a block -cmt_c_group = false # false/true - -# Whether to put an empty '/*' on the first line of the combined c-comment -cmt_c_nl_start = true # false/true - -# Whether to put a newline before the closing '*/' of the combined c-comment -cmt_c_nl_end = true # false/true - -# Whether to group cpp-comments that look like they are in a block -cmt_cpp_group = false # false/true - -# Whether to put an empty '/*' on the first line of the combined cpp-comment -cmt_cpp_nl_start = false # false/true - -# Whether to put a newline before the closing '*/' of the combined cpp-comment -cmt_cpp_nl_end = false # false/true - -# Whether to change cpp-comments into c-comments -cmt_cpp_to_c = true # false/true - -# Whether to put a star on subsequent comment lines -cmt_star_cont = true # false/true - -# The number of spaces to insert at the start of subsequent comment lines -cmt_sp_before_star_cont = 0 # number - -# The number of spaces to insert after the star on subsequent comment lines -cmt_sp_after_star_cont = 0 # number - -# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment. -# Will substitue $(filename) with the current file's name. -cmt_insert_file_header = "" # string - -# The filename that contains text to insert before a function implementation if the function isn't preceeded with a C/C++ comment. -# Will substitue $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff. -# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... } -cmt_insert_func_header = "" # string - -# The filename that contains text to insert before a class if the class isn't preceeded with a C/C++ comment. -# Will substitue $(class) with the class name. -cmt_insert_class_header = "" # string - -# -# Preprocessor options -# - -# Control indent of preprocessors inside #if blocks at brace level 0 -pp_indent = add # ignore/add/remove/force - -# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false) -pp_indent_at_level = false # false/true - -# Add or remove space after # based on pp_level of #if blocks -pp_space = remove # ignore/add/remove/force - -# Sets the number of spaces added with pp_space -pp_space_count = 0 # number - -# The indent for #region and #endregion in C# and '#pragma region' in C/C++ -pp_indent_region = 0 # number - -# Whether to indent the code between #region and #endregion -pp_region_indent_code = false # false/true - -# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level -pp_indent_if = 0 # number - -# Control whether to indent the code between #if, #else and #endif when not at file-level -pp_if_indent_code = false # false/true - -# Whether to indent '#define' at the brace level (true) or from column 1 (false) -pp_define_at_level = false # false/true diff --git a/stuff/quake2-start.sh b/stuff/quake2-start.sh deleted file mode 100755 index 7b020da6d..000000000 --- a/stuff/quake2-start.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -set -eu - -# PID of "gnome-screensaver-command -i" (if used) -GSC_PID="" - -# if gnome-screensaver is running in the background.. -if ps auxww | grep -q 'gnome-screensaver'; then - echo "inhibiting gnome screensaver" - gnome-screensaver-command -i & - # save the PID of the last command - GSC_PID="$!" -fi - -# Stop unclutter -if ps auxww | grep -q 'unclutter'; then - echo 'inhibiting unclutter' - killall -STOP unclutter -fi - -# enable core dumps -ulimit -c unlimited - -# run quake 2 -./quake2 "$@" - -# Continue unclutter -if ps auxww | grep -q 'unclutter'; then - echo 'reactivating unclutter' - killall -CONT unclutter -fi - -# if gnome-screensaver was running.. -if [ -n "$GSC_PID" ]; then - echo "reactivating gnome screensaver" - kill "$GSC_PID" -fi