From e2f214a309a4e513b408149a1d46c66898245e25 Mon Sep 17 00:00:00 2001 From: Spencer Brown Date: Tue, 17 Feb 2026 18:56:59 +1000 Subject: [PATCH 1/5] Start work on a new ent, filter_cube_type --- fgd/point/filter/filter_cube_type.fgd | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 fgd/point/filter/filter_cube_type.fgd diff --git a/fgd/point/filter/filter_cube_type.fgd b/fgd/point/filter/filter_cube_type.fgd new file mode 100644 index 000000000..8fd31164f --- /dev/null +++ b/fgd/point/filter/filter_cube_type.fgd @@ -0,0 +1,66 @@ +@FilterClass base(filter_base) + appliesto(P2CE) + iconsprite("editor/filter_paint_power.vmt") + line(0 255 0, targetname, twinfilter) += filter_cube_type : "A filter that filters based on cube properties. When testing cubes, irrelevant conditions are always ignored, if that cube type is enabled.\n" + + "Tip: This works well with a filter_multi, if you want to match different cube configurations or check for specific models.\n" + + "Additionally, keep in mind filters are only checked when items initially touch a trigger or other events occur, you'll need repeated checks to handle events." + [ + allowedtypes(flags): "Allowed Types" : "Which cube types are allowed." = + [ + 1: "Standard" : 1 + 2: "Companion": 1 + 4: "Reflection": 1 + 8: "Sphere": 1 + 16: "Antique (Old Aperture)": 1 + 32: "Schrodinger": 1 + 64: "Frankenturret (prop_monster_box)" : 1 + ] + + boxmode[engine](integer) : "Frankenturret Pose" : 0 + activated[engine](integer) : "Button Activation" : 0 + powered[engine](integer) : "Laser State" : 0 + laserfilter[engine](integer) : "Laser Filter" : 0 + lasermodifier[engine](integer) : "Laser Modifier" : 0 + + boxmode(choices) : "Frankenturret Pose" : 0 : "If a frankenturret, require it to be in this pose." = + [ + 0: "Don't care" + 1: "Extended" + 2: "Retracted (box)" + ] + activated(choices) : "Button Activation" : 0 : "For non-frankenturrets, check whether the cube is currently 'active' from pressing a button." = + [ + 0: "Don't care" + 1: "Inactive" + 2: "Active" + ] + + powered(choices) : "Laser State" : 0 : "If a Reflection or Schrodinger cube, check whether it is being powered by a laser." = + [ + 0: "Don't care" + 1: "Unpowered" + 2: "Powered" + ] + + laserfilter(choices) : "Laser Filter" : 0 : "If a Reflection or Schrodinger cube, check which laser filter is defined." = + [ + 0: "Don't care" + 1: "No filter" + 2: "Specific color" + 3: "Any filter set" + ] + laserfiltercolor(color255) : "Laser Filter Color" : "255 255 255 255" : "If 'Laser Filter' is set to 'specific color', this is the color to check. It must match exactly." + lasermodifier(choices) : "Laser Modifier" : 0 : "If a Reflection or Schrodinger cube, check which laser modifier is defined." = + [ + 0: "Don't care" + 1: "No filter" + 2: "Specific colour" + 3: "Any filter set" + ] + lasermodifiercolor(color255) : "Laser Modifier Color" : "255 255 255 255" : "If 'Laser Modifier' is set to 'specific color', this is the color to check. It must match exactly." + + twinfilter(filterclass) : "Schrodinger Twin Filter" : : "If a Schrodinger cube and this is set, test this other filter against the partner cube." + + @resources [] + ] From b759947b9488daea6ea3c805b5ef4ae3f6d4ee9a Mon Sep 17 00:00:00 2001 From: Spencer Brown Date: Thu, 19 Feb 2026 15:01:56 +1000 Subject: [PATCH 2/5] Tweak descriptions --- fgd/point/filter/filter_cube_type.fgd | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fgd/point/filter/filter_cube_type.fgd b/fgd/point/filter/filter_cube_type.fgd index 8fd31164f..9b3a3a330 100644 --- a/fgd/point/filter/filter_cube_type.fgd +++ b/fgd/point/filter/filter_cube_type.fgd @@ -36,31 +36,31 @@ 2: "Active" ] - powered(choices) : "Laser State" : 0 : "If a Reflection or Schrodinger cube, check whether it is being powered by a laser." = + powered(choices) : "Laser State" : 0 : "If a Reflection or Schrödinger's cube, check whether it is being powered by a laser." = [ 0: "Don't care" 1: "Unpowered" 2: "Powered" ] - laserfilter(choices) : "Laser Filter" : 0 : "If a Reflection or Schrodinger cube, check which laser filter is defined." = + laserfilter(choices) : "Laser Filter" : 0 : "If a Reflection or Schrödinger's cube, check which laser filter is defined." = [ 0: "Don't care" 1: "No filter" - 2: "Specific color" + 2: "Specific filter color" 3: "Any filter set" ] laserfiltercolor(color255) : "Laser Filter Color" : "255 255 255 255" : "If 'Laser Filter' is set to 'specific color', this is the color to check. It must match exactly." - lasermodifier(choices) : "Laser Modifier" : 0 : "If a Reflection or Schrodinger cube, check which laser modifier is defined." = + lasermodifier(choices) : "Laser Modifier" : 0 : "If a Reflection or Schrödinger's cube, check which laser modifier is defined." = [ 0: "Don't care" - 1: "No filter" - 2: "Specific colour" - 3: "Any filter set" + 1: "No modifier" + 2: "Specific modifier colour" + 3: "Any modifier set" ] lasermodifiercolor(color255) : "Laser Modifier Color" : "255 255 255 255" : "If 'Laser Modifier' is set to 'specific color', this is the color to check. It must match exactly." - twinfilter(filterclass) : "Schrodinger Twin Filter" : : "If a Schrodinger cube and this is set, test this other filter against the partner cube." + twinfilter(filterclass) : "Schrodinger Twin Filter" : : "If a Schrödinger's cube and this is set, test this other filter against the partner cube." @resources [] ] From 9ebdf0f12da3d81649c81bdbea5c7ecdb5fa7bae Mon Sep 17 00:00:00 2001 From: Spencer Brown Date: Sat, 14 Mar 2026 14:01:46 +1000 Subject: [PATCH 3/5] Update filter to match cube rework --- fgd/point/filter/filter_cube_type.fgd | 41 +++++++++++++++++++-------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/fgd/point/filter/filter_cube_type.fgd b/fgd/point/filter/filter_cube_type.fgd index 9b3a3a330..3f37d574a 100644 --- a/fgd/point/filter/filter_cube_type.fgd +++ b/fgd/point/filter/filter_cube_type.fgd @@ -3,18 +3,35 @@ iconsprite("editor/filter_paint_power.vmt") line(0 255 0, targetname, twinfilter) = filter_cube_type : "A filter that filters based on cube properties. When testing cubes, irrelevant conditions are always ignored, if that cube type is enabled.\n" + - "Tip: This works well with a filter_multi, if you want to match different cube configurations or check for specific models.\n" + - "Additionally, keep in mind filters are only checked when items initially touch a trigger or other events occur, you'll need repeated checks to handle events." + "Tip: This works well with a filter_multi, if you want to match different cube configurations or check for specific models." [ - allowedtypes(flags): "Allowed Types" : "Which cube types are allowed." = + allowedbehaviors(flags): "Allowed Behaviors" : : "Which cube behaviors are allowed." = [ - 1: "Standard" : 1 - 2: "Companion": 1 + 1: "Frankenturret (prop_monster_box)" : 1 + 2: "Regular" : 1 4: "Reflection": 1 - 8: "Sphere": 1 - 16: "Antique (Old Aperture)": 1 - 32: "Schrodinger": 1 - 64: "Frankenturret (prop_monster_box)" : 1 + 8: "Schrodinger": 1 + ] + allowedshapes(flags) : "Allowed Shapes" : : "Which cube shapes are allowed, matching how buttons check. 'Custom' types must be set manually in the cube keyvalues. Up to 64 types can be filtered." = + [ + // Shape 0 is 'auto', shape 1 is bit 1, shape 2 is bit 2 etc. + 1 : "1: Cubic": 1 + 2 : "2: Spherical": 1 + 4 : "3: Custom": 0 + 8 : "4: Custom": 0 + 16: "5: Custom": 0 + 32: "6: Custom": 0 + 64: "7: Custom": 0 + 128 : "8: Custom": 0 + 256 : "9: Custom": 0 + 512 : "10: Custom": 0 + 1024 : "11: Custom": 0 + 2048 : "12: Custom": 0 + 8192 : "13: Custom": 0 + 16384: "14: Custom": 0 + 32768: "15: Custom": 0 + 65536: "16: Custom": 0 + // ETC up to 64. ] boxmode[engine](integer) : "Frankenturret Pose" : 0 @@ -36,11 +53,11 @@ 2: "Active" ] - powered(choices) : "Laser State" : 0 : "If a Reflection or Schrödinger's cube, check whether it is being powered by a laser." = + powered(choices) : "Laser State" : 0 : "If a Reflection or Schrödinger's cube, check whether it is emitting a laser." = [ 0: "Don't care" - 1: "Unpowered" - 2: "Powered" + 1: "Not emitting" + 2: "Emitting laser" ] laserfilter(choices) : "Laser Filter" : 0 : "If a Reflection or Schrödinger's cube, check which laser filter is defined." = From 2efc2ed06a3f4d65eaa11cba50fcd45f667a9a16 Mon Sep 17 00:00:00 2001 From: Spencer Brown Date: Mon, 24 Aug 2026 18:58:45 +1000 Subject: [PATCH 4/5] Add filter_cube_type sprite --- fgd/point/filter/filter_cube_type.fgd | 2 +- hammer/materials/editor/filter_cube_type.vmt | 7 +++++++ hammer/materials/editor/filter_cube_type.vtf | Bin 0 -> 3705 bytes materialsrc/editor/filter_cube_type.pdn | Bin 0 -> 10761 bytes 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 hammer/materials/editor/filter_cube_type.vmt create mode 100644 hammer/materials/editor/filter_cube_type.vtf create mode 100644 materialsrc/editor/filter_cube_type.pdn diff --git a/fgd/point/filter/filter_cube_type.fgd b/fgd/point/filter/filter_cube_type.fgd index 3f37d574a..3598be2fb 100644 --- a/fgd/point/filter/filter_cube_type.fgd +++ b/fgd/point/filter/filter_cube_type.fgd @@ -1,6 +1,6 @@ @FilterClass base(filter_base) appliesto(P2CE) - iconsprite("editor/filter_paint_power.vmt") + iconsprite("editor/filter_cube_type.vmt") line(0 255 0, targetname, twinfilter) = filter_cube_type : "A filter that filters based on cube properties. When testing cubes, irrelevant conditions are always ignored, if that cube type is enabled.\n" + "Tip: This works well with a filter_multi, if you want to match different cube configurations or check for specific models." diff --git a/hammer/materials/editor/filter_cube_type.vmt b/hammer/materials/editor/filter_cube_type.vmt new file mode 100644 index 000000000..7e1000c95 --- /dev/null +++ b/hammer/materials/editor/filter_cube_type.vmt @@ -0,0 +1,7 @@ +"Sprite" +{ + "$spriteorientation" "vp_parallel" + "$spriteorigin" "[ 0.50 0.50 ]" + "$baseTexture" "editor/filter_cube_type" + "$no_fullbright" 1 +} diff --git a/hammer/materials/editor/filter_cube_type.vtf b/hammer/materials/editor/filter_cube_type.vtf new file mode 100644 index 0000000000000000000000000000000000000000..2fb564c02328cb1e0f3f637e3336b22b1fadb34b GIT binary patch literal 3705 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 literal 0 HcmV?d00001 diff --git a/materialsrc/editor/filter_cube_type.pdn b/materialsrc/editor/filter_cube_type.pdn new file mode 100644 index 0000000000000000000000000000000000000000..740ec7063b1781acce4a394c1d772df3d9302c1d GIT binary patch literal 10761 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 AY5)KL literal 0 HcmV?d00001 From e9cb8a888cd53182161b63cf1d3eaf13a4ec1592 Mon Sep 17 00:00:00 2001 From: Spencer Brown Date: Fri, 28 Aug 2026 11:18:39 +1000 Subject: [PATCH 5/5] Tweak descriptions, mention filter_cube_type in prop_floor_button KV --- fgd/bases/BasePortButton.fgd | 3 ++- fgd/point/filter/filter_cube_type.fgd | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/fgd/bases/BasePortButton.fgd b/fgd/bases/BasePortButton.fgd index 1276a4ce7..d6a8e868b 100644 --- a/fgd/bases/BasePortButton.fgd +++ b/fgd/bases/BasePortButton.fgd @@ -8,7 +8,8 @@ 0 : "Solid" 1 : "Non-Solid" ] - filtername(filterclass) : "Filter Name" : : "A filter entity that restricts which things can press the button. If set, the builtin filtering is disabled." + filtername(filterclass) : "Filter Name" : : "A filter entity that restricts which things can press the button. " + + "If set, the builtin filtering is disabled. A filter_cube_type is especially suitable here, since it can replicate all the existing filter behavior." // Inputs input PressIn(void) : "Activate the button as if it was pressed, sending it to the bottom position." diff --git a/fgd/point/filter/filter_cube_type.fgd b/fgd/point/filter/filter_cube_type.fgd index 3598be2fb..142549b5b 100644 --- a/fgd/point/filter/filter_cube_type.fgd +++ b/fgd/point/filter/filter_cube_type.fgd @@ -3,7 +3,8 @@ iconsprite("editor/filter_cube_type.vmt") line(0 255 0, targetname, twinfilter) = filter_cube_type : "A filter that filters based on cube properties. When testing cubes, irrelevant conditions are always ignored, if that cube type is enabled.\n" + - "Tip: This works well with a filter_multi, if you want to match different cube configurations or check for specific models." + "Tip: This works well with a filter_multi, if you want to match different cube configurations or check for specific models.\n" + + "Additionally, keep in mind filters are only checked when items are actively moving inside a trigger or other events occur, you'll need repeated checks to handle events." [ allowedbehaviors(flags): "Allowed Behaviors" : : "Which cube behaviors are allowed." = [ @@ -27,10 +28,10 @@ 512 : "10: Custom": 0 1024 : "11: Custom": 0 2048 : "12: Custom": 0 - 8192 : "13: Custom": 0 - 16384: "14: Custom": 0 - 32768: "15: Custom": 0 - 65536: "16: Custom": 0 + 4096 : "13: Custom": 0 + 8192 : "14: Custom": 0 + 16384: "15: Custom": 0 + 32768: "16: Custom": 0 // ETC up to 64. ] @@ -40,6 +41,8 @@ laserfilter[engine](integer) : "Laser Filter" : 0 lasermodifier[engine](integer) : "Laser Modifier" : 0 + allowplayer(boolean) : "Allow Players" : 0 : "As a convenience for things like floor buttons, if enabled this filter will succeed for any player entities in addition to cubes. This saves needing a filter_multi." + boxmode(choices) : "Frankenturret Pose" : 0 : "If a frankenturret, require it to be in this pose." = [ 0: "Don't care"