Last active
June 10, 2023 19:19
-
-
Save Tsuey/e8996ad10bb7fb72e7d6b2aaa7bcd5db to your computer and use it in GitHub Desktop.
Collection of Versus Survival & Taaannnk! Mutation stuck spawn fixes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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