From 41004225ebf9f10aa9fc8f9981dda4de89fc8841 Mon Sep 17 00:00:00 2001 From: Endernice61 Date: Tue, 19 Aug 2025 01:09:07 -0600 Subject: [PATCH 1/4] Add On/Off functionality for coop --- src/vbsp.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/vbsp.py b/src/vbsp.py index d99b69221..e676de1be 100644 --- a/src/vbsp.py +++ b/src/vbsp.py @@ -508,8 +508,9 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: ) pgun_script['Template01'] = '__pgun_template' pgun_script['spawnflags'] = 2 + else: - # In coop we have not need to actually spawn portalguns. + # In coop we have not need to actually spawn portalguns. pgun_script['classname'] = 'logic_script' # For Absolute Fizzler or otherwise, this fizzles portals on a @@ -528,6 +529,7 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: mat=consts.Tools.TRIGGER, ).solid) + # For removing portalguns from players. trig_stripper = vmf.create_ent( targetname='__pgun_weapon_strip', @@ -598,19 +600,19 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: '_mark_held_cube()', )) - if info.is_sp: - logic_auto.add_out(Output( - 'OnMapSpawn', - '@portalgun', - 'RunScriptCode', - 'init({}, {}, {})'.format( - 'true' if blue_portal else 'false', - 'true' if oran_portal else 'false', - 'true' if has_btn_onoff else 'false', - ), - delay=0.1, - only_once=True, - )) + #Init @portalgun + logic_auto.add_out(Output( + 'OnMapSpawn', + '@portalgun', + 'RunScriptCode', + 'init({}, {}, {})'.format( + 'true' if blue_portal else 'false', + 'true' if oran_portal else 'false', + 'true' if has_btn_onoff else 'false', + ), + delay=0.1, + only_once=True, + )) # Shuts down various parts when you've reached the exit. import precomp.conditions.instances From f85e66560292a5a0f2fd1c5fbfd51d3e06f0761c Mon Sep 17 00:00:00 2001 From: Endernice61 Date: Wed, 20 Aug 2025 21:12:06 -0600 Subject: [PATCH 2/4] Added coop on/off functionality --- src/vbsp.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/vbsp.py b/src/vbsp.py index e676de1be..8ac0ffb4d 100644 --- a/src/vbsp.py +++ b/src/vbsp.py @@ -512,6 +512,19 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: else: # In coop we have not need to actually spawn portalguns. pgun_script['classname'] = 'logic_script' + # Make sure @portalman knows when players spawn + vmf.create_ent( + classname='comp_relay', + targetname='@on_player_spawn_2', + origin=ent_pos, + OnTrigger="@portalgunCallScriptFunctionon_oran_spawn0-1" + ) + vmf.create_ent( + classname='comp_relay', + targetname='@on_player_spawn_3', + origin=ent_pos, + OnTrigger="@portalgunCallScriptFunctionon_blue_spawn0-1" + ) # For Absolute Fizzler or otherwise, this fizzles portals on a # player remotely. From e8f97ac758a6f52df19366a96b01f2b96b5ff1de Mon Sep 17 00:00:00 2001 From: Endernice61 Date: Sat, 21 Feb 2026 18:03:23 -0700 Subject: [PATCH 3/4] Make playerteam triggers over whole map --- src/vbsp.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/vbsp.py b/src/vbsp.py index 8ac0ffb4d..ee5171661 100644 --- a/src/vbsp.py +++ b/src/vbsp.py @@ -496,7 +496,15 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: vscripts='bee2/portal_man.nut', origin=ent_pos, ) - + + # Max map size is +-16384, for some reason we can't have a brush bigger than + # that in any dimension? + whole_map = vmf.make_prism( + Vec(-8192, -8192, -8192), + Vec(8192, 8192, 8192), + mat=consts.Tools.TRIGGER, + ).solid + if info.is_sp: vmf.create_ent( classname='weapon_portalgun', @@ -513,18 +521,22 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: # In coop we have not need to actually spawn portalguns. pgun_script['classname'] = 'logic_script' # Make sure @portalman knows when players spawn - vmf.create_ent( - classname='comp_relay', + trig_spawn_oran = vmf.create_ent( + classname='trigger_playerteam', targetname='@on_player_spawn_2', origin=ent_pos, - OnTrigger="@portalgunCallScriptFunctionon_oran_spawn0-1" + target_team=2, + OnStartTouch="@portalgunCallScriptFunctionon_oran_spawn0-1" ) - vmf.create_ent( - classname='comp_relay', + trig_spawn_blue = vmf.create_ent( + classname='trigger_playerteam', targetname='@on_player_spawn_3', origin=ent_pos, - OnTrigger="@portalgunCallScriptFunctionon_blue_spawn0-1" + target_team=3, + OnStartTouch="@portalgunCallScriptFunctionon_blue_spawn0-1" ) + trig_spawn_oran.solids = [whole_map.copy()] + trig_spawn_blue.solids = [whole_map.copy()] # For Absolute Fizzler or otherwise, this fizzles portals on a # player remotely. @@ -552,13 +564,6 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: spawnflags=1, # Players KillWeapons=1, ) - # Max map size is +-16384, for some reason we can't have a brush bigger than - # that in any dimension? - whole_map = vmf.make_prism( - Vec(-8192, -8192, -8192), - Vec(8192, 8192, 8192), - mat=consts.Tools.TRIGGER, - ).solid trig_stripper.solids = [whole_map] From f6a85549a5b769cad12a05d0c7fc795a4f27b67b Mon Sep 17 00:00:00 2001 From: Endernice61 <98556236+Endernice61@users.noreply.github.com> Date: Fri, 19 Jun 2026 19:06:29 -0600 Subject: [PATCH 4/4] Remove map-sized trigger for detecting player spawning --- src/vbsp.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/vbsp.py b/src/vbsp.py index ee5171661..cb04aa067 100644 --- a/src/vbsp.py +++ b/src/vbsp.py @@ -520,23 +520,6 @@ def set_player_portalgun(vmf: VMF, info: corridor.Info) -> None: else: # In coop we have not need to actually spawn portalguns. pgun_script['classname'] = 'logic_script' - # Make sure @portalman knows when players spawn - trig_spawn_oran = vmf.create_ent( - classname='trigger_playerteam', - targetname='@on_player_spawn_2', - origin=ent_pos, - target_team=2, - OnStartTouch="@portalgunCallScriptFunctionon_oran_spawn0-1" - ) - trig_spawn_blue = vmf.create_ent( - classname='trigger_playerteam', - targetname='@on_player_spawn_3', - origin=ent_pos, - target_team=3, - OnStartTouch="@portalgunCallScriptFunctionon_blue_spawn0-1" - ) - trig_spawn_oran.solids = [whole_map.copy()] - trig_spawn_blue.solids = [whole_map.copy()] # For Absolute Fizzler or otherwise, this fizzles portals on a # player remotely.