L4D2 Level Design/Wandering Witch: Difference between revisions
No edit summary |
(added section about switching behaviour at runtime) |
||
Line 10: | Line 10: | ||
[[Image:L4D2_witchwander_timeofday.png|float|center]] | [[Image:L4D2_witchwander_timeofday.png|float|center]] | ||
==Changing Behaviour at runtime== | |||
If you would like to have both standing and sitting witches, or randomly pick which to use, you can do so by using a vscript. | |||
Create a text file called '''Witch_behaviour.nut''' (or any sensical name) and put it into the scripts/vscripts folder.<br> | |||
The script should contain the following: | |||
function WitchWalk(){ | |||
worldspawn_timeofday <- [ | |||
"3" | |||
] | |||
worldspawn <- Entities.FindByClassname (null, "worldspawn"); | |||
local i = RandomInt(0,worldspawn_timeofday.len()-1); | |||
printl("TimeOfDay is "+worldspawn_timeofday[i]); | |||
printl( worldspawn.__KeyValueFromString("timeofday",worldspawn_timeofday[i]) ); | |||
} | |||
function WitchSit(){ | |||
worldspawn_timeofday <- [ | |||
"0" | |||
] | |||
worldspawn <- Entities.FindByClassname (null, "worldspawn"); | |||
local i = RandomInt(0,worldspawn_timeofday.len()-1); | |||
printl("TimeOfDay is "+worldspawn_timeofday[i]); | |||
printl( worldspawn.__KeyValueFromString("timeofday",worldspawn_timeofday[i]) ); | |||
} | |||
{{Note|This script is based on this [[L4D2_Vscript_Examples#Changing_witch_movement_type_on_map_load|Vscript Example]], but merged to one script and changed function names to make more sense.}} | |||
Next, place a [[logic_script]] entity into your map, using "Witch_behaviour" in the "Entity Scripts" field. | |||
Any entity capable of firing [[Inputs and Outputs|outputs]], such as [[logic_timer]], [[trigger_once]], [[func_button]], [[logic_case]], ect. can have the following output to change the behaviour of the next spawned witches until changed:<br> | |||
'''Sitting Witch''' | |||
Target entities named: <logic_script entity name> | |||
Via this input: RunScriptCode | |||
With a parameter override of: WitchSit() | |||
'''Wandering Witch''' | |||
Target entities named: <logic_script entity name> | |||
Via this input: RunScriptCode | |||
With a parameter override of: WitchWalk() | |||
{{note|This will not make a wandering witch sit down or vice versa.}} | |||
You could also make an intricate setup of a [[logic_case]] randomly picking between witch behaviours and spawns them one after another, to get a map such as the Sugarmill, but with both sitting and wandering witches. | |||
{{NavBar|L4D2 Level Design/Scavenge Maps |L4D2 Level Design|L4D2 Level Design/Instructor Hints}} | {{NavBar|L4D2 Level Design/Scavenge Maps |L4D2 Level Design|L4D2 Level Design/Instructor Hints}} | ||
[[Category:Left 4 Dead 2]] | [[Category:Left 4 Dead 2]] |
Revision as of 12:29, 1 February 2021
In L4D2, we discover that witches sit and rock themselves only at night. If there's sunlight, they wander. You can control this in your map from the Map > Map Properties... menu item.
If you change Time of day to any time of day when the sun is out, including "Dawn
", "Morning
", and "Afternoon
", witches spawned by the Director will wander.
Changing Behaviour at runtime
If you would like to have both standing and sitting witches, or randomly pick which to use, you can do so by using a vscript.
Create a text file called Witch_behaviour.nut (or any sensical name) and put it into the scripts/vscripts folder.
The script should contain the following:
function WitchWalk(){ worldspawn_timeofday <- [ "3" ] worldspawn <- Entities.FindByClassname (null, "worldspawn"); local i = RandomInt(0,worldspawn_timeofday.len()-1); printl("TimeOfDay is "+worldspawn_timeofday[i]); printl( worldspawn.__KeyValueFromString("timeofday",worldspawn_timeofday[i]) ); } function WitchSit(){ worldspawn_timeofday <- [ "0" ] worldspawn <- Entities.FindByClassname (null, "worldspawn"); local i = RandomInt(0,worldspawn_timeofday.len()-1); printl("TimeOfDay is "+worldspawn_timeofday[i]); printl( worldspawn.__KeyValueFromString("timeofday",worldspawn_timeofday[i]) ); }

Next, place a logic_script entity into your map, using "Witch_behaviour" in the "Entity Scripts" field.
Any entity capable of firing outputs, such as logic_timer, trigger_once, func_button, logic_case, ect. can have the following output to change the behaviour of the next spawned witches until changed:
Sitting Witch
Target entities named: <logic_script entity name> Via this input: RunScriptCode With a parameter override of: WitchSit()
Wandering Witch
Target entities named: <logic_script entity name> Via this input: RunScriptCode With a parameter override of: WitchWalk()

You could also make an intricate setup of a logic_case randomly picking between witch behaviours and spawns them one after another, to get a map such as the Sugarmill, but with both sitting and wandering witches.