Modding - Creating Custom Onslaughts ...
Creating Custom Onslaughts for Orcs Must Die!
We have created a path that allows users to modify Onslaught files for Orcs Must Die! Onslaught files are the files that control the enemies, timing, and various other details of the waves in Orcs Must Die!
Download Default Onslaught Files
Before getting started, you can download a zip file with all of the default Onslaught and Timing files at this link. Use these files as your base templates to create custom waves.
How It Works
-
Create your custom Onslaughts from the default files and add them to this directory: ##WhereEverSteamIsInstalled##\steamapps\common\orcs must die!\data\mod\onslaughts\
-
The game will only load a modified version of an onslaught or timing file that is referenced by the core game. This means that you are limited to modifying the contents of existing files (download from the link above). You can’t create entirely new onslaughts.
-
If the folder above containsa file with the same name as an existing default Onslaught, the game will load the custom files to the exclusion of the base game Onslaught. This means that you can edit the contents of the default files, but you shouldn't change their file names.
-
If there is any modified Onslaught or Timing file located in the folder above, then the game will disable posting leaderboard scores and stats for ALL LEVELS in the game, modified or not.
-
There is no messaging or notification for errors in the files or to indicate that you are locked out from leaderboards due to modification. Use at your own risk.
-
-
To return the game to its default state simple delete the contents of the onslaughts directory, and you will be back to playing the default version of the game.
Wait so what programs can/do I use to edit these files?
Only issue I see is that it doesn't allow modification of the delve file found in each of the folders for each map.
/data/delves/%mapname%
The sound is going to act up without correct modification of this file.
Inside of each delve file is a xml grouping labeled <AudioGroups> and <AudioGroup> which are keyed to the rounds modified in the timing and onslaught files.
ex:
any text or xml editor will do. They are all essentially nothing more than xml files renamed to .timing or .onslaught
Ah I see. So what exact values edit the amount of waves and enemies?
Ah I see. So what exact values edit the amount of waves and enemies?
Inside each of the group flags look for the Entity tag and the value "Count". This value sets the number of creatures released.
<Entity Count="30">HordeSwordsman</Entity>
This would release 30 of the normal orcs
Careful, though. Creating too many orcs will render the game unplayable with horrible framerates. Even before the orcs come through the door.
Trying to replicate a mana regeneration "trap" as seen in the DLC preview. Managed to get one that does mana and health, but it is a *tad* unbalanced! Essentially ripped some of the code from the portals. Also need to see if I can go and import custom models easilly.
Is there going to be any allowance for mods asides from just waves without having to jump through flaming hoops? I think I broke the Steam integration for the most part, but it's worthwhile all said and done. However, it would be nice to be able to make mod content to distribute as well.
Careful, though. Creating too many orcs will render the game unplayable with horrible framerates. Even before the orcs come through the door.
Not for me. I did a wave with 10,000 Orcs and I ended up running pretty smoothly.
at once?
MOTHER.OF.GOD
at once?
MOTHER.OF.GOD
Yes and on Chokepoint. That was the most hellish first wave ever. It was like Nightmare mode but even worse. I managed to finish with 5 Rift Points left. It took me a good hour or more to complete that one wave. I didn't affect the over waves so it was 10,000 Orcs and then a tiny wave of Orcs and Kobolds after that (which was a nice refresher either way).
It was insanely fun though. Eventually it became an intense slaught with Elven Archers and Paladins trying to hold the line.
Well I began work on a UI that hopefully allow for someone to easily change the XML's, hopefully should have a working copy soon depending on how work goes.
Only issue I see is that it doesn't allow modification of the delve file found in each of the folders for each map.
/data/delves/%mapname%
The sound is going to act up without correct modification of this file.
Inside of each delve file is a xml grouping labeled <AudioGroups> and <AudioGroup> which are keyed to the rounds modified in the timing and onslaught files.
ex:
The audio references in the delves are just for the music, so basically without changing those you'll either just run out of music eventually or the final clip will loop. That's not something we're planning to fix for this.
Careful, though. Creating too many orcs will render the game unplayable with horrible framerates. Even before the orcs come through the door.
Yup. That's what we were telling you guys early on about insane numbers of enemies and endless modes. Chances are that you're going to run into some performance problems. :)
Careful, though. Creating too many orcs will render the game unplayable with horrible framerates. Even before the orcs come through the door.
Not for me. I did a wave with 10,000 Orcs and I ended up running pretty smoothly.
I'm curious about how you did this modding. I edited the files ChokepointLeft, ChokepointMiddle and ChokepointRight to each spit out 2,000 orcs in the first wave, and my game quickly crashed to desktop about a minute into the first wave. When I went back and edited just ChokepointMiddle to spit out 2,000, leaving the right and left sides alone, I was able to get a steady stream of 2,000 orcs with no issues (though, sadly, not much of a challenge).
Is there a hard limit to the number of enemies onscreen before the game crashes? I experienced no slowdown or framerate issues, just an immediate CTD at a certain point.
How about posting the changes in the mapfiles, so other can duplicate them ?
I've done Chokepoint with 1,5k each wave and it was boring, cause all of the archers and some autoballista have done that alone.
After I addet 10 Ogres per wave it became "intresting". I'm still testing on it.
###the middle sector###
<!--Wave 4-->
<Wave Break="-1" GroupSpacing="3" WaitTilDead="True">
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="10">Ogre</Entity>
</Group>
<Group Count="2" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<NormalMode>false</NormalMode>
<EasyMode>false</EasyMode>
<Entity Count="100">KamikazeHordeRunner</Entity>
<Entity Count="500">HordeSwordsman</Entity>
</Group>
</Wave>
I'd also like to see an answer to this. Changing the number of orcs is nice and all, but my main interest is in "adjusting" the traps/techs/mobs/etc. Raising the orcs' health won't cause performance problems like raising their numbers could...
Careful, though. Creating too many orcs will render the game unplayable with horrible framerates. Even before the orcs come through the door.
Not for me. I did a wave with 10,000 Orcs and I ended up running pretty smoothly.
I'm curious about how you did this modding. I edited the files ChokepointLeft, ChokepointMiddle and ChokepointRight to each spit out 2,000 orcs in the first wave, and my game quickly crashed to desktop about a minute into the first wave. When I went back and edited just ChokepointMiddle to spit out 2,000, leaving the right and left sides alone, I was able to get a steady stream of 2,000 orcs with no issues (though, sadly, not much of a challenge).
Is there a hard limit to the number of enemies onscreen before the game crashes? I experienced no slowdown or framerate issues, just an immediate CTD at a certain point.
I did Chokepoint as well with 5,000 in the middle and 2500 in each of the sides. They completely filled up the side of the map like a green tide and I was running fine. I would get really quick hickups every 10 minutes or so but other than that I ran very smoothly.
now someone needs to create a loop for the waves that increases the number each spawn, IE Survival
now someone needs to create a loop for the waves that increases the number each spawn, IE Survival
Sadly there is no logic structure to the onslaught files, it's just a straight up read only xml file. There are only as many waves as are put into the onslaught files.
now someone needs to create a loop for the waves that increases the number each spawn, IE Survival
Sadly there is no logic structure to the onslaught files, it's just a straight up read only xml file. There are only as many waves as are put into the onslaught files.
Actually you can create as many waves as you want in each onslaught file, you just need to edit the TIMING file so that there are breaks for the waves and they run seamlessly.
My test setup which indeed worked for "The Hallway":
<Onslaught WaypointGroup="PathMain">
<!-- Wave 1 -->
<Wave Break="-1" GroupSpacing="12" WaitTilDead="True">
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
</Wave>
<!-- Wave 2 -->
<Wave Break="12" GroupSpacing="12" WaitTilDead="True">
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="12">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="12">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="15">HordeSwordsman</Entity>
</Group>
</Wave>
<!-- Wave 3 -->
<Wave Break="12" GroupSpacing="12" WaitTilDead="True">
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<NormalMode>false</NormalMode>
<EasyMode>false</EasyMode>
<Entity Count="1">ArmoredOgre</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="12">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Random">
<Entity Count="15">HordeSwordsman</Entity>
</Group>
</Wave>
<!-- Wave 4 -->
<Wave Break="12" GroupSpacing="12" WaitTilDead="True">
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
</Wave>
<!-- Wave 5 -->
<Wave Break="12" GroupSpacing="12" WaitTilDead="True">
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
<Group Count="1" EntitySpacing="0.5" NumPaths="5" PathSelection="Sequential">
<Entity Count="10">HordeSwordsman</Entity>
</Group>
</Wave>
</Onslaught>
Here you can see I made five waves for the map "The Hallway". Originally there were only three; here is my TIMING file edit:
I'm very aware of how to edit the waves, and how to create them from scratch. I've been doing it since the game was released.
My point was that there isn't a logic structure, i.e. a "for loop", "do while", or "if else" kind of logic scripting that can be done with the files. The game only reads the file and uses what ever is in it to create the instance. If you put 20 waves in the timing, and onslaught files, you get 20 waves period. You can't have it loop the 20 waves to infinity.
And you'll notice that after the default set of waves is over, your music breaks... thats where the .delve file comes into play, that we can't edit anymore.
I'm very aware of how to edit the waves, and how to create them from scratch. I've been doing it since the game was released.
My point was that there isn't a logic structure, i.e. a "for loop", "do while", or "if else" kind of logic scripting that can be done with the files. The game only reads the file and uses what ever is in it to create the instance. If you put 20 waves in the timing, and onslaught files, you get 20 waves period. You can't have it loop the 20 waves to infinity.
And you'll notice that after the default set of waves is over, your music breaks... thats where the .delve file comes into play, that we can't edit anymore.
I see what you are talking about now. I also noticed that the files for the Tower are not there? Can anyone confirm?
I'm very aware of how to edit the waves, and how to create them from scratch. I've been doing it since the game was released.
My point was that there isn't a logic structure, i.e. a "for loop", "do while", or "if else" kind of logic scripting that can be done with the files. The game only reads the file and uses what ever is in it to create the instance. If you put 20 waves in the timing, and onslaught files, you get 20 waves period. You can't have it loop the 20 waves to infinity.
And you'll notice that after the default set of waves is over, your music breaks... thats where the .delve file comes into play, that we can't edit anymore.
I see what you are talking about now. I also noticed that the files for the Tower are not there? Can anyone confirm?
Tower is kind of messed up. It's file are:
SorcererTowerMain.onslaught
SorcererTower.timing
SorceresrsTowerSneak.onslaught
I notice that hunters often get an extra tag Filter="AttackMinions". I have a few questions reguarding this:
I assume this causes those hunters to attack guardians instead of the player, correct?
Can you force them to attack the player instead? Or force them to attack barricades?
Can I also apply this attack tag to kobold sappers?
I made one for Twin Halls where I put a lot of orcs, but I find that after the initial wave, their density is no match for my traps. Am I supposed to reduce spacing? If I reduce it to 0.1, the game eventually crashes (exits).
Also, I noticed that Runner's Alley is missing.
Anyone made some good ones they want to share?
Fun stuff...
Also, I noticed that Runner's Alley is missing.
TheCorner2 (that was the original name of Runner's Alley)
I made one for Twin Halls where I put a lot of orcs, but I find that after the initial wave, their density is no match for my traps. Am I supposed to reduce spacing? If I reduce it to 0.1, the game eventually crashes (exits).
I'm not 100% sure about this, but I did a few test runs and I think that one way you can up the density is to increase the "paths" value. As far as I can tell, the enemy density is a function of both paths and spacing. Paths (I'm assuming) is how many path-finding entities (enemies) the game can make at one time, and spacing is how much time between those batches.
In other words, an enemy count of 100, spacing of 0.5, and paths set to 5 will make 5 orcs, wait half a second, make another 5, wait, and repeat until 100 have been made. Setting path to 10 means that it creates 10 batches of 10, rather than 20 batches of 5. Can anyone from RE confirm that this is how it works?
So if your problem was caused by the enemy creation function getting called too many times too quickly, you might be able to get by with less frequent batches of more orcs. If it's just a matter of too many enemies period, then I'd figure that how they were made isn't going to make any sort of difference.
Hope that helps!
Thanks SixOkay & BeChan, I'll give that a try.
nvm








Spiffy, custom wave support again! Now if only I can get custom traps and techs working again, the ones in the base game and DLC are fun and all, but it is much more amusing to make your own. Turbo powered steam traps coupled with ceiling spikes for the win!