diff options
103 files changed, 5628 insertions, 3457 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index b7f94a717..50c8dbfb8 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,5 +1,6 @@ Many people have contributed to MCServer, and this list attempts to broadcast at least some of them. +BasedDoge - Donated AlchemistVillage prefabs bearbin (Alexander Harkness) derouinw Diusrex @@ -26,5 +27,6 @@ tonibm19 UltraCoderRU worktycho xoft +Yeeeeezus - Donated AlchemistVillage prefabs Please add yourself to this list if you contribute to MCServer. diff --git a/Tools/BiomeVisualiser/BiomeVisualiser.vcproj b/Tools/BiomeVisualiser/BiomeVisualiser.vcproj index 368657938..3de564ad4 100644 --- a/Tools/BiomeVisualiser/BiomeVisualiser.vcproj +++ b/Tools/BiomeVisualiser/BiomeVisualiser.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="windows-1250"?> <VisualStudioProject ProjectType="Visual C++" - Version="9.00" + Version="9,00" Name="BiomeVisualiser" ProjectGUID="{6DF3D88B-AD47-45B6-B831-1BDE74F86B5C}" RootNamespace="BiomeVisualiser" @@ -328,6 +328,14 @@ Name="Shared" > <File + RelativePath="..\..\src\BiomeDef.cpp" + > + </File> + <File + RelativePath="..\..\src\BiomeDef.h" + > + </File> + <File RelativePath="..\..\src\BlockID.cpp" > </File> @@ -356,6 +364,14 @@ > </File> <File + RelativePath="..\..\src\FastRandom.cpp" + > + </File> + <File + RelativePath="..\..\src\FastRandom.h" + > + </File> + <File RelativePath="..\..\src\Globals.cpp" > <FileConfiguration diff --git a/src/AllocationPool.h b/src/AllocationPool.h new file mode 100644 index 000000000..5d749a79e --- /dev/null +++ b/src/AllocationPool.h @@ -0,0 +1,109 @@ + +#pragma once + +#include <memory> + +template<class T> +class cAllocationPool +{ +public: + class cStarvationCallbacks + { + public: + virtual ~cStarvationCallbacks() {} + + /** Is called when the reserve buffer starts to be used **/ + virtual void OnStartUsingReserve() = 0; + + /** Is called once the reserve buffer has returned to normal size **/ + virtual void OnEndUsingReserve() = 0; + + /** Is called when the allocation pool is unable to allocate memory. Will be repeatedly + called if it does not free sufficient memory **/ + virtual void OnOutOfReserve() = 0; + }; + + virtual ~cAllocationPool() {} + + /** Allocates a pointer to T **/ + virtual T * Allocate() = 0; + + /** Frees the pointer passed in a_ptr, invalidating it **/ + virtual void Free(T * a_ptr) = 0; +}; + +/** Allocates memory storing unused elements in a linked list. Keeps at least NumElementsInReserve +elements in the list unless malloc fails so that the program has a reserve to handle OOM.**/ +template<class T, size_t NumElementsInReserve> +class cListAllocationPool : public cAllocationPool<T> +{ + public: + + cListAllocationPool(std::auto_ptr<typename cAllocationPool<T>::cStarvationCallbacks> a_Callbacks) : + m_Callbacks(a_Callbacks) + { + for (size_t i = 0; i < NumElementsInReserve; i++) + { + void * space = malloc(sizeof(T)); + if (space == NULL) + { + m_Callbacks->OnStartUsingReserve(); + break; + } + m_FreeList.push_front(space); + } + } + + virtual ~cListAllocationPool() + { + while (!m_FreeList.empty()) + { + free (m_FreeList.front()); + m_FreeList.pop_front(); + } + } + + virtual T * Allocate() override + { + if (m_FreeList.size() <= NumElementsInReserve) + { + void * space = malloc(sizeof(T)); + if (space != NULL) + { + return new(space) T; + } + else if (m_FreeList.size() == NumElementsInReserve) + { + m_Callbacks->OnStartUsingReserve(); + } + else if (m_FreeList.empty()) + { + m_Callbacks->OnOutOfReserve(); + // Try again until the memory is avalable + return Allocate(); + } + } + // placement new, used to initalize the object + T * ret = new (m_FreeList.front()) T; + m_FreeList.pop_front(); + return ret; + } + virtual void Free(T * a_ptr) override + { + if (a_ptr == NULL) + { + return; + } + // placement destruct. + a_ptr->~T(); + m_FreeList.push_front(a_ptr); + if (m_FreeList.size() == NumElementsInReserve) + { + m_Callbacks->OnEndUsingReserve(); + } + } + + private: + std::list<void *> m_FreeList; + std::auto_ptr<typename cAllocationPool<T>::cStarvationCallbacks> m_Callbacks; +}; diff --git a/src/Bindings/.gitignore b/src/Bindings/.gitignore new file mode 100644 index 000000000..af8aa76fa --- /dev/null +++ b/src/Bindings/.gitignore @@ -0,0 +1 @@ +lua51.dll diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp index acfd6f4f8..f52d970bf 100644 --- a/src/Bindings/ManualBindings.cpp +++ b/src/Bindings/ManualBindings.cpp @@ -1765,6 +1765,7 @@ static int tolua_cWorld_ChunkStay(lua_State * tolua_S) if (!ChunkStay->AddChunks(2)) { delete ChunkStay; + ChunkStay = NULL; return 0; } diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp index 04639da60..96c5ccde7 100644 --- a/src/Bindings/PluginLua.cpp +++ b/src/Bindings/PluginLua.cpp @@ -1571,6 +1571,7 @@ bool cPluginLua::AddHookRef(int a_HookType, int a_FnRefIdx) LOGWARNING("Plugin %s tried to add a hook %d with bad handler function.", GetName().c_str(), a_HookType); m_LuaState.LogStackTrace(); delete Ref; + Ref = NULL; return false; } diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp index 9bcd8e3b7..c50100d6f 100644 --- a/src/Bindings/PluginManager.cpp +++ b/src/Bindings/PluginManager.cpp @@ -1467,6 +1467,7 @@ void cPluginManager::RemovePlugin(cPlugin * a_Plugin) a_Plugin->OnDisable(); } delete a_Plugin; + a_Plugin = NULL; } diff --git a/src/Bindings/lua51.dll b/src/Bindings/lua51.dll Binary files differdeleted file mode 100644 index 515cf8b30..000000000 --- a/src/Bindings/lua51.dll +++ /dev/null diff --git a/src/BlockArea.cpp b/src/BlockArea.cpp index 4fe6cd51e..185582ba3 100644 --- a/src/BlockArea.cpp +++ b/src/BlockArea.cpp @@ -295,9 +295,9 @@ cBlockArea::~cBlockArea() void cBlockArea::Clear(void) { - delete[] m_BlockTypes; m_BlockTypes = NULL; - delete[] m_BlockMetas; m_BlockMetas = NULL; - delete[] m_BlockLight; m_BlockLight = NULL; + delete[] m_BlockTypes; m_BlockTypes = NULL; + delete[] m_BlockMetas; m_BlockMetas = NULL; + delete[] m_BlockLight; m_BlockLight = NULL; delete[] m_BlockSkyLight; m_BlockSkyLight = NULL; m_Origin.Set(0, 0, 0); m_Size.Set(0, 0, 0); @@ -1013,8 +1013,8 @@ void cBlockArea::RotateCCW(void) } // for x std::swap(m_BlockTypes, NewTypes); std::swap(m_BlockMetas, NewMetas); - delete[] NewTypes; - delete[] NewMetas; + delete[] NewTypes; NewTypes = NULL; + delete[] NewMetas; NewMetas = NULL; std::swap(m_Size.x, m_Size.z); } @@ -1058,8 +1058,8 @@ void cBlockArea::RotateCW(void) } // for x std::swap(m_BlockTypes, NewTypes); std::swap(m_BlockMetas, NewMetas); - delete[] NewTypes; - delete[] NewMetas; + delete[] NewTypes; NewTypes = NULL; + delete[] NewMetas; NewMetas = NULL; std::swap(m_Size.x, m_Size.z); } @@ -1206,7 +1206,7 @@ void cBlockArea::RotateCCWNoMeta(void) } // for z } // for x std::swap(m_BlockTypes, NewTypes); - delete[] NewTypes; + delete[] NewTypes; NewTypes = NULL; } if (HasBlockMetas()) { @@ -1224,7 +1224,7 @@ void cBlockArea::RotateCCWNoMeta(void) } // for z } // for x std::swap(m_BlockMetas, NewMetas); - delete[] NewMetas; + delete[] NewMetas; NewMetas = NULL; } std::swap(m_Size.x, m_Size.z); } @@ -1251,7 +1251,7 @@ void cBlockArea::RotateCWNoMeta(void) } // for x } // for z std::swap(m_BlockTypes, NewTypes); - delete[] NewTypes; + delete[] NewTypes; NewTypes = NULL; } if (HasBlockMetas()) { @@ -1269,7 +1269,7 @@ void cBlockArea::RotateCWNoMeta(void) } // for x } // for z std::swap(m_BlockMetas, NewMetas); - delete[] NewMetas; + delete[] NewMetas; NewMetas = NULL; } std::swap(m_Size.x, m_Size.z); } @@ -1658,6 +1658,7 @@ bool cBlockArea::SetSize(int a_SizeX, int a_SizeY, int a_SizeZ, int a_DataTypes) if (m_BlockMetas == NULL) { delete[] m_BlockTypes; + m_BlockTypes = NULL; return false; } } @@ -1667,7 +1668,9 @@ bool cBlockArea::SetSize(int a_SizeX, int a_SizeY, int a_SizeZ, int a_DataTypes) if (m_BlockLight == NULL) { delete[] m_BlockMetas; + m_BlockMetas = NULL; delete[] m_BlockTypes; + m_BlockTypes = NULL; return false; } } @@ -1677,8 +1680,11 @@ bool cBlockArea::SetSize(int a_SizeX, int a_SizeY, int a_SizeZ, int a_DataTypes) if (m_BlockSkyLight == NULL) { delete[] m_BlockLight; + m_BlockLight = NULL; delete[] m_BlockMetas; + m_BlockMetas = NULL; delete[] m_BlockTypes; + m_BlockTypes = NULL; return false; } } diff --git a/src/BlockEntities/MobHeadEntity.cpp b/src/BlockEntities/MobHeadEntity.cpp index dc9c18d58..ce895eb6f 100644 --- a/src/BlockEntities/MobHeadEntity.cpp +++ b/src/BlockEntities/MobHeadEntity.cpp @@ -70,6 +70,8 @@ void cMobHeadEntity::SetOwner(const AString & a_Owner) void cMobHeadEntity::SendTo(cClientHandle & a_Client) { + cWorld * World = a_Client.GetPlayer()->GetWorld(); + a_Client.SendBlockChange(m_PosX, m_PosY, m_PosZ, m_BlockType, World->GetBlockMeta(m_PosX, m_PosY, m_PosZ)); a_Client.SendUpdateBlockEntity(*this); } diff --git a/src/BlockInfo.cpp b/src/BlockInfo.cpp index e8d9a7ec4..32fdec905 100644 --- a/src/BlockInfo.cpp +++ b/src/BlockInfo.cpp @@ -34,6 +34,7 @@ cBlockInfo::cBlockInfo() cBlockInfo::~cBlockInfo() { delete m_Handler; + m_Handler = NULL; } @@ -341,6 +342,8 @@ void cBlockInfo::Initialize(void) ms_Info[E_BLOCK_DANDELION ].m_IsSolid = false; ms_Info[E_BLOCK_DETECTOR_RAIL ].m_IsSolid = false; ms_Info[E_BLOCK_END_PORTAL ].m_IsSolid = false; + ms_Info[E_BLOCK_FENCE ].m_IsSolid = false; + ms_Info[E_BLOCK_FENCE_GATE ].m_IsSolid = false; ms_Info[E_BLOCK_FIRE ].m_IsSolid = false; ms_Info[E_BLOCK_FLOWER ].m_IsSolid = false; ms_Info[E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE].m_IsSolid = false; diff --git a/src/Blocks/BlockDoor.h b/src/Blocks/BlockDoor.h index bc59051c3..049c4a334 100644 --- a/src/Blocks/BlockDoor.h +++ b/src/Blocks/BlockDoor.h @@ -156,10 +156,10 @@ public: if (a_BlockX > 0) { NIBBLETYPE DownMeta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY - 1, a_BlockZ); - return (DownMeta & 0x07) | 0x08 | (Meta << 4); + return (NIBBLETYPE) ((DownMeta & 0x07) | 0x08 | (Meta << 4)); } // This is the top part of the door at the bottommost layer of the world, there's no bottom: - return 0x08 | (Meta << 4); + return (NIBBLETYPE) (0x08 | (Meta << 4)); } else { @@ -167,7 +167,7 @@ public: if (a_BlockY < cChunkDef::Height - 1) { NIBBLETYPE UpMeta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY + 1, a_BlockZ); - return Meta | (UpMeta << 4); + return (NIBBLETYPE) (Meta | (UpMeta << 4)); } // This is the bottom part of the door at the topmost layer of the world, there's no top: return Meta; diff --git a/src/Blocks/BlockFire.h b/src/Blocks/BlockFire.h index f9f32eb50..147e4b53e 100644 --- a/src/Blocks/BlockFire.h +++ b/src/Blocks/BlockFire.h @@ -36,8 +36,8 @@ public: - Loop through boundary variables, and fill with portal blocks based on Dir with meta from Dir */ - a_BlockY--; // Because we want the block below the fire - FindAndSetPortalFrame(a_BlockX, a_BlockY, a_BlockZ, a_ChunkInterface, a_WorldInterface); + // a_BlockY - 1: Because we want the block below the fire + FindAndSetPortalFrame(a_BlockX, a_BlockY - 1, a_BlockZ, a_ChunkInterface, a_WorldInterface); } virtual void OnDigging(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) override diff --git a/src/Blocks/BlockHandler.cpp b/src/Blocks/BlockHandler.cpp index 304e35e84..a7b89fcb7 100644 --- a/src/Blocks/BlockHandler.cpp +++ b/src/Blocks/BlockHandler.cpp @@ -38,6 +38,7 @@ #include "BlockGlass.h" #include "BlockGlowstone.h" #include "BlockGravel.h" +#include "BlockHayBale.h" #include "BlockMobHead.h" #include "BlockHopper.h" #include "BlockIce.h" @@ -56,6 +57,7 @@ #include "BlockPlanks.h" #include "BlockPortal.h" #include "BlockPumpkin.h" +#include "BlockPressurePlate.h" #include "BlockQuartz.h" #include "BlockRail.h" #include "BlockRedstone.h" @@ -130,10 +132,12 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType) case E_BLOCK_GLOWSTONE: return new cBlockGlowstoneHandler (a_BlockType); case E_BLOCK_GOLD_ORE: return new cBlockOreHandler (a_BlockType); case E_BLOCK_GLASS: return new cBlockGlassHandler (a_BlockType); + case E_BLOCK_GLASS_PANE: return new cBlockGlassHandler (a_BlockType); case E_BLOCK_GRASS: return new cBlockDirtHandler (a_BlockType); case E_BLOCK_GRAVEL: return new cBlockGravelHandler (a_BlockType); - case E_BLOCK_HAY_BALE: return new cBlockSidewaysHandler (a_BlockType); + case E_BLOCK_HAY_BALE: return new cBlockHayBaleHandler (a_BlockType); case E_BLOCK_HEAD: return new cBlockMobHeadHandler (a_BlockType); + case E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE: return new cBlockPressurePlateHandler(a_BlockType); case E_BLOCK_HOPPER: return new cBlockHopperHandler (a_BlockType); case E_BLOCK_ICE: return new cBlockIceHandler (a_BlockType); case E_BLOCK_INACTIVE_COMPARATOR: return new cBlockComparatorHandler (a_BlockType); @@ -149,6 +153,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType) case E_BLOCK_LEAVES: return new cBlockLeavesHandler (a_BlockType); case E_BLOCK_LILY_PAD: return new cBlockLilypadHandler (a_BlockType); case E_BLOCK_LIT_FURNACE: return new cBlockFurnaceHandler (a_BlockType); + case E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE: return new cBlockPressurePlateHandler(a_BlockType); case E_BLOCK_LOG: return new cBlockSidewaysHandler (a_BlockType); case E_BLOCK_MELON: return new cBlockMelonHandler (a_BlockType); case E_BLOCK_MELON_STEM: return new cBlockStemsHandler (a_BlockType); @@ -186,12 +191,15 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType) case E_BLOCK_SIGN_POST: return new cBlockSignHandler (a_BlockType); case E_BLOCK_SNOW: return new cBlockSnowHandler (a_BlockType); case E_BLOCK_SPRUCE_WOOD_STAIRS: return new cBlockStairsHandler (a_BlockType); + case E_BLOCK_STAINED_GLASS: return new cBlockGlassHandler (a_BlockType); + case E_BLOCK_STAINED_GLASS_PANE: return new cBlockGlassHandler (a_BlockType); case E_BLOCK_STATIONARY_LAVA: return new cBlockLavaHandler (a_BlockType); case E_BLOCK_STATIONARY_WATER: return new cBlockFluidHandler (a_BlockType); case E_BLOCK_STICKY_PISTON: return new cBlockPistonHandler (a_BlockType); case E_BLOCK_STONE: return new cBlockStoneHandler (a_BlockType); case E_BLOCK_STONE_BRICK_STAIRS: return new cBlockStairsHandler (a_BlockType); case E_BLOCK_STONE_BUTTON: return new cBlockButtonHandler (a_BlockType); + case E_BLOCK_STONE_PRESSURE_PLATE: return new cBlockPressurePlateHandler (a_BlockType); case E_BLOCK_STONE_SLAB: return new cBlockSlabHandler (a_BlockType); case E_BLOCK_SUGARCANE: return new cBlockSugarcaneHandler (a_BlockType); case E_BLOCK_TALL_GRASS: return new cBlockTallGrassHandler (a_BlockType); @@ -203,6 +211,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType) case E_BLOCK_WATER: return new cBlockFluidHandler (a_BlockType); case E_BLOCK_WOODEN_BUTTON: return new cBlockButtonHandler (a_BlockType); case E_BLOCK_WOODEN_DOOR: return new cBlockDoorHandler (a_BlockType); + case E_BLOCK_WOODEN_PRESSURE_PLATE: return new cBlockPressurePlateHandler (a_BlockType); case E_BLOCK_WOODEN_SLAB: return new cBlockSlabHandler (a_BlockType); case E_BLOCK_WOODEN_STAIRS: return new cBlockStairsHandler (a_BlockType); case E_BLOCK_WOOL: return new cBlockClothHandler (a_BlockType); diff --git a/src/Blocks/BlockHayBale.h b/src/Blocks/BlockHayBale.h new file mode 100644 index 000000000..5b646e264 --- /dev/null +++ b/src/Blocks/BlockHayBale.h @@ -0,0 +1,29 @@ + +#pragma once + +#include "BlockHandler.h" +#include "BlockSideways.h" + + + + + +class cBlockHayBaleHandler : + public cBlockSidewaysHandler +{ +public: + cBlockHayBaleHandler(BLOCKTYPE a_BlockType) + : cBlockSidewaysHandler(a_BlockType) + { + } + + + virtual const char * GetStepSound(void) override + { + return "step.grass"; + } +} ; + + + + diff --git a/src/Blocks/BlockMobHead.h b/src/Blocks/BlockMobHead.h index 9855574ad..301386568 100644 --- a/src/Blocks/BlockMobHead.h +++ b/src/Blocks/BlockMobHead.h @@ -19,24 +19,69 @@ public: virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override { - a_Pickups.push_back(cItem(E_ITEM_HEAD, 1, 0)); + // The drop spawn is in OnDestroyed method } + + virtual void OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) override + { + if (a_Player->IsGameModeCreative()) + { + // No drops in creative mode + return; + } + + class cCallback : public cBlockEntityCallback + { + virtual bool Item(cBlockEntity * a_BlockEntity) + { + if (a_BlockEntity->GetBlockType() != E_BLOCK_HEAD) + { + return false; + } + cMobHeadEntity * MobHeadEntity = static_cast<cMobHeadEntity*>(a_BlockEntity); + + cItems Pickups; + Pickups.Add(E_ITEM_HEAD, 1, (short) MobHeadEntity->GetType()); + MTRand r1; + + // Mid-block position first + double MicroX, MicroY, MicroZ; + MicroX = MobHeadEntity->GetPosX() + 0.5; + MicroY = MobHeadEntity->GetPosY() + 0.5; + MicroZ = MobHeadEntity->GetPosZ() + 0.5; + + // Add random offset second + MicroX += r1.rand(1) - 0.5; + MicroZ += r1.rand(1) - 0.5; - bool TrySpawnWither(cChunkInterface & a_ChunkInterface, cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ) + MobHeadEntity->GetWorld()->SpawnItemPickups(Pickups, MicroX, MicroY, MicroZ); + return false; + } + } Callback; + + a_WorldInterface.DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ, Callback); + } + + bool TrySpawnWither(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ) { if (a_BlockY < 2) { return false; } - class cCallback : public cMobHeadCallback + class cCallback : public cBlockEntityCallback { bool m_IsWither; - virtual bool Item (cMobHeadEntity * a_MobHeadEntity) + virtual bool Item(cBlockEntity * a_BlockEntity) { - m_IsWither = (a_MobHeadEntity->GetType() == SKULL_TYPE_WITHER); + if (a_BlockEntity->GetBlockType() != E_BLOCK_HEAD) + { + return false; + } + cMobHeadEntity * MobHeadEntity = static_cast<cMobHeadEntity*>(a_BlockEntity); + m_IsWither = (MobHeadEntity->GetType() == SKULL_TYPE_WITHER); return false; } @@ -70,7 +115,7 @@ public: } PlayerCallback(Vector3f((float)a_BlockX, (float)a_BlockY, (float)a_BlockZ)); - a_World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, CallbackA); + a_WorldInterface.DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ, CallbackA); if (!CallbackA.IsWither()) { @@ -87,8 +132,8 @@ public: return false; } - a_World->DoWithMobHeadAt(a_BlockX - 1, a_BlockY, a_BlockZ, CallbackA); - a_World->DoWithMobHeadAt(a_BlockX + 1, a_BlockY, a_BlockZ, CallbackB); + a_WorldInterface.DoWithBlockEntityAt(a_BlockX - 1, a_BlockY, a_BlockZ, CallbackA); + a_WorldInterface.DoWithBlockEntityAt(a_BlockX + 1, a_BlockY, a_BlockZ, CallbackB); BLOCKTYPE Block1 = a_ChunkInterface.GetBlock(a_BlockX - 1, a_BlockY - 1, a_BlockZ); BLOCKTYPE Block2 = a_ChunkInterface.GetBlock(a_BlockX + 1, a_BlockY - 1, a_BlockZ); @@ -101,15 +146,15 @@ public: a_ChunkInterface.FastSetBlock(a_BlockX, a_BlockY - 2, a_BlockZ, E_BLOCK_AIR, 0); // Block entities - a_World->SetBlock(a_BlockX + 1, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); - a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); - a_World->SetBlock(a_BlockX - 1, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); + a_ChunkInterface.SetBlock(a_WorldInterface, a_BlockX + 1, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); + a_ChunkInterface.SetBlock(a_WorldInterface, a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); + a_ChunkInterface.SetBlock(a_WorldInterface, a_BlockX - 1, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); // Spawn the wither: - a_World->SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtWither); + a_WorldInterface.SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtWither); // Award Achievement - a_World->ForEachPlayer(PlayerCallback); + a_WorldInterface.ForEachPlayer(PlayerCallback); return true; } @@ -117,8 +162,8 @@ public: CallbackA.Reset(); CallbackB.Reset(); - a_World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ - 1, CallbackA); - a_World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ + 1, CallbackB); + a_WorldInterface.DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ - 1, CallbackA); + a_WorldInterface.DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ + 1, CallbackB); Block1 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ - 1); Block2 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ + 1); @@ -131,15 +176,15 @@ public: a_ChunkInterface.FastSetBlock(a_BlockX, a_BlockY - 2, a_BlockZ, E_BLOCK_AIR, 0); // Block entities - a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ + 1, E_BLOCK_AIR, 0); - a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); - a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ - 1, E_BLOCK_AIR, 0); + a_ChunkInterface.SetBlock(a_WorldInterface, a_BlockX, a_BlockY, a_BlockZ + 1, E_BLOCK_AIR, 0); + a_ChunkInterface.SetBlock(a_WorldInterface, a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); + a_ChunkInterface.SetBlock(a_WorldInterface, a_BlockX, a_BlockY, a_BlockZ - 1, E_BLOCK_AIR, 0); // Spawn the wither: - a_World->SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtWither); + a_WorldInterface.SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtWither); // Award Achievement - a_World->ForEachPlayer(PlayerCallback); + a_WorldInterface.ForEachPlayer(PlayerCallback); return true; } @@ -154,23 +199,29 @@ public: BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta ) override { - class cCallback : public cMobHeadCallback + class cCallback : public cBlockEntityCallback { cPlayer * m_Player; NIBBLETYPE m_OldBlockMeta; NIBBLETYPE m_NewBlockMeta; - virtual bool Item (cMobHeadEntity * a_MobHeadEntity) + virtual bool Item(cBlockEntity * a_BlockEntity) { + if (a_BlockEntity->GetBlockType() != E_BLOCK_HEAD) + { + return false; + } + cMobHeadEntity * MobHeadEntity = static_cast<cMobHeadEntity*>(a_BlockEntity); + int Rotation = 0; if (m_NewBlockMeta == 1) { Rotation = (int) floor(m_Player->GetYaw() * 16.0F / 360.0F + 0.5) & 0xF; } - - a_MobHeadEntity->SetType(static_cast<eMobHeadType>(m_OldBlockMeta)); - a_MobHeadEntity->SetRotation(static_cast<eMobHeadRotation>(Rotation)); - a_MobHeadEntity->GetWorld()->BroadcastBlockEntity(a_MobHeadEntity->GetPosX(), a_MobHeadEntity->GetPosY(), a_MobHeadEntity->GetPosZ(), m_Player->GetClientHandle()); + + MobHeadEntity->SetType(static_cast<eMobHeadType>(m_OldBlockMeta)); + MobHeadEntity->SetRotation(static_cast<eMobHeadRotation>(Rotation)); + MobHeadEntity->GetWorld()->BroadcastBlockEntity(MobHeadEntity->GetPosX(), MobHeadEntity->GetPosY(), MobHeadEntity->GetPosZ()); return false; } @@ -184,8 +235,7 @@ public: cCallback Callback(a_Player, a_BlockMeta, static_cast<NIBBLETYPE>(a_BlockFace)); a_BlockMeta = (NIBBLETYPE)a_BlockFace; - cWorld * World = (cWorld *) &a_WorldInterface; - World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, Callback); + a_WorldInterface.DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ, Callback); a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockMeta); if (a_BlockMeta == SKULL_TYPE_WITHER) @@ -200,7 +250,7 @@ public: }; for (size_t i = 0; i < ARRAYCOUNT(Coords); ++i) { - if (TrySpawnWither(a_ChunkInterface, World, a_BlockX + Coords[i].x, a_BlockY, a_BlockZ + Coords[i].z)) + if (TrySpawnWither(a_ChunkInterface, a_WorldInterface, a_BlockX + Coords[i].x, a_BlockY, a_BlockZ + Coords[i].z)) { break; } diff --git a/src/Blocks/BlockPressurePlate.h b/src/Blocks/BlockPressurePlate.h new file mode 100644 index 000000000..adec36eb6 --- /dev/null +++ b/src/Blocks/BlockPressurePlate.h @@ -0,0 +1,38 @@ + +#pragma once + +#include "BlockHandler.h" + + + + +class cBlockPressurePlateHandler : + public cBlockHandler +{ +public: + cBlockPressurePlateHandler(BLOCKTYPE a_BlockType) + : cBlockHandler(a_BlockType) + { + } + + virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override + { + // Reset meta to 0 + a_Pickups.push_back(cItem(m_BlockType, 1, 0)); + } + + virtual bool CanBeAt(cChunkInterface & a_ChunkInterface, int a_RelX, int a_RelY, int a_RelZ, const cChunk & a_Chunk) override + { + if (a_RelY <= 0) + { + return false; + } + + BLOCKTYPE BlockBelow = a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ); + return ((BlockBelow == E_BLOCK_FENCE_GATE) || (BlockBelow == E_BLOCK_FENCE) || cBlockInfo::IsSolid(BlockBelow)); + } +} ; + + + + diff --git a/src/Blocks/BlockSlab.h b/src/Blocks/BlockSlab.h index 80841b094..f3f2366fd 100644 --- a/src/Blocks/BlockSlab.h +++ b/src/Blocks/BlockSlab.h @@ -80,6 +80,7 @@ public: if (IsAnySlabType(a_ChunkInterface.GetBlock(a_BlockX, a_BlockY, a_BlockZ))) { a_BlockType = GetDoubleSlabType(m_BlockType); + a_BlockMeta = a_BlockMeta & 0x7; } return true; diff --git a/src/Blocks/WorldInterface.h b/src/Blocks/WorldInterface.h index e5638c16e..73e650d8d 100644 --- a/src/Blocks/WorldInterface.h +++ b/src/Blocks/WorldInterface.h @@ -6,6 +6,12 @@ class cItems; +typedef cItemCallback<cBlockEntity> cBlockEntityCallback; + + + + + class cWorldInterface { public: @@ -29,6 +35,9 @@ public: /** Spawns a mob of the specified type. Returns the mob's EntityID if recognized and spawned, <0 otherwise */ virtual int SpawnMob(double a_PosX, double a_PosY, double a_PosZ, cMonster::eType a_MonsterType) = 0; + /** Calls the callback for the block entity at the specified coords; returns false if there's no block entity at those coords, true if found */ + virtual bool DoWithBlockEntityAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBlockEntityCallback & a_Callback) = 0; + /** Sends the block on those coords to the player */ virtual void SendBlockTo(int a_BlockX, int a_BlockY, int a_BlockZ, cPlayer * a_Player) = 0; diff --git a/src/ByteBuffer.cpp b/src/ByteBuffer.cpp index d77f402fd..1a69c856f 100644 --- a/src/ByteBuffer.cpp +++ b/src/ByteBuffer.cpp @@ -165,6 +165,7 @@ cByteBuffer::~cByteBuffer() { CheckValid(); delete[] m_Buffer; + m_Buffer = NULL; } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c5156e50c..335ce8315 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -82,17 +82,36 @@ set(BINDING_DEPENDECIES include_directories(Bindings) include_directories(.) -ADD_CUSTOM_COMMAND( - # add any new generated bindings here - OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/Bindings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/Bindings.h +if (WIN32) + ADD_CUSTOM_COMMAND( + # add any new generated bindings here + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/Bindings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/Bindings.h - # command execuded to regerate bindings - COMMAND tolua -L virtual_method_hooks.lua -o Bindings.cpp -H Bindings.h AllToLua.pkg - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/ + # Copy the Lua DLL into the Bindings folder, so that tolua can run from there: + COMMAND copy /y ..\\..\\MCServer\\lua51.dll . - # add any new generation dependencies here - DEPENDS ${BINDING_DEPENDECIES} -) + # Regenerate bindings: + COMMAND tolua -L virtual_method_hooks.lua -o Bindings.cpp -H Bindings.h AllToLua.pkg + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/ + + # add any new generation dependencies here + DEPENDS ${BINDING_DEPENDECIES} + ) +else () + ADD_CUSTOM_COMMAND( + # add any new generated bindings here + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/Bindings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/Bindings.h + + # Regenerate bindings: + COMMAND tolua -L virtual_method_hooks.lua -o Bindings.cpp -H Bindings.h AllToLua.pkg + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/ + + # add any new generation dependencies here + DEPENDS ${BINDING_DEPENDECIES} + ) +endif () +set_source_files_properties(Bindings/Bindings.cpp PROPERTIES GENERATED TRUE) +set_source_files_properties(Bindings/Bindings.h PROPERTIES GENERATED TRUE) if (NOT MSVC) @@ -149,16 +168,6 @@ if (NOT MSVC) else () # MSVC-specific handling: Put all files into one project, separate by the folders: - # Generate the Bindings if they don't exist: - if (NOT EXISTS "${PROJECT_SOURCE_DIR}/Bindings/Bindings.cpp") - message("Bindings.cpp not found, generating now") - set(tolua_executable ${PROJECT_SOURCE_DIR}/Bindings/tolua++.exe) - execute_process( - COMMAND ${tolua_executable} -L virtual_method_hooks.lua -o Bindings.cpp -H Bindings.h AllToLua.pkg - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/Bindings - ) - endif() - # Get all files in this folder: file(GLOB_RECURSE SOURCE "*.cpp" @@ -167,6 +176,9 @@ else () ) source_group("" FILES ${SOURCE}) + LIST(APPEND SOURCE "Bindings/Bindings.cpp" "Bindings/Bindings.h") + source_group(Bindings FILES "Bindings/Bindings.cpp" "Bindings/Bindings.h") + # Add all subfolders as solution-folders: list(APPEND FOLDERS "Resources") list(APPEND FOLDERS "Bindings") diff --git a/src/Chunk.cpp b/src/Chunk.cpp index 727eb451d..0b8e2d1a9 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -64,7 +64,8 @@ sSetBlock::sSetBlock( int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_Bloc cChunk::cChunk( int a_ChunkX, int a_ChunkY, int a_ChunkZ, cChunkMap * a_ChunkMap, cWorld * a_World, - cChunk * a_NeighborXM, cChunk * a_NeighborXP, cChunk * a_NeighborZM, cChunk * a_NeighborZP + cChunk * a_NeighborXM, cChunk * a_NeighborXP, cChunk * a_NeighborZM, cChunk * a_NeighborZP, + cAllocationPool<cChunkData::sChunkSection> & a_Pool ) : m_IsValid(false), m_IsLightValid(false), @@ -77,6 +78,7 @@ cChunk::cChunk( m_PosZ(a_ChunkZ), m_World(a_World), m_ChunkMap(a_ChunkMap), + m_ChunkData(a_Pool), m_BlockTickX(0), m_BlockTickY(0), m_BlockTickZ(0), @@ -150,7 +152,9 @@ cChunk::~cChunk() m_NeighborZP->m_NeighborZM = NULL; } delete m_WaterSimulatorData; + m_WaterSimulatorData = NULL; delete m_LavaSimulatorData; + m_LavaSimulatorData = NULL; } @@ -597,7 +601,7 @@ void cChunk::Tick(float a_Dt) itr = m_Entities.erase(itr); delete ToDelete; } - else if ((*itr)->IsTravellingThroughPortal()) + else if ((*itr)->IsTravellingThroughPortal()) // Remove all entities that are travelling to another world { MarkDirty(); (*itr)->SetIsTravellingThroughPortal(false); @@ -1416,6 +1420,7 @@ void cChunk::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, BlockEntity->Destroy(); RemoveBlockEntity(BlockEntity); delete BlockEntity; + BlockEntity = NULL; } // If the new block is a block entity, create the entity object: diff --git a/src/Chunk.h b/src/Chunk.h index dfdabea04..7664a7afd 100644 --- a/src/Chunk.h +++ b/src/Chunk.h @@ -65,7 +65,8 @@ public: cChunk( int a_ChunkX, int a_ChunkY, int a_ChunkZ, // Chunk coords cChunkMap * a_ChunkMap, cWorld * a_World, // Parent objects - cChunk * a_NeighborXM, cChunk * a_NeighborXP, cChunk * a_NeighborZM, cChunk * a_NeighborZP // Neighbor chunks + cChunk * a_NeighborXM, cChunk * a_NeighborXP, cChunk * a_NeighborZM, cChunk * a_NeighborZP, // Neighbor chunks + cAllocationPool<cChunkData::sChunkSection> & a_Pool ); cChunk(cChunk & other); ~cChunk(); diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp index f2d220bd2..03b0224a6 100644 --- a/src/ChunkData.cpp +++ b/src/ChunkData.cpp @@ -27,11 +27,12 @@ template <typename T> inline bool IsAllValue(const T * a_Array, size_t a_NumElem -cChunkData::cChunkData(void) +cChunkData::cChunkData(cAllocationPool<cChunkData::sChunkSection> & a_Pool) : #if __cplusplus < 201103L // auto_ptr style interface for memory management - : m_IsOwner(true) + m_IsOwner(true), #endif + m_Pool(a_Pool) { for (size_t i = 0; i < NumSections; i++) { @@ -66,7 +67,8 @@ cChunkData::~cChunkData() #if __cplusplus < 201103L // auto_ptr style interface for memory management cChunkData::cChunkData(const cChunkData & a_Other) : - m_IsOwner(true) + m_IsOwner(true), + m_Pool(a_Other.m_Pool) { // Move contents and ownership from a_Other to this, pointer-wise: for (size_t i = 0; i < NumSections; i++) @@ -97,7 +99,7 @@ cChunkData::~cChunkData() m_Sections[i] = NULL; } } - + // Move contents and ownership from a_Other to this, pointer-wise: m_IsOwner = true; for (size_t i = 0; i < NumSections; i++) @@ -105,13 +107,15 @@ cChunkData::~cChunkData() m_Sections[i] = a_Other.m_Sections[i]; } a_Other.m_IsOwner = false; + ASSERT(&m_Pool == &a_Other.m_Pool); return *this; } #else // unique_ptr style interface for memory management - cChunkData::cChunkData(cChunkData && other) + cChunkData::cChunkData(cChunkData && other) : + m_Pool(other.m_Pool) { for (size_t i = 0; i < NumSections; i++) { @@ -128,6 +132,7 @@ cChunkData::~cChunkData() { if (&other != this) { + ASSERT(&m_Pool == &other.m_Pool); for (size_t i = 0; i < NumSections; i++) { Free(m_Sections[i]); @@ -317,12 +322,12 @@ NIBBLETYPE cChunkData::GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const cChunkData cChunkData::Copy(void) const { - cChunkData copy; + cChunkData copy(m_Pool); for (size_t i = 0; i < NumSections; i++) { if (m_Sections[i] != NULL) { - copy.m_Sections[i] = Allocate(); + copy.m_Sections[i] = copy.Allocate(); *copy.m_Sections[i] = *m_Sections[i]; } } @@ -561,8 +566,7 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src) cChunkData::sChunkSection * cChunkData::Allocate(void) { - // TODO: Use an allocation pool - return new cChunkData::sChunkSection; + return m_Pool.Allocate(); } @@ -571,8 +575,7 @@ cChunkData::sChunkSection * cChunkData::Allocate(void) void cChunkData::Free(cChunkData::sChunkSection * a_Section) { - // TODO: Use an allocation pool - delete a_Section; + m_Pool.Free(a_Section); } diff --git a/src/ChunkData.h b/src/ChunkData.h index fef31b5ad..fe8b068a2 100644 --- a/src/ChunkData.h +++ b/src/ChunkData.h @@ -15,6 +15,7 @@ #include "ChunkDef.h" +#include "AllocationPool.h" @@ -26,9 +27,17 @@ class cChunkData { +private: + + static const size_t SectionHeight = 16; + static const size_t NumSections = (cChunkDef::Height / SectionHeight); + static const size_t SectionBlockCount = SectionHeight * cChunkDef::Width * cChunkDef::Width; + public: - cChunkData(void); + struct sChunkSection; + + cChunkData(cAllocationPool<cChunkData::sChunkSection> & a_Pool); ~cChunkData(); #if __cplusplus < 201103L @@ -53,17 +62,17 @@ public: /** Creates a (deep) copy of self. */ cChunkData Copy(void) const; - + /** Copies the blocktype data into the specified flat array. Optionally, only a part of the data is copied, as specified by the a_Idx and a_Length parameters. */ void CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx = 0, size_t a_Length = cChunkDef::NumBlocks) const; - + /** Copies the metadata into the specified flat array. */ void CopyMetas(NIBBLETYPE * a_Dest) const; - + /** Copies the block light data into the specified flat array. */ void CopyBlockLight(NIBBLETYPE * a_Dest) const; - + /** Copies the skylight data into the specified flat array. */ void CopySkyLight (NIBBLETYPE * a_Dest) const; @@ -71,12 +80,12 @@ public: Allocates sections that are needed for the operation. Requires that a_Src is a valid pointer. */ void SetBlockTypes(const BLOCKTYPE * a_Src); - + /** Copies the metadata from the specified flat array into the internal representation. Allocates sectios that are needed for the operation. Requires that a_Src is a valid pointer. */ void SetMetas(const NIBBLETYPE * a_Src); - + /** Copies the blocklight data from the specified flat array into the internal representation. Allocates sectios that are needed for the operation. Allows a_Src to be NULL, in which case it doesn't do anything. */ @@ -86,36 +95,35 @@ public: Allocates sectios that are needed for the operation. Allows a_Src to be NULL, in which case it doesn't do anything. */ void SetSkyLight(const NIBBLETYPE * a_Src); + + struct sChunkSection + { + BLOCKTYPE m_BlockTypes [SectionHeight * 16 * 16] ; + NIBBLETYPE m_BlockMetas [SectionHeight * 16 * 16 / 2]; + NIBBLETYPE m_BlockLight [SectionHeight * 16 * 16 / 2]; + NIBBLETYPE m_BlockSkyLight[SectionHeight * 16 * 16 / 2]; + }; private: - - static const size_t SectionHeight = 16; - static const size_t NumSections = (cChunkDef::Height / SectionHeight); - static const size_t SectionBlockCount = SectionHeight * cChunkDef::Width * cChunkDef::Width; - #if __cplusplus < 201103L // auto_ptr style interface for memory management mutable bool m_IsOwner; #endif - - struct sChunkSection { - BLOCKTYPE m_BlockTypes [SectionBlockCount]; - NIBBLETYPE m_BlockMetas [SectionBlockCount / 2]; - NIBBLETYPE m_BlockLight [SectionBlockCount / 2]; - NIBBLETYPE m_BlockSkyLight[SectionBlockCount / 2]; - }; - + sChunkSection * m_Sections[NumSections]; + + cAllocationPool<cChunkData::sChunkSection> & m_Pool; /** Allocates a new section. Entry-point to custom allocators. */ - static sChunkSection * Allocate(void); - + sChunkSection * Allocate(void); + /** Frees the specified section, previously allocated using Allocate(). Note that a_Section may be NULL. */ - static void Free(sChunkSection * a_Section); + void Free(sChunkSection * a_Section); /** Sets the data in the specified section to their default values. */ void ZeroSection(sChunkSection * a_Section) const; + }; diff --git a/src/ChunkMap.cpp b/src/ChunkMap.cpp index d06b67b67..40ccecad8 100644 --- a/src/ChunkMap.cpp +++ b/src/ChunkMap.cpp @@ -34,8 +34,15 @@ // cChunkMap: cChunkMap::cChunkMap(cWorld * a_World ) - : m_World( a_World ) + : m_World( a_World ), + m_Pool( + new cListAllocationPool<cChunkData::sChunkSection, 1600>( + std::auto_ptr<cAllocationPool<cChunkData::sChunkSection>::cStarvationCallbacks>( + new cStarvationCallbacks()) + ) + ) { + } @@ -78,7 +85,7 @@ cChunkMap::cChunkLayer * cChunkMap::GetLayer(int a_LayerX, int a_LayerZ) } // Not found, create new: - cChunkLayer * Layer = new cChunkLayer(a_LayerX, a_LayerZ, this); + cChunkLayer * Layer = new cChunkLayer(a_LayerX, a_LayerZ, this, *m_Pool); if (Layer == NULL) { LOGERROR("cChunkMap: Cannot create new layer, server out of memory?"); @@ -2671,11 +2678,16 @@ void cChunkMap::QueueTickBlock(int a_BlockX, int a_BlockY, int a_BlockZ) //////////////////////////////////////////////////////////////////////////////// // cChunkMap::cChunkLayer: -cChunkMap::cChunkLayer::cChunkLayer(int a_LayerX, int a_LayerZ, cChunkMap * a_Parent) +cChunkMap::cChunkLayer::cChunkLayer( + int a_LayerX, int a_LayerZ, + cChunkMap * a_Parent, + cAllocationPool<cChunkData::sChunkSection> & a_Pool +) : m_LayerX( a_LayerX ) , m_LayerZ( a_LayerZ ) , m_Parent( a_Parent ) , m_NumChunksLoaded( 0 ) + , m_Pool(a_Pool) { memset(m_Chunks, 0, sizeof(m_Chunks)); } @@ -2717,7 +2729,7 @@ cChunkPtr cChunkMap::cChunkLayer::GetChunk( int a_ChunkX, int a_ChunkY, int a_Ch cChunk * neixp = (LocalX < LAYER_SIZE - 1) ? m_Chunks[Index + 1] : m_Parent->FindChunk(a_ChunkX + 1, a_ChunkZ); cChunk * neizm = (LocalZ > 0) ? m_Chunks[Index - LAYER_SIZE] : m_Parent->FindChunk(a_ChunkX , a_ChunkZ - 1); cChunk * neizp = (LocalZ < LAYER_SIZE - 1) ? m_Chunks[Index + LAYER_SIZE] : m_Parent->FindChunk(a_ChunkX , a_ChunkZ + 1); - m_Chunks[Index] = new cChunk(a_ChunkX, 0, a_ChunkZ, m_Parent, m_Parent->GetWorld(), neixm, neixp, neizm, neizp); + m_Chunks[Index] = new cChunk(a_ChunkX, 0, a_ChunkZ, m_Parent, m_Parent->GetWorld(), neixm, neixp, neizm, neizp, m_Pool); } return m_Chunks[Index]; } diff --git a/src/ChunkMap.h b/src/ChunkMap.h index 7e85bb6f1..3ee0bab3c 100644 --- a/src/ChunkMap.h +++ b/src/ChunkMap.h @@ -35,8 +35,8 @@ class cBlockArea; class cMobCensus; class cMobSpawner; -typedef std::list<cClientHandle *> cClientHandleList; -typedef cChunk * cChunkPtr; +typedef std::list<cClientHandle *> cClientHandleList; +typedef cChunk * cChunkPtr; typedef cItemCallback<cEntity> cEntityCallback; typedef cItemCallback<cBlockEntity> cBlockEntityCallback; typedef cItemCallback<cChestEntity> cChestCallback; @@ -351,7 +351,11 @@ private: class cChunkLayer { public: - cChunkLayer(int a_LayerX, int a_LayerZ, cChunkMap * a_Parent); + cChunkLayer( + int a_LayerX, int a_LayerZ, + cChunkMap * a_Parent, + cAllocationPool<cChunkData::sChunkSection> & a_Pool + ); ~cChunkLayer(); /** Always returns an assigned chunkptr, but the chunk needn't be valid (loaded / generated) - callers must check */ @@ -395,6 +399,25 @@ private: int m_LayerZ; cChunkMap * m_Parent; int m_NumChunksLoaded; + + cAllocationPool<cChunkData::sChunkSection> & m_Pool; + }; + + class cStarvationCallbacks + : public cAllocationPool<cChunkData::sChunkSection>::cStarvationCallbacks + { + virtual void OnStartUsingReserve() override + { + LOG("Using backup memory buffer"); + } + virtual void OnEndUsingReserve() override + { + LOG("Stoped using backup memory buffer"); + } + virtual void OnOutOfReserve() override + { + LOG("Out of Memory"); + } }; typedef std::list<cChunkLayer *> cChunkLayerList; @@ -427,6 +450,8 @@ private: /** The cChunkStay descendants that are currently enabled in this chunkmap */ cChunkStays m_ChunkStays; + std::auto_ptr<cAllocationPool<cChunkData::sChunkSection> > m_Pool; + cChunkPtr GetChunk (int a_ChunkX, int a_ChunkY, int a_ChunkZ); // Also queues the chunk for loading / generating if not valid cChunkPtr GetChunkNoGen (int a_ChunkX, int a_ChunkY, int a_ChunkZ); // Also queues the chunk for loading if not valid; doesn't generate cChunkPtr GetChunkNoLoad(int a_ChunkX, int a_ChunkY, int a_ChunkZ); // Doesn't load, doesn't generate diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index 84f096d67..1c6c989c5 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -952,6 +952,26 @@ void cClientHandle::HandleBlockDigStarted(int a_BlockX, int a_BlockY, int a_Bloc m_LastDigBlockY = a_BlockY; m_LastDigBlockZ = a_BlockZ; + // Check for clickthrough-blocks: + /* When the user breaks a fire block, the client send the wrong block location. + We must find the right block with the face direction. */ + if (a_BlockFace != BLOCK_FACE_NONE) + { + int pX = a_BlockX; + int pY = a_BlockY; + int pZ = a_BlockZ; + + AddFaceDirection(pX, pY, pZ, a_BlockFace); // Get the block in front of the clicked coordinates (m_bInverse defaulted to false) + cBlockHandler * Handler = cBlockInfo::GetHandler(m_Player->GetWorld()->GetBlock(pX, pY, pZ)); + + if (Handler->IsClickedThrough()) + { + cChunkInterface ChunkInterface(m_Player->GetWorld()->GetChunkMap()); + Handler->OnDigging(ChunkInterface, *m_Player->GetWorld(), m_Player, pX, pY, pZ); + return; + } + } + if ( (m_Player->IsGameModeCreative()) || // In creative mode, digging is done immediately cBlockInfo::IsOneHitDig(a_OldBlock) // One-hit blocks get destroyed immediately, too @@ -978,22 +998,6 @@ void cClientHandle::HandleBlockDigStarted(int a_BlockX, int a_BlockY, int a_Bloc cItemHandler * ItemHandler = cItemHandler::GetItemHandler(m_Player->GetEquippedItem()); ItemHandler->OnDiggingBlock(World, m_Player, m_Player->GetEquippedItem(), a_BlockX, a_BlockY, a_BlockZ, a_BlockFace); - - // Check for clickthrough-blocks: - if (a_BlockFace != BLOCK_FACE_NONE) - { - int pX = a_BlockX; - int pY = a_BlockY; - int pZ = a_BlockZ; - - AddFaceDirection(pX, pY, pZ, a_BlockFace); // Get the block in front of the clicked coordinates (m_bInverse defaulted to false) - Handler = cBlockInfo::GetHandler(World->GetBlock(pX, pY, pZ)); - - if (Handler->IsClickedThrough()) - { - Handler->OnDigging(ChunkInterface, *World, m_Player, pX, pY, pZ); - } - } } diff --git a/src/CraftingRecipes.cpp b/src/CraftingRecipes.cpp index 53a638ee5..0f1951351 100644 --- a/src/CraftingRecipes.cpp +++ b/src/CraftingRecipes.cpp @@ -59,6 +59,7 @@ cCraftingGrid::cCraftingGrid(const cCraftingGrid & a_Original) : cCraftingGrid::~cCraftingGrid() { delete[] m_Items; + m_Items = NULL; } diff --git a/src/Defines.h b/src/Defines.h index 563fc308c..ee91ee596 100644 --- a/src/Defines.h +++ b/src/Defines.h @@ -274,8 +274,19 @@ inline eBlockFace RotateBlockFaceCW(eBlockFace a_BlockFace) } } - - +inline eBlockFace ReverseBlockFace(eBlockFace a_BlockFace) +{ + switch (a_BlockFace) + { + case BLOCK_FACE_YP: return BLOCK_FACE_YM; + case BLOCK_FACE_XP: return BLOCK_FACE_XM; + case BLOCK_FACE_ZP: return BLOCK_FACE_ZM; + case BLOCK_FACE_YM: return BLOCK_FACE_YP; + case BLOCK_FACE_XM: return BLOCK_FACE_XP; + case BLOCK_FACE_ZM: return BLOCK_FACE_ZP; + default: return a_BlockFace; + } +} /** Returns the textual representation of the BlockFace constant. */ diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 9a8c6586d..fadd12135 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -180,14 +180,9 @@ void cEntity::WrapRotation(void) void cEntity::WrapSpeed(void) { - // There shoudn't be a need for flipping the flag on because this function is called - // after any update, so the flag is already turned on - if (m_Speed.x > 78.0f) m_Speed.x = 78.0f; - else if (m_Speed.x < -78.0f) m_Speed.x = -78.0f; - if (m_Speed.y > 78.0f) m_Speed.y = 78.0f; - else if (m_Speed.y < -78.0f) m_Speed.y = -78.0f; - if (m_Speed.z > 78.0f) m_Speed.z = 78.0f; - else if (m_Speed.z < -78.0f) m_Speed.z = -78.0f; + m_Speed.x = Clamp(m_Speed.x, -78.0, 78.0); + m_Speed.y = Clamp(m_Speed.y, -78.0, 78.0); + m_Speed.z = Clamp(m_Speed.z, -78.0, 78.0); } @@ -1234,6 +1229,17 @@ void cEntity::SetSwimState(cChunk & a_Chunk) +void cEntity::DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ) +{ + m_Speed.Set(a_SpeedX, a_SpeedY, a_SpeedZ); + + WrapSpeed(); +} + + + + + void cEntity::HandleAir(void) { // Ref.: http://www.minecraftwiki.net/wiki/Chunk_format @@ -1586,9 +1592,7 @@ void cEntity::SetRoll(double a_Roll) void cEntity::SetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ) { - m_Speed.Set(a_SpeedX, a_SpeedY, a_SpeedZ); - - WrapSpeed(); + DoSetSpeed(a_SpeedX, a_SpeedY, a_SpeedZ); } @@ -1596,9 +1600,7 @@ void cEntity::SetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ) void cEntity::SetSpeedX(double a_SpeedX) { - m_Speed.x = a_SpeedX; - - WrapSpeed(); + SetSpeed(a_SpeedX, m_Speed.y, m_Speed.z); } @@ -1606,9 +1608,7 @@ void cEntity::SetSpeedX(double a_SpeedX) void cEntity::SetSpeedY(double a_SpeedY) { - m_Speed.y = a_SpeedY; - - WrapSpeed(); + SetSpeed(m_Speed.x, a_SpeedY, m_Speed.z); } @@ -1616,9 +1616,7 @@ void cEntity::SetSpeedY(double a_SpeedY) void cEntity::SetSpeedZ(double a_SpeedZ) { - m_Speed.z = a_SpeedZ; - - WrapSpeed(); + SetSpeed(m_Speed.x, m_Speed.y, a_SpeedZ); } diff --git a/src/Entities/Entity.h b/src/Entities/Entity.h index 0293968ab..f06666569 100644 --- a/src/Entities/Entity.h +++ b/src/Entities/Entity.h @@ -215,11 +215,22 @@ public: void SetYaw (double a_Yaw); // In degrees, normalizes to [-180, +180) void SetPitch (double a_Pitch); // In degrees, normalizes to [-180, +180) void SetRoll (double a_Roll); // In degrees, normalizes to [-180, +180) - void SetSpeed (double a_SpeedX, double a_SpeedY, double a_SpeedZ); - void SetSpeed (const Vector3d & a_Speed) { SetSpeed(a_Speed.x, a_Speed.y, a_Speed.z); } - void SetSpeedX (double a_SpeedX); - void SetSpeedY (double a_SpeedY); - void SetSpeedZ (double a_SpeedZ); + + /** Sets the speed of the entity, measured in m / sec */ + void SetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ); + + /** Sets the speed of the entity, measured in m / sec */ + void SetSpeed(const Vector3d & a_Speed) { SetSpeed(a_Speed.x, a_Speed.y, a_Speed.z); } + + /** Sets the speed in the X axis, leaving the other speed components intact. Measured in m / sec. */ + void SetSpeedX(double a_SpeedX); + + /** Sets the speed in the Y axis, leaving the other speed components intact. Measured in m / sec. */ + void SetSpeedY(double a_SpeedY); + + /** Sets the speed in the Z axis, leaving the other speed components intact. Measured in m / sec. */ + void SetSpeedZ(double a_SpeedZ); + void SetWidth (double a_Width); void AddPosX (double a_AddPosX); @@ -441,6 +452,9 @@ protected: static cCriticalSection m_CSCount; static int m_EntityCount; + /** Measured in meter/second (m/s) */ + Vector3d m_Speed; + int m_UniqueID; int m_Health; @@ -500,11 +514,15 @@ protected: /// Time, in ticks, since the last damage dealt by the void. Reset to zero when moving out of the void. int m_TicksSinceLastVoidDamage; - + + /** Does the actual speed-setting. The default implementation just sets the member variable value; + overrides can provide further processing, such as forcing players to move at the given speed. */ + virtual void DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ); + virtual void Destroyed(void) {} // Called after the entity has been destroyed /** Called in each tick to handle air-related processing i.e. drowning */ - virtual void HandleAir(); + virtual void HandleAir(void); /** Called once per tick to set IsSwimming and IsSubmerged */ virtual void SetSwimState(cChunk & a_Chunk); @@ -526,9 +544,6 @@ private: /** Measured in degrees, [-180, +180) */ double m_HeadYaw; - /** Measured in meter/second (m/s) */ - Vector3d m_Speed; - /** Measured in degrees, [-180, +180) */ Vector3d m_Rot; diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp index b72f14f57..5a156bd3b 100644 --- a/src/Entities/Player.cpp +++ b/src/Entities/Player.cpp @@ -22,6 +22,12 @@ #include "inifile/iniFile.h" #include "json/json.h" +// 6000 ticks or 5 minutes +#define PLAYER_INVENTORY_SAVE_INTERVAL 6000 + +// 1000 = once per second +#define PLAYER_LIST_TIME_MS 1000 + @@ -64,6 +70,7 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName) , m_BowCharge(0) , m_FloaterID(-1) , m_Team(NULL) + , m_TicksUntilNextSave(PLAYER_INVENTORY_SAVE_INTERVAL) { LOGD("Created a player object for \"%s\" @ \"%s\" at %p, ID %d", a_PlayerName.c_str(), a_Client->GetIPString().c_str(), @@ -135,6 +142,7 @@ cPlayer::~cPlayer(void) m_ClientHandle = NULL; delete m_InventoryWindow; + m_InventoryWindow = NULL; LOGD("Player %p deleted", this); } @@ -244,7 +252,7 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk) // Send Player List (Once per m_LastPlayerListTime/1000 ms) cTimer t1; - if (m_LastPlayerListTime + cPlayer::PLAYER_LIST_TIME_MS <= t1.GetNowTime()) + if (m_LastPlayerListTime + PLAYER_LIST_TIME_MS <= t1.GetNowTime()) { m_World->SendPlayerList(this); m_LastPlayerListTime = t1.GetNowTime(); @@ -254,6 +262,16 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk) { m_LastGroundHeight = (float)GetPosY(); } + + if (m_TicksUntilNextSave == 0) + { + SaveToDisk(); + m_TicksUntilNextSave = PLAYER_INVENTORY_SAVE_INTERVAL; + } + else + { + m_TicksUntilNextSave--; + } } @@ -1251,6 +1269,17 @@ Vector3d cPlayer::GetThrowSpeed(double a_SpeedCoeff) const void cPlayer::ForceSetSpeed(const Vector3d & a_Speed) { SetSpeed(a_Speed); +} + + + + + +void cPlayer::DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ) +{ + super::DoSetSpeed(a_SpeedX, a_SpeedY, a_SpeedZ); + + // Send the speed to the client so he actualy moves m_ClientHandle->SendEntityVelocity(*this); } diff --git a/src/Entities/Player.h b/src/Entities/Player.h index c72d1eb8d..eff5d0663 100644 --- a/src/Entities/Player.h +++ b/src/Entities/Player.h @@ -194,7 +194,8 @@ public: // Sets the current gamemode, doesn't check validity, doesn't send update packets to client void LoginSetGameMode(eGameMode a_GameMode); - /** Forces the player to move in the given direction. */ + /** Forces the player to move in the given direction. + @deprecated Use SetSpeed instead. */ void ForceSetSpeed(const Vector3d & a_Speed); // tolua_export /** Tries to move to a new position, with attachment-related checks (y == -999) */ @@ -479,7 +480,6 @@ protected: cItem m_DraggingItem; long long m_LastPlayerListTime; - static const unsigned short PLAYER_LIST_TIME_MS = 1000; // 1000 = once per second cClientHandle * m_ClientHandle; @@ -528,6 +528,9 @@ protected: cStatManager m_Stats; + /** Sets the speed and sends it to the client, so that they are forced to move so. */ + virtual void DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ) override; + void ResolvePermissions(void); void ResolveGroups(void); @@ -555,6 +558,10 @@ protected: Set by a right click on unoccupied bed, unset by a time fast forward or teleport */ bool m_bIsInBed; + /** How long till the player's inventory will be saved + Default save interval is #defined in PLAYER_INVENTORY_SAVE_INTERVAL */ + unsigned int m_TicksUntilNextSave; + } ; // tolua_export diff --git a/src/Entities/ThrownSnowballEntity.cpp b/src/Entities/ThrownSnowballEntity.cpp index 427f630f7..cefc3433c 100644 --- a/src/Entities/ThrownSnowballEntity.cpp +++ b/src/Entities/ThrownSnowballEntity.cpp @@ -36,10 +36,6 @@ void cThrownSnowballEntity::OnHitEntity(cEntity & a_EntityHit, const Vector3d & { TotalDamage = 3; } - else if (MobType == cMonster::mtEnderDragon) - { - TotalDamage = 1; - } } // TODO: If entity is Ender Crystal, destroy it a_EntityHit.TakeDamage(dtRangedAttack, this, TotalDamage, 1); diff --git a/src/FurnaceRecipe.cpp b/src/FurnaceRecipe.cpp index bd7fd8079..2cb204ccf 100644 --- a/src/FurnaceRecipe.cpp +++ b/src/FurnaceRecipe.cpp @@ -42,6 +42,7 @@ cFurnaceRecipe::~cFurnaceRecipe() { ClearRecipes(); delete m_pState; + m_pState = NULL; } @@ -187,7 +188,9 @@ void cFurnaceRecipe::ClearRecipes(void) { Recipe R = *itr; delete R.In; + R.In = NULL; delete R.Out; + R.Out = NULL; } m_pState->Recipes.clear(); @@ -195,6 +198,7 @@ void cFurnaceRecipe::ClearRecipes(void) { Fuel F = *itr; delete F.In; + F.In = NULL; } m_pState->Fuel.clear(); } diff --git a/src/Generating/BioGen.cpp b/src/Generating/BioGen.cpp index 36a195a3d..1787bf179 100644 --- a/src/Generating/BioGen.cpp +++ b/src/Generating/BioGen.cpp @@ -135,7 +135,9 @@ cBioGenCache::cBioGenCache(cBiomeGen * a_BioGenToCache, int a_CacheSize) : cBioGenCache::~cBioGenCache() { delete[] m_CacheData; + m_CacheData = NULL; delete[] m_CacheOrder; + m_CacheOrder = NULL; } @@ -745,7 +747,12 @@ cBioGenTwoLevel::cBioGenTwoLevel(int a_Seed) : m_VoronoiSmall(a_Seed + 2000), m_DistortX(a_Seed + 3000), m_DistortZ(a_Seed + 4000), - m_Noise(a_Seed + 5000) + m_Noise1(a_Seed + 5001), + m_Noise2(a_Seed + 5002), + m_Noise3(a_Seed + 5003), + m_Noise4(a_Seed + 5004), + m_Noise5(a_Seed + 5005), + m_Noise6(a_Seed + 5006) { } @@ -767,12 +774,12 @@ void cBioGenTwoLevel::GenBiomes(int a_ChunkX, int a_ChunkZ, cChunkDef::BiomeMap int BlockZ = BaseZ + z * 4; float BlockXF = (float)(16 * BlockX) / 128; float BlockZF = (float)(16 * BlockZ) / 128; - double NoiseX = m_Noise.CubicNoise3D(BlockXF / 16, BlockZF / 16, 1000); - NoiseX += 0.5 * m_Noise.CubicNoise3D(BlockXF / 8, BlockZF / 8, 2000); - NoiseX += 0.08 * m_Noise.CubicNoise3D(BlockXF, BlockZF, 3000); - double NoiseZ = m_Noise.CubicNoise3D(BlockXF / 16, BlockZF / 16, 4000); - NoiseZ += 0.5 * m_Noise.CubicNoise3D(BlockXF / 8, BlockZF / 8, 5000); - NoiseZ += 0.08 * m_Noise.CubicNoise3D(BlockXF, BlockZF, 6000); + double NoiseX = m_Noise1.CubicNoise2D(BlockXF / 16, BlockZF / 16); + NoiseX += 0.5 * m_Noise2.CubicNoise2D(BlockXF / 8, BlockZF / 8); + NoiseX += 0.08 * m_Noise3.CubicNoise2D(BlockXF, BlockZF); + double NoiseZ = m_Noise4.CubicNoise2D(BlockXF / 16, BlockZF / 16); + NoiseZ += 0.5 * m_Noise5.CubicNoise2D(BlockXF / 8, BlockZF / 8); + NoiseZ += 0.08 * m_Noise6.CubicNoise2D(BlockXF, BlockZF); DistortX[4 * x][4 * z] = BlockX + (int)(64 * NoiseX); DistortZ[4 * x][4 * z] = BlockZ + (int)(64 * NoiseZ); @@ -786,8 +793,8 @@ void cBioGenTwoLevel::GenBiomes(int a_ChunkX, int a_ChunkZ, cChunkDef::BiomeMap { for (int x = 0; x < cChunkDef::Width; x++) { - int BiomeGroup = m_VoronoiLarge.GetValueAt(DistortX[x][z], DistortZ[x][z]) / 7; int MinDist1, MinDist2; + int BiomeGroup = m_VoronoiLarge.GetValueAt(DistortX[x][z], DistortZ[x][z], MinDist1, MinDist2) / 7; int BiomeIdx = m_VoronoiSmall.GetValueAt(DistortX[x][z], DistortZ[x][z], MinDist1, MinDist2) / 11; cChunkDef::SetBiome(a_BiomeMap, x, z, SelectBiome(BiomeGroup, BiomeIdx, (MinDist1 < MinDist2 / 4) ? 0 : 1)); } diff --git a/src/Generating/BioGen.h b/src/Generating/BioGen.h index 8bd460d8f..227ec97d7 100644 --- a/src/Generating/BioGen.h +++ b/src/Generating/BioGen.h @@ -261,7 +261,12 @@ protected: /// The noise used to distort the inupt Z coord cPerlinNoise m_DistortZ; - cNoise m_Noise; + cNoise m_Noise1; + cNoise m_Noise2; + cNoise m_Noise3; + cNoise m_Noise4; + cNoise m_Noise5; + cNoise m_Noise6; // cBiomeGen overrides: diff --git a/src/Generating/Caves.cpp b/src/Generating/Caves.cpp index 872e3341d..6aa7fd4cb 100644 --- a/src/Generating/Caves.cpp +++ b/src/Generating/Caves.cpp @@ -125,7 +125,7 @@ public: int m_BlockX; int m_BlockZ; - cCaveSystem(int a_OriginX, int a_OriginZ, int a_MaxOffset, int a_Size, cNoise & a_Noise); + cCaveSystem(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_MaxOffset, int a_Size, cNoise & a_Noise); ~cCaveSystem(); protected: @@ -574,8 +574,8 @@ AString cCaveTunnel::ExportAsSVG(int a_Color, int a_OffsetX, int a_OffsetZ) cons /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cStructGenWormNestCaves::cCaveSystem: -cStructGenWormNestCaves::cCaveSystem::cCaveSystem(int a_OriginX, int a_OriginZ, int a_MaxOffset, int a_Size, cNoise & a_Noise) : - super(a_OriginX, a_OriginZ), +cStructGenWormNestCaves::cCaveSystem::cCaveSystem(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_MaxOffset, int a_Size, cNoise & a_Noise) : + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), m_Size(a_Size) { int Num = 1 + a_Noise.IntNoise2DInt(a_OriginX, a_OriginZ) % 3; @@ -690,9 +690,9 @@ int cStructGenWormNestCaves::cCaveSystem::GetRadius(cNoise & a_Noise, int a_Orig /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cStructGenWormNestCaves: -cGridStructGen::cStructurePtr cStructGenWormNestCaves::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cStructGenWormNestCaves::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { - return cStructurePtr(new cCaveSystem(a_OriginX, a_OriginZ, m_MaxOffset, m_Size, m_Noise)); + return cStructurePtr(new cCaveSystem(a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_MaxOffset, m_Size, m_Noise)); } diff --git a/src/Generating/Caves.h b/src/Generating/Caves.h index 254dcddbd..0e17acf9e 100644 --- a/src/Generating/Caves.h +++ b/src/Generating/Caves.h @@ -69,7 +69,7 @@ class cStructGenWormNestCaves : typedef cGridStructGen super; public: cStructGenWormNestCaves(int a_Seed, int a_Size = 64, int a_Grid = 96, int a_MaxOffset = 128) : - super(a_Seed, a_Grid, a_Grid, a_Size + a_MaxOffset, a_Size + a_MaxOffset, 100), + super(a_Seed, a_Grid, a_Grid, a_MaxOffset, a_MaxOffset, a_Size, a_Size, 100), m_Noise(a_Seed), m_Size(a_Size), m_MaxOffset(a_MaxOffset), @@ -86,7 +86,7 @@ protected: int m_Grid; // average spacing of the nests // cGridStructGen override: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/Generating/CompoGen.cpp b/src/Generating/CompoGen.cpp index 688d19c40..2da285d72 100644 --- a/src/Generating/CompoGen.cpp +++ b/src/Generating/CompoGen.cpp @@ -672,7 +672,9 @@ cCompoGenCache::cCompoGenCache(cTerrainCompositionGen & a_Underlying, int a_Cach cCompoGenCache::~cCompoGenCache() { delete[] m_CacheData; + m_CacheData = NULL; delete[] m_CacheOrder; + m_CacheOrder = NULL; } diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp index 7f57343ad..c89c101b1 100644 --- a/src/Generating/ComposableGenerator.cpp +++ b/src/Generating/ComposableGenerator.cpp @@ -26,6 +26,7 @@ #include "POCPieceGenerator.h" #include "RainbowRoadsGen.h" #include "Ravines.h" +#include "TestRailsGen.h" #include "UnderwaterBaseGen.h" #include "VillageGen.h" @@ -343,12 +344,13 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) else if (NoCaseCompare(*itr, "MineShafts") == 0) { int GridSize = a_IniFile.GetValueSetI("Generator", "MineShaftsGridSize", 512); + int MaxOffset = a_IniFile.GetValueSetI("Generator", "MineShaftsMaxOffset", 256); int MaxSystemSize = a_IniFile.GetValueSetI("Generator", "MineShaftsMaxSystemSize", 160); int ChanceCorridor = a_IniFile.GetValueSetI("Generator", "MineShaftsChanceCorridor", 600); int ChanceCrossing = a_IniFile.GetValueSetI("Generator", "MineShaftsChanceCrossing", 200); int ChanceStaircase = a_IniFile.GetValueSetI("Generator", "MineShaftsChanceStaircase", 200); m_FinishGens.push_back(new cStructGenMineShafts( - Seed, GridSize, MaxSystemSize, + Seed, GridSize, MaxOffset, MaxSystemSize, ChanceCorridor, ChanceCrossing, ChanceStaircase )); } @@ -362,9 +364,10 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) } else if (NoCaseCompare(*itr, "NetherForts") == 0) { - int GridSize = a_IniFile.GetValueSetI("Generator", "NetherFortsGridSize", 512); - int MaxDepth = a_IniFile.GetValueSetI("Generator", "NetherFortsMaxDepth", 12); - m_FinishGens.push_back(new cNetherFortGen(Seed, GridSize, MaxDepth)); + int GridSize = a_IniFile.GetValueSetI("Generator", "NetherFortsGridSize", 512); + int MaxOffset = a_IniFile.GetValueSetI("Generator", "NetherFortMaxOffset", 128); + int MaxDepth = a_IniFile.GetValueSetI("Generator", "NetherFortsMaxDepth", 12); + m_FinishGens.push_back(new cNetherFortGen(Seed, GridSize, MaxOffset, MaxDepth)); } else if (NoCaseCompare(*itr, "OreNests") == 0) { @@ -380,10 +383,11 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) } else if (NoCaseCompare(*itr, "RainbowRoads") == 0) { - int GridSize = a_IniFile.GetValueSetI("Generator", "RainbowRoadsGridSize", 512); - int MaxDepth = a_IniFile.GetValueSetI("Generator", "RainbowRoadsMaxDepth", 30); - int MaxSize = a_IniFile.GetValueSetI("Generator", "RainbowRoadsMaxSize", 260); - m_FinishGens.push_back(new cRainbowRoadsGen(Seed, GridSize, MaxDepth, MaxSize)); + int GridSize = a_IniFile.GetValueSetI("Generator", "RainbowRoadsGridSize", 512); + int MaxOffset = a_IniFile.GetValueSetI("Generator", "RainbowRoadsMaxOffset", 128); + int MaxDepth = a_IniFile.GetValueSetI("Generator", "RainbowRoadsMaxDepth", 30); + int MaxSize = a_IniFile.GetValueSetI("Generator", "RainbowRoadsMaxSize", 260); + m_FinishGens.push_back(new cRainbowRoadsGen(Seed, GridSize, MaxOffset, MaxDepth, MaxSize)); } else if (NoCaseCompare(*itr, "Ravines") == 0) { @@ -397,25 +401,31 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) { m_FinishGens.push_back(new cFinishGenSprinkleFoliage(Seed)); } + else if (NoCaseCompare(*itr, "TestRails") == 0) + { + m_FinishGens.push_back(new cTestRailsGen(Seed, 100, 1, 7, 50)); + } else if (NoCaseCompare(*itr, "Trees") == 0) { m_FinishGens.push_back(new cStructGenTrees(Seed, m_BiomeGen, m_HeightGen, m_CompositionGen)); } else if (NoCaseCompare(*itr, "UnderwaterBases") == 0) { - int GridSize = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseGridSize", 1024); - int MaxDepth = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseMaxDepth", 7); - int MaxSize = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseMaxSize", 128); - m_FinishGens.push_back(new cUnderwaterBaseGen(Seed, GridSize, MaxDepth, MaxSize, *m_BiomeGen)); + int GridSize = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseGridSize", 1024); + int MaxOffset = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseMaxOffset", 128); + int MaxDepth = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseMaxDepth", 7); + int MaxSize = a_IniFile.GetValueSetI("Generator", "UnderwaterBaseMaxSize", 128); + m_FinishGens.push_back(new cUnderwaterBaseGen(Seed, GridSize, MaxOffset, MaxDepth, MaxSize, *m_BiomeGen)); } else if (NoCaseCompare(*itr, "Villages") == 0) { int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 384); + int MaxOffset = a_IniFile.GetValueSetI("Generator", "VillageMaxOffset", 128); int MaxDepth = a_IniFile.GetValueSetI("Generator", "VillageMaxDepth", 2); int MaxSize = a_IniFile.GetValueSetI("Generator", "VillageMaxSize", 128); int MinDensity = a_IniFile.GetValueSetI("Generator", "VillageMinDensity", 50); int MaxDensity = a_IniFile.GetValueSetI("Generator", "VillageMaxDensity", 80); - m_FinishGens.push_back(new cVillageGen(Seed, GridSize, MaxDepth, MaxSize, MinDensity, MaxDensity, *m_BiomeGen, *m_HeightGen)); + m_FinishGens.push_back(new cVillageGen(Seed, GridSize, MaxOffset, MaxDepth, MaxSize, MinDensity, MaxDensity, *m_BiomeGen, *m_HeightGen)); } else if (NoCaseCompare(*itr, "WaterLakes") == 0) { @@ -428,7 +438,10 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile) } else if (NoCaseCompare(*itr, "WormNestCaves") == 0) { - m_FinishGens.push_back(new cStructGenWormNestCaves(Seed)); + int Size = a_IniFile.GetValueSetI("Generator", "WormNestCavesSize", 64); + int Grid = a_IniFile.GetValueSetI("Generator", "WormNestCavesGrid", 96); + int MaxOffset = a_IniFile.GetValueSetI("Generator", "WormNestMaxOffset", 32); + m_FinishGens.push_back(new cStructGenWormNestCaves(Seed, Size, Grid, MaxOffset)); } else { diff --git a/src/Generating/GridStructGen.cpp b/src/Generating/GridStructGen.cpp index 474242557..95f8c38bc 100644 --- a/src/Generating/GridStructGen.cpp +++ b/src/Generating/GridStructGen.cpp @@ -21,8 +21,8 @@ class cEmptyStructure : typedef cGridStructGen::cStructure super; public: - cEmptyStructure(int a_OriginX, int a_OriginZ) : - super(a_OriginX, a_OriginZ) + cEmptyStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) : + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ) { } @@ -40,17 +40,20 @@ protected: cGridStructGen::cGridStructGen( int a_Seed, int a_GridSizeX, int a_GridSizeZ, + int a_MaxOffsetX, int a_MaxOffsetZ, int a_MaxStructureSizeX, int a_MaxStructureSizeZ, size_t a_MaxCacheSize ) : - m_Seed(a_Seed), + m_Noise(a_Seed), m_GridSizeX(a_GridSizeX), m_GridSizeZ(a_GridSizeZ), + m_MaxOffsetX(a_MaxOffsetX), + m_MaxOffsetZ(a_MaxOffsetZ), m_MaxStructureSizeX(a_MaxStructureSizeX), m_MaxStructureSizeZ(a_MaxStructureSizeZ), m_MaxCacheSize(a_MaxCacheSize) { - size_t NumStructuresPerQuery = (size_t)((m_MaxStructureSizeX / m_GridSizeX + 1) * (m_MaxStructureSizeZ / m_GridSizeZ + 1)); + size_t NumStructuresPerQuery = (size_t)(((m_MaxStructureSizeX + m_MaxOffsetX) / m_GridSizeX + 1) * ((m_MaxStructureSizeZ + m_MaxOffsetZ) / m_GridSizeZ + 1)); if (NumStructuresPerQuery > m_MaxCacheSize) { m_MaxCacheSize = NumStructuresPerQuery * 4; @@ -68,10 +71,10 @@ cGridStructGen::cGridStructGen( void cGridStructGen::GetStructuresForChunk(int a_ChunkX, int a_ChunkZ, cStructurePtrs & a_Structures) { // Calculate the min and max grid coords of the structures to be returned: - int MinBlockX = a_ChunkX * cChunkDef::Width - m_MaxStructureSizeX; - int MinBlockZ = a_ChunkZ * cChunkDef::Width - m_MaxStructureSizeZ; - int MaxBlockX = a_ChunkX * cChunkDef::Width + m_MaxStructureSizeX + cChunkDef::Width - 1; - int MaxBlockZ = a_ChunkZ * cChunkDef::Width + m_MaxStructureSizeZ + cChunkDef::Width - 1; + int MinBlockX = a_ChunkX * cChunkDef::Width - m_MaxStructureSizeX - m_MaxOffsetX; + int MinBlockZ = a_ChunkZ * cChunkDef::Width - m_MaxStructureSizeZ - m_MaxOffsetZ; + int MaxBlockX = a_ChunkX * cChunkDef::Width + m_MaxStructureSizeX + m_MaxOffsetX + cChunkDef::Width - 1; + int MaxBlockZ = a_ChunkZ * cChunkDef::Width + m_MaxStructureSizeZ + m_MaxOffsetZ + cChunkDef::Width - 1; int MinGridX = MinBlockX / m_GridSizeX; int MinGridZ = MinBlockZ / m_GridSizeZ; int MaxGridX = (MaxBlockX + m_GridSizeX - 1) / m_GridSizeX; @@ -85,8 +88,8 @@ void cGridStructGen::GetStructuresForChunk(int a_ChunkX, int a_ChunkZ, cStructur for (cStructurePtrs::iterator itr = m_Cache.begin(), end = m_Cache.end(); itr != end;) { if ( - ((*itr)->m_OriginX >= MinX) && ((*itr)->m_OriginX < MaxX) && - ((*itr)->m_OriginZ >= MinZ) && ((*itr)->m_OriginZ < MaxZ) + ((*itr)->m_GridX >= MinX) && ((*itr)->m_GridX < MaxX) && + ((*itr)->m_GridZ >= MinZ) && ((*itr)->m_GridZ < MaxZ) ) { // want @@ -103,14 +106,14 @@ void cGridStructGen::GetStructuresForChunk(int a_ChunkX, int a_ChunkZ, cStructur // Create those structures that haven't been in the cache: for (int x = MinGridX; x < MaxGridX; x++) { - int OriginX = x * m_GridSizeX; + int GridX = x * m_GridSizeX; for (int z = MinGridZ; z < MaxGridZ; z++) { - int OriginZ = z * m_GridSizeZ; + int GridZ = z * m_GridSizeZ; bool Found = false; for (cStructurePtrs::const_iterator itr = a_Structures.begin(), end = a_Structures.end(); itr != end; ++itr) { - if (((*itr)->m_OriginX == OriginX) && ((*itr)->m_OriginZ == OriginZ)) + if (((*itr)->m_GridX == GridX) && ((*itr)->m_GridZ == GridZ)) { Found = true; break; @@ -118,10 +121,12 @@ void cGridStructGen::GetStructuresForChunk(int a_ChunkX, int a_ChunkZ, cStructur } // for itr - a_Structures[] if (!Found) { - cStructurePtr Structure = CreateStructure(OriginX, OriginZ); + int OriginX = GridX + ((m_Noise.IntNoise2DInt(GridX + 3, GridZ + 5) / 7) % (m_MaxOffsetX * 2)) - m_MaxOffsetX; + int OriginZ = GridZ + ((m_Noise.IntNoise2DInt(GridX + 5, GridZ + 3) / 7) % (m_MaxOffsetZ * 2)) - m_MaxOffsetZ; + cStructurePtr Structure = CreateStructure(GridX, GridZ, OriginX, OriginZ); if (Structure.get() == NULL) { - Structure.reset(new cEmptyStructure(OriginX, OriginZ)); + Structure.reset(new cEmptyStructure(GridX, GridZ, OriginX, OriginZ)); } a_Structures.push_back(Structure); } diff --git a/src/Generating/GridStructGen.h b/src/Generating/GridStructGen.h index 630a5e44e..03131fce9 100644 --- a/src/Generating/GridStructGen.h +++ b/src/Generating/GridStructGen.h @@ -10,6 +10,7 @@ #pragma once #include "ComposableGenerator.h" +#include "../Noise.h" @@ -19,7 +20,12 @@ Defines a grid in the XZ space with predefined cell size in each direction. Each cell then receives exactly one structure (provided by the descendant class). The structure is placed within the cell, but doesn't need to be bounded by the cell, it can be well outside the cell; the generator uses the MaxStructureSize parameter -to determine how far away from the cell the structure can be at most. +to determine how far away from the cell the structure can be at most. Each structure has an offset from the +grid's center point, the offset is generated randomly from a range given to this class as a parameter. + +Each structure thus contains the coords of its grid center (m_GridX, m_GridZ) and the actual origin from +which it's built (m_OriginX, m_OriginZ). + This class provides a cache for the structures generated for successive chunks and manages that cache. It also provides the cFinishGen override that uses the cache to actually generate the structure into chunk data. @@ -43,12 +49,17 @@ public: class cStructure { public: - /** The origin (the coords of the gridpoint for which the structure is generated) */ + /** The grid point for which the structure is generated. */ + int m_GridX, m_GridZ; + + /** The origin (the coords for which the structure is generated) */ int m_OriginX, m_OriginZ; - /** Creates a structure that has its originset at the specified coords. */ - cStructure (int a_OriginX, int a_OriginZ) : + /** Creates a structure that has its origin set at the specified coords. */ + cStructure (int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) : + m_GridX(a_GridX), + m_GridZ(a_GridZ), m_OriginX(a_OriginX), m_OriginZ(a_OriginZ) { @@ -70,20 +81,30 @@ public: cGridStructGen( int a_Seed, int a_GridSizeX, int a_GridSizeZ, + int a_MaxOffsetX, int a_MaxOffsetZ, int a_MaxStructureSizeX, int a_MaxStructureSizeZ, size_t a_MaxCacheSize ); protected: - /** Seed for generating the semi-random grid. */ + /** Seed for generating grid offsets and also available for descendants. */ int m_Seed; + /** The noise used for generating grid offsets. */ + cNoise m_Noise; + /** The size of each grid's cell in the X axis */ int m_GridSizeX; /** The size of each grid's cell in the Z axis */ int m_GridSizeZ; + /** The maximum offset of the structure's origin from the grid midpoint, in X coord. */ + int m_MaxOffsetX; + + /** The maximum offset of the structure's origin from the grid midpoint, in Z coord. */ + int m_MaxOffsetZ; + /** Maximum theoretical size of the structure in the X axis. This limits the structures considered for a single chunk, so the lesser the number, the better performance. Structures large than this may get cropped. */ @@ -115,7 +136,7 @@ protected: // Functions for the descendants to override: /** Create a new structure at the specified gridpoint */ - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) = 0; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) = 0; } ; diff --git a/src/Generating/HeiGen.cpp b/src/Generating/HeiGen.cpp index 25ac912fd..202f7db7e 100644 --- a/src/Generating/HeiGen.cpp +++ b/src/Generating/HeiGen.cpp @@ -142,7 +142,9 @@ cHeiGenCache::cHeiGenCache(cTerrainHeightGen & a_HeiGenToCache, int a_CacheSize) cHeiGenCache::~cHeiGenCache() { delete[] m_CacheData; + m_CacheData = NULL; delete[] m_CacheOrder; + m_CacheOrder = NULL; } diff --git a/src/Generating/MineShafts.cpp b/src/Generating/MineShafts.cpp index 81ae6481d..ab9b1aa29 100644 --- a/src/Generating/MineShafts.cpp +++ b/src/Generating/MineShafts.cpp @@ -248,7 +248,8 @@ public: /** Creates and generates the entire system */ cMineShaftSystem( - int a_OriginX, int a_OriginZ, int a_GridSize, int a_MaxSystemSize, cNoise & a_Noise, + int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, + int a_GridSize, int a_MaxSystemSize, cNoise & a_Noise, int a_ProbLevelCorridor, int a_ProbLevelCrossing, int a_ProbLevelStaircase ); @@ -278,10 +279,11 @@ public: // cStructGenMineShafts::cMineShaftSystem: cStructGenMineShafts::cMineShaftSystem::cMineShaftSystem( - int a_OriginX, int a_OriginZ, int a_GridSize, int a_MaxSystemSize, cNoise & a_Noise, + int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, + int a_GridSize, int a_MaxSystemSize, cNoise & a_Noise, int a_ProbLevelCorridor, int a_ProbLevelCrossing, int a_ProbLevelStaircase ) : - super(a_OriginX, a_OriginZ), + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), m_GridSize(a_GridSize), m_MaxRecursion(8), // TODO: settable m_ProbLevelCorridor(a_ProbLevelCorridor), @@ -1280,10 +1282,10 @@ void cMineShaftStaircase::ProcessChunk(cChunkDesc & a_ChunkDesc) // cStructGenMineShafts: cStructGenMineShafts::cStructGenMineShafts( - int a_Seed, int a_GridSize, int a_MaxSystemSize, + int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxSystemSize, int a_ChanceCorridor, int a_ChanceCrossing, int a_ChanceStaircase ) : - super(a_Seed, a_GridSize, a_GridSize, a_MaxSystemSize, a_MaxSystemSize, 100), + super(a_Seed, a_GridSize, a_GridSize, a_MaxOffset, a_MaxOffset, a_MaxSystemSize, a_MaxSystemSize, 100), m_Noise(a_Seed), m_GridSize(a_GridSize), m_MaxSystemSize(a_MaxSystemSize), @@ -1297,9 +1299,9 @@ cStructGenMineShafts::cStructGenMineShafts( -cGridStructGen::cStructurePtr cStructGenMineShafts::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cStructGenMineShafts::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { - return cStructurePtr(new cMineShaftSystem(a_OriginX, a_OriginZ, m_GridSize, m_MaxSystemSize, m_Noise, m_ProbLevelCorridor, m_ProbLevelCrossing, m_ProbLevelStaircase)); + return cStructurePtr(new cMineShaftSystem(a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_GridSize, m_MaxSystemSize, m_Noise, m_ProbLevelCorridor, m_ProbLevelCrossing, m_ProbLevelStaircase)); } diff --git a/src/Generating/MineShafts.h b/src/Generating/MineShafts.h index c29b6cdac..2850db571 100644 --- a/src/Generating/MineShafts.h +++ b/src/Generating/MineShafts.h @@ -23,7 +23,7 @@ class cStructGenMineShafts : public: cStructGenMineShafts( - int a_Seed, int a_GridSize, int a_MaxSystemSize, + int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxSystemSize, int a_ChanceCorridor, int a_ChanceCrossing, int a_ChanceStaircase ); @@ -43,7 +43,7 @@ protected: int m_ProbLevelStaircase; ///< Probability level of a branch object being the staircase, minus Crossing // cGridStructGen overrides: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/Generating/NetherFortGen.cpp b/src/Generating/NetherFortGen.cpp index 3867ec80c..23fa56048 100644 --- a/src/Generating/NetherFortGen.cpp +++ b/src/Generating/NetherFortGen.cpp @@ -26,8 +26,8 @@ public: cPlacedPieces m_Pieces; - cNetherFort(cNetherFortGen & a_ParentGen, int a_OriginX, int a_OriginZ, int a_GridSize, int a_MaxDepth, int a_Seed) : - super(a_OriginX, a_OriginZ), + cNetherFort(cNetherFortGen & a_ParentGen, int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_GridSize, int a_MaxDepth, int a_Seed) : + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), m_ParentGen(a_ParentGen), m_GridSize(a_GridSize), m_Seed(a_Seed) @@ -108,8 +108,8 @@ cPrefabPiecePool cNetherFortGen::m_PiecePool(g_NetherFortPrefabs, g_NetherFortPr -cNetherFortGen::cNetherFortGen(int a_Seed, int a_GridSize, int a_MaxDepth) : - super(a_Seed, a_GridSize, a_GridSize, a_MaxDepth * 10, a_MaxDepth * 10, 200), +cNetherFortGen::cNetherFortGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth) : + super(a_Seed, a_GridSize, a_GridSize, a_MaxOffset, a_MaxOffset, a_MaxDepth * 10, a_MaxDepth * 10, 200), m_MaxDepth(a_MaxDepth) { /* @@ -124,8 +124,11 @@ cNetherFortGen::cNetherFortGen(int a_Seed, int a_GridSize, int a_MaxDepth) : -cGridStructGen::cStructurePtr cNetherFortGen::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cNetherFortGen::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { - return cStructurePtr(new cNetherFort(*this, a_OriginX, a_OriginZ, m_GridSizeX, m_MaxDepth, m_Seed)); + return cStructurePtr(new cNetherFort(*this, a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_GridSizeX, m_MaxDepth, m_Seed)); } + + + diff --git a/src/Generating/NetherFortGen.h b/src/Generating/NetherFortGen.h index f35801a3c..9b31aa0e2 100644 --- a/src/Generating/NetherFortGen.h +++ b/src/Generating/NetherFortGen.h @@ -23,7 +23,7 @@ class cNetherFortGen : typedef cGridStructGen super; public: - cNetherFortGen(int a_Seed, int a_GridSize, int a_MaxDepth); + cNetherFortGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth); protected: friend class cNetherFortPerfTest; // fwd: NetherFortGen.cpp @@ -37,7 +37,7 @@ protected: // cGridStructGen overrides: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp index eb0d30fdf..5cb864d53 100644 --- a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp +++ b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp @@ -28,170 +28,172 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // Block definitions: ".: 0: 0\n" /* air */ - "A:171: 8\n" /* carpet */ - "B:101: 0\n" /* ironbars */ - "C: 64:12\n" /* wooddoorblock */ - "D:128: 2\n" /* sandstonestairs */ - "E: 24: 1\n" /* sandstone */ - "F: 44: 9\n" /* step */ - "G:126: 8\n" /* woodenslab */ - "H:128: 7\n" /* sandstonestairs */ - "I: 44: 1\n" /* step */ - "J: 64: 7\n" /* wooddoorblock */ - "K:128: 6\n" /* sandstonestairs */ - "a: 1: 0\n" /* stone */ - "b: 24: 0\n" /* sandstone */ - "c: 12: 0\n" /* sand */ - "d:134: 4\n" /* 134 */ - "e: 5: 1\n" /* wood */ - "f:134: 5\n" /* 134 */ - "g: 65: 5\n" /* ladder */ - "h: 17: 3\n" /* tree */ - "i: 69:11\n" /* lever */ - "j:134: 0\n" /* 134 */ - "k:134: 1\n" /* 134 */ - "l: 50: 4\n" /* torch */ + "A: 65: 3\n" /* ladder */ + "B: 50: 3\n" /* torch */ + "C:171: 8\n" /* carpet */ + "D:101: 0\n" /* ironbars */ + "E: 64: 8\n" /* wooddoorblock */ + "F:128: 2\n" /* sandstonestairs */ + "G: 24: 1\n" /* sandstone */ + "H: 44: 9\n" /* step */ + "I:126: 8\n" /* woodenslab */ + "J:128: 7\n" /* sandstonestairs */ + "K: 44: 1\n" /* step */ + "L: 64: 3\n" /* wooddoorblock */ + "M:128: 6\n" /* sandstonestairs */ + "a: 24: 2\n" /* sandstone */ + "b: 1: 0\n" /* stone */ + "c: 24: 0\n" /* sandstone */ + "d: 12: 0\n" /* sand */ + "e:134: 4\n" /* 134 */ + "f: 5: 1\n" /* wood */ + "g:134: 5\n" /* 134 */ + "h: 65: 5\n" /* ladder */ + "i: 17: 3\n" /* tree */ + "j: 69:11\n" /* lever */ + "k: 4: 0\n" /* cobblestone */ + "l:134: 0\n" /* 134 */ "m: 19: 0\n" /* sponge */ - "n: 5: 0\n" /* wood */ - "o: 96:12\n" /* trapdoor */ - "p: 24: 2\n" /* sandstone */ - "q:128: 5\n" /* sandstonestairs */ - "r:107: 6\n" /* fencegate */ - "s:128: 4\n" /* sandstonestairs */ - "t:134: 3\n" /* 134 */ - "u: 85: 0\n" /* fence */ - "v:134: 7\n" /* 134 */ - "w:107: 5\n" /* fencegate */ - "x: 64: 5\n" /* wooddoorblock */ - "y: 65: 3\n" /* ladder */ - "z: 50: 3\n" /* torch */, + "n:134: 1\n" /* 134 */ + "o: 50: 4\n" /* torch */ + "p: 13: 0\n" /* gravel */ + "q: 5: 0\n" /* wood */ + "r: 96:12\n" /* trapdoor */ + "s:128: 5\n" /* sandstonestairs */ + "t:107: 0\n" /* fencegate */ + "u:128: 4\n" /* sandstonestairs */ + "v:134: 3\n" /* 134 */ + "w: 85: 0\n" /* fence */ + "x:134: 7\n" /* 134 */ + "y:107: 5\n" /* fencegate */ + "z: 64: 1\n" /* wooddoorblock */, // Block data: // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "aaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaa" - /* 2 */ "aabbbbbbbaa" - /* 3 */ "aabbbbbbbaa" - /* 4 */ "aabbbbbbbaa" - /* 5 */ "aabbbbbbbaa" - /* 6 */ "aabbbbbbbaa" - /* 7 */ "aabbbbbbbaa" - /* 8 */ "aaaaaaaaaaa" - /* 9 */ "aaaaaaaaaaa" + /* 0 */ "mmmabbbammm" + /* 1 */ "mcccccccccm" + /* 2 */ "abcccccccba" + /* 3 */ "cbcccccccbc" + /* 4 */ "cbcccccccbc" + /* 5 */ "cbcccccccbc" + /* 6 */ "cbcccccccbc" + /* 7 */ "cbcccccccbc" + /* 8 */ "abbbbbbbbba" + /* 9 */ "mmmmmmmmmmm" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "ccccccccccc" - /* 1 */ "cbbbbbbbbbc" - /* 2 */ "cbdef.defbc" - /* 3 */ "cbdef.defbc" - /* 4 */ "cbdef.defbc" - /* 5 */ "cb.......bc" - /* 6 */ "cb.......bc" - /* 7 */ "cbg......bc" - /* 8 */ "cbbbbbbbbbc" - /* 9 */ "ccccccccccc" + /* 0 */ "mmmadddammm" + /* 1 */ "mcccccccccm" + /* 2 */ "acefg.efgca" + /* 3 */ "ccefg.efgcc" + /* 4 */ "ccefg.efgcc" + /* 5 */ "cc.......cc" + /* 6 */ "cc.......cc" + /* 7 */ "cch......cc" + /* 8 */ "accccccccca" + /* 9 */ "mmmmmmmmmmm" // Level 2 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "ccccccccccc" - /* 1 */ "cbbbbbbbbbc" - /* 2 */ "cbeee.eeebc" - /* 3 */ "cbeee.eeebc" - /* 4 */ "cbehe.ehebc" - /* 5 */ "cb.i...i.bc" - /* 6 */ "cb.......bc" - /* 7 */ "cbg......bc" - /* 8 */ "cbbbbbbbbbc" - /* 9 */ "ccccccccccc" + /* 0 */ "mmmadddammm" + /* 1 */ "mcccccccccm" + /* 2 */ "acfff.fffca" + /* 3 */ "ccfff.fffcc" + /* 4 */ "ccfif.fifcc" + /* 5 */ "cc.j...j.cc" + /* 6 */ "cc.......cc" + /* 7 */ "cch......cc" + /* 8 */ "accccccccca" + /* 9 */ "mmmmmmmmmmm" // Level 3 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "ccccccccccc" - /* 1 */ "cbbbbbbbbbc" - /* 2 */ "cbjek.jekbc" - /* 3 */ "cbjek.jekbc" - /* 4 */ "cbjek.jekbc" - /* 5 */ "cb.......bc" - /* 6 */ "cb.......bc" - /* 7 */ "cbg..l...bc" - /* 8 */ "cbbbbbbbbbc" - /* 9 */ "ccccccccccc" + /* 0 */ "mmmakkkammm" + /* 1 */ "mcccccccccm" + /* 2 */ "aclfn.lfnca" + /* 3 */ "cclfn.lfncc" + /* 4 */ "cclfn.lfncc" + /* 5 */ "cc.......cc" + /* 6 */ "cc.......cc" + /* 7 */ "cch..o...cc" + /* 8 */ "accccccccca" + /* 9 */ "mmmmmmmmmmm" // Level 4 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "ccccccccccc" - /* 1 */ "ccccccccccc" - /* 2 */ "ccnnnnnnncc" - /* 3 */ "cnnnnnnnnnc" - /* 4 */ "cnnnnnnnnnc" - /* 5 */ "cnnnnnnnnnc" - /* 6 */ "cnnnnnnnnnc" - /* 7 */ "cnonnnnnnnc" - /* 8 */ "cnccccccccc" - /* 9 */ "ccccccccccc" + /* 0 */ "mmmapppammm" + /* 1 */ "mmmmpppmmmm" + /* 2 */ "acccqqqccca" + /* 3 */ "cqqqqqqqqqc" + /* 4 */ "cqqqqqqqqqc" + /* 5 */ "cqqqqqqqqqc" + /* 6 */ "cqqqqqqqqqc" + /* 7 */ "cqrqqqqqqqc" + /* 8 */ "aqcccccccca" + /* 9 */ "mmmmmmmmmmm" // Level 5 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "...p...p..." - /* 1 */ "..........." - /* 2 */ "pbbbqrsbbbp" - /* 3 */ "bkt.....ttb" - /* 4 */ "bku.....ujb" - /* 5 */ "b.........b" - /* 6 */ "bfvvd.....b" - /* 7 */ "b...w..kujb" - /* 8 */ "pxbbbbbbbbp" - /* 9 */ "..y........" + /* 0 */ "mmma...ammm" + /* 1 */ "mmm.....mmm" + /* 2 */ "acccstuccca" + /* 3 */ "cnv.....vvc" + /* 4 */ "cnw.....wlc" + /* 5 */ "c.........c" + /* 6 */ "cgxxe.....c" + /* 7 */ "c...y..nwlc" + /* 8 */ "azcccccccca" + /* 9 */ "mmAmmmmmmmm" // Level 6 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "...p...p..." - /* 1 */ "..........." - /* 2 */ "pbbb...bbbp" - /* 3 */ "b..z...z..b" - /* 4 */ "b.A.....A.b" - /* 5 */ "B.........B" - /* 6 */ "b.........b" - /* 7 */ "b.......A.b" - /* 8 */ "pCbbBBBbbbp" - /* 9 */ "..y........" + /* 0 */ "mmma...ammm" + /* 1 */ "mmm.....mmm" + /* 2 */ "accc...ccca" + /* 3 */ "c..B...B..c" + /* 4 */ "c.C.....C.c" + /* 5 */ "D.........D" + /* 6 */ "c.........c" + /* 7 */ "c.......C.c" + /* 8 */ "aEccDDDccca" + /* 9 */ "mmAmmmmmmmm" // Level 7 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "...D...D..." - /* 1 */ "...E...b..." - /* 2 */ "pbbbqFsbbbp" - /* 3 */ "bGGGGGGGGGb" - /* 4 */ "bGGGGGGGGGb" - /* 5 */ "sGGGGGGGGGq" - /* 6 */ "bGGGGGGGGGb" - /* 7 */ "bGGGGGGGGGb" - /* 8 */ "pbbbHHHbbbp" - /* 9 */ "..y........" + /* 0 */ "mmmF...Fmmm" + /* 1 */ "mmmG...cmmm" + /* 2 */ "acccsHuccca" + /* 3 */ "cIIIIIIIIIc" + /* 4 */ "cIIIIIIIIIc" + /* 5 */ "uIIIIIIIIIs" + /* 6 */ "cIIIIIIIIIc" + /* 7 */ "cIIIIIIIIIc" + /* 8 */ "acccJJJccca" + /* 9 */ "mmAmmmmmmmm" // Level 8 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..........." - /* 1 */ "..........." - /* 2 */ "bIIIIbIIIIb" - /* 3 */ "IpbbbbbbbpI" - /* 4 */ "Ib.......bI" - /* 5 */ "bb.......bb" - /* 6 */ "Ib.......bI" - /* 7 */ "IpJbbbbbbpI" - /* 8 */ "bI.IIbIIIIb" - /* 9 */ "..........." + /* 0 */ "mmm.....mmm" + /* 1 */ "mmm.....mmm" + /* 2 */ "cKKKKcKKKKc" + /* 3 */ "KacccccccaK" + /* 4 */ "Kc.......cK" + /* 5 */ "cc.......cc" + /* 6 */ "Kc.......cK" + /* 7 */ "KaLccccccaK" + /* 8 */ "cK.KKcKKKKc" + /* 9 */ "mmmmmmmmmmm" // Level 9 /* z\x* 1 */ @@ -199,11 +201,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ ".pbbBBBbbp." - /* 4 */ ".b.......b." - /* 5 */ ".B.......B." - /* 6 */ ".b.......b." - /* 7 */ ".pCbBBBbbp." + /* 3 */ ".accDDDcca." + /* 4 */ ".c.......c." + /* 5 */ ".D.......D." + /* 6 */ ".c.......c." + /* 7 */ ".aEcDDDcca." /* 8 */ "..........." /* 9 */ "..........." @@ -213,11 +215,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ ".pbbKKKbbp." - /* 4 */ ".bGGGGGGGb." - /* 5 */ ".sGGGGGGGq." - /* 6 */ ".bGGGGGGGb." - /* 7 */ ".pbbHHHbbp." + /* 3 */ ".accMMMcca." + /* 4 */ ".cIIIIIIIc." + /* 5 */ ".uIIIIIIIs." + /* 6 */ ".cIIIIIIIc." + /* 7 */ ".accJJJcca." /* 8 */ "..........." /* 9 */ "..........." @@ -227,11 +229,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ ".bIIIbIIIb." - /* 4 */ ".I.......I." - /* 5 */ ".b.......b." - /* 6 */ ".I.......I." - /* 7 */ ".bIIIbIIIb." + /* 3 */ ".cKKKcKKKc." + /* 4 */ ".K.......K." + /* 5 */ ".c.......c." + /* 6 */ ".K.......K." + /* 7 */ ".cKKKcKKKc." /* 8 */ "..........." /* 9 */ "...........", @@ -267,161 +269,175 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 81, ID 597, created by STR_Warrior { // Size: - 11, 8, 10, // SizeX = 11, SizeY = 8, SizeZ = 10 + 11, 9, 10, // SizeX = 11, SizeY = 9, SizeZ = 10 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 11, 7, 10, // MaxX, MaxY, MaxZ + 11, 8, 10, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "A:128: 7\n" /* sandstonestairs */ - "B: 44: 1\n" /* step */ - "C: 64: 3\n" /* wooddoorblock */ - "D: 64: 8\n" /* wooddoorblock */ + "A:126: 8\n" /* woodenslab */ + "B:128: 7\n" /* sandstonestairs */ + "C: 44: 1\n" /* step */ + "D: 64: 3\n" /* wooddoorblock */ "E:128: 6\n" /* sandstonestairs */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e:128: 5\n" /* sandstonestairs */ - "f:107: 6\n" /* fencegate */ - "g:128: 4\n" /* sandstonestairs */ - "h:134: 1\n" /* 134 */ - "i:134: 3\n" /* 134 */ - "j: 85: 0\n" /* fence */ - "k:134: 0\n" /* 134 */ - "l:134: 5\n" /* 134 */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f:128: 5\n" /* sandstonestairs */ + "g:107: 0\n" /* fencegate */ + "h:128: 4\n" /* sandstonestairs */ + "i:134: 1\n" /* 134 */ + "j:134: 3\n" /* 134 */ + "k: 85: 0\n" /* fence */ + "l:134: 0\n" /* 134 */ "m: 19: 0\n" /* sponge */ - "n:134: 7\n" /* 134 */ - "o:134: 4\n" /* 134 */ - "p:107: 5\n" /* fencegate */ - "q: 64: 5\n" /* wooddoorblock */ - "r: 65: 3\n" /* ladder */ - "s: 50: 3\n" /* torch */ - "t:171: 8\n" /* carpet */ - "u:101: 0\n" /* ironbars */ - "v: 64:12\n" /* wooddoorblock */ - "w:128: 2\n" /* sandstonestairs */ - "x: 24: 1\n" /* sandstone */ - "y: 44: 9\n" /* step */ - "z:126: 8\n" /* woodenslab */, + "n:134: 5\n" /* 134 */ + "o:134: 7\n" /* 134 */ + "p:134: 4\n" /* 134 */ + "q:107: 5\n" /* fencegate */ + "r: 64: 1\n" /* wooddoorblock */ + "s: 65: 3\n" /* ladder */ + "t: 50: 3\n" /* torch */ + "u:171: 8\n" /* carpet */ + "v:101: 0\n" /* ironbars */ + "w: 64: 8\n" /* wooddoorblock */ + "x:128: 2\n" /* sandstonestairs */ + "y: 24: 1\n" /* sandstone */ + "z: 44: 9\n" /* step */, // Block data: // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "aaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaa" - /* 2 */ "aaaabbbaaaa" - /* 3 */ "abbbbbbbbba" - /* 4 */ "abbbbbbbbba" - /* 5 */ "abbbbbbbbba" - /* 6 */ "abbbbbbbbba" - /* 7 */ "abbbbbbbbba" - /* 8 */ "abaaaaaaaaa" - /* 9 */ "aaaaaaaaaaa" + /* 0 */ "mmmabbbammm" + /* 1 */ "mmmmbbbmmmm" + /* 2 */ "accccccccca" + /* 3 */ "ccccccccccc" + /* 4 */ "ccccccccccc" + /* 5 */ "ccccccccccc" + /* 6 */ "ccccccccccc" + /* 7 */ "ccccccccccc" + /* 8 */ "accccccccca" + /* 9 */ "mmmmmmmmmmm" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "...c...c..." - /* 1 */ "..........." - /* 2 */ "cdddefgdddc" - /* 3 */ "dhi.....iid" - /* 4 */ "dhj.....jkd" - /* 5 */ "d.........d" - /* 6 */ "dlnno.....d" - /* 7 */ "d...p..hjkd" - /* 8 */ "cqddddddddc" - /* 9 */ "..r........" + /* 0 */ "mmmadddammm" + /* 1 */ "mmmmdddmmmm" + /* 2 */ "accceeeccca" + /* 3 */ "ceeeeeeeeec" + /* 4 */ "ceeeeeeeeec" + /* 5 */ "ceeeeeeeeec" + /* 6 */ "ceeeeeeeeec" + /* 7 */ "ceeeeeeeeec" + /* 8 */ "aecccccccca" + /* 9 */ "mmmmmmmmmmm" // Level 2 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "...c...c..." - /* 1 */ "..........." - /* 2 */ "cddd...dddc" - /* 3 */ "d..s...s..d" - /* 4 */ "d.t.....t.d" - /* 5 */ "u.........u" - /* 6 */ "d.........d" - /* 7 */ "d.......t.d" - /* 8 */ "cvdduuudddc" - /* 9 */ "..r........" + /* 0 */ "mmma...ammm" + /* 1 */ "mmm.....mmm" + /* 2 */ "acccfghccca" + /* 3 */ "cij.....jjc" + /* 4 */ "cik.....klc" + /* 5 */ "c.........c" + /* 6 */ "cnoop.....c" + /* 7 */ "c...q..iklc" + /* 8 */ "arcccccccca" + /* 9 */ "mmsmmmmmmmm" // Level 3 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "...w...w..." - /* 1 */ "...x...d..." - /* 2 */ "cdddeygdddc" - /* 3 */ "dzzzzzzzzzd" - /* 4 */ "dzzzzzzzzzd" - /* 5 */ "gzzzzzzzzze" - /* 6 */ "dzzzzzzzzzd" - /* 7 */ "dzzzzzzzzzd" - /* 8 */ "cdddAAAdddc" - /* 9 */ "..r........" + /* 0 */ "mmma...ammm" + /* 1 */ "mmm.....mmm" + /* 2 */ "accc...ccca" + /* 3 */ "c..t...t..c" + /* 4 */ "c.u.....u.c" + /* 5 */ "v.........v" + /* 6 */ "c.........c" + /* 7 */ "c.......u.c" + /* 8 */ "awccvvvccca" + /* 9 */ "mmsmmmmmmmm" // Level 4 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..........." - /* 1 */ "..........." - /* 2 */ "dBBBBdBBBBd" - /* 3 */ "BcdddddddcB" - /* 4 */ "Bd.......dB" - /* 5 */ "dd.......dd" - /* 6 */ "Bd.......dB" - /* 7 */ "BcCddddddcB" - /* 8 */ "dB.BBdBBBBd" - /* 9 */ "..........." + /* 0 */ "mmmx...xmmm" + /* 1 */ "mmmy...cmmm" + /* 2 */ "acccfzhccca" + /* 3 */ "cAAAAAAAAAc" + /* 4 */ "cAAAAAAAAAc" + /* 5 */ "hAAAAAAAAAf" + /* 6 */ "cAAAAAAAAAc" + /* 7 */ "cAAAAAAAAAc" + /* 8 */ "acccBBBccca" + /* 9 */ "mmsmmmmmmmm" // Level 5 /* z\x* 1 */ /* * 01234567890 */ + /* 0 */ "mmm.....mmm" + /* 1 */ "mmm.....mmm" + /* 2 */ "cCCCCcCCCCc" + /* 3 */ "CacccccccaC" + /* 4 */ "Cc.......cC" + /* 5 */ "cc.......cc" + /* 6 */ "Cc.......cC" + /* 7 */ "CaDccccccaC" + /* 8 */ "cC.CCcCCCCc" + /* 9 */ "mmmmmmmmmmm" + + // Level 6 + /* z\x* 1 */ + /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ ".cdduuuddc." - /* 4 */ ".d.......d." - /* 5 */ ".u.......u." - /* 6 */ ".d.......d." - /* 7 */ ".cDduuuddc." + /* 3 */ ".accvvvcca." + /* 4 */ ".c.......c." + /* 5 */ ".v.......v." + /* 6 */ ".c.......c." + /* 7 */ ".awcvvvcca." /* 8 */ "..........." /* 9 */ "..........." - // Level 6 + // Level 7 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ ".cddEEEddc." - /* 4 */ ".dzzzzzzzd." - /* 5 */ ".gzzzzzzze." - /* 6 */ ".dzzzzzzzd." - /* 7 */ ".cddAAAddc." + /* 3 */ ".accEEEcca." + /* 4 */ ".cAAAAAAAc." + /* 5 */ ".hAAAAAAAf." + /* 6 */ ".cAAAAAAAc." + /* 7 */ ".accBBBcca." /* 8 */ "..........." /* 9 */ "..........." - // Level 7 + // Level 8 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ ".dBBBdBBBd." - /* 4 */ ".B.......B." - /* 5 */ ".d.......d." - /* 6 */ ".B.......B." - /* 7 */ ".dBBBdBBBd." + /* 3 */ ".cCCCcCCCc." + /* 4 */ ".C.......C." + /* 5 */ ".c.......c." + /* 6 */ ".C.......C." + /* 7 */ ".cCCCcCCCc." /* 8 */ "..........." /* 9 */ "...........", // Connectors: - "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -452,127 +468,146 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 97, ID 642, created by STR_Warrior { // Size: - 11, 5, 13, // SizeX = 11, SizeY = 5, SizeZ = 13 + 11, 6, 13, // SizeX = 11, SizeY = 6, SizeZ = 13 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 11, 4, 13, // MaxX, MaxY, MaxZ + 11, 5, 13, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ "c: 24: 0\n" /* sandstone */ - "d: 24: 2\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 43: 0\n" /* doubleslab */ - "g: 53: 5\n" /* woodstairs */ - "h: 53: 4\n" /* woodstairs */ - "i: 10: 0\n" /* lava */ - "j: 54: 5\n" /* chest */ - "k: 64:12\n" /* wooddoorblock */ - "l: 50: 3\n" /* torch */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 12: 0\n" /* sand */ + "g: 64: 3\n" /* wooddoorblock */ + "h: 43: 0\n" /* doubleslab */ + "i: 53: 5\n" /* woodstairs */ + "j: 53: 4\n" /* woodstairs */ + "k: 10: 0\n" /* lava */ + "l: 54: 5\n" /* chest */ "m: 19: 0\n" /* sponge */ - "n:101: 0\n" /* ironbars */ - "o: 50: 1\n" /* torch */ - "p: 50: 2\n" /* torch */ - "q:128: 2\n" /* sandstonestairs */ - "r: 44: 9\n" /* step */ - "s:126: 8\n" /* woodenslab */ - "t:128: 4\n" /* sandstonestairs */ - "u:128: 5\n" /* sandstonestairs */ - "v:128: 7\n" /* sandstonestairs */ - "w: 44: 1\n" /* step */ - "x: 43: 1\n" /* doubleslab */, + "n: 64: 8\n" /* wooddoorblock */ + "o: 50: 3\n" /* torch */ + "p:101: 0\n" /* ironbars */ + "q: 50: 1\n" /* torch */ + "r: 50: 2\n" /* torch */ + "s:128: 2\n" /* sandstonestairs */ + "t: 44: 9\n" /* step */ + "u:126: 8\n" /* woodenslab */ + "v:128: 4\n" /* sandstonestairs */ + "w:128: 5\n" /* sandstonestairs */ + "x:128: 7\n" /* sandstonestairs */ + "y: 44: 1\n" /* step */ + "z: 43: 1\n" /* doubleslab */, // Block data: // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "aaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaa" - /* 2 */ "aaaaaaaabaa" - /* 3 */ "acacacabbba" - /* 4 */ "acaccaabbba" - /* 5 */ "acccccabbba" - /* 6 */ "acaadddbbba" - /* 7 */ "aaacdddbbba" - /* 8 */ "aaaadddbbba" - /* 9 */ "abbbbbbbbba" - /* 10 */ "abbbbbbbbba" - /* 11 */ "abbbbbbbbba" - /* 12 */ "aaaaaaaaaaa" + /* 0 */ "mmmmmmabbba" + /* 1 */ "mmmmmmbbbbm" + /* 2 */ "mmmmmmaccca" + /* 3 */ "maccccccccc" + /* 4 */ "mcccccccccc" + /* 5 */ "mcccccccccc" + /* 6 */ "mcccccacccc" + /* 7 */ "mcccccacccc" + /* 8 */ "acccaaacccc" + /* 9 */ "ccccccccccc" + /* 10 */ "ccccccccccc" + /* 11 */ "ccccccccccc" + /* 12 */ "accccccccca" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "......d...d" - /* 1 */ "..........." - /* 2 */ "......dcecd" - /* 3 */ ".d....c...c" - /* 4 */ "..f...c...c" - /* 5 */ "......c...c" - /* 6 */ "....ddc...c" - /* 7 */ ".gh.dic...c" - /* 8 */ "dcccccd...c" - /* 9 */ "cj........c" - /* 10 */ "c.........c" - /* 11 */ "c.........c" - /* 12 */ "dcccccccccd" + /* 0 */ "mmmmmmaddda" + /* 1 */ "mmmmmmddddm" + /* 2 */ "mmmmmmaceca" + /* 3 */ "mafcfcceeec" + /* 4 */ "mcfccfceeec" + /* 5 */ "mcccccceeec" + /* 6 */ "mcffaaaeeec" + /* 7 */ "mffcaaaeeec" + /* 8 */ "acccaaaeeec" + /* 9 */ "ceeeeeeeeec" + /* 10 */ "ceeeeeeeeec" + /* 11 */ "ceeeeeeeeec" + /* 12 */ "accccccccca" // Level 2 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "......d...d" - /* 1 */ "..........." - /* 2 */ "......dckcd" - /* 3 */ ".d....c..lc" - /* 4 */ "......n...c" - /* 5 */ "......c...c" - /* 6 */ "....nnc...n" - /* 7 */ "....n.c...n" - /* 8 */ "dcccccd...n" - /* 9 */ "co........c" - /* 10 */ "n.........c" - /* 11 */ "c........pc" - /* 12 */ "dcccnnncccd" + /* 0 */ "mmmmmma...a" + /* 1 */ "mmmmmm....." + /* 2 */ "mmmmmmacgca" + /* 3 */ "ma....c...c" + /* 4 */ "m.h...c...c" + /* 5 */ "m.....c...c" + /* 6 */ "m...aac...c" + /* 7 */ "mij.akc...c" + /* 8 */ "accccca...c" + /* 9 */ "cl........c" + /* 10 */ "c.........c" + /* 11 */ "c.........c" + /* 12 */ "accccccccca" // Level 3 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "......q...q" - /* 1 */ "......c...c" - /* 2 */ "......dcccd" - /* 3 */ ".drrrrcsssc" - /* 4 */ ".rsssstsssc" - /* 5 */ ".rsssscsssc" - /* 6 */ ".rssddcsssu" - /* 7 */ ".rssd.csssu" - /* 8 */ "dcccccdsssu" - /* 9 */ "csssssssssc" - /* 10 */ "tsssssssssc" - /* 11 */ "csssssssssc" - /* 12 */ "dcccvvvcccd" + /* 0 */ "mmmmmma...a" + /* 1 */ "mmmmmm....." + /* 2 */ "mmmmmmacnca" + /* 3 */ "ma....c..oc" + /* 4 */ "m.....p...c" + /* 5 */ "m.....c...c" + /* 6 */ "m...ppc...p" + /* 7 */ "m...p.c...p" + /* 8 */ "accccca...p" + /* 9 */ "cq........c" + /* 10 */ "p.........c" + /* 11 */ "c........rc" + /* 12 */ "acccpppccca" // Level 4 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..........." - /* 1 */ "..........." - /* 2 */ "......cwwwc" - /* 3 */ ".w.w.ww...w" - /* 4 */ "......w...w" - /* 5 */ ".w....w...w" - /* 6 */ "....xwx...w" - /* 7 */ ".w..w.w...c" - /* 8 */ "cwwwxwc...w" - /* 9 */ "w.........w" - /* 10 */ "w.........w" - /* 11 */ "w.........w" - /* 12 */ "cwwwwcwwwwc", + /* 0 */ "mmmmmms...s" + /* 1 */ "mmmmmmc...c" + /* 2 */ "mmmmmmaccca" + /* 3 */ "mattttcuuuc" + /* 4 */ "mtuuuuvuuuc" + /* 5 */ "mtuuuucuuuc" + /* 6 */ "mtuuaacuuuw" + /* 7 */ "mtuua.cuuuw" + /* 8 */ "acccccauuuw" + /* 9 */ "cuuuuuuuuuc" + /* 10 */ "vuuuuuuuuuc" + /* 11 */ "cuuuuuuuuuc" + /* 12 */ "acccxxxccca" + + // Level 5 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "mmmmmm....." + /* 1 */ "mmmmmm....." + /* 2 */ "mmmmmmcyyyc" + /* 3 */ "my.y.yy...y" + /* 4 */ "m.....y...y" + /* 5 */ "my....y...y" + /* 6 */ "m...zyz...y" + /* 7 */ "my..y.y...c" + /* 8 */ "cyyyzyc...y" + /* 9 */ "y.........y" + /* 10 */ "y.........y" + /* 11 */ "y.........y" + /* 12 */ "cyyyycyyyyc", // Connectors: - "-1: 8, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 8, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -603,180 +638,196 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 77, ID 577, created by STR_Warrior { // Size: - 15, 13, 11, // SizeX = 15, SizeY = 13, SizeZ = 11 + 15, 14, 11, // SizeX = 15, SizeY = 14, SizeZ = 11 // Hitbox (relative to bounding box): -1, 0, -1, // MinX, MinY, MinZ - 14, 12, 11, // MaxX, MaxY, MaxZ + 14, 13, 11, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "A:128: 4\n" /* sandstonestairs */ - "B:128: 5\n" /* sandstonestairs */ - "C:128: 7\n" /* sandstonestairs */ - "D: 44: 1\n" /* step */ - "E:128: 2\n" /* sandstonestairs */ - "F:128: 0\n" /* sandstonestairs */ - "G: 87: 0\n" /* netherstone */ - "H:128: 3\n" /* sandstonestairs */ - "I: 51: 0\n" /* fire */ - "J: 44: 9\n" /* step */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 85: 0\n" /* fence */ - "f: 5: 1\n" /* wood */ - "g: 64: 6\n" /* wooddoorblock */ - "h: 64: 0\n" /* wooddoorblock */ - "i: 61: 2\n" /* furnace */ - "j:118: 0\n" /* cauldronblock */ - "k:134: 4\n" /* 134 */ - "l: 65: 2\n" /* ladder */ + "A: 96:10\n" /* trapdoor */ + "B:128: 4\n" /* sandstonestairs */ + "C:128: 5\n" /* sandstonestairs */ + "D:128: 7\n" /* sandstonestairs */ + "E: 44: 1\n" /* step */ + "F:128: 2\n" /* sandstonestairs */ + "G:128: 0\n" /* sandstonestairs */ + "H: 87: 0\n" /* netherstone */ + "I:128: 3\n" /* sandstonestairs */ + "J: 51: 0\n" /* fire */ + "K: 44: 9\n" /* step */ + "a: 24: 2\n" /* sandstone */ + "b: 24: 0\n" /* sandstone */ + "c: 12: 0\n" /* sand */ + "d: 4: 0\n" /* cobblestone */ + "e: 5: 0\n" /* wood */ + "f: 13: 0\n" /* gravel */ + "g: 85: 0\n" /* fence */ + "h: 5: 1\n" /* wood */ + "i: 64: 2\n" /* wooddoorblock */ + "j: 64: 0\n" /* wooddoorblock */ + "k: 61: 2\n" /* furnace */ + "l:118: 0\n" /* cauldronblock */ "m: 19: 0\n" /* sponge */ - "n:101: 0\n" /* ironbars */ - "o: 50: 1\n" /* torch */ - "p:140: 0\n" /* flowerpotblock */ - "q: 64:12\n" /* wooddoorblock */ - "r: 50: 3\n" /* torch */ + "n:134: 4\n" /* 134 */ + "o: 65: 2\n" /* ladder */ + "p:101: 0\n" /* ironbars */ + "q: 50: 1\n" /* torch */ + "r:140: 0\n" /* flowerpotblock */ "s: 64: 8\n" /* wooddoorblock */ - "t: 69:12\n" /* lever */ - "u: 50: 4\n" /* torch */ - "v:128: 6\n" /* sandstonestairs */ - "w: 44:10\n" /* step */ - "x:128: 1\n" /* sandstonestairs */ - "y: 47: 0\n" /* bookshelf */ - "z: 96:10\n" /* trapdoor */, + "t: 50: 3\n" /* torch */ + "u: 69:12\n" /* lever */ + "v: 50: 4\n" /* torch */ + "w:128: 6\n" /* sandstonestairs */ + "x: 44:10\n" /* step */ + "y:128: 1\n" /* sandstonestairs */ + "z: 47: 0\n" /* bookshelf */, // Block data: // Level 0 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "aaaaaaaaaaaaaaa" - /* 1 */ "aaaaabbbbbbbaaa" - /* 2 */ "aaaabbbbbbbbaaa" - /* 3 */ "aaaaabbbbbbbbaa" - /* 4 */ "aaaaabbbbbbbaaa" - /* 5 */ "aaaaabbbbbbbaaa" - /* 6 */ "aaaaabbbbbbbaaa" - /* 7 */ "aaaaabbbbbbbaaa" - /* 8 */ "aaaaabbbbbbbaaa" - /* 9 */ "aaaaabbbbbbbaaa" - /* 10 */ "aaaaaaaaaaaaaaa" + /* 0 */ "mmmmabbbbbbbamm" + /* 1 */ "ccccbbbbbbbbbma" + /* 2 */ "ccccbbbbbbbbbdd" + /* 3 */ "ccccbbbbbbbbbdd" + /* 4 */ "ccccbbbbbbbbbdd" + /* 5 */ "ccccbbbbbbbbbma" + /* 6 */ "ccccbbbbbbbbbmm" + /* 7 */ "mmmmbbbbbbbbbmm" + /* 8 */ "mmmmbbbbbbbbbmm" + /* 9 */ "mmmmbbbbbbbbbmm" + /* 10 */ "mmmmabbbbbbbamm" // Level 1 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "....cdddddddc.." - /* 1 */ "eeeed......fd.c" - /* 2 */ "e...g.......d.." - /* 3 */ "e...d.......h.." - /* 4 */ "e...dijk..l.d.." - /* 5 */ "e...dddd.dddd.c" - /* 6 */ "eeeed.......d.." - /* 7 */ "mmmmd.......d.." - /* 8 */ "mmmmd.......d.." - /* 9 */ "mmmmd.......d.." - /* 10 */ "mmmmcdddddddc.." + /* 0 */ "mmmmabbbbbbbamm" + /* 1 */ "ccccbeeeeeeebma" + /* 2 */ "cccceeeeeeeebff" + /* 3 */ "ccccbeeeeeeeeff" + /* 4 */ "ccccbeeeeeeebff" + /* 5 */ "ccccbeeeeeeebma" + /* 6 */ "ccccbeeeeeeebmm" + /* 7 */ "mmmmbeeeeeeebmm" + /* 8 */ "mmmmbeeeeeeebmm" + /* 9 */ "mmmmbeeeeeeebmm" + /* 10 */ "mmmmabbbbbbbamm" // Level 2 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "....cddnnnddc.." - /* 1 */ "....do.....pd.c" - /* 2 */ "....q.......d.r" - /* 3 */ "....d.......s.." - /* 4 */ "....d.t...l.d.u" - /* 5 */ "....dddd.dddd.c" - /* 6 */ "....n..r.r..n.." - /* 7 */ "mmmmn.......n.." - /* 8 */ "mmmmn.......n.." - /* 9 */ "mmmmd.......d.." - /* 10 */ "mmmmcddnnnddc.." + /* 0 */ "mmmmabbbbbbbamm" + /* 1 */ "ggggb......hb.a" + /* 2 */ "g...i.......b.." + /* 3 */ "g...b.......j.." + /* 4 */ "g...bkln..o.b.." + /* 5 */ "g...bbbb.bbbb.a" + /* 6 */ "ggggb.......bmm" + /* 7 */ "mmmmb.......bmm" + /* 8 */ "mmmmb.......bmm" + /* 9 */ "mmmmb.......bmm" + /* 10 */ "mmmmabbbbbbbamm" // Level 3 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "....cddvvvddc.." - /* 1 */ "....dwwwwwwwddx" - /* 2 */ "....dwwwwwwwd.." - /* 3 */ "....dwwwwwwwd.." - /* 4 */ "....dyyywwzwd.." - /* 5 */ "....ddddddddddx" - /* 6 */ "....AwwwwwwwB.." - /* 7 */ "mmmmAwwwwwwwB.." - /* 8 */ "mmmmAwwwwwwwB.." - /* 9 */ "mmmmdwwwwwwwd.." - /* 10 */ "mmmmcddCCCddc.." + /* 0 */ "mmmmabbpppbbamm" + /* 1 */ "....bq.....rb.a" + /* 2 */ "....s.......b.t" + /* 3 */ "....b.......s.." + /* 4 */ "....b.u...o.b.v" + /* 5 */ "....bbbb.bbbb.a" + /* 6 */ "....p..t.t..pmm" + /* 7 */ "mmmmp.......pmm" + /* 8 */ "mmmmp.......pmm" + /* 9 */ "mmmmb.......bmm" + /* 10 */ "mmmmabbpppbbamm" // Level 4 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "....dDDDdDDDd.." - /* 1 */ "....DcdddddcD.." - /* 2 */ "....Dd.....dD.." - /* 3 */ "....Dd.....dD.." - /* 4 */ "....Dd.....dD.." - /* 5 */ "....dcdd.ddcd.." - /* 6 */ "....D.......D.." - /* 7 */ "mmmmD.......D.." - /* 8 */ "mmmmD.......D.." - /* 9 */ "mmmmD.......D.." - /* 10 */ "mmmmdDDDdDDDd.." + /* 0 */ "mmmmabbwwwbbamm" + /* 1 */ "....bxxxxxxxbby" + /* 2 */ "....bxxxxxxxb.." + /* 3 */ "....bxxxxxxxb.." + /* 4 */ "....bzzzxxAxb.." + /* 5 */ "....bbbbbbbbbby" + /* 6 */ "....BxxxxxxxCmm" + /* 7 */ "mmmmBxxxxxxxCmm" + /* 8 */ "mmmmBxxxxxxxCmm" + /* 9 */ "mmmmbxxxxxxxbmm" + /* 10 */ "mmmmabbDDDbbamm" // Level 5 /* z\x* 11111 */ /* * 012345678901234 */ + /* 0 */ "mmmmbEEEbEEEbmm" + /* 1 */ "....EabbbbbaE.." + /* 2 */ "....Eb.....bE.." + /* 3 */ "....Eb.....bE.." + /* 4 */ "....Eb.....bE.." + /* 5 */ "....babb.bbab.." + /* 6 */ "....E.......Emm" + /* 7 */ "mmmmE.......Emm" + /* 8 */ "mmmmE.......Emm" + /* 9 */ "mmmmE.......Emm" + /* 10 */ "mmmmbEEEbEEEbmm" + + // Level 6 + /* z\x* 11111 */ + /* * 012345678901234 */ /* 0 */ "..............." - /* 1 */ ".....cddnddc..." - /* 2 */ ".....n.....n..." - /* 3 */ ".....n.....n..." - /* 4 */ ".....n.....n..." - /* 5 */ ".....cdd.ddc..." + /* 1 */ ".....abbpbba..." + /* 2 */ ".....p.....p..." + /* 3 */ ".....p.....p..." + /* 4 */ ".....p.....p..." + /* 5 */ ".....abb.bba..." /* 6 */ "..............." /* 7 */ "..............." /* 8 */ "..............." /* 9 */ "..............." /* 10 */ "..............." - // Level 6 + // Level 7 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." - /* 1 */ ".....cddvddc..." - /* 2 */ ".....AwwwwwB..." - /* 3 */ ".....AwwwwwB..." - /* 4 */ ".....AwwwwwB..." - /* 5 */ ".....cdddddc..." + /* 1 */ ".....abbwbba..." + /* 2 */ ".....BxxxxxC..." + /* 3 */ ".....BxxxxxC..." + /* 4 */ ".....BxxxxxC..." + /* 5 */ ".....abbbbba..." /* 6 */ "..............." /* 7 */ "..............." /* 8 */ "..............." /* 9 */ "..............." /* 10 */ "..............." - // Level 7 + // Level 8 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." - /* 1 */ ".....dDDdDDd..." - /* 2 */ ".....D.ddd.D..." - /* 3 */ ".....d.ddd.d..." - /* 4 */ ".....D.ddd.D..." - /* 5 */ ".....dDDdDDd..." + /* 1 */ ".....bEEbEEb..." + /* 2 */ ".....E.bbb.E..." + /* 3 */ ".....b.bbb.b..." + /* 4 */ ".....E.bbb.E..." + /* 5 */ ".....bEEbEEb..." /* 6 */ "..............." /* 7 */ "..............." /* 8 */ "..............." /* 9 */ "..............." /* 10 */ "..............." - // Level 8 + // Level 9 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." - /* 2 */ ".......cEc....." - /* 3 */ ".......FGx....." - /* 4 */ ".......cHc....." + /* 2 */ ".......aFa....." + /* 3 */ ".......GHy....." + /* 4 */ ".......aIa....." /* 5 */ "..............." /* 6 */ "..............." /* 7 */ "..............." @@ -784,14 +835,14 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 9 */ "..............." /* 10 */ "..............." - // Level 9 + // Level 10 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." - /* 2 */ ".......c.c....." - /* 3 */ "........I......" - /* 4 */ ".......c.c....." + /* 2 */ ".......a.a....." + /* 3 */ "........J......" + /* 4 */ ".......a.a....." /* 5 */ "..............." /* 6 */ "..............." /* 7 */ "..............." @@ -799,14 +850,14 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 9 */ "..............." /* 10 */ "..............." - // Level 10 + // Level 11 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." - /* 2 */ ".......cvc....." - /* 3 */ ".......A.B....." - /* 4 */ ".......cCc....." + /* 2 */ ".......awa....." + /* 3 */ ".......B.C....." + /* 4 */ ".......aDa....." /* 5 */ "..............." /* 6 */ "..............." /* 7 */ "..............." @@ -814,14 +865,14 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 9 */ "..............." /* 10 */ "..............." - // Level 11 + // Level 12 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." - /* 2 */ ".......ddd....." - /* 3 */ ".......dJd....." - /* 4 */ ".......ddd....." + /* 2 */ ".......bbb....." + /* 3 */ ".......bKb....." + /* 4 */ ".......bbb....." /* 5 */ "..............." /* 6 */ "..............." /* 7 */ "..............." @@ -829,14 +880,14 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 9 */ "..............." /* 10 */ "..............." - // Level 12 + // Level 13 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." - /* 2 */ ".......D.D....." + /* 2 */ ".......E.E....." /* 3 */ "..............." - /* 4 */ ".......D.D....." + /* 4 */ ".......E.E....." /* 5 */ "..............." /* 6 */ "..............." /* 7 */ "..............." @@ -845,7 +896,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 10 */ "...............", // Connectors: - "-1: 14, 1, 3: 5\n" /* Type -1, direction X+ */, + "-1: 14, 2, 3: 5\n" /* Type -1, direction X+ */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -876,149 +927,162 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 80, ID 596, created by STR_Warrior { // Size: - 7, 11, 7, // SizeX = 7, SizeY = 11, SizeZ = 7 + 7, 12, 7, // SizeX = 7, SizeY = 12, SizeZ = 7 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 7, 10, 7, // MaxX, MaxY, MaxZ + 7, 11, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c:128: 2\n" /* sandstonestairs */ - "d:128: 0\n" /* sandstonestairs */ - "e: 24: 2\n" /* sandstone */ - "f: 24: 0\n" /* sandstone */ - "g: 71: 3\n" /* irondoorblock */ - "h:128: 1\n" /* sandstonestairs */ - "i:128: 3\n" /* sandstonestairs */ - "j: 77: 4\n" /* stonebutton */ - "k: 71: 8\n" /* irondoorblock */ - "l:128: 6\n" /* sandstonestairs */ + "a: 24: 0\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 12: 0\n" /* sand */ + "d: 5: 0\n" /* wood */ + "e: 13: 0\n" /* gravel */ + "f:128: 2\n" /* sandstonestairs */ + "g:128: 0\n" /* sandstonestairs */ + "h: 24: 2\n" /* sandstone */ + "i: 71: 3\n" /* irondoorblock */ + "j:128: 1\n" /* sandstonestairs */ + "k:128: 3\n" /* sandstonestairs */ + "l: 77: 4\n" /* stonebutton */ "m: 19: 0\n" /* sponge */ - "n:128: 4\n" /* sandstonestairs */ - "o:128: 5\n" /* sandstonestairs */ - "p: 50: 4\n" /* torch */ - "q:128: 7\n" /* sandstonestairs */ - "r: 85: 0\n" /* fence */ - "s: 24: 1\n" /* sandstone */ - "t: 44: 1\n" /* step */ - "u: 89: 0\n" /* lightstone */, + "n: 71: 8\n" /* irondoorblock */ + "o: 77: 3\n" /* stonebutton */ + "p:128: 6\n" /* sandstonestairs */ + "q:128: 4\n" /* sandstonestairs */ + "r:128: 5\n" /* sandstonestairs */ + "s: 50: 4\n" /* torch */ + "t:128: 7\n" /* sandstonestairs */ + "u: 85: 0\n" /* fence */ + "v: 24: 1\n" /* sandstone */ + "w: 44: 1\n" /* step */ + "x: 89: 0\n" /* lightstone */, // Block data: // Level 0 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "aaabaaa" - /* 2 */ "aabbbaa" - /* 3 */ "aabbbaa" - /* 4 */ "aabbbaa" + /* 0 */ "mabbbam" + /* 1 */ "aacdcaa" + /* 2 */ "madddam" + /* 3 */ "madddam" + /* 4 */ "madddam" /* 5 */ "aaaaaaa" - /* 6 */ "aaaaaaa" + /* 6 */ "mammmam" // Level 1 /* z\x* 0123456 */ - /* 0 */ "mc...cm" - /* 1 */ "defgfeh" - /* 2 */ ".f...f." - /* 3 */ ".f...f." - /* 4 */ ".f...f." - /* 5 */ "defffeh" - /* 6 */ "mi...im" + /* 0 */ "maeeeam" + /* 1 */ "aacdcaa" + /* 2 */ "madddam" + /* 3 */ "madddam" + /* 4 */ "madddam" + /* 5 */ "aaaaaaa" + /* 6 */ "mammmam" // Level 2 /* z\x* 0123456 */ - /* 0 */ "m.j...m" - /* 1 */ ".efkfe." - /* 2 */ ".f...f." - /* 3 */ ".f...f." - /* 4 */ ".f...f." - /* 5 */ ".efffe." - /* 6 */ "m.....m" + /* 0 */ "mf...fm" + /* 1 */ "ghaiahj" + /* 2 */ "ma...am" + /* 3 */ "ma...am" + /* 4 */ "ma...am" + /* 5 */ "ghaaahj" + /* 6 */ "mkmmmkm" // Level 3 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ "..lfl.." - /* 2 */ ".n...o." - /* 3 */ ".f...f." - /* 4 */ ".n.p.o." - /* 5 */ "..qfq.." - /* 6 */ "......." + /* 0 */ "m.l...m" + /* 1 */ ".hanah." + /* 2 */ ".ao..a." + /* 3 */ ".a...a." + /* 4 */ ".a...a." + /* 5 */ ".haaah." + /* 6 */ "m.....m" // Level 4 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "..frf.." - /* 2 */ ".f...f." - /* 3 */ ".r...r." - /* 4 */ ".f...f." - /* 5 */ "..frf.." + /* 1 */ "..pap.." + /* 2 */ ".q...r." + /* 3 */ ".a...a." + /* 4 */ ".q.s.r." + /* 5 */ "..tat.." /* 6 */ "......." // Level 5 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "..frf.." - /* 2 */ ".f...f." - /* 3 */ ".r...r." - /* 4 */ ".f...f." - /* 5 */ "..frf.." + /* 1 */ "..aua.." + /* 2 */ ".a...a." + /* 3 */ ".u...u." + /* 4 */ ".a...a." + /* 5 */ "..aua.." /* 6 */ "......." // Level 6 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "..frf.." - /* 2 */ ".f...f." - /* 3 */ ".r...r." - /* 4 */ ".f...f." - /* 5 */ "..frf.." + /* 1 */ "..aua.." + /* 2 */ ".a...a." + /* 3 */ ".u...u." + /* 4 */ ".a...a." + /* 5 */ "..aua.." /* 6 */ "......." // Level 7 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "..cfc.." - /* 2 */ ".d...h." - /* 3 */ ".f...f." - /* 4 */ ".d...h." - /* 5 */ "..ifi.." + /* 1 */ "..aua.." + /* 2 */ ".a...a." + /* 3 */ ".u...u." + /* 4 */ ".a...a." + /* 5 */ "..aua.." /* 6 */ "......." // Level 8 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ ".ffsff." - /* 2 */ ".f...f." - /* 3 */ ".s...s." - /* 4 */ ".f...f." - /* 5 */ ".ffsff." + /* 1 */ "..faf.." + /* 2 */ ".g...j." + /* 3 */ ".a...a." + /* 4 */ ".g...j." + /* 5 */ "..kak.." /* 6 */ "......." // Level 9 /* z\x* 0123456 */ - /* 0 */ "...l..." - /* 1 */ ".efffe." - /* 2 */ ".ftttf." - /* 3 */ "nftftfo" - /* 4 */ ".ftttf." - /* 5 */ ".efffe." - /* 6 */ "...q..." + /* 0 */ "......." + /* 1 */ ".aavaa." + /* 2 */ ".a...a." + /* 3 */ ".v...v." + /* 4 */ ".a...a." + /* 5 */ ".aavaa." + /* 6 */ "......." // Level 10 /* z\x* 0123456 */ - /* 0 */ "...t..." - /* 1 */ ".t...t." + /* 0 */ "...p..." + /* 1 */ ".haaah." + /* 2 */ ".awwwa." + /* 3 */ "qawawar" + /* 4 */ ".awwwa." + /* 5 */ ".haaah." + /* 6 */ "...t..." + + // Level 11 + /* z\x* 0123456 */ + /* 0 */ "...w..." + /* 1 */ ".w...w." /* 2 */ "......." - /* 3 */ "t..u..t" + /* 3 */ "w..x..w" /* 4 */ "......." - /* 5 */ ".t...t." - /* 6 */ "...t...", + /* 5 */ ".w...w." + /* 6 */ "...w...", // Connectors: - "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1049,86 +1113,97 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 65, ID 551, created by STR_Warrior { // Size: - 5, 5, 7, // SizeX = 5, SizeY = 5, SizeZ = 7 + 5, 6, 7, // SizeX = 5, SizeY = 6, SizeZ = 7 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 5, 4, 7, // MaxX, MaxY, MaxZ + 5, 5, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 3\n" /* wooddoorblock */ - "f: 61: 2\n" /* furnace */ - "g: 65: 2\n" /* ladder */ - "h: 64: 8\n" /* wooddoorblock */ - "i:101: 0\n" /* ironbars */ - "j: 50: 4\n" /* torch */ - "k:128: 2\n" /* sandstonestairs */ - "l:126: 8\n" /* woodenslab */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 61: 2\n" /* furnace */ + "h: 65: 2\n" /* ladder */ + "i: 64: 8\n" /* wooddoorblock */ + "j:101: 0\n" /* ironbars */ + "k: 50: 4\n" /* torch */ + "l:128: 2\n" /* sandstonestairs */ "m: 19: 0\n" /* sponge */ - "n:128: 4\n" /* sandstonestairs */ - "o:128: 5\n" /* sandstonestairs */ - "p:128: 7\n" /* sandstonestairs */ - "q: 44: 1\n" /* step */ - "r: 96: 6\n" /* trapdoor */, + "n:126: 8\n" /* woodenslab */ + "o:128: 4\n" /* sandstonestairs */ + "p:128: 5\n" /* sandstonestairs */ + "q:128: 7\n" /* sandstonestairs */ + "r: 44: 1\n" /* step */ + "s: 96: 2\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 01234 */ - /* 0 */ "aaaaa" - /* 1 */ "aaaaa" - /* 2 */ "aabaa" - /* 3 */ "abbba" - /* 4 */ "abbba" - /* 5 */ "abbba" - /* 6 */ "aaaaa" + /* 0 */ "abbba" + /* 1 */ "mbbbm" + /* 2 */ "accca" + /* 3 */ "ccccc" + /* 4 */ "ccccc" + /* 5 */ "ccccc" + /* 6 */ "accca" // Level 1 /* z\x* 01234 */ - /* 0 */ "c...c" - /* 1 */ "....." - /* 2 */ "cdedc" - /* 3 */ "d...d" - /* 4 */ "d...d" - /* 5 */ "df.gd" - /* 6 */ "cdddc" + /* 0 */ "addda" + /* 1 */ "mdddm" + /* 2 */ "aceca" + /* 3 */ "ceeec" + /* 4 */ "ceeec" + /* 5 */ "ceeec" + /* 6 */ "accca" // Level 2 /* z\x* 01234 */ - /* 0 */ "c...c" + /* 0 */ "a...a" /* 1 */ "....." - /* 2 */ "cdhdc" - /* 3 */ "d...d" - /* 4 */ "i...i" - /* 5 */ "dj.gd" - /* 6 */ "cdidc" + /* 2 */ "acfca" + /* 3 */ "c...c" + /* 4 */ "c...c" + /* 5 */ "cg.hc" + /* 6 */ "accca" // Level 3 /* z\x* 01234 */ - /* 0 */ "k...k" - /* 1 */ "d...d" - /* 2 */ "cdddc" - /* 3 */ "dllld" - /* 4 */ "nlllo" - /* 5 */ "dllgd" - /* 6 */ "cdpdc" + /* 0 */ "a...a" + /* 1 */ "....." + /* 2 */ "acica" + /* 3 */ "c...c" + /* 4 */ "j...j" + /* 5 */ "ck.hc" + /* 6 */ "acjca" // Level 4 /* z\x* 01234 */ + /* 0 */ "l...l" + /* 1 */ "c...c" + /* 2 */ "accca" + /* 3 */ "cnnnc" + /* 4 */ "onnnp" + /* 5 */ "cnnhc" + /* 6 */ "acqca" + + // Level 5 + /* z\x* 01234 */ /* 0 */ "....." /* 1 */ "....." - /* 2 */ "dqdqd" - /* 3 */ "q...q" - /* 4 */ "d...d" - /* 5 */ "q..rq" - /* 6 */ "dqdqd", + /* 2 */ "crcrc" + /* 3 */ "r...r" + /* 4 */ "c...c" + /* 5 */ "r..sr" + /* 6 */ "crcrc", // Connectors: - "-1: 2, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 2, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1159,107 +1234,123 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 72, ID 562, created by STR_Warrior { // Size: - 7, 5, 11, // SizeX = 7, SizeY = 5, SizeZ = 11 + 7, 6, 11, // SizeX = 7, SizeY = 6, SizeZ = 11 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 7, 4, 11, // MaxX, MaxY, MaxZ + 7, 5, 11, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 3\n" /* wooddoorblock */ - "f: 65: 5\n" /* ladder */ - "g: 85: 0\n" /* fence */ - "h:101: 0\n" /* ironbars */ - "i: 64: 8\n" /* wooddoorblock */ - "j: 50: 3\n" /* torch */ - "k:128: 2\n" /* sandstonestairs */ - "l:128: 6\n" /* sandstonestairs */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 12: 0\n" /* sand */ + "e: 13: 0\n" /* gravel */ + "f: 5: 0\n" /* wood */ + "g: 64: 3\n" /* wooddoorblock */ + "h: 65: 5\n" /* ladder */ + "i: 85: 0\n" /* fence */ + "j:101: 0\n" /* ironbars */ + "k: 64: 8\n" /* wooddoorblock */ + "l: 50: 3\n" /* torch */ "m: 19: 0\n" /* sponge */ - "n:126: 8\n" /* woodenslab */ - "o:128: 4\n" /* sandstonestairs */ - "p:128: 5\n" /* sandstonestairs */ - "q:128: 7\n" /* sandstonestairs */ - "r: 44: 1\n" /* step */ - "s: 96: 0\n" /* trapdoor */, + "n:128: 2\n" /* sandstonestairs */ + "o:128: 6\n" /* sandstonestairs */ + "p:126: 8\n" /* woodenslab */ + "q:128: 4\n" /* sandstonestairs */ + "r:128: 5\n" /* sandstonestairs */ + "s:128: 7\n" /* sandstonestairs */ + "t: 44: 1\n" /* step */ + "u: 96: 0\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "aaaaaaa" - /* 2 */ "aaaabaa" - /* 3 */ "abbbbba" - /* 4 */ "abbbbba" - /* 5 */ "abbbbba" - /* 6 */ "aabaaaa" - /* 7 */ "aaaaaaa" - /* 8 */ "aaaaaaa" - /* 9 */ "aaaaaaa" - /* 10 */ "aaaaaaa" + /* 0 */ "mabbbam" + /* 1 */ "mmbbbmm" + /* 2 */ "accccca" + /* 3 */ "ccccccc" + /* 4 */ "ccccccc" + /* 5 */ "ccccccc" + /* 6 */ "accccca" + /* 7 */ "ddddddd" + /* 8 */ "ddddddd" + /* 9 */ "ddddddd" + /* 10 */ "ddddddd" // Level 1 /* z\x* 0123456 */ - /* 0 */ ".c...c." - /* 1 */ "......." - /* 2 */ "cdddedc" - /* 3 */ "d.....d" - /* 4 */ "d.....d" - /* 5 */ "df....d" - /* 6 */ "cd.dddc" - /* 7 */ "g.....g" - /* 8 */ "g.....g" - /* 9 */ "g.....g" - /* 10 */ "ggggggg" + /* 0 */ "maeeeam" + /* 1 */ "mmeeemm" + /* 2 */ "acccfca" + /* 3 */ "cfffffc" + /* 4 */ "cfffffc" + /* 5 */ "cfffffc" + /* 6 */ "acfccca" + /* 7 */ "ddddddd" + /* 8 */ "ddddddd" + /* 9 */ "ddddddd" + /* 10 */ "ddddddd" // Level 2 /* z\x* 0123456 */ - /* 0 */ ".c...c." - /* 1 */ "......." - /* 2 */ "cdhdidc" - /* 3 */ "d..j..d" - /* 4 */ "h.....h" - /* 5 */ "df....d" - /* 6 */ "cd.dhdc" + /* 0 */ "ma...am" + /* 1 */ "m.....m" + /* 2 */ "acccgca" + /* 3 */ "c.....c" + /* 4 */ "c.....c" + /* 5 */ "ch....c" + /* 6 */ "ac.ccca" + /* 7 */ "i.....i" + /* 8 */ "i.....i" + /* 9 */ "i.....i" + /* 10 */ "iiiiiii" + + // Level 3 + /* z\x* 0123456 */ + /* 0 */ "ma...am" + /* 1 */ "m.....m" + /* 2 */ "acjckca" + /* 3 */ "c..l..c" + /* 4 */ "j.....j" + /* 5 */ "ch....c" + /* 6 */ "ac.cjca" /* 7 */ "......." /* 8 */ "......." /* 9 */ "......." /* 10 */ "......." - // Level 3 + // Level 4 /* z\x* 0123456 */ - /* 0 */ ".k...k." - /* 1 */ ".d...d." - /* 2 */ "cdldddc" - /* 3 */ "dnnnnnd" - /* 4 */ "onnnnnp" - /* 5 */ "dfnnnnd" - /* 6 */ "cdddqdc" + /* 0 */ "mn...nm" + /* 1 */ "mc...cm" + /* 2 */ "acoccca" + /* 3 */ "cpppppc" + /* 4 */ "qpppppr" + /* 5 */ "chppppc" + /* 6 */ "acccsca" /* 7 */ "......." /* 8 */ "......." /* 9 */ "......." /* 10 */ "......." - // Level 4 + // Level 5 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ "......." - /* 2 */ "drrdrrd" - /* 3 */ "r.....r" - /* 4 */ "d.....d" - /* 5 */ "rs....r" - /* 6 */ "drrdrrd" + /* 0 */ "m.....m" + /* 1 */ "m.....m" + /* 2 */ "cttcttc" + /* 3 */ "t.....t" + /* 4 */ "c.....c" + /* 5 */ "tu....t" + /* 6 */ "cttcttc" /* 7 */ "......." /* 8 */ "......." /* 9 */ "......." /* 10 */ ".......", // Connectors: - "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1290,85 +1381,96 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 66, ID 553, created by STR_Warrior { // Size: - 9, 5, 7, // SizeX = 9, SizeY = 5, SizeZ = 7 + 9, 6, 7, // SizeX = 9, SizeY = 6, SizeZ = 7 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 9, 4, 7, // MaxX, MaxY, MaxZ + 9, 5, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 65: 2\n" /* ladder */ - "g: 64:12\n" /* wooddoorblock */ - "h:101: 0\n" /* ironbars */ - "i: 50: 4\n" /* torch */ - "j:128: 2\n" /* sandstonestairs */ - "k:126: 8\n" /* woodenslab */ - "l:128: 4\n" /* sandstonestairs */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 65: 2\n" /* ladder */ + "h: 64: 8\n" /* wooddoorblock */ + "i:101: 0\n" /* ironbars */ + "j: 50: 4\n" /* torch */ + "k:128: 2\n" /* sandstonestairs */ + "l:126: 8\n" /* woodenslab */ "m: 19: 0\n" /* sponge */ - "n:128: 5\n" /* sandstonestairs */ - "o:128: 7\n" /* sandstonestairs */ - "p: 44: 1\n" /* step */ - "q: 96: 2\n" /* trapdoor */, + "n:128: 4\n" /* sandstonestairs */ + "o:128: 5\n" /* sandstonestairs */ + "p:128: 7\n" /* sandstonestairs */ + "q: 44: 1\n" /* step */ + "r: 96: 2\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "aaaaaaaaa" - /* 1 */ "aaaaaaaaa" - /* 2 */ "aaaabaaaa" - /* 3 */ "abbbbbbba" - /* 4 */ "abbbbbbba" - /* 5 */ "abbbbbbba" - /* 6 */ "aaaaaaaaa" + /* 0 */ "mmabbbamm" + /* 1 */ "mmmbbbmmm" + /* 2 */ "accccccca" + /* 3 */ "ccccccccc" + /* 4 */ "ccccccccc" + /* 5 */ "ccccccccc" + /* 6 */ "accccccca" // Level 1 /* z\x* 012345678 */ - /* 0 */ "..c...c.." - /* 1 */ "........." - /* 2 */ "cdddedddc" - /* 3 */ "d.......d" - /* 4 */ "d.......d" - /* 5 */ "d......fd" - /* 6 */ "cdddddddc" + /* 0 */ "mmadddamm" + /* 1 */ "mmmdddmmm" + /* 2 */ "accceccca" + /* 3 */ "ceeeeeeec" + /* 4 */ "ceeeeeeec" + /* 5 */ "ceeeeeeec" + /* 6 */ "accccccca" // Level 2 /* z\x* 012345678 */ - /* 0 */ "..c...c.." - /* 1 */ "........." - /* 2 */ "cdddgdddc" - /* 3 */ "d.......d" - /* 4 */ "h.......h" - /* 5 */ "d.i....fd" - /* 6 */ "cddhhhddc" + /* 0 */ "mma...amm" + /* 1 */ "mm.....mm" + /* 2 */ "acccfccca" + /* 3 */ "c.......c" + /* 4 */ "c.......c" + /* 5 */ "c......gc" + /* 6 */ "accccccca" // Level 3 /* z\x* 012345678 */ - /* 0 */ "..j...j.." - /* 1 */ "..d...d.." - /* 2 */ "cdddddddc" - /* 3 */ "dkkkkkkkd" - /* 4 */ "lkkkkkkkn" - /* 5 */ "dkkkkkkfd" - /* 6 */ "cddoooddc" + /* 0 */ "mma...amm" + /* 1 */ "mm.....mm" + /* 2 */ "accchccca" + /* 3 */ "c.......c" + /* 4 */ "i.......i" + /* 5 */ "c.j....gc" + /* 6 */ "acciiicca" // Level 4 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "dpppdpppd" - /* 3 */ "p.......p" - /* 4 */ "d.......d" - /* 5 */ "p......qp" - /* 6 */ "dpppdpppd", + /* 0 */ "mmk...kmm" + /* 1 */ "mmc...cmm" + /* 2 */ "accccccca" + /* 3 */ "clllllllc" + /* 4 */ "nlllllllo" + /* 5 */ "cllllllgc" + /* 6 */ "accpppcca" + + // Level 5 + /* z\x* 012345678 */ + /* 0 */ "mm.....mm" + /* 1 */ "mm.....mm" + /* 2 */ "cqqqcqqqc" + /* 3 */ "q.......q" + /* 4 */ "c.......c" + /* 5 */ "q......rq" + /* 6 */ "cqqqcqqqc", // Connectors: - "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 4, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1399,112 +1501,127 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 70, ID 560, created by STR_Warrior { // Size: - 5, 5, 11, // SizeX = 5, SizeY = 5, SizeZ = 11 + 5, 6, 11, // SizeX = 5, SizeY = 6, SizeZ = 11 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 5, 4, 11, // MaxX, MaxY, MaxZ + 5, 5, 11, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 65: 5\n" /* ladder */ - "g:134: 3\n" /* 134 */ - "h: 85: 0\n" /* fence */ - "i:134: 2\n" /* 134 */ - "j: 61: 2\n" /* furnace */ - "k:134: 6\n" /* 134 */ - "l:134: 4\n" /* 134 */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 65: 5\n" /* ladder */ + "h:134: 3\n" /* 134 */ + "i: 85: 0\n" /* fence */ + "j:134: 2\n" /* 134 */ + "k: 61: 2\n" /* furnace */ + "l:134: 6\n" /* 134 */ "m: 19: 0\n" /* sponge */ - "n: 64:12\n" /* wooddoorblock */ - "o: 50: 2\n" /* torch */ - "p:101: 0\n" /* ironbars */ - "q:171: 8\n" /* carpet */ - "r:128: 2\n" /* sandstonestairs */ - "s:126: 8\n" /* woodenslab */ - "t:128: 4\n" /* sandstonestairs */ - "u:128: 5\n" /* sandstonestairs */ - "v:128: 7\n" /* sandstonestairs */ - "w: 44: 1\n" /* step */ - "x: 96: 1\n" /* trapdoor */, + "n:134: 4\n" /* 134 */ + "o: 64: 8\n" /* wooddoorblock */ + "p: 50: 2\n" /* torch */ + "q:101: 0\n" /* ironbars */ + "r:171: 8\n" /* carpet */ + "s:128: 2\n" /* sandstonestairs */ + "t:126: 8\n" /* woodenslab */ + "u:128: 4\n" /* sandstonestairs */ + "v:128: 5\n" /* sandstonestairs */ + "w:128: 7\n" /* sandstonestairs */ + "x: 44: 1\n" /* step */ + "y: 96: 1\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 01234 */ - /* 0 */ "aaaaa" - /* 1 */ "aaaaa" - /* 2 */ "aabaa" - /* 3 */ "abbba" - /* 4 */ "abbba" - /* 5 */ "abbba" - /* 6 */ "abbba" - /* 7 */ "abbba" - /* 8 */ "abbba" - /* 9 */ "abbba" - /* 10 */ "aaaaa" + /* 0 */ "abbba" + /* 1 */ "mbbbm" + /* 2 */ "accca" + /* 3 */ "ccccc" + /* 4 */ "ccccc" + /* 5 */ "ccccc" + /* 6 */ "ccccc" + /* 7 */ "ccccc" + /* 8 */ "ccccc" + /* 9 */ "ccccc" + /* 10 */ "accca" // Level 1 /* z\x* 01234 */ - /* 0 */ "c...c" - /* 1 */ "....." - /* 2 */ "cdedc" - /* 3 */ "df..d" - /* 4 */ "d...d" - /* 5 */ "d..gd" - /* 6 */ "d..hd" - /* 7 */ "d..id" - /* 8 */ "d...d" - /* 9 */ "djkld" - /* 10 */ "cdddc" + /* 0 */ "addda" + /* 1 */ "mdddm" + /* 2 */ "aceca" + /* 3 */ "ceeec" + /* 4 */ "ceeec" + /* 5 */ "ceeec" + /* 6 */ "ceeec" + /* 7 */ "ceeec" + /* 8 */ "ceeec" + /* 9 */ "ceeec" + /* 10 */ "accca" // Level 2 /* z\x* 01234 */ - /* 0 */ "c...c" + /* 0 */ "a...a" /* 1 */ "....." - /* 2 */ "cdndc" - /* 3 */ "df..d" - /* 4 */ "d..od" - /* 5 */ "p...p" - /* 6 */ "p..qp" - /* 7 */ "p...p" - /* 8 */ "d...d" - /* 9 */ "d...d" - /* 10 */ "cdpdc" + /* 2 */ "acfca" + /* 3 */ "cg..c" + /* 4 */ "c...c" + /* 5 */ "c..hc" + /* 6 */ "c..ic" + /* 7 */ "c..jc" + /* 8 */ "c...c" + /* 9 */ "cklnc" + /* 10 */ "accca" // Level 3 /* z\x* 01234 */ - /* 0 */ "r...r" - /* 1 */ "d...d" - /* 2 */ "cdddc" - /* 3 */ "dfssd" - /* 4 */ "dsssd" - /* 5 */ "tsssu" - /* 6 */ "tsssu" - /* 7 */ "tsssu" - /* 8 */ "dsssd" - /* 9 */ "dsssd" - /* 10 */ "cdvdc" + /* 0 */ "a...a" + /* 1 */ "....." + /* 2 */ "acoca" + /* 3 */ "cg..c" + /* 4 */ "c..pc" + /* 5 */ "q...q" + /* 6 */ "q..rq" + /* 7 */ "q...q" + /* 8 */ "c...c" + /* 9 */ "c...c" + /* 10 */ "acqca" // Level 4 /* z\x* 01234 */ + /* 0 */ "s...s" + /* 1 */ "c...c" + /* 2 */ "accca" + /* 3 */ "cgttc" + /* 4 */ "ctttc" + /* 5 */ "utttv" + /* 6 */ "utttv" + /* 7 */ "utttv" + /* 8 */ "ctttc" + /* 9 */ "ctttc" + /* 10 */ "acwca" + + // Level 5 + /* z\x* 01234 */ /* 0 */ "....." /* 1 */ "....." - /* 2 */ "dwdwd" - /* 3 */ "wx..w" - /* 4 */ "w...w" - /* 5 */ "w...w" - /* 6 */ "d...d" - /* 7 */ "w...w" - /* 8 */ "w...w" - /* 9 */ "w...w" - /* 10 */ "dwdwd", + /* 2 */ "cxcxc" + /* 3 */ "xy..x" + /* 4 */ "x...x" + /* 5 */ "x...x" + /* 6 */ "c...c" + /* 7 */ "x...x" + /* 8 */ "x...x" + /* 9 */ "x...x" + /* 10 */ "cxcxc", // Connectors: - "-1: 2, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 2, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1535,97 +1652,110 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 68, ID 558, created by STR_Warrior { // Size: - 9, 5, 9, // SizeX = 9, SizeY = 5, SizeZ = 9 + 9, 6, 9, // SizeX = 9, SizeY = 6, SizeZ = 9 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 9, 4, 9, // MaxX, MaxY, MaxZ + 9, 5, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 65: 2\n" /* ladder */ - "g: 64:12\n" /* wooddoorblock */ - "h:101: 0\n" /* ironbars */ - "i: 50: 1\n" /* torch */ - "j: 50: 4\n" /* torch */ - "k:128: 2\n" /* sandstonestairs */ - "l:126: 8\n" /* woodenslab */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 65: 2\n" /* ladder */ + "h: 64: 8\n" /* wooddoorblock */ + "i:101: 0\n" /* ironbars */ + "j: 50: 1\n" /* torch */ + "k: 50: 4\n" /* torch */ + "l:128: 2\n" /* sandstonestairs */ "m: 19: 0\n" /* sponge */ - "n:128: 6\n" /* sandstonestairs */ - "o:128: 5\n" /* sandstonestairs */ - "p:128: 4\n" /* sandstonestairs */ - "q:128: 7\n" /* sandstonestairs */ - "r: 44: 1\n" /* step */ - "s: 96: 6\n" /* trapdoor */, + "n:126: 8\n" /* woodenslab */ + "o:128: 6\n" /* sandstonestairs */ + "p:128: 5\n" /* sandstonestairs */ + "q:128: 4\n" /* sandstonestairs */ + "r:128: 7\n" /* sandstonestairs */ + "s: 44: 1\n" /* step */ + "t: 96: 2\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "aaaaaaaaa" - /* 1 */ "aaaaaaaaa" - /* 2 */ "aaaaaabaa" - /* 3 */ "aaaaabbba" - /* 4 */ "aaaaabbba" - /* 5 */ "abbbbbbba" - /* 6 */ "abbbbbbba" - /* 7 */ "abbbbbbba" - /* 8 */ "aaaaaaaaa" + /* 0 */ "mmmmabbba" + /* 1 */ "mmmmmbbbm" + /* 2 */ "mmmmaccca" + /* 3 */ "mmmmccccc" + /* 4 */ "acccacccc" + /* 5 */ "ccccccccc" + /* 6 */ "ccccccccc" + /* 7 */ "ccccccccc" + /* 8 */ "accccccca" // Level 1 /* z\x* 012345678 */ - /* 0 */ "mmmmc...c" - /* 1 */ "mmmm....." - /* 2 */ "mmmmcdedc" - /* 3 */ "mmmmd...d" - /* 4 */ "cdddd...d" - /* 5 */ "d.......d" - /* 6 */ "d.......d" - /* 7 */ "d......fd" - /* 8 */ "cdddddddc" + /* 0 */ "mmmmaddda" + /* 1 */ "mmmmmdddm" + /* 2 */ "mmmmaceca" + /* 3 */ "mmmmceeec" + /* 4 */ "acccaeeec" + /* 5 */ "ceeeeeeec" + /* 6 */ "ceeeeeeec" + /* 7 */ "ceeeeeeec" + /* 8 */ "accccccca" // Level 2 /* z\x* 012345678 */ - /* 0 */ "mmmmc...c" + /* 0 */ "mmmma...a" /* 1 */ "mmmm....." - /* 2 */ "mmmmcdgdc" - /* 3 */ "mmmmd...d" - /* 4 */ "cdhdd...h" - /* 5 */ "d.......h" - /* 6 */ "h.......d" - /* 7 */ "di....jfd" - /* 8 */ "cddhhhddc" + /* 2 */ "mmmmacfca" + /* 3 */ "mmmmc...c" + /* 4 */ "accca...c" + /* 5 */ "c.......c" + /* 6 */ "c.......c" + /* 7 */ "c......gc" + /* 8 */ "accccccca" // Level 3 /* z\x* 012345678 */ - /* 0 */ "mmmmk...k" - /* 1 */ "mmmmd...d" - /* 2 */ "mmmmcdddc" - /* 3 */ "mmmmdllld" - /* 4 */ "cdnddlllo" - /* 5 */ "dlllllllo" - /* 6 */ "pllllllld" - /* 7 */ "dllllllfd" - /* 8 */ "cddqqqddc" + /* 0 */ "mmmma...a" + /* 1 */ "mmmm....." + /* 2 */ "mmmmachca" + /* 3 */ "mmmmc...c" + /* 4 */ "acica...i" + /* 5 */ "c.......i" + /* 6 */ "i.......i" + /* 7 */ "cj....kgc" + /* 8 */ "acciiicca" // Level 4 /* z\x* 012345678 */ + /* 0 */ "mmmml...l" + /* 1 */ "mmmmc...c" + /* 2 */ "mmmmaccca" + /* 3 */ "mmmmcnnnc" + /* 4 */ "acocannnp" + /* 5 */ "cnnnnnnnp" + /* 6 */ "qnnnnnnnp" + /* 7 */ "cnnnnnngc" + /* 8 */ "accrrrcca" + + // Level 5 + /* z\x* 012345678 */ /* 0 */ "mmmm....." /* 1 */ "mmmm....." - /* 2 */ "mmmmcrdrd" - /* 3 */ "mmmmr...r" - /* 4 */ "drrrd...d" - /* 5 */ "r.......r" - /* 6 */ "r.......r" - /* 7 */ "r......sr" - /* 8 */ "drrrdrrrd", + /* 2 */ "mmmmcscsc" + /* 3 */ "mmmms...s" + /* 4 */ "csssc...c" + /* 5 */ "s.......s" + /* 6 */ "s.......s" + /* 7 */ "s......ts" + /* 8 */ "cssscsssc", // Connectors: - "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1656,102 +1786,117 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 69, ID 559, created by STR_Warrior { // Size: - 9, 5, 9, // SizeX = 9, SizeY = 5, SizeZ = 9 + 9, 6, 9, // SizeX = 9, SizeY = 6, SizeZ = 9 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 9, 4, 9, // MaxX, MaxY, MaxZ + 9, 5, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ + "A: 96: 2\n" /* trapdoor */ "a: 12: 0\n" /* sand */ - "b: 2: 0\n" /* grass */ - "c: 5: 0\n" /* wood */ - "d: 85: 0\n" /* fence */ - "e: 24: 2\n" /* sandstone */ - "f: 24: 0\n" /* sandstone */ - "g: 64: 7\n" /* wooddoorblock */ - "h: 38: 1\n" /* rose */ - "i: 38: 2\n" /* rose */ - "j: 38: 5\n" /* rose */ - "k: 65: 2\n" /* ladder */ - "l: 64:12\n" /* wooddoorblock */ + "b: 24: 2\n" /* sandstone */ + "c: 4: 0\n" /* cobblestone */ + "d: 3: 0\n" /* dirt */ + "e: 24: 0\n" /* sandstone */ + "f: 13: 0\n" /* gravel */ + "g: 2: 0\n" /* grass */ + "h: 5: 0\n" /* wood */ + "i: 85: 0\n" /* fence */ + "j: 64: 3\n" /* wooddoorblock */ + "k: 38: 1\n" /* rose */ + "l: 38: 2\n" /* rose */ "m: 19: 0\n" /* sponge */ - "n:101: 0\n" /* ironbars */ - "o: 50: 1\n" /* torch */ - "p: 50: 4\n" /* torch */ - "q:128: 2\n" /* sandstonestairs */ - "r:126: 8\n" /* woodenslab */ - "s:128: 6\n" /* sandstonestairs */ - "t:128: 5\n" /* sandstonestairs */ - "u:128: 4\n" /* sandstonestairs */ - "v:128: 7\n" /* sandstonestairs */ - "w: 44: 1\n" /* step */ - "x: 96: 6\n" /* trapdoor */, + "n: 38: 5\n" /* rose */ + "o: 65: 2\n" /* ladder */ + "p: 64: 8\n" /* wooddoorblock */ + "q:101: 0\n" /* ironbars */ + "r: 50: 1\n" /* torch */ + "s: 50: 4\n" /* torch */ + "t:128: 2\n" /* sandstonestairs */ + "u:126: 8\n" /* woodenslab */ + "v:128: 6\n" /* sandstonestairs */ + "w:128: 5\n" /* sandstonestairs */ + "x:128: 4\n" /* sandstonestairs */ + "y:128: 7\n" /* sandstonestairs */ + "z: 44: 1\n" /* step */, // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "aaaaaaaaa" - /* 1 */ "abbbaaaaa" - /* 2 */ "abbbaacaa" - /* 3 */ "abbbaccca" - /* 4 */ "aaaaaccca" - /* 5 */ "accccccca" - /* 6 */ "accccccca" - /* 7 */ "accccccca" - /* 8 */ "aaaaaaaaa" + /* 0 */ "aaaabcccb" + /* 1 */ "adddccccm" + /* 2 */ "adddbeeeb" + /* 3 */ "adddeeeee" + /* 4 */ "beeebeeee" + /* 5 */ "eeeeeeeee" + /* 6 */ "eeeeeeeee" + /* 7 */ "eeeeeeeee" + /* 8 */ "beeeeeeeb" // Level 1 /* z\x* 012345678 */ - /* 0 */ "dddde...e" - /* 1 */ "d........" - /* 2 */ "d...efgfe" - /* 3 */ "dhijf...f" - /* 4 */ "effff...f" - /* 5 */ "f.......f" - /* 6 */ "f.......f" - /* 7 */ "f......kf" - /* 8 */ "efffffffe" + /* 0 */ "aaaabfffb" + /* 1 */ "agggffffm" + /* 2 */ "agggbeheb" + /* 3 */ "agggehhhe" + /* 4 */ "beeebhhhe" + /* 5 */ "ehhhhhhhe" + /* 6 */ "ehhhhhhhe" + /* 7 */ "ehhhhhhhe" + /* 8 */ "beeeeeeeb" // Level 2 /* z\x* 012345678 */ - /* 0 */ "....e...e" - /* 1 */ "........." - /* 2 */ "....eflfe" - /* 3 */ "....f...f" - /* 4 */ "efnff...n" - /* 5 */ "f.......n" - /* 6 */ "n.......f" - /* 7 */ "fo....pkf" - /* 8 */ "effnnnffe" + /* 0 */ "iiiib...b" + /* 1 */ "i........" + /* 2 */ "i...bejeb" + /* 3 */ "iklne...e" + /* 4 */ "beeeb...e" + /* 5 */ "e.......e" + /* 6 */ "e.......e" + /* 7 */ "e......oe" + /* 8 */ "beeeeeeeb" // Level 3 /* z\x* 012345678 */ - /* 0 */ "....q...q" - /* 1 */ "....f...f" - /* 2 */ "....efffe" - /* 3 */ "....frrrf" - /* 4 */ "efsffrrrt" - /* 5 */ "frrrrrrrt" - /* 6 */ "urrrrrrrf" - /* 7 */ "frrrrrrkf" - /* 8 */ "effvvvffe" + /* 0 */ "....b...b" + /* 1 */ "........." + /* 2 */ "....bepeb" + /* 3 */ "....e...e" + /* 4 */ "beqeb...q" + /* 5 */ "e.......q" + /* 6 */ "q.......q" + /* 7 */ "er....soe" + /* 8 */ "beeqqqeeb" // Level 4 /* z\x* 012345678 */ + /* 0 */ "....t...t" + /* 1 */ "....e...e" + /* 2 */ "....beeeb" + /* 3 */ "....euuue" + /* 4 */ "bevebuuuw" + /* 5 */ "euuuuuuuw" + /* 6 */ "xuuuuuuuw" + /* 7 */ "euuuuuuoe" + /* 8 */ "beeyyyeeb" + + // Level 5 + /* z\x* 012345678 */ /* 0 */ "........." /* 1 */ "........." - /* 2 */ "....ewfwf" - /* 3 */ "....w...w" - /* 4 */ "fwwwf...f" - /* 5 */ "w.......w" - /* 6 */ "w.......w" - /* 7 */ "w......xw" - /* 8 */ "fwwwfwwwf", + /* 2 */ "....ezeze" + /* 3 */ "....z...z" + /* 4 */ "ezzze...e" + /* 5 */ "z.......z" + /* 6 */ "z.......z" + /* 7 */ "z......Az" + /* 8 */ "ezzzezzze", // Connectors: - "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1782,107 +1927,122 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 73, ID 563, created by xoft { // Size: - 9, 5, 11, // SizeX = 9, SizeY = 5, SizeZ = 11 + 9, 6, 11, // SizeX = 9, SizeY = 6, SizeZ = 11 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 9, 4, 11, // MaxX, MaxY, MaxZ + 9, 5, 11, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 65: 2\n" /* ladder */ - "g:101: 0\n" /* ironbars */ - "h: 64:12\n" /* wooddoorblock */ - "i: 50: 1\n" /* torch */ - "j: 50: 2\n" /* torch */ - "k:128: 2\n" /* sandstonestairs */ - "l:128: 6\n" /* sandstonestairs */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 65: 2\n" /* ladder */ + "h:101: 0\n" /* ironbars */ + "i: 64: 8\n" /* wooddoorblock */ + "j: 50: 1\n" /* torch */ + "k: 50: 2\n" /* torch */ + "l:128: 2\n" /* sandstonestairs */ "m: 19: 0\n" /* sponge */ - "n:126: 8\n" /* woodenslab */ - "o:128: 4\n" /* sandstonestairs */ - "p:128: 5\n" /* sandstonestairs */ - "q:128: 7\n" /* sandstonestairs */ - "r: 44: 1\n" /* step */ - "s: 96: 6\n" /* trapdoor */, + "n:128: 6\n" /* sandstonestairs */ + "o:126: 8\n" /* woodenslab */ + "p:128: 4\n" /* sandstonestairs */ + "q:128: 5\n" /* sandstonestairs */ + "r:128: 7\n" /* sandstonestairs */ + "s: 44: 1\n" /* step */ + "t: 96: 2\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "aaaaaaaaa" - /* 1 */ "aaaaaaaaa" - /* 2 */ "aaaaaabaa" - /* 3 */ "abbbbbbba" - /* 4 */ "abbbbbbba" - /* 5 */ "abbbbbbba" - /* 6 */ "aaaaabbba" - /* 7 */ "aaaaabbba" - /* 8 */ "aaaaabbba" - /* 9 */ "aaaaabbba" - /* 10 */ "aaaaaaaaa" + /* 0 */ "mmmmabbba" + /* 1 */ "mmmmmbbbm" + /* 2 */ "accccccca" + /* 3 */ "ccccccccc" + /* 4 */ "ccccccccc" + /* 5 */ "ccccccccc" + /* 6 */ "acccacccc" + /* 7 */ "mmmmccccc" + /* 8 */ "mmmmccccc" + /* 9 */ "mmmmccccc" + /* 10 */ "mmmmaccca" // Level 1 /* z\x* 012345678 */ - /* 0 */ "....c...c" - /* 1 */ "........." - /* 2 */ "cdddddedc" - /* 3 */ "d.......d" - /* 4 */ "d.......d" - /* 5 */ "d.......d" - /* 6 */ "cdddd...d" - /* 7 */ "mmmmd...d" - /* 8 */ "mmmmd...d" - /* 9 */ "mmmmd..fd" - /* 10 */ "mmmmddddc" + /* 0 */ "mmmmaddda" + /* 1 */ "mmmmmdddm" + /* 2 */ "accccceca" + /* 3 */ "ceeeeeeec" + /* 4 */ "ceeeeeeec" + /* 5 */ "ceeeeeeec" + /* 6 */ "acccaeeec" + /* 7 */ "mmmmceeec" + /* 8 */ "mmmmceeec" + /* 9 */ "mmmmceeec" + /* 10 */ "mmmmaccca" // Level 2 /* z\x* 012345678 */ - /* 0 */ "....c...c" - /* 1 */ "........." - /* 2 */ "cdgdddhdc" - /* 3 */ "d.......d" - /* 4 */ "g.......d" - /* 5 */ "di......g" - /* 6 */ "cdgdd...g" - /* 7 */ "mmmmd...g" - /* 8 */ "mmmmg..jd" - /* 9 */ "mmmmd..fd" - /* 10 */ "mmmmddgdc" + /* 0 */ "mmmma...a" + /* 1 */ "mmmm....." + /* 2 */ "acccccfca" + /* 3 */ "c.......c" + /* 4 */ "c.......c" + /* 5 */ "c.......c" + /* 6 */ "accca...c" + /* 7 */ "mmmmc...c" + /* 8 */ "mmmmc...c" + /* 9 */ "mmmmc..gc" + /* 10 */ "mmmmaccca" // Level 3 /* z\x* 012345678 */ - /* 0 */ "....k...k" - /* 1 */ "....d...d" - /* 2 */ "cdldddddc" - /* 3 */ "dnnnnnnnd" - /* 4 */ "onnnnnnnd" - /* 5 */ "dnnnnnnnp" - /* 6 */ "cdqddnnnp" - /* 7 */ "mmmmdnnnp" - /* 8 */ "mmmmonnnd" - /* 9 */ "mmmmdnnfd" - /* 10 */ "mmmmddqdc" + /* 0 */ "mmmma...a" + /* 1 */ "mmmm....." + /* 2 */ "achcccica" + /* 3 */ "c.......c" + /* 4 */ "h.......c" + /* 5 */ "cj......h" + /* 6 */ "achca...h" + /* 7 */ "mmmmc...h" + /* 8 */ "mmmmh..kc" + /* 9 */ "mmmmc..gc" + /* 10 */ "mmmmachca" // Level 4 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "drrrdrdrd" - /* 3 */ "r.......r" - /* 4 */ "r.......r" - /* 5 */ "r.......r" - /* 6 */ "drrrd...d" - /* 7 */ "mmmmr...r" - /* 8 */ "mmmmr...r" - /* 9 */ "mmmmr..sr" - /* 10 */ "mmmmdrrrd", + /* 0 */ "mmmml...l" + /* 1 */ "mmmmc...c" + /* 2 */ "acnccccca" + /* 3 */ "coooooooc" + /* 4 */ "poooooooc" + /* 5 */ "coooooooq" + /* 6 */ "acrcaoooq" + /* 7 */ "mmmmcoooq" + /* 8 */ "mmmmpoooc" + /* 9 */ "mmmmcoogc" + /* 10 */ "mmmmacrca" + + // Level 5 + /* z\x* 012345678 */ + /* 0 */ "mmmm....." + /* 1 */ "mmmm....." + /* 2 */ "cssscscsc" + /* 3 */ "s.......s" + /* 4 */ "s.......s" + /* 5 */ "s.......s" + /* 6 */ "csssc...c" + /* 7 */ "mmmms...s" + /* 8 */ "mmmms...s" + /* 9 */ "mmmms..ts" + /* 10 */ "mmmmcsssc", // Connectors: - "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1909,120 +2069,263 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // LittleTower: - // The data has been exported from the gallery Desert, area index 79, ID 595, created by STR_Warrior + // LittleHouse8: + // The data has been exported from the gallery Desert, area index 99, ID 739, created by STR_Warrior { // Size: - 5, 8, 7, // SizeX = 5, SizeY = 8, SizeZ = 7 + 9, 6, 9, // SizeX = 9, SizeY = 6, SizeZ = 9 // Hitbox (relative to bounding box): - -1, 0, 0, // MinX, MinY, MinZ - 5, 7, 7, // MaxX, MaxY, MaxZ + 0, 0, -1, // MinX, MinY, MinZ + 9, 5, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 65: 5\n" /* ladder */ - "g: 64:12\n" /* wooddoorblock */ + "a: 24: 2\n" /* sandstone */ + "b: 24: 0\n" /* sandstone */ + "c: 4: 0\n" /* cobblestone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 2\n" /* wooddoorblock */ + "g: 65: 2\n" /* ladder */ "h:101: 0\n" /* ironbars */ - "i: 50: 4\n" /* torch */ - "j:128: 2\n" /* sandstonestairs */ - "k:126: 8\n" /* woodenslab */ - "l:128: 4\n" /* sandstonestairs */ + "i: 64: 8\n" /* wooddoorblock */ + "j: 50: 1\n" /* torch */ + "k:128: 6\n" /* sandstonestairs */ + "l:126: 8\n" /* woodenslab */ "m: 19: 0\n" /* sponge */ "n:128: 5\n" /* sandstonestairs */ - "o:128: 7\n" /* sandstonestairs */ - "p:128: 6\n" /* sandstonestairs */ + "o:128: 4\n" /* sandstonestairs */ + "p:128: 7\n" /* sandstonestairs */ "q: 44: 1\n" /* step */ - "r: 96: 5\n" /* trapdoor */, + "r: 96: 2\n" /* trapdoor */, + + // Block data: + // Level 0 + /* z\x* 012345678 */ + /* 0 */ "mmmmabbba" + /* 1 */ "ccccbbbbb" + /* 2 */ "ccccbbbbb" + /* 3 */ "ccccbbbbb" + /* 4 */ "abbbabbbb" + /* 5 */ "bbbbbbbbb" + /* 6 */ "bbbbbbbbb" + /* 7 */ "bbbbbbbbb" + /* 8 */ "abbbbbbba" + + // Level 1 + /* z\x* 012345678 */ + /* 0 */ "mmmmabbba" + /* 1 */ "ddddbeeeb" + /* 2 */ "ddddeeeeb" + /* 3 */ "ddddbeeeb" + /* 4 */ "abbbaeeeb" + /* 5 */ "beeeeeeeb" + /* 6 */ "beeeeeeeb" + /* 7 */ "beeeeeeeb" + /* 8 */ "abbbbbbba" + + // Level 2 + /* z\x* 012345678 */ + /* 0 */ "mmmmabbba" + /* 1 */ "....b...b" + /* 2 */ "....f...b" + /* 3 */ "....b...b" + /* 4 */ "abbba...b" + /* 5 */ "b.......b" + /* 6 */ "b.......b" + /* 7 */ "b......gb" + /* 8 */ "abbbbbbba" + + // Level 3 + /* z\x* 012345678 */ + /* 0 */ "mmmmabhba" + /* 1 */ "....b...b" + /* 2 */ "....i...b" + /* 3 */ "....b...h" + /* 4 */ "abhbaj..h" + /* 5 */ "b.......h" + /* 6 */ "h.......b" + /* 7 */ "b......gb" + /* 8 */ "abbhhhbba" + + // Level 4 + /* z\x* 012345678 */ + /* 0 */ "mmmmabkba" + /* 1 */ "....blllb" + /* 2 */ "....blllb" + /* 3 */ "....bllln" + /* 4 */ "abkballln" + /* 5 */ "bllllllln" + /* 6 */ "olllllllb" + /* 7 */ "bllllllgb" + /* 8 */ "abbpppbba" + + // Level 5 + /* z\x* 012345678 */ + /* 0 */ "mmmmbqbqb" + /* 1 */ "....q...q" + /* 2 */ "....q...q" + /* 3 */ "....q...q" + /* 4 */ "bqqqb...b" + /* 5 */ "q.......q" + /* 6 */ "b.......q" + /* 7 */ "q......rq" + /* 8 */ "bqqqbqqqb", + + // Connectors: + "-1: 0, 2, 2: 4\n" /* Type -1, direction X- */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + true, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // LittleHouse8 + + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // LittleTower: + // The data has been exported from the gallery Desert, area index 79, ID 595, created by STR_Warrior + { + // Size: + 5, 9, 7, // SizeX = 5, SizeY = 9, SizeZ = 7 + + // Hitbox (relative to bounding box): + -1, 0, 0, // MinX, MinY, MinZ + 5, 8, 7, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 65: 5\n" /* ladder */ + "h: 64: 8\n" /* wooddoorblock */ + "i:101: 0\n" /* ironbars */ + "j: 50: 4\n" /* torch */ + "k:128: 2\n" /* sandstonestairs */ + "l:126: 8\n" /* woodenslab */ + "m: 19: 0\n" /* sponge */ + "n:128: 4\n" /* sandstonestairs */ + "o:128: 5\n" /* sandstonestairs */ + "p:128: 7\n" /* sandstonestairs */ + "q:128: 6\n" /* sandstonestairs */ + "r: 44: 1\n" /* step */ + "s: 96: 1\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 01234 */ - /* 0 */ "aaaaa" - /* 1 */ "aaaaa" - /* 2 */ "aabaa" - /* 3 */ "abbba" - /* 4 */ "abbba" - /* 5 */ "abbba" - /* 6 */ "aaaaa" + /* 0 */ "abbba" + /* 1 */ "mbbbm" + /* 2 */ "accca" + /* 3 */ "ccccc" + /* 4 */ "ccccc" + /* 5 */ "ccccc" + /* 6 */ "accca" // Level 1 /* z\x* 01234 */ - /* 0 */ "c...c" - /* 1 */ "....." - /* 2 */ "cdedc" - /* 3 */ "df..d" - /* 4 */ "d...d" - /* 5 */ "d...d" - /* 6 */ "cdddc" + /* 0 */ "addda" + /* 1 */ "mdddm" + /* 2 */ "aceca" + /* 3 */ "ceeec" + /* 4 */ "ceeec" + /* 5 */ "ceeec" + /* 6 */ "accca" // Level 2 /* z\x* 01234 */ - /* 0 */ "c...c" + /* 0 */ "a...a" /* 1 */ "....." - /* 2 */ "cdgdc" - /* 3 */ "df..d" - /* 4 */ "h...h" - /* 5 */ "d..id" - /* 6 */ "cdhdc" + /* 2 */ "acfca" + /* 3 */ "cg..c" + /* 4 */ "c...c" + /* 5 */ "c...c" + /* 6 */ "accca" // Level 3 /* z\x* 01234 */ - /* 0 */ "j...j" - /* 1 */ "d...d" - /* 2 */ "cdddc" - /* 3 */ "dfkkd" - /* 4 */ "lkkkn" - /* 5 */ "dkkkd" - /* 6 */ "cdodc" + /* 0 */ "a...a" + /* 1 */ "....." + /* 2 */ "achca" + /* 3 */ "cg..c" + /* 4 */ "i...i" + /* 5 */ "c..jc" + /* 6 */ "acica" // Level 4 /* z\x* 01234 */ - /* 0 */ "....." - /* 1 */ "....." - /* 2 */ "cdddc" - /* 3 */ "df..d" - /* 4 */ "d...d" - /* 5 */ "d...d" - /* 6 */ "cdddc" + /* 0 */ "k...k" + /* 1 */ "c...c" + /* 2 */ "accca" + /* 3 */ "cgllc" + /* 4 */ "nlllo" + /* 5 */ "clllc" + /* 6 */ "acpca" // Level 5 /* z\x* 01234 */ /* 0 */ "....." /* 1 */ "....." - /* 2 */ "cdhdc" - /* 3 */ "df..d" - /* 4 */ "h...h" - /* 5 */ "d..id" - /* 6 */ "cdhdc" + /* 2 */ "accca" + /* 3 */ "cg..c" + /* 4 */ "c...c" + /* 5 */ "c...c" + /* 6 */ "accca" // Level 6 /* z\x* 01234 */ /* 0 */ "....." /* 1 */ "....." - /* 2 */ "cdpdc" - /* 3 */ "dfkkd" - /* 4 */ "lkkkn" - /* 5 */ "dkkkd" - /* 6 */ "cdodc" + /* 2 */ "acica" + /* 3 */ "cg..c" + /* 4 */ "i...i" + /* 5 */ "c..jc" + /* 6 */ "acica" // Level 7 /* z\x* 01234 */ /* 0 */ "....." /* 1 */ "....." - /* 2 */ "dqdqd" - /* 3 */ "qr..q" - /* 4 */ "d...d" - /* 5 */ "q...q" - /* 6 */ "dqdqd", + /* 2 */ "acqca" + /* 3 */ "cgllc" + /* 4 */ "nlllo" + /* 5 */ "clllc" + /* 6 */ "acpca" + + // Level 8 + /* z\x* 01234 */ + /* 0 */ "....." + /* 1 */ "....." + /* 2 */ "crcrc" + /* 3 */ "rs..r" + /* 4 */ "c...c" + /* 5 */ "r...r" + /* 6 */ "crcrc", // Connectors: - "-1: 2, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 2, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -2053,141 +2356,156 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 71, ID 561, created by STR_Warrior { // Size: - 15, 8, 9, // SizeX = 15, SizeY = 8, SizeZ = 9 + 15, 9, 9, // SizeX = 15, SizeY = 9, SizeZ = 9 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 15, 7, 9, // MaxX, MaxY, MaxZ + 15, 8, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 3\n" /* wooddoorblock */ - "f: 85: 0\n" /* fence */ - "g: 64: 0\n" /* wooddoorblock */ - "h: 65: 5\n" /* ladder */ - "i: 64: 8\n" /* wooddoorblock */ - "j:101: 0\n" /* ironbars */ - "k: 50: 4\n" /* torch */ - "l:128: 2\n" /* sandstonestairs */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 12: 0\n" /* sand */ + "e: 13: 0\n" /* gravel */ + "f: 5: 0\n" /* wood */ + "g: 64: 3\n" /* wooddoorblock */ + "h: 85: 0\n" /* fence */ + "i: 64: 0\n" /* wooddoorblock */ + "j: 65: 5\n" /* ladder */ + "k: 64: 8\n" /* wooddoorblock */ + "l:101: 0\n" /* ironbars */ "m: 19: 0\n" /* sponge */ - "n:126: 8\n" /* woodenslab */ - "o:128: 4\n" /* sandstonestairs */ - "p:128: 7\n" /* sandstonestairs */ - "q: 44: 1\n" /* step */ - "r: 50: 3\n" /* torch */ - "s:128: 6\n" /* sandstonestairs */, + "n: 50: 4\n" /* torch */ + "o:128: 2\n" /* sandstonestairs */ + "p:126: 8\n" /* woodenslab */ + "q:128: 4\n" /* sandstonestairs */ + "r:128: 7\n" /* sandstonestairs */ + "s: 44: 1\n" /* step */ + "t: 50: 3\n" /* torch */ + "u:128: 6\n" /* sandstonestairs */, // Block data: // Level 0 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "aaaaaaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaaaaaa" - /* 2 */ "aaaaabaaaaaaaaa" - /* 3 */ "abbbbbbbbbaaaaa" - /* 4 */ "abbbbbbbbbaaaaa" - /* 5 */ "abbbbbbbbbbaaaa" - /* 6 */ "abbbbbbbbbaaaaa" - /* 7 */ "abbbbbbbbbaaaaa" - /* 8 */ "aaaaaaaaaaaaaaa" + /* 0 */ "mmmabbbammmmmmm" + /* 1 */ "mmmmbbbmmmmmmmm" + /* 2 */ "acccccccccadddd" + /* 3 */ "cccccccccccdddd" + /* 4 */ "cccccccccccdddd" + /* 5 */ "cccccccccccdddd" + /* 6 */ "cccccccccccdddd" + /* 7 */ "cccccccccccdddd" + /* 8 */ "acccccccccadddd" // Level 1 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "...c...c......." - /* 1 */ "..............." - /* 2 */ "cddddeddddcffff" - /* 3 */ "d.........d...f" - /* 4 */ "d.........d...f" - /* 5 */ "d.........g...f" - /* 6 */ "d.........d...f" - /* 7 */ "d.........dh..f" - /* 8 */ "cdddddddddcffff" + /* 0 */ "mmmaeeeammmmmmm" + /* 1 */ "mmmmeeemmmmmmmm" + /* 2 */ "accccfccccadddd" + /* 3 */ "cfffffffffcdddd" + /* 4 */ "cfffffffffcdddd" + /* 5 */ "cffffffffffdddd" + /* 6 */ "cfffffffffcdddd" + /* 7 */ "cfffffffffcdddd" + /* 8 */ "acccccccccadddd" // Level 2 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "...c...c......." - /* 1 */ "..............." - /* 2 */ "cddddiddddc...." - /* 3 */ "d.........d...." - /* 4 */ "j.........d...." - /* 5 */ "j.........i...." - /* 6 */ "j.........d...." - /* 7 */ "d..k...k..dh..." - /* 8 */ "cdddjjjdddc...." + /* 0 */ "mmma...ammmmmmm" + /* 1 */ "mmm.....mmmmmmm" + /* 2 */ "accccgccccahhhh" + /* 3 */ "c.........c...h" + /* 4 */ "c.........c...h" + /* 5 */ "c.........i...h" + /* 6 */ "c.........c...h" + /* 7 */ "c.........cj..h" + /* 8 */ "acccccccccahhhh" // Level 3 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "...l...l......." - /* 1 */ "...d...d......." - /* 2 */ "cdddddddddc...." - /* 3 */ "dnnnnnnnnnd...." - /* 4 */ "onnnnnnnnnd...." - /* 5 */ "onnnnnnnnnd...." - /* 6 */ "onnnnnnnnnd...." - /* 7 */ "dnnnnnnnnndh..." - /* 8 */ "cdddpppdddc...." + /* 0 */ "mmma...ammmmmmm" + /* 1 */ "mmm.....mmmmmmm" + /* 2 */ "acccckcccca...." + /* 3 */ "c.........c...." + /* 4 */ "l.........c...." + /* 5 */ "l.........k...." + /* 6 */ "l.........c...." + /* 7 */ "c..n...n..cj..." + /* 8 */ "accclllccca...." // Level 4 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "..............." - /* 1 */ "..............." - /* 2 */ "dqqqqdqqqqd...." - /* 3 */ "q..cdddc..q...." - /* 4 */ "q..d...d..q...." - /* 5 */ "d.........d...." - /* 6 */ "q..d...d..q...." - /* 7 */ "q..cdddc..q...." - /* 8 */ "dqqqqdqqqqd...." + /* 0 */ "mmmo...ommmmmmm" + /* 1 */ "mmmc...cmmmmmmm" + /* 2 */ "accccccccca...." + /* 3 */ "cpppppppppc...." + /* 4 */ "qpppppppppc...." + /* 5 */ "qpppppppppc...." + /* 6 */ "qpppppppppc...." + /* 7 */ "cpppppppppcj..." + /* 8 */ "acccrrrccca...." // Level 5 /* z\x* 11111 */ /* * 012345678901234 */ + /* 0 */ "mmm.....mmmmmmm" + /* 1 */ "mmm.....mmmmmmm" + /* 2 */ "csssscssssc...." + /* 3 */ "s..accca..s...." + /* 4 */ "s..c...c..s...." + /* 5 */ "c.........c...." + /* 6 */ "s..c...c..s...." + /* 7 */ "s..accca..s...." + /* 8 */ "csssscssssc...." + + // Level 6 + /* z\x* 11111 */ + /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." /* 2 */ "..............." - /* 3 */ "...cdjdc......." - /* 4 */ "...dr..d......." + /* 3 */ "...aclca......." + /* 4 */ "...ct..c......." /* 5 */ "..............." - /* 6 */ "...d...d......." - /* 7 */ "...cdjdc......." + /* 6 */ "...c...c......." + /* 7 */ "...aclca......." /* 8 */ "..............." - // Level 6 + // Level 7 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." /* 2 */ "..............." - /* 3 */ "...cdsdc......." - /* 4 */ "...dnnnd......." - /* 5 */ "...dnnnd......." - /* 6 */ "...dnnnd......." - /* 7 */ "...cdpdc......." + /* 3 */ "...acuca......." + /* 4 */ "...cpppc......." + /* 5 */ "...cpppc......." + /* 6 */ "...cpppc......." + /* 7 */ "...acrca......." /* 8 */ "..............." - // Level 7 + // Level 8 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." /* 2 */ "..............." - /* 3 */ "...dqdqd......." - /* 4 */ "...q...q......." - /* 5 */ "...d...d......." - /* 6 */ "...q...q......." - /* 7 */ "...dqdqd......." + /* 3 */ "...cscsc......." + /* 4 */ "...s...s......." + /* 5 */ "...c...c......." + /* 6 */ "...s...s......." + /* 7 */ "...cscsc......." /* 8 */ "...............", // Connectors: - "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -2218,130 +2536,145 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 74, ID 573, created by STR_Warrior { // Size: - 11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9 + 11, 10, 9, // SizeX = 11, SizeY = 10, SizeZ = 9 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 11, 8, 9, // MaxX, MaxY, MaxZ + 11, 9, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "A: 96: 3\n" /* trapdoor */ - "B: 96: 6\n" /* trapdoor */ - "C:128: 2\n" /* sandstonestairs */ - "D:128: 0\n" /* sandstonestairs */ - "E: 87: 0\n" /* netherstone */ - "F:128: 1\n" /* sandstonestairs */ - "G:128: 3\n" /* sandstonestairs */ - "H: 51: 0\n" /* fire */ - "I: 44: 9\n" /* step */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 65: 3\n" /* ladder */ - "f: 85: 0\n" /* fence */ - "g: 64: 7\n" /* wooddoorblock */ - "h:134: 1\n" /* 134 */ - "i:134: 2\n" /* 134 */ - "j: 61: 2\n" /* furnace */ - "k:134: 6\n" /* 134 */ - "l:134: 4\n" /* 134 */ + "A:128: 7\n" /* sandstonestairs */ + "B: 44: 1\n" /* step */ + "C: 96: 3\n" /* trapdoor */ + "D: 96: 2\n" /* trapdoor */ + "E:128: 2\n" /* sandstonestairs */ + "F:128: 0\n" /* sandstonestairs */ + "G: 87: 0\n" /* netherstone */ + "H:128: 1\n" /* sandstonestairs */ + "I:128: 3\n" /* sandstonestairs */ + "J: 51: 0\n" /* fire */ + "K: 44: 9\n" /* step */ + "a: 24: 2\n" /* sandstone */ + "b: 24: 0\n" /* sandstone */ + "c: 4: 0\n" /* cobblestone */ + "d: 12: 0\n" /* sand */ + "e: 13: 0\n" /* gravel */ + "f: 5: 0\n" /* wood */ + "g: 65: 3\n" /* ladder */ + "h: 85: 0\n" /* fence */ + "i: 64: 3\n" /* wooddoorblock */ + "j:134: 1\n" /* 134 */ + "k:134: 2\n" /* 134 */ + "l: 61: 2\n" /* furnace */ "m: 19: 0\n" /* sponge */ - "n: 65: 2\n" /* ladder */ - "o:101: 0\n" /* ironbars */ - "p: 50: 2\n" /* torch */ - "q: 47: 0\n" /* bookshelf */ - "r: 64:12\n" /* wooddoorblock */ - "s: 50: 3\n" /* torch */ - "t:171: 8\n" /* carpet */ - "u:128: 6\n" /* sandstonestairs */ - "v:126: 8\n" /* woodenslab */ - "w:128: 5\n" /* sandstonestairs */ - "x:128: 4\n" /* sandstonestairs */ - "y:128: 7\n" /* sandstonestairs */ - "z: 44: 1\n" /* step */, + "n:134: 6\n" /* 134 */ + "o:134: 4\n" /* 134 */ + "p: 65: 2\n" /* ladder */ + "q:101: 0\n" /* ironbars */ + "r: 50: 2\n" /* torch */ + "s: 47: 0\n" /* bookshelf */ + "t: 64: 8\n" /* wooddoorblock */ + "u: 50: 3\n" /* torch */ + "v:171: 8\n" /* carpet */ + "w:128: 6\n" /* sandstonestairs */ + "x:126: 8\n" /* woodenslab */ + "y:128: 5\n" /* sandstonestairs */ + "z:128: 4\n" /* sandstonestairs */, // Block data: // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "aaaaaaaaaaa" - /* 1 */ "abbbaaaaaaa" - /* 2 */ "abbbaaaaaaa" - /* 3 */ "abbbaaaaaaa" - /* 4 */ "abbbaaaabaa" - /* 5 */ "abbbbbbbbba" - /* 6 */ "abbbbbbbbba" - /* 7 */ "abbbbbbbbba" - /* 8 */ "aaaaaaaaaaa" + /* 0 */ "abbbammmcmm" + /* 1 */ "bbbbbdddcdm" + /* 2 */ "bbbbbmmmcdm" + /* 3 */ "bbbbbmmmcdm" + /* 4 */ "bbbbabbbbba" + /* 5 */ "bbbbbbbbbbb" + /* 6 */ "bbbbbbbbbbb" + /* 7 */ "bbbbbbbbbbb" + /* 8 */ "abbbbbbbbba" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "cdddc......" - /* 1 */ "de..dfff.f." - /* 2 */ "d...d....f." - /* 3 */ "d...d....f." - /* 4 */ "d...ddddgdc" - /* 5 */ "d.........d" - /* 6 */ "dhf.......d" - /* 7 */ "dhi.jkl..nd" - /* 8 */ "cdddddddddc" + /* 0 */ "abbbammmemm" + /* 1 */ "bfffbdddedm" + /* 2 */ "bfffbmmmedm" + /* 3 */ "bfffbmmmedm" + /* 4 */ "bfffabbbfba" + /* 5 */ "bfffffffffb" + /* 6 */ "bfffffffffb" + /* 7 */ "bfffffffffb" + /* 8 */ "abbbbbbbbba" // Level 2 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "cdodc......" - /* 1 */ "de..o......" - /* 2 */ "d...o......" - /* 3 */ "o..pd......" - /* 4 */ "o...qdodrdc" - /* 5 */ "o......s..d" - /* 6 */ "d.t.......o" - /* 7 */ "d........nd" - /* 8 */ "cdddooodddc" + /* 0 */ "abbba......" + /* 1 */ "bg..bhhh.h." + /* 2 */ "b...b....h." + /* 3 */ "b...b....h." + /* 4 */ "b...abbbiba" + /* 5 */ "b.........b" + /* 6 */ "bjh.......b" + /* 7 */ "bjk.lno..pb" + /* 8 */ "abbbbbbbbba" // Level 3 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "cdudc......" - /* 1 */ "devvw......" - /* 2 */ "dvvvw......" - /* 3 */ "xvvvd......" - /* 4 */ "xvvvddudddc" - /* 5 */ "xvvvvvvvvvd" - /* 6 */ "dvvvvvvvvvw" - /* 7 */ "dvvvqqqvvnd" - /* 8 */ "cdddyyydddc" + /* 0 */ "abqba......" + /* 1 */ "bg..q......" + /* 2 */ "b...q......" + /* 3 */ "q..rb......" + /* 4 */ "q...sbqbtba" + /* 5 */ "q......u..b" + /* 6 */ "b.v.......q" + /* 7 */ "b........pb" + /* 8 */ "abbbqqqbbba" // Level 4 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "dzzzd......" - /* 1 */ "zA..z......" - /* 2 */ "z...z......" - /* 3 */ "z...z......" - /* 4 */ "d...dzzzzzd" - /* 5 */ "zddd......z" - /* 6 */ "zddd......z" - /* 7 */ "zddd.....Bz" - /* 8 */ "dzzzzdzzzzd" + /* 0 */ "abwba......" + /* 1 */ "bgxxy......" + /* 2 */ "bxxxy......" + /* 3 */ "zxxxb......" + /* 4 */ "zxxxabwbbba" + /* 5 */ "zxxxxxxxxxb" + /* 6 */ "bxxxxxxxxxy" + /* 7 */ "bxxxsssxxpb" + /* 8 */ "abbbAAAbbba" // Level 5 /* z\x* 1 */ /* * 01234567890 */ + /* 0 */ "bBBBb......" + /* 1 */ "BC..B......" + /* 2 */ "B...B......" + /* 3 */ "B...B......" + /* 4 */ "b...bBBBBBb" + /* 5 */ "Bbbb......B" + /* 6 */ "Bbbb......B" + /* 7 */ "Bbbb.....DB" + /* 8 */ "bBBBBbBBBBb" + + // Level 6 + /* z\x* 1 */ + /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." /* 3 */ "..........." /* 4 */ "..........." - /* 5 */ ".cCc......." - /* 6 */ ".DEF......." - /* 7 */ ".cGc......." + /* 5 */ ".aEa......." + /* 6 */ ".FGH......." + /* 7 */ ".aIa......." /* 8 */ "..........." - // Level 6 + // Level 7 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." @@ -2349,12 +2682,12 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 2 */ "..........." /* 3 */ "..........." /* 4 */ "..........." - /* 5 */ ".c.c......." - /* 6 */ "..H........" - /* 7 */ ".c.c......." + /* 5 */ ".a.a......." + /* 6 */ "..J........" + /* 7 */ ".a.a......." /* 8 */ "..........." - // Level 7 + // Level 8 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." @@ -2362,12 +2695,12 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 2 */ "..........." /* 3 */ "..........." /* 4 */ "..........." - /* 5 */ ".ddd......." - /* 6 */ ".dId......." - /* 7 */ ".ddd......." + /* 5 */ ".bbb......." + /* 6 */ ".bKb......." + /* 7 */ ".bbb......." /* 8 */ "..........." - // Level 8 + // Level 9 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." @@ -2375,13 +2708,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 2 */ "..........." /* 3 */ "..........." /* 4 */ "..........." - /* 5 */ ".z.z......." + /* 5 */ ".B.B......." /* 6 */ "..........." - /* 7 */ ".z.z......." + /* 7 */ ".B.B......." /* 8 */ "...........", // Connectors: - "-1: 8, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 8, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -2420,30 +2753,30 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 3: 0\n" /* dirt */ - "c: 2: 0\n" /* grass */ - "d: 5: 0\n" /* wood */ - "e: 24: 0\n" /* sandstone */ - "f: 24: 2\n" /* sandstone */ - "g: 85: 0\n" /* fence */ - "h: 64: 3\n" /* wooddoorblock */ - "i: 64: 6\n" /* wooddoorblock */ - "j: 65: 4\n" /* ladder */ - "k: 65: 2\n" /* ladder */ - "l: 50: 1\n" /* torch */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 3: 0\n" /* dirt */ + "d: 24: 0\n" /* sandstone */ + "e: 13: 0\n" /* gravel */ + "f: 2: 0\n" /* grass */ + "g: 5: 0\n" /* wood */ + "h: 85: 0\n" /* fence */ + "i: 64: 3\n" /* wooddoorblock */ + "j: 64: 2\n" /* wooddoorblock */ + "k: 65: 4\n" /* ladder */ + "l: 65: 2\n" /* ladder */ "m: 19: 0\n" /* sponge */ - "n: 50: 2\n" /* torch */ - "o:101: 0\n" /* ironbars */ - "p: 64: 8\n" /* wooddoorblock */ - "q: 64:12\n" /* wooddoorblock */ + "n: 50: 1\n" /* torch */ + "o: 50: 2\n" /* torch */ + "p:101: 0\n" /* ironbars */ + "q: 64: 8\n" /* wooddoorblock */ "r:128: 2\n" /* sandstonestairs */ "s:128: 6\n" /* sandstonestairs */ "t:126: 8\n" /* woodenslab */ "u:128: 5\n" /* sandstonestairs */ "v:128: 7\n" /* sandstonestairs */ "w: 44: 1\n" /* step */ - "x: 96: 4\n" /* trapdoor */ + "x: 96: 0\n" /* trapdoor */ "y:126: 0\n" /* woodenslab */ "z:128: 4\n" /* sandstonestairs */, @@ -2451,92 +2784,92 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // Level 0 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ "aaaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaaa" - /* 2 */ "bbbbbaaaaaaa" - /* 3 */ "bbbbbaaaaaaa" - /* 4 */ "bbbbbaaaaaaa" - /* 5 */ "bbbbbaaaaaaa" - /* 6 */ "bbbaaaaaaaaa" - /* 7 */ "aaaaaaaaaaaa" - /* 8 */ "aaaaaaaaaaaa" - /* 9 */ "aaaaaaaaaaaa" - /* 10 */ "aaaaaaaaaaaa" + /* 0 */ "mmmmmammbbba" + /* 1 */ "mmmmmmmmbbbm" + /* 2 */ "cccccaddddda" + /* 3 */ "cccccddddddd" + /* 4 */ "cccccddddddd" + /* 5 */ "cccccddddddd" + /* 6 */ "cccddddddddd" + /* 7 */ "mmmddddddddd" + /* 8 */ "mmmdddddddda" + /* 9 */ "mmmdddddmmmm" + /* 10 */ "mmmadddammmm" // Level 1 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ "aaaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaaa" - /* 2 */ "cccccaaaadaa" - /* 3 */ "cccccaddddda" - /* 4 */ "cccccdddddda" - /* 5 */ "cccccaddddda" - /* 6 */ "cccaadddddda" - /* 7 */ "aaaaddddddda" - /* 8 */ "aaaadddaaaaa" - /* 9 */ "aaaadddaaaaa" - /* 10 */ "aaaaaaaaaaaa" + /* 0 */ "mmmmmammeeea" + /* 1 */ "mmmmmmmmeeem" + /* 2 */ "fffffadddgda" + /* 3 */ "fffffdgggggd" + /* 4 */ "fffffggggggd" + /* 5 */ "fffffdgggggd" + /* 6 */ "fffddggggggd" + /* 7 */ "mmmdgggggggd" + /* 8 */ "mmmdggggddda" + /* 9 */ "mmmdgggdmmmm" + /* 10 */ "mmmadddammmm" // Level 2 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ ".....e.....f" - /* 1 */ "............" - /* 2 */ "gggggfeeehef" - /* 3 */ "g....e.....e" - /* 4 */ "g....i.....e" - /* 5 */ "g....e.....e" - /* 6 */ "gggfe......e" - /* 7 */ "mmme......je" - /* 8 */ "mmme...eeeef" - /* 9 */ "mmme..kemmmm" - /* 10 */ "mmmfeeefmmmm" + /* 0 */ "mmmmma.....a" + /* 1 */ "mmmmm......." + /* 2 */ "hhhhhadddida" + /* 3 */ "h....d.....d" + /* 4 */ "h....j.....d" + /* 5 */ "h....d.....d" + /* 6 */ "hhhad......d" + /* 7 */ "mmmd......kd" + /* 8 */ "mmmd....ddda" + /* 9 */ "mmmd..ldmmmm" + /* 10 */ "mmmadddammmm" // Level 3 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ ".....el...nf" - /* 1 */ "............" - /* 2 */ ".....fooepef" - /* 3 */ ".....e.....e" - /* 4 */ ".....q.....e" - /* 5 */ ".....e.....o" - /* 6 */ "...ge......e" - /* 7 */ "mmme......je" - /* 8 */ "mmme...eeoof" - /* 9 */ "mmme..kemmmm" - /* 10 */ "mmmgeeegmmmm" + /* 0 */ "mmmmman...oa" + /* 1 */ "mmmmm......." + /* 2 */ ".....appdqda" + /* 3 */ ".....d.....d" + /* 4 */ ".....q.....d" + /* 5 */ ".....d.....p" + /* 6 */ "...hd......d" + /* 7 */ "mmmd......kd" + /* 8 */ "mmmd....dppa" + /* 9 */ "mmmd..ldmmmm" + /* 10 */ "mmmhdddhmmmm" // Level 4 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ ".....r.....r" - /* 1 */ ".....e.....e" - /* 2 */ ".....fsseeef" - /* 3 */ ".....ettttte" - /* 4 */ ".....ettttte" - /* 5 */ ".....etttttu" - /* 6 */ "...getttttte" - /* 7 */ "mmmettttttje" - /* 8 */ "mmmettteevvf" - /* 9 */ "mmmettkemmmm" - /* 10 */ "mmmgeeegmmmm" + /* 0 */ "mmmmmr.....r" + /* 1 */ "mmmmmd.....d" + /* 2 */ ".....assddda" + /* 3 */ ".....dtttttd" + /* 4 */ ".....dtttttd" + /* 5 */ ".....dtttttu" + /* 6 */ "...hdatttttd" + /* 7 */ "mmmdttttttkd" + /* 8 */ "mmmdtttadvva" + /* 9 */ "mmmdttldmmmm" + /* 10 */ "mmmhdddhmmmm" // Level 5 /* z\x* 11 */ /* * 012345678901 */ /* 0 */ "............" /* 1 */ "............" - /* 2 */ ".....ewwewwe" + /* 2 */ ".....dwwdwwd" /* 3 */ ".....w.....w" /* 4 */ ".....w.....w" - /* 5 */ ".....w.....e" - /* 6 */ "...geeeg...w" - /* 7 */ "mmme...e..xw" - /* 8 */ "mmme...ewwwe" - /* 9 */ "mmme..kemmmm" - /* 10 */ "mmmgeeegmmmm" + /* 5 */ ".....w.....d" + /* 6 */ "...hdadh...w" + /* 7 */ "mmmd...d..xw" + /* 8 */ "mmmd...awwwd" + /* 9 */ "mmmd..ldmmmm" + /* 10 */ "mmmhdddhmmmm" // Level 6 /* z\x* 11 */ @@ -2547,11 +2880,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 3 */ "............" /* 4 */ "............" /* 5 */ "............" - /* 6 */ "...ge.eg...." - /* 7 */ "mmme...e...." - /* 8 */ "mmmo........" - /* 9 */ "mmme..kemmmm" - /* 10 */ "mmmgeoegmmmm" + /* 6 */ "...hd.dh...." + /* 7 */ "mmmd...d...." + /* 8 */ "mmmp........" + /* 9 */ "mmmd..ldmmmm" + /* 10 */ "mmmhdpdhmmmm" // Level 7 /* z\x* 11 */ @@ -2562,11 +2895,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 3 */ "............" /* 4 */ "............" /* 5 */ "............" - /* 6 */ "...ge.eg...." - /* 7 */ "mmme...e...." - /* 8 */ "mmmo........" - /* 9 */ "mmmel.kemmmm" - /* 10 */ "mmmgeoegmmmm" + /* 6 */ "...hd.dh...." + /* 7 */ "mmmd...d...." + /* 8 */ "mmmp........" + /* 9 */ "mmmdn.ldmmmm" + /* 10 */ "mmmhdpdhmmmm" // Level 8 /* z\x* 11 */ @@ -2577,11 +2910,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = /* 3 */ "............" /* 4 */ "............" /* 5 */ "............" - /* 6 */ "...fesef...." - /* 7 */ "mmmeyyye...." + /* 6 */ "...adsda...." + /* 7 */ "mmmdyyyd...." /* 8 */ "mmmzyyyu...." - /* 9 */ "mmmeyykemmmm" - /* 10 */ "mmmfevefmmmm" + /* 9 */ "mmmdyyldmmmm" + /* 10 */ "mmmadvdammmm" // Level 9 /* z\x* 11 */ @@ -2630,107 +2963,122 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 67, ID 556, created by STR_Warrior { // Size: - 9, 5, 11, // SizeX = 9, SizeY = 5, SizeZ = 11 + 9, 6, 11, // SizeX = 9, SizeY = 6, SizeZ = 11 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 9, 4, 11, // MaxX, MaxY, MaxZ + 9, 5, 11, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 65: 2\n" /* ladder */ - "g: 64:12\n" /* wooddoorblock */ - "h:101: 0\n" /* ironbars */ - "i: 50: 2\n" /* torch */ - "j: 50: 1\n" /* torch */ - "k:128: 2\n" /* sandstonestairs */ - "l:126: 8\n" /* woodenslab */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 65: 2\n" /* ladder */ + "h: 64: 8\n" /* wooddoorblock */ + "i:101: 0\n" /* ironbars */ + "j: 50: 2\n" /* torch */ + "k: 50: 1\n" /* torch */ + "l:128: 2\n" /* sandstonestairs */ "m: 19: 0\n" /* sponge */ - "n:128: 5\n" /* sandstonestairs */ - "o:128: 6\n" /* sandstonestairs */ - "p:128: 4\n" /* sandstonestairs */ - "q:128: 7\n" /* sandstonestairs */ - "r: 44: 1\n" /* step */ - "s: 96: 6\n" /* trapdoor */, + "n:126: 8\n" /* woodenslab */ + "o:128: 5\n" /* sandstonestairs */ + "p:128: 6\n" /* sandstonestairs */ + "q:128: 4\n" /* sandstonestairs */ + "r:128: 7\n" /* sandstonestairs */ + "s: 44: 1\n" /* step */ + "t: 96: 2\n" /* trapdoor */, // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "aaaaaaaaa" - /* 1 */ "aaaaaaaaa" - /* 2 */ "aaaaaabaa" - /* 3 */ "aaaaabbba" - /* 4 */ "aaaaabbba" - /* 5 */ "aaaaabbba" - /* 6 */ "aaaaabbba" - /* 7 */ "abbbbbbba" - /* 8 */ "abbbbbbba" - /* 9 */ "abbbbbbba" - /* 10 */ "aaaaaaaaa" + /* 0 */ "mmmmabbba" + /* 1 */ "mmmmmbbbm" + /* 2 */ "mmmmaccca" + /* 3 */ "mmmmccccc" + /* 4 */ "mmmmccccc" + /* 5 */ "mmmmccccc" + /* 6 */ "acccacccc" + /* 7 */ "ccccccccc" + /* 8 */ "ccccccccc" + /* 9 */ "ccccccccc" + /* 10 */ "accccccca" // Level 1 /* z\x* 012345678 */ - /* 0 */ "mmmmc...c" - /* 1 */ "mmmm....." - /* 2 */ "mmmmcdedc" - /* 3 */ "mmmmd...d" - /* 4 */ "mmmmd...d" - /* 5 */ "mmmmd...d" - /* 6 */ "cdddd...d" - /* 7 */ "d.......d" - /* 8 */ "d.......d" - /* 9 */ "d......fd" - /* 10 */ "cdddddddc" + /* 0 */ "mmmmaddda" + /* 1 */ "mmmmmdddm" + /* 2 */ "mmmmaceca" + /* 3 */ "mmmmceeec" + /* 4 */ "mmmmceeec" + /* 5 */ "mmmmceeec" + /* 6 */ "acccaeeec" + /* 7 */ "ceeeeeeec" + /* 8 */ "ceeeeeeec" + /* 9 */ "ceeeeeeec" + /* 10 */ "accccccca" // Level 2 /* z\x* 012345678 */ - /* 0 */ "mmmmc...c" + /* 0 */ "mmmma...a" /* 1 */ "mmmm....." - /* 2 */ "mmmmcdgdc" - /* 3 */ "mmmmd...d" - /* 4 */ "mmmmd...d" - /* 5 */ "mmmmd...h" - /* 6 */ "cdhdd...h" - /* 7 */ "d.......h" - /* 8 */ "h......id" - /* 9 */ "dj.....fd" - /* 10 */ "cddhhhddc" + /* 2 */ "mmmmacfca" + /* 3 */ "mmmmc...c" + /* 4 */ "mmmmc...c" + /* 5 */ "mmmmc...c" + /* 6 */ "accca...c" + /* 7 */ "c.......c" + /* 8 */ "c.......c" + /* 9 */ "c......gc" + /* 10 */ "accccccca" // Level 3 /* z\x* 012345678 */ - /* 0 */ "mmmmk...k" - /* 1 */ "mmmmd...d" - /* 2 */ "mmmmcdddc" - /* 3 */ "mmmmdllld" - /* 4 */ "mmmmdllld" - /* 5 */ "mmmmdllln" - /* 6 */ "cdoddllln" - /* 7 */ "dllllllln" - /* 8 */ "pllllllld" - /* 9 */ "dllllllfd" - /* 10 */ "cddqqqddc" + /* 0 */ "mmmma...a" + /* 1 */ "mmmm....." + /* 2 */ "mmmmachca" + /* 3 */ "mmmmc...c" + /* 4 */ "mmmmc...c" + /* 5 */ "mmmmc...i" + /* 6 */ "acica...i" + /* 7 */ "c.......i" + /* 8 */ "i......jc" + /* 9 */ "ck.....gc" + /* 10 */ "acciiicca" // Level 4 /* z\x* 012345678 */ + /* 0 */ "mmmml...l" + /* 1 */ "mmmmc...c" + /* 2 */ "mmmmaccca" + /* 3 */ "mmmmcnnnc" + /* 4 */ "mmmmcnnnc" + /* 5 */ "mmmmcnnno" + /* 6 */ "acpcannno" + /* 7 */ "cnnnnnnno" + /* 8 */ "qnnnnnnnc" + /* 9 */ "cnnnnnngc" + /* 10 */ "accrrrcca" + + // Level 5 + /* z\x* 012345678 */ /* 0 */ "mmmm....." /* 1 */ "mmmm....." - /* 2 */ "mmmmdrdrd" - /* 3 */ "mmmmr...r" - /* 4 */ "mmmmr...r" - /* 5 */ "mmmmr...r" - /* 6 */ "drrrd...d" - /* 7 */ "r.......r" - /* 8 */ "r.......r" - /* 9 */ "r......sr" - /* 10 */ "drrrdrrrd", + /* 2 */ "mmmmcscsc" + /* 3 */ "mmmms...s" + /* 4 */ "mmmms...s" + /* 5 */ "mmmms...s" + /* 6 */ "csssc...c" + /* 7 */ "s.......s" + /* 8 */ "s.......s" + /* 9 */ "s......ts" + /* 10 */ "cssscsssc", // Connectors: - "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -2761,162 +3109,176 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 83, ID 599, created by STR_Warrior { // Size: - 13, 9, 9, // SizeX = 13, SizeY = 9, SizeZ = 9 + 13, 10, 9, // SizeX = 13, SizeY = 10, SizeZ = 9 // Hitbox (relative to bounding box): -1, 0, 0, // MinX, MinY, MinZ - 13, 8, 9, // MaxX, MaxY, MaxZ + 13, 9, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "A: 44: 9\n" /* step */ - "a: 12: 0\n" /* sand */ - "b: 5: 0\n" /* wood */ - "c: 24: 2\n" /* sandstone */ - "d: 24: 0\n" /* sandstone */ - "e: 64: 7\n" /* wooddoorblock */ - "f: 17: 0\n" /* tree */ - "g:128: 5\n" /* sandstonestairs */ - "h:128: 4\n" /* sandstonestairs */ - "i:128: 7\n" /* sandstonestairs */ - "j:128: 6\n" /* sandstonestairs */ - "k:118: 3\n" /* cauldronblock */ - "l:155: 1\n" /* quartzblock */ + "A: 51: 0\n" /* fire */ + "B: 44: 9\n" /* step */ + "a: 24: 2\n" /* sandstone */ + "b: 4: 0\n" /* cobblestone */ + "c: 24: 0\n" /* sandstone */ + "d: 13: 0\n" /* gravel */ + "e: 5: 0\n" /* wood */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 17: 0\n" /* tree */ + "h:128: 5\n" /* sandstonestairs */ + "i:128: 4\n" /* sandstonestairs */ + "j:128: 7\n" /* sandstonestairs */ + "k:128: 6\n" /* sandstonestairs */ + "l:118: 3\n" /* cauldronblock */ "m: 19: 0\n" /* sponge */ - "n: 64:12\n" /* wooddoorblock */ - "o: 50: 3\n" /* torch */ - "p:101: 0\n" /* ironbars */ - "q:140: 0\n" /* flowerpotblock */ - "r: 24: 1\n" /* sandstone */ - "s:128: 2\n" /* sandstonestairs */ - "t:126: 8\n" /* woodenslab */ - "u: 44: 1\n" /* step */ - "v:128: 0\n" /* sandstonestairs */ - "w: 87: 0\n" /* netherstone */ - "x:128: 1\n" /* sandstonestairs */ - "y:128: 3\n" /* sandstonestairs */ - "z: 51: 0\n" /* fire */, + "n:155: 1\n" /* quartzblock */ + "o: 64: 8\n" /* wooddoorblock */ + "p: 50: 3\n" /* torch */ + "q:101: 0\n" /* ironbars */ + "r:140: 0\n" /* flowerpotblock */ + "s: 24: 1\n" /* sandstone */ + "t:128: 2\n" /* sandstonestairs */ + "u:126: 8\n" /* woodenslab */ + "v: 44: 1\n" /* step */ + "w:128: 0\n" /* sandstonestairs */ + "x: 87: 0\n" /* netherstone */ + "y:128: 1\n" /* sandstonestairs */ + "z:128: 3\n" /* sandstonestairs */, // Block data: // Level 0 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "aaaaaaaaaaaaa" - /* 1 */ "aaaaaaaaaaaaa" - /* 2 */ "aaabbababbaaa" - /* 3 */ "abbbbbbbbbbba" - /* 4 */ "abbbbbbbbbbba" - /* 5 */ "abbbbbbbbbbba" - /* 6 */ "abbbbbbbbbbba" - /* 7 */ "abbbbbbbbbbba" - /* 8 */ "aaaaaaaaaaaaa" + /* 0 */ "mmmmabbbammmm" + /* 1 */ "mmmmmbbbmmmmm" + /* 2 */ "accccccccccca" + /* 3 */ "ccccccccccccc" + /* 4 */ "ccccccccccccc" + /* 5 */ "ccccccccccccc" + /* 6 */ "ccccccccccccc" + /* 7 */ "ccccccccccccc" + /* 8 */ "accccccccccca" // Level 1 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "....c...c...." - /* 1 */ "............." - /* 2 */ "cdddddedddddc" - /* 3 */ "dfg.......hfd" - /* 4 */ "di.........id" - /* 5 */ "d...........d" - /* 6 */ "dj.........jd" - /* 7 */ "dfg.khlgk.hfd" - /* 8 */ "cdddddddddddc" + /* 0 */ "mmmmadddammmm" + /* 1 */ "mmmmmdddmmmmm" + /* 2 */ "accccceccccca" + /* 3 */ "ceeeeeeeeeeec" + /* 4 */ "ceeeeeeeeeeec" + /* 5 */ "ceeeeeeeeeeec" + /* 6 */ "ceeeeeeeeeeec" + /* 7 */ "ceeeeeeeeeeec" + /* 8 */ "accccccccccca" // Level 2 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "....c...c...." - /* 1 */ "............." - /* 2 */ "cdddddndddddc" - /* 3 */ "df...o.o...fd" - /* 4 */ "d...........d" - /* 5 */ "p...........p" - /* 6 */ "d...........d" - /* 7 */ "df...qrq...fd" - /* 8 */ "cdpppdddpppdc" + /* 0 */ "mmmma...ammmm" + /* 1 */ "mmmm.....mmmm" + /* 2 */ "acccccfccccca" + /* 3 */ "cgh.......igc" + /* 4 */ "cj.........jc" + /* 5 */ "c...........c" + /* 6 */ "ck.........kc" + /* 7 */ "cgh.linhl.igc" + /* 8 */ "accccccccccca" // Level 3 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "....s...s...." - /* 1 */ "....r...d...." - /* 2 */ "cdddddddddddc" - /* 3 */ "dftttttttttfd" - /* 4 */ "dtttttttttttd" - /* 5 */ "htttttttttttg" - /* 6 */ "dtttttttttttd" - /* 7 */ "dftttttttttfd" - /* 8 */ "cdiiidddiiidc" + /* 0 */ "mmmma...ammmm" + /* 1 */ "mmmm.....mmmm" + /* 2 */ "acccccoccccca" + /* 3 */ "cg...p.p...gc" + /* 4 */ "c...........c" + /* 5 */ "q...........q" + /* 6 */ "c...........c" + /* 7 */ "cg...rsr...gc" + /* 8 */ "acqqqcccqqqca" // Level 4 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "............." - /* 1 */ "............." - /* 2 */ "duuuuuduuuuud" - /* 3 */ "u...........u" - /* 4 */ "u.ddd...ddd.u" - /* 5 */ "d.ddd...ddd.d" - /* 6 */ "u.ddd...ddd.u" - /* 7 */ "u...........u" - /* 8 */ "duuuuuduuuuud" + /* 0 */ "mmmmt...tmmmm" + /* 1 */ "mmmms...cmmmm" + /* 2 */ "accccccccccca" + /* 3 */ "cguuuuuuuuugc" + /* 4 */ "cuuuuuuuuuuuc" + /* 5 */ "iuuuuuuuuuuuh" + /* 6 */ "cuuuuuuuuuuuc" + /* 7 */ "cguuuuuuuuugc" + /* 8 */ "acjjjcccjjjca" // Level 5 /* z\x* 111 */ /* * 0123456789012 */ + /* 0 */ "mmmm.....mmmm" + /* 1 */ "mmmm.....mmmm" + /* 2 */ "cvvvvvcvvvvvc" + /* 3 */ "v...........v" + /* 4 */ "v.ccc...ccc.v" + /* 5 */ "c.ccc...ccc.c" + /* 6 */ "v.ccc...ccc.v" + /* 7 */ "v...........v" + /* 8 */ "cvvvvvcvvvvvc" + + // Level 6 + /* z\x* 111 */ + /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." /* 2 */ "............." /* 3 */ "............." - /* 4 */ "..csc...csc.." - /* 5 */ "..vwx...vwx.." - /* 6 */ "..cyc...cyc.." + /* 4 */ "..ata...ata.." + /* 5 */ "..wxy...wxy.." + /* 6 */ "..aza...aza.." /* 7 */ "............." /* 8 */ "............." - // Level 6 + // Level 7 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." /* 2 */ "............." /* 3 */ "............." - /* 4 */ "..c.c...c.c.." - /* 5 */ "...z.....z..." - /* 6 */ "..c.c...c.c.." + /* 4 */ "..a.a...a.a.." + /* 5 */ "...A.....A..." + /* 6 */ "..a.a...a.a.." /* 7 */ "............." /* 8 */ "............." - // Level 7 + // Level 8 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." /* 2 */ "............." /* 3 */ "............." - /* 4 */ "..ddd...ddd.." - /* 5 */ "..dAd...dAd.." - /* 6 */ "..ddd...ddd.." + /* 4 */ "..ccc...ccc.." + /* 5 */ "..cBc...cBc.." + /* 6 */ "..ccc...ccc.." /* 7 */ "............." /* 8 */ "............." - // Level 8 + // Level 9 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." /* 2 */ "............." /* 3 */ "............." - /* 4 */ "..u.u...u.u.." + /* 4 */ "..v.v...v.v.." /* 5 */ "............." - /* 6 */ "..u.u...u.u.." + /* 6 */ "..v.v...v.v.." /* 7 */ "............." /* 8 */ ".............", // Connectors: - "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 2, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -2953,201 +3315,245 @@ const cPrefab::sDef g_AlchemistVillageStartingPrefabs[] = // The data has been exported from the gallery Desert, area index 90, ID 631, created by STR_Warrior { // Size: - 5, 21, 5, // SizeX = 5, SizeY = 21, SizeZ = 5 + 7, 21, 7, // SizeX = 7, SizeY = 21, SizeZ = 7 // Hitbox (relative to bounding box): 0, 0, 0, // MinX, MinY, MinZ - 4, 20, 4, // MaxX, MaxY, MaxZ + 6, 20, 6, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ "a: 1: 0\n" /* stone */ - "b: 24: 0\n" /* sandstone */ - "c: 8: 0\n" /* water */ - "d: 24: 2\n" /* sandstone */ - "e:128: 1\n" /* sandstonestairs */ - "f: 44: 1\n" /* step */ - "g:128: 0\n" /* sandstonestairs */ - "h:128: 3\n" /* sandstonestairs */ - "i:128: 2\n" /* sandstonestairs */ - "j: 44: 9\n" /* step */ - "k:126: 0\n" /* woodenslab */ - "m: 19: 0\n" /* sponge */, + "b: 24: 2\n" /* sandstone */ + "c: 24: 0\n" /* sandstone */ + "d: 8: 0\n" /* water */ + "e: 4: 0\n" /* cobblestone */ + "f: 13: 0\n" /* gravel */ + "g:128: 1\n" /* sandstonestairs */ + "h: 44: 1\n" /* step */ + "i:128: 0\n" /* sandstonestairs */ + "j:128: 3\n" /* sandstonestairs */ + "k:128: 2\n" /* sandstonestairs */ + "l: 44: 9\n" /* step */ + "m: 19: 0\n" /* sponge */ + "n:126: 0\n" /* woodenslab */, // Block data: // Level 0 - /* z\x* 01234 */ - /* 0 */ "aaaaa" - /* 1 */ "aaaaa" - /* 2 */ "aaaaa" - /* 3 */ "aaaaa" - /* 4 */ "aaaaa" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "maaaaam" + /* 2 */ "maaaaam" + /* 3 */ "maaaaam" + /* 4 */ "maaaaam" + /* 5 */ "maaaaam" + /* 6 */ "mmmmmmm" // Level 1 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 2 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 3 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 4 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 5 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 6 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 7 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 8 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 9 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 10 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 11 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 12 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 13 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmmmmmm" + /* 1 */ "mbcccbm" + /* 2 */ "mcdddcm" + /* 3 */ "mcdddcm" + /* 4 */ "mcdddcm" + /* 5 */ "mbcccbm" + /* 6 */ "mmmmmmm" // Level 14 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmeeemm" + /* 1 */ "mbcccbm" + /* 2 */ "ecdddce" + /* 3 */ "ecdddce" + /* 4 */ "ecdddce" + /* 5 */ "mbcccbm" + /* 6 */ "mmeeemm" // Level 15 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bcccb" - /* 2 */ "bcccb" - /* 3 */ "bcccb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mmfffmm" + /* 1 */ "mbcccbm" + /* 2 */ "fcdddcf" + /* 3 */ "fcdddcf" + /* 4 */ "fcdddcf" + /* 5 */ "mbcccbm" + /* 6 */ "mmfffmm" // Level 16 - /* z\x* 01234 */ - /* 0 */ "defgd" - /* 1 */ "h...h" - /* 2 */ "f...f" - /* 3 */ "i...i" - /* 4 */ "defgd" + /* z\x* 0123456 */ + /* 0 */ "mm...mm" + /* 1 */ "mbghibm" + /* 2 */ ".j...j." + /* 3 */ ".h...h." + /* 4 */ ".k...k." + /* 5 */ "mbghibm" + /* 6 */ "mm...mm" // Level 17 - /* z\x* 01234 */ - /* 0 */ "d...d" - /* 1 */ "....." - /* 2 */ "....." - /* 3 */ "....." - /* 4 */ "d...d" + /* z\x* 0123456 */ + /* 0 */ "mm...mm" + /* 1 */ "mb...bm" + /* 2 */ "......." + /* 3 */ "......." + /* 4 */ "......." + /* 5 */ "mb...bm" + /* 6 */ "mm...mm" // Level 18 - /* z\x* 01234 */ - /* 0 */ "djjjd" - /* 1 */ "j...j" - /* 2 */ "j...j" - /* 3 */ "j...j" - /* 4 */ "djjjd" + /* z\x* 0123456 */ + /* 0 */ "mm...mm" + /* 1 */ "mblllbm" + /* 2 */ ".l...l." + /* 3 */ ".l...l." + /* 4 */ ".l...l." + /* 5 */ "mblllbm" + /* 6 */ "mm...mm" // Level 19 - /* z\x* 01234 */ - /* 0 */ "bbbbb" - /* 1 */ "bkkkb" - /* 2 */ "bkkkb" - /* 3 */ "bkkkb" - /* 4 */ "bbbbb" + /* z\x* 0123456 */ + /* 0 */ "mm...mm" + /* 1 */ "mcccccm" + /* 2 */ ".cnnnc." + /* 3 */ ".cnnnc." + /* 4 */ ".cnnnc." + /* 5 */ "mcccccm" + /* 6 */ "mm...mm" // Level 20 - /* z\x* 01234 */ - /* 0 */ "f.f.f" - /* 1 */ "....." - /* 2 */ "f...f" - /* 3 */ "....." - /* 4 */ "f.f.f", + /* z\x* 0123456 */ + /* 0 */ "mm...mm" + /* 1 */ "mh.h.hm" + /* 2 */ "......." + /* 3 */ ".h...h." + /* 4 */ "......." + /* 5 */ "mh.h.hm" + /* 6 */ "mm...mm", // Connectors: - "2: 2, 16, 4: 3\n" /* Type 2, direction Z+ */ - "2: 0, 16, 2: 4\n" /* Type 2, direction X- */ - "2: 2, 16, 0: 2\n" /* Type 2, direction Z- */ - "2: 4, 16, 2: 5\n" /* Type 2, direction X+ */, + "2: 3, 16, 6: 3\n" /* Type 2, direction Z+ */ + "2: 0, 16, 3: 4\n" /* Type 2, direction X- */ + "2: 3, 16, 0: 2\n" /* Type 2, direction Z- */ + "2: 6, 16, 3: 5\n" /* Type 2, direction X+ */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ diff --git a/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp b/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp index 5ec222f84..79f7a5272 100644 --- a/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp +++ b/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp @@ -130,6 +130,176 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] = /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Farm: + // The data has been exported from the gallery Plains, area index 166, ID 554, created by Aloe_vera + { + // Size: + 11, 7, 13, // SizeX = 11, SizeY = 7, SizeZ = 13 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 10, 6, 12, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 3: 0\n" /* dirt */ + "b: 60: 7\n" /* tilleddirt */ + "c: 8: 0\n" /* water */ + "d: 43: 0\n" /* doubleslab */ + "e: 44: 0\n" /* step */ + "f: 59: 7\n" /* crops */ + "g: 83: 0\n" /* reedblock */ + "h:113: 0\n" /* netherbrickfence */ + "m: 19: 0\n" /* sponge */, + + // Block data: + // Level 0 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "mmmmmmmmmmm" + /* 1 */ "maaaaaaaaam" + /* 2 */ "maaaaaaaaam" + /* 3 */ "maaaaaaaaam" + /* 4 */ "maaaaaaaaam" + /* 5 */ "maaaaaaaaam" + /* 6 */ "maaaaaaaaam" + /* 7 */ "maaaaaaaaam" + /* 8 */ "maaaaaaaaam" + /* 9 */ "maaaaaaaaam" + /* 10 */ "maaaaaaaaam" + /* 11 */ "maaaaaaaaam" + /* 12 */ "mmmmmmmmmmm" + + // Level 1 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "mmmmmmmmmmm" + /* 1 */ "maaaaaaaaam" + /* 2 */ "mabbbbbbbam" + /* 3 */ "mabbbbbbbam" + /* 4 */ "mabbbbbbbam" + /* 5 */ "mabbbbbbbam" + /* 6 */ "mabcccccaam" + /* 7 */ "mabbbbbbbam" + /* 8 */ "mabbbbbbbam" + /* 9 */ "mabbbbbbbam" + /* 10 */ "mabbbbbbbam" + /* 11 */ "maaaaaaaaam" + /* 12 */ "mmmmmmmmmmm" + + // Level 2 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." + /* 1 */ ".deeeeeeed." + /* 2 */ ".efffffffe." + /* 3 */ ".efffffffe." + /* 4 */ ".efffffffe." + /* 5 */ ".efgggggfe." + /* 6 */ ".eg.....ge." + /* 7 */ ".efgggggfe." + /* 8 */ ".efffffffe." + /* 9 */ ".efffffffe." + /* 10 */ ".efffffffe." + /* 11 */ ".deeeeeeed." + /* 12 */ "..........." + + // Level 3 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." + /* 1 */ ".h.......h." + /* 2 */ "..........." + /* 3 */ "..........." + /* 4 */ "..........." + /* 5 */ "...ggggg..." + /* 6 */ "..g.....g.." + /* 7 */ "...ggggg..." + /* 8 */ "..........." + /* 9 */ "..........." + /* 10 */ "..........." + /* 11 */ ".h.......h." + /* 12 */ "..........." + + // Level 4 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." + /* 1 */ ".h.......h." + /* 2 */ "..........." + /* 3 */ "..........." + /* 4 */ "..........." + /* 5 */ "...ggggg..." + /* 6 */ "..g.....g.." + /* 7 */ "...ggggg..." + /* 8 */ "..........." + /* 9 */ "..........." + /* 10 */ "..........." + /* 11 */ ".h.......h." + /* 12 */ "..........." + + // Level 5 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." + /* 1 */ ".h.......h." + /* 2 */ "..........." + /* 3 */ "..........." + /* 4 */ "..........." + /* 5 */ "..........." + /* 6 */ "..........." + /* 7 */ "..........." + /* 8 */ "..........." + /* 9 */ "..........." + /* 10 */ "..........." + /* 11 */ ".h.......h." + /* 12 */ "..........." + + // Level 6 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ ".h.......h." + /* 1 */ "hhh.....hhh" + /* 2 */ ".h.......h." + /* 3 */ "..........." + /* 4 */ "..........." + /* 5 */ "..........." + /* 6 */ "..........." + /* 7 */ "..........." + /* 8 */ "..........." + /* 9 */ "..........." + /* 10 */ ".h.......h." + /* 11 */ "hhh.....hhh" + /* 12 */ ".h.......h.", + + // Connectors: + "-1: 10, 2, 6: 5\n" /* Type -1, direction X+ */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + true, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // Farm + + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Forge: // The data has been exported from the gallery Plains, area index 79, ID 145, created by Aloe_vera { @@ -2025,12 +2195,12 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] = // Level 1 /* z\x* 0123456 */ - /* 0 */ "bbbbbbb" - /* 1 */ "bbbbbbb" - /* 2 */ "bbbbbbb" - /* 3 */ "bbbabbb" - /* 4 */ "bbbbbbb" - /* 5 */ "bbbbbbb" + /* 0 */ "bmmmmmm" + /* 1 */ "bmmmmmm" + /* 2 */ "bmmmmmm" + /* 3 */ "bmmmmmm" + /* 4 */ "bmmmmmm" + /* 5 */ "bmmmmmm" /* 6 */ "bbbbbbb" // Level 2 @@ -3005,159 +3175,157 @@ const cPrefab::sDef g_JapaneseVillageStartingPrefabs[] = "a: 1: 0\n" /* stone */ "b: 4: 0\n" /* cobblestone */ "c: 8: 0\n" /* water */ - "d: 3: 0\n" /* dirt */ - "e: 2: 0\n" /* grass */ - "f: 13: 0\n" /* gravel */ - "g: 67: 1\n" /* stairs */ - "h: 67: 2\n" /* stairs */ - "i: 67: 0\n" /* stairs */ - "j: 67: 3\n" /* stairs */ - "k: 85: 0\n" /* fence */ - "l: 44: 8\n" /* step */ - "m: 19: 0\n" /* sponge */ - "n: 44: 0\n" /* step */ - "o: 43: 0\n" /* doubleslab */, + "d: 13: 0\n" /* gravel */ + "e: 67: 1\n" /* stairs */ + "f: 67: 2\n" /* stairs */ + "g: 67: 0\n" /* stairs */ + "h: 67: 3\n" /* stairs */ + "i: 85: 0\n" /* fence */ + "j: 44: 8\n" /* step */ + "k: 44: 0\n" /* step */ + "l: 43: 0\n" /* doubleslab */ + "m: 19: 0\n" /* sponge */, // Block data: // Level 0 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "aaaaaaa" - /* 2 */ "aaaaaaa" - /* 3 */ "aaaaaaa" - /* 4 */ "aaaaaaa" - /* 5 */ "aaaaaaa" - /* 6 */ "aaaaaaa" + /* 0 */ "mmmmmmm" + /* 1 */ "maaaaam" + /* 2 */ "maaaaam" + /* 3 */ "maaaaam" + /* 4 */ "maaaaam" + /* 5 */ "maaaaam" + /* 6 */ "mmmmmmm" // Level 1 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "abbbbba" - /* 2 */ "abcc.ba" - /* 3 */ "abcccba" - /* 4 */ "abcccba" - /* 5 */ "abbbbba" - /* 6 */ "aaaaaaa" + /* 0 */ "mmmmmmm" + /* 1 */ "mbbbbbm" + /* 2 */ "mbcc.bm" + /* 3 */ "mbcccbm" + /* 4 */ "mbcccbm" + /* 5 */ "mbbbbbm" + /* 6 */ "mmmmmmm" // Level 2 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "abbbbba" - /* 2 */ "abcccba" - /* 3 */ "abcccba" - /* 4 */ "abcccba" - /* 5 */ "abbbbba" - /* 6 */ "aaaaaaa" + /* 0 */ "mmmmmmm" + /* 1 */ "mbbbbbm" + /* 2 */ "mbcccbm" + /* 3 */ "mbcccbm" + /* 4 */ "mbcccbm" + /* 5 */ "mbbbbbm" + /* 6 */ "mmmmmmm" // Level 3 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "abbbbba" - /* 2 */ "abcccba" - /* 3 */ "abcccba" - /* 4 */ "abcccba" - /* 5 */ "abbbbba" - /* 6 */ "aaaaaaa" + /* 0 */ "mmmmmmm" + /* 1 */ "mbbbbbm" + /* 2 */ "mbcccbm" + /* 3 */ "mbcccbm" + /* 4 */ "mbcccbm" + /* 5 */ "mbbbbbm" + /* 6 */ "mmmmmmm" // Level 4 /* z\x* 0123456 */ - /* 0 */ "aaaaaaa" - /* 1 */ "abbbbba" - /* 2 */ "abcccba" - /* 3 */ "abcccba" - /* 4 */ "abcccba" - /* 5 */ "abbbbba" - /* 6 */ "aaaaaaa" + /* 0 */ "mmmmmmm" + /* 1 */ "mbbbbbm" + /* 2 */ "mbcccbm" + /* 3 */ "mbcccbm" + /* 4 */ "mbcccbm" + /* 5 */ "mbbbbbm" + /* 6 */ "mmmmmmm" // Level 5 /* z\x* 0123456 */ - /* 0 */ "ddddddd" - /* 1 */ "dbbbbbd" - /* 2 */ "dbcccbd" - /* 3 */ "dbcccbd" - /* 4 */ "dbcccbd" - /* 5 */ "dbbbbbd" - /* 6 */ "ddddddd" + /* 0 */ "mmmmmmm" + /* 1 */ "mbbbbbm" + /* 2 */ "mbcccbm" + /* 3 */ "mbcccbm" + /* 4 */ "mbcccbm" + /* 5 */ "mbbbbbm" + /* 6 */ "mmmmmmm" // Level 6 /* z\x* 0123456 */ - /* 0 */ "ddddddd" - /* 1 */ "dbbbbbd" - /* 2 */ "dbcccbd" - /* 3 */ "dbcccbd" - /* 4 */ "dbcccbd" - /* 5 */ "dbbbbbd" - /* 6 */ "ddddddd" + /* 0 */ "mmmmmmm" + /* 1 */ "mbbbbbm" + /* 2 */ "mbcccbm" + /* 3 */ "mbcccbm" + /* 4 */ "mbcccbm" + /* 5 */ "mbbbbbm" + /* 6 */ "mmmmmmm" // Level 7 /* z\x* 0123456 */ - /* 0 */ "ddddddd" - /* 1 */ "dbbbbbd" - /* 2 */ "dbcccbd" - /* 3 */ "dbcccbd" - /* 4 */ "dbcccbd" - /* 5 */ "dbbbbbd" - /* 6 */ "ddddddd" + /* 0 */ "mmbbbmm" + /* 1 */ "mbbbbbm" + /* 2 */ "bbcccbb" + /* 3 */ "bbcccbb" + /* 4 */ "bbcccbb" + /* 5 */ "mbbbbbm" + /* 6 */ "mmbbbmm" // Level 8 /* z\x* 0123456 */ - /* 0 */ "eefffee" - /* 1 */ "ebbbbbe" - /* 2 */ "fbcccbf" - /* 3 */ "fbcccbf" - /* 4 */ "fbcccbf" - /* 5 */ "ebbbbbe" - /* 6 */ "eefffee" + /* 0 */ "mmdddmm" + /* 1 */ "mbbbbbm" + /* 2 */ "dbcccbd" + /* 3 */ "dbcccbd" + /* 4 */ "dbcccbd" + /* 5 */ "mbbbbbm" + /* 6 */ "mmdddmm" // Level 9 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ ".bghib." - /* 2 */ ".j...j." - /* 3 */ ".i...g." - /* 4 */ ".h...h." - /* 5 */ ".bgjib." - /* 6 */ "......." + /* 0 */ "mm...mm" + /* 1 */ "mbefgbm" + /* 2 */ ".h...h." + /* 3 */ ".g...e." + /* 4 */ ".f...f." + /* 5 */ "mbehgbm" + /* 6 */ "mm...mm" // Level 10 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ ".k...k." + /* 0 */ "mm...mm" + /* 1 */ "mi...im" /* 2 */ "......." /* 3 */ "......." /* 4 */ "......." - /* 5 */ ".k...k." - /* 6 */ "......." + /* 5 */ "mi...im" + /* 6 */ "mm...mm" // Level 11 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ ".k...k." + /* 0 */ "mm...mm" + /* 1 */ "mi...im" /* 2 */ "......." /* 3 */ "......." /* 4 */ "......." - /* 5 */ ".k...k." - /* 6 */ "......." + /* 5 */ "mi...im" + /* 6 */ "mm...mm" // Level 12 /* z\x* 0123456 */ - /* 0 */ ".lnnnl." - /* 1 */ "loooool" - /* 2 */ "nooooon" - /* 3 */ "nooooon" - /* 4 */ "nooooon" - /* 5 */ "loooool" - /* 6 */ ".lnnnl." + /* 0 */ "mjkkkjm" + /* 1 */ "jlllllj" + /* 2 */ "klllllk" + /* 3 */ "klllllk" + /* 4 */ "klllllk" + /* 5 */ "jlllllj" + /* 6 */ "mjkkkjm" // Level 13 /* z\x* 0123456 */ - /* 0 */ "n.....n" + /* 0 */ "k.....k" /* 1 */ "......." - /* 2 */ "..nnn.." - /* 3 */ "..non.." - /* 4 */ "..nnn.." + /* 2 */ "..kkk.." + /* 3 */ "..klk.." + /* 4 */ "..kkk.." /* 5 */ "......." - /* 6 */ "n.....n", + /* 6 */ "k.....k", // Connectors: "2: 0, 9, 3: 4\n" /* Type 2, direction X- */ diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp index f5c5b7a20..9e5e06769 100644 --- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp +++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp @@ -362,29 +362,29 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = // Level 0 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "aaaaaaaaaaaaaaa" + /* 0 */ "aaaaaaabaaaaaaa" /* 1 */ "aaaaaaaaaaaaaaa" /* 2 */ "aaaaaaaaaaaaaaa" /* 3 */ "aaaaaaaaaaaaaaa" /* 4 */ "aaaaaaaaaaaaaaa" - /* 5 */ "aaaaaaaaaaaaaaa" - /* 6 */ "aaaaaaaaaaaaaaa" - /* 7 */ "aaaaaaaaaaaaaaa" - /* 8 */ "aaaaaaaaaaaaaaa" - - // Level 1 - /* z\x* 11111 */ - /* * 012345678901234 */ - /* 0 */ "aaaaaaabaaaaaaa" - /* 1 */ "aaaaaaabaaaaaaa" - /* 2 */ "aaaaaaabaaaaaaa" - /* 3 */ "aaaaaaabaaaaaaa" - /* 4 */ "aaaaaaabaaaaaaa" /* 5 */ "aaaaaaabaaaaaaa" /* 6 */ "aaaaaaabaaaaaaa" /* 7 */ "aaaaaaabaaaaaaa" /* 8 */ "aaaaaaabaaaaaaa" + // Level 1 + /* z\x* 11111 */ + /* * 012345678901234 */ + /* 0 */ "aaaaaaamaaaaaaa" + /* 1 */ "aaaaaaamaaaaaaa" + /* 2 */ "aaaaaaamaaaaaaa" + /* 3 */ "aaaaaaamaaaaaaa" + /* 4 */ "aaaaaaamaaaaaaa" + /* 5 */ "aaaaaaamaaaaaaa" + /* 6 */ "aaaaaaamaaaaaaa" + /* 7 */ "aaaaaaamaaaaaaa" + /* 8 */ "aaaaaaamaaaaaaa" + // Level 2 /* z\x* 11111 */ /* * 012345678901234 */ @@ -509,12 +509,12 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = "d: 67: 1\n" /* stairs */ "e: 17: 0\n" /* tree */ "f: 5: 0\n" /* wood */ - "g: 64: 6\n" /* wooddoorblock */ + "g: 64: 2\n" /* wooddoorblock */ "h: 10: 0\n" /* lava */ "i: 54: 2\n" /* chest */ "j: 61: 2\n" /* furnace */ "k:102: 0\n" /* glasspane */ - "l: 64:12\n" /* wooddoorblock */ + "l: 64: 8\n" /* wooddoorblock */ "m: 19: 0\n" /* sponge */ "n:139: 0\n" /* cobblestonewall */ "o:101: 0\n" /* ironbars */ @@ -2544,7 +2544,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = true, // DefaultWeight: - 100, + 20, // DepthWeight: "", @@ -2746,8 +2746,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = "d: 67: 1\n" /* stairs */ "e: 17: 0\n" /* tree */ "f: 5: 0\n" /* wood */ - "g: 64: 7\n" /* wooddoorblock */ - "h: 64:12\n" /* wooddoorblock */ + "g: 64: 3\n" /* wooddoorblock */ + "h: 64: 8\n" /* wooddoorblock */ "i:102: 0\n" /* glasspane */ "j: 53: 2\n" /* woodstairs */ "k: 53: 7\n" /* woodstairs */ @@ -3000,9 +3000,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = "d: 67: 1\n" /* stairs */ "e: 17: 0\n" /* tree */ "f: 5: 0\n" /* wood */ - "g: 64: 7\n" /* wooddoorblock */ + "g: 64: 3\n" /* wooddoorblock */ "h:102: 0\n" /* glasspane */ - "i: 64:12\n" /* wooddoorblock */ + "i: 64: 8\n" /* wooddoorblock */ "j: 53: 2\n" /* woodstairs */ "k: 53: 7\n" /* woodstairs */ "l: 50: 3\n" /* torch */ @@ -3141,31 +3141,32 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = "k: 85: 0\n" /* fence */ "l: 53: 0\n" /* woodstairs */ "m: 19: 0\n" /* sponge */ - "n: 64: 6\n" /* wooddoorblock */ + "n: 64: 2\n" /* wooddoorblock */ "o: 64: 4\n" /* wooddoorblock */ "p:102: 0\n" /* glasspane */ "q: 72: 0\n" /* woodplate */ - "r: 64:12\n" /* wooddoorblock */ - "s: 53: 5\n" /* woodstairs */ - "t: 53: 4\n" /* woodstairs */ - "u: 50: 1\n" /* torch */ - "v: 50: 2\n" /* torch */, + "r: 64: 8\n" /* wooddoorblock */ + "s: 64:12\n" /* wooddoorblock */ + "t: 53: 5\n" /* woodstairs */ + "u: 53: 4\n" /* woodstairs */ + "v: 50: 1\n" /* torch */ + "w: 50: 2\n" /* torch */, // Block data: // Level 0 /* z\x* */ /* * 0123456789 */ - /* 0 */ ".........." - /* 1 */ ".aaaaa...." - /* 2 */ ".aaaaa...." - /* 3 */ ".aaaaabbbb" + /* 0 */ "mmmmmmmmmm" + /* 1 */ "maaaaammmm" + /* 2 */ "maaaaammmm" + /* 3 */ "maaaaabbbb" /* 4 */ "aaaaaabbbb" /* 5 */ "aaaaaabbbb" /* 6 */ "aaaaaabbbb" - /* 7 */ ".aaaaabbbb" - /* 8 */ ".aaaaabbbb" - /* 9 */ ".aaaaa...." - /* 10 */ ".........." + /* 7 */ "maaaaabbbb" + /* 8 */ "maaaaabbbb" + /* 9 */ "maaaaammmm" + /* 10 */ "mmmmmmmmmm" // Level 1 /* z\x* */ @@ -3205,7 +3206,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 2 */ ".p.q.pmmmm" /* 3 */ ".p...p...." /* 4 */ ".c...c...." - /* 5 */ ".r...r...." + /* 5 */ ".r...s...." /* 6 */ ".c...c...." /* 7 */ ".p...p...." /* 8 */ ".p...p...." @@ -3215,47 +3216,47 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = // Level 4 /* z\x* */ /* * 0123456789 */ - /* 0 */ "ls...tjmmm" + /* 0 */ "lt...ujmmm" /* 1 */ "licccijmmm" /* 2 */ "lc...cjmmm" /* 3 */ "lc...cj..." - /* 4 */ "lcu.vcj..." + /* 4 */ "lcv.wcj..." /* 5 */ "lc...cj..." - /* 6 */ "lcu.vcj..." + /* 6 */ "lcv.wcj..." /* 7 */ "lc...cj..." /* 8 */ "lc...cj..." /* 9 */ "licccijmmm" - /* 10 */ "ls...tjmmm" + /* 10 */ "lt...ujmmm" // Level 5 /* z\x* */ /* * 0123456789 */ - /* 0 */ "mls.tjmmmm" - /* 1 */ "mlcccjmmmm" - /* 2 */ "mlc.cjmmmm" - /* 3 */ "mlc.cjm..." - /* 4 */ "mlc.cjm..." - /* 5 */ "mlc.cjm..." - /* 6 */ "mlc.cjm..." - /* 7 */ "mlc.cjm..." - /* 8 */ "mlc.cjm..." - /* 9 */ "mlcccjmmmm" - /* 10 */ "mls.tjmmmm" + /* 0 */ ".lt.uj.mmm" + /* 1 */ ".lcccj.mmm" + /* 2 */ ".lc.cj.mmm" + /* 3 */ ".lc.cj...." + /* 4 */ ".lc.cj...." + /* 5 */ ".lc.cj...." + /* 6 */ ".lc.cj...." + /* 7 */ ".lc.cj...." + /* 8 */ ".lc.cj...." + /* 9 */ ".lcccj.mmm" + /* 10 */ ".lt.uj.mmm" // Level 6 /* z\x* */ /* * 0123456789 */ - /* 0 */ "mmlcjmmmmm" - /* 1 */ "mmlcjmmmmm" - /* 2 */ "mmlcjmmmmm" - /* 3 */ "mmlcjmm..." - /* 4 */ "mmlcjmm..." - /* 5 */ "mmlcjmm..." - /* 6 */ "mmlcjmm..." - /* 7 */ "mmlcjmm..." - /* 8 */ "mmlcjmm..." - /* 9 */ "mmlcjmmmmm" - /* 10 */ "mmlcjmmmmm", + /* 0 */ "..lcj..mmm" + /* 1 */ "..lcj..mmm" + /* 2 */ "..lcj..mmm" + /* 3 */ "..lcj....." + /* 4 */ "..lcj....." + /* 5 */ "..lcj....." + /* 6 */ "..lcj....." + /* 7 */ "..lcj....." + /* 8 */ "..lcj....." + /* 9 */ "..lcj..mmm" + /* 10 */ "..lcj..mmm", // Connectors: "-1: 0, 1, 5: 4\n" /* Type -1, direction X- */, @@ -3626,7 +3627,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "aaabbbbaaaa" + /* 0 */ "aaaabbbaaaa" /* 1 */ "abbbbbbbbba" /* 2 */ "abbbbbbbbba" /* 3 */ "abbbbbbbbba" @@ -4509,10 +4510,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 4 */ ".aaaaaaaaa." /* 5 */ ".aaaaaaaaa." /* 6 */ ".....aaaaa." - /* 7 */ ".....aaaaa." - /* 8 */ ".....aaaaa." - /* 9 */ ".....aaaaa." - /* 10 */ "..........." + /* 7 */ "mmmm.aaaaa." + /* 8 */ "mmmm.aaaaa." + /* 9 */ "mmmm.aaaaa." + /* 10 */ "mmmm......." // Level 2 /* z\x* 1 */ @@ -4524,10 +4525,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 4 */ ".f.......f." /* 5 */ ".efffe...f." /* 6 */ ".....f...f." - /* 7 */ ".....f...f." - /* 8 */ ".....f...f." - /* 9 */ ".....efffe." - /* 10 */ "..........." + /* 7 */ "mmmm.f...f." + /* 8 */ "mmmm.f...f." + /* 9 */ "mmmm.efffe." + /* 10 */ "mmmm......." // Level 3 /* z\x* 1 */ @@ -4539,10 +4540,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 4 */ ".h.......h." /* 5 */ ".ehhhe...f." /* 6 */ ".....h...h." - /* 7 */ ".....h...h." - /* 8 */ ".....h...h." - /* 9 */ ".....ehhhe." - /* 10 */ "..........." + /* 7 */ "mmmm.h...h." + /* 8 */ "mmmm.h...h." + /* 9 */ "mmmm.ehhhe." + /* 10 */ "mmmm......." // Level 4 /* z\x* 1 */ @@ -4554,10 +4555,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 4 */ ".f...o...fl" /* 5 */ "pfffffq.rfl" /* 6 */ "sssssf...fl" - /* 7 */ "....tf...fl" - /* 8 */ "....tf...fl" - /* 9 */ "....tfffffl" - /* 10 */ "....tu...vl" + /* 7 */ "mmmmtf...fl" + /* 8 */ "mmmmtf...fl" + /* 9 */ "mmmmtfffffl" + /* 10 */ "mmmmtu...vl" // Level 5 /* z\x* 1 */ @@ -4569,10 +4570,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 4 */ "pffffff.fl." /* 5 */ "ssssssf.fl." /* 6 */ ".....tf.fl." - /* 7 */ ".....tf.fl." - /* 8 */ ".....tf.fl." - /* 9 */ ".....tfffl." - /* 10 */ ".....tu.vl." + /* 7 */ "mmmm.tf.fl." + /* 8 */ "mmmm.tf.fl." + /* 9 */ "mmmm.tfffl." + /* 10 */ "mmmm.tu.vl." // Level 6 /* z\x* 1 */ @@ -4584,10 +4585,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 4 */ "sssssstfl.." /* 5 */ "......tfl.." /* 6 */ "......tfl.." - /* 7 */ "......tfl.." - /* 8 */ "......tfl.." - /* 9 */ "......tfl.." - /* 10 */ "......tfl..", + /* 7 */ "mmmm..tfl.." + /* 8 */ "mmmm..tfl.." + /* 9 */ "mmmm..tfl.." + /* 10 */ "mmmm..tfl..", // Connectors: "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */, @@ -4837,9 +4838,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = // Level 1 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".aaaaa..." /* 5 */ ".aaaaab.." @@ -4847,15 +4848,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".aaaaad.." /* 8 */ ".aaaaa..." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 2 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".efffe..." /* 5 */ ".f...f..." @@ -4863,15 +4864,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".f...f..." /* 8 */ ".efffe..." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 3 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".ejjje..." /* 5 */ ".j...f..." @@ -4879,15 +4880,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".j...f..." /* 8 */ ".ejjje..." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 4 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".efffe..." /* 5 */ ".f..nf..." @@ -4895,15 +4896,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".f..nf..k" /* 8 */ ".efffe..o" /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 5 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".epppe..." /* 5 */ ".q...q..." @@ -4911,15 +4912,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".q...q..k" /* 8 */ ".epppe..o" /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 6 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".efffe..." /* 5 */ ".f...f..." @@ -4927,15 +4928,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".f...f..o" /* 8 */ ".efffe..o" /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 7 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ ".ejjje..." /* 5 */ ".j...j..." @@ -4943,15 +4944,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".j...j..o" /* 8 */ ".ejjje..." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 8 /* z\x* 012345678 */ - /* 0 */ "........o" - /* 1 */ "........o" - /* 2 */ "........o" + /* 0 */ "mmmmmmm.o" + /* 1 */ "mmmmmmm.o" + /* 2 */ "mmmmmmm.o" /* 3 */ "........." /* 4 */ ".efffe..." /* 5 */ ".f...f..k" @@ -4959,15 +4960,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".f...f..o" /* 8 */ ".efffe..." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 9 /* z\x* 012345678 */ - /* 0 */ "........k" - /* 1 */ "........k" - /* 2 */ "........o" + /* 0 */ "mmmmmmm.k" + /* 1 */ "mmmmmmm.k" + /* 2 */ "mmmmmmm.o" /* 3 */ "........o" /* 4 */ ".epppe..o" /* 5 */ ".q...q..k" @@ -4975,15 +4976,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".q...q..k" /* 8 */ ".epppe..k" /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 10 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........k" + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.k" /* 3 */ "rrrrrrr.k" /* 4 */ "sfffffs.o" /* 5 */ ".f...f..o" @@ -4991,15 +4992,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ ".f...f..o" /* 8 */ "tffffft.o" /* 9 */ "uuuuuuu.k" - /* 10 */ "........k" - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.k" + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 11 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ "rrrrrrr.k" /* 5 */ "sfffffs.k" @@ -5007,15 +5008,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ "tffffft.k" /* 8 */ "uuuuuuu.o" /* 9 */ "........o" - /* 10 */ "........o" - /* 11 */ "........k" - /* 12 */ "........k" + /* 10 */ "mmmmmmm.o" + /* 11 */ "mmmmmmm.k" + /* 12 */ "mmmmmmm.k" // Level 12 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ "........." /* 5 */ "rrrrrrr.o" @@ -5023,15 +5024,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ "uuuuuuu.k" /* 8 */ "........." /* 9 */ "........." - /* 10 */ "........o" - /* 11 */ "........o" - /* 12 */ "........o" + /* 10 */ "mmmmmmm.o" + /* 11 */ "mmmmmmm.o" + /* 12 */ "mmmmmmm.o" // Level 13 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ "........." /* 5 */ "........o" @@ -5039,15 +5040,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ "........." /* 8 */ "........." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 14 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ "........o" /* 5 */ "........o" @@ -5055,15 +5056,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ "........." /* 8 */ "........." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 15 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ "........o" /* 5 */ "........k" @@ -5071,15 +5072,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ "........." /* 8 */ "........." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ "........." + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm.." // Level 16 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ "........." - /* 2 */ "........." + /* 0 */ "mmmmmmm.." + /* 1 */ "mmmmmmm.." + /* 2 */ "mmmmmmm.." /* 3 */ "........." /* 4 */ "........o" /* 5 */ "........k" @@ -5087,9 +5088,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] = /* 7 */ "........." /* 8 */ "........." /* 9 */ "........." - /* 10 */ "........." - /* 11 */ "........." - /* 12 */ ".........", + /* 10 */ "mmmmmmm.." + /* 11 */ "mmmmmmm.." + /* 12 */ "mmmmmmm..", // Connectors: "-1: 8, 1, 6: 5\n" /* Type -1, direction X+ */, @@ -5472,13 +5473,15 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] = "l: 66: 7\n" /* tracks */ "m: 19: 0\n" /* sponge */ "n: 50: 2\n" /* torch */ - "o: 2: 0\n" /* grass */ - "p: 53: 2\n" /* woodstairs */ - "q: 77: 1\n" /* stonebutton */ - "r: 27: 0\n" /* poweredrail */ - "s: 53: 7\n" /* woodstairs */ - "t: 53: 6\n" /* woodstairs */ - "u: 53: 3\n" /* woodstairs */, + "o: 4: 0\n" /* cobblestone */ + "p: 2: 0\n" /* grass */ + "q: 13: 0\n" /* gravel */ + "r: 53: 2\n" /* woodstairs */ + "s: 77: 1\n" /* stonebutton */ + "t: 27: 0\n" /* poweredrail */ + "u: 53: 7\n" /* woodstairs */ + "v: 53: 6\n" /* woodstairs */ + "w: 53: 3\n" /* woodstairs */, // Block data: // Level 0 @@ -5783,28 +5786,28 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] = // Level 30 /* z\x* 0123456 */ - /* 0 */ "mmmmmmm" + /* 0 */ "mmooomm" /* 1 */ "mmmammm" - /* 2 */ "mm...mm" - /* 3 */ "ma..aam" - /* 4 */ "mmfgamm" + /* 2 */ "om...mo" + /* 3 */ "oa..aao" + /* 4 */ "omfgamo" /* 5 */ "mmmammm" - /* 6 */ "mmmmmmm" + /* 6 */ "mmooomm" // Level 31 /* z\x* 0123456 */ - /* 0 */ "ooomooo" - /* 1 */ "oaaaaao" - /* 2 */ "oa.aaao" - /* 3 */ "oa..iao" - /* 4 */ "oa..jao" - /* 5 */ "oaaaaao" - /* 6 */ "ooooooo" + /* 0 */ "ppqqqpp" + /* 1 */ "paaaaap" + /* 2 */ "qa.aaaq" + /* 3 */ "qa..iaq" + /* 4 */ "qa..jaq" + /* 5 */ "paaaaap" + /* 6 */ "ppqqqpp" // Level 32 /* z\x* 0123456 */ - /* 0 */ "...p..." - /* 1 */ ".aqrba." + /* 0 */ "...r..." + /* 1 */ ".astba." /* 2 */ "...fl.." /* 3 */ "......." /* 4 */ "......." @@ -5833,31 +5836,31 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] = // Level 35 /* z\x* 0123456 */ - /* 0 */ "ppppppp" - /* 1 */ "saaaaas" + /* 0 */ "rrrrrrr" + /* 1 */ "uaaaaau" /* 2 */ ".a...a." /* 3 */ ".a...a." /* 4 */ ".a...a." - /* 5 */ "taaaaat" - /* 6 */ "uuuuuuu" + /* 5 */ "vaaaaav" + /* 6 */ "wwwwwww" // Level 36 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "ppppppp" - /* 2 */ "saaaaas" + /* 1 */ "rrrrrrr" + /* 2 */ "uaaaaau" /* 3 */ ".aaaaa." - /* 4 */ "taaaaat" - /* 5 */ "uuuuuuu" + /* 4 */ "vaaaaav" + /* 5 */ "wwwwwww" /* 6 */ "......." // Level 37 /* z\x* 0123456 */ /* 0 */ "......." /* 1 */ "......." - /* 2 */ "ppppppp" + /* 2 */ "rrrrrrr" /* 3 */ "aaaaaaa" - /* 4 */ "uuuuuuu" + /* 4 */ "wwwwwww" /* 5 */ "......." /* 6 */ ".......", diff --git a/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp index 4f0efdcc6..44e947952 100644 --- a/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp +++ b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp @@ -20,18 +20,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 32, ID 173, created by Aloe_vera { // Size: - 12, 5, 10, // SizeX = 12, SizeY = 5, SizeZ = 10 + 12, 6, 10, // SizeX = 12, SizeY = 6, SizeZ = 10 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 11, 4, 9, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 12, 5, 10, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 2\n" /* sandstonestairs */ - "b:128: 1\n" /* sandstonestairs */ - "c:128: 0\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e:128: 3\n" /* sandstonestairs */ "f:171:15\n" /* carpet */ "g: 64: 6\n" /* wooddoorblock */ @@ -54,35 +54,49 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Level 0 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ "aaaaaab....." - /* 1 */ "cdddddddddd." - /* 2 */ "cdddddddddd." - /* 3 */ "cdddddddddd." - /* 4 */ "cdddddddddd." - /* 5 */ "edddddddddd." - /* 6 */ ".dddddddddd." - /* 7 */ ".dddddddddd." - /* 8 */ ".dddddddddd." - /* 9 */ "............" + /* 0 */ "aaaaaaammmmm" + /* 1 */ "aaaaaaaaaaam" + /* 2 */ "aaaaaaaaaaam" + /* 3 */ "aaaaaaaaaaam" + /* 4 */ "aaaaaaaaaaam" + /* 5 */ "aaaaaaaaaaam" + /* 6 */ "maaaaaaaaaam" + /* 7 */ "maaaaaaaaaam" + /* 8 */ "maaaaaaaaaam" + /* 9 */ "mmmmmmmmmmmm" // Level 1 /* z\x* 11 */ /* * 012345678901 */ - /* 0 */ "............" - /* 1 */ ".d....ddddd." - /* 2 */ "......dfffd." - /* 3 */ "......ghfhd." - /* 4 */ "......diiid." - /* 5 */ ".d....dhfhd." - /* 6 */ ".djddjdfffd." - /* 7 */ ".ddkkddl..d." - /* 8 */ ".dddddddddd." + /* 0 */ "bcccccd....." + /* 1 */ "baaaaaaaaaa." + /* 2 */ "baaaaaaaaaa." + /* 3 */ "baaaaaaaaaa." + /* 4 */ "baaaaaaaaaa." + /* 5 */ "eaaaaaaaaaa." + /* 6 */ ".aaaaaaaaaa." + /* 7 */ ".aaaaaaaaaa." + /* 8 */ ".aaaaaaaaaa." /* 9 */ "............" // Level 2 /* z\x* 11 */ /* * 012345678901 */ /* 0 */ "............" + /* 1 */ ".a....aaaaa." + /* 2 */ "......afffa." + /* 3 */ "......ghfha." + /* 4 */ "......aiiia." + /* 5 */ ".a....ahfha." + /* 6 */ ".ajaajafffa." + /* 7 */ ".aakkaal..a." + /* 8 */ ".aaaaaaaaaa." + /* 9 */ "............" + + // Level 3 + /* z\x* 11 */ + /* * 012345678901 */ + /* 0 */ "............" /* 1 */ ".n....nn.nn." /* 2 */ "......n...n." /* 3 */ "......o...n." @@ -93,36 +107,36 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 8 */ ".nnn.nnn.nn." /* 9 */ "............" - // Level 3 + // Level 4 /* z\x* 11 */ /* * 012345678901 */ /* 0 */ "............" - /* 1 */ ".d....ddddd." - /* 2 */ "......d...d." - /* 3 */ "......d...d." - /* 4 */ "......dp..d." - /* 5 */ ".d....d...d." - /* 6 */ ".dqqqqd...d." - /* 7 */ ".d....d...d." - /* 8 */ ".dddddddddd." + /* 1 */ ".a....aaaaa." + /* 2 */ "......a...a." + /* 3 */ "......a...a." + /* 4 */ "......ap..a." + /* 5 */ ".a....a...a." + /* 6 */ ".aqqqqa...a." + /* 7 */ ".a....a...a." + /* 8 */ ".aaaaaaaaaa." /* 9 */ "............" - // Level 4 + // Level 5 /* z\x* 11 */ /* * 012345678901 */ /* 0 */ "rsssssssssss" - /* 1 */ "rddddddddddt" - /* 2 */ "rddddddddddt" - /* 3 */ "rddddddddddt" - /* 4 */ "rddddddddddt" - /* 5 */ "rddddddddddt" - /* 6 */ "rddddddddddt" - /* 7 */ "rddddddddddt" - /* 8 */ "rddddddddddt" + /* 1 */ "raaaaaaaaaat" + /* 2 */ "raaaaaaaaaat" + /* 3 */ "raaaaaaaaaat" + /* 4 */ "raaaaaaaaaat" + /* 5 */ "raaaaaaaaaat" + /* 6 */ "raaaaaaaaaat" + /* 7 */ "raaaaaaaaaat" + /* 8 */ "raaaaaaaaaat" /* 9 */ "uuuuuuuuuuut", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -153,18 +167,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 31, ID 172, created by Aloe_vera { // Size: - 13, 5, 9, // SizeX = 13, SizeY = 5, SizeZ = 9 + 13, 6, 9, // SizeX = 13, SizeY = 6, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 12, 4, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 13, 5, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171: 0\n" /* carpet */ "g:171:15\n" /* carpet */ @@ -185,33 +199,46 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Level 0 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "..abc........" - /* 1 */ ".ddddddddddd." - /* 2 */ ".ddddddddddd." - /* 3 */ ".ddddddddddd." - /* 4 */ ".ddddddddddd." - /* 5 */ ".ddddddddddd." - /* 6 */ ".ddddddddddd." - /* 7 */ ".ddddddddddd." - /* 8 */ "............." + /* 0 */ "mmaaammmmmmmm" + /* 1 */ "maaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaam" + /* 6 */ "maaaaaaaaaaam" + /* 7 */ "maaaaaaaaaaam" + /* 8 */ "mmmmmmmmmmmmm" // Level 1 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "............." - /* 1 */ ".ddedddddddd." - /* 2 */ ".dffgggggffd." - /* 3 */ ".dfghhhhhgfd." - /* 4 */ ".dfghfffhgfd." - /* 5 */ ".dfghhhhhgfd." - /* 6 */ ".dffgggggffd." - /* 7 */ ".ddddddddddd." + /* 0 */ "..bcd........" + /* 1 */ ".aaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaa." + /* 6 */ ".aaaaaaaaaaa." + /* 7 */ ".aaaaaaaaaaa." /* 8 */ "............." // Level 2 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." + /* 1 */ ".aaeaaaaaaaa." + /* 2 */ ".affgggggffa." + /* 3 */ ".afghhhhhgfa." + /* 4 */ ".afghfffhgfa." + /* 5 */ ".afghhhhhgfa." + /* 6 */ ".affgggggffa." + /* 7 */ ".aaaaaaaaaaa." + /* 8 */ "............." + + // Level 3 + /* z\x* 111 */ + /* * 0123456789012 */ + /* 0 */ "............." /* 1 */ ".iiji.iii.ii." /* 2 */ ".i.........i." /* 3 */ ".i.........i." @@ -221,34 +248,34 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 7 */ ".ii.ii.ii.ii." /* 8 */ "............." - // Level 3 + // Level 4 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." - /* 1 */ ".ddddddddddd." - /* 2 */ ".d..k..k...d." - /* 3 */ ".d.........d." - /* 4 */ ".dl.......nd." - /* 5 */ ".d.........d." - /* 6 */ ".d....o....d." - /* 7 */ ".ddddddddddd." + /* 1 */ ".aaaaaaaaaaa." + /* 2 */ ".a..k..k...a." + /* 3 */ ".a.........a." + /* 4 */ ".al.......na." + /* 5 */ ".a.........a." + /* 6 */ ".a....o....a." + /* 7 */ ".aaaaaaaaaaa." /* 8 */ "............." - // Level 4 + // Level 5 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "pqqqqqqqqqqqq" - /* 1 */ "pdddddddddddr" - /* 2 */ "pdddddddddddr" - /* 3 */ "pdddddddddddr" - /* 4 */ "pdddddddddddr" - /* 5 */ "pdddddddddddr" - /* 6 */ "pdddddddddddr" - /* 7 */ "pdddddddddddr" + /* 1 */ "paaaaaaaaaaar" + /* 2 */ "paaaaaaaaaaar" + /* 3 */ "paaaaaaaaaaar" + /* 4 */ "paaaaaaaaaaar" + /* 5 */ "paaaaaaaaaaar" + /* 6 */ "paaaaaaaaaaar" + /* 7 */ "paaaaaaaaaaar" /* 8 */ "ssssssssssssr", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -279,18 +306,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 25, ID 166, created by Aloe_vera { // Size: - 7, 5, 6, // SizeX = 7, SizeY = 5, SizeZ = 6 + 7, 6, 6, // SizeX = 7, SizeY = 6, SizeZ = 6 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 6, 4, 5, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 7, 5, 6, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171: 0\n" /* carpet */ "g:171:14\n" /* carpet */ @@ -306,51 +333,60 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Block data: // Level 0 /* z\x* 0123456 */ - /* 0 */ "..abc.." - /* 1 */ ".ddddd." - /* 2 */ ".ddddd." - /* 3 */ ".ddddd." - /* 4 */ ".ddddd." - /* 5 */ "......." + /* 0 */ "mmaaamm" + /* 1 */ "maaaaam" + /* 2 */ "maaaaam" + /* 3 */ "maaaaam" + /* 4 */ "maaaaam" + /* 5 */ "mmmmmmm" // Level 1 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ ".ddedd." - /* 2 */ ".dfgfd." - /* 3 */ ".dfgfd." - /* 4 */ ".ddddd." + /* 0 */ "..bcd.." + /* 1 */ ".aaaaa." + /* 2 */ ".aaaaa." + /* 3 */ ".aaaaa." + /* 4 */ ".aaaaa." /* 5 */ "......." // Level 2 /* z\x* 0123456 */ /* 0 */ "......." + /* 1 */ ".aaeaa." + /* 2 */ ".afgfa." + /* 3 */ ".afgfa." + /* 4 */ ".aaaaa." + /* 5 */ "......." + + // Level 3 + /* z\x* 0123456 */ + /* 0 */ "......." /* 1 */ ".hhihh." /* 2 */ ".h...h." /* 3 */ ".h...h." /* 4 */ ".hh.hh." /* 5 */ "......." - // Level 3 + // Level 4 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ ".ddddd." - /* 2 */ ".dj.jd." - /* 3 */ ".d...d." - /* 4 */ ".ddddd." + /* 1 */ ".aaaaa." + /* 2 */ ".aj.ja." + /* 3 */ ".a...a." + /* 4 */ ".aaaaa." /* 5 */ "......." - // Level 4 + // Level 5 /* z\x* 0123456 */ /* 0 */ "kllllln" - /* 1 */ "kdddddn" - /* 2 */ "kdddddn" - /* 3 */ "kdddddn" - /* 4 */ "kdddddn" + /* 1 */ "kaaaaan" + /* 2 */ "kaaaaan" + /* 3 */ "kaaaaan" + /* 4 */ "kaaaaan" /* 5 */ "oooooon", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -381,18 +417,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 26, ID 167, created by Aloe_vera { // Size: - 7, 5, 7, // SizeX = 7, SizeY = 5, SizeZ = 7 + 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 6, 4, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 7, 5, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171: 0\n" /* carpet */ "g:171:15\n" /* carpet */ @@ -409,27 +445,37 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Block data: // Level 0 /* z\x* 0123456 */ - /* 0 */ "..abc.." - /* 1 */ ".ddddd." - /* 2 */ ".ddddd." - /* 3 */ ".ddddd." - /* 4 */ ".ddddd." - /* 5 */ ".ddddd." - /* 6 */ "......." + /* 0 */ "mmaaamm" + /* 1 */ "maaaaam" + /* 2 */ "maaaaam" + /* 3 */ "maaaaam" + /* 4 */ "maaaaam" + /* 5 */ "maaaaam" + /* 6 */ "mmmmmmm" // Level 1 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ ".ddedd." - /* 2 */ ".dfffd." - /* 3 */ ".dghgd." - /* 4 */ ".dfffd." - /* 5 */ ".ddddd." + /* 0 */ "..bcd.." + /* 1 */ ".aaaaa." + /* 2 */ ".aaaaa." + /* 3 */ ".aaaaa." + /* 4 */ ".aaaaa." + /* 5 */ ".aaaaa." /* 6 */ "......." // Level 2 /* z\x* 0123456 */ /* 0 */ "......." + /* 1 */ ".aaeaa." + /* 2 */ ".afffa." + /* 3 */ ".aghga." + /* 4 */ ".afffa." + /* 5 */ ".aaaaa." + /* 6 */ "......." + + // Level 3 + /* z\x* 0123456 */ + /* 0 */ "......." /* 1 */ ".iijii." /* 2 */ ".i...i." /* 3 */ "......." @@ -437,28 +483,28 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 5 */ ".ii.ii." /* 6 */ "......." - // Level 3 + // Level 4 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ ".ddddd." - /* 2 */ ".dk.kd." - /* 3 */ ".d...d." - /* 4 */ ".d...d." - /* 5 */ ".ddddd." + /* 1 */ ".aaaaa." + /* 2 */ ".ak.ka." + /* 3 */ ".a...a." + /* 4 */ ".a...a." + /* 5 */ ".aaaaa." /* 6 */ "......." - // Level 4 + // Level 5 /* z\x* 0123456 */ /* 0 */ "lnnnnno" - /* 1 */ "ldddddo" - /* 2 */ "ldddddo" - /* 3 */ "ldddddo" - /* 4 */ "ldddddo" - /* 5 */ "ldddddo" + /* 1 */ "laaaaao" + /* 2 */ "laaaaao" + /* 3 */ "laaaaao" + /* 4 */ "laaaaao" + /* 5 */ "laaaaao" /* 6 */ "ppppppo", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -489,18 +535,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 27, ID 168, created by Aloe_vera { // Size: - 9, 5, 7, // SizeX = 9, SizeY = 5, SizeZ = 7 + 9, 6, 7, // SizeX = 9, SizeY = 6, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 8, 4, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 9, 5, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171:14\n" /* carpet */ "g:171: 0\n" /* carpet */ @@ -517,27 +563,37 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "..abc...." - /* 1 */ ".ddddddd." - /* 2 */ ".ddddddd." - /* 3 */ ".ddddddd." - /* 4 */ ".ddddddd." - /* 5 */ ".ddddddd." - /* 6 */ "........." + /* 0 */ "mmaaammmm" + /* 1 */ "maaaaaaam" + /* 2 */ "maaaaaaam" + /* 3 */ "maaaaaaam" + /* 4 */ "maaaaaaam" + /* 5 */ "maaaaaaam" + /* 6 */ "mmmmmmmmm" // Level 1 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ ".ddedddd." - /* 2 */ ".dfffffd." - /* 3 */ ".dghhhgd." - /* 4 */ ".dfffffd." - /* 5 */ ".ddddddd." + /* 0 */ "..bcd...." + /* 1 */ ".aaaaaaa." + /* 2 */ ".aaaaaaa." + /* 3 */ ".aaaaaaa." + /* 4 */ ".aaaaaaa." + /* 5 */ ".aaaaaaa." /* 6 */ "........." // Level 2 /* z\x* 012345678 */ /* 0 */ "........." + /* 1 */ ".aaeaaaa." + /* 2 */ ".afffffa." + /* 3 */ ".aghhhga." + /* 4 */ ".afffffa." + /* 5 */ ".aaaaaaa." + /* 6 */ "........." + + // Level 3 + /* z\x* 012345678 */ + /* 0 */ "........." /* 1 */ ".iiji.ii." /* 2 */ ".i.....i." /* 3 */ "........." @@ -545,28 +601,28 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 5 */ ".iii.iii." /* 6 */ "........." - // Level 3 + // Level 4 /* z\x* 012345678 */ /* 0 */ "........." - /* 1 */ ".ddddddd." - /* 2 */ ".dk.k..d." - /* 3 */ ".d.....d." - /* 4 */ ".d.....d." - /* 5 */ ".ddddddd." + /* 1 */ ".aaaaaaa." + /* 2 */ ".ak.k..a." + /* 3 */ ".a.....a." + /* 4 */ ".a.....a." + /* 5 */ ".aaaaaaa." /* 6 */ "........." - // Level 4 + // Level 5 /* z\x* 012345678 */ /* 0 */ "lnnnnnnnn" - /* 1 */ "ldddddddo" - /* 2 */ "ldddddddo" - /* 3 */ "ldddddddo" - /* 4 */ "ldddddddo" - /* 5 */ "ldddddddo" + /* 1 */ "laaaaaaao" + /* 2 */ "laaaaaaao" + /* 3 */ "laaaaaaao" + /* 4 */ "laaaaaaao" + /* 5 */ "laaaaaaao" /* 6 */ "ppppppppo", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -597,18 +653,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 28, ID 169, created by Aloe_vera { // Size: - 10, 5, 7, // SizeX = 10, SizeY = 5, SizeZ = 7 + 10, 6, 7, // SizeX = 10, SizeY = 6, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 9, 4, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 10, 5, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171: 0\n" /* carpet */ "g:171:14\n" /* carpet */ @@ -626,29 +682,40 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Level 0 /* z\x* */ /* * 0123456789 */ - /* 0 */ "..abc....." - /* 1 */ ".dddddddd." - /* 2 */ ".dddddddd." - /* 3 */ ".dddddddd." - /* 4 */ ".dddddddd." - /* 5 */ ".dddddddd." - /* 6 */ ".........." + /* 0 */ "mmaaammmmm" + /* 1 */ "maaaaaaaam" + /* 2 */ "maaaaaaaam" + /* 3 */ "maaaaaaaam" + /* 4 */ "maaaaaaaam" + /* 5 */ "maaaaaaaam" + /* 6 */ "mmmmmmmmmm" // Level 1 /* z\x* */ /* * 0123456789 */ - /* 0 */ ".........." - /* 1 */ ".ddeddddd." - /* 2 */ ".dfghhgfd." - /* 3 */ ".dfhffhfd." - /* 4 */ ".dfghhgfd." - /* 5 */ ".dddddddd." + /* 0 */ "..bcd....." + /* 1 */ ".aaaaaaaa." + /* 2 */ ".aaaaaaaa." + /* 3 */ ".aaaaaaaa." + /* 4 */ ".aaaaaaaa." + /* 5 */ ".aaaaaaaa." /* 6 */ ".........." // Level 2 /* z\x* */ /* * 0123456789 */ /* 0 */ ".........." + /* 1 */ ".aaeaaaaa." + /* 2 */ ".afghhgfa." + /* 3 */ ".afhffhfa." + /* 4 */ ".afghhgfa." + /* 5 */ ".aaaaaaaa." + /* 6 */ ".........." + + // Level 3 + /* z\x* */ + /* * 0123456789 */ + /* 0 */ ".........." /* 1 */ ".iijii.ii." /* 2 */ ".i......i." /* 3 */ ".........." @@ -656,30 +723,30 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 5 */ ".ii.ii.ii." /* 6 */ ".........." - // Level 3 + // Level 4 /* z\x* */ /* * 0123456789 */ /* 0 */ ".........." - /* 1 */ ".dddddddd." - /* 2 */ ".dk.k...d." - /* 3 */ ".d......d." - /* 4 */ ".d......d." - /* 5 */ ".dddddddd." + /* 1 */ ".aaaaaaaa." + /* 2 */ ".ak.k...a." + /* 3 */ ".a......a." + /* 4 */ ".a......a." + /* 5 */ ".aaaaaaaa." /* 6 */ ".........." - // Level 4 + // Level 5 /* z\x* */ /* * 0123456789 */ /* 0 */ "lnnnnnnnnn" - /* 1 */ "lddddddddo" - /* 2 */ "lddddddddo" - /* 3 */ "lddddddddo" - /* 4 */ "lddddddddo" - /* 5 */ "lddddddddo" + /* 1 */ "laaaaaaaao" + /* 2 */ "laaaaaaaao" + /* 3 */ "laaaaaaaao" + /* 4 */ "laaaaaaaao" + /* 5 */ "laaaaaaaao" /* 6 */ "pppppppppo", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -710,18 +777,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 29, ID 170, created by Aloe_vera { // Size: - 10, 5, 9, // SizeX = 10, SizeY = 5, SizeZ = 9 + 10, 6, 9, // SizeX = 10, SizeY = 6, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 9, 4, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 10, 5, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171: 0\n" /* carpet */ "g:171:14\n" /* carpet */ @@ -741,33 +808,46 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Level 0 /* z\x* */ /* * 0123456789 */ - /* 0 */ "..abc....." - /* 1 */ ".dddddddd." - /* 2 */ ".dddddddd." - /* 3 */ ".dddddddd." - /* 4 */ ".dddddddd." - /* 5 */ ".dddddddd." - /* 6 */ ".dddddddd." - /* 7 */ ".dddddddd." - /* 8 */ ".........." + /* 0 */ "mmaaammmmm" + /* 1 */ "maaaaaaaam" + /* 2 */ "maaaaaaaam" + /* 3 */ "maaaaaaaam" + /* 4 */ "maaaaaaaam" + /* 5 */ "maaaaaaaam" + /* 6 */ "maaaaaaaam" + /* 7 */ "maaaaaaaam" + /* 8 */ "mmmmmmmmmm" // Level 1 /* z\x* */ /* * 0123456789 */ - /* 0 */ ".........." - /* 1 */ ".ddeddddd." - /* 2 */ ".dfghhgfd." - /* 3 */ ".dfhffhfd." - /* 4 */ ".dfhgghfd." - /* 5 */ ".dfhffhfd." - /* 6 */ ".dfghhgfd." - /* 7 */ ".dddddddd." + /* 0 */ "..bcd....." + /* 1 */ ".aaaaaaaa." + /* 2 */ ".aaaaaaaa." + /* 3 */ ".aaaaaaaa." + /* 4 */ ".aaaaaaaa." + /* 5 */ ".aaaaaaaa." + /* 6 */ ".aaaaaaaa." + /* 7 */ ".aaaaaaaa." /* 8 */ ".........." // Level 2 /* z\x* */ /* * 0123456789 */ /* 0 */ ".........." + /* 1 */ ".aaeaaaaa." + /* 2 */ ".afghhgfa." + /* 3 */ ".afhffhfa." + /* 4 */ ".afhgghfa." + /* 5 */ ".afhffhfa." + /* 6 */ ".afghhgfa." + /* 7 */ ".aaaaaaaa." + /* 8 */ ".........." + + // Level 3 + /* z\x* */ + /* * 0123456789 */ + /* 0 */ ".........." /* 1 */ ".iijii.ii." /* 2 */ ".i......i." /* 3 */ ".i......i." @@ -777,34 +857,34 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 7 */ ".ii.ii.ii." /* 8 */ ".........." - // Level 3 + // Level 4 /* z\x* */ /* * 0123456789 */ /* 0 */ ".........." - /* 1 */ ".dddddddd." - /* 2 */ ".d..k...d." - /* 3 */ ".d......d." - /* 4 */ ".dl....nd." - /* 5 */ ".d......d." - /* 6 */ ".d......d." - /* 7 */ ".dddddddd." + /* 1 */ ".aaaaaaaa." + /* 2 */ ".a..k...a." + /* 3 */ ".a......a." + /* 4 */ ".al....na." + /* 5 */ ".a......a." + /* 6 */ ".a......a." + /* 7 */ ".aaaaaaaa." /* 8 */ ".........." - // Level 4 + // Level 5 /* z\x* */ /* * 0123456789 */ /* 0 */ "oppppppppp" - /* 1 */ "oddddddddq" - /* 2 */ "oddddddddq" - /* 3 */ "oddddddddq" - /* 4 */ "oddddddddq" - /* 5 */ "oddddddddq" - /* 6 */ "oddddddddq" - /* 7 */ "oddddddddq" + /* 1 */ "oaaaaaaaaq" + /* 2 */ "oaaaaaaaaq" + /* 3 */ "oaaaaaaaaq" + /* 4 */ "oaaaaaaaaq" + /* 5 */ "oaaaaaaaaq" + /* 6 */ "oaaaaaaaaq" + /* 7 */ "oaaaaaaaaq" /* 8 */ "rrrrrrrrrq", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -835,18 +915,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 30, ID 171, created by Aloe_vera { // Size: - 11, 5, 9, // SizeX = 11, SizeY = 5, SizeZ = 9 + 11, 6, 9, // SizeX = 11, SizeY = 6, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 10, 4, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 11, 5, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:171: 0\n" /* carpet */ "g:171:15\n" /* carpet */ @@ -867,33 +947,46 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..abc......" - /* 1 */ ".ddddddddd." - /* 2 */ ".ddddddddd." - /* 3 */ ".ddddddddd." - /* 4 */ ".ddddddddd." - /* 5 */ ".ddddddddd." - /* 6 */ ".ddddddddd." - /* 7 */ ".ddddddddd." - /* 8 */ "..........." + /* 0 */ "mmaaammmmmm" + /* 1 */ "maaaaaaaaam" + /* 2 */ "maaaaaaaaam" + /* 3 */ "maaaaaaaaam" + /* 4 */ "maaaaaaaaam" + /* 5 */ "maaaaaaaaam" + /* 6 */ "maaaaaaaaam" + /* 7 */ "maaaaaaaaam" + /* 8 */ "mmmmmmmmmmm" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..........." - /* 1 */ ".ddedddddd." - /* 2 */ ".dffgggffd." - /* 3 */ ".dfghhhgfd." - /* 4 */ ".dfghfhgfd." - /* 5 */ ".dfghhhgfd." - /* 6 */ ".dffgggffd." - /* 7 */ ".ddddddddd." + /* 0 */ "..bcd......" + /* 1 */ ".aaaaaaaaa." + /* 2 */ ".aaaaaaaaa." + /* 3 */ ".aaaaaaaaa." + /* 4 */ ".aaaaaaaaa." + /* 5 */ ".aaaaaaaaa." + /* 6 */ ".aaaaaaaaa." + /* 7 */ ".aaaaaaaaa." /* 8 */ "..........." // Level 2 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." + /* 1 */ ".aaeaaaaaa." + /* 2 */ ".affgggffa." + /* 3 */ ".afghhhgfa." + /* 4 */ ".afghfhgfa." + /* 5 */ ".afghhhgfa." + /* 6 */ ".affgggffa." + /* 7 */ ".aaaaaaaaa." + /* 8 */ "..........." + + // Level 3 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." /* 1 */ ".iijii.iii." /* 2 */ ".i.......i." /* 3 */ ".i.......i." @@ -903,34 +996,34 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 7 */ ".ii.iii.ii." /* 8 */ "..........." - // Level 3 + // Level 4 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." - /* 1 */ ".ddddddddd." - /* 2 */ ".d..k....d." - /* 3 */ ".d.......d." - /* 4 */ ".dl.....nd." - /* 5 */ ".d.......d." - /* 6 */ ".d...o...d." - /* 7 */ ".ddddddddd." + /* 1 */ ".aaaaaaaaa." + /* 2 */ ".a..k....a." + /* 3 */ ".a.......a." + /* 4 */ ".al.....na." + /* 5 */ ".a.......a." + /* 6 */ ".a...o...a." + /* 7 */ ".aaaaaaaaa." /* 8 */ "..........." - // Level 4 + // Level 5 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "pqqqqqqqqqq" - /* 1 */ "pdddddddddr" - /* 2 */ "pdddddddddr" - /* 3 */ "pdddddddddr" - /* 4 */ "pdddddddddr" - /* 5 */ "pdddddddddr" - /* 6 */ "pdddddddddr" - /* 7 */ "pdddddddddr" + /* 1 */ "paaaaaaaaar" + /* 2 */ "paaaaaaaaar" + /* 3 */ "paaaaaaaaar" + /* 4 */ "paaaaaaaaar" + /* 5 */ "paaaaaaaaar" + /* 6 */ "paaaaaaaaar" + /* 7 */ "paaaaaaaaar" /* 8 */ "ssssssssssr", // Connectors: - "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -961,18 +1054,18 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 53, ID 345, created by jakibaki { // Size: - 15, 5, 14, // SizeX = 15, SizeY = 5, SizeZ = 14 + 15, 6, 14, // SizeX = 15, SizeY = 6, SizeZ = 14 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 14, 4, 13, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 15, 5, 14, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 43: 1\n" /* doubleslab */ "f: 64: 7\n" /* wooddoorblock */ "g:171: 0\n" /* carpet */ @@ -995,43 +1088,61 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = // Level 0 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "...abc........." - /* 1 */ ".ddddddddddddd." - /* 2 */ ".ddddddddddddd." - /* 3 */ ".ddddddddddddd." - /* 4 */ ".ddddddddddddd." - /* 5 */ ".ddddddddddded." - /* 6 */ ".ddddddddddddd." - /* 7 */ ".ddddddddddddd." - /* 8 */ ".......deddddd." - /* 9 */ "mmmmmm.ddddddd." - /* 10 */ "mmmmmm.ddddddd." - /* 11 */ "mmmmmm.ddddddd." - /* 12 */ "mmmmmm.ddddddd." - /* 13 */ "..............." + /* 0 */ "mmmaaammmmmmmmm" + /* 1 */ "maaaaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaaaam" + /* 6 */ "maaaaaaaaaaaaam" + /* 7 */ "maaaaaaaaaaaaam" + /* 8 */ "mmmmmmmaaaaaaam" + /* 9 */ "mmmmmmmaaaaaaam" + /* 10 */ "mmmmmmmaaaaaaam" + /* 11 */ "mmmmmmmaaaaaaam" + /* 12 */ "mmmmmmmaaaaaaam" + /* 13 */ "mmmmmmmmmmmmmmm" // Level 1 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "..............." - /* 1 */ ".dddfddddddddd." - /* 2 */ ".dgghhhhhhhhgd." - /* 3 */ ".dghiiiiiiiihd." - /* 4 */ ".dghiggggggihd." - /* 5 */ ".dghiiiiiigihd." - /* 6 */ ".dgghhhhhigihd." - /* 7 */ ".dddddddhigihd." - /* 8 */ ".......dhigihd." - /* 9 */ "mmmmmm.dhiiihd." - /* 10 */ "mmmmmm.dghhhgd." - /* 11 */ "mmmmmm.dggggjd." - /* 12 */ "mmmmmm.ddddddd." + /* 0 */ "...bcd........." + /* 1 */ ".aaaaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaaea." + /* 6 */ ".aaaaaaaaaaaaa." + /* 7 */ ".aaaaaaaaaaaaa." + /* 8 */ ".......aeaaaaa." + /* 9 */ "mmmmmm.aaaaaaa." + /* 10 */ "mmmmmm.aaaaaaa." + /* 11 */ "mmmmmm.aaaaaaa." + /* 12 */ "mmmmmm.aaaaaaa." /* 13 */ "..............." // Level 2 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." + /* 1 */ ".aaafaaaaaaaaa." + /* 2 */ ".agghhhhhhhhga." + /* 3 */ ".aghiiiiiiiiha." + /* 4 */ ".aghiggggggiha." + /* 5 */ ".aghiiiiiigiha." + /* 6 */ ".agghhhhhigiha." + /* 7 */ ".aaaaaaahigiha." + /* 8 */ ".......ahigiha." + /* 9 */ "mmmmmm.ahiiiha." + /* 10 */ "mmmmmm.aghhhga." + /* 11 */ "mmmmmm.aggggja." + /* 12 */ "mmmmmm.aaaaaaa." + /* 13 */ "..............." + + // Level 3 + /* z\x* 11111 */ + /* * 012345678901234 */ + /* 0 */ "..............." /* 1 */ ".kkklkkkk.kkkk." /* 2 */ ".k...........k." /* 3 */ ".k...........k." @@ -1046,44 +1157,44 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = /* 12 */ "mmmmmm.kkk.kkk." /* 13 */ "..............." - // Level 3 + // Level 4 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." - /* 1 */ ".ddddddddddddd." - /* 2 */ ".d......n....d." - /* 3 */ ".d...........d." - /* 4 */ ".do..........d." - /* 5 */ ".d...........d." - /* 6 */ ".d..........pd." - /* 7 */ ".ddddddd.....d." - /* 8 */ ".......d.....d." - /* 9 */ "mmmmmm.d.....d." - /* 10 */ "mmmmmm.d.....d." - /* 11 */ "mmmmmm.d..q..d." - /* 12 */ "mmmmmm.ddddddd." + /* 1 */ ".aaaaaaaaaaaaa." + /* 2 */ ".a......n....a." + /* 3 */ ".a...........a." + /* 4 */ ".ao..........a." + /* 5 */ ".a...........a." + /* 6 */ ".a..........pa." + /* 7 */ ".aaaaaaa.....a." + /* 8 */ ".......a.....a." + /* 9 */ "mmmmmm.a.....a." + /* 10 */ "mmmmmm.a.....a." + /* 11 */ "mmmmmm.a..q..a." + /* 12 */ "mmmmmm.aaaaaaa." /* 13 */ "..............." - // Level 4 + // Level 5 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "rrrrrrrrrrrrrrs" - /* 1 */ "tddddddddddddds" - /* 2 */ "tddddddddddddds" - /* 3 */ "tddddddddddddds" - /* 4 */ "tddddddddddddds" - /* 5 */ "tddddddddddddds" - /* 6 */ "tddddddddddddds" - /* 7 */ "tddddddddddddds" - /* 8 */ "tuuuuutddddddds" - /* 9 */ "mmmmmmtddddddds" - /* 10 */ "mmmmmmtddddddds" - /* 11 */ "mmmmmmtddddddds" - /* 12 */ "mmmmmmtddddddds" + /* 1 */ "taaaaaaaaaaaaas" + /* 2 */ "taaaaaaaaaaaaas" + /* 3 */ "taaaaaaaaaaaaas" + /* 4 */ "taaaaaaaaaaaaas" + /* 5 */ "taaaaaaaaaaaaas" + /* 6 */ "taaaaaaaaaaaaas" + /* 7 */ "taaaaaaaaaaaaas" + /* 8 */ "tuuuuutaaaaaaas" + /* 9 */ "mmmmmmtaaaaaaas" + /* 10 */ "mmmmmmtaaaaaaas" + /* 11 */ "mmmmmmtaaaaaaas" + /* 12 */ "mmmmmmtaaaaaaas" /* 13 */ "......tuuuuuuuu", // Connectors: - "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1117,8 +1228,8 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 6, 5, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 7, 5, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ @@ -1227,8 +1338,8 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] = 14, 4, 16, // SizeX = 14, SizeY = 4, SizeZ = 16 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 13, 3, 15, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 14, 3, 16, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ diff --git a/src/Generating/Prefabs/SandVillagePrefabs.cpp b/src/Generating/Prefabs/SandVillagePrefabs.cpp index a062f8cd4..72881a678 100644 --- a/src/Generating/Prefabs/SandVillagePrefabs.cpp +++ b/src/Generating/Prefabs/SandVillagePrefabs.cpp @@ -20,11 +20,11 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 5, ID 75, created by tonibm1999 { // Size: - 13, 2, 9, // SizeX = 13, SizeY = 2, SizeZ = 9 + 13, 3, 9, // SizeX = 13, SizeY = 3, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 12, 1, 8, // MaxX, MaxY, MaxZ + -1, 0, -1, // MinX, MinY, MinZ + 13, 2, 8, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ @@ -40,6 +40,19 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "aaaaaaaaaaaaa" + /* 1 */ "aaaaaaaaaaaaa" + /* 2 */ "aaaaaaaaaaaaa" + /* 3 */ "aaaaaaaaaaaaa" + /* 4 */ "aaaaaaaaaaaaa" + /* 5 */ "aaaaaaaaaaaaa" + /* 6 */ "aaaaaaaaaaaaa" + /* 7 */ "aaaaaaaaaaaaa" + /* 8 */ "aaaaaaaaaaaaa" + + // Level 1 + /* z\x* 111 */ + /* * 0123456789012 */ + /* 0 */ "aaaaaaaaaaaaa" /* 1 */ "abbcbbabbcbba" /* 2 */ "abbcbbabbcbba" /* 3 */ "abbcbbabbcbba" @@ -49,21 +62,21 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 7 */ "abbcbbabbcbba" /* 8 */ "aaaaaaaaaaaaa" - // Level 1 + // Level 2 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "d.....d.....d" - /* 1 */ ".......ee.ee." - /* 2 */ ".......ee.ee." - /* 3 */ ".......ee.ee." - /* 4 */ ".......ee.ee." - /* 5 */ ".......ee.ee." - /* 6 */ ".......ee.ee." - /* 7 */ ".......ee.ee." + /* 1 */ ".ee.ee.ee.ee." + /* 2 */ ".ee.ee.ee.ee." + /* 3 */ ".ee.ee.ee.ee." + /* 4 */ ".ee.ee.ee.ee." + /* 5 */ ".ee.ee.ee.ee." + /* 6 */ ".ee.ee.ee.ee." + /* 7 */ ".ee.ee.ee.ee." /* 8 */ "d.....d.....d", // Connectors: - "-1: 6, 0, 8: 3\n" /* Type -1, direction Z+ */, + "-1: 6, 1, 8: 3\n" /* Type -1, direction Z+ */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -94,18 +107,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 6, ID 81, created by Aloe_vera { // Size: - 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7 + 11, 7, 7, // SizeX = 11, SizeY = 7, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 10, 5, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 11, 6, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -122,71 +135,82 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "....abc...." - /* 1 */ ".ddddddddd." - /* 2 */ ".ddddddddd." - /* 3 */ ".ddddddddd." - /* 4 */ ".ddddddddd." - /* 5 */ ".ddddddddd." - /* 6 */ "..........." + /* 0 */ "mmmmaaammmm" + /* 1 */ "maaaaaaaaam" + /* 2 */ "maaaaaaaaam" + /* 3 */ "maaaaaaaaam" + /* 4 */ "maaaaaaaaam" + /* 5 */ "maaaaaaaaam" + /* 6 */ "mmmmmmmmmmm" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..........." - /* 1 */ ".ddddedddd." - /* 2 */ ".d.......d." - /* 3 */ ".d.......d." - /* 4 */ ".d.......d." - /* 5 */ ".ddddddddd." + /* 0 */ "....bcd...." + /* 1 */ ".aaaaaaaaa." + /* 2 */ ".aaaaaaaaa." + /* 3 */ ".aaaaaaaaa." + /* 4 */ ".aaaaaaaaa." + /* 5 */ ".aaaaaaaaa." /* 6 */ "..........." // Level 2 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." - /* 1 */ ".dffdgdffd." + /* 1 */ ".aaaaeaaaa." + /* 2 */ ".a.......a." + /* 3 */ ".a.......a." + /* 4 */ ".a.......a." + /* 5 */ ".aaaaaaaaa." + /* 6 */ "..........." + + // Level 3 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." + /* 1 */ ".affagaffa." /* 2 */ ".f.......f." /* 3 */ ".f.......f." /* 4 */ ".f.......f." - /* 5 */ ".dffdfdffd." + /* 5 */ ".affafaffa." /* 6 */ "..........." - // Level 3 + // Level 4 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "bbbbbbbbbbb" - /* 1 */ "hdddddddddh" - /* 2 */ ".d..i.i..d." - /* 3 */ ".d.......d." - /* 4 */ ".d..j.j..d." - /* 5 */ "kdddddddddk" + /* 0 */ "ccccccccccc" + /* 1 */ "haaaaaaaaah" + /* 2 */ ".a..i.i..a." + /* 3 */ ".a.......a." + /* 4 */ ".a..j.j..a." + /* 5 */ "kaaaaaaaaak" /* 6 */ "lllllllllll" - // Level 4 + // Level 5 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." - /* 1 */ "bbbbbbbbbbb" - /* 2 */ "hdddddddddh" - /* 3 */ ".dn.....od." - /* 4 */ "kdddddddddk" + /* 1 */ "ccccccccccc" + /* 2 */ "haaaaaaaaah" + /* 3 */ ".an.....oa." + /* 4 */ "kaaaaaaaaak" /* 5 */ "lllllllllll" /* 6 */ "..........." - // Level 5 + // Level 6 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." - /* 2 */ "bbbbbbbbbbb" - /* 3 */ "ddddddddddd" + /* 2 */ "ccccccccccc" + /* 3 */ "aaaaaaaaaaa" /* 4 */ "lllllllllll" /* 5 */ "..........." /* 6 */ "...........", // Connectors: - "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -217,18 +241,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 11, ID 115, created by xoft { // Size: - 11, 7, 9, // SizeX = 11, SizeY = 7, SizeZ = 9 + 11, 8, 9, // SizeX = 11, SizeY = 8, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 10, 6, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 11, 7, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -243,96 +267,109 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "....abc...." - /* 1 */ ".ddddddddd." - /* 2 */ ".ddddddddd." - /* 3 */ ".ddddddddd." - /* 4 */ ".ddddddddd." - /* 5 */ ".ddddddddd." - /* 6 */ ".ddddddddd." - /* 7 */ ".ddddddddd." - /* 8 */ "..........." + /* 0 */ "mmmmaaammmm" + /* 1 */ "maaaaaaaaam" + /* 2 */ "maaaaaaaaam" + /* 3 */ "maaaaaaaaam" + /* 4 */ "maaaaaaaaam" + /* 5 */ "maaaaaaaaam" + /* 6 */ "maaaaaaaaam" + /* 7 */ "maaaaaaaaam" + /* 8 */ "mmmmmmmmmmm" // Level 1 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "..........." - /* 1 */ ".ddddedddd." - /* 2 */ ".d.......d." - /* 3 */ ".d.......d." - /* 4 */ ".d.......d." - /* 5 */ ".d.......d." - /* 6 */ ".d.......d." - /* 7 */ ".ddddddddd." + /* 0 */ "....bcd...." + /* 1 */ ".aaaaaaaaa." + /* 2 */ ".aaaaaaaaa." + /* 3 */ ".aaaaaaaaa." + /* 4 */ ".aaaaaaaaa." + /* 5 */ ".aaaaaaaaa." + /* 6 */ ".aaaaaaaaa." + /* 7 */ ".aaaaaaaaa." /* 8 */ "..........." // Level 2 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." - /* 1 */ ".dffdgdffd." + /* 1 */ ".aaaaeaaaa." + /* 2 */ ".a.......a." + /* 3 */ ".a.......a." + /* 4 */ ".a.......a." + /* 5 */ ".a.......a." + /* 6 */ ".a.......a." + /* 7 */ ".aaaaaaaaa." + /* 8 */ "..........." + + // Level 3 + /* z\x* 1 */ + /* * 01234567890 */ + /* 0 */ "..........." + /* 1 */ ".affagaffa." /* 2 */ ".f.......f." /* 3 */ ".f.......f." - /* 4 */ ".d.......d." + /* 4 */ ".a.......a." /* 5 */ ".f.......f." /* 6 */ ".f.......f." - /* 7 */ ".dfffdfffd." + /* 7 */ ".afffafffa." /* 8 */ "..........." - // Level 3 + // Level 4 /* z\x* 1 */ /* * 01234567890 */ - /* 0 */ "bbbbbbbbbbb" - /* 1 */ "hdddddddddh" - /* 2 */ ".d..i.i..d." - /* 3 */ ".d.......d." - /* 4 */ ".d.......d." - /* 5 */ ".d.......d." - /* 6 */ ".d...j...d." - /* 7 */ "kdddddddddk" + /* 0 */ "ccccccccccc" + /* 1 */ "haaaaaaaaah" + /* 2 */ ".a..i.i..a." + /* 3 */ ".a.......a." + /* 4 */ ".a.......a." + /* 5 */ ".a.......a." + /* 6 */ ".a...j...a." + /* 7 */ "kaaaaaaaaak" /* 8 */ "lllllllllll" - // Level 4 + // Level 5 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." - /* 1 */ "bbbbbbbbbbb" - /* 2 */ "hdddddddddh" - /* 3 */ ".d.......d." - /* 4 */ ".d.......d." - /* 5 */ ".d.......d." - /* 6 */ "kdddddddddk" + /* 1 */ "ccccccccccc" + /* 2 */ "haaaaaaaaah" + /* 3 */ ".a.......a." + /* 4 */ ".a.......a." + /* 5 */ ".a.......a." + /* 6 */ "kaaaaaaaaak" /* 7 */ "lllllllllll" /* 8 */ "..........." - // Level 5 + // Level 6 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." - /* 2 */ "bbbbbbbbbbb" - /* 3 */ "hdddddddddh" - /* 4 */ ".d.......d." - /* 5 */ "kdddddddddk" + /* 2 */ "ccccccccccc" + /* 3 */ "haaaaaaaaah" + /* 4 */ ".a.......a." + /* 5 */ "kaaaaaaaaak" /* 6 */ "lllllllllll" /* 7 */ "..........." /* 8 */ "..........." - // Level 6 + // Level 7 /* z\x* 1 */ /* * 01234567890 */ /* 0 */ "..........." /* 1 */ "..........." /* 2 */ "..........." - /* 3 */ "bbbbbbbbbbb" - /* 4 */ "ddddddddddd" + /* 3 */ "ccccccccccc" + /* 4 */ "aaaaaaaaaaa" /* 5 */ "lllllllllll" /* 6 */ "..........." /* 7 */ "..........." /* 8 */ "...........", // Connectors: - "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -363,18 +400,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 15, ID 125, created by Aloe_vera { // Size: - 13, 6, 7, // SizeX = 13, SizeY = 6, SizeZ = 7 + 13, 7, 7, // SizeX = 13, SizeY = 7, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 12, 5, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 13, 6, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -389,71 +426,82 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ ".....abc....." - /* 1 */ ".ddddddddddd." - /* 2 */ ".ddddddddddd." - /* 3 */ ".ddddddddddd." - /* 4 */ ".ddddddddddd." - /* 5 */ ".ddddddddddd." - /* 6 */ "............." + /* 0 */ "mmmmmaaammmmm" + /* 1 */ "maaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaam" + /* 6 */ "mmmmmmmmmmmmm" // Level 1 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "............." - /* 1 */ ".dddddeddddd." - /* 2 */ ".d.........d." - /* 3 */ ".d.........d." - /* 4 */ ".d.........d." - /* 5 */ ".ddddddddddd." + /* 0 */ ".....bcd....." + /* 1 */ ".aaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaa." /* 6 */ "............." // Level 2 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." - /* 1 */ ".dfffdgdfffd." + /* 1 */ ".aaaaaeaaaaa." + /* 2 */ ".a.........a." + /* 3 */ ".a.........a." + /* 4 */ ".a.........a." + /* 5 */ ".aaaaaaaaaaa." + /* 6 */ "............." + + // Level 3 + /* z\x* 111 */ + /* * 0123456789012 */ + /* 0 */ "............." + /* 1 */ ".afffagafffa." /* 2 */ ".f.........f." /* 3 */ ".f.........f." /* 4 */ ".f.........f." - /* 5 */ ".dffdfffdffd." + /* 5 */ ".affafffaffa." /* 6 */ "............." - // Level 3 + // Level 4 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "bbbbbbbbbbbbb" - /* 1 */ "hdddddddddddh" - /* 2 */ ".d...i.i...d." - /* 3 */ ".d.........d." - /* 4 */ ".d..j...j..d." - /* 5 */ "kdddddddddddk" + /* 0 */ "ccccccccccccc" + /* 1 */ "haaaaaaaaaaah" + /* 2 */ ".a...i.i...a." + /* 3 */ ".a.........a." + /* 4 */ ".a..j...j..a." + /* 5 */ "kaaaaaaaaaaak" /* 6 */ "lllllllllllll" - // Level 4 + // Level 5 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." - /* 1 */ "bbbbbbbbbbbbb" - /* 2 */ "hdddddddddddh" - /* 3 */ ".d.........d." - /* 4 */ "kdddddddddddk" + /* 1 */ "ccccccccccccc" + /* 2 */ "haaaaaaaaaaah" + /* 3 */ ".a.........a." + /* 4 */ "kaaaaaaaaaaak" /* 5 */ "lllllllllllll" /* 6 */ "............." - // Level 5 + // Level 6 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." - /* 2 */ "bbbbbbbbbbbbb" - /* 3 */ "ddddddddddddd" + /* 2 */ "ccccccccccccc" + /* 3 */ "aaaaaaaaaaaaa" /* 4 */ "lllllllllllll" /* 5 */ "............." /* 6 */ ".............", // Connectors: - "-1: 6, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -484,18 +532,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 12, ID 116, created by xoft { // Size: - 13, 7, 9, // SizeX = 13, SizeY = 7, SizeZ = 9 + 13, 8, 9, // SizeX = 13, SizeY = 8, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 12, 6, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 13, 7, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -510,96 +558,109 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ ".....abc....." - /* 1 */ ".ddddddddddd." - /* 2 */ ".ddddddddddd." - /* 3 */ ".ddddddddddd." - /* 4 */ ".ddddddddddd." - /* 5 */ ".ddddddddddd." - /* 6 */ ".ddddddddddd." - /* 7 */ ".ddddddddddd." - /* 8 */ "............." + /* 0 */ "mmmmmaaammmmm" + /* 1 */ "maaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaam" + /* 6 */ "maaaaaaaaaaam" + /* 7 */ "maaaaaaaaaaam" + /* 8 */ "mmmmmmmmmmmmm" // Level 1 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "............." - /* 1 */ ".dddddeddddd." - /* 2 */ ".d.........d." - /* 3 */ ".d.........d." - /* 4 */ ".d.........d." - /* 5 */ ".d.........d." - /* 6 */ ".d.........d." - /* 7 */ ".ddddddddddd." + /* 0 */ ".....bcd....." + /* 1 */ ".aaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaa." + /* 6 */ ".aaaaaaaaaaa." + /* 7 */ ".aaaaaaaaaaa." /* 8 */ "............." // Level 2 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." - /* 1 */ ".dfffdgdfffd." + /* 1 */ ".aaaaaeaaaaa." + /* 2 */ ".a.........a." + /* 3 */ ".a.........a." + /* 4 */ ".a.........a." + /* 5 */ ".a.........a." + /* 6 */ ".a.........a." + /* 7 */ ".aaaaaaaaaaa." + /* 8 */ "............." + + // Level 3 + /* z\x* 111 */ + /* * 0123456789012 */ + /* 0 */ "............." + /* 1 */ ".afffagafffa." /* 2 */ ".f.........f." /* 3 */ ".f.........f." - /* 4 */ ".d.........d." + /* 4 */ ".a.........a." /* 5 */ ".f.........f." /* 6 */ ".f.........f." - /* 7 */ ".dffdffdfffd." + /* 7 */ ".affaffafffa." /* 8 */ "............." - // Level 3 + // Level 4 /* z\x* 111 */ /* * 0123456789012 */ - /* 0 */ "bbbbbbbbbbbbb" - /* 1 */ "hdddddddddddh" - /* 2 */ ".d...i.i...d." - /* 3 */ ".d.........d." - /* 4 */ ".d.........d." - /* 5 */ ".d.........d." - /* 6 */ ".d..j..j...d." - /* 7 */ "kdddddddddddk" + /* 0 */ "ccccccccccccc" + /* 1 */ "haaaaaaaaaaah" + /* 2 */ ".a...i.i...a." + /* 3 */ ".a.........a." + /* 4 */ ".a.........a." + /* 5 */ ".a.........a." + /* 6 */ ".a..j..j...a." + /* 7 */ "kaaaaaaaaaaak" /* 8 */ "lllllllllllll" - // Level 4 + // Level 5 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." - /* 1 */ "bbbbbbbbbbbbb" - /* 2 */ "hdddddddddddh" - /* 3 */ ".d.........d." - /* 4 */ ".d.........d." - /* 5 */ ".d.........d." - /* 6 */ "kdddddddddddk" + /* 1 */ "ccccccccccccc" + /* 2 */ "haaaaaaaaaaah" + /* 3 */ ".a.........a." + /* 4 */ ".a.........a." + /* 5 */ ".a.........a." + /* 6 */ "kaaaaaaaaaaak" /* 7 */ "lllllllllllll" /* 8 */ "............." - // Level 5 + // Level 6 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." - /* 2 */ "bbbbbbbbbbbbb" - /* 3 */ "hdddddddddddh" - /* 4 */ ".d.........d." - /* 5 */ "kdddddddddddk" + /* 2 */ "ccccccccccccc" + /* 3 */ "haaaaaaaaaaah" + /* 4 */ ".a.........a." + /* 5 */ "kaaaaaaaaaaak" /* 6 */ "lllllllllllll" /* 7 */ "............." /* 8 */ "............." - // Level 6 + // Level 7 /* z\x* 111 */ /* * 0123456789012 */ /* 0 */ "............." /* 1 */ "............." /* 2 */ "............." - /* 3 */ "bbbbbbbbbbbbb" - /* 4 */ "ddddddddddddd" + /* 3 */ "ccccccccccccc" + /* 4 */ "aaaaaaaaaaaaa" /* 5 */ "lllllllllllll" /* 6 */ "............." /* 7 */ "............." /* 8 */ ".............", // Connectors: - "-1: 6, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -630,18 +691,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 13, ID 118, created by xoft { // Size: - 15, 7, 9, // SizeX = 15, SizeY = 7, SizeZ = 9 + 15, 8, 9, // SizeX = 15, SizeY = 8, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 14, 6, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 15, 7, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -656,96 +717,109 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ ".....abc......." - /* 1 */ ".ddddddddddddd." - /* 2 */ ".ddddddddddddd." - /* 3 */ ".ddddddddddddd." - /* 4 */ ".ddddddddddddd." - /* 5 */ ".ddddddddddddd." - /* 6 */ ".ddddddddddddd." - /* 7 */ ".ddddddddddddd." - /* 8 */ "..............." + /* 0 */ "mmmmmaaammmmmmm" + /* 1 */ "maaaaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaaaam" + /* 6 */ "maaaaaaaaaaaaam" + /* 7 */ "maaaaaaaaaaaaam" + /* 8 */ "mmmmmmmmmmmmmmm" // Level 1 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "..............." - /* 1 */ ".dddddeddddddd." - /* 2 */ ".d...........d." - /* 3 */ ".d...........d." - /* 4 */ ".d...........d." - /* 5 */ ".d...........d." - /* 6 */ ".d...........d." - /* 7 */ ".ddddddddddddd." + /* 0 */ ".....bcd......." + /* 1 */ ".aaaaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaaaa." + /* 6 */ ".aaaaaaaaaaaaa." + /* 7 */ ".aaaaaaaaaaaaa." /* 8 */ "..............." // Level 2 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." - /* 1 */ ".dfffdgdffdffd." + /* 1 */ ".aaaaaeaaaaaaa." + /* 2 */ ".a...........a." + /* 3 */ ".a...........a." + /* 4 */ ".a...........a." + /* 5 */ ".a...........a." + /* 6 */ ".a...........a." + /* 7 */ ".aaaaaaaaaaaaa." + /* 8 */ "..............." + + // Level 3 + /* z\x* 11111 */ + /* * 012345678901234 */ + /* 0 */ "..............." + /* 1 */ ".afffagaffaffa." /* 2 */ ".f...........f." /* 3 */ ".f...........f." - /* 4 */ ".d...........d." + /* 4 */ ".a...........a." /* 5 */ ".f...........f." /* 6 */ ".f...........f." - /* 7 */ ".dffdffdffdffd." + /* 7 */ ".affaffaffaffa." /* 8 */ "..............." - // Level 3 + // Level 4 /* z\x* 11111 */ /* * 012345678901234 */ - /* 0 */ "bbbbbbbbbbbbbbb" - /* 1 */ "hdddddddddddddh" - /* 2 */ ".d...i.i..i..d." - /* 3 */ ".d...........d." - /* 4 */ ".d...........d." - /* 5 */ ".d...........d." - /* 6 */ ".d..j..j..j..d." - /* 7 */ "kdddddddddddddk" + /* 0 */ "ccccccccccccccc" + /* 1 */ "haaaaaaaaaaaaah" + /* 2 */ ".a...i.i..i..a." + /* 3 */ ".a...........a." + /* 4 */ ".a...........a." + /* 5 */ ".a...........a." + /* 6 */ ".a..j..j..j..a." + /* 7 */ "kaaaaaaaaaaaaak" /* 8 */ "lllllllllllllll" - // Level 4 + // Level 5 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." - /* 1 */ "bbbbbbbbbbbbbbb" - /* 2 */ "hdddddddddddddh" - /* 3 */ ".d...........d." - /* 4 */ ".d...........d." - /* 5 */ ".d...........d." - /* 6 */ "kdddddddddddddk" + /* 1 */ "ccccccccccccccc" + /* 2 */ "haaaaaaaaaaaaah" + /* 3 */ ".a...........a." + /* 4 */ ".a...........a." + /* 5 */ ".a...........a." + /* 6 */ "kaaaaaaaaaaaaak" /* 7 */ "lllllllllllllll" /* 8 */ "..............." - // Level 5 + // Level 6 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." - /* 2 */ "bbbbbbbbbbbbbbb" - /* 3 */ "hdddddddddddddh" - /* 4 */ ".d...........d." - /* 5 */ "kdddddddddddddk" + /* 2 */ "ccccccccccccccc" + /* 3 */ "haaaaaaaaaaaaah" + /* 4 */ ".a...........a." + /* 5 */ "kaaaaaaaaaaaaak" /* 6 */ "lllllllllllllll" /* 7 */ "..............." /* 8 */ "..............." - // Level 6 + // Level 7 /* z\x* 11111 */ /* * 012345678901234 */ /* 0 */ "..............." /* 1 */ "..............." /* 2 */ "..............." - /* 3 */ "bbbbbbbbbbbbbbb" - /* 4 */ "ddddddddddddddd" + /* 3 */ "ccccccccccccccc" + /* 4 */ "aaaaaaaaaaaaaaa" /* 5 */ "lllllllllllllll" /* 6 */ "..............." /* 7 */ "..............." /* 8 */ "...............", // Connectors: - "-1: 6, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -776,18 +850,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 16, ID 126, created by Aloe_vera { // Size: - 16, 7, 9, // SizeX = 16, SizeY = 7, SizeZ = 9 + 16, 8, 9, // SizeX = 16, SizeY = 8, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 15, 6, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 16, 7, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -802,96 +876,109 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 111111 */ /* * 0123456789012345 */ - /* 0 */ "........abc....." - /* 1 */ ".dddddddddddddd." - /* 2 */ ".dddddddddddddd." - /* 3 */ ".dddddddddddddd." - /* 4 */ ".dddddddddddddd." - /* 5 */ ".dddddddddddddd." - /* 6 */ ".dddddddddddddd." - /* 7 */ ".dddddddddddddd." - /* 8 */ "................" + /* 0 */ "mmmmmmmmaaammmmm" + /* 1 */ "maaaaaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaaaaam" + /* 6 */ "maaaaaaaaaaaaaam" + /* 7 */ "maaaaaaaaaaaaaam" + /* 8 */ "mmmmmmmmmmmmmmmm" // Level 1 /* z\x* 111111 */ /* * 0123456789012345 */ - /* 0 */ "................" - /* 1 */ ".ddddddddeddddd." - /* 2 */ ".d............d." - /* 3 */ ".d............d." - /* 4 */ ".d............d." - /* 5 */ ".d............d." - /* 6 */ ".d............d." - /* 7 */ ".dddddddddddddd." + /* 0 */ "........bcd....." + /* 1 */ ".aaaaaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaaaaa." + /* 6 */ ".aaaaaaaaaaaaaa." + /* 7 */ ".aaaaaaaaaaaaaa." /* 8 */ "................" // Level 2 /* z\x* 111111 */ /* * 0123456789012345 */ /* 0 */ "................" - /* 1 */ ".dffdfffdgdfffd." + /* 1 */ ".aaaaaaaaeaaaaa." + /* 2 */ ".a............a." + /* 3 */ ".a............a." + /* 4 */ ".a............a." + /* 5 */ ".a............a." + /* 6 */ ".a............a." + /* 7 */ ".aaaaaaaaaaaaaa." + /* 8 */ "................" + + // Level 3 + /* z\x* 111111 */ + /* * 0123456789012345 */ + /* 0 */ "................" + /* 1 */ ".affafffagafffa." /* 2 */ ".f............f." /* 3 */ ".f............f." - /* 4 */ ".d............d." + /* 4 */ ".a............a." /* 5 */ ".f............f." /* 6 */ ".f............f." - /* 7 */ ".dffdffdfffdffd." + /* 7 */ ".affaffafffaffa." /* 8 */ "................" - // Level 3 + // Level 4 /* z\x* 111111 */ /* * 0123456789012345 */ - /* 0 */ "bbbbbbbbbbbbbbbb" - /* 1 */ "hddddddddddddddh" - /* 2 */ ".d..i...i.i...d." - /* 3 */ ".d............d." - /* 4 */ ".d............d." - /* 5 */ ".d............d." - /* 6 */ ".d..j..j...j..d." - /* 7 */ "kddddddddddddddk" + /* 0 */ "cccccccccccccccc" + /* 1 */ "haaaaaaaaaaaaaah" + /* 2 */ ".a..i...i.i...a." + /* 3 */ ".a............a." + /* 4 */ ".a............a." + /* 5 */ ".a............a." + /* 6 */ ".a..j..j...j..a." + /* 7 */ "kaaaaaaaaaaaaaak" /* 8 */ "llllllllllllllll" - // Level 4 + // Level 5 /* z\x* 111111 */ /* * 0123456789012345 */ /* 0 */ "................" - /* 1 */ "bbbbbbbbbbbbbbbb" - /* 2 */ "hddddddddddddddh" - /* 3 */ ".d............d." - /* 4 */ ".d............d." - /* 5 */ ".d............d." - /* 6 */ "kddddddddddddddk" + /* 1 */ "cccccccccccccccc" + /* 2 */ "haaaaaaaaaaaaaah" + /* 3 */ ".a............a." + /* 4 */ ".a............a." + /* 5 */ ".a............a." + /* 6 */ "kaaaaaaaaaaaaaak" /* 7 */ "llllllllllllllll" /* 8 */ "................" - // Level 5 + // Level 6 /* z\x* 111111 */ /* * 0123456789012345 */ /* 0 */ "................" /* 1 */ "................" - /* 2 */ "bbbbbbbbbbbbbbbb" - /* 3 */ "hddddddddddddddh" - /* 4 */ ".d............d." - /* 5 */ "kddddddddddddddk" + /* 2 */ "cccccccccccccccc" + /* 3 */ "haaaaaaaaaaaaaah" + /* 4 */ ".a............a." + /* 5 */ "kaaaaaaaaaaaaaak" /* 6 */ "llllllllllllllll" /* 7 */ "................" /* 8 */ "................" - // Level 6 + // Level 7 /* z\x* 111111 */ /* * 0123456789012345 */ /* 0 */ "................" /* 1 */ "................" /* 2 */ "................" - /* 3 */ "bbbbbbbbbbbbbbbb" - /* 4 */ "dddddddddddddddd" + /* 3 */ "cccccccccccccccc" + /* 4 */ "aaaaaaaaaaaaaaaa" /* 5 */ "llllllllllllllll" /* 6 */ "................" /* 7 */ "................" /* 8 */ "................", // Connectors: - "-1: 9, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 9, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -922,18 +1009,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 8, ID 112, created by Aloe_vera { // Size: - 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7 + 7, 7, 7, // SizeX = 7, SizeY = 7, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 6, 5, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 7, 6, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -946,66 +1033,76 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Block data: // Level 0 /* z\x* 0123456 */ - /* 0 */ "...abc." - /* 1 */ ".ddddd." - /* 2 */ ".ddddd." - /* 3 */ ".ddddd." - /* 4 */ ".ddddd." - /* 5 */ ".ddddd." - /* 6 */ "......." + /* 0 */ "mmmaaam" + /* 1 */ "maaaaam" + /* 2 */ "maaaaam" + /* 3 */ "maaaaam" + /* 4 */ "maaaaam" + /* 5 */ "maaaaam" + /* 6 */ "mmmmmmm" // Level 1 /* z\x* 0123456 */ - /* 0 */ "......." - /* 1 */ ".ddded." - /* 2 */ ".d...d." - /* 3 */ ".d...d." - /* 4 */ ".d...d." - /* 5 */ ".ddddd." + /* 0 */ "...bcd." + /* 1 */ ".aaaaa." + /* 2 */ ".aaaaa." + /* 3 */ ".aaaaa." + /* 4 */ ".aaaaa." + /* 5 */ ".aaaaa." /* 6 */ "......." // Level 2 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ ".dfdgd." + /* 1 */ ".aaaea." + /* 2 */ ".a...a." + /* 3 */ ".a...a." + /* 4 */ ".a...a." + /* 5 */ ".aaaaa." + /* 6 */ "......." + + // Level 3 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ ".afaga." /* 2 */ ".f...f." /* 3 */ ".f...f." /* 4 */ ".f...f." - /* 5 */ ".dfffd." + /* 5 */ ".afffa." /* 6 */ "......." - // Level 3 + // Level 4 /* z\x* 0123456 */ - /* 0 */ "bbbbbbb" - /* 1 */ "hdddddh" - /* 2 */ ".d.i.d." - /* 3 */ ".d...d." - /* 4 */ ".d...d." - /* 5 */ "jdddddj" + /* 0 */ "ccccccc" + /* 1 */ "haaaaah" + /* 2 */ ".a.i.a." + /* 3 */ ".a...a." + /* 4 */ ".a...a." + /* 5 */ "jaaaaaj" /* 6 */ "kkkkkkk" - // Level 4 + // Level 5 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "bbbbbbb" - /* 2 */ "hdddddh" - /* 3 */ ".d...d." - /* 4 */ "jdddddj" + /* 1 */ "ccccccc" + /* 2 */ "haaaaah" + /* 3 */ ".a...a." + /* 4 */ "jaaaaaj" /* 5 */ "kkkkkkk" /* 6 */ "......." - // Level 5 + // Level 6 /* z\x* 0123456 */ /* 0 */ "......." /* 1 */ "......." - /* 2 */ "bbbbbbb" - /* 3 */ "ddddddd" + /* 2 */ "ccccccc" + /* 3 */ "aaaaaaa" /* 4 */ "kkkkkkk" /* 5 */ "......." /* 6 */ ".......", // Connectors: - "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1036,18 +1133,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 9, ID 113, created by xoft { // Size: - 9, 6, 7, // SizeX = 9, SizeY = 6, SizeZ = 7 + 9, 7, 7, // SizeX = 9, SizeY = 7, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 8, 5, 6, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 9, 6, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -1061,66 +1158,76 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "...abc..." - /* 1 */ ".ddddddd." - /* 2 */ ".ddddddd." - /* 3 */ ".ddddddd." - /* 4 */ ".ddddddd." - /* 5 */ ".ddddddd." - /* 6 */ "........." + /* 0 */ "mmmaaammm" + /* 1 */ "maaaaaaam" + /* 2 */ "maaaaaaam" + /* 3 */ "maaaaaaam" + /* 4 */ "maaaaaaam" + /* 5 */ "maaaaaaam" + /* 6 */ "mmmmmmmmm" // Level 1 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ ".dddeddd." - /* 2 */ ".d.....d." - /* 3 */ ".d.....d." - /* 4 */ ".d.....d." - /* 5 */ ".ddddddd." + /* 0 */ "...bcd..." + /* 1 */ ".aaaaaaa." + /* 2 */ ".aaaaaaa." + /* 3 */ ".aaaaaaa." + /* 4 */ ".aaaaaaa." + /* 5 */ ".aaaaaaa." /* 6 */ "........." // Level 2 /* z\x* 012345678 */ /* 0 */ "........." - /* 1 */ ".dfdgdfd." + /* 1 */ ".aaaeaaa." + /* 2 */ ".a.....a." + /* 3 */ ".a.....a." + /* 4 */ ".a.....a." + /* 5 */ ".aaaaaaa." + /* 6 */ "........." + + // Level 3 + /* z\x* 012345678 */ + /* 0 */ "........." + /* 1 */ ".afagafa." /* 2 */ ".f.....f." /* 3 */ ".f.....f." /* 4 */ ".f.....f." - /* 5 */ ".dffdffd." + /* 5 */ ".affaffa." /* 6 */ "........." - // Level 3 + // Level 4 /* z\x* 012345678 */ - /* 0 */ "bbbbbbbbb" - /* 1 */ "hdddddddh" - /* 2 */ ".d.i.i.d." - /* 3 */ ".d.....d." - /* 4 */ ".d..j..d." - /* 5 */ "kdddddddk" + /* 0 */ "ccccccccc" + /* 1 */ "haaaaaaah" + /* 2 */ ".a.i.i.a." + /* 3 */ ".a.....a." + /* 4 */ ".a..j..a." + /* 5 */ "kaaaaaaak" /* 6 */ "lllllllll" - // Level 4 + // Level 5 /* z\x* 012345678 */ /* 0 */ "........." - /* 1 */ "bbbbbbbbb" - /* 2 */ "hdddddddh" - /* 3 */ ".d.....d." - /* 4 */ "kdddddddk" + /* 1 */ "ccccccccc" + /* 2 */ "haaaaaaah" + /* 3 */ ".a.....a." + /* 4 */ "kaaaaaaak" /* 5 */ "lllllllll" /* 6 */ "........." - // Level 5 + // Level 6 /* z\x* 012345678 */ /* 0 */ "........." /* 1 */ "........." - /* 2 */ "bbbbbbbbb" - /* 3 */ "ddddddddd" + /* 2 */ "ccccccccc" + /* 3 */ "aaaaaaaaa" /* 4 */ "lllllllll" /* 5 */ "........." /* 6 */ ".........", // Connectors: - "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1151,18 +1258,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 10, ID 114, created by xoft { // Size: - 9, 7, 9, // SizeX = 9, SizeY = 7, SizeZ = 9 + 9, 8, 9, // SizeX = 9, SizeY = 8, SizeZ = 9 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 8, 6, 8, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 9, 7, 9, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e: 64: 7\n" /* wooddoorblock */ "f:102: 0\n" /* glasspane */ "g: 64:12\n" /* wooddoorblock */ @@ -1176,90 +1283,102 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Block data: // Level 0 /* z\x* 012345678 */ - /* 0 */ "...abc..." - /* 1 */ ".ddddddd." - /* 2 */ ".ddddddd." - /* 3 */ ".ddddddd." - /* 4 */ ".ddddddd." - /* 5 */ ".ddddddd." - /* 6 */ ".ddddddd." - /* 7 */ ".ddddddd." - /* 8 */ "........." + /* 0 */ "mmmaaammm" + /* 1 */ "maaaaaaam" + /* 2 */ "maaaaaaam" + /* 3 */ "maaaaaaam" + /* 4 */ "maaaaaaam" + /* 5 */ "maaaaaaam" + /* 6 */ "maaaaaaam" + /* 7 */ "maaaaaaam" + /* 8 */ "mmmmmmmmm" // Level 1 /* z\x* 012345678 */ - /* 0 */ "........." - /* 1 */ ".dddeddd." - /* 2 */ ".d.....d." - /* 3 */ ".d.....d." - /* 4 */ ".d.....d." - /* 5 */ ".d.....d." - /* 6 */ ".d.....d." - /* 7 */ ".ddddddd." + /* 0 */ "...bcd..." + /* 1 */ ".aaaaaaa." + /* 2 */ ".aaaaaaa." + /* 3 */ ".aaaaaaa." + /* 4 */ ".aaaaaaa." + /* 5 */ ".aaaaaaa." + /* 6 */ ".aaaaaaa." + /* 7 */ ".aaaaaaa." /* 8 */ "........." // Level 2 /* z\x* 012345678 */ /* 0 */ "........." - /* 1 */ ".dfdgdfd." + /* 1 */ ".aaaeaaa." + /* 2 */ ".a.....a." + /* 3 */ ".a.....a." + /* 4 */ ".a.....a." + /* 5 */ ".a.....a." + /* 6 */ ".a.....a." + /* 7 */ ".aaaaaaa." + /* 8 */ "........." + + // Level 3 + /* z\x* 012345678 */ + /* 0 */ "........." + /* 1 */ ".afagafa." /* 2 */ ".f.....f." /* 3 */ ".f.....f." - /* 4 */ ".d.....d." + /* 4 */ ".a.....a." /* 5 */ ".f.....f." /* 6 */ ".f.....f." - /* 7 */ ".dffdffd." + /* 7 */ ".affaffa." /* 8 */ "........." - // Level 3 + // Level 4 /* z\x* 012345678 */ - /* 0 */ "bbbbbbbbb" - /* 1 */ "hdddddddh" - /* 2 */ ".d.i.i.d." - /* 3 */ ".d.....d." - /* 4 */ ".d.....d." - /* 5 */ ".d.....d." - /* 6 */ ".d..j..d." - /* 7 */ "kdddddddk" + /* 0 */ "ccccccccc" + /* 1 */ "haaaaaaah" + /* 2 */ ".a.i.i.a." + /* 3 */ ".a.....a." + /* 4 */ ".a.....a." + /* 5 */ ".a.....a." + /* 6 */ ".a..j..a." + /* 7 */ "kaaaaaaak" /* 8 */ "lllllllll" - // Level 4 + // Level 5 /* z\x* 012345678 */ /* 0 */ "........." - /* 1 */ "bbbbbbbbb" - /* 2 */ "hdddddddh" - /* 3 */ ".d.....d." - /* 4 */ ".d.....d." - /* 5 */ ".d.....d." - /* 6 */ "kdddddddk" + /* 1 */ "ccccccccc" + /* 2 */ "haaaaaaah" + /* 3 */ ".a.....a." + /* 4 */ ".a.....a." + /* 5 */ ".a.....a." + /* 6 */ "kaaaaaaak" /* 7 */ "lllllllll" /* 8 */ "........." - // Level 5 + // Level 6 /* z\x* 012345678 */ /* 0 */ "........." /* 1 */ "........." - /* 2 */ "bbbbbbbbb" - /* 3 */ "hdddddddh" - /* 4 */ ".d.....d." - /* 5 */ "kdddddddk" + /* 2 */ "ccccccccc" + /* 3 */ "haaaaaaah" + /* 4 */ ".a.....a." + /* 5 */ "kaaaaaaak" /* 6 */ "lllllllll" /* 7 */ "........." /* 8 */ "........." - // Level 6 + // Level 7 /* z\x* 012345678 */ /* 0 */ "........." /* 1 */ "........." /* 2 */ "........." - /* 3 */ "bbbbbbbbb" - /* 4 */ "ddddddddd" + /* 3 */ "ccccccccc" + /* 4 */ "aaaaaaaaa" /* 5 */ "lllllllll" /* 6 */ "........." /* 7 */ "........." /* 8 */ ".........", // Connectors: - "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1290,147 +1409,164 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 14, ID 124, created by Aloe_vera { // Size: - 14, 7, 12, // SizeX = 14, SizeY = 7, SizeZ = 12 + 14, 8, 12, // SizeX = 14, SizeY = 8, SizeZ = 12 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 13, 6, 11, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 14, 7, 12, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e:128: 3\n" /* sandstonestairs */ - "f: 64: 7\n" /* wooddoorblock */ - "g:102: 0\n" /* glasspane */ - "h: 64:12\n" /* wooddoorblock */ - "i:128: 7\n" /* sandstonestairs */ - "j: 50: 3\n" /* torch */ - "k: 50: 2\n" /* torch */ - "l: 50: 4\n" /* torch */ + "f: 64: 3\n" /* wooddoorblock */ + "g: 64: 1\n" /* wooddoorblock */ + "h:102: 0\n" /* glasspane */ + "i: 64: 8\n" /* wooddoorblock */ + "j:128: 7\n" /* sandstonestairs */ + "k: 50: 3\n" /* torch */ + "l: 50: 2\n" /* torch */ "m: 19: 0\n" /* sponge */ - "n:128: 6\n" /* sandstonestairs */ - "o: 50: 1\n" /* torch */ - "p:128: 5\n" /* sandstonestairs */ - "q:128: 4\n" /* sandstonestairs */, + "n: 50: 4\n" /* torch */ + "o:128: 6\n" /* sandstonestairs */ + "p: 50: 1\n" /* torch */ + "q:128: 5\n" /* sandstonestairs */ + "r:128: 4\n" /* sandstonestairs */, // Block data: // Level 0 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ "....abc......." - /* 1 */ ".dddddddddddd." - /* 2 */ ".dddddddddddd." - /* 3 */ ".dddddddddddd." - /* 4 */ ".dddddddddddd." - /* 5 */ ".dddddddddddd." - /* 6 */ ".dddddddddddd." - /* 7 */ ".dddddddddddd." - /* 8 */ "....aeddddddd." - /* 9 */ "mmmmm.ddddddd." - /* 10 */ "mmmmm.ddddddd." - /* 11 */ "mmmmm........." + /* 0 */ "mmmmaaammmmmmm" + /* 1 */ "maaaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaaam" + /* 6 */ "maaaaaaaaaaaam" + /* 7 */ "maaaaaaaaaaaam" + /* 8 */ "mmmmaaaaaaaaam" + /* 9 */ "mmmmmmaaaaaaam" + /* 10 */ "mmmmmmaaaaaaam" + /* 11 */ "mmmmmmmmmmmmmm" // Level 1 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ ".............." - /* 1 */ ".ddddfddddddd." - /* 2 */ ".d..........d." - /* 3 */ ".d..........d." - /* 4 */ ".d..........d." - /* 5 */ ".d..........d." - /* 6 */ ".d..........d." - /* 7 */ ".ddddfd.....d." - /* 8 */ "......d.....d." - /* 9 */ "mmmmm.d.....d." - /* 10 */ "mmmmm.ddddddd." + /* 0 */ "....bcd......." + /* 1 */ ".aaaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaaa." + /* 6 */ ".aaaaaaaaaaaa." + /* 7 */ ".aaaaaaaaaaaa." + /* 8 */ "....beaaaaaaa." + /* 9 */ "mmmmm.aaaaaaa." + /* 10 */ "mmmmm.aaaaaaa." /* 11 */ "mmmmm........." // Level 2 /* z\x* 1111 */ /* * 01234567890123 */ /* 0 */ ".............." - /* 1 */ ".dggdhdggdggd." - /* 2 */ ".g..........g." - /* 3 */ ".g..........g." - /* 4 */ ".d..........d." - /* 5 */ ".g..........g." - /* 6 */ ".g..........g." - /* 7 */ ".dggdhd.....d." - /* 8 */ "......g.....g." - /* 9 */ "mmmmm.g.....g." - /* 10 */ "mmmmm.dggdggd." + /* 1 */ ".aaaafaaaaaaa." + /* 2 */ ".a..........a." + /* 3 */ ".a..........a." + /* 4 */ ".a..........a." + /* 5 */ ".a..........a." + /* 6 */ ".a..........a." + /* 7 */ ".aaaaga.....a." + /* 8 */ "......a.....a." + /* 9 */ "mmmmm.a.....a." + /* 10 */ "mmmmm.aaaaaaa." /* 11 */ "mmmmm........." // Level 3 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ "bbbbbbbbbbbbbb" - /* 1 */ "iddddddddddddc" - /* 2 */ ".d..j.j.....dc" - /* 3 */ ".d..........dc" - /* 4 */ ".d.........kdc" - /* 5 */ ".d..........dc" - /* 6 */ ".d..l.l.....dc" - /* 7 */ "nddddddo...kdc" - /* 8 */ "eeeeead.....dc" - /* 9 */ "mmmmmad.....dc" - /* 10 */ "mmmmmadddddddc" - /* 11 */ "mmmmmap.....qc" + /* 0 */ ".............." + /* 1 */ ".ahhaiahhahha." + /* 2 */ ".h..........h." + /* 3 */ ".h..........h." + /* 4 */ ".a..........a." + /* 5 */ ".h..........h." + /* 6 */ ".h..........h." + /* 7 */ ".ahhaia.....a." + /* 8 */ "......h.....h." + /* 9 */ "mmmmm.h.....h." + /* 10 */ "mmmmm.ahhahha." + /* 11 */ "mmmmm........." // Level 4 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ ".............." - /* 1 */ "bbbbbbbbbbbbc." - /* 2 */ "idddddddddddc." - /* 3 */ ".d.........dc." - /* 4 */ ".d.........dc." - /* 5 */ ".d.........dc." - /* 6 */ "nddddddd...dc." - /* 7 */ "eeeeeead...dc." - /* 8 */ "......ad...dc." - /* 9 */ "mmmmm.ad...dc." - /* 10 */ "mmmmm.adddddc." - /* 11 */ "mmmmm.ap...qc." + /* 0 */ "cccccccccccccc" + /* 1 */ "jaaaaaaaaaaaad" + /* 2 */ ".a..k.k.....ad" + /* 3 */ ".a..........ad" + /* 4 */ ".a.........lad" + /* 5 */ ".a..........ad" + /* 6 */ ".a..n.n.....ad" + /* 7 */ "oaaaaaap...lad" + /* 8 */ "eeeeeba.....ad" + /* 9 */ "mmmmmba.....ad" + /* 10 */ "mmmmmbaaaaaaad" + /* 11 */ "mmmmmbq.....rd" // Level 5 /* z\x* 1111 */ /* * 01234567890123 */ /* 0 */ ".............." - /* 1 */ ".............." - /* 2 */ "bbbbbbbbbbbb.." - /* 3 */ "iddddddddddc.." - /* 4 */ ".d........dc.." - /* 5 */ "ndddddddd.dc.." - /* 6 */ "eeeeeeeed.dc.." - /* 7 */ ".......ad.dc.." - /* 8 */ ".......ad.dc.." - /* 9 */ "mmmmm..ad.dc.." - /* 10 */ "mmmmm..adddc.." - /* 11 */ "mmmmm..ap.qc.." + /* 1 */ "ccccccccccccd." + /* 2 */ "jaaaaaaaaaaad." + /* 3 */ ".a.........ad." + /* 4 */ ".a.........ad." + /* 5 */ ".a.........ad." + /* 6 */ "oaaaaaaa...ad." + /* 7 */ "eeeeeeba...ad." + /* 8 */ "......ba...ad." + /* 9 */ "mmmmm.ba...ad." + /* 10 */ "mmmmm.baaaaad." + /* 11 */ "mmmmm.bq...rd." // Level 6 /* z\x* 1111 */ /* * 01234567890123 */ /* 0 */ ".............." /* 1 */ ".............." + /* 2 */ "cccccccccccc.." + /* 3 */ "jaaaaaaaaaad.." + /* 4 */ ".a........ad.." + /* 5 */ "oaaaaaaaa.ad.." + /* 6 */ "eeeeeeeea.ad.." + /* 7 */ ".......ba.ad.." + /* 8 */ ".......ba.ad.." + /* 9 */ "mmmmm..ba.ad.." + /* 10 */ "mmmmm..baaad.." + /* 11 */ "mmmmm..bq.rd.." + + // Level 7 + /* z\x* 1111 */ + /* * 01234567890123 */ + /* 0 */ ".............." + /* 1 */ ".............." /* 2 */ ".............." - /* 3 */ "bbbbbbbbbbb..." - /* 4 */ "ddddddddddc..." - /* 5 */ "eeeeeeeeadc..." - /* 6 */ "........adc..." - /* 7 */ "........adc..." - /* 8 */ "........adc..." - /* 9 */ "mmmmm...adc..." - /* 10 */ "mmmmm...adc..." - /* 11 */ "mmmmm...adc...", + /* 3 */ "ccccccccccc..." + /* 4 */ "aaaaaaaaaad..." + /* 5 */ "eeeeeeeebad..." + /* 6 */ "........bad..." + /* 7 */ "........bad..." + /* 8 */ "........bad..." + /* 9 */ "mmmmm...bad..." + /* 10 */ "mmmmm...bad..." + /* 11 */ "mmmmm...bad...", // Connectors: - "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1461,18 +1597,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 7, ID 82, created by Aloe_vera { // Size: - 14, 6, 12, // SizeX = 14, SizeY = 6, SizeZ = 12 + 14, 7, 12, // SizeX = 14, SizeY = 7, SizeZ = 12 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 13, 5, 11, // MaxX, MaxY, MaxZ + -1, 0, 0, // MinX, MinY, MinZ + 14, 6, 12, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ - "a:128: 0\n" /* sandstonestairs */ - "b:128: 2\n" /* sandstonestairs */ - "c:128: 1\n" /* sandstonestairs */ - "d: 24: 0\n" /* sandstone */ + "a: 24: 0\n" /* sandstone */ + "b:128: 0\n" /* sandstonestairs */ + "c:128: 2\n" /* sandstonestairs */ + "d:128: 1\n" /* sandstonestairs */ "e:128: 3\n" /* sandstonestairs */ "f: 64: 7\n" /* wooddoorblock */ "g: 64: 5\n" /* wooddoorblock */ @@ -1491,101 +1627,117 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // Level 0 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ ".......abc...." - /* 1 */ ".dddddddddddd." - /* 2 */ ".dddddddddddd." - /* 3 */ ".dddddddddddd." - /* 4 */ ".dddddddddddd." - /* 5 */ ".dddddddddddd." - /* 6 */ "....aec.ddddd." - /* 7 */ "mmmmmmm.ddddd." - /* 8 */ "mmmmmmm.ddddd." - /* 9 */ "mmmmmmm.ddddd." - /* 10 */ "mmmmmmm.ddddd." - /* 11 */ "mmmmmmm......." + /* 0 */ "mmmmmmmaaammmm" + /* 1 */ "maaaaaaaaaaaam" + /* 2 */ "maaaaaaaaaaaam" + /* 3 */ "maaaaaaaaaaaam" + /* 4 */ "maaaaaaaaaaaam" + /* 5 */ "maaaaaaaaaaaam" + /* 6 */ "mmmmaaamaaaaam" + /* 7 */ "mmmmmmmmaaaaam" + /* 8 */ "mmmmmmmmaaaaam" + /* 9 */ "mmmmmmmmaaaaam" + /* 10 */ "mmmmmmmmaaaaam" + /* 11 */ "mmmmmmmmmmmmmm" // Level 1 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ ".............." - /* 1 */ ".dddddddfdddd." - /* 2 */ ".d..........d." - /* 3 */ ".d..........d." - /* 4 */ ".d..........d." - /* 5 */ ".ddddgddd...d." - /* 6 */ "........d...d." - /* 7 */ "mmmmmmm.d...d." - /* 8 */ "mmmmmmm.d...d." - /* 9 */ "mmmmmmm.d...d." - /* 10 */ "mmmmmmm.ddddd." - /* 11 */ "mmmmmmm......." + /* 0 */ ".......bcd...." + /* 1 */ ".aaaaaaaaaaaa." + /* 2 */ ".aaaaaaaaaaaa." + /* 3 */ ".aaaaaaaaaaaa." + /* 4 */ ".aaaaaaaaaaaa." + /* 5 */ ".aaaaaaaaaaaa." + /* 6 */ "....bed.aaaaa." + /* 7 */ "........aaaaa." + /* 8 */ "........aaaaa." + /* 9 */ "........aaaaa." + /* 10 */ "........aaaaa." + /* 11 */ ".............." // Level 2 /* z\x* 1111 */ /* * 01234567890123 */ /* 0 */ ".............." - /* 1 */ ".dhhdhhdidhhd." + /* 1 */ ".aaaaaaafaaaa." + /* 2 */ ".a..........a." + /* 3 */ ".a..........a." + /* 4 */ ".a..........a." + /* 5 */ ".aaaagaaa...a." + /* 6 */ "........a...a." + /* 7 */ "........a...a." + /* 8 */ "........a...a." + /* 9 */ "........a...a." + /* 10 */ "........aaaaa." + /* 11 */ ".............." + + // Level 3 + /* z\x* 1111 */ + /* * 01234567890123 */ + /* 0 */ ".............." + /* 1 */ ".ahhahhaiahha." /* 2 */ ".h..........h." /* 3 */ ".h..........h." - /* 4 */ ".h..........d." - /* 5 */ ".dhhdidhh...h." + /* 4 */ ".h..........a." + /* 5 */ ".ahhaiahh...h." /* 6 */ "........h...h." - /* 7 */ "mmmmmmm.d...d." - /* 8 */ "mmmmmmm.h...h." - /* 9 */ "mmmmmmm.h...h." - /* 10 */ "mmmmmmm.dhhhd." - /* 11 */ "mmmmmmm......." + /* 7 */ "........a...a." + /* 8 */ "........h...h." + /* 9 */ "........h...h." + /* 10 */ "........ahhha." + /* 11 */ ".............." - // Level 3 + // Level 4 /* z\x* 1111 */ /* * 01234567890123 */ - /* 0 */ "bbbbbbbbbbbbbb" - /* 1 */ "jddddddddddddc" - /* 2 */ ".d.....k.k..dc" - /* 3 */ ".d..........dc" - /* 4 */ ".d..l.l.....dc" - /* 5 */ "ndddddddd...dc" - /* 6 */ "eeeeeeead...dc" - /* 7 */ "mmmmmmmad...dc" - /* 8 */ "mmmmmmmad...dc" - /* 9 */ "mmmmmmmad...dc" - /* 10 */ "mmmmmmmadddddc" - /* 11 */ "mmmmmmmao...pc" + /* 0 */ "cccccccccccccc" + /* 1 */ "jaaaaaaaaaaaad" + /* 2 */ ".a.....k.k..ad" + /* 3 */ ".a..........ad" + /* 4 */ ".a..l.l.....ad" + /* 5 */ "naaaaaaaa...ad" + /* 6 */ "eeeeeeeba...ad" + /* 7 */ ".......ba...ad" + /* 8 */ ".......ba...ad" + /* 9 */ ".......ba...ad" + /* 10 */ ".......baaaaad" + /* 11 */ ".......bo...pd" - // Level 4 + // Level 5 /* z\x* 1111 */ /* * 01234567890123 */ /* 0 */ ".............." - /* 1 */ "bbbbbbbbbbbbb." - /* 2 */ "jdddddddddddc." - /* 3 */ ".dq........dc." - /* 4 */ "nddddddddd.dc." - /* 5 */ "eeeeeeeead.dc." - /* 6 */ "........ad.dc." - /* 7 */ "mmmmmmm.ad.dc." - /* 8 */ "mmmmmmm.ad.dc." - /* 9 */ "mmmmmmm.adldc." - /* 10 */ "mmmmmmm.adddc." - /* 11 */ "mmmmmmm.ao.pc." + /* 1 */ "ccccccccccccc." + /* 2 */ "jaaaaaaaaaaad." + /* 3 */ ".aq........ad." + /* 4 */ "naaaaaaaaa.ad." + /* 5 */ "eeeeeeeeba.ad." + /* 6 */ "........ba.ad." + /* 7 */ "........ba.ad." + /* 8 */ "........ba.ad." + /* 9 */ "........balad." + /* 10 */ "........baaad." + /* 11 */ "........bo.pd." - // Level 5 + // Level 6 /* z\x* 1111 */ /* * 01234567890123 */ /* 0 */ ".............." /* 1 */ ".............." - /* 2 */ "bbbbbbbbbbbb.." - /* 3 */ "dddddddddddc.." - /* 4 */ "eeeeeeeeeadc.." - /* 5 */ ".........adc.." - /* 6 */ ".........adc.." - /* 7 */ "mmmmmmm..adc.." - /* 8 */ "mmmmmmm..adc.." - /* 9 */ "mmmmmmm..adc.." - /* 10 */ "mmmmmmm..adc.." - /* 11 */ "mmmmmmm..adc..", + /* 2 */ "cccccccccccc.." + /* 3 */ "aaaaaaaaaaad.." + /* 4 */ "eeeeeeeeebad.." + /* 5 */ ".........bad.." + /* 6 */ ".........bad.." + /* 7 */ ".........bad.." + /* 8 */ ".........bad.." + /* 9 */ ".........bad.." + /* 10 */ ".........bad.." + /* 11 */ ".........bad..", // Connectors: - "-1: 8, 0, 0: 2\n" /* Type -1, direction Z- */, + "-1: 8, 1, 0: 2\n" /* Type -1, direction Z- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1616,11 +1768,11 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 17, ID 127, created by Aloe_vera { // Size: - 10, 2, 7, // SizeX = 10, SizeY = 2, SizeZ = 7 + 10, 3, 7, // SizeX = 10, SizeY = 3, SizeZ = 7 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 9, 1, 6, // MaxX, MaxY, MaxZ + 0, 0, -1, // MinX, MinY, MinZ + 10, 2, 7, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ @@ -1636,6 +1788,17 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* z\x* */ /* * 0123456789 */ /* 0 */ "aaaaaaaaaa" + /* 1 */ "aaaaaaaaaa" + /* 2 */ "aaaaaaaaaa" + /* 3 */ "aaaaaaaaaa" + /* 4 */ "aaaaaaaaaa" + /* 5 */ "aaaaaaaaaa" + /* 6 */ "aaaaaaaaaa" + + // Level 1 + /* z\x* */ + /* * 0123456789 */ + /* 0 */ "aaaaaaaaaa" /* 1 */ "abbbbbbbba" /* 2 */ "abbbbbbbba" /* 3 */ "acccccccca" @@ -1643,7 +1806,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 5 */ "abbbbbbbba" /* 6 */ "aaaaaaaaaa" - // Level 1 + // Level 2 /* z\x* */ /* * 0123456789 */ /* 0 */ "d........d" @@ -1655,7 +1818,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 6 */ "d........d", // Connectors: - "-1: 0, 0, 3: 4\n" /* Type -1, direction X- */, + "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1686,11 +1849,11 @@ const cPrefab::sDef g_SandVillagePrefabs[] = // The data has been exported from the gallery Desert, area index 4, ID 68, created by tonibm1999 { // Size: - 5, 5, 6, // SizeX = 5, SizeY = 5, SizeZ = 6 + 5, 6, 6, // SizeX = 5, SizeY = 6, SizeZ = 6 // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 4, 4, 5, // MaxX, MaxY, MaxZ + -1, 0, -1, // MinX, MinY, MinZ + 5, 5, 5, // MaxX, MaxY, MaxZ // Block definitions: ".: 0: 0\n" /* air */ @@ -1712,10 +1875,19 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 2 */ "aaaaa" /* 3 */ "aaaaa" /* 4 */ "aaaaa" - /* 5 */ "..b.." + /* 5 */ "mmamm" // Level 1 /* z\x* 01234 */ + /* 0 */ "aaaaa" + /* 1 */ "aaaaa" + /* 2 */ "aaaaa" + /* 3 */ "aaaaa" + /* 4 */ "aaaaa" + /* 5 */ "..b.." + + // Level 2 + /* z\x* 01234 */ /* 0 */ "accca" /* 1 */ "cdedc" /* 2 */ "c.f.c" @@ -1723,7 +1895,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 4 */ "acgca" /* 5 */ "....." - // Level 2 + // Level 3 /* z\x* 01234 */ /* 0 */ "ac.ca" /* 1 */ "c...c" @@ -1732,7 +1904,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 4 */ "achca" /* 5 */ "....." - // Level 3 + // Level 4 /* z\x* 01234 */ /* 0 */ "accca" /* 1 */ "c...c" @@ -1741,7 +1913,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 4 */ "accca" /* 5 */ "....." - // Level 4 + // Level 5 /* z\x* 01234 */ /* 0 */ ".aaa." /* 1 */ "aaaaa" @@ -1751,7 +1923,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] = /* 5 */ ".....", // Connectors: - "-1: 2, 0, 5: 3\n" /* Type -1, direction Z+ */, + "-1: 2, 1, 5: 3\n" /* Type -1, direction Z+ */, // AllowedRotations: 7, /* 1, 2, 3 CCW rotation allowed */ @@ -1800,15 +1972,17 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] = "b: 24: 0\n" /* sandstone */ "c: 8: 0\n" /* water */ "d: 12: 0\n" /* sand */ - "e:118: 3\n" /* cauldronblock */ - "f: 85: 0\n" /* fence */ - "g:128: 2\n" /* sandstonestairs */ - "h:128: 7\n" /* sandstonestairs */ - "i:128: 4\n" /* sandstonestairs */ - "j:128: 5\n" /* sandstonestairs */ - "k:128: 6\n" /* sandstonestairs */ - "l:128: 3\n" /* sandstonestairs */ - "m: 19: 0\n" /* sponge */, + "e: 4: 0\n" /* cobblestone */ + "f: 13: 0\n" /* gravel */ + "g:118: 3\n" /* cauldronblock */ + "h: 85: 0\n" /* fence */ + "i:128: 2\n" /* sandstonestairs */ + "j:128: 7\n" /* sandstonestairs */ + "k:128: 4\n" /* sandstonestairs */ + "l:128: 5\n" /* sandstonestairs */ + "m: 19: 0\n" /* sponge */ + "n:128: 6\n" /* sandstonestairs */ + "o:128: 3\n" /* sandstonestairs */, // Block data: // Level 0 @@ -1873,30 +2047,30 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] = // Level 6 /* z\x* 0123456 */ - /* 0 */ "ddddddd" + /* 0 */ "ddeeedd" /* 1 */ "dbbbbbd" - /* 2 */ "dbcccbd" - /* 3 */ "dbcccbd" - /* 4 */ "dbcccbd" + /* 2 */ "ebcccbe" + /* 3 */ "ebcccbe" + /* 4 */ "ebcccbe" /* 5 */ "dbbbbbd" - /* 6 */ "ddddddd" + /* 6 */ "ddeeedd" // Level 7 /* z\x* 0123456 */ - /* 0 */ "ddbbbdd" + /* 0 */ "ddfffdd" /* 1 */ "dbbbbbd" - /* 2 */ "bbcccbb" - /* 3 */ "bbcccbb" - /* 4 */ "bbcccbb" + /* 2 */ "fbcccbf" + /* 3 */ "fbcccbf" + /* 4 */ "fbcccbf" /* 5 */ "dbbbbbd" - /* 6 */ "ddbbbdd" + /* 6 */ "ddfffdd" // Level 8 /* z\x* 0123456 */ /* 0 */ "......." /* 1 */ ".bbbbb." /* 2 */ ".b...b." - /* 3 */ ".b.e.b." + /* 3 */ ".b.g.b." /* 4 */ ".b...b." /* 5 */ ".bbbbb." /* 6 */ "......." @@ -1904,50 +2078,50 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] = // Level 9 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ ".f...f." + /* 1 */ ".h...h." /* 2 */ "......." - /* 3 */ "...f..." + /* 3 */ "...h..." /* 4 */ "......." - /* 5 */ ".f...f." + /* 5 */ ".h...h." /* 6 */ "......." // Level 10 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ ".f...f." + /* 1 */ ".h...h." /* 2 */ "......." - /* 3 */ "...f..." + /* 3 */ "...h..." /* 4 */ "......." - /* 5 */ ".f...f." + /* 5 */ ".h...h." /* 6 */ "......." // Level 11 /* z\x* 0123456 */ - /* 0 */ "ggggggg" - /* 1 */ "hbhhhbh" - /* 2 */ ".i...j." - /* 3 */ ".i.f.j." - /* 4 */ ".i...j." - /* 5 */ "kbkkkbk" - /* 6 */ "lllllll" + /* 0 */ "iiiiiii" + /* 1 */ "jbjjjbj" + /* 2 */ ".k...l." + /* 3 */ ".k.h.l." + /* 4 */ ".k...l." + /* 5 */ "nbnnnbn" + /* 6 */ "ooooooo" // Level 12 /* z\x* 0123456 */ /* 0 */ "......." - /* 1 */ "ggggggg" - /* 2 */ "hb...bh" - /* 3 */ ".b.f.b." - /* 4 */ "kb...bk" - /* 5 */ "lllllll" + /* 1 */ "iiiiiii" + /* 2 */ "jb...bj" + /* 3 */ ".b.h.b." + /* 4 */ "nb...bn" + /* 5 */ "ooooooo" /* 6 */ "......." // Level 13 /* z\x* 0123456 */ /* 0 */ "......." /* 1 */ "......." - /* 2 */ "ggggggg" + /* 2 */ "iiiiiii" /* 3 */ "bbbbbbb" - /* 4 */ "lllllll" + /* 4 */ "ooooooo" /* 5 */ "......." /* 6 */ ".......", diff --git a/src/Generating/Prefabs/TestRailsPrefabs.cpp b/src/Generating/Prefabs/TestRailsPrefabs.cpp new file mode 100644 index 000000000..3444cb1fa --- /dev/null +++ b/src/Generating/Prefabs/TestRailsPrefabs.cpp @@ -0,0 +1,484 @@ + +// TestRailsPrefabs.cpp + +// Defines the prefabs in the group TestRails + +// NOTE: This file has been generated automatically by GalExport! +// Any manual changes will be overwritten by the next automatic export! + +#include "Globals.h" +#include "TestRailsPrefabs.h" + + + + + +const cPrefab::sDef g_TestRailsPrefabs[] = +{ + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // ActivatorRail: + // The data has been exported from the gallery Plains, area index 251, ID 746, created by Aloe_vera + { + // Size: + 7, 3, 7, // SizeX = 7, SizeY = 3, SizeZ = 7 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 6, 2, 6, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 1: 0\n" /* stone */ + "b: 5: 0\n" /* wood */ + "c:157: 0\n" /* activatorrail */ + "d:157: 2\n" /* activatorrail */ + "e:157: 3\n" /* activatorrail */ + "f:157: 5\n" /* activatorrail */ + "g: 50: 5\n" /* torch */ + "h:157: 4\n" /* activatorrail */ + "i:157: 1\n" /* activatorrail */ + "m: 19: 0\n" /* sponge */, + + // Block data: + // Level 0 + /* z\x* 0123456 */ + /* 0 */ "aaab..." + /* 1 */ "abbbbb." + /* 2 */ "abbb.b." + /* 3 */ "bbbb.bb" + /* 4 */ ".b...b." + /* 5 */ ".bbbbb." + /* 6 */ "...b..." + + // Level 1 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ ".cdbec." + /* 2 */ ".fg..f." + /* 3 */ ".b.g.b." + /* 4 */ ".h...h." + /* 5 */ ".cdbec." + /* 6 */ "......." + + // Level 2 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ "...i..." + /* 2 */ "......." + /* 3 */ ".c...c." + /* 4 */ "......." + /* 5 */ "...i..." + /* 6 */ ".......", + + // Connectors: + "1: 6, 1, 3: 5\n" /* Type 1, direction X+ */ + "-1: 6, 1, 3: 5\n" /* Type -1, direction X+ */ + "1: 3, 1, 6: 3\n" /* Type 1, direction Z+ */ + "-1: 3, 1, 6: 3\n" /* Type -1, direction Z+ */ + "1: 0, 1, 3: 4\n" /* Type 1, direction X- */ + "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */ + "1: 3, 1, 0: 2\n" /* Type 1, direction Z- */ + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + false, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // ActivatorRail + + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // DetectorRail: + // The data has been exported from the gallery Plains, area index 250, ID 745, created by Aloe_vera + { + // Size: + 7, 3, 7, // SizeX = 7, SizeY = 3, SizeZ = 7 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 6, 2, 6, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 1: 0\n" /* stone */ + "b: 5: 0\n" /* wood */ + "c: 28: 0\n" /* detectorrail */ + "d: 28: 2\n" /* detectorrail */ + "e: 28: 3\n" /* detectorrail */ + "f: 28: 5\n" /* detectorrail */ + "g: 50: 5\n" /* torch */ + "h: 28: 4\n" /* detectorrail */ + "i: 28: 1\n" /* detectorrail */ + "m: 19: 0\n" /* sponge */, + + // Block data: + // Level 0 + /* z\x* 0123456 */ + /* 0 */ "aaab..." + /* 1 */ "abbbbb." + /* 2 */ "abbb.b." + /* 3 */ "bbbb.bb" + /* 4 */ ".b...b." + /* 5 */ ".bbbbb." + /* 6 */ "...b..." + + // Level 1 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ ".cdbec." + /* 2 */ ".fg..f." + /* 3 */ ".b.g.b." + /* 4 */ ".h...h." + /* 5 */ ".cdbec." + /* 6 */ "......." + + // Level 2 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ "...i..." + /* 2 */ "......." + /* 3 */ ".c...c." + /* 4 */ "......." + /* 5 */ "...i..." + /* 6 */ ".......", + + // Connectors: + "1: 6, 1, 3: 5\n" /* Type 1, direction X+ */ + "-1: 6, 1, 3: 5\n" /* Type -1, direction X+ */ + "1: 3, 1, 0: 2\n" /* Type 1, direction Z- */ + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */ + "1: 0, 1, 3: 4\n" /* Type 1, direction X- */ + "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */ + "1: 3, 1, 6: 3\n" /* Type 1, direction Z+ */ + "-1: 3, 1, 6: 3\n" /* Type -1, direction Z+ */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + false, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // DetectorRail + + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // PowerRail: + // The data has been exported from the gallery Plains, area index 248, ID 743, created by Aloe_vera + { + // Size: + 7, 3, 7, // SizeX = 7, SizeY = 3, SizeZ = 7 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 6, 2, 6, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 1: 0\n" /* stone */ + "b: 5: 0\n" /* wood */ + "c: 27: 0\n" /* poweredrail */ + "d: 27: 2\n" /* poweredrail */ + "e: 27: 3\n" /* poweredrail */ + "f: 27: 5\n" /* poweredrail */ + "g: 50: 5\n" /* torch */ + "h: 27: 4\n" /* poweredrail */ + "i: 27: 1\n" /* poweredrail */ + "m: 19: 0\n" /* sponge */, + + // Block data: + // Level 0 + /* z\x* 0123456 */ + /* 0 */ "aaab..." + /* 1 */ "abbbbb." + /* 2 */ "abbb.b." + /* 3 */ "bbbb.bb" + /* 4 */ ".b...b." + /* 5 */ ".bbbbb." + /* 6 */ "...b..." + + // Level 1 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ ".cdbec." + /* 2 */ ".fg..f." + /* 3 */ ".b.g.b." + /* 4 */ ".h...h." + /* 5 */ ".cdbec." + /* 6 */ "......." + + // Level 2 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ "...i..." + /* 2 */ "......." + /* 3 */ ".c...c." + /* 4 */ "......." + /* 5 */ "...i..." + /* 6 */ ".......", + + // Connectors: + "1: 6, 1, 3: 5\n" /* Type 1, direction X+ */ + "-1: 6, 1, 3: 5\n" /* Type -1, direction X+ */ + "1: 3, 1, 6: 3\n" /* Type 1, direction Z+ */ + "-1: 3, 1, 6: 3\n" /* Type -1, direction Z+ */ + "1: 0, 1, 3: 4\n" /* Type 1, direction X- */ + "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */ + "1: 3, 1, 0: 2\n" /* Type 1, direction Z- */ + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */ + "1: 6, 1, 3: 5\n" /* Type 1, direction X+ */ + "-1: 6, 1, 3: 5\n" /* Type -1, direction X+ */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + false, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // PowerRail + + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // RegularRail: + // The data has been exported from the gallery Plains, area index 247, ID 742, created by Aloe_vera + { + // Size: + 7, 3, 7, // SizeX = 7, SizeY = 3, SizeZ = 7 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 6, 2, 6, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 1: 0\n" /* stone */ + "b: 5: 0\n" /* wood */ + "c: 66: 6\n" /* tracks */ + "d: 66: 2\n" /* tracks */ + "e: 66: 3\n" /* tracks */ + "f: 66: 7\n" /* tracks */ + "g: 66: 5\n" /* tracks */ + "h: 50: 5\n" /* torch */ + "i: 66: 4\n" /* tracks */ + "j: 66: 9\n" /* tracks */ + "k: 66: 8\n" /* tracks */ + "l: 66: 1\n" /* tracks */ + "m: 19: 0\n" /* sponge */ + "n: 66: 0\n" /* tracks */, + + // Block data: + // Level 0 + /* z\x* 0123456 */ + /* 0 */ "aaab..." + /* 1 */ "abbbbb." + /* 2 */ "abbb.b." + /* 3 */ "bbbb.bb" + /* 4 */ ".b...b." + /* 5 */ ".bbbbb." + /* 6 */ "...b..." + + // Level 1 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ ".cdbef." + /* 2 */ ".gh..g." + /* 3 */ ".b.h.b." + /* 4 */ ".i...i." + /* 5 */ ".jdbek." + /* 6 */ "......." + + // Level 2 + /* z\x* 0123456 */ + /* 0 */ "......." + /* 1 */ "...l..." + /* 2 */ "......." + /* 3 */ ".n...n." + /* 4 */ "......." + /* 5 */ "...l..." + /* 6 */ ".......", + + // Connectors: + "1: 6, 1, 3: 5\n" /* Type 1, direction X+ */ + "-1: 6, 1, 3: 5\n" /* Type -1, direction X+ */ + "1: 3, 1, 6: 3\n" /* Type 1, direction Z+ */ + "-1: 3, 1, 6: 3\n" /* Type -1, direction Z+ */ + "1: 0, 1, 3: 4\n" /* Type 1, direction X- */ + "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */ + "1: 3, 1, 0: 2\n" /* Type 1, direction Z- */ + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + false, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // RegularRail +}; // g_TestRailsPrefabs + + + + + + +const cPrefab::sDef g_TestRailsStartingPrefabs[] = +{ + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // CentralPiece: + // The data has been exported from the gallery Plains, area index 249, ID 744, created by Aloe_vera + { + // Size: + 6, 3, 6, // SizeX = 6, SizeY = 3, SizeZ = 6 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 5, 2, 5, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* air */ + "a: 1: 0\n" /* stone */ + "b: 5: 0\n" /* wood */ + "c: 66: 6\n" /* tracks */ + "d: 66: 2\n" /* tracks */ + "e: 66: 3\n" /* tracks */ + "f: 66: 7\n" /* tracks */ + "g: 66: 5\n" /* tracks */ + "h: 50: 5\n" /* torch */ + "i: 66: 4\n" /* tracks */ + "j: 66: 9\n" /* tracks */ + "k: 66: 8\n" /* tracks */ + "l: 66: 1\n" /* tracks */ + "m: 19: 0\n" /* sponge */ + "n: 66: 0\n" /* tracks */, + + // Block data: + // Level 0 + /* z\x* 012345 */ + /* 0 */ "aaab.." + /* 1 */ "abbbbb" + /* 2 */ "abbb.b" + /* 3 */ "bbbb.b" + /* 4 */ ".b...b" + /* 5 */ ".bbbbb" + + // Level 1 + /* z\x* 012345 */ + /* 0 */ "......" + /* 1 */ ".cdbef" + /* 2 */ ".gh..g" + /* 3 */ ".b.h.b" + /* 4 */ ".i...i" + /* 5 */ ".jdbek" + + // Level 2 + /* z\x* 012345 */ + /* 0 */ "......" + /* 1 */ "...l.." + /* 2 */ "......" + /* 3 */ ".n...n" + /* 4 */ "......" + /* 5 */ "...l..", + + // Connectors: + "1: 3, 1, 6: 3\n" /* Type 1, direction Z+ */ + "1: 0, 1, 3: 4\n" /* Type 1, direction X- */ + "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */ + "-1: 3, 1, 6: 3\n" /* Type -1, direction Z+ */ + "1: 6, 1, 3: 5\n" /* Type 1, direction X+ */ + "-1: 6, 1, 3: 5\n" /* Type -1, direction X+ */ + "1: 3, 1, 0: 2\n" /* Type 1, direction Z- */ + "-1: 3, 1, 0: 2\n" /* Type -1, direction Z- */, + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotation allowed */ + + // Merge strategy: + cBlockArea::msSpongePrint, + + // ShouldExtendFloor: + true, + + // DefaultWeight: + 100, + + // DepthWeight: + "", + + // AddWeightIfSame: + 0, + + // MoveToGround: + false, + }, // CentralPiece +}; + + + + + +// The prefab counts: + +const size_t g_TestRailsPrefabsCount = ARRAYCOUNT(g_TestRailsPrefabs); + +const size_t g_TestRailsStartingPrefabsCount = ARRAYCOUNT(g_TestRailsStartingPrefabs); + diff --git a/src/Generating/Prefabs/TestRailsPrefabs.h b/src/Generating/Prefabs/TestRailsPrefabs.h new file mode 100644 index 000000000..24b84de74 --- /dev/null +++ b/src/Generating/Prefabs/TestRailsPrefabs.h @@ -0,0 +1,15 @@ + +// TestRailsPrefabs.h + +// Declares the prefabs in the group TestRails + +#include "../Prefab.h" + + + + + +extern const cPrefab::sDef g_TestRailsPrefabs[]; +extern const cPrefab::sDef g_TestRailsStartingPrefabs[]; +extern const size_t g_TestRailsPrefabsCount; +extern const size_t g_TestRailsStartingPrefabsCount; diff --git a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp index 39748a223..691d8aa9d 100644 --- a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp +++ b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp @@ -366,7 +366,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] = true, // DefaultWeight: - 100, + 200, // DepthWeight: "", diff --git a/src/Generating/RainbowRoadsGen.cpp b/src/Generating/RainbowRoadsGen.cpp index d1e1f4bda..3b0ff7df8 100644 --- a/src/Generating/RainbowRoadsGen.cpp +++ b/src/Generating/RainbowRoadsGen.cpp @@ -29,11 +29,12 @@ class cRainbowRoadsGen::cRainbowRoads : public: cRainbowRoads( int a_Seed, + int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_MaxDepth, int a_MaxSize ) : - super(a_OriginX, a_OriginZ), + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), m_Seed(a_Seed), m_Noise(a_Seed), m_MaxSize(a_MaxSize), @@ -92,8 +93,8 @@ protected: -cRainbowRoadsGen::cRainbowRoadsGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize) : - super(a_Seed, a_GridSize, a_GridSize, a_MaxSize, a_MaxSize, 100), +cRainbowRoadsGen::cRainbowRoadsGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize) : + super(a_Seed, a_GridSize, a_GridSize, a_MaxOffset, a_MaxOffset, a_MaxSize, a_MaxSize, 100), m_Noise(a_Seed + 9000), m_MaxDepth(a_MaxDepth), m_MaxSize(a_MaxSize) @@ -104,10 +105,10 @@ cRainbowRoadsGen::cRainbowRoadsGen(int a_Seed, int a_GridSize, int a_MaxDepth, i -cGridStructGen::cStructurePtr cRainbowRoadsGen::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cRainbowRoadsGen::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { // Create a base based on the chosen prefabs: - return cStructurePtr(new cRainbowRoads(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize)); + return cStructurePtr(new cRainbowRoads(m_Seed, a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize)); } diff --git a/src/Generating/RainbowRoadsGen.h b/src/Generating/RainbowRoadsGen.h index acbd5abf9..5813e1d14 100644 --- a/src/Generating/RainbowRoadsGen.h +++ b/src/Generating/RainbowRoadsGen.h @@ -22,7 +22,7 @@ class cRainbowRoadsGen : typedef cGridStructGen super; public: - cRainbowRoadsGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize); + cRainbowRoadsGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize); protected: class cRainbowRoads; // fwd: RainbowRoadsGen.cpp @@ -39,7 +39,7 @@ protected: // cGridStructGen overrides: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/Generating/Ravines.cpp b/src/Generating/Ravines.cpp index 2722e4ca3..24f2cc3ab 100644 --- a/src/Generating/Ravines.cpp +++ b/src/Generating/Ravines.cpp @@ -61,7 +61,7 @@ class cStructGenRavines::cRavine : public: - cRavine(int a_BlockX, int a_BlockZ, int a_Size, cNoise & a_Noise); + cRavine(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_Size, cNoise & a_Noise); #ifdef _DEBUG /// Exports itself as a SVG line definition @@ -81,7 +81,7 @@ protected: // cStructGenRavines: cStructGenRavines::cStructGenRavines(int a_Seed, int a_Size) : - super(a_Seed, a_Size, a_Size, a_Size * 2, a_Size * 2, 100), + super(a_Seed, a_Size, a_Size, a_Size, a_Size, a_Size * 2, a_Size * 2, 100), m_Noise(a_Seed), m_Size(a_Size) { @@ -91,9 +91,9 @@ cStructGenRavines::cStructGenRavines(int a_Seed, int a_Size) : -cGridStructGen::cStructurePtr cStructGenRavines::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cStructGenRavines::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { - return cStructurePtr(new cRavine(a_OriginX, a_OriginZ, m_Size, m_Noise)); + return cStructurePtr(new cRavine(a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_Size, m_Noise)); } @@ -104,8 +104,8 @@ cGridStructGen::cStructurePtr cStructGenRavines::CreateStructure(int a_OriginX, /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // cStructGenRavines::cRavine -cStructGenRavines::cRavine::cRavine(int a_OriginX, int a_OriginZ, int a_Size, cNoise & a_Noise) : - super(a_OriginX, a_OriginZ) +cStructGenRavines::cRavine::cRavine(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_Size, cNoise & a_Noise) : + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ) { // Calculate the ravine shape-defining points: GenerateBaseDefPoints(a_OriginX, a_OriginZ, a_Size, a_Noise); diff --git a/src/Generating/Ravines.h b/src/Generating/Ravines.h index 30b47e9ec..3e41c5ce6 100644 --- a/src/Generating/Ravines.h +++ b/src/Generating/Ravines.h @@ -32,7 +32,7 @@ protected: // cGridStructGen overrides: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/Generating/TestRailsGen.cpp b/src/Generating/TestRailsGen.cpp new file mode 100644 index 000000000..c40c1a9b6 --- /dev/null +++ b/src/Generating/TestRailsGen.cpp @@ -0,0 +1,116 @@ + +// TestRailsGen.cpp + +// Implements the cTestRailsGen class representing the testing rails generator + +#include "Globals.h" +#include "TestRailsGen.h" +#include "Prefabs/TestRailsPrefabs.h" +#include "PieceGenerator.h" + + + + + +static cPrefabPiecePool g_TestRails(g_TestRailsPrefabs, g_TestRailsPrefabsCount, g_TestRailsStartingPrefabs, g_TestRailsStartingPrefabsCount); + + + + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// cTestRailsGen::cTestRails: + +class cTestRailsGen::cTestRails : + public cGridStructGen::cStructure +{ + typedef cGridStructGen::cStructure super; + +public: + cTestRails( + int a_Seed, + int a_GridX, int a_GridZ, + int a_OriginX, int a_OriginZ, + int a_MaxDepth, + int a_MaxSize + ) : + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), + m_Seed(a_Seed), + m_Noise(a_Seed), + m_MaxSize(a_MaxSize), + m_Borders(a_OriginX - a_MaxSize, 0, a_OriginZ - a_MaxSize, a_OriginX + a_MaxSize, 255, a_OriginZ + a_MaxSize) + { + // Generate the pieces for this test: + cBFSPieceGenerator pg(g_TestRails, a_Seed); + pg.PlacePieces(a_OriginX, 150, a_OriginZ, a_MaxDepth, m_Pieces); + if (m_Pieces.empty()) + { + return; + } + } + + ~cTestRails() + { + cPieceGenerator::FreePieces(m_Pieces); + } + +protected: + /** Seed for the random functions */ + int m_Seed; + + /** The noise used as a pseudo-random generator */ + cNoise m_Noise; + + /** Maximum size, in X/Z blocks, of the structure (radius from the origin) */ + int m_MaxSize; + + /** Borders of the structure - no item may reach out of this cuboid. */ + cCuboid m_Borders; + + /** The rails pieces, placed by the generator. */ + cPlacedPieces m_Pieces; + + + // cGridStructGen::cStructure overrides: + virtual void DrawIntoChunk(cChunkDesc & a_Chunk) override + { + for (cPlacedPieces::iterator itr = m_Pieces.begin(), end = m_Pieces.end(); itr != end; ++itr) + { + cPrefab & Prefab = (cPrefab &)((*itr)->GetPiece()); + Prefab.Draw(a_Chunk, *itr); + } // for itr - m_PlacedPieces[] + } +} ; + + + + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// cTestRailsGen: + + + + + +cTestRailsGen::cTestRailsGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize) : + super(a_Seed, a_GridSize, a_GridSize, a_MaxOffset, a_MaxOffset, a_MaxSize, a_MaxSize, 100), + m_Noise(a_Seed + 1000), + m_MaxDepth(a_MaxDepth), + m_MaxSize(a_MaxSize) +{ +} + + + + + +cGridStructGen::cStructurePtr cTestRailsGen::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) +{ + // Create a base based on the chosen prefabs: + return cStructurePtr(new cTestRails(m_Seed, a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize)); +} + + + + diff --git a/src/Generating/TestRailsGen.h b/src/Generating/TestRailsGen.h new file mode 100644 index 000000000..5b0ce95f4 --- /dev/null +++ b/src/Generating/TestRailsGen.h @@ -0,0 +1,47 @@ + +// TestRailsGen.h + +// Declares the cTestRailsGen class representing the testing rails generator + + + + + +#pragma once + +#include "GridStructGen.h" +#include "PrefabPiecePool.h" + + + + + +class cTestRailsGen : + public cGridStructGen +{ + typedef cGridStructGen super; + +public: + cTestRailsGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize); + +protected: + class cTestRails; // fwd: TestRailsGen.cpp + + + /** The noise used for generating random numbers */ + cNoise m_Noise; + + /** Maximum depth of the generator tree*/ + int m_MaxDepth; + + /** Maximum size, in X/Z blocks, of the base (radius from the origin) */ + int m_MaxSize; + + + // cGridStructGen overrides: + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; +} ; + + + + diff --git a/src/Generating/UnderwaterBaseGen.cpp b/src/Generating/UnderwaterBaseGen.cpp index ff6f17dde..d3abae9b7 100644 --- a/src/Generating/UnderwaterBaseGen.cpp +++ b/src/Generating/UnderwaterBaseGen.cpp @@ -29,11 +29,12 @@ class cUnderwaterBaseGen::cUnderwaterBase : public: cUnderwaterBase( int a_Seed, + int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_MaxDepth, int a_MaxSize ) : - super(a_OriginX, a_OriginZ), + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), m_Seed(a_Seed), m_Noise(a_Seed), m_MaxSize(a_MaxSize), @@ -92,8 +93,8 @@ protected: -cUnderwaterBaseGen::cUnderwaterBaseGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen) : - super(a_Seed, a_GridSize, a_GridSize, a_MaxSize, a_MaxSize, 100), +cUnderwaterBaseGen::cUnderwaterBaseGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen) : + super(a_Seed, a_GridSize, a_GridSize, a_MaxOffset, a_MaxOffset, a_MaxSize, a_MaxSize, 100), m_Noise(a_Seed + 1000), m_MaxDepth(a_MaxDepth), m_MaxSize(a_MaxSize), @@ -105,7 +106,7 @@ cUnderwaterBaseGen::cUnderwaterBaseGen(int a_Seed, int a_GridSize, int a_MaxDept -cGridStructGen::cStructurePtr cUnderwaterBaseGen::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cUnderwaterBaseGen::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { // Generate the biomes for the chunk surrounding the origin: int ChunkX, ChunkZ; @@ -134,7 +135,7 @@ cGridStructGen::cStructurePtr cUnderwaterBaseGen::CreateStructure(int a_OriginX, } // for i - Biomes[] // Create a base based on the chosen prefabs: - return cStructurePtr(new cUnderwaterBase(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize)); + return cStructurePtr(new cUnderwaterBase(m_Seed, a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize)); } diff --git a/src/Generating/UnderwaterBaseGen.h b/src/Generating/UnderwaterBaseGen.h index 0aefbb4c7..d6267b602 100644 --- a/src/Generating/UnderwaterBaseGen.h +++ b/src/Generating/UnderwaterBaseGen.h @@ -22,7 +22,7 @@ class cUnderwaterBaseGen : typedef cGridStructGen super; public: - cUnderwaterBaseGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen); + cUnderwaterBaseGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen); protected: class cUnderwaterBase; // fwd: UnderwaterBaseGen.cpp @@ -42,7 +42,7 @@ protected: // cGridStructGen overrides: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp index 9917141ed..2b7ecc837 100644 --- a/src/Generating/VillageGen.cpp +++ b/src/Generating/VillageGen.cpp @@ -110,6 +110,7 @@ class cVillageGen::cVillage : public: cVillage( int a_Seed, + int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ, int a_MaxRoadDepth, int a_MaxSize, @@ -119,7 +120,7 @@ public: BLOCKTYPE a_RoadBlock, BLOCKTYPE a_WaterRoadBlock ) : - super(a_OriginX, a_OriginZ), + super(a_GridX, a_GridZ, a_OriginX, a_OriginZ), m_Seed(a_Seed), m_Noise(a_Seed), m_MaxSize(a_MaxSize), @@ -358,8 +359,8 @@ static cVillagePiecePool * g_PlainsVillagePools[] = -cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, int a_MinDensity, int a_MaxDensity, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) : - super(a_Seed, a_GridSize, a_GridSize, a_MaxSize, a_MaxSize, 100), +cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize, int a_MinDensity, int a_MaxDensity, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) : + super(a_Seed, a_GridSize, a_GridSize, a_MaxOffset, a_MaxOffset, a_MaxSize, a_MaxSize, 100), m_Noise(a_Seed + 1000), m_MaxDepth(a_MaxDepth), m_MaxSize(a_MaxSize), @@ -374,7 +375,7 @@ cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSi -cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_OriginZ) +cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) { // Generate the biomes for the chunk surrounding the origin: int ChunkX, ChunkZ; @@ -435,7 +436,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_ { return cStructurePtr(); } - return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, Density, *VillagePrefabs, m_HeightGen, RoadBlock, WaterRoadBlock)); + return cStructurePtr(new cVillage(m_Seed, a_GridX, a_GridZ, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, Density, *VillagePrefabs, m_HeightGen, RoadBlock, WaterRoadBlock)); } diff --git a/src/Generating/VillageGen.h b/src/Generating/VillageGen.h index 5faaae8a6..694ea2358 100644 --- a/src/Generating/VillageGen.h +++ b/src/Generating/VillageGen.h @@ -21,7 +21,7 @@ class cVillageGen : { typedef cGridStructGen super; public: - cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, int a_MinDensity, int a_MaxDensity, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen); + cVillageGen(int a_Seed, int a_GridSize, int a_MaxOffset, int a_MaxDepth, int a_MaxSize, int a_MinDensity, int a_MaxDensity, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen); protected: class cVillage; // fwd: VillageGen.cpp @@ -49,7 +49,7 @@ protected: // cGridStructGen overrides: - virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override; + virtual cStructurePtr CreateStructure(int a_GridX, int a_GridZ, int a_OriginX, int a_OriginZ) override; } ; diff --git a/src/GroupManager.cpp b/src/GroupManager.cpp index e570bb2b1..11e62c223 100644 --- a/src/GroupManager.cpp +++ b/src/GroupManager.cpp @@ -30,10 +30,12 @@ cGroupManager::~cGroupManager() for( GroupMap::iterator itr = m_pState->Groups.begin(); itr != m_pState->Groups.end(); ++itr ) { delete itr->second; + itr->second = NULL; } m_pState->Groups.clear(); delete m_pState; + m_pState = NULL; } diff --git a/src/HTTPServer/HTTPConnection.cpp b/src/HTTPServer/HTTPConnection.cpp index b127e7091..21ff14373 100644 --- a/src/HTTPServer/HTTPConnection.cpp +++ b/src/HTTPServer/HTTPConnection.cpp @@ -28,6 +28,7 @@ cHTTPConnection::~cHTTPConnection() { // LOGD("HTTP: Connection deleting: %p", this); delete m_CurrentRequest; + m_CurrentRequest = NULL; } diff --git a/src/ItemGrid.cpp b/src/ItemGrid.cpp index 34a267bab..cd36b1f2a 100644 --- a/src/ItemGrid.cpp +++ b/src/ItemGrid.cpp @@ -28,6 +28,7 @@ cItemGrid::cItemGrid(int a_Width, int a_Height) : cItemGrid::~cItemGrid() { delete[] m_Slots; + m_Slots = NULL; } diff --git a/src/Items/ItemBow.h b/src/Items/ItemBow.h index e0ab339d3..821e2ab26 100644 --- a/src/Items/ItemBow.h +++ b/src/Items/ItemBow.h @@ -69,6 +69,7 @@ public: if (!Arrow->Initialize(*a_Player->GetWorld())) { delete Arrow; + Arrow = NULL; return; } a_Player->GetWorld()->BroadcastSpawnEntity(*Arrow); diff --git a/src/Items/ItemHandler.cpp b/src/Items/ItemHandler.cpp index d97f986ba..f639423ae 100644 --- a/src/Items/ItemHandler.cpp +++ b/src/Items/ItemHandler.cpp @@ -260,6 +260,7 @@ void cItemHandler::Deinit() for(int i = 0; i < 2267; i++) { delete m_ItemHandler[i]; + m_ItemHandler[i] = NULL; } memset(m_ItemHandler, 0, sizeof(m_ItemHandler)); // Don't leave any dangling pointers around, just in case m_HandlerInitialized = false; diff --git a/src/Items/ItemItemFrame.h b/src/Items/ItemItemFrame.h index 097f04d0b..b258b4aea 100644 --- a/src/Items/ItemItemFrame.h +++ b/src/Items/ItemItemFrame.h @@ -37,6 +37,7 @@ public: if (!ItemFrame->Initialize(*a_World)) { delete ItemFrame; + ItemFrame = NULL; return false; } diff --git a/src/Items/ItemThrowable.h b/src/Items/ItemThrowable.h index 35c2b8731..25935a1bc 100644 --- a/src/Items/ItemThrowable.h +++ b/src/Items/ItemThrowable.h @@ -31,6 +31,17 @@ public: Vector3d Pos = a_Player->GetThrowStartPos(); Vector3d Speed = a_Player->GetLookVector() * m_SpeedCoeff; + // Play sound + cFastRandom Random; + a_World->BroadcastSoundEffect( + "random.bow", + (int)std::floor(a_Player->GetPosX() * 8.0), + (int)std::floor((a_Player->GetPosY() - a_Player->GetHeight()) * 8.0), + (int)std::floor(a_Player->GetPosZ() * 8.0), + 0.5F, + 0.4F / (Random.NextFloat(1.0F) * 0.4F + 0.8F) + ); + if (a_World->CreateProjectile(Pos.x, Pos.y, Pos.z, m_ProjectileKind, a_Player, a_Player->GetEquippedItem(), &Speed) < 0) { return false; diff --git a/src/LightingThread.cpp b/src/LightingThread.cpp index dc19bf500..33bc08467 100644 --- a/src/LightingThread.cpp +++ b/src/LightingThread.cpp @@ -23,7 +23,8 @@ class cReader : BLOCKTYPE * OutputRows = m_BlockTypes; int InputIdx = 0; int OutputIdx = m_ReadingChunkX + m_ReadingChunkZ * cChunkDef::Width * 3; - for (int y = 0; y < cChunkDef::Height; y++) + int MaxHeight = std::min(+cChunkDef::Height, m_MaxHeight + 16); // Need 16 blocks above the highest + for (int y = 0; y < MaxHeight; y++) { for (int z = 0; z < cChunkDef::Width; z++) { @@ -40,6 +41,7 @@ class cReader : virtual void HeightMap(const cChunkDef::HeightMap * a_Heightmap) override { + // Copy the entire heightmap, distribute it into the 3x3 chunk blob: typedef struct {HEIGHTTYPE m_Row[16]; } ROW; ROW * InputRows = (ROW *)a_Heightmap; ROW * OutputRows = (ROW *)m_HeightMap; @@ -50,13 +52,32 @@ class cReader : OutputRows[OutputIdx] = InputRows[InputIdx++]; OutputIdx += 3; } // for z + + // Find the highest block in the entire chunk, use it as a base for m_MaxHeight: + HEIGHTTYPE MaxHeight = m_MaxHeight; + for (size_t i = 0; i < ARRAYCOUNT(*a_Heightmap); i++) + { + if ((*a_Heightmap)[i] > MaxHeight) + { + MaxHeight = (*a_Heightmap)[i]; + } + } + m_MaxHeight = MaxHeight; } public: int m_ReadingChunkX; // 0, 1 or 2; x-offset of the chunk we're reading from the BlockTypes start int m_ReadingChunkZ; // 0, 1 or 2; z-offset of the chunk we're reading from the BlockTypes start + HEIGHTTYPE m_MaxHeight; // Maximum value in this chunk's heightmap BLOCKTYPE * m_BlockTypes; // 3x3 chunks of block types, organized as a single XZY blob of data (instead of 3x3 XZY blobs) HEIGHTTYPE * m_HeightMap; // 3x3 chunks of height map, organized as a single XZY blob of data (instead of 3x3 XZY blobs) + + cReader(BLOCKTYPE * a_BlockTypes, HEIGHTTYPE * a_HeightMap) : + m_MaxHeight(0), + m_BlockTypes(a_BlockTypes), + m_HeightMap(a_HeightMap) + { + } } ; @@ -224,7 +245,7 @@ void cLightingThread::LightChunk(cLightingChunkStay & a_Item) // DEBUG: Save chunk data with highlighted seeds for visual inspection: cFile f4; if ( - f4.Open(Printf("Chunk_%d_%d_seeds.grab", a_Item.x, a_Item.z), cFile::fmWrite) + f4.Open(Printf("Chunk_%d_%d_seeds.grab", a_Item.m_ChunkX, a_Item.m_ChunkZ), cFile::fmWrite) ) { for (int z = 0; z < cChunkDef::Width * 3; z++) @@ -243,6 +264,7 @@ void cLightingThread::LightChunk(cLightingChunkStay & a_Item) f4.Write(Seeds, cChunkDef::Width * 3); } } + f4.Close(); } //*/ @@ -252,9 +274,9 @@ void cLightingThread::LightChunk(cLightingChunkStay & a_Item) // DEBUG: Save XY slices of the chunk data and lighting for visual inspection: cFile f1, f2, f3; if ( - f1.Open(Printf("Chunk_%d_%d_data.grab", a_Item.x, a_Item.z), cFile::fmWrite) && - f2.Open(Printf("Chunk_%d_%d_sky.grab", a_Item.x, a_Item.z), cFile::fmWrite) && - f3.Open(Printf("Chunk_%d_%d_glow.grab", a_Item.x, a_Item.z), cFile::fmWrite) + f1.Open(Printf("Chunk_%d_%d_data.grab", a_Item.m_ChunkX, a_Item.m_ChunkZ), cFile::fmWrite) && + f2.Open(Printf("Chunk_%d_%d_sky.grab", a_Item.m_ChunkX, a_Item.m_ChunkZ), cFile::fmWrite) && + f3.Open(Printf("Chunk_%d_%d_glow.grab", a_Item.m_ChunkX, a_Item.m_ChunkZ), cFile::fmWrite) ) { for (int z = 0; z < cChunkDef::Width * 3; z++) @@ -273,6 +295,9 @@ void cLightingThread::LightChunk(cLightingChunkStay & a_Item) f3.Write(BlockLight, cChunkDef::Width * 3); } } + f1.Close(); + f2.Close(); + f3.Close(); } //*/ @@ -293,11 +318,9 @@ void cLightingThread::LightChunk(cLightingChunkStay & a_Item) -bool cLightingThread::ReadChunks(int a_ChunkX, int a_ChunkZ) +void cLightingThread::ReadChunks(int a_ChunkX, int a_ChunkZ) { - cReader Reader; - Reader.m_BlockTypes = m_BlockTypes; - Reader.m_HeightMap = m_HeightMap; + cReader Reader(m_BlockTypes, m_HeightMap); for (int z = 0; z < 3; z++) { @@ -305,16 +328,13 @@ bool cLightingThread::ReadChunks(int a_ChunkX, int a_ChunkZ) for (int x = 0; x < 3; x++) { Reader.m_ReadingChunkX = x; - if (!m_World->GetChunkData(a_ChunkX + x - 1, a_ChunkZ + z - 1, Reader)) - { - return false; - } + VERIFY(m_World->GetChunkData(a_ChunkX + x - 1, a_ChunkZ + z - 1, Reader)); } // for z } // for x memset(m_BlockLight, 0, sizeof(m_BlockLight)); memset(m_SkyLight, 0, sizeof(m_SkyLight)); - return true; + m_MaxHeight = Reader.m_MaxHeight; } @@ -405,6 +425,50 @@ void cLightingThread::PrepareBlockLight(void) +void cLightingThread::PrepareBlockLight2(void) +{ + // Clear seeds: + memset(m_IsSeed1, 0, sizeof(m_IsSeed1)); + memset(m_IsSeed2, 0, sizeof(m_IsSeed2)); + m_NumSeeds = 0; + + // Add each emissive block into the seeds: + for (int y = 0; y < m_MaxHeight; y++) + { + int BaseY = y * BlocksPerYLayer; // Partial offset into m_BlockTypes for the Y coord + for (int z = 1; z < cChunkDef::Width * 3 - 1; z++) + { + int HBaseZ = z * cChunkDef::Width * 3; // Partial offset into m_Heightmap for the Z coord + int BaseZ = BaseY + HBaseZ; // Partial offset into m_BlockTypes for the Y and Z coords + for (int x = 1; x < cChunkDef::Width * 3 - 1; x++) + { + int idx = BaseZ + x; + if (y > m_HeightMap[HBaseZ + x]) + { + // We're above the heightmap, ignore the block + continue; + } + if (cBlockInfo::GetLightValue(m_BlockTypes[idx]) == 0) + { + // Not a light-emissive block + continue; + } + + // Add current block as a seed: + m_IsSeed1[idx] = true; + m_SeedIdx1[m_NumSeeds++] = idx; + + // Light it up: + m_BlockLight[idx] = cBlockInfo::GetLightValue(m_BlockTypes[idx]); + } + } + } +} + + + + + void cLightingThread::CalcLight(NIBBLETYPE * a_Light) { int NumSeeds2 = 0; diff --git a/src/LightingThread.h b/src/LightingThread.h index 770ae809f..a484fcbed 100644 --- a/src/LightingThread.h +++ b/src/LightingThread.h @@ -108,6 +108,9 @@ protected: cEvent m_evtItemAdded; // Set when queue is appended, or to stop the thread cEvent m_evtQueueEmpty; // Set when the queue gets empty + /** The highest block in the current 3x3 chunk data */ + HEIGHTTYPE m_MaxHeight; + // Buffers for the 3x3 chunk data // These buffers alone are 1.7 MiB in size, therefore they cannot be located on the stack safely - some architectures may have only 1 MiB for stack, or even less @@ -136,8 +139,8 @@ protected: /** Lights the entire chunk. If neighbor chunks don't exist, touches them and re-queues the chunk */ void LightChunk(cLightingChunkStay & a_Item); - /** Prepares m_BlockTypes and m_HeightMap data; returns false if any of the chunks fail. Zeroes out the light arrays */ - bool ReadChunks(int a_ChunkX, int a_ChunkZ); + /** Prepares m_BlockTypes and m_HeightMap data; zeroes out the light arrays */ + void ReadChunks(int a_ChunkX, int a_ChunkZ); /** Uses m_HeightMap to initialize the m_SkyLight[] data; fills in seeds for the skylight */ void PrepareSkyLight(void); @@ -145,6 +148,10 @@ protected: /** Uses m_BlockTypes to initialize the m_BlockLight[] data; fills in seeds for the blocklight */ void PrepareBlockLight(void); + /** Same as PrepareBlockLight(), but uses a different traversal scheme; possibly better perf cache-wise. + To be compared in perf benchmarks. */ + void PrepareBlockLight2(void); + /** Calculates light in the light array specified, using stored seeds */ void CalcLight(NIBBLETYPE * a_Light); diff --git a/src/MCLogger.cpp b/src/MCLogger.cpp index 583438d65..ad2029589 100644 --- a/src/MCLogger.cpp +++ b/src/MCLogger.cpp @@ -57,6 +57,7 @@ cMCLogger::~cMCLogger() { m_Log->Log("--- Stopped Log ---\n"); delete m_Log; + m_Log = NULL; if (this == s_MCLogger) { s_MCLogger = NULL; diff --git a/src/Mobs/Blaze.cpp b/src/Mobs/Blaze.cpp index 19bdf8737..b4104d530 100644 --- a/src/Mobs/Blaze.cpp +++ b/src/Mobs/Blaze.cpp @@ -47,6 +47,7 @@ void cBlaze::Attack(float a_Dt) if (!FireCharge->Initialize(*m_World)) { delete FireCharge; + FireCharge = NULL; return; } m_World->BroadcastSpawnEntity(*FireCharge); diff --git a/src/Mobs/Ghast.cpp b/src/Mobs/Ghast.cpp index 4df8e165c..6aac14779 100644 --- a/src/Mobs/Ghast.cpp +++ b/src/Mobs/Ghast.cpp @@ -49,6 +49,7 @@ void cGhast::Attack(float a_Dt) if (!GhastBall->Initialize(*m_World)) { delete GhastBall; + GhastBall = NULL; return; } m_World->BroadcastSpawnEntity(*GhastBall); diff --git a/src/Mobs/Skeleton.cpp b/src/Mobs/Skeleton.cpp index e7f3971cc..e3357185d 100644 --- a/src/Mobs/Skeleton.cpp +++ b/src/Mobs/Skeleton.cpp @@ -84,6 +84,7 @@ void cSkeleton::Attack(float a_Dt) if (!Arrow->Initialize(*m_World)) { delete Arrow; + Arrow = NULL; return; } m_World->BroadcastSpawnEntity(*Arrow); diff --git a/src/MonsterConfig.cpp b/src/MonsterConfig.cpp index 72a3a3245..f5e746ce8 100644 --- a/src/MonsterConfig.cpp +++ b/src/MonsterConfig.cpp @@ -47,6 +47,7 @@ cMonsterConfig::cMonsterConfig(void) cMonsterConfig::~cMonsterConfig() { delete m_pState; + m_pState = NULL; } diff --git a/src/Noise.cpp b/src/Noise.cpp index 040421106..fbd2a1800 100644 --- a/src/Noise.cpp +++ b/src/Noise.cpp @@ -877,6 +877,7 @@ void cPerlinNoise::Generate2D( if (ShouldFreeWorkspace) { delete[] a_Workspace; + a_Workspace = NULL; } } @@ -943,6 +944,7 @@ void cPerlinNoise::Generate3D( if (ShouldFreeWorkspace) { delete[] a_Workspace; + a_Workspace = NULL; } } @@ -1045,6 +1047,7 @@ void cRidgedMultiNoise::Generate2D( if (ShouldFreeWorkspace) { delete[] a_Workspace; + a_Workspace = NULL; } } @@ -1111,6 +1114,7 @@ void cRidgedMultiNoise::Generate3D( if (ShouldFreeWorkspace) { delete[] a_Workspace; + a_Workspace = NULL; } } diff --git a/src/OSSupport/Event.cpp b/src/OSSupport/Event.cpp index 649a0a3cf..6b8fccde2 100644 --- a/src/OSSupport/Event.cpp +++ b/src/OSSupport/Event.cpp @@ -71,6 +71,7 @@ cEvent::~cEvent() { sem_destroy(m_Event); delete m_Event; + m_Event = NULL; } #endif } diff --git a/src/OSSupport/SocketThreads.cpp b/src/OSSupport/SocketThreads.cpp index 0ab5b6298..ca8b8438d 100644 --- a/src/OSSupport/SocketThreads.cpp +++ b/src/OSSupport/SocketThreads.cpp @@ -61,6 +61,7 @@ bool cSocketThreads::AddClient(const cSocket & a_Socket, cCallback * a_Client) // There was an error launching the thread (but it was already logged along with the reason) LOGERROR("A new cSocketThread failed to start"); delete Thread; + Thread = NULL; return false; } Thread->AddClient(a_Socket, a_Client); diff --git a/src/OSSupport/Thread.cpp b/src/OSSupport/Thread.cpp index 7a10ef8d2..535784613 100644 --- a/src/OSSupport/Thread.cpp +++ b/src/OSSupport/Thread.cpp @@ -66,11 +66,13 @@ cThread::cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_Thre cThread::~cThread() { delete m_Event; + m_Event = NULL; if( m_StopEvent ) { m_StopEvent->Wait(); delete m_StopEvent; + m_StopEvent = NULL; } } diff --git a/src/Protocol/ProtocolRecognizer.cpp b/src/Protocol/ProtocolRecognizer.cpp index 4b9d2e97a..e1b22978e 100644 --- a/src/Protocol/ProtocolRecognizer.cpp +++ b/src/Protocol/ProtocolRecognizer.cpp @@ -37,6 +37,7 @@ cProtocolRecognizer::cProtocolRecognizer(cClientHandle * a_Client) : cProtocolRecognizer::~cProtocolRecognizer() { delete m_Protocol; + m_Protocol = NULL; } diff --git a/src/Server.cpp b/src/Server.cpp index 66bccd680..2c695cc70 100644 --- a/src/Server.cpp +++ b/src/Server.cpp @@ -326,6 +326,7 @@ void cServer::OnConnectionAccepted(cSocket & a_Socket) LOGERROR("Client \"%s\" cannot be handled, server probably unstable", ClientIP.c_str()); a_Socket.CloseSocket(); delete NewHandle; + NewHandle = NULL; return; } diff --git a/src/Simulator/FluidSimulator.cpp b/src/Simulator/FluidSimulator.cpp index 4a84084d2..f64955cb2 100644 --- a/src/Simulator/FluidSimulator.cpp +++ b/src/Simulator/FluidSimulator.cpp @@ -169,7 +169,8 @@ Direction cFluidSimulator::GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a X = Pos->x; Z = Pos->z; } - }else if(BlockID == E_BLOCK_AIR) + } + else if(BlockID == E_BLOCK_AIR) { LowestPoint = 9; //This always dominates X = Pos->x; @@ -177,6 +178,7 @@ Direction cFluidSimulator::GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a } delete Pos; + Pos = NULL; } if (LowestPoint == m_World.GetBlockMeta(a_X, a_Y, a_Z)) diff --git a/src/Simulator/IncrementalRedstoneSimulator.cpp b/src/Simulator/IncrementalRedstoneSimulator.cpp index eff11bd01..183c527ca 100644 --- a/src/Simulator/IncrementalRedstoneSimulator.cpp +++ b/src/Simulator/IncrementalRedstoneSimulator.cpp @@ -59,19 +59,21 @@ void cIncrementalRedstoneSimulator::RedstoneAddBlock(int a_BlockX, int a_BlockY, int RelZ = 0; BLOCKTYPE Block; NIBBLETYPE Meta; + cChunk * Chunk; if (a_OtherChunk != NULL) { RelX = a_BlockX - a_OtherChunk->GetPosX() * cChunkDef::Width; RelZ = a_BlockZ - a_OtherChunk->GetPosZ() * cChunkDef::Width; a_OtherChunk->GetBlockTypeMeta(RelX, a_BlockY, RelZ, Block, Meta); - a_OtherChunk->SetIsRedstoneDirty(true); + Chunk = a_OtherChunk; } else { RelX = a_BlockX - a_Chunk->GetPosX() * cChunkDef::Width; RelZ = a_BlockZ - a_Chunk->GetPosZ() * cChunkDef::Width; a_Chunk->GetBlockTypeMeta(RelX, a_BlockY, RelZ, Block, Meta); + Chunk = a_Chunk; } // Every time a block is changed (AddBlock called), we want to go through all lists and check to see if the coordiantes stored within are still valid @@ -90,7 +92,7 @@ void cIncrementalRedstoneSimulator::RedstoneAddBlock(int a_BlockX, int a_BlockY, { LOGD("cIncrementalRedstoneSimulator: Erased block @ {%i, %i, %i} from powered blocks list as it no longer connected to a source", itr->a_BlockPos.x, itr->a_BlockPos.y, itr->a_BlockPos.z); itr = PoweredBlocks->erase(itr); - a_Chunk->SetIsRedstoneDirty(true); + Chunk->SetIsRedstoneDirty(true); continue; } else if ( @@ -105,9 +107,25 @@ void cIncrementalRedstoneSimulator::RedstoneAddBlock(int a_BlockX, int a_BlockY, { LOGD("cIncrementalRedstoneSimulator: Erased block @ {%i, %i, %i} from powered blocks list due to present/past metadata mismatch", itr->a_BlockPos.x, itr->a_BlockPos.y, itr->a_BlockPos.z); itr = PoweredBlocks->erase(itr); - a_Chunk->SetIsRedstoneDirty(true); + Chunk->SetIsRedstoneDirty(true); continue; } + else if (Block == E_BLOCK_DAYLIGHT_SENSOR) + { + if (!m_World.IsChunkLighted(Chunk->GetPosX(), Chunk->GetPosZ())) + { + m_World.QueueLightChunk(Chunk->GetPosX(), Chunk->GetPosZ()); + } + else + { + if (Chunk->GetTimeAlteredLight(Chunk->GetSkyLight(RelX, a_BlockY + 1, RelZ)) <= 7) + { + itr = PoweredBlocks->erase(itr); + Chunk->SetIsRedstoneDirty(true); + continue; + } + } + } ++itr; } @@ -121,7 +139,7 @@ void cIncrementalRedstoneSimulator::RedstoneAddBlock(int a_BlockX, int a_BlockY, { LOGD("cIncrementalRedstoneSimulator: Erased block @ {%i, %i, %i} from linked powered blocks list as it is no longer connected to a source", itr->a_BlockPos.x, itr->a_BlockPos.y, itr->a_BlockPos.z); itr = LinkedPoweredBlocks->erase(itr); - a_Chunk->SetIsRedstoneDirty(true); + Chunk->SetIsRedstoneDirty(true); continue; } else if ( @@ -135,7 +153,7 @@ void cIncrementalRedstoneSimulator::RedstoneAddBlock(int a_BlockX, int a_BlockY, { LOGD("cIncrementalRedstoneSimulator: Erased block @ {%i, %i, %i} from linked powered blocks list due to present/past metadata mismatch", itr->a_BlockPos.x, itr->a_BlockPos.y, itr->a_BlockPos.z); itr = LinkedPoweredBlocks->erase(itr); - a_Chunk->SetIsRedstoneDirty(true); + Chunk->SetIsRedstoneDirty(true); continue; } } @@ -145,7 +163,7 @@ void cIncrementalRedstoneSimulator::RedstoneAddBlock(int a_BlockX, int a_BlockY, { LOGD("cIncrementalRedstoneSimulator: Erased block @ {%i, %i, %i} from linked powered blocks list as it is no longer powered through a valid middle block", itr->a_BlockPos.x, itr->a_BlockPos.y, itr->a_BlockPos.z); itr = LinkedPoweredBlocks->erase(itr); - a_Chunk->SetIsRedstoneDirty(true); + Chunk->SetIsRedstoneDirty(true); continue; } } @@ -253,6 +271,8 @@ void cIncrementalRedstoneSimulator::SimulateChunk(float a_Dt, int a_ChunkX, int ShouldUpdateSimulateOnceBlocks = true; } + HandleRedstoneRepeaterDelays(); + for (cRedstoneSimulatorChunkData::iterator dataitr = m_RedstoneSimulatorChunkData->begin(); dataitr != m_RedstoneSimulatorChunkData->end();) { if (dataitr->DataTwo) @@ -264,26 +284,6 @@ void cIncrementalRedstoneSimulator::SimulateChunk(float a_Dt, int a_ChunkX, int switch (dataitr->Data) { case E_BLOCK_DAYLIGHT_SENSOR: HandleDaylightSensor(dataitr->x, dataitr->y, dataitr->z); break; - - case E_BLOCK_REDSTONE_REPEATER_OFF: - case E_BLOCK_REDSTONE_REPEATER_ON: - { - bool FoundItem = false; - for (RepeatersDelayList::iterator repeateritr = m_RepeatersDelayList->begin(); repeateritr != m_RepeatersDelayList->end(); ++repeateritr) - { - if (repeateritr->a_RelBlockPos == Vector3i(dataitr->x, dataitr->y, dataitr->z)) - { - HandleRedstoneRepeater(dataitr->x, dataitr->y, dataitr->z, dataitr->Data, repeateritr); - FoundItem = true; - break; - } - } - if (!FoundItem && ShouldUpdateSimulateOnceBlocks) - { - HandleRedstoneRepeater(dataitr->x, dataitr->y, dataitr->z, dataitr->Data, m_RepeatersDelayList->end()); - } - break; - } case E_BLOCK_WOODEN_PRESSURE_PLATE: case E_BLOCK_STONE_PRESSURE_PLATE: case E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE: @@ -339,6 +339,11 @@ void cIncrementalRedstoneSimulator::SimulateChunk(float a_Dt, int a_ChunkX, int HandlePiston(dataitr->x, dataitr->y, dataitr->z); break; } + case E_BLOCK_REDSTONE_REPEATER_OFF: + case E_BLOCK_REDSTONE_REPEATER_ON: + { + HandleRedstoneRepeater(dataitr->x, dataitr->y, dataitr->z, dataitr->Data); + } case E_BLOCK_REDSTONE_TORCH_OFF: case E_BLOCK_REDSTONE_TORCH_ON: { @@ -493,29 +498,10 @@ void cIncrementalRedstoneSimulator::HandleRedstoneLever(int a_RelBlockX, int a_R { SetAllDirsAsPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ); - NIBBLETYPE Dir = cBlockLeverHandler::BlockMetaDataToBlockFace(Meta); - switch (Dir) // Now, flip the direction into the type used by SetBlockLinkedPowered() - { - case BLOCK_FACE_YP: - case BLOCK_FACE_XP: - case BLOCK_FACE_ZP: - { - Dir--; - break; - } - case BLOCK_FACE_XM: - case BLOCK_FACE_ZM: - case BLOCK_FACE_YM: - { - Dir++; - break; - } - default: - { - ASSERT(!"Unhandled lever metadata!"); - return; - } - } + eBlockFace Dir = cBlockLeverHandler::BlockMetaDataToBlockFace(Meta); + + Dir = ReverseBlockFace(Dir); + SetDirectionLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, Dir); } } @@ -528,8 +514,7 @@ void cIncrementalRedstoneSimulator::HandleFenceGate(int a_RelBlockX, int a_RelBl { int BlockX = (m_Chunk->GetPosX() * cChunkDef::Width) + a_RelBlockX; int BlockZ = (m_Chunk->GetPosZ() * cChunkDef::Width) + a_RelBlockZ; - cChunkInterface ChunkInterface(m_World.GetChunkMap()); - NIBBLETYPE MetaData = ChunkInterface.GetBlockMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ); + NIBBLETYPE MetaData = m_Chunk->GetMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ); if (AreCoordsPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ)) { @@ -562,27 +547,8 @@ void cIncrementalRedstoneSimulator::HandleRedstoneButton(int a_RelBlockX, int a_ { SetAllDirsAsPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ); - NIBBLETYPE Dir = cBlockButtonHandler::BlockMetaDataToBlockFace(Meta); - switch (Dir) // Now, flip the direction into the type used by SetBlockLinkedPowered() - { - case BLOCK_FACE_XP: - case BLOCK_FACE_ZP: - { - Dir--; - break; - } - case BLOCK_FACE_XM: - case BLOCK_FACE_ZM: - { - Dir++; - break; - } - default: - { - ASSERT(!"Unhandled button metadata!"); - return; - } - } + eBlockFace Dir = cBlockButtonHandler::BlockMetaDataToBlockFace(Meta); + Dir = ReverseBlockFace(Dir); SetDirectionLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, Dir); } } @@ -749,7 +715,7 @@ void cIncrementalRedstoneSimulator::HandleRedstoneWire(int a_RelBlockX, int a_Re -void cIncrementalRedstoneSimulator::HandleRedstoneRepeater(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState, RepeatersDelayList::iterator a_Itr) +void cIncrementalRedstoneSimulator::HandleRedstoneRepeater(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState) { /* Repeater Orientation Mini Guide: =================================== @@ -776,102 +742,79 @@ void cIncrementalRedstoneSimulator::HandleRedstoneRepeater(int a_RelBlockX, int NIBBLETYPE a_Meta = m_Chunk->GetMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ); bool IsOn = (a_MyState == E_BLOCK_REDSTONE_REPEATER_ON); - bool WereItrsChanged = false; if (!IsRepeaterLocked(a_RelBlockX, a_RelBlockY, a_RelBlockZ, a_Meta)) // If we're locked, change nothing. Otherwise: { bool IsSelfPowered = IsRepeaterPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, a_Meta); if (IsSelfPowered && !IsOn) // Queue a power change if powered, but not on and not locked. { - WereItrsChanged = QueueRepeaterPowerChange(a_RelBlockX, a_RelBlockY, a_RelBlockZ, a_Meta, true); + QueueRepeaterPowerChange(a_RelBlockX, a_RelBlockY, a_RelBlockZ, a_Meta, true); } else if (!IsSelfPowered && IsOn) // Queue a power change if unpowered, on, and not locked. { - WereItrsChanged = QueueRepeaterPowerChange(a_RelBlockX, a_RelBlockY, a_RelBlockZ, a_Meta, false); - } - else - { - return; + QueueRepeaterPowerChange(a_RelBlockX, a_RelBlockY, a_RelBlockZ, a_Meta, false); } } - else - { - return; - } +} - if (WereItrsChanged) +void cIncrementalRedstoneSimulator::HandleRedstoneRepeaterDelays() +{ + for (RepeatersDelayList::iterator itr = m_RepeatersDelayList->begin(); itr != m_RepeatersDelayList->end(); itr++) { - for (a_Itr = m_RepeatersDelayList->begin(); a_Itr != m_RepeatersDelayList->end(); ++a_Itr) - { - if (a_Itr->a_RelBlockPos == Vector3i(a_RelBlockX, a_RelBlockY, a_RelBlockZ)) - { - // Leave a_Itr at where we found the entry - break; - } - } - } - // a_Itr may be passed with m_RepeatersDelayList::end, however, we can guarantee this iterator is always valid because... - // ...QueueRepeaterPowerChange is called to add an entry (and the above code updates iterator). However, if the repeater was locked or something similar... - // ...we will never get here because of the returns. - if (a_Itr->a_ElapsedTicks >= a_Itr->a_DelayTicks) // Has the elapsed ticks reached the target ticks? - { - if (a_Itr->ShouldPowerOn) + if (itr->a_ElapsedTicks >= itr->a_DelayTicks) // Has the elapsed ticks reached the target ticks? { - if (!IsOn) + int RelBlockX = itr->a_RelBlockPos.x; + int RelBlockY = itr->a_RelBlockPos.y; + int RelBlockZ = itr->a_RelBlockPos.z; + NIBBLETYPE Meta = m_Chunk->GetMeta(RelBlockX, RelBlockY, RelBlockZ); + if (itr->ShouldPowerOn) { - m_Chunk->SetBlock(a_RelBlockX, a_RelBlockY, a_RelBlockZ, E_BLOCK_REDSTONE_REPEATER_ON, a_Meta); // For performance - } + + m_Chunk->SetBlock(itr->a_RelBlockPos, E_BLOCK_REDSTONE_REPEATER_ON, Meta); // For performance - switch (a_Meta & 0x3) // We only want the direction (bottom) bits - { - case 0x0: + switch (Meta & 0x3) // We only want the direction (bottom) bits { - SetBlockPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ - 1, a_RelBlockX, a_RelBlockY, a_RelBlockZ); - SetDirectionLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, BLOCK_FACE_ZM); - break; - } - case 0x1: - { - SetBlockPowered(a_RelBlockX + 1, a_RelBlockY, a_RelBlockZ, a_RelBlockX, a_RelBlockY, a_RelBlockZ); - SetDirectionLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, BLOCK_FACE_XP); - break; - } - case 0x2: - { - SetBlockPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ + 1, a_RelBlockX, a_RelBlockY, a_RelBlockZ); - SetDirectionLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, BLOCK_FACE_ZP); - break; - } - case 0x3: - { - SetBlockPowered(a_RelBlockX - 1, a_RelBlockY, a_RelBlockZ, a_RelBlockX, a_RelBlockY, a_RelBlockZ); - SetDirectionLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, BLOCK_FACE_XM); - break; + case 0x0: + { + SetBlockPowered(RelBlockX, RelBlockY, RelBlockZ - 1, RelBlockX, RelBlockY, RelBlockZ); + SetDirectionLinkedPowered(RelBlockX, RelBlockY, RelBlockZ, BLOCK_FACE_ZM); + break; + } + case 0x1: + { + SetBlockPowered(RelBlockX + 1, RelBlockY, RelBlockZ, RelBlockX, RelBlockY, RelBlockZ); + SetDirectionLinkedPowered(RelBlockX, RelBlockY, RelBlockZ, BLOCK_FACE_XP); + break; + } + case 0x2: + { + SetBlockPowered(RelBlockX, RelBlockY, RelBlockZ + 1, RelBlockX, RelBlockY, RelBlockZ); + SetDirectionLinkedPowered(RelBlockX, RelBlockY, RelBlockZ, BLOCK_FACE_ZP); + break; + } + case 0x3: + { + SetBlockPowered(RelBlockX - 1, RelBlockY, RelBlockZ, RelBlockX, RelBlockY, RelBlockZ); + SetDirectionLinkedPowered(RelBlockX, RelBlockY, RelBlockZ, BLOCK_FACE_XM); + break; + } } } - - // Removal of the data entry will be handled in SimChunk - we still want to continue trying to power blocks, even if our delay time has reached - // Otherwise, the power state of blocks in front won't update after we have powered on - return; + else + { + m_Chunk->SetBlock(RelBlockX, RelBlockY, RelBlockZ, E_BLOCK_REDSTONE_REPEATER_OFF, Meta); + } + m_RepeatersDelayList->erase(itr); } else { - if (IsOn) - { - m_Chunk->SetBlock(a_RelBlockX, a_RelBlockY, a_RelBlockZ, E_BLOCK_REDSTONE_REPEATER_OFF, a_Meta); - } - m_RepeatersDelayList->erase(a_Itr); // We can remove off repeaters which don't need further updating - return; + // Apparently, incrementing ticks only works reliably here, and not in SimChunk; + // With a world with lots of redstone, the repeaters simply do not delay + // I am confounded to say why. Perhaps optimisation failure. + LOGD("Incremented a repeater @ {%i %i %i} | Elapsed ticks: %i | Target delay: %i", itr->a_RelBlockPos.x, itr->a_RelBlockPos.y, itr->a_RelBlockPos.z, itr->a_ElapsedTicks, itr->a_DelayTicks); + itr->a_ElapsedTicks++; } } - else - { - // Apparently, incrementing ticks only works reliably here, and not in SimChunk; - // With a world with lots of redstone, the repeaters simply do not delay - // I am confounded to say why. Perhaps optimisation failure. - LOGD("Incremented a repeater @ {%i %i %i} | Elapsed ticks: %i | Target delay: %i", a_Itr->a_RelBlockPos.x, a_Itr->a_RelBlockPos.y, a_Itr->a_RelBlockPos.z, a_Itr->a_ElapsedTicks, a_Itr->a_DelayTicks); - a_Itr->a_ElapsedTicks++; - } } @@ -1145,6 +1088,10 @@ void cIncrementalRedstoneSimulator::HandleDaylightSensor(int a_RelBlockX, int a_ { SetAllDirsAsPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ); } + else + { + WakeUp(BlockX, a_RelBlockY, BlockZ, m_Chunk); + } } } @@ -1429,8 +1376,7 @@ bool cIncrementalRedstoneSimulator::AreCoordsLinkedPowered(int a_RelBlockX, int -// IsRepeaterPowered tests if a repeater should be powered by testing for power sources behind the repeater. -// It takes the coordinates of the repeater the the meta value. + bool cIncrementalRedstoneSimulator::IsRepeaterPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta) { // Repeaters cannot be powered by any face except their back; verify that this is true for a source @@ -1510,19 +1456,19 @@ bool cIncrementalRedstoneSimulator::IsRepeaterLocked(int a_RelBlockX, int a_RelB case 0x0: case 0x2: { - // Check if eastern(right) neighbor is a powered on repeater who is facing us. + // Check if eastern(right) neighbor is a powered on repeater who is facing us BLOCKTYPE Block = 0; if (m_Chunk->UnboundedRelGetBlockType(a_RelBlockX + 1, a_RelBlockY, a_RelBlockZ, Block) && (Block == E_BLOCK_REDSTONE_REPEATER_ON)) // Is right neighbor a powered repeater? { NIBBLETYPE OtherRepeaterDir = m_Chunk->GetMeta(a_RelBlockX + 1, a_RelBlockY, a_RelBlockZ) & 0x3; - if (OtherRepeaterDir == 0x3) { return true; } // If so, I am latched/locked. + if (OtherRepeaterDir == 0x3) { return true; } // If so, I am latched/locked } - // Check if western(left) neighbor is a powered on repeater who is facing us. + // Check if western(left) neighbor is a powered on repeater who is facing us if (m_Chunk->UnboundedRelGetBlockType(a_RelBlockX - 1, a_RelBlockY, a_RelBlockZ, Block) && (Block == E_BLOCK_REDSTONE_REPEATER_ON)) { NIBBLETYPE OtherRepeaterDir = m_Chunk->GetMeta(a_RelBlockX -1, a_RelBlockY, a_RelBlockZ) & 0x3; - if (OtherRepeaterDir == 0x1) { return true; } // If so, I am latched/locked. + if (OtherRepeaterDir == 0x1) { return true; } // If so, I am latched/locked } break; @@ -1532,26 +1478,26 @@ bool cIncrementalRedstoneSimulator::IsRepeaterLocked(int a_RelBlockX, int a_RelB case 0x1: case 0x3: { - // Check if southern(down) neighbor is a powered on repeater who is facing us. + // Check if southern(down) neighbor is a powered on repeater who is facing us BLOCKTYPE Block = 0; if (m_Chunk->UnboundedRelGetBlockType(a_RelBlockX, a_RelBlockY, a_RelBlockZ + 1, Block) && (Block == E_BLOCK_REDSTONE_REPEATER_ON)) { NIBBLETYPE OtherRepeaterDir = m_Chunk->GetMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ + 1) & 0x3; - if (OtherRepeaterDir == 0x0) { return true; } // If so, am latched/locked. + if (OtherRepeaterDir == 0x0) { return true; } // If so, am latched/locked } - // Check if northern(up) neighbor is a powered on repeater who is facing us. + // Check if northern(up) neighbor is a powered on repeater who is facing us if (m_Chunk->UnboundedRelGetBlockType(a_RelBlockX, a_RelBlockY, a_RelBlockZ - 1, Block) && (Block == E_BLOCK_REDSTONE_REPEATER_ON)) { NIBBLETYPE OtherRepeaterDir = m_Chunk->GetMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ - 1) & 0x3; - if (OtherRepeaterDir == 0x2) { return true; } // If so, I am latched/locked. + if (OtherRepeaterDir == 0x2) { return true; } // If so, I am latched/locked } break; } } - return false; // None of the checks succeeded, I am not a locked repeater. + return false; // None of the checks succeeded, I am not a locked repeater } @@ -1610,7 +1556,7 @@ bool cIncrementalRedstoneSimulator::IsWirePowered(int a_RelBlockX, int a_RelBloc { continue; } - a_PowerLevel = std::max(a_PowerLevel, itr->a_PowerLevel); + a_PowerLevel = itr->a_PowerLevel; } for (LinkedBlocksList::const_iterator itr = m_LinkedPoweredBlocks->begin(); itr != m_LinkedPoweredBlocks->end(); ++itr) // Check linked powered list @@ -1619,10 +1565,10 @@ bool cIncrementalRedstoneSimulator::IsWirePowered(int a_RelBlockX, int a_RelBloc { continue; } - a_PowerLevel = std::max(a_PowerLevel, itr->a_PowerLevel); + a_PowerLevel = itr->a_PowerLevel; } - return (a_PowerLevel != 0); // Source was in front of the piston's front face + return (a_PowerLevel != 0); // Answer the inital question: is the wire powered? } diff --git a/src/Simulator/IncrementalRedstoneSimulator.h b/src/Simulator/IncrementalRedstoneSimulator.h index 83076311a..9c1f9460c 100644 --- a/src/Simulator/IncrementalRedstoneSimulator.h +++ b/src/Simulator/IncrementalRedstoneSimulator.h @@ -108,7 +108,9 @@ private: /** Handles redstone wire */ void HandleRedstoneWire(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ); /** Handles repeaters */ - void HandleRedstoneRepeater(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState, RepeatersDelayList::iterator a_Itr); + void HandleRedstoneRepeater(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState); + /** Handles delayed updates to Repeaters **/ + void HandleRedstoneRepeaterDelays(); /* ====================== */ /* ====== DEVICES ====== */ @@ -156,7 +158,7 @@ private: bool AreCoordsLinkedPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ); /** Returns if a coordinate was marked as simulated (for blocks toggleable by players) */ bool AreCoordsSimulated(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, bool IsCurrentStatePowered); - /** Returns if a repeater is powered */ + /** Returns if a repeater is powered by testing for power sources behind the repeater */ bool IsRepeaterPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta); /** Returns if a repeater is locked */ bool IsRepeaterLocked(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta); diff --git a/src/VoronoiMap.cpp b/src/VoronoiMap.cpp index 7a36edebc..9c3ca7e65 100644 --- a/src/VoronoiMap.cpp +++ b/src/VoronoiMap.cpp @@ -11,7 +11,9 @@ cVoronoiMap::cVoronoiMap(int a_Seed, int a_CellSize) : - m_Noise(a_Seed), + m_Noise1(a_Seed + 1), + m_Noise2(a_Seed + 2), + m_Noise3(a_Seed + 3), m_CellSize(a_CellSize) { } @@ -57,26 +59,25 @@ int cVoronoiMap::GetValueAt(int a_X, int a_Y, int & a_MinDist1, int & a_MinDist2 int CellX = a_X / m_CellSize; int CellZ = a_Y / m_CellSize; + UpdateCell(CellX, CellZ); + // Get 5x5 neighboring cell seeds, compare distance to each. Return the value in the minumim-distance cell int MinDist = m_CellSize * m_CellSize * 16; // There has to be a cell closer than this int MinDist2 = MinDist; int res = 0; // Will be overriden - for (int x = CellX - 2; x <= CellX + 2; x++) + for (int x = 0; x < 5; x++) { - int BaseX = x * m_CellSize; - for (int z = CellZ - 2; z < CellZ + 2; z++) + for (int z = 0; z < 5; z++) { - int OffsetX = (m_Noise.IntNoise3DInt(x, 16 * x + 32 * z, z) / 8) % m_CellSize; - int OffsetZ = (m_Noise.IntNoise3DInt(x, 32 * x - 16 * z, z) / 8) % m_CellSize; - int SeedX = BaseX + OffsetX; - int SeedZ = z * m_CellSize + OffsetZ; + int SeedX = m_SeedX[x][z]; + int SeedZ = m_SeedZ[x][z]; int Dist = (SeedX - a_X) * (SeedX - a_X) + (SeedZ - a_Y) * (SeedZ - a_Y); if (Dist < MinDist) { MinDist2 = MinDist; MinDist = Dist; - res = m_Noise.IntNoise3DInt(x, x - z + 1000, z); + res = m_Noise3.IntNoise2DInt(x + CellX - 2, z + CellZ - 2); } else if (Dist < MinDist2) { @@ -93,3 +94,33 @@ int cVoronoiMap::GetValueAt(int a_X, int a_Y, int & a_MinDist1, int & a_MinDist2 + +void cVoronoiMap::UpdateCell(int a_CellX, int a_CellZ) +{ + // If the specified cell is currently cached, bail out: + if ((a_CellX == m_CurrentCellX) && (a_CellZ == m_CurrentCellZ)) + { + return; + } + + // Update the cell cache for the new cell position: + int NoiseBaseX = a_CellX - 2; + int NoiseBaseZ = a_CellZ - 2; + for (int x = 0; x < 5; x++) + { + int BaseX = (NoiseBaseX + x) * m_CellSize; + for (int z = 0; z < 5; z++) + { + int OffsetX = (m_Noise1.IntNoise2DInt(NoiseBaseX + x, NoiseBaseZ + z) / 8) % m_CellSize; + int OffsetZ = (m_Noise2.IntNoise2DInt(NoiseBaseX + x, NoiseBaseZ + z) / 8) % m_CellSize; + m_SeedX[x][z] = BaseX + OffsetX; + m_SeedZ[x][z] = (NoiseBaseZ + z) * m_CellSize + OffsetZ; + } // for z + } // for x + m_CurrentCellX = a_CellX; + m_CurrentCellZ = a_CellZ; +} + + + + diff --git a/src/VoronoiMap.h b/src/VoronoiMap.h index bcd37f9cf..84cf206e9 100644 --- a/src/VoronoiMap.h +++ b/src/VoronoiMap.h @@ -29,15 +29,34 @@ public: /// Returns the value in the cell into which the specified point lies, and the distance to the nearest Voronoi seed int GetValueAt(int a_X, int a_Y, int & a_MinDistance); - /// Returns the value in the cell into which the specified point lies, and the distances to the 2 nearest Voronoi seeds + /// Returns the value in the cell into which the specified point lies, and the distances to the 2 nearest Voronoi seeds. Uses a cache int GetValueAt(int a_X, int a_Y, int & a_MinDistance1, int & a_MinDistance2); - + protected: /// The noise used for generating Voronoi seeds - cNoise m_Noise; + cNoise m_Noise1; + cNoise m_Noise2; + cNoise m_Noise3; /// Size of the Voronoi cells (avg X/Y distance between the seeds) int m_CellSize; + + /** The X coordinate of the currently cached cell neighborhood */ + int m_CurrentCellX; + + /** The Z coordinate of the currently cached cell neighborhood */ + int m_CurrentCellZ; + + /** The seeds of cells around m_CurrentCellX, m_CurrentCellZ, X-coords */ + int m_SeedX[5][5]; + + /** The seeds of cells around m_CurrentCellX, m_CurrentCellZ, X-coords */ + int m_SeedZ[5][5]; + + + /** Updates the cached cell seeds to match the specified cell. Noop if cell pos already matches. + Updates m_SeedX and m_SeedZ. */ + void UpdateCell(int a_CellX, int a_CellZ); } ; diff --git a/src/WebAdmin.cpp b/src/WebAdmin.cpp index 08e164d78..d80849433 100644 --- a/src/WebAdmin.cpp +++ b/src/WebAdmin.cpp @@ -524,6 +524,7 @@ void cWebAdmin::OnRequestFinished(cHTTPConnection & a_Connection, cHTTPRequest & // Delete any request data assigned to the request: cRequestData * Data = (cRequestData *)(a_Request.GetUserData()); delete Data; + Data = NULL; } diff --git a/src/World.cpp b/src/World.cpp index c9199b6ba..4c57b283f 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -273,12 +273,12 @@ cWorld::cWorld(const AString & a_WorldName, eDimension a_Dimension, const AStrin cWorld::~cWorld() { - delete m_SimulatorManager; - delete m_SandSimulator; - delete m_WaterSimulator; - delete m_LavaSimulator; - delete m_FireSimulator; - delete m_RedstoneSimulator; + delete m_SimulatorManager; m_SimulatorManager = NULL; + delete m_SandSimulator; m_SandSimulator = NULL; + delete m_WaterSimulator; m_WaterSimulator = NULL; + delete m_LavaSimulator; m_LavaSimulator = NULL; + delete m_FireSimulator; m_FireSimulator = NULL; + delete m_RedstoneSimulator; m_RedstoneSimulator = NULL; UnloadUnusedChunks(); @@ -3036,11 +3036,13 @@ int cWorld::SpawnMobFinalize(cMonster * a_Monster) if (cPluginManager::Get()->CallHookSpawningMonster(*this, *a_Monster)) { delete a_Monster; + a_Monster = NULL; return -1; } if (!a_Monster->Initialize(*this)) { delete a_Monster; + a_Monster = NULL; return -1; } BroadcastSpawnEntity(*a_Monster); @@ -3063,6 +3065,7 @@ int cWorld::CreateProjectile(double a_PosX, double a_PosY, double a_PosZ, cProje if (!Projectile->Initialize(*this)) { delete Projectile; + Projectile = NULL; return -1; } return Projectile->GetUniqueID(); diff --git a/src/World.h b/src/World.h index 1d9026a5d..645ae122c 100644 --- a/src/World.h +++ b/src/World.h @@ -529,7 +529,7 @@ public: virtual void DoExplosionAt(double a_ExplosionSize, double a_BlockX, double a_BlockY, double a_BlockZ, bool a_CanCauseFire, eExplosionSource a_Source, void * a_SourceData) override; // tolua_export /** Calls the callback for the block entity at the specified coords; returns false if there's no block entity at those coords, true if found */ - bool DoWithBlockEntityAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBlockEntityCallback & a_Callback); // Exported in ManualBindings.cpp + virtual bool DoWithBlockEntityAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBlockEntityCallback & a_Callback) override; // Exported in ManualBindings.cpp /** Calls the callback for the chest at the specified coords; returns false if there's no chest at those coords, true if found */ bool DoWithChestAt(int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallback & a_Callback); // Exported in ManualBindings.cpp @@ -843,6 +843,7 @@ private: virtual ~cScheduledTask() { delete m_Task; + m_Task = NULL; } }; diff --git a/src/WorldStorage/NBTChunkSerializer.cpp b/src/WorldStorage/NBTChunkSerializer.cpp index 70c07af50..d058a4583 100644 --- a/src/WorldStorage/NBTChunkSerializer.cpp +++ b/src/WorldStorage/NBTChunkSerializer.cpp @@ -609,17 +609,12 @@ void cNBTChunkSerializer::AddProjectileEntity(cProjectileEntity * a_Projectile) case cProjectileEntity::pkGhastFireball: { m_Writer.AddInt("ExplosionPower", 1); - // fall-through: + break; } case cProjectileEntity::pkFireCharge: case cProjectileEntity::pkWitherSkull: case cProjectileEntity::pkEnderPearl: { - m_Writer.BeginList("Motion", TAG_Double); - m_Writer.AddDouble("", a_Projectile->GetSpeedX()); - m_Writer.AddDouble("", a_Projectile->GetSpeedY()); - m_Writer.AddDouble("", a_Projectile->GetSpeedZ()); - m_Writer.EndList(); break; } default: diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index c84763ac2..a3259b769 100644 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -469,6 +469,9 @@ bool cWSSAnvil::SaveChunkToNBT(const cChunkCoords & a_Chunk, cFastNBTWriter & a_ a_Writer.AddByte("MCSIsLightValid", 1); } + // Store the flag that the chunk has all the ores, trees, dungeons etc. MCS chunks are always complete. + a_Writer.AddByte("TerrainPopulated", 1); + a_Writer.EndCompound(); // "Level" return true; } diff --git a/src/WorldStorage/WSSCompact.cpp b/src/WorldStorage/WSSCompact.cpp index 7a113849a..a853f6ec9 100644 --- a/src/WorldStorage/WSSCompact.cpp +++ b/src/WorldStorage/WSSCompact.cpp @@ -473,6 +473,7 @@ cWSSCompact::cPAKFile::cPAKFile(const AString & a_FileName, int a_LayerX, int a_ { LOGERROR("ERROR READING %s FROM FILE %s (line %d); file offset %d", "Header", m_FileName.c_str(), __LINE__, f.Tell()); delete Header; + Header = NULL; return; } m_ChunkHeaders.push_back(Header); diff --git a/tests/ChunkData/ArraytoCoord.cpp b/tests/ChunkData/ArraytoCoord.cpp index 0daf38f7b..9d0ca6c8c 100644 --- a/tests/ChunkData/ArraytoCoord.cpp +++ b/tests/ChunkData/ArraytoCoord.cpp @@ -6,9 +6,23 @@ int main(int argc, char** argv) { + class cMockAllocationPool + : public cAllocationPool<cChunkData::sChunkSection> + { + virtual cChunkData::sChunkSection * Allocate() + { + return new cChunkData::sChunkSection(); + } + + virtual void Free(cChunkData::sChunkSection * a_Ptr) + { + delete a_Ptr; + } + } Pool; { + // Test first segment - cChunkData buffer; + cChunkData buffer(Pool); BLOCKTYPE SrcBlockBuffer[16 * 16 * 256]; memset(SrcBlockBuffer, 0x00, sizeof(SrcBlockBuffer)); @@ -35,7 +49,7 @@ int main(int argc, char** argv) { // test following segment - cChunkData buffer; + cChunkData buffer(Pool); BLOCKTYPE SrcBlockBuffer[16 * 16 * 256]; memset(SrcBlockBuffer, 0x00, sizeof(SrcBlockBuffer)); @@ -62,7 +76,7 @@ int main(int argc, char** argv) { // test zeros - cChunkData buffer; + cChunkData buffer(Pool); BLOCKTYPE SrcBlockBuffer[16 * 16 * 256]; memset(SrcBlockBuffer, 0x00, sizeof(SrcBlockBuffer)); diff --git a/tests/ChunkData/Coordinates.cpp b/tests/ChunkData/Coordinates.cpp index 48d731c7e..b3c66dde5 100644 --- a/tests/ChunkData/Coordinates.cpp +++ b/tests/ChunkData/Coordinates.cpp @@ -6,8 +6,21 @@ int main(int argc, char** argv) { + class cMockAllocationPool + : public cAllocationPool<cChunkData::sChunkSection> + { + virtual cChunkData::sChunkSection * Allocate() + { + return new cChunkData::sChunkSection(); + } + + virtual void Free(cChunkData::sChunkSection * a_Ptr) + { + delete a_Ptr; + } + } Pool; { - cChunkData buffer; + cChunkData buffer(Pool); // Empty chunks buffer.SetBlock(0, 0, 0, 0xAB); @@ -105,7 +118,7 @@ int main(int argc, char** argv) } { - cChunkData buffer; + cChunkData buffer(Pool); // Zero's buffer.SetBlock(0, 0, 0, 0x0); @@ -122,9 +135,9 @@ int main(int argc, char** argv) { // Operator = - cChunkData buffer; + cChunkData buffer(Pool); buffer.SetBlock(0, 0, 0, 0x42); - cChunkData copy; + cChunkData copy(Pool); #if __cplusplus < 201103L copy = buffer; #else diff --git a/tests/ChunkData/Copies.cpp b/tests/ChunkData/Copies.cpp index 312441eee..440819e91 100644 --- a/tests/ChunkData/Copies.cpp +++ b/tests/ChunkData/Copies.cpp @@ -6,8 +6,21 @@ int main(int argc, char** argv) { + class cMockAllocationPool + : public cAllocationPool<cChunkData::sChunkSection> + { + virtual cChunkData::sChunkSection * Allocate() + { + return new cChunkData::sChunkSection(); + } + + virtual void Free(cChunkData::sChunkSection * a_Ptr) + { + delete a_Ptr; + } + } Pool; { - cChunkData buffer; + cChunkData buffer(Pool); buffer.SetBlock(3, 1, 4, 0xDE); buffer.SetMeta(3, 1, 4, 0xA); @@ -37,7 +50,7 @@ int main(int argc, char** argv) } { - cChunkData buffer; + cChunkData buffer(Pool); NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2]; for (int i = 0; i < 16 * 16 * 256 / 2; i += 4) @@ -60,7 +73,7 @@ int main(int argc, char** argv) } { - cChunkData buffer; + cChunkData buffer(Pool); NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2]; for (int i = 0; i < 16 * 16 * 256 / 2; i += 4) @@ -83,7 +96,7 @@ int main(int argc, char** argv) } { - cChunkData buffer; + cChunkData buffer(Pool); NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2]; for (int i = 0; i < 16 * 16 * 256 / 2; i += 4) @@ -106,7 +119,7 @@ int main(int argc, char** argv) } { - cChunkData buffer; + cChunkData buffer(Pool); BLOCKTYPE SrcBlockBuffer[16 * 16 * 256]; memset(SrcBlockBuffer, 0x00, 16 * 16 * 256); diff --git a/tests/ChunkData/CopyBlocks.cpp b/tests/ChunkData/CopyBlocks.cpp index be8cab234..ec9451099 100644 --- a/tests/ChunkData/CopyBlocks.cpp +++ b/tests/ChunkData/CopyBlocks.cpp @@ -17,7 +17,20 @@ int main(int argc, char ** argv) { // Set up a cChunkData with known contents - all blocks 0x01, all metas 0x02: - cChunkData Data; + class cMockAllocationPool + : public cAllocationPool<cChunkData::sChunkSection> + { + virtual cChunkData::sChunkSection * Allocate() + { + return new cChunkData::sChunkSection(); + } + + virtual void Free(cChunkData::sChunkSection * a_Ptr) + { + delete a_Ptr; + } + } Pool; + cChunkData Data(Pool); cChunkDef::BlockTypes BlockTypes; cChunkDef::BlockNibbles BlockMetas; memset(BlockTypes, 0x01, sizeof(BlockTypes)); diff --git a/tests/ChunkData/creatable.cpp b/tests/ChunkData/creatable.cpp index 1321bf49b..fc786f688 100644 --- a/tests/ChunkData/creatable.cpp +++ b/tests/ChunkData/creatable.cpp @@ -4,6 +4,19 @@ int main(int argc, char** argv) { - cChunkData buffer; + class cMockAllocationPool + : public cAllocationPool<cChunkData::sChunkSection> + { + virtual cChunkData::sChunkSection * Allocate() + { + return new cChunkData::sChunkSection(); + } + + virtual void Free(cChunkData::sChunkSection * a_Ptr) + { + delete a_Ptr; + } + } Pool; + cChunkData buffer(Pool); return 0; } |