Page 1 of 1

A building that falls down on the ground and breaks down

Posted: October 22nd, 2009, 9:27 pm
by Lennard
Hi there.

I wanna make a new singleplayer map, with an effect that you gotta place a bomb on a building, and when you trigger it, the bombs explode and the building falls down on the ground and breaks down. ( The same effect as in the first singleplayer map of Call Of Duty 2, where they place a few bombs on the building and it breaks apart in a couple parts )

Now I've been searching for the script of the SP map in CoD2, but I wasn't able to find it.

That's why I'm hoping someone here knows how to do it.

If you wanna see what I meant with the Cod2 Singleplayer map, here's a video of the gameplay.
Skip to:
7:17 for the part that I mean (ends when video ends)

link: http://www.youtube.com/watch?v=f8_ccLXg ... re=related

Thanks alot!

Re: A statue that falls down on the ground and breaks down

Posted: October 22nd, 2009, 10:09 pm
by Rezil
What video?

Re: A statue that falls down on the ground and breaks down

Posted: October 22nd, 2009, 10:13 pm
by Lennard

Re: A statue that falls down on the ground and breaks down

Posted: October 22nd, 2009, 10:38 pm
by Rezil
Well, the building collapsing is probably an animation, but you can do it with brushes aswell, precache the rumble, make the building parts as seperate brushmodels(5 parts for example,for falling down like in the vid, but put together as one and then hidden+not solid). Then precache the smoke and explosions fx for the bottom of the building. Play your fx's along with the rumble, add some cool sound effects and move the parts down slowly.

Re: A statue that falls down on the ground and breaks down

Posted: October 22nd, 2009, 10:46 pm
by Rezil
by the way, I believe this is the script(the building exploding part anyway):

Code: Select all

buildingExplodes()
{
	maps\demolition_fx::createWallShredExploders();
	wait (2.0);
	demoStart = getentarray ("demo_start","targetname");
	demoBack = getentarray ("demo_back","targetname");
	demo1 = getent ("demo_1","targetname");
	demo2 = getent ("demo_2","targetname");
	demo3 = getent ("demo_3","targetname");
	demo4 = getent ("demo_4","targetname");
	demo5 = getent ("demo_5","targetname");
	demo_wall = getent ("demo_wall","targetname");
	rubble = getent ("demo_base_rubble","targetname");
	demoBase = getent ("demo_base","targetname");
	demoBase2 = getent ("demo_base2","targetname");
	demoBaseChunk = getent ("demo_base_chunk","targetname");
	level.eq_org = (7088, 754, 384);
	earthquake(0.2, 5, level.eq_org, 5000);

	if (level.showExploder)
		exploder(20);
	level notify ("stopGermanPlanning"); // stops german planning sound fx
	getent ("explosion_sound","targetname") playsound ("demolition_demoexplosion");
	ai = getaiarray();
	trigger = getent("demolition_death_trigger","targetname");
	for (i=0;i<ai.size;i++)
	{
		if (ai[i] istouching (trigger))
			ai[i] dodamage(ai[i].health,(0,0,0));
	}
	if (level.player istouching (trigger))
		level.player dodamage (level.player.health, (0,0,0));
	if (level.showExploder)
		exploder(1);
	quickQuake();

	if (level.showExploder)
		exploder(2);
	quickQuake();
//	demoBase hide();
	if (level.showExploder)
		exploder(3);
	quickQuake();
	wait (0.5);

//	demoStart hide();

	if (level.showExploder)
		exploder(21);
	quickQuake();
	wait .25;

	earthquake(0.35, 14, level.eq_org, 5000);

	ai = getaiarray("axis");
	for (i=0;i<ai.size;i++)
		ai[i] dodamage(ai[i].health +5, (0,0,0));
	maps\_spawner::kill_spawnerNum(1);
	getent ("death_point","targetname") thread explosionDamage();
	demo1 thread moveRotate(-10, 0);	
	thread chunkSpawnStart(level.build_brick[10], "brick_spawn_short", demo1, 10, (-30,270,0), 0.15);
	demo1 show();
	demo2 show();
	demo3 show();
	demo4 show();
	demo5 show();
	for (i=0;i<demoStart.size;i++)
		demoStart[i] delete();
	array_thread (demoBack, ::shower);
	demoBase show();
	demoBase solid();
	demoBaseChunk show();
//	demo_wall show();

	exploder(19);

	array_thread(getentarray("building_glow","script_noteworthy"), ::deleter);
	array_thread(getentarray("demo_start_model","targetname"), ::deleter);
	level notify ("stop fx" + "lantern_stop");
	wait (0.45);
	wait (0.25);
/*
	if (level.showExploder)
		exploder(4);
*/
	wait .25;

	if (level.showExploder)
		exploder(22);
	
	demo2 thread moveRotate(-15, -5);	
	offsetTimer = 0.3;
	thread chunkSpawnStart(level.build_brick[20], "brick_spawn_short", 	demo2, 2.4, (-30,285,0), 0.35);
	thread chunkSpawnStart(level.build_brick[25], "brick_spawn_short", 	demo2, 1, (-30,285,0), 0.35);
	wait (offsetTimer);
	chunkSetFX(level.build_brick[20], "brick_spawn_long");
	chunkSetFX(level.build_brick[25], "brick_spawn");
//	thread chunkSpawnStart(level.build_brick[20], "brick_spawn_long", 	demo2, 2-offsetTimer, (-30,270,0), 0.15);
//	thread chunkSpawnStart(level.build_brick[25], "brick_spawn", 		demo2, 1-offsetTimer, (-30,270,0), 0.15);

	wait (0.65 - offsetTimer);
/*
	if (level.showExploder)
		exploder(5);
*/
	rubble show();
	rubble solid();
	rubble moveto (rubble.origin + (0,0,level.movelength), 6, 2, 4);
	wait .25;
	wait (0.65);
	if (level.showExploder)
		exploder(23); // 3rd bricks
	demo3 thread moveRotate(-20, -10);
	thread chunkSpawnStart(level.build_brick[30], "brick_spawn_short", demo3, 2, (-30,270,0), 0.25);
	wait .24;
	chunkSetFX(level.build_brick[30], "brick_spawn");
/*
	if (level.showExploder)
		exploder(6);
*/
	if (level.showExploder)
		exploder(24);
	demo4 thread moveRotate(-10, -40);	
//	thread chunkSpawnStart(level.build_brick[40], demo4, 1.5, (-30,350,0));
	thread chunkSpawnStart(level.build_brick[40], "brick_spawn", demo4, 2, (-30,340,0), 0.25);
	wait (0.65);
	array_thread (demoBack, ::deleter);
	demoBase2 show();
	demoBase2 solid();
	demo5 thread moveRotate(-10, 0);	 // -10 -10
	demo_wall delete();


/*
	
//	demo5 thread moveRotate();	
	demo5a thread moveRotateFall(7, 1, -4000);	
	wait (0.15);
	demo5b thread moveRotateFall(6, -1, 2000);	
	wait (0.35);
	demo5c thread moveRotateFall(5, 1, -2000);
	wait (0.35);
	demo5d thread moveRotateFall(4, 1, -2000);	
	wait (0.35);
	demo5e thread moveRotateFall(3, 1, -2000);	
	wait (0.35);
	demo5f thread moveRotateFall(2, 1, -2000);	
	wait (0.35);
	demo5g thread moveRotateFall(1, 1, -2000);	
*/
	flag_set ("explosion_done");
	if (getcvar("start") != "boom")
		flag_wait("chunk_falls");
	else
		wait (15);
	
	demoBaseChunk playsound ("demolition_brick_crumble");
	demoBaseChunk moveto (demoBaseChunk.origin + (0,0,-3000), 4, 1);
	demoBaseChunk rotatevelocity((-1500,0,0), 6, 4);
	wait (1.0);
	demoBaseChunk playsound ("demolition_brick_hitsground");
}

Re: A statue that falls down on the ground and breaks down

Posted: October 23rd, 2009, 11:45 am
by Lennard
I will try it out, thx alot for the replies!

Re: A statue that falls down on the ground and breaks down

Posted: October 23rd, 2009, 11:50 am
by Lennard
I quickly made 5 walls without any details, like doors and stuff. And made them all a script_brushmodel.

1st wall
classname: script_brushmodel
targetname: demo1
2nd wall
classname: script_brushmodel
targetname: demo2
3th wall
classname: script_brushmodel
targetname: demo3
4th wall
classname: script_brushmodel
targetname: demo4
5th wall
classname: script_brushmodel
targetname: demo5

and now ?

Re: A building that falls down on the ground and breaks down

Posted: October 23rd, 2009, 7:59 pm
by Drofder2004
And now you script the animation. In vCoD, no animations are used in MP, and each building block must be individually made to look like it is breaking apart.