Created
July 17, 2021 10:29
-
-
Save Tsuey/f0bc7e2c25dea66fcd148a631908a43e to your computer and use it in GitHub Desktop.
Tank Stuck Spawn Fixes for L4D2-Community-Update Commit
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
THE NIGHTMARE COMMIT | |
==================== | |
Steam News / Kerry Changelog: | |
+ Patched a few permstuck spots and added QoL clips | |
+ Dramatically reduced stuck Tank spawns in VS Survival on maps: | |
c1m2_streets | |
c3m1_plankcountry | |
c5m4_quarter | |
c8m2_subway | |
c9m2_lots | |
c10m2_drainage | |
c10m4_mainstreet | |
c11m2_offices | |
c12m3_bridge | |
+ Dramatically reduced stuck Tank spawns in Taaannnk! on maps: | |
c1m2_streets | |
c2m2_fairgrounds | |
c3m1_plankcountry | |
c5m2_park | |
c5m4_quarter | |
c6m1_riverbank | |
c8m1_apartment | |
c8m2_subway | |
c8m3_sewers | |
c9m2_lots | |
c10m1_caves | |
c10m2_drainage | |
c10m3_ranchhouse | |
c10m4_mainstreet | |
c11m1_greenhouse | |
c11m2_offices | |
c11m3_garage | |
c12m1_hilltop | |
c12m2_traintunnel | |
c12m3_bridge | |
c12m4_barn | |
+ Resolved a stuck spawn behind tunnel barricade on Death Toll 1 | |
+ Resolved a stuck spawn behind some rubble on Dead Air Terminal | |
+ Added visual step to get back in bounds on VS Survival Generator Room | |
+ Thickened several clips across many maps to resolve stuck Tank spawns | |
+ Prevented an easy Cold Stream 2 event skip | |
+ Allow Infected player access into end closet on Sacrifice 2 | |
+ Updated "z_developer_showupdate.nut" to support "trigger_look" | |
+ Mitigator for getting stuck in scissor lift on No Mercy sewers | |
There's a few "sections" to this massive changelog: | |
Changes that are safe to go in: | |
c8m3_sewers.nut -- FRED | |
+ Update that file, with the best new Fred we've come up with | |
mutation15.nut -- VERSUS SURVIVAL | |
+ Minimum Tank stuck spawn fixes relevant to this mode's arenas | |
+ Like RocketDude, will likely require a 10-15 second delay | |
before deletions, so that anv_mapfixes had time to fully spawn | |
+ IGNORE_REFERENCE_ONLY | |
mutation19.nut -- TAAANNNK! MUTATION | |
+ Same deal as above, except for this Mutation | |
+ IGNORE_REFERENCE_ONLY | |
MAP-SPECIFIC SCRIPT SPLITS | |
+ Above mutation15/mutation19 code, copied, and re-formatted, | |
to go into map-specific split "\anv_mapfixes\" files | |
anv_versus.nut -- MAKE_CLIP() THICKENINGS | |
+ Clips added with TLS (due to re-worked func_playerinfected_clip) | |
that weren't thick enough, and simply need Find/Replace thickenings | |
MISC -- UNRELATED / RANDOM BUGS FIXED AS SEEN | |
+ Bonus fixes | |
Verbose documentation that can be ignored: | |
VERBOSE STUDY OF ALL MAPS (& FRED TESTS) | |
+ SCRIPT FOR VIEWING FUNC_PLAYERINFECTED_CLIP | |
+ BUG REPORTS SPREADSHEET :: FUTURE TARGETS IN SIGHT | |
Change of plans: | |
Regarding mutation15/19, there's 3 options of where this code could go: | |
1. Place into individual mutation15/19 scripts. | |
2. Create a new "anv_mutations.nut" file with above's script. | |
3. Place into individual map-specific \anv_mapfixes\ *.nut files. | |
Options 1 and 2 result in the same previous "hell" that anv_mapfixes.nut | |
used to be, before the map-specific split. Though they'd be easier to | |
maintain there in direct reference to the mutation15/19 scripts, reality | |
is it'll end up being the opposite as some of these are "band-aid" fixes | |
for content that was cut from TLS (i.e. restoring the inaccessible Infected | |
ladders behind the Death Toll 4 barricade's undeletable wrongway signs) | |
that, once finalized properly, mutation15/19's fixes will change, thus it | |
instead makes sense to have them all in one place with option 3. Gradually, | |
like with Dead Air 4 and Death Toll 1, we may find that "SI Players" should | |
be changed to "SI Players and AI", so it's best to have them all in one spot. | |
"\anv_mapfixes\" doesn't need to be "just" fixes -- Versus content is going | |
into them, too. Also un-used mode-specific "placeholders" were cut, leading | |
to a cleaner look overall -- that invites Mutation-specific fixes. | |
Examples of future Mutation-specific fixes: | |
1. Add a "anv_mapfixes.nut" line of code for RocketDude that | |
exempts clips from that mode -- instead of requiring ReneTM | |
to add a 10-15 second delay to Kill them all. | |
2. Versus Survival is no longer a "Mutation", it's an official | |
mode, so it's better placed in "\anv_mapfixes\" anyway, and | |
for consistency Taaannnk! Mutation should simply follow suit. | |
3. Confogl Mutation would, in the future, be worked on to officialize | |
as an "Advanced or End-Game Versus Mode", which would justify | |
more aggressive clipping, which would be ideal for "\anv_mapfixes\". | |
4. Charger Racing would also require additional map props, which | |
could be placed in "\anv_mapfixes\". | |
It'd be easy to go over-board with the extent of entities being placed into | |
"\anv_mapfixes\", but one thing is for sure: Versus Survival is NOT a Mutation, | |
and belongs near other Survival-specific script, and for consistency Taaannnk! | |
should be in the same place as it. | |
** I mean, technically Versus Survival is a Mutation, but so is "Realism", | |
and "\anv_mapfixes\" is already accounting for "Realism"! They are | |
Mutations that have been given main mode status. | |
Conclusion: place fixes into map-specific *.nuts, NOT mutation15.nut/mutation19.nut. | |
These "band-aid" fixes form the "hitlist" of a future Versus ladder rework and | |
are potentially temporary. | |
Bug Reports Spreadsheet Mark-Offs :: Once all these mutation15, mutation19 and anv_ file | |
changes are committed and in, all these are considered fixed: | |
42 Navmesh Low "c8m3 Versus Survival | |
43 Navmesh Low "c10m4 Versus Survival | |
44 Navmesh Medium "c11m4 Versus Survival | |
45 Navmesh Low "Part of the spawning area | |
46 Navmesh Medium "c1m2 versus survival spawning | |
47 Navmesh Medium "c1m2 versus survival spawning | |
48 Navmesh Medium "c1m2 versus survival spawning | |
49 Navmesh Medium "c1m2 versus survival spawning | |
51 Map Medium "Tanks sometimes spawn out of bounds | |
187 Mutation Medium On Taaannnkk!, players sometimes spawn out of bounds | |
218 Map Low "One-sided ladder on c10m4 | |
435 Map Low "c7m2 survivors can enter this room at the end of the map | |
SWITCH-CASE TEMPLATE: | |
case "MAP_NAME": | |
{ | |
// CODE_HERE | |
} | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
################################### | |
#### c8m3_sewers.nut -- FRED #### | |
################################### | |
// Fire once and only for Clients (Survivor+Infected). Scurries away after | |
// 1 second when viewed at any angle, even if only Fred sees the player | |
// for that long. 1 in 4 chance spawn, but realistically rarer. Fred is | |
// child to the func_movelinear which is Killed. | |
if ( RandomInt( 1, 4 ) == 4 ) | |
{ | |
make_prop( "dynamic", "_fred", "models/props_fairgrounds/alligator.mdl", "13103 11543 -25", "0 125 0", "shadow_no", "solid_no" ); | |
SpawnEntityFromTable( "func_movelinear", | |
{ | |
targetname = g_UpdateName + "_fred_movelinear", | |
spawnflags = 0, | |
movedistance = 100, | |
speed = 60, | |
startposition = 0, | |
movedir = Vector( 0, 37, 0 ), | |
origin = Vector( 13099, 11539, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred", "SetParent", g_UpdateName + "_fred_movelinear" ); | |
SpawnEntityFromTable( "trigger_look", | |
{ | |
targetname = g_UpdateName + "_fred_triglook", | |
target = g_UpdateName + "_fred", | |
spawnflags = 129, | |
LookTime = 1, | |
FieldOfView = -1, | |
origin = Vector( 13072, 11520, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "mins -42 -38 -480" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "maxs 42 38 0" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "solid 2" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Open::0:-1" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Kill::2:-1" ); | |
} | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################# | |
#### mutation15.nut -- VERSUS SURVIVAL #### | |
############################################# | |
// Resolve countless stuck Tank (and a couple auto-spawn SI bot) spawns for Versus Survival. | |
// Note: A small amount are band-aid fixes that may be replaced with major anv_mapfixes.nut future content. | |
switch( g_MapName ) | |
{ | |
case "c1m2_streets": | |
{ | |
// 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" ); | |
} | |
case "c3m1_plankcountry": | |
{ | |
// 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" ); | |
} | |
case "c5m4_quarter": | |
{ | |
// 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" ); | |
} | |
case "c8m2_subway": | |
{ | |
// 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" ); | |
} | |
case "c9m2_lots": | |
{ | |
// Delete 1 *.LMP roadsidefence model to facilitate Infected player travel. | |
kill_entity( Entities.FindByClassnameNearest( "prop_dynamic", Vector( 8521, 5815, 348 ), 1 ) ); | |
} | |
case "c10m2_drainage": | |
{ | |
// 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" ); | |
} | |
case "c10m4_mainstreet": | |
{ | |
// 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" ); | |
} | |
case "c11m2_offices": | |
{ | |
// Final street wrongway barricades -- only left Versus Survival relevant. | |
kill_funcinfclip( 1043.94 ); // Final street left barricade | |
} | |
case "c12m3_bridge": | |
{ | |
// 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 | |
} | |
} | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
################################################ | |
#### mutation19.nut -- TAAANNNK! MUTATION #### | |
################################################ | |
// Resolve countless stuck Tank spawns for Taaannnk! Mutation. | |
// Note: A small amount are band-aid fixes that may be replaced with major anv_mapfixes.nut future content. | |
switch( g_MapName ) | |
{ | |
case "c1m2_streets": | |
{ | |
// 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" ); | |
} | |
case "c2m2_fairgrounds": | |
{ | |
// 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" ); | |
} | |
case "c3m1_plankcountry": | |
{ | |
// 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" ); | |
} | |
case "c5m2_park": | |
{ | |
// 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" ); | |
} | |
case "c5m4_quarter": | |
{ | |
// 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" ); | |
} | |
case "c6m1_riverbank": | |
{ | |
// 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" ); | |
} | |
case "c8m1_apartment": | |
{ | |
// 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 | |
} | |
case "c8m2_subway": | |
{ | |
// 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" ); | |
} | |
case "c8m3_sewers": | |
{ | |
// 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 | |
} | |
case "c9m2_lots": | |
{ | |
// 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" ); | |
} | |
case "c10m1_caves": | |
{ | |
// 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" ); | |
} | |
case "c10m2_drainage": | |
{ | |
// 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" ); | |
} | |
case "c10m3_ranchhouse": | |
{ | |
// 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" ); | |
} | |
case "c10m4_mainstreet": | |
{ | |
// 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" ); | |
} | |
case "c11m1_greenhouse": | |
{ | |
// Delete 1 clip, opens up a lot to explore but no exploits. | |
kill_funcinfclip( 1154.43 ); // End area fence barricade | |
} | |
case "c11m2_offices": | |
{ | |
// 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 | |
} | |
case "c11m3_garage": | |
{ | |
// 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" ); | |
} | |
case "c12m1_hilltop": | |
{ | |
// 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" ); | |
} | |
case "c12m2_traintunnel": | |
{ | |
// 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" ); | |
} | |
case "c12m3_bridge": | |
{ | |
// 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 | |
} | |
case "c12m4_barn": | |
{ | |
// 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" ); | |
} | |
} | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
###################################### | |
#### MAP-SPECIFIC SCRIPT SPLITS #### | |
###################################### | |
== 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" ); | |
} | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
##################################################### | |
#### anv_versus.nut -- MAKE_CLIP() THICKENINGS #### | |
##################################################### | |
c2m2_fairgrounds: | |
Find: | |
make_clip( "_yeswayfairback_funcinfclip", "SI Players", 1, "-1824 -8 -384", "1824 17 384", "-2272 1824 384" ); | |
Replace: | |
make_clip( "_yeswayfairback_funcinfclip", "SI Players", 1, "-1824 -8 -384", "1824 452 384", "-2272 1824 384" ); | |
c2m3_coaster: | |
Find: | |
make_clip( "_trailerfence_clip", "SI Players", 1, "-114 -39 3", "126 761 963", "-1150 2887 -3" ); | |
Replace: | |
make_clip( "_trailerfence_clip", "SI Players", 1, "-114 -39 3", "702 761 963", "-1150 2887 -3" ); | |
c2m4_barns: | |
Find: | |
make_clip( "_eventfence_wrongway", "SI Players", 1, "-210 -20 -608", "200 20 672", "-200 2652 352" ); | |
Replace: | |
make_clip( "_eventfence_wrongway", "SI Players", 1, "-800 -20 -608", "200 676 672", "-200 2652 352" ); | |
c3m1_plankcountry | |
Find: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-733 -8 0", "640 8 768", "-2668 416 256" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-198 -16 0", "198 16 961", "-3516 543 61", "0 -50 0" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-198 -16 0", "1375 16 961", "-1846 433 61", "0 10 0" ); | |
Replace: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-733 -100 0", "640 8 768", "-2668 416 256" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-198 -100 0", "320 16 961", "-3516 543 61", "0 -50 0" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-198 -360 0", "1375 16 961", "-1846 433 61", "0 10 0" ); | |
c6m1_riverbank: | |
Find: | |
make_clip( "_infected_mapescape", "SI Players", 1, "-40 -350 -20", "40 440 245", "-1997 1497 192" ); | |
Replace: | |
make_clip( "_infected_mapescape", "SI Players", 1, "-1000 -350 -20", "40 808 245", "-1997 1497 192" ); | |
c8m1_apartment: | |
Find: | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-153 -812 0", "293 308 4132", "153 2988 352" ); | |
Replace: | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-153 -812 -336", "293 308 4132", "153 2988 352" ); | |
c8m2_subway: | |
Find: | |
make_clip( "_ladder_generatorwindow_clipa", "SI Players", 1, "-4 -40 -56", "4 128 231", "7944 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipb", "SI Players", 1, "-4 -40 -56", "4 128 231", "7568 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipc", "SI Players", 1, "-170 -10 -56", "214 10 231", "7734 2462 425" ); | |
Replace: | |
make_clip( "_ladder_generatorwindow_clipa", "SI Players", 1, "-4 -40 -56", "376 128 231", "7944 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipb", "SI Players", 1, "-400 -40 -56", "4 128 231", "7568 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipc", "SI Players", 1, "-566 -216 -56", "586 10 231", "7734 2462 425" ); | |
c8m3_sewers: | |
Find: | |
make_clip( "_burgerfence_blocker1", "SI Players", 1, "-419 -675 0", "-409 615 1202", "10137 6395 8" ); | |
make_clip( "_burgerfence_blocker3", "SI Players", 1, "-419 605 0", "384 615 1202", "10137 6395 8" ); | |
Replace: | |
make_clip( "_burgerfence_blocker1", "SI Players", 1, "-537 -675 0", "-409 615 1202", "10137 6395 8" ); | |
make_clip( "_burgerfence_blocker3", "SI Players", 1, "-880 605 0", "384 2372 1202", "10137 6395 8" ); | |
c12m1_hilltop: | |
Find: | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-777 -8 0", "1000 8 1372", "-5988 -6941 820" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-205 -8 0", "1000 8 885", "-5988 -6941 -65" ); | |
Replace: | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-777 -8 0", "1000 960 1372", "-5988 -6941 820" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-205 -8 0", "1000 960 885", "-5988 -6941 -65" ); | |
c12m3_bridge: | |
Find: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-1000 -17 -170", "1150 17 1408", "262 -11524 321", "0 -21 0" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-34 -238 0", "57 260 1408", "1323 -12178 321" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-310 -17 159", "724 17 1408", "1616 -12255 321" ); | |
make_clip( "_meticulous_funcinfclip07", "SI Players", 1, "-48 -555 -216", "17 1414 1408", "3276 -11409 321", "0 -24 0" ); | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-34 -120 -216", "17 700 1408", "3821 -10047 321", "0 24 0" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-1600 -30 -216", "1600 17 1408", "1980 -9420 321" ); | |
make_clip( "_meticulous_funcinfclip10", "SI Players", 1, "-600 -70 -216", "600 17 1408", "-132 -9696 321", "0 27 0" ); | |
make_clip( "_meticulous_funcinfclip12", "SI Players", 1, "-3000 -17 -216", "3000 17 1408", "5344 -14507 321" ); | |
make_clip( "_meticulous_funcinfclip13", "SI Players", 1, "-800 -17 -216", "500 17 1408", "9070 -14172 321", "0 25 0" ); | |
Replace: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-1000 -120 -170", "1150 17 1408", "262 -11524 321", "0 -21 0" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-340 -238 0", "57 260 1408", "1323 -12178 321" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-310 -420 159", "724 17 1408", "1616 -12255 321" ); | |
make_clip( "_meticulous_funcinfclip07", "SI Players", 1, "-48 -555 -216", "180 1414 1408", "3276 -11409 321", "0 -24 0" ); | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-34 -120 -216", "260 700 1408", "3821 -10047 321", "0 24 0" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-1600 -30 -216", "1600 70 1408", "1980 -9420 321" ); | |
make_clip( "_meticulous_funcinfclip10", "SI Players", 1, "-600 -70 -216", "600 170 1408", "-132 -9696 321", "0 27 0" ); | |
make_clip( "_meticulous_funcinfclip12", "SI Players", 1, "-3000 -410 -216", "3000 17 1408", "5344 -14507 321" ); | |
make_clip( "_meticulous_funcinfclip13", "SI Players", 1, "-800 -170 -216", "500 17 1408", "9070 -14172 321", "0 25 0" ); | |
That should be all of them... and to think func_playerinfected_clips are still worse!! | |
Not all the above were verified Tank stuck spawns, but all thickened where theoretically useful. | |
At least they're player-only and won't add new SI bot AI stuck spawns. | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
######################################################### | |
#### MISC -- UNRELATED / RANDOM BUGS FIXED AS SEEN #### | |
######################################################### | |
c5m3_cemetery: | |
anv_versus.nut -- permstuck spot in far corner of manhole drop area: | |
make_ladder( "_ladder_permstuckmanhole_cloned_manholeblownwall", "3778 656 100", "3769 2954 -42", "0 -90 0", "0 -1 0" ); | |
c7m2_barge: | |
anv_versus.nut -- delete clip that blocks SI access into closet at end: | |
kill_funcinfclip( 196.497 ); // Allow SI access into end closet (the only funcinfclip in entire map) | |
c8m3_sewers: | |
anv_versus.nut -- QoL clip that Tanks could also potentially spawn behind: | |
make_clip( "_tankqol_warehousestrip", "SI Players", 1, "-16 -813 0", "48 731 666", "10488 7589 540" ); | |
anv_mapfixes.nut -- mitigator for getting stuck in scissor lift: | |
// Mitigator for getting stuck in scissor lift | |
make_axiswarp( "_axiswarp_scissorlift", "y-", 50, "-53 0 -183", "7 7 42", "12687 7171 16" ); | |
EntFire( "washer_lift_button2", "AddOutput", "OnPressed anv_mapfixes_axiswarp_scissorlift_trigmult:AddOutput:origin 12687 7171 62:4:-1" ); | |
EntFire( "washer_lift_button2", "AddOutput", "OnPressed anv_mapfixes_axiswarp_scissorlift_trigmult:Kill::6:-1" ); | |
c10m1_caves: | |
anv_mapfixes.nut -- far end of the tunnel beyond a 2nd barricade: | |
** NOTE: Not related to func_playerinfected_clip, and bot AI confirmed | |
to also spawn behind here -- while in theory the navmesh could be | |
updated and a new Infected ladder connected for it, it's really | |
quite excess, so let's just band-aid fix this for now, Commons can | |
still spawn behind the (imo redundant) 2nd barricade anyway. | |
make_clip( "_spawnstuck_tunnelend", "SI Players and AI", 1, "-240 -550 0", "240 600 216", "-12998 -4435 -64" ); | |
c11m4_terminal: | |
anv_mapfixes.nut -- both Tank players (Versus Survival + Taaannnk! Mutation) | |
can spawn stuck behind here, as well as bot AI (see above "_spawnstuck" for | |
the other example of that). This attack cannot be officially restored yet due | |
to the undeletable wrongway sign (b/c standards), so instead of clipping it | |
off entirely (gotta keep the cool and definitely-balanced spawns), and to | |
support this happening in non-Mutations, make it a one-way warp like Dark Carnival 5 | |
was given lots of with TLS to fix its problems. With new QoL clipping. Modded | |
servers should find this more tolerable than just clipping off the entire area. | |
make_axiswarp( "_spawnstuck_rubble", "x+", 64, "-8 -88 0", "7 120 192", "-604 5248 296" ); | |
make_clip( "_spawnstuck_rubble_qol", "SI Players and AI", 1, "-95 -128 0", "60 128 4", "-720 5248 360", "-45 0 0" ); | |
make_clip( "_spawnstuck_rubble_oob", "SI Players", 1, "-2 -56 -32", "2 56 56", "-906 5256 344" ); | |
c12m2_traintunnel: | |
anv_mapfixes.nut -- new permstuck (others like it are for all modes not just Versus btw): | |
make_clip( "_permstuck_tunnelend", "SI Players", 1, "-16 -16 -16", "16 16 32", "-1445 -10327 -4" ); | |
c12m3_bridge: | |
anv_mapfixes.nut -- new permstuck, accessible to Survivors if RocketDude/low-gravity: | |
make_clip( "_permstuck_shedtree", "Everyone", 1, "-14 -14 -164", "14 14 1640", "3085 -14120 88" ); | |
c13m2_southpinestream: | |
anv_mapfixes.nut -- new shortcut fix... and a new permstuck fix: | |
make_clip( "_shortcut_eventfence", "Survivors", 1, "-32 -80 0", "32 2 345", "928 5775 415" ); | |
make_clip( "_permstuck_eventfence", "Everyone", 1, "-8 -40 0", "8 40 32", "905 5829 341" ); | |
z_developer_showupdate.nut: | |
Add support for "trigger_look" -- simply add it in then confirm Fred's 1 in 4 spawn. | |
Tell Derpduck that it has been updated -- ensure there's no pending changes from his file. | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
#################################################### | |
#### VERBOSE STUDY OF ALL MAPS (& FRED TESTS) #### | |
#################################################### | |
/**************************************************************************************************** | |
CREATE GITHUB GIST OF THESE OBSERVATIONS | |
Background info: | |
Versus Survival (mutation15) and Taaannnk! (mutation19) have different | |
gameplay and spawn habits than Versus/Scavenge. All cases where players | |
begin as Ghost Infected are safe, since they start on top of a Survivor. | |
When it comes to Survivors spending a long time in one area such as the | |
case with Versus Survival, this yields to greater likelihood of Tanks | |
spawning stuck behind func_playerinfected_clip unable to get out. It can | |
still happen with Versus spawns, though much more rarely and in some spots | |
it'd be impossible given the linearity of Survivor progression in Versus | |
and the Tank's spawn reliance on flow, instead of "ghost" merely getting | |
instantly converted to Tanks as with the case of Taaannnk!! Mutation. | |
When it comes to Scavenge, there are no Tanks that automatically spawn. | |
When it comes to Taaannnk! Mutation, Survivors run through the map and | |
player Tanks spawn constantly, yielding to the highest likelihood of | |
getting stuck, plus every map supports this Mutation. | |
When it comes to non-PlayerControlledZombie modes, func_playerinfected_clip | |
do not block bots, and will not lead to stuck situations. | |
Problem: | |
With TLS, a lot of func_playerinfected_clip were deleted and attacks were | |
restored. This was generally a good thing, except for cases where new clips | |
with make_clip() calls patched up overly-accessible outskirts of maps and | |
were too thin to block the space behind them. | |
The bigger problem is the countless func_playerinfected_clip that were not | |
deleted, either because restoring those attacks wasn't seen as being worth | |
the effort or the had undeletable prop_static wrongway signs that would've | |
confused newer players as they emerge through them. | |
Vulnerability: | |
Any spot with a make_clip() "SI Players" call or a func_playerinfected_clip | |
that also has navmesh behind it is vulnerable. | |
Solutions: | |
NOTHREAT is not one of them, see below. | |
Thicken make_clip()'s so players can't spawn behind them anymore. | |
Add axiswarps (i.e. c11m4_terminal) for maps that are otherwise OK but | |
just have a single issue or so. | |
Delete all func_playerinfected_clips for maps where it's unusually bad, | |
provided it doesn't introduce any exploits. Deleting all of them on a | |
handful of specific maps is safer than blanket-deleting them for all. | |
What's the "cutoff point" for this, where things are so bad | |
that they warrant this? | |
It's warranted if there's 6+ stuck spawn spots and at least one | |
of them would require several clips. Or if they're attacks that | |
should be properly restored in the future, but will take a lot | |
of work to do so (i.e. new Propper models, editing BSP prop_static). | |
Regarding NOTHREAT: | |
For c11m4_terminal I was going to try something like this at first: | |
script SpawnEntityFromTable( "func_nav_attribute_region", { targetname = g_UpdateName + "_tankstuck_rubble", origin = Vector( x, y, z ), spawnflags = 524288 } ); | |
https://developer.valvesoftware.com/wiki/Func_nav_attribute_region | |
https://developer.valvesoftware.com/wiki/L4D_Level_Design/Nav_Meshes#All_Attributes | |
NOTHREAT is defined as: | |
Navigation meshes with this attribute will not allow THREAT to | |
perform its action when it is applied on itself. | |
THREAT is defined as: | |
Acts as spawn area suggestions for Boss Infected (Tank & wWtch). | |
Only nav areas along theESCAPE_ROUTEpath are candidates for | |
THREAT attribute. If the respective portion of the escape route | |
path has already been reached,THREATwill be removed automatically. | |
Requiresnav_analyzeto appear naturally. | |
So, if it's only Tank/Witch, turns out this might actually be viable. For | |
this map specifically (c11m4_terminal) a clip blocker is non-ideal since | |
server configs which delete all "func_playerinfected_clip" would expect to | |
have access to this area. | |
Preventing Witch spawns behind the rubble should be harmless, and Tank spawns | |
very acceptable compared to the alternative of inaccessibility. | |
c11m4_terminal: | |
Test-only clip for blocking out the nav region: | |
script make_clip( "_test", "SI Players", 1, "-360 -626 -100", "128 340 216", "-724 5745 384" ); | |
New func_nav_attribute_region: | |
SpawnEntityFromTable( "func_nav_attribute_region", { targetname = g_UpdateName + "_tankstuck_rubble", origin = Vector( -724, 5745, 384 ), spawnflags = 524288 } ); | |
EntFire( g_UpdateName + "_tankstuck_rubble", "AddOutput", "mins -360 -626 -100" ); | |
EntFire( g_UpdateName + "_tankstuck_rubble", "AddOutput", "maxs 128 340 216" ); | |
EntFire( g_UpdateName + "_tankstuck_rubble", "AddOutput", "solid 2" ); | |
EntFire( g_UpdateName + "_tankstuck_rubble", "ApplyNavAttributes" ); | |
Result: | |
NOTHREAT does appear on all the desired nav. | |
But spawning with "ghost" or running out the timer, if the Survivor bots | |
are on the escalator, Tank will occasionally spawn outside here. | |
NOTHREAT is NOT a solution. | |
Perfect bind, just be sure Survivors are a bit ahead of the area you actually want to spawn: | |
warp_far_survivor_here | |
nav_edit 1; z_debug 1 | |
bind v "kill; host_timescale 10; wait 200; host_timescale 0; ghost" | |
For finding func_playerinfected_clip values: | |
script printl(NetProps.GetPropFloat( Entities.FindByClassname(null,"func_playerinfected_clip"), "m_Collision.m_flRadius" )) | |
ent_remove func_playerinfected_clip | |
find_ent func_playerinfected_clip | |
Easier func_playerinfected_clip values: | |
script_execute z_developer_scouteditor | |
script AssessBadClips() | |
c1m2_streets: | |
CONCLUSION | |
---------- | |
Update the mutation15 (Versus Survival) and mutation19 (Taaannnk!!) | |
scripts to delete all func_playerinfected_clip and only on this map. | |
Skyboxes: | |
Tanks and Hunters will be able to venture to the bounds | |
of the map, but skybox will stop them. | |
Under map: | |
It's possible to get under the map under the overpass if | |
all of them are deleted, but at worst Tanks will be able | |
to throw rocks through a displacement, and Hunters/Smokers | |
won't be able to actually get under the map. | |
The only way out is also not in the Survival area. | |
Simplest solution by far. | |
SKIPPED | |
------- | |
Extremely problematic and known solutions would be excessively messy, | |
as in ZoneMod configs would be almost absolutely obligated to delete | |
the fixes since they allow access behind undeletable wrongways. | |
Overpass / back area / bus: | |
setpos_exact -1249 407 411; setang_exact 2 -138 0 | |
The SI-only clip I added for TLS is the least of our problems when | |
Valve's func_playerinfected_clip block exit off most of the overpass, | |
going over the back fence, and the bus. | |
If NOTHREAT actually worked, this would be viable -- but nope. | |
Undeletable wrongway to left of staircase chokepoint building: | |
Could add an axiswarp here, but it'd only solve a tiny spot. | |
Raised platform behind floodlight generator: | |
Can also spawn stuck behind func_playerinfected_clip here. | |
Back of all the hedges after one-way drop: | |
Tried to re-work this for TLS but it was sub-optimal and cut. | |
The Tanks spawning behind the hedges here aren't surprising, | |
and given the curvature of the hedges, unrealistic to axiswarp | |
and sloppy to clip off entirely. | |
End area next to safe room: | |
The func_playerinfected_clip are much farther back than I expected. | |
I can only reproduce stuck spawns if Survivors are standing in | |
the event area with the hedge -- not if they're near end safe room. | |
c2m2_fairgrounds: | |
There is 1 make_clip() that causes issues here. | |
Before: | |
make_clip( "_yeswayfairback_funcinfclip", "SI Players", 1, "-1824 -8 -384", "1824 17 384", "-2272 1824 384" ); | |
After: | |
make_clip( "_yeswayfairback_funcinfclip", "SI Players", 1, "-1824 -8 -384", "1824 452 384", "-2272 1824 384" ); | |
func_playerinfected_clip confirmed stuck spawns, all of these would | |
require axiswarps each (some multiple) to fix them: | |
Behind the fence at the ticket booths besides the RIDES building | |
Behind the RIDES building with the shipping container | |
Behind the hedges in starting tent area before first interior | |
Train tunnel high-up rooftop | |
Train tunnel behind the wrongway signs | |
Undeletable wrongway behind electrical box and wall in the final area | |
Various rooftop outskirts in final area (unconfirmed, too many, just | |
assume, even though for most Survivors would need to almost deliberate | |
position themselves to make Tanks spawn stuck) | |
CONCLUSION: | |
Like c1m2_streets... delete all func_playerinfected_clip on this map, too, | |
for mutation15 and mutation19. | |
Skybox bounds are pretty blocky this map, there's no way to get out | |
and under the map, there's no Versus Survival on this map so we can | |
assume the players are always Tanks, | |
c2m3_coaster: | |
This map natively gives SI a lot of (unnecessary) out of bounds access, | |
and the only spot that would have warranted an axiswarp has a properly | |
thick func_playerinfected_clip that would block spawns there anyway. | |
The hedge outskirts of the coaster area is a bad place to spawn, but | |
there is one ladder to get out. Valve also has a wrongway with a dead | |
ladder out here that won't be restored, or fixed here, as it's no stuck. | |
Before: | |
make_clip( "_trailerfence_clip", "SI Players", 1, "-114 -39 3", "126 761 963", "-1150 2887 -3" ); | |
After: | |
make_clip( "_trailerfence_clip", "SI Players", 1, "-114 -39 3", "702 761 963", "-1150 2887 -3" ); | |
c2m4_barns: | |
Immediate start behind the fence would be a problem space but with | |
TLS funcinfclip() were killed there to allow access. | |
The only confirmed issue is the make_clip() at the end. | |
Before: | |
make_clip( "_eventfence_wrongway", "SI Players", 1, "-210 -20 -608", "200 20 672", "-200 2652 352" ); | |
After: | |
make_clip( "_eventfence_wrongway", "SI Players", 1, "-800 -20 -608", "200 676 672", "-200 2652 352" ); | |
c2m5_concert: | |
Already solved several Tank stuck spawns that happened in Versus by | |
using axiswarps -- nothing to worry about here. | |
This is a good example of the epitome of how bad Tank stuck spots can | |
get, though. | |
c3m1_plankcountry: | |
Another example of an axiswarp, where Tanks pre-TLS could spawn stuck | |
behind the trains. This was the first time axiswarp was used, and it | |
also doubles as an invisible wall for Survivors attempting to exploit | |
out the map to space SI Players cannot access b/c the func_playerinfected_clip. | |
Needs a 2nd (new) axiswarp though... | |
Semitrailer to the right of the garage at the start has navmesh behind it. | |
If Survivors wedge themselves into the corner next to the wooden fence, | |
Tanks actually can spawn far behind it enough to get stuck. Add axiswarp: | |
make_axiswarp( "_axiswarp_semitrailer", "y-", 96, "-550 -8 0", "740 8 256", "-9505 10720 155" ); | |
PROBLEM: | |
Use "r_drawclipbrushes 2" and look at the Survivor-only clips along | |
the right perimeter of the map. All are also func_playerinfected_clip. | |
The entire right perimeter is space Tanks can automatically spawn | |
behind and be permanently stuck. | |
For mutation15+mutation19, delete this new clip: | |
EntFire( g_UpdateName + "_meticulous_funcinfclip01", "Kill" ); | |
And then for mutation15+mutation19, delete ALL func_playerinfected_clip. | |
There's an unrealistic amount of spawn issues to solve on this map, RED | |
clips and Skybox do a well enough job of preventing too far out of bounds | |
or under-map access. | |
make_clip() calls at the end safe room -- thicken those back to prevent | |
spawns back there, these clips are needed anyway to prevent a Tank player | |
from potentially going too far out of bounds, on top of the safe room, | |
and standing on the trigger to prevent Survivors from finishing. | |
Before: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-733 -8 0", "640 8 768", "-2668 416 256" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-198 -16 0", "198 16 961", "-3516 543 61", "0 -50 0" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-198 -16 0", "1375 16 961", "-1846 433 61", "0 10 0" ); | |
After: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-733 -100 0", "640 8 768", "-2668 416 256" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-198 -100 0", "320 16 961", "-3516 543 61", "0 -50 0" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-198 -360 0", "1375 16 961", "-1846 433 61", "0 10 0" ); | |
Being the map with the most ladders, most of them on the perimeter | |
and useless, at least killing all func_playerinfected_clips won't | |
make them all permstuck spots... they'll actually see some use now lol. | |
c3m3_shantytown: | |
Seems fine, cleaning up start area for TLS fixed a lot. | |
Navmesh doesn't go far out the map, unlike map 1. At the area with | |
the generator, there's also a distant corner with wrongways and | |
func_playerinfected_clip -- but they're thick and block spawns | |
over the slightly over-extended navmesh. | |
Hard Rain: | |
All fine. | |
c5m2_park: | |
Concrete barricade at the start has an unusable Infected ladder behind | |
it, but the func_playerinfected_clip extends far back blocking spawns. | |
One exception is a starting rooftop, with a wrongway, and 1 exposed nav | |
area behind it, I could repro getting Tank to spawn back there. There's | |
also a spot to permanently fall into if you spawn back there. Instead of | |
using an axiswarp, just block the nav area behind it with a clip -- no | |
one is going to be inconvenienced by the existence of this clip and it | |
avoids needing to patch the permstuck since it'll be impossible to reach: | |
make_clip( "_tankstuck_startroof", "SI Players", 1, "-106 -240 0", "86 240 196", "-2936 -816 -58" ); | |
c5m3_cemetery: | |
UNRELATED: | |
New ladder to fix permstuck spot far back in manhole one-way area: | |
make_ladder( "_ladder_permstuckmanhole_cloned_manholeblownwall", "3778 656 100", "3769 2954 -42", "0 -90 0", "0 -1 0" ); | |
c5m4_quarter: | |
CONCLUSION: | |
Delete all func_playerinfected_clip. | |
The map Skybox/clipping is tight enough and there's not even | |
any walkable space under the entirety of this map. | |
Countless problems, where navmesh extends far beyond wrongway signs | |
which have func_playerinfected_clip: | |
Both ends and the side of the first mainstreet have wrongway | |
signs with extensive navmesh and even unusable ladders behind | |
them (that weren't worth restoring with TLS / undeletable wrongways) | |
Both ends of second mainstreet. | |
The entire wide road leading to the end area's overpass has | |
unusable ladders, inaccessible areas, and excessive navmesh | |
3 sections of fence in the end area cannot be climbed, have | |
undeletable wrongway signs, but at least have ladders behind | |
them allowing escape once func_playerinfected_clip are deleted | |
Contender for worst map. Need a future BSP/LMP edit to restore that | |
end overpass attack, as well -- it's all awful. | |
Passing: | |
Navmesh extends very far beyond wrongway signs, BUT func_playerinfected_clip | |
were made thick enough (thanks Valve) to eliminate any and all issues. | |
There's lots of navmesh to spawn on, but it's all thickly blocked off. | |
c6m1_riverbank: | |
Spoke too soon -- the fence at the start has its func_playerinfected_clip | |
extend far back, but not back enough to cover all navmesh and not off to | |
the side, where Tanks can spawn stuck if Survivor's backs are to the fence: | |
make_clip( "_tankstuck_startfence", "SI Players", 1, "-251 -760 0", "173 216 1513", "-261 2872 87" ); | |
And extend the yellow block added with TLS clip back... | |
Before: | |
make_clip( "_infected_mapescape", "SI Players", 1, "-40 -350 -20", "40 440 245", "-1997 1497 192" ); | |
After: | |
make_clip( "_infected_mapescape", "SI Players", 1, "-1000 -350 -20", "40 808 245", "-1997 1497 192" ); | |
c7m2_barge: | |
Delete func_playerinfected_clip that blocks SI access from a closet at the end: | |
kill_funcinfclip( 196.497 ); // Allow SI access into end closet (the only funcinfclip in entire map) | |
c8m1_apartment: | |
Could've been hell but for TLS extensive clip rework, func_playerinfected_clip | |
were deleted and the replacement clips replicated their thickness. No issues. | |
Nevermind -- there's a few problematic back alleys... and axiswarps on this map | |
would be bad practice since they'd be used at inclines where the axis offset | |
would result in the player getting stuck -- so use make_clip() for all. | |
One clip just needs lengthening so it reaches the ground... | |
Before: | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-153 -812 0", "293 308 4132", "153 2988 352" ); | |
After: | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-153 -812 -336", "293 308 4132", "153 2988 352" ); | |
NEW: | |
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" ); | |
Delete specific func_playerinfected_clip... the spawn was too unique to block: | |
kill_funcinfclip( 1060.85 ); // Delete clip that blocks the rubble and a cool unique spawn | |
c8m2_subway: | |
New, multiple places to spawn stuck behind rubble where navmesh is excessive: | |
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" ); | |
All Generator Room Window clips introduced with TLS need thickening... | |
Before: | |
make_clip( "_ladder_generatorwindow_clipa", "SI Players", 1, "-4 -40 -56", "4 128 231", "7944 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipb", "SI Players", 1, "-4 -40 -56", "4 128 231", "7568 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipc", "SI Players", 1, "-170 -10 -56", "214 10 231", "7734 2462 425" ); | |
After: | |
make_clip( "_ladder_generatorwindow_clipa", "SI Players", 1, "-4 -40 -56", "376 128 231", "7944 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipb", "SI Players", 1, "-400 -40 -56", "4 128 231", "7568 2512 425" ); | |
make_clip( "_ladder_generatorwindow_clipc", "SI Players", 1, "-566 -216 -56", "586 10 231", "7734 2462 425" ); | |
NEW: | |
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 (blocker2 doesn't have nav behind it): | |
Before: | |
make_clip( "_burgerfence_blocker1", "SI Players", 1, "-419 -675 0", "-409 615 1202", "10137 6395 8" ); | |
make_clip( "_burgerfence_blocker3", "SI Players", 1, "-419 605 0", "384 615 1202", "10137 6395 8" ); | |
After: | |
make_clip( "_burgerfence_blocker1", "SI Players", 1, "-537 -675 0", "-409 615 1202", "10137 6395 8" ); | |
make_clip( "_burgerfence_blocker3", "SI Players", 1, "-880 605 0", "384 2372 1202", "10137 6395 8" ); | |
NEW TANKSTUCK FIXES: | |
make_clip( "_tankstuck_startrooftops", "SI Players", 1, "-1749 -380 0", "219 332 750", "12261 4212 464" ); | |
make_clip( "_tankstuck_warehousestrip", "SI Players", 1, "-16 -813 0", "48 731 666", "10488 7589 540" ); | |
Lots of places in the final area after exiting from manhole. Instead of making | |
massive clips everywhere (at least 3 very large clips required), and given the | |
likelihood of Tanks spawning BEHIND Survivors not even falling victim to most | |
of this stuck potential, simply delete their specific func_playerinfected_clip... | |
even axiswarps would be overkill: | |
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 | |
NEW FRED: | |
Sample trigger_look: | |
1 in 5 chance on c3m2_swamp: | |
{ | |
"origin" "-4730.83 3734.91 58.878" | |
"targetname" "case_bucket" | |
"Case05" "5" | |
"Case04" "4" | |
"Case03" "3" | |
"Case02" "2" | |
"Case01" "1" | |
"classname" "logic_case" | |
"hammerid" "1876333" | |
"OnCase01" "template_bucketForceSpawn0-1" | |
"OnCase02" "nullTrigger0-1" | |
"OnCase03" "nullTrigger0-1" | |
"OnCase04" "nullTrigger0-1" | |
"OnCase05" "nullTrigger0-1" | |
} | |
{ | |
"model" "*40" | |
"Timeout" "0" | |
"targetname" "looktrigger_bucket" | |
"target" "bucket_pills" | |
"StartDisabled" "0" | |
"spawnflags" "129" | |
"origin" "-4698 3692 52" | |
"LookTime" "0.5" | |
"filtername" "filter_survivor" | |
"FieldOfView" "0.5" | |
"classname" "trigger_look" | |
"hammerid" "1876233" | |
"OnTrigger" "!activatorSpeakResponseConceptc3m2disgust01" | |
} | |
{ | |
"origin" "-4711 3686.9 20.7482" | |
"Template02" "looktrigger_bucket" | |
"Template01" "bucket_pills" | |
"targetname" "template_bucket" | |
"spawnflags" "2" | |
"classname" "point_template" | |
"hammerid" "1876270" | |
} | |
{ | |
"origin" "-4692 3678 22" | |
"targetname" "bucket_pills" | |
"spawnflags" "2" | |
"solid" "6" | |
"angles" "30 330 -180" | |
"classname" "weapon_pain_pills_spawn" | |
"hammerid" "1797433" | |
} | |
https://developer.valvesoftware.com/wiki/Trigger_look | |
Oklol | |
FINAL FRED (note player must be standing inside this trigger while looking at Fred): | |
// Fire once and only for Clients, both Survivor and Infected players. | |
// Scurries away after 1 second when viewed at any angle (-1). | |
make_prop( "dynamic", "_fred", "models/props_fairgrounds/alligator.mdl", "13099 11539 -25", "0 120 0", "shadow_no", "solid_no" ); | |
SpawnEntityFromTable( "func_movelinear", | |
{ | |
targetname = g_UpdateName + "_fred_movelinear", | |
spawnflags = 0, | |
movedistance = 200, | |
speed = 80, | |
startposition = 0, | |
movedir = Vector( 0, -148, 0 ), | |
origin = Vector( 13099, 11539, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred", "SetParent", g_UpdateName + "_fred_movelinear" ); | |
SpawnEntityFromTable( "trigger_look", | |
{ | |
targetname = g_UpdateName + "_fred_triglook", | |
target = g_UpdateName + "_fred", | |
spawnflags = 129, | |
LookTime = 1, | |
FieldOfView = -1, | |
origin = Vector( 13072, 11520, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "mins -42 -38 -480" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "maxs 42 38 0" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "solid 2" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Open::0:-1" ); | |
c8m4_interior: | |
Other side of window glass in lobby has no navmesh, whew. | |
No navmesh on top of elevator either, else they'd be stuck between wrongways. | |
Crash Course: | |
EXTREMELY EXCESSIVE navmesh that allows players to potentially spawn far | |
outside the map, but ladders exist to get back in bounds, and there's no | |
func_playerinfected_clip or wrongways that hinder getting back in bounds. | |
Lots of space to move around, all traversible, no problems. | |
Behind map 1 safe room is ALMOST a problem but Valve's func_playerinfected_clip | |
are thick and block un-noclipping in all areas behind there. | |
Map 2 -- some potential problem areas, but Valve's clips are thick for most. | |
Extremely well-made, thick, and thorough func_playerinfected_clips. | |
c9m2_lots: | |
One exception is behind starting safe room, the func_playerinfected_clip is | |
not thick enough 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: | |
Along the entire left side of the map is a bad place for stuck spawns | |
as the navmesh extends far beyond the func_playerinfected_clip. Also, | |
deleting all func_playerinfected_clip on this map would open up several | |
ways to get under the map, permstuck'd, or players getting plain lost. | |
To solve stuck spots while minimizing damage, delete only specific ones, | |
and patching them up flawlessly isn't critical, since Versus Survival is | |
not on this map, so Smokers aren't getting under it: | |
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 | |
That last funcinfclip "End cave connection to map 2" has an inaccessible | |
ladder in what would've been a permstuck spot -- cool easter egg to keep, | |
definitely don't thickly clip that off. Note that I'm leaving the flat | |
tree line, which is actually a deletable func_illusionary... player can | |
still walk through it (after kill_funcinfclip) to reach easter egg. | |
Tanks will be able to go out of bounds, but Skybox stop mostly all efforts, | |
and the most harm this could possibly cause is them throwing rocks. | |
Semi-sloppy all-encompassing Taaannnk-only clip -- to prevent easily falling | |
into a permstuck spot: | |
make_clip( "_tankstuck_tunnelside", "SI Players", 1, "-1700 -200 -1337", "1700 1024 610", "-13902 -10396 656", "0 45 0" ); | |
If Survivors stand at the tunnel's end barricade Tank will almost always spawn | |
far behind it stuck with no ladders -- once blocked off, Tank doesn't spawn | |
back here at all anymore, not even the part that isn't func_playerinfected_clipped, | |
which is OK, since it's better than spawning stuck exposed to world void: | |
make_clip( "_tankstuck_tunnelend", "SI Players", 1, "-240 -550 0", "240 600 216", "-12998 -4435 -64" ); | |
c10m2_drainage: | |
I've never seen a Versus Tank spawn stuck inside the 3 event area tunnels. | |
In Versus Survival / Taaannnk that would be possible, though. | |
There's also lots of func_playerinfected_clip in the end area that navmesh | |
extends far beyond, as well... axiswarps are dumb, deleting func_playerinfected_clip | |
would allow players to go to the far extents of the map, they can walk far | |
enough and fall into the map, emerge through displacement walls, etc. | |
Clips would need to be far too huge to solve this. | |
One axiswarp would need to be angled, and is dumb since it doesn't stop a | |
bad Tank spawn from still traveling to map extents. | |
Killing all func_playerinfected_clip on this map... sounds like the best option? | |
And that's concerning when it introduces potential exploits. | |
Those "exploits" would only impact the end area, NOT the small Versus Survival area. | |
To let this map slide, and for just a Mutation, deleting all these clips on | |
some maps (instead of just specific ones) will be the minimalist code solution. | |
ALTERNATIVE PLAN ??: | |
1. Fix make_clip() calls by thickening them, the ones that create real issues | |
2. Delete all func_playerinfected_clip for all maps, in both Mutations ?? | |
3. AssessBadClips() to assess what was deleted, and patch created exploits | |
4. Profit ?? Avoid MASSIVE_CODE_BLOAT just for 2 Mutations. | |
c10m3_ranchhouse: | |
Lots of ways to get under the Versus Survival area if all funcinfclip are deleted. | |
Fortunately the navmesh/funcinfclip at the Survival area behave, it's just | |
earlier deadends and mountaintops in the map that would be problematic. | |
Deleting all func_playerinfected_clip on this map would be objectively bad. | |
Delete specific ones, more so near the beginning, and call it a day: | |
kill_funcinfclip( 668.433 ); // Wrongway in beginning area | |
There's a far corner where deleting the func_playerinfected_clip would allow | |
a player to unknowingly get themselves stuck behind another funcinfclip, so | |
here it's actually best to just use a new thick make_clip() since a clip | |
would've been needed to resolve a stuck spot anyway: | |
make_clip( "_tankstuck_cornerpath", "SI Players", 1, "-700 -800 -145", "800 790 1360", "-13598 -9362 68" ); | |
The mountaintop's func_playerinfected_clip are thick enough to cover MOST | |
excessive navmesh, except this small wedge: | |
make_clip( "_tankstuck_mountainwedge", "SI Players", 1, "-100 -100 0", "100 100 1300", "-8388 -3525 300" ); | |
Delete func_playerinfected_clip along treeline, to solve at least 2 stuck spots: | |
kill_funcinfclip( 2248.58 ); // Treeline | |
c10m4_mainstreet: | |
Lots of possibilities to spawn behind the long row of houses, which | |
have thick func_playerinfected_clip but they're not thick enough. Block | |
all of these with a mutation15/19-exclusive long clip: | |
make_clip( "_tankstuck_houserow", "SI Players", 1, "-2260 -440 0", "3450 900 1850", "68 158 -100" ); | |
In Versus Survival's event area, the end of the street is a popular camp. | |
It's also easy to spawn as Tank stuck behind the func_playerinfected_clip | |
there. With TLS, given the undeletable wrongway sign, reviving the Infected | |
ladder back there was done, but cut to maximize quality -- what resulted is | |
the stuck spot. As it's only an issue in mutation15/19, and for arguable | |
balance reasons to allow Survivors to have their back safely against the | |
barricade, just create a large clip to block off the navmesh behind the | |
barricade... hurts, but in the future we may re-restore it: | |
make_clip( "_tankstuck_endbarricade", "SI Players", 1, "-400 -900 0", "400 900 1700", "3822 -3970 0" ); | |
Can't reproduce a spawn here, but it's the last uncovered excessive navmesh: | |
make_clip( "_tankstuck_excesscorner", "SI Players", 1, "-200 -100 0", "200 100 1700", "-2520 -5048 -64" ); | |
c10m5_houseboat: | |
This map is the definition of excessive navmesh, but at least apparently | |
all the func_playerinfected_clip are extremely thick and cover all of it. | |
Doesn't seem to be any issues here. | |
c11m1_greenhouse: | |
The low ground has minimalist navmesh. At the Smoker ladder setup there is | |
a part of a large navarea sticking through a func_playerinfected_clip, but | |
I can't reproduce a spawn behind it, and it's only a small bit of nav. | |
In the end area, there's a lot of navmesh behind the fence barricade and | |
the wrongway signs behind it -- there's a lot of area to explore back there, | |
but it's harmless, so just delete that clip: | |
kill_funcinfclip( 1154.43 ); // End area fence barricade | |
c11m2_offices: | |
Tight interconnected map, one issue behind this fence though, clip it | |
because killing the clip would expose the player to getting stuck | |
behind another clip: | |
make_clip( "_tankstuck_fencenavarea", "SI Players", 1, "-64 -64 0", "64 64 1400", "10314 3862 16" ); | |
Final street has wrongway barricades at both ends, both of which Tanks | |
can spawn behind -- delete those func_playerinfected_clip as the most | |
minimalist solution, it'd just expose the player to NODRAW ugly but | |
only if they knowingly venture away from critical path: | |
kill_funcinfclip( 1043.94 ); // Final street left barricade | |
kill_funcinfclip( 1493.36 ); // Final street right barricade | |
At some point, exposing players to ugly NODRAW space in niche Mutations | |
could put them on a track of game development in life by sparking their | |
curiosity... this isn't so bad tbh. | |
c11m3_garage: | |
It's extremely common to spawn stuck on the opposite side of the | |
fence at the start. Instead of deleting the func_playerinfected_clip | |
and adding Infected ladders (should be done optionally in the future | |
anyway), which would still expose the player to map 2's eerie space, | |
just block it off entirely with a clip. Roof spawns better anyway: | |
make_clip( "_tankstuck_startfence", "SI Players", 1, "-1200 -80 0", "720 58 1800", "-4947 -3786 16" ); | |
Above clip will only be mutation15/19, so doesn't hurt custom Versus configs. | |
At the transformer yard / Versus Propper brick wall, "_yeswayfence_funcinfclip1" | |
is thick enough to cover most of the navmesh to bother thickening it more, | |
I cannot reproduce a Tank spawn on the tiny sliver behind it. | |
Overall, TLS construction area rework prevented a few would-have-been issues, | |
and Valve's wrongway func_playerinfected_clip are thick where they need to be. | |
No more apparent issues. | |
c11m4_terminal: | |
Add an axiswarp -- instead of deleting the func_playerinfected_clip (which | |
has an undeletable prop_static wrongway sign), just warp the player through | |
it. Servers are free to delete this and would notice the least difference | |
from solving this with a clip. | |
make_axiswarp( "_tankstuck_rubble", "x+", 64, "-8 -88 0", "7 120 192", "-604 5248 296" ); | |
Extra slanted clip to assist with climbing OUT of the rubble: | |
make_clip( "_tankstuck_rubble_clip", "SI Players and AI", 1, "-95 -128 0", "60 128 4", "-720 5248 360", "-45 0 0" ); | |
Blocker from falling out of bounds: | |
make_clip( "_tankstuck_rubble_oob", "SI Players", 1, "-2 -56 -32", "2 56 56", "-906 5256 344" ); | |
After the Atlas statue beyond the rubble, the very distant wrongway sign | |
has a thin func_playerinfected_clip... can't reproduce a spawn behind | |
there, and it is very far away, so I think ignore that one. | |
c11m5_runway: | |
Unprecedented walkable space for a map, and the func_playerinfected_clip | |
are extremely thick, so there's no issues here. | |
c12m1_hilltop: | |
After the bridge there's a house with 2 wrongways behind it and lots of | |
navmesh behind them -- thicken those func_playerinfected_clips (note that | |
eventually these clips could be used to REPLACE them entirely): | |
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" ); | |
CAUTION: | |
For servers that delete ALL func_playerinfected_clip, there is | |
a ladder up the cliff that the new "_tankstuck_wrongwayone" clip | |
would immediately block. | |
At this point, with all these stuck fixes, there's very little | |
reason for these clips to appear in Versus mode anyway... there's | |
no way a Tank will spawn behind there in Versus, and Ghost Infected | |
appear on top of Survivors... there's no reason to have them. | |
So, really should be mutation15/19-only at this point... MOST of them. | |
What's 100% fine for vanilla Versus can and might result in fringe | |
conditions depending on how competitive servers allow access behind | |
undeletable wrongway signs (or deletable ones). | |
Two make_clip()'s at end rooftop have navmesh behind them, so thicken them... | |
Before: | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-777 -8 0", "1000 8 1372", "-5988 -6941 820" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-205 -8 0", "1000 8 885", "-5988 -6941 -65" ); | |
After: | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-777 -8 0", "1000 960 1372", "-5988 -6941 820" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-205 -8 0", "1000 960 885", "-5988 -6941 -65" ); | |
c12m2_traintunnel: | |
The end of the tracks outside has navmesh respect the func_playerinfected_clip, | |
the top map 1 area has no navmesh, everything is good... except the end. | |
Add a clip that extends further down the tracks at the end to block excess nav: | |
make_clip( "_tankstuck_tunnelend", "SI Players", 1, "-320 -800 -120", "450 258 240", "-1551 -10785 50" ); | |
Another (smaller reason this time) for making this mutation15/19-only: above | |
clip is a little bit too thick toward the safe room and blocks exploration of | |
the map 3 section that's considered a small easter egg since it can be accessed | |
from map 2... so, yeah, don't add this to Versus... there's no reason for it. | |
NEW PERMSTUCK: | |
make_clip( "_permstuck_tunnelend", "SI Players", 1, "-16 -16 -16", "16 16 32", "-1445 -10327 -4" ); | |
c12m3_bridge: | |
After redoing the huge grouped func_playerinfected_clip for TLS, there's | |
only 2 left: one that's OK for the bridge ("bridge_pz_clip") and then | |
at the end of the train tunnel, a wrongway, remove for mutation15/19: | |
kill_funcinfclip( 311.003 ); // Wrongway at end of train tunnel | |
Other than that, the replacement make_clip()'s for TLS should be thickened... | |
an overwhelming several of them, but it must be done to be 100% thorough... | |
Total list for reference == 2 + 3 + 4 + 7 + 8 + 9 + 10 + 12 + 13 | |
Total of 12 don't need thickening | |
Before: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-1000 -17 -170", "1150 17 1408", "262 -11524 321", "0 -21 0" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-34 -238 0", "57 260 1408", "1323 -12178 321" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-310 -17 159", "724 17 1408", "1616 -12255 321" ); | |
make_clip( "_meticulous_funcinfclip07", "SI Players", 1, "-48 -555 -216", "17 1414 1408", "3276 -11409 321", "0 -24 0" ); | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-34 -120 -216", "17 700 1408", "3821 -10047 321", "0 24 0" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-1600 -30 -216", "1600 17 1408", "1980 -9420 321" ); | |
make_clip( "_meticulous_funcinfclip10", "SI Players", 1, "-600 -70 -216", "600 17 1408", "-132 -9696 321", "0 27 0" ); | |
make_clip( "_meticulous_funcinfclip12", "SI Players", 1, "-3000 -17 -216", "3000 17 1408", "5344 -14507 321" ); | |
make_clip( "_meticulous_funcinfclip13", "SI Players", 1, "-800 -17 -216", "500 17 1408", "9070 -14172 321", "0 25 0" ); | |
After: | |
make_clip( "_meticulous_funcinfclip02", "SI Players", 1, "-1000 -120 -170", "1150 17 1408", "262 -11524 321", "0 -21 0" ); | |
make_clip( "_meticulous_funcinfclip03", "SI Players", 1, "-340 -238 0", "57 260 1408", "1323 -12178 321" ); | |
make_clip( "_meticulous_funcinfclip04", "SI Players", 1, "-310 -420 159", "724 17 1408", "1616 -12255 321" ); | |
make_clip( "_meticulous_funcinfclip07", "SI Players", 1, "-48 -555 -216", "180 1414 1408", "3276 -11409 321", "0 -24 0" ); | |
make_clip( "_meticulous_funcinfclip08", "SI Players", 1, "-34 -120 -216", "260 700 1408", "3821 -10047 321", "0 24 0" ); | |
make_clip( "_meticulous_funcinfclip09", "SI Players", 1, "-1600 -30 -216", "1600 70 1408", "1980 -9420 321" ); | |
make_clip( "_meticulous_funcinfclip10", "SI Players", 1, "-600 -70 -216", "600 170 1408", "-132 -9696 321", "0 27 0" ); | |
make_clip( "_meticulous_funcinfclip12", "SI Players", 1, "-3000 -410 -216", "3000 17 1408", "5344 -14507 321" ); | |
make_clip( "_meticulous_funcinfclip13", "SI Players", 1, "-800 -170 -216", "500 17 1408", "9070 -14172 321", "0 25 0" ); | |
NEW PERMSTUCK: | |
make_clip( "_permstuck_shedtree", "Everyone", 1, "-14 -14 -164", "14 14 1640", "3085 -14120 88" ); | |
c12m4_barn: | |
60 func_playerinfected_clip -- :( | |
Most func_playerinfected_clip smooth the perimeter's wire fences. | |
There's a gap in those clips behind the safe room, cannot reproduce it, | |
but it'd be a really annoying place to ever spawn stuck: | |
make_clip( "_tankstuck_safeback", "SI Players", 1, "-170 -640 -100", "170 225 1700", "7704 -11710 425" ); | |
No other problems -- the first far end of the traintracks has a wrongway | |
and func_playerinfected_clip that's very far away, and behind the end | |
safe room the clip is extremely thick. | |
c12m5_cornfield: | |
Already re-did the hard func_playerinfected_clip for TLS. | |
Doesn't appear to be any issues. | |
Cold Stream: | |
No apparent issues. Each map's environment is pretty similar, and problems | |
instead usually come with maps that are heavy on architecture or streets, | |
or areas on the map's perimeter only player Infected can access... this | |
campaign is on short supply of all that. | |
Entire campaign also has 0 func_playerinfected_clip. | |
c13m2_southpinestream: | |
NEW SHORTCUT: | |
make_clip( "_shortcut_eventfence", "Survivors", 1, "-32 -80 0", "32 2 345", "928 5775 415" ); | |
NEW PERMSTUCK: | |
make_clip( "_permstuck_eventfence", "Everyone", 1, "-8 -40 0", "8 40 32", "905 5829 341" ); | |
Last Stand: | |
Good. | |
Map 1 has 3 func_playerinfected_clip (3/3 for the campaign) behind the start | |
area to block off the wrongway -- they're thick, and how it's done. | |
Curling/Tutorial/Sndscape/Credits: | |
Sndscape: no nav, no problem. Only Tutorial is important and it looks good. | |
z_developer_showupdate.nut: | |
Add support for "trigger_look" -- easy. | |
END | |
############################################################################################################## | |
############################################################################################################## | |
SCRIPT FOR VIEWING FUNC_PLAYERINFECTED_CLIP: | |
script_execute "z_developer_scouteditor -- IGNORE BC CLIPS ONLY NO LADDERS.nut" | |
printl( "Ran NUT" ); | |
// FOR PORTING COMPLETED SURVIVAL-ONLY NEW CLIPPING TO ANV_ FILES / OTHER MODES. | |
function DumpPreExistingBlockers() | |
{ | |
local play = null; | |
while( ( play = Entities.FindByClassname( play, "env_player_blocker" ) ) != null ) | |
{ | |
if ( play.GetName().find( "anv_mapfixes" ) != 0 ) | |
{ | |
local origin = VectorToString_Valve( NetProps.GetPropVector( play, "m_vecOrigin" ) ); | |
local mins = VectorToString_Valve( NetProps.GetPropVector( play, "m_Collision.m_vecMins" ) ); | |
local maxs = VectorToString_Valve( NetProps.GetPropVector( play, "m_Collision.m_vecMaxs" ) ); | |
printl( "make_clip( \"_test\", \"Survivors\", 1, \"" + mins + "\", \"" + maxs + "\", \"" + origin + "\" );" ); | |
} | |
} | |
local phys = null; | |
while( ( phys = Entities.FindByClassname( phys, "env_physics_blocker" ) ) != null ) | |
{ | |
if ( phys.GetName().find( "anv_mapfixes" ) != 0 ) | |
{ | |
local origin = VectorToString_Valve( NetProps.GetPropVector( phys, "m_vecOrigin" ) ); | |
local mins = VectorToString_Valve( NetProps.GetPropVector( phys, "m_Collision.m_vecMins" ) ); | |
local maxs = VectorToString_Valve( NetProps.GetPropVector( phys, "m_Collision.m_vecMaxs" ) ); | |
printl( "make_clip( \"_test\", \"Survivors\", 1, \"" + mins + "\", \"" + maxs + "\", \"" + origin + "\" );" ); | |
} | |
} | |
} | |
// FUNC_PLAYERINFECTED_CLIP :: Function for finding desired invisible clip to delete. | |
function AssessBadClips() | |
{ | |
// FUNC_PLAYERINFECTED_CLIP | |
// UPDATE: | |
// | |
// DebugDrawText() was fixed to work with BOTH "types": | |
// | |
// Type A Blood Harvest 1 where GetOrigin() is non-0's (VERY RARE) | |
// Type B Dead Center 2 where vecMins is better (MAJORITY OF MAPS) | |
// | |
// If vecMins is used but Origin is all-non-0, then it will bug like Blood Harvest 1 | |
// showing all text outside the map. Without reconciling the discrepancy there was | |
// for the longest time no way to get the "best of both worlds". | |
// | |
// While vecMins only pinpoints a "corner" it's still far better than all 0's, but | |
// the bigger problem was DebugDrawText() never overlaying correctly on the all-0 | |
// maps which caused me to resort to MASSIVE_TRIAL_AND_ERROR for the vast majority. | |
// | |
// Note "vecMins - vecMaxs" was far outside of map, and other efforts. The problem | |
// was that while Dead Center 2's mins/maxs work to DebugDrawBox(), with DebugDrawText() | |
// it can't "infer location" from mins/maxs because they're not possible parameters, | |
// but using either-or is just fine!! This isn't 100% flawless on Blood Harvest 1, | |
// IDK why there's exceptions, but for 99% of cases... it would've saved me HOURS!! | |
///////////////////////////////////////////////////////////////////////////////////////////// | |
local hndClip = null; | |
while( ( hndClip = Entities.FindByClassname( hndClip, "func_playerinfected_clip" ) ) != null ) | |
{ | |
local flRadius = NetProps.GetPropFloat( hndClip, "m_Collision.m_flRadius" ); | |
local vecMins = NetProps.GetPropVector( hndClip, "m_Collision.m_vecMins" ); | |
local vecMaxs = NetProps.GetPropVector( hndClip, "m_Collision.m_vecMaxs" ); | |
// Print origin just in case it exists and is unique... BUT NEVER KILL BY ORIGIN | |
// because it's too inconsistent... NO MERCY 1's two windows at the start would | |
// have identical Radius though, but still not useful Origin anyway. | |
local vecLocation = hndClip.GetOrigin(); | |
DebugDrawBoxDirection( vecLocation, vecMins, vecMaxs, | |
hndClip.GetForwardVector(), Vector( 255, 0, 0 ), | |
64, 99999999 ); | |
// Solved the inability for Radius to DebugDrawText() because its Origin was at | |
// the map's center erroneously... all the ones that work have non-0 Origins. | |
if ( vecLocation.x == 0 && vecLocation.y == 0 && vecLocation.z == 0 ) | |
{ | |
vecLocation = NetProps.GetPropVector( hndClip, "m_Collision.m_vecMins" ); | |
} | |
DebugDrawText( vecLocation, flRadius.tostring(), false, 99999999 ); | |
printl( "func_playerinfected_clip\t\t" + flRadius + "\t\t" + "setpos_exact " + VectorToString_Valve( vecLocation ) ); | |
} | |
// FUNC_ILLUSIONARY | |
local hndIllus = null; | |
while( ( hndIllus = Entities.FindByClassname( hndIllus, "func_illusionary") ) != null ) | |
{ | |
local flRadius = NetProps.GetPropFloat( hndIllus, "m_Collision.m_flRadius" ); | |
printl( "func_illusionary\t\t" + flRadius + "\t\t" + hndIllus.GetOrigin() ); | |
// Overlay both Radius and Origin... because I've yet to confirm if Radius is | |
// 100% useless for unique identification like it is for func_brush. | |
DebugDrawText( hndIllus.GetOrigin(), flRadius.tostring() + " + " + VectorToString_Valve( hndIllus.GetOrigin() ), false, 99999999 ); | |
local vecMins = NetProps.GetPropVector( hndIllus, "m_Collision.m_vecMins" ); | |
local vecMaxs = NetProps.GetPropVector( hndIllus, "m_Collision.m_vecMaxs" ); | |
DebugDrawBoxDirection( hndIllus.GetOrigin(), vecMins, vecMaxs, | |
hndIllus.GetForwardVector(), Vector( 0, 255, 0 ), | |
64, 99999999 ); | |
} | |
// FUNC_BRUSH | |
local hndBrush = null; | |
while( ( hndBrush = Entities.FindByClassname( hndBrush, "func_brush") ) != null ) | |
{ | |
local flRadius = NetProps.GetPropFloat( hndBrush, "m_Collision.m_flRadius" ); | |
printl( "func_brush\t\t" + flRadius + "\t\t" + hndBrush.GetOrigin() ); | |
// In the case of "func_brush-implemented wrongways", flRadius.tostring() is | |
// useless for identification (but printed to console anyway), so it's not | |
// used for the overlay text, use origin instead. This is because wrongways | |
// are basically unanimously the same size and it's not a unique identifier | |
// when the Length() of multiple wrongway's mins/maxs is identical. | |
DebugDrawText( hndBrush.GetOrigin(), VectorToString_Valve( hndBrush.GetOrigin() ), false, 99999999 ); | |
local vecMins = NetProps.GetPropVector( hndBrush, "m_Collision.m_vecMins" ); | |
local vecMaxs = NetProps.GetPropVector( hndBrush, "m_Collision.m_vecMaxs" ); | |
DebugDrawBoxDirection( hndBrush.GetOrigin(), vecMins, vecMaxs, | |
hndBrush.GetForwardVector(), Vector( 0, 0, 255 ), | |
64, 99999999 ); | |
} | |
} | |
############################################################################################################## | |
############################################################################################################## | |
BUG REPORTS SPREADSHEET :: PROSPECTIVE MARK-OFFS | |
Will be fixed in the next anv_ commit (also w/ mutation15/19 updates): | |
42 Navmesh Low "c8m3 Versus Survival | |
43 Navmesh Low "c10m4 Versus Survival | |
44 Navmesh Medium "c11m4 Versus Survival | |
45 Navmesh Low "Part of the spawning area | |
46 Navmesh Medium "c1m2 versus survival spawning | |
47 Navmesh Medium "c1m2 versus survival spawning | |
48 Navmesh Medium "c1m2 versus survival spawning | |
49 Navmesh Medium "c1m2 versus survival spawning | |
51 Map Medium "Tanks sometimes spawn out of bounds | |
187 Mutation Medium On Taaannnkk!, players sometimes spawn out of bounds | |
218 Map Low "One-sided ladder on c10m4 | |
435 Map Low "c7m2 survivors can enter this room at the end of the map | |
Known issue: | |
c2m5_concert cases needed shadows so they don't vanish. | |
One cast shadow is on the entrance gate and ugly. | |
Tried "light_dynamic" (both spot+omni) but neither remotely "cancel out" | |
the prop's shadow. There's also these, "shadowcastdist" sounds useful | |
but doesn't change anything (likely meant for "prop_static"0: | |
Disable Receiving Shadows (disablereceiveshadows) <boolean> | |
Prevent the entity from receiving shadows on itself. | |
Shadow Cast Distance (shadowcastdist) <integer> | |
Sets how far the entity casts dynamic shadows. 0 means | |
default distance from the shadow_control entity. | |
Which don't help. Future options to try: | |
1. Script to toggle EnableShadow + DisableShadow whenever a | |
client joins the server? Yeah, right... | |
2. Spawn as a prop_physics_override and immediately DisableMotion, | |
then also DisableShadow -- surely physics props are immune to | |
the vanishing absurdity ?? | |
3. Remove the props -- can still get stuck by chopper on them anyway. | |
But they are unique, and reference Earl's Gator Village. | |
############################################################################################################## | |
############################################################################################################## | |
BUG REPORTS SPREADSHEET :: FUTURE TARGETS IN SIGHT | |
40 Navmesh Low "c14m1 infected stuckspot: | |
https://cdn.discordapp.com/attachments/759144970916986890/759201730280947712/VpJrLm0.png" Yes Unknown FALSE Public jcb 26/09/2020 https://discord.com/channels/675053405751738390/759144970916986890/759201730428141590 | |
84 Scripting Low Smokers can grab you through the truck on gunshop (truck is non-solid for S.I.) No Unknown FALSE Public Gents 27/09/2020 https://discord.com/channels/675053405751738390/758781098871226388/759845151605653554 | |
91 Navmesh Medium "In Dead Center survival gun shop. If you stay in the booth in the store, Tanks will get stuck | |
trying to get into the front of the booth." No Unknown FALSE Public NF 27/09/2020 https://discord.com/channels/675053405751738390/759144970916986890/759521280424149003 | |
94 Navmesh Low "Survivor bots get stuck on this spot on c8m5: | |
https://i.gyazo.com/39b22d1e59d51fa6f4c6bd4a95a3fccc.jpg" No Unknown FALSE Public jcb 27/09/2020 https://discord.com/channels/675053405751738390/759144970916986890/759559746038136852 | |
95 Navmesh Low "c8m3 Tank gets stuck on the gas station rubble: | |
https://cdn.discordapp.com/attachments/759144970916986890/759870417857937428/20200927161301_1.jpg" Yes Unknown FALSE Public Failzz 27/09/2020 https://discord.com/channels/675053405751738390/759144970916986890/759870418042748958 | |
97 Scripting Low "This area on c11m1 lacks a kill-trigger: | |
https://cdn.discordapp.com/attachments/759530480969580584/759539438400438282/unknown.png" Yes No FALSE Public jcb 27/09/2020 https://discord.com/channels/675053405751738390/759530480969580584/759539438908342312 | |
114 Map Low "In Dead Center, there is one infected ladder that bumps into the map and prevents the player from | |
climbing said ladder. Note: this screenshot was taken at the bottommost level of the Alarm | |
sequence at the Mall level of Dead Center: | |
https://cdn.discordapp.com/attachments/758757870615003186/760124227927539722/image0.png" Yes Unknown | |
119 Navmesh Low "c12m2 survival safespot: | |
https://cdn.discordapp.com/attachments/758757870615003186/759968963483402270/20200927213034_1.jpg" Yes Unknown FALSE Public Failzz 28/09/2020 https://discord.com/channels/675053405751738390/758757870615003186/759968936892039198 | |
145 Map Low "This c13m4 ladder is very janky: | |
https://cdn.discordapp.com/attachments/758757870615003186/760942950862684240/unknown.png" Yes Unknown FALSE Public Rene 30/09/2020 https://discord.com/channels/675053405751738390/758757870615003186/760942951077118013 | |
147 Survival Low "You can grab ammo through the wall on c5m4 Float Survival: | |
https://cdn.discordapp.com/attachments/758781098871226388/760769364747616286/20200929064501_1.jpg" Yes Unknown FALSE Public Gents 30/09/2020 https://discord.com/channels/675053405751738390/758781098871226388/760769365648867394 | |
148 Navmesh Low "c2m3 versus safespot: | |
https://cdn.discordapp.com/attachments/758757870615003186/760837643448614923/unknown.png" Yes Unknown FALSE Public VladFRY 30/09/2020 https://discord.com/channels/675053405751738390/758757870615003186/760837644040142859 | |
153 Navmesh Medium "c1m2 survival Godspot: | |
https://youtu.be/ZGhSstcymfM" Yes Unknown FALSE Public Husky 01/10/2020 https://discord.com/channels/675053405751738390/758757870615003186/761011491859202080 | |
179 Navmesh Medium "c1m2 survival Godspot: | |
https://cdn.discordapp.com/attachments/758757870615003186/763106732284313650/20201006135156_1.jpg" No Unknown FALSE Public Wilson 06/10/2020 https://discord.com/channels/675053405751738390/758757870615003186/763106723103244319 | |
191 Map Medium "Some infected ladders on c2m3 are not properly climbable: | |
https://cdn.discordapp.com/attachments/758757870615003186/765050146400239646/20201011175923_1.jpg | |
https://cdn.discordapp.com/attachments/758757870615003186/765050159578480650/20201011180001_1.jpg | |
https://cdn.discordapp.com/attachments/758757870615003186/765050162333876305/20201011180010_1.jpg" Yes Unknown FALSE Public Husky 12/10/2020 https://discord.com/channels/675053405751738390/758757870615003186/765050146831466526 | |
225 Scripting Low "To be confirmed: Tanks can climb up this vending machine blocking the door on c1m2 and take | |
5000 damage upon touching the trigger: | |
https://i.gyazo.com/4dd3c3d54955a584bface656d0fcca31.jpg" No Unknown FALSE Public Tsuey 11/11/2020 https://discord.com/channels/675053405751738390/759530480969580584/775858676845641748 | |
236 Scripting Low "c10m4 safespot: | |
https://i.imgur.com/j2uE6D3.jpg" Yes No FALSE Public NF 02/12/2020 https://discord.com/channels/675053405751738390/759530480969580584/783518040464687144 | |
241 Scripting Low "c11m3 railing issue (fix available, see Discord message): | |
https://i.gyazo.com/7988cad4a2bf82fb4feb6b0fa06148b7.png" Yes Unknown FALSE Public Tsuey 10/12/2020 https://discord.com/channels/675053405751738390/759530480969580584/786716322553004032 | |
247 Scripting Medium "c1m4 survival Godspot: | |
https://www.youtube.com/watch?v=OG7AwrzUEsc" Yes Unknown FALSE Public NF 20/12/2020 https://discord.com/channels/675053405751738390/759530480969580584/790144584893202472 | |
248 Navmesh Low "c14m2 survival Godspot: | |
https://gyazo.com/227f619503099e6d777c198c977118bb.jog" Yes Unknown FALSE Public Wilson 23/12/2020 https://discord.com/channels/675053405751738390/758757870615003186/791088792508563496 | |
249 Scripting Medium "c4m2 survival Godspot: | |
https://i.gyazo.com/1722727d2e26997fe4e085a469c7f4ba.png" Yes Unknown FALSE Public Wilson 23/12/2020 https://discord.com/channels/675053405751738390/759530480969580584/791418638191558706 | |
257 Scripting Medium "Running through the elevator door on c8m4 as a ghost infected before the elevator arrives | |
can cause the infected player to sink into the ground: | |
https://www.youtube.com/watch?v=Bg-y_ClAnCM" Yes Unknown FALSE Public Rene 16/01/2021 https://discord.com/channels/675053405751738390/758757870615003186/800059518028873789 | |
287 Exploit Medium "Troll spot on The Parish finale on Tank run: | |
https://cdn.discordapp.com/attachments/758781069276348436/818625394931793950/20210308201753_1.jpg" Yes Unknown FALSE Public Skessler 09/03/2021 https://discord.com/channels/675053405751738390/758781069276348436/818625394986057790 | |
288 Scripting Low "c13m4 Cold Stream stuckspot; accessible through getting hit by a Tank: | |
" No Unknown FALSE Public Tsuey 15/03/2021 https://discord.com/channels/675053405751738390/759530480969580584/820901665351401512 | |
289 Scripting Low "c13m4 displacement has not been fully fixed yet: | |
https://i.gyazo.com/e756cad44f37730c5af6e778df920a10.jpg" Yes Unknown FALSE Public Tsuey 15/03/2021 https://discord.com/channels/675053405751738390/759530480969580584/820944455631765525 | |
298 Navmesh Medium "c10m1 Special Infected stuckspot: | |
https://gyazo.com/68b58831541373abbba825c4cf660266.jpg" Yes Unknown FALSE Public Tsuey 21/03/2021 https://discord.com/channels/675053405751738390/759144970916986890/823237853299081216 | |
311 Scripting Low "This breakable wall didnt get a breakwall texture added like others did in the update | |
(c12m2_traintunnel): | |
https://i.imgur.com/ZvO48s5.jpg" No Unknown FALSE Public Derpduck 14/04/2021 https://discord.com/channels/675053405751738390/758781098871226388/831987779100475414 | |
327 Scripting Low "Explosion force entities on the c9m1 event still target the l4d1 entity names for the cars they | |
are supposed to launch, so instead in l4d2 the cars just get nudged slightly" Yes No FALSE Public Derpduck 29/04/2021 https://discord.com/channels/675053405751738390/759530480969580584/837271466017947708 | |
337 Navmesh Medium "c12m2 survival safespot: | |
https://cdn.discordapp.com/attachments/758757870615003186/842937109794783262/20210514195445_1.jpg" Yes Unknown FALSE Public Lleage 15/05/2021 https://discord.com/channels/675053405751738390/758757870615003186/842937110058893362 | |
344 Scripting Low "The ladder on c5m2 at -9260 -5130 -152 that got moved slightly in the update now creates a perma | |
stuck spot: | |
https://i.imgur.com/NGqB1m8.jpg" Yes No FALSE Public Derpduck 10/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/852323208161263616 | |
345 Navmesh Low "Commons tend to climb into the air on this balcony on c5m4: | |
https://i.gyazo.com/a7b051abf2990135014fe52f5ae72886.jpg" Yes No FALSE Public Niels 11/06/2021 https://discord.com/channels/675053405751738390/759144970916986890/852730862041563196 | |
347 Navmesh Low "Special Infected get stuck fairly often in this spot (c11m4): | |
https://i.imgur.com/DjKQnzC.png" Yes No FALSE Public Niels 11/06/2021 https://discord.com/channels/675053405751738390/759144970916986890/852731562055172160 | |
359 Scripting Low On c8m1 you can see and grab a melee weapon through a wall near the start saferoom: https://cdn.discordapp.com/attachments/354608543812419596/854450568277917737/unknown.png Yes No FALSE Public Tsuey 15/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/854451053998112829 | |
361 Scripting Low Perm stuck spot on c2m3: setpos_exact -2943.968750 -2.144094 166.096588;setang_exact 61.129417 18.613209 0.000000 https://i.imgur.com/ALQXTfH.jpg Yes No FALSE Public Failzz 16/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/854732076053430314 | |
362 Scripting Low Perm stuck spot on c11m4 (survival mode): setpos_exact 128.662277 4377.625000 40.301613;setang_exact 55.169212 -154.449280 0.000000 https://i.imgur.com/fIarCtT.jpg Yes No FALSE Public Failzz 16/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/854732076053430314 | |
363 Modding Low Perm stuck spot c10m3: setpos_exact -10141.968750 -2983.987061 145.107010;setang_exact 22.341049 12.080043 0.000000 NOTE: This model always has perm stuck spots. Better to be fixed in the model collision https://i.imgur.com/YH1ERjn.jpg Yes No FALSE Public Failzz 16/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/854732076053430314 | |
364 Scripting Low c10m3: smoker tongue targets survivors through the floor but can't actually connect. If you pull from another angle the tongue can clip through the floor https://imgur.com/a/f4U6lqW Yes No FALSE Public Failzz 16/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/854733151523569674 | |
365 Scripting Low c11m2 no kill trigger if people get death charged oob here. https://i.imgur.com/5kXpk7b.jpeg Yes No FALSE Public Failzz 16/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/854733595930001458 | |
398 Scripting Medium On c7m1 tanks can be lit on fire before exiting the train car Yes No FALSE Public Rene 25/06/2021 https://discord.com/channels/675053405751738390/758781038502740009/858065173288583199 | |
399 Scripting Low On c1m3 there is a poorly placed nav blocker in the event area which causes pathing issues https://cdn.discordapp.com/attachments/758781098871226388/858336531202179072/unknown.png Yes No FALSE Public Nescius 26/06/2021 https://discord.com/channels/675053405751738390/758781098871226388/858336531579273226 | |
402 Scripting Low On c8m3 the filter for a trigger to play helicopter sounds after exiting the sewer is missing from the map completely, "filter_helicopter" Yes No FALSE Public Derpduck 28/06/2021 https://discord.com/channels/675053405751738390/759530480969580584/859122310735724574 | |
413 Scripting Low "This building compartment does not appear to block line of sight: | |
https://www.youtube.com/watch?v=2drQhybTOXg" Yes No FALSE Public Niels 03/07/2021 https://discord.com/channels/675053405751738390/758757870615003186/860949623245242369 | |
418 Scripting Low "These 2 ladders after the alarm car on c14m1 can be hard to climb sometimes: | |
https://i.imgur.com/WsITuAP.jpeg | |
https://i.imgur.com/RGPkbGM.jpeg" Yes No FALSE Public Derpduck 06/07/2021 https://discord.com/channels/675053405751738390/758757870615003186/861971878439944232 | |
428 Scripting Low "Valve forgot to update this ""Tank"" filter in the l4d2 port of death toll, the value for tank in | |
l4d1 is the value for Jockey in l4d2. | |
Not really sure why they wanted this one specific window in the tower to only be broken by Tanks, | |
but hey. The window has breakable type set to Tank only also, so it isn't breakable by either of | |
them: | |
https://i.imgur.com/Jm6QbR5.png" Yes No FALSE Public Derpduck 09/07/2021 https://discord.com/channels/675053405751738390/862009673581592576/863049043164790805 | |
429 Scripting Low "c14m2 permastuck (versus specific) | |
setpos_exact -2548.628906 4572.107910 505.589264: | |
https://i.imgur.com/dNtoHz3.png" Yes No FALSE Public Failzz 09/07/2021 https://discord.com/channels/675053405751738390/862009673581592576/863086793010970674 | |
436 Map Low "c10m3 falling between the barricades is a perma-stuck (infected only): | |
https://i.imgur.com/kZtp7ai.jpeg" Yes No FALSE Public Derpduck 10/07/2021 https://discord.com/channels/675053405751738390/862009673581592576/863390930971131914 | |
END | |
****************************************************************************************************/ | |
############################################################################################################## | |
############################################################################################################## | |
// FRED VERSION 1 -- RUNS ACROSS, LEGS DON'T MOVE, ANGLE MAY BE WRONG, I'M NOT 100% SOLD | |
function fred_version1() | |
{ | |
// Fire once and only for Clients, both Survivor and Infected players. | |
// Scurries away after 1 second when viewed at any angle (-1). | |
make_prop( "dynamic", "_fred", "models/props_fairgrounds/alligator.mdl", "13099 11539 -25", "0 120 0", "shadow_no", "solid_no" ); | |
SpawnEntityFromTable( "func_movelinear", | |
{ | |
targetname = g_UpdateName + "_fred_movelinear", | |
spawnflags = 0, | |
movedistance = 200, | |
speed = 80, | |
startposition = 0, | |
movedir = Vector( 0, -148, 0 ), | |
origin = Vector( 13099, 11539, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred", "SetParent", g_UpdateName + "_fred_movelinear" ); | |
SpawnEntityFromTable( "trigger_look", | |
{ | |
targetname = g_UpdateName + "_fred_triglook", | |
target = g_UpdateName + "_fred", | |
spawnflags = 129, | |
LookTime = 1, | |
FieldOfView = -1, | |
origin = Vector( 13072, 11520, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "mins -42 -38 -480" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "maxs 42 38 0" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "solid 2" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Open::0:-1" ); | |
} | |
// FRED VERSION 2 -- HE BACKS AWAY AND HIDES, QUICKER THIS TIME, MORE SUBTLE | |
function fred_version2() | |
{ | |
// Fire once and only for Clients, both Survivor and Infected players. | |
// Scurries away after 1 second when viewed at any angle (-1). | |
make_prop( "dynamic", "_fred", "models/props_fairgrounds/alligator.mdl", "13103 11543 -25", "0 125 0", "shadow_no", "solid_no" ); | |
SpawnEntityFromTable( "func_movelinear", | |
{ | |
targetname = g_UpdateName + "_fred_movelinear", | |
spawnflags = 0, | |
movedistance = 100, | |
speed = 100, | |
startposition = 0, | |
movedir = Vector( 0, 37, 0 ), | |
origin = Vector( 13099, 11539, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred", "SetParent", g_UpdateName + "_fred_movelinear" ); | |
// Turns out if FieldOfView is -1 then it's triggered even if staring | |
// at the ground while walking into the trigger. If 0.1, it's then only | |
// triggered when looking up, but if you walk into the trigger looking | |
// down and THEN look up, Fred will still be there and this will not work | |
// until the player steps out and back in. At value of 1 it NEVER works. | |
// At 0 it works if constantly looking down or up. At 0.01 it's the same. | |
// Suddenly, at 0.1 is when it doesn't work if looking down constantly | |
// which is desired, but does work if you enter while looking up at it. | |
// Bottom-line: At 0.1 it's too easy to "glitch" it to get a constant | |
// easy view on him. At FieldOfView -1 it at least 100% guarantees it | |
// will always fire, but also makes this equivalent to a trigger_once | |
// sort of defeating half the purpose -- regardless of LookTime of 1 or | |
// even 4 seconds, constantly staring at the ground with FieldOfView -1 | |
// will have it trigger. | |
// TopHATTwaffle Hammer Tutorial #64 "Trigger_look" Sep 12, 2010 | |
// https://www.youtube.com/watch?v=uBsi-MEAP-Q | |
// https://old.reddit.com/user/TopHATTwaffle/ | |
// Right now I'm working in whatever engine CSGO is on, as | |
// that's my favorite game. I have little reason to move to | |
// Source 2 unless it does. | |
// https://www.reddit.com/r/SourceEngine/comments/35gcl2/portal_2_making_a_trigger_look_work_when_the/ | |
// https://developer.valvesoftware.com/wiki/Trigger_look | |
// 1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions | |
// Where 0.5 would imply +/- 45 degrees. | |
// That's all she wrote. 1 for "straight ahead" does NOT work for Fred. | |
// Even noclipping into it and looking at it from any angle while still | |
// inside the trigger, NOTHING works for 1. | |
SpawnEntityFromTable( "info_target", | |
{ | |
targetname = g_UpdateName + "_fred_target", | |
origin = Vector( 13072, 11520, -256 ) | |
} ); | |
// Added an info_target to essentially alter Fred's own "origin" just | |
// in case it being outside of the map was messing with visibility. | |
// Even with the info_target the result appears to be exactly the same. | |
// It's extremely quirkly how it works, it doesn't feel like +/- 90 | |
// but rather if it's 0.1 then it almost REQUIRES being off by ~80, | |
// and if 1 it's absolutely unachievable even if I setpos_exact right | |
// into its exact origin above -- 1 for "straight ahead" NEVER works. | |
SpawnEntityFromTable( "trigger_look", | |
{ | |
targetname = g_UpdateName + "_fred_triglook", | |
target = g_UpdateName + "_fred_target", | |
spawnflags = 129, | |
LookTime = 1, | |
FieldOfView = 1, | |
origin = Vector( 13072, 11520, -25 ) | |
} ); | |
// Fred is a child so gets Killed with the movelinear. | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "mins -42 -38 -480" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "maxs 42 38 0" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "solid 2" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Open::0:-1" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Kill::2:-1" ); | |
} | |
// FRED VERSION 3 -- TBH, NO CHOICE BUT TO USE IT LIKE A TRIGGER_ONCE... SINCE | |
// HE WILL NOT SPAWN 100% OF THE TIME ANYWAY, IT'LL BE TRULY DIFFICULT TO SEE | |
// HIM, ANYWAY... ONLY THOSE "IN THE KNOW" LOOKING FOR HIM WILL, BUT THAT'S ALSO | |
// SORT OF THE POINT... HE HAS BEEN SHY AND ELUSIVE ALL THIS TIME. SINCE HE DOES | |
// MORE AGGRESSIVELY VANISH EVEN IF NOT LOOKED DIRECTLY AT, INCREASE LOOKTIME TO 1. | |
// NOTE :: On the bright side, a trigger_once isn't exactly the same -- that would | |
// possibly require a logic_timer and other "reset logic" to "count" the time the | |
// player actually spends standing in the trigger. If it was a trigger_once then | |
// just passively running through it would fall -- as it's a trigger_look, the player | |
// absolutely must be standing inside it for 1 entire second to trigger, and they | |
// have that entire 1 second to potentially look up. It's still better, so don't feel bad. | |
function fred_version3() | |
{ | |
// Fire once and only for Clients, both Survivor and Infected players. | |
// Scurries away after 1 second when viewed at any angle (-1). Fred | |
// is a child so gets Killed with the movelinear. 1 in 4 chance spawn, | |
// but Ghost Infected, Spawned Infected, and Survivors can all trigger | |
// it (all "Clients") and it's deleted after first fire, so compoundingly | |
// it'll be much more rarely-seen than this and that's OK tbh. | |
if ( RandomInt( 1, 4 ) == 4 ) | |
{ | |
make_prop( "dynamic", "_fred", "models/props_fairgrounds/alligator.mdl", "13103 11543 -25", "0 125 0", "shadow_no", "solid_no" ); | |
SpawnEntityFromTable( "func_movelinear", | |
{ | |
targetname = g_UpdateName + "_fred_movelinear", | |
spawnflags = 0, | |
movedistance = 100, | |
speed = 60, | |
startposition = 0, | |
movedir = Vector( 0, 37, 0 ), | |
origin = Vector( 13099, 11539, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred", "SetParent", g_UpdateName + "_fred_movelinear" ); | |
SpawnEntityFromTable( "trigger_look", | |
{ | |
targetname = g_UpdateName + "_fred_triglook", | |
target = g_UpdateName + "_fred", | |
spawnflags = 129, | |
LookTime = 1, | |
FieldOfView = -1, | |
origin = Vector( 13072, 11520, -25 ) | |
} ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "mins -42 -38 -480" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "maxs 42 38 0" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "solid 2" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Open::0:-1" ); | |
EntFire( g_UpdateName + "_fred_triglook", "AddOutput", "OnTrigger anv_mapfixes_fred_movelinear:Kill::2:-1" ); | |
} | |
} | |
/***************************************************************************************************/ | |
############################################################################################################## | |
############################################################################################################## | |
Original filename before GITHUB GIST: | |
\Program Files (x86)\Steam\steamapps\common\Left 4 Dead 2\left4dead2\scripts\vscripts\ | |
z_tankstuck_spots.nut | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## | |
############################################################################################################## |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment