Merge branch 'type-cleanup' of https://github.com/Paril/ericw-tools into type-cleanup

This commit is contained in:
Jonathan 2022-06-01 15:30:32 -04:00
commit 487c0fa1c6
26 changed files with 195 additions and 47169 deletions

View File

@ -75,6 +75,11 @@ if (ERICWTOOLS_ASAN)
message(STATUS "Enabling ASan on all targets")
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
# https://github.com/catchorg/Catch2/issues/898#issuecomment-841733322
if (WIN32)
add_compile_definitions(CATCH_CONFIG_NO_WINDOWS_SEH)
endif()
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")

View File

@ -511,3 +511,63 @@ void Face_DebugPrint(const mbsp_t *bsp, const mface_t *face)
point[1], point[2], edge);
}
}
/*
===============
CompressRow
===============
*/
int CompressRow(const uint8_t *vis, const int numbytes, uint8_t *out)
{
int i, rep;
uint8_t *dst;
dst = out;
for (i = 0; i < numbytes; i++) {
*dst++ = vis[i];
if (vis[i])
continue;
rep = 1;
for (i++; i < numbytes; i++)
if (vis[i] || rep == 255)
break;
else
rep++;
*dst++ = rep;
i--;
}
return dst - out;
}
/*
===================
DecompressRow
===================
*/
void DecompressRow(const uint8_t *in, const int numbytes, uint8_t *decompressed)
{
int c;
uint8_t *out;
int row;
row = numbytes;
out = decompressed;
do {
if (*in) {
*out++ = *in++;
continue;
}
c = in[1];
if (!c)
FError("0 repeat");
in += 2;
while (c) {
*out++ = 0;
c--;
}
} while (out - decompressed < row);
}

View File

@ -79,3 +79,6 @@ qvec3d Face_Normal(const mbsp_t *bsp, const mface_t *f);
std::vector<qvec3f> GLM_FacePoints(const mbsp_t *bsp, const mface_t *face);
qvec3f Face_Centroid(const mbsp_t *bsp, const mface_t *face);
void Face_DebugPrint(const mbsp_t *bsp, const mface_t *face);
int CompressRow(const uint8_t *vis, const int numbytes, uint8_t *out);
void DecompressRow(const uint8_t *in, const int numbytes, uint8_t *decompressed);

View File

@ -204,9 +204,6 @@ extern time_point starttime, endtime, statetime;
void SaveVisState(void);
bool LoadVisState(void);
void DecompressRow(const uint8_t *in, const int numbytes, uint8_t *decompressed);
int CompressRow(const uint8_t *vis, const int numbytes, uint8_t *out);
#include <common/settings.hh>
#include <common/fs.hh>

View File

@ -294,7 +294,7 @@ static std::vector<face_t> CreateBrushFaces(const mapentity_t *src, hullbrush_t
vec_t r;
std::optional<winding_t> w;
qbsp_plane_t plane;
std::list<face_t> facelist;
std::vector<face_t> facelist;
qvec3d point;
vec_t max, min;
@ -404,7 +404,7 @@ static std::vector<face_t> CreateBrushFaces(const mapentity_t *src, hullbrush_t
hullbrush->bounds = {-delta, delta};
}
return {std::make_move_iterator(facelist.begin()), std::make_move_iterator(facelist.end())};
return facelist;
}
/*

View File

@ -99,7 +99,7 @@ static mbsp_t LoadTestmap(const std::filesystem::path &name, std::vector<std::st
auto bsp_path = map_path;
bsp_path.replace_extension(".bsp");
std::vector<std::string> args{"", "-nopercent", "-noprogress", "-keepprt"};
std::vector<std::string> args{"", "-nopercent", "-keepprt"};
for (auto &arg : extra_args) {
args.push_back(arg);
}
@ -389,10 +389,11 @@ TEST_CASE("chop_no_change", "[testmaps_q1]")
// TODO: ideally we should check we get back the same brush pointers from ChopBrushes
}
TEST_CASE("simple_sealed", "[testmaps_q1]")
{
mbsp_t result = LoadTestmap("qbsp_simple_sealed.map");
auto mapname = GENERATE("qbsp_simple_sealed.map", "qbsp_simple_sealed_rotated.map");
mbsp_t result = LoadTestmap(mapname);
REQUIRE(map.brushes.size() == 6);
@ -805,6 +806,56 @@ TEST_CASE("features", "[testmaps_q1]")
REQUIRE_FALSE(map.leakfile);
}
TEST_CASE("qbsp_func_detail various types", "[testmaps_q1]") {
const mbsp_t bsp = LoadTestmap("qbsp_func_detail.map");
CHECK_FALSE(map.leakfile);
CHECK(GAME_QUAKE == bsp.loadversion->game->id);
CHECK(1 == bsp.dmodels.size());
const qvec3d in_func_detail{56, -56, 120};
const qvec3d in_func_detail_wall{56, -136, 120};
const qvec3d in_func_detail_illusionary{56, -216, 120};
const qvec3d in_func_detail_illusionary_mirrorinside{56, -296, 120};
const double floor_z = 96;
// detail clips away world faces, others don't
CHECK(nullptr == BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], in_func_detail - qvec3d(0,0,24), {0, 0, 1}));
CHECK(nullptr != BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], in_func_detail_wall - qvec3d(0,0,24), {0, 0, 1}));
CHECK(nullptr != BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], in_func_detail_illusionary - qvec3d(0,0,24), {0, 0, 1}));
CHECK(nullptr != BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], in_func_detail_illusionary_mirrorinside - qvec3d(0,0,24), {0, 0, 1}));
// check for correct contents
auto *detail_leaf = BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_func_detail);
auto *detail_wall_leaf = BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_func_detail_wall);
auto *detail_illusionary_leaf = BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_func_detail_illusionary);
auto *detail_illusionary_mirrorinside_leaf = BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_func_detail_illusionary_mirrorinside);
CHECK(CONTENTS_SOLID == detail_leaf->contents);
CHECK(CONTENTS_SOLID == detail_wall_leaf->contents);
CHECK(CONTENTS_EMPTY == detail_illusionary_leaf->contents);
CHECK(CONTENTS_EMPTY == detail_illusionary_mirrorinside_leaf->contents);
}
TEST_CASE("qbsp_angled_brush", "[testmaps_q1]") {
const mbsp_t bsp = LoadTestmap("qbsp_angled_brush.map");
CHECK_FALSE(map.leakfile);
CHECK(GAME_QUAKE == bsp.loadversion->game->id);
CHECK(1 == bsp.dmodels.size());
// tilted cuboid floating in a box room, so shared solid leaf + 6 empty leafs around the cube
CHECK(6 + 1 == bsp.dleafs.size());
}
TEST_CASE("qbsp_sealing_point_entity_on_outside", "[testmaps_q1]") {
const mbsp_t bsp = LoadTestmap("qbsp_sealing_point_entity_on_outside.map");
CHECK_FALSE(map.leakfile);
}
// q2 testmaps
TEST_CASE("detail", "[testmaps_q2]") {

View File

@ -1,176 +0,0 @@
#!/bin/bash
# usage:
# ./automated_tests.sh [--update-hashes|--continue-on-failure]
#
# If --update-hashes is given, updates the expected hash files.
# Otherwise tests the generated .bsp's match the expected hashes.
#
# qbsp, vis, light, bspinfo need to be in PATH before running.
#
# Returns exit status 1 if any tests failed, otherwise 0
# print statements as they are executed
set -x
UPDATE_HASHES=0
# FIXME: reset back to 0
CONTINUE_ON_FAILURE=1
if [[ "$1" == "--update-hashes" ]]; then
UPDATE_HASHES=1
elif [[ "$1" == "--continue-on-failure" ]]; then
CONTINUE_ON_FAILURE=1
elif [[ "$1" != "" ]]; then
echo "usage: ./automated_tests.sh [--update-hashes]"
exit 1
fi
# checking for lack of crashes
qbsp -noverbose invalid_texture_axes.map || exit 1
light invalid_texture_axes.map || exit 1
# hash checks
# Compiles Quake E1M1 under all supported output formats,
# then compare the hashes with what's been committed to the repo.
# Then vis all of the bsp's, and check the hashes again.
# Then light them, and check the hashes again.
#
# This check will naturally fail if any changes are made to the
# tools that alter the .bsp output - the idea is you would just
# regenerate the expected hashes, but check that the .bsp's still
# work in game at the same time.
# qbsp_brush_clipping_order.bsp omitted because it is not sealed, so doesn't have a .prt
HASH_CHECK_BSPS="qbsp_func_detail.bsp \
qbsp_func_detail_illusionary_plus_water.bsp \
qbsp_origin.bsp \
qbsp_angled_brush.bsp \
qbsp_sealing_point_entity_on_outside.bsp \
qbsp_tjunc_many_sided_face.bsp \
e1m1-bsp29.bsp \
e1m1-bsp2.bsp \
e1m1-2psb.bsp \
e1m1-hexen2.bsp \
e1m1-hexen2-bsp2.bsp \
e1m1-hexen2-2psb.bsp \
e1m1-hlbsp.bsp \
e1m1-bspxbrushes.bsp \
e1m1-bsp29-onlyents.bsp \
qbspfeatures.bsp"
HASH_CHECK_PRTS=${HASH_CHECK_BSPS//.bsp/.prt}
# for tiny test maps, we'll commit the .json export of the .bsp's
# directly to the git repo, so we can print a diff
COMMIT_JSON_MAPS="qbsp_func_detail.bsp \
qbsp_func_detail_illusionary_plus_water.bsp \
qbsp_origin.bsp \
qbsp_angled_brush.bsp \
qbsp_sealing_point_entity_on_outside.bsp \
qbsp_brush_clipping_order.bsp \
qbsp_tjunc_many_sided_face.bsp"
# smaller test maps for specific features/combinations
# check .json diff of COMMIT_JSON_MAPS
for bsp in ${COMMIT_JSON_MAPS}; do
# save regular verbosity log to file, to avoid spamming the CI log
qbsp -nopercent ${bsp} &> ${bsp}.qbsplog
# dump .bsp to .bsp.json
bspinfo ${bsp} || exit 1
if [[ $UPDATE_HASHES -ne 0 ]]; then
mkdir reference_bsp_json
cp ${bsp}.json reference_bsp_json/${bsp}.json
cp ${bsp}.qbsplog reference_bsp_json/${bsp}.qbsplog
else
echo "Diff of reference_bsp_json/${bsp}.qbsplog and ${bsp}.qbsplog:"
diff -U3 -w reference_bsp_json/${bsp}.qbsplog ${bsp}.qbsplog
echo "Diff of reference_bsp_json/${bsp}.json and ${bsp}.json:"
diff -U3 -w reference_bsp_json/${bsp}.json ${bsp}.json
diffreturn=$?
if [[ $diffreturn -ne 0 ]]; then
echo "Diff returned $diffreturn"
file reference_bsp_json/${bsp}.json
file ${bsp}.json
if [[ $CONTINUE_ON_FAILURE -ne 1 ]]; then
exit 1
fi
fi
fi
done
# larger test maps (E1M1)
qbsp -noverbose quake_map_source/E1M1.map e1m1-bsp29.bsp || exit 1
qbsp -noverbose -bsp2 quake_map_source/E1M1.map e1m1-bsp2.bsp || exit 1
qbsp -noverbose -2psb quake_map_source/E1M1.map e1m1-2psb.bsp || exit 1
qbsp -noverbose -hexen2 quake_map_source/E1M1.map e1m1-hexen2.bsp || exit 1
qbsp -noverbose -hexen2 -bsp2 quake_map_source/E1M1.map e1m1-hexen2-bsp2.bsp || exit 1
qbsp -noverbose -hexen2 -2psb quake_map_source/E1M1.map e1m1-hexen2-2psb.bsp || exit 1
qbsp -noverbose -hlbsp quake_map_source/E1M1.map e1m1-hlbsp.bsp || exit 1
qbsp -noverbose -wrbrushes quake_map_source/E1M1.map e1m1-bspxbrushes.bsp || exit 1
# -onlyents test:
# - start with a copy of e1m1-bsp29.bsp called e1m1-bsp29-onlyents.bsp
# - make a E1M1-edited-ents.map by adding an extra entity
# - patch e1m1-bsp29-onlyents.bsp with the entities lump from E1M1-edited-ents.map
cp e1m1-bsp29.bsp e1m1-bsp29-onlyents.bsp || exit 1
cp e1m1-bsp29.prt e1m1-bsp29-onlyents.prt || exit 1
qbsp -onlyents E1M1-edited-ents.map e1m1-bsp29-onlyents.bsp || exit 1
qbsp -noverbose qbspfeatures.map || exit 1
# check (or regenerate) hashes of .bsp's
if [[ $UPDATE_HASHES -ne 0 ]]; then
sha256sum ${HASH_CHECK_BSPS} ${HASH_CHECK_PRTS} > qbsp.sha256sum || exit 1
else
sha256sum --strict --check qbsp.sha256sum
hash_check_return=$?
if [[ $hash_check_return -ne 0 ]] && [[ $CONTINUE_ON_FAILURE -ne 1 ]]; then
exit 1
fi
fi
# now run vis
# FIXME: vis output is nondeterministic when run with multiple threads, so force 1 thread per process
for bsp in ${HASH_CHECK_BSPS}; do
vis -nostate -threads 1 ${bsp} || exit 1
done
if [[ $UPDATE_HASHES -ne 0 ]]; then
sha256sum ${HASH_CHECK_BSPS} > qbsp-vis.sha256sum || exit 1
else
sha256sum --strict --check qbsp-vis.sha256sum
hash_check_return=$?
if [[ $hash_check_return -ne 0 ]] && [[ $CONTINUE_ON_FAILURE -ne 1 ]]; then
exit 1
fi
fi
# FIXME: light output is nondeterministic so we can't check the hashes currently
for bsp in ${HASH_CHECK_BSPS}; do
light -threads 1 ${bsp} || exit 1
done
# if [[ $UPDATE_HASHES -ne 0 ]]; then
# sha256sum ${HASH_CHECK_BSPS} > qbsp-vis-light.sha256sum || exit 1
# else
# sha256sum --strict --check qbsp-vis-light.sha256sum || exit 1
# fi
# leak tests on all id1 maps
cd quake_map_source
./leaktest.sh || exit 1
exit 0

View File

@ -1,16 +0,0 @@
c2fd477801a3c02a01d172454378c5d1f59cae43713977e82345240530fbed80 *qbsp_func_detail.bsp
620bd6ec7180d97127909eda95a97313e1bcbe50d3b76971eb46fc8839132008 *qbsp_func_detail_illusionary_plus_water.bsp
ed3d85f3f5f6bd1627df667605569a0f31f49c88e74de0d2b033a413d98a5f1e *qbsp_origin.bsp
8ddab9e66cc94abed3ba387b9e077fe131d5bf2fae7f29099aa9f3eed8712944 *qbsp_angled_brush.bsp
18fbd0f2cc27c3ef584b6335fad8b41a9db4a37e916f532e3e7abe770c299fad *qbsp_sealing_point_entity_on_outside.bsp
3b0557534e37114434d5541143932dfe3522dea9a627962901249e1f8bb8015f *qbsp_tjunc_many_sided_face.bsp
747ae0bcb09b15177b9d7f31f91a5955edd54b60bc558b5ff0332bb01b746a17 *e1m1-bsp29.bsp
11c8a0a593c081c8cea6f5e21f53766adc20e19be8a67a5d53aea782dde5f650 *e1m1-bsp2.bsp
79ada91c75217c04ba0648a9351b92a1d2f2b9a575920eb553c28231b8fccc2e *e1m1-2psb.bsp
c82d1423bd2a9cb7b163ca12fd7a3757680b43170cc14a6e91ac51c7d7a08708 *e1m1-hexen2.bsp
0c1834a471d6dda55ee4eb6559793fdefb7985b7d5305838852ca9828c08fbe2 *e1m1-hexen2-bsp2.bsp
ba0b8c59640b94eb8b39dbf29db10a8c0f8164891a1b4385ff2119fbc54b0d93 *e1m1-hexen2-2psb.bsp
2a60784f2d3aef6dc3ed64ef09e65a50dd448047d2f02442ab5e7c3dad45fa3a *e1m1-hlbsp.bsp
0c8ded46ce98663981ea97e3d92ba3c6a0a4c16637fcc9aad06b2d4da5b2d0bd *e1m1-bspxbrushes.bsp
c630ff41dcd9183ba19cc4ab9d882db729427a30fa52e45b7763bca3db22e816 *e1m1-bsp29-onlyents.bsp
7c2549ea81c40cc6fac4c7428c8f6ed0997ad04ffc24f8632de258ebf70f3aeb *qbspfeatures.bsp

View File

@ -1,32 +0,0 @@
6a22bf066280a4fff3ba9fb183642761fe55cc6063bae3fa55dd01ad549c8550 *qbsp_func_detail.bsp
ed1623a1313d859e2118994865e2680c8348533682898672a5ed002d51ca58ce *qbsp_func_detail_illusionary_plus_water.bsp
f8b06839c07f71c7c897d150333224412b976ddb21653195579da5e37be82f8c *qbsp_origin.bsp
5539b0753d4232609017253688081cf359a83cddbe07edc906dd87592b9c919a *qbsp_angled_brush.bsp
02fef37f2523125498b00d2e4ab77808cb11165c6cbeef98e42f98511b4df170 *qbsp_sealing_point_entity_on_outside.bsp
e963f38e3af7d0db84519786575468a01b30a5a29baa9bf5c86823b0c73d72fc *qbsp_tjunc_many_sided_face.bsp
c33feeeb2d66eac835c66449d871b533d7f0cbea6b1c556f94d387efee877659 *e1m1-bsp29.bsp
9b082b3ae17efb2cee1332a6c19a919106f035ec8bee6f89ebb4a8a0967190b8 *e1m1-bsp2.bsp
986c209b31bd336888b6f754f6fdac8303398517183316a401124704dbc98f55 *e1m1-2psb.bsp
52e896a5bf2e285be6e1362acc261758570f057eed0c8430856bd4970d583057 *e1m1-hexen2.bsp
46849fd2b354624ed15ff4571c3fc41331bb08f7d09baa6c50876f4357424f18 *e1m1-hexen2-bsp2.bsp
2b04e897da043597b5cc60c3abbc891c4ba204eb2208c69327f42d2e8c594cc5 *e1m1-hexen2-2psb.bsp
5bab3bceb303e3f8328608c544b98e5f18b08fecd4723d08f2c94d40353b3f23 *e1m1-hlbsp.bsp
1906e03553063f0519c966d12b2b669c568a53cddae8fce285cc576b90b9848d *e1m1-bspxbrushes.bsp
1536fbd891ad17fb26c7f3f4a45af86ee1b4e0e42fa322f4355d781bbf4e9f61 *e1m1-bsp29-onlyents.bsp
7f930d4f1a0383f3b4128afe2cffbac34240c9194dda5527e2918df74b2ea80a *qbspfeatures.bsp
abf3633d5a6d0e167ce9bacec476d3408c8240df5f3d72d14867cd201d4e3674 *qbsp_func_detail.prt
c0995c6b92256fa048c1a755ebe7e07f5fae33cb64e3c53adc234380fe44f267 *qbsp_func_detail_illusionary_plus_water.prt
b1ac538e53efc28ace2088324b1c0504d0f09b013d30b39ce231d76124bc6c22 *qbsp_origin.prt
00cc54b056ec14bb918fc3b30dab4b01b71f95bbca628206734b6d6f9aa19e10 *qbsp_angled_brush.prt
b1ac538e53efc28ace2088324b1c0504d0f09b013d30b39ce231d76124bc6c22 *qbsp_sealing_point_entity_on_outside.prt
b1ac538e53efc28ace2088324b1c0504d0f09b013d30b39ce231d76124bc6c22 *qbsp_tjunc_many_sided_face.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-bsp29.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-bsp2.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-2psb.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-hexen2.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-hexen2-bsp2.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-hexen2-2psb.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-hlbsp.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-bspxbrushes.prt
fcfd84b56d9f22f646903202b06ffc904d4fc38fdb70fba2b09110ad20b4f1a1 *e1m1-bsp29-onlyents.prt
db4b8fee3195c424b6e79282e958b0ac078b7b5db0217ea9dbe2b9e6ea8b61db *qbspfeatures.prt

View File

@ -1,96 +0,0 @@
// Game: Quake
// Format: Valve
// entity 0
{
"mapversion" "220"
"classname" "worldspawn"
"wad" "deprecated/fence.wad;deprecated/free_wad.wad"
// brush 0
{
( -160 -256 80 ) ( -160 64 16 ) ( -160 64 80 ) *swater4 [ 0 -1 0 -16 ] [ 0 0 -1 0 ] 0 6 6
( 192 -432 80 ) ( -64 -432 16 ) ( -64 -432 80 ) *swater4 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 6 6
( 192 64 16 ) ( -64 -256 16 ) ( 192 -256 16 ) *swater4 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 6 6
( 192 64 80 ) ( -64 -256 80 ) ( -64 64 80 ) *swater4 [ 1 0 0 0 ] [ 0 -1 0 -16 ] 0 6 6
( 192 176 80 ) ( -64 176 16 ) ( 192 176 16 ) *swater4 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 6 6
( 288 64 80 ) ( 288 -256 16 ) ( 288 -256 80 ) *swater4 [ 0 -1 0 -16 ] [ 0 0 -1 0 ] 0 6 6
}
// brush 1
{
( -176 -256 -16 ) ( -176 -255 -16 ) ( -176 -256 -15 ) tsl_wall1 [ 0 -1 0 0 ] [ 0 0 -1 16 ] 0 6 6
( -176 -432 -16 ) ( -176 -432 -15 ) ( -175 -432 -16 ) tsl_wall1 [ 1 0 0 16 ] [ 0 0 -1 16 ] 0 6 6
( -176 -256 16 ) ( -175 -256 16 ) ( -176 -255 16 ) tsl_wall1 [ -1 0 0 -16 ] [ 0 -1 0 0 ] 0 6 6
( -160 192 272 ) ( -160 193 272 ) ( -159 192 272 ) tsl_wall1 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 6 6
( -160 176 0 ) ( -159 176 0 ) ( -160 176 1 ) tsl_wall1 [ -1 0 0 -16 ] [ 0 0 -1 16 ] 0 6 6
( -160 192 0 ) ( -160 192 1 ) ( -160 193 0 ) tsl_wall1 [ 0 1 0 0 ] [ 0 0 -1 16 ] 0 6 6
}
// brush 2
{
( -160 176 8 ) ( -160 177 8 ) ( -160 176 9 ) tsl_wall1 [ 0 1.0000000000000002 0 -32 ] [ 0 0 -1.0000000000000002 16 ] 0 6 6
( -160 176 8 ) ( -160 176 9 ) ( -159 176 8 ) tsl_wall1 [ -1 0 0 -16 ] [ 0 0 -1 16 ] 0 6 6
( -160 176 16 ) ( -159 176 16 ) ( -160 177 16 ) tsl_wall1 [ -1.0000000000000002 0 0 -16 ] [ 0 1.0000000000000002 0 -40 ] 0 6 6
( 288 192 272 ) ( 288 193 272 ) ( 289 192 272 ) tsl_wall1 [ -1.0000000000000002 0 0 -16 ] [ 0 -1.0000000000000002 0 48 ] 0 6 6
( 288 192 16 ) ( 289 192 16 ) ( 288 192 17 ) tsl_wall1 [ -1 0 0 -16 ] [ 0 0 -1 16 ] 0 6 6
( 288 192 16 ) ( 288 192 17 ) ( 288 193 16 ) tsl_wall1 [ 0 -1.0000000000000002 0 0 ] [ 0 0 -1.0000000000000002 16 ] 0 6 6
}
// brush 3
{
( -160 -112 16 ) ( -160 -111 16 ) ( -160 -112 17 ) orangestuff8 [ 0 1 0 -16 ] [ 0 0 -1 -16 ] 0 6 6
( -80 -432 0 ) ( -81 -432 0 ) ( -80 -432 1 ) orangestuff8 [ -1 0 0 16 ] [ 0 0 -1 -16 ] 180 6 6
( -80 -432 0 ) ( -80 -431 0 ) ( -81 -432 0 ) orangestuff8 [ 1 0 0 -16 ] [ 0 -1 0 16 ] 180 6 6
( -160 -112 16 ) ( -161 -112 16 ) ( -160 -111 16 ) orangestuff8 [ -1 0 0 16 ] [ 0 -1 0 16 ] 180 6 6
( -160 176 16 ) ( -160 176 17 ) ( -161 176 16 ) orangestuff8 [ 1 0 0 -16 ] [ 0 0 -1 -16 ] 180 6 6
( 288 -432 0 ) ( 288 -432 1 ) ( 288 -431 0 ) orangestuff8 [ 0 -1 0 16 ] [ 0 0 -1 -16 ] 0 6 6
}
// brush 4
{
( -160 -448 8 ) ( -160 -447 8 ) ( -160 -448 9 ) tsl_wall1 [ 0 1.0000000000000002 0 80 ] [ 0 0 -1.0000000000000002 16 ] 0 6 6
( -160 -448 8 ) ( -160 -448 9 ) ( -159 -448 8 ) tsl_wall1 [ -1 0 0 -16 ] [ 0 0 -1 16 ] 0 6 6
( -160 -448 16 ) ( -159 -448 16 ) ( -160 -447 16 ) tsl_wall1 [ -1.0000000000000002 0 0 -16 ] [ 0 1.0000000000000002 0 72 ] 0 6 6
( 288 -432 272 ) ( 288 -431 272 ) ( 289 -432 272 ) tsl_wall1 [ -1.0000000000000002 0 0 -16 ] [ 0 -1.0000000000000002 0 -64 ] 0 6 6
( 288 -432 16 ) ( 289 -432 16 ) ( 288 -432 17 ) tsl_wall1 [ -1 0 0 -16 ] [ 0 0 -1 16 ] 0 6 6
( 288 -432 16 ) ( 288 -432 17 ) ( 288 -431 16 ) tsl_wall1 [ 0 -1.0000000000000002 0 -112 ] [ 0 0 -1.0000000000000002 16 ] 0 6 6
}
// brush 5
{
( -160 -256 272 ) ( -160 -255 272 ) ( -160 -256 273 ) orangestuff8 [ 0 0 -1.0000000000000002 -16 ] [ 0 -1.0000000000000002 0 0 ] 180 6 6
( 288 -432 280 ) ( 288 -432 281 ) ( 289 -432 280 ) orangestuff8 [ -1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 180 6 6
( -160 -256 272 ) ( -159 -256 272 ) ( -160 -255 272 ) orangestuff8 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 6 6
( 288 176 288 ) ( 288 177 288 ) ( 289 176 288 ) orangestuff8 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 6 6
( 288 176 280 ) ( 289 176 280 ) ( 288 176 281 ) orangestuff8 [ -1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 180 6 6
( 288 176 280 ) ( 288 176 281 ) ( 288 177 280 ) orangestuff8 [ 0 0 1.0000000000000002 16 ] [ 0 -1.0000000000000002 0 0 ] 180 6 6
}
// brush 6
{
( 288 192 0 ) ( 288 193 0 ) ( 288 192 1 ) tsl_wall1 [ 0 1 0 0 ] [ 0 0 -1 16 ] 0 6 6
( 304 -432 -16 ) ( 303 -432 -16 ) ( 304 -432 -15 ) tsl_wall1 [ -1 0 0 16 ] [ 0 0 -1 16 ] 180 6 6
( 304 -256 16 ) ( 304 -255 16 ) ( 303 -256 16 ) tsl_wall1 [ 1 0 0 -16 ] [ 0 -1 0 0 ] 180 6 6
( 304 -256 272 ) ( 303 -256 272 ) ( 304 -255 272 ) tsl_wall1 [ 1 0 0 -16 ] [ 0 -1 0 0 ] 180 6 6
( 288 176 0 ) ( 288 176 1 ) ( 287 176 0 ) tsl_wall1 [ 1 0 0 -16 ] [ 0 0 -1 16 ] 180 6 6
( 304 -256 -16 ) ( 304 -256 -15 ) ( 304 -255 -16 ) tsl_wall1 [ 0 -1 0 0 ] [ 0 0 -1 16 ] 0 6 6
}
}
// entity 1
{
"classname" "func_detail_illusionary"
"_mirrorinside" "1"
// brush 0
{
( 16 -144 48 ) ( 16 -143 48 ) ( 16 -144 49 ) {trigger [ 0 1.0000000000000002 0 42.666664 ] [ 0 0 -1.0000000000000002 -32 ] 0 6 6
( 16 -104 48 ) ( 16 -104 49 ) ( 17 -104 48 ) {trigger [ -1 0 0 32 ] [ 0 0 -1 -32 ] 0 6 6
( 16 -144 16 ) ( 17 -144 16 ) ( 16 -143 16 ) {trigger [ -1.0000000000000002 0 0 32 ] [ 0 1.0000000000000002 0 -21.333336 ] 0 6 6
( 96 -128 128 ) ( 96 -127 128 ) ( 97 -128 128 ) {trigger [ -1.0000000000000002 0 0 32 ] [ 0 -1.0000000000000002 0 -8 ] 0 6 6
( 96 -80 64 ) ( 97 -80 64 ) ( 96 -80 65 ) {trigger [ -1 0 0 32 ] [ 0 0 -1 -32 ] 0 6 6
( 40 -128 64 ) ( 40 -128 65 ) ( 40 -127 64 ) {trigger [ 0 -1.0000000000000002 0 12.000002 ] [ 0 0 -1.0000000000000002 -32 ] 0 6 6
}
}
// entity 2
{
"classname" "light"
"origin" "72 -136 168"
"light" "3000"
}
// entity 3
{
"classname" "info_player_start"
"origin" "-88 -64 120"
}

View File

@ -0,0 +1,70 @@
// Game: Quake
// Format: Valve
// entity 0
{
"mapversion" "220"
"classname" "worldspawn"
"wad" "deprecated/free_wad.wad;deprecated/fence.wad;deprecated/origin.wad;deprecated/hintskip.wad"
"_wateralpha" "0.5"
"_tb_def" "builtin:Quake.fgd"
// brush 0
{
( 121.17142559585812 -0.8040405071069046 208 ) ( 63.195959492893095 -217.17142559585812 208 ) ( 121.17142559585812 -0.8040405071069046 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 -16 ] 0 2 2
( 82.79187743515854 -205.8577170968734 48 ) ( 67.33706421453346 -201.71661237523304 48 ) ( 82.79187743515854 -205.8577170968734 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 -16 ] 180 2 2
( 136.6262388164832 -4.945145228747261 48 ) ( 121.17142559585812 -0.8040405071069046 48 ) ( 78.65077271351818 -221.31253031749847 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 2 2
( 78.65077271351818 -221.31253031749847 208 ) ( 63.195959492893095 -217.17142559585812 208 ) ( 136.6262388164832 -4.945145228747261 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 2 2
( 132.48513409484283 -20.39995844937235 208 ) ( 117.03032087421775 -16.25885372773199 208 ) ( 132.48513409484283 -20.39995844937235 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 -16 ] 180 2 2
( 78.65077271351818 -221.31253031749847 208 ) ( 136.6262388164832 -4.945145228747261 208 ) ( 78.65077271351818 -221.31253031749847 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 -16 ] 0 2 2
}
// brush 1
{
( -168.6262388164832 -155.05485477125274 48 ) ( -110.6507727135182 61.31253031749847 48 ) ( -168.6262388164832 -155.05485477125274 208 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 -16 ] 0 2 2
( -164.48513409484286 -139.60004155062765 208 ) ( -149.03032087421775 -143.741146272268 208 ) ( -164.48513409484286 -139.60004155062765 48 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 -16 ] 180 2 2
( -168.6262388164832 -155.05485477125274 48 ) ( -153.17142559585812 -159.1959594928931 48 ) ( -110.6507727135182 61.31253031749847 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 2 2
( -110.6507727135182 61.31253031749847 208 ) ( -95.19595949289308 57.17142559585811 208 ) ( -168.6262388164832 -155.05485477125274 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 2 2
( -114.79187743515857 45.85771709687339 48 ) ( -99.33706421453346 41.71661237523303 48 ) ( -114.79187743515857 45.85771709687339 208 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 -16 ] 180 2 2
( -153.17142559585812 -159.1959594928931 48 ) ( -153.17142559585812 -159.1959594928931 208 ) ( -95.19595949289308 57.17142559585811 48 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 -16 ] 0 2 2
}
// brush 2
{
( -95.19595949289308 57.17142559585811 208 ) ( -99.33706421453346 41.71661237523303 208 ) ( -95.19595949289308 57.17142559585811 48 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 -16 ] 0 2 2
( 117.03032087421775 -16.25885372773199 208 ) ( 117.03032087421775 -16.25885372773199 48 ) ( -99.33706421453346 41.71661237523303 208 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 -16 ] 180 2 2
( -95.19595949289308 57.17142559585811 48 ) ( -99.33706421453346 41.71661237523303 48 ) ( 121.17142559585812 -0.8040405071069046 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 2 2
( 121.17142559585812 -0.8040405071069046 208 ) ( 117.03032087421775 -16.25885372773199 208 ) ( -95.19595949289308 57.17142559585811 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 2 2
( 121.17142559585812 -0.8040405071069046 208 ) ( -95.19595949289308 57.17142559585811 208 ) ( 121.17142559585812 -0.8040405071069046 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 -16 ] 180 2 2
( 121.17142559585812 -0.8040405071069046 48 ) ( 117.03032087421775 -16.25885372773199 48 ) ( 121.17142559585812 -0.8040405071069046 208 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 -16 ] 0 2 2
}
// brush 3
{
( -153.17142559585812 -159.1959594928931 48 ) ( -149.03032087421775 -143.741146272268 48 ) ( -153.17142559585812 -159.1959594928931 208 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 -16 ] 0 2 2
( 63.195959492893095 -217.17142559585812 48 ) ( -153.17142559585812 -159.1959594928931 48 ) ( 63.195959492893095 -217.17142559585812 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 -16 ] 180 2 2
( 63.195959492893095 -217.17142559585812 48 ) ( 67.33706421453346 -201.71661237523304 48 ) ( -153.17142559585812 -159.1959594928931 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 2 2
( -153.17142559585812 -159.1959594928931 208 ) ( -149.03032087421775 -143.741146272268 208 ) ( 63.195959492893095 -217.17142559585812 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 2 2
( -149.03032087421775 -143.741146272268 48 ) ( 67.33706421453346 -201.71661237523304 48 ) ( -149.03032087421775 -143.741146272268 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 -16 ] 180 2 2
( 63.195959492893095 -217.17142559585812 208 ) ( 67.33706421453346 -201.71661237523304 208 ) ( 63.195959492893095 -217.17142559585812 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 -16 ] 0 2 2
}
// brush 4
{
( -149.03032087421775 -143.741146272268 224 ) ( -149.03032087421775 -143.741146272268 208 ) ( -99.33706421453346 41.71661237523303 224 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 0 ] 0 2 2
( 67.33706421453346 -201.71661237523304 224 ) ( 67.33706421453346 -201.71661237523304 208 ) ( -149.03032087421775 -143.741146272268 224 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 0 ] 180 2 2
( 117.03032087421775 -16.25885372773199 208 ) ( -99.33706421453346 41.71661237523303 208 ) ( 67.33706421453346 -201.71661237523304 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 2 2
( 117.03032087421775 -16.25885372773199 224 ) ( 67.33706421453346 -201.71661237523304 224 ) ( -99.33706421453346 41.71661237523303 224 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 2 2
( -99.33706421453346 41.71661237523303 224 ) ( -99.33706421453346 41.71661237523303 208 ) ( 117.03032087421775 -16.25885372773199 224 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 0 ] 180 2 2
( 117.03032087421775 -16.25885372773199 224 ) ( 117.03032087421775 -16.25885372773199 208 ) ( 67.33706421453346 -201.71661237523304 224 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 0 ] 0 2 2
}
// brush 5
{
( -99.33706421453346 41.71661237523303 32 ) ( -99.33706421453346 41.71661237523303 48 ) ( -149.03032087421775 -143.741146272268 32 ) bolt16 [ 0 1 0 16 ] [ 0 0 -1 32 ] 0 2 2
( -149.03032087421775 -143.741146272268 32 ) ( -149.03032087421775 -143.741146272268 48 ) ( 67.33706421453346 -201.71661237523304 32 ) bolt16 [ -1 0 0 -16 ] [ 0 0 -1 32 ] 180 2 2
( -99.33706421453346 41.71661237523303 32 ) ( -149.03032087421775 -143.741146272268 32 ) ( 117.03032087421775 -16.25885372773199 32 ) bolt16 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 2 2
( -149.03032087421775 -143.741146272268 48 ) ( -99.33706421453346 41.71661237523303 48 ) ( 67.33706421453346 -201.71661237523304 48 ) bolt16 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 2 2
( 117.03032087421775 -16.25885372773199 32 ) ( 117.03032087421775 -16.25885372773199 48 ) ( -99.33706421453346 41.71661237523303 32 ) bolt16 [ 1 0 0 16 ] [ 0 0 -1 32 ] 180 2 2
( 67.33706421453346 -201.71661237523304 32 ) ( 67.33706421453346 -201.71661237523304 48 ) ( 117.03032087421775 -16.25885372773199 32 ) bolt16 [ 0 -1 0 -16 ] [ 0 0 -1 32 ] 0 2 2
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "-58.7781 -85.1021 120"
"angle" "345"
}

File diff suppressed because one or more lines are too long

View File

@ -1,80 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_angled_brush.map
Output file: qbsp_angled_brush.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/free_wad.wad
Opened WAD: deprecated/fence.wad
Opened WAD: deprecated/origin.wad
Opened WAD: deprecated/hintskip.wad
Processing hull 0...
---- Brush_LoadEntity ----
7 solid brushes
18 planes
---- CSGFaces ----
42 brushfaces
42 csgfaces
42 mergedfaces
18 surfaces
---- SolidBSP ----
30 split nodes
7 solid leafs
24 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
156 leaffaces
126 nodefaces
---- PortalizeWorld ----
24 vis leafs
24 vis clusters
52 vis portals
---- FillOutside ----
18 outleafs
---- MergeAll ----
12 mergefaces
---- SolidBSP ----
12 split nodes
7 solid leafs
6 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
68 leaffaces
38 nodefaces
---- PortalizeWorld ----
6 vis leafs
6 vis clusters
12 vis portals
---- TJunc ----
40 world edges
124 edge points
16 edges added by tjunctions
0 faces added by tjunctions
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
Processing hull 2...
Writing qbsp_angled_brush.bsp as BSP version Quake BSP
Wrote qbsp_angled_brush.bsp
1 models
58 planes 1160
50 vertexes 600
12 nodes 288
9 texinfos 360
38 faces 760
70 clipnodes 560
7 leafs 196
68 marksurfaces 136
85 edges 340
168 surfedges 672
textures 2
lightdata 0
visdata 0
entdata 319
0.018s seconds elapsed

File diff suppressed because one or more lines are too long

View File

@ -1,58 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_brush_clipping_order.map
Output file: qbsp_brush_clipping_order.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/free_wad.wad
Processing hull 0...
---- Brush_LoadEntity ----
2 solid brushes
11 planes
---- CSGFaces ----
12 brushfaces
10 csgfaces
10 mergedfaces
6 surfaces
---- SolidBSP ----
6 split nodes
1 solid leafs
6 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
10 leaffaces
10 nodefaces
---- PortalizeWorld ----
6 vis leafs
6 vis clusters
12 vis portals
---- FillOutside ----
WARNING: Reached occupant "info_player_start" at (-104 -8 40), no filling performed.
Leak file written to qbsp_brush_clipping_order.pts
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
WARNING: No entities in empty space -- no filling performed (hull 1)
Processing hull 2...
WARNING: No entities in empty space -- no filling performed (hull 2)
Writing qbsp_brush_clipping_order.bsp as BSP version Quake BSP
Wrote qbsp_brush_clipping_order.bsp
2 models
20 planes 400
32 vertexes 384
12 nodes 288
4 texinfos 160
20 faces 400
24 clipnodes 192
13 leafs 364
20 marksurfaces 40
55 edges 220
88 surfedges 352
textures 2
lightdata 0
visdata 0
entdata 180
0.010s seconds elapsed

File diff suppressed because one or more lines are too long

View File

@ -1,81 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_func_detail.map
Output file: qbsp_func_detail.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/free_wad.wad
Opened WAD: deprecated/fence.wad
Opened WAD: deprecated/origin.wad
Opened WAD: deprecated/hintskip.wad
Processing hull 0...
---- Brush_LoadEntity ----
7 solid brushes
1 detail brushes
21 planes
---- CSGFaces ----
48 brushfaces
53 csgfaces
58 mergedfaces
21 surfaces
---- SolidBSP ----
62 split nodes
17 solid leafs
45 empty leafs
0 water leafs
1 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
157 leaffaces
146 nodefaces
---- PortalizeWorld ----
46 vis leafs
46 vis clusters
99 vis portals
---- FillOutside ----
37 outleafs
---- MergeAll ----
28 mergefaces
---- SolidBSP ----
17 split nodes
9 solid leafs
8 empty leafs
0 water leafs
1 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
70 leaffaces
52 nodefaces
---- PortalizeWorld ----
8 vis leafs
4 vis clusters
5 vis portals
---- TJunc ----
50 world edges
164 edge points
40 edges added by tjunctions
0 faces added by tjunctions
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
Processing hull 2...
Writing qbsp_func_detail.bsp as BSP version Quake BSP
Wrote qbsp_func_detail.bsp
1 models
40 planes 800
68 vertexes 816
17 nodes 408
12 texinfos 480
46 faces 920
62 clipnodes 496
9 leafs 252
64 marksurfaces 128
113 edges 452
224 surfedges 896
textures 6
lightdata 0
visdata 0
entdata 320
0.018s seconds elapsed

File diff suppressed because one or more lines are too long

View File

@ -1,80 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_func_detail_illusionary_plus_water.map
Output file: qbsp_func_detail_illusionary_plus_water.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/fence.wad
Opened WAD: deprecated/free_wad.wad
Processing hull 0...
---- Brush_LoadEntity ----
6 solid brushes
1 detail illusionary brushes
1 liquid brushes
18 planes
---- CSGFaces ----
48 brushfaces
50 csgfaces
60 mergedfaces
18 surfaces
---- SolidBSP ----
34 split nodes
6 solid leafs
23 empty leafs
5 water leafs
0 detail leafs
1 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
84 leaffaces
60 nodefaces
---- PortalizeWorld ----
29 vis leafs
29 vis clusters
56 vis portals
---- FillOutside ----
18 outleafs
---- MergeAll ----
30 mergefaces
---- SolidBSP ----
16 split nodes
6 solid leafs
5 empty leafs
5 water leafs
0 detail leafs
1 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
54 leaffaces
30 nodefaces
---- PortalizeWorld ----
11 vis leafs
2 vis clusters
1 vis portals
---- TJunc ----
32 world edges
72 edge points
0 edges added by tjunctions
0 faces added by tjunctions
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
Processing hull 2...
Writing qbsp_func_detail_illusionary_plus_water.bsp as BSP version Quake BSP
Wrote qbsp_func_detail_illusionary_plus_water.bsp
1 models
23 planes 460
24 vertexes 288
16 nodes 384
9 texinfos 360
30 faces 600
12 clipnodes 96
12 leafs 336
54 marksurfaces 108
65 edges 260
120 surfedges 480
textures 4
lightdata 0
visdata 0
entdata 223
0.015s seconds elapsed

File diff suppressed because one or more lines are too long

View File

@ -1,80 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_origin.map
Output file: qbsp_origin.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/free_wad.wad
Opened WAD: deprecated/fence.wad
Opened WAD: deprecated/origin.wad
Opened WAD: deprecated/hintskip.wad
Processing hull 0...
---- Brush_LoadEntity ----
6 solid brushes
12 planes
---- CSGFaces ----
36 brushfaces
36 csgfaces
36 mergedfaces
12 surfaces
---- SolidBSP ----
24 split nodes
6 solid leafs
19 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
120 leaffaces
120 nodefaces
---- PortalizeWorld ----
19 vis leafs
19 vis clusters
40 vis portals
---- FillOutside ----
18 outleafs
---- MergeAll ----
6 mergefaces
---- SolidBSP ----
6 split nodes
6 solid leafs
1 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
32 leaffaces
32 nodefaces
---- PortalizeWorld ----
1 vis leafs
1 vis clusters
0 vis portals
---- TJunc ----
28 world edges
100 edge points
16 edges added by tjunctions
0 faces added by tjunctions
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
Processing hull 2...
Writing qbsp_origin.bsp as BSP version Quake BSP
Wrote qbsp_origin.bsp
2 models
58 planes 1160
66 vertexes 792
20 nodes 480
18 texinfos 720
54 faces 1080
64 clipnodes 512
12 leafs 336
54 marksurfaces 108
117 edges 468
232 surfedges 928
textures 4
lightdata 0
visdata 0
entdata 408
0.017s seconds elapsed

File diff suppressed because one or more lines are too long

View File

@ -1,80 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_sealing_point_entity_on_outside.map
Output file: qbsp_sealing_point_entity_on_outside.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/free_wad.wad
Opened WAD: deprecated/fence.wad
Opened WAD: deprecated/origin.wad
Opened WAD: deprecated/hintskip.wad
Processing hull 0...
---- Brush_LoadEntity ----
6 solid brushes
12 planes
---- CSGFaces ----
36 brushfaces
36 csgfaces
36 mergedfaces
12 surfaces
---- SolidBSP ----
24 split nodes
6 solid leafs
19 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
120 leaffaces
120 nodefaces
---- PortalizeWorld ----
19 vis leafs
19 vis clusters
40 vis portals
---- FillOutside ----
18 outleafs
---- MergeAll ----
6 mergefaces
---- SolidBSP ----
6 split nodes
6 solid leafs
1 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
32 leaffaces
32 nodefaces
---- PortalizeWorld ----
1 vis leafs
1 vis clusters
0 vis portals
---- TJunc ----
28 world edges
100 edge points
16 edges added by tjunctions
0 faces added by tjunctions
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
Processing hull 2...
Writing qbsp_sealing_point_entity_on_outside.bsp as BSP version Quake BSP
Wrote qbsp_sealing_point_entity_on_outside.bsp
1 models
17 planes 340
42 vertexes 504
6 nodes 144
4 texinfos 160
32 faces 640
12 clipnodes 96
2 leafs 56
32 marksurfaces 64
73 edges 292
144 surfedges 576
textures 2
lightdata 0
visdata 0
entdata 463
0.013s seconds elapsed

File diff suppressed because one or more lines are too long

View File

@ -1,79 +0,0 @@
---- qbsp / ericw-tools v0.18.1-636-g19dbc1c ----
Input file: qbsp_tjunc_many_sided_face.map
Output file: qbsp_tjunc_many_sided_face.bsp
WARNING: No info_player_deathmatch entities in level
Opened WAD: deprecated/free_wad.wad
Processing hull 0...
---- Brush_LoadEntity ----
82 solid brushes
50 planes
---- CSGFaces ----
492 brushfaces
340 csgfaces
340 mergedfaces
12 surfaces
---- SolidBSP ----
24 split nodes
6 solid leafs
19 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
732 leaffaces
732 nodefaces
---- PortalizeWorld ----
19 vis leafs
19 vis clusters
40 vis portals
---- FillOutside ----
18 outleafs
---- MergeAll ----
82 mergefaces
---- SolidBSP ----
6 split nodes
6 solid leafs
1 empty leafs
0 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
386 leaffaces
386 nodefaces
---- PortalizeWorld ----
1 vis leafs
1 vis clusters
0 vis portals
---- TJunc ----
120 world edges
988 edge points
192 edges added by tjunctions
1 faces added by tjunctions
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
WARNING: No entities in empty space -- no filling performed (hull 1)
Processing hull 2...
WARNING: No entities in empty space -- no filling performed (hull 2)
Writing qbsp_tjunc_many_sided_face.bsp as BSP version Quake BSP
Wrote qbsp_tjunc_many_sided_face.bsp
1 models
39 planes 780
484 vertexes 5808
6 nodes 144
18 texinfos 720
387 faces 7740
112 clipnodes 896
2 leafs 56
387 marksurfaces 774
870 edges 3480
1738 surfedges 6952
textures 3
lightdata 0
visdata 0
entdata 139
0.056s seconds elapsed

View File

@ -7,6 +7,7 @@
#include <vis/leafbits.hh>
#include <vis/vis.hh>
#include <common/log.hh>
#include <common/bsputils.hh>
#include <common/threads.hh>
#include <common/fs.hh>
#include <common/parallel.hh>
@ -65,66 +66,6 @@ settings::vis_settings options;
fs::path portalfile, statefile, statetmpfile;
/*
===============
CompressRow
===============
*/
int CompressRow(const uint8_t *vis, const int numbytes, uint8_t *out)
{
int i, rep;
uint8_t *dst;
dst = out;
for (i = 0; i < numbytes; i++) {
*dst++ = vis[i];
if (vis[i])
continue;
rep = 1;
for (i++; i < numbytes; i++)
if (vis[i] || rep == 255)
break;
else
rep++;
*dst++ = rep;
i--;
}
return dst - out;
}
/*
===================
DecompressRow
===================
*/
void DecompressRow(const uint8_t *in, const int numbytes, uint8_t *decompressed)
{
int c;
uint8_t *out;
int row;
row = numbytes;
out = decompressed;
do {
if (*in) {
*out++ = *in++;
continue;
}
c = in[1];
if (!c)
FError("0 repeat");
in += 2;
while (c) {
*out++ = 0;
c--;
}
} while (out - decompressed < row);
}
/*
==================
AllocStackWinding