Git Product home page Git Product logo

ericw-tools's Introduction

ericw-tools

Original tyurtils:

Build status

About

ericw-tools is a branch of Tyrann's quake 1 tools, focused on adding lighting features, mostly borrowed from q3map2. There are a few bugfixes for qbsp as well. Original readme follows:

A collection of command line utilities for building Quake levels and working with various Quake file formats. I need to work on the documentation a bit more, but below are some brief descriptions of the tools.

Included utilities:

  • qbsp - Used for turning a .map file into a playable .bsp file.

  • light - Used for lighting a level after the bsp stage. This util was previously known as TyrLite

  • vis - Creates the potentially visible set (PVS) for a bsp.

  • bspinfo - Print stats about the data contained in a bsp file.

  • bsputil - Simple tool for manipulation of bsp file data

See the doc/ directory for more detailed descriptions of the various tools capabilities. See changelog.md for a brief overview of recent changes or https://github.com/ericwa/ericw-tools for the full changelog and source code.

Compiling

Dependencies: Embree 3.0+, TBB (TODO: version?), Sphinx (for building manuals)

Ubuntu

NOTE: Builds using Ubuntu's embree packages produce a significantly slower light (i.e. over twice as slow) than ones released on Embree's GitHub. See build-linux-64.sh for a better method.

sudo apt install libembree-dev libtbb-dev cmake build-essential g++
sudo apt install python3-pip
python3 -m pip install sphinx_rtd_theme
export PATH="~/.local/bin/:$PATH"
git clone --recursive https://github.com/ericwa/ericw-tools
cd ericw-tools
mkdir build
cd build
cmake ..

Windows

Example using vcpkg (32-bit build):

git clone --recursive https://github.com/ericwa/ericw-tools
cd ericw-tools

# creates a python virtual environment in the directory `sphinx-venv`
# and install sphinx (for building the docs)
py.exe -m venv sphinx-venv
.\sphinx-venv\Scripts\Activate.ps1
py.exe -m pip install -r docs/requirements.txt

git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat

# NOTE: vcpkg builds for 32-bit by default
# NOTE: takes 30+ minutes
.\vcpkg\vcpkg install embree3
mkdir build
cd build

# PowerShell syntax for getting current directory -
# otherwise, replace with absolute path to "vcpkg/scripts/buildsystems/vcpkg.cmake"
cmake .. -DCMAKE_TOOLCHAIN_FILE="$(pwd)/../vcpkg/scripts/buildsystems/vcpkg.cmake" -DCMAKE_GENERATOR_PLATFORM=Win32 -DSPHINX_EXECUTABLE="$(pwd)/../sphinx-venv/Scripts/sphinx-build.exe"

macOS 10.15

brew install embree tbb
python3 -m pip install sphinx_rtd_theme
git clone --recursive https://github.com/ericwa/ericw-tools
cd ericw-tools
mkdir build
cd build
cmake .. -GXcode -DCMAKE_PREFIX_PATH="$(brew --prefix embree);$(brew --prefix tbb)"

Credits

  • Kevin Shanahan (AKA Tyrann) for the original tyrutils
  • id Software (original release of these tools is at https://github.com/id-Software/quake-tools)
  • rebb (ambient occlusion, qbsp improvements)
  • q3map2 authors (AO, sunlight2, penumbra, deviance are from q3map2)
  • Spike (hexen 2 support, phong shading, various features)
  • MH (surface lights based on MHColour)
  • mfx, sock, Lunaran (testing)
  • Thanks to users at func_msgboard for feedback and testing

License

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

Builds using Embree are licensed under GPLv3+ for compatibility with the Apache license.

ericw-tools's People

Contributors

4lt avatar bryanhaley avatar calinou avatar cmdrf avatar dependabot[bot] avatar dsvensson avatar ericwa avatar hrehfeld avatar iknowsomething avatar jjelliott avatar jonathanlinat avatar juzley avatar m-x-d avatar maikmerten avatar neogeographica avatar paril avatar qruf avatar randomerrormessage avatar rrika avatar sezero avatar shpoike avatar shpuld avatar slartibarty avatar ttimo avatar xdshot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ericw-tools's Issues

T-Juncs not working?

Why does this func_detail brush have t-juncs?
screen shot 2015-12-12 at 6 42 05 pm

{
"spawnflags" "0"
"classname" "worldspawn"
"wad" "Q.wad"
"_point_format" "1"
"_sunlight" "300"
"_sun_mangle" "-60 -60 0"
"_sunlight_color" "1 0.631373 0.631373"
{
( -1440 -4672 1200 ) ( -1440 -4672 1232 ) ( 672 -4672 1200 ) sky1 0 -16 0 1 1
( -3136 -2688 1200 ) ( -3136 -1632 1200 ) ( -3136 -2688 1232 ) sky1 0 -16 0 1 1
( -1440 -2688 1184 ) ( 672 -2688 1184 ) ( -1440 -1632 1184 ) sky1 0 0 0 1 1
( 672 -576 1232 ) ( -1440 -576 1232 ) ( 672 -576 1200 ) sky1 0 -16 0 1 1
( 1568 -1632 1232 ) ( 1568 -1632 1200 ) ( 1568 -2688 1232 ) sky1 0 -16 0 1 1
( 672 -1632 1312 ) ( 672 -2688 1312 ) ( -1440 -1632 1312 ) sky1 0 0 0 1 1
}
{
( -1440 -4672 1200 ) ( -1440 -4672 1232 ) ( 672 -4672 1200 ) sky1 0 -16 0 1 1
( 1536 -2688 1200 ) ( 1536 -1632 1200 ) ( 1536 -2688 1232 ) sky1 0 -16 0 1 1
( -1440 -2688 1184 ) ( 672 -2688 1184 ) ( -1440 -1632 1184 ) sky1 0 0 0 1 1
( 672 -544 1232 ) ( -1440 -544 1232 ) ( 672 -544 1200 ) sky1 0 -16 0 1 1
( 1568 -1632 1232 ) ( 1568 -1632 1200 ) ( 1568 -2688 1232 ) sky1 0 -16 0 1 1
( 672 -1632 3136 ) ( 672 -2688 3136 ) ( -1440 -1632 3136 ) sky1 0 0 0 1 1
}
{
( -1440 -4672 1200 ) ( -1440 -4672 1232 ) ( 672 -4672 1200 ) sky1 0 -16 0 1 1
( -3136 -2688 1200 ) ( -3136 -1632 1200 ) ( -3136 -2688 1232 ) sky1 0 -16 0 1 1
( -1440 -2688 3072 ) ( 672 -2688 3072 ) ( -1440 -1632 3072 ) sky1 0 -16 0 1 1
( 672 -544 1232 ) ( -1440 -544 1232 ) ( 672 -544 1200 ) sky1 0 -16 0 1 1
( 1568 -1632 1232 ) ( 1568 -1632 1200 ) ( 1568 -2688 1232 ) sky1 0 -16 0 1 1
( 672 -1632 3104 ) ( 672 -2688 3104 ) ( -1440 -1632 3104 ) sky1 0 0 0 1 1
}
{
( -1440 -4672 1200 ) ( -1440 -4672 1232 ) ( 672 -4672 1200 ) sky1 0 -16 0 1 1
( -3136 -2688 1200 ) ( -3136 -1632 1200 ) ( -3136 -2688 1232 ) sky1 0 -16 0 1 1
( -1440 -2688 1184 ) ( 672 -2688 1184 ) ( -1440 -1632 1184 ) sky1 0 0 0 1 1
( 672 -4544 1232 ) ( -1440 -4544 1232 ) ( 672 -4544 1200 ) sky1 0 -16 0 1 1
( 1568 -1632 1232 ) ( 1568 -1632 1200 ) ( 1568 -2688 1232 ) sky1 0 -16 0 1 1
( 672 -1632 3296 ) ( 672 -2688 3296 ) ( -1440 -1632 3296 ) sky1 0 0 0 1 1
}
{
( -1440 -4672 1200 ) ( -1440 -4672 1232 ) ( 672 -4672 1200 ) sky1 0 -16 0 1 1
( -3136 -2688 1200 ) ( -3136 -1632 1200 ) ( -3136 -2688 1232 ) sky1 0 -16 0 1 1
( -1440 -2688 1184 ) ( 672 -2688 1184 ) ( -1440 -1632 1184 ) sky1 0 0 0 1 1
( 672 -544 1232 ) ( -1440 -544 1232 ) ( 672 -544 1200 ) sky1 0 -16 0 1 1
( -3072 -1632 1232 ) ( -3072 -1632 1200 ) ( -3072 -2688 1232 ) sky1 0 -16 0 1 1
( 672 -1632 3680 ) ( 672 -2688 3680 ) ( -1440 -1632 3680 ) sky1 0 0 0 1 1
}
{
( -1440 -608 1200 ) ( -1440 -608 1232 ) ( 672 -608 1200 ) sky1 0 -16 0 1 1
( -3136 -2688 1200 ) ( -3136 -1632 1200 ) ( -3136 -2688 1232 ) sky1 0 -16 0 1 1
( -1440 -2688 1184 ) ( 672 -2688 1184 ) ( -1440 -1632 1184 ) sky1 0 0 0 1 1
( 672 -544 1232 ) ( -1440 -544 1232 ) ( 672 -544 1200 ) sky1 0 -16 0 1 1
( 1568 -1632 1232 ) ( 1568 -1632 1200 ) ( 1568 -2688 1232 ) sky1 0 -16 0 1 1
( 672 -1632 3104 ) ( 672 -2688 3104 ) ( -1440 -1632 3104 ) sky1 0 0 0 1 1
}
}
{
"spawnflags" "0"
"classname" "info_player_start"
"origin" "496 -944 2056"
"angle" "270"
}
{
"spawnflags" "0"
"classname" "func_detail"
"_smooth" "cop1_6"
{
( -112 -2128 1408 ) ( -112 -2128 1824 ) ( 80 -2128 1408 ) skip -0 -0 -0 1 1
( -112 -1936 1536 ) ( -112 -2128 1824 ) ( -112 -2128 1408 ) skip -0 -0 -0 1 1
( 80 -2128 1408 ) ( 80 -1936 1408 ) ( -112 -2128 1408 ) skip -0 -0 -0 1 1
( 80 -1936 1632 ) ( -112 -1936 1536 ) ( 80 -1936 1408 ) skip -0 -0 -0 1 1
( 80 -1936 1408 ) ( 80 -2128 1408 ) ( 80 -1936 1632 ) skip -0 -0 -0 1 1
( -112 -1936 1536 ) ( 80 -1936 1632 ) ( -112 -2128 1824 ) cop1_6 -0 -0 -0 1 1
( -112 -1936 1536 ) ( -112 -2128 1408 ) ( 80 -1936 1408 ) skip -0 -0 -0 1 1
}
{
( 272 -2128 1408 ) ( 80 -2128 1408 ) ( 272 -2128 2128 ) skip 0 0 0 1 1
( 80 -1936 1408 ) ( 80 -1936 1632 ) ( 80 -2128 1408 ) skip 0 0 0 1 1
( 272 -2128 1408 ) ( 272 -1936 1408 ) ( 80 -2128 1408 ) skip 0 0 0 1 1
( 272 -1936 1408 ) ( 272 -1936 1840 ) ( 80 -1936 1408 ) skip 0 0 0 1 1
( 272 -1936 1408 ) ( 272 -2128 1408 ) ( 272 -1936 1840 ) skip 0 0 0 1 1
( 80 -1936 1632 ) ( 272 -1936 1840 ) ( 80 -2128 1920 ) cop1_6 0 0 0 1 1
}
}

use vis data if present

  • store leaf that each light is in
  • build face -> leafs map.
  • merge visdata for the leafs a face is in.

added support for unversioned BSP files just like juggernaut maps

the juggernaut bsp files has no property set version, and must be edited to property handled in linux

so the bsp files must be altered or regenerated to change the paths to a lowercase due case-sensity are mandatory in real operating systems such like linux, unix, freebsd or mac

when i try to use the tools in a juggernaut bsp file i got that result:

JDM1.BSP
BSP is version 1347633737
************ ERROR ************

Hint brushes clip away sky

Doesn't seem to happen with txqbsp-xt though.

{
"classname" "worldspawn"
{
( -160 -64 -16 ) ( -160 -63 -16 ) ( -160 -64 -15 ) afloor1_4 0 0 0 1 1
( 64 64 16 ) ( 64 64 17 ) ( 64 65 16 ) afloor1_4 0 0 0 1 1
( -64 -192 -16 ) ( -64 -192 -15 ) ( -63 -192 -16 ) afloor1_4 0 0 0 1 1
( 64 64 16 ) ( 65 64 16 ) ( 64 64 17 ) afloor1_4 0 0 0 1 1
( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) afloor1_4 0 0 0 1 1
( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) afloor1_4 0 0 0 1 1
}
{
( -160 64 -16 ) ( -160 65 -16 ) ( -160 64 -15 ) sky1 0 0 0 1 1
( 64 192 16 ) ( 64 192 17 ) ( 64 193 16 ) sky1 0 0 0 1 1
( -64 64 -16 ) ( -64 64 -15 ) ( -63 64 -16 ) sky1 0 0 0 1 1
( 64 192 16 ) ( 65 192 16 ) ( 64 192 17 ) sky1 0 0 0 1 1
( 64 192 128 ) ( 64 193 128 ) ( 65 192 128 ) sky1 0 0 0 1 1
( -64 64 -16 ) ( -63 64 -16 ) ( -64 65 -16 ) sky1 0 0 0 1 1
}
{
( 64 -64 -16 ) ( 64 -63 -16 ) ( 64 -64 -15 ) sky1 0 0 0 1 1
( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) sky1 0 0 0 1 1
( 64 -192 -16 ) ( 64 -192 -15 ) ( 65 -192 -16 ) sky1 0 0 0 1 1
( 192 64 16 ) ( 193 64 16 ) ( 192 64 17 ) sky1 0 0 0 1 1
( 192 64 128 ) ( 192 65 128 ) ( 193 64 128 ) sky1 0 0 0 1 1
( 64 -64 -16 ) ( 65 -64 -16 ) ( 64 -63 -16 ) sky1 0 0 0 1 1
}
{
( -0 -32 32 ) ( 64 -32 48 ) ( 64 -32 32 ) hint 0 0 0 1 1
( -32 -0 32 ) ( -32 64 48 ) ( -32 -0 48 ) hint 0 0 0 1 1
( -0 -0 -32 ) ( 64 64 -32 ) ( -0 64 -32 ) hint 0 0 0 1 1
( -0 -0 48 ) ( 64 64 48 ) ( 64 -0 48 ) hint 0 0 0 1 1
( -0 128 32 ) ( 64 128 48 ) ( -0 128 48 ) hint 0 0 0 1 1
( 224 -0 32 ) ( 224 64 48 ) ( 224 64 32 ) hint 0 0 0 1 1
}
}
{
"classname" "info_player_start"
"origin" "-128 -64 40"
"angle" "-0"
}

Build error due to using C99 constructs

kristian@kristian-Parallels-Virtual-Platform:~/Documents/tyrutils-ericw/build$ cmake --build .
Scanning dependencies of target man_bspinfo
[  1%] Generating bspinfo.html
[  1%] Built target man_bspinfo
Scanning dependencies of target bspinfo
[  3%] Building C object bspinfo/CMakeFiles/bspinfo.dir/bspinfo.c.o
[  5%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/cmdlib.c.o
[  7%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/bspfile.c.o
[  8%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/log.c.o
[ 10%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/threads.c.o
Linking C executable bspinfo
[ 10%] Built target bspinfo
Scanning dependencies of target man_bsputil
[ 12%] Generating bsputil.html
[ 12%] Built target man_bsputil
Scanning dependencies of target bsputil
[ 14%] Building C object bsputil/CMakeFiles/bsputil.dir/bsputil.c.o
[ 15%] Building C object bsputil/CMakeFiles/bsputil.dir/__/common/cmdlib.c.o
[ 17%] Building C object bsputil/CMakeFiles/bsputil.dir/__/common/bspfile.c.o
[ 19%] Building C object bsputil/CMakeFiles/bsputil.dir/__/common/log.c.o
[ 21%] Building C object bsputil/CMakeFiles/bsputil.dir/__/common/threads.c.o
Linking C executable bsputil
[ 21%] Built target bsputil
Scanning dependencies of target man_light
[ 22%] Generating light.html
[ 22%] Built target man_light
Scanning dependencies of target light
[ 24%] Building C object light/CMakeFiles/light.dir/entities.c.o
[ 26%] Building C object light/CMakeFiles/light.dir/litfile.c.o
[ 28%] Building C object light/CMakeFiles/light.dir/ltface.c.o
/home/kristian/Documents/tyrutils-ericw/light/ltface.c: In function ‘CheckObstructed’:
/home/kristian/Documents/tyrutils-ericw/light/ltface.c:585:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (int x = -1; x <= 1; x += 2) {
     ^
/home/kristian/Documents/tyrutils-ericw/light/ltface.c:585:5: note: use option -std=c99 or -std=gnu99 to compile your code
/home/kristian/Documents/tyrutils-ericw/light/ltface.c:586:9: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for (int y = -1; y <= 1; y += 2) {
         ^
/home/kristian/Documents/tyrutils-ericw/light/ltface.c: In function ‘CalcPoints’:
/home/kristian/Documents/tyrutils-ericw/light/ltface.c:638:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (int t = 0; t < surf->height; t++) {
     ^
/home/kristian/Documents/tyrutils-ericw/light/ltface.c:639:9: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for (int s = 0; s < surf->width; s++) {
         ^
make[2]: *** [light/CMakeFiles/light.dir/ltface.c.o] Error 1
make[1]: *** [light/CMakeFiles/light.dir/all] Error 2
make: *** [all] Error 2

documentation features more cleary for debian oficial package

i want to promote a debian oficial package and the features documentation are only in the web page, the build system are not documented (reviewing the sources i noted a dual build system using cmake or makefiles, and seems cmake generates binaries in different places)

Build error on XUbuntu Linux 14.04

kristian@kristian-Parallels-Virtual-Platform:~/Documents/tyrutils-ericw/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kristian/Documents/tyrutils-ericw/build
kristian@kristian-Parallels-Virtual-Platform:~/Documents/tyrutils-ericw/build$ cmake --build .
[  1%] Built target man_bspinfo
Scanning dependencies of target bspinfo
[  3%] Building C object bspinfo/CMakeFiles/bspinfo.dir/bspinfo.c.o
[  5%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/cmdlib.c.o
[  7%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/bspfile.c.o
[  8%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/log.c.o
[ 10%] Building C object bspinfo/CMakeFiles/bspinfo.dir/__/common/threads.c.o
Linking C executable bspinfo
CMakeFiles/bspinfo.dir/__/common/threads.c.o: In function `RunThreadsOn':
threads.c:(.text+0x1d1): undefined reference to `pthread_mutexattr_init'
threads.c:(.text+0x278): undefined reference to `pthread_attr_setstacksize'
threads.c:(.text+0x2f7): undefined reference to `pthread_create'
threads.c:(.text+0x34b): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[2]: *** [bspinfo/bspinfo] Error 1
make[1]: *** [bspinfo/CMakeFiles/bspinfo.dir/all] Error 2
make: *** [all] Error 2

Possibly relevant on stackoverflow: http://stackoverflow.com/questions/1662909/undefined-reference-to-pthread-create-in-linux

Obstructions <1 unit from a face break CalcPoints

Investigate the black wall face:

spasm0003

{
"spawnflags" "0"
"classname" "worldspawn"
"wad" "telefragged.wad"
{
( -112 1472 160 ) ( -112 1472 288 ) ( 192 1472 160 ) jf2brick01 0 0 0 1 1
( -112 -48 -800 ) ( 192 -48 -800 ) ( -112 -0 -800 ) jf2brick01 32 -32 0 1 1
( 192 1536 288 ) ( -112 1536 288 ) ( 192 1536 160 ) jf2brick01 0 0 0 1 1
( -640 1536 -112 ) ( -512 1536 -112 ) ( -640 1504 -112 ) jf2brick01 32 -32 0 1 1
( -896 1472 -176 ) ( -896 1600 -176 ) ( -896 1472 -160 ) jf2brick01 32 -16 0 1 1
( -832 1472 -192 ) ( -832 1344 -192 ) ( -832 1472 -64 ) jf2rust68 0 0 90 1 1
}
{
( -896 -48 -64 ) ( -896 -0 -64 ) ( -896 -48 64 ) jf2brick01 32 16 0 1 1
( 128 -0 -368 ) ( 128 -48 -368 ) ( -176 -0 -368 ) jf2plat08 0 0 0 1 1
( -704 1280 -400 ) ( -576 1280 -400 ) ( -704 1296 -400 ) jf2rust76 0 0 0 1 1
( -768 1440 -368 ) ( -768 1440 -240 ) ( -896 1440 -368 ) jf2brick01 -32 16 0 1 1
( -736 1264 -400 ) ( -736 1280 -400 ) ( -736 1264 -528 ) jf2rust68 16 0 90 1 1
( -800 1248 -400 ) ( -928 1248 -400 ) ( -800 1248 -272 ) jf2brick01 -32 16 0 1 1
}
{
( -112 1472 160 ) ( -112 1472 288 ) ( 192 1472 160 ) jf2rust68 0 0 0 1 1
( -112 -48 -800 ) ( 192 -48 -800 ) ( -112 -0 -800 ) jf2brick01 32 -32 0 1 1
( 192 1536 288 ) ( -112 1536 288 ) ( 192 1536 160 ) jf2brick01 0 0 0 1 1
( -640 1536 -112 ) ( -512 1536 -112 ) ( -640 1504 -112 ) jf2brick01 32 -32 0 1 1
( -832 1472 -192 ) ( -832 1472 -64 ) ( -832 1344 -192 ) jf2brick01 32 -16 0 1 1
( -800 1472 -176 ) ( -800 1344 -176 ) ( -800 1472 -48 ) jf2rust68 0 0 90 1 1
}
{
( -112 1472 160 ) ( -112 1472 288 ) ( 192 1472 160 ) jf2brick01 0 0 0 1 1
( -112 -48 -800 ) ( 192 -48 -800 ) ( -112 -0 -800 ) jf2brick01 0 0 0 1 1
( 192 1536 288 ) ( -112 1536 288 ) ( 192 1536 160 ) jf2brick01 0 0 0 1 1
( -896 1472 -176 ) ( -896 1472 -160 ) ( -896 1600 -176 ) jf2brick01 0 0 0 1 1
( -960 1472 -208 ) ( -960 1472 -80 ) ( -960 1344 -208 ) jf2brick01 0 0 0 1 1
( -928 1536 -112 ) ( -944 1536 -112 ) ( -928 1664 -112 ) jf2brick01 0 0 0 1 1
}
{
( -368 1248 -64 ) ( -368 1248 64 ) ( -64 1248 -64 ) jf2brick01 0 0 0 1 1
( -368 -48 -656 ) ( -64 -48 -656 ) ( -368 -0 -656 ) jf2brick01 0 0 0 1 1
( -64 1440 64 ) ( -368 1440 64 ) ( -64 1440 -64 ) jf2brick01 0 0 0 1 1
( -992 1216 -248 ) ( -992 1216 -120 ) ( -992 1088 -248 ) jf2brick01 0 0 0 1 1
( -896 1216 -288 ) ( -896 1088 -288 ) ( -896 1216 -160 ) jf2brick01 0 0 0 1 1
( -928 1200 -368 ) ( -928 1168 -368 ) ( -944 1184 -368 ) jf2plat08 0 0 0 1 1
}
{
( -960 -48 -64 ) ( -960 -0 -64 ) ( -960 -48 64 ) jf2rust68 0 0 90 1 1
( 128 1472 64 ) ( -176 1472 64 ) ( 128 1472 -64 ) jf2rust68 0 0 90 1 1
( 128 -0 -368 ) ( 128 -48 -368 ) ( -176 -0 -368 ) jf2rust68 0 0 90 1 1
( -704 1280 -400 ) ( -576 1280 -400 ) ( -704 1296 -400 ) jf2rust68 0 0 90 1 1
( -736 1264 -400 ) ( -736 1280 -400 ) ( -736 1264 -528 ) jf2rust68 0 0 90 1 1
( -784 1440 -400 ) ( -912 1440 -400 ) ( -784 1440 -272 ) jf2rust68 0 0 90 1 1
}
{
( -112 1472 160 ) ( -112 1472 288 ) ( 192 1472 160 ) jf2brick01 0 0 0 1 1
( -112 -48 -800 ) ( 192 -48 -800 ) ( -112 -0 -800 ) jf2brick01 32 -32 0 1 1
( 192 1536 288 ) ( -112 1536 288 ) ( 192 1536 160 ) jf2brick01 0 0 0 1 1
( -640 1536 -112 ) ( -512 1536 -112 ) ( -640 1504 -112 ) jf2brick01 32 -32 0 1 1
( -672 1472 -272 ) ( -672 1344 -272 ) ( -672 1472 -144 ) jf2rust68 0 0 90 1 1
( -800 1472 -176 ) ( -800 1472 -48 ) ( -800 1344 -176 ) jf2brick01 32 -16 0 1 1
}
{
( 128 1472 64 ) ( -176 1472 64 ) ( 128 1472 -64 ) jf2brick01 -32 16 0 1 1
( -704 -0 64 ) ( -704 -0 -64 ) ( -704 -48 64 ) jf2rust68 16 0 90 1 1
( 128 -0 -368 ) ( 128 -48 -368 ) ( -176 -0 -368 ) jf2rust68 0 0 0 1 1
( -704 1280 -400 ) ( -576 1280 -400 ) ( -704 1296 -400 ) jf2rust68 0 0 0 1 1
( -784 1376 -368 ) ( -912 1376 -368 ) ( -784 1376 -240 ) jf2brick01 -32 16 0 1 1
( -736 1264 -400 ) ( -736 1264 -528 ) ( -736 1280 -400 ) jf2brick01 32 16 0 1 1
}
{
( -368 1216 -64 ) ( -368 1216 64 ) ( -64 1216 -64 ) jf2brick01 32 16 0 1 1
( -960 1216 -248 ) ( -960 1088 -248 ) ( -960 1216 -120 ) jf2brick01 32 16 0 1 1
( -992 1376 -240 ) ( -992 1392 -240 ) ( -992 1376 -112 ) jf2brick01 32 16 0 1 1
( -960 1344 -272 ) ( -960 1360 -272 ) ( -832 1344 -272 ) jf2plat08 0 0 90 1 1
( -976 1472 -272 ) ( -976 1472 -144 ) ( -1104 1472 -272 ) jf2rust72 0 0 0 1 1
( -976 1200 -372 ) ( -976 1216 -372 ) ( -992 1200 -372 ) jf2brick01 32 -32 0 1 1
}
{
( -368 1216 -64 ) ( -368 1216 64 ) ( -64 1216 -64 ) jf2rust68 16 0 90 1 1
( -64 1472 64 ) ( -368 1472 64 ) ( -64 1472 -64 ) jf2lite10 0 16 0 1 1
( -64 -0 -240 ) ( -64 -48 -240 ) ( -368 -0 -240 ) jf2rust68 0 0 0 1 1
( -960 1216 -248 ) ( -960 1088 -248 ) ( -960 1216 -120 ) jf2rust68 16 0 90 1 1
( -992 1376 -240 ) ( -992 1392 -240 ) ( -992 1376 -112 ) jf2rust68 0 0 0 1 1
( -960 1344 -272 ) ( -832 1344 -272 ) ( -960 1360 -272 ) jf2rust68 0 0 0 1 1
}
{
( -112 1472 160 ) ( -112 1472 288 ) ( 192 1472 160 ) jf2brick01 0 0 0 1 1
( 192 1536 288 ) ( -112 1536 288 ) ( 192 1536 160 ) jf2rust68 16 0 90 1 1
( -640 1536 -80 ) ( -512 1536 -80 ) ( -640 1504 -80 ) jf2brick01 0 0 0 1 1
( -896 1472 -176 ) ( -896 1472 -160 ) ( -896 1600 -176 ) jf2brick01 0 0 0 1 1
( -960 1472 -208 ) ( -960 1472 -80 ) ( -960 1344 -208 ) jf2brick01 0 0 0 1 1
( -928 1536 -112 ) ( -928 1664 -112 ) ( -944 1536 -112 ) jf2brick01 0 0 0 1 1
}
{
( -368 -48 -96 ) ( -64 -48 -96 ) ( -368 -0 -96 ) jf2rust76 0 0 0 1 1
( -832 -0 432 ) ( -832 -0 304 ) ( -832 -48 432 ) jf2brick01 32 0 0 1 1
( -928 1152 -48 ) ( -928 1024 -48 ) ( -944 1152 -48 ) jf2brick01 32 -32 0 1 1
( -912 1216 -112 ) ( -912 1216 -240 ) ( -944 1216 -112 ) jf2brick01 32 0 0 1 1
( -960 1472 -112 ) ( -960 1472 -240 ) ( -944 1472 -112 ) jf2brick01 32 0 0 1 1
( -1248 1280 -112 ) ( -1248 1280 -240 ) ( -1248 1292 -112 ) jf2brick01 32 0 0 1 1
}
{
( -112 1472 160 ) ( -112 1472 288 ) ( 192 1472 160 ) jf2brick01 0 0 0 1 1
( -640 -0 288 ) ( -640 -0 160 ) ( -640 -48 288 ) jf2rust68 32 -16 0 1 1
( 192 -0 128 ) ( 192 -48 128 ) ( -112 -0 128 ) jf2brick01 32 -32 0 1 1
( -640 1536 -112 ) ( -640 1504 -112 ) ( -512 1536 -112 ) jf2brick01 32 -32 0 1 1
( -896 1472 -176 ) ( -896 1600 -176 ) ( -896 1472 -160 ) jf2brick01 32 -16 0 1 1
( -512 1504 -16 ) ( -512 1504 112 ) ( -640 1504 -16 ) jf2brick01 32 -16 0 1 1
}
{
( -176 1216 304 ) ( -176 1216 432 ) ( 128 1216 304 ) jf2brick01 -32 0 0 1 1
( -176 -48 -96 ) ( 128 -48 -96 ) ( -176 -0 -96 ) jf2rust76 0 0 0 1 1
( 128 1472 432 ) ( -176 1472 432 ) ( 128 1472 304 ) jf2brick01 -32 0 0 1 1
( -592 1312 -16 ) ( -560 1328 -16 ) ( -576 1312 -16 ) jf2brick01 -32 -32 0 1 1
( -800 1248 -160 ) ( -800 1248 -288 ) ( -800 1264 -160 ) jf2brick01 32 0 0 1 1
( -672 1248 -160 ) ( -672 1264 -160 ) ( -672 1248 -288 ) jf2brick01 32 0 0 1 1
}
}
{
"spawnflags" "0"
"classname" "func_detail"
{
( -992 -48 352 ) ( -992 -0 352 ) ( -992 -48 480 ) jf2rust73 0 0 0 1 1
( -336 -48 -112 ) ( -32 -48 -112 ) ( -336 -0 -112 ) jf2rust68 0 0 0 1 1
( -960 1248 -112 ) ( -960 1264 -112 ) ( -960 1248 -240 ) jf2rust73 0 0 0 1 1
( -976 1216 -112 ) ( -1104 1216 -112 ) ( -976 1216 16 ) jf2brick01 0 48 0 1 1
( -976 1472 -112 ) ( -976 1472 16 ) ( -1104 1472 -112 ) jf2brick01 0 48 0 1 1
( -992 1424 -96 ) ( -992 1408 -96 ) ( -1120 1424 -96 ) jf2brick01 0 -32 0 1 1
}
}
{
"spawnflags" "0"
"classname" "func_group"
{
( -960 1744 -128 ) ( -960 1744 -112 ) ( -960 1856 -128 ) jf2rust01 0 32 0 1 1
( -1008 1472 -128 ) ( -1200 1472 -128 ) ( -1008 1472 -112 ) jf2rust68 0 0 0 1 1
( -1008 1744 -240 ) ( -1008 1856 -240 ) ( -1200 1744 -240 ) jf2rust01 0 -64 90 1 1
( -992 1856 -112 ) ( -992 1744 -112 ) ( -992 1856 -128 ) jf2rust72 0 -32 0 1 1
( -1200 1488 -112 ) ( -1200 1488 -128 ) ( -1008 1488 -112 ) jf2rust01 0 16 180 1 -1
( -992 1472 -192 ) ( -976 1472 -192 ) ( -992 1344 -192 ) jf2rust01 0 -64 90 1 1
}
{
( -960 1744 -128 ) ( -960 1744 -112 ) ( -960 1856 -128 ) jf2rust01 0 32 0 1 1
( -1008 1472 -128 ) ( -1200 1472 -128 ) ( -1008 1472 -112 ) jf2rust68 0 0 0 1 1
( -992 1856 -112 ) ( -992 1744 -112 ) ( -992 1856 -128 ) jf2lite10 0 0 0 1 1
( -1200 1488 -112 ) ( -1200 1488 -128 ) ( -1008 1488 -112 ) jf2rust01 0 16 180 1 -1
( -976 1472 -160 ) ( -976 1344 -160 ) ( -992 1472 -160 ) jf2rust01 0 -64 90 1 1
( -992 1472 -192 ) ( -992 1344 -192 ) ( -976 1472 -192 ) jf2rust01 0 -64 90 1 1
}
{
( -960 1744 -128 ) ( -960 1744 -112 ) ( -960 1856 -128 ) jf2rust01 0 32 0 1 1
( -1008 1472 -128 ) ( -1200 1472 -128 ) ( -1008 1472 -112 ) jf2rust68 0 0 0 1 1
( -992 1856 -112 ) ( -992 1744 -112 ) ( -992 1856 -128 ) jf2rust72 0 -32 0 1 1
( -1200 1488 -112 ) ( -1200 1488 -128 ) ( -1008 1488 -112 ) jf2rust01 0 16 180 1 -1
( -1200 1856 -112 ) ( -1008 1856 -112 ) ( -1200 1744 -112 ) jf2rust01 0 -64 90 1 1
( -976 1472 -160 ) ( -992 1472 -160 ) ( -976 1344 -160 ) jf2rust01 0 -64 90 1 1
}
}
{
"spawnflags" "0"
"classname" "func_detail"
{
( -656 1344 -272 ) ( -656 1344 -240 ) ( -496 1344 -272 ) jf2plat04 -16 0 0 1 1
( -496 1360 -244 ) ( -512 1376 -244 ) ( -656 1360 -244 ) {plat07 32 0 0 1 1
( -496 1360 -240 ) ( -656 1360 -240 ) ( -512 1376 -240 ) {plat07 32 32 0 1 1
( -959 1344 -244 ) ( -960 1344 -240 ) ( -959 1216 -244 ) jf2plat04 16 0 0 1 1
( -384 1471 -244 ) ( -256 1471 -244 ) ( -384 1472 -240 ) jf2plat04 -16 0 0 1 1
( -385 1216 -244 ) ( -385 1088 -244 ) ( -384 1216 -240 ) jf2plat04 16 0 0 1 1
}
{
( -528 1368 -240 ) ( -592 1368 -240 ) ( -528 1368 -256 ) jf2grey10 0 -16 0 1 1
( -944 1368 -240 ) ( -944 1360 -240 ) ( -944 1368 -256 ) jf2grey10 16 -16 0 1 1
( -528 1360 -240 ) ( -528 1360 -256 ) ( -592 1360 -240 ) jf2grey10 0 -16 0 1 1
( -528 1368 -245 ) ( -528 1360 -245 ) ( -592 1368 -245 ) jf2grey10 0 -16 0 1 1
( -528 1368 -256 ) ( -592 1368 -256 ) ( -528 1360 -256 ) jf2grey10 0 -16 0 1 1
( -352 1360 -240 ) ( -352 1368 -240 ) ( -352 1360 -256 ) jf2grey10 16 -16 0 1 1
}
}
{
"spawnflags" "0"
"classname" "func_illusionary"
{
( -832 -48 352 ) ( -832 -0 352 ) ( -832 -48 480 ) jf2rust73 0 0 0 1 1
( -176 -48 -112 ) ( 128 -48 -112 ) ( -176 -0 -112 ) jf2rust68 0 0 0 1 1
( -800 1248 -112 ) ( -800 1264 -112 ) ( -800 1248 -240 ) jf2rust73 0 0 0 1 1
( -816 1216 -112 ) ( -944 1216 -112 ) ( -816 1216 16 ) jf2brick01 -32 48 0 1 1
( -816 1472 -112 ) ( -816 1472 16 ) ( -944 1472 -112 ) jf2brick01 -32 48 0 1 1
( -832 1424 -96 ) ( -832 1408 -96 ) ( -960 1424 -96 ) jf2brick01 -32 -32 0 1 1
}
{
( -818 1472 -142 ) ( -818 1472 -136 ) ( -818 1420 -112 ) jf2rust62 16 -16 180 1 -1
( -814 1472 -142 ) ( -814 1420 -112 ) ( -814 1472 -136 ) jf2rust62 16 -16 180 1 -1
( -818 1420 -112 ) ( -814 1420 -112 ) ( -818 1472 -142 ) jf2rust62 32 -16 -180 1 1
( -814 1472 -136 ) ( -814 1431 -112 ) ( -818 1472 -136 ) jf2rust62 32 -16 -180 1 1
( -818 1431 -112 ) ( -814 1431 -112 ) ( -818 1420 -112 ) jf2rust62 32 -16 -180 1 1
( -818 1472 -142 ) ( -814 1472 -142 ) ( -818 1472 -136 ) jf2rust62 32 -16 -180 1 -1
}
}
{
"spawnflags" "0"
"classname" "func_detail"
{
( -752 1464 -80 ) ( -640 1464 -80 ) ( -752 1464 -128 ) jf2lite02 0 -32 -90 1 1
( -752 1456 -96 ) ( -752 1472 -96 ) ( -640 1456 -96 ) jf2rust69 0 -32 90 1 -1
( -784 1456 -80 ) ( -784 1456 -128 ) ( -784 1472 -80 ) jf2rust69 0 -32 0 1 1
( -640 1472 -128 ) ( -640 1472 -80 ) ( -752 1472 -128 ) jf2rust69 0 -32 -90 1 1
( -640 1472 -128 ) ( -752 1472 -128 ) ( -640 1456 -128 ) jf2rust69 0 -32 90 1 -1
( -688 1472 -128 ) ( -688 1456 -128 ) ( -688 1472 -80 ) jf2rust69 0 -32 0 1 1
}
}
{
"spawnflags" "0"
"classname" "light"
"origin" "-752 1456 -112"
"angle" "165"
}
{
"spawnflags" "0"
"classname" "light"
"origin" "-720 1456 -112"
"angle" "165"
}
{
"spawnflags" "0"
"classname" "light"
"origin" "-784 1232 -260"
"angle" "180"
}
{
"spawnflags" "0"
"classname" "light"
"origin" "-784 1232 -292"
"angle" "180"
}
{
"spawnflags" "0"
"classname" "light"
"origin" "-840 1184 -360"
}
{
"spawnflags" "0"
"classname" "info_player_start"
"origin" "-800 1296 -344"
"angle" "90"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.