Call of Duty 5: Breakable Windows
Tutorial by Badman adapted from COD4 for CODWAW; This is to show you how to add destructible Windows in your levels
The Script
- Create a new file called _breakable_windows.gsc in:
C:\Program Files\Activision\Call of Duty - World at War\raw\maps\mp\
- In the file copy paste this code:
// *************************************************************************************************************
// Destructible Window Script Version 1.1 by BadMan
// Latest Update: Sunday, 30th November 2008
// *************************************************************************************************************
// *************************************************************************************************************
// Original Version 1.1 by -=FD=-
// Latest Update: Friday, 22nd February 2008
// *************************************************************************************************************
//
// This Script allows the use of breakable windows after a certain damage it will breaks
// This Tutorial tries to remain as simple as possible.
// The Tutorial contains one “broken” - status for the window (as e.g. with the cars!)
// In order to change the value of the damage, which the window can sustain,
// you must adjust the value with ' targetdamage' value.
// Credits: Tally, which helped me with the starting of the Script.
// Credits: noobCODmapper and Ghost Death for the Script on modsonline.com, which inspired me for this.
// Credits: IW for this great Game and the release of the tools!
main()
{
windfx = loadfx ("maps/sniper/fx_glass_break");
windtrigs = getentarray("window1","targetname");
for(i=0; i<windtrigs.size; i++)
{
windtrigs[i] thread dowindow(windfx);
}
}
dowindow(windfx)
{
targetdamage = 80;
totaldamage = 0;
WindowShattered = false;
WindowShatteredtwo = false;
WindowBroken = false;
self enablegrenadetouchdamage();
NormalState = getent(self.target,"targetname");
ShatteredState = getent(NormalState.target,"targetname");
ShatteredState hide();
ShatteredStatetwo = getent(shatteredState.target,"targetname");
ShatteredStatetwo hide();
BrokenState = getent(shatteredStatetwo.target,"targetname");
BrokenState hide();
while(!windowbroken)
{
self waittill ("damage", amount,attacker, direction_vec, point, type);
totaldamage+=amount;
if(totaldamage>targetdamage || getdamagetype(type)=="melee")
{
WindowBroken = true;
}
if(!WindowShattered)
{
NormalState delete();
ShatteredState show();
WindowShattered = true;
}
else if(!WindowShatteredtwo)
{
ShatteredState delete();
ShatteredStatetwo show();
WindowShatteredtwo = true;
}
}
BrokenState show();
self playsound("glass_pane_break");
PlayFX(windfx, BrokenState.origin );
ShatteredState delete();
ShatteredStatetwo delete();
self delete();
}
getDamageType(type)
{
if(!isdefined(type)) { return "unknown"; }
type = tolower(type);
switch(type)
{
case "mod_melee":
case "mod_crush":
case "melee":
return "melee";
default:
return "other";
}
}
Map GSC/Zone File
- Open your main Map gsc file and add the following right after maps\mp\_load::main();
maps\mp\_breakable_windows::main();
- Update Zone File by adding the following lines:
rawfile,maps/mp/_breakable_windows.gsc
fx,maps/sniper/fx_glass_break
In Radiant
- The Tutorial assumes you have the map/Building done and have an opening to place the Window Models
- XModels in use are:
breakable_window2_pristine breakable_window2_brkn1 breakable_window2_brkn2 breakable_window2_brkn3
- Add the first Model (breakable_window2_pristine) into the map by right-clicking on 2D window > Misc > Model;
- With the model still selected right-click in the 2D window > script > model
- Now you can adapt the building/wall opening to the window and/or the window to the opening on the building/wall
The Window opening size is 64Units in Height and 56Units in Width
- Now for the trigger, using the Trigger Texture Tool cover the window model
- With the trigger selected right-click in the 2D window > Trigger > Damage
- You now need to add a targetname value for the Trigger, with the Trigger selected press N and add the key/values
Key : targetname Value : window1
- Now we must add the broken models for the different states of the damaged window; An easy way to do this is to place the Radiant Grid on 32Units so that you can easily move the models back to their origin, otherwise it gets confusing;
- Select the First Window model you add and press space to copy it 3 more Times, Each time move the new model so that you can see clearly;
- Now change the model and add targetname like this:
model = breakable_window2_pristine model = breakable_window2_brkn1 model = breakable_window2_brkn2 model = breakable_window2_brkn3
- Now to connect all this!
- Select the Trigger created then the first Window model and press W to connect them
- Deselect all then select the First window model then the second window model and again hit W
- Deselect all then select the second window model then the third one and again hit W
- Finally deselect all and select the third then fourth model and Hit W
- It should look like this:
- Now place back each model on top of the first Window
- Dont forget to clip the main window so no-one can go through
Note that you can use less model if you like;
- Compile and test!
Files
- You can download the script and prefab used for this tutorial HERE
Sources: Opferlamm-Clan Board