1255 lines
No EOL
57 KiB
HTML
1255 lines
No EOL
57 KiB
HTML
<html>
|
||
<head>
|
||
<title>MOHAA - SDK</title>
|
||
</head>
|
||
|
||
<body>
|
||
<Font size=+1><u><b>Tug of War Tutorial</b></u></Font>
|
||
<br>
|
||
<br>
|
||
THE MAP FILE
|
||
<BR>
|
||
|
||
<p>
|
||
This tutorial shows you how to set up your map for TOW.
|
||
</p>
|
||
<br>
|
||
<p>
|
||
First you need a multiplayer map built so you can place in the TOW objectives. Once you have a map ready and your spawn points in lets begin placing the TOW objective. Your .map and .scr file names must be the same and placed in the “/maps/obj/” folder. The filename must be in this form in order for the game to read them as a TOW map: “MP_filename_TOW.map”. filename can be anything you like, but the MP_ at the beginning and the _TOW at the end are necessary.
|
||
<br>
|
||
You can place up to 5 objectives for your TOW map. For this example we are going to place 5 objectives in the level, one that destroys the axis spawn point, one that destroys the allied spawn point and three more that each side will have to fight over controlling. Objective 1 will be the allied spawn point and Objective 5 will be the axis spawn point. Objectives 2, 3 and 4 are what we are going to set up first. In our “MP_tutorial_TOW.map” we have three light switches that indicated who has control of the objective(Red light = axis, Green light = allies).
|
||
<br>
|
||
In your map file, create a brush that will be your light switch box. Now create another brush surrounding the switch. This will be your trigger. With the brush selected, right click on the grid and select “trigger” -> “use”. Press the “n” key to bring up the entities window and give your trigger a targetname by enter the below values into the Key and Value fields.
|
||
<br>
|
||
Key: setthread
|
||
<br>
|
||
Value: switch1
|
||
<br>
|
||
</p>
|
||
|
||
<p align = center>
|
||
<b><font size = -1>
|
||
Diagram 1-1 (Side View, Entity Window and 3D window)
|
||
</font></b>
|
||
<br>
|
||
<img src="TOW_map/1-1.jpg">
|
||
</P>
|
||
|
||
<p>
|
||
We have to create a TOW objective and link it to our trigger. Right click on the grid and select “func” -> “TOWObjective”. Press “n” to bring up the “Entity” window and enter the following TOW values into the Key and Value fields.
|
||
<br>
|
||
<br>
|
||
Key: $targetname
|
||
<br>
|
||
Value: switchObj1
|
||
<br>
|
||
<br>
|
||
Key: AlliesObjNum
|
||
<br>
|
||
Value: 2
|
||
<br>
|
||
<br>
|
||
Key: AxisObjNum
|
||
<br>
|
||
Value: 4
|
||
<br>
|
||
<br>
|
||
Key: ControlledBy
|
||
<br>
|
||
Value: 1
|
||
<br>
|
||
<br>
|
||
Key: ObjectiveNbr
|
||
<br>
|
||
value: 2
|
||
<br>
|
||
<br>
|
||
Select the trigger that you created while the TOWObjective is still selected and press (ctrl + k) to link the two together. Now build three more Objectives following the same steps and using these values for trigger and TOWObjectives:
|
||
</p>
|
||
|
||
<pre>
|
||
<b>Trigger</b>
|
||
Setthread switch2
|
||
|
||
<b>TOWobjective</b>
|
||
$targetname switchObj2
|
||
AlliesObjNum 3
|
||
AxisObjNum 3
|
||
ControlledBy 2
|
||
ObjectiveNbr 3
|
||
|
||
<b>Trigger</b>
|
||
Setthread switch3
|
||
|
||
<b>TOWobjective</b>
|
||
$targetname switchObj3
|
||
AlliesObjNum 4
|
||
AxisObjNum 2
|
||
ControlledBy 0
|
||
ObjectiveNbr 4
|
||
|
||
</pre>
|
||
|
||
<p align = center>
|
||
<b><font size = -1>
|
||
Diagram 1-2 (Top view)
|
||
</font></b>
|
||
<br>
|
||
<img src="TOW_map/1-2.jpg">
|
||
</P>
|
||
|
||
<p>
|
||
Now we have to add the last two TOW Objectives, the allied spawn and the axis spawn. First we will create a bomb and then we will set the TOW objective. Right click on the grid and select “script” -> “object”. Enter the following lines into the key and value:
|
||
</p>
|
||
|
||
<pre>
|
||
<b>Key</b> <b>Value</b>
|
||
$explosion_fx fx/fx_flak88_explosion.tik
|
||
$explosion_sound explode_aagun
|
||
$targetname axis_bomb
|
||
$trigger_name allie_bomb_trigger
|
||
model items//pulse_explosive.tik
|
||
</pre>
|
||
|
||
<p>
|
||
This will create your bomb. Around it create a trigger with the following values:
|
||
</p>
|
||
|
||
<pre>
|
||
<b>Key</b> <b>Value</b>
|
||
$targetname allie_bomb_trigger
|
||
</pre>
|
||
|
||
<p>
|
||
Now create a TOWObject and give it the following values:
|
||
</p>
|
||
|
||
<pre>
|
||
<b>Key</b> <b>Value</b>
|
||
$targetname Obj_alliespawnpoint
|
||
AlliesObjNum 1
|
||
AxisObjNum 5
|
||
ControlledBy 1
|
||
ObjectiveNbr 1
|
||
</pre>
|
||
|
||
<p>
|
||
Link the TOWobjective to the trigger. Now you have to set up the axis spawn point. Follow the same steps above but change all the targetnames and trigger_names to the opposite team. (allie = axis)
|
||
</p>
|
||
|
||
<pre>
|
||
<b>Key</b> <b>Value</b>
|
||
$explosion_fx fx/fx_flak88_explosion.tik
|
||
$explosion_sound explode_aagun
|
||
$targetname allie_bomb
|
||
$trigger_name axis_bomb_trigger
|
||
model items//pulse_explosive.tik
|
||
</pre>
|
||
|
||
<p>
|
||
This will create your bomb. Around it create a trigger with the following values:
|
||
<p>
|
||
|
||
<pre>
|
||
<b>Key</b> <b>Value</b>
|
||
$targetname axis_bomb_trigger
|
||
</pre>
|
||
|
||
<p>
|
||
Now create a TOWObject and give it the following values:
|
||
</p>
|
||
|
||
<pre>
|
||
<b>Key</b> <b>Value</b>
|
||
$targetname Obj_axisspawnpoint
|
||
AlliesObjNum 5
|
||
AxisObjNum 1
|
||
ControlledBy 0
|
||
ObjectiveNbr 5
|
||
</pre>
|
||
|
||
<p align = center>
|
||
<b><font size = -1>
|
||
Diagram 1-3 (Top View and 3D View)
|
||
</font></b>
|
||
<br>
|
||
<img src="TOW_map/1-3.jpg">
|
||
</P>
|
||
|
||
<p>
|
||
Your TOW map will now work if you add the script provided to it. If you would like to add lights so you know who has control of the objective, then continue reading.
|
||
<br>
|
||
Lets create the green light, that will be on when the Allies control an objective. First we will create the light bulb and then we will make the corona.
|
||
<br>
|
||
Create a brush and then press “n” to open your “Entity” window. Select from the “Entity” window “addon_static_lamp_lightbulb-caged-green” and rotate it to face the direction you want.
|
||
<br>
|
||
Next we add the corona. Create a brush and press “n” to open your “Entity” window. Select from the “Entity” window “addon_fx_corona_green-bright” and rotate it to face the direction you want. Give it a $targetname obj2_light_allie. The number after obj should correspond with the objective number you are working on(2, 3 or 4). Place the corona on top of your lightbulb and you are all set to go. Top make the red light bulb follow the same directions above but select the “red” objects instead of “green”. Also change the $targetname to obj2_light_axis. Make three sets of red and green lights and place them over their corresponding objective. Now lets move on to the script.
|
||
<br>
|
||
</p>
|
||
|
||
<br>
|
||
THE SCRIPT FILE
|
||
<br>
|
||
|
||
<p>
|
||
To get an understanding on how the scripting for TOW is read the Tug of War doc. Here we will just go over the things not covered in that doc.
|
||
</p>
|
||
|
||
|
||
<pre>
|
||
<i><font color=blue>
|
||
main:
|
||
|
||
level.script="maps/obj/MP_Tutorial_TOW.scr"
|
||
exec global/tow_dm.scr
|
||
|
||
level.gametype = int( getcvar( g_gametype ) )
|
||
|
||
//gametype 5 = Tug of War
|
||
if( level.gametype == 5 )
|
||
{
|
||
setcvar "g_obj_alliedtext1" "Protect Spawn Point"
|
||
setcvar "g_obj_alliedtext2" "Control Switch 1"
|
||
setcvar "g_obj_alliedtext3" "Control Switch 2"
|
||
setcvar "g_obj_alliedtext4" "Control Switch 3"
|
||
setcvar "g_obj_alliedtext5" "Detonate Axis Spawn Point"
|
||
|
||
setcvar "g_obj_axistext1" "Protect Spawn Point"
|
||
setcvar "g_obj_axistext2" "Control Switch 1"
|
||
setcvar "g_obj_axistext3" "Control Switch 2"
|
||
setcvar "g_obj_axistext4" "Control Switch 3"
|
||
setcvar "g_obj_axistext5" "Destroy Allied Spawn Point"
|
||
}
|
||
else
|
||
{
|
||
//Not a TOW game remove the bombs
|
||
$allie_bomb remove
|
||
$axis_bomb remove
|
||
|
||
|
||
// set scoreboard messages
|
||
setcvar "g_obj_alliedtext1" "Tow Tutorial"
|
||
setcvar "g_obj_alliedtext2" ""
|
||
setcvar "g_obj_alliedtext3" ""
|
||
setcvar "g_obj_axistext1" ""
|
||
setcvar "g_obj_axistext2" ""
|
||
setcvar "g_obj_axistext3" ""
|
||
|
||
}
|
||
|
||
//////////////////////////
|
||
level waittill prespawn
|
||
//////////////////////////
|
||
|
||
|
||
//////////////////////////
|
||
level waittill spawn
|
||
//////////////////////////
|
||
|
||
level.bRoundStarted = 0
|
||
|
||
// level.bswitch1SwitchUp = 1
|
||
// level.bswitch2SwitchUp = 1
|
||
// level.bswitch3SwitchUp = 1
|
||
level.axisFire = 1
|
||
|
||
// set the parameters for this round based match
|
||
level.dmrespawning = 1 // 1 or 0
|
||
level.dmroundlimit = 15 // round time limit in minutes
|
||
level.clockside = draw // set to axis, allies, kills, or draw
|
||
level.numObjectives = 5 // Number of objectives needed to win
|
||
level.numAxisObjectives = 0 // Number of objectives taken by the axis
|
||
level.numAlliedObjectives = 0 // Number of objectives taken by the allies
|
||
|
||
|
||
//////////////////////////
|
||
// level waittill roundstart
|
||
//////////////////////////
|
||
|
||
//If this is a tug of war game then we init all the TOW stuff
|
||
if( level.gametype == 5 )
|
||
{
|
||
//init the objectives
|
||
thread init_objectives
|
||
|
||
thread init_spawner_bombs
|
||
thread init_switch_lights
|
||
|
||
//Setup the starting team objectives
|
||
thread set_objectives
|
||
|
||
level.bRoundStarted = 1
|
||
}
|
||
|
||
|
||
end
|
||
|
||
|
||
//----------------------------------------------------------
|
||
//Destroy the allied spawner here
|
||
//----------------------------------------------------------
|
||
alliesspawnpoint:
|
||
|
||
iprintln "The Allied Spawn Point has been Destroyed!"
|
||
|
||
//Take over the objective
|
||
$Obj_alliespawnpoint TakeOver 0
|
||
level.numAxisObjectives++
|
||
level.numAlliedObjectives--
|
||
|
||
iprintln "The Allied Team Can No Longer Respawn!"
|
||
|
||
waitthread Check_End_Match
|
||
|
||
end
|
||
|
||
//----------------------------------------------------------
|
||
//Destroy the axis spawner here
|
||
//----------------------------------------------------------
|
||
axisspawnpoint:
|
||
|
||
iprintln "The Axis Spawn Point has been Destroyed!"
|
||
|
||
$Obj_axisspawnpoint TakeOver 1
|
||
level.numAlliedObjectives++
|
||
level.numAxisObjectives--
|
||
|
||
iprintln "The Axis Team Can No Longer Respawn!"
|
||
|
||
waitthread Check_End_Match
|
||
|
||
end
|
||
|
||
//----------------------------------------------------------
|
||
//control switch 1 green/red
|
||
//----------------------------------------------------------
|
||
switch1:
|
||
|
||
if( level.bRoundStarted == 1 )
|
||
{
|
||
if( parm.other.dmteam == axis )
|
||
{
|
||
if( $Obj_switch1.ControlledBy != 0 )
|
||
{
|
||
$Obj_switch1 TakeOver 0
|
||
level.numAxisObjectives++
|
||
level.numAlliedObjectives--
|
||
$obj2_light_allie hide //Turns the allied light off
|
||
$obj2_light_axis show //Turns the axis light on
|
||
iprintln "The Axis Control Switch 1!"
|
||
|
||
waitthread Check_End_Match
|
||
}
|
||
}
|
||
else if( parm.other.dmteam == allies )
|
||
{
|
||
if( $Obj_switch1.ControlledBy != 1 )
|
||
{
|
||
$Obj_switch1 TakeOver 1
|
||
level.numAlliedObjectives++
|
||
level.numAxisObjectives--
|
||
$obj2_light_axis hide //Turns the Axis light off
|
||
$obj2_light_allie show //Turns the allied light on
|
||
|
||
iprintln "The Allies Control Switch 1!"
|
||
|
||
waitthread Check_End_Match
|
||
}
|
||
}
|
||
|
||
//Update team current objectives
|
||
thread set_objectives
|
||
}
|
||
|
||
end
|
||
|
||
//----------------------------------------------------------
|
||
//control switch 2 green/red
|
||
//----------------------------------------------------------
|
||
switch2:
|
||
|
||
if( level.bRoundStarted == 1 )
|
||
{
|
||
if( parm.other.dmteam == axis )
|
||
{
|
||
if( $Obj_switch2.ControlledBy != 0 )
|
||
{
|
||
$Obj_switch2 TakeOver 0
|
||
level.numAxisObjectives++
|
||
level.numAlliedObjectives--
|
||
$obj3_light_allie hide
|
||
$obj3_light_axis show
|
||
|
||
iprintln "The Axis Control Switch 2!"
|
||
|
||
waitthread Check_End_Match
|
||
}
|
||
}
|
||
else if( parm.other.dmteam == allies )
|
||
{
|
||
if( $Obj_switch2.ControlledBy != 1 )
|
||
{
|
||
$Obj_switch2 TakeOver 1
|
||
level.numAlliedObjectives++
|
||
level.numAxisObjectives--
|
||
$obj3_light_axis hide
|
||
$obj3_light_allie show
|
||
|
||
iprintln "The Allies Control Switch 2!"
|
||
|
||
waitthread Check_End_Match
|
||
}
|
||
}
|
||
|
||
//Update team current objectives
|
||
thread set_objectives
|
||
}
|
||
|
||
end
|
||
|
||
//----------------------------------------------------------
|
||
//control switch 3 green/red
|
||
//----------------------------------------------------------
|
||
switch3:
|
||
|
||
if( level.bRoundStarted == 1 )
|
||
{
|
||
if( parm.other.dmteam == axis )
|
||
{
|
||
if( $Obj_switch3.ControlledBy != 0 )
|
||
{
|
||
$Obj_switch3 TakeOver 0
|
||
level.numAxisObjectives++
|
||
level.numAlliedObjectives--
|
||
$obj4_light_allie hide
|
||
$obj4_light_axis show
|
||
|
||
iprintln "The Axis Control Switch 3!"
|
||
|
||
waitthread Check_End_Match
|
||
}
|
||
}
|
||
else if( parm.other.dmteam == allies )
|
||
{
|
||
if( $Obj_switch3.ControlledBy != 1 )
|
||
{
|
||
$Obj_switch3 TakeOver 1
|
||
level.numAlliedObjectives++
|
||
level.numAxisObjectives--
|
||
$obj4_light_axis hide
|
||
$obj4_light_allie show
|
||
|
||
iprintln "The Allies Control Switch 3!"
|
||
|
||
waitthread Check_End_Match
|
||
}
|
||
|
||
}
|
||
|
||
//Update team current objectives
|
||
thread set_objectives
|
||
}
|
||
|
||
end
|
||
|
||
|
||
//----------------------------------------------------------
|
||
//Set the teams current objectives
|
||
//----------------------------------------------------------
|
||
set_objectives:
|
||
|
||
//First lets do the allies
|
||
if( $Obj_switch3.ControlledBy == 0 )
|
||
{
|
||
$Obj_switch3 SetCurrent 1
|
||
}
|
||
else if( $Obj_switch2.ControlledBy == 0 )
|
||
{
|
||
$Obj_switch2 SetCurrent 1
|
||
}
|
||
else if( $Obj_switch1.ControlledBy == 0 )
|
||
{
|
||
$Obj_switch1 SetCurrent 1
|
||
}
|
||
else if( $Obj_axisspawnpoint.ControlledBy == 0 )
|
||
{
|
||
$Obj_axisspawnpoint SetCurrent 1
|
||
}
|
||
|
||
//Now the Axis
|
||
if( $Obj_switch1.ControlledBy == 1 )
|
||
{
|
||
$Obj_switch1 SetCurrent 0
|
||
}
|
||
else if( $Obj_switch2.ControlledBy == 1 )
|
||
{
|
||
$Obj_switch2 SetCurrent 0
|
||
}
|
||
else if( $Obj_switch3.ControlledBy == 1 )
|
||
{
|
||
$Obj_switch3 SetCurrent 0
|
||
}
|
||
else if( $Obj_alliespawnpoint.ControlledBy == 1 )
|
||
{
|
||
$Obj_alliespawnpoint SetCurrent 0
|
||
}
|
||
|
||
end
|
||
|
||
//--------------------------------------------------------------
|
||
//init the spawner bombs
|
||
//--------------------------------------------------------------
|
||
init_spawner_bombs:
|
||
|
||
//Allied spawner bomb
|
||
$axis_bomb thread global/tow_dm.scr::bomb_thinker "axis" maps/obj/MP_Tutorial_TOW.scr::alliesspawnpoint
|
||
$allie_bomb thread global/tow_dm.scr::bomb_thinker "allies" maps/obj/MP_Tutorial_TOW.scr::axisspawnpoint
|
||
end
|
||
|
||
//-----------------------------------------------
|
||
// Blow up Allied Spawner
|
||
//-----------------------------------------------
|
||
axis_bomb_relay_explode:
|
||
|
||
self waittill trigger
|
||
thread alliesspawnpoint
|
||
end
|
||
|
||
//-----------------------------------------------
|
||
// Blow up Axis Spawner
|
||
//-----------------------------------------------
|
||
allie_bomb_relay_explode:
|
||
|
||
self waittill trigger
|
||
thread axisspawnpoint
|
||
end
|
||
|
||
//----------------------------------------------------------
|
||
//Initialize the switch lights (start all lights off)
|
||
//----------------------------------------------------------
|
||
init_switch_lights:
|
||
|
||
$obj2_light_allie hide
|
||
$obj2_light_axis hide
|
||
$obj3_light_allie hide
|
||
$obj3_light_axis hide
|
||
$obj4_light_allie hide
|
||
$obj4_light_axis hide
|
||
|
||
end
|
||
|
||
//-----------------------------------------------
|
||
// init the objectives
|
||
//-----------------------------------------------
|
||
init_objectives:
|
||
|
||
//Allied spawn point
|
||
if( $Obj_alliespawnpoint.ControlledBy == 0 )
|
||
{
|
||
level.numAxisObjectives++
|
||
}
|
||
else if( $Obj_alliespawnpoint.ControlledBy == 1 )
|
||
{
|
||
level.numAlliedObjectives++
|
||
}
|
||
|
||
//Axis spawn point
|
||
if( $Obj_axisspawnpoint.ControlledBy == 0 )
|
||
{
|
||
level.numAxisObjectives++
|
||
}
|
||
else if( $Obj_axisspawnpoint.ControlledBy == 1 )
|
||
{
|
||
level.numAlliedObjectivse++
|
||
}
|
||
|
||
//switch 1
|
||
if( $Obj_switch1.ControlledBy == 0 )
|
||
{
|
||
level.numAxisObjectives++
|
||
}
|
||
else if( $Obj_switch1.ControlledBy == 1 )
|
||
{
|
||
level.numAlliedObjectives++
|
||
}
|
||
|
||
//switch 2
|
||
if( $Obj_switch2.ControlledBy == 0 )
|
||
{
|
||
level.numAxisObjectives++
|
||
}
|
||
else if( $Obj_switch2.ControlledBy == 1 )
|
||
{
|
||
level.numAlliedObjectives++
|
||
}
|
||
|
||
//switch 3
|
||
if( $Obj_switch3.ControlledBy == 0 )
|
||
{
|
||
level.numAxisObjectives++
|
||
}
|
||
else if( $Obj_switch3.ControlledBy == 1 )
|
||
{
|
||
level.numAlliedObjectives--
|
||
}
|
||
|
||
end
|
||
|
||
//-----------------------------------------------
|
||
// init the objectives
|
||
//-----------------------------------------------
|
||
Check_End_Match:
|
||
|
||
//Allies first
|
||
if( level.numAlliedObjectives == level.numObjectives )
|
||
{
|
||
//ignore the clock
|
||
level ignoreclock 1
|
||
|
||
//if there is a bomb ticking stop it.
|
||
waitthread global/tow_dm.scr::StopBomb
|
||
|
||
//Allies win play the movie
|
||
teamwin allies
|
||
}
|
||
else if( level.numAxisObjectives == level.numObjectives )
|
||
{
|
||
//ignore the clock
|
||
level ignoreclock 1
|
||
|
||
//if there is a bomb ticking stop it.
|
||
waitthread global/tow_dm.scr::StopBomb
|
||
|
||
//Axis win do their movie and end the map
|
||
teamwin axis
|
||
}
|
||
|
||
end
|
||
|
||
|
||
|
||
</font>
|
||
</i>
|
||
</pre>
|
||
|
||
<hr>
|
||
|
||
<b>Here are some general rules and tips when creating a TOW map.</b><br>
|
||
<br>
|
||
<br>
|
||
|
||
|
||
<TABLE dir=ltr cellSpacing=0 cellPadding=0 width="100%" border=0>
|
||
<TBODY>
|
||
<TR>
|
||
<TD vAlign=top width="1%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">
|
||
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 100%"></P><!--mstheme--></FONT></TD>
|
||
<TD vAlign=top width=24></TD><!--msnavigation-->
|
||
<TD vAlign=top><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">
|
||
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B
|
||
style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 16pt">How to
|
||
Setup a Tug-of-War Map<O:P> </O:P></SPAN></B></P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN
|
||
style="FONT-SIZE: 14pt">func_TOWObjective:</SPAN><O:P> </O:P>
|
||
</B></P>
|
||
<P class=MsoNormal>This new entity type allows easy setup of the new
|
||
Tug-of-War Objectives.<SPAN style="mso-spacerun: yes"> </SPAN>This
|
||
section will document the settings for this new entity type.<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><B
|
||
style="mso-bidi-font-weight: normal">$targetname
|
||
-</B>Use this to give the objective a descriptive name.<B
|
||
style="mso-bidi-font-weight: normal"><O:P> </O:P> </B></P>
|
||
<P class=MsoNormal><B
|
||
style="mso-bidi-font-weight: normal">AlliesObjNum<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></B><SPAN
|
||
style="mso-tab-count: 1"><B
|
||
style="mso-bidi-font-weight: normal; mso-tab-count: 1">
|
||
</B></SPAN>- Assign which objective number this is for the allies.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This is important because it will
|
||
affect how the checkboxes work in the new tab score screen.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>Each objective can be a different
|
||
number for each team.<SPAN style="mso-spacerun: yes"> </SPAN>For
|
||
instance the first objective on the map may be the allied spawner.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This should be assigned as the
|
||
first allied objective but the last objective for the axis side.<B
|
||
style="mso-bidi-font-weight: normal"><O:P> </O:P> </B></P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal">AxisObjNum<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>- </B>Assign which objective number this is for the axis.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>See AlliesObjNum for more
|
||
information.<SPAN style="mso-tab-count: 1"> </SPAN><O:P>
|
||
</O:P> </P>
|
||
<P class=MsoNormal><B
|
||
style="mso-bidi-font-weight: normal">ControlledBy<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN></B>- This should be assigned to 0, 1, or 2.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>When the map starts this setting
|
||
will determine which objectives are owned by whom, and which are
|
||
neutral.<SPAN style="mso-spacerun: yes"> </SPAN>0 = Axis, 1 =
|
||
Allies, 2 = Neutral.<O:P> </O:P> </P>
|
||
<P class=MsoNormal><B
|
||
style="mso-bidi-font-weight: normal">ObjectiveNbr<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>-</B> This just needs to be a unique number that does not conflict
|
||
with the other objectives.<SPAN style="mso-spacerun: yes">
|
||
</SPAN>Typically use 0 – 5.<O:P> </O:P> </P>
|
||
<P class=MsoNormal>There are also 2 check boxes that can be checked.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>StartOn, and Respawner.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>Check the Respawner box if this
|
||
objective is to halt the team’s ability to respawn in when killed.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>For now always check the StartOn
|
||
box.<B style="mso-bidi-font-weight: normal"><O:P> </O:P> </B></P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN
|
||
style="FONT-SIZE: 14pt">Setting Up the Objectives in
|
||
MOHRadiant:</SPAN><O:P> </O:P> </B></P>
|
||
<P class=MsoNormal>Here are the steps needed to create a working
|
||
Tug-of-War Entity in MOHRadiant:<O:P> </O:P>
|
||
</P><!--mstheme--></FONT><!--msthemelist-->
|
||
<TABLE style="MARGIN-TOP: 0in" cellSpacing=0 cellPadding=0 width="100%"
|
||
border=0 type="disc"><!--msthemelist-->
|
||
<TBODY>
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Create a trigger that
|
||
will be used to set off the objective.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>All the triggers for these
|
||
maps should be trigger_multiple types.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Give your trigger
|
||
descriptive $targetname, and setthread names.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Create an entity and use
|
||
the func_TOWObjective entity type.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Setup the entity
|
||
variables described
|
||
above.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Connect the Objective
|
||
entity to the trigger.<SPAN style="mso-spacerun: yes">
|
||
</SPAN>Not the other way around.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This is VERY important.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist--></TBODY></TABLE><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN
|
||
style="FONT-SIZE: 14pt">Scripting Tug-of-War Objectives:<O:P> </O:P>
|
||
</SPAN></B></P>
|
||
<P class=MsoNormal>Every Tug-of-War map is going to have different
|
||
scripting requirements.<SPAN style="mso-spacerun: yes"> </SPAN>I’ll
|
||
document the basic things that need to be setup and show some
|
||
examples.<O:P> </O:P> </P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal">Scoreboard
|
||
Text:<O:P> </O:P></B></P>
|
||
<P class=MsoNormal>setcvar "g_obj_alliedtext1" "Allied Objective Text
|
||
1"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_alliedtext2" "Allied Objective Text
|
||
2"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_alliedtext3" "Allied Objective Text
|
||
3"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_alliedtext4" "Allied Objective Text
|
||
4"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_alliedtext5" "Allied Objective Text
|
||
5"<O:P> </O:P> </P>
|
||
<P class=MsoNormal>setcvar "g_obj_axistext1" "Axis Objective Text 1"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_axistext2" "Axis Objective Text 2"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_axistext3" "Axis Objective Text 3"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_axistext4" "Axis Objective Text 4"</P>
|
||
<P class=MsoNormal>setcvar "g_obj_axistext5" "Axis Objective Text 5"<O:P>
|
||
</O:P> </P>
|
||
<P class=MsoNormal>There are 5 objective text entries for each team.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN> The example above shows how
|
||
to setup this text.<O:P> </O:P> </P>
|
||
<P class=MsoNormal><B
|
||
style="mso-bidi-font-weight: normal">Func_TOWObjective Variables and
|
||
Functions:<O:P> </O:P> </B></P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><B
|
||
style="mso-bidi-font-weight: normal">Variables:<O:P> </O:P></B></P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><B
|
||
style="mso-bidi-font-weight: normal">ControlledBy</B><SPAN
|
||
style="mso-tab-count: 1"> </SPAN>- This is the team number that
|
||
controls the objective.<SPAN style="mso-spacerun: yes"> </SPAN></P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">Example:<O:P> </O:P>
|
||
</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in; LINE-HEIGHT: 100%">if(
|
||
$ObjectiveName.ControlledBy == 0 )</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in; LINE-HEIGHT: 100%">{</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in; LINE-HEIGHT: 100%"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>println “This objective is owned by the axis team.”</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in; LINE-HEIGHT: 100%">}<O:P>
|
||
</O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">Will check to see if the
|
||
objective named $ObjectiveName to test if it is controlled by the axis
|
||
team and if it is will print out a message indicating as much.<O:P>
|
||
</O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><B
|
||
style="mso-bidi-font-weight: normal">Functions:<O:P> </O:P></B></P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><B
|
||
style="mso-bidi-font-weight: normal">TakeOver – </B>Call this to have a
|
||
team take over the objective.<SPAN style="mso-spacerun: yes">
|
||
</SPAN>Pass it 0, 1, or 2 which represent the team taking it over.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>0 = axis, 1 = allies, 2 =
|
||
neutral.<SPAN style="mso-spacerun: yes"> </SPAN>Example:<O:P>
|
||
</O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">$ObjectiveName TakeOver
|
||
0<O:P> </O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">Will cause the objective
|
||
named $ObjectiveName to be taken over by the axis team.<O:P> </O:P>
|
||
</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><B
|
||
style="mso-bidi-font-weight: normal">SetCurrent – </B>Call this to make
|
||
this the current objective for the passed in team.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>Pass it 0, 1, or 2 to represent
|
||
the team that sets this as the priority objective.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This will cause the compass for
|
||
the passed in team to point at this objective.</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">Example:<O:P> </O:P>
|
||
</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">$ObjectiveName SetCurrent
|
||
0<O:P> </O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">This will cause the
|
||
objective named $ObjectiveName to be set as the current objective on the
|
||
compass for the axis team.<O:P> </O:P> </P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal">Scripting
|
||
Objective Take Over:<O:P> </O:P> </B></P>
|
||
<P class=MsoNormal>When an opposing team takes an objective there should
|
||
be a triggered setthread that gets called in script.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This is where the handling should
|
||
take place.<SPAN style="mso-spacerun: yes"> </SPAN>Here is an
|
||
example from Sub Pen:<O:P> </O:P> </P>
|
||
<P class=MsoNormal>toggle_subpen_doors:<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>if( parm.other.dmteam == axis )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>if( $obj_subpen_doors.ControlledBy != 0 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 3"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>$obj_subpen_doors TakeOver 0</P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>iprintln "The Axis have closed the pen doors!"</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>else if( parm.other.dmteam == allies )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>if( $obj_subpen_doors.ControlledBy != 1 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 2"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>$obj_subpen_doors TakeOver 1</P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>iprintln "The Allies have opened the pen doors!"</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}<O:P> </O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>//Update team current objectives</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>thread set_objectives<O:P> </O:P> </P>
|
||
<P class=MsoNormal>end</P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal>This function gets triggered when a team hits the sub
|
||
pen doors trigger.<SPAN style="mso-spacerun: yes"> </SPAN>Here is a
|
||
breakdown of this function:<O:P> </O:P> </P><!--mstheme--></FONT><!--msthemelist-->
|
||
<TABLE style="MARGIN-TOP: 0in" cellSpacing=0 cellPadding=0 width="100%"
|
||
border=0 type="disc"><!--msthemelist-->
|
||
<TBODY>
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">First check to see which
|
||
team triggered the doors.<SPAN style="mso-spacerun: yes">
|
||
</SPAN>This is accomplished by checking the parm.other.dmteam
|
||
variable which will be set to either axis or
|
||
allies.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Next check that the team
|
||
that triggered this does not already control the objective.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This is accomplished by
|
||
checking that particular objectives ControlledBy variable.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>The syntax for this is:
|
||
$<ObjectiveName>.ControlledBy.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>The ControlledBy variable
|
||
will be set to 0 for axis, 1 for allies, or 2 for neutral.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Now if the team that hit
|
||
this trigger does not own it we call the TakeOver function.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>We call this by using:
|
||
$<ObjectiveName> TakeOver TeamNumber.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>Where TeamNumber is 0, 1, or
|
||
2.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Finally the example
|
||
calls a function that updates the current objective for each team
|
||
based on which the scripter feels is the most important.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>Here is a listing of that
|
||
function from Sub Pen:<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist--></TBODY></TABLE><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">
|
||
<P
|
||
class=MsoNormal>//----------------------------------------------------------</P>
|
||
<P class=MsoNormal>//Set the teams current objectives</P>
|
||
<P
|
||
class=MsoNormal>//----------------------------------------------------------</P>
|
||
<P class=MsoNormal>set_objectives:<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>//First lets do the allies</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>if( $obj_sub_clamps.ControlledBy == 0 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_sub_clamps SetCurrent 1</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>else if( $obj_subpen_doors.ControlledBy == 0 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_subpen_doors SetCurrent 1</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>else if( $obj_steal_sub.ControlledBy == 0 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_steal_sub SetCurrent 1</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}<O:P> </O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>//Now the Axis</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>if( $obj_subpen_doors.ControlledBy == 1 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_subpen_doors SetCurrent 0</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>else if( $obj_sub_clamps.ControlledBy == 1 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_sub_clamps SetCurrent 0</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>else</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_allied_spawner SetCurrent 0</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}<O:P> </O:P> </P>
|
||
<P class=MsoNormal>end<O:P> </O:P></P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><O:P></O:P> </P>
|
||
<P class=MsoNormal>This function prioritizes which objectives each team
|
||
needs to be set to.<SPAN style="mso-spacerun: yes"> </SPAN>This
|
||
function is called everytime an objective gets taken.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This function is not automatically
|
||
called but rather called from inside the script.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>For the allies the priority
|
||
objectives are first the sub clamps, followed by the sub pen doors and
|
||
finally the sub itself.<SPAN style="mso-spacerun: yes"> </SPAN>If
|
||
the clamps get taken by the axis then this function will set the clamps as
|
||
the current objective for the allies.<O:P> </O:P> </P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal">Respawners<O:P>
|
||
</O:P> </B></P>
|
||
<P class=MsoNormal>This new game type allows a team to destroy an enemy
|
||
objective that will stop that team from spawning when killed.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This is surprisingly easy.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>First take over the objective as
|
||
normal, then use the name assigned to the spawner and call
|
||
disablespawn.<SPAN style="mso-spacerun: yes"> </SPAN>Example
|
||
below:<O:P> </O:P> </P>
|
||
<P
|
||
class=MsoNormal>//----------------------------------------------------------</P>
|
||
<P class=MsoNormal>//Destroy the allied spawner here</P>
|
||
<P
|
||
class=MsoNormal>//----------------------------------------------------------</P>
|
||
<P class=MsoNormal>destroy_allied_spawner:<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>//Make sure we are the allies</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>if( parm.other.dmteam != allies &&
|
||
$obj_allied_spawner.ControlledBy != 0 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>iprintln "The allied transport has been destroyed!"</P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>//Take over the objective</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$obj_allied_spawner TakeOver 0</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>$Allied_Spawn_Locations disablespawn</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}<SPAN
|
||
style="mso-tab-count: 1"> </SPAN></P>
|
||
<P class=MsoNormal>end<O:P> </O:P></P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><B style="mso-bidi-font-weight: normal">Win
|
||
Conditions</B><O:P> </O:P> </P>
|
||
<P class=MsoNormal>The following are handled automatically:<O:P>
|
||
</O:P> </P><!--mstheme--></FONT><!--msthemelist-->
|
||
<TABLE style="MARGIN-TOP: 0in" cellSpacing=0 cellPadding=0 width="100%"
|
||
border=0 type="disc"><!--msthemelist-->
|
||
<TBODY>
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">All 5 Objectives are
|
||
taken by one team.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">A respawner has been
|
||
destroyed and the team is all subsequently
|
||
killed.<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist-->
|
||
<TR>
|
||
<TD vAlign=baseline width=42><IMG height=15 alt=bullet hspace=13
|
||
src="Tug of War_files/expbul1d.gif" width=15></TD>
|
||
<TD vAlign=top width="100%"><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">Time runs out.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>This needs a little setup at
|
||
the beginning of the script.<SPAN style="mso-spacerun: yes">
|
||
</SPAN>Here is an
|
||
example:<!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemelist--></TBODY></TABLE><!--mstheme--><FONT
|
||
face="Book Antiqua, Times New Roman, Times">
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>// set the parameters for this round based match</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>level.defusing_team = "axis"<SPAN
|
||
style="mso-tab-count: 2"> </SPAN></P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>level.planting_team = "allies"</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>level.dmrespawning<SPAN
|
||
style="mso-tab-count: 1"> </SPAN>=
|
||
1<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>// 1 or 0</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>level.dmroundlimit<SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>= 5<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>// round time limit in minutes</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>level.clockside<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>= axis<SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>// set to axis, allies, kills, or draw<O:P> </O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>level waittill roundstart</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><O:P></O:P> </P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in">The defusing and planting
|
||
teams need to be set but it does not matter which team.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>Just make sure they have different
|
||
team values set to them.<SPAN style="mso-spacerun: yes">
|
||
</SPAN>dmrespawning should always be set to 1.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>dmroundlimit is the amount of time
|
||
for each round.<SPAN style="mso-spacerun: yes"> </SPAN>clockside is
|
||
set to determine which team wins if the clock runs out.<O:P> </O:P>
|
||
</P>
|
||
<P class=MsoNormal>Sometimes you may want to have a custom victory
|
||
condition as in sub pen.<SPAN style="mso-spacerun: yes"> </SPAN>Only
|
||
3 objectives need to be taken by the allies in sub pen to win the
|
||
map.<SPAN style="mso-spacerun: yes"> </SPAN>Here is the code that
|
||
handles that:<O:P> </O:P> </P>
|
||
<P
|
||
class=MsoNormal>//----------------------------------------------------------</P>
|
||
<P class=MsoNormal>//steal the sub</P>
|
||
<P
|
||
class=MsoNormal>//----------------------------------------------------------</P>
|
||
<P class=MsoNormal>steal_sub:<O:P> </O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>//Only the allies can actually take this objective</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>if( dm_other.dmteam != axis && $obj_steal_sub.ControlledBy
|
||
!= 1 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>{</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 1in">if(
|
||
$obj_sub_clamps.ControlledBy == 1 &&<SPAN
|
||
style="mso-spacerun: yes">
|
||
</SPAN>$obj_subpen_doors.ControlledBy == 1 )</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>{</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>$obj_steal_sub TakeOver 1</P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>iprintln "Tha Allies have stolen the U-Boat!"</P>
|
||
<P class=MsoNormal><O:P></O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>//Allies have won</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 3">
|
||
</SPAN>teamwin allies</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 2">
|
||
</SPAN>}</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>}</O:P> </P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>//Update team current objectives</P>
|
||
<P class=MsoNormal><SPAN
|
||
style="mso-tab-count: 1">
|
||
</SPAN>thread set_objectives</O:P> </P>
|
||
<P class=MsoNormal>end<O:P> </O:P> </P>
|
||
<P class=MsoNormal>This function is called when a team hits the trigger on
|
||
the top of the sub.<SPAN style="mso-spacerun: yes"> </SPAN>It checks
|
||
to see if it is the allies, and if so then checks to see if the allies
|
||
have opened the doors and disengaged the clamps.<SPAN
|
||
style="mso-spacerun: yes"> </SPAN>If all these conditions are met
|
||
the script calles teamwin and passes the winning team as the
|
||
parameter.</P>
|
||
<P class=MsoNormal style="MARGIN-LEFT: 0.5in"><O:P></O:P> </P> <!--mstheme--></FONT><!--msnavigation--></TD></TR><!--msnavigation--></TBODY></TABLE><!--msnavigation-->
|
||
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
|
||
<TBODY>
|
||
<TR>
|
||
<TD><!--mstheme--><FONT face="Book Antiqua, Times New Roman, Times"><!--mstheme--></FONT></TD></TR><!--msnavigation--></TBODY></TABLE>
|
||
|
||
|
||
|
||
</body>
|
||
|
||
|
||
|
||
<p>
|
||
|
||
</p>
|
||
|
||
|
||
|
||
<pre>
|
||
<i><font color=blue>
|
||
|
||
</font>
|
||
</i>
|
||
</pre> |