Call of Duty 5: Collision Brushes

From COD Modding & Mapping Wiki
Jump to navigation Jump to search

This tutorial will explain how to spawn colliders onto models dynamically spawned in a Level. Thanks to Tally for the find!

Availaible Collision Brushes

Here is a list of the Collision Brushes from stock:

  • collision_geo_32x32x10
  • collision_geo_32x32x32
  • collision_geo_32x32x128
  • collision_geo_64x64x10
  • collision_geo_64x64x64
  • collision_geo_64x64x128
  • collision_geo_64x64x256
  • collision_geo_128x128x10
  • collision_geo_128x128x128
  • collision_geo_256x256x10
  • collision_geo_256x256x256
  • collision_geo_512x512x10
  • collision_geo_512x512x512
  • collision_geo_cylinder_32x128
  • collision_geo_ramp
  • collision_geo_sphere_32
  • collision_geo_sphere_64
  • collision_wall_32x32x10
  • collision_wall_64x64x10
  • collision_wall_128x128x10
  • collision_wall_256x256x10
  • collision_wall_512x512x10


Example

In the level GSC file for mp_airfield, add this:

        spawn_model( "test", "prop_flag_russian", (1886, 2493, 8), (0,0,0) );
	spawncollision( "collision_geo_32x32x128","collider",(1886, 2493, 8), (0,0,0) );

And add the spawn_model() method at the bottom of the GSC file:

spawn_model( name, model, origin, angles )
{
	if( !isdefined(model) || !isdefined(name) || !isdefined(origin) )
		return undefined;

	if( !isdefined(angles) )
		angles = (0,0,0);

	spawn = spawn ("script_model",(0,0,0));
	spawn.origin = origin;
	spawn setmodel (model);
	spawn.targetname = name;
	spawn.angles = angles;

	return spawn;
}

Full GSC for mp_airfield after this:

main()
{
	maps\mp\mp_airfield_fx::main();
	maps\mp\createart\mp_airfield_art::main();	

	maps\mp\_load::main();
	
	//maps\mp\mp_airfield_amb::main();

	maps\mp\_compass::setupMiniMap("compass_map_mp_airfield");

	// If the team nationalites change in this file,
	// you must update the team nationality in the level's csc file as well!
	game["allies"] = "marines";
	game["axis"] = "japanese";
	game["attackers"] = "axis";
	game["defenders"] = "allies";
	game["allies_soldiertype"] = "pacific";
	game["axis_soldiertype"] = "pacific";

	setdvar( "r_specularcolorscale", "1" );

	setdvar("compassmaxrange","2100");

	game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_AIRFIELD_A";
	game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_AIRFIELD_B";
	game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_AIRFIELD_C";
	game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_AIRFIELD_D";
	game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_AIRFIELD_E";

	game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_AIRFIELD_A";
	game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_AIRFIELD_B";
	game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_AIRFIELD_C";
	game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_AIRFIELD_D";
	game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_AIRFIELD_E";

	
	// enable new spawning system
	maps\mp\gametypes\_spawning::level_use_unified_spawning(true);
	
	createSpawnpoint( "mp_ctf_spawn_allies", (2803, 2929, 42), 4 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (2736, 2869, 42), 270.6 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (4553, 2384, -34), 135 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (2649.5, 1903, 136), 227.1 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (3309.5, 1355.5, -21.5), 46.2 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (2364, 1611, 134), 47.1 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (2330, 1018, 33), 168.6 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (1840, 1518, 63), 212 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (1762, 942, 7), 150 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (1540, 694, -5), 152.7 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (1158, 655, 5), 99.3 ); 
	createSpawnpoint( "mp_ctf_spawn_allies", (3790, 2227.5, 10), 60 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1290, 5880, 188), 342.8 );
	createSpawnpoint( "mp_ctf_spawn_axis", (1680, 5834, 37), 291.8 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (949, 5739, 37), 0 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1322, 5428, 181), 240 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1616, 5376.5, 16), 290 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (2284, 5424, 28), 270 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (2934, 5259, 50), 318.6 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1412, 4865, 42), 281.8 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (2040, 4468, -78), 90 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (380, 4535, 34), 270 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (785, 4515, 16), 270 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1947, 4178, 1), 0 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1402, 4106, 26), 335.6 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1304, 3666, 13), 313.4 ); 
	createSpawnpoint( "mp_ctf_spawn_axis", (1771, 3295, 25), 231.2 );

        spawn_model( "test", "prop_flag_russian", (1886, 2493, 8), (0,0,0) );
	spawncollision( "collision_geo_32x32x128","collider",(1886, 2493, 8), (0,0,0) );
					
}

createSpawnpoint( classname, origin, yaw )
{
	spawnpoint = spawn( "script_origin", origin );
	spawnpoint.angles = (0,yaw,0);
	
	if ( !isdefined( level.extraSpawnpoints ) )
		level.extraSpawnpoints = [];
	if ( !isdefined( level.extraSpawnpoints[classname] ) )
		level.extraSpawnpoints[classname] = [];
	level.extraSpawnpoints[classname][ level.extraSpawnpoints[classname].size ] = spawnpoint;
}

spawn_model( name, model, origin, angles )
{
	if( !isdefined(model) || !isdefined(name) || !isdefined(origin) )
		return undefined;

	if( !isdefined(angles) )
		angles = (0,0,0);

	spawn = spawn ("script_model",(0,0,0));
	spawn.origin = origin;
	spawn setmodel (model);
	spawn.targetname = name;
	spawn.angles = angles;

	return spawn;
}

This gives you a solid Russian flag in mp_airfield which you cant walk through: