Theleaves of the tree icon when selecting a world will change depending on the status of the world. The left half will always represent the world's naturally spawned evil biome, while the right will be a pure Forest tree. In some secret world seeds, both evil biomes will be native to the world, resulting in a tree that is both Corrupt and Crimson with no pure representation. In Hardmode, the bottom right quarter and half of the left branch will turn yellow, representing The Hallow.
Like you said, there are many other things that change upon defeating the Wall of Flesh and unleashing hardmode in a particular world, as listed on the Hardmode page. Personally, I believe the simplest method is to try and destroy Hellstone using Dynamite or Bombs. This is only possible in Hardmode, and the underworld is one of the safest areas in early Hardmode.
Though, you can still bring hallowed seeds from other world, so I can't know for sure. But if you don't have any other worlds, then you're highly likely on the hardmode (you can still bring them from multiplayer world, so...). Same thing can be said to Pwnhammer, it'll be dropped from Wall of Flesh by 100% drop rate, so if you have it then you're most likely on hardmode, but well, you can bring it from any other world.
Well, I think that's the fastest and most reliable way to know if your world is on hardmode: If Merchant is around you and he sells Disco Ball/Gold Dust, then you're on hardmode, since he only sells that item after beating Wall of Flesh.
I really want to get every Steam achievement for Terraria and the next two I want to get is Gelatin World Tour and Boots of the Hero. I have 23/24 of the slimes for Gelatin World Tour and I have come to the conclusion I still need to kill the Crimslime, which is a hardmode slime in the crimson. The world I've been playing on is corrupted. Is the best thing to do is to just quickly defeat The Wall of Flesh with my character I use on my world on a single player crimson world or is there another quicker way to just do it on my world that is already hardmode?
The quickest way to earn that achievement would be to go into a new world, kill the Wall of Flesh immediately, and hang in the Crimson biome until the slime shows up. Achievements are game-wide, not world-specific.
If you want to keep things to your current world though, my recommendation would be to grab enough crimson stone/seeds from your other world, and place them safely in your own world to create the Crimson biome. You will need around 200 blocks to shift the biome. You could potentially make it a floating island so it doesn't interfere with the greater world, and safe enough that it doesn't spread out of control through your world. With enough Crimson based blocks, the world biome should adjust to Crimson, which would allow Crimson enemies to spawn, including your highly sought after Crimslime!
When the dryad is placed in a graveyard biome, she'll sell seeds for the opposite world evil during blood moons. So in your corruption world, she would sell crimson seeds, which you can plant in an area that you want to turn to crimson. I would say this is slower, since you have to wait for the Crimson to spread enough to count as a biome, but it is still an option.
First, make your Dryad go to a Graveyard Biome. An easy way to do this is to wait until nighttime, make a house in a Graveyard (5+ gravestones), and make the Dryad's current housing invalid (break one of the wall blocks). This will result in the Dryad teleporting to the Graveyard house, where you can buy Crimson Seeds. (In a Crimson World, these would be Corrupt Seeds). Then, plant those seeds on bare dirt (Grass will make the seeds unable to grow).
I would recommend making 1x1 holes underneath your ground, so that there can be more Crimson blocks. Do not chop down Thorny Bushes, as they count towards the Crimson block count. Soon enough, you will have Crimslimes and all other sorts of bloody abominations swarming your Crimson biome!
This isn't necessarily related to your question, but if you want to have that 100% completed Bestiary, you should also kill the BoC (Brain of Cthulhu) and Hybrid Crimson environment (Crimson Desert/Crimson Underground Desert, Underground Crimson, and Crimson Snow/Ice.) enemies as well, by letting the Crimson spread to Stone, Sand, and Ice respectively (resulting in Crimstone, Crimsand, and Red Ice).
Is the entire world generated in one go? Like for example having a large array with 20,160,000 tiles and then saving it to a file when it's finished? Or would the world generation itself do it chunk by chunk?
It starts out with the surface, and the variation of the dirt and stone, then it start making caves, increasing in size each time. After that you'll also see sections been converted to biomes (jungle and ice specifically), and then more detailed structures, like granite, cabins and the dungeon happens afterwards.
As for rendering, while the world is loaded all at once, it will only draw (or render) the blocks when you're close to it. so when you're moving fast, you sometimes see the tiles ahead of you needing some time to appear.
Firstly, there are fast block copies (memcpy / memset in C) used to allocate the initial memory (2D array) representing the world. The entire initial world can consist of zeroes, or structures all of whose members are set to zero. This could represent either sky or ground. Let's assume the whole maps start as sky, so zeroes represent empty space. This is a very fast operation. If the entire 20 million tile map uses 4 bytes per tile, that is 80MB - large, yes - but not ridiculously so by any modern measure. Expect milliseconds or less to allocate such a large space to main memory (RAM).
We could read from our RLE-encoded world map and temporarily copy areas into a small 2D array (for example 100x100) to create a pyramid, a small dungeon, a village etc. Once work is done, we copy these back into the RLE structure using an optimal function we've built for that purpose. What this means is that 99%+ of the entire world space is ignored as we elaborate in just that small area. As the world is gradually generated, we probably touch less than 20% of the entire world space.
@Steven and @Engineer both provided fantastic information, but I'd like to add one additional note regarding world generation commonly used for games like Terraria and Minecraft (and many others) that increase the performance of these things - noise.
In many cases, a world seed is provided that is used for noise functions. Those noise functions can provide information in layers for things like biomes, cave systems, locations of objectives or special objects, and really pretty much anything. The beauty of that is that the entire world, even if "generated" in one go, doesn't need to be held entirely in memory during or after the generation process because the game can calculate what is at a specific coordinate (whether that's a single tile, or a chunk) simply by running the algorithm.
In the case of worlds like Terraria, it might make alterations to the base noise function to make certain things "work" or "feel right". Those alterations can be saved per-chunk on another layer of data that overrides the default noise generated terrain - similar to how a game would save any changes made by the player, directly to each chunk of data.
If designed well, the initial generation, including alterations, could be done per-chunk across multiple threads, with each thread processing one chunk at a time. I suspect Oxygen Not Included does something similar with its world generation, though I cannot say for sure.
If you're using Unity (or don't mind using Unity as a learning tool), there's an absolutely fantastic course on Udemy that guides you through creating a Minecraft clone and is pretty fantastic about showing how to work with chunks and using noise to manufacture a world. While it's geared toward a Minecraft-like world that is more or less infinite (and therefore generates chunks only as needed), the same principles can be used for a finite world space. Really, any courses from Penny de Byl are worth the time.
I was working on my own procedural generator and finished making it.Here is how I did it,generate the entire world at the beginning,store info about spawn positions and tiles positions into arrays and data structures
Now obviously, I have to loop through all the arrays, to render/update stuff,this is creating problems,I tried dealing with this problem by applying a condition that if any object is visible, only then render update else don't, but it does not make much of a difference.
For rendering stuff you really only need to consider the blocks that are close to the player. Here is some code(x, y are the player coordinates, width, height are the dimensions of your world, render(x, y) is a placeholder for your rendering functionality, and for simplicity I assumed the player can see 100 blocks in each direction):
Anything you do not see on screen is stored as values. This means that all tiles that are not visible in your viewbox do not get rendered. They are stored as objects (e.g. x, y, type); Make sure you count how many tiles are on screen VS how many you are rendering each loop in your code. Never render something that is not visible to the user as this will eat up your memory.
Any tile groups that cannot be rendered soon (i.e. by moving left/right) are not looped through. So say you are using tile sectors to group your tiles, and you're in sector D. Moving left will put you in C, and moving right will put you in E. So these sectors should be loaded in to arrays (but not rendered) There is no need for you to loop through any other sectors (e.g. A or B). So these can be stored externally (e.g. as text files). So they are available, but not taking up space in your games memory.
Drunk world is a secret world seed. It invokes a highly extraordinary world generation referred to in the source code as drunkWorldGen.[1] It has therefore come to be referred to by the Terraria community as drunk world.
3a8082e126