Skip to content

Instantly share code, notes, and snippets.

@spacehare
Created October 29, 2025 20:25
Show Gist options
  • Select an option

  • Save spacehare/931523d7fa1a487c7123ff88d03d030e to your computer and use it in GitHub Desktop.

Select an option

Save spacehare/931523d7fa1a487c7123ff88d03d030e to your computer and use it in GitHub Desktop.
a TrenchBroom set-up for Quake's Copper mod, where you need all 3 `func_door`s open at once in order to solve the puzzle.
// entity 0
{
"classname" "func_group"
"_tb_type" "_tb_group"
"_tb_name" "puzzle"
"_tb_id" "11"
"_tb_linked_group_id" "{28fe2931-8379-4c35-8b5c-1ada671f40e7}"
// brush 0
{
( -160 -64 -32 ) ( -160 -63 -32 ) ( -160 -64 -31 ) floor_orange_c [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -160 -32 -32 ) ( -160 -32 -31 ) ( -159 -32 -32 ) floor_orange_c [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -160 -64 -32 ) ( -159 -64 -32 ) ( -160 -63 -32 ) floor_orange_c [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -144 64 -16 ) ( -144 65 -16 ) ( -143 64 -16 ) floor_orange_c [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -144 224 -16 ) ( -143 224 -16 ) ( -144 224 -15 ) floor_orange_c [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 64 -16 ) ( 96 64 -15 ) ( 96 65 -16 ) floor_orange_c [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 1
{
( 96 64 -32 ) ( 96 65 -32 ) ( 96 64 -31 ) floor_grey_b [ 0 -1 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 96 64 -32 ) ( 96 64 -31 ) ( 97 64 -32 ) floor_grey_b [ 1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 96 64 -32 ) ( 97 64 -32 ) ( 96 65 -32 ) floor_grey_b [ -1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( 128 96 16 ) ( 128 97 16 ) ( 129 96 16 ) floor_grey_b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 96 0 ) ( 129 96 0 ) ( 128 96 1 ) floor_grey_b [ -1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 128 96 0 ) ( 128 96 1 ) ( 128 97 0 ) floor_grey_b [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 2
{
( 96 0 48 ) ( 96 1 48 ) ( 96 0 49 ) floor_grey_b [ 0 -1 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 96 0 48 ) ( 96 0 49 ) ( 97 0 48 ) floor_grey_b [ 1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 96 0 48 ) ( 97 0 48 ) ( 96 1 48 ) floor_grey_b [ -1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( 128 32 80 ) ( 128 33 80 ) ( 129 32 80 ) floor_grey_b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 32 64 ) ( 129 32 64 ) ( 128 32 65 ) floor_grey_b [ -1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 128 32 64 ) ( 128 32 65 ) ( 128 33 64 ) floor_grey_b [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 3
{
( 96 128 48 ) ( 96 129 48 ) ( 96 128 49 ) floor_grey_b [ 0 -1 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 96 128 48 ) ( 96 128 49 ) ( 97 128 48 ) floor_grey_b [ 1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 96 128 48 ) ( 97 128 48 ) ( 96 129 48 ) floor_grey_b [ -1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( 128 160 80 ) ( 128 161 80 ) ( 129 160 80 ) floor_grey_b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 160 64 ) ( 129 160 64 ) ( 128 160 65 ) floor_grey_b [ -1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 128 160 64 ) ( 128 160 65 ) ( 128 161 64 ) floor_grey_b [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
}
// entity 1
{
"classname" "target_lock"
"origin" "8 168 24"
"target" "puzzle.button"
"targetname" "puzzle.buttonLocker"
"spawnflags" "2"
"_tb_group" "11"
}
// entity 2
{
"classname" "target_state"
"origin" "-88 168 24"
"state" "0"
"include" "puzzle.door_1"
"targetname" "puzzle.door_state_1"
"target" "puzzle.door_state_2"
"spawnflags" "1"
"_tb_group" "11"
}
// entity 3
{
"classname" "target_state"
"origin" "-72 168 56"
"state" "0"
"targetname" "puzzle.door_state_2"
"target" "puzzle.door_state_3"
"spawnflags" "1"
"include" "puzzle.door_2"
"_tb_group" "11"
}
// entity 4
{
"classname" "target_state"
"origin" "-56 168 88"
"state" "0"
"targetname" "puzzle.door_state_3"
"target" "puzzle.onFinished"
"spawnflags" "1"
"include" "puzzle.door_3"
"_tb_group" "11"
}
// entity 5
{
"classname" "func_door"
"targetname" "puzzle.door_3"
"lip" "0"
"angle" "-2"
"target4" ""
"wait" "0"
"spawnflags" "16417"
"target2" "puzzle.checker"
"_tb_group" "11"
// brush 0
{
( 112 0 16 ) ( 112 1 16 ) ( 112 0 17 ) wall_grey_c [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 0 16 ) ( 112 0 17 ) ( 113 0 16 ) wall_grey_c [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 0 16 ) ( 113 0 16 ) ( 112 1 16 ) wall_grey_c [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 32 48 ) ( 128 33 48 ) ( 129 32 48 ) wall_grey_c [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 32 32 ) ( 129 32 32 ) ( 128 32 33 ) wall_grey_c [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 32 32 ) ( 128 32 33 ) ( 128 33 32 ) wall_grey_c [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 6
{
"classname" "func_door"
"targetname" "puzzle.door_2"
"lip" "0"
"angle" "-1"
"spawnflags" "16417"
"wait" "0"
"target2" "puzzle.checker"
"_tb_group" "11"
// brush 0
{
( 112 64 16 ) ( 112 65 16 ) ( 112 64 17 ) wall_grey_c [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 64 16 ) ( 112 64 17 ) ( 113 64 16 ) wall_grey_c [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 64 16 ) ( 113 64 16 ) ( 112 65 16 ) wall_grey_c [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 96 48 ) ( 128 97 48 ) ( 129 96 48 ) wall_grey_c [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 96 32 ) ( 129 96 32 ) ( 128 96 33 ) wall_grey_c [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 96 32 ) ( 128 96 33 ) ( 128 97 32 ) wall_grey_c [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 7
{
"classname" "func_door"
"targetname" "puzzle.door_1"
"lip" "0"
"angle" "-2"
"spawnflags" "16417"
"wait" "0"
"target2" "puzzle.checker"
"_tb_group" "11"
// brush 0
{
( 112 128 16 ) ( 112 129 16 ) ( 112 128 17 ) wall_grey_c [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 128 16 ) ( 112 128 17 ) ( 113 128 16 ) wall_grey_c [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 128 16 ) ( 113 128 16 ) ( 112 129 16 ) wall_grey_c [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 160 48 ) ( 128 161 48 ) ( 129 160 48 ) wall_grey_c [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 128 160 32 ) ( 129 160 32 ) ( 128 160 33 ) wall_grey_c [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 160 32 ) ( 128 160 33 ) ( 128 161 32 ) wall_grey_c [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 8
{
"classname" "func_door"
"angle" "-1"
"wait" "-1"
"targetname" "puzzle.door_end"
"_tb_group" "11"
// brush 0
{
( -160 224 -32 ) ( -160 225 -32 ) ( -160 224 -31 ) floor_orange_c [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -160 224 -32 ) ( -160 224 -31 ) ( -159 224 -32 ) floor_orange_c [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -160 224 -32 ) ( -159 224 -32 ) ( -160 225 -32 ) floor_orange_c [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 256 96 ) ( 96 257 96 ) ( 97 256 96 ) floor_orange_c [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 96 256 0 ) ( 97 256 0 ) ( 96 256 1 ) floor_orange_c [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 256 0 ) ( 96 256 1 ) ( 96 257 0 ) floor_orange_c [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 9
{
"classname" "func_button"
"targetname" "puzzle.button"
"target" "puzzle.relay_1"
"_tb_group" "11"
"_tb_protected_properties" "target"
// brush 0
{
( 48 128 -16 ) ( 48 129 -16 ) ( 48 128 -15 ) +0_button [ 0 -1 0 0 ] [ 0 0 -1 -16 ] 0 1 1
( 48 128 -16 ) ( 48 128 -15 ) ( 49 128 -16 ) floor_grey_b [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 48 128 -16 ) ( 49 128 -16 ) ( 48 129 -16 ) floor_grey_b [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 160 16 ) ( 64 161 16 ) ( 65 160 16 ) floor_grey_b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 160 0 ) ( 65 160 0 ) ( 64 160 1 ) floor_grey_b [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 64 160 0 ) ( 64 160 1 ) ( 64 161 0 ) floor_grey_b [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 10
{
"classname" "func_button"
"targetname" "puzzle.button"
"target" "puzzle.relay_2"
"_tb_group" "11"
"_tb_protected_properties" "target"
// brush 0
{
( 48 64 -16 ) ( 48 65 -16 ) ( 48 64 -15 ) +0_button [ 0 -1 0 0 ] [ 0 0 -1 -16 ] 90 1 1
( 48 64 -16 ) ( 48 64 -15 ) ( 49 64 -16 ) floor_grey_b [ 1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 48 64 -16 ) ( 49 64 -16 ) ( 48 65 -16 ) floor_grey_b [ -1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( 64 96 16 ) ( 64 97 16 ) ( 65 96 16 ) floor_grey_b [ 1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( 64 96 0 ) ( 65 96 0 ) ( 64 96 1 ) floor_grey_b [ -1 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 64 96 0 ) ( 64 96 1 ) ( 64 97 0 ) floor_grey_b [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
}
// entity 11
{
"classname" "func_button"
"targetname" "puzzle.button"
"target" "puzzle.relay_3"
"_tb_group" "11"
"_tb_protected_properties" "target"
// brush 0
{
( 48 0 -16 ) ( 48 1 -16 ) ( 48 0 -15 ) +0_button [ 0 -1 0 0 ] [ 0 0 -1 -16 ] 0 1 1
( 48 0 -16 ) ( 48 0 -15 ) ( 49 0 -16 ) floor_grey_b [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 48 0 -16 ) ( 49 0 -16 ) ( 48 1 -16 ) floor_grey_b [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 32 16 ) ( 64 33 16 ) ( 65 32 16 ) floor_grey_b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 32 0 ) ( 65 32 0 ) ( 64 32 1 ) floor_grey_b [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 64 32 0 ) ( 64 32 1 ) ( 64 33 0 ) floor_grey_b [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 12
{
"classname" "trigger_relay"
"origin" "80 80 16"
"target3" "puzzle.door_3"
"target" "puzzle.door_1"
"target2" "puzzle.door_2"
"targetname" "puzzle.relay_2"
"_tb_group" "11"
"_tb_protected_properties" "targetname;target2;target"
}
// entity 13
{
"classname" "trigger_relay"
"origin" "80 16 16"
"target" "puzzle.door_2"
"target2" "puzzle.door_3"
"targetname" "puzzle.relay_3"
"_tb_group" "11"
"_tb_protected_properties" "targetname;target2;target"
}
// entity 14
{
"classname" "trigger_relay"
"origin" "-136 168 24"
"targetname" "puzzle.checker"
"target" "puzzle.door_state_1"
"delay" "0.1"
"_tb_group" "11"
}
// entity 15
{
"classname" "trigger_relay"
"origin" "8 168 56"
"targetname" "puzzle.onFinished"
"target" "puzzle.buttonLocker"
"target2" "puzzle.door_end"
"_tb_group" "11"
}
// entity 16
{
"classname" "trigger_relay"
"origin" "80 144 16"
"target" "puzzle.door_1"
"target2" "puzzle.door_2"
"targetname" "puzzle.relay_1"
"_tb_group" "11"
"_tb_protected_properties" "targetname;target2;target"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment