Skip to content

Instantly share code, notes, and snippets.

@Tsuey
Last active June 10, 2023 19:19
Show Gist options
  • Save Tsuey/e8996ad10bb7fb72e7d6b2aaa7bcd5db to your computer and use it in GitHub Desktop.
Save Tsuey/e8996ad10bb7fb72e7d6b2aaa7bcd5db to your computer and use it in GitHub Desktop.
Collection of Versus Survival & Taaannnk! Mutation stuck spawn fixes
These:
/main/scripts/vscripts/mutation15.nut
/main/scripts/vscripts/mutation19.nut
Maybe updated with these:
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c1m2_streets.nut#L190
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c2m2_fairgrounds.nut#L181
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c3m1_plankcountry.nut#L156
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c5m2_park.nut#L133
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c5m4_quarter.nut#L93
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c6m1_riverbank.nut#L147
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c8m1_apartment.nut#L149
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c8m2_subway.nut#L125
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c8m3_sewers.nut#L202
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c9m2_lots.nut#L82
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c10m1_caves.nut#L66
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c10m2_drainage.nut#L83
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c10m3_ranchhouse.nut#L109
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c10m4_mainstreet.nut#L163
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c11m1_greenhouse.nut#L95
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c11m2_offices.nut#L79
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c11m3_garage.nut#L149
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c12m1_hilltop.nut#L71
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c12m2_traintunnel.nut#L70
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c12m3_bridge.nut#L125
https://github.com/Tsuey/L4D2-Community-Update/blob/master/root/scripts/vscripts/community/maps/c12m4_barn.nut#L139
Methodology:
- Spent a few days on this over a year ago
- While Killing all "func_playerinfected_clip" on every map would fix most, it wouldn't
fix all, plus for any map we take such a drastic measure we need to be sure we aren't
creating new out-of-bounds / under-map exploits, so this is only viable for maps perfectly
encased in skybox
- Navmesh is often an issue, but instead of shipping an entire updated nav file, a "_tank_stuck"
make_clip over the offending nav also prevents the spawn (as long as that new clip doesn't create
new permstuck spots)
- Some fixes, like c10m2 and c9m2, remove new TLS Survival fences that hinder player SI movement
- Sometimes baked brushes are in the way, so make_axiswarp is used since there's nothing to delete
== c1m2_streets
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" || g_MutaMode == "mutation19" )
{
// Delete all. Extremely problematic map with countless stuck
// spawns, but Skybox stops most opportunities to get under
// the map and the only way to get out of bounds is limited.
EntFire( "func_playerinfected_clip", "Kill" );
EntFire( g_UpdateName + "_yeswayturnpike_clipb", "Kill" );
}
== c2m2_fairgrounds
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Delete all. Extremely problematic map with countless stuck
// spawns, but Skybox stops all methods of getting under the map.
// No Survival on this map, so we can assume they'll always be Tank.
EntFire( "func_playerinfected_clip", "Kill" );
}
== c3m1_plankcountry
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" || g_MutaMode == "mutation19" )
{
// Delete all, terrible for stuck spawns. Likely won't allow
// players under the map, and this makes dozens of unused
// perimeter ladders accessible preventing tons of permstucks.
EntFire( "func_playerinfected_clip", "Kill" );
EntFire( g_UpdateName + "_meticulous_funcinfclip01", "Kill" );
// Warp players through one-side invisible solid treeline.
make_axiswarp( "_axiswarp_semitrailer", "y-", 96, "-550 -8 0", "740 8 256", "-9505 10720 155" );
}
== c5m2_park
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Starting rooftop with a wrongway sign has excess nav behind
// it -- block access to it, which also blocks a permstuck.
make_clip( "_tankstuck_startroof", "SI Players", 1, "-106 -240 0", "86 240 196", "-2936 -816 -58" );
}
== c5m4_quarter
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" || g_MutaMode == "mutation19" )
{
// Worst map for stuck spawns. Delete all, Skybox and clipping
// bounds the player in and unused perimeter ladders will be put
// to use. There's not even any walkable void under this map.
EntFire( "func_playerinfected_clip", "Kill" );
}
== c6m1_riverbank
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// At the start area, extend a func_playerinfected_clip back a
// bit more to prevent a stuck spawn if Survivors stand back to fence.
make_clip( "_tankstuck_startfence", "SI Players", 1, "-251 -760 0", "173 216 1513", "-261 2872 87" );
}
== c8m1_apartment
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// No Survival on this map, and no Tanks in Scavenge, so extend
// a few func_playerinfected_clip with these.
make_clip( "_tankstuck_alleystart", "SI Players", 1, "-105 -711 0", "823 57 4132", "2473 455 16" );
make_clip( "_tankstuck_alleymiddle", "SI Players", 1, "-127 -257 0", "209 256 4468", "-129 3584 16" );
// And preserve an actually cool Tank spawn by deleting 1 clip.
kill_funcinfclip( 1060.85 ); // Delete clip that blocks the rubble and a cool unique spawn
}
== c8m2_subway
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" )
{
// Multiple stuck spawns are only relevant to Taaannnk! Mutation,
// except for this: copy the invisible vending machine so players
// have a visible "step" to get back in bounds. (Not actually stuck)
make_prop( "dynamic", "_cosmetic_oobstep", "models/props/cs_office/vending_machine.mdl", "7366 3801 270", "90 0 0", "shadow_no", "solid_no" );
}
if ( g_MutaMode == "mutation19" )
{
// Multiple tunnel stuck spawns that aren't accessible in Survival,
// that need to only be fixed for Taaannnk! Mutation. Navmesh is
// excessive and extends too far behind these rubbles/wrongways.
make_clip( "_tankstuck_rubblestart", "SI Players", 1, "-139 -107 0", "119 99 177", "1621 3617 -337", "0 42 0" );
make_clip( "_tankstuck_rubblemiddle", "SI Players", 1, "-189 -145 0", "300 179 240", "6766 5299 -336", "0 -68 0" );
make_clip( "_tankstuck_rubblefinal", "SI Players", 1, "-189 -253 0", "140 320 176", "8249 3222 -336", "0 -53 0" );
// Multiple difficult-but-possible to spawn stuck areas in end area.
make_clip( "_tankstuck_endalley1", "SI Players", 1, "-480 -855 0", "65 293 1400", "10303 3479 16" );
make_clip( "_tankstuck_endalley2", "SI Players", 1, "-373 -96 0", "395 99 1400", "11637 5342 16" );
make_clip( "_tankstuck_widestreet", "SI Players", 1, "-842 0 0", "386 555 1400", "10110 6784 8" );
}
== c8m3_sewers
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Only problems at beginning (due to func_playerinfected_clip,
// which note bot SI can also spawn behind but at least move
// through that), and several end clips -- nothing in Survival area,
// also supplemented with anv_ file make_clip() thickenings.
make_clip( "_tankstuck_startrooftops", "SI Players", 1, "-1749 -380 0", "219 332 750", "12261 4212 464" );
kill_funcinfclip( 606.217 ); // Delete clip behind a fence and inaccessible ladder
kill_funcinfclip( 733.138 ); // Delete clip for end area backstreet wrongway sign left
kill_funcinfclip( 762.564 ); // Delete clip for end area backstreet wrongway sign right
}
== c9m2_lots
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" )
{
// Delete 1 *.LMP roadsidefence model to facilitate Infected player travel.
kill_entity( Entities.FindByClassnameNearest( "prop_dynamic", Vector( 8521, 5815, 348 ), 1 ) );
}
if ( g_MutaMode == "mutation19" )
{
// Slightly extend a func_playerinfected_clip back further behind
// starting safe room to fully block all navmesh behind there.
make_clip( "_tankstuck_startback", "SI Players", 1, "-120 -900 0", "120 900 1370", "-835 -110 -223" );
}
== c10m1_caves
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Delete several specific clips along left side of map. Deleting
// all of them wouldn't be so bad since it's just Tanks, but let's
// not do that anyway in case more Infected ladders are added later.
kill_funcinfclip( 1145.18 ); // Spawn left 1st
kill_funcinfclip( 1127.68 ); // Spawn left 2nd
kill_funcinfclip( 1110.42 ); // Spawn left 3rd
kill_funcinfclip( 1059.74 ); // Spawn left 4th
kill_funcinfclip( 1054.83 ); // Spawn left 5th
kill_funcinfclip( 1216.59 ); // Tunnelside
kill_funcinfclip( 1000.2 ); // Cliffside
kill_funcinfclip( 597.979 ); // End cave connection to map 2 (easter egg spot)
// Prevent falling into a permstuck spot, opened up from above deletions.
make_clip( "_tankstuck_tunnelside", "SI Players", 1, "-1700 -200 -1337", "1700 1024 610", "-13902 -10396 656", "0 45 0" );
}
== c10m2_drainage
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" )
{
// Excessively problematic map for Taaannnk! Mutation, but not so much
// for Versus Survival. In the Survival area, there's 3 sewer tunnels
// with excess nav players could spawn behind -- this deletes all of them,
// and there's no way to get under the limited Survival arena.
EntFire( "func_playerinfected_clip", "Kill" );
// Delete 1 *.LMP roadsidefence model to facilitate Infected player travel.
kill_entity( Entities.FindByClassnameNearest( "prop_dynamic", Vector( -8972, -7890, -320 ), 1 ) );
// Add 3 Infected ladders to complement the "stacked blockers" meant
// for AI, which players cannot reasonably know the presence of.
make_ladder( "_ladder_versussurvivalfence1_cloned_tunnelmid", "-9478.5 -7280 -384", "155 45 -410" );
make_ladder( "_ladder_versussurvivalfence2_cloned_tunnelmid", "-9478.5 -7280 -384", "155 0 -410" );
make_ladder( "_ladder_versussurvivalfence3_cloned_tunnelmid", "-9478.5 -7280 -384", "155 -45 -410" );
}
if ( g_MutaMode == "mutation19" )
{
// Excessively problematic map, most specifically the end area, so just
// delete all of these -- Tanks can get out of the map and venture to
// its far extents, but only in end area, and the alternatives messier.
// Also 3 sewer tunnels in the event area that have clips but excess nav.
EntFire( "func_playerinfected_clip", "Kill" );
}
== c10m3_ranchhouse
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Deleting all func_playerinfected_clip would create new exploits
// in the Survival/finale arena, so instead only delete specific ones.
// Luckily, the Survival arena itself is fine, so doesn't need any
// work, and all spawns fixed below are far away from Survival arena.
kill_funcinfclip( 668.433 ); // Wrongway in beginning area
kill_funcinfclip( 2248.58 ); // Treeline after bus/shed
// New clips to extend behind some func_playerinfected_clips.
make_clip( "_tankstuck_cornerpath", "SI Players", 1, "-700 -800 -145", "800 790 1360", "-13598 -9362 68" );
make_clip( "_tankstuck_mountainwedge", "SI Players", 1, "-100 -100 0", "100 100 1300", "-8388 -3525 300" );
}
== c10m4_mainstreet
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" )
{
// In Versus Survival's event area, block an inaccessible ladder
// (to be restored in the future) behind a barricade, and then
// also clip off excessive navmesh in far dark corner of the map.
make_clip( "_tankstuck_endbarricade", "SI Players", 1, "-400 -900 0", "400 900 1700", "3822 -3970 0" );
make_clip( "_tankstuck_excesscorner", "SI Players", 1, "-200 -100 0", "200 100 1700", "-2520 -5048 -64" );
}
if ( g_MutaMode == "mutation19" )
{
// Tons of possibilities to spawn behind the long row of houses
// so just block them all off, tons of NODRAW and hostile clips.
// Players would only materialize back here in Taaannnk! Mutation.
make_clip( "_tankstuck_houserow", "SI Players", 1, "-2260 -440 0", "3450 900 1850", "68 158 -100" );
// In Versus Survival's event area, block an inaccessible ladder
// (to be restored in the future) behind a barricade, and then
// also clip off excessive navmesh in far dark corner of the map.
make_clip( "_tankstuck_endbarricade", "SI Players", 1, "-400 -900 0", "400 900 1700", "3822 -3970 0" );
make_clip( "_tankstuck_excesscorner", "SI Players", 1, "-200 -100 0", "200 100 1700", "-2520 -5048 -64" );
}
== c11m1_greenhouse
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Delete 1 clip, opens up a lot to explore but no exploits.
kill_funcinfclip( 1154.43 ); // End area fence barricade
}
== c11m2_offices
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" )
{
// Final street wrongway barricades -- only left Versus Survival relevant.
kill_funcinfclip( 1043.94 ); // Final street left barricade
}
if ( g_MutaMode == "mutation19" )
{
// Block an excess nav area that's quite far behind a fence.
make_clip( "_tankstuck_fencenavarea", "SI Players", 1, "-64 -64 0", "64 64 1400", "10314 3862 16" );
// Final street wrongway barricades.
kill_funcinfclip( 1043.94 ); // Final street left barricade
kill_funcinfclip( 1493.36 ); // Final street right barricade
}
== c11m3_garage
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// When Survivors leave the safe room, Tanks can immediately spawn
// stuck behind the fence. Block it off until future ladder rework.
make_clip( "_tankstuck_startfence", "SI Players", 1, "-1200 -80 0", "720 58 1800", "-4947 -3786 16" );
}
== c12m1_hilltop
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// Thicken 2 wrongway's func_playerinfected_clip. Note this
// works for Taaannnk! Mutation but is a bad ladder to add
// to the vanilla game since it blocks climbability of a
// ladder that'd be climbable for custom servers that delete
// all func_playerinfected_clip.
make_clip( "_tankstuck_wrongwayone", "SI Players", 1, "-320 -800 0", "0 750 1740", "-11967 -10090 450" );
make_clip( "_tankstuck_wrongwaytwo", "SI Players", 1, "-610 0 0", "180 460 1740", "-11604 -9345 450" );
}
== c12m2_traintunnel
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// No issues in the Survival arena, but the end for Taaannnk! can
// result in stuck spawns here. Note this blocks "map 3 easter egg"
// accessible area, and is NOT ideal for vanilla Versus.
make_clip( "_tankstuck_tunnelend", "SI Players", 1, "-320 -800 -120", "450 258 240", "-1551 -10785 50" );
}
== c12m3_bridge
// Resolve stuck Tank spawns for Versus Survival & Taaannnk! Mutation.
if ( g_MutaMode == "mutation15" || g_MutaMode == "mutation19" )
{
// Delete 1 wrongway clip. May not be necessary for Survival
// but too close to call; delete for it and Taaannnk! to be safe.
kill_funcinfclip( 311.003 ); // Wrongway at end of train tunnel
}
== c12m4_barn
// Resolve stuck Tank spawns for Taaannnk! Mutation.
if ( g_MutaMode == "mutation19" )
{
// There's 60 func_playerinfected_clip on this map but most smooth
// perimeter fences and all are thick enough to block excess nav.
// Only exception appears to be behind the starting safe room.
make_clip( "_tankstuck_safeback", "SI Players", 1, "-170 -640 -100", "170 225 1700", "7704 -11710 425" );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment