On Dark Souls: PTDE, the game files must be unpacked using this tool
Permissions and credits
Credits and distribution permission
Other user's assetsSome assets in this file belong to other authors. You will need to seek permission from these authors before you can use their assets
Upload permissionYou are not allowed to upload this file to other sites under any circumstances
Modification permissionYou must get permission from me before you are allowed to modify my files to improve it
Conversion permissionYou are not allowed to convert this file to work on other games under any circumstances
Asset use permissionYou must get permission from me before you are allowed to use any of the assets in this file
Asset use permission in mods/files that are being soldYou are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms
Asset use permission in mods/files that earn donation pointsYou must get permission to earn Donation Points for your mods if they use my assets
Author notes
This author has not provided any additional notes regarding file permissions
Fixed the randomizer throwing an error when loading a reference file where NPC replacement is enabled.
Artorias is no longer allowed to replace Ceaseless Discharge as he crashes the game upon his death.
Disabled Tail Cuts in DLC on Remastered for now as it's causing issues with bonfires.
Added a message when .ffxbnd saving fails.
Improved error message for missing game files.
Fixed some of the error messages giving information about PTDE when using the randomizer on Remastered.
Fixed missing .ffxbnd error message being shown twice.
Version v0.4.1.1
Nerfed spawn rate of Undead Merchant when Hostile NPC spawning is enabled.
Fixed 'Difficulty Curve+Easy Asylum' mode not actually following the difficulty curve.
Randomizer now saves an enemy placement file that can be used to copy the enemy placement from that file (for the cases where same seed+settings fail to produce the same results for different people).
Version v0.4.1
* Tail cuts now work on spawned enemies (though loot will be awarded only for the first cut for each tail-cuttable enemy type; meaning each tail-cut award can not be obtained more than once).
* Added an option to make bosses, that replace normal enemies, stay dead permanently.
* Added an option to spawn hostile Undead Merchant, Andre of Astora, Vamos and Hawkeye Gough as enemies.
* Bosses replacing normal enemies no longer respawn after reloading the game after a save&quit/crash.
* Enemies in ambushes involving Hollows hanging from ledges have been moved, so that the replacing enemies don't immediately fall to their deaths.
* Enemies replacing ghosts in New Londo Ruins that previously spawned in walls (and got stuck) or in locations where they immediately die have been moved to valid locations.
* Added an option called "try for unique bosses" which, when enabled, tries to minimize the repetition of bosses in actual boss fights.
* Enemies replacing the two Undead Dragons have finally discovered the concept of gravity and no longer walk around in mid-air.
* Enemy replacing the Undead Dragon in Valley of the Drakes no longer spawns in mid-air.
* Enemies replacing Titanite Demons now award Demon Titanite when killed.
* Enemy replacing the Berenike Knight now awards the Titanite Shard when killed.
* Enemy replacing the red-eyed Chaos Bug now awards the Sunlight Maggot when killed.
* Added a new option for Type Replacement that makes bosses replacing normal enemies disobey the normal type replacement, so that when normal enemies can be replaced with both normal enemies and bosses, individual enemies can become bosses, instead of all of one specific enemy type becoming bosses.
* Added an option to disable replacement of the respawning mosquitoes in Blighttown swamp.
* Chaos Bugs are not spawned by default, since they're passive.
* Evil Vagrants can now spawn.
* Fixed an issue that caused Anor Londo Gargoyles and Hellkite Drake having invalid parameter values when spawned as a normal enemies.
* Seath can no longer replace Stray Demon, to avoid him poking his head and wings into the Asylum Demon arena.
* Added a Difficulty Curve + Easy Asylum mode, so that even on looser difficulty curves the Asylum is guaranteed to remain easier.
* Size limit is always enforced on the enemy replacing the Crest Key mimic to avoid the replacer potentially getting stuck in the wall/ceiling and making the key unobtainable.
* Randomizer now saves the current settings on randomization and automatically loads them on startup.
* Added 'Restore default settings' button to set all the options to their default values.
* Randomizer should now work with notaprofi's Infinite NG+ mod.
* Message given when PTDE version's .exe checksum does not match any known ones is improved.
* Randomizer gives a proper error message and suggestions when it's unable to modify DARKSOULS.exe on PTDE.
* Fixed a small bug that caused the randomizer to throw an error on launch about a sellout page variable in some circumstances.
Version v0.4
* Fixed .msb file backups being overwritten every time in v0.3.2.
* Randomizer attempts to fix invalid .msb file backups that were caused by v0.3.2, should they exist.
* Bosses replacing normal enemies now drop souls.
* Added a slider to change the percentage of souls dropped by bosses replacing normal enemies.
* Added the 'Enemy type replacement' option: when enabled same enemies in one area will be replaced with the same enemies. (For example all Silver Knights in Anor Londo could become Darkwraiths, instead of individual Silver Knights being different).
* Added 'Pinwheel Chaos' option: when enabled the main Pinwheel in the boss fight is not replaced, but the clones are.
* Added an option to nerf Gwyn spawn rate.
* Added an option to avoid an enemy getting replaced with the same enemy.
* Changed the the item drop of all Mimics in the game from a dropped guaranteed item to an itemlot awarded via event scripts, so the items can be obtained when the enemies are replaced.
* 2 Passive Pisacas that drop the unique miracles recieved the same treatement as mimics.
* Randomizer removes the ItemLotId-s of the previously mentioned enemies from NpcParam.param, so that when these enemies don't get replaced (eg. when Replace chance is less than 100%), the items are not aquired twice.
* Added separate pages for options to fit them all without making the window massive.
* Description area shows descriptions only for the options on the selected page to avoid a massive wall of text.
* Removed Armored Tusk [Parish Version] and Great Felines from spawning by default, since all they want to do is go home (can be re-enabled using Enemy Config).
* Removed Phalanx from spawning as they do nothing (can be re-enabled using Enemy Config).
* Tweaked the size limit on some spawn locations to allow a bit larger enemies to spawn.
* Raised the difficulty value of Quelaag boss fight to be a bit higher than individual gargoyles.
* Quelaag is considered a larger boss than previously, to avoid her spawning in Taurus/Capra fights when size limit is enforced as her lava can be impossible to avoid in those arenas.
* Lowered the Unique enemy limit on Remastered from 70 to 60, improves stability a bit, without sacrificing much enemy variety.
* Blighttown has a separate, lower unique enemy limit now, to lessen the chances of the game crashing when entering Great Hollow or Demon Ruins.
* Writing permission error message is not displayed when the check wasn't actually done because of missing files.
* Changed the decription of Mimic replacement mode, to reflect the changes to the item rewards.
Version v0.3.2
* Completely rewrote the .msb file handling class; works way faster now (file saving time reduced by ~90%).
* Changed the .bnd handler a bit, works significantly faster.
* Randomization process time reduced from ~25 seconds to ~5 seconds.
* First time setup time reduced from ~65 seconds to ~6 seconds on PTDE and form ~130 seconds to ~50 seconds on the Remaster.
* Moved the T-Posing and Enemy config controls to be below other controls instead of to the right of them to reduce window width.
* Window scales a bit better, no longer just cuts stuff off on the right but rather scales the controls. Avoids some controls being cut off at low resolutions/high display scaling.
* Cleaned up the code in general, removing a lot of useless/obsolete stuff.
* Made the source available on GitHub: https://github.com/everKalle/Dark-Souls-Enemy-Randomizer
* Finally fixed Easy Asylum mode to only affect the first visit, enemies on the return visit are no longer chosen from the Easy Asylum list.
Version v0.3.1
* Added the possibility to configure what enemies will be placed in the world.
* Custom enemy configurations are saved in enemyRandomizerData\customConfigs as text files.
* EnemyConfig screen contains comments on several enemies, mostly explaining why certain ones are disabled.
* Randomizer logs the custom config if one is used (in a compact, not really humanly readable format).
* Artorias can be placed into the world by default on the Remastered version, as he doesn't seem to cause crashes there (like he does on PTDE) when spawned as a normal enemy.
* Gaping Dragon and Kalameet can't replace Capra anymore, as they can potentially get stuck above the arena.
* Seath, Gaping Dragon and Kalameet can't replace Boss Pinwheel, again can easyly phase themselves above the arena and can't be killed.
* Seath, Gaping Dragon and Kalameet are not allowed to be Iron Golem, as they can get stuck floating above the ground, being no threat and only hittable with ranged attacks. (why do these three bosses have to break everything everywhere :(┛ò__ó)┛: )
* Fixed Gargoyle#2 dying when gargoyle#2 mode is 'Do not replace'.
* Moonlight Butterfly no longer sits on it's tower if it doesn't get replaced.
* Quelaag should no longer appear in Asylum on the strictest difficulty mode.
* Tweaked the strictest difficulty curve a bit, reduced the possibility of noticeably harder foes showing up instead of easier enemies (eg Super Ornstein as a Gargoyle).
* Removed the Hellkite and ChaosBug/Vile Maggot options, because they're kinda pointless now that enemy config can be changed.
* Hellkite spawning has been disabled by default (but can be re-enabled with the enemy config), since it's a boring enemy
* Titanite demons are disabled by default (again), since their AI doesn't activate properly, but like hellkite, can be re-enabled if one wants them to spawn.
* Huge rat can be placed into the world (honestly I have no idea why I had it disabled)
* Removed a few effect files from being loaded on the Remaster (didn't seem to be enemy related), very slightly reduces the time it takes for the effect preparation step to complete.
* Tweaked unique enemy limit on Remaster.
* Should have a few less crashes on Remastered.
* Added a message to the console for the effect preparation step to state that this part takes a while.
* FFX Handler no longer reports that the CommonEffects.ffxbnd(.dcx) has been saved when it has been prepared previously and doesn't need saving again.
* Randomizer sort of checks whether or not it has permission to modify files, complains if it can't. Avoids the situation where the randomizer seems to complete the randomization properly, but doesn't actually change the files.
* Randomizer gives shows an error message should it run into an exception when randomizing instead of doing absolutely nothing and getting stuck.
Version v0.3
* Randomizer now supports the Remastered version as well.
* Vastly increased unique enemy limit (resulting in larger enemy variety in a single area) on Remastered, as that version is much more stable.
* Randomizer works with dcx compression if used on the Remastered version, so no additional modifications are needed to use the randomizer on that version.
* Randomizer detects if it's being used with PTDE or Remastered, and will use the appropriate mode automatically (shown in the title bar as 'Current Mode: <GAME VERSION>').
* Added "Random with difficulty curve" option.
* Added "Difficulty strictness" option - controls how strictly the "Random with difficulty curve" follows the difficulty curve. On "looser" settings it's possible to still see some endgame enemies/bosses in early parts.
* Added the option to enable/disable T-Posed enemies (if T-Posing is disabled, then enemies replacing other enemies with a special idle state get assigned a valid animation dependent on the new enemy).
* Randomizer enables/disables options depending on if they have any effect or not with selected settings (eg "Boss Chance[Bosses]" is disabled if "Boss mode" is not set to "With Normals or Bosses").
* Gargoyles replacing Moonlight Butterfly will no longer instantly jump down.
* "Seath's" immortality is now properly removed after breaking the crystal, not immediately like in v0.2.
* Bed of Chaos fight has been changed vastly: the "bug" is moved out of the cave and into the open area + it's invulnerability prior to breaking the things on the sides is removed, so a proper fight can be had.
* Other Bed of Chaos parts are no longer replaced, but have their AI disabled, so you don't have it swiping at you while you fight another boss there.
* Bed of Chaos tunnel branches have their invulnerability removed, so the tunnel is accessible immediately (without breaking the.. uhh.. things? at the sides).
* Titanite Demons can spawn (though they sit idle) so that there is at least some chance of getting Demon Titanite.
* Several enemies that were missing previously can now spawn: Undead Attack Dogs, HotDogs, Giant Mosquitoes, Vile Maggots and Chaos Bugs (both normal and red-eyed).
* Added Chaos Bug AI loading.
* Mosquitoes are replaced (respawning horde of Seaths incoming).
* Greataxe Black Knight in catacombs is now replaced (... forgot to set it replaceable before).
* Added an option to enable/disable Hellkite Drake spawning (since it is designed to work on the bridge, and does not provide an interesting fight if spawned elsewhere)
* Added an option to enable/disable Chaos bugs and Vile Maggots, since they have the potential to spawn very often (as they are very small, fitting anywhere) if enemies are placed where they fit and mode is 'Fully Random (+ez Asylum)', especially on PTDE due to the limit on unique enemies per area.
* Seath, Kalameet and Gaping Dragon are now longer allowed to be Gwyndolin as they tend to clip out of the world and die, which causes a) the Anor Londo firekeeper to become hostile, b) player being teleported to the boss arena.
* The illusory wall/statue blocking the way to Gwyndolin is removed on boss death, so in case Gwyndolin still somehow manages to die, the player now has a way out of the boss arena without having to Homeward/Darksign.
* Seath is no longer allowed to be Capra as he tends to get stuck floating above the arena, being unkillable without ranged attacks.
* Trees are not allowed to be Undead Crystal Soldiers and Channelers to avoid them blocking the way in Dukes without being able to kill them. (I admit, somewhat of a lazy way to fix it... probably will exclude them from replacing specific ones in the future)
* Skeletons spawning in the world should now be properly killable without Divine weapons.
* Andre can be replaced by Gwyndolin (when NPC mode is 'with bosses' or 'with bosses and normal enemies'), because the sitting animation fits really well there.
* Changed highlight color of the description area from blue to pink because I could.
* Recreated the modifications to event scripts in the remastered versions of them, those versions are used when randomizer is in Remastered mode to ensure it works properly.
* Added a warning to Size Mode: Anywhere about NPC replacement.
* Added a way to convert current settings configuration (including the seed) into a text format, which can then be used to set the randomizer settings automatically. This is useful for when trying to get the same enemy layout with another person, as now instead of having to manually set all the settings to same, the config text can just be sent to another person, who can just paste it into the randomizer.
* Added some more details to the log, including the text format of the settings.
* Improved the file checking a bit, also will properly check dependent on the version used (expecting .dcx compressed files in Remastered, but uncompressed files in PTDE mode)
* Added a few more details to error messages, also the error message showing the number of missing .ffxbnd files no longer reports ridiculous values (like 24 out of 17 files are missing).
* The "Mode" options are no longer weirdly abbreviated.
Version v0.2
* Fixed the major bug that caused enemies to go missing when re-randomizing without closing randomizer between randomizations.
* Added Visual Effect loading: projectiles + other stuff will now be visible.
* Added the ability to input a custom seed.
* Capra Demons in Demon Ruins are considered normal enemies instead of bosses.
* Giant Blacksmith is properly considered as an NPC.
* Four Kings now have the health of the individual kings not the entire boss.
* Egg carriers are now replaced (+Eingyi is considered an NPC).
* Halberd Black Knights are now actually replaced.
* Fixed AI insertion for Melee Bloatheads and Crow Demons, they can now appear in the world.
* Humanity phantoms can now appear in the world (as they're actually visible now).
* Removed Boss!Gargoyle#2-s warping from the event script, and it can now be replaced.
* Added an option to the GUI to enable/disable said gargoyle replacement (because it can be ridiculously difficult when one gets something like Kalameet + Gwyn so early in the run)
* Catacombs skeleton immortality is now properly removed by changing event scripts (instead of the ugly hack I had before). Skeletons with the special starting state will now activate properly.
* Seath's immortality is removed and he can now be replaced (in the actual boss encounter, not in the scripted death encounter).
* Artorias is a bad boy and knows how to crash the game. He has to sit in the corner and is not allowed to play in Lordran for now. (A lot smaller chance of the game crashing when bosses replace normal enemies, whether it's just a chance to replace, or when everything is bosses).
* Asylum Demon is a lazy boy and does nothing so he has been removed for now.
* Separated boss chance sliders for Normal Enemies and Bosses (so you can have a 10% chance that a normal enemy will be replaced by a boss, and a 75% chance for a boss to be replaced by a boss for example, previously those chances were a single variable).
* Randomizer now gives _proper_ error messages along with some suggestions how to solve them.
* Randomizer doesn't allow you to randomize when there are problems.
* Proper checking of the copied files to avoid having missing or 0 byte copies.
* Added a fancy progress bar to show randomization progress.
* Added a donation link into the randomizer (s e l l o u t).
* Reorganized the GUI layout to group similar options together.
* Changed the information box order to make more sense.
* Console does not show spoilers anymore.
* Randomizer logs a few more details.
Enemy randomizer generates a random placement of enemies to make your playthrough of Dark Souls different and more challenging. Depending on the options you choose, it's possible to, for example, fight Manus (or 3 of them) in the swamps of Blighttown, or pass through the fog gate in Anor Londo only to see a puny hollow and a painting guardian instead of O&S.
It is now possible to also configure what enemies are placed into the world by the randomizer. It's possible to disable enemies from spawning, or allowing the randomizer to spawn certain enemies that are disabled by default (like ghosts). This feature can also be used for more "interesting" purposes: one can disable all enemy types except one to make the randomizer replace all enemies/bosses with that one enemy (so it's possible to turn everything into Gwyns).
Do note however, that this is still a kinda early version of the mod, and does still have some issues.
NOTICE: v0.4.1.2 released
Installation Instructions [Prepare to Die Edition]:
Download Enemy Randomizer and place EnemyRandomizer.exe and enemyRandomizerData folder from the .zip file to Dark Souls Prepare to Die Edition\DATA\ (the same folder where DARKSOULS.exe is).
Run the EnemyRandomizer.exe. The first time you launch the program, it will take some time to start up, as it's preparing files for randomization and backing up the originals.
Configure the options and press the Randomize button to randomize the enemies and write the modified data to .msb and .luabnd files.
If you've used a previous version of the randomizer:
Open the previous version of the randomizer and revert to normal
Delete/Rename EnemyRandomizer.exe the enemyRandomizerData folder of the old version
Copy EnemyRandomizer.exe and enemyRandomizerData folder of the new version to Dark Souls Prepare to Die Edition\DATA\
Download Enemy Randomizer and place EnemyRandomizer.exe and enemyRandomizerData folder from the .zip file to DARK SOULS REMASTERED\ (the same folder where DarkSoulsRemastered.exe is).
Run the EnemyRandomizer.exe. The first time you launch the program, it will take some time to start up, as it's preparing files for randomization and backing up the originals (this step takes a while when used with the Remaster).
Configure the options and press the Randomize button to randomize the enemies and write the modified data to .msb and .luabnd files
You should also probably back up your save file in Documents/NBGI/DARK SOULS REMASTERED and go into offline mode in Steam just in case (I don't know if the changes made by the randomizer can get one banned from online play, doesn't hurt to be safe).
If you've used a previous version of the randomizer:
Open the previous version of the randomizer and revert to normal
Copy EnemyRandomizer.exe and enemyRandomizerData folder of the new version to DARK SOULS REMASTERED\ overwriting any previously existing files.
Restoring normal enemy placement after randomizing:
Run the randomizer and press the "Revert to normal" button to restore the original map and script files.
[Remaster] If you backed up your save file, then restore that as well.
Credits/Thanks:
HotPocketRemix - bnd file unpacking/repacking implementation, event scripting tools that allowed me to change certain event scripts, program GUI inspiration, .emevd file format documentation
Wulf2k - looking at MSBEdit's source code helped me create my implementation of msb editing
Meowmaritus - this comment I found describing luagnl and luainfo file formats
Metal Crow - fix for the game (PTDE) crashing when trying to load all visual effects at once
Lan5432 - helping me test v0.2, providing the best comments about screenshots
DuckyKoi - gifting me the remaster so I could port the randomizer to it.
Some questions you might have:
Is this mod compatible with HotPocketRemix's Item Randomizer? > Yes.
Is this mod compatible with <Insert mod name here>? > If the mod changes .msb files or the event scripts (like Prepare to Die Again, The Scorched Contract, Bleeder Curse, etc.) then no. Otherwise it should work.
Does this mod scramble all enemies or places them randomly? > Enemies are selected totally randomly, so it is entirely possible to see 7 Gwyns and never see any hollows in a single run.
Do I have to revert to normal before each randomization? > No, re-randomizing without reverting works properly.
Can I re-randomize while the game is running? > Yes, as long as you don't change the boss soul drop amount (changes to that take effect only after re-launching the game). You'll need to reload the area by Save&Quitting, using a Homeward Bone/Darksign or warping for the changes to take effect.
[REMASTERED] The enemy AI will sometimes, rarely, just break (seems to happen when moving between areas sometimes, specifically Parish->Darkroot and Firelink->New Londo/Catacombs), reloading (Save&Quit/Death/Homeward) fixes this.
[REMASTERED] In some extremely rare cases certain visual effects (Nitos cloak for example) fail to load properly, reloading (Save&Quit/Death/Homeward) fixes this
[REMASTERED] The visual effects preparation step takes quite a long time to complete.
[PTDE] Due to what i presume are engine limitations (I think it's related to how many unique models are loaded and active at the same time), I can only have a limited number of unique enemies in a single map, otherwise the game will crash in certain places (Blighttown swamp, Darkroot Garden and Oolacile Township/Chasm of the Abyss from the DLC were the most common ones). That limited amount of unique enemy types can be pretty noticeable, particularly when the enemy size limit is enforced and especially in the DLC as it is a single map file.
[Both] Crystal Lizards in The Great Hollow are not replaced, as replacing them makes the area super unstable (crashing about 4 out of 5 times) for some reason.
[Both] Enemies replacing Undead Dragons do not believe in the concept of gravity and choose to disobey the laws of physics instead.
[Both] Asylum Demon replacer will not jump down from where the fog gate will be, dying/reloading puts the enemy down there.
[Both] Certain enemies/bosses, when replacing Manus, can respawn upon sitting at a bonfire.
[Both] If Seath is replaced by a Seath, then breaking the crystal does not cause the stunned animation on him anymore.
[Both] Some tail-cuttable enemies sometimes miss their tails.
[Both] Cutting off the tail of a Seath doesn't visually remove the tail, or create a tail "corpse" (however loot is still properly awarded).
[Both] Asylum may contain ownerless tails.
[REMASTERED] Tail cuts don't work in the DLC.
Things I want to improve on:
The bugs/issues mentioned above.
Anything else that is suggested/fix bugs that are reported.