diff --git a/common/bspfile.cc b/common/bspfile.cc index 9864290b..f417b518 100644 --- a/common/bspfile.cc +++ b/common/bspfile.cc @@ -1725,13 +1725,13 @@ const bspversion_t bspver_qbism{Q2_QBISMIDENT, Q2_BSPVERSION, "qbism", "Quake II bool surfflags_t::needs_write() const { return no_dirt || no_shadow || no_bounce || no_minlight || no_expand || light_ignore || !surflight_rescale || phong_angle || - phong_angle_concave || minlight || !qv::emptyExact(minlight_color) || light_alpha || maxlight || lightcolorscale != 1.0; + phong_angle_concave || phong_group || minlight || !qv::emptyExact(minlight_color) || light_alpha || maxlight || lightcolorscale != 1.0; } static auto as_tuple(const surfflags_t &flags) { return std::tie(flags.native, flags.is_nodraw, flags.is_hintskip, flags.is_hint, flags.no_dirt, flags.no_shadow, flags.no_bounce, flags.no_minlight, flags.no_expand, - flags.light_ignore, flags.surflight_rescale, flags.phong_angle, flags.phong_angle_concave, flags.minlight, flags.minlight_color, flags.light_alpha, flags.maxlight, flags.lightcolorscale); + flags.light_ignore, flags.surflight_rescale, flags.phong_angle, flags.phong_angle_concave, flags.phong_group, flags.minlight, flags.minlight_color, flags.light_alpha, flags.maxlight, flags.lightcolorscale); } bool surfflags_t::operator<(const surfflags_t &other) const diff --git a/include/common/bspfile.hh b/include/common/bspfile.hh index dc0f915c..f1eaf7a6 100644 --- a/include/common/bspfile.hh +++ b/include/common/bspfile.hh @@ -195,6 +195,9 @@ struct surfflags_t // if non zero, overrides _phong_angle for concave joints vec_t phong_angle_concave; + // _phong_group key, equivalent q2 map format's use of the "value" field + int phong_group; + // minlight value for this face vec_t minlight; diff --git a/light/light.cc b/light/light.cc index e014144d..23732a21 100644 --- a/light/light.cc +++ b/light/light.cc @@ -1092,6 +1092,9 @@ static void LoadExtendedTexinfoFlags(const fs::path &sourcefilename, const mbsp_ if (val.contains("phong_angle_concave")) { flags.phong_angle_concave = val.at("phong_angle_concave").get(); } + if (val.contains("phong_group")) { + flags.phong_group = val.at("phong_group").get(); + } if (val.contains("minlight")) { flags.minlight = val.at("minlight").get(); } diff --git a/light/phong.cc b/light/phong.cc index 865748dc..f70ae4c4 100644 --- a/light/phong.cc +++ b/light/phong.cc @@ -392,6 +392,12 @@ int Q2_FacePhongValue(const mbsp_t *bsp, const mface_t *face) { const mtexinfo_t *texinfo = BSP_GetTexinfo(bsp, face->texinfo); if (texinfo != nullptr) { + // FIXME: would be more convenient if common code loaded texinfo file + // so we could access these in mtexinfo_t rather than extended_texinfo_flags + if (auto phong_group = extended_texinfo_flags[face->texinfo].phong_group) { + // Q1 _phong_group syntax (also works in Q2 maps) + return phong_group; + } if (texinfo->value != 0 && ((texinfo->flags.native & Q2_SURF_LIGHT) == 0)) { return texinfo->value; } diff --git a/qbsp/map.cc b/qbsp/map.cc index d12d6f5c..a1d78cd2 100644 --- a/qbsp/map.cc +++ b/qbsp/map.cc @@ -616,6 +616,8 @@ static surfflags_t SurfFlagsForEntity(const maptexinfo_t &texinfo, const mapenti const vec_t phong_angle_concave = entity.epairs.get_float("_phong_angle_concave"); flags.phong_angle_concave = clamp(phong_angle_concave, 0.0, 360.0); + flags.phong_group = entity.epairs.get_int("_phong_group"); + // handle "_minlight" const vec_t minlight = entity.epairs.get_float("_minlight"); if (minlight > 0) { diff --git a/qbsp/writebsp.cc b/qbsp/writebsp.cc index cba42ce9..f1181b46 100644 --- a/qbsp/writebsp.cc +++ b/qbsp/writebsp.cc @@ -377,6 +377,9 @@ static void WriteExtendedTexinfoFlags(void) if (tx.flags.phong_angle_concave) { t["phong_angle_concave"] = tx.flags.phong_angle_concave; } + if (tx.flags.phong_group) { + t["phong_group"] = tx.flags.phong_group; + } if (tx.flags.minlight) { t["minlight"] = tx.flags.minlight; } diff --git a/testmaps/q2_phong_doesnt_cross_contents.map b/testmaps/q2_phong_doesnt_cross_contents.map index 756d5ab3..eb598886 100644 --- a/testmaps/q2_phong_doesnt_cross_contents.map +++ b/testmaps/q2_phong_doesnt_cross_contents.map @@ -8,17 +8,17 @@ "_phong" "1" // brush 0 { -( 368 64 112 ) ( 368 -64 112 ) ( 368 64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 384 -64 -16 ) ( 368 -64 -16 ) ( 384 -64 112 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 0 -1 0 ] 0 1 1 -( 384 64 -16 ) ( 368 64 -16 ) ( 384 -64 -16 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 -1 0 0 ] 0 1 1 -( 384 -64 272 ) ( 368 -64 272 ) ( 384 64 272 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 -1 0 0 ] 0 1 1 -( 384 224 112 ) ( 368 224 112 ) ( 384 224 -16 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 0 -1 0 ] 0 1 1 -( 384 -64 112 ) ( 384 64 112 ) ( 384 -64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1328 64 112 ) ( 1328 -64 112 ) ( 1328 64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 -240 -16 ) ( 1328 -240 -16 ) ( 1344 -240 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 64 -16 ) ( 1328 64 -16 ) ( 1344 -64 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1344 -64 272 ) ( 1328 -64 272 ) ( 1344 64 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1344 224 112 ) ( 1328 224 112 ) ( 1344 224 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 -64 112 ) ( 1344 64 112 ) ( 1344 -64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 } // brush 1 { ( -496 112 -16 ) ( -496 240 -16 ) ( -496 112 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( -496 -48 112 ) ( -480 -48 112 ) ( -496 -48 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -496 -256 112 ) ( -480 -256 112 ) ( -496 -256 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -496 112 -16 ) ( -480 112 -16 ) ( -496 240 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -496 240 272 ) ( -480 240 272 ) ( -496 112 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -496 240 -16 ) ( -480 240 -16 ) ( -496 240 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 @@ -31,34 +31,34 @@ ( -480 240 -16 ) ( -480 224 -16 ) ( -384 240 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -384 240 272 ) ( -384 224 272 ) ( -480 240 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -384 240 112 ) ( -480 240 112 ) ( -384 240 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 384 240 -16 ) ( 384 224 -16 ) ( 384 240 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 240 -16 ) ( 1344 224 -16 ) ( 1344 240 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 } // brush 3 { -( -480 -64 -16 ) ( -480 -48 -16 ) ( -480 -64 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 48 -64 -16 ) ( -48 -64 -16 ) ( 48 -64 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 48 -64 -16 ) ( 48 -48 -16 ) ( -48 -64 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 -( -48 -64 272 ) ( -48 -48 272 ) ( 48 -64 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 -( -48 -48 -16 ) ( 48 -48 -16 ) ( -48 -48 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 384 -64 112 ) ( 384 -48 112 ) ( 384 -64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -480 -256 -16 ) ( -480 -240 -16 ) ( -480 -256 112 ) e1u1/c_met11_2 [ 0 1 0 64 ] [ 0 0 -1 0 ] 0 1 1 +( 48 -256 -16 ) ( -48 -256 -16 ) ( 48 -256 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 48 -256 -16 ) ( 48 -240 -16 ) ( -48 -256 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 -64 ] 0 1 1 +( -48 -256 272 ) ( -48 -240 272 ) ( 48 -256 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 -64 ] 0 1 1 +( -48 -240 -16 ) ( 48 -240 -16 ) ( -48 -240 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 -256 112 ) ( 1344 -240 112 ) ( 1344 -256 -16 ) e1u1/c_met11_2 [ 0 1 0 64 ] [ 0 0 -1 0 ] 0 1 1 } // brush 4 { ( -480 -48 288 ) ( -480 -48 272 ) ( -480 48 288 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 48 -48 288 ) ( 48 -48 272 ) ( -48 -48 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 48 -240 288 ) ( 48 -240 272 ) ( -48 -240 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 48 48 272 ) ( -48 48 272 ) ( 48 -48 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( 48 48 288 ) ( 48 -48 288 ) ( -48 48 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -48 224 288 ) ( -48 224 272 ) ( 48 224 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 384 48 288 ) ( 384 48 272 ) ( 384 -48 288 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 48 288 ) ( 1344 48 272 ) ( 1344 -48 288 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 } // brush 5 { ( -480 48 -16 ) ( -480 48 0 ) ( -480 -48 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( -48 -48 -16 ) ( -48 -48 0 ) ( 48 -48 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -48 -256 -16 ) ( -48 -256 0 ) ( 48 -256 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -48 48 -16 ) ( -48 -48 -16 ) ( 48 48 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -48 -48 0 ) ( -48 48 0 ) ( 48 -48 0 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( 48 224 -16 ) ( 48 224 0 ) ( -48 224 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 384 -48 -16 ) ( 384 -48 0 ) ( 384 48 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1344 -48 -16 ) ( 1344 -48 0 ) ( 1344 48 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 } // brush 6 { @@ -162,12 +162,167 @@ ( -1024 -64 92 ) ( -1023 -64 92 ) ( -1024 -63 92 ) e1u1/c_met11_2 [ 1.0000000000000002 0 0 0 ] [ 0 -1.0000000000000002 0 -112 ] 0 1 1 ( 224 -32 96 ) ( 224 -31 96 ) ( 225 -32 96 ) e1u1/c_met11_2 [ 1.0000000000000002 0 0 0 ] [ 0 1.0000000000000002 0 -48 ] 0 1 1 ( 224 -8 96 ) ( 225 -8 96 ) ( 224 -8 97 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 -( 224 -32 96 ) ( 224 -32 97 ) ( 224 -31 96 ) e1u1/c_met11_2 [ 0 -1.0000000000000002 0 48 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 1328 -32 96 ) ( 1328 -32 97 ) ( 1328 -31 96 ) e1u1/c_met11_2 [ 0 -1.0000000000000002 0 48 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 } } // entity 1 { "classname" "info_player_start" -"origin" "188.686 -28.4041 120" +"origin" "668.686 -28.4041 120" "angle" "165" } +// entity 2 +{ +"classname" "func_group" +"_phong_angle" "50" +// brush 0 +{ +( 152 144 0 ) ( 152 144 36 ) ( 152 77 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 232 77 0 ) ( 152 77 0 ) ( 152 144 36 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 -1 0 0 ] 0 1 1 +( 232 77 0 ) ( 232 144 0 ) ( 152 144 0 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 -1 0 0 ] 0 1 1 +( 232 144 0 ) ( 232 144 36 ) ( 152 144 36 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 0 -1 0 ] 0 1 1 +( 232 77 0 ) ( 232 144 36 ) ( 232 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( 152 220 128 ) ( 152 144 36 ) ( 152 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 152 144 36 ) ( 232 144 36 ) ( 232 144 0 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 0 -1 0 ] 0 1 1 +( 152 220 128 ) ( 232 220 128 ) ( 232 144 36 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 0 -1 0 ] 0 1 1 +( 232 144 0 ) ( 232 220 0 ) ( 152 220 0 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 -1 0 0 ] 0 1 1 +( 232 220 0 ) ( 232 220 128 ) ( 152 220 128 ) e1u1/c_met11_2 [ 1 0 0 8 ] [ 0 0 -1 0 ] 0 1 1 +( 232 144 36 ) ( 232 220 128 ) ( 232 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 2 +{ +( 232 78 0 ) ( 312 78 32 ) ( 312 11 32 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 1 0 -27 ] 340.68057 1 1 0 0 1 +( 232 11 0 ) ( 312 11 32 ) ( 312 11 0 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( 312 11 0 ) ( 312 18 0 ) ( 232 78 0 ) e1u1/c_met11_2 [ -1 0 0 -72 ] [ 0 -1 0 -27 ] 0 1 1 0 0 1 +( 312 77 27 ) ( 312 77 23 ) ( 440 77 23 ) e1u1/c_met11_2 [ -1 0 0 -82.63385 ] [ 0 0 -1 -41.17846 ] 0 1 1 0 0 1 +( 312 11 32 ) ( 312 78 32 ) ( 312 18 0 ) e1u1/c_met11_2 [ 0 -1 0 27 ] [ 0 0 -1 0 ] 180 1 1 0 0 1 +} +// brush 3 +{ +( 232 220 128 ) ( 232 144 36 ) ( 232 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( 232 220 128 ) ( 312 220 160 ) ( 312 144 68 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( 232 144 36 ) ( 312 144 68 ) ( 312 144 32 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( -48 -48 0 ) ( 48 -48 0 ) ( -48 48 0 ) e1u1/c_met11_2 [ -1 0 0 -97.19815 ] [ 0 -1 0 0 ] 0 1 1 0 0 1 +( 312 220 32 ) ( 312 220 160 ) ( 232 220 128 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( 312 144 68 ) ( 312 220 160 ) ( 312 220 32 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +} +// brush 4 +{ +( 232 144 0 ) ( 232 144 36 ) ( 232 77 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( 232 144 36 ) ( 312 144 68 ) ( 312 77 32 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 -1 0 0 ] 0 1 1 0 0 1 +( 312 77 13 ) ( 440 77 11 ) ( 312 77 11 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( -48 -48 0 ) ( 48 -48 0 ) ( -48 48 0 ) e1u1/c_met11_2 [ -1 0 0 -97.19815 ] [ 0 -1 0 0 ] 0 1 1 0 0 1 +( 312 144 32 ) ( 312 144 68 ) ( 232 144 36 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +( 312 77 32 ) ( 312 144 68 ) ( 312 144 32 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 0 0 1 +} +} +// entity 3 +{ +"classname" "func_group" +"_phong_angle" "50" +// brush 0 +{ +( 344 144 0 ) ( 344 144 36 ) ( 344 77 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 424 77 0 ) ( 344 77 0 ) ( 344 144 36 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 -1 0 0 ] 0 1 1 +( 424 77 0 ) ( 424 144 0 ) ( 344 144 0 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 -1 0 0 ] 0 1 1 +( 424 144 0 ) ( 424 144 36 ) ( 344 144 36 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 0 -1 0 ] 0 1 1 +( 424 77 0 ) ( 424 144 36 ) ( 424 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( 344 220 128 ) ( 344 144 36 ) ( 344 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 344 144 36 ) ( 424 144 36 ) ( 424 144 0 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 0 -1 0 ] 0 1 1 +( 344 220 128 ) ( 424 220 128 ) ( 424 144 36 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 0 -1 0 ] 0 1 1 +( 424 144 0 ) ( 424 220 0 ) ( 344 220 0 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 -1 0 0 ] 0 1 1 +( 424 220 0 ) ( 424 220 128 ) ( 344 220 128 ) e1u1/c_met11_2 [ 1 0 0 -56 ] [ 0 0 -1 0 ] 0 1 1 +( 424 144 36 ) ( 424 220 128 ) ( 424 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 4 +{ +"classname" "func_group" +"_phong_angle" "50" +"_phong_group" "1" +// brush 0 +{ +( 424 220 128 ) ( 424 144 36 ) ( 424 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 424 220 128 ) ( 504 220 160 ) ( 504 144 68 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 0 -1 0 ] 0 1 1 +( 424 144 36 ) ( 504 144 68 ) ( 504 144 32 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 0 -1 0 ] 0 1 1 +( 144 -48 0 ) ( 240 -48 0 ) ( 144 48 0 ) e1u1/c_met11_2 [ -1 0 0 94.80185 ] [ 0 -1 0 0 ] 0 1 1 +( 504 220 32 ) ( 504 220 160 ) ( 424 220 128 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 0 -1 0 ] 0 1 1 +( 504 144 68 ) ( 504 220 160 ) ( 504 220 32 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( 424 78 0 ) ( 504 78 32 ) ( 504 11 32 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 1 0 -27 ] 340.68057 1 1 +( 424 11 0 ) ( 504 11 32 ) ( 504 11 0 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 0 -1 0 ] 0 1 1 +( 504 11 0 ) ( 504 18 0 ) ( 424 78 0 ) e1u1/c_met11_2 [ -1 0 0 120 ] [ 0 -1 0 -27 ] 0 1 1 +( 504 77 27 ) ( 504 77 23 ) ( 632 77 23 ) e1u1/c_met11_2 [ -1 0 0 109.36615 ] [ 0 0 -1 -41.17846 ] 0 1 1 +( 504 11 32 ) ( 504 78 32 ) ( 504 18 0 ) e1u1/c_met11_2 [ 0 -1 0 27 ] [ 0 0 -1 0 ] 180 1 1 +} +// brush 2 +{ +( 424 144 0 ) ( 424 144 36 ) ( 424 77 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 424 144 36 ) ( 504 144 68 ) ( 504 77 32 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 -1 0 0 ] 0 1 1 +( 504 77 13 ) ( 632 77 11 ) ( 504 77 11 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 0 -1 0 ] 0 1 1 +( 144 -48 0 ) ( 240 -48 0 ) ( 144 48 0 ) e1u1/c_met11_2 [ -1 0 0 94.80185 ] [ 0 -1 0 0 ] 0 1 1 +( 504 144 32 ) ( 504 144 68 ) ( 424 144 36 ) e1u1/c_met11_2 [ 1 0 0 -8 ] [ 0 0 -1 0 ] 0 1 1 +( 504 77 32 ) ( 504 144 68 ) ( 504 144 32 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 5 +{ +"classname" "func_group" +"_phong_angle" "50" +// brush 0 +{ +( 536 144 0 ) ( 536 144 36 ) ( 536 77 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 616 77 0 ) ( 536 77 0 ) ( 536 144 36 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 -1 0 0 ] 0 1 1 +( 616 77 0 ) ( 616 144 0 ) ( 536 144 0 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 -1 0 0 ] 0 1 1 +( 616 144 0 ) ( 616 144 36 ) ( 536 144 36 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 0 -1 0 ] 0 1 1 +( 616 77 0 ) ( 616 144 36 ) ( 616 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( 536 220 128 ) ( 536 144 36 ) ( 536 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 536 144 36 ) ( 616 144 36 ) ( 616 144 0 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 0 -1 0 ] 0 1 1 +( 536 220 128 ) ( 616 220 128 ) ( 616 144 36 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 0 -1 0 ] 0 1 1 +( 616 144 0 ) ( 616 220 0 ) ( 536 220 0 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 -1 0 0 ] 0 1 1 +( 616 220 0 ) ( 616 220 128 ) ( 536 220 128 ) e1u1/c_met11_2 [ 1 0 0 -120 ] [ 0 0 -1 0 ] 0 1 1 +( 616 144 36 ) ( 616 220 128 ) ( 616 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 6 +{ +"classname" "func_group" +"_phong_angle" "50" +// brush 0 +{ +( 616 220 128 ) ( 616 144 36 ) ( 616 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 616 220 128 ) ( 696 220 160 ) ( 696 144 68 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 +( 616 144 36 ) ( 696 144 68 ) ( 696 144 32 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 +( 336 -48 0 ) ( 432 -48 0 ) ( 336 48 0 ) e1u1/c_met11_2 [ -1 0 0 30.80185 ] [ 0 -1 0 0 ] 0 1 1 +( 696 220 32 ) ( 696 220 160 ) ( 616 220 128 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 +( 696 144 68 ) ( 696 220 160 ) ( 696 220 32 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( 616 78 0 ) ( 696 78 32 ) ( 696 11 32 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 1 0 -27 ] 340.68057 1 1 +( 616 11 0 ) ( 696 11 32 ) ( 696 11 0 ) e1u1/c_met11_2 [ 1 0 0 -71.99994 ] [ 0 0 -1 0 ] 0 1 1 +( 696 11 0 ) ( 696 18 0 ) ( 616 78 0 ) e1u1/c_met11_2 [ -1 0 0 56 ] [ 0 -1 0 -27 ] 0 1 1 +( 696 77 27 ) ( 696 77 23 ) ( 824 77 23 ) e1u1/c_met11_2 [ -1 0 0 45.36615 ] [ 0 0 -1 -41.17846 ] 0 1 1 +( 696 11 32 ) ( 696 78 32 ) ( 696 18 0 ) e1u1/c_met11_2 [ 0 -1 0 27 ] [ 0 0 -1 0 ] 180 1 1 +} +// brush 2 +{ +( 616 144 0 ) ( 616 144 36 ) ( 616 77 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 616 144 36 ) ( 696 144 68 ) ( 696 77 32 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 -1 0 0 ] 0 1 1 +( 696 77 13 ) ( 824 77 11 ) ( 696 77 11 ) e1u1/c_met11_2 [ 1 0 0 -71.99994 ] [ 0 0 -1 0 ] 0 1 1 +( 336 -48 0 ) ( 432 -48 0 ) ( 336 48 0 ) e1u1/c_met11_2 [ -1 0 0 30.80185 ] [ 0 -1 0 0 ] 0 1 1 +( 696 144 32 ) ( 696 144 68 ) ( 616 144 36 ) e1u1/c_met11_2 [ 1 0 0 -72 ] [ 0 0 -1 0 ] 0 1 1 +( 696 77 32 ) ( 696 144 68 ) ( 696 144 32 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +}