ModdersGuide
What is a Scenario?A scenario is a mission that you can create and share with other players. At the simplest, you can create a new map (or use an existing map) and design your own waves of enemies. At its most complex you can use the scripting system in Siege to trigger a wide variety of actions and threats for the player. Scenarios can be easily uploaded and downloaded from the scenario workshop in Siege. Creating a MapThe map editor is accessible from the main menu of Siege of Centauri. Map Select Once you have set those things you start with a blank map with your colony on it and lots of options. Edit Terrain
Edit Buildings
Edit Cosmetic Edit Effects Brush Size Rebuild Terrain Toggle Display Mode After rebuilding the terrain it will automatically switch to graphical mode so you will want to press this button to switch back to editor mode. Enable Symmetry Environment Toggle Toggle Mouse Position
Creating a MissionThe best resource for creating your own mission are the missions that come with the game. They are all in exactly the format you need and will give you lots of examples of how the designers made all the campaign missions work. Check them all out in the ..\Siege of Centauri\Assets\Campaign\AtlasProject\ directory. The Mission File Create the file and save it in the ..\My Games\Siege of Centauri\Scenario\ directory. Name it the same as your scenario. In this example I’m creating a scenario called “Aberny”. Note I called my Map “Aberny”, my Mission “Aberny”, and the Scenario will be called “Aberny”. They don’t need to be the same - it was just convenient. <Mission ID="Aberny" Title="Aberny" Description="An army approaches, but they do not target our colony." Map="Aberny" PreviewImage="Aberny.dds" NoVPVictory="1" NoSeedVictory="0" HideTerrain="0" HideDifficulty="0" HideUpgradePanel="1"> <Score Star1="0" Star2="15000" Star3="30000"/> <Player Name="You" Faction="PHC" Team="0" Color="2" StartLocation="0" AIType="Player" NoEngineer="1" /> <Player Name="Agethon" Faction="ss" Team="1" Color="4" AIType="Off" StartLocation="0" NoSeed="1" NoEngineer="1" /> </Mission> The above is an example of a working mission (though it doesn’t do anything yet). Mission attributes:
Ignore the other mission attributes and the score element. In setting up the players, the human always has to be the first player listed. The first player listed is player 0, the second player listed is player 1, etc. Player attributes:
Example: Warring Enemies <Player Name="You" Faction="PHC" Team="0" Color="2" StartLocation="0" AIType="Player" NoEngineer="1" /> <Player Name="Agethon" Faction="ss" Team="1" Color="4" AIType="Off" StartLocation="0" NoSeed="1" NoEngineer="1" /> <Player Name="Decius" Faction="ss" Team="2" Color="15" AIType="Off" StartLocation="0" NoSeed="1" NoEngineer="1" /> Notice I gave the third player a new name (they have to be unique), a new team (so the Decius player isn’t allied with the human or with the AI and a new color (so the player can see that they are different from AI player “Agethon”. Now when we spawn units we can do it as either player 1 (Agethon) or player 2 (Decius) and these units will both attack the human player as well as fight with each other. Setting Things Up <Trigger ID="Configure" Type="Timer" Timer="0" > <HidePanel HideRank="1"/> <GrantStuff Player="0" Metal="200" /> <QueueWave Target="Wave1"/> <QueueWave Target="Wave2"/> <QueueWave Target="Wave3"/> <QueueWave Target="Wave4"/> <QueueWave Target="Wave5"/> <QueueWave Target="Wave6"/> <QueueWave Target="Wave7"/> <QueueWave Target="Wave8"/> <QueueWave Target="Wave9"/> <QueueWave Target="Wave10"/> <QueueWave Target="Wave11"/> <QueueWave Target="Wave12"/> <QueueWave Target="Wave13"/> <QueueWave Target="Wave14"/> <QueueWave Target="Wave15"/> </Trigger> After the Mission setup we configure the starting information for the player. We will go through triggers in more detail later, but the short version is that this trigger starts the player with 200 Metal and loads in 15 waves. Note that QueueWave puts the waves in order as they are called. In this example Wave2 won’t trigger until Wave1 is done. If you have a trigger that added QueueWave SurpriseAttack it would go at the end of all the other waves that were currently waiting in line (so in this example it would go after Wave15). What is a Wave? <Wave Name="Wave1" Timer="10" PortraitUnit="Unit_Normal" Description="Unit_Normal_Name" Direction="Top"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Normal-Spawn" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> </Wave> The above is the definition for a wave. When the Configure trigger said to “QueueWave Target=”Wave1”, this is what it will run. Wave
The Wave element has DoWaveSpawn sub-elements. This is what those do. DoWaveSpawn
The Ping Spawn <Trigger Name="Ping-North" Type="WaveSpawn"> <PingPath Path="Path-North" /> </Trigger> What is a Path? <WavePath Name="Path-North" ShowInScanMode="False"> <SpawnPoint Position="64,-4032" /> <Waypoint Position="-2624,-192"/> <Waypoint Position="2752,-64"/> <Waypoint Position="-2048,2432"/> </WavePath> A path is a set of coordinates armies will follow when they are spawned. You can setup as many paths as you would like. The above path definition has the following attributes: WavePath
SpawnPoint
Waypoint
Spawning Units <Trigger Name="Normal-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Normal_3" Player="1" Path="Path-North" /> <SpawnUnitOnPath Name="Unit" Parent="Parent" Template="Unit_Normal_3" Player="1" Path="Path-North" /> <SpawnUnitOnPath Name="Unit" Parent="Parent" Template="Unit_Normal_3" Player="1" Path="Path-North" /> </Trigger> The above trigger is what is called from DoWaveSpawn. It is where the exact units are specified as well as the path they will travel on. Trigger
SpawnUnitOnPath
Available Units
Example: A Wave of Miltons <Trigger Name="Milton-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Milton" Player="0" Path="Path-North" /> </Trigger> The above trigger will spawn Milton (Template=”Unit_Milton”) on the players side (Player=”0”) that will spawn in and follow the Path-North, attacking any enemies he encounters along the way. TriggersThere are a wide variety of triggers to cause things to happen, or respond to things that happen. Check out the existing missions to see lots of examples of them at work. No triggers beyond those presented above (WaveSpawn) are required to make a great scenario, but they can allow you to make your scenario unique. Area <Trigger Name="Carrier-Drop" Type="Area" Template="Unit_Air_Carrier" Center="-2663,-1940" Size="100"> <SpawnUnitOnPath Name="Parent" Template="Unit_Swarm" Player="1" Path=”CarrierDropPath" /> </Trigger> Area triggers when the specified unit type comes into range. The above waits for an air transport (“Unit_Air_Carrier”) to come into range (within 100 of the -2663,-1940 coordinates). If that happens it spawns a group of Reapers (“Unit_Swarm”).
BuildingDestroyed <Trigger Name="OutpostDies" Type="BuildingDestroyed" Template="Building_Outpost"> <Dialog> <Entry Character="Husk" Text="Dialog_Dule_OutpostDestroyed_Husk" /> </Dialog> </Trigger> Triggered when a building of the specified type is destroyed. In the above example, a dialog string plays when an outpost is destroyed.
BuildingStarted <Trigger Name="BuiltBomb2" Type="BuildingStarted" Template="Bomb_Seed2" IsBuilding="1"> <Dialog> <Entry Character="Milton" Text="Dialog_Sedge_Bomb2_Milton" /> </Dialog> </Trigger> Triggered when a building starts being built. In the above example it triggers a dialog when the player upgrades to Bomb_Seed2.
DamageDealt <Trigger Name="SpiderEnemy" Type="DamageDealt" TargetTemplate="Unit_Spider"> <AttackAttackMove Name="Spider1" Position="0,4891"/> <DeactivateTrigger Target="SpiderAlly" /> </Trigger> Triggered when the specified unit type is dealt damage. In this case, if a Harridan (Unit_Spider) is damaged it causes them to attack position 0,4891 (the location of the colony). It also disables the trigger after it fires (so it won’t fire again).
GameplayTimerExpired <Trigger Name="Victory" Type="GameplayTimerExpired" Target="VictoryTimer"> <EndMission Victory="1" String="Mission_VictoryString"/> </Trigger> Used to respond to the CreateGameplayTimer. In the above example, if the VictoryTimer runs out then the player wins the game.
SpecialAbility <Trigger Name="MiltonTrigger" Type="SpecialAbility" Template="Orbital_Milton" > <AreaIndicator Name="Milton_Highlight" Duration="0" /> </Trigger> Triggers when a special ability is used. In the above, it deletes an AreaIndicator when the player uses the Milton orbital ability.
Timer <Trigger Name="HPBoost" Type="Timer" Timer="10" Inactive="1"> <GrantTech Player="1" Tech="HPs" /> <ActivateTrigger Target="HPBoost" /> </Trigger> A timer trigger fires when the amount of seconds pass that are set in the Timer attribute. In the above example, the timer starts disabled (Inactive=”1”), so it has to be activated by another trigger before it will start its 10 second countdown (Timer=”10”). It then grants a HP boost to the AI player (Player=”1”) and calls itself. So it will continue to grant a HP boost to the AI player every 10 seconds until the mission ends.
UnitDestroyed <Trigger Name="HeartDies" Type="UnitDestroyed" Template="Unit_HeartOfThePhoenix_Egg" > <ActivateTrigger Target="HPBoost"/> </Trigger> In the Timer description we saw a trigger that needed to be activated by another trigger. This trigger fires when the specified unit is destroyed, in this case a Heart of the Phoenix Egg (Template=”Unit_HeartOfThePhoenix_Egg”). Once it is destroyed it activates the HPBoost trigger.
Var <Trigger Type="Var" Var="ReinforceCount" Value="3" Operator=">="> <Restrict Type="Orbital" ID="Orbital_Reinforce" Enable="0" Hide="0" /> <DeactivateTrigger Target="ReinforceTrigger" /> </Trigger> Var triggers fire when a variable meets the criteria. In the above example it triggers when the “ReinforceCount” variable gets to 3 (Value=”3”) or higher (Operator=”>=”). This doesn’t do much good unless we have a ReinforceCount variable and something that is incrementing it. Something like the following: <Trigger Name="ReinforceTrigger" Type="SpecialAbility" Template="Orbital_Reinforce" > <Var Name="ReinforceCount" Operation="+" Value="1" /> </Trigger> This SpecialAbility trigger increments the ReinforceTrigger count each time the player uses the Reinforce ability. Used together, the counter goes up each time the player uses Reinforce. But when the player uses it for the 3rd time, it disables the Reinforce ability for the rest of the mission (or at least until a script turns it back on). WaveStarted <Trigger Name="Wave2Started" Type="WaveStarted" Target="Wave2"> <Dialog> <Entry Character="Husk" Text="The tight pathways of this sector are ideal for the /color:EEBeige/Corrosion Mortar/endcolor/. It can fire over terrain and soften up the enemy with damage over time." /> </Dialog> </Trigger> This trigger fires when the specified wave starts. In the example, it triggers a dialog when Wave2 (Target=”Wave2”) begins.
ActionsActions are script commands that cause something to happen. Where a Trigger controls when it happens, an Action is the actual thing that affects the game. Actions are usually inside of triggers as in the following: <Trigger Name="Wave2Started" Type="WaveStarted" Target="Wave2"> <Dialog> <Entry Character="Husk" Text="The tight pathways of this sector are ideal for the /color:EEBeige/Corrosion Mortar/endcolor/. It can fire over terrain and soften up the enemy with damage over time." /> </Dialog> </Trigger> The above reads as: when the “WaveStarted” trigger fires, the Dialog action occurs. Triggers can contain multiple actions such as: <Trigger Type="Var" Var="ReinforceCount" Value="3" Operator=">="> <Restrict Type="Orbital" ID="Orbital_Reinforce" Enable="0" Hide="0" /> <DeactivateTrigger Target="ReinforceTrigger" /> </Trigger> The above reads as: when the “ReinforceCount” variable gets to 3 or higher, it will disable the Reinforcements orbital ability and deactivate the “ReinforceTrigger” trigger. ActivateTrigger <ActivateTrigger Target="HPBoost" /> Triggers can be scripted to be inactive such as with the following: <Trigger Name="HPBoost" Type="Timer" Timer="10" Inactive="1"> <GrantTech Player="1" Tech="HPs" /> <ActivateTrigger Target="HPBoost" /> </Trigger> Triggers also deactivate after firing. So if you have a timer trigger that goes off after 10 seconds, it will fire after 10 seconds then mark itself as inactive. The ActivateTrigger action marks these triggers as active again. It is commonly used to cause triggers to repeat, or to have other triggers start working after a certain condition has been met (for example, if you want to start spawning new waves after the player upgrades his colony). AreaIndicator <AreaIndicator Name="Milton_Highlight" Position="704,-128,0" Color="Blue" Size="100" Duration="-1" /> This puts a UI element on the ground at the position indicated. We use it in one of the missions as a tutorial element to help the player know where there is a good place to put Milton. You can update the specific AreaIndicator by passing in new attributes with the same Name. Duration of -1 means that it will last forever. If you want to turn it off, pass in a Duration of 0. CreateGameplayTimer <CreateGameplayTimer Name="VictoryTimer" Time="600"/> This creates a gameplay timer that you can trigger off of with the GameplayTimerExpired trigger. You could, for example, give the player 60 seconds to place towers and then disable all towers afterwards. This is also commonly used with the GameplayTimerExpired trigger and the EndMission action to allow the player to win if he survives for N minutes. DeactivateTrigger <DeactivateTrigger Target="ReinforceTrigger" /> This is the opposite of the ActivateTrigger function; it can deactivate any trigger. For example, if you have a trigger that spawns an enemy wave every 15 seconds as long as an enemy building exists, you could have the destruction of that building deactivate the unit spawning trigger. Dialog <Trigger Name="OutpostDies" Type="BuildingDestroyed" Template="Building_Outpost"> <Dialog> <Entry Character="Husk" Text="The first Outpost has been destroyed. Expect them to focus on the other Outpost and the Colony next." /> </Dialog> </Trigger> This creates a dialog popup. Entry characters can be “Husk”, “Zhukov”, “Milton”, “Persephone” or “Haalee”. EndMission <EndMission Victory="1" String="Mission_VictoryString"/> Siege missions normally end when the game has processed a wave with the “IsFinalWave” attribute and all enemies have been killed. If you don’t want your scenario to end like that you don’t need to ever include a wave with the “IsFinalWave” attribute, and you can use this action to end the mission instead. You could have a trigger that requires the player to kill 1,000,000 reapers, and this EndMIssion trigger only grants victory when this is done. Or if the player has survived for 15 minutes. <EndMission Victory="0" String="EndGameResult_Seed_Lose" /> The above use of the EndMission action forces a player loss. This can be used if you want to create a special situation where the player must not allow an Outpost to be destroyed, or not allow an enemy to reach a certain area. GrantStuff <GrantStuff Player="0" Metal="600" /> <GrantStuff Player="0" Radioactives="100" /> GrantStuff provides free metal or energy (under the covers Energy is tracked as Radioactives). The free metal is used at the beginning of every mission to determine how much metal the player starts with. You can have triggers give out additional metal or energy if a certain enemy is killed, if you want to help the player out when he is getting attacked, etc. GrantTech <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="1" Tech="HPs" /> GrantTech provides bonuses to the specified player. Remember Player 0 is the human player and Player 1 is the AI. Granting a “Weapons” tech to the player increases the amount of damage towers do. Granting a “HPs” tech to the AI increases the hit points of enemy ships. Granting increased HP’s to enemy ships is used frequently on the difficulty level triggers, it's also used on Endless maps to make sure the enemy waves keep getting tougher. QueueWave <QueueWave Target="Wave1"/> QueueWave was discussed in the Waves section above but it can be called from any trigger. For example, it might be interesting if the waves queued were based on the towers the player placed. So the Script was adjusting the enemies it was sending based on what the player's towers were weak against. This is also used in special triggers on some of the timed missions so that special waves get triggered when there is only 5 minutes left of the 10 minutes the player needs to survive. Restrict <Restrict Type="Orbital" ID="Orbital_Milton" Enable="0" Hide="0" /> <Restrict Type="Building" ID="Building_Lightning1" Enable="0" Hide="0" /> Restrict can be used to enable or disable orbitals or towers. Enable=”1” will enable the orbital or building; and Enable=”0” disables it. Hide=”0” means that the icon will still be visible (but disabled) while Hide=”1” hides the icon for that orbital or tower. This could also be used to disable all the towers and force the player to play a mission using only orbitals. SpawnUnitOnPath <SpawnUnitOnPath Name="Parent" Template="Unit_Normal" Player="1" Path="Path-South" /> SpawnUnitOnPath was discussed in the Units section of this guide but it can also be called from special triggers. <Trigger Name="Egg10Death" Type="UnitDestroyed" UnitName="Egg10"> <SpawnUnitOnPath Name="Parent" Template="Unit_Spider" Player="1" Path=”Path-Egg10” /> </Trigger> The above trigger fires if the unit called “Egg10” is destroyed. This is one of the large eggs on Caina. If it is destroyed it will spawn a Harridan (“Unit_Spider”) and send it on Path-Egg10 (a route from the destroyed egg to the colony). Putting It All Together<Mission ID="Aberny" Title="Mission_Aberny_Title" Description="Mission_Aberny_Description" Map="Aberny" PreviewImage="Aberny.dds" NoVPVictory="1" NoSeedVictory="0" HideTerrain="0" HideDifficulty="0" HideUpgradePanel="1" > <Score Star1="0" Star2="15000" Star3="30000"/> <Player Name="You" Faction="PHC" Team="0" Color="2" StartLocation="0" AIType="Player" NoEngineer="1" /> <Player Name="Agethon" Faction="ss" Team="1" Color="4" AIType="Off" StartLocation="0" NoSeed="1" NoEngineer="1" /> <Trigger ID="Configure" Type="Timer" Timer="0" > <HidePanel HideRank="1"/> <GrantStuff Player="0" Metal="200" /> <QueueWave Target="Wave1"/> <QueueWave Target="Wave2"/> <QueueWave Target="Wave3"/> <QueueWave Target="Wave4"/> <QueueWave Target="Wave5"/> <QueueWave Target="Wave6"/> <QueueWave Target="Wave7"/> <QueueWave Target="Wave8"/> <QueueWave Target="Wave9"/> <QueueWave Target="Wave10"/> <QueueWave Target="Wave11"/> <QueueWave Target="Wave12"/> <QueueWave Target="Wave13"/> <QueueWave Target="Wave14"/> <QueueWave Target="Wave15"/> </Trigger> <Wave Name="Wave1" Timer="10" PortraitUnit="Unit_Normal" Description="Unit_Normal_Name" Direction="Top"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Normal-Spawn" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> <DoWaveSpawn Target="Normal-Spawn" Delay="1" /> </Wave> <Wave Name="Wave2" Timer="45" PortraitUnit="Unit_Bomb" Description="Unit_Bomb_Name" Direction="Top" RushBonus="250" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Bomb-Spawn" /> </Wave> <Wave Name="Wave3" Timer="30" PortraitUnit="Unit_Destructor" Description="Unit_Destructor_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Destructor-Spawn" /> <DoWaveSpawn Target="Destructor-Spawn" Delay="2" /> <DoWaveSpawn Target="Destructor-Spawn" Delay="2" /> <DoWaveSpawn Target="Destructor-Spawn" Delay="2" /> <DoWaveSpawn Target="Destructor-Spawn" Delay="2" /> </Wave> <Wave Name="Wave4" Timer="45" PortraitUnit="Unit_Healer" Description="Unit_Healer_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Healer-Spawn" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> </Wave> <Wave Name="Wave5" Timer="60" PortraitUnit="Unit_Fast" Description="Unit_Fast_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Fast-Spawn" /> <DoWaveSpawn Target="Fast-Spawn" Delay="2" /> <DoWaveSpawn Target="Fast-Spawn" Delay="2" /> <DoWaveSpawn Target="Fast-Spawn" Delay="2" /> <DoWaveSpawn Target="Fast-Spawn" Delay="2" /> <DoWaveSpawn Target="Fast-Spawn" Delay="2" /> <DoWaveSpawn Target="Fast-Spawn" Delay="2" /> </Wave> <Wave Name="Wave6" Timer="70" PortraitUnit="Unit_Summoner" Description="Unit_Summoner_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Summoner-Spawn" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="7" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="7" /> </Wave> <Wave Name="Wave7" Timer="80" PortraitUnit="Unit_Bomb" Description="Unit_Bomb_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Bomb-Spawn" /> <DoWaveSpawn Target="Bomb-Spawn" Delay="4" /> <DoWaveSpawn Target="Bomb-Spawn" Delay="4" /> <DoWaveSpawn Target="Bomb-Spawn" Delay="4" /> <DoWaveSpawn Target="Bomb-Spawn" Delay="4" /> </Wave> <Wave Name="Wave8" Timer="90" PortraitUnit="Unit_Shielded" Description="Unit_Shielded_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Shielded-Spawn" /> <DoWaveSpawn Target="Normal-Spawn" /> <DoWaveSpawn Target="Shielded-Spawn" Delay="4" /> <DoWaveSpawn Target="Normal-Spawn" /> <DoWaveSpawn Target="Shielded-Spawn" Delay="4" /> <DoWaveSpawn Target="Normal-Spawn" /> <DoWaveSpawn Target="Shielded-Spawn" Delay="4" /> <DoWaveSpawn Target="Normal-Spawn" /> <DoWaveSpawn Target="Shielded-Spawn" Delay="4" /> </Wave> <Wave Name="Wave9" Timer="100" PortraitUnit="Unit_HeavySwarm" Description="Unit_HeavySwarm_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="HeavySwarm-Spawn" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2" /> </Wave> <Wave Name="Wave9" Timer="100" PortraitUnit="Unit_SwarmShielded" Description="Unit_SwarmShielded_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="SwarmShielded-Spawn" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="SwarmShielded-Spawn" Delay="2" /> </Wave> <Wave Name="Wave11" Timer="70" PortraitUnit="Unit_Summoner" Description="Unit_Summoner_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Summoner-Spawn" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> <DoWaveSpawn Target="Summoner-Spawn" Delay="3" /> </Wave> <Wave Name="Wave12" Timer="90" PortraitUnit="Unit_Bomb" Description="Unit_Bomb_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Bomb-Spawn" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Bomb-Spawn" Delay="3" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="Bomb-Spawn" Delay="3" /> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> </Wave> <Wave Name="Wave13" Timer="110" PortraitUnit="Unit_FastShielded" Description="Unit_FastShielded_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="FastShielded-Spawn" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> <DoWaveSpawn Target="FastShielded-Spawn" Delay="2" /> </Wave> <Wave Name="Wave14" Timer="120" PortraitUnit="Unit_HeavySwarm" Description="Unit_HeavySwarm_Name" Direction="Top" RushBonus="350" RushCountdown="70"> <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="HeavySwarm-Spawn" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="HeavySwarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Healer-Spawn" Delay="2" /> </Wave> <Wave Name="Wave15" Timer="130" PortraitUnit="Unit_Retributor" Description="Unit_Retributor_Name" Direction="Top" RushBonus="350" RushCountdown="70" IsFinalWave="1" > <DoWaveSpawn Target="Ping-North" /> <DoWaveSpawn Target="Retributor-Spawn" /> <DoWaveSpawn Target="Healer-Spawn" Delay="1"/> <DoWaveSpawn Target="Healer-Spawn" Delay="2"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="1"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="2"/> <DoWaveSpawn Target="Swarm-Spawn" Delay="2"/> </Wave> <!-- Wave Paths --> <WavePath Name="Path-North" ShowInScanMode="False"> <SpawnPoint Position="64,-4032" /> <Waypoint Position="-2624,-192"/> <Waypoint Position="2752,-64"/> <Waypoint Position="-2048,2432"/> </WavePath> <!-- Spawns --> <Trigger Name="Bomb-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Bomb" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Destructor-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Destructor" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Fast-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Fast" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="FastShielded-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_FastShielded" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Healer-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Destructor" Player="1" Path="Path-North" /> <SpawnUnitOnPath Name="Unit" Parent="Parent" Template="Unit_Healer" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="HeavySwarm-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_HeavySwarm" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Normal-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Normal_3" Player="1" Path="Path-North" /> <SpawnUnitOnPath Name="Unit" Parent="Parent" Template="Unit_Normal_3" Player="1" Path="Path-North" /> <SpawnUnitOnPath Name="Unit" Parent="Parent" Template="Unit_Normal_3" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Retributor-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Retributor" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Shielded-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Shielded" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Summoner-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Summoner" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="Swarm-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_Swarm" Player="1" Path="Path-North" /> </Trigger> <Trigger Name="SwarmShielded-Spawn" Type="WaveSpawn"> <SpawnUnitOnPath Name="Parent" Template="Unit_SwarmShielded" Player="1" Path="Path-North" /> </Trigger> <!--Ping Triggers--> <Trigger Name="Ping-North" Type="WaveSpawn"> <PingPath Path="Path-North" /> </Trigger> <!-- Difficulty Settings --> <Difficulty Name="MissionDifficulty_Difficulty0" Description="MissionDifficulty_Difficulty0_Desc" ScoreMultiplier="0.1f" ChronoRegenMultiplier="1.0f" ChronoDrainMultiplier="0.0f" SpawnCountLimit="16" /> <Difficulty Name="MissionDifficulty_Difficulty1" Description="MissionDifficulty_Difficulty1_Desc" ScoreMultiplier="0.25f" ChronoRegenMultiplier="1.0f" ChronoDrainMultiplier="0.25f" SpawnCountLimit="24" /> <Difficulty Name="MissionDifficulty_Difficulty2" Description="MissionDifficulty_Difficulty2_Desc" ScoreMultiplier="0.5f" ChronoRegenMultiplier="1.0f" ChronoDrainMultiplier="0.5f"/> <Difficulty Name="MissionDifficulty_Difficulty3" Description="MissionDifficulty_Difficulty3_Desc" ScoreMultiplier="0.75f" ChronoRegenMultiplier="1.0f" ChronoDrainMultiplier="1.0f"/> <Difficulty Name="MissionDifficulty_Difficulty4" Description="MissionDifficulty_Difficulty4_Desc" ScoreMultiplier="1.0f" ChronoRegenMultiplier="1.0f" ChronoDrainMultiplier="1.0f"/> <Difficulty Name="MissionDifficulty_Difficulty5" Description="MissionDifficulty_Difficulty5_Desc" ScoreMultiplier="1.25f" ChronoRegenMultiplier="1.0f" ChronoDrainMultiplier="1.0f"/> <Difficulty Name="MissionDifficulty_Difficulty6" Description="MissionDifficulty_Difficulty6_Desc" ScoreMultiplier="1.5f" ChronoRegenMultiplier="0.5f" ChronoDrainMultiplier="1.0f"/> <Difficulty Name="MissionDifficulty_Difficulty7" Description="MissionDifficulty_Difficulty7_Desc" ScoreMultiplier="1.75f" ChronoRegenMultiplier="0.25f" ChronoDrainMultiplier="1.0f"/> <Difficulty Name="MissionDifficulty_Difficulty8" Description="MissionDifficulty_Difficulty8_Desc" ScoreMultiplier="2.0f" ChronoRegenMultiplier="0.0f" ChronoDrainMultiplier="1.0f"/> <Trigger Name="Difficulty0" Type="Difficulty" Difficulty="0" > <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantStuff Player="0" Metal="100" /> </Trigger> <Trigger Name="Difficulty1" Type="Difficulty" Difficulty="1" > <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantStuff Player="0" Metal="50" /> </Trigger> <Trigger Name="Difficulty2" Type="Difficulty" Difficulty="2" > <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> </Trigger> <Trigger Name="Difficulty3" Type="Difficulty" Difficulty="3" > <GrantTech Player="0" Tech="Weapons" /> <GrantTech Player="0" Tech="Weapons" /> </Trigger> <Trigger Name="Difficulty4" Type="Difficulty" Difficulty="4" > </Trigger> <Trigger Name="Difficulty5" Type="Difficulty" Difficulty="5" > <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> </Trigger> <Trigger Name="Difficulty6" Type="Difficulty" Difficulty="6" > <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> </Trigger> <Trigger Name="Difficulty7" Type="Difficulty" Difficulty="7" > <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> </Trigger> <Trigger Name="Difficulty8" Type="Difficulty" Difficulty="8" > <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> <GrantTech Player="1" Tech="HPs" /> </Trigger> <DefaultUpgrades > <Upgrade ID="Enable_Gun_Turret" Required="0"/> <Upgrade ID="Enable_Laser" Required="0"/> <Upgrade ID="Enable_Corrosion" Required="0"/> <Upgrade ID="Enable_Lightning_Tower" Required="0"/> <Upgrade ID="Enable_Cannon" Required="0"/> <Upgrade ID="Enable_Metal" Required="0"/> <Upgrade ID="Enable_Drone" Required="0"/> <Upgrade ID="Enable_Slow_Turret" Required="0"/> <Upgrade ID="Enable_Pulse_Cannon" Required="0"/> <Upgrade ID="Enable_Ion_Cannon" Required="0"/> <Upgrade ID="Enable_Battery" Required="0"/> <Upgrade ID="Enable_Meteor_Tower" Required="0"/> </DefaultUpgrades> </Mission> Creating an ImagePreviewImage="Aberny.dds" You will need to create an image for your scenario. This image will be displayed on the scenario workshop screen and on the mission screen when the player is starting your mod. Preview images are .dds files. So you will need to convert the file into that format for Siege to be able to read and display it. The files go in your ../My Games/Siege of Centauri/Screenshots/ directory. I typically give them the same name as the scenario, but that isn’t required. Note that the name of the preview image is specified at the top of your mission file in the mission definition. |