tModLoader JereTheJuggler's Custom Generation

JereTheJuggler

Spazmatism
JereTheJuggler's Custom Generation
Now Available For 1.4!
Mod Overview

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
Version 1.2.0.5
  • Minor optimizations
Version 1.2.0.4
  • Minor optimizations
  • Added support for the progress bar that shows feedback during generation
Version 1.2.0.3
  • 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.
Version 1.2.0.2
  • 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.
Version 1.2.0.1
  • Minor improvements to the biome specific variations of the mineshaft
  • Added an icon for the Mod Browser and Steam Workshop
Version 1.2
  • Updated for tModLoader 1.4
Version 1.1.3.5
  • 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
Version 1.1.3.4
  • Some small changes that should reduce the risk of incompatibility with other mods
Version 1.1.3.3
  • Fixed an issue with the snow outpost generation
  • Added the ability to have snow outposts randomly generate with ice bricks instead of snow bricks
Version 1.1.3.2
  • Fixed an issue with the custom sword shrines spawning above the surface
Version 1.1.3.1
  • 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
Version 1.1.3
  • 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
Version 1.1.2
  • 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
Version 1.1.1
  • 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
Version 1.1
  • Added pier
  • Added desert shrines
  • Added living cacti
  • Slightly reduced the density of corruption worm teeth and crimson bones
Version 1.0.1
  • Removed the test item created by the mod skeleton generator (whoops)
  • Added this post as the homepage for the mod
Version 1.0
  • 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
V05XRjS.png

Snowy Outpost Towers - Small outpost towers protect the Snow biome
tAqgKCm.png

Giant Worm Teeth - Giant Worm Teeth protrude from the walls of the Corruption Chasms
KEXfjHo.png

Giant Bones - Giant bones ravage the Crimson landscape
tvRhT5P.png

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)
p7D2ocb.png

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
80IG1NW.png

Desert Shrines - A few special shrines are buried in the underground desert
1yJcJax.png

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

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

Flower Biome - Now that was some good fertilizer!
SnFWi6u.png

Custom Minecart Tracks - I hope you like roller coasters!
EXh0nEL.png

wxgWo11.png

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.
NckoMVR.png

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:
XML:
<ChestConfiguration>
    <ItemPool>
        <Item type="CopperShortsword"/>
        <ItemSet>
            <Item type="MiningHelmet"/>
            <Item type="MiningShirt"/>
            <Item type="MiningPants"/>
        </ItemSet>
    </ItemPool>
    <Item type="HermesBoots"/>
</ChestConfiguration>
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:
  • "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
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>
It should also be noted that the "ChestConfiguration" tag is essentially just a glorified ItemSet tag, and it can contain any combination of ItemPool, ItemSet, and Item tags all the same.

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>
Additionally, any of the child elements within an ItemPool can be given a "weight" attribute. This number will be used to make some options more likely than others. Example:
XML:
<ChestConfiguration>
    <ItemPool>
        <Item type="GoldCoin" weight="1"/>
        <Item type="SilverCoin" weight="2"/>
        <Item type="CopperCoin" weight="3"/>
    </ItemPool>
</ChestConfiguration>
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:
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:
That is a pretty neat idea to make exploration and game itself more interesting. And i want see more to come welp time to generate a new world again c-c

Still i didnt saw any difference in the Demonic Hell House screenshot. And i think the Giant Bones and Giant Worm teeth stuff needs more work imo.

Beside that good luck with future develope.
 
That is a pretty neat idea to make exploration and game itself more interesting. And i want see more to come welp time to generate a new world again c-c

Still i didnt saw any difference in the Demonic Hell House screenshot. And i think the Giant Bones and Giant Worm teeth stuff needs more work imo.

Beside that good luck with future develope.
The hell houses have new blocks protruding out of the top sides of the towers.
 
This mod looks really neat. I won't be using it anytime soon since I already have several playthroughs in progress already. Whenever I start my next one I'll be sure to have this mod loaded. By then this mod will probably have even more features. I really like the Abandoned Mineshaft from the looks of it.
 
Really cool idea's and looks really good, I hope you add some more cool stuff to the jungle and the beach, ill be sure to try this out later.
Thanks! Problem with the jungle is that it's already so dense as is. Whatever I would make would have to be mindful of the Lihzahrd Temple, beehives, jungle shrines, and living rich mahogany trees.
Also slightly bigger problem is that I don't have any ideas for what I could add to the jungle...
 
Thanks! Problem with the jungle is that it's already so dense as is. Whatever I would make would have to be mindful of the Lihzahrd Temple, beehives, jungle shrines, and living rich mahogany trees.
Also slightly bigger problem is that I don't have any ideas for what I could add to the jungle...
The jungle surface is usually pretty clear.
 
Would you consider implementing a config file to enable/disable specific features added? Or better yet -- a way to configure the amount each feature spawns, from nothing to more than default. This is the only issue in this mod I'm a bit concerned with, of course I haven't had enough time to test how much everything spawns yet since this just released.

Otherwise, I'm loving what I'm seeing here so far. More variety in surroundings is exactly what Terraria needs right now. Great work! :)
 
ohhhh damn i've always wanted a mod like this

one thing i've always wanted was much larger underground biomes, having them feel like proper biomes instead of a small section using different blocks

would this be a good idea to implement at all
 
Really sweet mod, Giant Bones and Giant Worm Teeth could be tweaked a bit, not really a fan of them, and not sure if I like the Snowy Outpost Towers, doesn't feel as natural and fitting as everything else does.
 
Really sweet mod, Giant Bones and Giant Worm Teeth could be tweaked a bit, not really a fan of them, and not sure if I like the Snowy Outpost Towers, doesn't feel as natural and fitting as everything else does.
on the towers, I feel they should be a little different in design and made out of boreal wood
and maybe there could be igloos in the winter biome?
 
Back
Top Bottom