JereTheJuggler
Spazmatism
JereTheJuggler's Custom Generation
Now Available For 1.4!
Mod OverviewNow Available For 1.4!
This mod's goal is to add many new features to vanilla world generation. These enhancements range from small, purely cosmetic changes, to completely new, fully fleshed out custom structures that can help with game progression.
I do not plan to add any new blocks or items to this mod. I'm not opposed to integrating blocks and items from other loaded mods, but so far I have stuck to completely vanilla items and blocks.
Steam Workshop Page
Steam Workshop::JereTheJuggler's Custom Generation
Changelog
Version 1.2.0.6
- Ported to work with tModLoader for 1.4.4.9
- Minor optimizations
- Minor optimizations
- Added support for the progress bar that shows feedback during generation
- Fixed how I was handling disabling vanilla minecart tracks from 1.3. Previously the only way I could do it was to completely remove the part of world generation that handles minecart tracks, sword shrines, campsites. Unknown to me at the time, it also added thin ice patches, living mahogany trees, and explosive traps... whoops.
- Previously my compromise for this was to add in my own generation for sword shrines that closely mimicked the vanilla generation. This custom generation has now been removed.
- Fixed spawning of Hellforges in the custom Hell Houses. Previously things like pots and other furniture were being placed before Hellforges and taking up all the available room. Now Hellforges are the first things added to the houses.
- Minor improvements to the biome specific variations of the mineshaft
- Added an icon for the Mod Browser and Steam Workshop
- Updated for tModLoader 1.4
- Removed the gemspark walls from the corruption teeth/crimson bones. Found a different way to give them a more subtle glow
- Added a setting in the mod's config to turn off the glow for the corruption teeth/crimson bones altogether
- Some small changes that should reduce the risk of incompatibility with other mods
- Fixed an issue with the snow outpost generation
- Added the ability to have snow outposts randomly generate with ice bricks instead of snow bricks
- Fixed an issue with the custom sword shrines spawning above the surface
- Fixed an oversight introduced in 1.1.2 that allowed the living cactus to generation inside the ocean
- Tweaked a portion that surveys the surface of the world to start looking for the surface at a lower elevation because it was getting caught on floating islands in large worlds
- Added biome specific variations for the lights and stations of the custom minecart tracks
- Added custom hell houses
- A lot of cleaning up old code to extend functionality for future use, including adding support to the chest configuration for items from other mods (as well as supporting it in the XML config files)
- Made most features check WorldGen.structures before they are placed, and add to the list after they are generated. This will hopefully prevent my generation from overwriting content added by other mods if they also utilize WorldGen.structures
- Added flower biome
- Added custom minecart rails that completely replace the vanilla tracks
- Fixed a tiny bug with the corridors of the mineshaft overwriting the tiles of biome specific room clusters
- Removed the XML file for feature enabling/disabling in favor of integrating that into the json system that can be modified in-game. The chest configuration still uses the XML system
- Added floating altar (it was already done around 2 years ago, just sitting unreleased)
- Added the ability for the mineshaft to change its appearance based on what biome each of the room clusters generate in
- Added XML configuration files that can be edited to turn off individual features and modify chest contents (more info at the bottom of this post)
- Removed growing crystal shards from underground hallow. I was never really a huge fan of them, since they essentially turned a good resource into mostly useless decorative blocks. The way it was implemented was probably more of a hack anyways, and I remember someone sent me a private message saying it was causing errors for them too. I only really added it in the first place just so I could say I did something for the hallow
- Added pier
- Added desert shrines
- Added living cacti
- Slightly reduced the density of corruption worm teeth and crimson bones
- Removed the test item created by the mod skeleton generator (whoops)
- Added this post as the homepage for the mod
- Initial Release
Currently Implemented Features
All of these features can be turned on or off through the config menu in the mod list while in-game!
I also strongly encourage suggesting ideas for new features, or improvements to existing features. I'm the only person working on this, so it's tough to come up with idea on my own.
I have the ability to add items from other mods in the chests that I generate, but I don't really play modded Terraria and I don't know what items would be good choices for balance. Let me know is you have suggestions!
Hanging Spike Traps - Some devious new traps are placed randomly underground

Snowy Outpost Towers - Small outpost towers protect the Snow biome

Giant Worm Teeth - Giant Worm Teeth protrude from the walls of the Corruption Chasms

Giant Bones - Giant bones ravage the Crimson landscape

Extra Gems - Added some more gems in some specific areas that will reward risk taking early in the game
Up to 10 ruby and 10 topaz are placed in each marble biome and up to 10 sapphire and 10 amethyst are placed in each granite biome.
Abandoned Mineshaft - A giant, sprawling Mineshaft lays hidden deep within the cavern layer, filled with many valuables (possibly some that are extremely rare)

This image intentionally leaves out a lot of what the structure has to offer. I want it to be a real discovery when you find it.
Pier - Randomly on either the left or the right ocean there will be a pier to fish off of

Desert Shrines - A few special shrines are buried in the underground desert

Living Cacti - Whatever causes those giant trees must have spread to the desert

Floating Altar - It's no ordinary floating island...

Flower Biome - Now that was some good fertilizer!

Custom Minecart Tracks - I hope you like roller coasters!


Custom Hell Houses - Because hell wasn't already evil enough
By the way, there can also be extra large and downright massive hell houses too. The house in this screenshot is a normal sized house.

Chest Configuration Info
This mod uses XML config files for determining the contents of chests. It's a bit complicated, which is why I'm not sure how to adapt them the the built in json config system, but all the information for how to edit them is described below.
If you ever want to restore the config files back to their defaults, you can just delete them. They will then be regenerated the next time you create a world.
It should also be noted that if any errors occur while reading the config files, they will be regenerated and lose any edits that may have been made to them. I may make it more forgiving at a later point, but for now I just went the safer route.
This system is also not currently set up to handle items that aren't from the vanilla game. That'll be a thing for me to add later.
Anyways, onto the actual config files. Here is the basic structure that they all follow:
Every chest config starts off the same way, with a "ChestConfiguration" element. Inside of the ChestConfiguration element, you can have "ItemPool", "ItemSet", and "Item" elements.
The "Item" Tag
The Item tags are ultimately the things that will be put in the chest, and they can have the following attributes:
The ItemSet tag specifies a grouping of Item tags that will be put in the chest. The purpose is mainly for all-or-nothing groups of items. An example in the vanilla game is the Pharaoh vanity in pyramid chests. You can either find both the mask and the robe in the chest, or you can find neither, but you cannot find only one of them. These 2 items would be in an ItemSet together.
The ItemSet tag can also have the following attributes:
The "ItemPool" Tag
The ItemPool tag specifies a selection between different items. Only one of the child elements will actually contribute to what is put in the chest, and it is picked at random. You can also have ItemSet elements nested within ItemPool tags. Going back to the pyramids from the vanilla game, this is how you would make a chest generate with either a Sandstorm in a Bottle, a Flying Carpet, or a combination of the Pharaoh vanity items.
The ItemPool tag can also have the following attributes:
In the above example, there would be a 1 in 6 chance of getting a gold coin, a 2 in 6 (or 1 in 3) chance of getting a silver coin, and a 3 in 6 (or 1 in 2) chance of getting a copper coin. (chances are out of 6 because that's the sum of the weights specified. 1 + 2 + 3)
Advanced Usage
The ItemPool and ItemSet tags support infinite nesting (theoretically), and there's nothing stopping you from putting an ItemPool inside of an ItemSet that is inside of an ItemPool and so on.
This configuration, while rather over the top, is totally valid:
Feel free to ask any question about these configuration files below. It will let me know if I need to update my explanation to make it more clear!
If you ever want to restore the config files back to their defaults, you can just delete them. They will then be regenerated the next time you create a world.
It should also be noted that if any errors occur while reading the config files, they will be regenerated and lose any edits that may have been made to them. I may make it more forgiving at a later point, but for now I just went the safer route.
This system is also not currently set up to handle items that aren't from the vanilla game. That'll be a thing for me to add later.
Anyways, onto the actual config files. Here is the basic structure that they all follow:
XML:
<ChestConfiguration>
<ItemPool>
<Item type="CopperShortsword"/>
<ItemSet>
<Item type="MiningHelmet"/>
<Item type="MiningShirt"/>
<Item type="MiningPants"/>
</ItemSet>
</ItemPool>
<Item type="HermesBoots"/>
</ChestConfiguration>
The "Item" Tag
The Item tags are ultimately the things that will be put in the chest, and they can have the following attributes:
- "type" - This specifies which item will be put in the chest. This usually means the name of the item just with spaces removed, but there are some cases where the internal name does not match the display name.
- "modName" (optional) - This specifies the name of the mod that the item is from. This should not be provided for vanilla items, and is required for modded items. Example:
XML:
<Item modName="WeaponsOfMassDecoration" type="PaintStaff"/>
- "min" (optional) - For items that stack, this specifies the minimum quantity of the item. If no maximum is provided, it will be the quantity of the item. Example:
XML:
<Item type="GoldCoin" min="5"/>
- "max" (optional) - For items that stack, this specifies the maximum quantity of the item. If no minimum is provided, the minimum will default to 1. A random number will be picked between the min and max values to get the quantity of the item. Example:
XML:
<Item type="CopperCoin" min="40" max="80"/>
- "appearanceChance" (optional) - To give an item a chance to not show up at all, you can specify a number between 0 and 1. Example:
XML:
<!-- This item will have a 50% chance to show up in the chest --> <Item type="SuspiciousLookingEye" appearanceChance=".5"/>
The ItemSet tag specifies a grouping of Item tags that will be put in the chest. The purpose is mainly for all-or-nothing groups of items. An example in the vanilla game is the Pharaoh vanity in pyramid chests. You can either find both the mask and the robe in the chest, or you can find neither, but you cannot find only one of them. These 2 items would be in an ItemSet together.
The ItemSet tag can also have the following attributes:
- "appearanceChance" (optional) - To give an entire set of items a chance to not show up at all, you can specify a number between 0 and 1. Example:
XML:<ItemSet appearanceChance=".25"> <Item type="FlareGun"/> <Item type="Flare" min="15" max="30"/> </ItemSet>
The "ItemPool" Tag
The ItemPool tag specifies a selection between different items. Only one of the child elements will actually contribute to what is put in the chest, and it is picked at random. You can also have ItemSet elements nested within ItemPool tags. Going back to the pyramids from the vanilla game, this is how you would make a chest generate with either a Sandstorm in a Bottle, a Flying Carpet, or a combination of the Pharaoh vanity items.
XML:
<ChestConfiguration>
<!-- This ItemPool has 3 child elements, so there are 3 options for what will be added to the chest. -->
<ItemPool>
<!-- This whole set is option 1 -->
<ItemSet>
<Item type="PharaohMask"/>
<Item type="PharaohRobe"/>
</ItemSet>
<!-- This is option 2 -->
<Item type="SandstormInABottle"/>
<!-- This is option 3 -->
<Item type="FlyingCarpet"/>
</ItemPool>
</ChestConfiguration>
The ItemPool tag can also have the following attributes:
- "appearanceChance" (optional) - The give a chance that none of the items in the pool will show up at all, you can specify a number between 0 and 1. Example:
XML:<!-- There is a 75% chance that an option from this pool will be added --> <ItemPool appearanceChance=".75"> <!-- options --> </ItemPool>
- "avoidDuplicates" (optional) - Enabling this attribute will make it so multiple chests filled with the same configuration will exhaust all possible options from the pool before reusing the same option. If the configuration in the example below were used to fill 3 chests, the player that opens them would be guaranteed to be able to make a Fish Finder! Example:
XML:
<ChestConfiguration> <ItemPool avoidDuplicates="true"> <Item type="FishermansGuide"/> <Item type="WeatherRadio"/> <Item type="Sextant"/> </ItemPool> </ChestConfiguration>
XML:
<ChestConfiguration>
<ItemPool>
<Item type="GoldCoin" weight="1"/>
<Item type="SilverCoin" weight="2"/>
<Item type="CopperCoin" weight="3"/>
</ItemPool>
</ChestConfiguration>
Advanced Usage
The ItemPool and ItemSet tags support infinite nesting (theoretically), and there's nothing stopping you from putting an ItemPool inside of an ItemSet that is inside of an ItemPool and so on.
This configuration, while rather over the top, is totally valid:
XML:
<ChestConfiguration>
<ItemPool avoidDuplicates="true">
<ItemSet>
<ItemSet appearanceChance=".5">
<Item type="MagicPowerPotion" min="3" max="7"/>
<Item type="ManaRegenerationPotion" min="3" max="7"/>
</ItemSet>
<Item appearanceChance=".5" type="IronskinPotion" min="3" max="6"/>
<ItemPool avoidDuplicates="true">
<Item type="EndurancePotion" min="2" max="5"/>
<Item type="SwiftnessPotion" min="4" max="8"/>
<Item type="ShinePotion" min="3" max="6"/>
<ItemSet>
<Item type="MasterBait" min="3" max="7"/>
<Item type="FishingPotion" min="5" max="8"/>
<Item type="SonarPotion" min="6" max="10"/>
</ItemSet>
</ItemPool>
</ItemSet>
<ItemSet>
<Item type="FlareGun"/>
<ItemPool>
<Item type="Flare" min="10" max="20" weight="3"/>
<Item type="BlueFlare" min="10" max="20"/> <!-- if weight is excluded it defaults to 1 -->
</ItemPool>
</ItemSet>
<Item type="MagicMirror"/>
<Item type="LifeCrystal" min="2" max="5"/>
</ItemPool>
<Item type="HealingPotion" min="2" max="5"/>
<ItemPool>
<Item type="GoldCoin" max="2"/>
<Item type="SilverCoin" min="10" max="40" weight="2"/>
<Item type="CopperCoin" min="40" max="80" weight="3"/>
</ItemPool>
</ChestConfiguration>
Feel free to ask any question about these configuration files below. It will let me know if I need to update my explanation to make it more clear!
Last edited: