MODSon[line.com] Wiki - Beta 1.0
World at War: SP Nazi Zombies
From MODSonline Wiki
Contents |
[edit] Player Setup
Radiant
You will need:
1 x info_player_start
4 x script_struct (4 or more means random spawning?)
Script_struct Keys and Values:
"targetname" "initial_spawn_points"
Note: Re-spawning seems to be handled by any Alive players position (info_player_respawn appears useless)
[edit] Treasure Chest (random box)
Some things in nazi_zombie are ready made prefabs:
map_source/_prefabs/zombiemode/treasure_chest.map
[edit] Weapons Cabinet
map_source/_prefabs/zombiemode/weapon_cabinet.map
[edit] Buyable Weapons
(prefab link coming)
Weapon Decal
There are decals for most weapons under:
textures>usage>signs textures>locale>decals
Weapon Model The weapon model that appears once a player buys the gun:
script_model
kvp:
classname script_model model weapon_usa_flamethrower_wet (any weapon) targetname flamer (anything, must match the triggers target)
This model should be placed infront of the decal slightly.
Buy Trigger A Trigger_use most be covering the weapon so the player gets the hint to buy it when they are near the decal.
zombie_weapon_upgrade m2_flamethrower_zombie targetname weapon_upgrade target flamer classname trigger_use
[edit] Zombie Scripts
raw/maps/yourmapname.gsc
#include common_scripts\utility;
#include maps\_utility;
main()
{
level thread maps\_callbacksetup::SetupCallbacks();
include_weapons();
include_powerups();
maps\nazi_zombie_yourmapname_fx::main();
maps\nazi_zombie_yourmapname_anim::main();
maps\_zombiemode::main();
init_sounds();
// If you want to modify/add to the weapons table, please copy over the _zombiemode_weapons init_weapons() and paste it here.
// I recommend putting it in it's own function...
// If not a MOD, you may need to provide new localized strings to reflect the proper cost.
}
init_sounds()
{
maps\_zombiemode_utility::add_sound( "break_stone", "break_stone" );
}
// Include the weapons that are only inr your level so that the cost/hints are accurate
// Also adds these weapons to the random treasure chest.
include_weapons()
{
// Pistols
//include_weapon( "colt" );
//include_weapon( "colt_dirty_harry" );
//include_weapon( "walther" );
include_weapon( "sw_357" );
// Semi Auto
include_weapon( "m1carbine" );
include_weapon( "m1garand" );
include_weapon( "gewehr43" );
// Full Auto
include_weapon( "stg44" );
include_weapon( "thompson" );
include_weapon( "mp40" );
// Bolt Action
include_weapon( "kar98k" );
include_weapon( "springfield" );
// Scoped
include_weapon( "ptrs41_zombie" );
include_weapon( "kar98k_scoped_zombie" );
// Grenade
include_weapon( "molotov" );
// JESSE: lets go all german grenades for consistency and to reduce annoyance factor
// include_weapon( "fraggrenade" );
include_weapon( "stielhandgranate" );
// Grenade Launcher
include_weapon( "m1garand_gl" );
include_weapon( "m7_launcher" );
// Flamethrower
include_weapon( "m2_flamethrower_zombie" );
// Shotgun
include_weapon( "doublebarrel" );
include_weapon( "doublebarrel_sawed_grip" );
include_weapon( "shotgun" );
// Bipod
include_weapon( "fg42_bipod" );
include_weapon( "mg42_bipod" );
include_weapon( "30cal_bipod" );
// Heavy MG
include_weapon( "bar" );
// Rocket Launcher
include_weapon( "panzerschrek" );
// Special
include_weapon( "ray_gun" );
}
include_powerups()
{
include_powerup( "nuke" );
include_powerup( "insta_kill" );
include_powerup( "double_points" );
include_powerup( "full_ammo" );
}
include_weapon( weapon_name )
{
maps\_zombiemode_weapons::include_zombie_weapon( weapon_name );
}
include_powerup( powerup_name )
{
maps\_zombiemode_powerups::include_zombie_powerup( powerup_name );
}
raw/maps/yourmapname_fx.gsc
#include maps\_utility;
#include common_scripts\utility;
main()
{
scriptedFX();
precache_createfx_fx();
footsteps();
}
footsteps()
{
animscripts\utility::setFootstepEffect( "asphalt", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "brick", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "carpet", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "cloth", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "concrete", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "dirt", LoadFx( "bio/player/fx_footstep_sand" ) );
animscripts\utility::setFootstepEffect( "foliage", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "gravel", LoadFx( "bio/player/fx_footstep_sand" ) );
animscripts\utility::setFootstepEffect( "grass", LoadFx( "bio/player/fx_footstep_sand" ) );
animscripts\utility::setFootstepEffect( "ice", LoadFx( "bio/player/fx_footstep_snow" ) );
animscripts\utility::setFootstepEffect( "metal", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "mud", LoadFx( "bio/player/fx_footstep_mud" ) );
animscripts\utility::setFootstepEffect( "paper", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "plaster", LoadFx( "bio/player/fx_footstep_dust" ) );
animscripts\utility::setFootstepEffect( "rock", LoadFx( "bio/player/fx_footstep_sand" ) );
animscripts\utility::setFootstepEffect( "sand", LoadFx( "bio/player/fx_footstep_sand" ) );
animscripts\utility::setFootstepEffect( "snow", LoadFx( "bio/player/fx_footstep_snow" ) );
animscripts\utility::setFootstepEffect( "water", LoadFx( "bio/player/fx_footstep_water" ) );
animscripts\utility::setFootstepEffect( "wood", LoadFx( "bio/player/fx_footstep_dust" ) );
}
// --- Ambient_Effects ---//
precache_createfx_fx()
{
level._effect["smoke_plume_xlg_slow_blk"] = loadfx ("maps/ber2/fx_smk_plume_xlg_slow_blk_w");
level._effect["smoke_hallway_faint_dark"] = loadfx ("env/smoke/fx_smoke_hallway_faint_dark");
level._effect["smoke_bank"] = loadfx ("env/smoke/fx_battlefield_smokebank_ling_lg_w");
level._effect["battlefield_smokebank_sm_tan"] = loadfx ("env/smoke/fx_battlefield_smokebank_ling_sm_w");
level._effect["ash_and_embers"] = loadfx ("env/fire/fx_ash_embers_light");
level._effect["smoke_window_out_small"] = loadfx ("env/smoke/fx_smoke_door_top_exit_drk");
level._effect["brush_smoke_smolder_sm"] = loadfx ("env/smoke/fx_smoke_brush_smolder_md");
level._effect["smoke_impact_smolder_w"] = loadfx ("env/smoke/fx_smoke_crater_w");
level._effect["fire_window"] = loadfx ("env/fire/fx_fire_win_nsmk_0x35y50z");
level._effect["fire_wall_100_150"] = loadfx ("env/fire/fx_fire_wall_smk_0x100y155z");
level._effect["water_heavy_leak"] = loadfx ("env/water/fx_water_drips_hvy");
level._effect["water_heavy_leak_long"] = loadfx ("env/water/fx_water_drips_hvy_long");
level._effect["wire_sparks"] = loadfx ("env/electrical/fx_elec_wire_spark_burst");
level._effect["wire_sparks_blue"] = loadfx ("env/electrical/fx_elec_wire_spark_burst_blue");
level._effect["fire_distant_150_600"] = loadfx ("env/fire/fx_fire_150x600_tall_distant");
level._effect["water_pipe_leak_md"] = loadfx ("env/water/fx_wtr_pipe_spill_md");
level._effect["water_pipe_leak_sm"] = loadfx ("env/water/fx_wtr_pipe_spill_sm");
level._effect["water_spill_fall"] = loadfx ("env/water/fx_wtr_spill_sm_thin");
level._effect["water_wake_md"] = loadfx ("env/water/fx_water_wake_flow_md");
level._effect["water_leak_runner"] = loadfx ("env/water/fx_water_leak_runner_100");
level._effect["water_wake_sm"] = loadfx ("env/water/fx_water_wake_flow_sm");
level._effect["water_wake_mist"] = loadfx ("env/water/fx_water_wake_flow_mist");
level._effect["water_splash_md"] = loadfx ("env/water/fx_water_splash_leak_md");
level._effect["debris_dust_motes"] = loadfx ("maps/ber2/fx_debris_dust_motes");
level._effect["fire_bookcase_wide"] = loadfx ("env/fire/fx_fire_bookshelf_wide");
level._effect["fire_column_creep_xsm"] = loadfx ("env/fire/fx_fire_column_creep_xsm");
level._effect["fire_column_creep_sm"] = loadfx ("env/fire/fx_fire_column_creep_sm");
level._effect["smoke_room_fill"] = loadfx ("maps/ber2/fx_smoke_fill_indoor");
level._effect["ash_and_embers_hall"] = loadfx ("maps/ber2/fx_debris_hall_ash_embers");
level._effect["fire_detail"] = loadfx ("env/fire/fx_fire_debris_xsmall");
level._effect["fire_ceiling_50_100"] = loadfx ("env/fire/fx_fire_ceiling_50x100");
level._effect["fire_ceiling_100_100"] = loadfx ("env/fire/fx_fire_ceiling_100x100");
level._effect["ash_and_embers_small"] = loadfx ("maps/ber2/fx_debris_fire_motes");
level._effect["god_rays_large"] = loadfx("env/light/fx_light_god_rays_large");
level._effect["god_rays_medium"] = loadfx("env/light/fx_light_god_rays_medium");
level._effect["god_rays_small"] = loadfx("env/light/fx_light_god_ray_sm_single");
level._effect["god_rays_small_short"] = loadfx("env/light/fx_light_god_ray_sm_shrt_single");
level._effect["god_rays_dust_motes"] = loadfx("env/light/fx_light_god_rays_dust_motes");
level._effect["fog_thick"] = loadfx("env/smoke/fx_fog_rolling_thick_600x600");
level._effect["falling_lf_elm"] = loadfx("env/foliage/fx_leaves_fall_elm");
level._effect["light_ceiling_dspot"] = loadfx ("env/light/fx_ray_ceiling_amber_dim_sm");
level._effect["dlight_fire_glow"] = loadfx ("env/light/fx_dlight_fire_glow");
level._effect["fire_static_small"] = loadfx ("env/fire/fx_static_fire_sm_ndlight");
level._effect["fire_static_blk_smk"] = loadfx ("env/fire/fx_static_fire_md_ndlight");
}
scriptedFX()
{
level._effect["large_ceiling_dust"] = LoadFx( "env/dirt/fx_dust_ceiling_impact_lg_mdbrown" );
level._effect["poltergeist"] = LoadFx( "misc/fx_zombie_couch_effect" );
}
raw/maps/yourmapname_amb.gsc
//
// file: template_amb.csc
// description: clientside ambient script for template: setup ambient sounds, etc.
// scripter:
//
#include common_scripts\utility;
#include maps\_utility;
#include maps\_ambientpackage;
#include maps\_music;
#include maps\_busing;
main()
{
//************************************************************************************************
// Ambient Packages
//************************************************************************************************
//declare an ambientpackage, and populate it with elements
//mandatory parameters are <package name>, <alias name>, <spawnMin>, <spawnMax>
//followed by optional parameters <distMin>, <distMax>, <angleMin>, <angleMax>
declareAmbientPackage( "zombies" );
addAmbientElement( "zombies", "amb_spooky_2d", 5, 8, 300, 2000 );
declareAmbientRoom( "zombies" );
//setAmbientRoomTone( "zombies", "bgt_base" );
setAmbientRoomReverb ("zombies","stoneroom", 1, 1);
//************************************************************************************************
// ACTIVATE DEFAULT AMBIENT SETTINGS
//************************************************************************************************
activateAmbientPackage( 0, "zombies", 0 );
activateAmbientRoom( 0, "zombies", 0 );
declareMusicState("SPLASH_SCREEN"); //one shot dont transition until done
musicAlias("mx_splash_screen", 12);
musicwaittilldone();
declareMusicState("WAVE_1");
musicAliasloop("mx_zombie_wave_1", 0, 4);
thread radio_init();
}
add_song(song)
{
if(!isdefined(level.radio_songs))
level.radio_songs = [];
level.radio_songs[level.radio_songs.size] = song;
}
fade(id, time)
{
rate = 0;
if(time != 0)
rate = 1.0 / time;
setSoundVolumeRate(id, rate);
setSoundVolume(id, 0.0);
while(SoundPlaying(id) && getSoundVolume(id) > .0001)
{
wait(.1);
}
stopSound(id);
}
radio_advance()
{
for(;;)
{
while(SoundPlaying(level.radio_id) || level.radio_index == 0)
{
wait(1);
}
level notify("kzmb_next_song");
wait(1);
}
}
radio_thread()
{
assert(isdefined(level.radio_id));
assert(isdefined(level.radio_songs));
assert(isdefined(level.radio_index));
assert(level.radio_songs.size > 0);
println("Starting radio at "+self.origin);
for(;;)
{
level waittill("kzmb_next_song");
println("client changing songs");
playsound(0, "static", self.origin);
if(SoundPlaying(level.radio_id))
{
fade(level.radio_id, 1);
}
else
{
wait(.5);
}
level.radio_id = playsound(0, level.radio_songs[level.radio_index], self.origin);
level.radio_index += 1;
if(level.radio_index >= level.radio_songs.size)
{
level.radio_index = 0;
}
wait(1);
}
}
radio_init()
{
level.radio_id = -1;
level.radio_index = 0;
add_song( "wtf" );
add_song( "dog_fire" );
add_song( "true_crime_4" );
add_song( "all_mixed_up" );
add_song( "dusk" );
add_song( "the_march" );
add_song( "drum_no_bass" );
add_song( "russian_theme" );
add_song( "sand" );
add_song( "stag_push" );
add_song( "pby_old" );
add_song( "wild_card" );
add_song( "" ); //silence must be last
// kzmb, for all the latest killer hits
radios = getentarray(0, "kzmb","targetname");
while (!isdefined(radios) || !radios.size)
{
wait(5); //make sure we wait around until targetname for this ent is sent over
radios = getentarray(0, "kzmb","targetname");
}
println("client found "+radios.size+" radios");
array_thread(radios, ::radio_thread );
array_thread(radios, ::radio_advance );
}
raw/maps/yourmapname_anim.gsc
#include common_scripts\utility;
#include maps\_utility;
#include maps\_anim;
#using_animtree( "generic_human" );
main()
{
// Example Anim
// level.scr_anim["intro_officer"]["intro"] = %ch_makinraid_intro_officer_a;
}
[edit] Zombie Spawns
Radiant The actor in radiant:
(actor/axis/zombie_ger_ber_sshonor)
Key Values: (never include anything in rackets in the entity dialogue)
classname actor_axis_zombie_ger_ber_sshonor model char_ger_wemcht_fullbody1
Making him a Zombie spawner:
add key values of:
script_forcespawn 1 targetname zombie_spawner_init (so he spawns when the level starts) count 9999 (number of times he can spawn) script_noteworthy zombie_spawner spawnflags 3 (this ticks spawner and forcespawn for us)
Spawners are always placed out of the players line of sight (to increase realism) and are always placed above the ground by a few units to prevent them spawning in the ground.
[edit] End Cameras
This is the camera(intermission) style view you get when all players die. The camera can be static or can move from one position to the next. There can be many cameras, the game cycles through them randomly.
Radiant
1 script_struct with kvp:
"targetname" "intermission" "speed" "10" (speed can be anything you want)
Target this first struct to a second one (no need to add more kvps to the 2nd)
The camera will now travel from the 1st to the 2nd
[edit] Zombie Radio
Radiant
misc/_prefab/zombiemode/kzmb
For the radio to function correctly a number of files are needed:
zone_source setup:
// This calls for zombie scripts including the radio include,zombiemode sound,common,yourmapname,all_sp sound,generic,yourmapname,all_sp sound,voiceovers,yourmapname,all_sp sound,requests,yourmapname,all_sp sound,weapons,audio_test_tuey,all_sp sound,character,yourmapname,all_sp sound,yourmapname,yourmapname,all_sp sound,physics,yourmapname,all_sp sound,projectiles,yourmapname,all_sp sound,destructibles,yourmapname,all_sp sound,levels,yourmapname,all_sp rawfile,maps/yourmapname_anim.gsc rawfile,maps/yourmapname.gsc rawfile,maps/yourmapname_fx.gsc rawfile,maps/yourmapname_amb.gsc rawfile,clientscripts/yourmapname.csc rawfile,clientscripts/yourmapname_amb.csc rawfile,clientscripts/yourmapname_fx.csc rawfile,clientscripts/createFX/yourmapname_fx.csc // radio effect fx,env/electrical/fx_elec_wire_spark_burst fx,env/electrical/fx_elec_wire_spark_burst_blue
Soundalias
Copy and rename the nazi_zombie_prototype.csv in 'raw/soundaliases' to 'yourmapname.csv'
Scripts
'raw\clientscripts\yourmapname_amb.csc'
//
// file: template_amb.csc
// description: clientside ambient script for template: setup ambient sounds, etc.
// scripter: (initial clientside work - laufer)
//
#include clientscripts\_utility;
#include clientscripts\_ambientpackage;
#include clientscripts\_music;
main()
{
//************************************************************************************************
// Ambient Packages
//************************************************************************************************
//declare an ambientpackage, and populate it with elements
//mandatory parameters are <package name>, <alias name>, <spawnMin>, <spawnMax>
//followed by optional parameters <distMin>, <distMax>, <angleMin>, <angleMax>
declareAmbientPackage( "zombies" );
addAmbientElement( "zombies", "amb_spooky_2d", 5, 8, 300, 2000 );
declareAmbientRoom( "zombies" );
//setAmbientRoomTone( "zombies", "bgt_base" );
setAmbientRoomReverb ("zombies","stoneroom", 1, 1);
//************************************************************************************************
// ACTIVATE DEFAULT AMBIENT SETTINGS
//************************************************************************************************
activateAmbientPackage( 0, "zombies", 0 );
activateAmbientRoom( 0, "zombies", 0 );
declareMusicState("SPLASH_SCREEN"); //one shot dont transition until done
musicAlias("mx_splash_screen", 12);
musicwaittilldone();
declareMusicState("WAVE_1");
musicAliasloop("mx_zombie_wave_1", 0, 4);
thread radio_init();
}
add_song(song)
{
if(!isdefined(level.radio_songs))
level.radio_songs = [];
level.radio_songs[level.radio_songs.size] = song;
}
fade(id, time)
{
rate = 0;
if(time != 0)
rate = 1.0 / time;
setSoundVolumeRate(id, rate);
setSoundVolume(id, 0.0);
while(SoundPlaying(id) && getSoundVolume(id) > .0001)
{
wait(.1);
}
stopSound(id);
}
radio_advance()
{
for(;;)
{
while(SoundPlaying(level.radio_id) || level.radio_index == 0)
{
wait(1);
}
level notify("kzmb_next_song");
wait(1);
}
}
radio_thread()
{
assert(isdefined(level.radio_id));
assert(isdefined(level.radio_songs));
assert(isdefined(level.radio_index));
assert(level.radio_songs.size > 0);
println("Starting radio at "+self.origin);
for(;;)
{
level waittill("kzmb_next_song");
println("client changing songs");
playsound(0, "static", self.origin);
if(SoundPlaying(level.radio_id))
{
fade(level.radio_id, 1);
}
else
{
wait(.5);
}
level.radio_id = playsound(0, level.radio_songs[level.radio_index], self.origin);
level.radio_index += 1;
if(level.radio_index >= level.radio_songs.size)
{
level.radio_index = 0;
}
wait(1);
}
}
radio_init()
{
level.radio_id = -1;
level.radio_index = 0;
add_song( "wtf" );
add_song( "dog_fire" );
add_song( "true_crime_4" );
add_song( "all_mixed_up" );
add_song( "dusk" );
add_song( "the_march" );
add_song( "drum_no_bass" );
add_song( "russian_theme" );
add_song( "sand" );
add_song( "stag_push" );
add_song( "pby_old" );
add_song( "wild_card" );
add_song( "" ); //silence must be last
// kzmb, for all the latest killer hits
radios = getentarray(0, "kzmb","targetname");
while (!isdefined(radios) || !radios.size)
{
wait(5); //make sure we wait around until targetname for this ent is sent over
radios = getentarray(0, "kzmb","targetname");
}
println("client found "+radios.size+" radios");
array_thread(radios, ::radio_thread );
array_thread(radios, ::radio_advance );
}
[edit] Zombie Blockers
Blockers are buyable obstructions in a level that move to one side in order to allow a player to move through the level/into the next room.
A blocker can be a script_brushmodel or a script_model.
Example
A buyable door would consist of:
A door made of a brush with KVPs:
classname script_brushmodel targetname door1 script_linkto 15
To make the door move out of the way you have to define a location for it to move to:
classname script_struct script_linkname 15
A condition needs to be defined in order to trigger the blocker:
classname trigger_use targetname zombie_debris target door1 script_flag zombie_cost 1000
Zombie_cost is how many points the player must spend to buy this blocker and trigger the door to move, it can be set to one of these values:
100 200 250 500 750 1000 1250 1500 1750 2000
-- --
To have this blocker spawn a zombie when bought: Add these KVPs to the script_brushmodel or script_model:
target zombie_spawner_doorspawn
Then make a spawner:
script_noteworthy zombie_spawner count 9999 script_forcespawn 1 targetname zombie_spawner_doorspawn spawnflags 3
[edit] Zombie Barricades
Barricades are normally boarded up windows or entry ways that zombies break down and then climb through in order to gain entry to the playable space. Players can repair these barricades in order to earn points and help to slow down the zombie horde.
Barricades are made up of 4 pieces. {Note|Save a single barricade and load it into your map as a prefab in order to use it multiple times}
Script_structs
Place 1 script_struct at a position above the ground and not touching anything where the zombies will approach from:
classname script_struct targetname exterior_goal
now place a second script_struct where you want your barricade to actually be and joine the 1st one to this one, slect the first one, select the second one and press "W".
Now make this second stript_struct with a radius:
height 64 radius 36 classname script_struct
This creates a radius which allows for when a player is touching it to see the "press f to build barrier" and for the zombies to know where to break down a barrier.
You can increase the radius if your having problems with zombies not knowing where the barricade is or the player not seeing the hint.
barricade Pieces
Now make the pieces (bricks/wooden planks, whatever you want) that the zombies have to break through (script_models work too!) and make your creation a script_brushmodel, you can have as few or as many pieces as you want, but bear in mind that how long the zombie takes to knock down a barrier will have a direct affect on gameplay, Treyach have used around 6 pieces per barricade.
You can now select your 1st script struct and connect it the individual pieces of the barricade one by one.
All barricade pieces must have key: "script_noteworthy" value: "window_south_1".
AI CLIP
Use a clip_ai (from textures>tools a red texture with "MON" on it) brush to cover your entrance way so that AI do not simply walk through the barrier. make it a script_brushmodel, and press N and make it a "Dynamic path". Connect the 1st script_struct to this clip brush.
[edit] Zombie Traverse and navigation
Zombies move around the environment much like regular AI through the use of pathnodes.
Place path nodes at 128 unit intervals (keeps the bsp size down) throughout the playable area of your level and create paths from the non_playable area which lead to barricades for the zombies to break though.
The wall_hop traverse works for zombies to allow them to climb over small (32 units high) obstacles. (misc/_prefab/traverse/wall_hop.map)
Note: Action nodes with 'dont_stand' (or crouch or prone) appear not to work for zombies.
[edit] Zombie Zone_source
A complete source for all zombie related stuff:
zone_source: yourmapname.csv
ignore,code_post_gfx,, ignore,common,, sound,common,yourmapname,all_sp sound,generic,yourmapname,all_sp sound,voiceovers,yourmapname,all_sp sound,requests,yourmapname,all_sp sound,weapons,audio_test_tuey,all_sp sound,character,nyourmapname,all_sp sound,yourmapname,nyourmapname,all_sp sound,physics,nyourmapname,all_sp sound,projectiles,nyourmapname,all_sp sound,destructibles,yourmapname,all_sp sound,levels,yourmapname,all_sp // for zombie specific assets,,, include,zombiemode,, // for coop players, include,common_player_us rawfile,maps/yourmapname_anim.gsc rawfile,vision/yourmapname.vision rawfile,maps/yourmapname.gsc rawfile,maps/yourmapname_fx.gsc rawfile,maps/yourmapname_amb.gsc col_map_sp,maps/yourmapname.d3dbsp xmodel,viewmodel_usa_marine_arms xmodel,viewmodel_usa_marine_player rawfile,clientscripts/yourmapname.csc rawfile,clientscripts/nyourmapname_amb.csc rawfile,clientscripts/yourmapname_fx.csc rawfile,clientscripts/createFX/yourmapname_fx.csc xanim,ch_dazed_d_death xanim,ch_dazed_c_death xanim,ch_dazed_b_death xanim,ch_dazed_a_death xanim,ch_dazed_d xanim,ch_dazed_c xanim,ch_dazed_b xanim,ch_dazed_a xmodel,skybox_zombie // WEAPONS, // regular weapons, weapon,sp/colt weapon,sp/colt_dirty_harry weapon,sp/m1garand weapon,sp/kar98k_scoped_zombie weapon,sp/kar98k weapon,sp/fraggrenade weapon,sp/m2_flamethrower_zombie weapon,sp/molotov weapon,sp/napalmblob weapon,sp/napalmbloblight weapon,sp/doublebarrel weapon,sp/m1carbine weapon,sp/doublebarrel_sawed_grip weapon,sp/gewehr43 weapon,sp/ptrs41_zombie weapon,sp/shotgun weapon,sp/stg44 weapon,sp/thompson weapon,sp/mp40 weapon,sp/bar weapon,sp/springfield weapon,sp/m1garand_gl weapon,sp/panzerschrek weapon,sp/mk2_frag weapon,sp/m7_launcher weapon,sp/walther weapon,sp/sw_357 weapon,sp/zombie_colt weapon,sp/stielhandgranate weapon,sp/ray_gun // zombie fx fx,misc/fx_zombie_couch_effect fx,env/smoke/fx_fog_zombie_amb fx,bio/player/fx_footstep_dust fx,bio/player/fx_footstep_water fx,bio/player/fx_footstep_sand fx,bio/player/fx_footstep_mud fx,env/electrical/fx_elec_wire_spark_burst fx,env/electrical/fx_elec_wire_spark_burst_blue
The zombiemode.csv (not included with the tools by default)
include,flamethrower // strings localize,zombie // viewmodel arms xmodel,viewmodel_usa_marine_arms xmodel,viewmodel_usa_marine_player // player zombie melee arms - the "weapon" weapon,sp/zombie_melee // Needed for laststand weapon,sp/fraggrenade weapon,sp/colt // zombie anims xanim,ai_zombie_attack_forward_v1 xanim,ai_zombie_attack_forward_v2 xanim,ai_zombie_attack_v1 xanim,ai_zombie_attack_v2 xanim,ai_zombie_crawl_death_v1 xanim,ai_zombie_crawl_death_v2 xanim,ai_zombie_crawl_v1 xanim,ai_zombie_death_v1 xanim,ai_zombie_death_v2 xanim,ai_zombie_door_pound_v1 xanim,ai_zombie_door_pound_v2 xanim,ai_zombie_door_tear_v1 xanim,ai_zombie_idle_v1 xanim,ai_zombie_idle_v1_delta xanim,ai_zombie_shot_arm_left xanim,ai_zombie_shot_arm_right xanim,ai_zombie_shot_leg_left_2_crawl xanim,ai_zombie_shot_leg_right_2_crawl xanim,ai_zombie_sprint_v1 xanim,ai_zombie_sprint_v2 xanim,ai_zombie_walk_fast_v1 xanim,ai_zombie_walk_fast_v2 xanim,ai_zombie_walk_fast_v3 xanim,ai_zombie_walk_v1 xanim,ai_zombie_walk_v2 xanim,ai_zombie_walk_v3 xanim,ai_zombie_walk_v4 xanim,ai_zombie_door_tear_v2 xanim,ai_zombie_walk_fast_v1 xanim,ai_zombie_walk_fast_v2 xanim,ai_zombie_walk_fast_v3 xanim,ai_zombie_sprint_v1 xanim,ai_zombie_sprint_v2 xanim,ai_zombie_crawl xanim,ai_zombie_crawl_v1 xanim,ai_zombie_crawl_death_v1 xanim,ai_zombie_crawl_death_v2 xanim,ai_zombie_crawl_sprint xanim,ai_zombie_idle_crawl xanim,ai_zombie_idle_crawl_base xanim,ai_zombie_idle_crawl_delta xanim,ai_zombie_attack_crawl xanim,ai_zombie_attack_crawl_lunge // tear anims xanim,ai_zombie_door_tear_v1 xanim,ai_zombie_door_tear_v2 xanim,ai_zombie_door_tear_high xanim,ai_zombie_door_tear_left xanim,ai_zombie_door_tear_right xanim,ai_zombie_door_tear_low // pound door animations xanim,ai_zombie_door_pound_v1 xanim,ai_zombie_door_pound_v2 // after gib shot anims xanim,ai_zombie_shot_arm_left xanim,ai_zombie_shot_arm_right xanim,ai_zombie_shot_leg_left_2_crawl xanim,ai_zombie_shot_leg_right_2_crawl // melee anims xanim,ai_zombie_attack_forward_v1 xanim,ai_zombie_attack_forward_v2 xanim,ai_zombie_attack_v1 xanim,ai_zombie_attack_v2 // idle xanim,ai_zombie_idle_v1 xanim,ai_zombie_idle_base // traverse xanim,ai_zombie_traverse_v1 xanim,ai_zombie_traverse_v2 xanim,ai_zombie_traverse_crawl_v1 rawfile,maps/_zombiemode.gsc rawfile,maps/_zombiemode_score.gsc rawfile,maps/_zombiemode_blockers.gsc rawfile,maps/_zombiemode_utility.gsc rawfile,maps/_zombiemode_spawner.gsc rawfile,maps/_zombiemode_weapons.gsc rawfile,maps/_zombiemode_powerups.gsc rawfile,maps/_zombiemode_radio.gsc rawfile,vision/zombie.vision // materials material,zombie_intro material,nazi_intro material,hud_chalk_1 material,hud_chalk_2 material,hud_chalk_3 material,hud_chalk_4 material,hud_chalk_5 // leaderboard materials material,scorebar_zom_1 material,scorebar_zom_2 material,scorebar_zom_3 material,scorebar_zom_4 material,scorebar_zom_long_1 material,scorebar_zom_long_2 material,scorebar_zom_long_3 material,scorebar_zom_long_4 // fog at edge of level fx,env/smoke/fx_fog_zombie_amb fx,env/light/fx_ray_sun_sm_short // neckstump xmodel,char_ger_honorgd_zomb_behead // head gib stuff fx,misc/fx_zombie_bloodsplat fx,misc/fx_zombie_bloodspurt // eye piece xmodel,char_ger_zombieeye // SRS 9/2/2008: for playing fx that we need to stop xmodel,tag_origin // FX for the eyes fx,misc/fx_zombie_eye_single // FX for player being a zombie fx,misc/fx_zombie_grain_cloud //zombie powerups fx,misc/fx_zombie_powerup_on fx,misc/fx_zombie_powerup_grab fx,misc/fx_zombie_powerup_wave fx,misc/fx_zombie_mini_nuke fx,misc/fx_zombie_mini_nuke_hotness xmodel,zombie_bomb xmodel,zombie_skull xmodel,zombie_x2_icon xmodel,zombie_ammocan // radio fx fx,env/electrical/fx_elec_short_oneshot xmodel,static_berlin_ger_radio
[edit] Defining the Playable Area
This is to determine whether or not a zombie is within the playable area so said zombie can(t) drop a pickup.
Radiant
Make as many brushes as you need covering the playable areas of your map, texture them with tools>trigger (we use this as a reference to what the brush does). SELECT ALL the triggers at once. Make them trigger_multiples.
targetname playable_area
[edit] Common Errors
-fill this with known errors and their answers/fixes if possible-
