From 47d5395d24c6f209a758a689bff9a44f68d7397b Mon Sep 17 00:00:00 2001
From: STRWarrior
Date: Sun, 30 Mar 2014 13:44:28 +0200
Subject: Added a blockface parameter to the OnProjectileHitBlock hook.
---
src/Bindings/Plugin.h | 2 +-
src/Bindings/PluginLua.cpp | 4 ++--
src/Bindings/PluginLua.h | 2 +-
src/Bindings/PluginManager.cpp | 4 ++--
src/Bindings/PluginManager.h | 2 +-
src/Entities/ProjectileEntity.cpp | 2 +-
6 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/Bindings/Plugin.h b/src/Bindings/Plugin.h
index df0bd4dcc..4144bc734 100644
--- a/src/Bindings/Plugin.h
+++ b/src/Bindings/Plugin.h
@@ -90,7 +90,7 @@ public:
virtual bool OnPluginsLoaded (void) = 0;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile) = 0;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face) = 0;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) = 0;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) = 0;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) = 0;
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp
index 7e69e0f4b..9e989a9e1 100644
--- a/src/Bindings/PluginLua.cpp
+++ b/src/Bindings/PluginLua.cpp
@@ -1108,14 +1108,14 @@ bool cPluginLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid * a
-bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile)
+bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face)
{
cCSLock Lock(m_CriticalSection);
bool res = false;
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_PROJECTILE_HIT_BLOCK];
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
{
- m_LuaState.Call((int)(**itr), &a_Projectile, cLuaState::Return, res);
+ m_LuaState.Call((int)(**itr), &a_Projectile, a_Face, cLuaState::Return, res);
if (res)
{
return true;
diff --git a/src/Bindings/PluginLua.h b/src/Bindings/PluginLua.h
index 59542d23a..e89baaf53 100644
--- a/src/Bindings/PluginLua.h
+++ b/src/Bindings/PluginLua.h
@@ -113,7 +113,7 @@ public:
virtual bool OnPluginsLoaded (void) override;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile) override;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face) override;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) override;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) override;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) override;
diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp
index 6a5356c0b..7116a5826 100644
--- a/src/Bindings/PluginManager.cpp
+++ b/src/Bindings/PluginManager.cpp
@@ -1154,7 +1154,7 @@ bool cPluginManager::CallHookPreCrafting(const cPlayer * a_Player, const cCrafti
-bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile)
+bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face)
{
HookMap::iterator Plugins = m_Hooks.find(HOOK_PROJECTILE_HIT_BLOCK);
if (Plugins == m_Hooks.end())
@@ -1163,7 +1163,7 @@ bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile
}
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
{
- if ((*itr)->OnProjectileHitBlock(a_Projectile))
+ if ((*itr)->OnProjectileHitBlock(a_Projectile, a_Face))
{
return true;
}
diff --git a/src/Bindings/PluginManager.h b/src/Bindings/PluginManager.h
index 512bc1351..89a2170df 100644
--- a/src/Bindings/PluginManager.h
+++ b/src/Bindings/PluginManager.h
@@ -206,7 +206,7 @@ public: // tolua_export
bool CallHookPluginsLoaded (void);
bool CallHookPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
bool CallHookPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
- bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile);
+ bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face);
bool CallHookProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity);
bool CallHookSpawnedEntity (cWorld & a_World, cEntity & a_Entity);
bool CallHookSpawnedMonster (cWorld & a_World, cMonster & a_Monster);
diff --git a/src/Entities/ProjectileEntity.cpp b/src/Entities/ProjectileEntity.cpp
index a9735a53c..37964d102 100644
--- a/src/Entities/ProjectileEntity.cpp
+++ b/src/Entities/ProjectileEntity.cpp
@@ -67,7 +67,7 @@ protected:
eBlockFace Face;
if (bb.CalcLineIntersection(Line1, Line2, LineCoeff, Face))
{
- if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile))
+ if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, Face))
{
return false;
}
--
cgit v1.2.3
From 66f1bb7b677324dd59265b7b0776490caa661bcc Mon Sep 17 00:00:00 2001
From: STRWarrior
Date: Sun, 30 Mar 2014 14:04:44 +0200
Subject: Added a BlockHitPos parameter to OnProjectileHitBlock
---
src/Bindings/Plugin.h | 2 +-
src/Bindings/PluginLua.cpp | 4 ++--
src/Bindings/PluginLua.h | 2 +-
src/Bindings/PluginManager.cpp | 4 ++--
src/Bindings/PluginManager.h | 2 +-
src/Entities/ProjectileEntity.cpp | 4 ++--
6 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/src/Bindings/Plugin.h b/src/Bindings/Plugin.h
index 4144bc734..9c2b59609 100644
--- a/src/Bindings/Plugin.h
+++ b/src/Bindings/Plugin.h
@@ -90,7 +90,7 @@ public:
virtual bool OnPluginsLoaded (void) = 0;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face) = 0;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos) = 0;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) = 0;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) = 0;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) = 0;
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp
index 9e989a9e1..a89cfc82c 100644
--- a/src/Bindings/PluginLua.cpp
+++ b/src/Bindings/PluginLua.cpp
@@ -1108,14 +1108,14 @@ bool cPluginLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid * a
-bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face)
+bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos)
{
cCSLock Lock(m_CriticalSection);
bool res = false;
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_PROJECTILE_HIT_BLOCK];
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
{
- m_LuaState.Call((int)(**itr), &a_Projectile, a_Face, cLuaState::Return, res);
+ m_LuaState.Call((int)(**itr), &a_Projectile, a_Face, a_BlockHitPos, cLuaState::Return, res);
if (res)
{
return true;
diff --git a/src/Bindings/PluginLua.h b/src/Bindings/PluginLua.h
index e89baaf53..2e757f9dd 100644
--- a/src/Bindings/PluginLua.h
+++ b/src/Bindings/PluginLua.h
@@ -113,7 +113,7 @@ public:
virtual bool OnPluginsLoaded (void) override;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face) override;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos) override;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) override;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) override;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) override;
diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp
index 7116a5826..0aa52e97e 100644
--- a/src/Bindings/PluginManager.cpp
+++ b/src/Bindings/PluginManager.cpp
@@ -1154,7 +1154,7 @@ bool cPluginManager::CallHookPreCrafting(const cPlayer * a_Player, const cCrafti
-bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face)
+bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos)
{
HookMap::iterator Plugins = m_Hooks.find(HOOK_PROJECTILE_HIT_BLOCK);
if (Plugins == m_Hooks.end())
@@ -1163,7 +1163,7 @@ bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile
}
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
{
- if ((*itr)->OnProjectileHitBlock(a_Projectile, a_Face))
+ if ((*itr)->OnProjectileHitBlock(a_Projectile, a_Face, a_BlockHitPos))
{
return true;
}
diff --git a/src/Bindings/PluginManager.h b/src/Bindings/PluginManager.h
index 89a2170df..5fdbaac1c 100644
--- a/src/Bindings/PluginManager.h
+++ b/src/Bindings/PluginManager.h
@@ -206,7 +206,7 @@ public: // tolua_export
bool CallHookPluginsLoaded (void);
bool CallHookPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
bool CallHookPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
- bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face);
+ bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos);
bool CallHookProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity);
bool CallHookSpawnedEntity (cWorld & a_World, cEntity & a_Entity);
bool CallHookSpawnedMonster (cWorld & a_World, cMonster & a_Monster);
diff --git a/src/Entities/ProjectileEntity.cpp b/src/Entities/ProjectileEntity.cpp
index 37964d102..72ebf5775 100644
--- a/src/Entities/ProjectileEntity.cpp
+++ b/src/Entities/ProjectileEntity.cpp
@@ -67,12 +67,12 @@ protected:
eBlockFace Face;
if (bb.CalcLineIntersection(Line1, Line2, LineCoeff, Face))
{
- if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, Face))
+ Vector3d Intersection = Line1 + m_Projectile->GetSpeed() * LineCoeff;
+ if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, Face, &Intersection))
{
return false;
}
- Vector3d Intersection = Line1 + m_Projectile->GetSpeed() * LineCoeff;
m_Projectile->OnHitSolidBlock(Intersection, Face);
return true;
}
--
cgit v1.2.3
From 36e1e57d038eda0c183f616f2b45d2ae4733e27c Mon Sep 17 00:00:00 2001
From: STRWarrior
Date: Sun, 30 Mar 2014 17:21:13 +0200
Subject: Using recommendations (I think)
---
src/Bindings/Plugin.h | 2 +-
src/Bindings/PluginLua.cpp | 2 +-
src/Bindings/PluginLua.h | 2 +-
src/Bindings/PluginManager.cpp | 2 +-
src/Bindings/PluginManager.h | 2 +-
src/Entities/ProjectileEntity.cpp | 3 ++-
6 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/Bindings/Plugin.h b/src/Bindings/Plugin.h
index 9c2b59609..a6f91382c 100644
--- a/src/Bindings/Plugin.h
+++ b/src/Bindings/Plugin.h
@@ -90,7 +90,7 @@ public:
virtual bool OnPluginsLoaded (void) = 0;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos) = 0;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos) = 0;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) = 0;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) = 0;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) = 0;
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp
index a89cfc82c..97f78351b 100644
--- a/src/Bindings/PluginLua.cpp
+++ b/src/Bindings/PluginLua.cpp
@@ -1108,7 +1108,7 @@ bool cPluginLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid * a
-bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos)
+bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos)
{
cCSLock Lock(m_CriticalSection);
bool res = false;
diff --git a/src/Bindings/PluginLua.h b/src/Bindings/PluginLua.h
index 2e757f9dd..627aa3cc8 100644
--- a/src/Bindings/PluginLua.h
+++ b/src/Bindings/PluginLua.h
@@ -113,7 +113,7 @@ public:
virtual bool OnPluginsLoaded (void) override;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos) override;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos) override;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) override;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) override;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) override;
diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp
index 0aa52e97e..a5c904a77 100644
--- a/src/Bindings/PluginManager.cpp
+++ b/src/Bindings/PluginManager.cpp
@@ -1154,7 +1154,7 @@ bool cPluginManager::CallHookPreCrafting(const cPlayer * a_Player, const cCrafti
-bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos)
+bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos)
{
HookMap::iterator Plugins = m_Hooks.find(HOOK_PROJECTILE_HIT_BLOCK);
if (Plugins == m_Hooks.end())
diff --git a/src/Bindings/PluginManager.h b/src/Bindings/PluginManager.h
index 5fdbaac1c..35755459a 100644
--- a/src/Bindings/PluginManager.h
+++ b/src/Bindings/PluginManager.h
@@ -206,7 +206,7 @@ public: // tolua_export
bool CallHookPluginsLoaded (void);
bool CallHookPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
bool CallHookPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
- bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, Vector3d * a_BlockHitPos);
+ bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos);
bool CallHookProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity);
bool CallHookSpawnedEntity (cWorld & a_World, cEntity & a_Entity);
bool CallHookSpawnedMonster (cWorld & a_World, cMonster & a_Monster);
diff --git a/src/Entities/ProjectileEntity.cpp b/src/Entities/ProjectileEntity.cpp
index 72ebf5775..7a869a957 100644
--- a/src/Entities/ProjectileEntity.cpp
+++ b/src/Entities/ProjectileEntity.cpp
@@ -68,7 +68,8 @@ protected:
if (bb.CalcLineIntersection(Line1, Line2, LineCoeff, Face))
{
Vector3d Intersection = Line1 + m_Projectile->GetSpeed() * LineCoeff;
- if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, Face, &Intersection))
+ const Vector3i BlockHitPos = Vector3i(Intersection);
+ if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, Face, &BlockHitPos))
{
return false;
}
--
cgit v1.2.3
From c0727c426572745c72a61d26a84754d5a641d562 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sun, 11 May 2014 22:35:41 +0200
Subject: Initial VillageGen implementation.
WIP, doesn't generate anything yet.
Ref.: 740.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 3726 +++++++++++++++++++++++
src/Generating/Prefabs/PlainsVillagePrefabs.h | 15 +
src/Generating/Prefabs/SandVillagePrefabs.cpp | 1887 ++++++++++++
src/Generating/Prefabs/SandVillagePrefabs.h | 15 +
src/Generating/VillageGen.cpp | 116 +
src/Generating/VillageGen.h | 48 +
6 files changed, 5807 insertions(+)
create mode 100644 src/Generating/Prefabs/PlainsVillagePrefabs.cpp
create mode 100644 src/Generating/Prefabs/PlainsVillagePrefabs.h
create mode 100644 src/Generating/Prefabs/SandVillagePrefabs.cpp
create mode 100644 src/Generating/Prefabs/SandVillagePrefabs.h
create mode 100644 src/Generating/VillageGen.cpp
create mode 100644 src/Generating/VillageGen.h
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
new file mode 100644
index 000000000..f59e22fb3
--- /dev/null
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -0,0 +1,3726 @@
+
+// PlainsVillagePrefabs.cpp
+
+// Defines the prefabs in the group PlainsVillage
+
+// NOTE: This file has been generated automatically by GalExport!
+// Any manual changes will be overwritten by the next automatic export!
+
+#include "Globals.h"
+#include "PlainsVillagePrefabs.h"
+
+
+
+
+
+const cPrefab::sDef g_PlainsVillagePrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Forge:
+ // The data has been exported from the gallery Plains, area index 51, ID 102, created by Aloe_vera
+ {
+ // Size:
+ 12, 8, 11, // SizeX = 12, SizeY = 8, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 6\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 */
+ "m: 19: 0\n" /* sponge */
+ "n:139: 0\n" /* cobblestonewall */
+ "o:101: 0\n" /* ironbars */
+ "p: 53: 2\n" /* woodstairs */
+ "q: 53: 7\n" /* woodstairs */
+ "r: 50: 2\n" /* torch */
+ "s: 50: 1\n" /* torch */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */
+ "v: 43: 0\n" /* doubleslab */
+ "w: 44: 0\n" /* step */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ ".....abbbc.."
+ /* 1 */ ".ddddddddc.."
+ /* 2 */ ".ddddddddc.."
+ /* 3 */ ".ddddddddddd"
+ /* 4 */ ".ddddddddddd"
+ /* 5 */ ".ddddddddddd"
+ /* 6 */ ".ddddddddddd"
+ /* 7 */ ".ddddddddddd"
+ /* 8 */ ".ddddd.mmmmm"
+ /* 9 */ ".ddddd.mmmmm"
+ /* 10 */ ".......mmmmm"
+
+ // Level 1
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".efffe......"
+ /* 2 */ ".f...g......"
+ /* 3 */ ".f...ed..ddd"
+ /* 4 */ ".f...f...dhd"
+ /* 5 */ ".f...f...dhd"
+ /* 6 */ ".f...fijjdhd"
+ /* 7 */ ".f...edddddd"
+ /* 8 */ ".f...f.mmmmm"
+ /* 9 */ ".efffe.mmmmm"
+ /* 10 */ ".......mmmmm"
+
+ // Level 2
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".ekkke......"
+ /* 2 */ ".k...l......"
+ /* 3 */ ".k...en..n.d"
+ /* 4 */ ".k...k.....o"
+ /* 5 */ ".f...k.....o"
+ /* 6 */ ".k...k.....o"
+ /* 7 */ ".k...edooood"
+ /* 8 */ ".k...f.mmmmm"
+ /* 9 */ ".ekkke.mmmmm"
+ /* 10 */ ".......mmmmm"
+
+ // Level 3
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "ppppppp....."
+ /* 1 */ "qfffffq....."
+ /* 2 */ ".f...f......"
+ /* 3 */ ".f..rfd..dod"
+ /* 4 */ ".f...f...o.d"
+ /* 5 */ ".f...f...o.d"
+ /* 6 */ ".fs..f...o.d"
+ /* 7 */ ".f...fdddddd"
+ /* 8 */ ".f...f.mmmmm"
+ /* 9 */ "tffffftmmmmm"
+ /* 10 */ "uuuuuuummmmm"
+
+ // Level 4
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "ppppppp....."
+ /* 2 */ "qfffffq....."
+ /* 3 */ ".f...fvvvvvv"
+ /* 4 */ ".f...fvwwwwv"
+ /* 5 */ ".f...fvwwwwv"
+ /* 6 */ ".f...fvwwwwv"
+ /* 7 */ ".f...fvvvvvv"
+ /* 8 */ "tffffftmmmmm"
+ /* 9 */ "uuuuuuummmmm"
+ /* 10 */ ".......mmmmm"
+
+ // Level 5
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "ppppppp....."
+ /* 3 */ "qfffffq....."
+ /* 4 */ ".f...f......"
+ /* 5 */ ".f...f......"
+ /* 6 */ ".f...f......"
+ /* 7 */ "tffffft....."
+ /* 8 */ "uuuuuuummmmm"
+ /* 9 */ ".......mmmmm"
+ /* 10 */ ".......mmmmm"
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "ppppppp....."
+ /* 4 */ "qfffffq....."
+ /* 5 */ ".f...f......"
+ /* 6 */ "tffffft....."
+ /* 7 */ "uuuuuuu....."
+ /* 8 */ ".......mmmmm"
+ /* 9 */ ".......mmmmm"
+ /* 10 */ ".......mmmmm"
+
+ // Level 7
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "............"
+ /* 4 */ "ppppppp....."
+ /* 5 */ "fffffff....."
+ /* 6 */ "uuuuuuu....."
+ /* 7 */ "............"
+ /* 8 */ ".......mmmmm"
+ /* 9 */ ".......mmmmm"
+ /* 10 */ ".......mmmmm",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Forge
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_100:
+ // The data has been exported from the gallery Plains, area index 49, ID 100, created by Aloe_vera
+ {
+ // Size:
+ 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
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h: 64:12\n" /* wooddoorblock */
+ "i:102: 0\n" /* glasspane */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 6\n" /* woodstairs */
+ "o: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "..abc.."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".ddddd."
+ /* 3 */ ".ddddd."
+ /* 4 */ ".ddddd."
+ /* 5 */ ".ddddd."
+ /* 6 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".efgfe."
+ /* 2 */ ".f...f."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ ".efffe."
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".efhfe."
+ /* 2 */ ".i...i."
+ /* 3 */ ".i...i."
+ /* 4 */ ".i...i."
+ /* 5 */ ".eiiie."
+ /* 6 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "jjjjjjj"
+ /* 1 */ "kfffffk"
+ /* 2 */ ".fl.lf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ "nfffffn"
+ /* 6 */ "ooooooo"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "jjjjjjj"
+ /* 2 */ "kfffffk"
+ /* 3 */ ".f...f."
+ /* 4 */ "nfffffn"
+ /* 5 */ "ooooooo"
+ /* 6 */ "......."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "jjjjjjj"
+ /* 3 */ "fffffff"
+ /* 4 */ "ooooooo"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_100
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_103:
+ // The data has been exported from the gallery Plains, area index 52, ID 103, created by Aloe_vera
+ {
+ // Size:
+ 11, 7, 9, // SizeX = 11, SizeY = 7, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 6, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 4\n" /* torch */
+ "o: 53: 6\n" /* woodstairs */
+ "p: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ ".ddddddddd."
+ /* 7 */ ".ddddddddd."
+ /* 8 */ "..........."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".f.......f."
+ /* 6 */ ".f.......f."
+ /* 7 */ ".efffffffe."
+ /* 8 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ehhfifhhe."
+ /* 2 */ ".h.......h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".h.......h."
+ /* 6 */ ".h.......h."
+ /* 7 */ ".ehhhfhhhe."
+ /* 8 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "kfffffffffk"
+ /* 2 */ ".f..l.l..f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".f.......f."
+ /* 6 */ ".f...n...f."
+ /* 7 */ "offfffffffo"
+ /* 8 */ "ppppppppppp"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "jjjjjjjjjjj"
+ /* 2 */ "kfffffffffk"
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".f.......f."
+ /* 6 */ "offfffffffo"
+ /* 7 */ "ppppppppppp"
+ /* 8 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "jjjjjjjjjjj"
+ /* 3 */ "kfffffffffk"
+ /* 4 */ ".f.......f."
+ /* 5 */ "offfffffffo"
+ /* 6 */ "ppppppppppp"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "jjjjjjjjjjj"
+ /* 4 */ "fffffffffff"
+ /* 5 */ "ppppppppppp"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "...........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_103
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_105:
+ // The data has been exported from the gallery Plains, area index 54, ID 105, created by Aloe_vera
+ {
+ // Size:
+ 7, 6, 9, // SizeX = 7, SizeY = 6, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 5, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a:170: 0\n" /* haybale */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 4: 0\n" /* cobblestone */
+ "f: 17: 0\n" /* tree */
+ "g: 5: 0\n" /* wood */
+ "h:170: 4\n" /* haybale */
+ "i:170: 8\n" /* haybale */
+ "j: 54: 2\n" /* chest */
+ "k: 50: 4\n" /* torch */
+ "l: 53: 0\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 5\n" /* woodstairs */
+ "o: 53: 4\n" /* woodstairs */
+ "p: 53: 1\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "abcccd."
+ /* 1 */ ".eeeee."
+ /* 2 */ ".eeeee."
+ /* 3 */ ".eeeee."
+ /* 4 */ ".eeeee."
+ /* 5 */ ".eeeee."
+ /* 6 */ ".eeeee."
+ /* 7 */ ".eeeee."
+ /* 8 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".f..af."
+ /* 2 */ ".g...g."
+ /* 3 */ ".ga.hg."
+ /* 4 */ ".fihif."
+ /* 5 */ ".gaaag."
+ /* 6 */ ".gijag."
+ /* 7 */ ".fgfgf."
+ /* 8 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ ".k...k."
+ /* 1 */ ".f...f."
+ /* 2 */ ".g...g."
+ /* 3 */ ".g...g."
+ /* 4 */ ".fh..f."
+ /* 5 */ ".ghiag."
+ /* 6 */ ".ghiig."
+ /* 7 */ ".fgfgf."
+ /* 8 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "ln...op"
+ /* 1 */ "lgggggp"
+ /* 2 */ "lg...gp"
+ /* 3 */ "lg...gp"
+ /* 4 */ "lg...gp"
+ /* 5 */ "lgaa.gp"
+ /* 6 */ "lgiaigp"
+ /* 7 */ "lgggggp"
+ /* 8 */ "ln...op"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ ".ln.op."
+ /* 1 */ ".lgggp."
+ /* 2 */ ".lg.gp."
+ /* 3 */ ".lg.gp."
+ /* 4 */ ".lg.gp."
+ /* 5 */ ".lg.gp."
+ /* 6 */ ".lg.gp."
+ /* 7 */ ".lgggp."
+ /* 8 */ ".ln.op."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "..lgp.."
+ /* 1 */ "..lgp.."
+ /* 2 */ "..lgp.."
+ /* 3 */ "..lgp.."
+ /* 4 */ "..lgp.."
+ /* 5 */ "..lgp.."
+ /* 6 */ "..lgp.."
+ /* 7 */ "..lgp.."
+ /* 8 */ "..lgp..",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_105
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_106:
+ // The data has been exported from the gallery Plains, area index 55, ID 106, created by Aloe_vera
+ {
+ // Size:
+ 15, 8, 9, // SizeX = 15, SizeY = 8, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 7, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 3: 0\n" /* dirt */
+ "f: 17: 0\n" /* tree */
+ "g:107: 0\n" /* fencegate */
+ "h:107: 4\n" /* fencegate */
+ "i: 5: 0\n" /* wood */
+ "j:107: 6\n" /* fencegate */
+ "k: 85: 0\n" /* fence */
+ "l:170: 0\n" /* haybale */
+ "m: 19: 0\n" /* sponge */
+ "n:170: 4\n" /* haybale */
+ "o:170: 8\n" /* haybale */
+ "p: 50: 1\n" /* torch */
+ "q: 50: 2\n" /* torch */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ ".abbbbbbbbbbbc."
+ /* 1 */ ".ddddddddddddd."
+ /* 2 */ ".deeeeeeeeeeed."
+ /* 3 */ ".deeeeeeeeeeed."
+ /* 4 */ ".deeeeeeeeeeed."
+ /* 5 */ ".deeeeeeeeeeed."
+ /* 6 */ ".deeeeeeeeeeed."
+ /* 7 */ ".ddddddddddddd."
+ /* 8 */ "..............."
+
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".fghgighgigjgf."
+ /* 2 */ ".k...k...k...k."
+ /* 3 */ ".k...k...k...k."
+ /* 4 */ ".k...k...k...k."
+ /* 5 */ ".k...k...k...k."
+ /* 6 */ ".kl..k..nko..k."
+ /* 7 */ ".fkkkikkkikkkf."
+ /* 8 */ "..............."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".f...i...i...f."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ ".f...i...i...f."
+ /* 8 */ "..............."
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".fp.qip.qip.qf."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ ".f...i...i...f."
+ /* 8 */ "..............."
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "rrrrrrrrrrrrrrr"
+ /* 1 */ "siiiiiiiiiiiiis"
+ /* 2 */ ".i...........i."
+ /* 3 */ ".i...........i."
+ /* 4 */ ".i...........i."
+ /* 5 */ ".i...........i."
+ /* 6 */ ".i...........i."
+ /* 7 */ "tiiiiiiiiiiiiit"
+ /* 8 */ "uuuuuuuuuuuuuuu"
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "rrrrrrrrrrrrrrr"
+ /* 2 */ "siiiiiiiiiiiiis"
+ /* 3 */ ".i...........i."
+ /* 4 */ ".i...........i."
+ /* 5 */ ".i...........i."
+ /* 6 */ "tiiiiiiiiiiiiit"
+ /* 7 */ "uuuuuuuuuuuuuuu"
+ /* 8 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "rrrrrrrrrrrrrrr"
+ /* 3 */ "siiiiiiiiiiiiis"
+ /* 4 */ ".i...........i."
+ /* 5 */ "tiiiiiiiiiiiiit"
+ /* 6 */ "uuuuuuuuuuuuuuu"
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "rrrrrrrrrrrrrrr"
+ /* 4 */ "iiiiiiiiiiiiiii"
+ /* 5 */ "uuuuuuuuuuuuuuu"
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "...............",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_106
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_109:
+ // The data has been exported from the gallery Plains, area index 58, ID 109, created by Aloe_vera
+ {
+ // Size:
+ 7, 14, 13, // SizeX = 7, SizeY = 14, SizeZ = 13
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 13, 12, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "A: 85: 0\n" /* fence */
+ "B:126: 8\n" /* woodenslab */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h: 65: 3\n" /* ladder */
+ "i: 53: 3\n" /* woodstairs */
+ "j: 53: 7\n" /* woodstairs */
+ "k: 64:12\n" /* wooddoorblock */
+ "l:102: 0\n" /* glasspane */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 1\n" /* torch */
+ "o: 50: 2\n" /* torch */
+ "p:171:14\n" /* carpet */
+ "q: 50: 3\n" /* torch */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 0\n" /* woodstairs */
+ "t: 53: 1\n" /* woodstairs */
+ "u: 53: 5\n" /* woodstairs */
+ "v: 53: 4\n" /* woodstairs */
+ "w: 17: 4\n" /* tree */
+ "x: 17: 8\n" /* tree */
+ "y: 54: 2\n" /* chest */
+ "z: 50: 4\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "..abc.."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".ddddd."
+ /* 3 */ ".ddddd."
+ /* 4 */ ".ddddd."
+ /* 5 */ ".ddddd."
+ /* 6 */ ".ddddd."
+ /* 7 */ ".ddddd."
+ /* 8 */ ".ddddd."
+ /* 9 */ ".ddddd."
+ /* 10 */ ".ddddd."
+ /* 11 */ ".ddddd."
+ /* 12 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".efgfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ ".ei.ie."
+ /* 6 */ ".f...f."
+ /* 7 */ ".fi.if."
+ /* 8 */ ".f...f."
+ /* 9 */ ".f.j.f."
+ /* 10 */ ".f...f."
+ /* 11 */ ".efffe."
+ /* 12 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".efkfe."
+ /* 2 */ ".l..hl."
+ /* 3 */ ".l...l."
+ /* 4 */ ".l...l."
+ /* 5 */ ".e...e."
+ /* 6 */ ".l...l."
+ /* 7 */ ".l...l."
+ /* 8 */ ".fn.of."
+ /* 9 */ ".l.p.l."
+ /* 10 */ ".l...l."
+ /* 11 */ ".ellle."
+ /* 12 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".efffe."
+ /* 2 */ ".f.qhf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ "re...er"
+ /* 6 */ "sf...ft"
+ /* 7 */ "sf...ft"
+ /* 8 */ "sf...ft"
+ /* 9 */ "sf...ft"
+ /* 10 */ "sf...ft"
+ /* 11 */ "sefffft"
+ /* 12 */ "su...vt"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ewwwe."
+ /* 2 */ ".xffhx."
+ /* 3 */ ".xfffx."
+ /* 4 */ ".xfffx."
+ /* 5 */ ".ewwwe."
+ /* 6 */ ".sf.ft."
+ /* 7 */ ".sf.ft."
+ /* 8 */ ".sf.ft."
+ /* 9 */ ".sf.ft."
+ /* 10 */ ".sf.ft."
+ /* 11 */ ".sffft."
+ /* 12 */ ".su.vt."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".eflfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f.y.f."
+ /* 5 */ ".efffe."
+ /* 6 */ "..sft.."
+ /* 7 */ "..sft.."
+ /* 8 */ "..sft.."
+ /* 9 */ "..sft.."
+ /* 10 */ "..sft.."
+ /* 11 */ "..sft.."
+ /* 12 */ "..sft.."
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".eflfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".l...l."
+ /* 4 */ ".f...f."
+ /* 5 */ ".efffe."
+ /* 6 */ "......."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".eflfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f.z.f."
+ /* 5 */ ".efffe."
+ /* 6 */ "......."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ewwwe."
+ /* 2 */ ".xffhx."
+ /* 3 */ ".xfffx."
+ /* 4 */ ".xfffx."
+ /* 5 */ ".ewwwe."
+ /* 6 */ "......."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".eAAAe."
+ /* 2 */ ".A...A."
+ /* 3 */ ".A...A."
+ /* 4 */ ".A...A."
+ /* 5 */ ".eAAAe."
+ /* 6 */ "......."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".e...e."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ ".e...e."
+ /* 6 */ "......."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "su...vt"
+ /* 1 */ "sefffet"
+ /* 2 */ "sfBBBft"
+ /* 3 */ "sfBBBft"
+ /* 4 */ "sfBBBft"
+ /* 5 */ "sffffft"
+ /* 6 */ "su...vt"
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 12
+ /* z\x* 0123456 */
+ /* 0 */ ".su.vt."
+ /* 1 */ ".sffft."
+ /* 2 */ ".sffft."
+ /* 3 */ ".sffft."
+ /* 4 */ ".sffft."
+ /* 5 */ ".sffft."
+ /* 6 */ ".su.vt."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ "......."
+
+ // Level 13
+ /* z\x* 0123456 */
+ /* 0 */ "..sft.."
+ /* 1 */ "..sft.."
+ /* 2 */ "..sft.."
+ /* 3 */ "..sft.."
+ /* 4 */ "..sft.."
+ /* 5 */ "..sft.."
+ /* 6 */ "..sft.."
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+ /* 11 */ "......."
+ /* 12 */ ".......",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_109
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_20:
+ // The data has been exported from the gallery Plains, area index 5, ID 20, created by tonibm1999
+ {
+ // Size:
+ 15, 2, 9, // SizeX = 15, SizeY = 2, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 1, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 17: 0\n" /* tree */
+ "b: 60: 7\n" /* tilleddirt */
+ "c: 8: 0\n" /* water */
+ "d: 50: 5\n" /* torch */
+ "e: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "aaaaaaamaaaaaaa"
+ /* 1 */ "abbcbbamabbcbba"
+ /* 2 */ "abbcbbamabbcbba"
+ /* 3 */ "abbcbbamabbcbba"
+ /* 4 */ "abbcbbamabbcbba"
+ /* 5 */ "abbcbbamabbcbba"
+ /* 6 */ "abbcbbamabbcbba"
+ /* 7 */ "abbcbbamabbcbba"
+ /* 8 */ "aaaaaaamaaaaaaa"
+
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "dmmmmmdmdmmmmmd"
+ /* 1 */ "meemeemmmeemeem"
+ /* 2 */ "memmmemmmeemeem"
+ /* 3 */ "memmmmmmmeemeem"
+ /* 4 */ "meemmemmmeemeem"
+ /* 5 */ "meemmemmmeemeem"
+ /* 6 */ "mmemmemmmeemeem"
+ /* 7 */ "mmememmmmeemeem"
+ /* 8 */ "dmmmmmdmdmmmmmd",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_20
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_26:
+ // The data has been exported from the gallery Plains, area index 9, ID 26, created by Aloe_vera
+ {
+ // Size:
+ 10, 6, 11, // SizeX = 10, SizeY = 6, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 5, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 5: 0\n" /* wood */
+ "c: 2: 0\n" /* grass */
+ "d: 67: 2\n" /* stairs */
+ "e: 43: 0\n" /* doubleslab */
+ "f: 67: 0\n" /* stairs */
+ "g: 67: 3\n" /* stairs */
+ "h: 17: 0\n" /* tree */
+ "i: 53: 1\n" /* woodstairs */
+ "j: 85: 0\n" /* fence */
+ "k: 53: 0\n" /* woodstairs */
+ "l: 64: 4\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */
+ "n: 64: 0\n" /* wooddoorblock */
+ "o:102: 0\n" /* glasspane */
+ "p: 72: 0\n" /* woodplate */
+ "q: 64:12\n" /* wooddoorblock */
+ "r: 64: 8\n" /* wooddoorblock */
+ "s: 53: 5\n" /* woodstairs */
+ "t: 53: 4\n" /* woodstairs */
+ "u: 50: 1\n" /* torch */
+ "v: 50: 2\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "......mmmm"
+ /* 1 */ ".aaaaammmm"
+ /* 2 */ ".abbbammmm"
+ /* 3 */ ".abbbacccc"
+ /* 4 */ "daeeeacccc"
+ /* 5 */ "faeeeecccc"
+ /* 6 */ "gaeeeacccc"
+ /* 7 */ ".aeeeacccc"
+ /* 8 */ ".aeeeacccc"
+ /* 9 */ ".aaaaammmm"
+ /* 10 */ "......mmmm"
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "......mmmm"
+ /* 1 */ ".hbbbhmmmm"
+ /* 2 */ ".bijkbmmmm"
+ /* 3 */ ".b...bjjjj"
+ /* 4 */ ".b...b...j"
+ /* 5 */ ".l...n...j"
+ /* 6 */ ".b...b...j"
+ /* 7 */ ".bee.b...j"
+ /* 8 */ ".b...bjjjj"
+ /* 9 */ ".hbbbhmmmm"
+ /* 10 */ "......mmmm"
+
+ // Level 2
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "......mmmm"
+ /* 1 */ ".hooohmmmm"
+ /* 2 */ ".o.p.ommmm"
+ /* 3 */ ".o...o...."
+ /* 4 */ ".b...b...."
+ /* 5 */ ".q...r...."
+ /* 6 */ ".b...b...."
+ /* 7 */ ".o...o...."
+ /* 8 */ ".o...o...."
+ /* 9 */ ".hooohmmmm"
+ /* 10 */ "......mmmm"
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "ks...timmm"
+ /* 1 */ "khbbbhimmm"
+ /* 2 */ "kb...bimmm"
+ /* 3 */ "kb...bi..."
+ /* 4 */ "kbu.vbi..."
+ /* 5 */ "kb...bi..."
+ /* 6 */ "kbu.vbi..."
+ /* 7 */ "kb...bi..."
+ /* 8 */ "kb...bi..."
+ /* 9 */ "khbbbhimmm"
+ /* 10 */ "ks...timmm"
+
+ // Level 4
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "mks.timmmm"
+ /* 1 */ "mkbbbimmmm"
+ /* 2 */ "mkb.bimmmm"
+ /* 3 */ "mkb.bim..."
+ /* 4 */ "mkb.bim..."
+ /* 5 */ "mkb.bim..."
+ /* 6 */ "mkb.bim..."
+ /* 7 */ "mkb.bim..."
+ /* 8 */ "mkb.bim..."
+ /* 9 */ "mkbbbimmmm"
+ /* 10 */ "mks.timmmm"
+
+ // Level 5
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "mmkbimmmmm"
+ /* 1 */ "mmkbimmmmm"
+ /* 2 */ "mmkbimmmmm"
+ /* 3 */ "mmkbimm..."
+ /* 4 */ "mmkbimm..."
+ /* 5 */ "mmkbimm..."
+ /* 6 */ "mmkbimm..."
+ /* 7 */ "mmkbimm..."
+ /* 8 */ "mmkbimm..."
+ /* 9 */ "mmkbimmmmm"
+ /* 10 */ "mmkbimmmmm",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_26
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_4:
+ // The data has been exported from the gallery Plains, area index 0, ID 4, created by Aloe_vera
+ {
+ // Size:
+ 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 6, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 5: 0\n" /* wood */
+ "f: 67: 3\n" /* stairs */
+ "g: 17: 0\n" /* tree */
+ "h: 64: 5\n" /* wooddoorblock */
+ "i:102: 0\n" /* glasspane */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 53: 2\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 7\n" /* woodstairs */
+ "o: 53: 6\n" /* woodstairs */
+ "p: 53: 3\n" /* woodstairs */
+ "q: 53: 0\n" /* woodstairs */
+ "r: 53: 5\n" /* woodstairs */
+ "s: 53: 4\n" /* woodstairs */
+ "t: 50: 3\n" /* torch */
+ "u: 50: 2\n" /* torch */
+ "v: 50: 4\n" /* torch */
+ "w: 50: 1\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "........abc....."
+ /* 1 */ ".dddddddddddddd."
+ /* 2 */ ".deeeeeeeeeeeed."
+ /* 3 */ ".deeeeeeeeeeeed."
+ /* 4 */ ".deeeeeeeeeeeed."
+ /* 5 */ ".deeeeeeeeeeeed."
+ /* 6 */ ".deeeeeeeeeeeed."
+ /* 7 */ ".ddddddddeeeeed."
+ /* 8 */ "mmmmmafcdeeeeed."
+ /* 9 */ "mmmmmmmmdeeeeed."
+ /* 10 */ "mmmmmmmmdeeeeed."
+ /* 11 */ "mmmmmmmmdeeeeed."
+ /* 12 */ "mmmmmmmmdeeeeed."
+ /* 13 */ "mmmmmmmmdeeeeed."
+ /* 14 */ "mmmmmmmmddddddd."
+ /* 15 */ "mmmmmmmm........"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".geeeeeeghgeeeg."
+ /* 2 */ ".e............e."
+ /* 3 */ ".e............e."
+ /* 4 */ ".e............e."
+ /* 5 */ ".e............e."
+ /* 6 */ ".e............e."
+ /* 7 */ ".geeeeheg.....e."
+ /* 8 */ "mmmmmm.me.....e."
+ /* 9 */ "mmmmmmmme.....e."
+ /* 10 */ "mmmmmmmme.....e."
+ /* 11 */ "mmmmmmmme.....e."
+ /* 12 */ "mmmmmmmme.....e."
+ /* 13 */ "mmmmmmmme.....e."
+ /* 14 */ "mmmmmmmmgeeeeeg."
+ /* 15 */ "mmmmmmmm........"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".geiieiigjgiieg."
+ /* 2 */ ".i............e."
+ /* 3 */ ".i............i."
+ /* 4 */ ".i............i."
+ /* 5 */ ".i............e."
+ /* 6 */ ".i............i."
+ /* 7 */ ".geiiejeg.....i."
+ /* 8 */ "mmmmmm.me.....e."
+ /* 9 */ "mmmmmmmmi.....i."
+ /* 10 */ "mmmmmmmmi.....i."
+ /* 11 */ "mmmmmmmme.....e."
+ /* 12 */ "mmmmmmmmi.....i."
+ /* 13 */ "mmmmmmmmi.....i."
+ /* 14 */ "mmmmmmmmgiiiiig."
+ /* 15 */ "mmmmmmmm........"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "kkkkkkkkkkkkkkkl"
+ /* 1 */ "ngeeeeeegegeeegl"
+ /* 2 */ ".e............el"
+ /* 3 */ ".e............el"
+ /* 4 */ ".e............el"
+ /* 5 */ ".e............el"
+ /* 6 */ ".e............el"
+ /* 7 */ "ogeeeeeeg.....el"
+ /* 8 */ "pppppppqe.....el"
+ /* 9 */ "mmmmmmmqe.....el"
+ /* 10 */ "mmmmmmmqe.....el"
+ /* 11 */ "mmmmmmmqe.....el"
+ /* 12 */ "mmmmmmmqe.....el"
+ /* 13 */ "mmmmmmmqe.....el"
+ /* 14 */ "mmmmmmmqgeeeeegl"
+ /* 15 */ "mmmmmmmqr.....sl"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "kkkkkkkkkkkkkkk."
+ /* 2 */ "neeeeeeeeeeeeel."
+ /* 3 */ ".e.........t.el."
+ /* 4 */ ".e..........uel."
+ /* 5 */ ".e......v....el."
+ /* 6 */ "oeeeeeeeee...el."
+ /* 7 */ "ppppppppqew..el."
+ /* 8 */ "mmmmmmmmqe...el."
+ /* 9 */ "mmmmmmmmqe...el."
+ /* 10 */ "mmmmmmmmqe...el."
+ /* 11 */ "mmmmmmmmqe...el."
+ /* 12 */ "mmmmmmmmqe...el."
+ /* 13 */ "mmmmmmmmqe...el."
+ /* 14 */ "mmmmmmmmqeeeeel."
+ /* 15 */ "mmmmmmmmqr...sl."
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "kkkkkkkkkkkkkl.."
+ /* 3 */ "neeeeeeeeeeeel.."
+ /* 4 */ ".ew.........el.."
+ /* 5 */ "oeeeeeeeeee.el.."
+ /* 6 */ "pppppppppqe.el.."
+ /* 7 */ ".........qe.el.."
+ /* 8 */ "mmmmmmmm.qe.el.."
+ /* 9 */ "mmmmmmmm.qe.el.."
+ /* 10 */ "mmmmmmmm.qe.el.."
+ /* 11 */ "mmmmmmmm.qe.el.."
+ /* 12 */ "mmmmmmmm.qe.el.."
+ /* 13 */ "mmmmmmmm.qevel.."
+ /* 14 */ "mmmmmmmm.qeeel.."
+ /* 15 */ "mmmmmmmm.qr.sl.."
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "kkkkkkkkkkkkk..."
+ /* 4 */ "eeeeeeeeeeeel..."
+ /* 5 */ "ppppppppppqel..."
+ /* 6 */ "mmmmmmmmmmqel..."
+ /* 7 */ "mmmmmmmmmmqel..."
+ /* 8 */ "mmmmmmmmmmqel..."
+ /* 9 */ "mmmmmmmmmmqel..."
+ /* 10 */ "mmmmmmmmmmqel..."
+ /* 11 */ "mmmmmmmmmmqel..."
+ /* 12 */ "mmmmmmmmmmqel..."
+ /* 13 */ "mmmmmmmmmmqel..."
+ /* 14 */ "mmmmmmmmmmqel..."
+ /* 15 */ "mmmmmmmmmmqel...",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_4
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_60:
+ // The data has been exported from the gallery Plains, area index 17, ID 60, created by Aloe_vera
+ {
+ // Size:
+ 10, 2, 7, // SizeX = 10, SizeY = 2, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 1, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 17: 0\n" /* tree */
+ "b: 60: 7\n" /* tilleddirt */
+ "c: 8: 0\n" /* water */
+ "d: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "aaaaaaaaaa"
+ /* 1 */ "abbbbbbbba"
+ /* 2 */ "abbbbbbbba"
+ /* 3 */ "acccccccca"
+ /* 4 */ "abbbbbbbba"
+ /* 5 */ "abbbbbbbba"
+ /* 6 */ "aaaaaaaaaa"
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".dddddddd."
+ /* 2 */ ".dddddddd."
+ /* 3 */ ".........."
+ /* 4 */ ".dddddddd."
+ /* 5 */ ".dddddddd."
+ /* 6 */ "..........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_60
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_66:
+ // The data has been exported from the gallery Plains, area index 23, ID 66, created by xoft
+ {
+ // Size:
+ 12, 7, 7, // SizeX = 12, SizeY = 7, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 6, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 2: 0\n" /* grass */
+ "b: 3: 0\n" /* dirt */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 64: 1\n" /* wooddoorblock */
+ "h: 53: 3\n" /* woodstairs */
+ "i: 53: 1\n" /* woodstairs */
+ "j: 85: 0\n" /* fence */
+ "k: 53: 0\n" /* woodstairs */
+ "l: 53: 2\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n:102: 0\n" /* glasspane */
+ "o: 64: 8\n" /* wooddoorblock */
+ "p: 50: 3\n" /* torch */
+ "q: 72: 0\n" /* woodplate */
+ "r: 50: 4\n" /* torch */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 47: 0\n" /* bookshelf */
+ "u: 50: 1\n" /* torch */
+ "v: 50: 2\n" /* torch */
+ "w: 53: 6\n" /* woodstairs */
+ "x: 5: 0\n" /* wood */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "aaaaaaabbbaa"
+ /* 1 */ "abbbbbbbbbba"
+ /* 2 */ "abbbbbbbbbba"
+ /* 3 */ "abbbbbbbbbba"
+ /* 4 */ "abbbbbbbbbba"
+ /* 5 */ "abbbbbbbbbba"
+ /* 6 */ "aaaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ ".......cde.."
+ /* 1 */ ".ffffffffff."
+ /* 2 */ ".ffffffffff."
+ /* 3 */ ".ffffffffff."
+ /* 4 */ ".ffffffffff."
+ /* 5 */ ".ffffffffff."
+ /* 6 */ "............"
+
+ // Level 2
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".fffffffgff."
+ /* 2 */ ".fh.ijk...f."
+ /* 3 */ ".fj.......f."
+ /* 4 */ ".fl.ijkijkf."
+ /* 5 */ ".ffffffffff."
+ /* 6 */ "............"
+
+ // Level 3
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".fnnfnnfoff."
+ /* 2 */ ".n..pq.p.pn."
+ /* 3 */ ".nq.......n."
+ /* 4 */ ".n..rq.rq.n."
+ /* 5 */ ".fnnfnnfnnf."
+ /* 6 */ "............"
+
+ // Level 4
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "llllllllllll"
+ /* 1 */ "sffffffffffs"
+ /* 2 */ ".fttttttttf."
+ /* 3 */ ".fu......vf."
+ /* 4 */ ".fttttttttf."
+ /* 5 */ "wffffffffffw"
+ /* 6 */ "hhhhhhhhhhhh"
+
+ // Level 5
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "llllllllllll"
+ /* 2 */ "sxxxxxxxxxxs"
+ /* 3 */ ".xxxxxxxxxx."
+ /* 4 */ "wxxxxxxxxxxw"
+ /* 5 */ "hhhhhhhhhhhh"
+ /* 6 */ "............"
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "llllllllllll"
+ /* 3 */ "xxxxxxxxxxxx"
+ /* 4 */ "hhhhhhhhhhhh"
+ /* 5 */ "............"
+ /* 6 */ "............",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_66
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_87:
+ // The data has been exported from the gallery Plains, area index 38, ID 87, created by Aloe_vera
+ {
+ // Size:
+ 11, 7, 9, // SizeX = 11, SizeY = 7, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 6, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 67: 3\n" /* stairs */
+ "f: 17: 0\n" /* tree */
+ "g: 5: 0\n" /* wood */
+ "h: 64: 5\n" /* wooddoorblock */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 7\n" /* woodstairs */
+ "o: 17: 4\n" /* tree */
+ "p: 17: 8\n" /* tree */
+ "q: 50: 3\n" /* torch */
+ "r: 50: 4\n" /* torch */
+ "s: 53: 6\n" /* woodstairs */
+ "t: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ ".ddddddddd."
+ /* 7 */ ".ddddddddd."
+ /* 8 */ "....aec...."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".fggfhfggf."
+ /* 2 */ ".g.......g."
+ /* 3 */ ".g.......g."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".g.......g."
+ /* 6 */ ".g.......g."
+ /* 7 */ ".fggfifggf."
+ /* 8 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".fjjfkfjjf."
+ /* 2 */ ".j.......j."
+ /* 3 */ ".j.......j."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".j.......j."
+ /* 6 */ ".j.......j."
+ /* 7 */ ".fjjfkfjjf."
+ /* 8 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "lllllllllll"
+ /* 1 */ "nfooooooofn"
+ /* 2 */ ".p..q.q..p."
+ /* 3 */ ".p.......p."
+ /* 4 */ ".p.......p."
+ /* 5 */ ".p.......p."
+ /* 6 */ ".p..r.r..p."
+ /* 7 */ "sfooooooofs"
+ /* 8 */ "ttttttttttt"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "lllllllllll"
+ /* 2 */ "ngggggggggn"
+ /* 3 */ ".g.......g."
+ /* 4 */ ".g.......g."
+ /* 5 */ ".g.......g."
+ /* 6 */ "sgggggggggs"
+ /* 7 */ "ttttttttttt"
+ /* 8 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "lllllllllll"
+ /* 3 */ "ngggggggggn"
+ /* 4 */ ".g.......g."
+ /* 5 */ "sgggggggggs"
+ /* 6 */ "ttttttttttt"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "lllllllllll"
+ /* 4 */ "ggggggggggg"
+ /* 5 */ "ttttttttttt"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "...........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_87
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_90:
+ // The data has been exported from the gallery Plains, area index 39, ID 90, created by STR_Warrior
+ {
+ // Size:
+ 15, 8, 16, // SizeX = 15, SizeY = 8, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 7, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "A: 53: 7\n" /* woodstairs */
+ "B: 53: 4\n" /* woodstairs */
+ "C: 53: 5\n" /* woodstairs */
+ "D: 53: 6\n" /* woodstairs */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 43: 0\n" /* doubleslab */
+ "f: 17: 0\n" /* tree */
+ "g: 5: 0\n" /* wood */
+ "h: 64: 7\n" /* wooddoorblock */
+ "i: 96: 8\n" /* trapdoor */
+ "j: 61: 2\n" /* furnace */
+ "k: 53: 3\n" /* woodstairs */
+ "l: 85: 0\n" /* fence */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 2\n" /* woodstairs */
+ "o: 53: 1\n" /* woodstairs */
+ "p: 53: 0\n" /* woodstairs */
+ "q: 47: 0\n" /* bookshelf */
+ "r:102: 0\n" /* glasspane */
+ "s: 64:12\n" /* wooddoorblock */
+ "t: 72: 0\n" /* woodplate */
+ "u: 17: 4\n" /* tree */
+ "v: 17: 8\n" /* tree */
+ "w: 50: 3\n" /* torch */
+ "x: 50: 1\n" /* torch */
+ "y: 50: 4\n" /* torch */
+ "z: 50: 2\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "......abc......"
+ /* 1 */ ".ddddddddddddd."
+ /* 2 */ ".deeeedddddddd."
+ /* 3 */ ".deeeedddddddd."
+ /* 4 */ ".ddddddddddddd."
+ /* 5 */ ".ddddddddddddd."
+ /* 6 */ ".ddddddddddddd."
+ /* 7 */ "mddddddddddddd."
+ /* 8 */ "mmmmmmmmdddddd."
+ /* 9 */ "mmmmmmmmdddddd."
+ /* 10 */ "mmmmmmmmdddddd."
+ /* 11 */ "mmmmmmmmdddddd."
+ /* 12 */ "mmmmmmmmdddddd."
+ /* 13 */ "mmmmmmmmdddddd."
+ /* 14 */ "mmmmmmmmdddddd."
+ /* 15 */ "mmmmmmmm......."
+
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".fggggfhfggggf."
+ /* 2 */ ".g...i.......g."
+ /* 3 */ ".gjeee......kg."
+ /* 4 */ ".f..........lg."
+ /* 5 */ ".g..........ng."
+ /* 6 */ ".g.olp..ol...g."
+ /* 7 */ "mfggggggfn...f."
+ /* 8 */ "mmmmmmmmg....g."
+ /* 9 */ "mmmmmmmmgk...g."
+ /* 10 */ "mmmmmmmmgl..kg."
+ /* 11 */ "mmmmmmmmgn..lg."
+ /* 12 */ "mmmmmmmmg...ng."
+ /* 13 */ "mmmmmmmmgq..qg."
+ /* 14 */ "mmmmmmmmfggggf."
+ /* 15 */ "mmmmmmmm......."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".fgrrgfsfgrrgf."
+ /* 2 */ ".g...........g."
+ /* 3 */ ".g...........r."
+ /* 4 */ ".f..........tr."
+ /* 5 */ ".g...........r."
+ /* 6 */ ".g..t....t...g."
+ /* 7 */ "mfgrrrrgf....f."
+ /* 8 */ "mmmmmmmmg....g."
+ /* 9 */ "mmmmmmmmr....r."
+ /* 10 */ "mmmmmmmmrt...r."
+ /* 11 */ "mmmmmmmmr...tr."
+ /* 12 */ "mmmmmmmmr....r."
+ /* 13 */ "mmmmmmmmgq..qg."
+ /* 14 */ "mmmmmmmmfgrrgf."
+ /* 15 */ "mmmmmmmm......."
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".fuuuuuuuuuuuf."
+ /* 2 */ ".v....w.w....v."
+ /* 3 */ ".v...........v."
+ /* 4 */ ".vx..........v."
+ /* 5 */ ".v...........v."
+ /* 6 */ ".v......y....v."
+ /* 7 */ "mfuuuuuufx..zv."
+ /* 8 */ "mmmmmmmmv....v."
+ /* 9 */ "mmmmmmmmv....v."
+ /* 10 */ "mmmmmmmmv....v."
+ /* 11 */ "mmmmmmmmv....v."
+ /* 12 */ "mmmmmmmmv....v."
+ /* 13 */ "mmmmmmmmv.yy.v."
+ /* 14 */ "mmmmmmmmfuuuuf."
+ /* 15 */ "mmmmmmmm......."
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "nnnnnnnnnnnnnno"
+ /* 1 */ "pgggggggggggggo"
+ /* 2 */ "pgAAAAAAAAAABgo"
+ /* 3 */ "pgC.........Bgo"
+ /* 4 */ "pgC.........Bgo"
+ /* 5 */ "pgC.........Bgo"
+ /* 6 */ "pgCDDDDDDD..Bgo"
+ /* 7 */ "pggggggggC..Bgo"
+ /* 8 */ "pkkkkkkpgC..Bgo"
+ /* 9 */ "mmmmmmmpgC..Bgo"
+ /* 10 */ "mmmmmmmpgC..Bgo"
+ /* 11 */ "mmmmmmmpgC..Bgo"
+ /* 12 */ "mmmmmmmpgC..Bgo"
+ /* 13 */ "mmmmmmmpgCDDBgo"
+ /* 14 */ "mmmmmmmpggggggo"
+ /* 15 */ "mmmmmmmpkkkkkkk"
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmmmmmmmmmmmm"
+ /* 1 */ "mpnnnnnnnnnnnom"
+ /* 2 */ "mpgggggggggggom"
+ /* 3 */ "mpgggggggggggom"
+ /* 4 */ "mpgggggggggggom"
+ /* 5 */ "mpgggggggggggom"
+ /* 6 */ "mpgggggggggggom"
+ /* 7 */ "mpkkkkkkkggggom"
+ /* 8 */ "mmmmmmmmpggggom"
+ /* 9 */ "mmmmmmmmpggggom"
+ /* 10 */ "mmmmmmmmpggggom"
+ /* 11 */ "mmmmmmmmpggggom"
+ /* 12 */ "mmmmmmmmpggggom"
+ /* 13 */ "mmmmmmmmpggggom"
+ /* 14 */ "mmmmmmmmkkkkkom"
+ /* 15 */ "mmmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmm"
+ /* 2 */ "mmnnnnnnnnnnnmm"
+ /* 3 */ "mmpgggggggggomm"
+ /* 4 */ "mmpgggggggggomm"
+ /* 5 */ "mmpgggggggggomm"
+ /* 6 */ "mmkkkkkkkkggomm"
+ /* 7 */ "mmmmmmmmmpggomm"
+ /* 8 */ "mmmmmmmmmpggomm"
+ /* 9 */ "mmmmmmmmmpggomm"
+ /* 10 */ "mmmmmmmmmpggomm"
+ /* 11 */ "mmmmmmmmmpggomm"
+ /* 12 */ "mmmmmmmmmpggomm"
+ /* 13 */ "mmmmmmmmmkkkomm"
+ /* 14 */ "mmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmm"
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmm"
+ /* 3 */ "mmmpnnnnnnnommm"
+ /* 4 */ "mmmpgggggggommm"
+ /* 5 */ "mmmpkkkkkkpommm"
+ /* 6 */ "mmmmmmmmmmpommm"
+ /* 7 */ "mmmmmmmmmmpommm"
+ /* 8 */ "mmmmmmmmmmpommm"
+ /* 9 */ "mmmmmmmmmmpommm"
+ /* 10 */ "mmmmmmmmmmpommm"
+ /* 11 */ "mmmmmmmmmmpommm"
+ /* 12 */ "mmmmmmmmmmpkmmm"
+ /* 13 */ "mmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmm",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_90
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_91:
+ // The data has been exported from the gallery Plains, area index 40, ID 91, created by xoft
+ {
+ // Size:
+ 9, 7, 7, // SizeX = 9, SizeY = 7, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 6, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 2: 0\n" /* grass */
+ "b: 3: 0\n" /* dirt */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 5\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 7\n" /* woodstairs */
+ "o: 50: 3\n" /* torch */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "aaabbbaaa"
+ /* 1 */ "abbbbbbba"
+ /* 2 */ "abbbbbbba"
+ /* 3 */ "abbbbbbba"
+ /* 4 */ "abbbbbbba"
+ /* 5 */ "abbbbbbba"
+ /* 6 */ "aaaaaaaaa"
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "...cde..."
+ /* 1 */ ".fffffff."
+ /* 2 */ ".fffffff."
+ /* 3 */ ".fffffff."
+ /* 4 */ ".fffffff."
+ /* 5 */ ".fffffff."
+ /* 6 */ "........."
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".ghhihhg."
+ /* 2 */ ".h.....h."
+ /* 3 */ ".h.....h."
+ /* 4 */ ".h.....h."
+ /* 5 */ ".ghhhhhg."
+ /* 6 */ "........."
+
+ // Level 3
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".gjhkhjg."
+ /* 2 */ ".j.....j."
+ /* 3 */ ".j.....j."
+ /* 4 */ ".j.....j."
+ /* 5 */ ".gjjhjjg."
+ /* 6 */ "........."
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "lllllllll"
+ /* 1 */ "nghhhhhgn"
+ /* 2 */ ".h.o.o.h."
+ /* 3 */ ".h.....h."
+ /* 4 */ ".h.....h."
+ /* 5 */ "pghhhhhgp"
+ /* 6 */ "qqqqqqqqq"
+
+ // Level 5
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "lllllllll"
+ /* 2 */ "nhhhhhhhn"
+ /* 3 */ ".h.....h."
+ /* 4 */ "phhhhhhhp"
+ /* 5 */ "qqqqqqqqq"
+ /* 6 */ "........."
+
+ // Level 6
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "lllllllll"
+ /* 3 */ "hhhhhhhhh"
+ /* 4 */ "qqqqqqqqq"
+ /* 5 */ "........."
+ /* 6 */ ".........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_91
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_92:
+ // The data has been exported from the gallery Plains, area index 41, ID 92, created by xoft
+ {
+ // Size:
+ 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 5, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 6\n" /* woodstairs */
+ "o: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ "..........."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".efffffffe."
+ /* 6 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ehhfifhhe."
+ /* 2 */ ".h.......h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".ehhhfhhhe."
+ /* 6 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "kfffffffffk"
+ /* 2 */ ".f..l.l.ff."
+ /* 3 */ ".f......ff."
+ /* 4 */ ".f......ff."
+ /* 5 */ "nfffffffffn"
+ /* 6 */ "ooooooooooo"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "jjjjjjjjjjj"
+ /* 2 */ "kfffffffffk"
+ /* 3 */ ".fffffffff."
+ /* 4 */ "nfffffffffn"
+ /* 5 */ "ooooooooooo"
+ /* 6 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "jjjjjjjjjjj"
+ /* 3 */ "fffffffffff"
+ /* 4 */ "ooooooooooo"
+ /* 5 */ "..........."
+ /* 6 */ "...........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_92
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_93:
+ // The data has been exported from the gallery Plains, area index 42, ID 93, created by xoft
+ {
+ // Size:
+ 11, 6, 11, // SizeX = 11, SizeY = 6, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 5, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 3\n" /* torch */
+ "o: 50: 4\n" /* torch */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 50: 1\n" /* torch */
+ "r: 50: 2\n" /* torch */
+ "s: 53: 3\n" /* woodstairs */
+ "t: 53: 0\n" /* woodstairs */
+ "u: 53: 5\n" /* woodstairs */
+ "v: 53: 4\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ ".....ddddd."
+ /* 7 */ "mmmm.ddddd."
+ /* 8 */ "mmmm.ddddd."
+ /* 9 */ "mmmm.ddddd."
+ /* 10 */ "mmmm......."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".efffe...f."
+ /* 6 */ ".....f...f."
+ /* 7 */ "mmmm.f...f."
+ /* 8 */ "mmmm.f...f."
+ /* 9 */ "mmmm.efffe."
+ /* 10 */ "mmmm......."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ehhfifhhe."
+ /* 2 */ ".h.......h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".ehhhe...f."
+ /* 6 */ ".....h...h."
+ /* 7 */ "mmmm.h...h."
+ /* 8 */ "mmmm.h...h."
+ /* 9 */ "mmmm.ehhhe."
+ /* 10 */ "mmmm......."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "kfffffffffl"
+ /* 2 */ ".f..n.n..fl"
+ /* 3 */ ".f.......fl"
+ /* 4 */ ".f...o...fl"
+ /* 5 */ "pfffffq.rfl"
+ /* 6 */ "sssssf...fl"
+ /* 7 */ "mmmmtf...fl"
+ /* 8 */ "mmmmtf...fl"
+ /* 9 */ "mmmmtfffffl"
+ /* 10 */ "mmmmtu...vl"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "jjjjjjjjjl."
+ /* 2 */ "kffffffffl."
+ /* 3 */ ".f......fl."
+ /* 4 */ "pffffff.fl."
+ /* 5 */ "ssssssf.fl."
+ /* 6 */ ".....tf.fl."
+ /* 7 */ "mmmm.tf.fl."
+ /* 8 */ "mmmm.tf.fl."
+ /* 9 */ "mmmm.tfffl."
+ /* 10 */ "mmmm.tu.vl."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "jjjjjjjjj.."
+ /* 3 */ "ffffffffl.."
+ /* 4 */ "sssssstfl.."
+ /* 5 */ "......tfl.."
+ /* 6 */ "......tfl.."
+ /* 7 */ "mmmm..tfl.."
+ /* 8 */ "mmmm..tfl.."
+ /* 9 */ "mmmm..tfl.."
+ /* 10 */ "mmmm..tfl..",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_93
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_94:
+ // The data has been exported from the gallery Plains, area index 43, ID 94, created by xoft
+ {
+ // Size:
+ 15, 6, 11, // SizeX = 15, SizeY = 6, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 5, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 0\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 3\n" /* torch */
+ "o: 50: 4\n" /* torch */
+ "p: 50: 2\n" /* torch */
+ "q: 50: 1\n" /* torch */
+ "r: 53: 3\n" /* woodstairs */
+ "s: 53: 5\n" /* woodstairs */
+ "t: 53: 4\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "......abc......"
+ /* 1 */ ".ddddddddddddd."
+ /* 2 */ ".ddddddddddddd."
+ /* 3 */ ".ddddddddddddd."
+ /* 4 */ ".ddddddddddddd."
+ /* 5 */ ".ddddddddddddd."
+ /* 6 */ ".ddddd...ddddd."
+ /* 7 */ ".ddddd...ddddd."
+ /* 8 */ ".ddddd...ddddd."
+ /* 9 */ ".ddddd...ddddd."
+ /* 10 */ "..............."
+
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".efffffgfffffe."
+ /* 2 */ ".f...........f."
+ /* 3 */ ".f...........f."
+ /* 4 */ ".f...........f."
+ /* 5 */ ".f...efffe...f."
+ /* 6 */ ".f...f...f...f."
+ /* 7 */ ".f...f...f...f."
+ /* 8 */ ".f...f...f...f."
+ /* 9 */ ".efffe...efffe."
+ /* 10 */ "..............."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".ehhhhfifhhhhe."
+ /* 2 */ ".h...........h."
+ /* 3 */ ".h...........h."
+ /* 4 */ ".h...........h."
+ /* 5 */ ".f...ehhhe...f."
+ /* 6 */ ".h...h...h...h."
+ /* 7 */ ".h...h...h...h."
+ /* 8 */ ".h...h...h...h."
+ /* 9 */ ".ehhhe...ehhhe."
+ /* 10 */ "..............."
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "jjjjjjjjjjjjjjj"
+ /* 1 */ "kfffffffffffffl"
+ /* 2 */ "kf....n.n....fl"
+ /* 3 */ "kf...........fl"
+ /* 4 */ "kf...o...o...fl"
+ /* 5 */ "kf..pfffffq..fl"
+ /* 6 */ "kf...frrrf...fl"
+ /* 7 */ "kf...fl.kf...fl"
+ /* 8 */ "kf...fl.kf...fl"
+ /* 9 */ "kfffffl.kfffffl"
+ /* 10 */ "ks...tl.ks...tl"
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".jjjjjjjjjjjjl."
+ /* 2 */ ".kfffffffffffl."
+ /* 3 */ ".kfffffffffffl."
+ /* 4 */ ".kfffffffffffl."
+ /* 5 */ ".kffflrrrrfffl."
+ /* 6 */ ".kfffl...kfffl."
+ /* 7 */ ".kfffl...kfffl."
+ /* 8 */ ".kfffl...kfffl."
+ /* 9 */ ".kfffl...kfffl."
+ /* 10 */ ".ks.tl...ks.tl."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..kjjjjjjjjjj.."
+ /* 3 */ "..kfffffffffl.."
+ /* 4 */ "..kflrrrrrkfl.."
+ /* 5 */ "..kfl.....kfl.."
+ /* 6 */ "..kfl.....kfl.."
+ /* 7 */ "..kfl.....kfl.."
+ /* 8 */ "..kfl.....kfl.."
+ /* 9 */ "..kfl.....kfl.."
+ /* 10 */ "..kfl.....kfl..",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_94
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_97:
+ // The data has been exported from the gallery Plains, area index 46, ID 97, created by Aloe_vera
+ {
+ // Size:
+ 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 5, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h: 53: 3\n" /* woodstairs */
+ "i: 85: 0\n" /* fence */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 1\n" /* woodstairs */
+ "l: 53: 0\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n:102: 0\n" /* glasspane */
+ "o: 64:12\n" /* wooddoorblock */
+ "p: 50: 3\n" /* torch */
+ "q: 72: 0\n" /* woodplate */
+ "r: 53: 7\n" /* woodstairs */
+ "s: 47: 0\n" /* bookshelf */
+ "t: 50: 1\n" /* torch */
+ "u: 50: 2\n" /* torch */
+ "v: 53: 6\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ "..........."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".fh.....hf."
+ /* 3 */ ".fi.....if."
+ /* 4 */ ".fj.kil.jf."
+ /* 5 */ ".efffffffe."
+ /* 6 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ennfofnne."
+ /* 2 */ ".n..p.p..n."
+ /* 3 */ ".nq.....qn."
+ /* 4 */ ".n...q...n."
+ /* 5 */ ".ennnfnnne."
+ /* 6 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "rfffffffffr"
+ /* 2 */ ".fsssssssf."
+ /* 3 */ ".ft.....uf."
+ /* 4 */ ".fsssssssf."
+ /* 5 */ "vfffffffffv"
+ /* 6 */ "hhhhhhhhhhh"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "jjjjjjjjjjj"
+ /* 2 */ "rfffffffffr"
+ /* 3 */ ".f.......f."
+ /* 4 */ "vfffffffffv"
+ /* 5 */ "hhhhhhhhhhh"
+ /* 6 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "jjjjjjjjjjj"
+ /* 3 */ "fffffffffff"
+ /* 4 */ "hhhhhhhhhhh"
+ /* 5 */ "..........."
+ /* 6 */ "...........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_97
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_98:
+ // The data has been exported from the gallery Plains, area index 47, ID 98, created by Aloe_vera
+ {
+ // Size:
+ 12, 7, 9, // SizeX = 12, SizeY = 7, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 6, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h: 53: 3\n" /* woodstairs */
+ "i: 85: 0\n" /* fence */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 1\n" /* woodstairs */
+ "l: 53: 0\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n:102: 0\n" /* glasspane */
+ "o: 64:13\n" /* wooddoorblock */
+ "p: 64:12\n" /* wooddoorblock */
+ "q: 50: 3\n" /* torch */
+ "r: 72: 0\n" /* woodplate */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 47: 0\n" /* bookshelf */
+ "u: 50: 1\n" /* torch */
+ "v: 50: 2\n" /* torch */
+ "w: 53: 6\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "....abbc...."
+ /* 1 */ ".dddddddddd."
+ /* 2 */ ".dddddddddd."
+ /* 3 */ ".dddddddddd."
+ /* 4 */ ".dddddddddd."
+ /* 5 */ ".dddddddddd."
+ /* 6 */ ".dddddddddd."
+ /* 7 */ ".dddddddddd."
+ /* 8 */ "............"
+
+ // Level 1
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".efffggfffe."
+ /* 2 */ ".f........f."
+ /* 3 */ ".fh......hf."
+ /* 4 */ ".fi......if."
+ /* 5 */ ".fj......jf."
+ /* 6 */ ".f.kilkil.f."
+ /* 7 */ ".effffffffe."
+ /* 8 */ "............"
+
+ // Level 2
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".ennfopfnne."
+ /* 2 */ ".n..q..q..n."
+ /* 3 */ ".n........n."
+ /* 4 */ ".fr......rf."
+ /* 5 */ ".n........n."
+ /* 6 */ ".n..r..r..n."
+ /* 7 */ ".ennfnnfnne."
+ /* 8 */ "............"
+
+ // Level 3
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "jjjjjjjjjjjj"
+ /* 1 */ "sffffffffffs"
+ /* 2 */ ".fttttttttf."
+ /* 3 */ ".f........f."
+ /* 4 */ ".fu......vf."
+ /* 5 */ ".f........f."
+ /* 6 */ ".fttttttttf."
+ /* 7 */ "wffffffffffw"
+ /* 8 */ "hhhhhhhhhhhh"
+
+ // Level 4
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "jjjjjjjjjjjj"
+ /* 2 */ "sffffffffffs"
+ /* 3 */ ".fttttttttf."
+ /* 4 */ ".f........f."
+ /* 5 */ ".fttttttttf."
+ /* 6 */ "wffffffffffw"
+ /* 7 */ "hhhhhhhhhhhh"
+ /* 8 */ "............"
+
+ // Level 5
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "jjjjjjjjjjjj"
+ /* 3 */ "sffffffffffs"
+ /* 4 */ ".f........f."
+ /* 5 */ "wffffffffffw"
+ /* 6 */ "hhhhhhhhhhhh"
+ /* 7 */ "............"
+ /* 8 */ "............"
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "jjjjjjjjjjjj"
+ /* 4 */ "ffffffffffff"
+ /* 5 */ "hhhhhhhhhhhh"
+ /* 6 */ "............"
+ /* 7 */ "............"
+ /* 8 */ "............",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_98
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PlainsVillage_99:
+ // The data has been exported from the gallery Plains, area index 48, ID 99, 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: 67: 0\n" /* stairs */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 4: 0\n" /* cobblestone */
+ "e: 43: 0\n" /* doubleslab */
+ "f: 2: 0\n" /* grass */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 5\n" /* wooddoorblock */
+ "j: 53: 3\n" /* woodstairs */
+ "k: 85: 0\n" /* fence */
+ "l: 53: 2\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 64: 7\n" /* wooddoorblock */
+ "o:102: 0\n" /* glasspane */
+ "p: 64:12\n" /* wooddoorblock */
+ "q: 72: 0\n" /* woodplate */
+ "r: 53: 7\n" /* woodstairs */
+ "s: 50: 1\n" /* torch */
+ "t: 50: 2\n" /* torch */
+ "u: 53: 6\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".deeeedddd."
+ /* 3 */ ".deeeedddd."
+ /* 4 */ ".deeeedddd."
+ /* 5 */ ".deeeedddd."
+ /* 6 */ ".deeeedddd."
+ /* 7 */ ".ddddddddd."
+ /* 8 */ "..fffffff.."
+ /* 9 */ "mmfffffffmm"
+ /* 10 */ "mmfffffffmm"
+ /* 11 */ "mmfffffffmm"
+ /* 12 */ "mmfffffffmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ghhhihhhg."
+ /* 2 */ ".h.e....jh."
+ /* 3 */ ".h.e....kh."
+ /* 4 */ ".h.e....lh."
+ /* 5 */ ".h.......h."
+ /* 6 */ ".h.......h."
+ /* 7 */ ".ghhhnhhhg."
+ /* 8 */ "..k.....k.."
+ /* 9 */ "mmk.....kmm"
+ /* 10 */ "mmk.....kmm"
+ /* 11 */ "mmk.....kmm"
+ /* 12 */ "mmkkkkkkkmm"
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".goohphoog."
+ /* 2 */ ".o.......o."
+ /* 3 */ ".o......qo."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".o.......o."
+ /* 6 */ ".o.......o."
+ /* 7 */ ".goohphoog."
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "lllllllllll"
+ /* 1 */ "rhhhhhhhhhr"
+ /* 2 */ ".h.......h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".hs.....th."
+ /* 5 */ ".h.......h."
+ /* 6 */ ".h.......h."
+ /* 7 */ "uhhhhhhhhhu"
+ /* 8 */ "jjjjjjjjjjj"
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "lllllllllll"
+ /* 2 */ "rhhhhhhhhhr"
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".h.......h."
+ /* 6 */ "uhhhhhhhhhu"
+ /* 7 */ "jjjjjjjjjjj"
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "lllllllllll"
+ /* 3 */ "rhhhhhhhhhr"
+ /* 4 */ ".h.......h."
+ /* 5 */ "uhhhhhhhhhu"
+ /* 6 */ "jjjjjjjjjjj"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "lllllllllll"
+ /* 4 */ "hhhhhhhhhhh"
+ /* 5 */ "jjjjjjjjjjj"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // PlainsVillage_99
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // RoofedWell:
+ // The data has been exported from the gallery Plains, area index 119, ID 271, created by STR_Warrior
+ {
+ // Size:
+ 7, 15, 7, // SizeX = 7, SizeY = 15, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 14, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "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:118: 3\n" /* cauldronblock */
+ "h: 85: 0\n" /* fence */
+ "i: 53: 2\n" /* woodstairs */
+ "j: 53: 7\n" /* woodstairs */
+ "k: 5: 0\n" /* wood */
+ "l: 53: 4\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 5\n" /* woodstairs */
+ "o: 53: 6\n" /* woodstairs */
+ "p: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "eefffee"
+ /* 1 */ "ebbbbbe"
+ /* 2 */ "fbcccbf"
+ /* 3 */ "fbcccbf"
+ /* 4 */ "fbcccbf"
+ /* 5 */ "ebbbbbe"
+ /* 6 */ "eefffee"
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".bbbbb."
+ /* 2 */ ".b...b."
+ /* 3 */ ".b.g.b."
+ /* 4 */ ".b...b."
+ /* 5 */ ".bbbbb."
+ /* 6 */ "......."
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".h...h."
+ /* 2 */ "......."
+ /* 3 */ "...h..."
+ /* 4 */ "......."
+ /* 5 */ ".h...h."
+ /* 6 */ "......."
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".h...h."
+ /* 2 */ "......."
+ /* 3 */ "...h..."
+ /* 4 */ "......."
+ /* 5 */ ".h...h."
+ /* 6 */ "......."
+
+ // Level 12
+ /* z\x* 0123456 */
+ /* 0 */ "iiiiiii"
+ /* 1 */ "jkjjjkj"
+ /* 2 */ ".l...n."
+ /* 3 */ ".l.h.n."
+ /* 4 */ ".l...n."
+ /* 5 */ "okoooko"
+ /* 6 */ "ppppppp"
+
+ // Level 13
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "iiiiiii"
+ /* 2 */ "jkjjjkj"
+ /* 3 */ ".k.h.k."
+ /* 4 */ "okoooko"
+ /* 5 */ "ppppppp"
+ /* 6 */ "......."
+
+ // Level 14
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "iiiiiii"
+ /* 3 */ "kkkkkkk"
+ /* 4 */ "ppppppp"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // RoofedWell
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Windmill:
+ // The data has been exported from the gallery Plains, area index 60, ID 111, created by Aloe_vera
+ {
+ // Size:
+ 9, 16, 13, // SizeX = 9, SizeY = 16, SizeZ = 13
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 15, 12, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 67: 3\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 54: 4\n" /* chest */
+ "h:154: 4\n" /* hopper */
+ "i: 64: 6\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 85: 0\n" /* fence */
+ "l: 64:12\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 2\n" /* torch */
+ "o: 35: 0\n" /* wool */
+ "p: 17: 4\n" /* tree */
+ "q: 17: 8\n" /* tree */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".aaaaa..."
+ /* 5 */ ".aaaaab.."
+ /* 6 */ ".aaaaac.."
+ /* 7 */ ".aaaaad.."
+ /* 8 */ ".aaaaa..."
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f...f..."
+ /* 6 */ ".fgh.i..."
+ /* 7 */ ".f...f..."
+ /* 8 */ ".efffe..."
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".ejjje..."
+ /* 5 */ ".j...f..."
+ /* 6 */ ".j.k.l..."
+ /* 7 */ ".j...f..."
+ /* 8 */ ".ejjje..."
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 3
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f..nf..."
+ /* 6 */ ".f.k.f..."
+ /* 7 */ ".f..nf..k"
+ /* 8 */ ".efffe..o"
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".epppe..."
+ /* 5 */ ".q...q..."
+ /* 6 */ ".q.k.q..."
+ /* 7 */ ".q...q..k"
+ /* 8 */ ".epppe..o"
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 5
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f...f..."
+ /* 6 */ ".f.k.f..k"
+ /* 7 */ ".f...f..o"
+ /* 8 */ ".efffe..o"
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 6
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "........."
+ /* 4 */ ".ejjje..."
+ /* 5 */ ".j...j..."
+ /* 6 */ ".j.k.j..k"
+ /* 7 */ ".j...j..o"
+ /* 8 */ ".ejjje..."
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 7
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.o"
+ /* 1 */ "mmmmmmm.o"
+ /* 2 */ "mmmmmmm.o"
+ /* 3 */ "........."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f...f..k"
+ /* 6 */ ".f.k.f..o"
+ /* 7 */ ".f...f..o"
+ /* 8 */ ".efffe..."
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 8
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.k"
+ /* 1 */ "mmmmmmm.k"
+ /* 2 */ "mmmmmmm.o"
+ /* 3 */ "........o"
+ /* 4 */ ".epppe..o"
+ /* 5 */ ".q...q..k"
+ /* 6 */ ".q.k.q..o"
+ /* 7 */ ".q...q..k"
+ /* 8 */ ".epppe..k"
+ /* 9 */ "........."
+ /* 10 */ "mmmmmmm.."
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 9
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.k"
+ /* 3 */ "rrrrrrr.k"
+ /* 4 */ "sfffffs.o"
+ /* 5 */ ".f...f..o"
+ /* 6 */ ".f.kppppp"
+ /* 7 */ ".f...f..o"
+ /* 8 */ "tffffft.o"
+ /* 9 */ "uuuuuuu.k"
+ /* 10 */ "mmmmmmm.k"
+ /* 11 */ "mmmmmmm.."
+ /* 12 */ "mmmmmmm.."
+
+ // Level 10
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "mmmmmmm.."
+ /* 4 */ "rrrrrrr.k"
+ /* 5 */ "sfffffs.k"
+ /* 6 */ ".f...f..o"
+ /* 7 */ "tffffft.k"
+ /* 8 */ "uuuuuuu.o"
+ /* 9 */ "mmmmmmm.o"
+ /* 10 */ "mmmmmmm.o"
+ /* 11 */ "mmmmmmm.k"
+ /* 12 */ "mmmmmmm.k"
+
+ // Level 11
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmmmm.."
+ /* 1 */ "mmmmmmm.."
+ /* 2 */ "mmmmmmm.."
+ /* 3 */ "mmmmmmm.."
+ /* 4 */ "mmmmmmm.."
+ /* 5 */ "rrrrrrr.o"
+ /* 6 */ "fffffff.o"
+ /* 7 */ "uuuuuuu.k"
+ /* 8 */ "mmmmmmm.."
+ /* 9 */ "mmmmmmm.."
+ /* 10 */ "mmmmmmm.o"
+ /* 11 */ "mmmmmmm.o"
+ /* 12 */ "mmmmmmm.o"
+
+ // Level 12
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........."
+ /* 5 */ "........o"
+ /* 6 */ "........k"
+ /* 7 */ "........."
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
+
+ // Level 13
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........o"
+ /* 5 */ "........o"
+ /* 6 */ "........k"
+ /* 7 */ "........."
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
+
+ // Level 14
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........o"
+ /* 5 */ "........k"
+ /* 6 */ "........."
+ /* 7 */ "........."
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
+
+ // Level 15
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........o"
+ /* 5 */ "........k"
+ /* 6 */ "........."
+ /* 7 */ "........."
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ ".........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Windmill
+}; // g_PlainsVillagePrefabs
+
+
+
+
+
+
+const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Well:
+ // The data has been exported from the gallery Plains, area index 1, ID 5, created by Aloe_vera
+ {
+ // Size:
+ 4, 13, 4, // SizeX = 4, SizeY = 13, SizeZ = 4
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 3, 12, 3, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 1: 0\n" /* stone */
+ "b: 4: 0\n" /* cobblestone */
+ "c: 8: 0\n" /* water */
+ "d: 85: 0\n" /* fence */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123 */
+ /* 0 */ "aaaa"
+ /* 1 */ "aaaa"
+ /* 2 */ "aaaa"
+ /* 3 */ "aaaa"
+
+ // Level 1
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 2
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 3
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 4
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 5
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 6
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 7
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 8
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 9
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "b..b"
+ /* 2 */ "b..b"
+ /* 3 */ "bbbb"
+
+ // Level 10
+ /* z\x* 0123 */
+ /* 0 */ "d..d"
+ /* 1 */ "...."
+ /* 2 */ "...."
+ /* 3 */ "d..d"
+
+ // Level 11
+ /* z\x* 0123 */
+ /* 0 */ "d..d"
+ /* 1 */ "...."
+ /* 2 */ "...."
+ /* 3 */ "d..d"
+
+ // Level 12
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bbbb"
+ /* 2 */ "bbbb"
+ /* 3 */ "bbbb",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Well
+};
+
+
+
+
+
+// The prefab counts:
+
+const size_t g_PlainsVillagePrefabsCount = ARRAYCOUNT(g_PlainsVillagePrefabs);
+
+const size_t g_PlainsVillageStartingPrefabsCount = ARRAYCOUNT(g_PlainsVillageStartingPrefabs);
+
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.h b/src/Generating/Prefabs/PlainsVillagePrefabs.h
new file mode 100644
index 000000000..087783b1e
--- /dev/null
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.h
@@ -0,0 +1,15 @@
+
+// PlainsVillagePrefabs.h
+
+// Declares the prefabs in the group PlainsVillage
+
+#include "../Prefab.h"
+
+
+
+
+
+extern const cPrefab::sDef g_PlainsVillagePrefabs[];
+extern const cPrefab::sDef g_PlainsVillageStartingPrefabs[];
+extern const size_t g_PlainsVillagePrefabsCount;
+extern const size_t g_PlainsVillageStartingPrefabsCount;
diff --git a/src/Generating/Prefabs/SandVillagePrefabs.cpp b/src/Generating/Prefabs/SandVillagePrefabs.cpp
new file mode 100644
index 000000000..23af0f0a6
--- /dev/null
+++ b/src/Generating/Prefabs/SandVillagePrefabs.cpp
@@ -0,0 +1,1887 @@
+
+// SandVillagePrefabs.cpp
+
+// Defines the prefabs in the group SandVillage
+
+// NOTE: This file has been generated automatically by GalExport!
+// Any manual changes will be overwritten by the next automatic export!
+
+#include "Globals.h"
+#include "SandVillagePrefabs.h"
+
+
+
+
+
+const cPrefab::sDef g_SandVillagePrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // DoubleField:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 12, 1, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 24: 0\n" /* sandstone */
+ "b: 60: 7\n" /* tilleddirt */
+ "c: 8: 0\n" /* water */
+ "d: 50: 5\n" /* torch */
+ "e: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "aaaaaaaaaaaaa"
+ /* 1 */ "abbcbbabbcbba"
+ /* 2 */ "abbcbbabbcbba"
+ /* 3 */ "abbcbbabbcbba"
+ /* 4 */ "abbcbbabbcbba"
+ /* 5 */ "abbcbbabbcbba"
+ /* 6 */ "abbcbbabbcbba"
+ /* 7 */ "abbcbbabbcbba"
+ /* 8 */ "aaaaaaaaaaaaa"
+
+ // Level 1
+ /* 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."
+ /* 8 */ "d.....d.....d",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // DoubleField
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House11x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 1\n" /* torch */
+ "o: 50: 2\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ "..........."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ddddedddd."
+ /* 2 */ ".d.......d."
+ /* 3 */ ".d.......d."
+ /* 4 */ ".d.......d."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".dffdgdffd."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".dffdfdffd."
+ /* 6 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "bbbbbbbbbbb"
+ /* 1 */ "hdddddddddh"
+ /* 2 */ ".d..i.i..d."
+ /* 3 */ ".d.......d."
+ /* 4 */ ".d..j.j..d."
+ /* 5 */ "kdddddddddk"
+ /* 6 */ "lllllllllll"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "bbbbbbbbbbb"
+ /* 2 */ "hdddddddddh"
+ /* 3 */ ".dn.....od."
+ /* 4 */ "kdddddddddk"
+ /* 5 */ "lllllllllll"
+ /* 6 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "bbbbbbbbbbb"
+ /* 3 */ "ddddddddddd"
+ /* 4 */ "lllllllllll"
+ /* 5 */ "..........."
+ /* 6 */ "...........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House11x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House11x9:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 6, 8, // 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....abc...."
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ ".ddddddddd."
+ /* 7 */ ".ddddddddd."
+ /* 8 */ "..........."
+
+ // 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."
+ /* 8 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".dffdgdffd."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".d.......d."
+ /* 5 */ ".f.......f."
+ /* 6 */ ".f.......f."
+ /* 7 */ ".dfffdfffd."
+ /* 8 */ "..........."
+
+ // Level 3
+ /* 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"
+ /* 8 */ "lllllllllll"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "bbbbbbbbbbb"
+ /* 2 */ "hdddddddddh"
+ /* 3 */ ".d.......d."
+ /* 4 */ ".d.......d."
+ /* 5 */ ".d.......d."
+ /* 6 */ "kdddddddddk"
+ /* 7 */ "lllllllllll"
+ /* 8 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "bbbbbbbbbbb"
+ /* 3 */ "hdddddddddh"
+ /* 4 */ ".d.......d."
+ /* 5 */ "kdddddddddk"
+ /* 6 */ "lllllllllll"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "bbbbbbbbbbb"
+ /* 4 */ "ddddddddddd"
+ /* 5 */ "lllllllllll"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "...........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House11x9
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House13x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 12, 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ ".....abc....."
+ /* 1 */ ".ddddddddddd."
+ /* 2 */ ".ddddddddddd."
+ /* 3 */ ".ddddddddddd."
+ /* 4 */ ".ddddddddddd."
+ /* 5 */ ".ddddddddddd."
+ /* 6 */ "............."
+
+ // Level 1
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ ".dddddeddddd."
+ /* 2 */ ".d.........d."
+ /* 3 */ ".d.........d."
+ /* 4 */ ".d.........d."
+ /* 5 */ ".ddddddddddd."
+ /* 6 */ "............."
+
+ // Level 2
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ ".dfffdgdfffd."
+ /* 2 */ ".f.........f."
+ /* 3 */ ".f.........f."
+ /* 4 */ ".f.........f."
+ /* 5 */ ".dffdfffdffd."
+ /* 6 */ "............."
+
+ // Level 3
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "bbbbbbbbbbbbb"
+ /* 1 */ "hdddddddddddh"
+ /* 2 */ ".d...i.i...d."
+ /* 3 */ ".d.........d."
+ /* 4 */ ".d..j...j..d."
+ /* 5 */ "kdddddddddddk"
+ /* 6 */ "lllllllllllll"
+
+ // Level 4
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "bbbbbbbbbbbbb"
+ /* 2 */ "hdddddddddddh"
+ /* 3 */ ".d.........d."
+ /* 4 */ "kdddddddddddk"
+ /* 5 */ "lllllllllllll"
+ /* 6 */ "............."
+
+ // Level 5
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "bbbbbbbbbbbbb"
+ /* 3 */ "ddddddddddddd"
+ /* 4 */ "lllllllllllll"
+ /* 5 */ "............."
+ /* 6 */ ".............",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House13x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House13x9:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 12, 6, 8, // 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ ".....abc....."
+ /* 1 */ ".ddddddddddd."
+ /* 2 */ ".ddddddddddd."
+ /* 3 */ ".ddddddddddd."
+ /* 4 */ ".ddddddddddd."
+ /* 5 */ ".ddddddddddd."
+ /* 6 */ ".ddddddddddd."
+ /* 7 */ ".ddddddddddd."
+ /* 8 */ "............."
+
+ // 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."
+ /* 8 */ "............."
+
+ // Level 2
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ ".dfffdgdfffd."
+ /* 2 */ ".f.........f."
+ /* 3 */ ".f.........f."
+ /* 4 */ ".d.........d."
+ /* 5 */ ".f.........f."
+ /* 6 */ ".f.........f."
+ /* 7 */ ".dffdffdfffd."
+ /* 8 */ "............."
+
+ // Level 3
+ /* 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"
+ /* 8 */ "lllllllllllll"
+
+ // Level 4
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "bbbbbbbbbbbbb"
+ /* 2 */ "hdddddddddddh"
+ /* 3 */ ".d.........d."
+ /* 4 */ ".d.........d."
+ /* 5 */ ".d.........d."
+ /* 6 */ "kdddddddddddk"
+ /* 7 */ "lllllllllllll"
+ /* 8 */ "............."
+
+ // Level 5
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "bbbbbbbbbbbbb"
+ /* 3 */ "hdddddddddddh"
+ /* 4 */ ".d.........d."
+ /* 5 */ "kdddddddddddk"
+ /* 6 */ "lllllllllllll"
+ /* 7 */ "............."
+ /* 8 */ "............."
+
+ // Level 6
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "bbbbbbbbbbbbb"
+ /* 4 */ "ddddddddddddd"
+ /* 5 */ "lllllllllllll"
+ /* 6 */ "............."
+ /* 7 */ "............."
+ /* 8 */ ".............",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House13x9
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House15x9:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 6, 8, // 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ ".....abc......."
+ /* 1 */ ".ddddddddddddd."
+ /* 2 */ ".ddddddddddddd."
+ /* 3 */ ".ddddddddddddd."
+ /* 4 */ ".ddddddddddddd."
+ /* 5 */ ".ddddddddddddd."
+ /* 6 */ ".ddddddddddddd."
+ /* 7 */ ".ddddddddddddd."
+ /* 8 */ "..............."
+
+ // 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."
+ /* 8 */ "..............."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".dfffdgdffdffd."
+ /* 2 */ ".f...........f."
+ /* 3 */ ".f...........f."
+ /* 4 */ ".d...........d."
+ /* 5 */ ".f...........f."
+ /* 6 */ ".f...........f."
+ /* 7 */ ".dffdffdffdffd."
+ /* 8 */ "..............."
+
+ // Level 3
+ /* 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"
+ /* 8 */ "lllllllllllllll"
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "bbbbbbbbbbbbbbb"
+ /* 2 */ "hdddddddddddddh"
+ /* 3 */ ".d...........d."
+ /* 4 */ ".d...........d."
+ /* 5 */ ".d...........d."
+ /* 6 */ "kdddddddddddddk"
+ /* 7 */ "lllllllllllllll"
+ /* 8 */ "..............."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "bbbbbbbbbbbbbbb"
+ /* 3 */ "hdddddddddddddh"
+ /* 4 */ ".d...........d."
+ /* 5 */ "kdddddddddddddk"
+ /* 6 */ "lllllllllllllll"
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "bbbbbbbbbbbbbbb"
+ /* 4 */ "ddddddddddddddd"
+ /* 5 */ "lllllllllllllll"
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "...............",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House15x9
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House16x9:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 6, 8, // 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "........abc....."
+ /* 1 */ ".dddddddddddddd."
+ /* 2 */ ".dddddddddddddd."
+ /* 3 */ ".dddddddddddddd."
+ /* 4 */ ".dddddddddddddd."
+ /* 5 */ ".dddddddddddddd."
+ /* 6 */ ".dddddddddddddd."
+ /* 7 */ ".dddddddddddddd."
+ /* 8 */ "................"
+
+ // 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."
+ /* 8 */ "................"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".dffdfffdgdfffd."
+ /* 2 */ ".f............f."
+ /* 3 */ ".f............f."
+ /* 4 */ ".d............d."
+ /* 5 */ ".f............f."
+ /* 6 */ ".f............f."
+ /* 7 */ ".dffdffdfffdffd."
+ /* 8 */ "................"
+
+ // Level 3
+ /* 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"
+ /* 8 */ "llllllllllllllll"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "bbbbbbbbbbbbbbbb"
+ /* 2 */ "hddddddddddddddh"
+ /* 3 */ ".d............d."
+ /* 4 */ ".d............d."
+ /* 5 */ ".d............d."
+ /* 6 */ "kddddddddddddddk"
+ /* 7 */ "llllllllllllllll"
+ /* 8 */ "................"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "bbbbbbbbbbbbbbbb"
+ /* 3 */ "hddddddddddddddh"
+ /* 4 */ ".d............d."
+ /* 5 */ "kddddddddddddddk"
+ /* 6 */ "llllllllllllllll"
+ /* 7 */ "................"
+ /* 8 */ "................"
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "bbbbbbbbbbbbbbbb"
+ /* 4 */ "dddddddddddddddd"
+ /* 5 */ "llllllllllllllll"
+ /* 6 */ "................"
+ /* 7 */ "................"
+ /* 8 */ "................",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House16x9
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House7x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j:128: 6\n" /* sandstonestairs */
+ "k:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "...abc."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".ddddd."
+ /* 3 */ ".ddddd."
+ /* 4 */ ".ddddd."
+ /* 5 */ ".ddddd."
+ /* 6 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ddded."
+ /* 2 */ ".d...d."
+ /* 3 */ ".d...d."
+ /* 4 */ ".d...d."
+ /* 5 */ ".ddddd."
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".dfdgd."
+ /* 2 */ ".f...f."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ ".dfffd."
+ /* 6 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "bbbbbbb"
+ /* 1 */ "hdddddh"
+ /* 2 */ ".d.i.d."
+ /* 3 */ ".d...d."
+ /* 4 */ ".d...d."
+ /* 5 */ "jdddddj"
+ /* 6 */ "kkkkkkk"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "bbbbbbb"
+ /* 2 */ "hdddddh"
+ /* 3 */ ".d...d."
+ /* 4 */ "jdddddj"
+ /* 5 */ "kkkkkkk"
+ /* 6 */ "......."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "bbbbbbb"
+ /* 3 */ "ddddddd"
+ /* 4 */ "kkkkkkk"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House7x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House9x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 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 */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64:12\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "...abc..."
+ /* 1 */ ".ddddddd."
+ /* 2 */ ".ddddddd."
+ /* 3 */ ".ddddddd."
+ /* 4 */ ".ddddddd."
+ /* 5 */ ".ddddddd."
+ /* 6 */ "........."
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".dddeddd."
+ /* 2 */ ".d.....d."
+ /* 3 */ ".d.....d."
+ /* 4 */ ".d.....d."
+ /* 5 */ ".ddddddd."
+ /* 6 */ "........."
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".dfdgdfd."
+ /* 2 */ ".f.....f."
+ /* 3 */ ".f.....f."
+ /* 4 */ ".f.....f."
+ /* 5 */ ".dffdffd."
+ /* 6 */ "........."
+
+ // Level 3
+ /* z\x* 012345678 */
+ /* 0 */ "bbbbbbbbb"
+ /* 1 */ "hdddddddh"
+ /* 2 */ ".d.i.i.d."
+ /* 3 */ ".d.....d."
+ /* 4 */ ".d..j..d."
+ /* 5 */ "kdddddddk"
+ /* 6 */ "lllllllll"
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "bbbbbbbbb"
+ /* 2 */ "hdddddddh"
+ /* 3 */ ".d.....d."
+ /* 4 */ "kdddddddk"
+ /* 5 */ "lllllllll"
+ /* 6 */ "........."
+
+ // Level 5
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "bbbbbbbbb"
+ /* 3 */ "ddddddddd"
+ /* 4 */ "lllllllll"
+ /* 5 */ "........."
+ /* 6 */ ".........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House9x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House9x9:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 6, 8, // 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 */
+ "e: 64: 1\n" /* wooddoorblock */
+ "f:102: 0\n" /* glasspane */
+ "g: 64: 8\n" /* wooddoorblock */
+ "h:128: 7\n" /* sandstonestairs */
+ "i: 50: 3\n" /* torch */
+ "j: 50: 4\n" /* torch */
+ "k:128: 6\n" /* sandstonestairs */
+ "l:128: 3\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "...abc..."
+ /* 1 */ ".ddddddd."
+ /* 2 */ ".ddddddd."
+ /* 3 */ ".ddddddd."
+ /* 4 */ ".ddddddd."
+ /* 5 */ ".ddddddd."
+ /* 6 */ ".ddddddd."
+ /* 7 */ ".ddddddd."
+ /* 8 */ "........."
+
+ // 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."
+ /* 8 */ "........."
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".dfdgdfd."
+ /* 2 */ ".f.....f."
+ /* 3 */ ".f.....f."
+ /* 4 */ ".d.....d."
+ /* 5 */ ".f.....f."
+ /* 6 */ ".f.....f."
+ /* 7 */ ".dffdffd."
+ /* 8 */ "........."
+
+ // Level 3
+ /* 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"
+ /* 8 */ "lllllllll"
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "bbbbbbbbb"
+ /* 2 */ "hdddddddh"
+ /* 3 */ ".d.....d."
+ /* 4 */ ".d.....d."
+ /* 5 */ ".d.....d."
+ /* 6 */ "kdddddddk"
+ /* 7 */ "lllllllll"
+ /* 8 */ "........."
+
+ // Level 5
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "bbbbbbbbb"
+ /* 3 */ "hdddddddh"
+ /* 4 */ ".d.....d."
+ /* 5 */ "kdddddddk"
+ /* 6 */ "lllllllll"
+ /* 7 */ "........."
+ /* 8 */ "........."
+
+ // Level 6
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "bbbbbbbbb"
+ /* 4 */ "ddddddddd"
+ /* 5 */ "lllllllll"
+ /* 6 */ "........."
+ /* 7 */ "........."
+ /* 8 */ ".........",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // House9x9
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseL14x12:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 5, 11, // 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 */
+ "e:128: 3\n" /* sandstonestairs */
+ "f: 64: 5\n" /* wooddoorblock */
+ "g:102: 0\n" /* glasspane */
+ "h: 64:12\n" /* wooddoorblock */
+ "i:128: 7\n" /* sandstonestairs */
+ "j: 50: 3\n" /* torch */
+ "k: 50: 4\n" /* torch */
+ "l:128: 6\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 5\n" /* sandstonestairs */
+ "o:128: 4\n" /* sandstonestairs */
+ "p: 50: 1\n" /* torch */,
+
+ // Block data:
+ // 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......."
+
+ // Level 1
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ ".dddddddfdddd."
+ /* 2 */ ".d..........d."
+ /* 3 */ ".d..........d."
+ /* 4 */ ".d..........d."
+ /* 5 */ ".ddddfddd...d."
+ /* 6 */ "........d...d."
+ /* 7 */ "mmmmmmm.d...d."
+ /* 8 */ "mmmmmmm.d...d."
+ /* 9 */ "mmmmmmm.d...d."
+ /* 10 */ "mmmmmmm.ddddd."
+ /* 11 */ "mmmmmmm......."
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ ".dggdggdhdggd."
+ /* 2 */ ".g..........g."
+ /* 3 */ ".g..........g."
+ /* 4 */ ".g..........d."
+ /* 5 */ ".dggdhdgg...g."
+ /* 6 */ "........g...g."
+ /* 7 */ "mmmmmmm.d...d."
+ /* 8 */ "mmmmmmm.g...g."
+ /* 9 */ "mmmmmmm.g...g."
+ /* 10 */ "mmmmmmm.dgggd."
+ /* 11 */ "mmmmmmm......."
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "bbbbbbbbbbbbbb"
+ /* 1 */ "iddddddddddddc"
+ /* 2 */ ".d.....j.j..dc"
+ /* 3 */ ".d..........dc"
+ /* 4 */ ".d..k.k.....dc"
+ /* 5 */ "ldddddddd...dc"
+ /* 6 */ "eeeeeeead...dc"
+ /* 7 */ "mmmmmmmad...dc"
+ /* 8 */ "mmmmmmmad...dc"
+ /* 9 */ "mmmmmmmad...dc"
+ /* 10 */ "mmmmmmmadddddc"
+ /* 11 */ "mmmmmmman...oc"
+
+ // Level 4
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ "bbbbbbbbbbbbb."
+ /* 2 */ "idddddddddddc."
+ /* 3 */ ".dp........dc."
+ /* 4 */ "lddddddddd.dc."
+ /* 5 */ "eeeeeeeead.dc."
+ /* 6 */ "........ad.dc."
+ /* 7 */ "mmmmmmm.ad.dc."
+ /* 8 */ "mmmmmmm.ad.dc."
+ /* 9 */ "mmmmmmm.adkdc."
+ /* 10 */ "mmmmmmm.adddc."
+ /* 11 */ "mmmmmmm.an.oc."
+
+ // Level 5
+ /* 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..",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // HouseL14x12
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseL14x12:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 6, 11, // 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 */
+ "e:128: 3\n" /* sandstonestairs */
+ "f: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j:128: 7\n" /* sandstonestairs */
+ "k: 50: 3\n" /* torch */
+ "l: 50: 2\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "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........."
+
+ // 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 */ ".ddddgd.....d."
+ /* 8 */ "......d.....d."
+ /* 9 */ "mmmmm.d.....d."
+ /* 10 */ "mmmmm.ddddddd."
+ /* 11 */ "mmmmm........."
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ ".dhhdidhhdhhd."
+ /* 2 */ ".h..........h."
+ /* 3 */ ".h..........h."
+ /* 4 */ ".d..........d."
+ /* 5 */ ".h..........h."
+ /* 6 */ ".h..........h."
+ /* 7 */ ".dhhdid.....d."
+ /* 8 */ "......h.....h."
+ /* 9 */ "mmmmm.h.....h."
+ /* 10 */ "mmmmm.dhhdhhd."
+ /* 11 */ "mmmmm........."
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "bbbbbbbbbbbbbb"
+ /* 1 */ "jddddddddddddc"
+ /* 2 */ ".d..k.k.....dc"
+ /* 3 */ ".d..........dc"
+ /* 4 */ ".d.........ldc"
+ /* 5 */ ".d..........dc"
+ /* 6 */ ".d..n.n.....dc"
+ /* 7 */ "oddddddp...ldc"
+ /* 8 */ "eeeeead.....dc"
+ /* 9 */ "mmmmmad.....dc"
+ /* 10 */ "mmmmmadddddddc"
+ /* 11 */ "mmmmmaq.....rc"
+
+ // Level 4
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ "bbbbbbbbbbbbc."
+ /* 2 */ "jdddddddddddc."
+ /* 3 */ ".d.........dc."
+ /* 4 */ ".d.........dc."
+ /* 5 */ ".d.........dc."
+ /* 6 */ "oddddddd...dc."
+ /* 7 */ "eeeeeead...dc."
+ /* 8 */ "......ad...dc."
+ /* 9 */ "mmmmm.ad...dc."
+ /* 10 */ "mmmmm.adddddc."
+ /* 11 */ "mmmmm.aq...rc."
+
+ // Level 5
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ ".............."
+ /* 2 */ "bbbbbbbbbbbb.."
+ /* 3 */ "jddddddddddc.."
+ /* 4 */ ".d........dc.."
+ /* 5 */ "odddddddd.dc.."
+ /* 6 */ "eeeeeeeed.dc.."
+ /* 7 */ ".......ad.dc.."
+ /* 8 */ ".......ad.dc.."
+ /* 9 */ "mmmmm..ad.dc.."
+ /* 10 */ "mmmmm..adddc.."
+ /* 11 */ "mmmmm..aq.rc.."
+
+ // Level 6
+ /* 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...",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // HouseL14x12
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // SingleField:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 1, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 24: 0\n" /* sandstone */
+ "b: 60: 7\n" /* tilleddirt */
+ "c: 8: 0\n" /* water */
+ "d: 50: 5\n" /* torch */
+ "e: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "aaaaaaaaaa"
+ /* 1 */ "abbbbbbbba"
+ /* 2 */ "abbbbbbbba"
+ /* 3 */ "acccccccca"
+ /* 4 */ "abbbbbbbba"
+ /* 5 */ "abbbbbbbba"
+ /* 6 */ "aaaaaaaaaa"
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "d........d"
+ /* 1 */ ".eeeeeeee."
+ /* 2 */ ".eeeeeeee."
+ /* 3 */ ".........."
+ /* 4 */ ".eeeeeeee."
+ /* 5 */ ".eeeeeeee."
+ /* 6 */ "d........d",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // SingleField
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // SmallHut:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 4, 5, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 24: 0\n" /* sandstone */
+ "b:128: 3\n" /* sandstonestairs */
+ "c: 24: 2\n" /* sandstone */
+ "d: 50: 5\n" /* torch */
+ "e: 26:10\n" /* bedblock */
+ "f: 26: 2\n" /* bedblock */
+ "g: 64: 3\n" /* wooddoorblock */
+ "h: 64: 8\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aaaaa"
+ /* 3 */ "aaaaa"
+ /* 4 */ "aaaaa"
+ /* 5 */ "..b.."
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "accca"
+ /* 1 */ "cdedc"
+ /* 2 */ "c.f.c"
+ /* 3 */ "c...c"
+ /* 4 */ "acgca"
+ /* 5 */ "....."
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "ac.ca"
+ /* 1 */ "c...c"
+ /* 2 */ "....."
+ /* 3 */ "c...c"
+ /* 4 */ "achca"
+ /* 5 */ "....."
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "accca"
+ /* 1 */ "c...c"
+ /* 2 */ "c...c"
+ /* 3 */ "c...c"
+ /* 4 */ "accca"
+ /* 5 */ "....."
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ ".aaa."
+ /* 1 */ "aaaaa"
+ /* 2 */ "aaaaa"
+ /* 3 */ "aaaaa"
+ /* 4 */ ".aaa."
+ /* 5 */ ".....",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // SmallHut
+}; // g_SandVillagePrefabs
+
+
+
+
+
+
+const cPrefab::sDef g_SandVillageStartingPrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Well:
+ // The data has been exported from the gallery Desert, area index 0, ID 1, created by Aloe_vera
+ {
+ // Size:
+ 4, 13, 4, // SizeX = 4, SizeY = 13, SizeZ = 4
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 3, 12, 3, // 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: 85: 0\n" /* fence */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123 */
+ /* 0 */ "aaaa"
+ /* 1 */ "aaaa"
+ /* 2 */ "aaaa"
+ /* 3 */ "aaaa"
+
+ // Level 1
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 2
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 3
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 4
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 5
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 6
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 7
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bccb"
+ /* 2 */ "bccb"
+ /* 3 */ "bbbb"
+
+ // Level 8
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "b..b"
+ /* 2 */ "b..b"
+ /* 3 */ "bbbb"
+
+ // Level 9
+ /* z\x* 0123 */
+ /* 0 */ "d..d"
+ /* 1 */ "...."
+ /* 2 */ "...."
+ /* 3 */ "d..d"
+
+ // Level 10
+ /* z\x* 0123 */
+ /* 0 */ "d..d"
+ /* 1 */ "...."
+ /* 2 */ "...."
+ /* 3 */ "d..d"
+
+ // Level 11
+ /* z\x* 0123 */
+ /* 0 */ "d..d"
+ /* 1 */ "...."
+ /* 2 */ "...."
+ /* 3 */ "d..d"
+
+ // Level 12
+ /* z\x* 0123 */
+ /* 0 */ "bbbb"
+ /* 1 */ "bbbb"
+ /* 2 */ "bbbb"
+ /* 3 */ "bbbb",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Well
+};
+
+
+
+
+
+// The prefab counts:
+
+const size_t g_SandVillagePrefabsCount = ARRAYCOUNT(g_SandVillagePrefabs);
+
+const size_t g_SandVillageStartingPrefabsCount = ARRAYCOUNT(g_SandVillageStartingPrefabs);
+
diff --git a/src/Generating/Prefabs/SandVillagePrefabs.h b/src/Generating/Prefabs/SandVillagePrefabs.h
new file mode 100644
index 000000000..7b00db56f
--- /dev/null
+++ b/src/Generating/Prefabs/SandVillagePrefabs.h
@@ -0,0 +1,15 @@
+
+// SandVillagePrefabs.h
+
+// Declares the prefabs in the group SandVillage
+
+#include "../Prefab.h"
+
+
+
+
+
+extern const cPrefab::sDef g_SandVillagePrefabs[];
+extern const cPrefab::sDef g_SandVillageStartingPrefabs[];
+extern const size_t g_SandVillagePrefabsCount;
+extern const size_t g_SandVillageStartingPrefabsCount;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
new file mode 100644
index 000000000..fb6191df2
--- /dev/null
+++ b/src/Generating/VillageGen.cpp
@@ -0,0 +1,116 @@
+
+// VillageGen.cpp
+
+// Implements the cVillageGen class representing the village generator
+
+#include "Globals.h"
+#include "VillageGen.h"
+#include "Prefabs/PlainsVillagePrefabs.h"
+#include "Prefabs/SandVillagePrefabs.h"
+
+
+
+
+
+class cVillageGen::cVillage :
+ public cGridStructGen::cStructure
+{
+ typedef cGridStructGen::cStructure super;
+
+public:
+ cVillage(int a_Seed, int a_OriginX, int a_OriginZ, cPrefabPiecePool & a_Prefabs) :
+ super(a_OriginX, a_OriginZ),
+ m_Seed(a_Seed),
+ m_Prefabs(a_Prefabs)
+ {
+ }
+
+protected:
+ /** Seed for the random functions */
+ int m_Seed;
+
+ /** Prefabs to use for buildings */
+ cPrefabPiecePool & m_Prefabs;
+
+ // cGrdStructGen::cStructure overrides:
+ virtual void DrawIntoChunk(cChunkDesc & a_Chunk) override
+ {
+ // TODO
+ }
+} ;
+
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// cVillageGen:
+
+cPrefabPiecePool cVillageGen::m_SandVillage (g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
+cPrefabPiecePool cVillageGen::m_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
+
+
+
+
+
+cVillageGen::cVillageGen(int a_Seed, int a_GridSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
+ super(a_Seed, a_GridSize, a_GridSize, 128, 128, 100),
+ m_BiomeGen(a_BiomeGen),
+ m_HeightGen(a_HeightGen)
+{
+}
+
+
+
+
+
+cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_OriginZ)
+{
+ // Generate the biomes for the chunk surrounding the origin:
+ int ChunkX, ChunkZ;
+ cChunkDef::BlockToChunk(a_OriginX, a_OriginZ, ChunkX, ChunkZ);
+ cChunkDef::BiomeMap Biomes;
+ m_BiomeGen.GenBiomes(ChunkX, ChunkZ, Biomes);
+
+ // Check if all the biomes are village-friendly:
+ // If just one is not, no village is created, because it's likely that an unfriendly biome is too close
+ cPrefabPiecePool * VillagePrefabs = NULL;
+ for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
+ {
+ switch (Biomes[i])
+ {
+ case biDesert:
+ case biDesertM:
+ {
+ // These biomes allow sand villages
+ VillagePrefabs = &m_SandVillage;
+ break;
+ }
+ case biPlains:
+ case biSavanna:
+ case biSavannaM:
+ case biSunflowerPlains:
+ {
+ // These biomes allow plains-style villages
+ VillagePrefabs = &m_PlainsVillage;
+ break;
+ }
+ default:
+ {
+ // Village-unfriendly biome, bail out with zero structure:
+ return cStructurePtr();
+ }
+ } // switch (Biomes[i])
+ } // for i - Biomes[]
+
+ // Create a village based on the chosen prefabs:
+ if (VillagePrefabs == NULL)
+ {
+ return cStructurePtr();
+ }
+ return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, *VillagePrefabs));
+}
+
+
+
+
diff --git a/src/Generating/VillageGen.h b/src/Generating/VillageGen.h
new file mode 100644
index 000000000..d3cc8ef9c
--- /dev/null
+++ b/src/Generating/VillageGen.h
@@ -0,0 +1,48 @@
+
+// VillageGen.h
+
+// Declares the cVillageGen class representing the village generator
+
+
+
+
+
+#pragma once
+
+#include "GridStructGen.h"
+#include "PrefabPiecePool.h"
+
+
+
+
+
+class cVillageGen :
+ public cGridStructGen
+{
+ typedef cGridStructGen super;
+public:
+ cVillageGen(int a_Seed, int a_GridSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
+
+protected:
+ class cVillage; // fwd: VillageGen.cpp
+
+ /** The prefabs for the sand village. We're not exactly using the cPiecePool functionality, only the containment. */
+ static cPrefabPiecePool m_SandVillage;
+
+ /** The prefabs for the plains village. We're not exactly using the cPiecePool functionality, only the containment. */
+ static cPrefabPiecePool m_PlainsVillage;
+
+ /** The underlying biome generator that defines whether the village is created or not */
+ cBiomeGen & m_BiomeGen;
+
+ /** The underlying height generator, used to position the prefabs crossing chunk borders */
+ cTerrainHeightGen & m_HeightGen;
+
+
+ // cGridStructGen overrides:
+ virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override;
+} ;
+
+
+
+
--
cgit v1.2.3
From 9c8e8ef7aece2f881ef97c387600c8a751579b20 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Mon, 12 May 2014 22:43:59 +0200
Subject: VillageGen: Added well placement and the general algorithm
description.
---
src/Generating/Prefab.h | 3 +
src/Generating/VillageGen.cpp | 147 ++++++++++++++++++++++++++++++++++++++++--
src/Generating/VillageGen.h | 8 ++-
3 files changed, 152 insertions(+), 6 deletions(-)
diff --git a/src/Generating/Prefab.h b/src/Generating/Prefab.h
index 37db2ff16..472584c3a 100644
--- a/src/Generating/Prefab.h
+++ b/src/Generating/Prefab.h
@@ -95,6 +95,9 @@ public:
/** Returns the weight (chance) of this prefab generating as the next piece after the specified placed piece.
PiecePool implementations can use this for their GetPieceWeight() implementations. */
int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector) const;
+
+ /** Returns the unmodified DefaultWeight property for the piece. */
+ int GetDefaultWeight(void) const { return m_DefaultWeight; }
protected:
/** Packs complete definition of a single block, for per-letter assignment. */
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index fb6191df2..3d89d7aa2 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -12,30 +12,167 @@
+/*
+How village generating works:
+By descending from a cGridStructGen, a semi-random grid is generated. A village may be generated for each of
+the grid's cells. Each cell checks the biomes in an entire chunk around it, only generating a village if all
+biomes are village-friendly. If yes, the entire village structure is built for that cell. If not, the cell
+is left village-less.
+
+A village is generated starting by its well. The well is placed in the grid's origin point. Then a set of
+random lengths roads is generated - 4 roads going from the well, then at the end of each road another set of
+roads, crossing them perpendicular, then at the end of those another set, up to a set maximum branching
+depth. The roads are placed in a T or L shape, with the old road being the center stem of the T. Roads avoid
+crossing each other and going further away from the well than the maximum block size of the village.
+Finally, houses are places along the roads, avoiding collisions with already-existing items.
+
+When the village is about to be drawn into a chunk, it queries the heights for each item intersecting the
+chunk. The prefabs are shifted so that their pivot points lie on the surface, and the roads are drawn
+directly by turning the surface blocks into gravel / sandstone.
+*/
+
class cVillageGen::cVillage :
public cGridStructGen::cStructure
{
typedef cGridStructGen::cStructure super;
public:
- cVillage(int a_Seed, int a_OriginX, int a_OriginZ, cPrefabPiecePool & a_Prefabs) :
+ cVillage(
+ int a_Seed,
+ int a_OriginX, int a_OriginZ,
+ int a_MaxRoadDepth,
+ int a_MaxSize,
+ cPrefabPiecePool & a_Prefabs,
+ cTerrainHeightGen & a_HeightGen
+ ) :
super(a_OriginX, a_OriginZ),
m_Seed(a_Seed),
- m_Prefabs(a_Prefabs)
+ 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),
+ m_Prefabs(a_Prefabs),
+ m_HeightGen(a_HeightGen)
{
+ PlaceWell();
+ BuildRoads(a_MaxRoadDepth);
+ PlaceHouses();
}
protected:
+ class cItem
+ {
+ public:
+ /* The position of the item, X/Z-wise: */
+ int m_MinX, m_MaxX, m_MinZ, m_MaxZ;
+
+ /** The prefab to use. If NULL, this is a road. */
+ cPrefab * m_Prefab;
+
+ /** Number of rotations that should be applied to the prefab. */
+ int m_NumRotations;
+
+ /* The bottom of the prefab. Only valid if the item is a prefab, not valid for roads. */
+ int m_BaseY;
+
+ /** Creates a new item with the specified parameters.
+ m_BaseY is set to -1 and will be adjusted later on when drawing. */
+ cItem(int a_MinX, int a_MaxX, int a_MinZ, int a_MaxZ, cPrefab * a_Prefab, int a_NumRotations) :
+ m_MinX(a_MinX),
+ m_MaxX(a_MaxX),
+ m_MinZ(a_MinZ),
+ m_MaxZ(a_MaxZ),
+ m_Prefab(a_Prefab),
+ m_NumRotations(a_NumRotations),
+ m_BaseY(-1)
+ {
+ }
+ } ;
+ typedef SharedPtr cItemPtr;
+ typedef std::vector cItemPtrs;
+
+
/** 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 village (radius from the origin) */
+ int m_MaxSize;
+
+ /** Borders of the vilalge - no item may reach out of this cuboid. */
+ cCuboid m_Borders;
+
/** Prefabs to use for buildings */
cPrefabPiecePool & m_Prefabs;
+ /** The underlying height generator, used for placing the structures on top of the terrain. */
+ cTerrainHeightGen & m_HeightGen;
+
+ /** The items that are generated in the village (houses, roads). */
+ cItemPtrs m_Items;
+
+
+ /** Places the well at the center of the village */
+ void PlaceWell(void)
+ {
+ // Pick a prefab from the starting pieces:
+ cPieces StartingPieces = ((cPiecePool &)m_Prefabs).GetStartingPieces();
+ ASSERT(!StartingPieces.empty());
+ int TotalWeight = 0;
+ for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
+ {
+ TotalWeight += ((const cPrefab *)(*itr))->GetDefaultWeight();
+ }
+ ASSERT(TotalWeight > 0);
+ int rnd = (m_Noise.IntNoise2DInt(m_OriginX, m_OriginZ) / 7) % TotalWeight;
+ cPiece * WellPiece = StartingPieces[0];
+ for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
+ {
+ rnd -= ((const cPrefab *)(*itr))->GetDefaultWeight();
+ if (rnd <= 0)
+ {
+ WellPiece = *itr;
+ break;
+ }
+ }
+ ASSERT(WellPiece != NULL);
+
+ // Pick a rotation:
+ // TODO
+ int NumRotations = 0;
+ Vector3i Size = WellPiece->GetSize();
+
+ // Put the well in the placed items array:
+ m_Items.push_back(cItemPtr(new cItem(m_OriginX, m_OriginX + Size.x, m_OriginZ, m_OriginZ + Size.z, (cPrefab *)WellPiece, NumRotations)));
+ }
+
+
+ /** Places the roads going from the well outwards. */
+ void BuildRoads(int a_MaxRoadDepth)
+ {
+ /*
+ ASSERT(m_Items.size() == 1);
+ const cItem & Well = *m_Items[0];
+ */
+ // TODO
+ }
+
+
+ /** Places houses along the roads. */
+ void PlaceHouses(void)
+ {
+ // TODO
+ }
+
+
// cGrdStructGen::cStructure overrides:
virtual void DrawIntoChunk(cChunkDesc & a_Chunk) override
{
// TODO
+ // Iterate over all items
+ // Each intersecting prefab is placed on ground (if not already placed), then drawn
+ // Each intersecting road is drawn by replacing top soil blocks with gravel / sandstone blocks
}
} ;
@@ -53,8 +190,8 @@ cPrefabPiecePool cVillageGen::m_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVi
-cVillageGen::cVillageGen(int a_Seed, int a_GridSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
- super(a_Seed, a_GridSize, a_GridSize, 128, 128, 100),
+cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxRoadDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
+ super(a_Seed, a_GridSize, a_GridSize, a_MaxSize, a_MaxSize, 100),
m_BiomeGen(a_BiomeGen),
m_HeightGen(a_HeightGen)
{
@@ -108,7 +245,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
{
return cStructurePtr();
}
- return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, *VillagePrefabs));
+ return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxRoadDepth, m_MaxSize, *VillagePrefabs, m_HeightGen));
}
diff --git a/src/Generating/VillageGen.h b/src/Generating/VillageGen.h
index d3cc8ef9c..acbd76881 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, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
+ cVillageGen(int a_Seed, int a_GridSize, int a_MaxRoadDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
protected:
class cVillage; // fwd: VillageGen.cpp
@@ -31,6 +31,12 @@ protected:
/** The prefabs for the plains village. We're not exactly using the cPiecePool functionality, only the containment. */
static cPrefabPiecePool m_PlainsVillage;
+
+ /** Maximum number of roads generated one from another (tree depth). */
+ int m_MaxRoadDepth;
+
+ /** Maximum size, in X/Z blocks, of the village (radius from the origin) */
+ int m_MaxSize;
/** The underlying biome generator that defines whether the village is created or not */
cBiomeGen & m_BiomeGen;
--
cgit v1.2.3
From 3660ce68343ad2e867e49d1650f61fc0eb85ac23 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 15 May 2014 00:12:01 +0200
Subject: cPrefab can be constructed in code.
---
src/Generating/Prefab.cpp | 36 ++++++++++++++++++++++++++++++++++++
src/Generating/Prefab.h | 15 +++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/src/Generating/Prefab.cpp b/src/Generating/Prefab.cpp
index 0f20603be..9aef7a94b 100644
--- a/src/Generating/Prefab.cpp
+++ b/src/Generating/Prefab.cpp
@@ -136,6 +136,33 @@ cPrefab::cPrefab(const cPrefab::sDef & a_Def) :
ParseConnectors(a_Def.m_Connectors);
ParseDepthWeight(a_Def.m_DepthWeight);
+ AddRotatedBlockAreas();
+}
+
+
+
+
+
+cPrefab::cPrefab(const cBlockArea & a_Image, int a_AllowedRotations) :
+ m_Size(a_Image.GetSize()),
+ m_AllowedRotations(a_AllowedRotations),
+ m_MergeStrategy(cBlockArea::msOverwrite),
+ m_ShouldExtendFloor(false),
+ m_DefaultWeight(1),
+ m_AddWeightIfSame(0)
+{
+ m_HitBox.p1.Set(0, 0, 0);
+ m_HitBox.p2.Set(m_Size.x - 1, m_Size.y - 1, m_Size.z - 1);
+ m_BlockArea[0].CopyFrom(a_Image);
+ AddRotatedBlockAreas();
+}
+
+
+
+
+
+void cPrefab::AddRotatedBlockAreas(void)
+{
// 1 CCW rotation:
if ((m_AllowedRotations & 0x01) != 0)
{
@@ -257,6 +284,15 @@ int cPrefab::GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cC
+void cPrefab::AddConnector(int a_RelX, int a_RelY, int a_RelZ, eBlockFace a_Direction, int a_Type)
+{
+ m_Connectors.push_back(cConnector(a_RelX, a_RelY, a_RelZ, a_Type, a_Direction));
+}
+
+
+
+
+
void cPrefab::ParseCharMap(CharMap & a_CharMapOut, const char * a_CharMapDef)
{
ASSERT(a_CharMapDef != NULL);
diff --git a/src/Generating/Prefab.h b/src/Generating/Prefab.h
index 472584c3a..c08413e87 100644
--- a/src/Generating/Prefab.h
+++ b/src/Generating/Prefab.h
@@ -84,8 +84,13 @@ public:
int m_AddWeightIfSame;
};
+
+ /** Creates a prefab from the provided definition. */
cPrefab(const sDef & a_Def);
+ /** Creates a prefab based on the given BlockArea and allowed rotations. */
+ cPrefab(const cBlockArea & a_Image, int a_AllowedRotations);
+
/** Draws the prefab into the specified chunk, according to the placement stored in the PlacedPiece. */
void Draw(cChunkDesc & a_Dest, const cPlacedPiece * a_Placement) const;
@@ -98,6 +103,12 @@ public:
/** Returns the unmodified DefaultWeight property for the piece. */
int GetDefaultWeight(void) const { return m_DefaultWeight; }
+
+ /** Sets the AddWeightIfSame member, that is used to modify the weight when the previous piece is the same prefab */
+ void SetAddWeightIfSame(int a_AddWeightIfSame) { m_AddWeightIfSame = a_AddWeightIfSame; }
+
+ /** Adds the specified connector to the list of connectors this piece supports. */
+ void AddConnector(int a_RelX, int a_RelY, int a_RelZ, eBlockFace a_Direction, int a_Type);
protected:
/** Packs complete definition of a single block, for per-letter assignment. */
@@ -160,6 +171,10 @@ protected:
virtual cCuboid GetHitBox(void) const override;
virtual bool CanRotateCCW(int a_NumRotations) const override;
+ /** Based on the m_AllowedRotations, adds rotated cBlockAreas to the m_BlockArea array.
+ To be called only from this class's constructor! */
+ void AddRotatedBlockAreas(void);
+
/** Parses the CharMap in the definition into a CharMap binary data used for translating the definition into BlockArea. */
void ParseCharMap(CharMap & a_CharMapOut, const char * a_CharMapDef);
--
cgit v1.2.3
From f5fdbdaf29738f51fdb8a4a0e5aa78631c6540cf Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 15 May 2014 00:14:06 +0200
Subject: VillageGen rewritten using BFSPieceGenerator.
Piece composition is not good yet, the buildings aren't height-adjusted and the road pieces will need special processing. This is mainly for adjusting the per-piece params.
---
src/Generating/ComposableGenerator.cpp | 9 +
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 416 ++++++++++++------------
src/Generating/Prefabs/SandVillagePrefabs.cpp | 185 +++++------
src/Generating/VillageGen.cpp | 196 ++++++-----
src/Generating/VillageGen.h | 12 +-
5 files changed, 406 insertions(+), 412 deletions(-)
diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp
index 2e886336f..1bb836684 100644
--- a/src/Generating/ComposableGenerator.cpp
+++ b/src/Generating/ComposableGenerator.cpp
@@ -25,6 +25,7 @@
#include "Noise3DGenerator.h"
#include "POCPieceGenerator.h"
#include "Ravines.h"
+#include "VillageGen.h"
@@ -32,6 +33,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cTerrainCompositionGen:
+
cTerrainCompositionGen * cTerrainCompositionGen::CreateCompositionGen(cIniFile & a_IniFile, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen, int a_Seed)
{
AString CompoGenName = a_IniFile.GetValueSet("Generator", "CompositionGen", "");
@@ -404,6 +406,13 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile)
{
m_FinishGens.push_back(new cStructGenTrees(Seed, m_BiomeGen, m_HeightGen, m_CompositionGen));
}
+ else if (NoCaseCompare(*itr, "Villages") == 0)
+ {
+ int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 256);
+ int MaxDepth = a_IniFile.GetValueSetI("Generator", "VillageMaxDepth", 7);
+ int MaxSize = a_IniFile.GetValueSetI("Generator", "VillageMaxSize", 128);
+ m_FinishGens.push_back(new cVillageGen(Seed, GridSize, MaxDepth, MaxSize, *m_BiomeGen, *m_HeightGen));
+ }
else if (NoCaseCompare(*itr, "WaterLakes") == 0)
{
int Probability = a_IniFile.GetValueSetI("Generator", "WaterLakesProbability", 25);
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index f59e22fb3..508f0d3b6 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -174,7 +174,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ ".......mmmmm",
// Connectors:
- "",
+ "-1: 7, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -216,7 +216,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h: 64:12\n" /* wooddoorblock */
"i:102: 0\n" /* glasspane */
"j: 53: 2\n" /* woodstairs */
@@ -288,7 +288,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".......",
// Connectors:
- "",
+ "-1: 3, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -330,7 +330,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@@ -434,7 +434,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "...........",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -561,7 +561,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "..lgp..",
// Connectors:
- "",
+ "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -725,7 +725,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "...............",
// Connectors:
- "",
+ "-1: 7, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1016,7 +1016,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".......",
// Connectors:
- "",
+ "-1: 3, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1087,7 +1087,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "dmmmmmdmdmmmmmd",
// Connectors:
- "",
+ "-1: 7, 0, 8: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1134,7 +1134,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"i: 53: 1\n" /* woodstairs */
"j: 85: 0\n" /* fence */
"k: 53: 0\n" /* woodstairs */
- "l: 64: 4\n" /* wooddoorblock */
+ "l: 64: 6\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */
"n: 64: 0\n" /* wooddoorblock */
"o:102: 0\n" /* glasspane */
@@ -1238,7 +1238,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ "mmkbimmmmm",
// Connectors:
- "",
+ "-1: 1, 0, 5: 4\n" /* Type -1, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1281,22 +1281,23 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"e: 5: 0\n" /* wood */
"f: 67: 3\n" /* stairs */
"g: 17: 0\n" /* tree */
- "h: 64: 5\n" /* wooddoorblock */
- "i:102: 0\n" /* glasspane */
- "j: 64:12\n" /* wooddoorblock */
- "k: 53: 2\n" /* woodstairs */
- "l: 53: 1\n" /* woodstairs */
+ "h: 64: 7\n" /* wooddoorblock */
+ "i: 64: 5\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 53: 6\n" /* woodstairs */
- "p: 53: 3\n" /* woodstairs */
- "q: 53: 0\n" /* woodstairs */
- "r: 53: 5\n" /* woodstairs */
- "s: 53: 4\n" /* woodstairs */
- "t: 50: 3\n" /* torch */
- "u: 50: 2\n" /* torch */
- "v: 50: 4\n" /* torch */
- "w: 50: 1\n" /* torch */,
+ "n: 53: 1\n" /* woodstairs */
+ "o: 53: 7\n" /* woodstairs */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 53: 3\n" /* woodstairs */
+ "r: 53: 0\n" /* woodstairs */
+ "s: 53: 5\n" /* woodstairs */
+ "t: 53: 4\n" /* woodstairs */
+ "u: 50: 3\n" /* torch */
+ "v: 50: 2\n" /* torch */
+ "w: 50: 4\n" /* torch */
+ "x: 50: 1\n" /* torch */,
// Block data:
// Level 0
@@ -1329,7 +1330,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ ".e............e."
/* 5 */ ".e............e."
/* 6 */ ".e............e."
- /* 7 */ ".geeeeheg.....e."
+ /* 7 */ ".geeeeieg.....e."
/* 8 */ "mmmmmm.me.....e."
/* 9 */ "mmmmmmmme.....e."
/* 10 */ "mmmmmmmme.....e."
@@ -1343,81 +1344,81 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
- /* 1 */ ".geiieiigjgiieg."
- /* 2 */ ".i............e."
- /* 3 */ ".i............i."
- /* 4 */ ".i............i."
- /* 5 */ ".i............e."
- /* 6 */ ".i............i."
- /* 7 */ ".geiiejeg.....i."
+ /* 1 */ ".gejjejjgkgjjeg."
+ /* 2 */ ".j............e."
+ /* 3 */ ".j............j."
+ /* 4 */ ".j............j."
+ /* 5 */ ".j............e."
+ /* 6 */ ".j............j."
+ /* 7 */ ".gejjekeg.....j."
/* 8 */ "mmmmmm.me.....e."
- /* 9 */ "mmmmmmmmi.....i."
- /* 10 */ "mmmmmmmmi.....i."
+ /* 9 */ "mmmmmmmmj.....j."
+ /* 10 */ "mmmmmmmmj.....j."
/* 11 */ "mmmmmmmme.....e."
- /* 12 */ "mmmmmmmmi.....i."
- /* 13 */ "mmmmmmmmi.....i."
- /* 14 */ "mmmmmmmmgiiiiig."
+ /* 12 */ "mmmmmmmmj.....j."
+ /* 13 */ "mmmmmmmmj.....j."
+ /* 14 */ "mmmmmmmmgjjjjjg."
/* 15 */ "mmmmmmmm........"
// Level 3
/* z\x* 111111 */
/* * 0123456789012345 */
- /* 0 */ "kkkkkkkkkkkkkkkl"
- /* 1 */ "ngeeeeeegegeeegl"
- /* 2 */ ".e............el"
- /* 3 */ ".e............el"
- /* 4 */ ".e............el"
- /* 5 */ ".e............el"
- /* 6 */ ".e............el"
- /* 7 */ "ogeeeeeeg.....el"
- /* 8 */ "pppppppqe.....el"
- /* 9 */ "mmmmmmmqe.....el"
- /* 10 */ "mmmmmmmqe.....el"
- /* 11 */ "mmmmmmmqe.....el"
- /* 12 */ "mmmmmmmqe.....el"
- /* 13 */ "mmmmmmmqe.....el"
- /* 14 */ "mmmmmmmqgeeeeegl"
- /* 15 */ "mmmmmmmqr.....sl"
+ /* 0 */ "llllllllllllllln"
+ /* 1 */ "ogeeeeeegegeeegn"
+ /* 2 */ ".e............en"
+ /* 3 */ ".e............en"
+ /* 4 */ ".e............en"
+ /* 5 */ ".e............en"
+ /* 6 */ ".e............en"
+ /* 7 */ "pgeeeeeeg.....en"
+ /* 8 */ "qqqqqqqre.....en"
+ /* 9 */ "mmmmmmmre.....en"
+ /* 10 */ "mmmmmmmre.....en"
+ /* 11 */ "mmmmmmmre.....en"
+ /* 12 */ "mmmmmmmre.....en"
+ /* 13 */ "mmmmmmmre.....en"
+ /* 14 */ "mmmmmmmrgeeeeegn"
+ /* 15 */ "mmmmmmmrs.....tn"
// Level 4
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
- /* 1 */ "kkkkkkkkkkkkkkk."
- /* 2 */ "neeeeeeeeeeeeel."
- /* 3 */ ".e.........t.el."
- /* 4 */ ".e..........uel."
- /* 5 */ ".e......v....el."
- /* 6 */ "oeeeeeeeee...el."
- /* 7 */ "ppppppppqew..el."
- /* 8 */ "mmmmmmmmqe...el."
- /* 9 */ "mmmmmmmmqe...el."
- /* 10 */ "mmmmmmmmqe...el."
- /* 11 */ "mmmmmmmmqe...el."
- /* 12 */ "mmmmmmmmqe...el."
- /* 13 */ "mmmmmmmmqe...el."
- /* 14 */ "mmmmmmmmqeeeeel."
- /* 15 */ "mmmmmmmmqr...sl."
+ /* 1 */ "lllllllllllllll."
+ /* 2 */ "oeeeeeeeeeeeeen."
+ /* 3 */ ".e.........u.en."
+ /* 4 */ ".e..........ven."
+ /* 5 */ ".e......w....en."
+ /* 6 */ "peeeeeeeee...en."
+ /* 7 */ "qqqqqqqqrex..en."
+ /* 8 */ "mmmmmmmmre...en."
+ /* 9 */ "mmmmmmmmre...en."
+ /* 10 */ "mmmmmmmmre...en."
+ /* 11 */ "mmmmmmmmre...en."
+ /* 12 */ "mmmmmmmmre...en."
+ /* 13 */ "mmmmmmmmre...en."
+ /* 14 */ "mmmmmmmmreeeeen."
+ /* 15 */ "mmmmmmmmrs...tn."
// Level 5
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
/* 1 */ "................"
- /* 2 */ "kkkkkkkkkkkkkl.."
- /* 3 */ "neeeeeeeeeeeel.."
- /* 4 */ ".ew.........el.."
- /* 5 */ "oeeeeeeeeee.el.."
- /* 6 */ "pppppppppqe.el.."
- /* 7 */ ".........qe.el.."
- /* 8 */ "mmmmmmmm.qe.el.."
- /* 9 */ "mmmmmmmm.qe.el.."
- /* 10 */ "mmmmmmmm.qe.el.."
- /* 11 */ "mmmmmmmm.qe.el.."
- /* 12 */ "mmmmmmmm.qe.el.."
- /* 13 */ "mmmmmmmm.qevel.."
- /* 14 */ "mmmmmmmm.qeeel.."
- /* 15 */ "mmmmmmmm.qr.sl.."
+ /* 2 */ "llllllllllllln.."
+ /* 3 */ "oeeeeeeeeeeeen.."
+ /* 4 */ ".ex.........en.."
+ /* 5 */ "peeeeeeeeee.en.."
+ /* 6 */ "qqqqqqqqqre.en.."
+ /* 7 */ ".........re.en.."
+ /* 8 */ "mmmmmmmm.re.en.."
+ /* 9 */ "mmmmmmmm.re.en.."
+ /* 10 */ "mmmmmmmm.re.en.."
+ /* 11 */ "mmmmmmmm.re.en.."
+ /* 12 */ "mmmmmmmm.re.en.."
+ /* 13 */ "mmmmmmmm.rewen.."
+ /* 14 */ "mmmmmmmm.reeen.."
+ /* 15 */ "mmmmmmmm.rs.tn.."
// Level 6
/* z\x* 111111 */
@@ -1425,22 +1426,22 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "................"
/* 1 */ "................"
/* 2 */ "................"
- /* 3 */ "kkkkkkkkkkkkk..."
- /* 4 */ "eeeeeeeeeeeel..."
- /* 5 */ "ppppppppppqel..."
- /* 6 */ "mmmmmmmmmmqel..."
- /* 7 */ "mmmmmmmmmmqel..."
- /* 8 */ "mmmmmmmmmmqel..."
- /* 9 */ "mmmmmmmmmmqel..."
- /* 10 */ "mmmmmmmmmmqel..."
- /* 11 */ "mmmmmmmmmmqel..."
- /* 12 */ "mmmmmmmmmmqel..."
- /* 13 */ "mmmmmmmmmmqel..."
- /* 14 */ "mmmmmmmmmmqel..."
- /* 15 */ "mmmmmmmmmmqel...",
+ /* 3 */ "lllllllllllll..."
+ /* 4 */ "eeeeeeeeeeeen..."
+ /* 5 */ "qqqqqqqqqqren..."
+ /* 6 */ "mmmmmmmmmmren..."
+ /* 7 */ "mmmmmmmmmmren..."
+ /* 8 */ "mmmmmmmmmmren..."
+ /* 9 */ "mmmmmmmmmmren..."
+ /* 10 */ "mmmmmmmmmmren..."
+ /* 11 */ "mmmmmmmmmmren..."
+ /* 12 */ "mmmmmmmmmmren..."
+ /* 13 */ "mmmmmmmmmmren..."
+ /* 14 */ "mmmmmmmmmmren..."
+ /* 15 */ "mmmmmmmmmmren...",
// Connectors:
- "",
+ "-1: 9, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1506,7 +1507,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "..........",
// Connectors:
- "",
+ "-1: 9, 0, 3: 5\n" /* Type -1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1548,7 +1549,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 67: 2\n" /* stairs */
"e: 67: 1\n" /* stairs */
"f: 4: 0\n" /* cobblestone */
- "g: 64: 1\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h: 53: 3\n" /* woodstairs */
"i: 53: 1\n" /* woodstairs */
"j: 85: 0\n" /* fence */
@@ -1556,7 +1557,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
"n:102: 0\n" /* glasspane */
- "o: 64: 8\n" /* wooddoorblock */
+ "o: 64:12\n" /* wooddoorblock */
"p: 50: 3\n" /* torch */
"q: 72: 0\n" /* woodplate */
"r: 50: 4\n" /* torch */
@@ -1646,7 +1647,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "............",
// Connectors:
- "",
+ "-1: 8, 1, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1689,19 +1690,18 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"e: 67: 3\n" /* stairs */
"f: 17: 0\n" /* tree */
"g: 5: 0\n" /* wood */
- "h: 64: 5\n" /* wooddoorblock */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "h: 64: 7\n" /* wooddoorblock */
+ "i:102: 0\n" /* glasspane */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 53: 2\n" /* woodstairs */
+ "l: 53: 7\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 17: 4\n" /* tree */
- "p: 17: 8\n" /* tree */
- "q: 50: 3\n" /* torch */
- "r: 50: 4\n" /* torch */
- "s: 53: 6\n" /* woodstairs */
- "t: 53: 3\n" /* woodstairs */,
+ "n: 17: 4\n" /* tree */
+ "o: 17: 8\n" /* tree */
+ "p: 50: 3\n" /* torch */
+ "q: 50: 4\n" /* torch */
+ "r: 53: 6\n" /* woodstairs */
+ "s: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
@@ -1727,46 +1727,46 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ ".f.......f."
/* 5 */ ".g.......g."
/* 6 */ ".g.......g."
- /* 7 */ ".fggfifggf."
+ /* 7 */ ".fggfhfggf."
/* 8 */ "..........."
// Level 2
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".fjjfkfjjf."
- /* 2 */ ".j.......j."
- /* 3 */ ".j.......j."
+ /* 1 */ ".fiifjfiif."
+ /* 2 */ ".i.......i."
+ /* 3 */ ".i.......i."
/* 4 */ ".f.......f."
- /* 5 */ ".j.......j."
- /* 6 */ ".j.......j."
- /* 7 */ ".fjjfkfjjf."
+ /* 5 */ ".i.......i."
+ /* 6 */ ".i.......i."
+ /* 7 */ ".fiifjfiif."
/* 8 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "lllllllllll"
- /* 1 */ "nfooooooofn"
- /* 2 */ ".p..q.q..p."
- /* 3 */ ".p.......p."
- /* 4 */ ".p.......p."
- /* 5 */ ".p.......p."
- /* 6 */ ".p..r.r..p."
- /* 7 */ "sfooooooofs"
- /* 8 */ "ttttttttttt"
+ /* 0 */ "kkkkkkkkkkk"
+ /* 1 */ "lfnnnnnnnfl"
+ /* 2 */ ".o..p.p..o."
+ /* 3 */ ".o.......o."
+ /* 4 */ ".o.......o."
+ /* 5 */ ".o.......o."
+ /* 6 */ ".o..q.q..o."
+ /* 7 */ "rfnnnnnnnfr"
+ /* 8 */ "sssssssssss"
// Level 4
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "lllllllllll"
- /* 2 */ "ngggggggggn"
+ /* 1 */ "kkkkkkkkkkk"
+ /* 2 */ "lgggggggggl"
/* 3 */ ".g.......g."
/* 4 */ ".g.......g."
/* 5 */ ".g.......g."
- /* 6 */ "sgggggggggs"
- /* 7 */ "ttttttttttt"
+ /* 6 */ "rgggggggggr"
+ /* 7 */ "sssssssssss"
/* 8 */ "..........."
// Level 5
@@ -1774,11 +1774,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "lllllllllll"
- /* 3 */ "ngggggggggn"
+ /* 2 */ "kkkkkkkkkkk"
+ /* 3 */ "lgggggggggl"
/* 4 */ ".g.......g."
- /* 5 */ "sgggggggggs"
- /* 6 */ "ttttttttttt"
+ /* 5 */ "rgggggggggr"
+ /* 6 */ "sssssssssss"
/* 7 */ "..........."
/* 8 */ "..........."
@@ -1788,15 +1788,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ "lllllllllll"
+ /* 3 */ "kkkkkkkkkkk"
/* 4 */ "ggggggggggg"
- /* 5 */ "ttttttttttt"
+ /* 5 */ "sssssssssss"
/* 6 */ "..........."
/* 7 */ "..........."
/* 8 */ "...........",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2025,7 +2025,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 15 */ "mmmmmmmmmmmmmmm",
// Connectors:
- "",
+ "-1: 7, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2069,7 +2069,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 4: 0\n" /* cobblestone */
"g: 17: 0\n" /* tree */
"h: 5: 0\n" /* wood */
- "i: 64: 5\n" /* wooddoorblock */
+ "i: 64: 7\n" /* wooddoorblock */
"j:102: 0\n" /* glasspane */
"k: 64:12\n" /* wooddoorblock */
"l: 53: 2\n" /* woodstairs */
@@ -2151,7 +2151,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".........",
// Connectors:
- "",
+ "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2193,7 +2193,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@@ -2271,7 +2271,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
- "",
+ "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2313,7 +2313,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@@ -2422,7 +2422,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ "mmmm..tfl..",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2464,7 +2464,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@@ -2571,7 +2571,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ "..kfl.....kfl..",
// Connectors:
- "",
+ "-1: 7, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2613,7 +2613,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
+ "g: 64: 7\n" /* wooddoorblock */
"h: 53: 3\n" /* woodstairs */
"i: 85: 0\n" /* fence */
"j: 53: 2\n" /* woodstairs */
@@ -2698,7 +2698,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2740,15 +2740,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
- "g: 64: 5\n" /* wooddoorblock */
- "h: 53: 3\n" /* woodstairs */
- "i: 85: 0\n" /* fence */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 1\n" /* woodstairs */
- "l: 53: 0\n" /* woodstairs */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h: 64: 5\n" /* wooddoorblock */
+ "i: 53: 3\n" /* woodstairs */
+ "j: 85: 0\n" /* fence */
+ "k: 53: 2\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n:102: 0\n" /* glasspane */
- "o: 64:13\n" /* wooddoorblock */
+ "n: 53: 0\n" /* woodstairs */
+ "o:102: 0\n" /* glasspane */
"p: 64:12\n" /* wooddoorblock */
"q: 50: 3\n" /* torch */
"r: 72: 0\n" /* woodplate */
@@ -2776,12 +2776,12 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ ".efffggfffe."
+ /* 1 */ ".efffghfffe."
/* 2 */ ".f........f."
- /* 3 */ ".fh......hf."
- /* 4 */ ".fi......if."
- /* 5 */ ".fj......jf."
- /* 6 */ ".f.kilkil.f."
+ /* 3 */ ".fi......if."
+ /* 4 */ ".fj......jf."
+ /* 5 */ ".fk......kf."
+ /* 6 */ ".f.ljnljn.f."
/* 7 */ ".effffffffe."
/* 8 */ "............"
@@ -2789,19 +2789,19 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ ".ennfopfnne."
- /* 2 */ ".n..q..q..n."
- /* 3 */ ".n........n."
+ /* 1 */ ".eoofppfooe."
+ /* 2 */ ".o..q..q..o."
+ /* 3 */ ".o........o."
/* 4 */ ".fr......rf."
- /* 5 */ ".n........n."
- /* 6 */ ".n..r..r..n."
- /* 7 */ ".ennfnnfnne."
+ /* 5 */ ".o........o."
+ /* 6 */ ".o..r..r..o."
+ /* 7 */ ".eoofoofooe."
/* 8 */ "............"
// Level 3
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "jjjjjjjjjjjj"
+ /* 0 */ "kkkkkkkkkkkk"
/* 1 */ "sffffffffffs"
/* 2 */ ".fttttttttf."
/* 3 */ ".f........f."
@@ -2809,19 +2809,19 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 5 */ ".f........f."
/* 6 */ ".fttttttttf."
/* 7 */ "wffffffffffw"
- /* 8 */ "hhhhhhhhhhhh"
+ /* 8 */ "iiiiiiiiiiii"
// Level 4
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ "jjjjjjjjjjjj"
+ /* 1 */ "kkkkkkkkkkkk"
/* 2 */ "sffffffffffs"
/* 3 */ ".fttttttttf."
/* 4 */ ".f........f."
/* 5 */ ".fttttttttf."
/* 6 */ "wffffffffffw"
- /* 7 */ "hhhhhhhhhhhh"
+ /* 7 */ "iiiiiiiiiiii"
/* 8 */ "............"
// Level 5
@@ -2829,11 +2829,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
- /* 2 */ "jjjjjjjjjjjj"
+ /* 2 */ "kkkkkkkkkkkk"
/* 3 */ "sffffffffffs"
/* 4 */ ".f........f."
/* 5 */ "wffffffffffw"
- /* 6 */ "hhhhhhhhhhhh"
+ /* 6 */ "iiiiiiiiiiii"
/* 7 */ "............"
/* 8 */ "............"
@@ -2843,15 +2843,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "............"
/* 1 */ "............"
/* 2 */ "............"
- /* 3 */ "jjjjjjjjjjjj"
+ /* 3 */ "kkkkkkkkkkkk"
/* 4 */ "ffffffffffff"
- /* 5 */ "hhhhhhhhhhhh"
+ /* 5 */ "iiiiiiiiiiii"
/* 6 */ "............"
/* 7 */ "............"
/* 8 */ "............",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2895,19 +2895,18 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 2: 0\n" /* grass */
"g: 17: 0\n" /* tree */
"h: 5: 0\n" /* wood */
- "i: 64: 5\n" /* wooddoorblock */
+ "i: 64: 7\n" /* wooddoorblock */
"j: 53: 3\n" /* woodstairs */
"k: 85: 0\n" /* fence */
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 64: 7\n" /* wooddoorblock */
- "o:102: 0\n" /* glasspane */
- "p: 64:12\n" /* wooddoorblock */
- "q: 72: 0\n" /* woodplate */
- "r: 53: 7\n" /* woodstairs */
- "s: 50: 1\n" /* torch */
- "t: 50: 2\n" /* torch */
- "u: 53: 6\n" /* woodstairs */,
+ "n:102: 0\n" /* glasspane */
+ "o: 64:12\n" /* wooddoorblock */
+ "p: 72: 0\n" /* woodplate */
+ "q: 53: 7\n" /* woodstairs */
+ "r: 50: 1\n" /* torch */
+ "s: 50: 2\n" /* torch */
+ "t: 53: 6\n" /* woodstairs */,
// Block data:
// Level 0
@@ -2937,7 +2936,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ ".h.e....lh."
/* 5 */ ".h.......h."
/* 6 */ ".h.......h."
- /* 7 */ ".ghhhnhhhg."
+ /* 7 */ ".ghhhihhhg."
/* 8 */ "..k.....k.."
/* 9 */ "mmk.....kmm"
/* 10 */ "mmk.....kmm"
@@ -2948,13 +2947,13 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".goohphoog."
- /* 2 */ ".o.......o."
- /* 3 */ ".o......qo."
+ /* 1 */ ".gnnhohnng."
+ /* 2 */ ".n.......n."
+ /* 3 */ ".n......pn."
/* 4 */ ".h.......h."
- /* 5 */ ".o.......o."
- /* 6 */ ".o.......o."
- /* 7 */ ".goohphoog."
+ /* 5 */ ".n.......n."
+ /* 6 */ ".n.......n."
+ /* 7 */ ".gnnhohnng."
/* 8 */ "..........."
/* 9 */ "mm.......mm"
/* 10 */ "mm.......mm"
@@ -2965,13 +2964,13 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "lllllllllll"
- /* 1 */ "rhhhhhhhhhr"
+ /* 1 */ "qhhhhhhhhhq"
/* 2 */ ".h.......h."
/* 3 */ ".h.......h."
- /* 4 */ ".hs.....th."
+ /* 4 */ ".hr.....sh."
/* 5 */ ".h.......h."
/* 6 */ ".h.......h."
- /* 7 */ "uhhhhhhhhhu"
+ /* 7 */ "thhhhhhhhht"
/* 8 */ "jjjjjjjjjjj"
/* 9 */ "mm.......mm"
/* 10 */ "mm.......mm"
@@ -2983,11 +2982,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "lllllllllll"
- /* 2 */ "rhhhhhhhhhr"
+ /* 2 */ "qhhhhhhhhhq"
/* 3 */ ".h.......h."
/* 4 */ ".h.......h."
/* 5 */ ".h.......h."
- /* 6 */ "uhhhhhhhhhu"
+ /* 6 */ "thhhhhhhhht"
/* 7 */ "jjjjjjjjjjj"
/* 8 */ "..........."
/* 9 */ "mm.......mm"
@@ -3001,9 +3000,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "lllllllllll"
- /* 3 */ "rhhhhhhhhhr"
+ /* 3 */ "qhhhhhhhhhq"
/* 4 */ ".h.......h."
- /* 5 */ "uhhhhhhhhhu"
+ /* 5 */ "thhhhhhhhht"
/* 6 */ "jjjjjjjjjjj"
/* 7 */ "..........."
/* 8 */ "..........."
@@ -3030,7 +3029,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ "mm.......mm",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3279,7 +3278,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 5: 0\n" /* wood */
"g: 54: 4\n" /* chest */
"h:154: 4\n" /* hopper */
- "i: 64: 6\n" /* wooddoorblock */
+ "i: 64: 4\n" /* wooddoorblock */
"j:102: 0\n" /* glasspane */
"k: 85: 0\n" /* fence */
"l: 64:12\n" /* wooddoorblock */
@@ -3551,7 +3550,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".........",
// Connectors:
- "",
+ "-1: 5, 0, 6: 5\n" /* Type -1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3692,7 +3691,10 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
/* 3 */ "bbbb",
// Connectors:
- "",
+ "1: 1, 9, 3: 3\n" /* Type 1, direction Z+ */
+ "1: 2, 9, 0: 2\n" /* Type 1, direction Z- */
+ "1: 0, 9, 1: 4\n" /* Type 1, direction X- */
+ "1: 3, 9, 2: 5\n" /* Type 1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
diff --git a/src/Generating/Prefabs/SandVillagePrefabs.cpp b/src/Generating/Prefabs/SandVillagePrefabs.cpp
index 23af0f0a6..51411dea2 100644
--- a/src/Generating/Prefabs/SandVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/SandVillagePrefabs.cpp
@@ -63,7 +63,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "d.....d.....d",
// Connectors:
- "",
+ "-1: 6, 0, 8: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -103,7 +103,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -183,7 +183,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -223,7 +223,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -326,7 +326,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "...........",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -366,7 +366,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -444,7 +444,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".............",
// Connectors:
- "",
+ "-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -484,7 +484,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -587,7 +587,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ ".............",
// Connectors:
- "",
+ "-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -627,7 +627,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -730,7 +730,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "...............",
// Connectors:
- "",
+ "-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -770,7 +770,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -873,7 +873,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "................",
// Connectors:
- "",
+ "-1: 9, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -913,7 +913,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -984,7 +984,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".......",
// Connectors:
- "",
+ "-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1024,7 +1024,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 5\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@@ -1096,7 +1096,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".........",
// Connectors:
- "",
+ "-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1136,9 +1136,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
- "e: 64: 1\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
- "g: 64: 8\n" /* wooddoorblock */
+ "g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
"i: 50: 3\n" /* torch */
"j: 50: 4\n" /* torch */
@@ -1232,7 +1232,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ ".........",
// Connectors:
- "",
+ "-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1273,17 +1273,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e:128: 3\n" /* sandstonestairs */
- "f: 64: 5\n" /* wooddoorblock */
- "g:102: 0\n" /* glasspane */
- "h: 64:12\n" /* wooddoorblock */
- "i:128: 7\n" /* sandstonestairs */
- "j: 50: 3\n" /* torch */
- "k: 50: 4\n" /* torch */
- "l:128: 6\n" /* sandstonestairs */
+ "f: 64: 7\n" /* wooddoorblock */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j:128: 7\n" /* sandstonestairs */
+ "k: 50: 3\n" /* torch */
+ "l: 50: 4\n" /* torch */
"m: 19: 0\n" /* sponge */
- "n:128: 5\n" /* sandstonestairs */
- "o:128: 4\n" /* sandstonestairs */
- "p: 50: 1\n" /* torch */,
+ "n:128: 6\n" /* sandstonestairs */
+ "o:128: 5\n" /* sandstonestairs */
+ "p:128: 4\n" /* sandstonestairs */
+ "q: 50: 1\n" /* torch */,
// Block data:
// Level 0
@@ -1310,7 +1311,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 2 */ ".d..........d."
/* 3 */ ".d..........d."
/* 4 */ ".d..........d."
- /* 5 */ ".ddddfddd...d."
+ /* 5 */ ".ddddgddd...d."
/* 6 */ "........d...d."
/* 7 */ "mmmmmmm.d...d."
/* 8 */ "mmmmmmm.d...d."
@@ -1322,49 +1323,49 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
- /* 1 */ ".dggdggdhdggd."
- /* 2 */ ".g..........g."
- /* 3 */ ".g..........g."
- /* 4 */ ".g..........d."
- /* 5 */ ".dggdhdgg...g."
- /* 6 */ "........g...g."
+ /* 1 */ ".dhhdhhdidhhd."
+ /* 2 */ ".h..........h."
+ /* 3 */ ".h..........h."
+ /* 4 */ ".h..........d."
+ /* 5 */ ".dhhdidhh...h."
+ /* 6 */ "........h...h."
/* 7 */ "mmmmmmm.d...d."
- /* 8 */ "mmmmmmm.g...g."
- /* 9 */ "mmmmmmm.g...g."
- /* 10 */ "mmmmmmm.dgggd."
+ /* 8 */ "mmmmmmm.h...h."
+ /* 9 */ "mmmmmmm.h...h."
+ /* 10 */ "mmmmmmm.dhhhd."
/* 11 */ "mmmmmmm......."
// Level 3
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ "bbbbbbbbbbbbbb"
- /* 1 */ "iddddddddddddc"
- /* 2 */ ".d.....j.j..dc"
+ /* 1 */ "jddddddddddddc"
+ /* 2 */ ".d.....k.k..dc"
/* 3 */ ".d..........dc"
- /* 4 */ ".d..k.k.....dc"
- /* 5 */ "ldddddddd...dc"
+ /* 4 */ ".d..l.l.....dc"
+ /* 5 */ "ndddddddd...dc"
/* 6 */ "eeeeeeead...dc"
/* 7 */ "mmmmmmmad...dc"
/* 8 */ "mmmmmmmad...dc"
/* 9 */ "mmmmmmmad...dc"
/* 10 */ "mmmmmmmadddddc"
- /* 11 */ "mmmmmmman...oc"
+ /* 11 */ "mmmmmmmao...pc"
// Level 4
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
/* 1 */ "bbbbbbbbbbbbb."
- /* 2 */ "idddddddddddc."
- /* 3 */ ".dp........dc."
- /* 4 */ "lddddddddd.dc."
+ /* 2 */ "jdddddddddddc."
+ /* 3 */ ".dq........dc."
+ /* 4 */ "nddddddddd.dc."
/* 5 */ "eeeeeeeead.dc."
/* 6 */ "........ad.dc."
/* 7 */ "mmmmmmm.ad.dc."
/* 8 */ "mmmmmmm.ad.dc."
- /* 9 */ "mmmmmmm.adkdc."
+ /* 9 */ "mmmmmmm.adldc."
/* 10 */ "mmmmmmm.adddc."
- /* 11 */ "mmmmmmm.an.oc."
+ /* 11 */ "mmmmmmm.ao.pc."
// Level 5
/* z\x* 1111 */
@@ -1383,7 +1384,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 11 */ "mmmmmmm..adc..",
// Connectors:
- "",
+ "-1: 8, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1424,19 +1425,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e:128: 3\n" /* sandstonestairs */
- "f: 64: 5\n" /* wooddoorblock */
- "g: 64: 7\n" /* wooddoorblock */
- "h:102: 0\n" /* glasspane */
- "i: 64:12\n" /* wooddoorblock */
- "j:128: 7\n" /* sandstonestairs */
- "k: 50: 3\n" /* torch */
- "l: 50: 2\n" /* torch */
+ "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 */
"m: 19: 0\n" /* sponge */
- "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 */,
+ "n:128: 6\n" /* sandstonestairs */
+ "o: 50: 1\n" /* torch */
+ "p:128: 5\n" /* sandstonestairs */
+ "q:128: 4\n" /* sandstonestairs */,
// Block data:
// Level 0
@@ -1465,7 +1465,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 4 */ ".d..........d."
/* 5 */ ".d..........d."
/* 6 */ ".d..........d."
- /* 7 */ ".ddddgd.....d."
+ /* 7 */ ".ddddfd.....d."
/* 8 */ "......d.....d."
/* 9 */ "mmmmm.d.....d."
/* 10 */ "mmmmm.ddddddd."
@@ -1475,49 +1475,49 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
- /* 1 */ ".dhhdidhhdhhd."
- /* 2 */ ".h..........h."
- /* 3 */ ".h..........h."
+ /* 1 */ ".dggdhdggdggd."
+ /* 2 */ ".g..........g."
+ /* 3 */ ".g..........g."
/* 4 */ ".d..........d."
- /* 5 */ ".h..........h."
- /* 6 */ ".h..........h."
- /* 7 */ ".dhhdid.....d."
- /* 8 */ "......h.....h."
- /* 9 */ "mmmmm.h.....h."
- /* 10 */ "mmmmm.dhhdhhd."
+ /* 5 */ ".g..........g."
+ /* 6 */ ".g..........g."
+ /* 7 */ ".dggdhd.....d."
+ /* 8 */ "......g.....g."
+ /* 9 */ "mmmmm.g.....g."
+ /* 10 */ "mmmmm.dggdggd."
/* 11 */ "mmmmm........."
// Level 3
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ "bbbbbbbbbbbbbb"
- /* 1 */ "jddddddddddddc"
- /* 2 */ ".d..k.k.....dc"
+ /* 1 */ "iddddddddddddc"
+ /* 2 */ ".d..j.j.....dc"
/* 3 */ ".d..........dc"
- /* 4 */ ".d.........ldc"
+ /* 4 */ ".d.........kdc"
/* 5 */ ".d..........dc"
- /* 6 */ ".d..n.n.....dc"
- /* 7 */ "oddddddp...ldc"
+ /* 6 */ ".d..l.l.....dc"
+ /* 7 */ "nddddddo...kdc"
/* 8 */ "eeeeead.....dc"
/* 9 */ "mmmmmad.....dc"
/* 10 */ "mmmmmadddddddc"
- /* 11 */ "mmmmmaq.....rc"
+ /* 11 */ "mmmmmap.....qc"
// Level 4
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
/* 1 */ "bbbbbbbbbbbbc."
- /* 2 */ "jdddddddddddc."
+ /* 2 */ "idddddddddddc."
/* 3 */ ".d.........dc."
/* 4 */ ".d.........dc."
/* 5 */ ".d.........dc."
- /* 6 */ "oddddddd...dc."
+ /* 6 */ "nddddddd...dc."
/* 7 */ "eeeeeead...dc."
/* 8 */ "......ad...dc."
/* 9 */ "mmmmm.ad...dc."
/* 10 */ "mmmmm.adddddc."
- /* 11 */ "mmmmm.aq...rc."
+ /* 11 */ "mmmmm.ap...qc."
// Level 5
/* z\x* 1111 */
@@ -1525,15 +1525,15 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 0 */ ".............."
/* 1 */ ".............."
/* 2 */ "bbbbbbbbbbbb.."
- /* 3 */ "jddddddddddc.."
+ /* 3 */ "iddddddddddc.."
/* 4 */ ".d........dc.."
- /* 5 */ "odddddddd.dc.."
+ /* 5 */ "ndddddddd.dc.."
/* 6 */ "eeeeeeeed.dc.."
/* 7 */ ".......ad.dc.."
/* 8 */ ".......ad.dc.."
/* 9 */ "mmmmm..ad.dc.."
/* 10 */ "mmmmm..adddc.."
- /* 11 */ "mmmmm..aq.rc.."
+ /* 11 */ "mmmmm..ap.qc.."
// Level 6
/* z\x* 1111 */
@@ -1552,7 +1552,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 11 */ "mmmmm...adc...",
// Connectors:
- "",
+ "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1619,7 +1619,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ "d........d",
// Connectors:
- "",
+ "-1: 0, 0, 3: 4\n" /* Type -1, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1661,8 +1661,8 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"d: 50: 5\n" /* torch */
"e: 26:10\n" /* bedblock */
"f: 26: 2\n" /* bedblock */
- "g: 64: 3\n" /* wooddoorblock */
- "h: 64: 8\n" /* wooddoorblock */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -1712,7 +1712,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 5 */ ".....",
// Connectors:
- "",
+ "-1: 2, 0, 4: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1853,7 +1853,10 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] =
/* 3 */ "bbbb",
// Connectors:
- "",
+ "1: 2, 8, 0: 2\n" /* Type 1, direction Z- */
+ "1: 0, 8, 1: 4\n" /* Type 1, direction X- */
+ "1: 1, 8, 3: 3\n" /* Type 1, direction Z+ */
+ "1: 3, 8, 2: 5\n" /* Type 1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index 3d89d7aa2..3358bc531 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -7,6 +7,7 @@
#include "VillageGen.h"
#include "Prefabs/PlainsVillagePrefabs.h"
#include "Prefabs/SandVillagePrefabs.h"
+#include "PieceGenerator.h"
@@ -19,18 +20,79 @@ the grid's cells. Each cell checks the biomes in an entire chunk around it, only
biomes are village-friendly. If yes, the entire village structure is built for that cell. If not, the cell
is left village-less.
-A village is generated starting by its well. The well is placed in the grid's origin point. Then a set of
-random lengths roads is generated - 4 roads going from the well, then at the end of each road another set of
-roads, crossing them perpendicular, then at the end of those another set, up to a set maximum branching
-depth. The roads are placed in a T or L shape, with the old road being the center stem of the T. Roads avoid
-crossing each other and going further away from the well than the maximum block size of the village.
-Finally, houses are places along the roads, avoiding collisions with already-existing items.
+A village is generated using the regular BFS piece generator. The well piece is used as the starting piece,
+the roads and houses are then used as the following pieces. Only the houses are read from the prefabs,
+though, the roads are generated by code and their content is ignored. A special subclass of the cPiecePool
+class is used, so that the roads connect to each other and to the well only in predefined manners.
-When the village is about to be drawn into a chunk, it queries the heights for each item intersecting the
-chunk. The prefabs are shifted so that their pivot points lie on the surface, and the roads are drawn
+The well has connectors of type "1". The houses have connectors of type "-1". The roads have connectors of
+both types, type "-1" at the far ends and type "1" on the long edges.
+
+When the village is about to be drawn into a chunk, it queries the heights for each piece intersecting the
+chunk. The pieces are shifted so that their pivot points lie on the surface, and the roads are drawn
directly by turning the surface blocks into gravel / sandstone.
*/
+class cVillagePiecePool :
+ public cPrefabPiecePool
+{
+ typedef cPrefabPiecePool super;
+public:
+ cVillagePiecePool(
+ const cPrefab::sDef * a_PieceDefs, size_t a_NumPieceDefs,
+ const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs
+ ) :
+ super(a_PieceDefs, a_NumPieceDefs, a_StartingPieceDefs, a_NumStartingPieceDefs)
+ {
+ // Add the road piece:
+ cBlockArea BA;
+ BA.Create(5, 1, 3, cBlockArea::baTypes | cBlockArea::baMetas);
+ BA.Fill(cBlockArea::baTypes | cBlockArea::baMetas, E_BLOCK_GRAVEL, 0);
+ cPrefab * RoadPiece = new cPrefab(BA, 7);
+ RoadPiece->AddConnector(0, 0, 1, BLOCK_FACE_XM, -1);
+ RoadPiece->AddConnector(4, 0, 1, BLOCK_FACE_XP, -1);
+ RoadPiece->AddConnector(4, 0, 1, BLOCK_FACE_XP, 1);
+ RoadPiece->AddConnector(1, 0, 0, BLOCK_FACE_ZM, 1);
+ RoadPiece->AddConnector(3, 0, 0, BLOCK_FACE_ZM, 1);
+ RoadPiece->AddConnector(1, 0, 2, BLOCK_FACE_ZP, 1);
+ RoadPiece->AddConnector(3, 0, 2, BLOCK_FACE_ZP, 1);
+ RoadPiece->SetAddWeightIfSame(10000);
+ m_AllPieces.push_back(RoadPiece);
+ m_PiecesByConnector[-1].push_back(RoadPiece);
+ m_PiecesByConnector[1].push_back(RoadPiece);
+ }
+
+
+ // cPrefabPiecePool overrides:
+ virtual int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector, const cPiece & a_NewPiece) override
+ {
+ // Only roads are allowed to connect to the well:
+ if ((a_PlacedPiece.GetDepth() == 0) && (a_NewPiece.GetSize().y != 1))
+ {
+ return 0;
+ }
+
+ // Roads cannot branch T-wise:
+ if (
+ (a_PlacedPiece.GetPiece().GetSize().y == 1) && // Connecting to a road
+ (
+ (a_ExistingConnector.m_Direction == BLOCK_FACE_ZP) ||
+ (a_ExistingConnector.m_Direction == BLOCK_FACE_ZM)
+ ) && // Through the long-edge connector
+ (a_NewPiece.GetSize().y == 1) // And the new piece is a road
+ )
+ {
+ return 0;
+ }
+
+ return ((const cPrefab &)a_NewPiece).GetPieceWeight(a_PlacedPiece, a_ExistingConnector);
+ }
+} ;
+
+
+
+
+
class cVillageGen::cVillage :
public cGridStructGen::cStructure
{
@@ -53,44 +115,11 @@ public:
m_Prefabs(a_Prefabs),
m_HeightGen(a_HeightGen)
{
- PlaceWell();
- BuildRoads(a_MaxRoadDepth);
- PlaceHouses();
+ cBFSPieceGenerator pg(m_Prefabs, a_Seed);
+ pg.PlacePieces(a_OriginX, 10, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
}
protected:
- class cItem
- {
- public:
- /* The position of the item, X/Z-wise: */
- int m_MinX, m_MaxX, m_MinZ, m_MaxZ;
-
- /** The prefab to use. If NULL, this is a road. */
- cPrefab * m_Prefab;
-
- /** Number of rotations that should be applied to the prefab. */
- int m_NumRotations;
-
- /* The bottom of the prefab. Only valid if the item is a prefab, not valid for roads. */
- int m_BaseY;
-
- /** Creates a new item with the specified parameters.
- m_BaseY is set to -1 and will be adjusted later on when drawing. */
- cItem(int a_MinX, int a_MaxX, int a_MinZ, int a_MaxZ, cPrefab * a_Prefab, int a_NumRotations) :
- m_MinX(a_MinX),
- m_MaxX(a_MaxX),
- m_MinZ(a_MinZ),
- m_MaxZ(a_MaxZ),
- m_Prefab(a_Prefab),
- m_NumRotations(a_NumRotations),
- m_BaseY(-1)
- {
- }
- } ;
- typedef SharedPtr cItemPtr;
- typedef std::vector cItemPtrs;
-
-
/** Seed for the random functions */
int m_Seed;
@@ -109,61 +138,8 @@ protected:
/** The underlying height generator, used for placing the structures on top of the terrain. */
cTerrainHeightGen & m_HeightGen;
- /** The items that are generated in the village (houses, roads). */
- cItemPtrs m_Items;
-
-
- /** Places the well at the center of the village */
- void PlaceWell(void)
- {
- // Pick a prefab from the starting pieces:
- cPieces StartingPieces = ((cPiecePool &)m_Prefabs).GetStartingPieces();
- ASSERT(!StartingPieces.empty());
- int TotalWeight = 0;
- for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
- {
- TotalWeight += ((const cPrefab *)(*itr))->GetDefaultWeight();
- }
- ASSERT(TotalWeight > 0);
- int rnd = (m_Noise.IntNoise2DInt(m_OriginX, m_OriginZ) / 7) % TotalWeight;
- cPiece * WellPiece = StartingPieces[0];
- for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
- {
- rnd -= ((const cPrefab *)(*itr))->GetDefaultWeight();
- if (rnd <= 0)
- {
- WellPiece = *itr;
- break;
- }
- }
- ASSERT(WellPiece != NULL);
-
- // Pick a rotation:
- // TODO
- int NumRotations = 0;
- Vector3i Size = WellPiece->GetSize();
-
- // Put the well in the placed items array:
- m_Items.push_back(cItemPtr(new cItem(m_OriginX, m_OriginX + Size.x, m_OriginZ, m_OriginZ + Size.z, (cPrefab *)WellPiece, NumRotations)));
- }
-
-
- /** Places the roads going from the well outwards. */
- void BuildRoads(int a_MaxRoadDepth)
- {
- /*
- ASSERT(m_Items.size() == 1);
- const cItem & Well = *m_Items[0];
- */
- // TODO
- }
-
-
- /** Places houses along the roads. */
- void PlaceHouses(void)
- {
- // TODO
- }
+ /** The village pieces, placed by the generator. */
+ cPlacedPieces m_Pieces;
// cGrdStructGen::cStructure overrides:
@@ -173,6 +149,11 @@ protected:
// Iterate over all items
// Each intersecting prefab is placed on ground (if not already placed), then drawn
// Each intersecting road is drawn by replacing top soil blocks with gravel / sandstone blocks
+ for (cPlacedPieces::const_iterator itr = m_Pieces.begin(), end = m_Pieces.end(); itr != end; ++itr)
+ {
+ const cPrefab & Prefab = (const cPrefab &)((*itr)->GetPiece());
+ Prefab.Draw(a_Chunk, *itr);
+ } // for itr - m_PlacedPieces[]
}
} ;
@@ -183,15 +164,20 @@ protected:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cVillageGen:
-cPrefabPiecePool cVillageGen::m_SandVillage (g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
-cPrefabPiecePool cVillageGen::m_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
+/** The prefabs for the sand village. */
+static cVillagePiecePool g_SandVillage (g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
+
+/** The prefabs for the plains village. */
+static cVillagePiecePool g_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
-cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxRoadDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
+cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
super(a_Seed, a_GridSize, a_GridSize, a_MaxSize, a_MaxSize, 100),
+ m_MaxDepth(a_MaxDepth),
+ m_MaxSize(a_MaxSize),
m_BiomeGen(a_BiomeGen),
m_HeightGen(a_HeightGen)
{
@@ -211,7 +197,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
// Check if all the biomes are village-friendly:
// If just one is not, no village is created, because it's likely that an unfriendly biome is too close
- cPrefabPiecePool * VillagePrefabs = NULL;
+ cVillagePiecePool * VillagePrefabs = NULL;
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
@@ -220,7 +206,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biDesertM:
{
// These biomes allow sand villages
- VillagePrefabs = &m_SandVillage;
+ VillagePrefabs = &g_SandVillage;
break;
}
case biPlains:
@@ -229,7 +215,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biSunflowerPlains:
{
// These biomes allow plains-style villages
- VillagePrefabs = &m_PlainsVillage;
+ VillagePrefabs = &g_PlainsVillage;
break;
}
default:
@@ -245,7 +231,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
{
return cStructurePtr();
}
- return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxRoadDepth, m_MaxSize, *VillagePrefabs, m_HeightGen));
+ return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, *VillagePrefabs, m_HeightGen));
}
diff --git a/src/Generating/VillageGen.h b/src/Generating/VillageGen.h
index acbd76881..c6f8f024a 100644
--- a/src/Generating/VillageGen.h
+++ b/src/Generating/VillageGen.h
@@ -21,19 +21,13 @@ class cVillageGen :
{
typedef cGridStructGen super;
public:
- cVillageGen(int a_Seed, int a_GridSize, int a_MaxRoadDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
+ cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
protected:
class cVillage; // fwd: VillageGen.cpp
- /** The prefabs for the sand village. We're not exactly using the cPiecePool functionality, only the containment. */
- static cPrefabPiecePool m_SandVillage;
-
- /** The prefabs for the plains village. We're not exactly using the cPiecePool functionality, only the containment. */
- static cPrefabPiecePool m_PlainsVillage;
-
- /** Maximum number of roads generated one from another (tree depth). */
- int m_MaxRoadDepth;
+ /** Maximum depth of the generator tree*/
+ int m_MaxDepth;
/** Maximum size, in X/Z blocks, of the village (radius from the origin) */
int m_MaxSize;
--
cgit v1.2.3
From 34e5f0c16422f93d3f8f0f802522fa113fa9aa20 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 15 May 2014 10:43:54 +0200
Subject: Changed village road generation to use multiple prefabs.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 8 ++--
src/Generating/Prefabs/SandVillagePrefabs.cpp | 8 ++--
src/Generating/VillageGen.cpp | 61 ++++++++++++-------------
3 files changed, 38 insertions(+), 39 deletions(-)
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index 508f0d3b6..06b1395c5 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -3691,10 +3691,10 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
/* 3 */ "bbbb",
// Connectors:
- "1: 1, 9, 3: 3\n" /* Type 1, direction Z+ */
- "1: 2, 9, 0: 2\n" /* Type 1, direction Z- */
- "1: 0, 9, 1: 4\n" /* Type 1, direction X- */
- "1: 3, 9, 2: 5\n" /* Type 1, direction X+ */,
+ "2: 1, 9, 3: 3\n" /* Type 2, direction Z+ */
+ "2: 2, 9, 0: 2\n" /* Type 2, direction Z- */
+ "2: 0, 9, 1: 4\n" /* Type 2, direction X- */
+ "2: 3, 9, 2: 5\n" /* Type 2, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
diff --git a/src/Generating/Prefabs/SandVillagePrefabs.cpp b/src/Generating/Prefabs/SandVillagePrefabs.cpp
index 51411dea2..8460ee5f7 100644
--- a/src/Generating/Prefabs/SandVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/SandVillagePrefabs.cpp
@@ -1853,10 +1853,10 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] =
/* 3 */ "bbbb",
// Connectors:
- "1: 2, 8, 0: 2\n" /* Type 1, direction Z- */
- "1: 0, 8, 1: 4\n" /* Type 1, direction X- */
- "1: 1, 8, 3: 3\n" /* Type 1, direction Z+ */
- "1: 3, 8, 2: 5\n" /* Type 1, direction X+ */,
+ "2: 2, 8, 0: 2\n" /* Type 2, direction Z- */
+ "2: 0, 8, 1: 4\n" /* Type 2, direction X- */
+ "2: 1, 8, 3: 3\n" /* Type 2, direction Z+ */
+ "2: 3, 8, 2: 5\n" /* Type 2, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index 3358bc531..b514a90cd 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -44,43 +44,42 @@ public:
) :
super(a_PieceDefs, a_NumPieceDefs, a_StartingPieceDefs, a_NumStartingPieceDefs)
{
- // Add the road piece:
- cBlockArea BA;
- BA.Create(5, 1, 3, cBlockArea::baTypes | cBlockArea::baMetas);
- BA.Fill(cBlockArea::baTypes | cBlockArea::baMetas, E_BLOCK_GRAVEL, 0);
- cPrefab * RoadPiece = new cPrefab(BA, 7);
- RoadPiece->AddConnector(0, 0, 1, BLOCK_FACE_XM, -1);
- RoadPiece->AddConnector(4, 0, 1, BLOCK_FACE_XP, -1);
- RoadPiece->AddConnector(4, 0, 1, BLOCK_FACE_XP, 1);
- RoadPiece->AddConnector(1, 0, 0, BLOCK_FACE_ZM, 1);
- RoadPiece->AddConnector(3, 0, 0, BLOCK_FACE_ZM, 1);
- RoadPiece->AddConnector(1, 0, 2, BLOCK_FACE_ZP, 1);
- RoadPiece->AddConnector(3, 0, 2, BLOCK_FACE_ZP, 1);
- RoadPiece->SetAddWeightIfSame(10000);
- m_AllPieces.push_back(RoadPiece);
- m_PiecesByConnector[-1].push_back(RoadPiece);
- m_PiecesByConnector[1].push_back(RoadPiece);
+ // Add the road pieces:
+ for (int len = 19; len < 60; len += 8)
+ {
+ cBlockArea BA;
+ BA.Create(len, 1, 3, cBlockArea::baTypes | cBlockArea::baMetas);
+ BA.Fill(cBlockArea::baTypes | cBlockArea::baMetas, E_BLOCK_GRAVEL, 0);
+ cPrefab * RoadPiece = new cPrefab(BA, 1);
+ RoadPiece->AddConnector(0, 0, 1, BLOCK_FACE_XM, -2);
+ RoadPiece->AddConnector(len - 1, 0, 1, BLOCK_FACE_XP, -2);
+
+ // Add the road connectors:
+ for (int x = 1; x < len; x += 8)
+ {
+ RoadPiece->AddConnector(x, 0, 0, BLOCK_FACE_ZM, 2);
+ RoadPiece->AddConnector(x, 0, 2, BLOCK_FACE_ZP, 2);
+ }
+
+ // Add the buildings connectors:
+ for (int x = 5; x < len; x += 8)
+ {
+ RoadPiece->AddConnector(x, 0, 0, BLOCK_FACE_ZM, 1);
+ RoadPiece->AddConnector(x, 0, 2, BLOCK_FACE_ZP, 1);
+ }
+ m_AllPieces.push_back(RoadPiece);
+ m_PiecesByConnector[-2].push_back(RoadPiece);
+ m_PiecesByConnector[1].push_back(RoadPiece);
+ m_PiecesByConnector[2].push_back(RoadPiece);
+ } // for len - roads of varying length
}
// cPrefabPiecePool overrides:
virtual int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector, const cPiece & a_NewPiece) override
{
- // Only roads are allowed to connect to the well:
- if ((a_PlacedPiece.GetDepth() == 0) && (a_NewPiece.GetSize().y != 1))
- {
- return 0;
- }
-
- // Roads cannot branch T-wise:
- if (
- (a_PlacedPiece.GetPiece().GetSize().y == 1) && // Connecting to a road
- (
- (a_ExistingConnector.m_Direction == BLOCK_FACE_ZP) ||
- (a_ExistingConnector.m_Direction == BLOCK_FACE_ZM)
- ) && // Through the long-edge connector
- (a_NewPiece.GetSize().y == 1) // And the new piece is a road
- )
+ // Roads cannot branch T-wise (appending -2 connector to a +2 connector):
+ if ((a_ExistingConnector.m_Type == 2) && (a_PlacedPiece.GetDepth() > 0))
{
return 0;
}
--
cgit v1.2.3
From 56f7ad2cd9f1bfd69502918ebe760748e453959d Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 15 May 2014 10:44:08 +0200
Subject: Changed village generator defaults to more reasonable values.
---
src/Generating/ComposableGenerator.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp
index 1bb836684..f264599c9 100644
--- a/src/Generating/ComposableGenerator.cpp
+++ b/src/Generating/ComposableGenerator.cpp
@@ -408,8 +408,8 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile)
}
else if (NoCaseCompare(*itr, "Villages") == 0)
{
- int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 256);
- int MaxDepth = a_IniFile.GetValueSetI("Generator", "VillageMaxDepth", 7);
+ int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 384);
+ int MaxDepth = a_IniFile.GetValueSetI("Generator", "VillageMaxDepth", 3);
int MaxSize = a_IniFile.GetValueSetI("Generator", "VillageMaxSize", 128);
m_FinishGens.push_back(new cVillageGen(Seed, GridSize, MaxDepth, MaxSize, *m_BiomeGen, *m_HeightGen));
}
--
cgit v1.2.3
From 70b0547499c4343e3071a54e3c093712669a3a8f Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 15 May 2014 16:03:45 +0200
Subject: Fixed a NULL ptr failure in GridStructGen.
When the descendant generator returned a NULL structure, the generator would crash. Now it uses a special cEmptyStructure class instead.
---
src/Generating/GridStructGen.cpp | 35 ++++++++++++++++++++++++++++++++++-
src/Generating/GridStructGen.h | 16 ++++++++--------
2 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/src/Generating/GridStructGen.cpp b/src/Generating/GridStructGen.cpp
index 3bbc89054..23946e2e9 100644
--- a/src/Generating/GridStructGen.cpp
+++ b/src/Generating/GridStructGen.cpp
@@ -9,6 +9,34 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// cEmptyStructure:
+
+/** A cStructure descendant representing an empty structure.
+Used when the generator descended from cGridStructGen doesn't return any structure, to keep at least the
+Origin coords so that the structure isn't queried over and over again. */
+class cEmptyStructure :
+ public cGridStructGen::cStructure
+{
+ typedef cGridStructGen::cStructure super;
+
+public:
+ cEmptyStructure(int a_OriginX, int a_OriginZ) :
+ super(a_OriginX, a_OriginZ)
+ {
+ }
+
+protected:
+ virtual void DrawIntoChunk(cChunkDesc & a_ChunkDesc) override
+ {
+ // Do nothing
+ }
+} ;
+
+
+
+
+
cGridStructGen::cGridStructGen(
int a_Seed,
int a_GridSizeX, int a_GridSizeZ,
@@ -81,7 +109,12 @@ void cGridStructGen::GetStructuresForChunk(int a_ChunkX, int a_ChunkZ, cStructur
} // for itr - a_Structures[]
if (!Found)
{
- a_Structures.push_back(CreateStructure(OriginX, OriginZ));
+ cStructurePtr Structure = CreateStructure(OriginX, OriginZ);
+ if (Structure.get() == NULL)
+ {
+ Structure.reset(new cEmptyStructure(OriginX, OriginZ));
+ }
+ a_Structures.push_back(Structure);
}
} // for z
} // for x
diff --git a/src/Generating/GridStructGen.h b/src/Generating/GridStructGen.h
index 234cc75c5..630a5e44e 100644
--- a/src/Generating/GridStructGen.h
+++ b/src/Generating/GridStructGen.h
@@ -39,14 +39,6 @@ class cGridStructGen :
public cFinishGen
{
public:
- cGridStructGen(
- int a_Seed,
- int a_GridSizeX, int a_GridSizeZ,
- int a_MaxStructureSizeX, int a_MaxStructureSizeZ,
- size_t a_MaxCacheSize
- );
-
-protected:
/** Represents a single structure that occupies the grid point. Knows how to draw itself into a chunk. */
class cStructure
{
@@ -75,6 +67,14 @@ protected:
typedef std::list cStructurePtrs;
+ cGridStructGen(
+ int a_Seed,
+ int a_GridSizeX, int a_GridSizeZ,
+ int a_MaxStructureSizeX, int a_MaxStructureSizeZ,
+ size_t a_MaxCacheSize
+ );
+
+protected:
/** Seed for generating the semi-random grid. */
int m_Seed;
--
cgit v1.2.3
From 989312c4e7f517ae324e857cb255211e3fd8bb06 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Fri, 16 May 2014 22:04:19 +0200
Subject: Add more move checks - Invalid X/Y/Z/Stance check (std::isnan) -
Illegal stance - Illegal position (32.000.000 is the world size)
---
src/ClientHandle.cpp | 74 ++++++++++++++++++++++++++++++++++++++++------------
src/ClientHandle.h | 2 +-
2 files changed, 59 insertions(+), 17 deletions(-)
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 0c897374b..41b5d1626 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -582,16 +582,37 @@ void cClientHandle::HandlePlayerPos(double a_PosX, double a_PosY, double a_PosZ,
return;
}
- /*
- // TODO: Invalid stance check
- if ((a_PosY >= a_Stance) || (a_Stance > a_PosY + 1.65))
+ if (m_Player->GetHealth() <= 0)
{
- LOGD("Invalid stance");
- SendPlayerMoveLook();
+ // The player is dead. He can't move :D
return;
}
- */
-
+
+ if (std::isnan(a_PosX) || std::isnan(a_PosY) || std::isnan(a_PosZ) || std::isnan(a_Stance))
+ {
+ LOGWARN("%s was caught trying to crash the server with an invalid position.", m_Player->GetName().c_str());
+ Kick("Nope!");
+ return;
+ }
+
+ // Invalid stance check
+ if (!m_Player->IsInBed())
+ {
+ double Difference = a_Stance - a_PosY;
+ if ((Difference > 1.65) || (Difference < 1.0))
+ {
+ Kick("Illegal stance!");
+ LOGWARN("%s had an illegal stance: %f", m_Player->GetName().c_str(), a_Stance);
+ return;
+ }
+ }
+
+ if ((std::abs(a_PosX) > 32000000.0) || (std::abs(a_PosZ) > 32000000.0))
+ {
+ Kick("Illegal position!");
+ return;
+ }
+
// If the player has moved too far, "repair" them:
Vector3d Pos(a_PosX, a_PosY, a_PosZ);
if ((m_Player->GetPosition() - Pos).SqrLength() > 100 * 100)
@@ -1388,7 +1409,7 @@ void cClientHandle::HandlePlayerLook(float a_Rotation, float a_Pitch, bool a_IsO
-void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Rotation, float a_Pitch, bool a_IsOnGround)
+void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Yaw, float a_Pitch, bool a_IsOnGround)
{
if ((m_Player == NULL) || (m_State != csPlaying))
{
@@ -1396,21 +1417,42 @@ void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_
return;
}
- /*
- // TODO: Invalid stance check
- if ((a_PosY >= a_Stance) || (a_Stance > a_PosY + 1.65))
+ if (m_Player->GetHealth() <= 0)
{
- LOGD("Invalid stance");
- SendPlayerMoveLook();
+ // The player is dead. He can't move :D
+ return;
+ }
+
+ if (std::isnan(a_PosX) || std::isnan(a_PosY) || std::isnan(a_PosZ) || std::isnan(a_Stance))
+ {
+ LOGWARN("%s was caught trying to crash the server with an invalid position.", m_Player->GetName().c_str());
+ Kick("Nope!");
+ return;
+ }
+
+ // Invalid stance check
+ if (!m_Player->IsInBed())
+ {
+ double Difference = a_Stance - a_PosY;
+ if ((Difference > 1.65) || (Difference < 1.0))
+ {
+ Kick("Illegal stance!");
+ LOGWARN("%s had an illegal stance: %f", m_Player->GetName().c_str(), a_Stance);
+ return;
+ }
+ }
+
+ if ((std::abs(a_PosX) > 32000000.0) || (std::abs(a_PosZ) > 32000000.0))
+ {
+ Kick("Illegal position!");
return;
}
- */
m_Player->MoveTo(Vector3d(a_PosX, a_PosY, a_PosZ));
m_Player->SetStance (a_Stance);
m_Player->SetTouchGround(a_IsOnGround);
- m_Player->SetHeadYaw (a_Rotation);
- m_Player->SetYaw (a_Rotation);
+ m_Player->SetHeadYaw (a_Yaw);
+ m_Player->SetYaw (a_Yaw);
m_Player->SetPitch (a_Pitch);
}
diff --git a/src/ClientHandle.h b/src/ClientHandle.h
index 85d348eee..940fb786a 100644
--- a/src/ClientHandle.h
+++ b/src/ClientHandle.h
@@ -223,7 +223,7 @@ public:
void HandlePing (void);
void HandlePlayerAbilities (bool a_CanFly, bool a_IsFlying, float FlyingSpeed, float WalkingSpeed);
void HandlePlayerLook (float a_Rotation, float a_Pitch, bool a_IsOnGround);
- void HandlePlayerMoveLook (double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Rotation, float a_Pitch, bool a_IsOnGround); // While m_bPositionConfirmed (normal gameplay)
+ void HandlePlayerMoveLook (double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Yaw, float a_Pitch, bool a_IsOnGround); // While m_bPositionConfirmed (normal gameplay)
void HandlePlayerPos (double a_PosX, double a_PosY, double a_PosZ, double a_Stance, bool a_IsOnGround);
void HandlePluginMessage (const AString & a_Channel, const AString & a_Message);
void HandleRespawn (void);
--
cgit v1.2.3
From fc5c3abcba9153196727a77e726bb0b37d5c7450 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 17 May 2014 02:26:44 +0200
Subject: Updated PlainsVillage prefabs to the latest Gallery contents.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 5283 +++++++++++++----------
1 file changed, 2955 insertions(+), 2328 deletions(-)
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index 06b1395c5..863720ab4 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -16,165 +16,246 @@
const cPrefab::sDef g_PlainsVillagePrefabs[] =
{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Forge:
- // The data has been exported from the gallery Plains, area index 51, ID 102, created by Aloe_vera
+ // BigPlantBed:
+ // The data has been exported from the gallery Plains, area index 26, ID 70, created by Taugrammaton
{
// Size:
- 12, 8, 11, // SizeX = 12, SizeY = 8, SizeZ = 11
+ 13, 4, 12, // SizeX = 13, SizeY = 4, SizeZ = 12
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 11, 7, 10, // MaxX, MaxY, MaxZ
+ 12, 3, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 6\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 */
+ "a: 3: 0\n" /* dirt */
+ "b: 5: 0\n" /* wood */
+ "c: 13: 0\n" /* gravel */
+ "d: 17: 0\n" /* tree */
+ "e: 60: 7\n" /* tilleddirt */
+ "f: 8: 0\n" /* water */
+ "g: 85: 0\n" /* fence */
+ "h: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "aaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaaa"
+ /* 11 */ "aaaaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "bbbbbbbbbbbbb"
+ /* 1 */ "bcccccccccccb"
+ /* 2 */ "bcccccccccccb"
+ /* 3 */ "bcccccccccccb"
+ /* 4 */ "bcccccccccccb"
+ /* 5 */ "bcccccccccccb"
+ /* 6 */ "bcccccccccccb"
+ /* 7 */ "bcccccccccccb"
+ /* 8 */ "bcccccccccccb"
+ /* 9 */ "bcccccccccccb"
+ /* 10 */ "bcccccccccccb"
+ /* 11 */ "bbbbbbbbbbbbb"
+
+ // Level 2
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "ddddddddddddd"
+ /* 1 */ "deefeefeefeed"
+ /* 2 */ "deefeefeefeed"
+ /* 3 */ "deefeefeefeed"
+ /* 4 */ "deefeefeefeed"
+ /* 5 */ "deefeefeefeed"
+ /* 6 */ "deefeefeefeed"
+ /* 7 */ "deefeefeefeed"
+ /* 8 */ "deefeefeefeed"
+ /* 9 */ "deefeefeefeed"
+ /* 10 */ "deefeefeefeed"
+ /* 11 */ "ddddddddddddd"
+
+ // Level 3
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "g..g..g..g..g"
+ /* 1 */ "ghh.h..hh.hhg"
+ /* 2 */ "ghh..h.hh.hhg"
+ /* 3 */ "ghh.h..h..hhg"
+ /* 4 */ "ghh.hh.h..hhg"
+ /* 5 */ "ghh.h..hh.hhg"
+ /* 6 */ "ghh.hh.hh.hhg"
+ /* 7 */ "ghh....h..hhg"
+ /* 8 */ "ghh..h....hhg"
+ /* 9 */ "ghh.....h.hhg"
+ /* 10 */ "ghh.hh.h..hhg"
+ /* 11 */ "g..g..g..g..g",
+
+ // Connectors:
+ "-1: 7, 1, 11: 3\n" /* Type -1, direction Z+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // BigPlantBed
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // CobbleHouse10x5Library:
+ // The data has been exported from the gallery Plains, area index 23, ID 66, created by xoft
+ {
+ // Size:
+ 12, 8, 7, // SizeX = 12, SizeY = 8, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h: 53: 3\n" /* woodstairs */
+ "i: 53: 1\n" /* woodstairs */
+ "j: 85: 0\n" /* fence */
+ "k: 53: 0\n" /* woodstairs */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n:139: 0\n" /* cobblestonewall */
- "o:101: 0\n" /* ironbars */
- "p: 53: 2\n" /* woodstairs */
- "q: 53: 7\n" /* woodstairs */
- "r: 50: 2\n" /* torch */
- "s: 50: 1\n" /* torch */
- "t: 53: 6\n" /* woodstairs */
- "u: 53: 3\n" /* woodstairs */
- "v: 43: 0\n" /* doubleslab */
- "w: 44: 0\n" /* step */,
+ "n:102: 0\n" /* glasspane */
+ "o: 64:12\n" /* wooddoorblock */
+ "p: 50: 3\n" /* torch */
+ "q: 72: 0\n" /* woodplate */
+ "r: 50: 4\n" /* torch */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 47: 0\n" /* bookshelf */
+ "u: 50: 1\n" /* torch */
+ "v: 50: 2\n" /* torch */
+ "w: 53: 6\n" /* woodstairs */
+ "x: 5: 0\n" /* wood */,
// Block data:
// Level 0
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ ".....abbbc.."
- /* 1 */ ".ddddddddc.."
- /* 2 */ ".ddddddddc.."
- /* 3 */ ".ddddddddddd"
- /* 4 */ ".ddddddddddd"
- /* 5 */ ".ddddddddddd"
- /* 6 */ ".ddddddddddd"
- /* 7 */ ".ddddddddddd"
- /* 8 */ ".ddddd.mmmmm"
- /* 9 */ ".ddddd.mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 0 */ "aaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaa"
// Level 1
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".efffe......"
- /* 2 */ ".f...g......"
- /* 3 */ ".f...ed..ddd"
- /* 4 */ ".f...f...dhd"
- /* 5 */ ".f...f...dhd"
- /* 6 */ ".f...fijjdhd"
- /* 7 */ ".f...edddddd"
- /* 8 */ ".f...f.mmmmm"
- /* 9 */ ".efffe.mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 0 */ "bbbbbbbaaabb"
+ /* 1 */ "baaaaaaaaaab"
+ /* 2 */ "baaaaaaaaaab"
+ /* 3 */ "baaaaaaaaaab"
+ /* 4 */ "baaaaaaaaaab"
+ /* 5 */ "baaaaaaaaaab"
+ /* 6 */ "bbbbbbbbbbbb"
// Level 2
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".ekkke......"
- /* 2 */ ".k...l......"
- /* 3 */ ".k...en..n.d"
- /* 4 */ ".k...k.....o"
- /* 5 */ ".f...k.....o"
- /* 6 */ ".k...k.....o"
- /* 7 */ ".k...edooood"
- /* 8 */ ".k...f.mmmmm"
- /* 9 */ ".ekkke.mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 0 */ ".......cde.."
+ /* 1 */ ".ffffffffff."
+ /* 2 */ ".ffffffffff."
+ /* 3 */ ".ffffffffff."
+ /* 4 */ ".ffffffffff."
+ /* 5 */ ".ffffffffff."
+ /* 6 */ "............"
// Level 3
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "ppppppp....."
- /* 1 */ "qfffffq....."
- /* 2 */ ".f...f......"
- /* 3 */ ".f..rfd..dod"
- /* 4 */ ".f...f...o.d"
- /* 5 */ ".f...f...o.d"
- /* 6 */ ".fs..f...o.d"
- /* 7 */ ".f...fdddddd"
- /* 8 */ ".f...f.mmmmm"
- /* 9 */ "tffffftmmmmm"
- /* 10 */ "uuuuuuummmmm"
+ /* 0 */ "............"
+ /* 1 */ ".fffffffgff."
+ /* 2 */ ".fh.ijk...f."
+ /* 3 */ ".fj.......f."
+ /* 4 */ ".fl.ijkijkf."
+ /* 5 */ ".ffffffffff."
+ /* 6 */ "............"
// Level 4
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ "ppppppp....."
- /* 2 */ "qfffffq....."
- /* 3 */ ".f...fvvvvvv"
- /* 4 */ ".f...fvwwwwv"
- /* 5 */ ".f...fvwwwwv"
- /* 6 */ ".f...fvwwwwv"
- /* 7 */ ".f...fvvvvvv"
- /* 8 */ "tffffftmmmmm"
- /* 9 */ "uuuuuuummmmm"
- /* 10 */ ".......mmmmm"
+ /* 1 */ ".fnnfnnfoff."
+ /* 2 */ ".n..pq.p.pn."
+ /* 3 */ ".nq.......n."
+ /* 4 */ ".n..rq.rq.n."
+ /* 5 */ ".fnnfnnfnnf."
+ /* 6 */ "............"
// Level 5
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ "............"
- /* 2 */ "ppppppp....."
- /* 3 */ "qfffffq....."
- /* 4 */ ".f...f......"
- /* 5 */ ".f...f......"
- /* 6 */ ".f...f......"
- /* 7 */ "tffffft....."
- /* 8 */ "uuuuuuummmmm"
- /* 9 */ ".......mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 0 */ "llllllllllll"
+ /* 1 */ "sffffffffffs"
+ /* 2 */ ".fttttttttf."
+ /* 3 */ ".fu......vf."
+ /* 4 */ ".fttttttttf."
+ /* 5 */ "wffffffffffw"
+ /* 6 */ "hhhhhhhhhhhh"
// Level 6
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ "............"
- /* 2 */ "............"
- /* 3 */ "ppppppp....."
- /* 4 */ "qfffffq....."
- /* 5 */ ".f...f......"
- /* 6 */ "tffffft....."
- /* 7 */ "uuuuuuu....."
- /* 8 */ ".......mmmmm"
- /* 9 */ ".......mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 1 */ "llllllllllll"
+ /* 2 */ "sxxxxxxxxxxs"
+ /* 3 */ ".xxxxxxxxxx."
+ /* 4 */ "wxxxxxxxxxxw"
+ /* 5 */ "hhhhhhhhhhhh"
+ /* 6 */ "............"
// Level 7
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
- /* 2 */ "............"
- /* 3 */ "............"
- /* 4 */ "ppppppp....."
- /* 5 */ "fffffff....."
- /* 6 */ "uuuuuuu....."
- /* 7 */ "............"
- /* 8 */ ".......mmmmm"
- /* 9 */ ".......mmmmm"
- /* 10 */ ".......mmmmm",
+ /* 2 */ "llllllllllll"
+ /* 3 */ "xxxxxxxxxxxx"
+ /* 4 */ "hhhhhhhhhhhh"
+ /* 5 */ "............"
+ /* 6 */ "............",
// Connectors:
- "-1: 7, 0, 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 */
@@ -193,102 +274,59 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // Forge
+ }, // CobbleHouse10x5Library
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_100:
- // The data has been exported from the gallery Plains, area index 49, ID 100, created by Aloe_vera
+ // DoublePlantBed:
+ // The data has been exported from the gallery Plains, area index 5, ID 20, created by tonibm1999
{
// Size:
- 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7
+ 15, 2, 9, // SizeX = 15, SizeY = 2, SizeZ = 9
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 6, 5, 6, // MaxX, MaxY, MaxZ
+ 14, 1, 8, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h: 64:12\n" /* wooddoorblock */
- "i:102: 0\n" /* glasspane */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 7\n" /* woodstairs */
- "l: 50: 3\n" /* torch */
- "m: 19: 0\n" /* sponge */
- "n: 53: 6\n" /* woodstairs */
- "o: 53: 3\n" /* woodstairs */,
+ "a: 17: 0\n" /* tree */
+ "b: 60: 7\n" /* tilleddirt */
+ "c: 8: 0\n" /* water */
+ "d: 50: 5\n" /* torch */
+ "e: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
// Block data:
// Level 0
- /* z\x* 0123456 */
- /* 0 */ "..abc.."
- /* 1 */ ".ddddd."
- /* 2 */ ".ddddd."
- /* 3 */ ".ddddd."
- /* 4 */ ".ddddd."
- /* 5 */ ".ddddd."
- /* 6 */ "......."
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "aaaaaaamaaaaaaa"
+ /* 1 */ "abbcbbamabbcbba"
+ /* 2 */ "abbcbbamabbcbba"
+ /* 3 */ "abbcbbamabbcbba"
+ /* 4 */ "abbcbbamabbcbba"
+ /* 5 */ "abbcbbamabbcbba"
+ /* 6 */ "abbcbbamabbcbba"
+ /* 7 */ "abbcbbamabbcbba"
+ /* 8 */ "aaaaaaamaaaaaaa"
// Level 1
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".efgfe."
- /* 2 */ ".f...f."
- /* 3 */ ".f...f."
- /* 4 */ ".f...f."
- /* 5 */ ".efffe."
- /* 6 */ "......."
-
- // Level 2
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".efhfe."
- /* 2 */ ".i...i."
- /* 3 */ ".i...i."
- /* 4 */ ".i...i."
- /* 5 */ ".eiiie."
- /* 6 */ "......."
-
- // Level 3
- /* z\x* 0123456 */
- /* 0 */ "jjjjjjj"
- /* 1 */ "kfffffk"
- /* 2 */ ".fl.lf."
- /* 3 */ ".f...f."
- /* 4 */ ".f...f."
- /* 5 */ "nfffffn"
- /* 6 */ "ooooooo"
-
- // Level 4
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ "jjjjjjj"
- /* 2 */ "kfffffk"
- /* 3 */ ".f...f."
- /* 4 */ "nfffffn"
- /* 5 */ "ooooooo"
- /* 6 */ "......."
-
- // Level 5
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ "......."
- /* 2 */ "jjjjjjj"
- /* 3 */ "fffffff"
- /* 4 */ "ooooooo"
- /* 5 */ "......."
- /* 6 */ ".......",
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "dmmmmmdmdmmmmmd"
+ /* 1 */ "meemeemmmeemeem"
+ /* 2 */ "memmmemmmeemeem"
+ /* 3 */ "memmmmmmmeemeem"
+ /* 4 */ "meemmemmmeemeem"
+ /* 5 */ "meemmemmmeemeem"
+ /* 6 */ "mmemmemmmeemeem"
+ /* 7 */ "mmememmmmeemeem"
+ /* 8 */ "dmmmmmdmdmmmmmd",
// Connectors:
- "-1: 3, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 0, 8: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -307,261 +345,202 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_100
+ }, // DoublePlantBed
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_103:
- // The data has been exported from the gallery Plains, area index 52, ID 103, created by Aloe_vera
+ // Forge:
+ // The data has been exported from the gallery Plains, area index 51, ID 102, created by Aloe_vera
{
// Size:
- 11, 7, 9, // SizeX = 11, SizeY = 7, SizeZ = 9
+ 12, 10, 11, // SizeX = 12, SizeY = 10, SizeZ = 11
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 6, 8, // MaxX, MaxY, MaxZ
+ 11, 9, 10, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h:102: 0\n" /* glasspane */
- "i: 64:12\n" /* wooddoorblock */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 7\n" /* woodstairs */
- "l: 50: 3\n" /* torch */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 6\n" /* wooddoorblock */
+ "j: 10: 0\n" /* lava */
+ "k: 54: 2\n" /* chest */
+ "l: 61: 2\n" /* furnace */
"m: 19: 0\n" /* sponge */
- "n: 50: 4\n" /* torch */
- "o: 53: 6\n" /* woodstairs */
- "p: 53: 3\n" /* woodstairs */,
+ "n:102: 0\n" /* glasspane */
+ "o: 64:12\n" /* wooddoorblock */
+ "p:139: 0\n" /* cobblestonewall */
+ "q:101: 0\n" /* ironbars */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 50: 2\n" /* torch */
+ "u: 50: 1\n" /* torch */
+ "v: 53: 6\n" /* woodstairs */
+ "w: 53: 3\n" /* woodstairs */
+ "x: 43: 0\n" /* doubleslab */
+ "y: 44: 0\n" /* step */,
// Block data:
// Level 0
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "....abc...."
- /* 1 */ ".ddddddddd."
- /* 2 */ ".ddddddddd."
- /* 3 */ ".ddddddddd."
- /* 4 */ ".ddddddddd."
- /* 5 */ ".ddddddddd."
- /* 6 */ ".ddddddddd."
- /* 7 */ ".ddddddddd."
- /* 8 */ "..........."
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "aaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaa"
// Level 1
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".efffgfffe."
- /* 2 */ ".f.......f."
- /* 3 */ ".f.......f."
- /* 4 */ ".f.......f."
- /* 5 */ ".f.......f."
- /* 6 */ ".f.......f."
- /* 7 */ ".efffffffe."
- /* 8 */ "..........."
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "bbbbbaaaaabb"
+ /* 1 */ "baaaaaaaaabb"
+ /* 2 */ "baaaaaaaaabb"
+ /* 3 */ "baaaaaaaaaaa"
+ /* 4 */ "baaaaaaaaaaa"
+ /* 5 */ "baaaaaaaaaaa"
+ /* 6 */ "baaaaaaaaaaa"
+ /* 7 */ "baaaaaaaaaaa"
+ /* 8 */ "baaaaabbbbbb"
+ /* 9 */ "baaaaabbbbbb"
+ /* 10 */ "bbbbbbbbbbbb"
// Level 2
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".ehhfifhhe."
- /* 2 */ ".h.......h."
- /* 3 */ ".h.......h."
- /* 4 */ ".f.......f."
- /* 5 */ ".h.......h."
- /* 6 */ ".h.......h."
- /* 7 */ ".ehhhfhhhe."
- /* 8 */ "..........."
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ ".....cddde.."
+ /* 1 */ ".ffffffffe.."
+ /* 2 */ ".ffffffffe.."
+ /* 3 */ ".fffffffffff"
+ /* 4 */ ".fffffffffff"
+ /* 5 */ ".fffffffffff"
+ /* 6 */ ".fffffffffff"
+ /* 7 */ ".fffffffffff"
+ /* 8 */ ".fffff.mmmmm"
+ /* 9 */ ".fffff.mmmmm"
+ /* 10 */ ".......mmmmm"
// Level 3
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "jjjjjjjjjjj"
- /* 1 */ "kfffffffffk"
- /* 2 */ ".f..l.l..f."
- /* 3 */ ".f.......f."
- /* 4 */ ".f.......f."
- /* 5 */ ".f.......f."
- /* 6 */ ".f...n...f."
- /* 7 */ "offfffffffo"
- /* 8 */ "ppppppppppp"
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".ghhhg......"
+ /* 2 */ ".h...i......"
+ /* 3 */ ".h...gf..fff"
+ /* 4 */ ".h...h...fjf"
+ /* 5 */ ".h...h...fjf"
+ /* 6 */ ".h...hkllfjf"
+ /* 7 */ ".h...gffffff"
+ /* 8 */ ".h...h.mmmmm"
+ /* 9 */ ".ghhhg.mmmmm"
+ /* 10 */ ".......mmmmm"
// Level 4
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "jjjjjjjjjjj"
- /* 2 */ "kfffffffffk"
- /* 3 */ ".f.......f."
- /* 4 */ ".f.......f."
- /* 5 */ ".f.......f."
- /* 6 */ "offfffffffo"
- /* 7 */ "ppppppppppp"
- /* 8 */ "..........."
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".gnnng......"
+ /* 2 */ ".n...o......"
+ /* 3 */ ".n...gp..p.f"
+ /* 4 */ ".n...n.....q"
+ /* 5 */ ".h...n.....q"
+ /* 6 */ ".n...n.....q"
+ /* 7 */ ".n...gfqqqqf"
+ /* 8 */ ".n...h.mmmmm"
+ /* 9 */ ".gnnng.mmmmm"
+ /* 10 */ ".......mmmmm"
// Level 5
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "jjjjjjjjjjj"
- /* 3 */ "kfffffffffk"
- /* 4 */ ".f.......f."
- /* 5 */ "offfffffffo"
- /* 6 */ "ppppppppppp"
- /* 7 */ "..........."
- /* 8 */ "..........."
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "rrrrrrr....."
+ /* 1 */ "shhhhhs....."
+ /* 2 */ ".h...h......"
+ /* 3 */ ".h..thf..fqf"
+ /* 4 */ ".h...h...q.f"
+ /* 5 */ ".h...h...q.f"
+ /* 6 */ ".hu..h...q.f"
+ /* 7 */ ".h...hffffff"
+ /* 8 */ ".h...h.mmmmm"
+ /* 9 */ "vhhhhhvmmmmm"
+ /* 10 */ "wwwwwwwmmmmm"
// Level 6
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "..........."
- /* 3 */ "jjjjjjjjjjj"
- /* 4 */ "fffffffffff"
- /* 5 */ "ppppppppppp"
- /* 6 */ "..........."
- /* 7 */ "..........."
- /* 8 */ "...........",
-
- // Connectors:
- "-1: 5, 0, 1: 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,
- }, // PlainsVillage_103
-
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_105:
- // The data has been exported from the gallery Plains, area index 54, ID 105, created by Aloe_vera
- {
- // Size:
- 7, 6, 9, // SizeX = 7, SizeY = 6, SizeZ = 9
-
- // Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 6, 5, 8, // MaxX, MaxY, MaxZ
-
- // Block definitions:
- ".: 0: 0\n" /* air */
- "a:170: 0\n" /* haybale */
- "b: 67: 0\n" /* stairs */
- "c: 67: 2\n" /* stairs */
- "d: 67: 1\n" /* stairs */
- "e: 4: 0\n" /* cobblestone */
- "f: 17: 0\n" /* tree */
- "g: 5: 0\n" /* wood */
- "h:170: 4\n" /* haybale */
- "i:170: 8\n" /* haybale */
- "j: 54: 2\n" /* chest */
- "k: 50: 4\n" /* torch */
- "l: 53: 0\n" /* woodstairs */
- "m: 19: 0\n" /* sponge */
- "n: 53: 5\n" /* woodstairs */
- "o: 53: 4\n" /* woodstairs */
- "p: 53: 1\n" /* woodstairs */,
-
- // Block data:
- // Level 0
- /* z\x* 0123456 */
- /* 0 */ "abcccd."
- /* 1 */ ".eeeee."
- /* 2 */ ".eeeee."
- /* 3 */ ".eeeee."
- /* 4 */ ".eeeee."
- /* 5 */ ".eeeee."
- /* 6 */ ".eeeee."
- /* 7 */ ".eeeee."
- /* 8 */ "......."
-
- // Level 1
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".f..af."
- /* 2 */ ".g...g."
- /* 3 */ ".ga.hg."
- /* 4 */ ".fihif."
- /* 5 */ ".gaaag."
- /* 6 */ ".gijag."
- /* 7 */ ".fgfgf."
- /* 8 */ "......."
-
- // Level 2
- /* z\x* 0123456 */
- /* 0 */ ".k...k."
- /* 1 */ ".f...f."
- /* 2 */ ".g...g."
- /* 3 */ ".g...g."
- /* 4 */ ".fh..f."
- /* 5 */ ".ghiag."
- /* 6 */ ".ghiig."
- /* 7 */ ".fgfgf."
- /* 8 */ "......."
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "rrrrrrr....."
+ /* 2 */ "shhhhhs....."
+ /* 3 */ ".h...hxxxxxx"
+ /* 4 */ ".h...hxyyyyx"
+ /* 5 */ ".h...hxyyyyx"
+ /* 6 */ ".h...hxyyyyx"
+ /* 7 */ ".h...hxxxxxx"
+ /* 8 */ "vhhhhhvmmmmm"
+ /* 9 */ "wwwwwwwmmmmm"
+ /* 10 */ ".......mmmmm"
- // Level 3
- /* z\x* 0123456 */
- /* 0 */ "ln...op"
- /* 1 */ "lgggggp"
- /* 2 */ "lg...gp"
- /* 3 */ "lg...gp"
- /* 4 */ "lg...gp"
- /* 5 */ "lgaa.gp"
- /* 6 */ "lgiaigp"
- /* 7 */ "lgggggp"
- /* 8 */ "ln...op"
+ // Level 7
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "rrrrrrr....."
+ /* 3 */ "shhhhhs....."
+ /* 4 */ ".h...h......"
+ /* 5 */ ".h...h......"
+ /* 6 */ ".h...h......"
+ /* 7 */ "vhhhhhv....."
+ /* 8 */ "wwwwwwwmmmmm"
+ /* 9 */ ".......mmmmm"
+ /* 10 */ ".......mmmmm"
- // Level 4
- /* z\x* 0123456 */
- /* 0 */ ".ln.op."
- /* 1 */ ".lgggp."
- /* 2 */ ".lg.gp."
- /* 3 */ ".lg.gp."
- /* 4 */ ".lg.gp."
- /* 5 */ ".lg.gp."
- /* 6 */ ".lg.gp."
- /* 7 */ ".lgggp."
- /* 8 */ ".ln.op."
+ // Level 8
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "rrrrrrr....."
+ /* 4 */ "shhhhhs....."
+ /* 5 */ ".h...h......"
+ /* 6 */ "vhhhhhv....."
+ /* 7 */ "wwwwwww....."
+ /* 8 */ ".......mmmmm"
+ /* 9 */ ".......mmmmm"
+ /* 10 */ ".......mmmmm"
- // Level 5
- /* z\x* 0123456 */
- /* 0 */ "..lgp.."
- /* 1 */ "..lgp.."
- /* 2 */ "..lgp.."
- /* 3 */ "..lgp.."
- /* 4 */ "..lgp.."
- /* 5 */ "..lgp.."
- /* 6 */ "..lgp.."
- /* 7 */ "..lgp.."
- /* 8 */ "..lgp..",
+ // Level 9
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "............"
+ /* 4 */ "rrrrrrr....."
+ /* 5 */ "hhhhhhh....."
+ /* 6 */ "wwwwwww....."
+ /* 7 */ "............"
+ /* 8 */ ".......mmmmm"
+ /* 9 */ ".......mmmmm"
+ /* 10 */ ".......mmmmm",
// Connectors:
- "-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 2, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -580,152 +559,66 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_105
+ }, // Forge
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_106:
- // The data has been exported from the gallery Plains, area index 55, ID 106, created by Aloe_vera
+ // SinglePlantBed:
+ // The data has been exported from the gallery Plains, area index 17, ID 60, created by Aloe_vera
{
// Size:
- 15, 8, 9, // SizeX = 15, SizeY = 8, SizeZ = 9
+ 10, 3, 7, // SizeX = 10, SizeY = 3, SizeZ = 7
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 14, 7, 8, // MaxX, MaxY, MaxZ
+ 9, 2, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 3: 0\n" /* dirt */
- "f: 17: 0\n" /* tree */
- "g:107: 0\n" /* fencegate */
- "h:107: 4\n" /* fencegate */
- "i: 5: 0\n" /* wood */
- "j:107: 6\n" /* fencegate */
- "k: 85: 0\n" /* fence */
- "l:170: 0\n" /* haybale */
- "m: 19: 0\n" /* sponge */
- "n:170: 4\n" /* haybale */
- "o:170: 8\n" /* haybale */
- "p: 50: 1\n" /* torch */
- "q: 50: 2\n" /* torch */
- "r: 53: 2\n" /* woodstairs */
- "s: 53: 7\n" /* woodstairs */
- "t: 53: 6\n" /* woodstairs */
- "u: 53: 3\n" /* woodstairs */,
+ "a: 3: 0\n" /* dirt */
+ "b: 17: 0\n" /* tree */
+ "c: 60: 7\n" /* tilleddirt */
+ "d: 8: 0\n" /* water */
+ "e: 59: 7\n" /* crops */
+ "m: 19: 0\n" /* sponge */,
// Block data:
// Level 0
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ ".abbbbbbbbbbbc."
- /* 1 */ ".ddddddddddddd."
- /* 2 */ ".deeeeeeeeeeed."
- /* 3 */ ".deeeeeeeeeeed."
- /* 4 */ ".deeeeeeeeeeed."
- /* 5 */ ".deeeeeeeeeeed."
- /* 6 */ ".deeeeeeeeeeed."
- /* 7 */ ".ddddddddddddd."
- /* 8 */ "..............."
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "aaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaa"
// Level 1
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".fghgighgigjgf."
- /* 2 */ ".k...k...k...k."
- /* 3 */ ".k...k...k...k."
- /* 4 */ ".k...k...k...k."
- /* 5 */ ".k...k...k...k."
- /* 6 */ ".kl..k..nko..k."
- /* 7 */ ".fkkkikkkikkkf."
- /* 8 */ "..............."
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "bbbbbbbbbb"
+ /* 1 */ "bccccccccb"
+ /* 2 */ "bccccccccb"
+ /* 3 */ "bddddddddb"
+ /* 4 */ "bccccccccb"
+ /* 5 */ "bccccccccb"
+ /* 6 */ "bbbbbbbbbb"
// Level 2
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".f...i...i...f."
- /* 2 */ "..............."
- /* 3 */ "..............."
- /* 4 */ "..............."
- /* 5 */ "..............."
- /* 6 */ "..............."
- /* 7 */ ".f...i...i...f."
- /* 8 */ "..............."
-
- // Level 3
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".fp.qip.qip.qf."
- /* 2 */ "..............."
- /* 3 */ "..............."
- /* 4 */ "..............."
- /* 5 */ "..............."
- /* 6 */ "..............."
- /* 7 */ ".f...i...i...f."
- /* 8 */ "..............."
-
- // Level 4
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "rrrrrrrrrrrrrrr"
- /* 1 */ "siiiiiiiiiiiiis"
- /* 2 */ ".i...........i."
- /* 3 */ ".i...........i."
- /* 4 */ ".i...........i."
- /* 5 */ ".i...........i."
- /* 6 */ ".i...........i."
- /* 7 */ "tiiiiiiiiiiiiit"
- /* 8 */ "uuuuuuuuuuuuuuu"
-
- // Level 5
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ "rrrrrrrrrrrrrrr"
- /* 2 */ "siiiiiiiiiiiiis"
- /* 3 */ ".i...........i."
- /* 4 */ ".i...........i."
- /* 5 */ ".i...........i."
- /* 6 */ "tiiiiiiiiiiiiit"
- /* 7 */ "uuuuuuuuuuuuuuu"
- /* 8 */ "..............."
-
- // Level 6
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ "..............."
- /* 2 */ "rrrrrrrrrrrrrrr"
- /* 3 */ "siiiiiiiiiiiiis"
- /* 4 */ ".i...........i."
- /* 5 */ "tiiiiiiiiiiiiit"
- /* 6 */ "uuuuuuuuuuuuuuu"
- /* 7 */ "..............."
- /* 8 */ "..............."
-
- // Level 7
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ "..............."
- /* 2 */ "..............."
- /* 3 */ "rrrrrrrrrrrrrrr"
- /* 4 */ "iiiiiiiiiiiiiii"
- /* 5 */ "uuuuuuuuuuuuuuu"
- /* 6 */ "..............."
- /* 7 */ "..............."
- /* 8 */ "...............",
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".eeeeeeee."
+ /* 2 */ ".eeeeeeee."
+ /* 3 */ ".........."
+ /* 4 */ ".eeeeeeee."
+ /* 5 */ ".eeeeeeee."
+ /* 6 */ "..........",
// Connectors:
- "-1: 7, 0, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 9, 1, 3: 5\n" /* Type -1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -744,157 +637,191 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_106
+ }, // SinglePlantBed
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_109:
+ // WoodenChurchMid:
// The data has been exported from the gallery Plains, area index 58, ID 109, created by Aloe_vera
{
// Size:
- 7, 14, 13, // SizeX = 7, SizeY = 14, SizeZ = 13
+ 7, 16, 13, // SizeX = 7, SizeY = 16, SizeZ = 13
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 6, 13, 12, // MaxX, MaxY, MaxZ
+ 6, 15, 12, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A: 85: 0\n" /* fence */
- "B:126: 8\n" /* woodenslab */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h: 65: 3\n" /* ladder */
- "i: 53: 3\n" /* woodstairs */
- "j: 53: 7\n" /* woodstairs */
- "k: 64:12\n" /* wooddoorblock */
- "l:102: 0\n" /* glasspane */
+ "A: 54: 2\n" /* chest */
+ "B: 50: 4\n" /* torch */
+ "C: 85: 0\n" /* fence */
+ "D:126: 8\n" /* woodenslab */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j: 65: 3\n" /* ladder */
+ "k: 53: 3\n" /* woodstairs */
+ "l: 53: 7\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 50: 1\n" /* torch */
- "o: 50: 2\n" /* torch */
- "p:171:14\n" /* carpet */
- "q: 50: 3\n" /* torch */
- "r: 53: 2\n" /* woodstairs */
- "s: 53: 0\n" /* woodstairs */
- "t: 53: 1\n" /* woodstairs */
- "u: 53: 5\n" /* woodstairs */
- "v: 53: 4\n" /* woodstairs */
- "w: 17: 4\n" /* tree */
- "x: 17: 8\n" /* tree */
- "y: 54: 2\n" /* chest */
- "z: 50: 4\n" /* torch */,
+ "n: 64:12\n" /* wooddoorblock */
+ "o:102: 0\n" /* glasspane */
+ "p: 50: 1\n" /* torch */
+ "q: 50: 2\n" /* torch */
+ "r:171:14\n" /* carpet */
+ "s: 50: 3\n" /* torch */
+ "t: 53: 2\n" /* woodstairs */
+ "u: 53: 0\n" /* woodstairs */
+ "v: 53: 1\n" /* woodstairs */
+ "w: 53: 5\n" /* woodstairs */
+ "x: 53: 4\n" /* woodstairs */
+ "y: 17: 4\n" /* tree */
+ "z: 17: 8\n" /* tree */,
// Block data:
// Level 0
/* z\x* 0123456 */
- /* 0 */ "..abc.."
- /* 1 */ ".ddddd."
- /* 2 */ ".ddddd."
- /* 3 */ ".ddddd."
- /* 4 */ ".ddddd."
- /* 5 */ ".ddddd."
- /* 6 */ ".ddddd."
- /* 7 */ ".ddddd."
- /* 8 */ ".ddddd."
- /* 9 */ ".ddddd."
- /* 10 */ ".ddddd."
- /* 11 */ ".ddddd."
- /* 12 */ "......."
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+ /* 7 */ "aaaaaaa"
+ /* 8 */ "aaaaaaa"
+ /* 9 */ "aaaaaaa"
+ /* 10 */ "aaaaaaa"
+ /* 11 */ "aaaaaaa"
+ /* 12 */ "aaaaaaa"
// Level 1
/* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".efgfe."
- /* 2 */ ".f..hf."
- /* 3 */ ".f...f."
- /* 4 */ ".f...f."
- /* 5 */ ".ei.ie."
- /* 6 */ ".f...f."
- /* 7 */ ".fi.if."
- /* 8 */ ".f...f."
- /* 9 */ ".f.j.f."
- /* 10 */ ".f...f."
- /* 11 */ ".efffe."
- /* 12 */ "......."
+ /* 0 */ "bbaaabb"
+ /* 1 */ "baaaaab"
+ /* 2 */ "baaaaab"
+ /* 3 */ "baaaaab"
+ /* 4 */ "baaaaab"
+ /* 5 */ "baaaaab"
+ /* 6 */ "baaaaab"
+ /* 7 */ "baaaaab"
+ /* 8 */ "baaaaab"
+ /* 9 */ "baaaaab"
+ /* 10 */ "baaaaab"
+ /* 11 */ "baaaaab"
+ /* 12 */ "bbbbbbb"
// Level 2
/* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".efkfe."
- /* 2 */ ".l..hl."
- /* 3 */ ".l...l."
- /* 4 */ ".l...l."
- /* 5 */ ".e...e."
- /* 6 */ ".l...l."
- /* 7 */ ".l...l."
- /* 8 */ ".fn.of."
- /* 9 */ ".l.p.l."
- /* 10 */ ".l...l."
- /* 11 */ ".ellle."
+ /* 0 */ "..cde.."
+ /* 1 */ ".fffff."
+ /* 2 */ ".fffff."
+ /* 3 */ ".fffff."
+ /* 4 */ ".fffff."
+ /* 5 */ ".fffff."
+ /* 6 */ ".fffff."
+ /* 7 */ ".fffff."
+ /* 8 */ ".fffff."
+ /* 9 */ ".fffff."
+ /* 10 */ ".fffff."
+ /* 11 */ ".fffff."
/* 12 */ "......."
// Level 3
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".efffe."
- /* 2 */ ".f.qhf."
- /* 3 */ ".f...f."
- /* 4 */ ".f...f."
- /* 5 */ "re...er"
- /* 6 */ "sf...ft"
- /* 7 */ "sf...ft"
- /* 8 */ "sf...ft"
- /* 9 */ "sf...ft"
- /* 10 */ "sf...ft"
- /* 11 */ "sefffft"
- /* 12 */ "su...vt"
+ /* 1 */ ".ghihg."
+ /* 2 */ ".h..jh."
+ /* 3 */ ".h...h."
+ /* 4 */ ".h...h."
+ /* 5 */ ".gk.kg."
+ /* 6 */ ".h...h."
+ /* 7 */ ".hk.kh."
+ /* 8 */ ".h...h."
+ /* 9 */ ".h.l.h."
+ /* 10 */ ".h...h."
+ /* 11 */ ".ghhhg."
+ /* 12 */ "......."
// Level 4
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ewwwe."
- /* 2 */ ".xffhx."
- /* 3 */ ".xfffx."
- /* 4 */ ".xfffx."
- /* 5 */ ".ewwwe."
- /* 6 */ ".sf.ft."
- /* 7 */ ".sf.ft."
- /* 8 */ ".sf.ft."
- /* 9 */ ".sf.ft."
- /* 10 */ ".sf.ft."
- /* 11 */ ".sffft."
- /* 12 */ ".su.vt."
+ /* 1 */ ".ghnhg."
+ /* 2 */ ".o..jo."
+ /* 3 */ ".o...o."
+ /* 4 */ ".o...o."
+ /* 5 */ ".g...g."
+ /* 6 */ ".o...o."
+ /* 7 */ ".o...o."
+ /* 8 */ ".hp.qh."
+ /* 9 */ ".o.r.o."
+ /* 10 */ ".o...o."
+ /* 11 */ ".gooog."
+ /* 12 */ "......."
// Level 5
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".eflfe."
- /* 2 */ ".f..hf."
- /* 3 */ ".f...f."
- /* 4 */ ".f.y.f."
- /* 5 */ ".efffe."
- /* 6 */ "..sft.."
- /* 7 */ "..sft.."
- /* 8 */ "..sft.."
- /* 9 */ "..sft.."
- /* 10 */ "..sft.."
- /* 11 */ "..sft.."
- /* 12 */ "..sft.."
+ /* 1 */ ".ghhhg."
+ /* 2 */ ".h.sjh."
+ /* 3 */ ".h...h."
+ /* 4 */ ".h...h."
+ /* 5 */ "tg...gt"
+ /* 6 */ "uh...hv"
+ /* 7 */ "uh...hv"
+ /* 8 */ "uh...hv"
+ /* 9 */ "uh...hv"
+ /* 10 */ "uh...hv"
+ /* 11 */ "ughhhhv"
+ /* 12 */ "uw...xv"
// Level 6
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".eflfe."
- /* 2 */ ".f..hf."
- /* 3 */ ".l...l."
- /* 4 */ ".f...f."
- /* 5 */ ".efffe."
+ /* 1 */ ".gyyyg."
+ /* 2 */ ".zhhjz."
+ /* 3 */ ".zhhhz."
+ /* 4 */ ".zhhhz."
+ /* 5 */ ".gyyyg."
+ /* 6 */ ".uh.hv."
+ /* 7 */ ".uh.hv."
+ /* 8 */ ".uh.hv."
+ /* 9 */ ".uh.hv."
+ /* 10 */ ".uh.hv."
+ /* 11 */ ".uhhhv."
+ /* 12 */ ".uw.xv."
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ghohg."
+ /* 2 */ ".h..jh."
+ /* 3 */ ".h...h."
+ /* 4 */ ".h.A.h."
+ /* 5 */ ".ghhhg."
+ /* 6 */ "..uhv.."
+ /* 7 */ "..uhv.."
+ /* 8 */ "..uhv.."
+ /* 9 */ "..uhv.."
+ /* 10 */ "..uhv.."
+ /* 11 */ "..uhv.."
+ /* 12 */ "..uhv.."
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ghohg."
+ /* 2 */ ".h..jh."
+ /* 3 */ ".o...o."
+ /* 4 */ ".h...h."
+ /* 5 */ ".ghhhg."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -903,14 +830,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 7
+ // Level 9
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".eflfe."
- /* 2 */ ".f..hf."
- /* 3 */ ".f...f."
- /* 4 */ ".f.z.f."
- /* 5 */ ".efffe."
+ /* 1 */ ".ghohg."
+ /* 2 */ ".h..jh."
+ /* 3 */ ".h...h."
+ /* 4 */ ".h.B.h."
+ /* 5 */ ".ghhhg."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -919,14 +846,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 8
+ // Level 10
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ewwwe."
- /* 2 */ ".xffhx."
- /* 3 */ ".xfffx."
- /* 4 */ ".xfffx."
- /* 5 */ ".ewwwe."
+ /* 1 */ ".gyyyg."
+ /* 2 */ ".zhhjz."
+ /* 3 */ ".zhhhz."
+ /* 4 */ ".zhhhz."
+ /* 5 */ ".gyyyg."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -935,14 +862,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 9
+ // Level 11
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".eAAAe."
- /* 2 */ ".A...A."
- /* 3 */ ".A...A."
- /* 4 */ ".A...A."
- /* 5 */ ".eAAAe."
+ /* 1 */ ".gCCCg."
+ /* 2 */ ".C...C."
+ /* 3 */ ".C...C."
+ /* 4 */ ".C...C."
+ /* 5 */ ".gCCCg."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -951,14 +878,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 10
+ // Level 12
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".e...e."
+ /* 1 */ ".g...g."
/* 2 */ "......."
/* 3 */ "......."
/* 4 */ "......."
- /* 5 */ ".e...e."
+ /* 5 */ ".g...g."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -967,15 +894,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 11
+ // Level 13
/* z\x* 0123456 */
- /* 0 */ "su...vt"
- /* 1 */ "sefffet"
- /* 2 */ "sfBBBft"
- /* 3 */ "sfBBBft"
- /* 4 */ "sfBBBft"
- /* 5 */ "sffffft"
- /* 6 */ "su...vt"
+ /* 0 */ "uw...xv"
+ /* 1 */ "ughhhgv"
+ /* 2 */ "uhDDDhv"
+ /* 3 */ "uhDDDhv"
+ /* 4 */ "uhDDDhv"
+ /* 5 */ "uhhhhhv"
+ /* 6 */ "uw...xv"
/* 7 */ "......."
/* 8 */ "......."
/* 9 */ "......."
@@ -983,15 +910,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 12
+ // Level 14
/* z\x* 0123456 */
- /* 0 */ ".su.vt."
- /* 1 */ ".sffft."
- /* 2 */ ".sffft."
- /* 3 */ ".sffft."
- /* 4 */ ".sffft."
- /* 5 */ ".sffft."
- /* 6 */ ".su.vt."
+ /* 0 */ ".uw.xv."
+ /* 1 */ ".uhhhv."
+ /* 2 */ ".uhhhv."
+ /* 3 */ ".uhhhv."
+ /* 4 */ ".uhhhv."
+ /* 5 */ ".uhhhv."
+ /* 6 */ ".uw.xv."
/* 7 */ "......."
/* 8 */ "......."
/* 9 */ "......."
@@ -999,15 +926,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 13
+ // Level 15
/* z\x* 0123456 */
- /* 0 */ "..sft.."
- /* 1 */ "..sft.."
- /* 2 */ "..sft.."
- /* 3 */ "..sft.."
- /* 4 */ "..sft.."
- /* 5 */ "..sft.."
- /* 6 */ "..sft.."
+ /* 0 */ "..uhv.."
+ /* 1 */ "..uhv.."
+ /* 2 */ "..uhv.."
+ /* 3 */ "..uhv.."
+ /* 4 */ "..uhv.."
+ /* 5 */ "..uhv.."
+ /* 6 */ "..uhv.."
/* 7 */ "......."
/* 8 */ "......."
/* 9 */ "......."
@@ -1016,7 +943,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".......",
// Connectors:
- "-1: 3, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 3, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1028,66 +955,148 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 20,
// DepthWeight:
"",
// AddWeightIfSame:
0,
- }, // PlainsVillage_109
+ }, // WoodenChurchMid
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_20:
- // The data has been exported from the gallery Plains, area index 5, ID 20, created by tonibm1999
+ // WoodenGranary:
+ // The data has been exported from the gallery Plains, area index 54, ID 105, created by Aloe_vera
{
// Size:
- 15, 2, 9, // SizeX = 15, SizeY = 2, SizeZ = 9
+ 7, 8, 9, // SizeX = 7, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 14, 1, 8, // MaxX, MaxY, MaxZ
+ 6, 7, 8, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 17: 0\n" /* tree */
- "b: 60: 7\n" /* tilleddirt */
- "c: 8: 0\n" /* water */
- "d: 50: 5\n" /* torch */
- "e: 59: 7\n" /* crops */
- "m: 19: 0\n" /* sponge */,
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c:170: 0\n" /* haybale */
+ "d: 67: 0\n" /* stairs */
+ "e: 67: 2\n" /* stairs */
+ "f: 67: 1\n" /* stairs */
+ "g: 4: 0\n" /* cobblestone */
+ "h: 17: 0\n" /* tree */
+ "i: 5: 0\n" /* wood */
+ "j:170: 4\n" /* haybale */
+ "k:170: 8\n" /* haybale */
+ "l: 54: 2\n" /* chest */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 4\n" /* torch */
+ "o: 53: 0\n" /* woodstairs */
+ "p: 53: 5\n" /* woodstairs */
+ "q: 53: 4\n" /* woodstairs */
+ "r: 53: 1\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "aaaaaaamaaaaaaa"
- /* 1 */ "abbcbbamabbcbba"
- /* 2 */ "abbcbbamabbcbba"
- /* 3 */ "abbcbbamabbcbba"
- /* 4 */ "abbcbbamabbcbba"
- /* 5 */ "abbcbbamabbcbba"
- /* 6 */ "abbcbbamabbcbba"
- /* 7 */ "abbcbbamabbcbba"
- /* 8 */ "aaaaaaamaaaaaaa"
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+ /* 7 */ "aaaaaaa"
+ /* 8 */ "aaaaaaa"
// Level 1
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "dmmmmmdmdmmmmmd"
- /* 1 */ "meemeemmmeemeem"
- /* 2 */ "memmmemmmeemeem"
- /* 3 */ "memmmmmmmeemeem"
- /* 4 */ "meemmemmmeemeem"
- /* 5 */ "meemmemmmeemeem"
- /* 6 */ "mmemmemmmeemeem"
- /* 7 */ "mmememmmmeemeem"
- /* 8 */ "dmmmmmdmdmmmmmd",
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaab"
+ /* 1 */ "baaaaab"
+ /* 2 */ "baaaaab"
+ /* 3 */ "baaaaab"
+ /* 4 */ "baaaaab"
+ /* 5 */ "baaaaab"
+ /* 6 */ "baaaaab"
+ /* 7 */ "baaaaab"
+ /* 8 */ "bbbbbbb"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "cdeeef."
+ /* 1 */ ".ggggg."
+ /* 2 */ ".ggggg."
+ /* 3 */ ".ggggg."
+ /* 4 */ ".ggggg."
+ /* 5 */ ".ggggg."
+ /* 6 */ ".ggggg."
+ /* 7 */ ".ggggg."
+ /* 8 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".h..ch."
+ /* 2 */ ".i...i."
+ /* 3 */ ".ic.ji."
+ /* 4 */ ".hkjkh."
+ /* 5 */ ".iccci."
+ /* 6 */ ".iklci."
+ /* 7 */ ".hihih."
+ /* 8 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ ".n...n."
+ /* 1 */ ".h...h."
+ /* 2 */ ".i...i."
+ /* 3 */ ".i...i."
+ /* 4 */ ".hj..h."
+ /* 5 */ ".ijkci."
+ /* 6 */ ".ijkki."
+ /* 7 */ ".hihih."
+ /* 8 */ "......."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "op...qr"
+ /* 1 */ "oiiiiir"
+ /* 2 */ "oi...ir"
+ /* 3 */ "oi...ir"
+ /* 4 */ "oi...ir"
+ /* 5 */ "oicc.ir"
+ /* 6 */ "oikckir"
+ /* 7 */ "oiiiiir"
+ /* 8 */ "op...qr"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ ".op.qr."
+ /* 1 */ ".oiiir."
+ /* 2 */ ".oi.ir."
+ /* 3 */ ".oi.ir."
+ /* 4 */ ".oi.ir."
+ /* 5 */ ".oi.ir."
+ /* 6 */ ".oi.ir."
+ /* 7 */ ".oiiir."
+ /* 8 */ ".op.qr."
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "..oir.."
+ /* 1 */ "..oir.."
+ /* 2 */ "..oir.."
+ /* 3 */ "..oir.."
+ /* 4 */ "..oir.."
+ /* 5 */ "..oir.."
+ /* 6 */ "..oir.."
+ /* 7 */ "..oir.."
+ /* 8 */ "..oir..",
// Connectors:
- "-1: 7, 0, 8: 3\n" /* Type -1, direction Z+ */,
+ "-1: 3, 2, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1106,139 +1115,169 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_20
+ }, // WoodenGranary
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_26:
- // The data has been exported from the gallery Plains, area index 9, ID 26, created by Aloe_vera
+ // WoodenHouse10x7Library:
+ // The data has been exported from the gallery Plains, area index 47, ID 98, created by Aloe_vera
{
// Size:
- 10, 6, 11, // SizeX = 10, SizeY = 6, SizeZ = 11
+ 12, 9, 9, // SizeX = 12, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 9, 5, 10, // MaxX, MaxY, MaxZ
+ 11, 8, 8, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 4: 0\n" /* cobblestone */
- "b: 5: 0\n" /* wood */
- "c: 2: 0\n" /* grass */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
"d: 67: 2\n" /* stairs */
- "e: 43: 0\n" /* doubleslab */
- "f: 67: 0\n" /* stairs */
- "g: 67: 3\n" /* stairs */
- "h: 17: 0\n" /* tree */
- "i: 53: 1\n" /* woodstairs */
- "j: 85: 0\n" /* fence */
- "k: 53: 0\n" /* woodstairs */
- "l: 64: 6\n" /* wooddoorblock */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j: 64: 5\n" /* wooddoorblock */
+ "k: 53: 3\n" /* woodstairs */
+ "l: 85: 0\n" /* fence */
"m: 19: 0\n" /* sponge */
- "n: 64: 0\n" /* wooddoorblock */
- "o:102: 0\n" /* glasspane */
- "p: 72: 0\n" /* woodplate */
- "q: 64:12\n" /* wooddoorblock */
- "r: 64: 8\n" /* wooddoorblock */
- "s: 53: 5\n" /* woodstairs */
- "t: 53: 4\n" /* woodstairs */
- "u: 50: 1\n" /* torch */
- "v: 50: 2\n" /* torch */,
+ "n: 53: 2\n" /* woodstairs */
+ "o: 53: 1\n" /* woodstairs */
+ "p: 53: 0\n" /* woodstairs */
+ "q:102: 0\n" /* glasspane */
+ "r: 64:12\n" /* wooddoorblock */
+ "s: 50: 3\n" /* torch */
+ "t: 72: 0\n" /* woodplate */
+ "u: 53: 7\n" /* woodstairs */
+ "v: 47: 0\n" /* bookshelf */
+ "w: 50: 1\n" /* torch */
+ "x: 50: 2\n" /* torch */
+ "y: 53: 6\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "......mmmm"
- /* 1 */ ".aaaaammmm"
- /* 2 */ ".abbbammmm"
- /* 3 */ ".abbbacccc"
- /* 4 */ "daeeeacccc"
- /* 5 */ "faeeeecccc"
- /* 6 */ "gaeeeacccc"
- /* 7 */ ".aeeeacccc"
- /* 8 */ ".aeeeacccc"
- /* 9 */ ".aaaaammmm"
- /* 10 */ "......mmmm"
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "aaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaa"
// Level 1
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "......mmmm"
- /* 1 */ ".hbbbhmmmm"
- /* 2 */ ".bijkbmmmm"
- /* 3 */ ".b...bjjjj"
- /* 4 */ ".b...b...j"
- /* 5 */ ".l...n...j"
- /* 6 */ ".b...b...j"
- /* 7 */ ".bee.b...j"
- /* 8 */ ".b...bjjjj"
- /* 9 */ ".hbbbhmmmm"
- /* 10 */ "......mmmm"
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "bbbbaaaabbbb"
+ /* 1 */ "baaaaaaaaaab"
+ /* 2 */ "baaaaaaaaaab"
+ /* 3 */ "baaaaaaaaaab"
+ /* 4 */ "baaaaaaaaaab"
+ /* 5 */ "baaaaaaaaaab"
+ /* 6 */ "baaaaaaaaaab"
+ /* 7 */ "baaaaaaaaaab"
+ /* 8 */ "bbbbbbbbbbbb"
// Level 2
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "......mmmm"
- /* 1 */ ".hooohmmmm"
- /* 2 */ ".o.p.ommmm"
- /* 3 */ ".o...o...."
- /* 4 */ ".b...b...."
- /* 5 */ ".q...r...."
- /* 6 */ ".b...b...."
- /* 7 */ ".o...o...."
- /* 8 */ ".o...o...."
- /* 9 */ ".hooohmmmm"
- /* 10 */ "......mmmm"
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "....cdde...."
+ /* 1 */ ".ffffffffff."
+ /* 2 */ ".ffffffffff."
+ /* 3 */ ".ffffffffff."
+ /* 4 */ ".ffffffffff."
+ /* 5 */ ".ffffffffff."
+ /* 6 */ ".ffffffffff."
+ /* 7 */ ".ffffffffff."
+ /* 8 */ "............"
// Level 3
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "ks...timmm"
- /* 1 */ "khbbbhimmm"
- /* 2 */ "kb...bimmm"
- /* 3 */ "kb...bi..."
- /* 4 */ "kbu.vbi..."
- /* 5 */ "kb...bi..."
- /* 6 */ "kbu.vbi..."
- /* 7 */ "kb...bi..."
- /* 8 */ "kb...bi..."
- /* 9 */ "khbbbhimmm"
- /* 10 */ "ks...timmm"
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".ghhhijhhhg."
+ /* 2 */ ".h........h."
+ /* 3 */ ".hk......kh."
+ /* 4 */ ".hl......lh."
+ /* 5 */ ".hn......nh."
+ /* 6 */ ".h.olpolp.h."
+ /* 7 */ ".ghhhhhhhhg."
+ /* 8 */ "............"
// Level 4
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "mks.timmmm"
- /* 1 */ "mkbbbimmmm"
- /* 2 */ "mkb.bimmmm"
- /* 3 */ "mkb.bim..."
- /* 4 */ "mkb.bim..."
- /* 5 */ "mkb.bim..."
- /* 6 */ "mkb.bim..."
- /* 7 */ "mkb.bim..."
- /* 8 */ "mkb.bim..."
- /* 9 */ "mkbbbimmmm"
- /* 10 */ "mks.timmmm"
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".gqqhrrhqqg."
+ /* 2 */ ".q..s..s..q."
+ /* 3 */ ".q........q."
+ /* 4 */ ".ht......th."
+ /* 5 */ ".q........q."
+ /* 6 */ ".q..t..t..q."
+ /* 7 */ ".gqqhqqhqqg."
+ /* 8 */ "............"
// Level 5
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "mmkbimmmmm"
- /* 1 */ "mmkbimmmmm"
- /* 2 */ "mmkbimmmmm"
- /* 3 */ "mmkbimm..."
- /* 4 */ "mmkbimm..."
- /* 5 */ "mmkbimm..."
- /* 6 */ "mmkbimm..."
- /* 7 */ "mmkbimm..."
- /* 8 */ "mmkbimm..."
- /* 9 */ "mmkbimmmmm"
- /* 10 */ "mmkbimmmmm",
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "nnnnnnnnnnnn"
+ /* 1 */ "uhhhhhhhhhhu"
+ /* 2 */ ".hvvvvvvvvh."
+ /* 3 */ ".h........h."
+ /* 4 */ ".hw......xh."
+ /* 5 */ ".h........h."
+ /* 6 */ ".hvvvvvvvvh."
+ /* 7 */ "yhhhhhhhhhhy"
+ /* 8 */ "kkkkkkkkkkkk"
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "nnnnnnnnnnnn"
+ /* 2 */ "uhhhhhhhhhhu"
+ /* 3 */ ".hvvvvvvvvh."
+ /* 4 */ ".h........h."
+ /* 5 */ ".hvvvvvvvvh."
+ /* 6 */ "yhhhhhhhhhhy"
+ /* 7 */ "kkkkkkkkkkkk"
+ /* 8 */ "............"
+
+ // Level 7
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "nnnnnnnnnnnn"
+ /* 3 */ "uhhhhhhhhhhu"
+ /* 4 */ ".h........h."
+ /* 5 */ "yhhhhhhhhhhy"
+ /* 6 */ "kkkkkkkkkkkk"
+ /* 7 */ "............"
+ /* 8 */ "............"
+
+ // Level 8
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "nnnnnnnnnnnn"
+ /* 4 */ "hhhhhhhhhhhh"
+ /* 5 */ "kkkkkkkkkkkk"
+ /* 6 */ "............"
+ /* 7 */ "............"
+ /* 8 */ "............",
// Connectors:
- "-1: 1, 0, 5: 4\n" /* Type -1, direction X- */,
+ "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1257,257 +1296,124 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_26
+ }, // WoodenHouse10x7Library
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_4:
- // The data has been exported from the gallery Plains, area index 0, ID 4, created by Aloe_vera
+ // WoodenHouse5x5:
+ // The data has been exported from the gallery Plains, area index 49, ID 100, created by Aloe_vera
{
// Size:
- 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
+ 7, 8, 7, // SizeX = 7, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 15, 6, 15, // MaxX, MaxY, MaxZ
+ 6, 7, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 5: 0\n" /* wood */
- "f: 67: 3\n" /* stairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
"g: 17: 0\n" /* tree */
- "h: 64: 7\n" /* wooddoorblock */
- "i: 64: 5\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j: 64:12\n" /* wooddoorblock */
+ "k:102: 0\n" /* glasspane */
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 1\n" /* woodstairs */
- "o: 53: 7\n" /* woodstairs */
+ "n: 53: 7\n" /* woodstairs */
+ "o: 50: 3\n" /* torch */
"p: 53: 6\n" /* woodstairs */
- "q: 53: 3\n" /* woodstairs */
- "r: 53: 0\n" /* woodstairs */
- "s: 53: 5\n" /* woodstairs */
- "t: 53: 4\n" /* woodstairs */
- "u: 50: 3\n" /* torch */
- "v: 50: 2\n" /* torch */
- "w: 50: 4\n" /* torch */
- "x: 50: 1\n" /* torch */,
+ "q: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "........abc....."
- /* 1 */ ".dddddddddddddd."
- /* 2 */ ".deeeeeeeeeeeed."
- /* 3 */ ".deeeeeeeeeeeed."
- /* 4 */ ".deeeeeeeeeeeed."
- /* 5 */ ".deeeeeeeeeeeed."
- /* 6 */ ".deeeeeeeeeeeed."
- /* 7 */ ".ddddddddeeeeed."
- /* 8 */ "mmmmmafcdeeeeed."
- /* 9 */ "mmmmmmmmdeeeeed."
- /* 10 */ "mmmmmmmmdeeeeed."
- /* 11 */ "mmmmmmmmdeeeeed."
- /* 12 */ "mmmmmmmmdeeeeed."
- /* 13 */ "mmmmmmmmdeeeeed."
- /* 14 */ "mmmmmmmmddddddd."
- /* 15 */ "mmmmmmmm........"
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
// Level 1
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ ".geeeeeeghgeeeg."
- /* 2 */ ".e............e."
- /* 3 */ ".e............e."
- /* 4 */ ".e............e."
- /* 5 */ ".e............e."
- /* 6 */ ".e............e."
- /* 7 */ ".geeeeieg.....e."
- /* 8 */ "mmmmmm.me.....e."
- /* 9 */ "mmmmmmmme.....e."
- /* 10 */ "mmmmmmmme.....e."
- /* 11 */ "mmmmmmmme.....e."
- /* 12 */ "mmmmmmmme.....e."
- /* 13 */ "mmmmmmmme.....e."
- /* 14 */ "mmmmmmmmgeeeeeg."
- /* 15 */ "mmmmmmmm........"
+ /* z\x* 0123456 */
+ /* 0 */ "bbaaabb"
+ /* 1 */ "baaaaab"
+ /* 2 */ "baaaaab"
+ /* 3 */ "baaaaab"
+ /* 4 */ "baaaaab"
+ /* 5 */ "baaaaab"
+ /* 6 */ "bbbbbbb"
// Level 2
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ ".gejjejjgkgjjeg."
- /* 2 */ ".j............e."
- /* 3 */ ".j............j."
- /* 4 */ ".j............j."
- /* 5 */ ".j............e."
- /* 6 */ ".j............j."
- /* 7 */ ".gejjekeg.....j."
- /* 8 */ "mmmmmm.me.....e."
- /* 9 */ "mmmmmmmmj.....j."
- /* 10 */ "mmmmmmmmj.....j."
- /* 11 */ "mmmmmmmme.....e."
- /* 12 */ "mmmmmmmmj.....j."
- /* 13 */ "mmmmmmmmj.....j."
- /* 14 */ "mmmmmmmmgjjjjjg."
- /* 15 */ "mmmmmmmm........"
+ /* z\x* 0123456 */
+ /* 0 */ "..cde.."
+ /* 1 */ ".fffff."
+ /* 2 */ ".fffff."
+ /* 3 */ ".fffff."
+ /* 4 */ ".fffff."
+ /* 5 */ ".fffff."
+ /* 6 */ "......."
// Level 3
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "llllllllllllllln"
- /* 1 */ "ogeeeeeegegeeegn"
- /* 2 */ ".e............en"
- /* 3 */ ".e............en"
- /* 4 */ ".e............en"
- /* 5 */ ".e............en"
- /* 6 */ ".e............en"
- /* 7 */ "pgeeeeeeg.....en"
- /* 8 */ "qqqqqqqre.....en"
- /* 9 */ "mmmmmmmre.....en"
- /* 10 */ "mmmmmmmre.....en"
- /* 11 */ "mmmmmmmre.....en"
- /* 12 */ "mmmmmmmre.....en"
- /* 13 */ "mmmmmmmre.....en"
- /* 14 */ "mmmmmmmrgeeeeegn"
- /* 15 */ "mmmmmmmrs.....tn"
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ghihg."
+ /* 2 */ ".h...h."
+ /* 3 */ ".h...h."
+ /* 4 */ ".h...h."
+ /* 5 */ ".ghhhg."
+ /* 6 */ "......."
// Level 4
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ "lllllllllllllll."
- /* 2 */ "oeeeeeeeeeeeeen."
- /* 3 */ ".e.........u.en."
- /* 4 */ ".e..........ven."
- /* 5 */ ".e......w....en."
- /* 6 */ "peeeeeeeee...en."
- /* 7 */ "qqqqqqqqrex..en."
- /* 8 */ "mmmmmmmmre...en."
- /* 9 */ "mmmmmmmmre...en."
- /* 10 */ "mmmmmmmmre...en."
- /* 11 */ "mmmmmmmmre...en."
- /* 12 */ "mmmmmmmmre...en."
- /* 13 */ "mmmmmmmmre...en."
- /* 14 */ "mmmmmmmmreeeeen."
- /* 15 */ "mmmmmmmmrs...tn."
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ghjhg."
+ /* 2 */ ".k...k."
+ /* 3 */ ".k...k."
+ /* 4 */ ".k...k."
+ /* 5 */ ".gkkkg."
+ /* 6 */ "......."
// Level 5
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ "................"
- /* 2 */ "llllllllllllln.."
- /* 3 */ "oeeeeeeeeeeeen.."
- /* 4 */ ".ex.........en.."
- /* 5 */ "peeeeeeeeee.en.."
- /* 6 */ "qqqqqqqqqre.en.."
- /* 7 */ ".........re.en.."
- /* 8 */ "mmmmmmmm.re.en.."
- /* 9 */ "mmmmmmmm.re.en.."
- /* 10 */ "mmmmmmmm.re.en.."
- /* 11 */ "mmmmmmmm.re.en.."
- /* 12 */ "mmmmmmmm.re.en.."
- /* 13 */ "mmmmmmmm.rewen.."
- /* 14 */ "mmmmmmmm.reeen.."
- /* 15 */ "mmmmmmmm.rs.tn.."
+ /* z\x* 0123456 */
+ /* 0 */ "lllllll"
+ /* 1 */ "nhhhhhn"
+ /* 2 */ ".ho.oh."
+ /* 3 */ ".h...h."
+ /* 4 */ ".h...h."
+ /* 5 */ "phhhhhp"
+ /* 6 */ "qqqqqqq"
// Level 6
- /* z\x* 111111 */
- /* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ "................"
- /* 2 */ "................"
- /* 3 */ "lllllllllllll..."
- /* 4 */ "eeeeeeeeeeeen..."
- /* 5 */ "qqqqqqqqqqren..."
- /* 6 */ "mmmmmmmmmmren..."
- /* 7 */ "mmmmmmmmmmren..."
- /* 8 */ "mmmmmmmmmmren..."
- /* 9 */ "mmmmmmmmmmren..."
- /* 10 */ "mmmmmmmmmmren..."
- /* 11 */ "mmmmmmmmmmren..."
- /* 12 */ "mmmmmmmmmmren..."
- /* 13 */ "mmmmmmmmmmren..."
- /* 14 */ "mmmmmmmmmmren..."
- /* 15 */ "mmmmmmmmmmren...",
-
- // Connectors:
- "-1: 9, 0, 1: 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,
- }, // PlainsVillage_4
-
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_60:
- // The data has been exported from the gallery Plains, area index 17, ID 60, created by Aloe_vera
- {
- // Size:
- 10, 2, 7, // SizeX = 10, SizeY = 2, SizeZ = 7
-
- // Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 9, 1, 6, // MaxX, MaxY, MaxZ
-
- // Block definitions:
- ".: 0: 0\n" /* air */
- "a: 17: 0\n" /* tree */
- "b: 60: 7\n" /* tilleddirt */
- "c: 8: 0\n" /* water */
- "d: 59: 7\n" /* crops */
- "m: 19: 0\n" /* sponge */,
-
- // Block data:
- // Level 0
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ "aaaaaaaaaa"
- /* 1 */ "abbbbbbbba"
- /* 2 */ "abbbbbbbba"
- /* 3 */ "acccccccca"
- /* 4 */ "abbbbbbbba"
- /* 5 */ "abbbbbbbba"
- /* 6 */ "aaaaaaaaaa"
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "lllllll"
+ /* 2 */ "nhhhhhn"
+ /* 3 */ ".h...h."
+ /* 4 */ "phhhhhp"
+ /* 5 */ "qqqqqqq"
+ /* 6 */ "......."
- // Level 1
- /* z\x* */
- /* * 0123456789 */
- /* 0 */ ".........."
- /* 1 */ ".dddddddd."
- /* 2 */ ".dddddddd."
- /* 3 */ ".........."
- /* 4 */ ".dddddddd."
- /* 5 */ ".dddddddd."
- /* 6 */ "..........",
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "lllllll"
+ /* 3 */ "hhhhhhh"
+ /* 4 */ "qqqqqqq"
+ /* 5 */ "......."
+ /* 6 */ ".......",
// Connectors:
- "-1: 9, 0, 3: 5\n" /* Type -1, direction X+ */,
+ "-1: 3, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1526,128 +1432,124 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_60
+ }, // WoodenHouse5x5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_66:
- // The data has been exported from the gallery Plains, area index 23, ID 66, created by xoft
+ // WoodenHouse7x5:
+ // The data has been exported from the gallery Plains, area index 40, ID 91, created by xoft
{
// Size:
- 12, 7, 7, // SizeX = 12, SizeY = 7, SizeZ = 7
+ 9, 8, 7, // SizeX = 9, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 11, 6, 6, // MaxX, MaxY, MaxZ
+ 8, 7, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 2: 0\n" /* grass */
- "b: 3: 0\n" /* dirt */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
"c: 67: 0\n" /* stairs */
"d: 67: 2\n" /* stairs */
"e: 67: 1\n" /* stairs */
"f: 4: 0\n" /* cobblestone */
- "g: 64: 7\n" /* wooddoorblock */
- "h: 53: 3\n" /* woodstairs */
- "i: 53: 1\n" /* woodstairs */
- "j: 85: 0\n" /* fence */
- "k: 53: 0\n" /* woodstairs */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n:102: 0\n" /* glasspane */
- "o: 64:12\n" /* wooddoorblock */
- "p: 50: 3\n" /* torch */
- "q: 72: 0\n" /* woodplate */
- "r: 50: 4\n" /* torch */
- "s: 53: 7\n" /* woodstairs */
- "t: 47: 0\n" /* bookshelf */
- "u: 50: 1\n" /* torch */
- "v: 50: 2\n" /* torch */
- "w: 53: 6\n" /* woodstairs */
- "x: 5: 0\n" /* wood */,
+ "n: 53: 7\n" /* woodstairs */
+ "o: 50: 3\n" /* torch */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "aaaaaaabbbaa"
- /* 1 */ "abbbbbbbbbba"
- /* 2 */ "abbbbbbbbbba"
- /* 3 */ "abbbbbbbbbba"
- /* 4 */ "abbbbbbbbbba"
- /* 5 */ "abbbbbbbbbba"
- /* 6 */ "aaaaaaaaaaaa"
+ /* z\x* 012345678 */
+ /* 0 */ "aaaaaaaaa"
+ /* 1 */ "aaaaaaaaa"
+ /* 2 */ "aaaaaaaaa"
+ /* 3 */ "aaaaaaaaa"
+ /* 4 */ "aaaaaaaaa"
+ /* 5 */ "aaaaaaaaa"
+ /* 6 */ "aaaaaaaaa"
// Level 1
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ ".......cde.."
- /* 1 */ ".ffffffffff."
- /* 2 */ ".ffffffffff."
- /* 3 */ ".ffffffffff."
- /* 4 */ ".ffffffffff."
- /* 5 */ ".ffffffffff."
- /* 6 */ "............"
+ /* z\x* 012345678 */
+ /* 0 */ "bbbaaabbb"
+ /* 1 */ "baaaaaaab"
+ /* 2 */ "baaaaaaab"
+ /* 3 */ "baaaaaaab"
+ /* 4 */ "baaaaaaab"
+ /* 5 */ "baaaaaaab"
+ /* 6 */ "bbbbbbbbb"
// Level 2
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".fffffffgff."
- /* 2 */ ".fh.ijk...f."
- /* 3 */ ".fj.......f."
- /* 4 */ ".fl.ijkijkf."
- /* 5 */ ".ffffffffff."
- /* 6 */ "............"
+ /* z\x* 012345678 */
+ /* 0 */ "...cde..."
+ /* 1 */ ".fffffff."
+ /* 2 */ ".fffffff."
+ /* 3 */ ".fffffff."
+ /* 4 */ ".fffffff."
+ /* 5 */ ".fffffff."
+ /* 6 */ "........."
// Level 3
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".fnnfnnfoff."
- /* 2 */ ".n..pq.p.pn."
- /* 3 */ ".nq.......n."
- /* 4 */ ".n..rq.rq.n."
- /* 5 */ ".fnnfnnfnnf."
- /* 6 */ "............"
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".ghhihhg."
+ /* 2 */ ".h.....h."
+ /* 3 */ ".h.....h."
+ /* 4 */ ".h.....h."
+ /* 5 */ ".ghhhhhg."
+ /* 6 */ "........."
// Level 4
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "llllllllllll"
- /* 1 */ "sffffffffffs"
- /* 2 */ ".fttttttttf."
- /* 3 */ ".fu......vf."
- /* 4 */ ".fttttttttf."
- /* 5 */ "wffffffffffw"
- /* 6 */ "hhhhhhhhhhhh"
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".gjhkhjg."
+ /* 2 */ ".j.....j."
+ /* 3 */ ".j.....j."
+ /* 4 */ ".j.....j."
+ /* 5 */ ".gjjhjjg."
+ /* 6 */ "........."
// Level 5
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ "llllllllllll"
- /* 2 */ "sxxxxxxxxxxs"
- /* 3 */ ".xxxxxxxxxx."
- /* 4 */ "wxxxxxxxxxxw"
- /* 5 */ "hhhhhhhhhhhh"
- /* 6 */ "............"
+ /* z\x* 012345678 */
+ /* 0 */ "lllllllll"
+ /* 1 */ "nghhhhhgn"
+ /* 2 */ ".h.o.o.h."
+ /* 3 */ ".h.....h."
+ /* 4 */ ".h.....h."
+ /* 5 */ "pghhhhhgp"
+ /* 6 */ "qqqqqqqqq"
// Level 6
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ "............"
- /* 2 */ "llllllllllll"
- /* 3 */ "xxxxxxxxxxxx"
- /* 4 */ "hhhhhhhhhhhh"
- /* 5 */ "............"
- /* 6 */ "............",
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "lllllllll"
+ /* 2 */ "nhhhhhhhn"
+ /* 3 */ ".h.....h."
+ /* 4 */ "phhhhhhhp"
+ /* 5 */ "qqqqqqqqq"
+ /* 6 */ "........."
+
+ // Level 7
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "lllllllll"
+ /* 3 */ "hhhhhhhhh"
+ /* 4 */ "qqqqqqqqq"
+ /* 5 */ "........."
+ /* 6 */ ".........",
// Connectors:
- "-1: 8, 1, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 4, 2, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1666,137 +1568,132 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_66
+ }, // WoodenHouse7x5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_87:
- // The data has been exported from the gallery Plains, area index 38, ID 87, created by Aloe_vera
+ // WoodenHouse9x5:
+ // The data has been exported from the gallery Plains, area index 41, ID 92, created by xoft
{
// Size:
- 11, 7, 9, // SizeX = 11, SizeY = 7, SizeZ = 9
+ 11, 8, 7, // SizeX = 11, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 6, 8, // MaxX, MaxY, MaxZ
+ 10, 7, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 67: 3\n" /* stairs */
- "f: 17: 0\n" /* tree */
- "g: 5: 0\n" /* wood */
- "h: 64: 7\n" /* wooddoorblock */
- "i:102: 0\n" /* glasspane */
- "j: 64:12\n" /* wooddoorblock */
- "k: 53: 2\n" /* woodstairs */
- "l: 53: 7\n" /* woodstairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 17: 4\n" /* tree */
- "o: 17: 8\n" /* tree */
- "p: 50: 3\n" /* torch */
- "q: 50: 4\n" /* torch */
- "r: 53: 6\n" /* woodstairs */
- "s: 53: 3\n" /* woodstairs */,
+ "n: 53: 7\n" /* woodstairs */
+ "o: 50: 3\n" /* torch */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....abc...."
- /* 1 */ ".ddddddddd."
- /* 2 */ ".ddddddddd."
- /* 3 */ ".ddddddddd."
- /* 4 */ ".ddddddddd."
- /* 5 */ ".ddddddddd."
- /* 6 */ ".ddddddddd."
- /* 7 */ ".ddddddddd."
- /* 8 */ "....aec...."
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".fggfhfggf."
- /* 2 */ ".g.......g."
- /* 3 */ ".g.......g."
- /* 4 */ ".f.......f."
- /* 5 */ ".g.......g."
- /* 6 */ ".g.......g."
- /* 7 */ ".fggfhfggf."
- /* 8 */ "..........."
+ /* 0 */ "bbbbaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "bbbbbbbbbbb"
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".fiifjfiif."
- /* 2 */ ".i.......i."
- /* 3 */ ".i.......i."
- /* 4 */ ".f.......f."
- /* 5 */ ".i.......i."
- /* 6 */ ".i.......i."
- /* 7 */ ".fiifjfiif."
- /* 8 */ "..........."
+ /* 0 */ "....cde...."
+ /* 1 */ ".fffffffff."
+ /* 2 */ ".fffffffff."
+ /* 3 */ ".fffffffff."
+ /* 4 */ ".fffffffff."
+ /* 5 */ ".fffffffff."
+ /* 6 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "kkkkkkkkkkk"
- /* 1 */ "lfnnnnnnnfl"
- /* 2 */ ".o..p.p..o."
- /* 3 */ ".o.......o."
- /* 4 */ ".o.......o."
- /* 5 */ ".o.......o."
- /* 6 */ ".o..q.q..o."
- /* 7 */ "rfnnnnnnnfr"
- /* 8 */ "sssssssssss"
+ /* 0 */ "..........."
+ /* 1 */ ".ghhhihhhg."
+ /* 2 */ ".h.......h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".ghhhhhhhg."
+ /* 6 */ "..........."
// Level 4
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "kkkkkkkkkkk"
- /* 2 */ "lgggggggggl"
- /* 3 */ ".g.......g."
- /* 4 */ ".g.......g."
- /* 5 */ ".g.......g."
- /* 6 */ "rgggggggggr"
- /* 7 */ "sssssssssss"
- /* 8 */ "..........."
+ /* 1 */ ".gjjhkhjjg."
+ /* 2 */ ".j.......j."
+ /* 3 */ ".j.......j."
+ /* 4 */ ".j.......j."
+ /* 5 */ ".gjjjhjjjg."
+ /* 6 */ "..........."
// Level 5
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "kkkkkkkkkkk"
- /* 3 */ "lgggggggggl"
- /* 4 */ ".g.......g."
- /* 5 */ "rgggggggggr"
- /* 6 */ "sssssssssss"
- /* 7 */ "..........."
- /* 8 */ "..........."
+ /* 0 */ "lllllllllll"
+ /* 1 */ "nhhhhhhhhhn"
+ /* 2 */ ".h..o.o.hh."
+ /* 3 */ ".h......hh."
+ /* 4 */ ".h......hh."
+ /* 5 */ "phhhhhhhhhp"
+ /* 6 */ "qqqqqqqqqqq"
// Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "..........."
- /* 3 */ "kkkkkkkkkkk"
- /* 4 */ "ggggggggggg"
- /* 5 */ "sssssssssss"
+ /* 1 */ "lllllllllll"
+ /* 2 */ "nhhhhhhhhhn"
+ /* 3 */ ".hhhhhhhhh."
+ /* 4 */ "phhhhhhhhhp"
+ /* 5 */ "qqqqqqqqqqq"
/* 6 */ "..........."
- /* 7 */ "..........."
- /* 8 */ "...........",
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "lllllllllll"
+ /* 3 */ "hhhhhhhhhhh"
+ /* 4 */ "qqqqqqqqqqq"
+ /* 5 */ "..........."
+ /* 6 */ "...........",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 2, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1815,217 +1712,139 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_87
+ }, // WoodenHouse9x5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_90:
- // The data has been exported from the gallery Plains, area index 39, ID 90, created by STR_Warrior
+ // WoodenHouse9x5:
+ // The data has been exported from the gallery Plains, area index 46, ID 97, created by Aloe_vera
{
// Size:
- 15, 8, 16, // SizeX = 15, SizeY = 8, SizeZ = 16
+ 11, 8, 7, // SizeX = 11, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 14, 7, 15, // MaxX, MaxY, MaxZ
+ 10, 7, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A: 53: 7\n" /* woodstairs */
- "B: 53: 4\n" /* woodstairs */
- "C: 53: 5\n" /* woodstairs */
- "D: 53: 6\n" /* woodstairs */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 43: 0\n" /* doubleslab */
- "f: 17: 0\n" /* tree */
- "g: 5: 0\n" /* wood */
- "h: 64: 7\n" /* wooddoorblock */
- "i: 96: 8\n" /* trapdoor */
- "j: 61: 2\n" /* furnace */
- "k: 53: 3\n" /* woodstairs */
- "l: 85: 0\n" /* fence */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j: 53: 3\n" /* woodstairs */
+ "k: 85: 0\n" /* fence */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 2\n" /* woodstairs */
- "o: 53: 1\n" /* woodstairs */
- "p: 53: 0\n" /* woodstairs */
- "q: 47: 0\n" /* bookshelf */
- "r:102: 0\n" /* glasspane */
- "s: 64:12\n" /* wooddoorblock */
- "t: 72: 0\n" /* woodplate */
- "u: 17: 4\n" /* tree */
- "v: 17: 8\n" /* tree */
- "w: 50: 3\n" /* torch */
- "x: 50: 1\n" /* torch */
- "y: 50: 4\n" /* torch */
- "z: 50: 2\n" /* torch */,
+ "n: 53: 1\n" /* woodstairs */
+ "o: 53: 0\n" /* woodstairs */
+ "p:102: 0\n" /* glasspane */
+ "q: 64:12\n" /* wooddoorblock */
+ "r: 50: 3\n" /* torch */
+ "s: 72: 0\n" /* woodplate */
+ "t: 53: 7\n" /* woodstairs */
+ "u: 47: 0\n" /* bookshelf */
+ "v: 50: 1\n" /* torch */
+ "w: 50: 2\n" /* torch */
+ "x: 53: 6\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "......abc......"
- /* 1 */ ".ddddddddddddd."
- /* 2 */ ".deeeedddddddd."
- /* 3 */ ".deeeedddddddd."
- /* 4 */ ".ddddddddddddd."
- /* 5 */ ".ddddddddddddd."
- /* 6 */ ".ddddddddddddd."
- /* 7 */ "mddddddddddddd."
- /* 8 */ "mmmmmmmmdddddd."
- /* 9 */ "mmmmmmmmdddddd."
- /* 10 */ "mmmmmmmmdddddd."
- /* 11 */ "mmmmmmmmdddddd."
- /* 12 */ "mmmmmmmmdddddd."
- /* 13 */ "mmmmmmmmdddddd."
- /* 14 */ "mmmmmmmmdddddd."
- /* 15 */ "mmmmmmmm......."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
// Level 1
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".fggggfhfggggf."
- /* 2 */ ".g...i.......g."
- /* 3 */ ".gjeee......kg."
- /* 4 */ ".f..........lg."
- /* 5 */ ".g..........ng."
- /* 6 */ ".g.olp..ol...g."
- /* 7 */ "mfggggggfn...f."
- /* 8 */ "mmmmmmmmg....g."
- /* 9 */ "mmmmmmmmgk...g."
- /* 10 */ "mmmmmmmmgl..kg."
- /* 11 */ "mmmmmmmmgn..lg."
- /* 12 */ "mmmmmmmmg...ng."
- /* 13 */ "mmmmmmmmgq..qg."
- /* 14 */ "mmmmmmmmfggggf."
- /* 15 */ "mmmmmmmm......."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "bbbbaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "bbbbbbbbbbb"
// Level 2
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".fgrrgfsfgrrgf."
- /* 2 */ ".g...........g."
- /* 3 */ ".g...........r."
- /* 4 */ ".f..........tr."
- /* 5 */ ".g...........r."
- /* 6 */ ".g..t....t...g."
- /* 7 */ "mfgrrrrgf....f."
- /* 8 */ "mmmmmmmmg....g."
- /* 9 */ "mmmmmmmmr....r."
- /* 10 */ "mmmmmmmmrt...r."
- /* 11 */ "mmmmmmmmr...tr."
- /* 12 */ "mmmmmmmmr....r."
- /* 13 */ "mmmmmmmmgq..qg."
- /* 14 */ "mmmmmmmmfgrrgf."
- /* 15 */ "mmmmmmmm......."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....cde...."
+ /* 1 */ ".fffffffff."
+ /* 2 */ ".fffffffff."
+ /* 3 */ ".fffffffff."
+ /* 4 */ ".fffffffff."
+ /* 5 */ ".fffffffff."
+ /* 6 */ "..........."
// Level 3
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".fuuuuuuuuuuuf."
- /* 2 */ ".v....w.w....v."
- /* 3 */ ".v...........v."
- /* 4 */ ".vx..........v."
- /* 5 */ ".v...........v."
- /* 6 */ ".v......y....v."
- /* 7 */ "mfuuuuuufx..zv."
- /* 8 */ "mmmmmmmmv....v."
- /* 9 */ "mmmmmmmmv....v."
- /* 10 */ "mmmmmmmmv....v."
- /* 11 */ "mmmmmmmmv....v."
- /* 12 */ "mmmmmmmmv....v."
- /* 13 */ "mmmmmmmmv.yy.v."
- /* 14 */ "mmmmmmmmfuuuuf."
- /* 15 */ "mmmmmmmm......."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ghhhihhhg."
+ /* 2 */ ".hj.....jh."
+ /* 3 */ ".hk.....kh."
+ /* 4 */ ".hl.nko.lh."
+ /* 5 */ ".ghhhhhhhg."
+ /* 6 */ "..........."
// Level 4
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "nnnnnnnnnnnnnno"
- /* 1 */ "pgggggggggggggo"
- /* 2 */ "pgAAAAAAAAAABgo"
- /* 3 */ "pgC.........Bgo"
- /* 4 */ "pgC.........Bgo"
- /* 5 */ "pgC.........Bgo"
- /* 6 */ "pgCDDDDDDD..Bgo"
- /* 7 */ "pggggggggC..Bgo"
- /* 8 */ "pkkkkkkpgC..Bgo"
- /* 9 */ "mmmmmmmpgC..Bgo"
- /* 10 */ "mmmmmmmpgC..Bgo"
- /* 11 */ "mmmmmmmpgC..Bgo"
- /* 12 */ "mmmmmmmpgC..Bgo"
- /* 13 */ "mmmmmmmpgCDDBgo"
- /* 14 */ "mmmmmmmpggggggo"
- /* 15 */ "mmmmmmmpkkkkkkk"
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".gpphqhppg."
+ /* 2 */ ".p..r.r..p."
+ /* 3 */ ".ps.....sp."
+ /* 4 */ ".p...s...p."
+ /* 5 */ ".gppphpppg."
+ /* 6 */ "..........."
// Level 5
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "mmmmmmmmmmmmmmm"
- /* 1 */ "mpnnnnnnnnnnnom"
- /* 2 */ "mpgggggggggggom"
- /* 3 */ "mpgggggggggggom"
- /* 4 */ "mpgggggggggggom"
- /* 5 */ "mpgggggggggggom"
- /* 6 */ "mpgggggggggggom"
- /* 7 */ "mpkkkkkkkggggom"
- /* 8 */ "mmmmmmmmpggggom"
- /* 9 */ "mmmmmmmmpggggom"
- /* 10 */ "mmmmmmmmpggggom"
- /* 11 */ "mmmmmmmmpggggom"
- /* 12 */ "mmmmmmmmpggggom"
- /* 13 */ "mmmmmmmmpggggom"
- /* 14 */ "mmmmmmmmkkkkkom"
- /* 15 */ "mmmmmmmmmmmmmmm"
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "lllllllllll"
+ /* 1 */ "thhhhhhhhht"
+ /* 2 */ ".huuuuuuuh."
+ /* 3 */ ".hv.....wh."
+ /* 4 */ ".huuuuuuuh."
+ /* 5 */ "xhhhhhhhhhx"
+ /* 6 */ "jjjjjjjjjjj"
// Level 6
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "mmmmmmmmmmmmmmm"
- /* 1 */ "mmmmmmmmmmmmmmm"
- /* 2 */ "mmnnnnnnnnnnnmm"
- /* 3 */ "mmpgggggggggomm"
- /* 4 */ "mmpgggggggggomm"
- /* 5 */ "mmpgggggggggomm"
- /* 6 */ "mmkkkkkkkkggomm"
- /* 7 */ "mmmmmmmmmpggomm"
- /* 8 */ "mmmmmmmmmpggomm"
- /* 9 */ "mmmmmmmmmpggomm"
- /* 10 */ "mmmmmmmmmpggomm"
- /* 11 */ "mmmmmmmmmpggomm"
- /* 12 */ "mmmmmmmmmpggomm"
- /* 13 */ "mmmmmmmmmkkkomm"
- /* 14 */ "mmmmmmmmmmmmmmm"
- /* 15 */ "mmmmmmmmmmmmmmm"
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "lllllllllll"
+ /* 2 */ "thhhhhhhhht"
+ /* 3 */ ".h.......h."
+ /* 4 */ "xhhhhhhhhhx"
+ /* 5 */ "jjjjjjjjjjj"
+ /* 6 */ "..........."
// Level 7
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "mmmmmmmmmmmmmmm"
- /* 1 */ "mmmmmmmmmmmmmmm"
- /* 2 */ "mmmmmmmmmmmmmmm"
- /* 3 */ "mmmpnnnnnnnommm"
- /* 4 */ "mmmpgggggggommm"
- /* 5 */ "mmmpkkkkkkpommm"
- /* 6 */ "mmmmmmmmmmpommm"
- /* 7 */ "mmmmmmmmmmpommm"
- /* 8 */ "mmmmmmmmmmpommm"
- /* 9 */ "mmmmmmmmmmpommm"
- /* 10 */ "mmmmmmmmmmpommm"
- /* 11 */ "mmmmmmmmmmpommm"
- /* 12 */ "mmmmmmmmmmpkmmm"
- /* 13 */ "mmmmmmmmmmmmmmm"
- /* 14 */ "mmmmmmmmmmmmmmm"
- /* 15 */ "mmmmmmmmmmmmmmm",
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "lllllllllll"
+ /* 3 */ "hhhhhhhhhhh"
+ /* 4 */ "jjjjjjjjjjj"
+ /* 5 */ "..........."
+ /* 6 */ "...........",
// Connectors:
- "-1: 7, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2044,114 +1863,170 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_90
+ }, // WoodenHouse9x5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_91:
- // The data has been exported from the gallery Plains, area index 40, ID 91, created by xoft
+ // WoodenHouse9x5Fence:
+ // The data has been exported from the gallery Plains, area index 9, ID 26, created by Aloe_vera
{
// Size:
- 9, 7, 7, // SizeX = 9, SizeY = 7, SizeZ = 7
+ 10, 8, 11, // SizeX = 10, SizeY = 8, SizeZ = 11
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 8, 6, 6, // MaxX, MaxY, MaxZ
+ 9, 7, 10, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 2: 0\n" /* grass */
- "b: 3: 0\n" /* dirt */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 4: 0\n" /* cobblestone */
+ "d: 5: 0\n" /* wood */
+ "e: 67: 2\n" /* stairs */
+ "f: 43: 0\n" /* doubleslab */
+ "g: 67: 0\n" /* stairs */
+ "h: 67: 3\n" /* stairs */
+ "i: 17: 0\n" /* tree */
+ "j: 53: 1\n" /* woodstairs */
+ "k: 85: 0\n" /* fence */
+ "l: 53: 0\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 50: 3\n" /* torch */
- "p: 53: 6\n" /* woodstairs */
- "q: 53: 3\n" /* woodstairs */,
+ "n: 64: 6\n" /* wooddoorblock */
+ "o: 64: 0\n" /* wooddoorblock */
+ "p:102: 0\n" /* glasspane */
+ "q: 72: 0\n" /* woodplate */
+ "r: 64:12\n" /* wooddoorblock */
+ "s: 64: 8\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* 012345678 */
- /* 0 */ "aaabbbaaa"
- /* 1 */ "abbbbbbba"
- /* 2 */ "abbbbbbba"
- /* 3 */ "abbbbbbba"
- /* 4 */ "abbbbbbba"
- /* 5 */ "abbbbbbba"
- /* 6 */ "aaaaaaaaa"
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "aaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaa"
// Level 1
- /* z\x* 012345678 */
- /* 0 */ "...cde..."
- /* 1 */ ".fffffff."
- /* 2 */ ".fffffff."
- /* 3 */ ".fffffff."
- /* 4 */ ".fffffff."
- /* 5 */ ".fffffff."
- /* 6 */ "........."
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "bbbbbbbbbb"
+ /* 1 */ "baaaaabbbb"
+ /* 2 */ "baaaaabbbb"
+ /* 3 */ "baaaaaaaaa"
+ /* 4 */ "aaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaa"
+ /* 7 */ "baaaaaaaaa"
+ /* 8 */ "baaaaaaaaa"
+ /* 9 */ "baaaaabbbb"
+ /* 10 */ "bbbbbbbbbb"
// Level 2
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ ".ghhihhg."
- /* 2 */ ".h.....h."
- /* 3 */ ".h.....h."
- /* 4 */ ".h.....h."
- /* 5 */ ".ghhhhhg."
- /* 6 */ "........."
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "......mmmm"
+ /* 1 */ ".cccccmmmm"
+ /* 2 */ ".cdddcmmmm"
+ /* 3 */ ".cdddcbbbb"
+ /* 4 */ "ecfffcbbbb"
+ /* 5 */ "gcffffbbbb"
+ /* 6 */ "hcfffcbbbb"
+ /* 7 */ ".cfffcbbbb"
+ /* 8 */ ".cfffcbbbb"
+ /* 9 */ ".cccccmmmm"
+ /* 10 */ "......mmmm"
// Level 3
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ ".gjhkhjg."
- /* 2 */ ".j.....j."
- /* 3 */ ".j.....j."
- /* 4 */ ".j.....j."
- /* 5 */ ".gjjhjjg."
- /* 6 */ "........."
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "......mmmm"
+ /* 1 */ ".idddimmmm"
+ /* 2 */ ".djkldmmmm"
+ /* 3 */ ".d...dkkkk"
+ /* 4 */ ".d...d...k"
+ /* 5 */ ".n...o...k"
+ /* 6 */ ".d...d...k"
+ /* 7 */ ".dff.d...k"
+ /* 8 */ ".d...dkkkk"
+ /* 9 */ ".idddimmmm"
+ /* 10 */ "......mmmm"
// Level 4
- /* z\x* 012345678 */
- /* 0 */ "lllllllll"
- /* 1 */ "nghhhhhgn"
- /* 2 */ ".h.o.o.h."
- /* 3 */ ".h.....h."
- /* 4 */ ".h.....h."
- /* 5 */ "pghhhhhgp"
- /* 6 */ "qqqqqqqqq"
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "......mmmm"
+ /* 1 */ ".ipppimmmm"
+ /* 2 */ ".p.q.pmmmm"
+ /* 3 */ ".p...p...."
+ /* 4 */ ".d...d...."
+ /* 5 */ ".r...s...."
+ /* 6 */ ".d...d...."
+ /* 7 */ ".p...p...."
+ /* 8 */ ".p...p...."
+ /* 9 */ ".ipppimmmm"
+ /* 10 */ "......mmmm"
// Level 5
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ "lllllllll"
- /* 2 */ "nhhhhhhhn"
- /* 3 */ ".h.....h."
- /* 4 */ "phhhhhhhp"
- /* 5 */ "qqqqqqqqq"
- /* 6 */ "........."
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "lt...ujmmm"
+ /* 1 */ "lidddijmmm"
+ /* 2 */ "ld...djmmm"
+ /* 3 */ "ld...dj..."
+ /* 4 */ "ldv.wdj..."
+ /* 5 */ "ld...dj..."
+ /* 6 */ "ldv.wdj..."
+ /* 7 */ "ld...dj..."
+ /* 8 */ "ld...dj..."
+ /* 9 */ "lidddijmmm"
+ /* 10 */ "lt...ujmmm"
// Level 6
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ "........."
- /* 2 */ "lllllllll"
- /* 3 */ "hhhhhhhhh"
- /* 4 */ "qqqqqqqqq"
- /* 5 */ "........."
- /* 6 */ ".........",
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "mlt.ujmmmm"
+ /* 1 */ "mldddjmmmm"
+ /* 2 */ "mld.djmmmm"
+ /* 3 */ "mld.djm..."
+ /* 4 */ "mld.djm..."
+ /* 5 */ "mld.djm..."
+ /* 6 */ "mld.djm..."
+ /* 7 */ "mld.djm..."
+ /* 8 */ "mld.djm..."
+ /* 9 */ "mldddjmmmm"
+ /* 10 */ "mlt.ujmmmm"
+
+ // Level 7
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "mmldjmmmmm"
+ /* 1 */ "mmldjmmmmm"
+ /* 2 */ "mmldjmmmmm"
+ /* 3 */ "mmldjmm..."
+ /* 4 */ "mmldjmm..."
+ /* 5 */ "mmldjmm..."
+ /* 6 */ "mmldjmm..."
+ /* 7 */ "mmldjmm..."
+ /* 8 */ "mmldjmm..."
+ /* 9 */ "mmldjmmmmm"
+ /* 10 */ "mmldjmmmmm",
// Connectors:
- "-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 0, 2, 5: 4\n" /* Type -1, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2170,108 +2045,162 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_91
+ }, // WoodenHouse9x5Fence
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_92:
- // The data has been exported from the gallery Plains, area index 41, ID 92, created by xoft
+ // WoodenHouse9x7:
+ // The data has been exported from the gallery Plains, area index 52, ID 103, created by Aloe_vera
{
// Size:
- 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7
+ 11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 5, 6, // MaxX, MaxY, MaxZ
+ 10, 8, 8, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h:102: 0\n" /* glasspane */
- "i: 64:12\n" /* wooddoorblock */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 7\n" /* woodstairs */
- "l: 50: 3\n" /* torch */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 6\n" /* woodstairs */
- "o: 53: 3\n" /* woodstairs */,
+ "n: 53: 7\n" /* woodstairs */
+ "o: 50: 3\n" /* torch */
+ "p: 50: 4\n" /* torch */
+ "q: 53: 6\n" /* woodstairs */
+ "r: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....abc...."
- /* 1 */ ".ddddddddd."
- /* 2 */ ".ddddddddd."
- /* 3 */ ".ddddddddd."
- /* 4 */ ".ddddddddd."
- /* 5 */ ".ddddddddd."
- /* 6 */ "..........."
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaa"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".efffgfffe."
- /* 2 */ ".f.......f."
- /* 3 */ ".f.......f."
- /* 4 */ ".f.......f."
- /* 5 */ ".efffffffe."
- /* 6 */ "..........."
+ /* 0 */ "bbbbaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "baaaaaaaaab"
+ /* 7 */ "baaaaaaaaab"
+ /* 8 */ "bbbbbbbbbbb"
// Level 2
/* z\x* 1 */
/* * 01234567890 */
+ /* 0 */ "....cde...."
+ /* 1 */ ".fffffffff."
+ /* 2 */ ".fffffffff."
+ /* 3 */ ".fffffffff."
+ /* 4 */ ".fffffffff."
+ /* 5 */ ".fffffffff."
+ /* 6 */ ".fffffffff."
+ /* 7 */ ".fffffffff."
+ /* 8 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".ehhfifhhe."
+ /* 1 */ ".ghhhihhhg."
/* 2 */ ".h.......h."
/* 3 */ ".h.......h."
/* 4 */ ".h.......h."
- /* 5 */ ".ehhhfhhhe."
- /* 6 */ "..........."
+ /* 5 */ ".h.......h."
+ /* 6 */ ".h.......h."
+ /* 7 */ ".ghhhhhhhg."
+ /* 8 */ "..........."
- // Level 3
+ // Level 4
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "jjjjjjjjjjj"
- /* 1 */ "kfffffffffk"
- /* 2 */ ".f..l.l.ff."
- /* 3 */ ".f......ff."
- /* 4 */ ".f......ff."
- /* 5 */ "nfffffffffn"
- /* 6 */ "ooooooooooo"
+ /* 0 */ "..........."
+ /* 1 */ ".gjjhkhjjg."
+ /* 2 */ ".j.......j."
+ /* 3 */ ".j.......j."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".j.......j."
+ /* 6 */ ".j.......j."
+ /* 7 */ ".gjjjhjjjg."
+ /* 8 */ "..........."
- // Level 4
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "lllllllllll"
+ /* 1 */ "nhhhhhhhhhn"
+ /* 2 */ ".h..o.o..h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".h.......h."
+ /* 6 */ ".h...p...h."
+ /* 7 */ "qhhhhhhhhhq"
+ /* 8 */ "rrrrrrrrrrr"
+
+ // Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "jjjjjjjjjjj"
- /* 2 */ "kfffffffffk"
- /* 3 */ ".fffffffff."
- /* 4 */ "nfffffffffn"
- /* 5 */ "ooooooooooo"
- /* 6 */ "..........."
+ /* 1 */ "lllllllllll"
+ /* 2 */ "nhhhhhhhhhn"
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".h.......h."
+ /* 6 */ "qhhhhhhhhhq"
+ /* 7 */ "rrrrrrrrrrr"
+ /* 8 */ "..........."
- // Level 5
+ // Level 7
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "jjjjjjjjjjj"
- /* 3 */ "fffffffffff"
- /* 4 */ "ooooooooooo"
- /* 5 */ "..........."
- /* 6 */ "...........",
+ /* 2 */ "lllllllllll"
+ /* 3 */ "nhhhhhhhhhn"
+ /* 4 */ ".h.......h."
+ /* 5 */ "qhhhhhhhhhq"
+ /* 6 */ "rrrrrrrrrrr"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "lllllllllll"
+ /* 4 */ "hhhhhhhhhhh"
+ /* 5 */ "rrrrrrrrrrr"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "...........",
// Connectors:
- "-1: 5, 0, 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 */
@@ -2290,139 +2219,201 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_92
+ }, // WoodenHouse9x7
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_93:
- // The data has been exported from the gallery Plains, area index 42, ID 93, created by xoft
+ // WoodenHouse9x7Butcher:
+ // The data has been exported from the gallery Plains, area index 48, ID 99, created by Aloe_vera
{
// Size:
- 11, 6, 11, // SizeX = 11, SizeY = 6, SizeZ = 11
+ 11, 9, 13, // SizeX = 11, SizeY = 9, SizeZ = 13
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 5, 10, // MaxX, MaxY, MaxZ
+ 10, 8, 12, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h:102: 0\n" /* glasspane */
- "i: 64:12\n" /* wooddoorblock */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 7\n" /* woodstairs */
- "l: 53: 1\n" /* woodstairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 43: 0\n" /* doubleslab */
+ "h: 17: 0\n" /* tree */
+ "i: 5: 0\n" /* wood */
+ "j: 64: 7\n" /* wooddoorblock */
+ "k: 53: 3\n" /* woodstairs */
+ "l: 85: 0\n" /* fence */
"m: 19: 0\n" /* sponge */
- "n: 50: 3\n" /* torch */
- "o: 50: 4\n" /* torch */
- "p: 53: 6\n" /* woodstairs */
- "q: 50: 1\n" /* torch */
- "r: 50: 2\n" /* torch */
- "s: 53: 3\n" /* woodstairs */
- "t: 53: 0\n" /* woodstairs */
- "u: 53: 5\n" /* woodstairs */
- "v: 53: 4\n" /* woodstairs */,
+ "n: 53: 2\n" /* woodstairs */
+ "o:102: 0\n" /* glasspane */
+ "p: 64:12\n" /* wooddoorblock */
+ "q: 72: 0\n" /* woodplate */
+ "r: 53: 7\n" /* woodstairs */
+ "s: 50: 1\n" /* torch */
+ "t: 50: 2\n" /* torch */
+ "u: 53: 6\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....abc...."
- /* 1 */ ".ddddddddd."
- /* 2 */ ".ddddddddd."
- /* 3 */ ".ddddddddd."
- /* 4 */ ".ddddddddd."
- /* 5 */ ".ddddddddd."
- /* 6 */ ".....ddddd."
- /* 7 */ "mmmm.ddddd."
- /* 8 */ "mmmm.ddddd."
- /* 9 */ "mmmm.ddddd."
- /* 10 */ "mmmm......."
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaa"
+ /* 11 */ "aaaaaaaaaaa"
+ /* 12 */ "aaaaaaaaaaa"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".efffgfffe."
- /* 2 */ ".f.......f."
- /* 3 */ ".f.......f."
- /* 4 */ ".f.......f."
- /* 5 */ ".efffe...f."
- /* 6 */ ".....f...f."
- /* 7 */ "mmmm.f...f."
- /* 8 */ "mmmm.f...f."
- /* 9 */ "mmmm.efffe."
- /* 10 */ "mmmm......."
+ /* 0 */ "bbbbaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "baaaaaaaaab"
+ /* 7 */ "baaaaaaaaab"
+ /* 8 */ "bbaaaaaaabb"
+ /* 9 */ "bbaaaaaaabb"
+ /* 10 */ "bbaaaaaaabb"
+ /* 11 */ "bbaaaaaaabb"
+ /* 12 */ "bbaaaaaaabb"
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".ehhfifhhe."
- /* 2 */ ".h.......h."
- /* 3 */ ".h.......h."
- /* 4 */ ".h.......h."
- /* 5 */ ".ehhhe...f."
- /* 6 */ ".....h...h."
- /* 7 */ "mmmm.h...h."
- /* 8 */ "mmmm.h...h."
- /* 9 */ "mmmm.ehhhe."
- /* 10 */ "mmmm......."
+ /* 0 */ "....cde...."
+ /* 1 */ ".fffffffff."
+ /* 2 */ ".fggggffff."
+ /* 3 */ ".fggggffff."
+ /* 4 */ ".fggggffff."
+ /* 5 */ ".fggggffff."
+ /* 6 */ ".fggggffff."
+ /* 7 */ ".fffffffff."
+ /* 8 */ "..bbbbbbb.."
+ /* 9 */ "mmbbbbbbbmm"
+ /* 10 */ "mmbbbbbbbmm"
+ /* 11 */ "mmbbbbbbbmm"
+ /* 12 */ "mmbbbbbbbmm"
// Level 3
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "jjjjjjjjjjj"
- /* 1 */ "kfffffffffl"
- /* 2 */ ".f..n.n..fl"
- /* 3 */ ".f.......fl"
- /* 4 */ ".f...o...fl"
- /* 5 */ "pfffffq.rfl"
- /* 6 */ "sssssf...fl"
- /* 7 */ "mmmmtf...fl"
- /* 8 */ "mmmmtf...fl"
- /* 9 */ "mmmmtfffffl"
- /* 10 */ "mmmmtu...vl"
+ /* 0 */ "..........."
+ /* 1 */ ".hiiijiiih."
+ /* 2 */ ".i.g....ki."
+ /* 3 */ ".i.g....li."
+ /* 4 */ ".i.g....ni."
+ /* 5 */ ".i.......i."
+ /* 6 */ ".i.......i."
+ /* 7 */ ".hiiijiiih."
+ /* 8 */ "..l.....l.."
+ /* 9 */ "mml.....lmm"
+ /* 10 */ "mml.....lmm"
+ /* 11 */ "mml.....lmm"
+ /* 12 */ "mmlllllllmm"
// Level 4
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "jjjjjjjjjl."
- /* 2 */ "kffffffffl."
- /* 3 */ ".f......fl."
- /* 4 */ "pffffff.fl."
- /* 5 */ "ssssssf.fl."
- /* 6 */ ".....tf.fl."
- /* 7 */ "mmmm.tf.fl."
- /* 8 */ "mmmm.tf.fl."
- /* 9 */ "mmmm.tfffl."
- /* 10 */ "mmmm.tu.vl."
+ /* 1 */ ".hooipiooh."
+ /* 2 */ ".o.......o."
+ /* 3 */ ".o......qo."
+ /* 4 */ ".i.......i."
+ /* 5 */ ".o.......o."
+ /* 6 */ ".o.......o."
+ /* 7 */ ".hooipiooh."
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
// Level 5
/* z\x* 1 */
/* * 01234567890 */
+ /* 0 */ "nnnnnnnnnnn"
+ /* 1 */ "riiiiiiiiir"
+ /* 2 */ ".i.......i."
+ /* 3 */ ".i.......i."
+ /* 4 */ ".is.....ti."
+ /* 5 */ ".i.......i."
+ /* 6 */ ".i.......i."
+ /* 7 */ "uiiiiiiiiiu"
+ /* 8 */ "kkkkkkkkkkk"
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "nnnnnnnnnnn"
+ /* 2 */ "riiiiiiiiir"
+ /* 3 */ ".i.......i."
+ /* 4 */ ".i.......i."
+ /* 5 */ ".i.......i."
+ /* 6 */ "uiiiiiiiiiu"
+ /* 7 */ "kkkkkkkkkkk"
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "nnnnnnnnnnn"
+ /* 3 */ "riiiiiiiiir"
+ /* 4 */ ".i.......i."
+ /* 5 */ "uiiiiiiiiiu"
+ /* 6 */ "kkkkkkkkkkk"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm"
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "jjjjjjjjj.."
- /* 3 */ "ffffffffl.."
- /* 4 */ "sssssstfl.."
- /* 5 */ "......tfl.."
- /* 6 */ "......tfl.."
- /* 7 */ "mmmm..tfl.."
- /* 8 */ "mmmm..tfl.."
- /* 9 */ "mmmm..tfl.."
- /* 10 */ "mmmm..tfl..",
+ /* 2 */ "..........."
+ /* 3 */ "nnnnnnnnnnn"
+ /* 4 */ "iiiiiiiiiii"
+ /* 5 */ "kkkkkkkkkkk"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+ /* 9 */ "mm.......mm"
+ /* 10 */ "mm.......mm"
+ /* 11 */ "mm.......mm"
+ /* 12 */ "mm.......mm",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2441,137 +2432,165 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_93
+ }, // WoodenHouse9x7Butcher
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_94:
- // The data has been exported from the gallery Plains, area index 43, ID 94, created by xoft
+ // WoodenHouse9x7DoubleDoor:
+ // The data has been exported from the gallery Plains, area index 38, ID 87, created by Aloe_vera
{
// Size:
- 15, 6, 11, // SizeX = 15, SizeY = 6, SizeZ = 11
+ 11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 14, 5, 10, // MaxX, MaxY, MaxZ
+ 10, 8, 8, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h:102: 0\n" /* glasspane */
- "i: 64:12\n" /* wooddoorblock */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 0\n" /* woodstairs */
- "l: 53: 1\n" /* woodstairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 67: 3\n" /* stairs */
+ "h: 17: 0\n" /* tree */
+ "i: 5: 0\n" /* wood */
+ "j: 64: 7\n" /* wooddoorblock */
+ "k:102: 0\n" /* glasspane */
+ "l: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */
- "n: 50: 3\n" /* torch */
- "o: 50: 4\n" /* torch */
- "p: 50: 2\n" /* torch */
- "q: 50: 1\n" /* torch */
- "r: 53: 3\n" /* woodstairs */
- "s: 53: 5\n" /* woodstairs */
- "t: 53: 4\n" /* woodstairs */,
+ "n: 53: 2\n" /* woodstairs */
+ "o: 53: 7\n" /* woodstairs */
+ "p: 17: 4\n" /* tree */
+ "q: 17: 8\n" /* tree */
+ "r: 50: 3\n" /* torch */
+ "s: 50: 4\n" /* torch */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "......abc......"
- /* 1 */ ".ddddddddddddd."
- /* 2 */ ".ddddddddddddd."
- /* 3 */ ".ddddddddddddd."
- /* 4 */ ".ddddddddddddd."
- /* 5 */ ".ddddddddddddd."
- /* 6 */ ".ddddd...ddddd."
- /* 7 */ ".ddddd...ddddd."
- /* 8 */ ".ddddd...ddddd."
- /* 9 */ ".ddddd...ddddd."
- /* 10 */ "..............."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaa"
// Level 1
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".efffffgfffffe."
- /* 2 */ ".f...........f."
- /* 3 */ ".f...........f."
- /* 4 */ ".f...........f."
- /* 5 */ ".f...efffe...f."
- /* 6 */ ".f...f...f...f."
- /* 7 */ ".f...f...f...f."
- /* 8 */ ".f...f...f...f."
- /* 9 */ ".efffe...efffe."
- /* 10 */ "..............."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "bbbbaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "baaaaaaaaab"
+ /* 7 */ "baaaaaaaaab"
+ /* 8 */ "bbbbaaabbbb"
// Level 2
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".ehhhhfifhhhhe."
- /* 2 */ ".h...........h."
- /* 3 */ ".h...........h."
- /* 4 */ ".h...........h."
- /* 5 */ ".f...ehhhe...f."
- /* 6 */ ".h...h...h...h."
- /* 7 */ ".h...h...h...h."
- /* 8 */ ".h...h...h...h."
- /* 9 */ ".ehhhe...ehhhe."
- /* 10 */ "..............."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....cde...."
+ /* 1 */ ".fffffffff."
+ /* 2 */ ".fffffffff."
+ /* 3 */ ".fffffffff."
+ /* 4 */ ".fffffffff."
+ /* 5 */ ".fffffffff."
+ /* 6 */ ".fffffffff."
+ /* 7 */ ".fffffffff."
+ /* 8 */ "....cge...."
// Level 3
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "jjjjjjjjjjjjjjj"
- /* 1 */ "kfffffffffffffl"
- /* 2 */ "kf....n.n....fl"
- /* 3 */ "kf...........fl"
- /* 4 */ "kf...o...o...fl"
- /* 5 */ "kf..pfffffq..fl"
- /* 6 */ "kf...frrrf...fl"
- /* 7 */ "kf...fl.kf...fl"
- /* 8 */ "kf...fl.kf...fl"
- /* 9 */ "kfffffl.kfffffl"
- /* 10 */ "ks...tl.ks...tl"
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".hiihjhiih."
+ /* 2 */ ".i.......i."
+ /* 3 */ ".i.......i."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".i.......i."
+ /* 6 */ ".i.......i."
+ /* 7 */ ".hiihjhiih."
+ /* 8 */ "..........."
// Level 4
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".jjjjjjjjjjjjl."
- /* 2 */ ".kfffffffffffl."
- /* 3 */ ".kfffffffffffl."
- /* 4 */ ".kfffffffffffl."
- /* 5 */ ".kffflrrrrfffl."
- /* 6 */ ".kfffl...kfffl."
- /* 7 */ ".kfffl...kfffl."
- /* 8 */ ".kfffl...kfffl."
- /* 9 */ ".kfffl...kfffl."
- /* 10 */ ".ks.tl...ks.tl."
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".hkkhlhkkh."
+ /* 2 */ ".k.......k."
+ /* 3 */ ".k.......k."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".k.......k."
+ /* 6 */ ".k.......k."
+ /* 7 */ ".hkkhlhkkh."
+ /* 8 */ "..........."
// Level 5
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ "..............."
- /* 2 */ "..kjjjjjjjjjj.."
- /* 3 */ "..kfffffffffl.."
- /* 4 */ "..kflrrrrrkfl.."
- /* 5 */ "..kfl.....kfl.."
- /* 6 */ "..kfl.....kfl.."
- /* 7 */ "..kfl.....kfl.."
- /* 8 */ "..kfl.....kfl.."
- /* 9 */ "..kfl.....kfl.."
- /* 10 */ "..kfl.....kfl..",
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "nnnnnnnnnnn"
+ /* 1 */ "ohpppppppho"
+ /* 2 */ ".q..r.r..q."
+ /* 3 */ ".q.......q."
+ /* 4 */ ".q.......q."
+ /* 5 */ ".q.......q."
+ /* 6 */ ".q..s.s..q."
+ /* 7 */ "thpppppppht"
+ /* 8 */ "uuuuuuuuuuu"
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "nnnnnnnnnnn"
+ /* 2 */ "oiiiiiiiiio"
+ /* 3 */ ".i.......i."
+ /* 4 */ ".i.......i."
+ /* 5 */ ".i.......i."
+ /* 6 */ "tiiiiiiiiit"
+ /* 7 */ "uuuuuuuuuuu"
+ /* 8 */ "..........."
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "nnnnnnnnnnn"
+ /* 3 */ "oiiiiiiiiio"
+ /* 4 */ ".i.......i."
+ /* 5 */ "tiiiiiiiiit"
+ /* 6 */ "uuuuuuuuuuu"
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "nnnnnnnnnnn"
+ /* 4 */ "iiiiiiiiiii"
+ /* 5 */ "uuuuuuuuuuu"
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "...........",
// Connectors:
- "-1: 7, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2590,115 +2609,259 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_94
+ }, // WoodenHouse9x7DoubleDoor
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_97:
- // The data has been exported from the gallery Plains, area index 46, ID 97, created by Aloe_vera
+ // WoodenHouseL13x14:
+ // The data has been exported from the gallery Plains, area index 39, ID 90, created by STR_Warrior
{
// Size:
- 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7
+ 15, 10, 16, // SizeX = 15, SizeY = 10, SizeZ = 16
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 5, 6, // MaxX, MaxY, MaxZ
+ 14, 9, 15, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h: 53: 3\n" /* woodstairs */
- "i: 85: 0\n" /* fence */
- "j: 53: 2\n" /* woodstairs */
- "k: 53: 1\n" /* woodstairs */
- "l: 53: 0\n" /* woodstairs */
+ "A: 50: 4\n" /* torch */
+ "B: 50: 2\n" /* torch */
+ "C: 53: 7\n" /* woodstairs */
+ "D: 53: 4\n" /* woodstairs */
+ "E: 53: 5\n" /* woodstairs */
+ "F: 53: 6\n" /* woodstairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 43: 0\n" /* doubleslab */
+ "h: 17: 0\n" /* tree */
+ "i: 5: 0\n" /* wood */
+ "j: 64: 7\n" /* wooddoorblock */
+ "k: 96: 8\n" /* trapdoor */
+ "l: 61: 2\n" /* furnace */
"m: 19: 0\n" /* sponge */
- "n:102: 0\n" /* glasspane */
- "o: 64:12\n" /* wooddoorblock */
- "p: 50: 3\n" /* torch */
- "q: 72: 0\n" /* woodplate */
- "r: 53: 7\n" /* woodstairs */
+ "n: 53: 3\n" /* woodstairs */
+ "o: 85: 0\n" /* fence */
+ "p: 53: 2\n" /* woodstairs */
+ "q: 53: 1\n" /* woodstairs */
+ "r: 53: 0\n" /* woodstairs */
"s: 47: 0\n" /* bookshelf */
- "t: 50: 1\n" /* torch */
- "u: 50: 2\n" /* torch */
- "v: 53: 6\n" /* woodstairs */,
+ "t:102: 0\n" /* glasspane */
+ "u: 64:12\n" /* wooddoorblock */
+ "v: 72: 0\n" /* woodplate */
+ "w: 17: 4\n" /* tree */
+ "x: 17: 8\n" /* tree */
+ "y: 50: 3\n" /* torch */
+ "z: 50: 1\n" /* torch */,
// Block data:
// Level 0
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "....abc...."
- /* 1 */ ".ddddddddd."
- /* 2 */ ".ddddddddd."
- /* 3 */ ".ddddddddd."
- /* 4 */ ".ddddddddd."
- /* 5 */ ".ddddddddd."
- /* 6 */ "..........."
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "aaaaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaaaa"
+ /* 8 */ "mmmmmmmmaaaaaaa"
+ /* 9 */ "mmmmmmmmaaaaaaa"
+ /* 10 */ "mmmmmmmmaaaaaaa"
+ /* 11 */ "mmmmmmmmaaaaaaa"
+ /* 12 */ "mmmmmmmmaaaaaaa"
+ /* 13 */ "mmmmmmmmaaaaaaa"
+ /* 14 */ "mmmmmmmmaaaaaaa"
+ /* 15 */ "mmmmmmmmaaaaaaa"
// Level 1
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".efffgfffe."
- /* 2 */ ".fh.....hf."
- /* 3 */ ".fi.....if."
- /* 4 */ ".fj.kil.jf."
- /* 5 */ ".efffffffe."
- /* 6 */ "..........."
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "bbbbbbaaabbbbbb"
+ /* 1 */ "baaaaaaaaaaaaab"
+ /* 2 */ "baaaaaaaaaaaaab"
+ /* 3 */ "baaaaaaaaaaaaab"
+ /* 4 */ "baaaaaaaaaaaaab"
+ /* 5 */ "baaaaaaaaaaaaab"
+ /* 6 */ "baaaaaaaaaaaaab"
+ /* 7 */ "baaaaaaaaaaaaab"
+ /* 8 */ "mmmmmmmmaaaaaab"
+ /* 9 */ "mmmmmmmmaaaaaab"
+ /* 10 */ "mmmmmmmmaaaaaab"
+ /* 11 */ "mmmmmmmmaaaaaab"
+ /* 12 */ "mmmmmmmmaaaaaab"
+ /* 13 */ "mmmmmmmmaaaaaab"
+ /* 14 */ "mmmmmmmmaaaaaab"
+ /* 15 */ "mmmmmmmmbbbbbbb"
// Level 2
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".ennfofnne."
- /* 2 */ ".n..p.p..n."
- /* 3 */ ".nq.....qn."
- /* 4 */ ".n...q...n."
- /* 5 */ ".ennnfnnne."
- /* 6 */ "..........."
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "......cde......"
+ /* 1 */ ".fffffffffffff."
+ /* 2 */ ".fggggffffffff."
+ /* 3 */ ".fggggffffffff."
+ /* 4 */ ".fffffffffffff."
+ /* 5 */ ".fffffffffffff."
+ /* 6 */ ".fffffffffffff."
+ /* 7 */ "mfffffffffffff."
+ /* 8 */ "mmmmmmmmffffff."
+ /* 9 */ "mmmmmmmmffffff."
+ /* 10 */ "mmmmmmmmffffff."
+ /* 11 */ "mmmmmmmmffffff."
+ /* 12 */ "mmmmmmmmffffff."
+ /* 13 */ "mmmmmmmmffffff."
+ /* 14 */ "mmmmmmmmffffff."
+ /* 15 */ "mmmmmmmm......."
// Level 3
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "jjjjjjjjjjj"
- /* 1 */ "rfffffffffr"
- /* 2 */ ".fsssssssf."
- /* 3 */ ".ft.....uf."
- /* 4 */ ".fsssssssf."
- /* 5 */ "vfffffffffv"
- /* 6 */ "hhhhhhhhhhh"
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".hiiiihjhiiiih."
+ /* 2 */ ".i...k.......i."
+ /* 3 */ ".ilggg......ni."
+ /* 4 */ ".h..........oi."
+ /* 5 */ ".i..........pi."
+ /* 6 */ ".i.qor..qo...i."
+ /* 7 */ "mhiiiiiihp...h."
+ /* 8 */ "mmmmmmmmi....i."
+ /* 9 */ "mmmmmmmmin...i."
+ /* 10 */ "mmmmmmmmio..ni."
+ /* 11 */ "mmmmmmmmip..oi."
+ /* 12 */ "mmmmmmmmi...pi."
+ /* 13 */ "mmmmmmmmis..si."
+ /* 14 */ "mmmmmmmmhiiiih."
+ /* 15 */ "mmmmmmmm......."
// Level 4
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "jjjjjjjjjjj"
- /* 2 */ "rfffffffffr"
- /* 3 */ ".f.......f."
- /* 4 */ "vfffffffffv"
- /* 5 */ "hhhhhhhhhhh"
- /* 6 */ "..........."
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".hittihuhittih."
+ /* 2 */ ".i...........i."
+ /* 3 */ ".i...........t."
+ /* 4 */ ".h..........vt."
+ /* 5 */ ".i...........t."
+ /* 6 */ ".i..v....v...i."
+ /* 7 */ "mhittttih....h."
+ /* 8 */ "mmmmmmmmi....i."
+ /* 9 */ "mmmmmmmmt....t."
+ /* 10 */ "mmmmmmmmtv...t."
+ /* 11 */ "mmmmmmmmt...vt."
+ /* 12 */ "mmmmmmmmt....t."
+ /* 13 */ "mmmmmmmmis..si."
+ /* 14 */ "mmmmmmmmhittih."
+ /* 15 */ "mmmmmmmm......."
// Level 5
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "jjjjjjjjjjj"
- /* 3 */ "fffffffffff"
- /* 4 */ "hhhhhhhhhhh"
- /* 5 */ "..........."
- /* 6 */ "...........",
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".hwwwwwwwwwwwh."
+ /* 2 */ ".x....y.y....x."
+ /* 3 */ ".x...........x."
+ /* 4 */ ".xz..........x."
+ /* 5 */ ".x...........x."
+ /* 6 */ ".x......A....x."
+ /* 7 */ "mhwwwwwwhz..Bx."
+ /* 8 */ "mmmmmmmmx....x."
+ /* 9 */ "mmmmmmmmx....x."
+ /* 10 */ "mmmmmmmmx....x."
+ /* 11 */ "mmmmmmmmx....x."
+ /* 12 */ "mmmmmmmmx....x."
+ /* 13 */ "mmmmmmmmx.AA.x."
+ /* 14 */ "mmmmmmmmhwwwwh."
+ /* 15 */ "mmmmmmmm......."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "ppppppppppppppq"
+ /* 1 */ "riiiiiiiiiiiiiq"
+ /* 2 */ "riCCCCCCCCCCDiq"
+ /* 3 */ "riE.........Diq"
+ /* 4 */ "riE.........Diq"
+ /* 5 */ "riE.........Diq"
+ /* 6 */ "riEFFFFFFF..Diq"
+ /* 7 */ "riiiiiiiiE..Diq"
+ /* 8 */ "rnnnnnnriE..Diq"
+ /* 9 */ "mmmmmmmriE..Diq"
+ /* 10 */ "mmmmmmmriE..Diq"
+ /* 11 */ "mmmmmmmriE..Diq"
+ /* 12 */ "mmmmmmmriE..Diq"
+ /* 13 */ "mmmmmmmriEFFDiq"
+ /* 14 */ "mmmmmmmriiiiiiq"
+ /* 15 */ "mmmmmmmrnnnnnnn"
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmmmmmmmmmmmm"
+ /* 1 */ "mrpppppppppppqm"
+ /* 2 */ "mriiiiiiiiiiiqm"
+ /* 3 */ "mriiiiiiiiiiiqm"
+ /* 4 */ "mriiiiiiiiiiiqm"
+ /* 5 */ "mriiiiiiiiiiiqm"
+ /* 6 */ "mriiiiiiiiiiiqm"
+ /* 7 */ "mrnnnnnnniiiiqm"
+ /* 8 */ "mmmmmmmmriiiiqm"
+ /* 9 */ "mmmmmmmmriiiiqm"
+ /* 10 */ "mmmmmmmmriiiiqm"
+ /* 11 */ "mmmmmmmmriiiiqm"
+ /* 12 */ "mmmmmmmmriiiiqm"
+ /* 13 */ "mmmmmmmmriiiiqm"
+ /* 14 */ "mmmmmmmmnnnnnqm"
+ /* 15 */ "mmmmmmmmmmmmmmm"
+
+ // Level 8
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmm"
+ /* 2 */ "mmpppppppppppmm"
+ /* 3 */ "mmriiiiiiiiiqmm"
+ /* 4 */ "mmriiiiiiiiiqmm"
+ /* 5 */ "mmriiiiiiiiiqmm"
+ /* 6 */ "mmnnnnnnnniiqmm"
+ /* 7 */ "mmmmmmmmmriiqmm"
+ /* 8 */ "mmmmmmmmmriiqmm"
+ /* 9 */ "mmmmmmmmmriiqmm"
+ /* 10 */ "mmmmmmmmmriiqmm"
+ /* 11 */ "mmmmmmmmmriiqmm"
+ /* 12 */ "mmmmmmmmmriiqmm"
+ /* 13 */ "mmmmmmmmmnnnqmm"
+ /* 14 */ "mmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmm"
+
+ // Level 9
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmm"
+ /* 3 */ "mmmrpppppppqmmm"
+ /* 4 */ "mmmriiiiiiiqmmm"
+ /* 5 */ "mmmrnnnnnnrqmmm"
+ /* 6 */ "mmmmmmmmmmrqmmm"
+ /* 7 */ "mmmmmmmmmmrqmmm"
+ /* 8 */ "mmmmmmmmmmrqmmm"
+ /* 9 */ "mmmmmmmmmmrqmmm"
+ /* 10 */ "mmmmmmmmmmrqmmm"
+ /* 11 */ "mmmmmmmmmmrqmmm"
+ /* 12 */ "mmmmmmmmmmrnmmm"
+ /* 13 */ "mmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmm",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2717,20 +2880,20 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_97
+ }, // WoodenHouseL13x14
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_98:
- // The data has been exported from the gallery Plains, area index 47, ID 98, created by Aloe_vera
+ // WoodenHouseL14x14:
+ // The data has been exported from the gallery Plains, area index 0, ID 4, created by Aloe_vera
{
// Size:
- 12, 7, 9, // SizeX = 12, SizeY = 7, SizeZ = 9
+ 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 11, 6, 8, // MaxX, MaxY, MaxZ
+ 15, 6, 15, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2738,120 +2901,170 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"b: 67: 2\n" /* stairs */
"c: 67: 1\n" /* stairs */
"d: 4: 0\n" /* cobblestone */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 64: 7\n" /* wooddoorblock */
- "h: 64: 5\n" /* wooddoorblock */
- "i: 53: 3\n" /* woodstairs */
- "j: 85: 0\n" /* fence */
- "k: 53: 2\n" /* woodstairs */
- "l: 53: 1\n" /* woodstairs */
+ "e: 5: 0\n" /* wood */
+ "f: 67: 3\n" /* stairs */
+ "g: 17: 0\n" /* tree */
+ "h: 64: 7\n" /* wooddoorblock */
+ "i: 64: 5\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 0\n" /* woodstairs */
- "o:102: 0\n" /* glasspane */
- "p: 64:12\n" /* wooddoorblock */
- "q: 50: 3\n" /* torch */
- "r: 72: 0\n" /* woodplate */
- "s: 53: 7\n" /* woodstairs */
- "t: 47: 0\n" /* bookshelf */
- "u: 50: 1\n" /* torch */
+ "n: 53: 1\n" /* woodstairs */
+ "o: 53: 7\n" /* woodstairs */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 53: 3\n" /* woodstairs */
+ "r: 53: 0\n" /* woodstairs */
+ "s: 53: 5\n" /* woodstairs */
+ "t: 53: 4\n" /* woodstairs */
+ "u: 50: 3\n" /* torch */
"v: 50: 2\n" /* torch */
- "w: 53: 6\n" /* woodstairs */,
+ "w: 50: 4\n" /* torch */
+ "x: 50: 1\n" /* torch */,
// Block data:
// Level 0
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "....abbc...."
- /* 1 */ ".dddddddddd."
- /* 2 */ ".dddddddddd."
- /* 3 */ ".dddddddddd."
- /* 4 */ ".dddddddddd."
- /* 5 */ ".dddddddddd."
- /* 6 */ ".dddddddddd."
- /* 7 */ ".dddddddddd."
- /* 8 */ "............"
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "........abc....."
+ /* 1 */ ".dddddddddddddd."
+ /* 2 */ ".deeeeeeeeeeeed."
+ /* 3 */ ".deeeeeeeeeeeed."
+ /* 4 */ ".deeeeeeeeeeeed."
+ /* 5 */ ".deeeeeeeeeeeed."
+ /* 6 */ ".deeeeeeeeeeeed."
+ /* 7 */ ".ddddddddeeeeed."
+ /* 8 */ "mmmmmafcdeeeeed."
+ /* 9 */ "mmmmmmmmdeeeeed."
+ /* 10 */ "mmmmmmmmdeeeeed."
+ /* 11 */ "mmmmmmmmdeeeeed."
+ /* 12 */ "mmmmmmmmdeeeeed."
+ /* 13 */ "mmmmmmmmdeeeeed."
+ /* 14 */ "mmmmmmmmddddddd."
+ /* 15 */ "mmmmmmmm........"
// Level 1
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".efffghfffe."
- /* 2 */ ".f........f."
- /* 3 */ ".fi......if."
- /* 4 */ ".fj......jf."
- /* 5 */ ".fk......kf."
- /* 6 */ ".f.ljnljn.f."
- /* 7 */ ".effffffffe."
- /* 8 */ "............"
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".geeeeeeghgeeeg."
+ /* 2 */ ".e............e."
+ /* 3 */ ".e............e."
+ /* 4 */ ".e............e."
+ /* 5 */ ".e............e."
+ /* 6 */ ".e............e."
+ /* 7 */ ".geeeeieg.....e."
+ /* 8 */ "mmmmmm.me.....e."
+ /* 9 */ "mmmmmmmme.....e."
+ /* 10 */ "mmmmmmmme.....e."
+ /* 11 */ "mmmmmmmme.....e."
+ /* 12 */ "mmmmmmmme.....e."
+ /* 13 */ "mmmmmmmme.....e."
+ /* 14 */ "mmmmmmmmgeeeeeg."
+ /* 15 */ "mmmmmmmm........"
// Level 2
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".eoofppfooe."
- /* 2 */ ".o..q..q..o."
- /* 3 */ ".o........o."
- /* 4 */ ".fr......rf."
- /* 5 */ ".o........o."
- /* 6 */ ".o..r..r..o."
- /* 7 */ ".eoofoofooe."
- /* 8 */ "............"
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".gejjejjgkgjjeg."
+ /* 2 */ ".j............e."
+ /* 3 */ ".j............j."
+ /* 4 */ ".j............j."
+ /* 5 */ ".j............e."
+ /* 6 */ ".j............j."
+ /* 7 */ ".gejjekeg.....j."
+ /* 8 */ "mmmmmm.me.....e."
+ /* 9 */ "mmmmmmmmj.....j."
+ /* 10 */ "mmmmmmmmj.....j."
+ /* 11 */ "mmmmmmmme.....e."
+ /* 12 */ "mmmmmmmmj.....j."
+ /* 13 */ "mmmmmmmmj.....j."
+ /* 14 */ "mmmmmmmmgjjjjjg."
+ /* 15 */ "mmmmmmmm........"
// Level 3
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "kkkkkkkkkkkk"
- /* 1 */ "sffffffffffs"
- /* 2 */ ".fttttttttf."
- /* 3 */ ".f........f."
- /* 4 */ ".fu......vf."
- /* 5 */ ".f........f."
- /* 6 */ ".fttttttttf."
- /* 7 */ "wffffffffffw"
- /* 8 */ "iiiiiiiiiiii"
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "llllllllllllllln"
+ /* 1 */ "ogeeeeeegegeeegn"
+ /* 2 */ ".e............en"
+ /* 3 */ ".e............en"
+ /* 4 */ ".e............en"
+ /* 5 */ ".e............en"
+ /* 6 */ ".e............en"
+ /* 7 */ "pgeeeeeeg.....en"
+ /* 8 */ "qqqqqqqre.....en"
+ /* 9 */ "mmmmmmmre.....en"
+ /* 10 */ "mmmmmmmre.....en"
+ /* 11 */ "mmmmmmmre.....en"
+ /* 12 */ "mmmmmmmre.....en"
+ /* 13 */ "mmmmmmmre.....en"
+ /* 14 */ "mmmmmmmrgeeeeegn"
+ /* 15 */ "mmmmmmmrs.....tn"
// Level 4
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ "kkkkkkkkkkkk"
- /* 2 */ "sffffffffffs"
- /* 3 */ ".fttttttttf."
- /* 4 */ ".f........f."
- /* 5 */ ".fttttttttf."
- /* 6 */ "wffffffffffw"
- /* 7 */ "iiiiiiiiiiii"
- /* 8 */ "............"
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "lllllllllllllll."
+ /* 2 */ "oeeeeeeeeeeeeen."
+ /* 3 */ ".e.........u.en."
+ /* 4 */ ".e..........ven."
+ /* 5 */ ".e......w....en."
+ /* 6 */ "peeeeeeeee...en."
+ /* 7 */ "qqqqqqqqrex..en."
+ /* 8 */ "mmmmmmmmre...en."
+ /* 9 */ "mmmmmmmmre...en."
+ /* 10 */ "mmmmmmmmre...en."
+ /* 11 */ "mmmmmmmmre...en."
+ /* 12 */ "mmmmmmmmre...en."
+ /* 13 */ "mmmmmmmmre...en."
+ /* 14 */ "mmmmmmmmreeeeen."
+ /* 15 */ "mmmmmmmmrs...tn."
// Level 5
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ "............"
- /* 2 */ "kkkkkkkkkkkk"
- /* 3 */ "sffffffffffs"
- /* 4 */ ".f........f."
- /* 5 */ "wffffffffffw"
- /* 6 */ "iiiiiiiiiiii"
- /* 7 */ "............"
- /* 8 */ "............"
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "llllllllllllln.."
+ /* 3 */ "oeeeeeeeeeeeen.."
+ /* 4 */ ".ex.........en.."
+ /* 5 */ "peeeeeeeeee.en.."
+ /* 6 */ "qqqqqqqqqre.en.."
+ /* 7 */ ".........re.en.."
+ /* 8 */ "mmmmmmmm.re.en.."
+ /* 9 */ "mmmmmmmm.re.en.."
+ /* 10 */ "mmmmmmmm.re.en.."
+ /* 11 */ "mmmmmmmm.re.en.."
+ /* 12 */ "mmmmmmmm.re.en.."
+ /* 13 */ "mmmmmmmm.rewen.."
+ /* 14 */ "mmmmmmmm.reeen.."
+ /* 15 */ "mmmmmmmm.rs.tn.."
// Level 6
- /* z\x* 11 */
- /* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ "............"
- /* 2 */ "............"
- /* 3 */ "kkkkkkkkkkkk"
- /* 4 */ "ffffffffffff"
- /* 5 */ "iiiiiiiiiiii"
- /* 6 */ "............"
- /* 7 */ "............"
- /* 8 */ "............",
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "lllllllllllll..."
+ /* 4 */ "eeeeeeeeeeeen..."
+ /* 5 */ "qqqqqqqqqqren..."
+ /* 6 */ "mmmmmmmmmmren..."
+ /* 7 */ "mmmmmmmmmmren..."
+ /* 8 */ "mmmmmmmmmmren..."
+ /* 9 */ "mmmmmmmmmmren..."
+ /* 10 */ "mmmmmmmmmmren..."
+ /* 11 */ "mmmmmmmmmmren..."
+ /* 12 */ "mmmmmmmmmmren..."
+ /* 13 */ "mmmmmmmmmmren..."
+ /* 14 */ "mmmmmmmmmmren..."
+ /* 15 */ "mmmmmmmmmmren...",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 9, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2870,166 +3083,171 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_98
+ }, // WoodenHouseL14x14
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // PlainsVillage_99:
- // The data has been exported from the gallery Plains, area index 48, ID 99, created by Aloe_vera
+ // WoodenHouseL9x9:
+ // The data has been exported from the gallery Plains, area index 42, ID 93, created by xoft
{
// Size:
- 11, 7, 13, // SizeX = 11, SizeY = 7, SizeZ = 13
+ 11, 8, 11, // SizeX = 11, SizeY = 8, SizeZ = 11
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 6, 12, // MaxX, MaxY, MaxZ
+ 10, 7, 10, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 43: 0\n" /* doubleslab */
- "f: 2: 0\n" /* grass */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
"g: 17: 0\n" /* tree */
"h: 5: 0\n" /* wood */
"i: 64: 7\n" /* wooddoorblock */
- "j: 53: 3\n" /* woodstairs */
- "k: 85: 0\n" /* fence */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n:102: 0\n" /* glasspane */
- "o: 64:12\n" /* wooddoorblock */
- "p: 72: 0\n" /* woodplate */
- "q: 53: 7\n" /* woodstairs */
- "r: 50: 1\n" /* torch */
- "s: 50: 2\n" /* torch */
- "t: 53: 6\n" /* woodstairs */,
+ "n: 53: 7\n" /* woodstairs */
+ "o: 53: 1\n" /* woodstairs */
+ "p: 50: 3\n" /* torch */
+ "q: 50: 4\n" /* torch */
+ "r: 53: 6\n" /* woodstairs */
+ "s: 50: 1\n" /* torch */
+ "t: 50: 2\n" /* torch */
+ "u: 53: 3\n" /* woodstairs */
+ "v: 53: 0\n" /* woodstairs */
+ "w: 53: 5\n" /* woodstairs */
+ "x: 53: 4\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....abc...."
- /* 1 */ ".ddddddddd."
- /* 2 */ ".deeeedddd."
- /* 3 */ ".deeeedddd."
- /* 4 */ ".deeeedddd."
- /* 5 */ ".deeeedddd."
- /* 6 */ ".deeeedddd."
- /* 7 */ ".ddddddddd."
- /* 8 */ "..fffffff.."
- /* 9 */ "mmfffffffmm"
- /* 10 */ "mmfffffffmm"
- /* 11 */ "mmfffffffmm"
- /* 12 */ "mmfffffffmm"
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaa"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".ghhhihhhg."
- /* 2 */ ".h.e....jh."
- /* 3 */ ".h.e....kh."
- /* 4 */ ".h.e....lh."
- /* 5 */ ".h.......h."
- /* 6 */ ".h.......h."
- /* 7 */ ".ghhhihhhg."
- /* 8 */ "..k.....k.."
- /* 9 */ "mmk.....kmm"
- /* 10 */ "mmk.....kmm"
- /* 11 */ "mmk.....kmm"
- /* 12 */ "mmkkkkkkkmm"
+ /* 0 */ "bbbbaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "bbbbbaaaaab"
+ /* 7 */ "bbbbbaaaaab"
+ /* 8 */ "bbbbbaaaaab"
+ /* 9 */ "bbbbbaaaaab"
+ /* 10 */ "bbbbbbbbbbb"
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".gnnhohnng."
- /* 2 */ ".n.......n."
- /* 3 */ ".n......pn."
- /* 4 */ ".h.......h."
- /* 5 */ ".n.......n."
- /* 6 */ ".n.......n."
- /* 7 */ ".gnnhohnng."
- /* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 0 */ "....cde...."
+ /* 1 */ ".fffffffff."
+ /* 2 */ ".fffffffff."
+ /* 3 */ ".fffffffff."
+ /* 4 */ ".fffffffff."
+ /* 5 */ ".fffffffff."
+ /* 6 */ ".....fffff."
+ /* 7 */ "mmmm.fffff."
+ /* 8 */ "mmmm.fffff."
+ /* 9 */ "mmmm.fffff."
+ /* 10 */ "mmmm......."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "lllllllllll"
- /* 1 */ "qhhhhhhhhhq"
+ /* 0 */ "..........."
+ /* 1 */ ".ghhhihhhg."
/* 2 */ ".h.......h."
/* 3 */ ".h.......h."
- /* 4 */ ".hr.....sh."
- /* 5 */ ".h.......h."
- /* 6 */ ".h.......h."
- /* 7 */ "thhhhhhhhht"
- /* 8 */ "jjjjjjjjjjj"
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 4 */ ".h.......h."
+ /* 5 */ ".ghhhg...h."
+ /* 6 */ ".....h...h."
+ /* 7 */ "mmmm.h...h."
+ /* 8 */ "mmmm.h...h."
+ /* 9 */ "mmmm.ghhhg."
+ /* 10 */ "mmmm......."
// Level 4
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "lllllllllll"
- /* 2 */ "qhhhhhhhhhq"
- /* 3 */ ".h.......h."
- /* 4 */ ".h.......h."
- /* 5 */ ".h.......h."
- /* 6 */ "thhhhhhhhht"
- /* 7 */ "jjjjjjjjjjj"
- /* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 1 */ ".gjjhkhjjg."
+ /* 2 */ ".j.......j."
+ /* 3 */ ".j.......j."
+ /* 4 */ ".j.......j."
+ /* 5 */ ".gjjjg...h."
+ /* 6 */ ".....j...j."
+ /* 7 */ "mmmm.j...j."
+ /* 8 */ "mmmm.j...j."
+ /* 9 */ "mmmm.gjjjg."
+ /* 10 */ "mmmm......."
// Level 5
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "lllllllllll"
- /* 3 */ "qhhhhhhhhhq"
- /* 4 */ ".h.......h."
- /* 5 */ "thhhhhhhhht"
- /* 6 */ "jjjjjjjjjjj"
- /* 7 */ "..........."
- /* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 0 */ "lllllllllll"
+ /* 1 */ "nhhhhhhhhho"
+ /* 2 */ ".h..p.p..ho"
+ /* 3 */ ".h.......ho"
+ /* 4 */ ".h...q...ho"
+ /* 5 */ "rhhhhhs.tho"
+ /* 6 */ "uuuuuh...ho"
+ /* 7 */ "mmmmvh...ho"
+ /* 8 */ "mmmmvh...ho"
+ /* 9 */ "mmmmvhhhhho"
+ /* 10 */ "mmmmvw...xo"
// Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
+ /* 1 */ "lllllllllo."
+ /* 2 */ "nhhhhhhhho."
+ /* 3 */ ".h......ho."
+ /* 4 */ "rhhhhhh.ho."
+ /* 5 */ "uuuuuuh.ho."
+ /* 6 */ ".....vh.ho."
+ /* 7 */ "mmmm.vh.ho."
+ /* 8 */ "mmmm.vh.ho."
+ /* 9 */ "mmmm.vhhho."
+ /* 10 */ "mmmm.vw.xo."
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "..........."
- /* 3 */ "lllllllllll"
- /* 4 */ "hhhhhhhhhhh"
- /* 5 */ "jjjjjjjjjjj"
- /* 6 */ "..........."
- /* 7 */ "..........."
- /* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm",
+ /* 2 */ "lllllllll.."
+ /* 3 */ "hhhhhhhho.."
+ /* 4 */ "uuuuuuvho.."
+ /* 5 */ "......vho.."
+ /* 6 */ "......vho.."
+ /* 7 */ "mmmm..vho.."
+ /* 8 */ "mmmm..vho.."
+ /* 9 */ "mmmm..vho.."
+ /* 10 */ "mmmm..vho..",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3048,193 +3266,169 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // PlainsVillage_99
+ }, // WoodenHouseL9x9
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // RoofedWell:
- // The data has been exported from the gallery Plains, area index 119, ID 271, created by STR_Warrior
+ // WoodenHouseU13x9:
+ // The data has been exported from the gallery Plains, area index 43, ID 94, created by xoft
{
// Size:
- 7, 15, 7, // SizeX = 7, SizeY = 15, SizeZ = 7
+ 15, 8, 11, // SizeX = 15, SizeY = 8, SizeZ = 11
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 6, 14, 6, // MaxX, MaxY, MaxZ
+ 14, 7, 10, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "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:118: 3\n" /* cauldronblock */
- "h: 85: 0\n" /* fence */
- "i: 53: 2\n" /* woodstairs */
- "j: 53: 7\n" /* woodstairs */
- "k: 5: 0\n" /* wood */
- "l: 53: 4\n" /* woodstairs */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 5\n" /* woodstairs */
- "o: 53: 6\n" /* woodstairs */
- "p: 53: 3\n" /* woodstairs */,
+ "n: 53: 0\n" /* woodstairs */
+ "o: 53: 1\n" /* woodstairs */
+ "p: 50: 3\n" /* torch */
+ "q: 50: 4\n" /* torch */
+ "r: 50: 2\n" /* torch */
+ "s: 50: 1\n" /* torch */
+ "t: 53: 3\n" /* woodstairs */
+ "u: 53: 5\n" /* woodstairs */
+ "v: 53: 4\n" /* woodstairs */,
// Block data:
// Level 0
- /* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "aaaaaaa"
- /* 2 */ "aaaaaaa"
- /* 3 */ "aaaaaaa"
- /* 4 */ "aaaaaaa"
- /* 5 */ "aaaaaaa"
- /* 6 */ "aaaaaaa"
-
- // Level 1
- /* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "abbbbba"
- /* 2 */ "abcccba"
- /* 3 */ "abcccba"
- /* 4 */ "abcccba"
- /* 5 */ "abbbbba"
- /* 6 */ "aaaaaaa"
-
- // Level 2
- /* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "abbbbba"
- /* 2 */ "abcccba"
- /* 3 */ "abcccba"
- /* 4 */ "abcccba"
- /* 5 */ "abbbbba"
- /* 6 */ "aaaaaaa"
-
- // Level 3
- /* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "abbbbba"
- /* 2 */ "abcccba"
- /* 3 */ "abcccba"
- /* 4 */ "abcccba"
- /* 5 */ "abbbbba"
- /* 6 */ "aaaaaaa"
-
- // Level 4
- /* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "abbbbba"
- /* 2 */ "abcccba"
- /* 3 */ "abcccba"
- /* 4 */ "abcccba"
- /* 5 */ "abbbbba"
- /* 6 */ "aaaaaaa"
-
- // Level 5
- /* z\x* 0123456 */
- /* 0 */ "ddddddd"
- /* 1 */ "dbbbbbd"
- /* 2 */ "dbcccbd"
- /* 3 */ "dbcccbd"
- /* 4 */ "dbcccbd"
- /* 5 */ "dbbbbbd"
- /* 6 */ "ddddddd"
-
- // Level 6
- /* z\x* 0123456 */
- /* 0 */ "ddddddd"
- /* 1 */ "dbbbbbd"
- /* 2 */ "dbcccbd"
- /* 3 */ "dbcccbd"
- /* 4 */ "dbcccbd"
- /* 5 */ "dbbbbbd"
- /* 6 */ "ddddddd"
-
- // Level 7
- /* z\x* 0123456 */
- /* 0 */ "ddddddd"
- /* 1 */ "dbbbbbd"
- /* 2 */ "dbcccbd"
- /* 3 */ "dbcccbd"
- /* 4 */ "dbcccbd"
- /* 5 */ "dbbbbbd"
- /* 6 */ "ddddddd"
-
- // Level 8
- /* z\x* 0123456 */
- /* 0 */ "eefffee"
- /* 1 */ "ebbbbbe"
- /* 2 */ "fbcccbf"
- /* 3 */ "fbcccbf"
- /* 4 */ "fbcccbf"
- /* 5 */ "ebbbbbe"
- /* 6 */ "eefffee"
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "aaaaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaaaaa"
- // Level 9
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".bbbbb."
- /* 2 */ ".b...b."
- /* 3 */ ".b.g.b."
- /* 4 */ ".b...b."
- /* 5 */ ".bbbbb."
- /* 6 */ "......."
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "bbbbbbaaabbbbbb"
+ /* 1 */ "baaaaaaaaaaaaab"
+ /* 2 */ "baaaaaaaaaaaaab"
+ /* 3 */ "baaaaaaaaaaaaab"
+ /* 4 */ "baaaaaaaaaaaaab"
+ /* 5 */ "baaaaaaaaaaaaab"
+ /* 6 */ "baaaaabbbaaaaab"
+ /* 7 */ "baaaaabbbaaaaab"
+ /* 8 */ "baaaaabbbaaaaab"
+ /* 9 */ "baaaaabbbaaaaab"
+ /* 10 */ "bbbbbbbbbbbbbbb"
- // Level 10
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".h...h."
- /* 2 */ "......."
- /* 3 */ "...h..."
- /* 4 */ "......."
- /* 5 */ ".h...h."
- /* 6 */ "......."
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "......cde......"
+ /* 1 */ ".fffffffffffff."
+ /* 2 */ ".fffffffffffff."
+ /* 3 */ ".fffffffffffff."
+ /* 4 */ ".fffffffffffff."
+ /* 5 */ ".fffffffffffff."
+ /* 6 */ ".fffff...fffff."
+ /* 7 */ ".fffff...fffff."
+ /* 8 */ ".fffff...fffff."
+ /* 9 */ ".fffff...fffff."
+ /* 10 */ "..............."
- // Level 11
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".h...h."
- /* 2 */ "......."
- /* 3 */ "...h..."
- /* 4 */ "......."
- /* 5 */ ".h...h."
- /* 6 */ "......."
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".ghhhhhihhhhhg."
+ /* 2 */ ".h...........h."
+ /* 3 */ ".h...........h."
+ /* 4 */ ".h...........h."
+ /* 5 */ ".h...ghhhg...h."
+ /* 6 */ ".h...h...h...h."
+ /* 7 */ ".h...h...h...h."
+ /* 8 */ ".h...h...h...h."
+ /* 9 */ ".ghhhg...ghhhg."
+ /* 10 */ "..............."
- // Level 12
- /* z\x* 0123456 */
- /* 0 */ "iiiiiii"
- /* 1 */ "jkjjjkj"
- /* 2 */ ".l...n."
- /* 3 */ ".l.h.n."
- /* 4 */ ".l...n."
- /* 5 */ "okoooko"
- /* 6 */ "ppppppp"
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".gjjjjhkhjjjjg."
+ /* 2 */ ".j...........j."
+ /* 3 */ ".j...........j."
+ /* 4 */ ".j...........j."
+ /* 5 */ ".h...gjjjg...h."
+ /* 6 */ ".j...j...j...j."
+ /* 7 */ ".j...j...j...j."
+ /* 8 */ ".j...j...j...j."
+ /* 9 */ ".gjjjg...gjjjg."
+ /* 10 */ "..............."
- // Level 13
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ "iiiiiii"
- /* 2 */ "jkjjjkj"
- /* 3 */ ".k.h.k."
- /* 4 */ "okoooko"
- /* 5 */ "ppppppp"
- /* 6 */ "......."
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "lllllllllllllll"
+ /* 1 */ "nhhhhhhhhhhhhho"
+ /* 2 */ "nh....p.p....ho"
+ /* 3 */ "nh...........ho"
+ /* 4 */ "nh...q...q...ho"
+ /* 5 */ "nh..rhhhhhs..ho"
+ /* 6 */ "nh...httth...ho"
+ /* 7 */ "nh...ho.nh...ho"
+ /* 8 */ "nh...ho.nh...ho"
+ /* 9 */ "nhhhhho.nhhhhho"
+ /* 10 */ "nu...vo.nu...vo"
- // Level 14
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ "......."
- /* 2 */ "iiiiiii"
- /* 3 */ "kkkkkkk"
- /* 4 */ "ppppppp"
- /* 5 */ "......."
- /* 6 */ ".......",
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".llllllllllllo."
+ /* 2 */ ".nhhhhhhhhhhho."
+ /* 3 */ ".nhhhhhhhhhhho."
+ /* 4 */ ".nhhhhhhhhhhho."
+ /* 5 */ ".nhhhotttthhho."
+ /* 6 */ ".nhhho...nhhho."
+ /* 7 */ ".nhhho...nhhho."
+ /* 8 */ ".nhhho...nhhho."
+ /* 9 */ ".nhhho...nhhho."
+ /* 10 */ ".nu.vo...nu.vo."
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..nllllllllll.."
+ /* 3 */ "..nhhhhhhhhho.."
+ /* 4 */ "..nhotttttnho.."
+ /* 5 */ "..nho.....nho.."
+ /* 6 */ "..nho.....nho.."
+ /* 7 */ "..nho.....nho.."
+ /* 8 */ "..nho.....nho.."
+ /* 9 */ "..nho.....nho.."
+ /* 10 */ "..nho.....nho..",
// Connectors:
- "",
+ "-1: 7, 2, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3253,247 +3447,281 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // RoofedWell
+ }, // WoodenHouseU13x9
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Windmill:
+ // WoodenMill5x5:
// The data has been exported from the gallery Plains, area index 60, ID 111, created by Aloe_vera
{
// Size:
- 9, 16, 13, // SizeX = 9, SizeY = 16, SizeZ = 13
+ 9, 18, 13, // SizeX = 9, SizeY = 18, SizeZ = 13
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 8, 15, 12, // MaxX, MaxY, MaxZ
+ 8, 17, 12, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 4: 0\n" /* cobblestone */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 67: 3\n" /* stairs */
- "e: 17: 0\n" /* tree */
- "f: 5: 0\n" /* wood */
- "g: 54: 4\n" /* chest */
- "h:154: 4\n" /* hopper */
- "i: 64: 4\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 85: 0\n" /* fence */
- "l: 64:12\n" /* wooddoorblock */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 4: 0\n" /* cobblestone */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 67: 3\n" /* stairs */
+ "g: 17: 0\n" /* tree */
+ "h: 5: 0\n" /* wood */
+ "i: 54: 4\n" /* chest */
+ "j:154: 4\n" /* hopper */
+ "k: 64: 4\n" /* wooddoorblock */
+ "l:102: 0\n" /* glasspane */
"m: 19: 0\n" /* sponge */
- "n: 50: 2\n" /* torch */
- "o: 35: 0\n" /* wool */
- "p: 17: 4\n" /* tree */
- "q: 17: 8\n" /* tree */
- "r: 53: 2\n" /* woodstairs */
- "s: 53: 7\n" /* woodstairs */
- "t: 53: 6\n" /* woodstairs */
- "u: 53: 3\n" /* woodstairs */,
+ "n: 85: 0\n" /* fence */
+ "o: 64:12\n" /* wooddoorblock */
+ "p: 50: 2\n" /* torch */
+ "q: 35: 0\n" /* wool */
+ "r: 17: 4\n" /* tree */
+ "s: 17: 8\n" /* tree */
+ "t: 53: 2\n" /* woodstairs */
+ "u: 53: 7\n" /* woodstairs */
+ "v: 53: 6\n" /* woodstairs */
+ "w: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 012345678 */
+ /* 0 */ "aaaaaaaaa"
+ /* 1 */ "aaaaaaaaa"
+ /* 2 */ "aaaaaaaaa"
+ /* 3 */ "aaaaaaaaa"
+ /* 4 */ "aaaaaaaaa"
+ /* 5 */ "aaaaaaaaa"
+ /* 6 */ "aaaaaaaaa"
+ /* 7 */ "aaaaaaaaa"
+ /* 8 */ "aaaaaaaaa"
+ /* 9 */ "aaaaaaaaa"
+ /* 10 */ "aaaaaaaaa"
+ /* 11 */ "aaaaaaaaa"
+ /* 12 */ "aaaaaaaaa"
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "bbbbbbbbb"
+ /* 1 */ "bbbbbbbbb"
+ /* 2 */ "bbbbbbbbb"
+ /* 3 */ "bbbbbbbbb"
+ /* 4 */ "baaaaabbb"
+ /* 5 */ "baaaaaabb"
+ /* 6 */ "baaaaaabb"
+ /* 7 */ "baaaaaabb"
+ /* 8 */ "baaaaabbb"
+ /* 9 */ "bbbbbbbbb"
+ /* 10 */ "bbbbbbbbb"
+ /* 11 */ "bbbbbbbbb"
+ /* 12 */ "bbbbbbbbb"
+
+ // Level 2
+ /* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".aaaaa..."
- /* 5 */ ".aaaaab.."
- /* 6 */ ".aaaaac.."
- /* 7 */ ".aaaaad.."
- /* 8 */ ".aaaaa..."
+ /* 4 */ ".ccccc..."
+ /* 5 */ ".cccccd.."
+ /* 6 */ ".ccccce.."
+ /* 7 */ ".cccccf.."
+ /* 8 */ ".ccccc..."
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 1
+ // Level 3
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".efffe..."
- /* 5 */ ".f...f..."
- /* 6 */ ".fgh.i..."
- /* 7 */ ".f...f..."
- /* 8 */ ".efffe..."
+ /* 4 */ ".ghhhg..."
+ /* 5 */ ".h...h..."
+ /* 6 */ ".hij.k..."
+ /* 7 */ ".h...h..."
+ /* 8 */ ".ghhhg..."
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 2
+ // Level 4
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".ejjje..."
- /* 5 */ ".j...f..."
- /* 6 */ ".j.k.l..."
- /* 7 */ ".j...f..."
- /* 8 */ ".ejjje..."
+ /* 4 */ ".glllg..."
+ /* 5 */ ".l...h..."
+ /* 6 */ ".l.n.o..."
+ /* 7 */ ".l...h..."
+ /* 8 */ ".glllg..."
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 3
+ // Level 5
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".efffe..."
- /* 5 */ ".f..nf..."
- /* 6 */ ".f.k.f..."
- /* 7 */ ".f..nf..k"
- /* 8 */ ".efffe..o"
+ /* 4 */ ".ghhhg..."
+ /* 5 */ ".h..ph..."
+ /* 6 */ ".h.n.h..."
+ /* 7 */ ".h..ph..n"
+ /* 8 */ ".ghhhg..q"
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 4
+ // Level 6
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".epppe..."
- /* 5 */ ".q...q..."
- /* 6 */ ".q.k.q..."
- /* 7 */ ".q...q..k"
- /* 8 */ ".epppe..o"
+ /* 4 */ ".grrrg..."
+ /* 5 */ ".s...s..."
+ /* 6 */ ".s.n.s..."
+ /* 7 */ ".s...s..n"
+ /* 8 */ ".grrrg..q"
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 5
+ // Level 7
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".efffe..."
- /* 5 */ ".f...f..."
- /* 6 */ ".f.k.f..k"
- /* 7 */ ".f...f..o"
- /* 8 */ ".efffe..o"
+ /* 4 */ ".ghhhg..."
+ /* 5 */ ".h...h..."
+ /* 6 */ ".h.n.h..n"
+ /* 7 */ ".h...h..q"
+ /* 8 */ ".ghhhg..q"
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 6
+ // Level 8
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "........."
- /* 4 */ ".ejjje..."
- /* 5 */ ".j...j..."
- /* 6 */ ".j.k.j..k"
- /* 7 */ ".j...j..o"
- /* 8 */ ".ejjje..."
+ /* 4 */ ".glllg..."
+ /* 5 */ ".l...l..."
+ /* 6 */ ".l.n.l..n"
+ /* 7 */ ".l...l..q"
+ /* 8 */ ".glllg..."
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 7
+ // Level 9
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.o"
- /* 1 */ "mmmmmmm.o"
- /* 2 */ "mmmmmmm.o"
+ /* 0 */ "mmmmmmm.q"
+ /* 1 */ "mmmmmmm.q"
+ /* 2 */ "mmmmmmm.q"
/* 3 */ "........."
- /* 4 */ ".efffe..."
- /* 5 */ ".f...f..k"
- /* 6 */ ".f.k.f..o"
- /* 7 */ ".f...f..o"
- /* 8 */ ".efffe..."
+ /* 4 */ ".ghhhg..."
+ /* 5 */ ".h...h..n"
+ /* 6 */ ".h.n.h..q"
+ /* 7 */ ".h...h..q"
+ /* 8 */ ".ghhhg..."
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 8
+ // Level 10
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.k"
- /* 1 */ "mmmmmmm.k"
- /* 2 */ "mmmmmmm.o"
- /* 3 */ "........o"
- /* 4 */ ".epppe..o"
- /* 5 */ ".q...q..k"
- /* 6 */ ".q.k.q..o"
- /* 7 */ ".q...q..k"
- /* 8 */ ".epppe..k"
+ /* 0 */ "mmmmmmm.n"
+ /* 1 */ "mmmmmmm.n"
+ /* 2 */ "mmmmmmm.q"
+ /* 3 */ "........q"
+ /* 4 */ ".grrrg..q"
+ /* 5 */ ".s...s..n"
+ /* 6 */ ".s.n.s..q"
+ /* 7 */ ".s...s..n"
+ /* 8 */ ".grrrg..n"
/* 9 */ "........."
/* 10 */ "mmmmmmm.."
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 9
+ // Level 11
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.k"
- /* 3 */ "rrrrrrr.k"
- /* 4 */ "sfffffs.o"
- /* 5 */ ".f...f..o"
- /* 6 */ ".f.kppppp"
- /* 7 */ ".f...f..o"
- /* 8 */ "tffffft.o"
- /* 9 */ "uuuuuuu.k"
- /* 10 */ "mmmmmmm.k"
+ /* 2 */ "mmmmmmm.n"
+ /* 3 */ "ttttttt.n"
+ /* 4 */ "uhhhhhu.q"
+ /* 5 */ ".h...h..q"
+ /* 6 */ ".h.nrrrrr"
+ /* 7 */ ".h...h..q"
+ /* 8 */ "vhhhhhv.q"
+ /* 9 */ "wwwwwww.n"
+ /* 10 */ "mmmmmmm.n"
/* 11 */ "mmmmmmm.."
/* 12 */ "mmmmmmm.."
- // Level 10
+ // Level 12
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "mmmmmmm.."
- /* 4 */ "rrrrrrr.k"
- /* 5 */ "sfffffs.k"
- /* 6 */ ".f...f..o"
- /* 7 */ "tffffft.k"
- /* 8 */ "uuuuuuu.o"
- /* 9 */ "mmmmmmm.o"
- /* 10 */ "mmmmmmm.o"
- /* 11 */ "mmmmmmm.k"
- /* 12 */ "mmmmmmm.k"
+ /* 4 */ "ttttttt.n"
+ /* 5 */ "uhhhhhu.n"
+ /* 6 */ ".h...h..q"
+ /* 7 */ "vhhhhhv.n"
+ /* 8 */ "wwwwwww.q"
+ /* 9 */ "mmmmmmm.q"
+ /* 10 */ "mmmmmmm.q"
+ /* 11 */ "mmmmmmm.n"
+ /* 12 */ "mmmmmmm.n"
- // Level 11
+ // Level 13
/* z\x* 012345678 */
/* 0 */ "mmmmmmm.."
/* 1 */ "mmmmmmm.."
/* 2 */ "mmmmmmm.."
/* 3 */ "mmmmmmm.."
/* 4 */ "mmmmmmm.."
- /* 5 */ "rrrrrrr.o"
- /* 6 */ "fffffff.o"
- /* 7 */ "uuuuuuu.k"
+ /* 5 */ "ttttttt.q"
+ /* 6 */ "hhhhhhh.q"
+ /* 7 */ "wwwwwww.n"
/* 8 */ "mmmmmmm.."
/* 9 */ "mmmmmmm.."
- /* 10 */ "mmmmmmm.o"
- /* 11 */ "mmmmmmm.o"
- /* 12 */ "mmmmmmm.o"
+ /* 10 */ "mmmmmmm.q"
+ /* 11 */ "mmmmmmm.q"
+ /* 12 */ "mmmmmmm.q"
- // Level 12
+ // Level 14
/* z\x* 012345678 */
/* 0 */ "........."
/* 1 */ "........."
/* 2 */ "........."
/* 3 */ "........."
/* 4 */ "........."
- /* 5 */ "........o"
- /* 6 */ "........k"
+ /* 5 */ "........q"
+ /* 6 */ "........n"
/* 7 */ "........."
/* 8 */ "........."
/* 9 */ "........."
@@ -3501,15 +3729,31 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "........."
/* 12 */ "........."
- // Level 13
+ // Level 15
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........q"
+ /* 5 */ "........q"
+ /* 6 */ "........n"
+ /* 7 */ "........."
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
+
+ // Level 16
/* z\x* 012345678 */
/* 0 */ "........."
/* 1 */ "........."
/* 2 */ "........."
/* 3 */ "........."
- /* 4 */ "........o"
- /* 5 */ "........o"
- /* 6 */ "........k"
+ /* 4 */ "........q"
+ /* 5 */ "........n"
+ /* 6 */ "........."
/* 7 */ "........."
/* 8 */ "........."
/* 9 */ "........."
@@ -3517,40 +3761,215 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "........."
/* 12 */ "........."
- // Level 14
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ "........."
- /* 2 */ "........."
- /* 3 */ "........."
- /* 4 */ "........o"
- /* 5 */ "........k"
- /* 6 */ "........."
- /* 7 */ "........."
- /* 8 */ "........."
- /* 9 */ "........."
- /* 10 */ "........."
- /* 11 */ "........."
- /* 12 */ "........."
+ // Level 17
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........q"
+ /* 5 */ "........n"
+ /* 6 */ "........."
+ /* 7 */ "........."
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ ".........",
+
+ // Connectors:
+ "-1: 8, 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,
+ }, // WoodenMill5x5
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // WoodenStables:
+ // The data has been exported from the gallery Plains, area index 55, ID 106, created by Aloe_vera
+ {
+ // Size:
+ 15, 10, 9, // SizeX = 15, SizeY = 10, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 9, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 4: 0\n" /* cobblestone */
+ "g: 17: 0\n" /* tree */
+ "h:107: 0\n" /* fencegate */
+ "i:107: 4\n" /* fencegate */
+ "j: 5: 0\n" /* wood */
+ "k:107: 6\n" /* fencegate */
+ "l: 85: 0\n" /* fence */
+ "m: 19: 0\n" /* sponge */
+ "n:170: 0\n" /* haybale */
+ "o:170: 4\n" /* haybale */
+ "p:170: 8\n" /* haybale */
+ "q: 50: 1\n" /* torch */
+ "r: 50: 2\n" /* torch */
+ "s: 53: 2\n" /* woodstairs */
+ "t: 53: 7\n" /* woodstairs */
+ "u: 53: 6\n" /* woodstairs */
+ "v: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "aaaaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "baaaaaaaaaaaaab"
+ /* 1 */ "baaaaaaaaaaaaab"
+ /* 2 */ "baaaaaaaaaaaaab"
+ /* 3 */ "baaaaaaaaaaaaab"
+ /* 4 */ "baaaaaaaaaaaaab"
+ /* 5 */ "baaaaaaaaaaaaab"
+ /* 6 */ "baaaaaaaaaaaaab"
+ /* 7 */ "baaaaaaaaaaaaab"
+ /* 8 */ "bbbbbbbbbbbbbbb"
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ ".cddddddddddde."
+ /* 1 */ ".fffffffffffff."
+ /* 2 */ ".faaaaaaaaaaaf."
+ /* 3 */ ".faaaaaaaaaaaf."
+ /* 4 */ ".faaaaaaaaaaaf."
+ /* 5 */ ".faaaaaaaaaaaf."
+ /* 6 */ ".faaaaaaaaaaaf."
+ /* 7 */ ".fffffffffffff."
+ /* 8 */ "..............."
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".ghihjhihjhkhg."
+ /* 2 */ ".l...l...l...l."
+ /* 3 */ ".l...l...l...l."
+ /* 4 */ ".l...l...l...l."
+ /* 5 */ ".l...l...l...l."
+ /* 6 */ ".ln..l..olp..l."
+ /* 7 */ ".gllljllljlllg."
+ /* 8 */ "..............."
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".g...j...j...g."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ ".g...j...j...g."
+ /* 8 */ "..............."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".gq.rjq.rjq.rg."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ ".g...j...j...g."
+ /* 8 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "sssssssssssssss"
+ /* 1 */ "tjjjjjjjjjjjjjt"
+ /* 2 */ ".j...........j."
+ /* 3 */ ".j...........j."
+ /* 4 */ ".j...........j."
+ /* 5 */ ".j...........j."
+ /* 6 */ ".j...........j."
+ /* 7 */ "ujjjjjjjjjjjjju"
+ /* 8 */ "vvvvvvvvvvvvvvv"
- // Level 15
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ "........."
- /* 2 */ "........."
- /* 3 */ "........."
- /* 4 */ "........o"
- /* 5 */ "........k"
- /* 6 */ "........."
- /* 7 */ "........."
- /* 8 */ "........."
- /* 9 */ "........."
- /* 10 */ "........."
- /* 11 */ "........."
- /* 12 */ ".........",
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "sssssssssssssss"
+ /* 2 */ "tjjjjjjjjjjjjjt"
+ /* 3 */ ".j...........j."
+ /* 4 */ ".j...........j."
+ /* 5 */ ".j...........j."
+ /* 6 */ "ujjjjjjjjjjjjju"
+ /* 7 */ "vvvvvvvvvvvvvvv"
+ /* 8 */ "..............."
+
+ // Level 8
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "sssssssssssssss"
+ /* 3 */ "tjjjjjjjjjjjjjt"
+ /* 4 */ ".j...........j."
+ /* 5 */ "ujjjjjjjjjjjjju"
+ /* 6 */ "vvvvvvvvvvvvvvv"
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+
+ // Level 9
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "sssssssssssssss"
+ /* 4 */ "jjjjjjjjjjjjjjj"
+ /* 5 */ "vvvvvvvvvvvvvvv"
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "...............",
// Connectors:
- "-1: 5, 0, 6: 5\n" /* Type -1, direction X+ */,
+ "-1: 7, 2, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3569,7 +3988,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // Windmill
+ }, // WoodenStables
}; // g_PlainsVillagePrefabs
@@ -3580,7 +3999,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Well:
+ // CobbleWell4x4:
// The data has been exported from the gallery Plains, area index 1, ID 5, created by Aloe_vera
{
// Size:
@@ -3713,7 +4132,215 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
// AddWeightIfSame:
0,
- }, // Well
+ }, // CobbleWell4x4
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // RoofedWell:
+ // The data has been exported from the gallery Plains, area index 119, ID 271, created by STR_Warrior
+ {
+ // Size:
+ 7, 15, 7, // SizeX = 7, SizeY = 15, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 14, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "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:118: 3\n" /* cauldronblock */
+ "h: 85: 0\n" /* fence */
+ "i: 53: 2\n" /* woodstairs */
+ "j: 53: 7\n" /* woodstairs */
+ "k: 5: 0\n" /* wood */
+ "l: 53: 4\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n: 53: 5\n" /* woodstairs */
+ "o: 53: 6\n" /* woodstairs */
+ "p: 53: 3\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "eefffee"
+ /* 1 */ "ebbbbbe"
+ /* 2 */ "fbcccbf"
+ /* 3 */ "fbcccbf"
+ /* 4 */ "fbcccbf"
+ /* 5 */ "ebbbbbe"
+ /* 6 */ "eefffee"
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".bbbbb."
+ /* 2 */ ".b...b."
+ /* 3 */ ".b.g.b."
+ /* 4 */ ".b...b."
+ /* 5 */ ".bbbbb."
+ /* 6 */ "......."
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".h...h."
+ /* 2 */ "......."
+ /* 3 */ "...h..."
+ /* 4 */ "......."
+ /* 5 */ ".h...h."
+ /* 6 */ "......."
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".h...h."
+ /* 2 */ "......."
+ /* 3 */ "...h..."
+ /* 4 */ "......."
+ /* 5 */ ".h...h."
+ /* 6 */ "......."
+
+ // Level 12
+ /* z\x* 0123456 */
+ /* 0 */ "iiiiiii"
+ /* 1 */ "jkjjjkj"
+ /* 2 */ ".l...n."
+ /* 3 */ ".l.h.n."
+ /* 4 */ ".l...n."
+ /* 5 */ "okoooko"
+ /* 6 */ "ppppppp"
+
+ // Level 13
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "iiiiiii"
+ /* 2 */ "jkjjjkj"
+ /* 3 */ ".k.h.k."
+ /* 4 */ "okoooko"
+ /* 5 */ "ppppppp"
+ /* 6 */ "......."
+
+ // Level 14
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "iiiiiii"
+ /* 3 */ "kkkkkkk"
+ /* 4 */ "ppppppp"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "2: 0, 9, 3: 4\n" /* Type 2, direction X- */
+ "2: 3, 9, 6: 3\n" /* Type 2, direction Z+ */
+ "2: 6, 9, 3: 5\n" /* Type 2, direction X+ */
+ "2: 3, 9, 0: 2\n" /* Type 2, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // RoofedWell
};
--
cgit v1.2.3
From 7004043c6164c6b22346f94489cb823f9495738f Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 17 May 2014 21:54:04 +0200
Subject: Village houses are height-adjusted onto the terrain.
---
src/Generating/PieceGenerator.cpp | 11 +++++++++++
src/Generating/PieceGenerator.h | 7 +++++++
src/Generating/Prefab.cpp | 12 ++++++++++--
src/Generating/Prefab.h | 3 +++
src/Generating/VillageGen.cpp | 41 ++++++++++++++++++++++++++++++++++-----
5 files changed, 67 insertions(+), 7 deletions(-)
diff --git a/src/Generating/PieceGenerator.cpp b/src/Generating/PieceGenerator.cpp
index ce19c1c95..c12559d3f 100644
--- a/src/Generating/PieceGenerator.cpp
+++ b/src/Generating/PieceGenerator.cpp
@@ -297,6 +297,17 @@ cPlacedPiece::cPlacedPiece(const cPlacedPiece * a_Parent, const cPiece & a_Piece
+cPiece::cConnector cPlacedPiece::GetRotatedConnector(size_t a_Index) const
+{
+ cPiece::cConnectors Connectors = m_Piece->GetConnectors();
+ ASSERT(Connectors.size() >= a_Index);
+ return m_Piece->RotateMoveConnector(Connectors[a_Index], m_NumCCWRotations, m_Coords.x, m_Coords.y, m_Coords.z);
+}
+
+
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cPieceGenerator:
diff --git a/src/Generating/PieceGenerator.h b/src/Generating/PieceGenerator.h
index 16bec3bb4..56ce996d2 100644
--- a/src/Generating/PieceGenerator.h
+++ b/src/Generating/PieceGenerator.h
@@ -144,6 +144,13 @@ public:
const cCuboid & GetHitBox (void) const { return m_HitBox; }
int GetDepth (void) const { return m_Depth; }
+ /** Returns the coords as a modifiable object. */
+ Vector3i & GetCoords(void) { return m_Coords; }
+
+ /** Returns the connector at the specified index, rotated in the actual placement.
+ Undefined behavior if a_Index is out of range. */
+ cPiece::cConnector GetRotatedConnector(size_t a_Index) const;
+
protected:
const cPlacedPiece * m_Parent;
const cPiece * m_Piece;
diff --git a/src/Generating/Prefab.cpp b/src/Generating/Prefab.cpp
index 9aef7a94b..506e1c2cc 100644
--- a/src/Generating/Prefab.cpp
+++ b/src/Generating/Prefab.cpp
@@ -191,13 +191,21 @@ void cPrefab::AddRotatedBlockAreas(void)
void cPrefab::Draw(cChunkDesc & a_Dest, const cPlacedPiece * a_Placement) const
+{
+ Draw(a_Dest, a_Placement->GetCoords(), a_Placement->GetNumCCWRotations());
+}
+
+
+
+
+void cPrefab::Draw(cChunkDesc & a_Dest, const Vector3i & a_Placement, int a_NumRotations) const
{
// Draw the basic image:
- Vector3i Placement = a_Placement->GetCoords();
+ Vector3i Placement(a_Placement);
int ChunkStartX = a_Dest.GetChunkX() * cChunkDef::Width;
int ChunkStartZ = a_Dest.GetChunkZ() * cChunkDef::Width;
Placement.Move(-ChunkStartX, 0, -ChunkStartZ);
- const cBlockArea & Image = m_BlockArea[a_Placement->GetNumCCWRotations()];
+ const cBlockArea & Image = m_BlockArea[a_NumRotations];
a_Dest.WriteBlockArea(Image, Placement.x, Placement.y, Placement.z, m_MergeStrategy);
// If requested, draw the floor (from the bottom of the prefab down to the nearest non-air)
diff --git a/src/Generating/Prefab.h b/src/Generating/Prefab.h
index c08413e87..2b89a204c 100644
--- a/src/Generating/Prefab.h
+++ b/src/Generating/Prefab.h
@@ -94,6 +94,9 @@ public:
/** Draws the prefab into the specified chunk, according to the placement stored in the PlacedPiece. */
void Draw(cChunkDesc & a_Dest, const cPlacedPiece * a_Placement) const;
+ /** Draws the prefab into the specified chunks, according to the specified placement and rotations. */
+ void Draw(cChunkDesc & a_Dest, const Vector3i & a_Placement, int a_NumRotations) const;
+
/** Returns true if the prefab has any connector of the specified type. */
bool HasConnectorType(int a_ConnectorType) const;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index b514a90cd..db81fb521 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -115,7 +115,9 @@ public:
m_HeightGen(a_HeightGen)
{
cBFSPieceGenerator pg(m_Prefabs, a_Seed);
- pg.PlacePieces(a_OriginX, 10, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
+ // Generate the pieces at very negative Y coords, so that we can later test
+ // Piece has negative Y coord -> hasn't been height-adjusted yet
+ pg.PlacePieces(a_OriginX, -1000, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
}
protected:
@@ -144,16 +146,45 @@ protected:
// cGrdStructGen::cStructure overrides:
virtual void DrawIntoChunk(cChunkDesc & a_Chunk) override
{
- // TODO
// Iterate over all items
- // Each intersecting prefab is placed on ground (if not already placed), then drawn
+ // Each intersecting prefab is placed on ground, then drawn
// Each intersecting road is drawn by replacing top soil blocks with gravel / sandstone blocks
- for (cPlacedPieces::const_iterator itr = m_Pieces.begin(), end = m_Pieces.end(); itr != end; ++itr)
+ cChunkDef::HeightMap HeightMap; // Heightmap for this chunk, used by roads
+ m_HeightGen.GenHeightMap(a_Chunk.GetChunkX(), a_Chunk.GetChunkZ(), HeightMap);
+ for (cPlacedPieces::iterator itr = m_Pieces.begin(), end = m_Pieces.end(); itr != end; ++itr)
{
- const cPrefab & Prefab = (const cPrefab &)((*itr)->GetPiece());
+ cPrefab & Prefab = (cPrefab &)((*itr)->GetPiece());
+ if ((*itr)->GetPiece().GetSize().y == 1)
+ {
+ // It's a road, special handling (change top terrain blocks
+ // TODO
+ Prefab.Draw(a_Chunk, (*itr)->GetCoords() + Vector3i(0, 1100, 0), (*itr)->GetNumCCWRotations());
+ continue;
+ }
+ if ((*itr)->GetCoords().y < 0)
+ {
+ PlacePieceOnGround(**itr);
+ }
Prefab.Draw(a_Chunk, *itr);
} // for itr - m_PlacedPieces[]
}
+
+
+ /** Adjusts the Y coord of the given piece so that the piece is on the ground.
+ Ground level is assumed to be represented by the first connector in the piece. */
+ void PlacePieceOnGround(cPlacedPiece & a_Piece)
+ {
+ cPiece::cConnector FirstConnector = a_Piece.GetRotatedConnector(0);
+ int ChunkX, ChunkZ;
+ int BlockX = FirstConnector.m_Pos.x;
+ int BlockZ = FirstConnector.m_Pos.z;
+ int BlockY;
+ cChunkDef::AbsoluteToRelative(BlockX, BlockY, BlockZ, ChunkX, ChunkZ);
+ cChunkDef::HeightMap HeightMap;
+ m_HeightGen.GenHeightMap(ChunkX, ChunkZ, HeightMap);
+ int TerrainHeight = cChunkDef::GetHeight(HeightMap, BlockX, BlockZ);
+ a_Piece.GetCoords().y += TerrainHeight - FirstConnector.m_Pos.y + 1;
+ }
} ;
--
cgit v1.2.3
From a7e52e51dc3665ac2c2f27ed52e732ef7bbad32e Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 17 May 2014 22:26:09 +0200
Subject: Village roads are drawn properly.
---
src/Generating/PieceGenerator.h | 4 ++--
src/Generating/VillageGen.cpp | 39 +++++++++++++++++++++++++++++++++------
2 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/src/Generating/PieceGenerator.h b/src/Generating/PieceGenerator.h
index 56ce996d2..643ca58b6 100644
--- a/src/Generating/PieceGenerator.h
+++ b/src/Generating/PieceGenerator.h
@@ -156,8 +156,8 @@ protected:
const cPiece * m_Piece;
Vector3i m_Coords;
int m_NumCCWRotations;
- cCuboid m_HitBox;
- int m_Depth;
+ cCuboid m_HitBox; // Hitbox of the placed piece, in world coords
+ int m_Depth; // Depth in the generated piece tree
};
typedef std::vector cPlacedPieces;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index db81fb521..520d63029 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -104,7 +104,8 @@ public:
int a_MaxRoadDepth,
int a_MaxSize,
cPrefabPiecePool & a_Prefabs,
- cTerrainHeightGen & a_HeightGen
+ cTerrainHeightGen & a_HeightGen,
+ BLOCKTYPE a_RoadBlock
) :
super(a_OriginX, a_OriginZ),
m_Seed(a_Seed),
@@ -112,7 +113,8 @@ public:
m_MaxSize(a_MaxSize),
m_Borders(a_OriginX - a_MaxSize, 0, a_OriginZ - a_MaxSize, a_OriginX + a_MaxSize, 255, a_OriginZ + a_MaxSize),
m_Prefabs(a_Prefabs),
- m_HeightGen(a_HeightGen)
+ m_HeightGen(a_HeightGen),
+ m_RoadBlock(a_RoadBlock)
{
cBFSPieceGenerator pg(m_Prefabs, a_Seed);
// Generate the pieces at very negative Y coords, so that we can later test
@@ -142,6 +144,9 @@ protected:
/** The village pieces, placed by the generator. */
cPlacedPieces m_Pieces;
+ /** The block to use for the roads. */
+ BLOCKTYPE m_RoadBlock;
+
// cGrdStructGen::cStructure overrides:
virtual void DrawIntoChunk(cChunkDesc & a_Chunk) override
@@ -156,9 +161,8 @@ protected:
cPrefab & Prefab = (cPrefab &)((*itr)->GetPiece());
if ((*itr)->GetPiece().GetSize().y == 1)
{
- // It's a road, special handling (change top terrain blocks
- // TODO
- Prefab.Draw(a_Chunk, (*itr)->GetCoords() + Vector3i(0, 1100, 0), (*itr)->GetNumCCWRotations());
+ // It's a road, special handling (change top terrain blocks to m_RoadBlock)
+ DrawRoad(a_Chunk, **itr, HeightMap);
continue;
}
if ((*itr)->GetCoords().y < 0)
@@ -185,6 +189,27 @@ protected:
int TerrainHeight = cChunkDef::GetHeight(HeightMap, BlockX, BlockZ);
a_Piece.GetCoords().y += TerrainHeight - FirstConnector.m_Pos.y + 1;
}
+
+
+ /** Draws the road into the chunk.
+ The heightmap is not queried from the heightgen, but is given via parameter, so that it may be queried just
+ once for all roads in a chunk. */
+ void DrawRoad(cChunkDesc & a_Chunk, cPlacedPiece & a_Road, cChunkDef::HeightMap & a_HeightMap)
+ {
+ cCuboid RoadCoords = a_Road.GetHitBox();
+ RoadCoords.Sort();
+ int MinX = std::max(RoadCoords.p1.x - a_Chunk.GetChunkX() * cChunkDef::Width, 0);
+ int MaxX = std::min(RoadCoords.p2.x - a_Chunk.GetChunkX() * cChunkDef::Width, cChunkDef::Width - 1);
+ int MinZ = std::max(RoadCoords.p1.z - a_Chunk.GetChunkZ() * cChunkDef::Width, 0);
+ int MaxZ = std::min(RoadCoords.p2.z - a_Chunk.GetChunkZ() * cChunkDef::Width, cChunkDef::Width - 1);
+ for (int z = MinZ; z <= MaxZ; z++)
+ {
+ for (int x = MinX; x <= MaxX; x++)
+ {
+ a_Chunk.SetBlockType(x, cChunkDef::GetHeight(a_HeightMap, x, z), z, m_RoadBlock);
+ }
+ }
+ }
} ;
@@ -228,6 +253,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
// Check if all the biomes are village-friendly:
// If just one is not, no village is created, because it's likely that an unfriendly biome is too close
cVillagePiecePool * VillagePrefabs = NULL;
+ BLOCKTYPE RoadBlock = E_BLOCK_GRAVEL;
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
@@ -237,6 +263,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
{
// These biomes allow sand villages
VillagePrefabs = &g_SandVillage;
+ RoadBlock = E_BLOCK_SANDSTONE;
break;
}
case biPlains:
@@ -261,7 +288,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, *VillagePrefabs, m_HeightGen));
+ return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, *VillagePrefabs, m_HeightGen, RoadBlock));
}
--
cgit v1.2.3
From ec50c0f9e1ee59ad8e782795c46f100be79b3ed0 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sun, 18 May 2014 23:09:39 +0200
Subject: Updated SandVillage prefabs to latest Gallery content.
This fixes sand village generation.
---
src/Generating/Prefabs/SandVillagePrefabs.cpp | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/Generating/Prefabs/SandVillagePrefabs.cpp b/src/Generating/Prefabs/SandVillagePrefabs.cpp
index 8460ee5f7..539f57b9d 100644
--- a/src/Generating/Prefabs/SandVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/SandVillagePrefabs.cpp
@@ -183,7 +183,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -326,7 +326,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "...........",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -444,7 +444,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".............",
// Connectors:
- "-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 6, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -587,7 +587,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ ".............",
// Connectors:
- "-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 6, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -730,7 +730,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "...............",
// Connectors:
- "-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 6, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -873,7 +873,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "................",
// Connectors:
- "-1: 9, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 9, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -984,7 +984,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".......",
// Connectors:
- "-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1096,7 +1096,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".........",
// Connectors:
- "-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1232,7 +1232,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ ".........",
// Connectors:
- "-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 4, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1384,7 +1384,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 11 */ "mmmmmmm..adc..",
// Connectors:
- "-1: 8, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 8, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1552,7 +1552,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 11 */ "mmmmm...adc...",
// Connectors:
- "-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1712,7 +1712,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 5 */ ".....",
// Connectors:
- "-1: 2, 0, 4: 3\n" /* Type -1, direction Z+ */,
+ "-1: 2, 0, 5: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
--
cgit v1.2.3
From cfbb2563604e77e044be9a0f12b2152a7d626b51 Mon Sep 17 00:00:00 2001
From: Julian Laubstein
Date: Mon, 19 May 2014 10:37:43 +0200
Subject: Fixed some warnings
---
Tools/MCADefrag/Globals.h | 1 +
src/Simulator/IncrementalRedstoneSimulator.h | 14 ++++++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/Tools/MCADefrag/Globals.h b/Tools/MCADefrag/Globals.h
index 0f31de7e3..17dc3920d 100644
--- a/Tools/MCADefrag/Globals.h
+++ b/Tools/MCADefrag/Globals.h
@@ -225,6 +225,7 @@ template class cItemCallback
public:
/// Called for each item in the internal list; return true to stop the loop, or false to continue enumerating
virtual bool Item(Type * a_Type) = 0;
+ virtual ~cItemCallback();
} ;
diff --git a/src/Simulator/IncrementalRedstoneSimulator.h b/src/Simulator/IncrementalRedstoneSimulator.h
index 233a3d408..a57a17328 100644
--- a/src/Simulator/IncrementalRedstoneSimulator.h
+++ b/src/Simulator/IncrementalRedstoneSimulator.h
@@ -202,8 +202,13 @@ private:
case E_BLOCK_POWERED_RAIL:
{
return true;
+ break;
+ }
+ default:
+ {
+ return false;
+ break;
}
- default: return false;
}
}
@@ -275,8 +280,13 @@ private:
case E_BLOCK_PISTON:
{
return true;
+ break;
+ }
+ default:
+ {
+ return false;
+ break;
}
- default: return false;
}
}
};
--
cgit v1.2.3
From e9abf9a4987835a52dab508f9b8a8feb57e9a103 Mon Sep 17 00:00:00 2001
From: Julian Laubstein
Date: Mon, 19 May 2014 13:02:02 +0200
Subject: Rolled some changes back
---
src/Simulator/IncrementalRedstoneSimulator.h | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/src/Simulator/IncrementalRedstoneSimulator.h b/src/Simulator/IncrementalRedstoneSimulator.h
index a57a17328..233a3d408 100644
--- a/src/Simulator/IncrementalRedstoneSimulator.h
+++ b/src/Simulator/IncrementalRedstoneSimulator.h
@@ -202,13 +202,8 @@ private:
case E_BLOCK_POWERED_RAIL:
{
return true;
- break;
- }
- default:
- {
- return false;
- break;
}
+ default: return false;
}
}
@@ -280,13 +275,8 @@ private:
case E_BLOCK_PISTON:
{
return true;
- break;
- }
- default:
- {
- return false;
- break;
}
+ default: return false;
}
}
};
--
cgit v1.2.3
From fb7f2993bf3b62c00d4502b846018b035ffbdb7a Mon Sep 17 00:00:00 2001
From: Julian Laubstein
Date: Mon, 19 May 2014 14:34:34 +0200
Subject: Fixed some warnings in Server.cpp, and in UI/
---
src/Server.cpp | 8 +++++++-
src/UI/SlotArea.cpp | 3 ++-
src/UI/Window.cpp | 3 ++-
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/Server.cpp b/src/Server.cpp
index aa731cdd2..66bccd680 100644
--- a/src/Server.cpp
+++ b/src/Server.cpp
@@ -107,10 +107,16 @@ void cServer::cTickThread::Execute(void)
cServer::cServer(void) :
m_ListenThreadIPv4(*this, cSocket::IPv4, "Client IPv4"),
m_ListenThreadIPv6(*this, cSocket::IPv6, "Client IPv6"),
+ m_PlayerCount(0),
+ m_PlayerCountDiff(0),
+ m_ClientViewDistance(0),
m_bIsConnected(false),
m_bRestarting(false),
m_RCONServer(*this),
- m_TickThread(*this)
+ m_MaxPlayers(0),
+ m_bIsHardcore(false),
+ m_TickThread(*this),
+ m_ShouldAuthenticate(false)
{
}
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index 8833a767a..be3ce1f8d 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -600,7 +600,8 @@ cCraftingRecipe & cSlotAreaCrafting::GetRecipeForPlayer(cPlayer & a_Player)
cSlotAreaAnvil::cSlotAreaAnvil(cAnvilWindow & a_ParentWindow) :
cSlotAreaTemporary(3, a_ParentWindow),
- m_MaximumCost(0)
+ m_MaximumCost(0),
+ m_StackSizeToBeUsedInRepair(0)
{
}
diff --git a/src/UI/Window.cpp b/src/UI/Window.cpp
index 46885390b..24b718156 100644
--- a/src/UI/Window.cpp
+++ b/src/UI/Window.cpp
@@ -856,7 +856,8 @@ cEnchantingWindow::cEnchantingWindow(int a_BlockX, int a_BlockY, int a_BlockZ) :
cWindow(wtEnchantment, "Enchant"),
m_BlockX(a_BlockX),
m_BlockY(a_BlockY),
- m_BlockZ(a_BlockZ)
+ m_BlockZ(a_BlockZ),
+ m_SlotArea()
{
m_SlotAreas.push_back(new cSlotAreaEnchanting(*this));
m_SlotAreas.push_back(new cSlotAreaInventory(*this));
--
cgit v1.2.3
From 6687848a7ec1a65ed2c99264ecf9e8119b19c964 Mon Sep 17 00:00:00 2001
From: Julian Laubstein
Date: Mon, 19 May 2014 14:49:18 +0200
Subject: Fixed warnings in IncrementalRedstoneSimulator
---
src/Simulator/IncrementalRedstoneSimulator.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/Simulator/IncrementalRedstoneSimulator.cpp b/src/Simulator/IncrementalRedstoneSimulator.cpp
index 074063add..8d29fbec7 100644
--- a/src/Simulator/IncrementalRedstoneSimulator.cpp
+++ b/src/Simulator/IncrementalRedstoneSimulator.cpp
@@ -18,7 +18,13 @@
cIncrementalRedstoneSimulator::cIncrementalRedstoneSimulator(cWorld & a_World)
- : super(a_World)
+ : super(a_World),
+ m_RedstoneSimulatorChunkData(),
+ m_PoweredBlocks(),
+ m_LinkedPoweredBlocks(),
+ m_SimulatedPlayerToggleableBlocks(),
+ m_RepeatersDelayList(),
+ m_Chunk()
{
}
--
cgit v1.2.3
From 7e2effb2d8297ddb99d86844e1b06b37c6e30d63 Mon Sep 17 00:00:00 2001
From: Julian Laubstein
Date: Mon, 19 May 2014 15:46:36 +0200
Subject: Changed the m_slotarea position
---
src/UI/Window.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/UI/Window.cpp b/src/UI/Window.cpp
index 24b718156..98a9a0cec 100644
--- a/src/UI/Window.cpp
+++ b/src/UI/Window.cpp
@@ -854,10 +854,10 @@ void cAnvilWindow::GetBlockPos(int & a_PosX, int & a_PosY, int & a_PosZ)
cEnchantingWindow::cEnchantingWindow(int a_BlockX, int a_BlockY, int a_BlockZ) :
cWindow(wtEnchantment, "Enchant"),
+ m_SlotArea(),
m_BlockX(a_BlockX),
m_BlockY(a_BlockY),
- m_BlockZ(a_BlockZ),
- m_SlotArea()
+ m_BlockZ(a_BlockZ)
{
m_SlotAreas.push_back(new cSlotAreaEnchanting(*this));
m_SlotAreas.push_back(new cSlotAreaInventory(*this));
--
cgit v1.2.3
From 42c36429d7cd1e6c3f879b6749e18e912deefe0d Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Mon, 19 May 2014 20:40:56 +0100
Subject: Added client translation to achievements
---
src/CompositeChat.cpp | 22 ++++++++++++++++++++++
src/CompositeChat.h | 15 +++++++++++++++
src/Entities/Player.cpp | 8 ++++----
src/Protocol/Protocol17x.cpp | 29 +++++++++++++++++++++++++++++
4 files changed, 70 insertions(+), 4 deletions(-)
diff --git a/src/CompositeChat.cpp b/src/CompositeChat.cpp
index c70ef1070..d3b7595b7 100644
--- a/src/CompositeChat.cpp
+++ b/src/CompositeChat.cpp
@@ -189,6 +189,15 @@ void cCompositeChat::AddSuggestCommandPart(const AString & a_Text, const AString
+void cCompositeChat::AddShowAchievementPart(const AString & a_PlayerName, const AString & a_Achievement, const AString & a_Style)
+{
+ m_Parts.push_back(new cShowAchievementPart(a_PlayerName, a_Achievement, a_Style));
+}
+
+
+
+
+
void cCompositeChat::ParseText(const AString & a_ParseText)
{
size_t len = a_ParseText.length();
@@ -476,3 +485,16 @@ cCompositeChat::cSuggestCommandPart::cSuggestCommandPart(const AString & a_Text,
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// cCompositeChat::cShowAchievementPart:
+
+cCompositeChat::cShowAchievementPart::cShowAchievementPart(const AString & a_PlayerName, const AString & a_Achievement, const AString & a_Style) :
+ super(ptShowAchievement, a_Achievement, a_Style),
+ m_PlayerName(a_PlayerName)
+{
+}
+
+
+
+
diff --git a/src/CompositeChat.h b/src/CompositeChat.h
index 5b9c5f612..a0264d864 100644
--- a/src/CompositeChat.h
+++ b/src/CompositeChat.h
@@ -38,6 +38,7 @@ public:
ptUrl,
ptRunCommand,
ptSuggestCommand,
+ ptShowAchievement,
} ;
class cBasePart
@@ -106,6 +107,15 @@ public:
public:
cSuggestCommandPart(const AString & a_Text, const AString & a_Command, const AString & a_Style = "");
} ;
+
+ class cShowAchievementPart :
+ public cBasePart
+ {
+ typedef cBasePart super;
+ public:
+ AString m_PlayerName;
+ cShowAchievementPart(const AString & a_PlayerName, const AString & a_Achievement, const AString & a_Style = "");
+ } ;
typedef std::vector cParts;
@@ -148,6 +158,11 @@ public:
/** Adds a part that suggests a command (enters it into the chat message area, but doesn't send) when clicked.
The default style is underlined yellow text. */
void AddSuggestCommandPart(const AString & a_Text, const AString & a_SuggestedCommand, const AString & a_Style = "u@b");
+
+ /** Adds a part that fully formats a specified achievement using client translatable strings
+ Takes achievement name and player awarded to. Displays as {player} has earned the achievement {achievement_name}.
+ */
+ void AddShowAchievementPart(const AString & a_PlayerName, const AString & a_Achievement, const AString & a_Style = "");
/** Parses text into various parts, adds those.
Recognizes "http:" and "https:" URLs and @color-codes. */
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index c3b763278..3a32bfb2e 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -1169,8 +1169,8 @@ unsigned int cPlayer::AwardAchievement(const eStatistic a_Ach)
{
// First time, announce it
cCompositeChat Msg;
- Msg.AddTextPart(m_PlayerName + " has just earned the achievement ");
- Msg.AddTextPart(cStatInfo::GetName(a_Ach)); // TODO 2014-05-12 xdot: Use the proper cCompositeChat part (cAchievement)
+ Msg.SetMessageType(mtSuccess);
+ Msg.AddShowAchievementPart(GetName(), cStatInfo::GetName(a_Ach));
m_World->BroadcastChat(Msg);
// Increment the statistic
@@ -1788,7 +1788,7 @@ bool cPlayer::SaveToDisk()
// Save the player stats.
// We use the default world name (like bukkit) because stats are shared between dimensions/worlds.
- cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), m_PlayerName, &m_Stats);
+ cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), GetName(), &m_Stats);
if (!StatSerializer.Save())
{
LOGERROR("Could not save stats for player %s", m_PlayerName.c_str());
@@ -1963,7 +1963,7 @@ void cPlayer::UpdateMovementStats(const Vector3d & a_DeltaPos)
BLOCKTYPE Block;
NIBBLETYPE Meta;
- if (!m_World->GetBlockTypeMeta(PosX, PosY, PosZ, Block, Meta))
+ if ((PosY < 0) || (PosY > cChunkDef::Height) || !m_World->GetBlockTypeMeta(PosX, PosY, PosZ, Block, Meta))
{
return;
}
diff --git a/src/Protocol/Protocol17x.cpp b/src/Protocol/Protocol17x.cpp
index 39feee16f..3061d132b 100644
--- a/src/Protocol/Protocol17x.cpp
+++ b/src/Protocol/Protocol17x.cpp
@@ -289,6 +289,35 @@ void cProtocol172::SendChat(const cCompositeChat & a_Message)
AddChatPartStyle(Part, p.m_Style);
break;
}
+
+ case cCompositeChat::ptShowAchievement:
+ {
+ const cCompositeChat::cShowAchievementPart & p = (const cCompositeChat::cShowAchievementPart &)**itr;
+ Part["translate"] = "chat.type.achievement";
+
+ Json::Value Ach;
+ Ach["action"] = "show_achievement";
+ Ach["value"] = p.m_Text;
+
+ Json::Value AchColourAndName;
+ AchColourAndName["color"] = "green";
+ AchColourAndName["translate"] = p.m_Text;
+ AchColourAndName["hoverEvent"] = Ach;
+
+ Json::Value Extra;
+ Extra.append(AchColourAndName);
+
+ Json::Value Name;
+ Name["text"] = p.m_PlayerName;
+
+ Json::Value With;
+ With.append(Name);
+ With.append(Extra);
+
+ Part["with"] = With;
+ AddChatPartStyle(Part, p.m_Style);
+ break;
+ }
}
msg["extra"].append(Part);
} // for itr - Parts[]
--
cgit v1.2.3
From 3a9543178abb7500aff65e09f054c28200ca6cac Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Mon, 19 May 2014 21:16:29 +0100
Subject: cCompositeChat message type is now formatted
---
src/ClientHandle.h | 4 ++--
src/CompositeChat.cpp | 3 ++-
src/CompositeChat.h | 9 ++++++++-
src/Protocol/Protocol17x.cpp | 2 +-
4 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/ClientHandle.h b/src/ClientHandle.h
index 9f1245be5..659c67658 100644
--- a/src/ClientHandle.h
+++ b/src/ClientHandle.h
@@ -80,9 +80,9 @@ public:
static AString GenerateOfflineUUID(const AString & a_Username); // tolua_export
/** Formats the type of message with the proper color and prefix for sending to the client. **/
- AString FormatMessageType(bool ShouldAppendChatPrefixes, eMessageType a_ChatPrefix, const AString & a_AdditionalData);
+ static AString FormatMessageType(bool ShouldAppendChatPrefixes, eMessageType a_ChatPrefix, const AString & a_AdditionalData);
- AString FormatChatPrefix(bool ShouldAppendChatPrefixes, AString a_ChatPrefixS, AString m_Color1, AString m_Color2);
+ static AString FormatChatPrefix(bool ShouldAppendChatPrefixes, AString a_ChatPrefixS, AString m_Color1, AString m_Color2);
void Kick(const AString & a_Reason); // tolua_export
void Authenticate(const AString & a_Name, const AString & a_UUID); // Called by cAuthenticator when the user passes authentication
diff --git a/src/CompositeChat.cpp b/src/CompositeChat.cpp
index d3b7595b7..a3612983a 100644
--- a/src/CompositeChat.cpp
+++ b/src/CompositeChat.cpp
@@ -299,9 +299,10 @@ void cCompositeChat::ParseText(const AString & a_ParseText)
-void cCompositeChat::SetMessageType(eMessageType a_MessageType)
+void cCompositeChat::SetMessageType(eMessageType a_MessageType, const AString & a_AdditionalMessageTypeData)
{
m_MessageType = a_MessageType;
+ m_AdditionalMessageTypeData = a_AdditionalMessageTypeData;
}
diff --git a/src/CompositeChat.h b/src/CompositeChat.h
index a0264d864..209d9d925 100644
--- a/src/CompositeChat.h
+++ b/src/CompositeChat.h
@@ -47,6 +47,7 @@ public:
ePartType m_PartType;
AString m_Text;
AString m_Style;
+ AString m_AdditionalStyleData;
cBasePart(ePartType a_PartType, const AString & a_Text, const AString & a_Style = "");
@@ -169,7 +170,7 @@ public:
void ParseText(const AString & a_ParseText);
/** Sets the message type, which is indicated by prefixes added to the message when serializing. */
- void SetMessageType(eMessageType a_MessageType);
+ void SetMessageType(eMessageType a_MessageType, const AString & a_AdditionalMessageTypeata = "");
/** Adds the "underline" style to each part that is an URL. */
void UnderlineUrls(void);
@@ -178,6 +179,9 @@ public:
/** Returns the message type set previously by SetMessageType(). */
eMessageType GetMessageType(void) const { return m_MessageType; }
+
+ /** Returns additional data pertaining to message type, for example, the name of a mtPrivateMsg sender */
+ AString GetAdditionalMessageTypeData(void) const { return m_AdditionalMessageTypeData; }
/** Returns the text from the parts that comprises the human-readable data.
Used for older protocols that don't support composite chat
@@ -199,6 +203,9 @@ protected:
/** The message type, as indicated by prefixes. */
eMessageType m_MessageType;
+ /** Additional data pertaining to message type, for example, the name of a mtPrivateMsg sender */
+ AString m_AdditionalMessageTypeData;
+
/** Adds a_AddStyle to a_Style; overwrites the existing style if appropriate.
If the style already contains something that a_AddStyle overrides, it is erased first. */
diff --git a/src/Protocol/Protocol17x.cpp b/src/Protocol/Protocol17x.cpp
index 3061d132b..7c526d103 100644
--- a/src/Protocol/Protocol17x.cpp
+++ b/src/Protocol/Protocol17x.cpp
@@ -234,7 +234,7 @@ void cProtocol172::SendChat(const cCompositeChat & a_Message)
// Compose the complete Json string to send:
Json::Value msg;
- msg["text"] = ""; // The client crashes without this
+ msg["text"] = cClientHandle::FormatMessageType(m_Client->GetPlayer()->GetWorld()->ShouldUseChatPrefixes(), a_Message.GetMessageType(), a_Message.GetAdditionalMessageTypeData()); // The client crashes without this field being present
const cCompositeChat::cParts & Parts = a_Message.GetParts();
for (cCompositeChat::cParts::const_iterator itr = Parts.begin(), end = Parts.end(); itr != end; ++itr)
{
--
cgit v1.2.3
From 4008af692556ffb0f819c9a570267ffbaa871cad Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Mon, 19 May 2014 21:17:28 +0100
Subject: Simplified cacti conditions
---
src/Entities/Entity.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp
index 15f456332..ed06e76b9 100644
--- a/src/Entities/Entity.cpp
+++ b/src/Entities/Entity.cpp
@@ -1024,9 +1024,9 @@ void cEntity::DetectCacti()
float w = m_Width / 2;
if (
(((X + 1) - GetPosX() < w) && (GetWorld()->GetBlock(X + 1, Y, Z) == E_BLOCK_CACTUS)) ||
- (((GetPosX() - (X - 1)) - 1 < w) && (GetWorld()->GetBlock(X - 1, Y, Z) == E_BLOCK_CACTUS)) ||
+ ((GetPosX() - X < w) && (GetWorld()->GetBlock(X - 1, Y, Z) == E_BLOCK_CACTUS)) ||
(((Z + 1) - GetPosZ() < w) && (GetWorld()->GetBlock(X, Y, Z + 1) == E_BLOCK_CACTUS)) ||
- (((GetPosZ() - (Z - 1)) - 1 < w) && (GetWorld()->GetBlock(X, Y, Z - 1) == E_BLOCK_CACTUS)) ||
+ ((GetPosZ() - Z < w) && (GetWorld()->GetBlock(X, Y, Z - 1) == E_BLOCK_CACTUS)) ||
(((Y > 0) && (Y < cChunkDef::Height)) && ((GetPosY() - Y < 1) && (GetWorld()->GetBlock(X, Y, Z) == E_BLOCK_CACTUS)))
)
{
--
cgit v1.2.3
From 2bfe962e2831316f651aa22c4e7b7ea68021c978 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Mon, 19 May 2014 22:15:39 +0100
Subject: Fixed a cactus Y position issue
---
src/Entities/Entity.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp
index ed06e76b9..8a584d2ca 100644
--- a/src/Entities/Entity.cpp
+++ b/src/Entities/Entity.cpp
@@ -1023,11 +1023,12 @@ void cEntity::DetectCacti()
int X = POSX_TOINT, Y = POSY_TOINT, Z = POSZ_TOINT;
float w = m_Width / 2;
if (
- (((X + 1) - GetPosX() < w) && (GetWorld()->GetBlock(X + 1, Y, Z) == E_BLOCK_CACTUS)) ||
+ ((Y > 0) && (Y < cChunkDef::Height)) &&
+ ((((X + 1) - GetPosX() < w) && (GetWorld()->GetBlock(X + 1, Y, Z) == E_BLOCK_CACTUS)) ||
((GetPosX() - X < w) && (GetWorld()->GetBlock(X - 1, Y, Z) == E_BLOCK_CACTUS)) ||
(((Z + 1) - GetPosZ() < w) && (GetWorld()->GetBlock(X, Y, Z + 1) == E_BLOCK_CACTUS)) ||
((GetPosZ() - Z < w) && (GetWorld()->GetBlock(X, Y, Z - 1) == E_BLOCK_CACTUS)) ||
- (((Y > 0) && (Y < cChunkDef::Height)) && ((GetPosY() - Y < 1) && (GetWorld()->GetBlock(X, Y, Z) == E_BLOCK_CACTUS)))
+ (((GetPosY() - Y < 1) && (GetWorld()->GetBlock(X, Y, Z) == E_BLOCK_CACTUS))))
)
{
TakeDamage(dtCactusContact, NULL, 1, 0);
--
cgit v1.2.3
From 507df718453483e6ca74ca897a78eed679222f06 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Tue, 20 May 2014 13:35:39 +0100
Subject: Update Player.cpp
---
src/Entities/Player.cpp | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index 3a32bfb2e..c27456397 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -377,7 +377,7 @@ short cPlayer::DeltaExperience(short a_Xp_delta)
}
LOGD("Player \"%s\" gained/lost %d experience, total is now: %d",
- m_PlayerName.c_str(), a_Xp_delta, m_CurrentXp);
+ GetName().c_str(), a_Xp_delta, m_CurrentXp);
// Set experience to be updated
m_bDirtyExperience = true;
@@ -391,7 +391,7 @@ short cPlayer::DeltaExperience(short a_Xp_delta)
void cPlayer::StartChargingBow(void)
{
- LOGD("Player \"%s\" started charging their bow", m_PlayerName.c_str());
+ LOGD("Player \"%s\" started charging their bow", GetName().c_str());
m_IsChargingBow = true;
m_BowCharge = 0;
}
@@ -402,7 +402,7 @@ void cPlayer::StartChargingBow(void)
int cPlayer::FinishChargingBow(void)
{
- LOGD("Player \"%s\" finished charging their bow at a charge of %d", m_PlayerName.c_str(), m_BowCharge);
+ LOGD("Player \"%s\" finished charging their bow at a charge of %d", GetName().c_str(), m_BowCharge);
int res = m_BowCharge;
m_IsChargingBow = false;
m_BowCharge = 0;
@@ -415,7 +415,7 @@ int cPlayer::FinishChargingBow(void)
void cPlayer::CancelChargingBow(void)
{
- LOGD("Player \"%s\" cancelled charging their bow at a charge of %d", m_PlayerName.c_str(), m_BowCharge);
+ LOGD("Player \"%s\" cancelled charging their bow at a charge of %d", GetName().c_str(), m_BowCharge);
m_IsChargingBow = false;
m_BowCharge = 0;
}
@@ -1305,7 +1305,7 @@ void cPlayer::AddToGroup( const AString & a_GroupName )
{
cGroup* Group = cRoot::Get()->GetGroupManager()->GetGroup( a_GroupName );
m_Groups.push_back( Group );
- LOGD("Added %s to group %s", m_PlayerName.c_str(), a_GroupName.c_str() );
+ LOGD("Added %s to group %s", GetName().c_str(), a_GroupName.c_str() );
ResolveGroups();
ResolvePermissions();
}
@@ -1329,13 +1329,13 @@ void cPlayer::RemoveFromGroup( const AString & a_GroupName )
if( bRemoved )
{
- LOGD("Removed %s from group %s", m_PlayerName.c_str(), a_GroupName.c_str() );
+ LOGD("Removed %s from group %s", GetName().c_str(), a_GroupName.c_str() );
ResolveGroups();
ResolvePermissions();
}
else
{
- LOGWARN("Tried to remove %s from group %s but was not in that group", m_PlayerName.c_str(), a_GroupName.c_str() );
+ LOGWARN("Tried to remove %s from group %s but was not in that group", GetName().c_str(), a_GroupName.c_str() );
}
}
@@ -1441,7 +1441,7 @@ void cPlayer::ResolveGroups()
if( AllGroups.find( CurrentGroup ) != AllGroups.end() )
{
LOGWARNING("ERROR: Player \"%s\" is in the group multiple times (\"%s\"). Please fix your settings in users.ini!",
- m_PlayerName.c_str(), CurrentGroup->GetName().c_str()
+ GetName().c_str(), CurrentGroup->GetName().c_str()
);
}
else
@@ -1453,7 +1453,7 @@ void cPlayer::ResolveGroups()
{
if( AllGroups.find( *itr ) != AllGroups.end() )
{
- LOGERROR("ERROR: Player %s is in the same group multiple times due to inheritance (%s). FIX IT!", m_PlayerName.c_str(), (*itr)->GetName().c_str() );
+ LOGERROR("ERROR: Player %s is in the same group multiple times due to inheritance (%s). FIX IT!", GetName().c_str(), (*itr)->GetName().c_str() );
continue;
}
ToIterate.push_back( *itr );
@@ -1605,19 +1605,19 @@ void cPlayer::LoadPermissionsFromDisk()
cIniFile IniFile;
if (IniFile.ReadFile("users.ini"))
{
- AString Groups = IniFile.GetValueSet(m_PlayerName, "Groups", "Default");
+ AString Groups = IniFile.GetValueSet(GetName(), "Groups", "Default");
AStringVector Split = StringSplitAndTrim(Groups, ",");
for (AStringVector::const_iterator itr = Split.begin(), end = Split.end(); itr != end; ++itr)
{
if (!cRoot::Get()->GetGroupManager()->ExistsGroup(*itr))
{
- LOGWARNING("The group %s for player %s was not found!", itr->c_str(), m_PlayerName.c_str());
+ LOGWARNING("The group %s for player %s was not found!", itr->c_str(), GetName().c_str());
}
AddToGroup(*itr);
}
- AString Color = IniFile.GetValue(m_PlayerName, "Color", "-");
+ AString Color = IniFile.GetValue(GetName(), "Color", "-");
if (!Color.empty())
{
m_Color = Color[0];
@@ -1626,7 +1626,7 @@ void cPlayer::LoadPermissionsFromDisk()
else
{
cGroupManager::GenerateDefaultUsersIni(IniFile);
- IniFile.AddValue("Groups", m_PlayerName, "Default");
+ IniFile.AddValue("Groups", GetName(), "Default");
AddToGroup("Default");
}
IniFile.WriteFile("users.ini");
@@ -1641,14 +1641,14 @@ bool cPlayer::LoadFromDisk()
LoadPermissionsFromDisk();
// Log player permissions, cause it's what the cool kids do
- LOGINFO("Player %s has permissions:", m_PlayerName.c_str() );
+ LOGINFO("Player %s has permissions:", GetName().c_str() );
for( PermissionMap::iterator itr = m_ResolvedPermissions.begin(); itr != m_ResolvedPermissions.end(); ++itr )
{
if( itr->second ) LOG(" - %s", itr->first.c_str() );
}
AString SourceFile;
- Printf(SourceFile, "players/%s.json", m_PlayerName.c_str() );
+ Printf(SourceFile, "players/%s.json", GetName().c_str() );
cFile f;
if (!f.Open(SourceFile, cFile::fmRead))
@@ -1716,7 +1716,7 @@ bool cPlayer::LoadFromDisk()
StatSerializer.Load();
LOGD("Player \"%s\" was read from file, spawning at {%.2f, %.2f, %.2f} in world \"%s\"",
- m_PlayerName.c_str(), GetPosX(), GetPosY(), GetPosZ(), m_LoadedWorldName.c_str()
+ GetName().c_str(), GetPosX(), GetPosY(), GetPosZ(), m_LoadedWorldName.c_str()
);
return true;
@@ -1772,12 +1772,12 @@ bool cPlayer::SaveToDisk()
std::string JsonData = writer.write(root);
AString SourceFile;
- Printf(SourceFile, "players/%s.json", m_PlayerName.c_str() );
+ Printf(SourceFile, "players/%s.json", GetName().c_str() );
cFile f;
if (!f.Open(SourceFile, cFile::fmWrite))
{
- LOGERROR("ERROR WRITING PLAYER \"%s\" TO FILE \"%s\" - cannot open file", m_PlayerName.c_str(), SourceFile.c_str());
+ LOGERROR("ERROR WRITING PLAYER \"%s\" TO FILE \"%s\" - cannot open file", GetName().c_str(), SourceFile.c_str());
return false;
}
if (f.Write(JsonData.c_str(), JsonData.size()) != (int)JsonData.size())
@@ -1791,7 +1791,7 @@ bool cPlayer::SaveToDisk()
cStatSerializer StatSerializer(cRoot::Get()->GetDefaultWorld()->GetName(), GetName(), &m_Stats);
if (!StatSerializer.Save())
{
- LOGERROR("Could not save stats for player %s", m_PlayerName.c_str());
+ LOGERROR("Could not save stats for player %s", GetName().c_str());
return false;
}
--
cgit v1.2.3
From 576e17ae08ddd0dcff625134325bfceeab956906 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Tue, 20 May 2014 22:49:21 +0100
Subject: Update CompositeChat.h
---
src/CompositeChat.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/CompositeChat.h b/src/CompositeChat.h
index 209d9d925..1ad196f1d 100644
--- a/src/CompositeChat.h
+++ b/src/CompositeChat.h
@@ -169,8 +169,10 @@ public:
Recognizes "http:" and "https:" URLs and @color-codes. */
void ParseText(const AString & a_ParseText);
- /** Sets the message type, which is indicated by prefixes added to the message when serializing. */
- void SetMessageType(eMessageType a_MessageType, const AString & a_AdditionalMessageTypeata = "");
+ /** Sets the message type, which is indicated by prefixes added to the message when serializing
+ Takes optional AdditionalMessageTypeData to set m_AdditionalMessageTypeData. See said variable for more documentation.
+ */
+ void SetMessageType(eMessageType a_MessageType, const AString & a_AdditionalMessageTypeData = "");
/** Adds the "underline" style to each part that is an URL. */
void UnderlineUrls(void);
--
cgit v1.2.3
From efcae77828d52680f9521793520ffc4325b465b8 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 21 May 2014 23:16:43 +0200
Subject: Added second kind of desert village (FlatRoof).
---
.../Prefabs/SandFlatRoofVillagePrefabs.cpp | 1511 ++++++++++++++++++++
.../Prefabs/SandFlatRoofVillagePrefabs.h | 15 +
src/Generating/VillageGen.cpp | 13 +-
3 files changed, 1535 insertions(+), 4 deletions(-)
create mode 100644 src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp
create mode 100644 src/Generating/Prefabs/SandFlatRoofVillagePrefabs.h
diff --git a/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp
new file mode 100644
index 000000000..93aa405c2
--- /dev/null
+++ b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp
@@ -0,0 +1,1511 @@
+
+// SandFlatRoofVillagePrefabs.cpp
+
+// Defines the prefabs in the group SandFlatRoofVillage
+
+// NOTE: This file has been generated automatically by GalExport!
+// Any manual changes will be overwritten by the next automatic export!
+
+#include "Globals.h"
+#include "SandFlatRoofVillagePrefabs.h"
+
+
+
+
+
+const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Forge:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 4, 9, // 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 */
+ "e:128: 3\n" /* sandstonestairs */
+ "f:171:15\n" /* carpet */
+ "g: 64: 6\n" /* wooddoorblock */
+ "h:171: 0\n" /* carpet */
+ "i:171:14\n" /* carpet */
+ "j: 61: 2\n" /* furnace */
+ "k: 10: 0\n" /* lava */
+ "l: 54: 2\n" /* chest */
+ "m: 19: 0\n" /* sponge */
+ "n: 24: 2\n" /* sandstone */
+ "o: 64:12\n" /* wooddoorblock */
+ "p: 50: 1\n" /* torch */
+ "q:101: 0\n" /* ironbars */
+ "r:128: 4\n" /* sandstonestairs */
+ "s:128: 6\n" /* sandstonestairs */
+ "t:128: 5\n" /* sandstonestairs */
+ "u:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // 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 */ "............"
+
+ // 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."
+ /* 9 */ "............"
+
+ // Level 2
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ ".n....nn.nn."
+ /* 2 */ "......n...n."
+ /* 3 */ "......o...n."
+ /* 4 */ "......n....."
+ /* 5 */ ".n....n...n."
+ /* 6 */ ".n....n...n."
+ /* 7 */ ".n....n...n."
+ /* 8 */ ".nnn.nnn.nn."
+ /* 9 */ "............"
+
+ // Level 3
+ /* 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."
+ /* 9 */ "............"
+
+ // Level 4
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "rsssssssssss"
+ /* 1 */ "rddddddddddt"
+ /* 2 */ "rddddddddddt"
+ /* 3 */ "rddddddddddt"
+ /* 4 */ "rddddddddddt"
+ /* 5 */ "rddddddddddt"
+ /* 6 */ "rddddddddddt"
+ /* 7 */ "rddddddddddt"
+ /* 8 */ "rddddddddddt"
+ /* 9 */ "uuuuuuuuuuut",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // Forge
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House11x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 12, 4, 8, // 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171: 0\n" /* carpet */
+ "g:171:15\n" /* carpet */
+ "h:171:14\n" /* carpet */
+ "i: 24: 2\n" /* sandstone */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 50: 3\n" /* torch */
+ "l: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 2\n" /* torch */
+ "o: 50: 4\n" /* torch */
+ "p:128: 4\n" /* sandstonestairs */
+ "q:128: 6\n" /* sandstonestairs */
+ "r:128: 5\n" /* sandstonestairs */
+ "s:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "..abc........"
+ /* 1 */ ".ddddddddddd."
+ /* 2 */ ".ddddddddddd."
+ /* 3 */ ".ddddddddddd."
+ /* 4 */ ".ddddddddddd."
+ /* 5 */ ".ddddddddddd."
+ /* 6 */ ".ddddddddddd."
+ /* 7 */ ".ddddddddddd."
+ /* 8 */ "............."
+
+ // Level 1
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ ".ddedddddddd."
+ /* 2 */ ".dffgggggffd."
+ /* 3 */ ".dfghhhhhgfd."
+ /* 4 */ ".dfghfffhgfd."
+ /* 5 */ ".dfghhhhhgfd."
+ /* 6 */ ".dffgggggffd."
+ /* 7 */ ".ddddddddddd."
+ /* 8 */ "............."
+
+ // Level 2
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ ".iiji.iii.ii."
+ /* 2 */ ".i.........i."
+ /* 3 */ ".i.........i."
+ /* 4 */ "............."
+ /* 5 */ ".i.........i."
+ /* 6 */ ".i.........i."
+ /* 7 */ ".ii.ii.ii.ii."
+ /* 8 */ "............."
+
+ // Level 3
+ /* 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."
+ /* 8 */ "............."
+
+ // Level 4
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "pqqqqqqqqqqqq"
+ /* 1 */ "pdddddddddddr"
+ /* 2 */ "pdddddddddddr"
+ /* 3 */ "pdddddddddddr"
+ /* 4 */ "pdddddddddddr"
+ /* 5 */ "pdddddddddddr"
+ /* 6 */ "pdddddddddddr"
+ /* 7 */ "pdddddddddddr"
+ /* 8 */ "ssssssssssssr",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House11x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House5x4:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 4, 5, // 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171: 0\n" /* carpet */
+ "g:171:14\n" /* carpet */
+ "h: 24: 2\n" /* sandstone */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 50: 3\n" /* torch */
+ "k:128: 4\n" /* sandstonestairs */
+ "l:128: 6\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 5\n" /* sandstonestairs */
+ "o:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "..abc.."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".ddddd."
+ /* 3 */ ".ddddd."
+ /* 4 */ ".ddddd."
+ /* 5 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ddedd."
+ /* 2 */ ".dfgfd."
+ /* 3 */ ".dfgfd."
+ /* 4 */ ".ddddd."
+ /* 5 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".hhihh."
+ /* 2 */ ".h...h."
+ /* 3 */ ".h...h."
+ /* 4 */ ".hh.hh."
+ /* 5 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".dj.jd."
+ /* 3 */ ".d...d."
+ /* 4 */ ".ddddd."
+ /* 5 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "kllllln"
+ /* 1 */ "kdddddn"
+ /* 2 */ "kdddddn"
+ /* 3 */ "kdddddn"
+ /* 4 */ "kdddddn"
+ /* 5 */ "oooooon",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House5x4
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House5x5:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 4, 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171: 0\n" /* carpet */
+ "g:171:15\n" /* carpet */
+ "h:171:14\n" /* carpet */
+ "i: 24: 2\n" /* sandstone */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 50: 3\n" /* torch */
+ "l:128: 4\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 6\n" /* sandstonestairs */
+ "o:128: 5\n" /* sandstonestairs */
+ "p:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "..abc.."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".ddddd."
+ /* 3 */ ".ddddd."
+ /* 4 */ ".ddddd."
+ /* 5 */ ".ddddd."
+ /* 6 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ddedd."
+ /* 2 */ ".dfffd."
+ /* 3 */ ".dghgd."
+ /* 4 */ ".dfffd."
+ /* 5 */ ".ddddd."
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".iijii."
+ /* 2 */ ".i...i."
+ /* 3 */ "......."
+ /* 4 */ ".i...i."
+ /* 5 */ ".ii.ii."
+ /* 6 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ddddd."
+ /* 2 */ ".dk.kd."
+ /* 3 */ ".d...d."
+ /* 4 */ ".d...d."
+ /* 5 */ ".ddddd."
+ /* 6 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "lnnnnno"
+ /* 1 */ "ldddddo"
+ /* 2 */ "ldddddo"
+ /* 3 */ "ldddddo"
+ /* 4 */ "ldddddo"
+ /* 5 */ "ldddddo"
+ /* 6 */ "ppppppo",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House5x5
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House7x5:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 4, 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171:14\n" /* carpet */
+ "g:171: 0\n" /* carpet */
+ "h:171:15\n" /* carpet */
+ "i: 24: 2\n" /* sandstone */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 50: 3\n" /* torch */
+ "l:128: 4\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 6\n" /* sandstonestairs */
+ "o:128: 5\n" /* sandstonestairs */
+ "p:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "..abc...."
+ /* 1 */ ".ddddddd."
+ /* 2 */ ".ddddddd."
+ /* 3 */ ".ddddddd."
+ /* 4 */ ".ddddddd."
+ /* 5 */ ".ddddddd."
+ /* 6 */ "........."
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".ddedddd."
+ /* 2 */ ".dfffffd."
+ /* 3 */ ".dghhhgd."
+ /* 4 */ ".dfffffd."
+ /* 5 */ ".ddddddd."
+ /* 6 */ "........."
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".iiji.ii."
+ /* 2 */ ".i.....i."
+ /* 3 */ "........."
+ /* 4 */ ".i.....i."
+ /* 5 */ ".iii.iii."
+ /* 6 */ "........."
+
+ // Level 3
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".ddddddd."
+ /* 2 */ ".dk.k..d."
+ /* 3 */ ".d.....d."
+ /* 4 */ ".d.....d."
+ /* 5 */ ".ddddddd."
+ /* 6 */ "........."
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "lnnnnnnnn"
+ /* 1 */ "ldddddddo"
+ /* 2 */ "ldddddddo"
+ /* 3 */ "ldddddddo"
+ /* 4 */ "ldddddddo"
+ /* 5 */ "ldddddddo"
+ /* 6 */ "ppppppppo",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House7x5
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House8x5:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 4, 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171: 0\n" /* carpet */
+ "g:171:14\n" /* carpet */
+ "h:171:15\n" /* carpet */
+ "i: 24: 2\n" /* sandstone */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 50: 3\n" /* torch */
+ "l:128: 4\n" /* sandstonestairs */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 6\n" /* sandstonestairs */
+ "o:128: 5\n" /* sandstonestairs */
+ "p:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "..abc....."
+ /* 1 */ ".dddddddd."
+ /* 2 */ ".dddddddd."
+ /* 3 */ ".dddddddd."
+ /* 4 */ ".dddddddd."
+ /* 5 */ ".dddddddd."
+ /* 6 */ ".........."
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".ddeddddd."
+ /* 2 */ ".dfghhgfd."
+ /* 3 */ ".dfhffhfd."
+ /* 4 */ ".dfghhgfd."
+ /* 5 */ ".dddddddd."
+ /* 6 */ ".........."
+
+ // Level 2
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".iijii.ii."
+ /* 2 */ ".i......i."
+ /* 3 */ ".........."
+ /* 4 */ ".i......i."
+ /* 5 */ ".ii.ii.ii."
+ /* 6 */ ".........."
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".dddddddd."
+ /* 2 */ ".dk.k...d."
+ /* 3 */ ".d......d."
+ /* 4 */ ".d......d."
+ /* 5 */ ".dddddddd."
+ /* 6 */ ".........."
+
+ // Level 4
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "lnnnnnnnnn"
+ /* 1 */ "lddddddddo"
+ /* 2 */ "lddddddddo"
+ /* 3 */ "lddddddddo"
+ /* 4 */ "lddddddddo"
+ /* 5 */ "lddddddddo"
+ /* 6 */ "pppppppppo",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House8x5
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House8x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 4, 8, // 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171: 0\n" /* carpet */
+ "g:171:14\n" /* carpet */
+ "h:171:15\n" /* carpet */
+ "i: 24: 2\n" /* sandstone */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 50: 3\n" /* torch */
+ "l: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 2\n" /* torch */
+ "o:128: 4\n" /* sandstonestairs */
+ "p:128: 6\n" /* sandstonestairs */
+ "q:128: 5\n" /* sandstonestairs */
+ "r:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "..abc....."
+ /* 1 */ ".dddddddd."
+ /* 2 */ ".dddddddd."
+ /* 3 */ ".dddddddd."
+ /* 4 */ ".dddddddd."
+ /* 5 */ ".dddddddd."
+ /* 6 */ ".dddddddd."
+ /* 7 */ ".dddddddd."
+ /* 8 */ ".........."
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".ddeddddd."
+ /* 2 */ ".dfghhgfd."
+ /* 3 */ ".dfhffhfd."
+ /* 4 */ ".dfhgghfd."
+ /* 5 */ ".dfhffhfd."
+ /* 6 */ ".dfghhgfd."
+ /* 7 */ ".dddddddd."
+ /* 8 */ ".........."
+
+ // Level 2
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".iijii.ii."
+ /* 2 */ ".i......i."
+ /* 3 */ ".i......i."
+ /* 4 */ ".........."
+ /* 5 */ ".i......i."
+ /* 6 */ ".i......i."
+ /* 7 */ ".ii.ii.ii."
+ /* 8 */ ".........."
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".dddddddd."
+ /* 2 */ ".d..k...d."
+ /* 3 */ ".d......d."
+ /* 4 */ ".dl....nd."
+ /* 5 */ ".d......d."
+ /* 6 */ ".d......d."
+ /* 7 */ ".dddddddd."
+ /* 8 */ ".........."
+
+ // Level 4
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "oppppppppp"
+ /* 1 */ "oddddddddq"
+ /* 2 */ "oddddddddq"
+ /* 3 */ "oddddddddq"
+ /* 4 */ "oddddddddq"
+ /* 5 */ "oddddddddq"
+ /* 6 */ "oddddddddq"
+ /* 7 */ "oddddddddq"
+ /* 8 */ "rrrrrrrrrq",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House8x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // House9x7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 4, 8, // 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 */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171: 0\n" /* carpet */
+ "g:171:15\n" /* carpet */
+ "h:171:14\n" /* carpet */
+ "i: 24: 2\n" /* sandstone */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 50: 3\n" /* torch */
+ "l: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 2\n" /* torch */
+ "o: 50: 4\n" /* torch */
+ "p:128: 4\n" /* sandstonestairs */
+ "q:128: 6\n" /* sandstonestairs */
+ "r:128: 5\n" /* sandstonestairs */
+ "s:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..abc......"
+ /* 1 */ ".ddddddddd."
+ /* 2 */ ".ddddddddd."
+ /* 3 */ ".ddddddddd."
+ /* 4 */ ".ddddddddd."
+ /* 5 */ ".ddddddddd."
+ /* 6 */ ".ddddddddd."
+ /* 7 */ ".ddddddddd."
+ /* 8 */ "..........."
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ddedddddd."
+ /* 2 */ ".dffgggffd."
+ /* 3 */ ".dfghhhgfd."
+ /* 4 */ ".dfghfhgfd."
+ /* 5 */ ".dfghhhgfd."
+ /* 6 */ ".dffgggffd."
+ /* 7 */ ".ddddddddd."
+ /* 8 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".iijii.iii."
+ /* 2 */ ".i.......i."
+ /* 3 */ ".i.......i."
+ /* 4 */ "..........."
+ /* 5 */ ".i.......i."
+ /* 6 */ ".i.......i."
+ /* 7 */ ".ii.iii.ii."
+ /* 8 */ "..........."
+
+ // Level 3
+ /* 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."
+ /* 8 */ "..........."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "pqqqqqqqqqq"
+ /* 1 */ "pdddddddddr"
+ /* 2 */ "pdddddddddr"
+ /* 3 */ "pdddddddddr"
+ /* 4 */ "pdddddddddr"
+ /* 5 */ "pdddddddddr"
+ /* 6 */ "pdddddddddr"
+ /* 7 */ "pdddddddddr"
+ /* 8 */ "ssssssssssr",
+
+ // Connectors:
+ "-1: 3, 0, 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,
+ }, // House9x7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseL13x12:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 4, 13, // 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 */
+ "e: 43: 1\n" /* doubleslab */
+ "f: 64: 7\n" /* wooddoorblock */
+ "g:171: 0\n" /* carpet */
+ "h:171:15\n" /* carpet */
+ "i:171:14\n" /* carpet */
+ "j: 58: 0\n" /* workbench */
+ "k: 24: 2\n" /* sandstone */
+ "l: 64:12\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 3\n" /* torch */
+ "o: 50: 1\n" /* torch */
+ "p: 50: 2\n" /* torch */
+ "q: 50: 4\n" /* torch */
+ "r:128: 6\n" /* sandstonestairs */
+ "s:128: 5\n" /* sandstonestairs */
+ "t:128: 4\n" /* sandstonestairs */
+ "u:128: 7\n" /* sandstonestairs */,
+
+ // Block data:
+ // 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 */ "..............."
+
+ // 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."
+ /* 13 */ "..............."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".kkklkkkk.kkkk."
+ /* 2 */ ".k...........k."
+ /* 3 */ ".k...........k."
+ /* 4 */ "..............."
+ /* 5 */ ".k...........k."
+ /* 6 */ ".k...........k."
+ /* 7 */ ".kkk.kkk.....k."
+ /* 8 */ ".......k.....k."
+ /* 9 */ "mmmmmm.k......."
+ /* 10 */ "mmmmmm.......k."
+ /* 11 */ "mmmmmm.k.....k."
+ /* 12 */ "mmmmmm.kkk.kkk."
+ /* 13 */ "..............."
+
+ // Level 3
+ /* 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."
+ /* 13 */ "..............."
+
+ // Level 4
+ /* 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"
+ /* 13 */ "......tuuuuuuuu",
+
+ // Connectors:
+ "-1: 4, 0, 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,
+ }, // HouseL13x12
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MarketStall:
+ // The data has been exported from the gallery Desert, area index 34, ID 175, created by Aloe_vera
+ {
+ // Size:
+ 7, 5, 7, // SizeX = 7, SizeY = 5, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 4, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 85: 0\n" /* fence */
+ "b:171:14\n" /* carpet */
+ "c:171:15\n" /* carpet */
+ "d:171: 0\n" /* carpet */
+ "e: 35:14\n" /* wool */
+ "f: 35: 0\n" /* wool */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "a.....a"
+ /* 1 */ "bccdccb"
+ /* 2 */ "bcdddcb"
+ /* 3 */ "bcdddcb"
+ /* 4 */ "bccdccb"
+ /* 5 */ "a.....a"
+ /* 6 */ "......."
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "a.....a"
+ /* 1 */ "......."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ "a.....a"
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "a.....a"
+ /* 1 */ "......."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ "a.....a"
+ /* 6 */ "efefefe"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "efefefe"
+ /* 1 */ "......."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ "efefefe"
+ /* 6 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "efefefe"
+ /* 2 */ "efefefe"
+ /* 3 */ "efefefe"
+ /* 4 */ "efefefe"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "-1: 2, -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,
+ }, // MarketStall
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Marketplace:
+ // The data has been exported from the gallery Desert, area index 38, ID 261, created by Aloe_vera
+ {
+ // Size:
+ 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
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 24: 0\n" /* sandstone */
+ "b: 12: 0\n" /* sand */
+ "c: 24: 2\n" /* sandstone */
+ "d: 12: 2\n" /* sand */
+ "e: 85: 0\n" /* fence */
+ "f: 5: 0\n" /* wood */
+ "g:128: 2\n" /* sandstonestairs */
+ "h:128: 0\n" /* sandstonestairs */
+ "i: 8: 0\n" /* water */
+ "j:128: 1\n" /* sandstonestairs */
+ "k:128: 3\n" /* sandstonestairs */
+ "l: 35: 0\n" /* wool */
+ "m: 19: 0\n" /* sponge */
+ "n: 35:14\n" /* wool */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "aaaabbbaaabbbb"
+ /* 1 */ "aaaabbaabbabbb"
+ /* 2 */ "aababbabcabbbb"
+ /* 3 */ "aaaaabaaaaabbb"
+ /* 4 */ "bbbbbbbbbbbbbb"
+ /* 5 */ "bbbbbbbbbbaabb"
+ /* 6 */ "bbbbccccbbabab"
+ /* 7 */ "ccbbccccbbaaab"
+ /* 8 */ "ccbbccccbbabbb"
+ /* 9 */ "dcbbccccbbabaa"
+ /* 10 */ "ccbbbbbbbbaaba"
+ /* 11 */ "ccbbbbbbbbabaa"
+ /* 12 */ "bbbbbbbbbbabaa"
+ /* 13 */ "bbbaababbbaaba"
+ /* 14 */ "bbbcaaaabbabbb"
+ /* 15 */ "bbbcccabbbabbb"
+
+ // Level 1
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "e...e.e...e..."
+ /* 1 */ ".............."
+ /* 2 */ ".............."
+ /* 3 */ "fffff.fffff..."
+ /* 4 */ ".............."
+ /* 5 */ "..........f..e"
+ /* 6 */ "....gggg..f..."
+ /* 7 */ ".f..hiij..f..."
+ /* 8 */ ".f..hiij..f..."
+ /* 9 */ ".f..kkkk..f..e"
+ /* 10 */ ".f............"
+ /* 11 */ ".f........f..e"
+ /* 12 */ "...fffff..f..."
+ /* 13 */ "..........f..."
+ /* 14 */ "..........f..."
+ /* 15 */ "...e...e..f..e"
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "lnlnl.lnlnl..."
+ /* 1 */ ".............."
+ /* 2 */ ".............."
+ /* 3 */ "e...e.e...e..."
+ /* 4 */ ".............."
+ /* 5 */ "..........e..l"
+ /* 6 */ ".............n"
+ /* 7 */ ".e...........l"
+ /* 8 */ ".............n"
+ /* 9 */ "..........e..l"
+ /* 10 */ ".............."
+ /* 11 */ ".e........e..l"
+ /* 12 */ "...e...e.....n"
+ /* 13 */ ".............l"
+ /* 14 */ ".............n"
+ /* 15 */ "...lnlnl..e..l"
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ "lnlnl.lnlnl..."
+ /* 2 */ "lnlnl.lnlnl..."
+ /* 3 */ "lnlnl.lnlnl..."
+ /* 4 */ ".............."
+ /* 5 */ "..........lll."
+ /* 6 */ "..........nnn."
+ /* 7 */ "ll........lll."
+ /* 8 */ "nn........nnn."
+ /* 9 */ "ll........lll."
+ /* 10 */ "nn............"
+ /* 11 */ "ll........lll."
+ /* 12 */ "...lnlnl..nnn."
+ /* 13 */ "...lnlnl..lll."
+ /* 14 */ "...lnlnl..nnn."
+ /* 15 */ "..........lll.",
+
+ // Connectors:
+ "-1: 5, 0, 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,
+ }, // Marketplace
+}; // g_SandFlatRoofVillagePrefabs
+
+
+
+
+
+
+const cPrefab::sDef g_SandFlatRoofVillageStartingPrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Well:
+ // The data has been exported from the gallery Desert, area index 44, ID 275, created by Aloe_vera
+ {
+ // Size:
+ 5, 16, 5, // SizeX = 5, SizeY = 16, SizeZ = 5
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 15, 4, // 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:128: 2\n" /* sandstonestairs */
+ "e:128: 0\n" /* sandstonestairs */
+ "f:128: 1\n" /* sandstonestairs */
+ "g:128: 3\n" /* sandstonestairs */
+ "h:128: 6\n" /* sandstonestairs */
+ "i:128: 4\n" /* sandstonestairs */
+ "j:128: 5\n" /* sandstonestairs */
+ "k:128: 7\n" /* sandstonestairs */
+ "l: 44: 1\n" /* step */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "abbba"
+ /* 2 */ "abbba"
+ /* 3 */ "abbba"
+ /* 4 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 5
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 6
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 7
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 8
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcbcb"
+ /* 2 */ "bbcbb"
+ /* 3 */ "bcbcb"
+ /* 4 */ "bbbbb"
+
+ // Level 9
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcbcb"
+ /* 2 */ "bbbbb"
+ /* 3 */ "bcbcb"
+ /* 4 */ "bbbbb"
+
+ // Level 10
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcbcb"
+ /* 2 */ "bbbbb"
+ /* 3 */ "bcbcb"
+ /* 4 */ "bbbbb"
+
+ // Level 11
+ /* z\x* 01234 */
+ /* 0 */ "ddddd"
+ /* 1 */ "ecccf"
+ /* 2 */ "ecbcf"
+ /* 3 */ "ecccf"
+ /* 4 */ "ggggf"
+
+ // Level 12
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "..b.."
+ /* 3 */ "....."
+ /* 4 */ "....."
+
+ // Level 13
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "..b.."
+ /* 3 */ "....."
+ /* 4 */ "....."
+
+ // Level 14
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ ".hhh."
+ /* 2 */ ".ibj."
+ /* 3 */ ".kkj."
+ /* 4 */ "....."
+
+ // Level 15
+ /* z\x* 01234 */
+ /* 0 */ "lllll"
+ /* 1 */ "lllll"
+ /* 2 */ "lllll"
+ /* 3 */ "lllll"
+ /* 4 */ "lllll",
+
+ // Connectors:
+ "2: 4, 11, 2: 5\n" /* Type 2, direction X+ */
+ "2: 2, 11, 4: 3\n" /* Type 2, direction Z+ */
+ "2: 0, 11, 2: 4\n" /* Type 2, direction X- */
+ "2: 2, 11, 0: 2\n" /* Type 2, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Well
+};
+
+
+
+
+
+// The prefab counts:
+
+const size_t g_SandFlatRoofVillagePrefabsCount = ARRAYCOUNT(g_SandFlatRoofVillagePrefabs);
+
+const size_t g_SandFlatRoofVillageStartingPrefabsCount = ARRAYCOUNT(g_SandFlatRoofVillageStartingPrefabs);
+
diff --git a/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.h b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.h
new file mode 100644
index 000000000..ea06de5b5
--- /dev/null
+++ b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.h
@@ -0,0 +1,15 @@
+
+// SandFlatRoofVillagePrefabs.h
+
+// Declares the prefabs in the group SandFlatRoofVillage
+
+#include "../Prefab.h"
+
+
+
+
+
+extern const cPrefab::sDef g_SandFlatRoofVillagePrefabs[];
+extern const cPrefab::sDef g_SandFlatRoofVillageStartingPrefabs[];
+extern const size_t g_SandFlatRoofVillagePrefabsCount;
+extern const size_t g_SandFlatRoofVillageStartingPrefabsCount;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index 520d63029..862aa966f 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -7,6 +7,7 @@
#include "VillageGen.h"
#include "Prefabs/PlainsVillagePrefabs.h"
#include "Prefabs/SandVillagePrefabs.h"
+#include "Prefabs/SandFlatRoofVillagePrefabs.h"
#include "PieceGenerator.h"
@@ -25,8 +26,8 @@ the roads and houses are then used as the following pieces. Only the houses are
though, the roads are generated by code and their content is ignored. A special subclass of the cPiecePool
class is used, so that the roads connect to each other and to the well only in predefined manners.
-The well has connectors of type "1". The houses have connectors of type "-1". The roads have connectors of
-both types, type "-1" at the far ends and type "1" on the long edges.
+The well has connectors of type "2". The houses have connectors of type "-1". The roads have connectors of
+both types' opposites, type "-2" at the far ends and type "1" on the long edges.
When the village is about to be drawn into a chunk, it queries the heights for each piece intersecting the
chunk. The pieces are shifted so that their pivot points lie on the surface, and the roads are drawn
@@ -220,7 +221,10 @@ protected:
// cVillageGen:
/** The prefabs for the sand village. */
-static cVillagePiecePool g_SandVillage (g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
+static cVillagePiecePool g_SandVillage(g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
+
+/** The prefabs for the flat-roofed sand village. */
+static cVillagePiecePool g_SandFlatRoofVillage(g_SandFlatRoofVillagePrefabs, g_SandFlatRoofVillagePrefabsCount, g_SandFlatRoofVillageStartingPrefabs, g_SandFlatRoofVillageStartingPrefabsCount);
/** The prefabs for the plains village. */
static cVillagePiecePool g_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
@@ -254,6 +258,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
// If just one is not, no village is created, because it's likely that an unfriendly biome is too close
cVillagePiecePool * VillagePrefabs = NULL;
BLOCKTYPE RoadBlock = E_BLOCK_GRAVEL;
+ int rnd = (a_OriginX + 21 * a_OriginZ + 985) / 11;
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
@@ -262,7 +267,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biDesertM:
{
// These biomes allow sand villages
- VillagePrefabs = &g_SandVillage;
+ VillagePrefabs = (rnd % 2 == 0) ? &g_SandVillage : &g_SandFlatRoofVillage;
RoadBlock = E_BLOCK_SANDSTONE;
break;
}
--
cgit v1.2.3
From 85fc0dbd97bbf72ba98dfb69351d5c8fa6a8ddfd Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 21 May 2014 23:17:09 +0200
Subject: Changed desert village roads to gravel.
---
src/Generating/VillageGen.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index 862aa966f..a899d5837 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -268,7 +268,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
{
// These biomes allow sand villages
VillagePrefabs = (rnd % 2 == 0) ? &g_SandVillage : &g_SandFlatRoofVillage;
- RoadBlock = E_BLOCK_SANDSTONE;
+ // RoadBlock = E_BLOCK_SANDSTONE;
break;
}
case biPlains:
--
cgit v1.2.3
From ebb1ef237a23ca1bd381afe0a19178e1c1af62ca Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 22 May 2014 08:57:57 +0200
Subject: Updated plains village prefabs.
The DoublePlantBed had sponges in wrong places, plus a few cosmetic fixes.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 87 ++++++++++++-------------
1 file changed, 43 insertions(+), 44 deletions(-)
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index 863720ab4..22aae5958 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -302,28 +302,28 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 0
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "aaaaaaamaaaaaaa"
- /* 1 */ "abbcbbamabbcbba"
- /* 2 */ "abbcbbamabbcbba"
- /* 3 */ "abbcbbamabbcbba"
- /* 4 */ "abbcbbamabbcbba"
- /* 5 */ "abbcbbamabbcbba"
- /* 6 */ "abbcbbamabbcbba"
- /* 7 */ "abbcbbamabbcbba"
- /* 8 */ "aaaaaaamaaaaaaa"
+ /* 0 */ "aaaaaaa.aaaaaaa"
+ /* 1 */ "abbcbba.abbcbba"
+ /* 2 */ "abbcbba.abbcbba"
+ /* 3 */ "abbcbba.abbcbba"
+ /* 4 */ "abbcbba.abbcbba"
+ /* 5 */ "abbcbba.abbcbba"
+ /* 6 */ "abbcbba.abbcbba"
+ /* 7 */ "abbcbba.abbcbba"
+ /* 8 */ "aaaaaaa.aaaaaaa"
// Level 1
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "dmmmmmdmdmmmmmd"
- /* 1 */ "meemeemmmeemeem"
- /* 2 */ "memmmemmmeemeem"
- /* 3 */ "memmmmmmmeemeem"
- /* 4 */ "meemmemmmeemeem"
- /* 5 */ "meemmemmmeemeem"
- /* 6 */ "mmemmemmmeemeem"
- /* 7 */ "mmememmmmeemeem"
- /* 8 */ "dmmmmmdmdmmmmmd",
+ /* 0 */ "d.....d.d.....d"
+ /* 1 */ ".ee.ee...ee.ee."
+ /* 2 */ ".e...e...ee.ee."
+ /* 3 */ ".e.......ee.ee."
+ /* 4 */ ".ee..e...ee.ee."
+ /* 5 */ ".ee..e...ee.ee."
+ /* 6 */ "..e..e...ee.ee."
+ /* 7 */ "..e.e....ee.ee."
+ /* 8 */ "d.....d.d.....d",
// Connectors:
"-1: 7, 0, 8: 3\n" /* Type -1, direction Z+ */,
@@ -779,7 +779,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "uh...hv"
/* 9 */ "uh...hv"
/* 10 */ "uh...hv"
- /* 11 */ "ughhhhv"
+ /* 11 */ "ughhhgv"
/* 12 */ "uw...xv"
// Level 6
@@ -901,7 +901,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 2 */ "uhDDDhv"
/* 3 */ "uhDDDhv"
/* 4 */ "uhDDDhv"
- /* 5 */ "uhhhhhv"
+ /* 5 */ "ughhhgv"
/* 6 */ "uw...xv"
/* 7 */ "......."
/* 8 */ "......."
@@ -1893,16 +1893,15 @@ 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: 0\n" /* wooddoorblock */
"p:102: 0\n" /* glasspane */
"q: 72: 0\n" /* woodplate */
- "r: 64:12\n" /* wooddoorblock */
- "s: 64: 8\n" /* wooddoorblock */
- "t: 53: 5\n" /* woodstairs */
- "u: 53: 4\n" /* woodstairs */
- "v: 50: 1\n" /* torch */
- "w: 50: 2\n" /* torch */,
+ "r: 64: 8\n" /* wooddoorblock */
+ "s: 53: 5\n" /* woodstairs */
+ "t: 53: 4\n" /* woodstairs */
+ "u: 50: 1\n" /* torch */
+ "v: 50: 2\n" /* torch */,
// Block data:
// Level 0
@@ -1973,7 +1972,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 2 */ ".p.q.pmmmm"
/* 3 */ ".p...p...."
/* 4 */ ".d...d...."
- /* 5 */ ".r...s...."
+ /* 5 */ ".r...r...."
/* 6 */ ".d...d...."
/* 7 */ ".p...p...."
/* 8 */ ".p...p...."
@@ -1983,22 +1982,22 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 5
/* z\x* */
/* * 0123456789 */
- /* 0 */ "lt...ujmmm"
+ /* 0 */ "ls...tjmmm"
/* 1 */ "lidddijmmm"
/* 2 */ "ld...djmmm"
/* 3 */ "ld...dj..."
- /* 4 */ "ldv.wdj..."
+ /* 4 */ "ldu.vdj..."
/* 5 */ "ld...dj..."
- /* 6 */ "ldv.wdj..."
+ /* 6 */ "ldu.vdj..."
/* 7 */ "ld...dj..."
/* 8 */ "ld...dj..."
/* 9 */ "lidddijmmm"
- /* 10 */ "lt...ujmmm"
+ /* 10 */ "ls...tjmmm"
// Level 6
/* z\x* */
/* * 0123456789 */
- /* 0 */ "mlt.ujmmmm"
+ /* 0 */ "mls.tjmmmm"
/* 1 */ "mldddjmmmm"
/* 2 */ "mld.djmmmm"
/* 3 */ "mld.djm..."
@@ -2008,7 +2007,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 7 */ "mld.djm..."
/* 8 */ "mld.djm..."
/* 9 */ "mldddjmmmm"
- /* 10 */ "mlt.ujmmmm"
+ /* 10 */ "mls.tjmmmm"
// Level 7
/* z\x* */
@@ -3052,16 +3051,16 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 3 */ "lllllllllllll..."
/* 4 */ "eeeeeeeeeeeen..."
/* 5 */ "qqqqqqqqqqren..."
- /* 6 */ "mmmmmmmmmmren..."
- /* 7 */ "mmmmmmmmmmren..."
- /* 8 */ "mmmmmmmmmmren..."
- /* 9 */ "mmmmmmmmmmren..."
- /* 10 */ "mmmmmmmmmmren..."
- /* 11 */ "mmmmmmmmmmren..."
- /* 12 */ "mmmmmmmmmmren..."
- /* 13 */ "mmmmmmmmmmren..."
- /* 14 */ "mmmmmmmmmmren..."
- /* 15 */ "mmmmmmmmmmren...",
+ /* 6 */ "..........ren..."
+ /* 7 */ "..........ren..."
+ /* 8 */ "mmmmmmmm..ren..."
+ /* 9 */ "mmmmmmmm..ren..."
+ /* 10 */ "mmmmmmmm..ren..."
+ /* 11 */ "mmmmmmmm..ren..."
+ /* 12 */ "mmmmmmmm..ren..."
+ /* 13 */ "mmmmmmmm..ren..."
+ /* 14 */ "mmmmmmmm..ren..."
+ /* 15 */ "mmmmmmmm..ren...",
// Connectors:
"-1: 9, 0, 0: 2\n" /* Type -1, direction Z- */,
--
cgit v1.2.3
From 6aa7df367f8db7506a8a5ab853c26e3c9fd60253 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 22 May 2014 21:47:56 +0200
Subject: Villages have min and max density setting.
Also made roads use 3+9 scheme, instead of 3+5, for the house connectors.
Fixes #1020.
---
src/Generating/ComposableGenerator.cpp | 10 ++--
src/Generating/PieceGenerator.cpp | 9 ++++
src/Generating/PieceGenerator.h | 5 ++
src/Generating/VillageGen.cpp | 92 +++++++++++++++++++++++++++++-----
src/Generating/VillageGen.h | 11 +++-
5 files changed, 110 insertions(+), 17 deletions(-)
diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp
index f264599c9..4dd626ed4 100644
--- a/src/Generating/ComposableGenerator.cpp
+++ b/src/Generating/ComposableGenerator.cpp
@@ -408,10 +408,12 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile)
}
else if (NoCaseCompare(*itr, "Villages") == 0)
{
- int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 384);
- int MaxDepth = a_IniFile.GetValueSetI("Generator", "VillageMaxDepth", 3);
- int MaxSize = a_IniFile.GetValueSetI("Generator", "VillageMaxSize", 128);
- m_FinishGens.push_back(new cVillageGen(Seed, GridSize, MaxDepth, MaxSize, *m_BiomeGen, *m_HeightGen));
+ int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 384);
+ 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));
}
else if (NoCaseCompare(*itr, "WaterLakes") == 0)
{
diff --git a/src/Generating/PieceGenerator.cpp b/src/Generating/PieceGenerator.cpp
index c12559d3f..7d478f1a1 100644
--- a/src/Generating/PieceGenerator.cpp
+++ b/src/Generating/PieceGenerator.cpp
@@ -308,6 +308,15 @@ cPiece::cConnector cPlacedPiece::GetRotatedConnector(size_t a_Index) const
+cPiece::cConnector cPlacedPiece::GetRotatedConnector(const cPiece::cConnector & a_Connector) const
+{
+ return m_Piece->RotateMoveConnector(a_Connector, m_NumCCWRotations, m_Coords.x, m_Coords.y, m_Coords.z);
+}
+
+
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cPieceGenerator:
diff --git a/src/Generating/PieceGenerator.h b/src/Generating/PieceGenerator.h
index 643ca58b6..e396643a9 100644
--- a/src/Generating/PieceGenerator.h
+++ b/src/Generating/PieceGenerator.h
@@ -110,6 +110,7 @@ public:
virtual cPieces GetStartingPieces(void) = 0;
/** Returns the relative weight with which the a_NewPiece is to be selected for placing under a_PlacedPiece through a_ExistingConnector.
+ a_ExistingConnector is the original connector, before any movement or rotation is applied to it.
This allows the pool to tweak the piece's chances, based on the previous pieces in the tree and the connector used.
The higher the number returned, the higher the chance the piece will be chosen. 0 means the piece will never be chosen.
*/
@@ -151,6 +152,10 @@ public:
Undefined behavior if a_Index is out of range. */
cPiece::cConnector GetRotatedConnector(size_t a_Index) const;
+ /** Returns a copy of the specified connector, modified to account for the translation and rotation for
+ this placement. */
+ cPiece::cConnector GetRotatedConnector(const cPiece::cConnector & a_Connector) const;
+
protected:
const cPlacedPiece * m_Parent;
const cPiece * m_Piece;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index a899d5837..bcce62af5 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -27,11 +27,16 @@ though, the roads are generated by code and their content is ignored. A special
class is used, so that the roads connect to each other and to the well only in predefined manners.
The well has connectors of type "2". The houses have connectors of type "-1". The roads have connectors of
-both types' opposites, type "-2" at the far ends and type "1" on the long edges.
+both types' opposites, type "-2" at the far ends and type "1" on the long edges. Additionally, there are
+type "2" connectors along the long edges of the roads as well, so that the roads create T junctions.
When the village is about to be drawn into a chunk, it queries the heights for each piece intersecting the
chunk. The pieces are shifted so that their pivot points lie on the surface, and the roads are drawn
directly by turning the surface blocks into gravel / sandstone.
+
+The village prefabs are stored in global piecepools (one pool per village type). In order to support
+per-village density setting, the cVillage class itself implements the cPiecePool interface, relaying the
+calls to the underlying cVillagePiecePool, after processing the density check.
*/
class cVillagePiecePool :
@@ -46,7 +51,7 @@ public:
super(a_PieceDefs, a_NumPieceDefs, a_StartingPieceDefs, a_NumStartingPieceDefs)
{
// Add the road pieces:
- for (int len = 19; len < 60; len += 8)
+ for (int len = 27; len < 60; len += 12)
{
cBlockArea BA;
BA.Create(len, 1, 3, cBlockArea::baTypes | cBlockArea::baMetas);
@@ -56,14 +61,14 @@ public:
RoadPiece->AddConnector(len - 1, 0, 1, BLOCK_FACE_XP, -2);
// Add the road connectors:
- for (int x = 1; x < len; x += 8)
+ for (int x = 1; x < len; x += 12)
{
RoadPiece->AddConnector(x, 0, 0, BLOCK_FACE_ZM, 2);
RoadPiece->AddConnector(x, 0, 2, BLOCK_FACE_ZP, 2);
}
// Add the buildings connectors:
- for (int x = 5; x < len; x += 8)
+ for (int x = 7; x < len; x += 12)
{
RoadPiece->AddConnector(x, 0, 0, BLOCK_FACE_ZM, 1);
RoadPiece->AddConnector(x, 0, 2, BLOCK_FACE_ZP, 1);
@@ -94,7 +99,8 @@ public:
class cVillageGen::cVillage :
- public cGridStructGen::cStructure
+ public cGridStructGen::cStructure,
+ protected cPiecePool
{
typedef cGridStructGen::cStructure super;
@@ -104,7 +110,8 @@ public:
int a_OriginX, int a_OriginZ,
int a_MaxRoadDepth,
int a_MaxSize,
- cPrefabPiecePool & a_Prefabs,
+ int a_Density,
+ cPiecePool & a_Prefabs,
cTerrainHeightGen & a_HeightGen,
BLOCKTYPE a_RoadBlock
) :
@@ -112,12 +119,13 @@ public:
m_Seed(a_Seed),
m_Noise(a_Seed),
m_MaxSize(a_MaxSize),
+ m_Density(a_Density),
m_Borders(a_OriginX - a_MaxSize, 0, a_OriginZ - a_MaxSize, a_OriginX + a_MaxSize, 255, a_OriginZ + a_MaxSize),
m_Prefabs(a_Prefabs),
m_HeightGen(a_HeightGen),
m_RoadBlock(a_RoadBlock)
{
- cBFSPieceGenerator pg(m_Prefabs, a_Seed);
+ cBFSPieceGenerator pg(*this, a_Seed);
// Generate the pieces at very negative Y coords, so that we can later test
// Piece has negative Y coord -> hasn't been height-adjusted yet
pg.PlacePieces(a_OriginX, -1000, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
@@ -133,11 +141,14 @@ protected:
/** Maximum size, in X/Z blocks, of the village (radius from the origin) */
int m_MaxSize;
+ /** The density for this village. Used to refrain from populating all house connectors. Range [0, 100] */
+ int m_Density;
+
/** Borders of the vilalge - no item may reach out of this cuboid. */
cCuboid m_Borders;
/** Prefabs to use for buildings */
- cPrefabPiecePool & m_Prefabs;
+ cPiecePool & m_Prefabs;
/** The underlying height generator, used for placing the structures on top of the terrain. */
cTerrainHeightGen & m_HeightGen;
@@ -149,7 +160,7 @@ protected:
BLOCKTYPE m_RoadBlock;
- // cGrdStructGen::cStructure overrides:
+ // cGridStructGen::cStructure overrides:
virtual void DrawIntoChunk(cChunkDesc & a_Chunk) override
{
// Iterate over all items
@@ -211,6 +222,49 @@ protected:
}
}
}
+
+
+ // cPiecePool overrides:
+ virtual cPieces GetPiecesWithConnector(int a_ConnectorType)
+ {
+ return m_Prefabs.GetPiecesWithConnector(a_ConnectorType);
+ }
+
+ virtual cPieces GetStartingPieces(void)
+ {
+ return m_Prefabs.GetStartingPieces();
+ }
+
+ virtual int GetPieceWeight(
+ const cPlacedPiece & a_PlacedPiece,
+ const cPiece::cConnector & a_ExistingConnector,
+ const cPiece & a_NewPiece
+ ) override
+ {
+ // Check against the density:
+ if (a_ExistingConnector.m_Type == 1)
+ {
+ const Vector3i & Coords = a_PlacedPiece.GetRotatedConnector(a_ExistingConnector).m_Pos;
+ int rnd = (m_Noise.IntNoise3DInt(Coords.x, Coords.y, Coords.z) / 7) % 100;
+ if (rnd > m_Density)
+ {
+ return 0;
+ }
+ }
+
+ // Density check passed, relay to m_Prefabs:
+ return m_Prefabs.GetPieceWeight(a_PlacedPiece, a_ExistingConnector, a_NewPiece);
+ }
+
+ virtual void PiecePlaced(const cPiece & a_Piece) override
+ {
+ m_Prefabs.PiecePlaced(a_Piece);
+ }
+
+ virtual void Reset(void) override
+ {
+ m_Prefabs.Reset();
+ }
} ;
@@ -233,10 +287,13 @@ static cVillagePiecePool g_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillage
-cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
+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),
+ m_Noise(a_Seed + 1000),
m_MaxDepth(a_MaxDepth),
m_MaxSize(a_MaxSize),
+ m_MinDensity(a_MinDensity),
+ m_MaxDensity(a_MaxDensity),
m_BiomeGen(a_BiomeGen),
m_HeightGen(a_HeightGen)
{
@@ -258,7 +315,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
// If just one is not, no village is created, because it's likely that an unfriendly biome is too close
cVillagePiecePool * VillagePrefabs = NULL;
BLOCKTYPE RoadBlock = E_BLOCK_GRAVEL;
- int rnd = (a_OriginX + 21 * a_OriginZ + 985) / 11;
+ int rnd = m_Noise.IntNoise2DInt(a_OriginX, a_OriginZ) / 11;
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
@@ -288,12 +345,23 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
} // switch (Biomes[i])
} // for i - Biomes[]
+ // Choose density for the village, random between m_MinDensity and m_MaxDensity:
+ int Density;
+ if (m_MaxDensity > m_MinDensity)
+ {
+ Density = m_MinDensity + rnd % (m_MaxDensity - m_MinDensity);
+ }
+ else
+ {
+ Density = m_MinDensity;
+ }
+
// Create a village based on the chosen prefabs:
if (VillagePrefabs == NULL)
{
return cStructurePtr();
}
- return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, *VillagePrefabs, m_HeightGen, RoadBlock));
+ return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, Density, *VillagePrefabs, m_HeightGen, RoadBlock));
}
diff --git a/src/Generating/VillageGen.h b/src/Generating/VillageGen.h
index c6f8f024a..5faaae8a6 100644
--- a/src/Generating/VillageGen.h
+++ b/src/Generating/VillageGen.h
@@ -21,16 +21,25 @@ class cVillageGen :
{
typedef cGridStructGen super;
public:
- cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
+ 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);
protected:
class cVillage; // fwd: VillageGen.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 village (radius from the origin) */
int m_MaxSize;
+
+ /** Minimum density - percentage of allowed house connections. Range [0, 100] */
+ int m_MinDensity;
+
+ /** Maximum density - percentage of allowed house connections. Range [0, 100] */
+ int m_MaxDensity;
/** The underlying biome generator that defines whether the village is created or not */
cBiomeGen & m_BiomeGen;
--
cgit v1.2.3
From da843a18811546ca51600a0f3e4438ae4ac5dee8 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 22 May 2014 22:19:44 +0200
Subject: Updated plains village prefabs.
Expanded the hitboxes so that houses don't touch each other. Fixed minor visual defects.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 357 ++++++++++++------------
1 file changed, 171 insertions(+), 186 deletions(-)
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index 22aae5958..28488be14 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -135,8 +135,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
12, 8, 7, // SizeX = 12, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 11, 7, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 12, 7, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -357,8 +357,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
12, 10, 11, // SizeX = 12, SizeY = 10, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 11, 9, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 12, 9, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -649,8 +649,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
7, 16, 13, // SizeX = 7, SizeY = 16, SizeZ = 13
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 6, 15, 12, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 15, 13, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -974,8 +974,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
7, 8, 9, // SizeX = 7, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 6, 7, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 7, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1127,8 +1127,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
12, 9, 9, // SizeX = 12, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 11, 8, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 12, 8, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1308,8 +1308,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
7, 8, 7, // SizeX = 7, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 6, 7, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 7, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1444,8 +1444,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
9, 8, 7, // SizeX = 9, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 8, 7, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 9, 7, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1580,8 +1580,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
11, 8, 7, // SizeX = 11, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 7, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1724,8 +1724,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
11, 8, 7, // SizeX = 11, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 7, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1872,18 +1872,18 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 9, ID 26, created by Aloe_vera
{
// Size:
- 10, 8, 11, // SizeX = 10, SizeY = 8, SizeZ = 11
+ 10, 7, 11, // SizeX = 10, SizeY = 7, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 9, 7, 10, // MaxX, MaxY, MaxZ
+ 0, -1, -1, // MinX, MinY, MinZ
+ 10, 6, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 4: 0\n" /* cobblestone */
- "d: 5: 0\n" /* wood */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 3: 0\n" /* dirt */
+ "c: 5: 0\n" /* wood */
+ "d: 2: 0\n" /* grass */
"e: 67: 2\n" /* stairs */
"f: 43: 0\n" /* doubleslab */
"g: 67: 0\n" /* stairs */
@@ -1907,125 +1907,110 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 0
/* z\x* */
/* * 0123456789 */
- /* 0 */ "aaaaaaaaaa"
- /* 1 */ "aaaaaaaaaa"
- /* 2 */ "aaaaaaaaaa"
- /* 3 */ "aaaaaaaaaa"
- /* 4 */ "aaaaaaaaaa"
- /* 5 */ "aaaaaaaaaa"
- /* 6 */ "aaaaaaaaaa"
- /* 7 */ "aaaaaaaaaa"
- /* 8 */ "aaaaaaaaaa"
- /* 9 */ "aaaaaaaaaa"
- /* 10 */ "aaaaaaaaaa"
+ /* 0 */ "mmmmmmmmmm"
+ /* 1 */ "maaaaammmm"
+ /* 2 */ "maaaaammmm"
+ /* 3 */ "maaaaabbbb"
+ /* 4 */ "aaaaaabbbb"
+ /* 5 */ "aaaaaabbbb"
+ /* 6 */ "aaaaaabbbb"
+ /* 7 */ "maaaaabbbb"
+ /* 8 */ "maaaaabbbb"
+ /* 9 */ "maaaaammmm"
+ /* 10 */ "mmmmmmmmmm"
// Level 1
/* z\x* */
/* * 0123456789 */
- /* 0 */ "bbbbbbbbbb"
- /* 1 */ "baaaaabbbb"
- /* 2 */ "baaaaabbbb"
- /* 3 */ "baaaaaaaaa"
- /* 4 */ "aaaaaaaaaa"
- /* 5 */ "aaaaaaaaaa"
- /* 6 */ "aaaaaaaaaa"
- /* 7 */ "baaaaaaaaa"
- /* 8 */ "baaaaaaaaa"
- /* 9 */ "baaaaabbbb"
- /* 10 */ "bbbbbbbbbb"
-
- // Level 2
- /* z\x* */
- /* * 0123456789 */
/* 0 */ "......mmmm"
- /* 1 */ ".cccccmmmm"
- /* 2 */ ".cdddcmmmm"
- /* 3 */ ".cdddcbbbb"
- /* 4 */ "ecfffcbbbb"
- /* 5 */ "gcffffbbbb"
- /* 6 */ "hcfffcbbbb"
- /* 7 */ ".cfffcbbbb"
- /* 8 */ ".cfffcbbbb"
- /* 9 */ ".cccccmmmm"
+ /* 1 */ ".aaaaammmm"
+ /* 2 */ ".acccammmm"
+ /* 3 */ ".acccadddd"
+ /* 4 */ "eafffadddd"
+ /* 5 */ "gaffffdddd"
+ /* 6 */ "hafffadddd"
+ /* 7 */ ".afffadddd"
+ /* 8 */ ".afffadddd"
+ /* 9 */ ".aaaaammmm"
/* 10 */ "......mmmm"
- // Level 3
+ // Level 2
/* z\x* */
/* * 0123456789 */
/* 0 */ "......mmmm"
- /* 1 */ ".idddimmmm"
- /* 2 */ ".djkldmmmm"
- /* 3 */ ".d...dkkkk"
- /* 4 */ ".d...d...k"
+ /* 1 */ ".icccimmmm"
+ /* 2 */ ".cjklcmmmm"
+ /* 3 */ ".c...ckkkk"
+ /* 4 */ ".c...c...k"
/* 5 */ ".n...o...k"
- /* 6 */ ".d...d...k"
- /* 7 */ ".dff.d...k"
- /* 8 */ ".d...dkkkk"
- /* 9 */ ".idddimmmm"
+ /* 6 */ ".c...c...k"
+ /* 7 */ ".cff.c...k"
+ /* 8 */ ".c...ckkkk"
+ /* 9 */ ".icccimmmm"
/* 10 */ "......mmmm"
- // Level 4
+ // Level 3
/* z\x* */
/* * 0123456789 */
/* 0 */ "......mmmm"
/* 1 */ ".ipppimmmm"
/* 2 */ ".p.q.pmmmm"
/* 3 */ ".p...p...."
- /* 4 */ ".d...d...."
+ /* 4 */ ".c...c...."
/* 5 */ ".r...r...."
- /* 6 */ ".d...d...."
+ /* 6 */ ".c...c...."
/* 7 */ ".p...p...."
/* 8 */ ".p...p...."
/* 9 */ ".ipppimmmm"
/* 10 */ "......mmmm"
- // Level 5
+ // Level 4
/* z\x* */
/* * 0123456789 */
/* 0 */ "ls...tjmmm"
- /* 1 */ "lidddijmmm"
- /* 2 */ "ld...djmmm"
- /* 3 */ "ld...dj..."
- /* 4 */ "ldu.vdj..."
- /* 5 */ "ld...dj..."
- /* 6 */ "ldu.vdj..."
- /* 7 */ "ld...dj..."
- /* 8 */ "ld...dj..."
- /* 9 */ "lidddijmmm"
+ /* 1 */ "licccijmmm"
+ /* 2 */ "lc...cjmmm"
+ /* 3 */ "lc...cj..."
+ /* 4 */ "lcu.vcj..."
+ /* 5 */ "lc...cj..."
+ /* 6 */ "lcu.vcj..."
+ /* 7 */ "lc...cj..."
+ /* 8 */ "lc...cj..."
+ /* 9 */ "licccijmmm"
/* 10 */ "ls...tjmmm"
- // Level 6
+ // Level 5
/* z\x* */
/* * 0123456789 */
/* 0 */ "mls.tjmmmm"
- /* 1 */ "mldddjmmmm"
- /* 2 */ "mld.djmmmm"
- /* 3 */ "mld.djm..."
- /* 4 */ "mld.djm..."
- /* 5 */ "mld.djm..."
- /* 6 */ "mld.djm..."
- /* 7 */ "mld.djm..."
- /* 8 */ "mld.djm..."
- /* 9 */ "mldddjmmmm"
+ /* 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"
- // Level 7
+ // Level 6
/* z\x* */
/* * 0123456789 */
- /* 0 */ "mmldjmmmmm"
- /* 1 */ "mmldjmmmmm"
- /* 2 */ "mmldjmmmmm"
- /* 3 */ "mmldjmm..."
- /* 4 */ "mmldjmm..."
- /* 5 */ "mmldjmm..."
- /* 6 */ "mmldjmm..."
- /* 7 */ "mmldjmm..."
- /* 8 */ "mmldjmm..."
- /* 9 */ "mmldjmmmmm"
- /* 10 */ "mmldjmmmmm",
+ /* 0 */ "mmlcjmmmmm"
+ /* 1 */ "mmlcjmmmmm"
+ /* 2 */ "mmlcjmmmmm"
+ /* 3 */ "mmlcjmm..."
+ /* 4 */ "mmlcjmm..."
+ /* 5 */ "mmlcjmm..."
+ /* 6 */ "mmlcjmm..."
+ /* 7 */ "mmlcjmm..."
+ /* 8 */ "mmlcjmm..."
+ /* 9 */ "mmlcjmmmmm"
+ /* 10 */ "mmlcjmmmmm",
// Connectors:
- "-1: 0, 2, 5: 4\n" /* Type -1, direction X- */,
+ "-1: 0, 1, 5: 4\n" /* Type -1, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2056,8 +2041,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 8, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 8, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2230,17 +2215,17 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
11, 9, 13, // SizeX = 11, SizeY = 9, SizeZ = 13
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 8, 12, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 8, 13, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
"a: 3: 0\n" /* dirt */
"b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
+ "c: 4: 0\n" /* cobblestone */
+ "d: 67: 0\n" /* stairs */
+ "e: 67: 2\n" /* stairs */
+ "f: 67: 1\n" /* stairs */
"g: 43: 0\n" /* doubleslab */
"h: 17: 0\n" /* tree */
"i: 5: 0\n" /* wood */
@@ -2262,52 +2247,52 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaab"
+ /* 2 */ "aaaaaaaaaab"
+ /* 3 */ "aaaaaaaaaab"
+ /* 4 */ "aaaaaaaaaab"
/* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaa"
- /* 9 */ "aaaaaaaaaaa"
- /* 10 */ "aaaaaaaaaaa"
- /* 11 */ "aaaaaaaaaaa"
- /* 12 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaab"
+ /* 7 */ "aaaaaaaaaab"
+ /* 8 */ "abaaaaaaabb"
+ /* 9 */ "aaaaaaaaabb"
+ /* 10 */ "aaaaaaaaabb"
+ /* 11 */ "abaaaaaaaba"
+ /* 12 */ "abaaaaaaabb"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "bbbbaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "baaaaaaaaab"
- /* 7 */ "baaaaaaaaab"
- /* 8 */ "bbaaaaaaabb"
- /* 9 */ "bbaaaaaaabb"
- /* 10 */ "bbaaaaaaabb"
- /* 11 */ "bbaaaaaaabb"
- /* 12 */ "bbaaaaaaabb"
+ /* 0 */ "mmmmcccmmmm"
+ /* 1 */ "mcccccccccm"
+ /* 2 */ "mcccccccccm"
+ /* 3 */ "mcccccccccm"
+ /* 4 */ "mcccccccccm"
+ /* 5 */ "mcccccccccm"
+ /* 6 */ "mcccccccccm"
+ /* 7 */ "mcccccccccm"
+ /* 8 */ "mmaaaaaaamm"
+ /* 9 */ "mmaaaaaaamm"
+ /* 10 */ "mmaaaaaaamm"
+ /* 11 */ "mmaaaaaaamm"
+ /* 12 */ "mmaaaaaaamm"
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....cde...."
- /* 1 */ ".fffffffff."
- /* 2 */ ".fggggffff."
- /* 3 */ ".fggggffff."
- /* 4 */ ".fggggffff."
- /* 5 */ ".fggggffff."
- /* 6 */ ".fggggffff."
- /* 7 */ ".fffffffff."
+ /* 0 */ "....def...."
+ /* 1 */ ".ccccccccc."
+ /* 2 */ ".cggggcccc."
+ /* 3 */ ".cggggcccc."
+ /* 4 */ ".cggggcccc."
+ /* 5 */ ".cggggcccc."
+ /* 6 */ ".cggggcccc."
+ /* 7 */ ".ccccccccc."
/* 8 */ "..bbbbbbb.."
- /* 9 */ "mmbbbbbbbmm"
- /* 10 */ "mmbbbbbbbmm"
- /* 11 */ "mmbbbbbbbmm"
- /* 12 */ "mmbbbbbbbmm"
+ /* 9 */ "..bbbbbbb.."
+ /* 10 */ "..bbbbbbb.."
+ /* 11 */ "..bbbbbbb.."
+ /* 12 */ "..bbbbbbb.."
// Level 3
/* z\x* 1 */
@@ -2321,10 +2306,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".i.......i."
/* 7 */ ".hiiijiiih."
/* 8 */ "..l.....l.."
- /* 9 */ "mml.....lmm"
- /* 10 */ "mml.....lmm"
- /* 11 */ "mml.....lmm"
- /* 12 */ "mmlllllllmm"
+ /* 9 */ "..l.....l.."
+ /* 10 */ "..l.....l.."
+ /* 11 */ "..l.....l.."
+ /* 12 */ "..lllllll.."
// Level 4
/* z\x* 1 */
@@ -2338,10 +2323,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".o.......o."
/* 7 */ ".hooipiooh."
/* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+ /* 11 */ "..........."
+ /* 12 */ "..........."
// Level 5
/* z\x* 1 */
@@ -2355,10 +2340,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".i.......i."
/* 7 */ "uiiiiiiiiiu"
/* 8 */ "kkkkkkkkkkk"
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+ /* 11 */ "..........."
+ /* 12 */ "..........."
// Level 6
/* z\x* 1 */
@@ -2372,10 +2357,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "uiiiiiiiiiu"
/* 7 */ "kkkkkkkkkkk"
/* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+ /* 11 */ "..........."
+ /* 12 */ "..........."
// Level 7
/* z\x* 1 */
@@ -2389,10 +2374,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "kkkkkkkkkkk"
/* 7 */ "..........."
/* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm"
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+ /* 11 */ "..........."
+ /* 12 */ "..........."
// Level 8
/* z\x* 1 */
@@ -2406,10 +2391,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "..........."
/* 7 */ "..........."
/* 8 */ "..........."
- /* 9 */ "mm.......mm"
- /* 10 */ "mm.......mm"
- /* 11 */ "mm.......mm"
- /* 12 */ "mm.......mm",
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+ /* 11 */ "..........."
+ /* 12 */ "...........",
// Connectors:
"-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
@@ -2443,8 +2428,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 8, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 8, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2620,8 +2605,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
15, 10, 16, // SizeX = 15, SizeY = 10, SizeZ = 16
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 14, 9, 15, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 15, 9, 16, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2891,8 +2876,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 15, 6, 15, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 16, 6, 16, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -3094,8 +3079,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
11, 8, 11, // SizeX = 11, SizeY = 8, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 7, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -3277,8 +3262,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
15, 8, 11, // SizeX = 15, SizeY = 8, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 14, 7, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 15, 7, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -3458,7 +3443,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
9, 18, 13, // SizeX = 9, SizeY = 18, SizeZ = 13
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
+ -1, 0, 0, // MinX, MinY, MinZ
8, 17, 12, // MaxX, MaxY, MaxZ
// Block definitions:
@@ -3808,8 +3793,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
15, 10, 9, // SizeX = 15, SizeY = 10, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 14, 9, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 15, 9, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
--
cgit v1.2.3
From 96a22cd82c350b1205985a9b8e01f5e6c11f069a Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 24 May 2014 15:03:39 +0200
Subject: Added Japanese village prefabs.
---
src/Generating/Prefab.cpp | 9 +
src/Generating/Prefab.h | 3 +
src/Generating/Prefabs/JapaneseVillagePrefabs.cpp | 2404 +++++++++++++++++++++
src/Generating/Prefabs/JapaneseVillagePrefabs.h | 15 +
src/Generating/VillageGen.cpp | 15 +-
5 files changed, 2442 insertions(+), 4 deletions(-)
create mode 100644 src/Generating/Prefabs/JapaneseVillagePrefabs.cpp
create mode 100644 src/Generating/Prefabs/JapaneseVillagePrefabs.h
diff --git a/src/Generating/Prefab.cpp b/src/Generating/Prefab.cpp
index 506e1c2cc..05979507a 100644
--- a/src/Generating/Prefab.cpp
+++ b/src/Generating/Prefab.cpp
@@ -292,6 +292,15 @@ int cPrefab::GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cC
+void cPrefab::SetDefaultWeight(int a_DefaultWeight)
+{
+ m_DefaultWeight = a_DefaultWeight;
+}
+
+
+
+
+
void cPrefab::AddConnector(int a_RelX, int a_RelY, int a_RelZ, eBlockFace a_Direction, int a_Type)
{
m_Connectors.push_back(cConnector(a_RelX, a_RelY, a_RelZ, a_Type, a_Direction));
diff --git a/src/Generating/Prefab.h b/src/Generating/Prefab.h
index 2b89a204c..adc0e688e 100644
--- a/src/Generating/Prefab.h
+++ b/src/Generating/Prefab.h
@@ -104,6 +104,9 @@ public:
PiecePool implementations can use this for their GetPieceWeight() implementations. */
int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector) const;
+ /** Sets the (unmodified) DefaultWeight property for this piece. */
+ void SetDefaultWeight(int a_DefaultWeight);
+
/** Returns the unmodified DefaultWeight property for the piece. */
int GetDefaultWeight(void) const { return m_DefaultWeight; }
diff --git a/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp b/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp
new file mode 100644
index 000000000..2b129f520
--- /dev/null
+++ b/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp
@@ -0,0 +1,2404 @@
+
+// JapaneseVillagePrefabs.cpp
+
+// Defines the prefabs in the group JapaneseVillage
+
+// NOTE: This file has been generated automatically by GalExport!
+// Any manual changes will be overwritten by the next automatic export!
+
+#include "Globals.h"
+#include "JapaneseVillagePrefabs.h"
+
+
+
+
+
+const cPrefab::sDef g_JapaneseVillagePrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Arch:
+ // The data has been exported from the gallery Plains, area index 144, ID 488, created by Aloe_vera
+ {
+ // Size:
+ 11, 7, 5, // SizeX = 11, SizeY = 7, SizeZ = 5
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 6, 4, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 2: 0\n" /* grass */
+ "b: 13: 0\n" /* gravel */
+ "c:113: 0\n" /* netherbrickfence */
+ "d: 50: 5\n" /* torch */
+ "e: 44: 8\n" /* step */
+ "f: 44: 0\n" /* step */
+ "g: 43: 0\n" /* doubleslab */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "aaaabbbaaaa"
+ /* 1 */ "aaaabbbaaaa"
+ /* 2 */ "aaaabbbaaaa"
+ /* 3 */ "aaaabbbaaaa"
+ /* 4 */ "aaaabbbaaaa"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..c.....c.."
+ /* 1 */ "..c.....c.."
+ /* 2 */ "..c.....c.."
+ /* 3 */ "..c.....c.."
+ /* 4 */ "..c.....c.."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..c.....c.."
+ /* 1 */ "..........."
+ /* 2 */ "..c.....c.."
+ /* 3 */ "..........."
+ /* 4 */ "..c.....c.."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..d.....d.."
+ /* 1 */ "..........."
+ /* 2 */ "..c.....c.."
+ /* 3 */ "..........."
+ /* 4 */ "..d.....d.."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...eeeee..."
+ /* 1 */ "..........."
+ /* 2 */ "..c.....c.."
+ /* 3 */ "..........."
+ /* 4 */ "...eeeee..."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..f.....f.."
+ /* 1 */ ".egfffffge."
+ /* 2 */ ".egeeeeege."
+ /* 3 */ ".egfffffge."
+ /* 4 */ "..f.....f.."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "gf.......fg"
+ /* 3 */ "..........."
+ /* 4 */ "...........",
+
+ // Connectors:
+ "2: 5, 1, 4: 3\n" /* Type 2, direction Z+ */
+ "2: 5, 1, 0: 2\n" /* Type 2, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Arch
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Forge:
+ // The data has been exported from the gallery Plains, area index 79, ID 145, created by Aloe_vera
+ {
+ // Size:
+ 16, 11, 14, // SizeX = 16, SizeY = 11, SizeZ = 14
+
+ // Hitbox (relative to bounding box):
+ 0, 0, -1, // MinX, MinY, MinZ
+ 16, 10, 14, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 17: 1\n" /* tree */
+ "c: 67: 0\n" /* stairs */
+ "d: 5: 2\n" /* wood */
+ "e: 67: 2\n" /* stairs */
+ "f:113: 0\n" /* netherbrickfence */
+ "g:118: 2\n" /* cauldronblock */
+ "h: 67: 6\n" /* stairs */
+ "i: 67: 4\n" /* stairs */
+ "j: 87: 0\n" /* netherstone */
+ "k: 67: 7\n" /* stairs */
+ "l: 54: 5\n" /* chest */
+ "m: 19: 0\n" /* sponge */
+ "n: 61: 2\n" /* furnace */
+ "o:101: 0\n" /* ironbars */
+ "p: 51: 0\n" /* fire */
+ "q: 50: 4\n" /* torch */
+ "r: 50: 2\n" /* torch */
+ "s: 35: 0\n" /* wool */
+ "t: 67: 3\n" /* stairs */
+ "u: 50: 3\n" /* torch */
+ "v: 44: 8\n" /* step */
+ "w: 43: 0\n" /* doubleslab */
+ "x: 44: 0\n" /* step */
+ "y: 17: 5\n" /* tree */
+ "z: 17: 9\n" /* tree */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmaaaaaaaaaaaamm"
+ /* 3 */ "mmaaaaaaaaaaaamm"
+ /* 4 */ "mmaaaaaaaaaaaamm"
+ /* 5 */ "mmaaaaaaaaaaaamm"
+ /* 6 */ "mmaaaaaaaaaaaamm"
+ /* 7 */ "mmaaaaaaaaaaaamm"
+ /* 8 */ "mmaaaaaaaaaaaamm"
+ /* 9 */ "mmaaaaaaaaaaaamm"
+ /* 10 */ "mmaaaaaaaaaaaamm"
+ /* 11 */ "mmaaaaaaaaaaaamm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ ".....bbbbbbbbb.."
+ /* 3 */ ".....cdddddddb.."
+ /* 4 */ ".....cddaaaadb.."
+ /* 5 */ "..beeedaaaaadb.."
+ /* 6 */ "..bddddaaaaadb.."
+ /* 7 */ "..bddddaaaaadb.."
+ /* 8 */ "..bddddaaaaadb.."
+ /* 9 */ "..bddddaaaaadb.."
+ /* 10 */ "..bddddddddddb.."
+ /* 11 */ "..bbbbbbbbbbbb.."
+ /* 12 */ "................"
+ /* 13 */ "................"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ ".....bfffbfffb.."
+ /* 3 */ ".............a.."
+ /* 4 */ ".............a.."
+ /* 5 */ "..b.....ghh..a.."
+ /* 6 */ "..f.....haa..b.."
+ /* 7 */ "..f.....ija..b.."
+ /* 8 */ "..f.....kaa..a.."
+ /* 9 */ "..f..........a.."
+ /* 10 */ "..fl.........a.."
+ /* 11 */ "..bffffbbffffb.."
+ /* 12 */ "................"
+ /* 13 */ "................"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ ".....bfffbfffb.."
+ /* 3 */ ".............a.."
+ /* 4 */ ".............a.."
+ /* 5 */ "..b......nn..a.."
+ /* 6 */ "..f.....oaa..b.."
+ /* 7 */ "..f.....opa..b.."
+ /* 8 */ "..f.....oaa..a.."
+ /* 9 */ "..f..........a.."
+ /* 10 */ "..f..........a.."
+ /* 11 */ "..bffffbbffffb.."
+ /* 12 */ "................"
+ /* 13 */ "................"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".........q...q.."
+ /* 2 */ "....rbsssbsssb.."
+ /* 3 */ ".............a.."
+ /* 4 */ "..q..........a.."
+ /* 5 */ "..b......ce..a.."
+ /* 6 */ "..s......ea..b.."
+ /* 7 */ "..s......aa..b.."
+ /* 8 */ "..s......ta..a.."
+ /* 9 */ "..s..........a.."
+ /* 10 */ "..s..........a.."
+ /* 11 */ ".rbssssbbssssb.."
+ /* 12 */ "..u....uu....u.."
+ /* 13 */ "................"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ ".vwxxxxxxxxxxwv."
+ /* 1 */ "vvvvvvvvvvvvvvvv"
+ /* 2 */ "wvbyybyyybbyybvw"
+ /* 3 */ "xvz..........zvx"
+ /* 4 */ "xvz..........zvx"
+ /* 5 */ "xvb..........zvx"
+ /* 6 */ "xvz.......a..bvx"
+ /* 7 */ "xvz......ca..bvx"
+ /* 8 */ "xvz.......a..zvx"
+ /* 9 */ "xvz..........zvx"
+ /* 10 */ "xvz..........zvx"
+ /* 11 */ "wvbyyyyyyyyyybvw"
+ /* 12 */ "vvvvvvvvvvvvvvvv"
+ /* 13 */ ".vwxxxxxxxxxxwv."
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "wx............xw"
+ /* 1 */ "x..............x"
+ /* 2 */ "..xxxxxxxxxxxx.."
+ /* 3 */ "..xwwwwwwwwwwx.."
+ /* 4 */ "..xwvvvvvvvvvx.."
+ /* 5 */ "..xwv.......vx.."
+ /* 6 */ "..xwv.....a.vx.."
+ /* 7 */ "..xwv.....a.vx.."
+ /* 8 */ "..xwv.....a.vx.."
+ /* 9 */ "..xwvvvvvvvvvx.."
+ /* 10 */ "..xwwwwwwwwwwx.."
+ /* 11 */ "..xxxxxxxxxxxx.."
+ /* 12 */ "x..............x"
+ /* 13 */ "wx............xw"
+
+ // Level 7
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "................"
+ /* 4 */ "....xxxxxxxx...."
+ /* 5 */ "....xxxxxxxx...."
+ /* 6 */ "....xwwwwwax...."
+ /* 7 */ "....xwvvvvax...."
+ /* 8 */ "....xwwwwwax...."
+ /* 9 */ "....xxxxxxxx...."
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ "................"
+
+ // Level 8
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "................"
+ /* 4 */ "................"
+ /* 5 */ "................"
+ /* 6 */ "..........a....."
+ /* 7 */ ".......xx.a....."
+ /* 8 */ "..........a....."
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ "................"
+
+ // Level 9
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "................"
+ /* 4 */ "................"
+ /* 5 */ "................"
+ /* 6 */ "..........a....."
+ /* 7 */ "..........a....."
+ /* 8 */ "..........a....."
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ "................"
+
+ // Level 10
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "................"
+ /* 4 */ "................"
+ /* 5 */ "................"
+ /* 6 */ "..........a....."
+ /* 7 */ "..........a....."
+ /* 8 */ "..........a....."
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ "................",
+
+ // Connectors:
+ "-1: 0, 1, 3: 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,
+ }, // Forge
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseMid:
+ // The data has been exported from the gallery Plains, area index 62, ID 119, created by Aloe_vera
+ {
+ // Size:
+ 10, 9, 9, // SizeX = 10, SizeY = 9, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, -1, // MinX, MinY, MinZ
+ 10, 8, 9, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b:135: 2\n" /* 135 */
+ "c:135: 0\n" /* 135 */
+ "d: 17: 9\n" /* tree */
+ "e:135: 3\n" /* 135 */
+ "f: 85: 0\n" /* fence */
+ "g: 17: 1\n" /* tree */
+ "h:171: 0\n" /* carpet */
+ "i: 50: 5\n" /* torch */
+ "j: 35: 0\n" /* wool */
+ "k: 17: 5\n" /* tree */
+ "l:124: 0\n" /* redstonelampon */
+ "m: 19: 0\n" /* sponge */
+ "n: 69: 9\n" /* lever */
+ "o: 44: 8\n" /* step */
+ "p: 43: 0\n" /* doubleslab */
+ "q: 44: 0\n" /* step */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "maaaaaaaaa"
+ /* 1 */ "maaaaaaaaa"
+ /* 2 */ "aaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaa"
+ /* 7 */ "maaaaaaaaa"
+ /* 8 */ "maaaaaaaaa"
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".aaaaaaaaa"
+ /* 1 */ ".aaaaaaaaa"
+ /* 2 */ "baaaaaaaaa"
+ /* 3 */ "caaaaaaaaa"
+ /* 4 */ "caadaaaaaa"
+ /* 5 */ "caaaaaaaaa"
+ /* 6 */ "eaaaaaaaaa"
+ /* 7 */ ".aaaaaaaaa"
+ /* 8 */ ".aaaaaaaaa"
+
+ // Level 2
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".fffffffff"
+ /* 1 */ ".f.......f"
+ /* 2 */ ".f.ggggg.f"
+ /* 3 */ "...ghhhg.f"
+ /* 4 */ "....hhhg.f"
+ /* 5 */ "...ghhhg.f"
+ /* 6 */ ".f.ggggg.f"
+ /* 7 */ ".f.......f"
+ /* 8 */ ".fffffffff"
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".....i...i"
+ /* 1 */ ".........."
+ /* 2 */ ".i.jjgjj.."
+ /* 3 */ "...g...j.."
+ /* 4 */ ".......g.i"
+ /* 5 */ "...g...j.."
+ /* 6 */ ".i.jjgjj.."
+ /* 7 */ ".........."
+ /* 8 */ ".....i...i"
+
+ // Level 4
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".........."
+ /* 2 */ "...jjgjj.."
+ /* 3 */ "...g...j.."
+ /* 4 */ "...j...g.."
+ /* 5 */ "...g...j.."
+ /* 6 */ "...jjgjj.."
+ /* 7 */ ".........."
+ /* 8 */ ".........."
+
+ // Level 5
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ "...f...f.."
+ /* 2 */ "..fgkgkgf."
+ /* 3 */ "..fd...d.."
+ /* 4 */ "...d.lng.."
+ /* 5 */ "..fd...d.."
+ /* 6 */ "..fgkgkgf."
+ /* 7 */ "...f...f.."
+ /* 8 */ ".........."
+
+ // Level 6
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "...ooooo.."
+ /* 1 */ "..opppppo."
+ /* 2 */ ".opgjjjgpo"
+ /* 3 */ ".opjgggjpo"
+ /* 4 */ ".opjgggjpo"
+ /* 5 */ ".opjgggjpo"
+ /* 6 */ ".opgjjjgpo"
+ /* 7 */ "..opppppo."
+ /* 8 */ "...ooooo.."
+
+ // Level 7
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".opq...qpo"
+ /* 1 */ ".pq.....qp"
+ /* 2 */ ".q.qqqqq.q"
+ /* 3 */ "...qpppq.."
+ /* 4 */ "...qpppq.."
+ /* 5 */ "...qpppq.."
+ /* 6 */ ".q.qqqqq.q"
+ /* 7 */ ".pq.....qp"
+ /* 8 */ ".opq...qpo"
+
+ // Level 8
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".q.......q"
+ /* 1 */ ".........."
+ /* 2 */ ".........."
+ /* 3 */ ".........."
+ /* 4 */ ".....q...."
+ /* 5 */ ".........."
+ /* 6 */ ".........."
+ /* 7 */ ".........."
+ /* 8 */ ".q.......q",
+
+ // Connectors:
+ "-1: 0, 1, 4: 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,
+ }, // HouseMid
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseSmall:
+ // The data has been exported from the gallery Plains, area index 68, ID 131, created by Aloe_vera
+ {
+ // Size:
+ 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 5, 7, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b: 17: 1\n" /* tree */
+ "c: 35: 0\n" /* wool */
+ "d: 50: 4\n" /* torch */
+ "e: 85: 0\n" /* fence */
+ "f: 44: 8\n" /* step */
+ "g: 43: 0\n" /* doubleslab */
+ "h: 44: 0\n" /* step */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "maaaaam"
+ /* 2 */ "maaaaam"
+ /* 3 */ "maaaaam"
+ /* 4 */ "maaaaam"
+ /* 5 */ "maaaaam"
+ /* 6 */ "mmmmmmm"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".bcc.b."
+ /* 2 */ ".c...c."
+ /* 3 */ ".c...c."
+ /* 4 */ ".c...c."
+ /* 5 */ ".bcccb."
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ ".....d."
+ /* 1 */ ".bee.b."
+ /* 2 */ ".c...c."
+ /* 3 */ ".e...e."
+ /* 4 */ ".c...c."
+ /* 5 */ ".beeeb."
+ /* 6 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ ".fffff."
+ /* 1 */ "fbcccbf"
+ /* 2 */ "fc...cf"
+ /* 3 */ "fc...cf"
+ /* 4 */ "fc...cf"
+ /* 5 */ "fbcccbf"
+ /* 6 */ ".fffff."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "gh...hg"
+ /* 1 */ "hhhhhhh"
+ /* 2 */ ".hgggh."
+ /* 3 */ ".hgggh."
+ /* 4 */ ".hgggh."
+ /* 5 */ "hhhhhhh"
+ /* 6 */ "gh...hg"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "......."
+ /* 3 */ "...h..."
+ /* 4 */ "......."
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "-1: 4, 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,
+ }, // HouseSmall
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseSmallDouble:
+ // The data has been exported from the gallery Plains, area index 72, ID 135, created by Aloe_vera
+ {
+ // Size:
+ 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 5, 7, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b: 17: 1\n" /* tree */
+ "c: 35: 0\n" /* wool */
+ "d:171:12\n" /* carpet */
+ "e:135: 1\n" /* 135 */
+ "f:126: 2\n" /* woodenslab */
+ "g:135: 2\n" /* 135 */
+ "h: 50: 4\n" /* torch */
+ "i: 85: 0\n" /* fence */
+ "j: 44: 8\n" /* step */
+ "k: 43: 0\n" /* doubleslab */
+ "l: 44: 0\n" /* step */
+ "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 */ "mmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".bcc.bcccb."
+ /* 2 */ ".cddd.dddc."
+ /* 3 */ ".ceddcdfdc."
+ /* 4 */ ".cggdcdddc."
+ /* 5 */ ".bcccbcccb."
+ /* 6 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ ".h...h...h."
+ /* 1 */ ".bii.biiib."
+ /* 2 */ ".c.......c."
+ /* 3 */ ".i...i...i."
+ /* 4 */ ".c...i...c."
+ /* 5 */ ".biiibiiib."
+ /* 6 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ ".jjjjjjjjj."
+ /* 1 */ "jbiiibiiibj"
+ /* 2 */ "jc.......cj"
+ /* 3 */ "jc...c...cj"
+ /* 4 */ "jc...c...cj"
+ /* 5 */ "jbcccbcccbj"
+ /* 6 */ ".jjjjjjjjj."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "kl...l...lk"
+ /* 1 */ "lllllllllll"
+ /* 2 */ ".lkkklkkkl."
+ /* 3 */ ".lkjklkkkl."
+ /* 4 */ ".lkkklkkkl."
+ /* 5 */ "lllllllllll"
+ /* 6 */ "kl...l...lk"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "...l...l..."
+ /* 4 */ "..........."
+ /* 5 */ "..........."
+ /* 6 */ "...........",
+
+ // Connectors:
+ "-1: 4, 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,
+ }, // HouseSmallDouble
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseWide:
+ // The data has been exported from the gallery Plains, area index 64, ID 121, created by STR_Warrior
+ {
+ // Size:
+ 11, 6, 11, // SizeX = 11, SizeY = 6, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ -1, 0, -1, // MinX, MinY, MinZ
+ 11, 5, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b: 17: 1\n" /* tree */
+ "c: 35: 0\n" /* wool */
+ "d:171: 0\n" /* carpet */
+ "e:126: 1\n" /* woodenslab */
+ "f: 64: 5\n" /* wooddoorblock */
+ "g: 85: 0\n" /* fence */
+ "h: 50: 1\n" /* torch */
+ "i: 50: 2\n" /* torch */
+ "j: 64:12\n" /* wooddoorblock */
+ "k:126:11\n" /* woodenslab */
+ "l: 17: 5\n" /* tree */
+ "m: 19: 0\n" /* sponge */
+ "n:126: 3\n" /* woodenslab */
+ "o:125: 3\n" /* woodendoubleslab */
+ "p: 5: 3\n" /* wood */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmaaaaaaamm"
+ /* 2 */ "maaaaaaaaam"
+ /* 3 */ "maaaaaaaaam"
+ /* 4 */ "maaaaaaaaam"
+ /* 5 */ "maaaaaaaaam"
+ /* 6 */ "maaaaaaaaam"
+ /* 7 */ "maaaaaaaaam"
+ /* 8 */ "maaaaaaaaam"
+ /* 9 */ "mmaaaaaaamm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..bcbcbcb.."
+ /* 2 */ ".b.d.....b."
+ /* 3 */ ".cded....c."
+ /* 4 */ ".bded....b."
+ /* 5 */ ".c.d.....c."
+ /* 6 */ ".b.......b."
+ /* 7 */ ".c.......c."
+ /* 8 */ ".b.......b."
+ /* 9 */ "..bcbfbcb.."
+ /* 10 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..bgbgbgb.."
+ /* 2 */ ".b.......b."
+ /* 3 */ ".g.......g."
+ /* 4 */ ".bh.....ib."
+ /* 5 */ ".g.......g."
+ /* 6 */ ".b.......b."
+ /* 7 */ ".g.......g."
+ /* 8 */ ".b.......b."
+ /* 9 */ "..bgbjbgb.."
+ /* 10 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...kkkkk..."
+ /* 1 */ "..bcbcbcb.."
+ /* 2 */ ".b.......b."
+ /* 3 */ "kc.......ck"
+ /* 4 */ "kb.......bk"
+ /* 5 */ "kc.......ck"
+ /* 6 */ "kb.......bk"
+ /* 7 */ "kc.......ck"
+ /* 8 */ ".b.......b."
+ /* 9 */ "..bcblbcb.."
+ /* 10 */ "...kkkkk..."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ ".kn.....nk."
+ /* 1 */ "konnnnnnnok"
+ /* 2 */ "nnnnnnnnnnn"
+ /* 3 */ ".nnpppppnn."
+ /* 4 */ ".nnpkkkpnn."
+ /* 5 */ ".nnpkkkpnn."
+ /* 6 */ ".nnpkkkpnn."
+ /* 7 */ ".nnpppppnn."
+ /* 8 */ "nnnnnnnnnnn"
+ /* 9 */ "kknnnnnnnok"
+ /* 10 */ ".kn.....nk."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "n.........n"
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "..........."
+ /* 4 */ "....nnn...."
+ /* 5 */ "....non...."
+ /* 6 */ "....nnn...."
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+ /* 9 */ "..........."
+ /* 10 */ "n.........n",
+
+ // Connectors:
+ "-1: 5, 1, 10: 3\n" /* Type -1, direction Z+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // HouseWide
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseWithGarden:
+ // The data has been exported from the gallery Plains, area index 67, ID 130, created by Aloe_vera
+ {
+ // Size:
+ 16, 9, 16, // SizeX = 16, SizeY = 9, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 16, 8, 16, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 5: 2\n" /* wood */
+ "c: 2: 0\n" /* grass */
+ "d:113: 0\n" /* netherbrickfence */
+ "e: 17: 1\n" /* tree */
+ "f: 35: 0\n" /* wool */
+ "g:126: 2\n" /* woodenslab */
+ "h: 31: 2\n" /* tallgrass */
+ "i:125: 2\n" /* woodendoubleslab */
+ "j: 38: 3\n" /* rose */
+ "k: 38: 2\n" /* rose */
+ "l: 38: 1\n" /* rose */
+ "m: 19: 0\n" /* sponge */
+ "n: 17: 2\n" /* tree */
+ "o: 50: 4\n" /* torch */
+ "p: 85: 0\n" /* fence */
+ "q:140: 0\n" /* flowerpotblock */
+ "r: 50: 3\n" /* torch */
+ "s: 44: 8\n" /* step */
+ "t: 50: 1\n" /* torch */
+ "u: 50: 2\n" /* torch */
+ "v: 43: 0\n" /* doubleslab */
+ "w: 44: 0\n" /* step */
+ "x: 18:10\n" /* leaves */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmaammmmm"
+ /* 1 */ "aabbbbbbbbbbaaam"
+ /* 2 */ "aabbbbbbbbbbaaam"
+ /* 3 */ "aabbbbbbbbbbaaam"
+ /* 4 */ "aabbbbbbbbbbaaam"
+ /* 5 */ "aabbbbbbbbbbaaam"
+ /* 6 */ "aabbbbbbbbbbaaam"
+ /* 7 */ "aabbbbbbbbbbaaam"
+ /* 8 */ "aabbbbbbbbbbaaam"
+ /* 9 */ "aabbbbbbbbbbaaam"
+ /* 10 */ "aaaaaaaaaaaaaaam"
+ /* 11 */ "aaaaaaaaaaaaaaam"
+ /* 12 */ "aaaaaaaaaaaaaaam"
+ /* 13 */ "aaaaaaaaaaaaaaam"
+ /* 14 */ "aaaaaaaaaaaaaaam"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmccmmmmm"
+ /* 1 */ "ccbbbbbbbbbbcccm"
+ /* 2 */ "ccbbbbbbbbbbcccm"
+ /* 3 */ "ccbbbbbbbbbbcccm"
+ /* 4 */ "ccbbbbbbbbbbcccm"
+ /* 5 */ "ccbbbbbbbbbbcccm"
+ /* 6 */ "ccbbbbbbbbbbcccm"
+ /* 7 */ "ccbbbbbbbbbbcccm"
+ /* 8 */ "ccbbbbbbbbbbcccm"
+ /* 9 */ "ccbbbbbbbbbbcccm"
+ /* 10 */ "cccccccccccccccm"
+ /* 11 */ "cccccccccccccccm"
+ /* 12 */ "cccccccccccccccm"
+ /* 13 */ "cccccccccccccacm"
+ /* 14 */ "cccccccccccccccm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "ddeffeffe..eddd."
+ /* 2 */ "d.fbbgggg..f..d."
+ /* 3 */ "d.fbgggggggf.hd."
+ /* 4 */ "d.fbgggggggf..d."
+ /* 5 */ "d.eggggggggehhd."
+ /* 6 */ "d.fgiiggiigf.hd."
+ /* 7 */ "d.fgiiggiigf..d."
+ /* 8 */ "d.fggggggggf..d."
+ /* 9 */ "d.efffeefffe.hd."
+ /* 10 */ "d.............d."
+ /* 11 */ "djhhk.jhh..hh.d."
+ /* 12 */ "d.jlk.hj.h....d."
+ /* 13 */ "d..jh.hh..h..nd."
+ /* 14 */ "ddddddddddddddd."
+ /* 15 */ "................"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "........o..o...."
+ /* 1 */ "..eppeffe..e...."
+ /* 2 */ "..pqq......p...."
+ /* 3 */ "..pq.......p...."
+ /* 4 */ "..pq.......p...."
+ /* 5 */ "..e........e...."
+ /* 6 */ "..p........p...."
+ /* 7 */ "..p........p...."
+ /* 8 */ "..p........p...."
+ /* 9 */ "..epppeepppe...."
+ /* 10 */ "......rr........"
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ ".............n.."
+ /* 14 */ "................"
+ /* 15 */ "................"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "..ssssssssss...."
+ /* 1 */ ".seffeffeffes..."
+ /* 2 */ ".sf..r.....fs..."
+ /* 3 */ ".sf........fs..."
+ /* 4 */ ".sf........fs..."
+ /* 5 */ ".set......ues..."
+ /* 6 */ ".sf........fs..."
+ /* 7 */ ".sf........fs..."
+ /* 8 */ ".sf........fs..."
+ /* 9 */ ".sefffeefffes..."
+ /* 10 */ "..ssssssssss...."
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ ".............n.."
+ /* 14 */ "................"
+ /* 15 */ "................"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ ".vw........wv..."
+ /* 1 */ ".wwwwwwwwwwww..."
+ /* 2 */ "..wvvvvvvvvw...."
+ /* 3 */ "..wvvvvvvvvw...."
+ /* 4 */ "..wvvvvvvvvw...."
+ /* 5 */ "..wvvvvvvvvw...."
+ /* 6 */ "..wvvvvvvvvw...."
+ /* 7 */ "..wvvvvvvvvw...."
+ /* 8 */ "..wvvvvvvvvw...."
+ /* 9 */ ".wwwwwwwwwwww..."
+ /* 10 */ ".vw........wv..."
+ /* 11 */ "............xxx."
+ /* 12 */ "...........xxxxx"
+ /* 13 */ "...........xxnxx"
+ /* 14 */ "...........xxxxx"
+ /* 15 */ "............xxx."
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "....wwwwww......"
+ /* 4 */ "....wvvvvw......"
+ /* 5 */ "....wvvvvw......"
+ /* 6 */ "....wvvvvw......"
+ /* 7 */ "....wwwwww......"
+ /* 8 */ "................"
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "............xxx."
+ /* 12 */ "...........xxxxx"
+ /* 13 */ "...........xxnxx"
+ /* 14 */ "...........xxxxx"
+ /* 15 */ "............xxx."
+
+ // Level 7
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "................"
+ /* 4 */ "................"
+ /* 5 */ "......ww........"
+ /* 6 */ "................"
+ /* 7 */ "................"
+ /* 8 */ "................"
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ "............xxx."
+ /* 13 */ "............xnx."
+ /* 14 */ "............xx.."
+ /* 15 */ "................"
+
+ // Level 8
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "................"
+ /* 4 */ "................"
+ /* 5 */ "................"
+ /* 6 */ "................"
+ /* 7 */ "................"
+ /* 8 */ "................"
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ ".............x.."
+ /* 13 */ "............xxx."
+ /* 14 */ ".............x.."
+ /* 15 */ "................",
+
+ // Connectors:
+ "-1: 9, 2, 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,
+ }, // HouseWithGarden
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseWithSakura1:
+ // The data has been exported from the gallery Plains, area index 75, ID 141, created by Aloe_vera
+ {
+ // Size:
+ 13, 7, 15, // SizeX = 13, SizeY = 7, SizeZ = 15
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 13, 6, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 17: 5\n" /* tree */
+ "d: 5: 2\n" /* wood */
+ "e: 17: 9\n" /* tree */
+ "f:113: 0\n" /* netherbrickfence */
+ "g: 17: 1\n" /* tree */
+ "h: 35: 0\n" /* wool */
+ "i: 31: 2\n" /* tallgrass */
+ "j: 54: 2\n" /* chest */
+ "k: 38: 6\n" /* rose */
+ "l: 38: 2\n" /* rose */
+ "m: 19: 0\n" /* sponge */
+ "n: 50: 4\n" /* torch */
+ "o: 85: 0\n" /* fence */
+ "p: 44: 8\n" /* step */
+ "q: 35: 6\n" /* wool */
+ "r: 43: 0\n" /* doubleslab */
+ "s: 44: 0\n" /* step */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "aaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaaa"
+ /* 11 */ "aaaaaaaaaaaaa"
+ /* 12 */ "aaaaaaaaaaaaa"
+ /* 13 */ "aaaaaaaaaaaaa"
+ /* 14 */ "aaaaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "bbbbbbbbbbbbb"
+ /* 1 */ "bbbbbbbbbbbbb"
+ /* 2 */ "bbbaccdabbbbb"
+ /* 3 */ "bbbedddebbbbb"
+ /* 4 */ "bbbedddebbbbb"
+ /* 5 */ "bbbedddebbbbb"
+ /* 6 */ "bbbacccabbbbb"
+ /* 7 */ "bbbbbbbbbbbbb"
+ /* 8 */ "bbbbbbbbbbbbb"
+ /* 9 */ "bbbbbbbbbbbbb"
+ /* 10 */ "bbbbbbbbbbabb"
+ /* 11 */ "bbbbbbbbbbbbb"
+ /* 12 */ "bbbbbbbbbbbbb"
+ /* 13 */ "bbbbbbbbbbbbb"
+ /* 14 */ "bbbbbbbbbbbbb"
+
+ // Level 2
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "ffff...ffffff"
+ /* 1 */ "f...........f"
+ /* 2 */ "f..ghh.g..i.f"
+ /* 3 */ "f..h...h..i.f"
+ /* 4 */ "f..h...h....f"
+ /* 5 */ "fi.h..jh..i.f"
+ /* 6 */ "f..ghhhg....f"
+ /* 7 */ "f.........i.f"
+ /* 8 */ "fii.........f"
+ /* 9 */ "f.k..k.i....f"
+ /* 10 */ "fl.i..i...g.f"
+ /* 11 */ "f.i..i.k....f"
+ /* 12 */ "f.l.k.......f"
+ /* 13 */ "f.....l.....f"
+ /* 14 */ "fffffffffffff"
+
+ // Level 3
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ ".......n....."
+ /* 2 */ "...goo.g....."
+ /* 3 */ "...h...h....."
+ /* 4 */ "...o...o....."
+ /* 5 */ "...h...h....."
+ /* 6 */ "...gooog....."
+ /* 7 */ "............."
+ /* 8 */ "............."
+ /* 9 */ "............."
+ /* 10 */ "..........g.."
+ /* 11 */ "............."
+ /* 12 */ "............."
+ /* 13 */ "............."
+ /* 14 */ "............."
+
+ // Level 4
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "...ppppp....."
+ /* 2 */ "..pghhhgp...."
+ /* 3 */ "..ph...hp...."
+ /* 4 */ "..ph...hp...."
+ /* 5 */ "..ph...hp...."
+ /* 6 */ "..pghhhgp...."
+ /* 7 */ "...ppppp....."
+ /* 8 */ "............."
+ /* 9 */ "..........q.."
+ /* 10 */ ".........qgq."
+ /* 11 */ "..........q.."
+ /* 12 */ "............."
+ /* 13 */ "............."
+ /* 14 */ "............."
+
+ // Level 5
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "..rs...sr...."
+ /* 2 */ "..sssssss...."
+ /* 3 */ "...srrrs....."
+ /* 4 */ "...srrrs....."
+ /* 5 */ "...srrrs....."
+ /* 6 */ "..sssssss...."
+ /* 7 */ "..rs...sr...."
+ /* 8 */ "............."
+ /* 9 */ ".........qqq."
+ /* 10 */ ".........qqq."
+ /* 11 */ ".........qqq."
+ /* 12 */ "............."
+ /* 13 */ "............."
+ /* 14 */ "............."
+
+ // Level 6
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ ".....s......."
+ /* 5 */ "............."
+ /* 6 */ "............."
+ /* 7 */ "............."
+ /* 8 */ "............."
+ /* 9 */ "............."
+ /* 10 */ "..........q.."
+ /* 11 */ "............."
+ /* 12 */ "............."
+ /* 13 */ "............."
+ /* 14 */ ".............",
+
+ // Connectors:
+ "-1: 5, 2, 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,
+ }, // HouseWithSakura1
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Restaurant:
+ // The data has been exported from the gallery Plains, area index 61, ID 117, created by Aloe_vera
+ {
+ // Size:
+ 15, 10, 15, // SizeX = 15, SizeY = 10, SizeZ = 15
+
+ // Hitbox (relative to bounding box):
+ -1, 0, -1, // MinX, MinY, MinZ
+ 14, 9, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b:135: 0\n" /* 135 */
+ "c:135: 2\n" /* 135 */
+ "d:135: 1\n" /* 135 */
+ "e: 17: 9\n" /* tree */
+ "f:135: 3\n" /* 135 */
+ "g: 85: 0\n" /* fence */
+ "h: 17: 1\n" /* tree */
+ "i:171: 0\n" /* carpet */
+ "j:171:12\n" /* carpet */
+ "k:126: 1\n" /* woodenslab */
+ "l: 50: 5\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 35: 0\n" /* wool */
+ "o: 50: 3\n" /* torch */
+ "p: 50: 1\n" /* torch */
+ "q: 50: 4\n" /* torch */
+ "r: 35:14\n" /* wool */
+ "s: 44: 8\n" /* step */
+ "t: 43: 0\n" /* doubleslab */
+ "u: 44: 0\n" /* step */
+ "v: 17: 5\n" /* tree */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "mmmmaaaaaaammmm"
+ /* 1 */ "maaaaaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaaaaam"
+ /* 4 */ "aaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaaaaa"
+ /* 11 */ "maaaaaaaaaaaaam"
+ /* 12 */ "maaaaaaaaaaaaam"
+ /* 13 */ "maaaaaaaaaaaaam"
+ /* 14 */ "mmmmaaaaaaammmm"
+
+ // Level 1
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "....bcccccd...."
+ /* 1 */ ".aaaaaaaaaaaaa."
+ /* 2 */ ".aaaaaaaaaaaaa."
+ /* 3 */ ".aaaaaaaaaaaaa."
+ /* 4 */ "caaaaaaaaaaaaac"
+ /* 5 */ "baaaaaaaaaaaaad"
+ /* 6 */ "baaaaaaaaaaaaad"
+ /* 7 */ "baaaaaaaaaaeaad"
+ /* 8 */ "baaaaaaaaaaaaad"
+ /* 9 */ "baaaaaaaaaaaaad"
+ /* 10 */ "faaaaaaaaaaaaaf"
+ /* 11 */ ".aaaaaaaaaaaaa."
+ /* 12 */ ".aaaaaaaaaaaaa."
+ /* 13 */ ".aaaaaaaaaaaaa."
+ /* 14 */ "....bfffffd...."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".gggg.....gggg."
+ /* 2 */ ".g...........g."
+ /* 3 */ ".g.hhhhhhhhh.g."
+ /* 4 */ ".g.hiiijiiih.g."
+ /* 5 */ "...hikijikih..."
+ /* 6 */ "...hiiijiiihg.."
+ /* 7 */ "...hjjjjjjj...."
+ /* 8 */ "...hiiijiiihg.."
+ /* 9 */ "...hikijikih..."
+ /* 10 */ ".g.hiiijiiih.g."
+ /* 11 */ ".g.hhhhhhhhh.g."
+ /* 12 */ ".g...........g."
+ /* 13 */ ".gggg.....gggg."
+ /* 14 */ "..............."
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".l..g.....g..l."
+ /* 2 */ "..............."
+ /* 3 */ "...hnnnhnnnh..."
+ /* 4 */ ".g.n.......n.g."
+ /* 5 */ "...n.......n..."
+ /* 6 */ "...n.......hl.."
+ /* 7 */ "...h..........."
+ /* 8 */ "...n.......hl.."
+ /* 9 */ "...n.......n..."
+ /* 10 */ ".g.n.......n.g."
+ /* 11 */ "...hnnnhnnnh..."
+ /* 12 */ "..............."
+ /* 13 */ ".l..g.....g..l."
+ /* 14 */ "..............."
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "....g.....g...."
+ /* 2 */ "..............."
+ /* 3 */ "...hn.nhn.nh..."
+ /* 4 */ ".g.n...o...n.g."
+ /* 5 */ "...n.......n..."
+ /* 6 */ "...n.......h..."
+ /* 7 */ "...hp......e..."
+ /* 8 */ "...n.......h..."
+ /* 9 */ "...n.......n..."
+ /* 10 */ ".g.n...q...n.g."
+ /* 11 */ "...hn.nhn.nh..."
+ /* 12 */ "..............."
+ /* 13 */ "....g.....g...."
+ /* 14 */ "..............."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "....g.....g...."
+ /* 2 */ "....ggggggg...."
+ /* 3 */ "...hnnnhnnnh..."
+ /* 4 */ ".ggn.......ngg."
+ /* 5 */ "..gn.......ng.."
+ /* 6 */ "..gn.......hg.."
+ /* 7 */ "..gh..r.r..ng.."
+ /* 8 */ "..gn.......hg.."
+ /* 9 */ "..gn.......ng.."
+ /* 10 */ ".ggn.......ngg."
+ /* 11 */ "...hnnnhnnnh..."
+ /* 12 */ "....ggggggg...."
+ /* 13 */ "....g.....g...."
+ /* 14 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "...stuuuuuts..."
+ /* 2 */ "..sttttttttts.."
+ /* 3 */ ".sthvvvhvvvhts."
+ /* 4 */ ".tte.......ett."
+ /* 5 */ ".ute.......etu."
+ /* 6 */ ".ute.......htu."
+ /* 7 */ ".uth..g.g..etu."
+ /* 8 */ ".ute.......htu."
+ /* 9 */ ".ute.......etu."
+ /* 10 */ ".tte.......ett."
+ /* 11 */ ".sthvvvhvvvhts."
+ /* 12 */ "..sttttttttts.."
+ /* 13 */ "...stuuuuuts..."
+ /* 14 */ "..............."
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".stu.......uts."
+ /* 2 */ ".tu.........ut."
+ /* 3 */ ".u.uuuuuuuuu.u."
+ /* 4 */ "...utttttttu..."
+ /* 5 */ "...utttttttu..."
+ /* 6 */ "...utttttttu..."
+ /* 7 */ "...utttttttu..."
+ /* 8 */ "...utttttttu..."
+ /* 9 */ "...utttttttu..."
+ /* 10 */ "...utttttttu..."
+ /* 11 */ ".u.uuuuuuuuu.u."
+ /* 12 */ ".tu.........ut."
+ /* 13 */ ".stu.......uts."
+ /* 14 */ "..............."
+
+ // Level 8
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".u...........u."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ ".....uuuuu....."
+ /* 6 */ ".....utttu....."
+ /* 7 */ ".....utttu....."
+ /* 8 */ ".....utttu....."
+ /* 9 */ ".....uuuuu....."
+ /* 10 */ "..............."
+ /* 11 */ "..............."
+ /* 12 */ "..............."
+ /* 13 */ ".u...........u."
+ /* 14 */ "..............."
+
+ // Level 9
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ ".......u......."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+ /* 11 */ "..............."
+ /* 12 */ "..............."
+ /* 13 */ "..............."
+ /* 14 */ "...............",
+
+ // Connectors:
+ "-1: 14, 1, 7: 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,
+ }, // Restaurant
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // SakuraDouble:
+ // The data has been exported from the gallery Plains, area index 76, ID 142, created by Aloe_vera
+ {
+ // Size:
+ 12, 8, 6, // SizeX = 12, SizeY = 8, SizeZ = 6
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 5, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 17: 1\n" /* tree */
+ "d: 35: 6\n" /* wool */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "aaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "bbbbbbbbbbbb"
+ /* 1 */ "bbbbbbbbbbbb"
+ /* 2 */ "bbabbbbbbbbb"
+ /* 3 */ "bbbbbbbbbabb"
+ /* 4 */ "bbbbbbbbbbbb"
+ /* 5 */ "bbbbbbbbbbbb"
+
+ // Level 2
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "..c........."
+ /* 3 */ ".........c.."
+ /* 4 */ "............"
+ /* 5 */ "............"
+
+ // Level 3
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "..c........."
+ /* 3 */ ".........c.."
+ /* 4 */ "............"
+ /* 5 */ "............"
+
+ // Level 4
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "..d........."
+ /* 1 */ "ddddd......."
+ /* 2 */ "ddcdd...ddd."
+ /* 3 */ "ddddd...dcd."
+ /* 4 */ "..d.....ddd."
+ /* 5 */ "............"
+
+ // Level 5
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ ".ddd........"
+ /* 1 */ ".ddd....ddd."
+ /* 2 */ "ddddd..ddddd"
+ /* 3 */ ".ddd...ddcdd"
+ /* 4 */ ".ddd...ddddd"
+ /* 5 */ "........ddd."
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "..d......d.."
+ /* 2 */ ".ddd....ddd."
+ /* 3 */ "..d....ddddd"
+ /* 4 */ "........ddd."
+ /* 5 */ ".........d.."
+
+ // Level 7
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ ".........d.."
+ /* 4 */ "............"
+ /* 5 */ "............",
+
+ // 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,
+ }, // SakuraDouble
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // SakuraSmall:
+ // The data has been exported from the gallery Plains, area index 145, ID 489, created by Aloe_vera
+ {
+ // Size:
+ 5, 7, 5, // SizeX = 5, SizeY = 7, SizeZ = 5
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 6, 4, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 17: 1\n" /* tree */
+ "d: 35: 6\n" /* wool */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aaaaa"
+ /* 3 */ "aaaaa"
+ /* 4 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bbbbb"
+ /* 2 */ "bbabb"
+ /* 3 */ "bbbbb"
+ /* 4 */ "bbbbb"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "..c.."
+ /* 3 */ "....."
+ /* 4 */ "....."
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "..c.."
+ /* 3 */ "....."
+ /* 4 */ "....."
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "..d.."
+ /* 1 */ "ddddd"
+ /* 2 */ "ddcdd"
+ /* 3 */ "ddddd"
+ /* 4 */ "..d.."
+
+ // Level 5
+ /* z\x* 01234 */
+ /* 0 */ ".ddd."
+ /* 1 */ ".ddd."
+ /* 2 */ "ddddd"
+ /* 3 */ ".ddd."
+ /* 4 */ ".ddd."
+
+ // Level 6
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "..d.."
+ /* 2 */ ".ddd."
+ /* 3 */ "..d.."
+ /* 4 */ ".....",
+
+ // Connectors:
+ "-1: 2, 2, 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,
+ }, // SakuraSmall
+}; // g_JapaneseVillagePrefabs
+
+
+
+
+
+
+const cPrefab::sDef g_JapaneseVillageStartingPrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HighTemple:
+ // The data has been exported from the gallery Plains, area index 70, ID 133, created by Aloe_vera
+ {
+ // Size:
+ 11, 19, 11, // SizeX = 11, SizeY = 19, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 18, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b:135: 0\n" /* 135 */
+ "c:135: 2\n" /* 135 */
+ "d:135: 1\n" /* 135 */
+ "e: 17: 9\n" /* tree */
+ "f:135: 3\n" /* 135 */
+ "g: 85: 0\n" /* fence */
+ "h: 17: 1\n" /* tree */
+ "i:171: 0\n" /* carpet */
+ "j: 50: 5\n" /* torch */
+ "k: 35: 0\n" /* wool */
+ "l: 17: 5\n" /* tree */
+ "m: 19: 0\n" /* sponge */
+ "n:124: 0\n" /* redstonelampon */
+ "o: 69: 9\n" /* lever */
+ "p: 44: 8\n" /* step */
+ "q: 43: 0\n" /* doubleslab */
+ "r: 44: 0\n" /* step */
+ "s: 50: 4\n" /* torch */
+ "t: 50: 1\n" /* torch */
+ "u: 50: 3\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmaaaaammm"
+ /* 1 */ "maaaaaaaaam"
+ /* 2 */ "maaaaaaaaam"
+ /* 3 */ "aaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaa"
+ /* 8 */ "maaaaaaaaam"
+ /* 9 */ "maaaaaaaaam"
+ /* 10 */ "mmmaaaaammm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...bcccd..."
+ /* 1 */ ".aaaaaaaaa."
+ /* 2 */ ".aaaaaaaaa."
+ /* 3 */ "caaaaaaaaac"
+ /* 4 */ "baaaaaaaaad"
+ /* 5 */ "baaeaaaaaad"
+ /* 6 */ "baaaaaaaaad"
+ /* 7 */ "faaaaaaaaaf"
+ /* 8 */ ".aaaaaaaaa."
+ /* 9 */ ".aaaaaaaaa."
+ /* 10 */ "...bfffd..."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ggg...ggg."
+ /* 2 */ ".g.......g."
+ /* 3 */ ".g.hhhhh.g."
+ /* 4 */ "...hiiih..."
+ /* 5 */ "....iiih..."
+ /* 6 */ "...hiiih..."
+ /* 7 */ ".g.hhhhh.g."
+ /* 8 */ ".g.......g."
+ /* 9 */ ".ggg...ggg."
+ /* 10 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".j.g...g.j."
+ /* 2 */ "..........."
+ /* 3 */ ".g.kkhkk.g."
+ /* 4 */ "...h...k..."
+ /* 5 */ ".......h..."
+ /* 6 */ "...h...k..."
+ /* 7 */ ".g.kkhkk.g."
+ /* 8 */ "..........."
+ /* 9 */ ".j.g...g.j."
+ /* 10 */ "..........."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "...g...g..."
+ /* 2 */ "..........."
+ /* 3 */ ".g.kkhkk.g."
+ /* 4 */ "...h...k..."
+ /* 5 */ "...k...h..."
+ /* 6 */ "...h...k..."
+ /* 7 */ ".g.kkhkk.g."
+ /* 8 */ "..........."
+ /* 9 */ "...g...g..."
+ /* 10 */ "..........."
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "...g...g..."
+ /* 2 */ "...ggggg..."
+ /* 3 */ ".gghlhlhgg."
+ /* 4 */ "..ge...eg.."
+ /* 5 */ "..ge.nohg.."
+ /* 6 */ "..ge...eg.."
+ /* 7 */ ".gghlhlhgg."
+ /* 8 */ "...ggggg..."
+ /* 9 */ "...g...g..."
+ /* 10 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..pqrrrqp.."
+ /* 2 */ ".pqqqqqqqp."
+ /* 3 */ ".qqhkkkhqq."
+ /* 4 */ ".rqkhhhkqr."
+ /* 5 */ ".rqkhhhkqr."
+ /* 6 */ ".rqkhhhkqr."
+ /* 7 */ ".qqhkkkhqq."
+ /* 8 */ ".pqqqqqqqp."
+ /* 9 */ "..pqrrrqp.."
+ /* 10 */ "..........."
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".qr.....rq."
+ /* 2 */ ".........r."
+ /* 3 */ "...hhhhh..."
+ /* 4 */ "...hiiih..."
+ /* 5 */ "....iiih..."
+ /* 6 */ "...hiiih..."
+ /* 7 */ "...hhhhh..."
+ /* 8 */ ".r.......r."
+ /* 9 */ ".qr.....rq."
+ /* 10 */ "..........."
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "...kkhkk..."
+ /* 4 */ "...h...k..."
+ /* 5 */ ".......h..."
+ /* 6 */ "...h...k..."
+ /* 7 */ "...kkhkk..."
+ /* 8 */ "..........."
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+
+ // Level 9
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ ".....s....."
+ /* 3 */ "...kkhkk..."
+ /* 4 */ "...h...k..."
+ /* 5 */ "...k...ht.."
+ /* 6 */ "...h...k..."
+ /* 7 */ "...kkhkk..."
+ /* 8 */ ".....u....."
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+
+ // Level 10
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "...ggggg..."
+ /* 3 */ "..ghlhlhg.."
+ /* 4 */ "..ge...eg.."
+ /* 5 */ "..ge.nohg.."
+ /* 6 */ "..ge...eg.."
+ /* 7 */ "..ghlhlhg.."
+ /* 8 */ "...ggggg..."
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+
+ // Level 11
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..prrrrrp.."
+ /* 2 */ ".pqqqqqqqp."
+ /* 3 */ ".qqhkkkhqq."
+ /* 4 */ ".rqkhhhkqr."
+ /* 5 */ ".rqkhhhkqr."
+ /* 6 */ ".rqkhhhkqr."
+ /* 7 */ ".qqhkkkhqr."
+ /* 8 */ ".pqqqqqqqp."
+ /* 9 */ "..pqrrrqp.."
+ /* 10 */ "..........."
+
+ // Level 12
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".qr.....rq."
+ /* 2 */ ".r.......r."
+ /* 3 */ "...hhhhh..."
+ /* 4 */ "...hiiih..."
+ /* 5 */ "....iiih..."
+ /* 6 */ "...hiiih..."
+ /* 7 */ "...hhhhh..."
+ /* 8 */ ".r.......r."
+ /* 9 */ ".qr.....rq."
+ /* 10 */ "..........."
+
+ // Level 13
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "...kkhkk..."
+ /* 4 */ "...h...k..."
+ /* 5 */ ".......h..."
+ /* 6 */ "...h...k..."
+ /* 7 */ "...kkhkk..."
+ /* 8 */ "..........."
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+
+ // Level 14
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ ".....s....."
+ /* 3 */ "...kkhkk..."
+ /* 4 */ "...h...k..."
+ /* 5 */ "...k...ht.."
+ /* 6 */ "...h...k..."
+ /* 7 */ "...kkhkk..."
+ /* 8 */ ".....u....."
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+
+ // Level 15
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "...ggggg..."
+ /* 3 */ "..ghlhlhg.."
+ /* 4 */ "..ge...eg.."
+ /* 5 */ "..ge.nohg.."
+ /* 6 */ "..ge...eg.."
+ /* 7 */ "..ghlhlhg.."
+ /* 8 */ "...ggggg..."
+ /* 9 */ "..........."
+ /* 10 */ "..........."
+
+ // Level 16
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..pqrrrqp.."
+ /* 2 */ ".pqqqqqqqp."
+ /* 3 */ ".qqrrrrrqq."
+ /* 4 */ ".rqrrrrrqr."
+ /* 5 */ ".rqrrrrrqr."
+ /* 6 */ ".rqrrrrrqr."
+ /* 7 */ ".qqrrrrrqq."
+ /* 8 */ ".pqqqqqqqp."
+ /* 9 */ "..pqrrrqp.."
+ /* 10 */ "..........."
+
+ // Level 17
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".qr.....rq."
+ /* 2 */ ".rr.....rr."
+ /* 3 */ "...rrrrr..."
+ /* 4 */ "...rqqqr..."
+ /* 5 */ "...rqqqr..."
+ /* 6 */ "...rqqqr..."
+ /* 7 */ "...rrrrr..."
+ /* 8 */ ".rr.....rr."
+ /* 9 */ ".qr.....rq."
+ /* 10 */ "..........."
+
+ // Level 18
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "..........."
+ /* 4 */ "..........."
+ /* 5 */ ".....r....."
+ /* 6 */ "..........."
+ /* 7 */ "..........."
+ /* 8 */ "..........."
+ /* 9 */ "..........."
+ /* 10 */ "...........",
+
+ // Connectors:
+ "2: 0, 1, 5: 4\n" /* Type 2, direction X- */
+ "2: 5, 1, 0: 2\n" /* Type 2, direction Z- */
+ "2: 10, 1, 5: 5\n" /* Type 2, direction X+ */
+ "2: 5, 1, 10: 3\n" /* Type 2, direction Z+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // HighTemple
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Well:
+ // The data has been exported from the gallery Plains, area index 143, ID 487, created by STR_Warrior
+ {
+ // Size:
+ 7, 14, 7, // SizeX = 7, SizeY = 14, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 13, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcc.ba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "eefffee"
+ /* 1 */ "ebbbbbe"
+ /* 2 */ "fbcccbf"
+ /* 3 */ "fbcccbf"
+ /* 4 */ "fbcccbf"
+ /* 5 */ "ebbbbbe"
+ /* 6 */ "eefffee"
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".bghib."
+ /* 2 */ ".j...j."
+ /* 3 */ ".i...g."
+ /* 4 */ ".h...h."
+ /* 5 */ ".bgjib."
+ /* 6 */ "......."
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".k...k."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ ".k...k."
+ /* 6 */ "......."
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".k...k."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ ".k...k."
+ /* 6 */ "......."
+
+ // Level 12
+ /* z\x* 0123456 */
+ /* 0 */ ".lnnnl."
+ /* 1 */ "loooool"
+ /* 2 */ "nooooon"
+ /* 3 */ "nooooon"
+ /* 4 */ "nooooon"
+ /* 5 */ "loooool"
+ /* 6 */ ".lnnnl."
+
+ // Level 13
+ /* z\x* 0123456 */
+ /* 0 */ "n.....n"
+ /* 1 */ "......."
+ /* 2 */ "..nnn.."
+ /* 3 */ "..non.."
+ /* 4 */ "..nnn.."
+ /* 5 */ "......."
+ /* 6 */ "n.....n",
+
+ // Connectors:
+ "2: 0, 9, 3: 4\n" /* Type 2, direction X- */
+ "2: 3, 9, 0: 2\n" /* Type 2, direction Z- */
+ "2: 6, 9, 3: 5\n" /* Type 2, direction X+ */
+ "2: 3, 9, 6: 3\n" /* Type 2, direction Z+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+ }, // Well
+};
+
+
+
+
+
+// The prefab counts:
+
+const size_t g_JapaneseVillagePrefabsCount = ARRAYCOUNT(g_JapaneseVillagePrefabs);
+
+const size_t g_JapaneseVillageStartingPrefabsCount = ARRAYCOUNT(g_JapaneseVillageStartingPrefabs);
+
diff --git a/src/Generating/Prefabs/JapaneseVillagePrefabs.h b/src/Generating/Prefabs/JapaneseVillagePrefabs.h
new file mode 100644
index 000000000..501b6c1cd
--- /dev/null
+++ b/src/Generating/Prefabs/JapaneseVillagePrefabs.h
@@ -0,0 +1,15 @@
+
+// JapaneseVillagePrefabs.h
+
+// Declares the prefabs in the group JapaneseVillage
+
+#include "../Prefab.h"
+
+
+
+
+
+extern const cPrefab::sDef g_JapaneseVillagePrefabs[];
+extern const cPrefab::sDef g_JapaneseVillageStartingPrefabs[];
+extern const size_t g_JapaneseVillagePrefabsCount;
+extern const size_t g_JapaneseVillageStartingPrefabsCount;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index bcce62af5..62822c33b 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -5,6 +5,7 @@
#include "Globals.h"
#include "VillageGen.h"
+#include "Prefabs/JapaneseVillagePrefabs.h"
#include "Prefabs/PlainsVillagePrefabs.h"
#include "Prefabs/SandVillagePrefabs.h"
#include "Prefabs/SandFlatRoofVillagePrefabs.h"
@@ -59,6 +60,7 @@ public:
cPrefab * RoadPiece = new cPrefab(BA, 1);
RoadPiece->AddConnector(0, 0, 1, BLOCK_FACE_XM, -2);
RoadPiece->AddConnector(len - 1, 0, 1, BLOCK_FACE_XP, -2);
+ RoadPiece->SetDefaultWeight(100);
// Add the road connectors:
for (int x = 1; x < len; x += 12)
@@ -84,8 +86,8 @@ public:
// cPrefabPiecePool overrides:
virtual int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector, const cPiece & a_NewPiece) override
{
- // Roads cannot branch T-wise (appending -2 connector to a +2 connector):
- if ((a_ExistingConnector.m_Type == 2) && (a_PlacedPiece.GetDepth() > 0))
+ // Roads cannot branch T-wise (appending -2 connector to a +2 connector on a 1-high piece):
+ if ((a_ExistingConnector.m_Type == 2) && (a_PlacedPiece.GetDepth() > 0) && (a_PlacedPiece.GetPiece().GetSize().y == 1))
{
return 0;
}
@@ -283,6 +285,9 @@ static cVillagePiecePool g_SandFlatRoofVillage(g_SandFlatRoofVillagePrefabs, g_S
/** The prefabs for the plains village. */
static cVillagePiecePool g_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
+/** The prefabs for the Japanese village. */
+static cVillagePiecePool g_JapaneseVillage(g_JapaneseVillagePrefabs, g_JapaneseVillagePrefabsCount, g_JapaneseVillageStartingPrefabs, g_JapaneseVillageStartingPrefabsCount);
+
@@ -316,6 +321,8 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
cVillagePiecePool * VillagePrefabs = NULL;
BLOCKTYPE RoadBlock = E_BLOCK_GRAVEL;
int rnd = m_Noise.IntNoise2DInt(a_OriginX, a_OriginZ) / 11;
+ cVillagePiecePool * PlainsVillage = (rnd % 2 == 0) ? &g_PlainsVillage : &g_JapaneseVillage;
+ cVillagePiecePool * DesertVillage = (rnd % 2 == 0) ? &g_SandVillage : &g_SandFlatRoofVillage;
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
@@ -324,7 +331,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biDesertM:
{
// These biomes allow sand villages
- VillagePrefabs = (rnd % 2 == 0) ? &g_SandVillage : &g_SandFlatRoofVillage;
+ VillagePrefabs = DesertVillage;
// RoadBlock = E_BLOCK_SANDSTONE;
break;
}
@@ -334,7 +341,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biSunflowerPlains:
{
// These biomes allow plains-style villages
- VillagePrefabs = &g_PlainsVillage;
+ VillagePrefabs = PlainsVillage;
break;
}
default:
--
cgit v1.2.3
From f3a8560f89492be4f221dcea9afcb9942ff92935 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 21:48:12 +0100
Subject: Update README.md
---
README.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index a16062574..07517751c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-MCServer
+MCServer [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
========
**Current Protocol Supported:** Minecraft v1.2 -> v1.7
@@ -34,5 +34,7 @@ For other stuff, including plugins and discussion, check the [forums](http://for
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
+[![Support via Gittip](https://rawgithub.com/twolfson/gittip-badge/0.2.0/dist/gittip.png)](https://www.gittip.com/USERNAME/)
+
Travis CI: [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From bc4d7b3d35a66466fc82174dacbdb3d19eab217a Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 21:48:38 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 07517751c..9b39f7d1d 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ For other stuff, including plugins and discussion, check the [forums](http://for
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
-[![Support via Gittip](https://rawgithub.com/twolfson/gittip-badge/0.2.0/dist/gittip.png)](https://www.gittip.com/USERNAME/)
+[![Support via Gittip](https://rawgithub.com/twolfson/gittip-badge/0.2.0/dist/gittip.png)](https://www.gittip.com/on/github/mc-server/)
Travis CI: [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From 86086aa3573f606924aae77fcc2c07249a7ad899 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 21:49:45 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 9b39f7d1d..8a3de6465 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ For other stuff, including plugins and discussion, check the [forums](http://for
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
-[![Support via Gittip](https://rawgithub.com/twolfson/gittip-badge/0.2.0/dist/gittip.png)](https://www.gittip.com/on/github/mc-server/)
+[![Support via Gittip](http://img.shields.io/gittip/mc-server.svg)](https://www.gittip.com/on/github/mc-server/)
Travis CI: [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From 078b5f6506a1265d9c970882622692037d8698d0 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 21:55:02 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8a3de6465..61ffdaa5f 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ For other stuff, including plugins and discussion, check the [forums](http://for
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
-[![Support via Gittip](http://img.shields.io/gittip/mc-server.svg)](https://www.gittip.com/on/github/mc-server/)
+[![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
Travis CI: [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From bd68b71dd7c4357e448abefe20d7dc08ad8dc370 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 21:55:55 +0100
Subject: Update README.md
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 61ffdaa5f..0b1038be0 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-MCServer [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
+MCServer [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
========
**Current Protocol Supported:** Minecraft v1.2 -> v1.7
@@ -34,7 +34,7 @@ For other stuff, including plugins and discussion, check the [forums](http://for
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
-[![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
+Support Via Gittip: [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
Travis CI: [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From 0d7dd5fe7679669046129892de5d9e9abec2320a Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 21:56:56 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 0b1038be0..752c55325 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-MCServer [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
+MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
========
**Current Protocol Supported:** Minecraft v1.2 -> v1.7
--
cgit v1.2.3
From deb69f150d3cdd0abc97905868370dad48cce468 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 22:00:16 +0100
Subject: Standardised a badge.
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 752c55325..b867c399c 100644
--- a/README.md
+++ b/README.md
@@ -36,5 +36,5 @@ Earn bitcoins for commits or donate to reward the MCServer developers: [![tip fo
Support Via Gittip: [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
-Travis CI: [![Build Status](https://travis-ci.org/mc-server/MCServer.png?branch=master)](https://travis-ci.org/mc-server/MCServer)
+Travis CI: [![Build Status]((http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From ecb358a36e193316b7a00857ae0b7e9ae2707665 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 22:02:19 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index b867c399c..5748e4083 100644
--- a/README.md
+++ b/README.md
@@ -36,5 +36,5 @@ Earn bitcoins for commits or donate to reward the MCServer developers: [![tip fo
Support Via Gittip: [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
-Travis CI: [![Build Status]((http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer)
+Travis CI: [![Build Status]((http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer))
--
cgit v1.2.3
From cc2b84ed9e5ab106bc016df57c0dfca863318ec4 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 22:03:31 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5748e4083..5f82c2b11 100644
--- a/README.md
+++ b/README.md
@@ -36,5 +36,5 @@ Earn bitcoins for commits or donate to reward the MCServer developers: [![tip fo
Support Via Gittip: [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
-Travis CI: [![Build Status]((http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer))
+Travis CI: [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From 2eca98a41a03c1f0478f93028f0c7c232689b6f4 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sat, 24 May 2014 22:04:15 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5f82c2b11..e7c0730bc 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
+MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
========
**Current Protocol Supported:** Minecraft v1.2 -> v1.7
--
cgit v1.2.3
From 27a9fa31108aef4313a45f4c716f2f1551537236 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Sat, 24 May 2014 23:28:48 +0100
Subject: Updated Core
---
MCServer/Plugins/Core | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/MCServer/Plugins/Core b/MCServer/Plugins/Core
index 5c8557d4f..3790f78d3 160000
--- a/MCServer/Plugins/Core
+++ b/MCServer/Plugins/Core
@@ -1 +1 @@
-Subproject commit 5c8557d4fdfa580c100510cde07a1a778ea2e244
+Subproject commit 3790f78d3f7503ff33a423b8e73e81a275562783
--
cgit v1.2.3
From 43eaa573fd09a0cbf2f8f6333bb3217717f8438b Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sun, 25 May 2014 10:03:53 +0100
Subject: Updated the installation instructions in the README.
---
README.md | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
diff --git a/README.md b/README.md
index e7c0730bc..22871efe4 100644
--- a/README.md
+++ b/README.md
@@ -1,26 +1,23 @@
MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
========
-**Current Protocol Supported:** Minecraft v1.2 -> v1.7
-
MCServer is a performant C++ Minecraft server designed for use in memory and cpu-limited places, or just to make regular server perform better.
MCServer can run on PCs, Macs, and *nix. This includes android phones and tablets as well as Raspberry Pis.
+**MCServer Currently Supports:** Minecraft v1.2 -> v1.7
+
Installation
------------
-To install MCServer, you can either download the repository and compile it, or download a pre-compiled version.
-
-If you've cloned the repository using Git, you need to pull down the submodules (core plugins, some dependencies). This can be achieved with `git submodule init` and then on a regular basis (to keep up to date) `git submodule update`.
-
-If you downloaded a ZIP file of the sources instead, you will need to download PolarSSL, too, from https://github.com/polarssl/polarssl , and unpack it into the `lib/polarssl` folder. You will also need to manually download all the plugins that you want included.
+Normally, you will want to download a pre-compiled version of MCServer from one of the buildservers:
-Compilation instructions are available in the COMPILING file.
+ * [Linux and Raspberry Pi](http://ci.bearbin.net) (Bearbin's CI Server)
+ * [Windows](http://mc-server.xoft.cz) (xoft's nightly build service)
-Linux builds can be downloaded from [Bearbin's CI Service](http://ci.bearbin.net) and Windows builds from xoft's [nightly build service](http://mc-server.xoft.cz).
+You simply need to download and extract these files before you can use the server.
-After you've extracted the files, simply run the MCServer executable.
+If you're a more advanced user, you may want to compile the server yourself for more performance. See the [COMPILING.md](https://github.com/mc-server/MCServer/blob/master/COMPILING.md) file for more details.
Contributing
------------
@@ -30,7 +27,7 @@ MCServer is licensed under the Apache license V2, and we welcome anybody to fork
Other Stuff
-----------
-For other stuff, including plugins and discussion, check the [forums](http://forum.mc-server.org) and [wiki](http://wiki.mc-server.org/).
+For other stuff, including plugins and discussion, check the [forums](http://forum.mc-server.org) and [Plugin API](http://mc-server.xoft.cz/LuaAPI/).
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
--
cgit v1.2.3
From bcdced34ab6be6767c121ac4cfef0fce7f9bc5bf Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sun, 25 May 2014 10:06:41 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 22871efe4..c9a8f5eff 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ MCServer is a performant C++ Minecraft server designed for use in memory and cpu
MCServer can run on PCs, Macs, and *nix. This includes android phones and tablets as well as Raspberry Pis.
-**MCServer Currently Supports:** Minecraft v1.2 -> v1.7
+We currently support the protocol from Minecraft 1.2 all the way up to Minecraft 1.7.9.
Installation
------------
--
cgit v1.2.3
From 34d69bd5899d0e54574bddf16215fa23bcaa9832 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sun, 25 May 2014 10:08:26 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c9a8f5eff..a4a8b3273 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
========
-MCServer is a performant C++ Minecraft server designed for use in memory and cpu-limited places, or just to make regular server perform better.
+MCServer is a Minecraft server that is written in C++ and designed to be efficient with memory and CPU, as well as having a flexible Lua Plugin API.
MCServer can run on PCs, Macs, and *nix. This includes android phones and tablets as well as Raspberry Pis.
--
cgit v1.2.3
From 882e8e044c56878cd144b93ea67182204581489c Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sun, 25 May 2014 10:21:58 +0100
Subject: Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index a4a8b3273..22befc822 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,8 @@ Contributing
MCServer is licensed under the Apache license V2, and we welcome anybody to fork and submit a Pull Request back with their changes, and if you want to join as a permanent member we can add you to the team.
+Check out the [CONTRIBUTING.md](https://github.com/mc-server/MCServer/blob/master/CONTRIBUTING.md) file for more infos.
+
Other Stuff
-----------
--
cgit v1.2.3
From ee929793f09c431693e1bef7edd77213ba412f60 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Sun, 25 May 2014 13:46:34 +0100
Subject: Hopefully fixed piston duplication issues
* Fixes #879
* Fixes #714
---
src/Blocks/BlockDropSpenser.h | 4 +-
src/Blocks/BlockFurnace.h | 4 +-
src/Blocks/BlockMobHead.h | 2 +-
src/Blocks/BlockPiston.cpp | 166 +++++++++++++-
src/Blocks/BlockPiston.h | 129 ++++++++++-
src/Chunk.cpp | 11 +-
src/Chunk.h | 4 +-
src/ChunkMap.cpp | 4 +-
src/ChunkMap.h | 2 +-
src/ClientHandle.cpp | 1 -
src/Piston.cpp | 297 -------------------------
src/Piston.h | 110 ---------
src/Simulator/IncrementalRedstoneSimulator.cpp | 9 +-
src/World.cpp | 48 +++-
src/World.h | 18 +-
15 files changed, 372 insertions(+), 437 deletions(-)
delete mode 100644 src/Piston.cpp
delete mode 100644 src/Piston.h
diff --git a/src/Blocks/BlockDropSpenser.h b/src/Blocks/BlockDropSpenser.h
index 88b61a418..e2b3039fd 100644
--- a/src/Blocks/BlockDropSpenser.h
+++ b/src/Blocks/BlockDropSpenser.h
@@ -5,7 +5,7 @@
#pragma once
-#include "../Piston.h"
+#include "../Blocks/BlockPiston.h"
#include "MetaRotator.h"
@@ -32,7 +32,7 @@ public:
a_BlockType = m_BlockType;
// FIXME: Do not use cPiston class for dispenser placement!
- a_BlockMeta = cPiston::RotationPitchToMetaData(a_Player->GetYaw(), a_Player->GetPitch());
+ a_BlockMeta = cBlockPistonHandler::RotationPitchToMetaData(a_Player->GetYaw(), a_Player->GetPitch());
return true;
}
diff --git a/src/Blocks/BlockFurnace.h b/src/Blocks/BlockFurnace.h
index a7a807957..74582c3b3 100644
--- a/src/Blocks/BlockFurnace.h
+++ b/src/Blocks/BlockFurnace.h
@@ -3,7 +3,7 @@
#include "BlockEntity.h"
#include "../World.h"
-#include "../Piston.h"
+#include "../Blocks/BlockPiston.h"
#include "MetaRotator.h"
@@ -35,7 +35,7 @@ public:
a_BlockType = m_BlockType;
// FIXME: Do not use cPiston class for furnace placement!
- a_BlockMeta = cPiston::RotationPitchToMetaData(a_Player->GetYaw(), 0);
+ a_BlockMeta = cBlockPistonHandler::RotationPitchToMetaData(a_Player->GetYaw(), 0);
return true;
}
diff --git a/src/Blocks/BlockMobHead.h b/src/Blocks/BlockMobHead.h
index b7629b07c..9855574ad 100644
--- a/src/Blocks/BlockMobHead.h
+++ b/src/Blocks/BlockMobHead.h
@@ -68,7 +68,7 @@ public:
public:
cPlayerCallback(const Vector3f & a_Pos) : m_Pos(a_Pos) {}
- } PlayerCallback(Vector3f(a_BlockX, a_BlockY, a_BlockZ));
+ } PlayerCallback(Vector3f((float)a_BlockX, (float)a_BlockY, (float)a_BlockZ));
a_World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, CallbackA);
diff --git a/src/Blocks/BlockPiston.cpp b/src/Blocks/BlockPiston.cpp
index 542eb33b5..f758013dc 100644
--- a/src/Blocks/BlockPiston.cpp
+++ b/src/Blocks/BlockPiston.cpp
@@ -4,14 +4,14 @@
#include "../Item.h"
#include "../World.h"
#include "../Entities/Player.h"
-#include "../Piston.h"
+#include "BlockInServerPluginInterface.h"
#define AddPistonDir(x, y, z, dir, amount) \
- switch (dir) \
+ switch (dir & 0x07) \
{ \
case 0: (y) -= (amount); break; \
case 1: (y) += (amount); break; \
@@ -19,8 +19,15 @@
case 3: (z) += (amount); break; \
case 4: (x) -= (amount); break; \
case 5: (x) += (amount); break; \
+ default: \
+ { \
+ LOGWARNING("%s: invalid direction %d, ignoring", __FUNCTION__, dir & 0x07); \
+ break; \
+ } \
}
+#define PISTON_TICK_DELAY 1
+
@@ -40,7 +47,7 @@ void cBlockPistonHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorld
int newX = a_BlockX;
int newY = a_BlockY;
int newZ = a_BlockZ;
- AddPistonDir(newX, newY, newZ, OldMeta & ~(8), 1);
+ AddPistonDir(newX, newY, newZ, OldMeta, 1);
if (a_ChunkInterface.GetBlock(newX, newY, newZ) == E_BLOCK_PISTON_EXTENSION)
{
@@ -60,7 +67,7 @@ bool cBlockPistonHandler::GetPlacementBlockTypeMeta(
)
{
a_BlockType = m_BlockType;
- a_BlockMeta = cPiston::RotationPitchToMetaData(a_Player->GetYaw(), a_Player->GetPitch());
+ a_BlockMeta = RotationPitchToMetaData(a_Player->GetYaw(), a_Player->GetPitch());
return true;
}
@@ -68,6 +75,155 @@ bool cBlockPistonHandler::GetPlacementBlockTypeMeta(
+int cBlockPistonHandler::FirstPassthroughBlock(int pistonX, int pistonY, int pistonZ, NIBBLETYPE pistonmeta, cWorld * a_World)
+{
+ // Examine each of the 12 blocks ahead of the piston:
+ for (int ret = 0; ret < 12; ret++)
+ {
+ BLOCKTYPE currBlock;
+ NIBBLETYPE currMeta;
+ AddPistonDir(pistonX, pistonY, pistonZ, pistonmeta, 1);
+ a_World->GetBlockTypeMeta(pistonX, pistonY, pistonZ, currBlock, currMeta);
+ if (CanBreakPush(currBlock))
+ {
+ // This block breaks when pushed, extend up to here
+ return ret;
+ }
+ if (!CanPush(currBlock, currMeta))
+ {
+ // This block cannot be pushed at all, the piston can't extend
+ return -1;
+ }
+ }
+ // There is no space for the blocks to move, piston can't extend
+ return -1;
+}
+
+
+
+
+
+void cBlockPistonHandler::ExtendPiston(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World)
+{
+ BLOCKTYPE pistonBlock;
+ NIBBLETYPE pistonMeta;
+ a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, pistonBlock, pistonMeta);
+
+ if (IsExtended(pistonMeta))
+ {
+ // Already extended, bail out
+ return;
+ }
+
+ int dist = FirstPassthroughBlock(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, a_World);
+ if (dist < 0)
+ {
+ // FirstPassthroughBlock says piston can't push anything, bail out
+ return;
+ }
+
+ a_World->BroadcastBlockAction(a_BlockX, a_BlockY, a_BlockZ, 0, pistonMeta, pistonBlock);
+ a_World->BroadcastSoundEffect("tile.piston.out", a_BlockX * 8, a_BlockY * 8, a_BlockZ * 8, 0.5f, 0.7f);
+
+ // Drop the breakable block in the line, if appropriate:
+ AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, dist + 1); // "a_Block" now at the breakable / empty block
+ BLOCKTYPE currBlock;
+ NIBBLETYPE currMeta;
+ a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, currBlock, currMeta);
+ if (currBlock != E_BLOCK_AIR)
+ {
+ cBlockHandler * Handler = BlockHandler(currBlock);
+ if (Handler->DoesDropOnUnsuitable())
+ {
+ cChunkInterface ChunkInterface(a_World->GetChunkMap());
+ cBlockInServerPluginInterface PluginInterface(*a_World);
+ Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, NULL, a_BlockX, a_BlockY, a_BlockZ);
+ }
+ }
+
+ // Push blocks, from the furthest to the nearest:
+ int oldx = a_BlockX, oldy = a_BlockY, oldz = a_BlockZ;
+ NIBBLETYPE currBlockMeta;
+ for (int i = dist + 1; i > 1; i--)
+ {
+ AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, -1);
+ a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, currBlock, currBlockMeta);
+ a_World->SetBlock(oldx, oldy, oldz, currBlock, currBlockMeta, false);
+ a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(oldx, oldy, oldz));
+ oldx = a_BlockX;
+ oldy = a_BlockY;
+ oldz = a_BlockZ;
+ }
+
+ int extx = a_BlockX;
+ int exty = a_BlockY;
+ int extz = a_BlockZ;
+ AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, -1);
+ // "a_Block" now at piston body, "ext" at future extension
+
+ a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, pistonBlock, pistonMeta | 0x8);
+ a_World->SetBlock(extx, exty, extz, E_BLOCK_PISTON_EXTENSION, pistonMeta | (IsSticky(pistonBlock) ? 8 : 0), false);
+ a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(extx, exty, extz));
+}
+
+
+
+
+
+void cBlockPistonHandler::RetractPiston(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World)
+{
+ BLOCKTYPE pistonBlock;
+ NIBBLETYPE pistonMeta;
+ a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, pistonBlock, pistonMeta);
+
+ if (!IsExtended(pistonMeta))
+ {
+ // Already retracted, bail out
+ return;
+ }
+
+ // Check the extension:
+ AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, 1);
+ if (a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ) != E_BLOCK_PISTON_EXTENSION)
+ {
+ LOGD("%s: Piston without an extension - still extending, or just in an invalid state?", __FUNCTION__);
+ return;
+ }
+
+ AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, -1);
+ a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, pistonBlock, pistonMeta & ~(8));
+ a_World->BroadcastBlockAction(a_BlockX, a_BlockY, a_BlockZ, 1, pistonMeta & ~(8), pistonBlock);
+ a_World->BroadcastSoundEffect("tile.piston.in", a_BlockX * 8, a_BlockY * 8, a_BlockZ * 8, 0.5f, 0.7f);
+ AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, 1);
+
+ // Retract the extension, pull block if appropriate
+ if (IsSticky(pistonBlock))
+ {
+ int tempx = a_BlockX, tempy = a_BlockY, tempz = a_BlockZ;
+ AddPistonDir(tempx, tempy, tempz, pistonMeta, 1);
+ BLOCKTYPE tempBlock;
+ NIBBLETYPE tempMeta;
+ a_World->GetBlockTypeMeta(tempx, tempy, tempz, tempBlock, tempMeta);
+ if (CanPull(tempBlock, tempMeta))
+ {
+ // Pull the block
+ a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, tempBlock, tempMeta, false);
+ a_World->SetBlock(tempx, tempy, tempz, E_BLOCK_AIR, 0, false);
+ a_World->ScheduleTask(PISTON_TICK_DELAY + 1, new cWorld::cTaskSendBlockToAllPlayers(a_BlockX, a_BlockY, a_BlockZ));
+ a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(tempx, tempy, tempz));
+ return;
+ }
+ }
+
+ // Retract without pulling
+ a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0, false);
+ a_World->ScheduleTask(PISTON_TICK_DELAY + 1, new cWorld::cTaskSendBlockToAllPlayers(a_BlockX, a_BlockY, a_BlockZ));
+}
+
+
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cBlockPistonHeadHandler:
@@ -87,7 +243,7 @@ void cBlockPistonHeadHandler::OnDestroyedByPlayer(cChunkInterface & a_ChunkInter
int newX = a_BlockX;
int newY = a_BlockY;
int newZ = a_BlockZ;
- AddPistonDir(newX, newY, newZ, OldMeta & ~(8), -1);
+ AddPistonDir(newX, newY, newZ, OldMeta, -1);
BLOCKTYPE Block = a_ChunkInterface.GetBlock(newX, newY, newZ);
if ((Block == E_BLOCK_STICKY_PISTON) || (Block == E_BLOCK_PISTON))
diff --git a/src/Blocks/BlockPiston.h b/src/Blocks/BlockPiston.h
index 7632b5e5a..d7c92925b 100644
--- a/src/Blocks/BlockPiston.h
+++ b/src/Blocks/BlockPiston.h
@@ -21,6 +21,133 @@ public:
int a_CursorX, int a_CursorY, int a_CursorZ,
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
) override;
+
+ static NIBBLETYPE RotationPitchToMetaData(double a_Rotation, double a_Pitch)
+ {
+ if (a_Pitch >= 50)
+ {
+ return 0x1;
+ }
+ else if (a_Pitch <= -50)
+ {
+ return 0x0;
+ }
+ else
+ {
+ a_Rotation += 90 + 45; // So its not aligned with axis
+
+ if (a_Rotation > 360)
+ {
+ a_Rotation -= 360;
+ }
+ if ((a_Rotation >= 0) && (a_Rotation < 90))
+ {
+ return 0x4;
+ }
+ else if ((a_Rotation >= 180) && (a_Rotation < 270))
+ {
+ return 0x5;
+ }
+ else if ((a_Rotation >= 90) && (a_Rotation < 180))
+ {
+ return 0x2;
+ }
+ else
+ {
+ return 0x3;
+ }
+ }
+ }
+
+ static eBlockFace MetaDataToDirection(NIBBLETYPE a_MetaData)
+ {
+ switch (a_MetaData)
+ {
+ case 0x0: return BLOCK_FACE_YM;
+ case 0x1: return BLOCK_FACE_YP;
+ case 0x2: return BLOCK_FACE_ZM;
+ case 0x3: return BLOCK_FACE_ZP;
+ case 0x4: return BLOCK_FACE_XM;
+ case 0x5: return BLOCK_FACE_XP;
+ default:
+ {
+ ASSERT(!"Invalid Metadata");
+ return BLOCK_FACE_NONE;
+ }
+ }
+ }
+
+ static void ExtendPiston(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
+ static void RetractPiston(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
+
+private:
+
+ /// Returns true if the piston (specified by blocktype) is a sticky piston
+ static inline bool IsSticky(BLOCKTYPE a_BlockType) { return (a_BlockType == E_BLOCK_STICKY_PISTON); }
+
+ /// Returns true if the piston (with the specified meta) is extended
+ static inline bool IsExtended(NIBBLETYPE a_PistonMeta) { return ((a_PistonMeta & 0x8) != 0x0); }
+
+ /// Returns true if the specified block can be pushed by a piston (and left intact)
+ static inline bool CanPush(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+ {
+ switch (a_BlockType)
+ {
+ case E_BLOCK_ANVIL:
+ case E_BLOCK_BED:
+ case E_BLOCK_BEDROCK:
+ case E_BLOCK_BREWING_STAND:
+ case E_BLOCK_CHEST:
+ case E_BLOCK_COMMAND_BLOCK:
+ case E_BLOCK_DISPENSER:
+ case E_BLOCK_DROPPER:
+ case E_BLOCK_ENCHANTMENT_TABLE:
+ case E_BLOCK_END_PORTAL:
+ case E_BLOCK_END_PORTAL_FRAME:
+ case E_BLOCK_FURNACE:
+ case E_BLOCK_LIT_FURNACE:
+ case E_BLOCK_HOPPER:
+ case E_BLOCK_JUKEBOX:
+ case E_BLOCK_MOB_SPAWNER:
+ case E_BLOCK_NETHER_PORTAL:
+ case E_BLOCK_NOTE_BLOCK:
+ case E_BLOCK_OBSIDIAN:
+ case E_BLOCK_PISTON_EXTENSION:
+ {
+ return false;
+ }
+ case E_BLOCK_STICKY_PISTON:
+ case E_BLOCK_PISTON:
+ {
+ // A piston can only be pushed if retracted:
+ return !IsExtended(a_BlockMeta);
+ }
+ }
+ return true;
+ }
+
+ /// Returns true if the specified block can be pushed by a piston and broken / replaced
+ static inline bool CanBreakPush(BLOCKTYPE a_BlockType) { return cBlockInfo::IsPistonBreakable(a_BlockType); }
+
+ /// Returns true if the specified block can be pulled by a sticky piston
+ static inline bool CanPull(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+ {
+ switch (a_BlockType)
+ {
+ case E_BLOCK_LAVA:
+ case E_BLOCK_STATIONARY_LAVA:
+ case E_BLOCK_STATIONARY_WATER:
+ case E_BLOCK_WATER:
+ {
+ return false;
+ }
+ }
+
+ return CanBreakPush(a_BlockType) ? false /* CanBreakPush returns true, but we need false to prevent pulling */ : CanPush(a_BlockType, a_BlockMeta);
+ }
+
+ /// Returns how many blocks the piston has to push (where the first free space is); < 0 when unpushable
+ static int FirstPassthroughBlock(int a_PistonX, int a_PistonY, int a_PistonZ, NIBBLETYPE a_PistonMeta, cWorld * a_World);
} ;
@@ -40,7 +167,7 @@ public:
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
{
// No pickups
- // Also with 1.7, the item forms of these tecnical blocks have been removed, so giving someone this will crash their client...
+ // Also with 1.7, the item forms of these technical blocks have been removed, so giving someone this will crash their client...
}
} ;
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index ca536e89a..6bd68459c 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -1462,9 +1462,9 @@ void cChunk::CalculateHeightmap(const BLOCKTYPE * a_BlockTypes)
-void cChunk::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+void cChunk::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, bool a_SendToClients)
{
- FastSetBlock(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
+ FastSetBlock(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta, a_SendToClients);
const int index = MakeIndexNoCheck(a_RelX, a_RelY, a_RelZ);
@@ -1565,7 +1565,7 @@ void cChunk::QueueTickBlockNeighbors(int a_RelX, int a_RelY, int a_RelZ)
-void cChunk::FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta)
+void cChunk::FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta, bool a_SendToClients)
{
ASSERT(!((a_RelX < 0) || (a_RelX >= Width) || (a_RelY < 0) || (a_RelY >= Height) || (a_RelZ < 0) || (a_RelZ >= Width)));
@@ -1589,13 +1589,14 @@ void cChunk::FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockT
// The client doesn't need to distinguish between stationary and nonstationary fluids:
if (
- (OldBlockMeta != a_BlockMeta) || // Different meta always gets sent to the client
+ a_SendToClients &&
+ ((OldBlockMeta != a_BlockMeta) || // Different meta always gets sent to the client
!(
((OldBlockType == E_BLOCK_STATIONARY_WATER) && (a_BlockType == E_BLOCK_WATER)) || // Replacing stationary water with water
((OldBlockType == E_BLOCK_WATER) && (a_BlockType == E_BLOCK_STATIONARY_WATER)) || // Replacing water with stationary water
((OldBlockType == E_BLOCK_STATIONARY_LAVA) && (a_BlockType == E_BLOCK_LAVA)) || // Replacing stationary water with water
((OldBlockType == E_BLOCK_LAVA) && (a_BlockType == E_BLOCK_STATIONARY_LAVA)) // Replacing water with stationary water
- )
+ ))
)
{
m_PendingSendBlocks.push_back(sSetBlock(m_PosX, m_PosZ, a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta));
diff --git a/src/Chunk.h b/src/Chunk.h
index 84ec35496..8eeb183e3 100644
--- a/src/Chunk.h
+++ b/src/Chunk.h
@@ -139,7 +139,7 @@ public:
cWorld * GetWorld(void) const { return m_World; }
- void SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta );
+ void SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, bool a_SendToClients = true);
// SetBlock() does a lot of work (heightmap, tickblocks, blockentities) so a BlockIdx version doesn't make sense
void SetBlock( const Vector3i & a_RelBlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta ) { SetBlock( a_RelBlockPos.x, a_RelBlockPos.y, a_RelBlockPos.z, a_BlockType, a_BlockMeta ); }
@@ -152,7 +152,7 @@ public:
/** Queues all 6 neighbors of the specified block for ticking (m_ToTickQueue). If any are outside the chunk, relays the checking to the proper neighboring chunk */
void QueueTickBlockNeighbors(int a_RelX, int a_RelY, int a_RelZ);
- void FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta ); // Doesn't force block updates on neighbors, use for simple changes such as grass growing etc.
+ void FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta, bool a_SendToClients = true); // Doesn't force block updates on neighbors, use for simple changes such as grass growing etc.
BLOCKTYPE GetBlock(int a_RelX, int a_RelY, int a_RelZ) const;
BLOCKTYPE GetBlock(int a_BlockIdx) const;
void GetBlockTypeMeta(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta);
diff --git a/src/ChunkMap.cpp b/src/ChunkMap.cpp
index d7164a6a5..3c87403ff 100644
--- a/src/ChunkMap.cpp
+++ b/src/ChunkMap.cpp
@@ -1255,7 +1255,7 @@ void cChunkMap::SetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYP
-void cChunkMap::SetBlock(cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta)
+void cChunkMap::SetBlock(cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta, bool a_SendToClients)
{
cChunkInterface ChunkInterface(this);
if (a_BlockType == E_BLOCK_AIR)
@@ -1270,7 +1270,7 @@ void cChunkMap::SetBlock(cWorldInterface & a_WorldInterface, int a_BlockX, int a
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
if ((Chunk != NULL) && Chunk->IsValid())
{
- Chunk->SetBlock(X, Y, Z, a_BlockType, a_BlockMeta );
+ Chunk->SetBlock(X, Y, Z, a_BlockType, a_BlockMeta, a_SendToClients);
m_World->GetSimulatorManager()->WakeUp(a_BlockX, a_BlockY, a_BlockZ, Chunk);
}
BlockHandler(a_BlockType)->OnPlaced(ChunkInterface, a_WorldInterface, a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
diff --git a/src/ChunkMap.h b/src/ChunkMap.h
index 9d973f2a9..a64942112 100644
--- a/src/ChunkMap.h
+++ b/src/ChunkMap.h
@@ -152,7 +152,7 @@ public:
NIBBLETYPE GetBlockSkyLight (int a_BlockX, int a_BlockY, int a_BlockZ);
NIBBLETYPE GetBlockBlockLight(int a_BlockX, int a_BlockY, int a_BlockZ);
void SetBlockMeta (int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockMeta);
- void SetBlock (cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta);
+ void SetBlock (cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta, bool a_SendToClients = true);
void QueueSetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, BLOCKTYPE a_BlockMeta, Int64 a_Tick, BLOCKTYPE a_PreviousBlockType = E_BLOCK_AIR);
bool GetBlockTypeMeta (int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta);
bool GetBlockInfo (int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight);
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 83b21ae3c..433b7edf7 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -12,7 +12,6 @@
#include "BlockEntities/SignEntity.h"
#include "UI/Window.h"
#include "Item.h"
-#include "Piston.h"
#include "Mobs/Monster.h"
#include "ChatColor.h"
#include "OSSupport/Socket.h"
diff --git a/src/Piston.cpp b/src/Piston.cpp
deleted file mode 100644
index b21d576f3..000000000
--- a/src/Piston.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
-
-#include "Piston.h"
-#include "ChunkDef.h"
-#include "Entities/Pickup.h"
-#include "Item.h"
-#include "Root.h"
-#include "ClientHandle.h"
-#include "World.h"
-#include "Server.h"
-#include "Blocks/BlockHandler.h"
-#include "BlockInServerPluginInterface.h"
-
-
-
-
-
-/// Number of ticks that the piston extending / retracting waits before setting the block
-const int PISTON_TICK_DELAY = 1;
-
-
-
-
-
-cPiston::cPiston(cWorld * a_World)
- : m_World(a_World)
-{
-}
-
-
-
-
-
-int cPiston::FirstPassthroughBlock(int pistonX, int pistonY, int pistonZ, NIBBLETYPE pistonmeta)
-{
- // Examine each of the 12 blocks ahead of the piston:
- for (int ret = 0; ret < 12; ret++)
- {
- BLOCKTYPE currBlock;
- NIBBLETYPE currMeta;
- AddDir(pistonX, pistonY, pistonZ, pistonmeta, 1);
- m_World->GetBlockTypeMeta(pistonX, pistonY, pistonZ, currBlock, currMeta);
- if (CanBreakPush(currBlock, currMeta))
- {
- // This block breaks when pushed, extend up to here
- return ret;
- }
- if (!CanPush(currBlock, currMeta))
- {
- // This block cannot be pushed at all, the piston can't extend
- return -1;
- }
- }
- // There is no space for the blocks to move, piston can't extend
- return -1;
-}
-
-
-
-
-
-void cPiston::ExtendPiston(int pistx, int pisty, int pistz)
-{
- BLOCKTYPE pistonBlock;
- NIBBLETYPE pistonMeta;
- m_World->GetBlockTypeMeta(pistx, pisty, pistz, pistonBlock, pistonMeta);
-
- if (IsExtended(pistonMeta))
- {
- // Already extended, bail out
- return;
- }
-
- int dist = FirstPassthroughBlock(pistx, pisty, pistz, pistonMeta);
- if (dist < 0)
- {
- // FirstPassthroughBlock says piston can't push anything, bail out
- return;
- }
-
- m_World->BroadcastBlockAction(pistx, pisty, pistz, 0, pistonMeta, pistonBlock);
- m_World->BroadcastSoundEffect("tile.piston.out", pistx * 8, pisty * 8, pistz * 8, 0.5f, 0.7f);
-
- // Drop the breakable block in the line, if appropriate:
- AddDir(pistx, pisty, pistz, pistonMeta, dist + 1); // "pist" now at the breakable / empty block
- BLOCKTYPE currBlock;
- NIBBLETYPE currMeta;
- m_World->GetBlockTypeMeta(pistx, pisty, pistz, currBlock, currMeta);
- if (currBlock != E_BLOCK_AIR)
- {
- cBlockHandler * Handler = BlockHandler(currBlock);
- if (Handler->DoesDropOnUnsuitable())
- {
- cChunkInterface ChunkInterface(m_World->GetChunkMap());
- cBlockInServerPluginInterface PluginInterface(*m_World);
- Handler->DropBlock(ChunkInterface, *m_World, PluginInterface, NULL, pistx, pisty, pistz);
- }
- }
-
- // Push blocks, from the furthest to the nearest:
- int oldx = pistx, oldy = pisty, oldz = pistz;
- NIBBLETYPE currBlockMeta;
- for (int i = dist + 1; i > 1; i--)
- {
- AddDir(pistx, pisty, pistz, pistonMeta, -1);
- m_World->GetBlockTypeMeta(pistx, pisty, pistz, currBlock, currBlockMeta);
- m_World->QueueSetBlock( oldx, oldy, oldz, currBlock, currBlockMeta, PISTON_TICK_DELAY);
- oldx = pistx;
- oldy = pisty;
- oldz = pistz;
- }
-
- int extx = pistx;
- int exty = pisty;
- int extz = pistz;
- AddDir(pistx, pisty, pistz, pistonMeta, -1);
- // "pist" now at piston body, "ext" at future extension
-
- m_World->SetBlock(pistx, pisty, pistz, pistonBlock, pistonMeta | 0x8);
- m_World->QueueSetBlock(extx, exty, extz, E_BLOCK_PISTON_EXTENSION, pistonMeta | (IsSticky(pistonBlock) ? 8 : 0), PISTON_TICK_DELAY);
-}
-
-
-
-
-
-void cPiston::RetractPiston(int pistx, int pisty, int pistz)
-{
- BLOCKTYPE pistonBlock;
- NIBBLETYPE pistonMeta;
- m_World->GetBlockTypeMeta(pistx, pisty, pistz, pistonBlock, pistonMeta);
-
- if (!IsExtended(pistonMeta))
- {
- // Already retracted, bail out
- return;
- }
-
- // Check the extension:
- AddDir(pistx, pisty, pistz, pistonMeta, 1);
- if (m_World->GetBlock(pistx, pisty, pistz) != E_BLOCK_PISTON_EXTENSION)
- {
- LOGD("%s: Piston without an extension - still extending, or just in an invalid state?", __FUNCTION__);
- return;
- }
-
- AddDir(pistx, pisty, pistz, pistonMeta, -1);
- m_World->SetBlock(pistx, pisty, pistz, pistonBlock, pistonMeta & ~(8));
- m_World->BroadcastBlockAction(pistx, pisty, pistz, 1, pistonMeta & ~(8), pistonBlock);
- m_World->BroadcastSoundEffect("tile.piston.in", pistx * 8, pisty * 8, pistz * 8, 0.5f, 0.7f);
- AddDir(pistx, pisty, pistz, pistonMeta, 1);
-
- // Retract the extension, pull block if appropriate
- if (IsSticky(pistonBlock))
- {
- int tempx = pistx, tempy = pisty, tempz = pistz;
- AddDir(tempx, tempy, tempz, pistonMeta, 1);
- BLOCKTYPE tempBlock;
- NIBBLETYPE tempMeta;
- m_World->GetBlockTypeMeta(tempx, tempy, tempz, tempBlock, tempMeta);
- if (CanPull(tempBlock, tempMeta))
- {
- // Pull the block
- m_World->QueueSetBlock(pistx, pisty, pistz, tempBlock, tempMeta, PISTON_TICK_DELAY);
- m_World->QueueSetBlock(tempx, tempy, tempz, E_BLOCK_AIR, 0, PISTON_TICK_DELAY);
- }
- else
- {
- // Retract without pulling
- m_World->QueueSetBlock(pistx, pisty, pistz, E_BLOCK_AIR, 0, PISTON_TICK_DELAY);
- }
- }
- else
- {
- m_World->QueueSetBlock(pistx, pisty, pistz, E_BLOCK_AIR, 0, PISTON_TICK_DELAY);
- }
-}
-
-
-
-
-
-bool cPiston::IsExtended(NIBBLETYPE a_PistonMeta)
-{
- return ((a_PistonMeta & 0x8) != 0x0);
-}
-
-
-
-
-
-bool cPiston::IsSticky(BLOCKTYPE a_BlockType)
-{
- return (a_BlockType == E_BLOCK_STICKY_PISTON);
-}
-
-
-
-
-
-bool cPiston::CanPush(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
-{
- switch (a_BlockType)
- {
- case E_BLOCK_ANVIL:
- case E_BLOCK_BED:
- case E_BLOCK_BEDROCK:
- case E_BLOCK_BREWING_STAND:
- case E_BLOCK_CHEST:
- case E_BLOCK_COMMAND_BLOCK:
- case E_BLOCK_DISPENSER:
- case E_BLOCK_DROPPER:
- case E_BLOCK_ENCHANTMENT_TABLE:
- case E_BLOCK_END_PORTAL:
- case E_BLOCK_END_PORTAL_FRAME:
- case E_BLOCK_FURNACE:
- case E_BLOCK_LIT_FURNACE:
- case E_BLOCK_HOPPER:
- case E_BLOCK_JUKEBOX:
- case E_BLOCK_MOB_SPAWNER:
- case E_BLOCK_NETHER_PORTAL:
- case E_BLOCK_NOTE_BLOCK:
- case E_BLOCK_OBSIDIAN:
- case E_BLOCK_PISTON_EXTENSION:
- {
- return false;
- }
- case E_BLOCK_STICKY_PISTON:
- case E_BLOCK_PISTON:
- {
- // A piston can only be pushed if retracted:
- return !IsExtended(a_BlockMeta);
- }
- }
- return true;
-}
-
-
-
-
-
-bool cPiston::CanBreakPush(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
-{
- UNUSED(a_BlockMeta);
- return cBlockInfo::IsPistonBreakable(a_BlockType);
-}
-
-
-
-
-
-bool cPiston::CanPull(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
-{
- switch (a_BlockType)
- {
- case E_BLOCK_LAVA:
- case E_BLOCK_STATIONARY_LAVA:
- case E_BLOCK_STATIONARY_WATER:
- case E_BLOCK_WATER:
- {
- return false;
- }
- }
-
- if (CanBreakPush(a_BlockType, a_BlockMeta))
- {
- return false; // CanBreakPush returns true, but we need false to prevent pulling
- }
-
- return CanPush(a_BlockType, a_BlockMeta);
-}
-
-
-
-
-
-void cPiston::AddDir(int & a_BlockX, int & a_BlockY, int & a_BlockZ, NIBBLETYPE a_PistonMeta, int a_Amount)
-{
- switch (a_PistonMeta & 0x07)
- {
- case 0: a_BlockY -= a_Amount; break;
- case 1: a_BlockY += a_Amount; break;
- case 2: a_BlockZ -= a_Amount; break;
- case 3: a_BlockZ += a_Amount; break;
- case 4: a_BlockX -= a_Amount; break;
- case 5: a_BlockX += a_Amount; break;
- default:
- {
- LOGWARNING("%s: invalid direction %d, ignoring", __FUNCTION__, a_PistonMeta & 0x07);
- break;
- }
- }
-}
-
-
-
-
diff --git a/src/Piston.h b/src/Piston.h
deleted file mode 100644
index 9bbc8c6b9..000000000
--- a/src/Piston.h
+++ /dev/null
@@ -1,110 +0,0 @@
-
-#pragma once
-
-
-#include "Defines.h"
-
-
-// fwd: World.h
-class cWorld;
-
-
-
-
-
-class cPiston
-{
-public:
-
- cPiston(cWorld * a_World);
-
- static NIBBLETYPE RotationPitchToMetaData(double a_Rotation, double a_Pitch)
- {
- if (a_Pitch >= 50)
- {
- return 0x1;
- }
- else if (a_Pitch <= -50)
- {
- return 0x0;
- }
- else
- {
- a_Rotation += 90 + 45; // So its not aligned with axis
-
- if (a_Rotation > 360)
- {
- a_Rotation -= 360;
- }
- if ((a_Rotation >= 0) && (a_Rotation < 90))
- {
- return 0x4;
- }
- else if ((a_Rotation >= 180) && (a_Rotation < 270))
- {
- return 0x5;
- }
- else if ((a_Rotation >= 90) && (a_Rotation < 180))
- {
- return 0x2;
- }
- else
- {
- return 0x3;
- }
- }
- }
-
- static eBlockFace MetaDataToDirection(NIBBLETYPE a_MetaData)
- {
- switch (a_MetaData)
- {
- //case -1: return BLOCK_FACE_NONE; //can never happen as metadata is unsigned
- case 0x0: return BLOCK_FACE_YM;
- case 0x1: return BLOCK_FACE_YP;
- case 0x2: return BLOCK_FACE_ZM;
- case 0x3: return BLOCK_FACE_ZP;
- case 0x4: return BLOCK_FACE_XM;
- case 0x5: return BLOCK_FACE_XP;
- default:
- {
- ASSERT(!"Invalid Metadata");
- return BLOCK_FACE_NONE;
- }
- }
- }
-
- void ExtendPiston( int, int, int );
- void RetractPiston( int, int, int );
-
- /// Returns true if the piston (specified by blocktype) is a sticky piston
- static bool IsSticky(BLOCKTYPE a_BlockType);
-
- /// Returns true if the piston (with the specified meta) is extended
- static bool IsExtended(NIBBLETYPE a_PistonMeta);
-
- /// Returns true if the specified block can be pushed by a piston (and left intact)
- static bool CanPush(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
-
- /// Returns true if the specified block can be pushed by a piston and broken / replaced
- static bool CanBreakPush(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
-
- /// Returns true if the specified block can be pulled by a sticky piston
- static bool CanPull(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
-
- /// Updates the coords by the specified amount in the direction a piston of the specified meta is facing
- static void AddDir(int & a_BlockX, int & a_BlockY, int & a_BlockZ, NIBBLETYPE a_PistonMeta, int a_Amount);
-
-
- cWorld * m_World;
-
-private:
- void ChainMove( int, int, int, char, unsigned short * );
-
- /// Returns how many blocks the piston has to push (where the first free space is); <0 when unpushable
- int FirstPassthroughBlock(int a_PistonX, int a_PistonY, int a_PistonZ, NIBBLETYPE a_PistonMeta);
-} ;
-
-
-
-
diff --git a/src/Simulator/IncrementalRedstoneSimulator.cpp b/src/Simulator/IncrementalRedstoneSimulator.cpp
index 074063add..c24b1c4b3 100644
--- a/src/Simulator/IncrementalRedstoneSimulator.cpp
+++ b/src/Simulator/IncrementalRedstoneSimulator.cpp
@@ -11,7 +11,7 @@
#include "../Blocks/BlockDoor.h"
#include "../Blocks/BlockButton.h"
#include "../Blocks/BlockLever.h"
-#include "../Piston.h"
+#include "../Blocks/BlockPiston.h"
@@ -814,17 +814,16 @@ void cIncrementalRedstoneSimulator::HandleRedstoneRepeater(int a_RelBlockX, int
void cIncrementalRedstoneSimulator::HandlePiston(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ)
{
- cPiston Piston(&m_World);
int BlockX = (m_Chunk->GetPosX() * cChunkDef::Width) + a_RelBlockX;
int BlockZ = (m_Chunk->GetPosZ() * cChunkDef::Width) + a_RelBlockZ;
if (IsPistonPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ, m_Chunk->GetMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ) & 0x7)) // We only want the bottom three bits (4th controls extended-ness)
{
- Piston.ExtendPiston(BlockX, a_RelBlockY, BlockZ);
+ cBlockPistonHandler::ExtendPiston(BlockX, a_RelBlockY, BlockZ, &m_World);
}
else
{
- Piston.RetractPiston(BlockX, a_RelBlockY, BlockZ);
+ cBlockPistonHandler::RetractPiston(BlockX, a_RelBlockY, BlockZ, &m_World);
}
}
@@ -1491,7 +1490,7 @@ bool cIncrementalRedstoneSimulator::IsPistonPowered(int a_RelBlockX, int a_RelBl
// Pistons cannot be powered through their front face; this function verifies that a source meets this requirement
int OldX = a_RelBlockX, OldY = a_RelBlockY, OldZ = a_RelBlockZ;
- eBlockFace Face = cPiston::MetaDataToDirection(a_Meta);
+ eBlockFace Face = cBlockPistonHandler::MetaDataToDirection(a_Meta);
int BlockX = (m_Chunk->GetPosX() * cChunkDef::Width) + a_RelBlockX;
int BlockZ = (m_Chunk->GetPosZ() * cChunkDef::Width) + a_RelBlockZ;
diff --git a/src/World.cpp b/src/World.cpp
index 807065bfa..29046bba9 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -1551,9 +1551,9 @@ bool cWorld::SetAreaBiome(const cCuboid & a_Area, EMCSBiome a_Biome)
-void cWorld::SetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+void cWorld::SetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, bool a_SendToClients)
{
- m_ChunkMap->SetBlock(*this, a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
+ m_ChunkMap->SetBlock(*this, a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta, a_SendToClients);
}
@@ -3127,6 +3127,50 @@ void cWorld::cTaskUnloadUnusedChunks::Run(cWorld & a_World)
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// cWorld::cTaskSendBlockTo
+
+cWorld::cTaskSendBlockToAllPlayers::cTaskSendBlockToAllPlayers(int a_BlockX, int a_BlockY, int a_BlockZ) :
+ m_BlockX(a_BlockX),
+ m_BlockY(a_BlockY),
+ m_BlockZ(a_BlockZ)
+{
+}
+
+void cWorld::cTaskSendBlockToAllPlayers::Run(cWorld & a_World)
+{
+ class cPlayerCallback :
+ public cPlayerListCallback
+ {
+ public:
+ cPlayerCallback(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld & a_World) :
+ m_BlockX(a_BlockX),
+ m_BlockY(a_BlockY),
+ m_BlockZ(a_BlockZ),
+ m_World(a_World)
+ {
+ }
+
+ virtual bool Item(cPlayer * a_Player)
+ {
+ m_World.SendBlockTo(m_BlockX, m_BlockY, m_BlockZ, a_Player);
+ return false;
+ }
+
+ private:
+
+ int m_BlockX, m_BlockY, m_BlockZ;
+ cWorld & m_World;
+
+ } PlayerCallback(m_BlockX, m_BlockY, m_BlockZ, a_World);
+
+ a_World.ForEachPlayer(PlayerCallback);
+}
+
+
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cWorld::cChunkGeneratorCallbacks:
diff --git a/src/World.h b/src/World.h
index 86cbb3e7e..5ef63a540 100644
--- a/src/World.h
+++ b/src/World.h
@@ -117,6 +117,22 @@ public:
};
+ class cTaskSendBlockToAllPlayers :
+ public cTask
+ {
+ public:
+ cTaskSendBlockToAllPlayers(int a_BlockX, int a_BlockY, int a_BlockZ);
+
+ protected:
+ // cTask overrides:
+ virtual void Run(cWorld & a_World) override;
+
+ int m_BlockX;
+ int m_BlockY;
+ int m_BlockZ;
+ };
+
+
static const char * GetClassStatic(void) // Needed for ManualBindings's ForEach templates
{
return "cWorld";
@@ -373,7 +389,7 @@ public:
/** Sets the block at the specified coords to the specified value.
Full processing, incl. updating neighbors, is performed.
*/
- void SetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
+ void SetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, bool a_SendToClients = true);
/** Sets the block at the specified coords to the specified value.
The replacement doesn't trigger block updates.
--
cgit v1.2.3
From 67308e4337b422ebefb249049e662266072b0ba2 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Sun, 25 May 2014 13:46:50 +0100
Subject: Fixed a food saturation issue
---
src/Entities/Player.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index 0eacb67f9..1e1e868e7 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -551,7 +551,7 @@ bool cPlayer::Feed(int a_Food, double a_Saturation)
}
m_FoodLevel = std::min(a_Food + m_FoodLevel, (int)MAX_FOOD_LEVEL);
- m_FoodSaturationLevel = std::min(m_FoodSaturationLevel + a_Saturation, (double)m_FoodLevel);
+ m_FoodSaturationLevel = m_FoodSaturationLevel + a_Saturation;
SendHealth();
return true;
--
cgit v1.2.3
From 50e29aba776dd6ad6296e5989faaf4642b4b6705 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sun, 25 May 2014 18:32:42 +0100
Subject: A fix that is better than #950.
---
src/GroupManager.cpp | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/GroupManager.cpp b/src/GroupManager.cpp
index 3586560bf..ba25d95ba 100644
--- a/src/GroupManager.cpp
+++ b/src/GroupManager.cpp
@@ -45,8 +45,14 @@ cGroupManager::cGroupManager()
{
LOGD("-- Loading Groups --");
- LoadGroups();
- CheckUsers();
+ if (!LoadGroups())
+ {
+ LOGWARNING("ERROR: Groups could not load!");
+ }
+ if (!CheckUsers())
+ {
+ LOGWARNING("ERROR: User file could not be found!");
+ }
LOGD("-- Groups Successfully Loaded --");
}
@@ -70,13 +76,13 @@ void cGroupManager::GenerateDefaultUsersIni(cIniFile & a_IniFile)
-void cGroupManager::CheckUsers(void)
+bool cGroupManager::CheckUsers()
{
cIniFile IniFile;
if (!IniFile.ReadFile("users.ini"))
{
GenerateDefaultUsersIni(IniFile);
- return;
+ return true;
}
int NumKeys = IniFile.GetNumKeys();
@@ -97,13 +103,15 @@ void cGroupManager::CheckUsers(void)
}
} // for itr - Split[]
} // for i - ini file keys
+ // Always return true for now, just but we can handle writefile fails later.
+ return true
}
-void cGroupManager::LoadGroups()
+bool cGroupManager::LoadGroups()
{
cIniFile IniFile;
if (!IniFile.ReadFile("groups.ini"))
@@ -180,6 +188,8 @@ void cGroupManager::LoadGroups()
}
}
}
+ // Always return true, we can handle writefile fails later.
+ return true
}
--
cgit v1.2.3
From 6ce73ada6fc1cde9cd3ee25afdca11484e77cbb0 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Sun, 25 May 2014 19:17:01 +0100
Subject: Update GroupManager.h
---
src/GroupManager.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/GroupManager.h b/src/GroupManager.h
index 9e1689a76..d42b55c4a 100644
--- a/src/GroupManager.h
+++ b/src/GroupManager.h
@@ -16,8 +16,8 @@ class cGroupManager
public:
bool ExistsGroup(const AString & a_Name);
cGroup * GetGroup(const AString & a_Name);
- void LoadGroups(void);
- void CheckUsers(void);
+ bool LoadGroups();
+ bool CheckUsers();
/** Writes the default header to the specified ini file, and saves it as "users.ini". */
static void GenerateDefaultUsersIni(cIniFile & a_IniFile);
--
cgit v1.2.3
From a352ec38958f2884d6fe12fa7320947c65d1a65f Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Sun, 25 May 2014 19:46:16 +0100
Subject: SEMICOLONS!
---
src/GroupManager.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/GroupManager.cpp b/src/GroupManager.cpp
index ba25d95ba..523697b07 100644
--- a/src/GroupManager.cpp
+++ b/src/GroupManager.cpp
@@ -104,7 +104,7 @@ bool cGroupManager::CheckUsers()
} // for itr - Split[]
} // for i - ini file keys
// Always return true for now, just but we can handle writefile fails later.
- return true
+ return true;
}
@@ -189,7 +189,7 @@ bool cGroupManager::LoadGroups()
}
}
// Always return true, we can handle writefile fails later.
- return true
+ return true;
}
--
cgit v1.2.3
From 1a742a2b52d32bd22cd57b4d462bee312717e010 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sun, 25 May 2014 23:50:16 +0200
Subject: Added support for Miners' Village.
The village contains both prefabs that snap to ground and prefabs that connect strictly via connectors.
Fixes #1027.
---
src/Generating/PieceGenerator.cpp | 13 +-
src/Generating/PieceGenerator.h | 21 +-
src/Generating/Prefab.cpp | 6 +-
src/Generating/Prefab.h | 12 +
src/Generating/Prefabs/JapaneseVillagePrefabs.cpp | 808 +++-
src/Generating/Prefabs/NetherFortPrefabs.cpp | 102 +
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 5069 ++++++++++++--------
.../Prefabs/SandFlatRoofVillagePrefabs.cpp | 111 +-
src/Generating/Prefabs/SandVillagePrefabs.cpp | 545 ++-
src/Generating/VillageGen.cpp | 45 +-
10 files changed, 4468 insertions(+), 2264 deletions(-)
diff --git a/src/Generating/PieceGenerator.cpp b/src/Generating/PieceGenerator.cpp
index 7d478f1a1..1880a20d5 100644
--- a/src/Generating/PieceGenerator.cpp
+++ b/src/Generating/PieceGenerator.cpp
@@ -286,7 +286,8 @@ cPlacedPiece::cPlacedPiece(const cPlacedPiece * a_Parent, const cPiece & a_Piece
m_Parent(a_Parent),
m_Piece(&a_Piece),
m_Coords(a_Coords),
- m_NumCCWRotations(a_NumCCWRotations)
+ m_NumCCWRotations(a_NumCCWRotations),
+ m_HasBeenMovedToGround(false)
{
m_Depth = (m_Parent == NULL) ? 0 : (m_Parent->GetDepth() + 1);
m_HitBox = a_Piece.RotateMoveHitBox(a_NumCCWRotations, a_Coords.x, a_Coords.y, a_Coords.z);
@@ -317,6 +318,16 @@ cPiece::cConnector cPlacedPiece::GetRotatedConnector(const cPiece::cConnector &
+void cPlacedPiece::MoveToGroundBy(int a_OffsetY)
+{
+ m_Coords.y += a_OffsetY;
+ m_HasBeenMovedToGround = true;
+}
+
+
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cPieceGenerator:
diff --git a/src/Generating/PieceGenerator.h b/src/Generating/PieceGenerator.h
index e396643a9..21c155c96 100644
--- a/src/Generating/PieceGenerator.h
+++ b/src/Generating/PieceGenerator.h
@@ -139,11 +139,13 @@ class cPlacedPiece
public:
cPlacedPiece(const cPlacedPiece * a_Parent, const cPiece & a_Piece, const Vector3i & a_Coords, int a_NumCCWRotations);
- const cPiece & GetPiece (void) const { return *m_Piece; }
- const Vector3i & GetCoords (void) const { return m_Coords; }
- int GetNumCCWRotations(void) const { return m_NumCCWRotations; }
- const cCuboid & GetHitBox (void) const { return m_HitBox; }
- int GetDepth (void) const { return m_Depth; }
+ const cPlacedPiece * GetParent (void) const { return m_Parent; }
+ const cPiece & GetPiece (void) const { return *m_Piece; }
+ const Vector3i & GetCoords (void) const { return m_Coords; }
+ int GetNumCCWRotations (void) const { return m_NumCCWRotations; }
+ const cCuboid & GetHitBox (void) const { return m_HitBox; }
+ int GetDepth (void) const { return m_Depth; }
+ bool HasBeenMovedToGround(void) const { return m_HasBeenMovedToGround; }
/** Returns the coords as a modifiable object. */
Vector3i & GetCoords(void) { return m_Coords; }
@@ -156,6 +158,11 @@ public:
this placement. */
cPiece::cConnector GetRotatedConnector(const cPiece::cConnector & a_Connector) const;
+ /** Moves the placed piece Y-wise by the specified offset.
+ Sets m_HasBeenMovedToGround to true, too.
+ Used eg. by village houses. */
+ void MoveToGroundBy(int a_OffsetY);
+
protected:
const cPlacedPiece * m_Parent;
const cPiece * m_Piece;
@@ -163,6 +170,10 @@ protected:
int m_NumCCWRotations;
cCuboid m_HitBox; // Hitbox of the placed piece, in world coords
int m_Depth; // Depth in the generated piece tree
+
+ /** Set to true once the piece has been moved Y-wise.
+ Used eg. by village houses. */
+ bool m_HasBeenMovedToGround;
};
typedef std::vector cPlacedPieces;
diff --git a/src/Generating/Prefab.cpp b/src/Generating/Prefab.cpp
index 05979507a..e41907325 100644
--- a/src/Generating/Prefab.cpp
+++ b/src/Generating/Prefab.cpp
@@ -127,7 +127,8 @@ cPrefab::cPrefab(const cPrefab::sDef & a_Def) :
m_MergeStrategy(a_Def.m_MergeStrategy),
m_ShouldExtendFloor(a_Def.m_ShouldExtendFloor),
m_DefaultWeight(a_Def.m_DefaultWeight),
- m_AddWeightIfSame(a_Def.m_AddWeightIfSame)
+ m_AddWeightIfSame(a_Def.m_AddWeightIfSame),
+ m_MoveToGround(a_Def.m_MoveToGround)
{
m_BlockArea[0].Create(m_Size);
CharMap cm;
@@ -149,7 +150,8 @@ cPrefab::cPrefab(const cBlockArea & a_Image, int a_AllowedRotations) :
m_MergeStrategy(cBlockArea::msOverwrite),
m_ShouldExtendFloor(false),
m_DefaultWeight(1),
- m_AddWeightIfSame(0)
+ m_AddWeightIfSame(0),
+ m_MoveToGround(false)
{
m_HitBox.p1.Set(0, 0, 0);
m_HitBox.p2.Set(m_Size.x - 1, m_Size.y - 1, m_Size.z - 1);
diff --git a/src/Generating/Prefab.h b/src/Generating/Prefab.h
index adc0e688e..8b4e4b4ef 100644
--- a/src/Generating/Prefab.h
+++ b/src/Generating/Prefab.h
@@ -82,6 +82,10 @@ public:
Can be positive or negative.
This is used e. g. to make nether bridges prefer spanning multiple segments or to penalize turrets next to each other. */
int m_AddWeightIfSame;
+
+ /** If true, the piece will be moved Y-wise so that its first connector is sitting on the terrain.
+ This is used e. g. for village houses. */
+ bool m_MoveToGround;
};
@@ -115,6 +119,10 @@ public:
/** Adds the specified connector to the list of connectors this piece supports. */
void AddConnector(int a_RelX, int a_RelY, int a_RelZ, eBlockFace a_Direction, int a_Type);
+
+ /** Returns whether the prefab should be moved Y-wise to ground before drawing, rather than staying
+ at the coords governed by the connectors. */
+ bool ShouldMoveToGround(void) const { return m_MoveToGround; }
protected:
/** Packs complete definition of a single block, for per-letter assignment. */
@@ -169,6 +177,10 @@ protected:
Can be positive or negative.
This is used e. g. to make nether bridges prefer spanning multiple segments or to penalize turrets next to each other. */
int m_AddWeightIfSame;
+
+ /** If true, the piece will be moved Y-wise so that its first connector is sitting on the terrain.
+ This is used e. g. for village houses. */
+ bool m_MoveToGround;
// cPiece overrides:
diff --git a/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp b/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp
index 2b129f520..5ec222f84 100644
--- a/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/JapaneseVillagePrefabs.cpp
@@ -122,6 +122,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Arch
@@ -385,10 +388,165 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Forge
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Garden2:
+ // The data has been exported from the gallery Plains, area index 147, ID 491, created by Aloe_vera
+ {
+ // Size:
+ 16, 5, 16, // SizeX = 16, SizeY = 5, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 4, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 8: 0\n" /* water */
+ "c: 2: 0\n" /* grass */
+ "d: 17: 1\n" /* tree */
+ "e: 13: 0\n" /* gravel */
+ "f: 31: 2\n" /* tallgrass */
+ "g: 18: 5\n" /* leaves */
+ "h: 38: 7\n" /* rose */
+ "i: 17: 9\n" /* tree */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "aaaaaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaaaaaa"
+ /* 11 */ "aaaaaaaaaaaaaaaa"
+ /* 12 */ "aaaaaaaaaaaaaaaa"
+ /* 13 */ "aaaaaaaaaaaaaaaa"
+ /* 14 */ "aaaaaaaaaaaaaaaa"
+ /* 15 */ "aaaaaaaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "aaaaaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaaa"
+ /* 6 */ "aaaabbaaaaaaaaaa"
+ /* 7 */ "aaabbbaaaaaaaaaa"
+ /* 8 */ "aaabbaaaaaaaaaaa"
+ /* 9 */ "aaaabaaaaaaaaaaa"
+ /* 10 */ "aaaaaaaaaaaaaaaa"
+ /* 11 */ "aaaaaaaaaaaaaaaa"
+ /* 12 */ "aaaaaaaaaaaaaaaa"
+ /* 13 */ "aaaaaaaaaaaaaaaa"
+ /* 14 */ "aaaaaaaaaaaaaaaa"
+ /* 15 */ "aaaaaaaaaaaaaaaa"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "cccccccccccccccc"
+ /* 1 */ "ccdccccccccdcccc"
+ /* 2 */ "cccccceecccccdcc"
+ /* 3 */ "ccccccceeccccccc"
+ /* 4 */ "cccccccceccccccc"
+ /* 5 */ "cccbbbbceccccccc"
+ /* 6 */ "cccbbbbceecccccc"
+ /* 7 */ "ccbbbbbcceeeeccc"
+ /* 8 */ "ccbbbbbccccceecc"
+ /* 9 */ "ccbbbbcccccccecc"
+ /* 10 */ "ccccbcccccccceec"
+ /* 11 */ "ccccccccccccccec"
+ /* 12 */ "ccccccccaaacccec"
+ /* 13 */ "cccccccccaccccec"
+ /* 14 */ "ccccccccccccceec"
+ /* 15 */ "cccccccccccceecc"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "......f...gg.g.."
+ /* 1 */ "..gg.....gggggg."
+ /* 2 */ "ffgg......ghgggg"
+ /* 3 */ ".............gg."
+ /* 4 */ "...........f...."
+ /* 5 */ "...........h.ff."
+ /* 6 */ ".............fh."
+ /* 7 */ "...............f"
+ /* 8 */ "................"
+ /* 9 */ ".......ff.f....."
+ /* 10 */ ".f.....ffggf...."
+ /* 11 */ ".......gggg.f..."
+ /* 12 */ ".f......iddg...."
+ /* 13 */ ".....f..gdgg...."
+ /* 14 */ "....ff...gg....."
+ /* 15 */ "................"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "...........g.g.."
+ /* 2 */ ".............gg."
+ /* 3 */ "................"
+ /* 4 */ "................"
+ /* 5 */ "................"
+ /* 6 */ "................"
+ /* 7 */ "................"
+ /* 8 */ "................"
+ /* 9 */ "................"
+ /* 10 */ ".........g......"
+ /* 11 */ "........ggg....."
+ /* 12 */ "........ggg....."
+ /* 13 */ ".........g......"
+ /* 14 */ "................"
+ /* 15 */ "................",
+
+ // Connectors:
+ "-1: 12, 3, 15: 3\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:
+ true,
+ }, // Garden2
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// HouseMid:
// The data has been exported from the gallery Plains, area index 62, ID 119, created by Aloe_vera
@@ -558,6 +716,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseMid
@@ -666,10 +827,137 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseSmall
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseSmallDblWithDoor:
+ // The data has been exported from the gallery Plains, area index 113, ID 265, created by Aloe_vera
+ {
+ // Size:
+ 11, 6, 7, // SizeX = 11, SizeY = 6, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 5, 7, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b: 17: 9\n" /* tree */
+ "c: 17: 1\n" /* tree */
+ "d: 35: 0\n" /* wool */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f:171:12\n" /* carpet */
+ "g:135: 1\n" /* 135 */
+ "h:126: 2\n" /* woodenslab */
+ "i:135: 2\n" /* 135 */
+ "j: 50: 4\n" /* torch */
+ "k: 64:12\n" /* wooddoorblock */
+ "l: 85: 0\n" /* fence */
+ "m: 19: 0\n" /* sponge */
+ "n: 44: 8\n" /* step */
+ "o: 43: 0\n" /* doubleslab */
+ "p: 44: 0\n" /* step */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "maaaaaaaaam"
+ /* 2 */ "maaaabaaaam"
+ /* 3 */ "maaaabaaaam"
+ /* 4 */ "maaaabaaaam"
+ /* 5 */ "maaaaaaaaam"
+ /* 6 */ "mmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".cdedcdddc."
+ /* 2 */ ".dfff.fffd."
+ /* 3 */ ".dgffdfhfd."
+ /* 4 */ ".diifdfffd."
+ /* 5 */ ".cdddcdddc."
+ /* 6 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ ".j...j...j."
+ /* 1 */ ".cdkdclllc."
+ /* 2 */ ".d.......l."
+ /* 3 */ ".l...l...l."
+ /* 4 */ ".d...l...l."
+ /* 5 */ ".clllclllc."
+ /* 6 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ ".nnnnnnnnn."
+ /* 1 */ "ncdddcdddcn"
+ /* 2 */ "nd...d...dn"
+ /* 3 */ "nd...d...dn"
+ /* 4 */ "nd...d...dn"
+ /* 5 */ "ncdddcdddcn"
+ /* 6 */ ".nnnnnnnnn."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "op.......po"
+ /* 1 */ "ppppppppppp"
+ /* 2 */ ".pooooooop."
+ /* 3 */ ".ponndnnop."
+ /* 4 */ ".pooooooop."
+ /* 5 */ "ppppppppppp"
+ /* 6 */ "op.......po"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "...ppppp..."
+ /* 4 */ "..........."
+ /* 5 */ "..........."
+ /* 6 */ "...........",
+
+ // Connectors:
+ "-1: 3, 1, -1: 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:
+ true,
+ }, // HouseSmallDblWithDoor
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// HouseSmallDouble:
// The data has been exported from the gallery Plains, area index 72, ID 135, created by Aloe_vera
@@ -784,10 +1072,126 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseSmallDouble
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseSmallWithDoor:
+ // The data has been exported from the gallery Plains, area index 112, ID 264, created by Aloe_vera
+ {
+ // Size:
+ 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 5, 7, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b: 17: 1\n" /* tree */
+ "c: 35: 0\n" /* wool */
+ "d: 64: 7\n" /* wooddoorblock */
+ "e: 50: 4\n" /* torch */
+ "f: 64:12\n" /* wooddoorblock */
+ "g: 85: 0\n" /* fence */
+ "h: 44: 8\n" /* step */
+ "i: 43: 0\n" /* doubleslab */
+ "j: 44: 0\n" /* step */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "maaaaam"
+ /* 2 */ "maaaaam"
+ /* 3 */ "maaaaam"
+ /* 4 */ "maaaaam"
+ /* 5 */ "maaaaam"
+ /* 6 */ "mmmmmmm"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".bcdcb."
+ /* 2 */ ".c...c."
+ /* 3 */ ".c...c."
+ /* 4 */ ".c...c."
+ /* 5 */ ".bcccb."
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ ".....e."
+ /* 1 */ ".bcfcb."
+ /* 2 */ ".g...g."
+ /* 3 */ ".g...g."
+ /* 4 */ ".g...g."
+ /* 5 */ ".bgggb."
+ /* 6 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ ".hhhhh."
+ /* 1 */ "hbcccbh"
+ /* 2 */ "hc...ch"
+ /* 3 */ "hc...ch"
+ /* 4 */ "hc...ch"
+ /* 5 */ "hbcccbh"
+ /* 6 */ ".hhhhh."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "ij...ji"
+ /* 1 */ "jjjjjjj"
+ /* 2 */ ".jiiij."
+ /* 3 */ ".jiiij."
+ /* 4 */ ".jiiij."
+ /* 5 */ "jjjjjjj"
+ /* 6 */ "ij...ji"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "......."
+ /* 3 */ "...j..."
+ /* 4 */ "......."
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "-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:
+ true,
+ }, // HouseSmallWithDoor
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// HouseWide:
// The data has been exported from the gallery Plains, area index 64, ID 121, created by STR_Warrior
@@ -929,6 +1333,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseWide
@@ -1172,6 +1579,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseWithGarden
@@ -1363,10 +1773,375 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseWithSakura1
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseWithSpa:
+ // The data has been exported from the gallery Plains, area index 73, ID 139, created by Aloe_vera
+ {
+ // Size:
+ 16, 8, 14, // SizeX = 16, SizeY = 8, SizeZ = 14
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 7, 13, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 2\n" /* wood */
+ "b: 3: 0\n" /* dirt */
+ "c: 2: 0\n" /* grass */
+ "d: 8: 0\n" /* water */
+ "e:135: 3\n" /* 135 */
+ "f:135: 1\n" /* 135 */
+ "g:113: 0\n" /* netherbrickfence */
+ "h: 17: 1\n" /* tree */
+ "i: 35: 0\n" /* wool */
+ "j:171:12\n" /* carpet */
+ "k: 64: 6\n" /* wooddoorblock */
+ "l:126: 2\n" /* woodenslab */
+ "m: 19: 0\n" /* sponge */
+ "n:135: 2\n" /* 135 */
+ "o: 64: 7\n" /* wooddoorblock */
+ "p: 50: 4\n" /* torch */
+ "q: 85: 0\n" /* fence */
+ "r: 64:12\n" /* wooddoorblock */
+ "s: 50: 3\n" /* torch */
+ "t: 44: 8\n" /* step */
+ "u: 43: 0\n" /* doubleslab */
+ "v: 44: 0\n" /* step */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".aaaaaaaaaaaaaa."
+ /* 2 */ ".aaaaaaaaaaaaaa."
+ /* 3 */ ".aaaaaaaaaaaaaa."
+ /* 4 */ ".aaaaaaaaaaaaaa."
+ /* 5 */ ".aaaaaaaaaaaaaa."
+ /* 6 */ ".aaaaaaaaaaaaaa."
+ /* 7 */ ".aaaaaabbbbbbbbb"
+ /* 8 */ ".aaaaaabbbbbbbbb"
+ /* 9 */ ".aaaaaabbbbbbbbb"
+ /* 10 */ ".aaaaaabbbbbbbbb"
+ /* 11 */ ".aaaaaabbbbbbbbb"
+ /* 12 */ ".aaaaaabbbbbbbbb"
+ /* 13 */ ".......bbbbbbbbb"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "maaaaaaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaaaaaam"
+ /* 6 */ "maaaaaaaaaaaaaam"
+ /* 7 */ "maaaaaaaaaaccccc"
+ /* 8 */ "maaaaaaacccccccc"
+ /* 9 */ "maaaaaaacccccccc"
+ /* 10 */ "maaaaaaacccccccc"
+ /* 11 */ "maaaaaaccccccccc"
+ /* 12 */ "maaaaaaccccccccc"
+ /* 13 */ "mmmmmmmccccccccc"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".aaaaaaaaaaaaaa."
+ /* 2 */ ".aaaaaaaaaaaaaa."
+ /* 3 */ ".aaaaaaaaaaaaaa."
+ /* 4 */ ".aaaaaaaaaaaaaa."
+ /* 5 */ ".aaaaaaaaaaaaaa."
+ /* 6 */ ".aaddaaaaaaaaaa."
+ /* 7 */ ".aaddaaeeef....."
+ /* 8 */ ".aaddaaf........"
+ /* 9 */ ".aaddaaf........"
+ /* 10 */ ".aaddaae........"
+ /* 11 */ ".aaddaa........."
+ /* 12 */ ".aaaaaa........."
+ /* 13 */ "................"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ ".ggggghiiihiiih."
+ /* 2 */ ".geee.ijjjjjjji."
+ /* 3 */ ".gf...kjjjijlji."
+ /* 4 */ ".gf...innjijjji."
+ /* 5 */ ".g....hiiohiiih."
+ /* 6 */ ".g....g........."
+ /* 7 */ ".g.............."
+ /* 8 */ ".g.............."
+ /* 9 */ ".g.............."
+ /* 10 */ ".g....g........."
+ /* 11 */ ".g....g........."
+ /* 12 */ ".gggggg........."
+ /* 13 */ "................"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "......p...p...p."
+ /* 1 */ ".g....hqqqhqqqh."
+ /* 2 */ "......i.......i."
+ /* 3 */ "......r...q...q."
+ /* 4 */ "......i...q...i."
+ /* 5 */ "......hqqrhqqqh."
+ /* 6 */ "......g...s....."
+ /* 7 */ "................"
+ /* 8 */ "................"
+ /* 9 */ "................"
+ /* 10 */ "................"
+ /* 11 */ "................"
+ /* 12 */ ".g....g........."
+ /* 13 */ "................"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ ".tttttttttttttt."
+ /* 1 */ "tggggghqqqhqqqht"
+ /* 2 */ "tg....i.......it"
+ /* 3 */ "tg....i...i...it"
+ /* 4 */ "tg....i...i...it"
+ /* 5 */ "tg....hiiihiiiht"
+ /* 6 */ "tg....gtttttttt."
+ /* 7 */ "tg....gt........"
+ /* 8 */ "tg....gt........"
+ /* 9 */ "tg....gt........"
+ /* 10 */ "tg....gt........"
+ /* 11 */ "tg....gt........"
+ /* 12 */ "tggggggt........"
+ /* 13 */ ".tttttt........."
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "uv............vu"
+ /* 1 */ "vvvvvvvvvvvvvvvv"
+ /* 2 */ ".vuuuuuuuuuuuuv."
+ /* 3 */ ".vuuuuuutuuuuuv."
+ /* 4 */ ".vuuuuuuuuuuuuv."
+ /* 5 */ ".vuuuuvvvvvvvvvv"
+ /* 6 */ ".vuuuuv.......vu"
+ /* 7 */ ".vuuuuv........."
+ /* 8 */ ".vuuuuv........."
+ /* 9 */ ".vuuuuv........."
+ /* 10 */ ".vuuuuv........."
+ /* 11 */ ".vuuuuv........."
+ /* 12 */ "vvvvvvvv........"
+ /* 13 */ "uv....vu........"
+
+ // Level 7
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
+ /* 2 */ "................"
+ /* 3 */ "...vvvvvvvvvv..."
+ /* 4 */ "...vv..........."
+ /* 5 */ "...vv..........."
+ /* 6 */ "...vv..........."
+ /* 7 */ "...vv..........."
+ /* 8 */ "...vv..........."
+ /* 9 */ "...vv..........."
+ /* 10 */ "...vv..........."
+ /* 11 */ "................"
+ /* 12 */ "................"
+ /* 13 */ "................",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // HouseWithSpa
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MediumSakuraTree:
+ // The data has been exported from the gallery Plains, area index 146, ID 490, created by STR_Warrior
+ {
+ // Size:
+ 7, 10, 7, // SizeX = 7, SizeY = 10, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 9, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 31: 1\n" /* tallgrass */
+ "d: 38: 7\n" /* rose */
+ "e: 17: 1\n" /* tree */
+ "f: 38: 0\n" /* rose */
+ "g: 38: 8\n" /* rose */
+ "h: 38: 5\n" /* rose */
+ "i: 35: 6\n" /* wool */
+ "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"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "bbbbbbb"
+ /* 1 */ "bbbbbbb"
+ /* 2 */ "bbbbbbb"
+ /* 3 */ "bbbabbb"
+ /* 4 */ "bbbbbbb"
+ /* 5 */ "bbbbbbb"
+ /* 6 */ "bbbbbbb"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..c.c.."
+ /* 2 */ ".dccdc."
+ /* 3 */ "..cefc."
+ /* 4 */ ".ccfgh."
+ /* 5 */ "..ccc.."
+ /* 6 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "......."
+ /* 3 */ "...e..."
+ /* 4 */ "......."
+ /* 5 */ "......."
+ /* 6 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..i...."
+ /* 2 */ "......."
+ /* 3 */ "...e.i."
+ /* 4 */ ".i....."
+ /* 5 */ "......."
+ /* 6 */ "......."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..i...."
+ /* 2 */ "...i..."
+ /* 3 */ "..ieii."
+ /* 4 */ ".i.ii.."
+ /* 5 */ "...i..."
+ /* 6 */ "......."
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..ii..."
+ /* 2 */ "..iii.."
+ /* 3 */ ".iieii."
+ /* 4 */ ".iiii.."
+ /* 5 */ "..iii.."
+ /* 6 */ "......."
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..iii.."
+ /* 2 */ ".iiiii."
+ /* 3 */ ".iieii."
+ /* 4 */ ".iiiii."
+ /* 5 */ "..iii.."
+ /* 6 */ "......."
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "...i..."
+ /* 2 */ "..iiii."
+ /* 3 */ ".iiiii."
+ /* 4 */ "..iii.."
+ /* 5 */ "...i..."
+ /* 6 */ "......."
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "...i..."
+ /* 3 */ "..iii.."
+ /* 4 */ "...i..."
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "-1: 3, 2, 0: 2\n" /* Type -1, direction Z- */
+ "3: 6, 2, 3: 5\n" /* Type 3, direction X+ */
+ "-3: 0, 2, 3: 4\n" /* Type -3, direction X- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // MediumSakuraTree
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Restaurant:
// The data has been exported from the gallery Plains, area index 61, ID 117, created by Aloe_vera
@@ -1614,6 +2389,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Restaurant
@@ -1626,8 +2404,8 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
12, 8, 6, // SizeX = 12, SizeY = 8, SizeZ = 6
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 11, 7, 5, // MaxX, MaxY, MaxZ
+ -1, 0, -1, // MinX, MinY, MinZ
+ 12, 7, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1719,7 +2497,11 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
/* 5 */ "............",
// Connectors:
- "-1: 0, 2, 2: 4\n" /* Type -1, direction X- */,
+ "-1: -1, 2, 2: 4\n" /* Type -1, direction X- */
+ "3: 5, 2, 6: 3\n" /* Type 3, direction Z+ */
+ "-3: 6, 2, -1: 2\n" /* Type -3, direction Z- */
+ "-3: 12, 2, 2: 5\n" /* Type -3, direction X+ */
+ "3: 12, 2, 2: 5\n" /* Type 3, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1738,6 +2520,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // SakuraDouble
@@ -1750,8 +2535,8 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
5, 7, 5, // SizeX = 5, SizeY = 7, SizeZ = 5
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 4, 6, 4, // MaxX, MaxY, MaxZ
+ -1, 0, -1, // MinX, MinY, MinZ
+ 5, 6, 5, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1819,7 +2604,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
/* 4 */ ".....",
// Connectors:
- "-1: 2, 2, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 2, 2, -1: 2\n" /* Type -1, direction Z- */
+ "3: 5, 2, 2: 5\n" /* Type 3, direction X+ */
+ "-3: -1, 2, 2: 4\n" /* Type -3, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1838,6 +2625,9 @@ const cPrefab::sDef g_JapaneseVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // SakuraSmall
}; // g_JapaneseVillagePrefabs
@@ -2192,6 +2982,9 @@ const cPrefab::sDef g_JapaneseVillageStartingPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HighTemple
@@ -2389,6 +3182,9 @@ const cPrefab::sDef g_JapaneseVillageStartingPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Well
};
diff --git a/src/Generating/Prefabs/NetherFortPrefabs.cpp b/src/Generating/Prefabs/NetherFortPrefabs.cpp
index 088340391..2c97f28ea 100644
--- a/src/Generating/Prefabs/NetherFortPrefabs.cpp
+++ b/src/Generating/Prefabs/NetherFortPrefabs.cpp
@@ -155,6 +155,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BalconyCorridor
@@ -315,6 +318,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BalconyTee2
@@ -435,6 +441,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BlazePlatform
@@ -605,6 +614,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BlazePlatformOverhang
@@ -805,6 +817,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-1000,
+
+ // MoveToGround:
+ false,
}, // BridgeCircleCrossing
@@ -1006,6 +1021,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BridgeCrossing
@@ -1100,6 +1118,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BridgeCrumble1
@@ -1200,6 +1221,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BridgeCrumble2
@@ -1379,6 +1403,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
1000,
+
+ // MoveToGround:
+ false,
}, // BridgeDoubleCrumble
@@ -1619,6 +1646,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BridgeFunnelDown
@@ -1948,6 +1978,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BridgeLevelCrossing
@@ -2067,6 +2100,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
1000,
+
+ // MoveToGround:
+ false,
}, // BridgeSegment
@@ -2227,6 +2263,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // BridgeTee
@@ -2328,6 +2367,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // Corridor11
@@ -2429,6 +2471,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // Corridor13
@@ -2524,6 +2569,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
500,
+
+ // MoveToGround:
+ false,
}, // Corridor5
@@ -2663,6 +2711,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // CorridorCorner5
@@ -2803,6 +2854,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // CorridorCornerChest5
@@ -2928,6 +2982,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-50,
+
+ // MoveToGround:
+ false,
}, // CorridorCrossing
@@ -3080,6 +3137,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // CorridorStairs
@@ -3181,6 +3241,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // DarkCorridor
@@ -3438,6 +3501,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // LavaStaircase
@@ -3769,6 +3835,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-1000,
+
+ // MoveToGround:
+ false,
}, // LavaStaircaseBig
@@ -4047,6 +4116,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // LavaStairsBridge
@@ -4235,6 +4307,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-1000,
+
+ // MoveToGround:
+ false,
}, // MidStaircase
@@ -4378,6 +4453,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // StairsToOpen1
@@ -4521,6 +4599,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // StairsToOpen2
@@ -4638,6 +4719,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // Tee2x4
@@ -4767,6 +4851,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // Tee4x4
@@ -4863,6 +4950,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-50,
+
+ // MoveToGround:
+ false,
}, // TinyCorridorCorner
@@ -4960,6 +5050,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // TinyCorridorCornerChest
@@ -5059,6 +5152,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-50,
+
+ // MoveToGround:
+ false,
}, // TinyCorridorCrossing
@@ -5174,6 +5270,9 @@ const cPrefab::sDef g_NetherFortPrefabs[] =
// AddWeightIfSame:
-99,
+
+ // MoveToGround:
+ false,
}, // Turret
}; // g_NetherFortPrefabs
@@ -5378,6 +5477,9 @@ const cPrefab::sDef g_NetherFortStartingPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ false,
}, // CentralRoom
};
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index 28488be14..fee6610c9 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -20,11 +20,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 26, ID 70, created by Taugrammaton
{
// Size:
- 13, 4, 12, // SizeX = 13, SizeY = 4, SizeZ = 12
+ 13, 8, 12, // SizeX = 13, SizeY = 8, SizeZ = 12
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 12, 3, 11, // MaxX, MaxY, MaxZ
+ 12, 7, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -36,6 +36,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 8: 0\n" /* water */
"g: 85: 0\n" /* fence */
"h: 59: 7\n" /* crops */
+ "i: 50: 5\n" /* torch */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -101,7 +102,71 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "ghh..h....hhg"
/* 9 */ "ghh.....h.hhg"
/* 10 */ "ghh.hh.h..hhg"
- /* 11 */ "g..g..g..g..g",
+ /* 11 */ "g..g..g..g..g"
+
+ // Level 4
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "i..i..i..i..i"
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "............."
+ /* 5 */ "............."
+ /* 6 */ "............."
+ /* 7 */ "............."
+ /* 8 */ "............."
+ /* 9 */ "............."
+ /* 10 */ "............."
+ /* 11 */ "i..i..i..i..i"
+
+ // Level 5
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "............."
+ /* 5 */ "............."
+ /* 6 */ "............."
+ /* 7 */ "............."
+ /* 8 */ "............."
+ /* 9 */ "............."
+ /* 10 */ "............."
+ /* 11 */ "............."
+
+ // Level 6
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "............."
+ /* 5 */ "............."
+ /* 6 */ "............."
+ /* 7 */ "............."
+ /* 8 */ "............."
+ /* 9 */ "............."
+ /* 10 */ "............."
+ /* 11 */ "............."
+
+ // Level 7
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "............."
+ /* 5 */ "............."
+ /* 6 */ "............."
+ /* 7 */ "............."
+ /* 8 */ "............."
+ /* 9 */ "............."
+ /* 10 */ "............."
+ /* 11 */ ".............",
// Connectors:
"-1: 7, 1, 11: 3\n" /* Type -1, direction Z+ */,
@@ -123,6 +188,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // BigPlantBed
@@ -132,130 +200,117 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 23, ID 66, created by xoft
{
// Size:
- 12, 8, 7, // SizeX = 12, SizeY = 8, SizeZ = 7
+ 12, 7, 7, // SizeX = 12, SizeY = 7, SizeZ = 7
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 12, 7, 7, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 12, 6, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 64: 7\n" /* wooddoorblock */
- "h: 53: 3\n" /* woodstairs */
- "i: 53: 1\n" /* woodstairs */
- "j: 85: 0\n" /* fence */
- "k: 53: 0\n" /* woodstairs */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 64: 7\n" /* wooddoorblock */
+ "f: 53: 3\n" /* woodstairs */
+ "g: 53: 1\n" /* woodstairs */
+ "h: 85: 0\n" /* fence */
+ "i: 53: 0\n" /* woodstairs */
+ "j: 53: 2\n" /* woodstairs */
+ "k:102: 0\n" /* glasspane */
+ "l: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */
- "n:102: 0\n" /* glasspane */
- "o: 64:12\n" /* wooddoorblock */
- "p: 50: 3\n" /* torch */
- "q: 72: 0\n" /* woodplate */
- "r: 50: 4\n" /* torch */
- "s: 53: 7\n" /* woodstairs */
- "t: 47: 0\n" /* bookshelf */
- "u: 50: 1\n" /* torch */
- "v: 50: 2\n" /* torch */
- "w: 53: 6\n" /* woodstairs */
- "x: 5: 0\n" /* wood */,
+ "n: 50: 3\n" /* torch */
+ "o: 72: 0\n" /* woodplate */
+ "p: 50: 4\n" /* torch */
+ "q: 53: 7\n" /* woodstairs */
+ "r: 47: 0\n" /* bookshelf */
+ "s: 50: 1\n" /* torch */
+ "t: 50: 2\n" /* torch */
+ "u: 53: 6\n" /* woodstairs */
+ "v: 5: 0\n" /* wood */,
// Block data:
// Level 0
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "aaaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaaa"
+ /* 0 */ "mmmmmmmaaamm"
+ /* 1 */ "maaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaam"
+ /* 6 */ "mmmmmmmmmmmm"
// Level 1
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "bbbbbbbaaabb"
- /* 1 */ "baaaaaaaaaab"
- /* 2 */ "baaaaaaaaaab"
- /* 3 */ "baaaaaaaaaab"
- /* 4 */ "baaaaaaaaaab"
- /* 5 */ "baaaaaaaaaab"
- /* 6 */ "bbbbbbbbbbbb"
+ /* 0 */ ".......bcd.."
+ /* 1 */ ".aaaaaaaaaa."
+ /* 2 */ ".aaaaaaaaaa."
+ /* 3 */ ".aaaaaaaaaa."
+ /* 4 */ ".aaaaaaaaaa."
+ /* 5 */ ".aaaaaaaaaa."
+ /* 6 */ "............"
// Level 2
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ ".......cde.."
- /* 1 */ ".ffffffffff."
- /* 2 */ ".ffffffffff."
- /* 3 */ ".ffffffffff."
- /* 4 */ ".ffffffffff."
- /* 5 */ ".ffffffffff."
+ /* 0 */ "............"
+ /* 1 */ ".aaaaaaaeaa."
+ /* 2 */ ".af.ghi...a."
+ /* 3 */ ".ah.......a."
+ /* 4 */ ".aj.ghighia."
+ /* 5 */ ".aaaaaaaaaa."
/* 6 */ "............"
// Level 3
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ ".fffffffgff."
- /* 2 */ ".fh.ijk...f."
- /* 3 */ ".fj.......f."
- /* 4 */ ".fl.ijkijkf."
- /* 5 */ ".ffffffffff."
+ /* 1 */ ".akkakkalaa."
+ /* 2 */ ".k..no.n.nk."
+ /* 3 */ ".ko.......k."
+ /* 4 */ ".k..po.po.k."
+ /* 5 */ ".akkakkakka."
/* 6 */ "............"
// Level 4
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".fnnfnnfoff."
- /* 2 */ ".n..pq.p.pn."
- /* 3 */ ".nq.......n."
- /* 4 */ ".n..rq.rq.n."
- /* 5 */ ".fnnfnnfnnf."
- /* 6 */ "............"
+ /* 0 */ "jjjjjjjjjjjj"
+ /* 1 */ "qaaaaaaaaaaq"
+ /* 2 */ ".arrrrrrrra."
+ /* 3 */ ".as......ta."
+ /* 4 */ ".arrrrrrrra."
+ /* 5 */ "uaaaaaaaaaau"
+ /* 6 */ "ffffffffffff"
// Level 5
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "llllllllllll"
- /* 1 */ "sffffffffffs"
- /* 2 */ ".fttttttttf."
- /* 3 */ ".fu......vf."
- /* 4 */ ".fttttttttf."
- /* 5 */ "wffffffffffw"
- /* 6 */ "hhhhhhhhhhhh"
-
- // Level 6
- /* z\x* 11 */
- /* * 012345678901 */
/* 0 */ "............"
- /* 1 */ "llllllllllll"
- /* 2 */ "sxxxxxxxxxxs"
- /* 3 */ ".xxxxxxxxxx."
- /* 4 */ "wxxxxxxxxxxw"
- /* 5 */ "hhhhhhhhhhhh"
+ /* 1 */ "jjjjjjjjjjjj"
+ /* 2 */ "qvvvvvvvvvvq"
+ /* 3 */ ".vvvvvvvvvv."
+ /* 4 */ "uvvvvvvvvvvu"
+ /* 5 */ "ffffffffffff"
/* 6 */ "............"
- // Level 7
+ // Level 6
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
- /* 2 */ "llllllllllll"
- /* 3 */ "xxxxxxxxxxxx"
- /* 4 */ "hhhhhhhhhhhh"
+ /* 2 */ "jjjjjjjjjjjj"
+ /* 3 */ "vvvvvvvvvvvv"
+ /* 4 */ "ffffffffffff"
/* 5 */ "............"
/* 6 */ "............",
// Connectors:
- "-1: 8, 2, 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 */
@@ -274,6 +329,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // CobbleHouse10x5Library
@@ -283,50 +341,130 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 5, ID 20, created by tonibm1999
{
// Size:
- 15, 2, 9, // SizeX = 15, SizeY = 2, SizeZ = 9
+ 15, 8, 9, // SizeX = 15, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 14, 1, 8, // MaxX, MaxY, MaxZ
+ 14, 7, 8, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 17: 0\n" /* tree */
- "b: 60: 7\n" /* tilleddirt */
- "c: 8: 0\n" /* water */
- "d: 50: 5\n" /* torch */
- "e: 59: 7\n" /* crops */
+ "a: 3: 0\n" /* dirt */
+ "b: 2: 0\n" /* grass */
+ "c: 17: 0\n" /* tree */
+ "d: 60: 7\n" /* tilleddirt */
+ "e: 8: 0\n" /* water */
+ "f: 50: 5\n" /* torch */
+ "g: 59: 7\n" /* crops */
"m: 19: 0\n" /* sponge */,
// Block data:
// Level 0
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "aaaaaaa.aaaaaaa"
- /* 1 */ "abbcbba.abbcbba"
- /* 2 */ "abbcbba.abbcbba"
- /* 3 */ "abbcbba.abbcbba"
- /* 4 */ "abbcbba.abbcbba"
- /* 5 */ "abbcbba.abbcbba"
- /* 6 */ "abbcbba.abbcbba"
- /* 7 */ "abbcbba.abbcbba"
- /* 8 */ "aaaaaaa.aaaaaaa"
+ /* 0 */ "aaaaaaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaaaaaa"
+ /* 3 */ "aaaaaaaaaaaaaaa"
+ /* 4 */ "aaaaaaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaaaaaa"
+ /* 7 */ "aaaaaaaaaaaaaaa"
+ /* 8 */ "aaaaaaaaaaaaaaa"
// Level 1
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "d.....d.d.....d"
- /* 1 */ ".ee.ee...ee.ee."
- /* 2 */ ".e...e...ee.ee."
- /* 3 */ ".e.......ee.ee."
- /* 4 */ ".ee..e...ee.ee."
- /* 5 */ ".ee..e...ee.ee."
- /* 6 */ "..e..e...ee.ee."
- /* 7 */ "..e.e....ee.ee."
- /* 8 */ "d.....d.d.....d",
+ /* 0 */ "aaaaaaabaaaaaaa"
+ /* 1 */ "aaaaaaabaaaaaaa"
+ /* 2 */ "aaaaaaabaaaaaaa"
+ /* 3 */ "aaaaaaabaaaaaaa"
+ /* 4 */ "aaaaaaabaaaaaaa"
+ /* 5 */ "aaaaaaabaaaaaaa"
+ /* 6 */ "aaaaaaabaaaaaaa"
+ /* 7 */ "aaaaaaabaaaaaaa"
+ /* 8 */ "aaaaaaabaaaaaaa"
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "ccccccc.ccccccc"
+ /* 1 */ "cddeddc.cddeddc"
+ /* 2 */ "cddeddc.cddeddc"
+ /* 3 */ "cddeddc.cddeddc"
+ /* 4 */ "cddeddc.cddeddc"
+ /* 5 */ "cddeddc.cddeddc"
+ /* 6 */ "cddeddc.cddeddc"
+ /* 7 */ "cddeddc.cddeddc"
+ /* 8 */ "ccccccc.ccccccc"
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "f.....f.f.....f"
+ /* 1 */ ".gg.gg...gg.gg."
+ /* 2 */ ".g...g...gg.gg."
+ /* 3 */ ".g.......gg.gg."
+ /* 4 */ ".gg..g...gg.gg."
+ /* 5 */ ".gg..g...gg.gg."
+ /* 6 */ "..g..g...gg.gg."
+ /* 7 */ "..g.g....gg.gg."
+ /* 8 */ "f.....f.f.....f"
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "..............."
+ /* 4 */ "..............."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "...............",
// Connectors:
- "-1: 7, 0, 8: 3\n" /* Type -1, direction Z+ */,
+ "-1: 7, 2, 8: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -345,6 +483,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // DoublePlantBed
@@ -354,193 +495,176 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 51, ID 102, created by Aloe_vera
{
// Size:
- 12, 10, 11, // SizeX = 12, SizeY = 10, SizeZ = 11
+ 12, 9, 11, // SizeX = 12, SizeY = 9, SizeZ = 11
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 12, 9, 11, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 12, 8, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 6\n" /* wooddoorblock */
- "j: 10: 0\n" /* lava */
- "k: 54: 2\n" /* chest */
- "l: 61: 2\n" /* furnace */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 6\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 */
"m: 19: 0\n" /* sponge */
- "n:102: 0\n" /* glasspane */
- "o: 64:12\n" /* wooddoorblock */
- "p:139: 0\n" /* cobblestonewall */
- "q:101: 0\n" /* ironbars */
- "r: 53: 2\n" /* woodstairs */
- "s: 53: 7\n" /* woodstairs */
- "t: 50: 2\n" /* torch */
- "u: 50: 1\n" /* torch */
- "v: 53: 6\n" /* woodstairs */
- "w: 53: 3\n" /* woodstairs */
- "x: 43: 0\n" /* doubleslab */
- "y: 44: 0\n" /* step */,
+ "n:139: 0\n" /* cobblestonewall */
+ "o:101: 0\n" /* ironbars */
+ "p: 53: 2\n" /* woodstairs */
+ "q: 53: 7\n" /* woodstairs */
+ "r: 50: 2\n" /* torch */
+ "s: 50: 1\n" /* torch */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */
+ "v: 43: 0\n" /* doubleslab */
+ "w: 44: 0\n" /* step */,
// Block data:
// Level 0
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "aaaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaaa"
- /* 9 */ "aaaaaaaaaaaa"
- /* 10 */ "aaaaaaaaaaaa"
+ /* 0 */ "mmmmmaaaaamm"
+ /* 1 */ "maaaaaaaaamm"
+ /* 2 */ "maaaaaaaaamm"
+ /* 3 */ "maaaaaaaaaaa"
+ /* 4 */ "maaaaaaaaaaa"
+ /* 5 */ "maaaaaaaaaaa"
+ /* 6 */ "maaaaaaaaaaa"
+ /* 7 */ "maaaaaaaaaaa"
+ /* 8 */ "maaaaammmmmm"
+ /* 9 */ "maaaaammmmmm"
+ /* 10 */ "mmmmmmmmmmmm"
// Level 1
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "bbbbbaaaaabb"
- /* 1 */ "baaaaaaaaabb"
- /* 2 */ "baaaaaaaaabb"
- /* 3 */ "baaaaaaaaaaa"
- /* 4 */ "baaaaaaaaaaa"
- /* 5 */ "baaaaaaaaaaa"
- /* 6 */ "baaaaaaaaaaa"
- /* 7 */ "baaaaaaaaaaa"
- /* 8 */ "baaaaabbbbbb"
- /* 9 */ "baaaaabbbbbb"
- /* 10 */ "bbbbbbbbbbbb"
+ /* 0 */ ".....bcccd.."
+ /* 1 */ ".aaaaaaaad.."
+ /* 2 */ ".aaaaaaaad.."
+ /* 3 */ ".aaaaaaaaaaa"
+ /* 4 */ ".aaaaaaaaaaa"
+ /* 5 */ ".aaaaaaaaaaa"
+ /* 6 */ ".aaaaaaaaaaa"
+ /* 7 */ ".aaaaaaaaaaa"
+ /* 8 */ ".aaaaa......"
+ /* 9 */ ".aaaaa......"
+ /* 10 */ "............"
// Level 2
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ ".....cddde.."
- /* 1 */ ".ffffffffe.."
- /* 2 */ ".ffffffffe.."
- /* 3 */ ".fffffffffff"
- /* 4 */ ".fffffffffff"
- /* 5 */ ".fffffffffff"
- /* 6 */ ".fffffffffff"
- /* 7 */ ".fffffffffff"
- /* 8 */ ".fffff.mmmmm"
- /* 9 */ ".fffff.mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 0 */ "............"
+ /* 1 */ ".efffe......"
+ /* 2 */ ".f...g......"
+ /* 3 */ ".f...ea..aaa"
+ /* 4 */ ".f...f...aha"
+ /* 5 */ ".f...f...aha"
+ /* 6 */ ".f...fijjaha"
+ /* 7 */ ".f...eaaaaaa"
+ /* 8 */ ".f...f......"
+ /* 9 */ ".efffe......"
+ /* 10 */ "............"
// Level 3
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ ".ghhhg......"
- /* 2 */ ".h...i......"
- /* 3 */ ".h...gf..fff"
- /* 4 */ ".h...h...fjf"
- /* 5 */ ".h...h...fjf"
- /* 6 */ ".h...hkllfjf"
- /* 7 */ ".h...gffffff"
- /* 8 */ ".h...h.mmmmm"
- /* 9 */ ".ghhhg.mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 1 */ ".ekkke......"
+ /* 2 */ ".k...l......"
+ /* 3 */ ".k...en..n.a"
+ /* 4 */ ".k...k.....o"
+ /* 5 */ ".f...k.....o"
+ /* 6 */ ".k...k.....o"
+ /* 7 */ ".k...eaooooa"
+ /* 8 */ ".k...f......"
+ /* 9 */ ".ekkke......"
+ /* 10 */ "............"
// Level 4
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".gnnng......"
- /* 2 */ ".n...o......"
- /* 3 */ ".n...gp..p.f"
- /* 4 */ ".n...n.....q"
- /* 5 */ ".h...n.....q"
- /* 6 */ ".n...n.....q"
- /* 7 */ ".n...gfqqqqf"
- /* 8 */ ".n...h.mmmmm"
- /* 9 */ ".gnnng.mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 0 */ "ppppppp....."
+ /* 1 */ "qfffffq....."
+ /* 2 */ ".f...f......"
+ /* 3 */ ".f..rfa..aoa"
+ /* 4 */ ".f...f...o.a"
+ /* 5 */ ".f...f...o.a"
+ /* 6 */ ".fs..f...o.a"
+ /* 7 */ ".f...faaaaaa"
+ /* 8 */ ".f...f......"
+ /* 9 */ "tffffft....."
+ /* 10 */ "uuuuuuu....."
// Level 5
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "rrrrrrr....."
- /* 1 */ "shhhhhs....."
- /* 2 */ ".h...h......"
- /* 3 */ ".h..thf..fqf"
- /* 4 */ ".h...h...q.f"
- /* 5 */ ".h...h...q.f"
- /* 6 */ ".hu..h...q.f"
- /* 7 */ ".h...hffffff"
- /* 8 */ ".h...h.mmmmm"
- /* 9 */ "vhhhhhvmmmmm"
- /* 10 */ "wwwwwwwmmmmm"
-
- // Level 6
- /* z\x* 11 */
- /* * 012345678901 */
/* 0 */ "............"
- /* 1 */ "rrrrrrr....."
- /* 2 */ "shhhhhs....."
- /* 3 */ ".h...hxxxxxx"
- /* 4 */ ".h...hxyyyyx"
- /* 5 */ ".h...hxyyyyx"
- /* 6 */ ".h...hxyyyyx"
- /* 7 */ ".h...hxxxxxx"
- /* 8 */ "vhhhhhvmmmmm"
- /* 9 */ "wwwwwwwmmmmm"
- /* 10 */ ".......mmmmm"
+ /* 1 */ "ppppppp....."
+ /* 2 */ "qfffffq....."
+ /* 3 */ ".f...fvvvvvv"
+ /* 4 */ ".f...fvwwwwv"
+ /* 5 */ ".f...fvwwwwv"
+ /* 6 */ ".f...fvwwwwv"
+ /* 7 */ ".f...fvvvvvv"
+ /* 8 */ "tffffft....."
+ /* 9 */ "uuuuuuu....."
+ /* 10 */ "............"
- // Level 7
+ // Level 6
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
- /* 2 */ "rrrrrrr....."
- /* 3 */ "shhhhhs....."
- /* 4 */ ".h...h......"
- /* 5 */ ".h...h......"
- /* 6 */ ".h...h......"
- /* 7 */ "vhhhhhv....."
- /* 8 */ "wwwwwwwmmmmm"
- /* 9 */ ".......mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 2 */ "ppppppp....."
+ /* 3 */ "qfffffq....."
+ /* 4 */ ".f...f......"
+ /* 5 */ ".f...f......"
+ /* 6 */ ".f...f......"
+ /* 7 */ "tffffft....."
+ /* 8 */ "uuuuuuu....."
+ /* 9 */ "............"
+ /* 10 */ "............"
- // Level 8
+ // Level 7
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
/* 2 */ "............"
- /* 3 */ "rrrrrrr....."
- /* 4 */ "shhhhhs....."
- /* 5 */ ".h...h......"
- /* 6 */ "vhhhhhv....."
- /* 7 */ "wwwwwww....."
- /* 8 */ ".......mmmmm"
- /* 9 */ ".......mmmmm"
- /* 10 */ ".......mmmmm"
+ /* 3 */ "ppppppp....."
+ /* 4 */ "qfffffq....."
+ /* 5 */ ".f...f......"
+ /* 6 */ "tffffft....."
+ /* 7 */ "uuuuuuu....."
+ /* 8 */ "............"
+ /* 9 */ "............"
+ /* 10 */ "............"
- // Level 9
+ // Level 8
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
/* 2 */ "............"
/* 3 */ "............"
- /* 4 */ "rrrrrrr....."
- /* 5 */ "hhhhhhh....."
- /* 6 */ "wwwwwww....."
+ /* 4 */ "ppppppp....."
+ /* 5 */ "fffffff....."
+ /* 6 */ "uuuuuuu....."
/* 7 */ "............"
- /* 8 */ ".......mmmmm"
- /* 9 */ ".......mmmmm"
- /* 10 */ ".......mmmmm",
+ /* 8 */ "............"
+ /* 9 */ "............"
+ /* 10 */ "............",
// Connectors:
- "-1: 7, 2, -1: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 1, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -559,20 +683,484 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Forge
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LampPost:
+ // The data has been exported from the gallery Plains, area index 28, ID 73, created by STR_Warrior
+ {
+ // Size:
+ 3, 7, 3, // SizeX = 3, SizeY = 7, SizeZ = 3
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 2, 6, 2, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 3: 0\n" /* dirt */
+ "b: 43: 0\n" /* doubleslab */
+ "c:139: 0\n" /* cobblestonewall */
+ "d: 50: 4\n" /* torch */
+ "e: 50: 2\n" /* torch */
+ "f: 50: 1\n" /* torch */
+ "g: 50: 3\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012 */
+ /* 0 */ "mmm"
+ /* 1 */ "mam"
+ /* 2 */ "mmm"
+
+ // Level 1
+ /* z\x* 012 */
+ /* 0 */ "..."
+ /* 1 */ ".b."
+ /* 2 */ "..."
+
+ // Level 2
+ /* z\x* 012 */
+ /* 0 */ "..."
+ /* 1 */ ".c."
+ /* 2 */ "..."
+
+ // Level 3
+ /* z\x* 012 */
+ /* 0 */ "..."
+ /* 1 */ ".c."
+ /* 2 */ "..."
+
+ // Level 4
+ /* z\x* 012 */
+ /* 0 */ ".d."
+ /* 1 */ "ebf"
+ /* 2 */ ".g."
+
+ // Level 5
+ /* z\x* 012 */
+ /* 0 */ "..."
+ /* 1 */ "..."
+ /* 2 */ "..."
+
+ // Level 6
+ /* z\x* 012 */
+ /* 0 */ "..."
+ /* 1 */ "..."
+ /* 2 */ "...",
+
+ // Connectors:
+ "-1: 1, 1, 2: 3\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:
+ true,
+ }, // LampPost
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftCorridor:
+ // The data has been exported from the gallery Plains, area index 139, ID 447, created by STR_Warrior
+ {
+ // Size:
+ 10, 4, 3, // SizeX = 10, SizeY = 4, SizeZ = 3
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 3, 2, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 85: 0\n" /* fence */
+ "c: 50: 2\n" /* torch */
+ "d: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "aaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaa"
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "..b....b.."
+ /* 1 */ ".........."
+ /* 2 */ "..b....b.."
+
+ // Level 2
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "..b....b.."
+ /* 1 */ ".........."
+ /* 2 */ "..b....b.."
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "..a....a.."
+ /* 1 */ ".cad..cad."
+ /* 2 */ "..a....a..",
+
+ // Connectors:
+ "-3: 0, 1, 1: 4\n" /* Type -3, direction X- */
+ "3: 0, 1, 1: 4\n" /* Type 3, direction X- */
+ "3: 9, 1, 1: 5\n" /* Type 3, direction X+ */
+ "-3: 9, 1, 1: 5\n" /* Type -3, direction X+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 200,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftCorridor
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftCrossing:
+ // The data has been exported from the gallery Plains, area index 171, ID 578, created by Aloe_vera
+ {
+ // Size:
+ 5, 4, 5, // SizeX = 5, SizeY = 4, SizeZ = 5
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 3, 4, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aaaaa"
+ /* 3 */ "aaaaa"
+ /* 4 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m",
+
+ // Connectors:
+ "3: 4, 1, 2: 5\n" /* Type 3, direction X+ */
+ "-3: 4, 1, 2: 5\n" /* Type -3, direction X+ */
+ "-3: 2, 1, 4: 3\n" /* Type -3, direction Z+ */
+ "3: 2, 1, 4: 3\n" /* Type 3, direction Z+ */
+ "3: 0, 1, 2: 4\n" /* Type 3, direction X- */
+ "-3: 0, 1, 2: 4\n" /* Type -3, direction X- */
+ "3: 2, 1, 0: 2\n" /* Type 3, direction Z- */
+ "-3: 2, 1, 0: 2\n" /* Type -3, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 5,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftCrossing
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftDoubleCrossing:
+ // The data has been exported from the gallery Plains, area index 172, ID 579, created by Aloe_vera
+ {
+ // Size:
+ 5, 8, 5, // SizeX = 5, SizeY = 8, SizeZ = 5
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 7, 4, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aaaaa"
+ /* 3 */ "aaaaa"
+ /* 4 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aa.aa"
+ /* 2 */ "a...a"
+ /* 3 */ "aa.aa"
+ /* 4 */ "aaaaa"
+
+ // Level 5
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 6
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m"
+
+ // Level 7
+ /* z\x* 01234 */
+ /* 0 */ "m...m"
+ /* 1 */ ".a.a."
+ /* 2 */ "....."
+ /* 3 */ ".a.a."
+ /* 4 */ "m...m",
+
+ // Connectors:
+ "-3: 4, 5, 2: 5\n" /* Type -3, direction X+ */
+ "3: 4, 5, 2: 5\n" /* Type 3, direction X+ */
+ "-3: 2, 1, 4: 3\n" /* Type -3, direction Z+ */
+ "3: 2, 1, 4: 3\n" /* Type 3, direction Z+ */
+ "-3: 0, 1, 2: 4\n" /* Type -3, direction X- */
+ "3: 0, 1, 2: 4\n" /* Type 3, direction X- */
+ "-3: 2, 1, 0: 2\n" /* Type -3, direction Z- */
+ "3: 2, 1, 0: 2\n" /* Type 3, direction Z- */
+ "-3: 4, 1, 2: 5\n" /* Type -3, direction X+ */
+ "3: 4, 1, 2: 5\n" /* Type 3, direction X+ */
+ "-3: 2, 5, 4: 3\n" /* Type -3, direction Z+ */
+ "3: 2, 5, 4: 3\n" /* Type 3, direction Z+ */
+ "-3: 0, 5, 2: 4\n" /* Type -3, direction X- */
+ "3: 0, 5, 2: 4\n" /* Type 3, direction X- */
+ "-3: 2, 5, 0: 2\n" /* Type -3, direction Z- */
+ "3: 2, 5, 0: 2\n" /* Type 3, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 5,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftDoubleCrossing
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Scarecrow:
+ // The data has been exported from the gallery Plains, area index 150, ID 494, created by STR_Warrior
+ {
+ // Size:
+ 1, 6, 3, // SizeX = 1, SizeY = 6, SizeZ = 3
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 0, 5, 2, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a:139: 0\n" /* cobblestonewall */
+ "b: 85: 0\n" /* fence */
+ "c:126: 4\n" /* woodenslab */
+ "d: 86: 1\n" /* pumpkin */
+ "e:139: 1\n" /* cobblestonewall */
+ "f:163: 4\n" /* acaciawoodenstairs */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0 */
+ /* 0 */ "."
+ /* 1 */ "a"
+ /* 2 */ "."
+
+ // Level 1
+ /* z\x* 0 */
+ /* 0 */ "."
+ /* 1 */ "b"
+ /* 2 */ "."
+
+ // Level 2
+ /* z\x* 0 */
+ /* 0 */ "c"
+ /* 1 */ "d"
+ /* 2 */ "c"
+
+ // Level 3
+ /* z\x* 0 */
+ /* 0 */ "."
+ /* 1 */ "e"
+ /* 2 */ "."
+
+ // Level 4
+ /* z\x* 0 */
+ /* 0 */ "f"
+ /* 1 */ "d"
+ /* 2 */ "f"
+
+ // Level 5
+ /* z\x* 0 */
+ /* 0 */ "."
+ /* 1 */ "f"
+ /* 2 */ ".",
+
+ // Connectors:
+ "-1: -1, 0, 1: 4\n" /* Type -1, direction X- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 10,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // Scarecrow
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SinglePlantBed:
// The data has been exported from the gallery Plains, area index 17, ID 60, created by Aloe_vera
{
// Size:
- 10, 3, 7, // SizeX = 10, SizeY = 3, SizeZ = 7
+ 10, 7, 7, // SizeX = 10, SizeY = 7, SizeZ = 7
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 9, 2, 6, // MaxX, MaxY, MaxZ
+ 9, 6, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -615,6 +1203,50 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 3 */ ".........."
/* 4 */ ".eeeeeeee."
/* 5 */ ".eeeeeeee."
+ /* 6 */ ".........."
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".........."
+ /* 2 */ ".........."
+ /* 3 */ ".........."
+ /* 4 */ ".........."
+ /* 5 */ ".........."
+ /* 6 */ ".........."
+
+ // Level 4
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".........."
+ /* 2 */ ".........."
+ /* 3 */ ".........."
+ /* 4 */ ".........."
+ /* 5 */ ".........."
+ /* 6 */ ".........."
+
+ // Level 5
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".........."
+ /* 2 */ ".........."
+ /* 3 */ ".........."
+ /* 4 */ ".........."
+ /* 5 */ ".........."
+ /* 6 */ ".........."
+
+ // Level 6
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ ".........."
+ /* 1 */ ".........."
+ /* 2 */ ".........."
+ /* 3 */ ".........."
+ /* 4 */ ".........."
+ /* 5 */ ".........."
/* 6 */ "..........",
// Connectors:
@@ -637,6 +1269,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // SinglePlantBed
@@ -646,182 +1281,164 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 58, ID 109, created by Aloe_vera
{
// Size:
- 7, 16, 13, // SizeX = 7, SizeY = 16, SizeZ = 13
+ 7, 15, 13, // SizeX = 7, SizeY = 15, SizeZ = 13
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 7, 15, 13, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 7, 14, 13, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A: 54: 2\n" /* chest */
- "B: 50: 4\n" /* torch */
- "C: 85: 0\n" /* fence */
- "D:126: 8\n" /* woodenslab */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j: 65: 3\n" /* ladder */
- "k: 53: 3\n" /* woodstairs */
- "l: 53: 7\n" /* woodstairs */
+ "A: 85: 0\n" /* fence */
+ "B:126: 8\n" /* woodenslab */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h: 65: 3\n" /* ladder */
+ "i: 53: 3\n" /* woodstairs */
+ "j: 53: 7\n" /* woodstairs */
+ "k: 64:12\n" /* wooddoorblock */
+ "l:102: 0\n" /* glasspane */
"m: 19: 0\n" /* sponge */
- "n: 64:12\n" /* wooddoorblock */
- "o:102: 0\n" /* glasspane */
- "p: 50: 1\n" /* torch */
- "q: 50: 2\n" /* torch */
- "r:171:14\n" /* carpet */
- "s: 50: 3\n" /* torch */
- "t: 53: 2\n" /* woodstairs */
- "u: 53: 0\n" /* woodstairs */
- "v: 53: 1\n" /* woodstairs */
- "w: 53: 5\n" /* woodstairs */
- "x: 53: 4\n" /* woodstairs */
- "y: 17: 4\n" /* tree */
- "z: 17: 8\n" /* tree */,
+ "n: 50: 1\n" /* torch */
+ "o: 50: 2\n" /* torch */
+ "p:171:14\n" /* carpet */
+ "q: 50: 3\n" /* torch */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 0\n" /* woodstairs */
+ "t: 53: 1\n" /* woodstairs */
+ "u: 53: 5\n" /* woodstairs */
+ "v: 53: 4\n" /* woodstairs */
+ "w: 17: 4\n" /* tree */
+ "x: 17: 8\n" /* tree */
+ "y: 54: 2\n" /* chest */
+ "z: 50: 4\n" /* torch */,
// Block data:
// Level 0
/* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "aaaaaaa"
- /* 2 */ "aaaaaaa"
- /* 3 */ "aaaaaaa"
- /* 4 */ "aaaaaaa"
- /* 5 */ "aaaaaaa"
- /* 6 */ "aaaaaaa"
- /* 7 */ "aaaaaaa"
- /* 8 */ "aaaaaaa"
- /* 9 */ "aaaaaaa"
- /* 10 */ "aaaaaaa"
- /* 11 */ "aaaaaaa"
- /* 12 */ "aaaaaaa"
+ /* 0 */ "mmaaamm"
+ /* 1 */ "maaaaam"
+ /* 2 */ "maaaaam"
+ /* 3 */ "maaaaam"
+ /* 4 */ "maaaaam"
+ /* 5 */ "maaaaam"
+ /* 6 */ "maaaaam"
+ /* 7 */ "maaaaam"
+ /* 8 */ "maaaaam"
+ /* 9 */ "maaaaam"
+ /* 10 */ "maaaaam"
+ /* 11 */ "maaaaam"
+ /* 12 */ "mmmmmmm"
// Level 1
/* z\x* 0123456 */
- /* 0 */ "bbaaabb"
- /* 1 */ "baaaaab"
- /* 2 */ "baaaaab"
- /* 3 */ "baaaaab"
- /* 4 */ "baaaaab"
- /* 5 */ "baaaaab"
- /* 6 */ "baaaaab"
- /* 7 */ "baaaaab"
- /* 8 */ "baaaaab"
- /* 9 */ "baaaaab"
- /* 10 */ "baaaaab"
- /* 11 */ "baaaaab"
- /* 12 */ "bbbbbbb"
+ /* 0 */ "..bcd.."
+ /* 1 */ ".aaaaa."
+ /* 2 */ ".aaaaa."
+ /* 3 */ ".aaaaa."
+ /* 4 */ ".aaaaa."
+ /* 5 */ ".aaaaa."
+ /* 6 */ ".aaaaa."
+ /* 7 */ ".aaaaa."
+ /* 8 */ ".aaaaa."
+ /* 9 */ ".aaaaa."
+ /* 10 */ ".aaaaa."
+ /* 11 */ ".aaaaa."
+ /* 12 */ "......."
// Level 2
/* z\x* 0123456 */
- /* 0 */ "..cde.."
- /* 1 */ ".fffff."
- /* 2 */ ".fffff."
- /* 3 */ ".fffff."
- /* 4 */ ".fffff."
- /* 5 */ ".fffff."
- /* 6 */ ".fffff."
- /* 7 */ ".fffff."
- /* 8 */ ".fffff."
- /* 9 */ ".fffff."
- /* 10 */ ".fffff."
- /* 11 */ ".fffff."
+ /* 0 */ "......."
+ /* 1 */ ".efgfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ ".ei.ie."
+ /* 6 */ ".f...f."
+ /* 7 */ ".fi.if."
+ /* 8 */ ".f...f."
+ /* 9 */ ".f.j.f."
+ /* 10 */ ".f...f."
+ /* 11 */ ".efffe."
/* 12 */ "......."
// Level 3
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ghihg."
- /* 2 */ ".h..jh."
- /* 3 */ ".h...h."
- /* 4 */ ".h...h."
- /* 5 */ ".gk.kg."
- /* 6 */ ".h...h."
- /* 7 */ ".hk.kh."
- /* 8 */ ".h...h."
- /* 9 */ ".h.l.h."
- /* 10 */ ".h...h."
- /* 11 */ ".ghhhg."
+ /* 1 */ ".efkfe."
+ /* 2 */ ".l..hl."
+ /* 3 */ ".l...l."
+ /* 4 */ ".l...l."
+ /* 5 */ ".e...e."
+ /* 6 */ ".l...l."
+ /* 7 */ ".l...l."
+ /* 8 */ ".fn.of."
+ /* 9 */ ".l.p.l."
+ /* 10 */ ".l...l."
+ /* 11 */ ".ellle."
/* 12 */ "......."
// Level 4
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ghnhg."
- /* 2 */ ".o..jo."
- /* 3 */ ".o...o."
- /* 4 */ ".o...o."
- /* 5 */ ".g...g."
- /* 6 */ ".o...o."
- /* 7 */ ".o...o."
- /* 8 */ ".hp.qh."
- /* 9 */ ".o.r.o."
- /* 10 */ ".o...o."
- /* 11 */ ".gooog."
- /* 12 */ "......."
+ /* 1 */ ".efffe."
+ /* 2 */ ".f.qhf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ "re...er"
+ /* 6 */ "sf...ft"
+ /* 7 */ "sf...ft"
+ /* 8 */ "sf...ft"
+ /* 9 */ "sf...ft"
+ /* 10 */ "sf...ft"
+ /* 11 */ "sefffet"
+ /* 12 */ "su...vt"
// Level 5
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ghhhg."
- /* 2 */ ".h.sjh."
- /* 3 */ ".h...h."
- /* 4 */ ".h...h."
- /* 5 */ "tg...gt"
- /* 6 */ "uh...hv"
- /* 7 */ "uh...hv"
- /* 8 */ "uh...hv"
- /* 9 */ "uh...hv"
- /* 10 */ "uh...hv"
- /* 11 */ "ughhhgv"
- /* 12 */ "uw...xv"
+ /* 1 */ ".ewwwe."
+ /* 2 */ ".xffhx."
+ /* 3 */ ".xfffx."
+ /* 4 */ ".xfffx."
+ /* 5 */ ".ewwwe."
+ /* 6 */ ".sf.ft."
+ /* 7 */ ".sf.ft."
+ /* 8 */ ".sf.ft."
+ /* 9 */ ".sf.ft."
+ /* 10 */ ".sf.ft."
+ /* 11 */ ".sffft."
+ /* 12 */ ".su.vt."
// Level 6
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".gyyyg."
- /* 2 */ ".zhhjz."
- /* 3 */ ".zhhhz."
- /* 4 */ ".zhhhz."
- /* 5 */ ".gyyyg."
- /* 6 */ ".uh.hv."
- /* 7 */ ".uh.hv."
- /* 8 */ ".uh.hv."
- /* 9 */ ".uh.hv."
- /* 10 */ ".uh.hv."
- /* 11 */ ".uhhhv."
- /* 12 */ ".uw.xv."
+ /* 1 */ ".eflfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f.y.f."
+ /* 5 */ ".efffe."
+ /* 6 */ "..sft.."
+ /* 7 */ "..sft.."
+ /* 8 */ "..sft.."
+ /* 9 */ "..sft.."
+ /* 10 */ "..sft.."
+ /* 11 */ "..sft.."
+ /* 12 */ "..sft.."
// Level 7
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ghohg."
- /* 2 */ ".h..jh."
- /* 3 */ ".h...h."
- /* 4 */ ".h.A.h."
- /* 5 */ ".ghhhg."
- /* 6 */ "..uhv.."
- /* 7 */ "..uhv.."
- /* 8 */ "..uhv.."
- /* 9 */ "..uhv.."
- /* 10 */ "..uhv.."
- /* 11 */ "..uhv.."
- /* 12 */ "..uhv.."
-
- // Level 8
- /* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".ghohg."
- /* 2 */ ".h..jh."
- /* 3 */ ".o...o."
- /* 4 */ ".h...h."
- /* 5 */ ".ghhhg."
+ /* 1 */ ".eflfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".l...l."
+ /* 4 */ ".f...f."
+ /* 5 */ ".efffe."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -830,14 +1447,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 9
+ // Level 8
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ghohg."
- /* 2 */ ".h..jh."
- /* 3 */ ".h...h."
- /* 4 */ ".h.B.h."
- /* 5 */ ".ghhhg."
+ /* 1 */ ".eflfe."
+ /* 2 */ ".f..hf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f.z.f."
+ /* 5 */ ".efffe."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -846,14 +1463,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 10
+ // Level 9
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".gyyyg."
- /* 2 */ ".zhhjz."
- /* 3 */ ".zhhhz."
- /* 4 */ ".zhhhz."
- /* 5 */ ".gyyyg."
+ /* 1 */ ".ewwwe."
+ /* 2 */ ".xffhx."
+ /* 3 */ ".xfffx."
+ /* 4 */ ".xfffx."
+ /* 5 */ ".ewwwe."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -862,14 +1479,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 11
+ // Level 10
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".gCCCg."
- /* 2 */ ".C...C."
- /* 3 */ ".C...C."
- /* 4 */ ".C...C."
- /* 5 */ ".gCCCg."
+ /* 1 */ ".eAAAe."
+ /* 2 */ ".A...A."
+ /* 3 */ ".A...A."
+ /* 4 */ ".A...A."
+ /* 5 */ ".eAAAe."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -878,14 +1495,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 12
+ // Level 11
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".g...g."
+ /* 1 */ ".e...e."
/* 2 */ "......."
/* 3 */ "......."
/* 4 */ "......."
- /* 5 */ ".g...g."
+ /* 5 */ ".e...e."
/* 6 */ "......."
/* 7 */ "......."
/* 8 */ "......."
@@ -894,15 +1511,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 13
+ // Level 12
/* z\x* 0123456 */
- /* 0 */ "uw...xv"
- /* 1 */ "ughhhgv"
- /* 2 */ "uhDDDhv"
- /* 3 */ "uhDDDhv"
- /* 4 */ "uhDDDhv"
- /* 5 */ "ughhhgv"
- /* 6 */ "uw...xv"
+ /* 0 */ "su...vt"
+ /* 1 */ "sefffet"
+ /* 2 */ "sfBBBft"
+ /* 3 */ "sfBBBft"
+ /* 4 */ "sfBBBft"
+ /* 5 */ "sefffet"
+ /* 6 */ "su...vt"
/* 7 */ "......."
/* 8 */ "......."
/* 9 */ "......."
@@ -910,15 +1527,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 14
+ // Level 13
/* z\x* 0123456 */
- /* 0 */ ".uw.xv."
- /* 1 */ ".uhhhv."
- /* 2 */ ".uhhhv."
- /* 3 */ ".uhhhv."
- /* 4 */ ".uhhhv."
- /* 5 */ ".uhhhv."
- /* 6 */ ".uw.xv."
+ /* 0 */ ".su.vt."
+ /* 1 */ ".sffft."
+ /* 2 */ ".sffft."
+ /* 3 */ ".sffft."
+ /* 4 */ ".sffft."
+ /* 5 */ ".sffft."
+ /* 6 */ ".su.vt."
/* 7 */ "......."
/* 8 */ "......."
/* 9 */ "......."
@@ -926,15 +1543,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "......."
/* 12 */ "......."
- // Level 15
+ // Level 14
/* z\x* 0123456 */
- /* 0 */ "..uhv.."
- /* 1 */ "..uhv.."
- /* 2 */ "..uhv.."
- /* 3 */ "..uhv.."
- /* 4 */ "..uhv.."
- /* 5 */ "..uhv.."
- /* 6 */ "..uhv.."
+ /* 0 */ "..sft.."
+ /* 1 */ "..sft.."
+ /* 2 */ "..sft.."
+ /* 3 */ "..sft.."
+ /* 4 */ "..sft.."
+ /* 5 */ "..sft.."
+ /* 6 */ "..sft.."
/* 7 */ "......."
/* 8 */ "......."
/* 9 */ "......."
@@ -943,7 +1560,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".......",
// Connectors:
- "-1: 3, 2, 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 */
@@ -962,6 +1579,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenChurchMid
@@ -971,132 +1591,118 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 54, ID 105, created by Aloe_vera
{
// Size:
- 7, 8, 9, // SizeX = 7, SizeY = 8, SizeZ = 9
+ 7, 7, 9, // SizeX = 7, SizeY = 7, SizeZ = 9
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 7, 7, 9, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 7, 6, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c:170: 0\n" /* haybale */
- "d: 67: 0\n" /* stairs */
- "e: 67: 2\n" /* stairs */
- "f: 67: 1\n" /* stairs */
- "g: 4: 0\n" /* cobblestone */
- "h: 17: 0\n" /* tree */
- "i: 5: 0\n" /* wood */
- "j:170: 4\n" /* haybale */
- "k:170: 8\n" /* haybale */
- "l: 54: 2\n" /* chest */
+ "a: 4: 0\n" /* cobblestone */
+ "b:170: 0\n" /* haybale */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 17: 0\n" /* tree */
+ "g: 5: 0\n" /* wood */
+ "h:170: 4\n" /* haybale */
+ "i:170: 8\n" /* haybale */
+ "j: 54: 2\n" /* chest */
+ "k: 50: 4\n" /* torch */
+ "l: 53: 0\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 50: 4\n" /* torch */
- "o: 53: 0\n" /* woodstairs */
- "p: 53: 5\n" /* woodstairs */
- "q: 53: 4\n" /* woodstairs */
- "r: 53: 1\n" /* woodstairs */,
+ "n: 53: 5\n" /* woodstairs */
+ "o: 53: 4\n" /* woodstairs */
+ "p: 53: 1\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "aaaaaaa"
- /* 2 */ "aaaaaaa"
- /* 3 */ "aaaaaaa"
- /* 4 */ "aaaaaaa"
- /* 5 */ "aaaaaaa"
- /* 6 */ "aaaaaaa"
- /* 7 */ "aaaaaaa"
- /* 8 */ "aaaaaaa"
+ /* 0 */ "maaaaam"
+ /* 1 */ "maaaaam"
+ /* 2 */ "maaaaam"
+ /* 3 */ "maaaaam"
+ /* 4 */ "maaaaam"
+ /* 5 */ "maaaaam"
+ /* 6 */ "maaaaam"
+ /* 7 */ "maaaaam"
+ /* 8 */ "mmmmmmm"
// Level 1
/* z\x* 0123456 */
- /* 0 */ "aaaaaab"
- /* 1 */ "baaaaab"
- /* 2 */ "baaaaab"
- /* 3 */ "baaaaab"
- /* 4 */ "baaaaab"
- /* 5 */ "baaaaab"
- /* 6 */ "baaaaab"
- /* 7 */ "baaaaab"
- /* 8 */ "bbbbbbb"
+ /* 0 */ "bcddde."
+ /* 1 */ ".aaaaa."
+ /* 2 */ ".aaaaa."
+ /* 3 */ ".aaaaa."
+ /* 4 */ ".aaaaa."
+ /* 5 */ ".aaaaa."
+ /* 6 */ ".aaaaa."
+ /* 7 */ ".aaaaa."
+ /* 8 */ "......."
// Level 2
/* z\x* 0123456 */
- /* 0 */ "cdeeef."
- /* 1 */ ".ggggg."
- /* 2 */ ".ggggg."
- /* 3 */ ".ggggg."
- /* 4 */ ".ggggg."
- /* 5 */ ".ggggg."
- /* 6 */ ".ggggg."
- /* 7 */ ".ggggg."
+ /* 0 */ "......."
+ /* 1 */ ".f..bf."
+ /* 2 */ ".g...g."
+ /* 3 */ ".gb.hg."
+ /* 4 */ ".fihif."
+ /* 5 */ ".gbbbg."
+ /* 6 */ ".gijbg."
+ /* 7 */ ".fgfgf."
/* 8 */ "......."
// Level 3
/* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".h..ch."
- /* 2 */ ".i...i."
- /* 3 */ ".ic.ji."
- /* 4 */ ".hkjkh."
- /* 5 */ ".iccci."
- /* 6 */ ".iklci."
- /* 7 */ ".hihih."
+ /* 0 */ ".k...k."
+ /* 1 */ ".f...f."
+ /* 2 */ ".g...g."
+ /* 3 */ ".g...g."
+ /* 4 */ ".fh..f."
+ /* 5 */ ".ghibg."
+ /* 6 */ ".ghiig."
+ /* 7 */ ".fgfgf."
/* 8 */ "......."
// Level 4
/* z\x* 0123456 */
- /* 0 */ ".n...n."
- /* 1 */ ".h...h."
- /* 2 */ ".i...i."
- /* 3 */ ".i...i."
- /* 4 */ ".hj..h."
- /* 5 */ ".ijkci."
- /* 6 */ ".ijkki."
- /* 7 */ ".hihih."
- /* 8 */ "......."
+ /* 0 */ "ln...op"
+ /* 1 */ "lgggggp"
+ /* 2 */ "lg...gp"
+ /* 3 */ "lg...gp"
+ /* 4 */ "lg...gp"
+ /* 5 */ "lgbb.gp"
+ /* 6 */ "lgibigp"
+ /* 7 */ "lgggggp"
+ /* 8 */ "ln...op"
// Level 5
/* z\x* 0123456 */
- /* 0 */ "op...qr"
- /* 1 */ "oiiiiir"
- /* 2 */ "oi...ir"
- /* 3 */ "oi...ir"
- /* 4 */ "oi...ir"
- /* 5 */ "oicc.ir"
- /* 6 */ "oikckir"
- /* 7 */ "oiiiiir"
- /* 8 */ "op...qr"
+ /* 0 */ ".ln.op."
+ /* 1 */ ".lgggp."
+ /* 2 */ ".lg.gp."
+ /* 3 */ ".lg.gp."
+ /* 4 */ ".lg.gp."
+ /* 5 */ ".lg.gp."
+ /* 6 */ ".lg.gp."
+ /* 7 */ ".lgggp."
+ /* 8 */ ".ln.op."
// Level 6
/* z\x* 0123456 */
- /* 0 */ ".op.qr."
- /* 1 */ ".oiiir."
- /* 2 */ ".oi.ir."
- /* 3 */ ".oi.ir."
- /* 4 */ ".oi.ir."
- /* 5 */ ".oi.ir."
- /* 6 */ ".oi.ir."
- /* 7 */ ".oiiir."
- /* 8 */ ".op.qr."
-
- // Level 7
- /* z\x* 0123456 */
- /* 0 */ "..oir.."
- /* 1 */ "..oir.."
- /* 2 */ "..oir.."
- /* 3 */ "..oir.."
- /* 4 */ "..oir.."
- /* 5 */ "..oir.."
- /* 6 */ "..oir.."
- /* 7 */ "..oir.."
- /* 8 */ "..oir..",
+ /* 0 */ "..lgp.."
+ /* 1 */ "..lgp.."
+ /* 2 */ "..lgp.."
+ /* 3 */ "..lgp.."
+ /* 4 */ "..lgp.."
+ /* 5 */ "..lgp.."
+ /* 6 */ "..lgp.."
+ /* 7 */ "..lgp.."
+ /* 8 */ "..lgp..",
// Connectors:
- "-1: 3, 2, -1: 2\n" /* Type -1, direction Z- */,
+ "-1: 3, 1, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1115,6 +1721,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenGranary
@@ -1124,160 +1733,145 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 47, ID 98, created by Aloe_vera
{
// Size:
- 12, 9, 9, // SizeX = 12, SizeY = 9, SizeZ = 9
+ 12, 8, 9, // SizeX = 12, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 12, 8, 9, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 12, 7, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j: 64: 5\n" /* wooddoorblock */
- "k: 53: 3\n" /* woodstairs */
- "l: 85: 0\n" /* fence */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h: 64: 5\n" /* wooddoorblock */
+ "i: 53: 3\n" /* woodstairs */
+ "j: 85: 0\n" /* fence */
+ "k: 53: 2\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 2\n" /* woodstairs */
- "o: 53: 1\n" /* woodstairs */
- "p: 53: 0\n" /* woodstairs */
- "q:102: 0\n" /* glasspane */
- "r: 64:12\n" /* wooddoorblock */
- "s: 50: 3\n" /* torch */
- "t: 72: 0\n" /* woodplate */
- "u: 53: 7\n" /* woodstairs */
- "v: 47: 0\n" /* bookshelf */
- "w: 50: 1\n" /* torch */
- "x: 50: 2\n" /* torch */
- "y: 53: 6\n" /* woodstairs */,
+ "n: 53: 0\n" /* woodstairs */
+ "o:102: 0\n" /* glasspane */
+ "p: 64:12\n" /* wooddoorblock */
+ "q: 50: 3\n" /* torch */
+ "r: 72: 0\n" /* woodplate */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 47: 0\n" /* bookshelf */
+ "u: 50: 1\n" /* torch */
+ "v: 50: 2\n" /* torch */
+ "w: 53: 6\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "aaaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaaa"
+ /* 0 */ "mmmmaaaammmm"
+ /* 1 */ "maaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaam"
+ /* 6 */ "maaaaaaaaaam"
+ /* 7 */ "maaaaaaaaaam"
+ /* 8 */ "mmmmmmmmmmmm"
// Level 1
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "bbbbaaaabbbb"
- /* 1 */ "baaaaaaaaaab"
- /* 2 */ "baaaaaaaaaab"
- /* 3 */ "baaaaaaaaaab"
- /* 4 */ "baaaaaaaaaab"
- /* 5 */ "baaaaaaaaaab"
- /* 6 */ "baaaaaaaaaab"
- /* 7 */ "baaaaaaaaaab"
- /* 8 */ "bbbbbbbbbbbb"
+ /* 0 */ "....bccd...."
+ /* 1 */ ".aaaaaaaaaa."
+ /* 2 */ ".aaaaaaaaaa."
+ /* 3 */ ".aaaaaaaaaa."
+ /* 4 */ ".aaaaaaaaaa."
+ /* 5 */ ".aaaaaaaaaa."
+ /* 6 */ ".aaaaaaaaaa."
+ /* 7 */ ".aaaaaaaaaa."
+ /* 8 */ "............"
// Level 2
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "....cdde...."
- /* 1 */ ".ffffffffff."
- /* 2 */ ".ffffffffff."
- /* 3 */ ".ffffffffff."
- /* 4 */ ".ffffffffff."
- /* 5 */ ".ffffffffff."
- /* 6 */ ".ffffffffff."
- /* 7 */ ".ffffffffff."
+ /* 0 */ "............"
+ /* 1 */ ".efffghfffe."
+ /* 2 */ ".f........f."
+ /* 3 */ ".fi......if."
+ /* 4 */ ".fj......jf."
+ /* 5 */ ".fk......kf."
+ /* 6 */ ".f.ljnljn.f."
+ /* 7 */ ".effffffffe."
/* 8 */ "............"
// Level 3
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
- /* 1 */ ".ghhhijhhhg."
- /* 2 */ ".h........h."
- /* 3 */ ".hk......kh."
- /* 4 */ ".hl......lh."
- /* 5 */ ".hn......nh."
- /* 6 */ ".h.olpolp.h."
- /* 7 */ ".ghhhhhhhhg."
+ /* 1 */ ".eoofppfooe."
+ /* 2 */ ".o..q..q..o."
+ /* 3 */ ".o........o."
+ /* 4 */ ".fr......rf."
+ /* 5 */ ".o........o."
+ /* 6 */ ".o..r..r..o."
+ /* 7 */ ".eoofoofooe."
/* 8 */ "............"
// Level 4
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "............"
- /* 1 */ ".gqqhrrhqqg."
- /* 2 */ ".q..s..s..q."
- /* 3 */ ".q........q."
- /* 4 */ ".ht......th."
- /* 5 */ ".q........q."
- /* 6 */ ".q..t..t..q."
- /* 7 */ ".gqqhqqhqqg."
- /* 8 */ "............"
+ /* 0 */ "kkkkkkkkkkkk"
+ /* 1 */ "sffffffffffs"
+ /* 2 */ ".fttttttttf."
+ /* 3 */ ".f........f."
+ /* 4 */ ".fu......vf."
+ /* 5 */ ".f........f."
+ /* 6 */ ".fttttttttf."
+ /* 7 */ "wffffffffffw"
+ /* 8 */ "iiiiiiiiiiii"
// Level 5
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "nnnnnnnnnnnn"
- /* 1 */ "uhhhhhhhhhhu"
- /* 2 */ ".hvvvvvvvvh."
- /* 3 */ ".h........h."
- /* 4 */ ".hw......xh."
- /* 5 */ ".h........h."
- /* 6 */ ".hvvvvvvvvh."
- /* 7 */ "yhhhhhhhhhhy"
- /* 8 */ "kkkkkkkkkkkk"
-
- // Level 6
- /* z\x* 11 */
- /* * 012345678901 */
/* 0 */ "............"
- /* 1 */ "nnnnnnnnnnnn"
- /* 2 */ "uhhhhhhhhhhu"
- /* 3 */ ".hvvvvvvvvh."
- /* 4 */ ".h........h."
- /* 5 */ ".hvvvvvvvvh."
- /* 6 */ "yhhhhhhhhhhy"
- /* 7 */ "kkkkkkkkkkkk"
+ /* 1 */ "kkkkkkkkkkkk"
+ /* 2 */ "sffffffffffs"
+ /* 3 */ ".fttttttttf."
+ /* 4 */ ".f........f."
+ /* 5 */ ".fttttttttf."
+ /* 6 */ "wffffffffffw"
+ /* 7 */ "iiiiiiiiiiii"
/* 8 */ "............"
- // Level 7
+ // Level 6
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
- /* 2 */ "nnnnnnnnnnnn"
- /* 3 */ "uhhhhhhhhhhu"
- /* 4 */ ".h........h."
- /* 5 */ "yhhhhhhhhhhy"
- /* 6 */ "kkkkkkkkkkkk"
+ /* 2 */ "kkkkkkkkkkkk"
+ /* 3 */ "sffffffffffs"
+ /* 4 */ ".f........f."
+ /* 5 */ "wffffffffffw"
+ /* 6 */ "iiiiiiiiiiii"
/* 7 */ "............"
/* 8 */ "............"
- // Level 8
+ // Level 7
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
/* 2 */ "............"
- /* 3 */ "nnnnnnnnnnnn"
- /* 4 */ "hhhhhhhhhhhh"
- /* 5 */ "kkkkkkkkkkkk"
+ /* 3 */ "kkkkkkkkkkkk"
+ /* 4 */ "ffffffffffff"
+ /* 5 */ "iiiiiiiiiiii"
/* 6 */ "............"
/* 7 */ "............"
/* 8 */ "............",
// Connectors:
- "-1: 5, 2, 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 */
@@ -1296,6 +1890,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse10x7Library
@@ -1305,115 +1902,103 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 49, ID 100, created by Aloe_vera
{
// Size:
- 7, 8, 7, // SizeX = 7, SizeY = 8, SizeZ = 7
+ 7, 7, 7, // SizeX = 7, SizeY = 7, SizeZ = 7
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 7, 7, 7, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 7, 6, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j: 64:12\n" /* wooddoorblock */
- "k:102: 0\n" /* glasspane */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "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 */
+ "i:102: 0\n" /* glasspane */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 50: 3\n" /* torch */
- "p: 53: 6\n" /* woodstairs */
- "q: 53: 3\n" /* woodstairs */,
+ "n: 53: 6\n" /* woodstairs */
+ "o: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 0123456 */
- /* 0 */ "aaaaaaa"
- /* 1 */ "aaaaaaa"
- /* 2 */ "aaaaaaa"
- /* 3 */ "aaaaaaa"
- /* 4 */ "aaaaaaa"
- /* 5 */ "aaaaaaa"
- /* 6 */ "aaaaaaa"
+ /* 0 */ "mmaaamm"
+ /* 1 */ "maaaaam"
+ /* 2 */ "maaaaam"
+ /* 3 */ "maaaaam"
+ /* 4 */ "maaaaam"
+ /* 5 */ "maaaaam"
+ /* 6 */ "mmmmmmm"
// Level 1
/* z\x* 0123456 */
- /* 0 */ "bbaaabb"
- /* 1 */ "baaaaab"
- /* 2 */ "baaaaab"
- /* 3 */ "baaaaab"
- /* 4 */ "baaaaab"
- /* 5 */ "baaaaab"
- /* 6 */ "bbbbbbb"
+ /* 0 */ "..bcd.."
+ /* 1 */ ".aaaaa."
+ /* 2 */ ".aaaaa."
+ /* 3 */ ".aaaaa."
+ /* 4 */ ".aaaaa."
+ /* 5 */ ".aaaaa."
+ /* 6 */ "......."
// Level 2
/* z\x* 0123456 */
- /* 0 */ "..cde.."
- /* 1 */ ".fffff."
- /* 2 */ ".fffff."
- /* 3 */ ".fffff."
- /* 4 */ ".fffff."
- /* 5 */ ".fffff."
+ /* 0 */ "......."
+ /* 1 */ ".efgfe."
+ /* 2 */ ".f...f."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ ".efffe."
/* 6 */ "......."
// Level 3
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ ".ghihg."
- /* 2 */ ".h...h."
- /* 3 */ ".h...h."
- /* 4 */ ".h...h."
- /* 5 */ ".ghhhg."
+ /* 1 */ ".efhfe."
+ /* 2 */ ".i...i."
+ /* 3 */ ".i...i."
+ /* 4 */ ".i...i."
+ /* 5 */ ".eiiie."
/* 6 */ "......."
// Level 4
/* z\x* 0123456 */
- /* 0 */ "......."
- /* 1 */ ".ghjhg."
- /* 2 */ ".k...k."
- /* 3 */ ".k...k."
- /* 4 */ ".k...k."
- /* 5 */ ".gkkkg."
- /* 6 */ "......."
+ /* 0 */ "jjjjjjj"
+ /* 1 */ "kfffffk"
+ /* 2 */ ".fl.lf."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ "nfffffn"
+ /* 6 */ "ooooooo"
// Level 5
/* z\x* 0123456 */
- /* 0 */ "lllllll"
- /* 1 */ "nhhhhhn"
- /* 2 */ ".ho.oh."
- /* 3 */ ".h...h."
- /* 4 */ ".h...h."
- /* 5 */ "phhhhhp"
- /* 6 */ "qqqqqqq"
-
- // Level 6
- /* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ "lllllll"
- /* 2 */ "nhhhhhn"
- /* 3 */ ".h...h."
- /* 4 */ "phhhhhp"
- /* 5 */ "qqqqqqq"
+ /* 1 */ "jjjjjjj"
+ /* 2 */ "kfffffk"
+ /* 3 */ ".f...f."
+ /* 4 */ "nfffffn"
+ /* 5 */ "ooooooo"
/* 6 */ "......."
- // Level 7
+ // Level 6
/* z\x* 0123456 */
/* 0 */ "......."
/* 1 */ "......."
- /* 2 */ "lllllll"
- /* 3 */ "hhhhhhh"
- /* 4 */ "qqqqqqq"
+ /* 2 */ "jjjjjjj"
+ /* 3 */ "fffffff"
+ /* 4 */ "ooooooo"
/* 5 */ "......."
/* 6 */ ".......",
// Connectors:
- "-1: 3, 2, 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 */
@@ -1432,6 +2017,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse5x5
@@ -1441,259 +2029,103 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 40, ID 91, created by xoft
{
// Size:
- 9, 8, 7, // SizeX = 9, SizeY = 8, SizeZ = 7
-
- // Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 9, 7, 7, // MaxX, MaxY, MaxZ
-
- // Block definitions:
- ".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
- "m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 50: 3\n" /* torch */
- "p: 53: 6\n" /* woodstairs */
- "q: 53: 3\n" /* woodstairs */,
-
- // Block data:
- // Level 0
- /* z\x* 012345678 */
- /* 0 */ "aaaaaaaaa"
- /* 1 */ "aaaaaaaaa"
- /* 2 */ "aaaaaaaaa"
- /* 3 */ "aaaaaaaaa"
- /* 4 */ "aaaaaaaaa"
- /* 5 */ "aaaaaaaaa"
- /* 6 */ "aaaaaaaaa"
-
- // Level 1
- /* z\x* 012345678 */
- /* 0 */ "bbbaaabbb"
- /* 1 */ "baaaaaaab"
- /* 2 */ "baaaaaaab"
- /* 3 */ "baaaaaaab"
- /* 4 */ "baaaaaaab"
- /* 5 */ "baaaaaaab"
- /* 6 */ "bbbbbbbbb"
-
- // Level 2
- /* z\x* 012345678 */
- /* 0 */ "...cde..."
- /* 1 */ ".fffffff."
- /* 2 */ ".fffffff."
- /* 3 */ ".fffffff."
- /* 4 */ ".fffffff."
- /* 5 */ ".fffffff."
- /* 6 */ "........."
-
- // Level 3
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ ".ghhihhg."
- /* 2 */ ".h.....h."
- /* 3 */ ".h.....h."
- /* 4 */ ".h.....h."
- /* 5 */ ".ghhhhhg."
- /* 6 */ "........."
-
- // Level 4
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ ".gjhkhjg."
- /* 2 */ ".j.....j."
- /* 3 */ ".j.....j."
- /* 4 */ ".j.....j."
- /* 5 */ ".gjjhjjg."
- /* 6 */ "........."
-
- // Level 5
- /* z\x* 012345678 */
- /* 0 */ "lllllllll"
- /* 1 */ "nghhhhhgn"
- /* 2 */ ".h.o.o.h."
- /* 3 */ ".h.....h."
- /* 4 */ ".h.....h."
- /* 5 */ "pghhhhhgp"
- /* 6 */ "qqqqqqqqq"
-
- // Level 6
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ "lllllllll"
- /* 2 */ "nhhhhhhhn"
- /* 3 */ ".h.....h."
- /* 4 */ "phhhhhhhp"
- /* 5 */ "qqqqqqqqq"
- /* 6 */ "........."
-
- // Level 7
- /* z\x* 012345678 */
- /* 0 */ "........."
- /* 1 */ "........."
- /* 2 */ "lllllllll"
- /* 3 */ "hhhhhhhhh"
- /* 4 */ "qqqqqqqqq"
- /* 5 */ "........."
- /* 6 */ ".........",
-
- // Connectors:
- "-1: 4, 2, -1: 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,
- }, // WoodenHouse7x5
-
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // WoodenHouse9x5:
- // The data has been exported from the gallery Plains, area index 41, ID 92, created by xoft
- {
- // Size:
- 11, 8, 7, // SizeX = 11, SizeY = 8, SizeZ = 7
+ 9, 7, 7, // SizeX = 9, SizeY = 7, SizeZ = 7
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 11, 7, 7, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 9, 6, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 50: 3\n" /* torch */
- "p: 53: 6\n" /* woodstairs */
- "q: 53: 3\n" /* woodstairs */,
-
- // Block data:
- // Level 0
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaa"
+ "n: 53: 6\n" /* woodstairs */
+ "o: 53: 3\n" /* woodstairs */,
- // Level 1
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "bbbbaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "bbbbbbbbbbb"
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "mmmaaammm"
+ /* 1 */ "maaaaaaam"
+ /* 2 */ "maaaaaaam"
+ /* 3 */ "maaaaaaam"
+ /* 4 */ "maaaaaaam"
+ /* 5 */ "maaaaaaam"
+ /* 6 */ "mmmmmmmmm"
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "...bcd..."
+ /* 1 */ ".aaaaaaa."
+ /* 2 */ ".aaaaaaa."
+ /* 3 */ ".aaaaaaa."
+ /* 4 */ ".aaaaaaa."
+ /* 5 */ ".aaaaaaa."
+ /* 6 */ "........."
// Level 2
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "....cde...."
- /* 1 */ ".fffffffff."
- /* 2 */ ".fffffffff."
- /* 3 */ ".fffffffff."
- /* 4 */ ".fffffffff."
- /* 5 */ ".fffffffff."
- /* 6 */ "..........."
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".effgffe."
+ /* 2 */ ".f.....f."
+ /* 3 */ ".f.....f."
+ /* 4 */ ".f.....f."
+ /* 5 */ ".efffffe."
+ /* 6 */ "........."
// Level 3
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".ghhhihhhg."
- /* 2 */ ".h.......h."
- /* 3 */ ".h.......h."
- /* 4 */ ".h.......h."
- /* 5 */ ".ghhhhhhhg."
- /* 6 */ "..........."
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ ".ehfifhe."
+ /* 2 */ ".h.....h."
+ /* 3 */ ".h.....h."
+ /* 4 */ ".h.....h."
+ /* 5 */ ".ehhfhhe."
+ /* 6 */ "........."
// Level 4
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".gjjhkhjjg."
- /* 2 */ ".j.......j."
- /* 3 */ ".j.......j."
- /* 4 */ ".j.......j."
- /* 5 */ ".gjjjhjjjg."
- /* 6 */ "..........."
+ /* z\x* 012345678 */
+ /* 0 */ "jjjjjjjjj"
+ /* 1 */ "kefffffek"
+ /* 2 */ ".f.l.l.f."
+ /* 3 */ ".f.....f."
+ /* 4 */ ".f.....f."
+ /* 5 */ "nefffffen"
+ /* 6 */ "ooooooooo"
// Level 5
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "lllllllllll"
- /* 1 */ "nhhhhhhhhhn"
- /* 2 */ ".h..o.o.hh."
- /* 3 */ ".h......hh."
- /* 4 */ ".h......hh."
- /* 5 */ "phhhhhhhhhp"
- /* 6 */ "qqqqqqqqqqq"
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "jjjjjjjjj"
+ /* 2 */ "kfffffffk"
+ /* 3 */ ".f.....f."
+ /* 4 */ "nfffffffn"
+ /* 5 */ "ooooooooo"
+ /* 6 */ "........."
// Level 6
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "lllllllllll"
- /* 2 */ "nhhhhhhhhhn"
- /* 3 */ ".hhhhhhhhh."
- /* 4 */ "phhhhhhhhhp"
- /* 5 */ "qqqqqqqqqqq"
- /* 6 */ "..........."
-
- // Level 7
- /* z\x* 1 */
- /* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ "..........."
- /* 2 */ "lllllllllll"
- /* 3 */ "hhhhhhhhhhh"
- /* 4 */ "qqqqqqqqqqq"
- /* 5 */ "..........."
- /* 6 */ "...........",
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "jjjjjjjjj"
+ /* 3 */ "fffffffff"
+ /* 4 */ "ooooooooo"
+ /* 5 */ "........."
+ /* 6 */ ".........",
// Connectors:
- "-1: 5, 2, -1: 2\n" /* Type -1, direction Z- */,
+ "-1: 4, 1, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1712,139 +2144,122 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // WoodenHouse9x5
+
+ // MoveToGround:
+ true,
+ }, // WoodenHouse7x5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// WoodenHouse9x5:
- // The data has been exported from the gallery Plains, area index 46, ID 97, created by Aloe_vera
+ // The data has been exported from the gallery Plains, area index 41, ID 92, created by xoft
{
// Size:
- 11, 8, 7, // SizeX = 11, SizeY = 8, SizeZ = 7
+ 11, 7, 7, // SizeX = 11, SizeY = 7, SizeZ = 7
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 11, 7, 7, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 11, 6, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j: 53: 3\n" /* woodstairs */
- "k: 85: 0\n" /* fence */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
"m: 19: 0\n" /* sponge */
- "n: 53: 1\n" /* woodstairs */
- "o: 53: 0\n" /* woodstairs */
- "p:102: 0\n" /* glasspane */
- "q: 64:12\n" /* wooddoorblock */
- "r: 50: 3\n" /* torch */
- "s: 72: 0\n" /* woodplate */
- "t: 53: 7\n" /* woodstairs */
- "u: 47: 0\n" /* bookshelf */
- "v: 50: 1\n" /* torch */
- "w: 50: 2\n" /* torch */
- "x: 53: 6\n" /* woodstairs */,
+ "n: 53: 6\n" /* woodstairs */
+ "o: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaa"
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "maaaaaaaaam"
+ /* 2 */ "maaaaaaaaam"
+ /* 3 */ "maaaaaaaaam"
+ /* 4 */ "maaaaaaaaam"
+ /* 5 */ "maaaaaaaaam"
+ /* 6 */ "mmmmmmmmmmm"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "bbbbaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "bbbbbbbbbbb"
+ /* 0 */ "....bcd...."
+ /* 1 */ ".aaaaaaaaa."
+ /* 2 */ ".aaaaaaaaa."
+ /* 3 */ ".aaaaaaaaa."
+ /* 4 */ ".aaaaaaaaa."
+ /* 5 */ ".aaaaaaaaa."
+ /* 6 */ "..........."
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....cde...."
- /* 1 */ ".fffffffff."
- /* 2 */ ".fffffffff."
- /* 3 */ ".fffffffff."
- /* 4 */ ".fffffffff."
- /* 5 */ ".fffffffff."
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".efffffffe."
/* 6 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".ghhhihhhg."
- /* 2 */ ".hj.....jh."
- /* 3 */ ".hk.....kh."
- /* 4 */ ".hl.nko.lh."
- /* 5 */ ".ghhhhhhhg."
+ /* 1 */ ".ehhfifhhe."
+ /* 2 */ ".h.......h."
+ /* 3 */ ".h.......h."
+ /* 4 */ ".h.......h."
+ /* 5 */ ".ehhhfhhhe."
/* 6 */ "..........."
// Level 4
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".gpphqhppg."
- /* 2 */ ".p..r.r..p."
- /* 3 */ ".ps.....sp."
- /* 4 */ ".p...s...p."
- /* 5 */ ".gppphpppg."
- /* 6 */ "..........."
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "kfffffffffk"
+ /* 2 */ ".f..l.l.ff."
+ /* 3 */ ".f......ff."
+ /* 4 */ ".f......ff."
+ /* 5 */ "nfffffffffn"
+ /* 6 */ "ooooooooooo"
// Level 5
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "lllllllllll"
- /* 1 */ "thhhhhhhhht"
- /* 2 */ ".huuuuuuuh."
- /* 3 */ ".hv.....wh."
- /* 4 */ ".huuuuuuuh."
- /* 5 */ "xhhhhhhhhhx"
- /* 6 */ "jjjjjjjjjjj"
-
- // Level 6
- /* z\x* 1 */
- /* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "lllllllllll"
- /* 2 */ "thhhhhhhhht"
- /* 3 */ ".h.......h."
- /* 4 */ "xhhhhhhhhhx"
- /* 5 */ "jjjjjjjjjjj"
+ /* 1 */ "jjjjjjjjjjj"
+ /* 2 */ "kfffffffffk"
+ /* 3 */ ".fffffffff."
+ /* 4 */ "nfffffffffn"
+ /* 5 */ "ooooooooooo"
/* 6 */ "..........."
- // Level 7
+ // Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "lllllllllll"
- /* 3 */ "hhhhhhhhhhh"
- /* 4 */ "jjjjjjjjjjj"
+ /* 2 */ "jjjjjjjjjjj"
+ /* 3 */ "fffffffffff"
+ /* 4 */ "ooooooooooo"
/* 5 */ "..........."
/* 6 */ "...........",
// Connectors:
- "-1: 5, 2, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 5, 1, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1863,6 +2278,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse9x5
@@ -1893,11 +2311,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"k: 85: 0\n" /* fence */
"l: 53: 0\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 64: 2\n" /* wooddoorblock */
- "o: 64: 0\n" /* wooddoorblock */
+ "n: 64: 6\n" /* wooddoorblock */
+ "o: 64: 4\n" /* wooddoorblock */
"p:102: 0\n" /* glasspane */
"q: 72: 0\n" /* woodplate */
- "r: 64: 8\n" /* wooddoorblock */
+ "r: 64:12\n" /* wooddoorblock */
"s: 53: 5\n" /* woodstairs */
"t: 53: 4\n" /* woodstairs */
"u: 50: 1\n" /* torch */
@@ -2029,162 +2447,291 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse9x5Fence
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // WoodenHouse9x5Library:
+ // The data has been exported from the gallery Plains, area index 46, ID 97, created by Aloe_vera
+ {
+ // Size:
+ 11, 7, 7, // SizeX = 11, SizeY = 7, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ -1, -1, 0, // MinX, MinY, MinZ
+ 11, 6, 7, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h: 53: 3\n" /* woodstairs */
+ "i: 85: 0\n" /* fence */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 1\n" /* woodstairs */
+ "l: 53: 0\n" /* woodstairs */
+ "m: 19: 0\n" /* sponge */
+ "n:102: 0\n" /* glasspane */
+ "o: 64:12\n" /* wooddoorblock */
+ "p: 50: 3\n" /* torch */
+ "q: 72: 0\n" /* woodplate */
+ "r: 53: 7\n" /* woodstairs */
+ "s: 47: 0\n" /* bookshelf */
+ "t: 50: 1\n" /* torch */
+ "u: 50: 2\n" /* torch */
+ "v: 53: 6\n" /* woodstairs */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "maaaaaaaaam"
+ /* 2 */ "maaaaaaaaam"
+ /* 3 */ "maaaaaaaaam"
+ /* 4 */ "maaaaaaaaam"
+ /* 5 */ "maaaaaaaaam"
+ /* 6 */ "mmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "....bcd...."
+ /* 1 */ ".aaaaaaaaa."
+ /* 2 */ ".aaaaaaaaa."
+ /* 3 */ ".aaaaaaaaa."
+ /* 4 */ ".aaaaaaaaa."
+ /* 5 */ ".aaaaaaaaa."
+ /* 6 */ "..........."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".fh.....hf."
+ /* 3 */ ".fi.....if."
+ /* 4 */ ".fj.kil.jf."
+ /* 5 */ ".efffffffe."
+ /* 6 */ "..........."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ ".ennfofnne."
+ /* 2 */ ".n..p.p..n."
+ /* 3 */ ".nq.....qn."
+ /* 4 */ ".n...q...n."
+ /* 5 */ ".ennnfnnne."
+ /* 6 */ "..........."
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "rfffffffffr"
+ /* 2 */ ".fsssssssf."
+ /* 3 */ ".ft.....uf."
+ /* 4 */ ".fsssssssf."
+ /* 5 */ "vfffffffffv"
+ /* 6 */ "hhhhhhhhhhh"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "jjjjjjjjjjj"
+ /* 2 */ "rfffffffffr"
+ /* 3 */ ".f.......f."
+ /* 4 */ "vfffffffffv"
+ /* 5 */ "hhhhhhhhhhh"
+ /* 6 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "jjjjjjjjjjj"
+ /* 3 */ "fffffffffff"
+ /* 4 */ "hhhhhhhhhhh"
+ /* 5 */ "..........."
+ /* 6 */ "...........",
+
+ // Connectors:
+ "-1: 5, 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:
+ true,
+ }, // WoodenHouse9x5Library
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// WoodenHouse9x7:
// The data has been exported from the gallery Plains, area index 52, ID 103, created by Aloe_vera
{
// Size:
- 11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
+ 11, 8, 9, // SizeX = 11, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 11, 8, 9, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 11, 7, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 50: 3\n" /* torch */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 50: 3\n" /* torch */
- "p: 50: 4\n" /* torch */
- "q: 53: 6\n" /* woodstairs */
- "r: 53: 3\n" /* woodstairs */,
+ "n: 50: 4\n" /* torch */
+ "o: 53: 6\n" /* woodstairs */
+ "p: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaa"
+ /* 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 */ "bbbbaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "baaaaaaaaab"
- /* 7 */ "baaaaaaaaab"
- /* 8 */ "bbbbbbbbbbb"
+ /* 0 */ "....bcd...."
+ /* 1 */ ".aaaaaaaaa."
+ /* 2 */ ".aaaaaaaaa."
+ /* 3 */ ".aaaaaaaaa."
+ /* 4 */ ".aaaaaaaaa."
+ /* 5 */ ".aaaaaaaaa."
+ /* 6 */ ".aaaaaaaaa."
+ /* 7 */ ".aaaaaaaaa."
+ /* 8 */ "..........."
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....cde...."
- /* 1 */ ".fffffffff."
- /* 2 */ ".fffffffff."
- /* 3 */ ".fffffffff."
- /* 4 */ ".fffffffff."
- /* 5 */ ".fffffffff."
- /* 6 */ ".fffffffff."
- /* 7 */ ".fffffffff."
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".f.......f."
+ /* 6 */ ".f.......f."
+ /* 7 */ ".efffffffe."
/* 8 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".ghhhihhhg."
+ /* 1 */ ".ehhfifhhe."
/* 2 */ ".h.......h."
/* 3 */ ".h.......h."
- /* 4 */ ".h.......h."
+ /* 4 */ ".f.......f."
/* 5 */ ".h.......h."
/* 6 */ ".h.......h."
- /* 7 */ ".ghhhhhhhg."
+ /* 7 */ ".ehhhfhhhe."
/* 8 */ "..........."
// Level 4
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".gjjhkhjjg."
- /* 2 */ ".j.......j."
- /* 3 */ ".j.......j."
- /* 4 */ ".h.......h."
- /* 5 */ ".j.......j."
- /* 6 */ ".j.......j."
- /* 7 */ ".gjjjhjjjg."
- /* 8 */ "..........."
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "kfffffffffk"
+ /* 2 */ ".f..l.l..f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".f.......f."
+ /* 6 */ ".f...n...f."
+ /* 7 */ "offfffffffo"
+ /* 8 */ "ppppppppppp"
// Level 5
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "lllllllllll"
- /* 1 */ "nhhhhhhhhhn"
- /* 2 */ ".h..o.o..h."
- /* 3 */ ".h.......h."
- /* 4 */ ".h.......h."
- /* 5 */ ".h.......h."
- /* 6 */ ".h...p...h."
- /* 7 */ "qhhhhhhhhhq"
- /* 8 */ "rrrrrrrrrrr"
-
- // Level 6
- /* z\x* 1 */
- /* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "lllllllllll"
- /* 2 */ "nhhhhhhhhhn"
- /* 3 */ ".h.......h."
- /* 4 */ ".h.......h."
- /* 5 */ ".h.......h."
- /* 6 */ "qhhhhhhhhhq"
- /* 7 */ "rrrrrrrrrrr"
+ /* 1 */ "jjjjjjjjjjj"
+ /* 2 */ "kfffffffffk"
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".f.......f."
+ /* 6 */ "offfffffffo"
+ /* 7 */ "ppppppppppp"
/* 8 */ "..........."
- // Level 7
+ // Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "lllllllllll"
- /* 3 */ "nhhhhhhhhhn"
- /* 4 */ ".h.......h."
- /* 5 */ "qhhhhhhhhhq"
- /* 6 */ "rrrrrrrrrrr"
+ /* 2 */ "jjjjjjjjjjj"
+ /* 3 */ "kfffffffffk"
+ /* 4 */ ".f.......f."
+ /* 5 */ "offfffffffo"
+ /* 6 */ "ppppppppppp"
/* 7 */ "..........."
/* 8 */ "..........."
- // Level 8
+ // Level 7
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ "lllllllllll"
- /* 4 */ "hhhhhhhhhhh"
- /* 5 */ "rrrrrrrrrrr"
+ /* 3 */ "jjjjjjjjjjj"
+ /* 4 */ "fffffffffff"
+ /* 5 */ "ppppppppppp"
/* 6 */ "..........."
/* 7 */ "..........."
/* 8 */ "...........",
// Connectors:
- "-1: 5, 2, 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 */
@@ -2203,6 +2750,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse9x7
@@ -2246,19 +2796,19 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaab"
- /* 2 */ "aaaaaaaaaab"
- /* 3 */ "aaaaaaaaaab"
- /* 4 */ "aaaaaaaaaab"
- /* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaab"
- /* 7 */ "aaaaaaaaaab"
- /* 8 */ "abaaaaaaabb"
- /* 9 */ "aaaaaaaaabb"
- /* 10 */ "aaaaaaaaabb"
- /* 11 */ "abaaaaaaaba"
- /* 12 */ "abaaaaaaabb"
+ /* 0 */ "abaaaaabbbb"
+ /* 1 */ "baaaaaaaaab"
+ /* 2 */ "baaaaaaaaab"
+ /* 3 */ "baaaaaaaaab"
+ /* 4 */ "baaaaaaaaab"
+ /* 5 */ "baaaaaaaaab"
+ /* 6 */ "baaaaaaaaab"
+ /* 7 */ "baaaaaaaaab"
+ /* 8 */ "bbaaaaaaabb"
+ /* 9 */ "bbaaaaaaabb"
+ /* 10 */ "bbaaaaaaabb"
+ /* 11 */ "bbaaaaaaabb"
+ /* 12 */ "bbaaaaaaabb"
// Level 1
/* z\x* 1 */
@@ -2416,6 +2966,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse9x7Butcher
@@ -2425,156 +2978,141 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 38, ID 87, created by Aloe_vera
{
// Size:
- 11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
+ 11, 8, 9, // SizeX = 11, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 11, 8, 9, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 11, 7, 9, // MaxX, MaxY, MaxZ
// Block definitions:
- ".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 67: 3\n" /* stairs */
- "h: 17: 0\n" /* tree */
- "i: 5: 0\n" /* wood */
- "j: 64: 7\n" /* wooddoorblock */
- "k:102: 0\n" /* glasspane */
- "l: 64:12\n" /* wooddoorblock */
+ ".: 0: 0\n" /* air */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 67: 3\n" /* stairs */
+ "f: 17: 0\n" /* tree */
+ "g: 5: 0\n" /* wood */
+ "h: 64: 7\n" /* wooddoorblock */
+ "i:102: 0\n" /* glasspane */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 53: 2\n" /* woodstairs */
+ "l: 53: 7\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 2\n" /* woodstairs */
- "o: 53: 7\n" /* woodstairs */
- "p: 17: 4\n" /* tree */
- "q: 17: 8\n" /* tree */
- "r: 50: 3\n" /* torch */
- "s: 50: 4\n" /* torch */
- "t: 53: 6\n" /* woodstairs */
- "u: 53: 3\n" /* woodstairs */,
+ "n: 17: 4\n" /* tree */
+ "o: 17: 8\n" /* tree */
+ "p: 50: 3\n" /* torch */
+ "q: 50: 4\n" /* torch */
+ "r: 53: 6\n" /* woodstairs */
+ "s: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaa"
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "maaaaaaaaam"
+ /* 2 */ "maaaaaaaaam"
+ /* 3 */ "maaaaaaaaam"
+ /* 4 */ "maaaaaaaaam"
+ /* 5 */ "maaaaaaaaam"
+ /* 6 */ "maaaaaaaaam"
+ /* 7 */ "maaaaaaaaam"
+ /* 8 */ "mmmmaaammmm"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "bbbbaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "baaaaaaaaab"
- /* 7 */ "baaaaaaaaab"
- /* 8 */ "bbbbaaabbbb"
+ /* 0 */ "....bcd...."
+ /* 1 */ ".aaaaaaaaa."
+ /* 2 */ ".aaaaaaaaa."
+ /* 3 */ ".aaaaaaaaa."
+ /* 4 */ ".aaaaaaaaa."
+ /* 5 */ ".aaaaaaaaa."
+ /* 6 */ ".aaaaaaaaa."
+ /* 7 */ ".aaaaaaaaa."
+ /* 8 */ "....bed...."
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....cde...."
- /* 1 */ ".fffffffff."
- /* 2 */ ".fffffffff."
- /* 3 */ ".fffffffff."
- /* 4 */ ".fffffffff."
- /* 5 */ ".fffffffff."
- /* 6 */ ".fffffffff."
- /* 7 */ ".fffffffff."
- /* 8 */ "....cge...."
+ /* 0 */ "..........."
+ /* 1 */ ".fggfhfggf."
+ /* 2 */ ".g.......g."
+ /* 3 */ ".g.......g."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".g.......g."
+ /* 6 */ ".g.......g."
+ /* 7 */ ".fggfhfggf."
+ /* 8 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".hiihjhiih."
+ /* 1 */ ".fiifjfiif."
/* 2 */ ".i.......i."
/* 3 */ ".i.......i."
- /* 4 */ ".h.......h."
+ /* 4 */ ".f.......f."
/* 5 */ ".i.......i."
/* 6 */ ".i.......i."
- /* 7 */ ".hiihjhiih."
+ /* 7 */ ".fiifjfiif."
/* 8 */ "..........."
// Level 4
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".hkkhlhkkh."
- /* 2 */ ".k.......k."
- /* 3 */ ".k.......k."
- /* 4 */ ".h.......h."
- /* 5 */ ".k.......k."
- /* 6 */ ".k.......k."
- /* 7 */ ".hkkhlhkkh."
- /* 8 */ "..........."
+ /* 0 */ "kkkkkkkkkkk"
+ /* 1 */ "lfnnnnnnnfl"
+ /* 2 */ ".o..p.p..o."
+ /* 3 */ ".o.......o."
+ /* 4 */ ".o.......o."
+ /* 5 */ ".o.......o."
+ /* 6 */ ".o..q.q..o."
+ /* 7 */ "rfnnnnnnnfr"
+ /* 8 */ "sssssssssss"
// Level 5
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "nnnnnnnnnnn"
- /* 1 */ "ohpppppppho"
- /* 2 */ ".q..r.r..q."
- /* 3 */ ".q.......q."
- /* 4 */ ".q.......q."
- /* 5 */ ".q.......q."
- /* 6 */ ".q..s.s..q."
- /* 7 */ "thpppppppht"
- /* 8 */ "uuuuuuuuuuu"
-
- // Level 6
- /* z\x* 1 */
- /* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "nnnnnnnnnnn"
- /* 2 */ "oiiiiiiiiio"
- /* 3 */ ".i.......i."
- /* 4 */ ".i.......i."
- /* 5 */ ".i.......i."
- /* 6 */ "tiiiiiiiiit"
- /* 7 */ "uuuuuuuuuuu"
+ /* 1 */ "kkkkkkkkkkk"
+ /* 2 */ "lgggggggggl"
+ /* 3 */ ".g.......g."
+ /* 4 */ ".g.......g."
+ /* 5 */ ".g.......g."
+ /* 6 */ "rgggggggggr"
+ /* 7 */ "sssssssssss"
/* 8 */ "..........."
- // Level 7
+ // Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "nnnnnnnnnnn"
- /* 3 */ "oiiiiiiiiio"
- /* 4 */ ".i.......i."
- /* 5 */ "tiiiiiiiiit"
- /* 6 */ "uuuuuuuuuuu"
+ /* 2 */ "kkkkkkkkkkk"
+ /* 3 */ "lgggggggggl"
+ /* 4 */ ".g.......g."
+ /* 5 */ "rgggggggggr"
+ /* 6 */ "sssssssssss"
/* 7 */ "..........."
/* 8 */ "..........."
- // Level 8
+ // Level 7
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ "nnnnnnnnnnn"
- /* 4 */ "iiiiiiiiiii"
- /* 5 */ "uuuuuuuuuuu"
+ /* 3 */ "kkkkkkkkkkk"
+ /* 4 */ "ggggggggggg"
+ /* 5 */ "sssssssssss"
/* 6 */ "..........."
/* 7 */ "..........."
/* 8 */ "...........",
// Connectors:
- "-1: 5, 2, 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 */
@@ -2593,6 +3131,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouse9x7DoubleDoor
@@ -2602,250 +3143,228 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 39, ID 90, created by STR_Warrior
{
// Size:
- 15, 10, 16, // SizeX = 15, SizeY = 10, SizeZ = 16
+ 15, 9, 16, // SizeX = 15, SizeY = 9, SizeZ = 16
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 15, 9, 16, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 15, 8, 16, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A: 50: 4\n" /* torch */
- "B: 50: 2\n" /* torch */
- "C: 53: 7\n" /* woodstairs */
- "D: 53: 4\n" /* woodstairs */
- "E: 53: 5\n" /* woodstairs */
- "F: 53: 6\n" /* woodstairs */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 43: 0\n" /* doubleslab */
- "h: 17: 0\n" /* tree */
- "i: 5: 0\n" /* wood */
- "j: 64: 7\n" /* wooddoorblock */
- "k: 96: 8\n" /* trapdoor */
- "l: 61: 2\n" /* furnace */
+ "A: 53: 7\n" /* woodstairs */
+ "B: 53: 4\n" /* woodstairs */
+ "C: 53: 5\n" /* woodstairs */
+ "D: 53: 6\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 43: 0\n" /* doubleslab */
+ "f: 17: 0\n" /* tree */
+ "g: 5: 0\n" /* wood */
+ "h: 64: 7\n" /* wooddoorblock */
+ "i: 96: 8\n" /* trapdoor */
+ "j: 61: 2\n" /* furnace */
+ "k: 53: 3\n" /* woodstairs */
+ "l: 85: 0\n" /* fence */
"m: 19: 0\n" /* sponge */
- "n: 53: 3\n" /* woodstairs */
- "o: 85: 0\n" /* fence */
- "p: 53: 2\n" /* woodstairs */
- "q: 53: 1\n" /* woodstairs */
- "r: 53: 0\n" /* woodstairs */
- "s: 47: 0\n" /* bookshelf */
- "t:102: 0\n" /* glasspane */
- "u: 64:12\n" /* wooddoorblock */
- "v: 72: 0\n" /* woodplate */
- "w: 17: 4\n" /* tree */
- "x: 17: 8\n" /* tree */
- "y: 50: 3\n" /* torch */
- "z: 50: 1\n" /* torch */,
+ "n: 53: 2\n" /* woodstairs */
+ "o: 53: 1\n" /* woodstairs */
+ "p: 53: 0\n" /* woodstairs */
+ "q: 47: 0\n" /* bookshelf */
+ "r:102: 0\n" /* glasspane */
+ "s: 64:12\n" /* wooddoorblock */
+ "t: 72: 0\n" /* woodplate */
+ "u: 17: 4\n" /* tree */
+ "v: 17: 8\n" /* tree */
+ "w: 50: 3\n" /* torch */
+ "x: 50: 1\n" /* torch */
+ "y: 50: 4\n" /* torch */
+ "z: 50: 2\n" /* torch */,
// Block data:
// Level 0
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "aaaaaaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaaaaaa"
- /* 8 */ "mmmmmmmmaaaaaaa"
- /* 9 */ "mmmmmmmmaaaaaaa"
- /* 10 */ "mmmmmmmmaaaaaaa"
- /* 11 */ "mmmmmmmmaaaaaaa"
- /* 12 */ "mmmmmmmmaaaaaaa"
- /* 13 */ "mmmmmmmmaaaaaaa"
- /* 14 */ "mmmmmmmmaaaaaaa"
- /* 15 */ "mmmmmmmmaaaaaaa"
+ /* 0 */ "mmmmmmaaammmmmm"
+ /* 1 */ "maaaaaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaaaaam"
+ /* 6 */ "maaaaaaaaaaaaam"
+ /* 7 */ "maaaaaaaaaaaaam"
+ /* 8 */ "mmmmmmmmaaaaaam"
+ /* 9 */ "mmmmmmmmaaaaaam"
+ /* 10 */ "mmmmmmmmaaaaaam"
+ /* 11 */ "mmmmmmmmaaaaaam"
+ /* 12 */ "mmmmmmmmaaaaaam"
+ /* 13 */ "mmmmmmmmaaaaaam"
+ /* 14 */ "mmmmmmmmaaaaaam"
+ /* 15 */ "mmmmmmmmmmmmmmm"
// Level 1
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "bbbbbbaaabbbbbb"
- /* 1 */ "baaaaaaaaaaaaab"
- /* 2 */ "baaaaaaaaaaaaab"
- /* 3 */ "baaaaaaaaaaaaab"
- /* 4 */ "baaaaaaaaaaaaab"
- /* 5 */ "baaaaaaaaaaaaab"
- /* 6 */ "baaaaaaaaaaaaab"
- /* 7 */ "baaaaaaaaaaaaab"
- /* 8 */ "mmmmmmmmaaaaaab"
- /* 9 */ "mmmmmmmmaaaaaab"
- /* 10 */ "mmmmmmmmaaaaaab"
- /* 11 */ "mmmmmmmmaaaaaab"
- /* 12 */ "mmmmmmmmaaaaaab"
- /* 13 */ "mmmmmmmmaaaaaab"
- /* 14 */ "mmmmmmmmaaaaaab"
- /* 15 */ "mmmmmmmmbbbbbbb"
+ /* 0 */ "......bcd......"
+ /* 1 */ ".aaaaaaaaaaaaa."
+ /* 2 */ ".aeeeeaaaaaaaa."
+ /* 3 */ ".aeeeeaaaaaaaa."
+ /* 4 */ ".aaaaaaaaaaaaa."
+ /* 5 */ ".aaaaaaaaaaaaa."
+ /* 6 */ ".aaaaaaaaaaaaa."
+ /* 7 */ ".aaaaaaaaaaaaa."
+ /* 8 */ "........aaaaaa."
+ /* 9 */ "mmmmmmm.aaaaaa."
+ /* 10 */ "mmmmmmm.aaaaaa."
+ /* 11 */ "mmmmmmm.aaaaaa."
+ /* 12 */ "mmmmmmm.aaaaaa."
+ /* 13 */ "mmmmmmm.aaaaaa."
+ /* 14 */ "mmmmmmm.aaaaaa."
+ /* 15 */ "mmmmmmm........"
// Level 2
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "......cde......"
- /* 1 */ ".fffffffffffff."
- /* 2 */ ".fggggffffffff."
- /* 3 */ ".fggggffffffff."
- /* 4 */ ".fffffffffffff."
- /* 5 */ ".fffffffffffff."
- /* 6 */ ".fffffffffffff."
- /* 7 */ "mfffffffffffff."
- /* 8 */ "mmmmmmmmffffff."
- /* 9 */ "mmmmmmmmffffff."
- /* 10 */ "mmmmmmmmffffff."
- /* 11 */ "mmmmmmmmffffff."
- /* 12 */ "mmmmmmmmffffff."
- /* 13 */ "mmmmmmmmffffff."
- /* 14 */ "mmmmmmmmffffff."
- /* 15 */ "mmmmmmmm......."
+ /* 0 */ "..............."
+ /* 1 */ ".fggggfhfggggf."
+ /* 2 */ ".g...i.......g."
+ /* 3 */ ".gjeee......kg."
+ /* 4 */ ".f..........lg."
+ /* 5 */ ".g..........ng."
+ /* 6 */ ".g.olp..ol...g."
+ /* 7 */ ".fggggggfn...f."
+ /* 8 */ "........g....g."
+ /* 9 */ "mmmmmmm.gk...g."
+ /* 10 */ "mmmmmmm.gl..kg."
+ /* 11 */ "mmmmmmm.gn..lg."
+ /* 12 */ "mmmmmmm.g...ng."
+ /* 13 */ "mmmmmmm.gq..qg."
+ /* 14 */ "mmmmmmm.fggggf."
+ /* 15 */ "mmmmmmm........"
// Level 3
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".hiiiihjhiiiih."
- /* 2 */ ".i...k.......i."
- /* 3 */ ".ilggg......ni."
- /* 4 */ ".h..........oi."
- /* 5 */ ".i..........pi."
- /* 6 */ ".i.qor..qo...i."
- /* 7 */ "mhiiiiiihp...h."
- /* 8 */ "mmmmmmmmi....i."
- /* 9 */ "mmmmmmmmin...i."
- /* 10 */ "mmmmmmmmio..ni."
- /* 11 */ "mmmmmmmmip..oi."
- /* 12 */ "mmmmmmmmi...pi."
- /* 13 */ "mmmmmmmmis..si."
- /* 14 */ "mmmmmmmmhiiiih."
- /* 15 */ "mmmmmmmm......."
+ /* 1 */ ".fgrrgfsfgrrgf."
+ /* 2 */ ".g...........g."
+ /* 3 */ ".g...........r."
+ /* 4 */ ".f..........tr."
+ /* 5 */ ".g...........r."
+ /* 6 */ ".g..t....t...g."
+ /* 7 */ ".fgrrrrgf....f."
+ /* 8 */ "........g....g."
+ /* 9 */ "mmmmmmm.r....r."
+ /* 10 */ "mmmmmmm.rt...r."
+ /* 11 */ "mmmmmmm.r...tr."
+ /* 12 */ "mmmmmmm.r....r."
+ /* 13 */ "mmmmmmm.gq..qg."
+ /* 14 */ "mmmmmmm.fgrrgf."
+ /* 15 */ "mmmmmmm........"
// Level 4
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".hittihuhittih."
- /* 2 */ ".i...........i."
- /* 3 */ ".i...........t."
- /* 4 */ ".h..........vt."
- /* 5 */ ".i...........t."
- /* 6 */ ".i..v....v...i."
- /* 7 */ "mhittttih....h."
- /* 8 */ "mmmmmmmmi....i."
- /* 9 */ "mmmmmmmmt....t."
- /* 10 */ "mmmmmmmmtv...t."
- /* 11 */ "mmmmmmmmt...vt."
- /* 12 */ "mmmmmmmmt....t."
- /* 13 */ "mmmmmmmmis..si."
- /* 14 */ "mmmmmmmmhittih."
- /* 15 */ "mmmmmmmm......."
+ /* 1 */ ".fuuuuuuuuuuuf."
+ /* 2 */ ".v....w.w....v."
+ /* 3 */ ".v...........v."
+ /* 4 */ ".vx..........v."
+ /* 5 */ ".v...........v."
+ /* 6 */ ".v......y....v."
+ /* 7 */ ".fuuuuuufx..zv."
+ /* 8 */ "........v....v."
+ /* 9 */ "mmmmmmm.v....v."
+ /* 10 */ "mmmmmmm.v....v."
+ /* 11 */ "mmmmmmm.v....v."
+ /* 12 */ "mmmmmmm.v....v."
+ /* 13 */ "mmmmmmm.v.yy.v."
+ /* 14 */ "mmmmmmm.fuuuuf."
+ /* 15 */ "mmmmmmm........"
// Level 5
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".hwwwwwwwwwwwh."
- /* 2 */ ".x....y.y....x."
- /* 3 */ ".x...........x."
- /* 4 */ ".xz..........x."
- /* 5 */ ".x...........x."
- /* 6 */ ".x......A....x."
- /* 7 */ "mhwwwwwwhz..Bx."
- /* 8 */ "mmmmmmmmx....x."
- /* 9 */ "mmmmmmmmx....x."
- /* 10 */ "mmmmmmmmx....x."
- /* 11 */ "mmmmmmmmx....x."
- /* 12 */ "mmmmmmmmx....x."
- /* 13 */ "mmmmmmmmx.AA.x."
- /* 14 */ "mmmmmmmmhwwwwh."
- /* 15 */ "mmmmmmmm......."
+ /* 0 */ "nnnnnnnnnnnnnno"
+ /* 1 */ "pgggggggggggggo"
+ /* 2 */ "pgAAAAAAAAAABgo"
+ /* 3 */ "pgC.........Bgo"
+ /* 4 */ "pgC.........Bgo"
+ /* 5 */ "pgC.........Bgo"
+ /* 6 */ "pgCDDDDDDD..Bgo"
+ /* 7 */ "pggggggggC..Bgo"
+ /* 8 */ "pkkkkkkpgC..Bgo"
+ /* 9 */ "mmmmmmmpgC..Bgo"
+ /* 10 */ "mmmmmmmpgC..Bgo"
+ /* 11 */ "mmmmmmmpgC..Bgo"
+ /* 12 */ "mmmmmmmpgC..Bgo"
+ /* 13 */ "mmmmmmmpgCDDBgo"
+ /* 14 */ "mmmmmmmpggggggo"
+ /* 15 */ "mmmmmmmpkkkkkkk"
// Level 6
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "ppppppppppppppq"
- /* 1 */ "riiiiiiiiiiiiiq"
- /* 2 */ "riCCCCCCCCCCDiq"
- /* 3 */ "riE.........Diq"
- /* 4 */ "riE.........Diq"
- /* 5 */ "riE.........Diq"
- /* 6 */ "riEFFFFFFF..Diq"
- /* 7 */ "riiiiiiiiE..Diq"
- /* 8 */ "rnnnnnnriE..Diq"
- /* 9 */ "mmmmmmmriE..Diq"
- /* 10 */ "mmmmmmmriE..Diq"
- /* 11 */ "mmmmmmmriE..Diq"
- /* 12 */ "mmmmmmmriE..Diq"
- /* 13 */ "mmmmmmmriEFFDiq"
- /* 14 */ "mmmmmmmriiiiiiq"
- /* 15 */ "mmmmmmmrnnnnnnn"
+ /* 0 */ "..............."
+ /* 1 */ ".pnnnnnnnnnnno."
+ /* 2 */ ".pgggggggggggo."
+ /* 3 */ ".pgggggggggggo."
+ /* 4 */ ".pgggggggggggo."
+ /* 5 */ ".pgggggggggggo."
+ /* 6 */ ".pgggggggggggo."
+ /* 7 */ ".pkkkkkkkggggo."
+ /* 8 */ "........pggggo."
+ /* 9 */ "mmmmmmm.pggggo."
+ /* 10 */ "mmmmmmm.pggggo."
+ /* 11 */ "mmmmmmm.pggggo."
+ /* 12 */ "mmmmmmm.pggggo."
+ /* 13 */ "mmmmmmm.pggggo."
+ /* 14 */ "mmmmmmm.kkkkko."
+ /* 15 */ "mmmmmmm........"
// Level 7
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "mmmmmmmmmmmmmmm"
- /* 1 */ "mrpppppppppppqm"
- /* 2 */ "mriiiiiiiiiiiqm"
- /* 3 */ "mriiiiiiiiiiiqm"
- /* 4 */ "mriiiiiiiiiiiqm"
- /* 5 */ "mriiiiiiiiiiiqm"
- /* 6 */ "mriiiiiiiiiiiqm"
- /* 7 */ "mrnnnnnnniiiiqm"
- /* 8 */ "mmmmmmmmriiiiqm"
- /* 9 */ "mmmmmmmmriiiiqm"
- /* 10 */ "mmmmmmmmriiiiqm"
- /* 11 */ "mmmmmmmmriiiiqm"
- /* 12 */ "mmmmmmmmriiiiqm"
- /* 13 */ "mmmmmmmmriiiiqm"
- /* 14 */ "mmmmmmmmnnnnnqm"
- /* 15 */ "mmmmmmmmmmmmmmm"
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..nnnnnnnnnnn.."
+ /* 3 */ "..pgggggggggo.."
+ /* 4 */ "..pgggggggggo.."
+ /* 5 */ "..pgggggggggo.."
+ /* 6 */ "..kkkkkkkkggo.."
+ /* 7 */ ".........pggo.."
+ /* 8 */ ".........pggo.."
+ /* 9 */ "mmmmmmm..pggo.."
+ /* 10 */ "mmmmmmm..pggo.."
+ /* 11 */ "mmmmmmm..pggo.."
+ /* 12 */ "mmmmmmm..pggo.."
+ /* 13 */ "mmmmmmm..kkko.."
+ /* 14 */ "mmmmmmm........"
+ /* 15 */ "mmmmmmm........"
// Level 8
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "mmmmmmmmmmmmmmm"
- /* 1 */ "mmmmmmmmmmmmmmm"
- /* 2 */ "mmpppppppppppmm"
- /* 3 */ "mmriiiiiiiiiqmm"
- /* 4 */ "mmriiiiiiiiiqmm"
- /* 5 */ "mmriiiiiiiiiqmm"
- /* 6 */ "mmnnnnnnnniiqmm"
- /* 7 */ "mmmmmmmmmriiqmm"
- /* 8 */ "mmmmmmmmmriiqmm"
- /* 9 */ "mmmmmmmmmriiqmm"
- /* 10 */ "mmmmmmmmmriiqmm"
- /* 11 */ "mmmmmmmmmriiqmm"
- /* 12 */ "mmmmmmmmmriiqmm"
- /* 13 */ "mmmmmmmmmnnnqmm"
- /* 14 */ "mmmmmmmmmmmmmmm"
- /* 15 */ "mmmmmmmmmmmmmmm"
-
- // Level 9
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ "mmmmmmmmmmmmmmm"
- /* 1 */ "mmmmmmmmmmmmmmm"
- /* 2 */ "mmmmmmmmmmmmmmm"
- /* 3 */ "mmmrpppppppqmmm"
- /* 4 */ "mmmriiiiiiiqmmm"
- /* 5 */ "mmmrnnnnnnrqmmm"
- /* 6 */ "mmmmmmmmmmrqmmm"
- /* 7 */ "mmmmmmmmmmrqmmm"
- /* 8 */ "mmmmmmmmmmrqmmm"
- /* 9 */ "mmmmmmmmmmrqmmm"
- /* 10 */ "mmmmmmmmmmrqmmm"
- /* 11 */ "mmmmmmmmmmrqmmm"
- /* 12 */ "mmmmmmmmmmrnmmm"
- /* 13 */ "mmmmmmmmmmmmmmm"
- /* 14 */ "mmmmmmmmmmmmmmm"
- /* 15 */ "mmmmmmmmmmmmmmm",
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "...pnnnnnnno..."
+ /* 4 */ "...pgggggggo..."
+ /* 5 */ "...pkkkkkkpo..."
+ /* 6 */ "..........po..."
+ /* 7 */ "..........po..."
+ /* 8 */ "..........po..."
+ /* 9 */ "mmmmmmm...po..."
+ /* 10 */ "mmmmmmm...po..."
+ /* 11 */ "mmmmmmm...po..."
+ /* 12 */ "mmmmmmm...pk..."
+ /* 13 */ "mmmmmmm........"
+ /* 14 */ "mmmmmmm........"
+ /* 15 */ "mmmmmmm........",
// Connectors:
- "-1: 7, 2, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -2864,6 +3383,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouseL13x14
@@ -2873,182 +3395,203 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 0, ID 4, created by Aloe_vera
{
// Size:
- 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
+ 16, 8, 16, // SizeX = 16, SizeY = 8, SizeZ = 16
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 16, 6, 16, // MaxX, MaxY, MaxZ
+ -1, 1, 0, // MinX, MinY, MinZ
+ 16, 7, 16, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 67: 0\n" /* stairs */
- "b: 67: 2\n" /* stairs */
- "c: 67: 1\n" /* stairs */
- "d: 4: 0\n" /* cobblestone */
- "e: 5: 0\n" /* wood */
- "f: 67: 3\n" /* stairs */
- "g: 17: 0\n" /* tree */
- "h: 64: 7\n" /* wooddoorblock */
- "i: 64: 5\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 2: 0\n" /* grass */
+ "c: 67: 0\n" /* stairs */
+ "d: 67: 2\n" /* stairs */
+ "e: 67: 1\n" /* stairs */
+ "f: 5: 0\n" /* wood */
+ "g: 67: 3\n" /* stairs */
+ "h: 17: 0\n" /* tree */
+ "i: 64: 7\n" /* wooddoorblock */
+ "j: 64: 5\n" /* wooddoorblock */
+ "k:102: 0\n" /* glasspane */
+ "l: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */
- "n: 53: 1\n" /* woodstairs */
- "o: 53: 7\n" /* woodstairs */
- "p: 53: 6\n" /* woodstairs */
- "q: 53: 3\n" /* woodstairs */
- "r: 53: 0\n" /* woodstairs */
- "s: 53: 5\n" /* woodstairs */
- "t: 53: 4\n" /* woodstairs */
- "u: 50: 3\n" /* torch */
- "v: 50: 2\n" /* torch */
- "w: 50: 4\n" /* torch */
- "x: 50: 1\n" /* torch */,
+ "n: 53: 2\n" /* woodstairs */
+ "o: 53: 1\n" /* woodstairs */
+ "p: 53: 7\n" /* woodstairs */
+ "q: 53: 6\n" /* woodstairs */
+ "r: 53: 3\n" /* woodstairs */
+ "s: 53: 0\n" /* woodstairs */
+ "t: 53: 5\n" /* woodstairs */
+ "u: 53: 4\n" /* woodstairs */
+ "v: 50: 3\n" /* torch */
+ "w: 50: 2\n" /* torch */
+ "x: 50: 4\n" /* torch */
+ "y: 50: 1\n" /* torch */,
// Block data:
// Level 0
/* z\x* 111111 */
/* * 0123456789012345 */
- /* 0 */ "........abc....."
- /* 1 */ ".dddddddddddddd."
- /* 2 */ ".deeeeeeeeeeeed."
- /* 3 */ ".deeeeeeeeeeeed."
- /* 4 */ ".deeeeeeeeeeeed."
- /* 5 */ ".deeeeeeeeeeeed."
- /* 6 */ ".deeeeeeeeeeeed."
- /* 7 */ ".ddddddddeeeeed."
- /* 8 */ "mmmmmafcdeeeeed."
- /* 9 */ "mmmmmmmmdeeeeed."
- /* 10 */ "mmmmmmmmdeeeeed."
- /* 11 */ "mmmmmmmmdeeeeed."
- /* 12 */ "mmmmmmmmdeeeeed."
- /* 13 */ "mmmmmmmmdeeeeed."
- /* 14 */ "mmmmmmmmddddddd."
- /* 15 */ "mmmmmmmm........"
+ /* 0 */ "mmmmmmmmaaammmmm"
+ /* 1 */ "maaaaaaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaaaaaam"
+ /* 6 */ "maaaaaaaaaaaaaam"
+ /* 7 */ "maaaaaaaaaaaaaam"
+ /* 8 */ "bbbbbaaaaaaaaaam"
+ /* 9 */ "bbbbbbbbaaaaaaam"
+ /* 10 */ "bbbbbbbbaaaaaaam"
+ /* 11 */ "bbbbbbbbaaaaaaam"
+ /* 12 */ "bbbbbbbbaaaaaaam"
+ /* 13 */ "bbbbbbbbaaaaaaam"
+ /* 14 */ "bbbbbbbbaaaaaaam"
+ /* 15 */ "bbbbbbbbmmmmmmmm"
// Level 1
/* z\x* 111111 */
/* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ ".geeeeeeghgeeeg."
- /* 2 */ ".e............e."
- /* 3 */ ".e............e."
- /* 4 */ ".e............e."
- /* 5 */ ".e............e."
- /* 6 */ ".e............e."
- /* 7 */ ".geeeeieg.....e."
- /* 8 */ "mmmmmm.me.....e."
- /* 9 */ "mmmmmmmme.....e."
- /* 10 */ "mmmmmmmme.....e."
- /* 11 */ "mmmmmmmme.....e."
- /* 12 */ "mmmmmmmme.....e."
- /* 13 */ "mmmmmmmme.....e."
- /* 14 */ "mmmmmmmmgeeeeeg."
- /* 15 */ "mmmmmmmm........"
+ /* 0 */ "........cde....."
+ /* 1 */ ".aaaaaaaaaaaaaa."
+ /* 2 */ ".affffffffffffa."
+ /* 3 */ ".affffffffffffa."
+ /* 4 */ ".affffffffffffa."
+ /* 5 */ ".affffffffffffa."
+ /* 6 */ ".affffffffffffa."
+ /* 7 */ ".aaaaaaaafffffa."
+ /* 8 */ ".....cgeafffffa."
+ /* 9 */ "........afffffa."
+ /* 10 */ "........afffffa."
+ /* 11 */ "........afffffa."
+ /* 12 */ "........afffffa."
+ /* 13 */ "........afffffa."
+ /* 14 */ "........aaaaaaa."
+ /* 15 */ "................"
// Level 2
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
- /* 1 */ ".gejjejjgkgjjeg."
- /* 2 */ ".j............e."
- /* 3 */ ".j............j."
- /* 4 */ ".j............j."
- /* 5 */ ".j............e."
- /* 6 */ ".j............j."
- /* 7 */ ".gejjekeg.....j."
- /* 8 */ "mmmmmm.me.....e."
- /* 9 */ "mmmmmmmmj.....j."
- /* 10 */ "mmmmmmmmj.....j."
- /* 11 */ "mmmmmmmme.....e."
- /* 12 */ "mmmmmmmmj.....j."
- /* 13 */ "mmmmmmmmj.....j."
- /* 14 */ "mmmmmmmmgjjjjjg."
- /* 15 */ "mmmmmmmm........"
+ /* 1 */ ".hffffffhihfffh."
+ /* 2 */ ".f............f."
+ /* 3 */ ".f............f."
+ /* 4 */ ".f............f."
+ /* 5 */ ".f............f."
+ /* 6 */ ".f............f."
+ /* 7 */ ".hffffjfh.....f."
+ /* 8 */ "........f.....f."
+ /* 9 */ "........f.....f."
+ /* 10 */ "........f.....f."
+ /* 11 */ "........f.....f."
+ /* 12 */ "........f.....f."
+ /* 13 */ "........f.....f."
+ /* 14 */ "........hfffffh."
+ /* 15 */ "................"
// Level 3
/* z\x* 111111 */
/* * 0123456789012345 */
- /* 0 */ "llllllllllllllln"
- /* 1 */ "ogeeeeeegegeeegn"
- /* 2 */ ".e............en"
- /* 3 */ ".e............en"
- /* 4 */ ".e............en"
- /* 5 */ ".e............en"
- /* 6 */ ".e............en"
- /* 7 */ "pgeeeeeeg.....en"
- /* 8 */ "qqqqqqqre.....en"
- /* 9 */ "mmmmmmmre.....en"
- /* 10 */ "mmmmmmmre.....en"
- /* 11 */ "mmmmmmmre.....en"
- /* 12 */ "mmmmmmmre.....en"
- /* 13 */ "mmmmmmmre.....en"
- /* 14 */ "mmmmmmmrgeeeeegn"
- /* 15 */ "mmmmmmmrs.....tn"
+ /* 0 */ "................"
+ /* 1 */ ".hfkkfkkhlhkkfh."
+ /* 2 */ ".k............f."
+ /* 3 */ ".k............k."
+ /* 4 */ ".k............k."
+ /* 5 */ ".k............f."
+ /* 6 */ ".k............k."
+ /* 7 */ ".hfkkflfh.....k."
+ /* 8 */ "........f.....f."
+ /* 9 */ "........k.....k."
+ /* 10 */ "........k.....k."
+ /* 11 */ "........f.....f."
+ /* 12 */ "........k.....k."
+ /* 13 */ "........k.....k."
+ /* 14 */ "........hkkkkkh."
+ /* 15 */ "................"
// Level 4
/* z\x* 111111 */
/* * 0123456789012345 */
- /* 0 */ "................"
- /* 1 */ "lllllllllllllll."
- /* 2 */ "oeeeeeeeeeeeeen."
- /* 3 */ ".e.........u.en."
- /* 4 */ ".e..........ven."
- /* 5 */ ".e......w....en."
- /* 6 */ "peeeeeeeee...en."
- /* 7 */ "qqqqqqqqrex..en."
- /* 8 */ "mmmmmmmmre...en."
- /* 9 */ "mmmmmmmmre...en."
- /* 10 */ "mmmmmmmmre...en."
- /* 11 */ "mmmmmmmmre...en."
- /* 12 */ "mmmmmmmmre...en."
- /* 13 */ "mmmmmmmmre...en."
- /* 14 */ "mmmmmmmmreeeeen."
- /* 15 */ "mmmmmmmmrs...tn."
+ /* 0 */ "nnnnnnnnnnnnnnno"
+ /* 1 */ "phffffffhfhfffho"
+ /* 2 */ ".f............fo"
+ /* 3 */ ".f............fo"
+ /* 4 */ ".f............fo"
+ /* 5 */ ".f............fo"
+ /* 6 */ ".f............fo"
+ /* 7 */ "qhffffffh.....fo"
+ /* 8 */ "rrrrrrrsf.....fo"
+ /* 9 */ ".......sf.....fo"
+ /* 10 */ ".......sf.....fo"
+ /* 11 */ ".......sf.....fo"
+ /* 12 */ ".......sf.....fo"
+ /* 13 */ ".......sf.....fo"
+ /* 14 */ ".......shfffffho"
+ /* 15 */ ".......st.....uo"
// Level 5
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
- /* 1 */ "................"
- /* 2 */ "llllllllllllln.."
- /* 3 */ "oeeeeeeeeeeeen.."
- /* 4 */ ".ex.........en.."
- /* 5 */ "peeeeeeeeee.en.."
- /* 6 */ "qqqqqqqqqre.en.."
- /* 7 */ ".........re.en.."
- /* 8 */ "mmmmmmmm.re.en.."
- /* 9 */ "mmmmmmmm.re.en.."
- /* 10 */ "mmmmmmmm.re.en.."
- /* 11 */ "mmmmmmmm.re.en.."
- /* 12 */ "mmmmmmmm.re.en.."
- /* 13 */ "mmmmmmmm.rewen.."
- /* 14 */ "mmmmmmmm.reeen.."
- /* 15 */ "mmmmmmmm.rs.tn.."
+ /* 1 */ "nnnnnnnnnnnnnnn."
+ /* 2 */ "pfffffffffffffo."
+ /* 3 */ ".f.........v.fo."
+ /* 4 */ ".f..........wfo."
+ /* 5 */ ".f......x....fo."
+ /* 6 */ "qfffffffff...fo."
+ /* 7 */ "rrrrrrrrsfy..fo."
+ /* 8 */ "........sf...fo."
+ /* 9 */ "........sf...fo."
+ /* 10 */ "........sf...fo."
+ /* 11 */ "........sf...fo."
+ /* 12 */ "........sf...fo."
+ /* 13 */ "........sf...fo."
+ /* 14 */ "........sfffffo."
+ /* 15 */ "........st...uo."
// Level 6
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
/* 1 */ "................"
+ /* 2 */ "nnnnnnnnnnnnno.."
+ /* 3 */ "pffffffffffffo.."
+ /* 4 */ ".fy.........fo.."
+ /* 5 */ "qffffffffff.fo.."
+ /* 6 */ "rrrrrrrrrsf.fo.."
+ /* 7 */ ".........sf.fo.."
+ /* 8 */ ".........sf.fo.."
+ /* 9 */ ".........sf.fo.."
+ /* 10 */ ".........sf.fo.."
+ /* 11 */ ".........sf.fo.."
+ /* 12 */ ".........sf.fo.."
+ /* 13 */ ".........sfxfo.."
+ /* 14 */ ".........sfffo.."
+ /* 15 */ ".........st.uo.."
+
+ // Level 7
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "................"
+ /* 1 */ "................"
/* 2 */ "................"
- /* 3 */ "lllllllllllll..."
- /* 4 */ "eeeeeeeeeeeen..."
- /* 5 */ "qqqqqqqqqqren..."
- /* 6 */ "..........ren..."
- /* 7 */ "..........ren..."
- /* 8 */ "mmmmmmmm..ren..."
- /* 9 */ "mmmmmmmm..ren..."
- /* 10 */ "mmmmmmmm..ren..."
- /* 11 */ "mmmmmmmm..ren..."
- /* 12 */ "mmmmmmmm..ren..."
- /* 13 */ "mmmmmmmm..ren..."
- /* 14 */ "mmmmmmmm..ren..."
- /* 15 */ "mmmmmmmm..ren...",
+ /* 3 */ "nnnnnnnnnnnnn..."
+ /* 4 */ "ffffffffffffo..."
+ /* 5 */ "rrrrrrrrrrsfo..."
+ /* 6 */ "..........sfo..."
+ /* 7 */ "..........sfo..."
+ /* 8 */ "..........sfo..."
+ /* 9 */ "..........sfo..."
+ /* 10 */ "..........sfo..."
+ /* 11 */ "..........sfo..."
+ /* 12 */ "..........sfo..."
+ /* 13 */ "..........sfo..."
+ /* 14 */ "..........sfo..."
+ /* 15 */ "..........sfo...",
// 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 */
@@ -3067,6 +3610,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouseL14x14
@@ -3076,162 +3622,145 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 42, ID 93, created by xoft
{
// Size:
- 11, 8, 11, // SizeX = 11, SizeY = 8, SizeZ = 11
+ 11, 7, 11, // SizeX = 11, SizeY = 7, SizeZ = 11
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 11, 7, 11, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 11, 6, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 7\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 7\n" /* woodstairs */
- "o: 53: 1\n" /* woodstairs */
- "p: 50: 3\n" /* torch */
- "q: 50: 4\n" /* torch */
- "r: 53: 6\n" /* woodstairs */
- "s: 50: 1\n" /* torch */
- "t: 50: 2\n" /* torch */
- "u: 53: 3\n" /* woodstairs */
- "v: 53: 0\n" /* woodstairs */
- "w: 53: 5\n" /* woodstairs */
- "x: 53: 4\n" /* woodstairs */,
+ "n: 50: 3\n" /* torch */
+ "o: 50: 4\n" /* torch */
+ "p: 53: 6\n" /* woodstairs */
+ "q: 50: 1\n" /* torch */
+ "r: 50: 2\n" /* torch */
+ "s: 53: 3\n" /* woodstairs */
+ "t: 53: 0\n" /* woodstairs */
+ "u: 53: 5\n" /* woodstairs */
+ "v: 53: 4\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "aaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaa"
- /* 9 */ "aaaaaaaaaaa"
- /* 10 */ "aaaaaaaaaaa"
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "maaaaaaaaam"
+ /* 2 */ "maaaaaaaaam"
+ /* 3 */ "maaaaaaaaam"
+ /* 4 */ "maaaaaaaaam"
+ /* 5 */ "maaaaaaaaam"
+ /* 6 */ "mmmmmaaaaam"
+ /* 7 */ "mmmmmaaaaam"
+ /* 8 */ "mmmmmaaaaam"
+ /* 9 */ "mmmmmaaaaam"
+ /* 10 */ "mmmmmmmmmmm"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "bbbbaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "bbbbbaaaaab"
- /* 7 */ "bbbbbaaaaab"
- /* 8 */ "bbbbbaaaaab"
- /* 9 */ "bbbbbaaaaab"
- /* 10 */ "bbbbbbbbbbb"
+ /* 0 */ "....bcd...."
+ /* 1 */ ".aaaaaaaaa."
+ /* 2 */ ".aaaaaaaaa."
+ /* 3 */ ".aaaaaaaaa."
+ /* 4 */ ".aaaaaaaaa."
+ /* 5 */ ".aaaaaaaaa."
+ /* 6 */ ".....aaaaa."
+ /* 7 */ ".....aaaaa."
+ /* 8 */ ".....aaaaa."
+ /* 9 */ ".....aaaaa."
+ /* 10 */ "..........."
// Level 2
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "....cde...."
- /* 1 */ ".fffffffff."
- /* 2 */ ".fffffffff."
- /* 3 */ ".fffffffff."
- /* 4 */ ".fffffffff."
- /* 5 */ ".fffffffff."
- /* 6 */ ".....fffff."
- /* 7 */ "mmmm.fffff."
- /* 8 */ "mmmm.fffff."
- /* 9 */ "mmmm.fffff."
- /* 10 */ "mmmm......."
+ /* 0 */ "..........."
+ /* 1 */ ".efffgfffe."
+ /* 2 */ ".f.......f."
+ /* 3 */ ".f.......f."
+ /* 4 */ ".f.......f."
+ /* 5 */ ".efffe...f."
+ /* 6 */ ".....f...f."
+ /* 7 */ ".....f...f."
+ /* 8 */ ".....f...f."
+ /* 9 */ ".....efffe."
+ /* 10 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ ".ghhhihhhg."
+ /* 1 */ ".ehhfifhhe."
/* 2 */ ".h.......h."
/* 3 */ ".h.......h."
/* 4 */ ".h.......h."
- /* 5 */ ".ghhhg...h."
+ /* 5 */ ".ehhhe...f."
/* 6 */ ".....h...h."
- /* 7 */ "mmmm.h...h."
- /* 8 */ "mmmm.h...h."
- /* 9 */ "mmmm.ghhhg."
- /* 10 */ "mmmm......."
+ /* 7 */ ".....h...h."
+ /* 8 */ ".....h...h."
+ /* 9 */ ".....ehhhe."
+ /* 10 */ "..........."
// Level 4
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "..........."
- /* 1 */ ".gjjhkhjjg."
- /* 2 */ ".j.......j."
- /* 3 */ ".j.......j."
- /* 4 */ ".j.......j."
- /* 5 */ ".gjjjg...h."
- /* 6 */ ".....j...j."
- /* 7 */ "mmmm.j...j."
- /* 8 */ "mmmm.j...j."
- /* 9 */ "mmmm.gjjjg."
- /* 10 */ "mmmm......."
+ /* 0 */ "jjjjjjjjjjj"
+ /* 1 */ "kfffffffffl"
+ /* 2 */ ".f..n.n..fl"
+ /* 3 */ ".f.......fl"
+ /* 4 */ ".f...o...fl"
+ /* 5 */ "pfffffq.rfl"
+ /* 6 */ "sssssf...fl"
+ /* 7 */ "....tf...fl"
+ /* 8 */ "....tf...fl"
+ /* 9 */ "....tfffffl"
+ /* 10 */ "....tu...vl"
// Level 5
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "lllllllllll"
- /* 1 */ "nhhhhhhhhho"
- /* 2 */ ".h..p.p..ho"
- /* 3 */ ".h.......ho"
- /* 4 */ ".h...q...ho"
- /* 5 */ "rhhhhhs.tho"
- /* 6 */ "uuuuuh...ho"
- /* 7 */ "mmmmvh...ho"
- /* 8 */ "mmmmvh...ho"
- /* 9 */ "mmmmvhhhhho"
- /* 10 */ "mmmmvw...xo"
-
- // Level 6
- /* z\x* 1 */
- /* * 01234567890 */
/* 0 */ "..........."
- /* 1 */ "lllllllllo."
- /* 2 */ "nhhhhhhhho."
- /* 3 */ ".h......ho."
- /* 4 */ "rhhhhhh.ho."
- /* 5 */ "uuuuuuh.ho."
- /* 6 */ ".....vh.ho."
- /* 7 */ "mmmm.vh.ho."
- /* 8 */ "mmmm.vh.ho."
- /* 9 */ "mmmm.vhhho."
- /* 10 */ "mmmm.vw.xo."
+ /* 1 */ "jjjjjjjjjl."
+ /* 2 */ "kffffffffl."
+ /* 3 */ ".f......fl."
+ /* 4 */ "pffffff.fl."
+ /* 5 */ "ssssssf.fl."
+ /* 6 */ ".....tf.fl."
+ /* 7 */ ".....tf.fl."
+ /* 8 */ ".....tf.fl."
+ /* 9 */ ".....tfffl."
+ /* 10 */ ".....tu.vl."
- // Level 7
+ // Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "lllllllll.."
- /* 3 */ "hhhhhhhho.."
- /* 4 */ "uuuuuuvho.."
- /* 5 */ "......vho.."
- /* 6 */ "......vho.."
- /* 7 */ "mmmm..vho.."
- /* 8 */ "mmmm..vho.."
- /* 9 */ "mmmm..vho.."
- /* 10 */ "mmmm..vho..",
+ /* 2 */ "jjjjjjjjj.."
+ /* 3 */ "ffffffffl.."
+ /* 4 */ "sssssstfl.."
+ /* 5 */ "......tfl.."
+ /* 6 */ "......tfl.."
+ /* 7 */ "......tfl.."
+ /* 8 */ "......tfl.."
+ /* 9 */ "......tfl.."
+ /* 10 */ "......tfl..",
// Connectors:
- "-1: 5, 2, 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 */
@@ -3250,6 +3779,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouseL9x9
@@ -3259,160 +3791,143 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 43, ID 94, created by xoft
{
// Size:
- 15, 8, 11, // SizeX = 15, SizeY = 8, SizeZ = 11
+ 15, 7, 11, // SizeX = 15, SizeY = 7, SizeZ = 11
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 15, 7, 11, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 15, 6, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 64: 7\n" /* wooddoorblock */
- "j:102: 0\n" /* glasspane */
- "k: 64:12\n" /* wooddoorblock */
- "l: 53: 2\n" /* woodstairs */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 64: 7\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 53: 2\n" /* woodstairs */
+ "k: 53: 0\n" /* woodstairs */
+ "l: 53: 1\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
- "n: 53: 0\n" /* woodstairs */
- "o: 53: 1\n" /* woodstairs */
- "p: 50: 3\n" /* torch */
- "q: 50: 4\n" /* torch */
- "r: 50: 2\n" /* torch */
- "s: 50: 1\n" /* torch */
- "t: 53: 3\n" /* woodstairs */
- "u: 53: 5\n" /* woodstairs */
- "v: 53: 4\n" /* woodstairs */,
+ "n: 50: 3\n" /* torch */
+ "o: 50: 4\n" /* torch */
+ "p: 50: 2\n" /* torch */
+ "q: 50: 1\n" /* torch */
+ "r: 53: 3\n" /* woodstairs */
+ "s: 53: 5\n" /* woodstairs */
+ "t: 53: 4\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "aaaaaaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaaaaaa"
- /* 9 */ "aaaaaaaaaaaaaaa"
- /* 10 */ "aaaaaaaaaaaaaaa"
+ /* 0 */ "mmmmmmaaammmmmm"
+ /* 1 */ "maaaaaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaaaaam"
+ /* 6 */ "maaaaammmaaaaam"
+ /* 7 */ "maaaaammmaaaaam"
+ /* 8 */ "maaaaammmaaaaam"
+ /* 9 */ "maaaaammmaaaaam"
+ /* 10 */ "mmmmmmmmmmmmmmm"
// Level 1
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "bbbbbbaaabbbbbb"
- /* 1 */ "baaaaaaaaaaaaab"
- /* 2 */ "baaaaaaaaaaaaab"
- /* 3 */ "baaaaaaaaaaaaab"
- /* 4 */ "baaaaaaaaaaaaab"
- /* 5 */ "baaaaaaaaaaaaab"
- /* 6 */ "baaaaabbbaaaaab"
- /* 7 */ "baaaaabbbaaaaab"
- /* 8 */ "baaaaabbbaaaaab"
- /* 9 */ "baaaaabbbaaaaab"
- /* 10 */ "bbbbbbbbbbbbbbb"
+ /* 0 */ "......bcd......"
+ /* 1 */ ".aaaaaaaaaaaaa."
+ /* 2 */ ".aaaaaaaaaaaaa."
+ /* 3 */ ".aaaaaaaaaaaaa."
+ /* 4 */ ".aaaaaaaaaaaaa."
+ /* 5 */ ".aaaaaaaaaaaaa."
+ /* 6 */ ".aaaaa...aaaaa."
+ /* 7 */ ".aaaaa...aaaaa."
+ /* 8 */ ".aaaaa...aaaaa."
+ /* 9 */ ".aaaaa...aaaaa."
+ /* 10 */ "..............."
// Level 2
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "......cde......"
- /* 1 */ ".fffffffffffff."
- /* 2 */ ".fffffffffffff."
- /* 3 */ ".fffffffffffff."
- /* 4 */ ".fffffffffffff."
- /* 5 */ ".fffffffffffff."
- /* 6 */ ".fffff...fffff."
- /* 7 */ ".fffff...fffff."
- /* 8 */ ".fffff...fffff."
- /* 9 */ ".fffff...fffff."
+ /* 0 */ "..............."
+ /* 1 */ ".efffffgfffffe."
+ /* 2 */ ".f...........f."
+ /* 3 */ ".f...........f."
+ /* 4 */ ".f...........f."
+ /* 5 */ ".f...efffe...f."
+ /* 6 */ ".f...f...f...f."
+ /* 7 */ ".f...f...f...f."
+ /* 8 */ ".f...f...f...f."
+ /* 9 */ ".efffe...efffe."
/* 10 */ "..............."
// Level 3
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".ghhhhhihhhhhg."
+ /* 1 */ ".ehhhhfifhhhhe."
/* 2 */ ".h...........h."
/* 3 */ ".h...........h."
/* 4 */ ".h...........h."
- /* 5 */ ".h...ghhhg...h."
+ /* 5 */ ".f...ehhhe...f."
/* 6 */ ".h...h...h...h."
/* 7 */ ".h...h...h...h."
/* 8 */ ".h...h...h...h."
- /* 9 */ ".ghhhg...ghhhg."
+ /* 9 */ ".ehhhe...ehhhe."
/* 10 */ "..............."
// Level 4
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "..............."
- /* 1 */ ".gjjjjhkhjjjjg."
- /* 2 */ ".j...........j."
- /* 3 */ ".j...........j."
- /* 4 */ ".j...........j."
- /* 5 */ ".h...gjjjg...h."
- /* 6 */ ".j...j...j...j."
- /* 7 */ ".j...j...j...j."
- /* 8 */ ".j...j...j...j."
- /* 9 */ ".gjjjg...gjjjg."
- /* 10 */ "..............."
+ /* 0 */ "jjjjjjjjjjjjjjj"
+ /* 1 */ "kfffffffffffffl"
+ /* 2 */ "kf....n.n....fl"
+ /* 3 */ "kf...........fl"
+ /* 4 */ "kf...o...o...fl"
+ /* 5 */ "kf..pfffffq..fl"
+ /* 6 */ "kf...frrrf...fl"
+ /* 7 */ "kf...fl.kf...fl"
+ /* 8 */ "kf...fl.kf...fl"
+ /* 9 */ "kfffffl.kfffffl"
+ /* 10 */ "ks...tl.ks...tl"
// Level 5
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "lllllllllllllll"
- /* 1 */ "nhhhhhhhhhhhhho"
- /* 2 */ "nh....p.p....ho"
- /* 3 */ "nh...........ho"
- /* 4 */ "nh...q...q...ho"
- /* 5 */ "nh..rhhhhhs..ho"
- /* 6 */ "nh...httth...ho"
- /* 7 */ "nh...ho.nh...ho"
- /* 8 */ "nh...ho.nh...ho"
- /* 9 */ "nhhhhho.nhhhhho"
- /* 10 */ "nu...vo.nu...vo"
-
- // Level 6
- /* z\x* 11111 */
- /* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".llllllllllllo."
- /* 2 */ ".nhhhhhhhhhhho."
- /* 3 */ ".nhhhhhhhhhhho."
- /* 4 */ ".nhhhhhhhhhhho."
- /* 5 */ ".nhhhotttthhho."
- /* 6 */ ".nhhho...nhhho."
- /* 7 */ ".nhhho...nhhho."
- /* 8 */ ".nhhho...nhhho."
- /* 9 */ ".nhhho...nhhho."
- /* 10 */ ".nu.vo...nu.vo."
+ /* 1 */ ".jjjjjjjjjjjjl."
+ /* 2 */ ".kfffffffffffl."
+ /* 3 */ ".kfffffffffffl."
+ /* 4 */ ".kfffffffffffl."
+ /* 5 */ ".kffflrrrrfffl."
+ /* 6 */ ".kfffl...kfffl."
+ /* 7 */ ".kfffl...kfffl."
+ /* 8 */ ".kfffl...kfffl."
+ /* 9 */ ".kfffl...kfffl."
+ /* 10 */ ".ks.tl...ks.tl."
- // Level 7
+ // Level 6
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ "..nllllllllll.."
- /* 3 */ "..nhhhhhhhhho.."
- /* 4 */ "..nhotttttnho.."
- /* 5 */ "..nho.....nho.."
- /* 6 */ "..nho.....nho.."
- /* 7 */ "..nho.....nho.."
- /* 8 */ "..nho.....nho.."
- /* 9 */ "..nho.....nho.."
- /* 10 */ "..nho.....nho..",
+ /* 2 */ "..kjjjjjjjjjj.."
+ /* 3 */ "..kfffffffffl.."
+ /* 4 */ "..kflrrrrrkfl.."
+ /* 5 */ "..kfl.....kfl.."
+ /* 6 */ "..kfl.....kfl.."
+ /* 7 */ "..kfl.....kfl.."
+ /* 8 */ "..kfl.....kfl.."
+ /* 9 */ "..kfl.....kfl.."
+ /* 10 */ "..kfl.....kfl..",
// Connectors:
- "-1: 7, 2, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3431,6 +3946,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenHouseU13x9
@@ -3440,272 +3958,254 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 60, ID 111, created by Aloe_vera
{
// Size:
- 9, 18, 13, // SizeX = 9, SizeY = 18, SizeZ = 13
+ 9, 17, 13, // SizeX = 9, SizeY = 17, SizeZ = 13
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 8, 17, 12, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 8, 16, 12, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 4: 0\n" /* cobblestone */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 67: 3\n" /* stairs */
- "g: 17: 0\n" /* tree */
- "h: 5: 0\n" /* wood */
- "i: 54: 4\n" /* chest */
- "j:154: 4\n" /* hopper */
- "k: 64: 4\n" /* wooddoorblock */
- "l:102: 0\n" /* glasspane */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 2\n" /* stairs */
+ "c: 67: 1\n" /* stairs */
+ "d: 67: 3\n" /* stairs */
+ "e: 17: 0\n" /* tree */
+ "f: 5: 0\n" /* wood */
+ "g: 54: 4\n" /* chest */
+ "h:154: 4\n" /* hopper */
+ "i: 64: 4\n" /* wooddoorblock */
+ "j:102: 0\n" /* glasspane */
+ "k: 85: 0\n" /* fence */
+ "l: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */
- "n: 85: 0\n" /* fence */
- "o: 64:12\n" /* wooddoorblock */
- "p: 50: 2\n" /* torch */
- "q: 35: 0\n" /* wool */
- "r: 17: 4\n" /* tree */
- "s: 17: 8\n" /* tree */
- "t: 53: 2\n" /* woodstairs */
- "u: 53: 7\n" /* woodstairs */
- "v: 53: 6\n" /* woodstairs */
- "w: 53: 3\n" /* woodstairs */,
+ "n: 50: 2\n" /* torch */
+ "o: 35: 0\n" /* wool */
+ "p: 17: 4\n" /* tree */
+ "q: 17: 8\n" /* tree */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 012345678 */
- /* 0 */ "aaaaaaaaa"
- /* 1 */ "aaaaaaaaa"
- /* 2 */ "aaaaaaaaa"
- /* 3 */ "aaaaaaaaa"
- /* 4 */ "aaaaaaaaa"
- /* 5 */ "aaaaaaaaa"
- /* 6 */ "aaaaaaaaa"
- /* 7 */ "aaaaaaaaa"
- /* 8 */ "aaaaaaaaa"
- /* 9 */ "aaaaaaaaa"
- /* 10 */ "aaaaaaaaa"
- /* 11 */ "aaaaaaaaa"
- /* 12 */ "aaaaaaaaa"
+ /* 0 */ "mmmmmmmmm"
+ /* 1 */ "mmmmmmmmm"
+ /* 2 */ "mmmmmmmmm"
+ /* 3 */ "mmmmmmmmm"
+ /* 4 */ "maaaaammm"
+ /* 5 */ "maaaaaamm"
+ /* 6 */ "maaaaaamm"
+ /* 7 */ "maaaaaamm"
+ /* 8 */ "maaaaammm"
+ /* 9 */ "mmmmmmmmm"
+ /* 10 */ "mmmmmmmmm"
+ /* 11 */ "mmmmmmmmm"
+ /* 12 */ "mmmmmmmmm"
// Level 1
/* z\x* 012345678 */
- /* 0 */ "bbbbbbbbb"
- /* 1 */ "bbbbbbbbb"
- /* 2 */ "bbbbbbbbb"
- /* 3 */ "bbbbbbbbb"
- /* 4 */ "baaaaabbb"
- /* 5 */ "baaaaaabb"
- /* 6 */ "baaaaaabb"
- /* 7 */ "baaaaaabb"
- /* 8 */ "baaaaabbb"
- /* 9 */ "bbbbbbbbb"
- /* 10 */ "bbbbbbbbb"
- /* 11 */ "bbbbbbbbb"
- /* 12 */ "bbbbbbbbb"
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ ".aaaaa..."
+ /* 5 */ ".aaaaab.."
+ /* 6 */ ".aaaaac.."
+ /* 7 */ ".aaaaad.."
+ /* 8 */ ".aaaaa..."
+ /* 9 */ "........."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 2
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
/* 3 */ "........."
- /* 4 */ ".ccccc..."
- /* 5 */ ".cccccd.."
- /* 6 */ ".ccccce.."
- /* 7 */ ".cccccf.."
- /* 8 */ ".ccccc..."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f...f..."
+ /* 6 */ ".fgh.i..."
+ /* 7 */ ".f...f..."
+ /* 8 */ ".efffe..."
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 3
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
/* 3 */ "........."
- /* 4 */ ".ghhhg..."
- /* 5 */ ".h...h..."
- /* 6 */ ".hij.k..."
- /* 7 */ ".h...h..."
- /* 8 */ ".ghhhg..."
+ /* 4 */ ".ejjje..."
+ /* 5 */ ".j...f..."
+ /* 6 */ ".j.k.l..."
+ /* 7 */ ".j...f..."
+ /* 8 */ ".ejjje..."
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 4
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
/* 3 */ "........."
- /* 4 */ ".glllg..."
- /* 5 */ ".l...h..."
- /* 6 */ ".l.n.o..."
- /* 7 */ ".l...h..."
- /* 8 */ ".glllg..."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f..nf..."
+ /* 6 */ ".f.k.f..."
+ /* 7 */ ".f..nf..k"
+ /* 8 */ ".efffe..o"
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 5
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
/* 3 */ "........."
- /* 4 */ ".ghhhg..."
- /* 5 */ ".h..ph..."
- /* 6 */ ".h.n.h..."
- /* 7 */ ".h..ph..n"
- /* 8 */ ".ghhhg..q"
+ /* 4 */ ".epppe..."
+ /* 5 */ ".q...q..."
+ /* 6 */ ".q.k.q..."
+ /* 7 */ ".q...q..k"
+ /* 8 */ ".epppe..o"
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 6
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
/* 3 */ "........."
- /* 4 */ ".grrrg..."
- /* 5 */ ".s...s..."
- /* 6 */ ".s.n.s..."
- /* 7 */ ".s...s..n"
- /* 8 */ ".grrrg..q"
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f...f..."
+ /* 6 */ ".f.k.f..k"
+ /* 7 */ ".f...f..o"
+ /* 8 */ ".efffe..o"
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 7
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
/* 3 */ "........."
- /* 4 */ ".ghhhg..."
- /* 5 */ ".h...h..."
- /* 6 */ ".h.n.h..n"
- /* 7 */ ".h...h..q"
- /* 8 */ ".ghhhg..q"
+ /* 4 */ ".ejjje..."
+ /* 5 */ ".j...j..."
+ /* 6 */ ".j.k.j..k"
+ /* 7 */ ".j...j..o"
+ /* 8 */ ".ejjje..."
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 8
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
+ /* 0 */ "........o"
+ /* 1 */ "........o"
+ /* 2 */ "........o"
/* 3 */ "........."
- /* 4 */ ".glllg..."
- /* 5 */ ".l...l..."
- /* 6 */ ".l.n.l..n"
- /* 7 */ ".l...l..q"
- /* 8 */ ".glllg..."
+ /* 4 */ ".efffe..."
+ /* 5 */ ".f...f..k"
+ /* 6 */ ".f.k.f..o"
+ /* 7 */ ".f...f..o"
+ /* 8 */ ".efffe..."
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 9
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.q"
- /* 1 */ "mmmmmmm.q"
- /* 2 */ "mmmmmmm.q"
- /* 3 */ "........."
- /* 4 */ ".ghhhg..."
- /* 5 */ ".h...h..n"
- /* 6 */ ".h.n.h..q"
- /* 7 */ ".h...h..q"
- /* 8 */ ".ghhhg..."
+ /* 0 */ "........k"
+ /* 1 */ "........k"
+ /* 2 */ "........o"
+ /* 3 */ "........o"
+ /* 4 */ ".epppe..o"
+ /* 5 */ ".q...q..k"
+ /* 6 */ ".q.k.q..o"
+ /* 7 */ ".q...q..k"
+ /* 8 */ ".epppe..k"
/* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 10 */ "........."
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 10
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.n"
- /* 1 */ "mmmmmmm.n"
- /* 2 */ "mmmmmmm.q"
- /* 3 */ "........q"
- /* 4 */ ".grrrg..q"
- /* 5 */ ".s...s..n"
- /* 6 */ ".s.n.s..q"
- /* 7 */ ".s...s..n"
- /* 8 */ ".grrrg..n"
- /* 9 */ "........."
- /* 10 */ "mmmmmmm.."
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........k"
+ /* 3 */ "rrrrrrr.k"
+ /* 4 */ "sfffffs.o"
+ /* 5 */ ".f...f..o"
+ /* 6 */ ".f.kppppp"
+ /* 7 */ ".f...f..o"
+ /* 8 */ "tffffft.o"
+ /* 9 */ "uuuuuuu.k"
+ /* 10 */ "........k"
+ /* 11 */ "........."
+ /* 12 */ "........."
// Level 11
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.n"
- /* 3 */ "ttttttt.n"
- /* 4 */ "uhhhhhu.q"
- /* 5 */ ".h...h..q"
- /* 6 */ ".h.nrrrrr"
- /* 7 */ ".h...h..q"
- /* 8 */ "vhhhhhv.q"
- /* 9 */ "wwwwwww.n"
- /* 10 */ "mmmmmmm.n"
- /* 11 */ "mmmmmmm.."
- /* 12 */ "mmmmmmm.."
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "rrrrrrr.k"
+ /* 5 */ "sfffffs.k"
+ /* 6 */ ".f...f..o"
+ /* 7 */ "tffffft.k"
+ /* 8 */ "uuuuuuu.o"
+ /* 9 */ "........o"
+ /* 10 */ "........o"
+ /* 11 */ "........k"
+ /* 12 */ "........k"
// Level 12
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
- /* 3 */ "mmmmmmm.."
- /* 4 */ "ttttttt.n"
- /* 5 */ "uhhhhhu.n"
- /* 6 */ ".h...h..q"
- /* 7 */ "vhhhhhv.n"
- /* 8 */ "wwwwwww.q"
- /* 9 */ "mmmmmmm.q"
- /* 10 */ "mmmmmmm.q"
- /* 11 */ "mmmmmmm.n"
- /* 12 */ "mmmmmmm.n"
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "........."
+ /* 3 */ "........."
+ /* 4 */ "........."
+ /* 5 */ "rrrrrrr.o"
+ /* 6 */ "fffffff.o"
+ /* 7 */ "uuuuuuu.k"
+ /* 8 */ "........."
+ /* 9 */ "........."
+ /* 10 */ "........o"
+ /* 11 */ "........o"
+ /* 12 */ "........o"
// Level 13
/* z\x* 012345678 */
- /* 0 */ "mmmmmmm.."
- /* 1 */ "mmmmmmm.."
- /* 2 */ "mmmmmmm.."
- /* 3 */ "mmmmmmm.."
- /* 4 */ "mmmmmmm.."
- /* 5 */ "ttttttt.q"
- /* 6 */ "hhhhhhh.q"
- /* 7 */ "wwwwwww.n"
- /* 8 */ "mmmmmmm.."
- /* 9 */ "mmmmmmm.."
- /* 10 */ "mmmmmmm.q"
- /* 11 */ "mmmmmmm.q"
- /* 12 */ "mmmmmmm.q"
-
- // Level 14
- /* z\x* 012345678 */
/* 0 */ "........."
/* 1 */ "........."
/* 2 */ "........."
/* 3 */ "........."
/* 4 */ "........."
- /* 5 */ "........q"
- /* 6 */ "........n"
+ /* 5 */ "........o"
+ /* 6 */ "........k"
/* 7 */ "........."
/* 8 */ "........."
/* 9 */ "........."
@@ -3713,15 +4213,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "........."
/* 12 */ "........."
- // Level 15
+ // Level 14
/* z\x* 012345678 */
/* 0 */ "........."
/* 1 */ "........."
/* 2 */ "........."
/* 3 */ "........."
- /* 4 */ "........q"
- /* 5 */ "........q"
- /* 6 */ "........n"
+ /* 4 */ "........o"
+ /* 5 */ "........o"
+ /* 6 */ "........k"
/* 7 */ "........."
/* 8 */ "........."
/* 9 */ "........."
@@ -3729,14 +4229,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "........."
/* 12 */ "........."
- // Level 16
+ // Level 15
/* z\x* 012345678 */
/* 0 */ "........."
/* 1 */ "........."
/* 2 */ "........."
/* 3 */ "........."
- /* 4 */ "........q"
- /* 5 */ "........n"
+ /* 4 */ "........o"
+ /* 5 */ "........k"
/* 6 */ "........."
/* 7 */ "........."
/* 8 */ "........."
@@ -3745,14 +4245,14 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 11 */ "........."
/* 12 */ "........."
- // Level 17
+ // Level 16
/* z\x* 012345678 */
/* 0 */ "........."
/* 1 */ "........."
/* 2 */ "........."
/* 3 */ "........."
- /* 4 */ "........q"
- /* 5 */ "........n"
+ /* 4 */ "........o"
+ /* 5 */ "........k"
/* 6 */ "........."
/* 7 */ "........."
/* 8 */ "........."
@@ -3762,7 +4262,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".........",
// Connectors:
- "-1: 8, 2, 6: 5\n" /* Type -1, direction X+ */,
+ "-1: 8, 1, 6: 5\n" /* Type -1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3781,6 +4281,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenMill5x5
@@ -3790,170 +4293,156 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 55, ID 106, created by Aloe_vera
{
// Size:
- 15, 10, 9, // SizeX = 15, SizeY = 10, SizeZ = 9
+ 15, 9, 9, // SizeX = 15, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
- -1, 0, 0, // MinX, MinY, MinZ
- 15, 9, 9, // MaxX, MaxY, MaxZ
+ -1, -1, 0, // MinX, MinY, MinZ
+ 15, 8, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
- "c: 67: 0\n" /* stairs */
- "d: 67: 2\n" /* stairs */
- "e: 67: 1\n" /* stairs */
- "f: 4: 0\n" /* cobblestone */
- "g: 17: 0\n" /* tree */
- "h:107: 0\n" /* fencegate */
- "i:107: 4\n" /* fencegate */
- "j: 5: 0\n" /* wood */
- "k:107: 6\n" /* fencegate */
- "l: 85: 0\n" /* fence */
+ "a: 4: 0\n" /* cobblestone */
+ "b: 67: 0\n" /* stairs */
+ "c: 67: 2\n" /* stairs */
+ "d: 67: 1\n" /* stairs */
+ "e: 3: 0\n" /* dirt */
+ "f: 17: 0\n" /* tree */
+ "g:107: 0\n" /* fencegate */
+ "h:107: 4\n" /* fencegate */
+ "i: 5: 0\n" /* wood */
+ "j:107: 6\n" /* fencegate */
+ "k: 85: 0\n" /* fence */
+ "l:170: 0\n" /* haybale */
"m: 19: 0\n" /* sponge */
- "n:170: 0\n" /* haybale */
- "o:170: 4\n" /* haybale */
- "p:170: 8\n" /* haybale */
- "q: 50: 1\n" /* torch */
- "r: 50: 2\n" /* torch */
- "s: 53: 2\n" /* woodstairs */
- "t: 53: 7\n" /* woodstairs */
- "u: 53: 6\n" /* woodstairs */
- "v: 53: 3\n" /* woodstairs */,
+ "n:170: 4\n" /* haybale */
+ "o:170: 8\n" /* haybale */
+ "p: 50: 1\n" /* torch */
+ "q: 50: 2\n" /* torch */
+ "r: 53: 2\n" /* woodstairs */
+ "s: 53: 7\n" /* woodstairs */
+ "t: 53: 6\n" /* woodstairs */
+ "u: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "aaaaaaaaaaaaaaa"
- /* 1 */ "aaaaaaaaaaaaaaa"
- /* 2 */ "aaaaaaaaaaaaaaa"
- /* 3 */ "aaaaaaaaaaaaaaa"
- /* 4 */ "aaaaaaaaaaaaaaa"
- /* 5 */ "aaaaaaaaaaaaaaa"
- /* 6 */ "aaaaaaaaaaaaaaa"
- /* 7 */ "aaaaaaaaaaaaaaa"
- /* 8 */ "aaaaaaaaaaaaaaa"
+ /* 0 */ "maaaaaaaaaaaaam"
+ /* 1 */ "maaaaaaaaaaaaam"
+ /* 2 */ "maaaaaaaaaaaaam"
+ /* 3 */ "maaaaaaaaaaaaam"
+ /* 4 */ "maaaaaaaaaaaaam"
+ /* 5 */ "maaaaaaaaaaaaam"
+ /* 6 */ "maaaaaaaaaaaaam"
+ /* 7 */ "maaaaaaaaaaaaam"
+ /* 8 */ "mmmmmmmmmmmmmmm"
// Level 1
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "baaaaaaaaaaaaab"
- /* 1 */ "baaaaaaaaaaaaab"
- /* 2 */ "baaaaaaaaaaaaab"
- /* 3 */ "baaaaaaaaaaaaab"
- /* 4 */ "baaaaaaaaaaaaab"
- /* 5 */ "baaaaaaaaaaaaab"
- /* 6 */ "baaaaaaaaaaaaab"
- /* 7 */ "baaaaaaaaaaaaab"
- /* 8 */ "bbbbbbbbbbbbbbb"
-
- // Level 2
- /* z\x* 11111 */
- /* * 012345678901234 */
- /* 0 */ ".cddddddddddde."
- /* 1 */ ".fffffffffffff."
- /* 2 */ ".faaaaaaaaaaaf."
- /* 3 */ ".faaaaaaaaaaaf."
- /* 4 */ ".faaaaaaaaaaaf."
- /* 5 */ ".faaaaaaaaaaaf."
- /* 6 */ ".faaaaaaaaaaaf."
- /* 7 */ ".fffffffffffff."
+ /* 0 */ ".bcccccccccccd."
+ /* 1 */ ".aaaaaaaaaaaaa."
+ /* 2 */ ".aeeeeeeeeeeea."
+ /* 3 */ ".aeeeeeeeeeeea."
+ /* 4 */ ".aeeeeeeeeeeea."
+ /* 5 */ ".aeeeeeeeeeeea."
+ /* 6 */ ".aeeeeeeeeeeea."
+ /* 7 */ ".aaaaaaaaaaaaa."
/* 8 */ "..............."
- // Level 3
+ // Level 2
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".ghihjhihjhkhg."
- /* 2 */ ".l...l...l...l."
- /* 3 */ ".l...l...l...l."
- /* 4 */ ".l...l...l...l."
- /* 5 */ ".l...l...l...l."
- /* 6 */ ".ln..l..olp..l."
- /* 7 */ ".gllljllljlllg."
+ /* 1 */ ".fghgighgigjgf."
+ /* 2 */ ".k...k...k...k."
+ /* 3 */ ".k...k...k...k."
+ /* 4 */ ".k...k...k...k."
+ /* 5 */ ".k...k...k...k."
+ /* 6 */ ".kl..k..nko..k."
+ /* 7 */ ".fkkkikkkikkkf."
/* 8 */ "..............."
- // Level 4
+ // Level 3
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".g...j...j...g."
+ /* 1 */ ".f...i...i...f."
/* 2 */ "..............."
/* 3 */ "..............."
/* 4 */ "..............."
/* 5 */ "..............."
/* 6 */ "..............."
- /* 7 */ ".g...j...j...g."
+ /* 7 */ ".f...i...i...f."
/* 8 */ "..............."
- // Level 5
+ // Level 4
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".gq.rjq.rjq.rg."
+ /* 1 */ ".fp.qip.qip.qf."
/* 2 */ "..............."
/* 3 */ "..............."
/* 4 */ "..............."
/* 5 */ "..............."
/* 6 */ "..............."
- /* 7 */ ".g...j...j...g."
+ /* 7 */ ".f...i...i...f."
/* 8 */ "..............."
- // Level 6
+ // Level 5
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "sssssssssssssss"
- /* 1 */ "tjjjjjjjjjjjjjt"
- /* 2 */ ".j...........j."
- /* 3 */ ".j...........j."
- /* 4 */ ".j...........j."
- /* 5 */ ".j...........j."
- /* 6 */ ".j...........j."
- /* 7 */ "ujjjjjjjjjjjjju"
- /* 8 */ "vvvvvvvvvvvvvvv"
+ /* 0 */ "rrrrrrrrrrrrrrr"
+ /* 1 */ "siiiiiiiiiiiiis"
+ /* 2 */ ".i...........i."
+ /* 3 */ ".i...........i."
+ /* 4 */ ".i...........i."
+ /* 5 */ ".i...........i."
+ /* 6 */ ".i...........i."
+ /* 7 */ "tiiiiiiiiiiiiit"
+ /* 8 */ "uuuuuuuuuuuuuuu"
- // Level 7
+ // Level 6
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ "sssssssssssssss"
- /* 2 */ "tjjjjjjjjjjjjjt"
- /* 3 */ ".j...........j."
- /* 4 */ ".j...........j."
- /* 5 */ ".j...........j."
- /* 6 */ "ujjjjjjjjjjjjju"
- /* 7 */ "vvvvvvvvvvvvvvv"
+ /* 1 */ "rrrrrrrrrrrrrrr"
+ /* 2 */ "siiiiiiiiiiiiis"
+ /* 3 */ ".i...........i."
+ /* 4 */ ".i...........i."
+ /* 5 */ ".i...........i."
+ /* 6 */ "tiiiiiiiiiiiiit"
+ /* 7 */ "uuuuuuuuuuuuuuu"
/* 8 */ "..............."
- // Level 8
+ // Level 7
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ "sssssssssssssss"
- /* 3 */ "tjjjjjjjjjjjjjt"
- /* 4 */ ".j...........j."
- /* 5 */ "ujjjjjjjjjjjjju"
- /* 6 */ "vvvvvvvvvvvvvvv"
+ /* 2 */ "rrrrrrrrrrrrrrr"
+ /* 3 */ "siiiiiiiiiiiiis"
+ /* 4 */ ".i...........i."
+ /* 5 */ "tiiiiiiiiiiiiit"
+ /* 6 */ "uuuuuuuuuuuuuuu"
/* 7 */ "..............."
/* 8 */ "..............."
- // Level 9
+ // Level 8
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
/* 2 */ "..............."
- /* 3 */ "sssssssssssssss"
- /* 4 */ "jjjjjjjjjjjjjjj"
- /* 5 */ "vvvvvvvvvvvvvvv"
+ /* 3 */ "rrrrrrrrrrrrrrr"
+ /* 4 */ "iiiiiiiiiiiiiii"
+ /* 5 */ "uuuuuuuuuuuuuuu"
/* 6 */ "..............."
/* 7 */ "..............."
/* 8 */ "...............",
// Connectors:
- "-1: 7, 2, -1: 2\n" /* Type -1, direction Z- */,
+ "-1: 7, 1, -1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3972,6 +4461,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // WoodenStables
}; // g_PlainsVillagePrefabs
@@ -4109,17 +4601,467 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
true,
// DefaultWeight:
- 100,
+ 0,
// DepthWeight:
"",
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // CobbleWell4x4
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineEntrance:
+ // The data has been exported from the gallery Plains, area index 138, ID 446, created by STR_Warrior
+ {
+ // Size:
+ 7, 38, 7, // SizeX = 7, SizeY = 38, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 37, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 77: 2\n" /* stonebutton */
+ "c: 66: 6\n" /* tracks */
+ "d: 27: 1\n" /* poweredrail */
+ "e: 66: 5\n" /* tracks */
+ "f: 66: 9\n" /* tracks */
+ "g: 66: 2\n" /* tracks */
+ "h: 50: 4\n" /* torch */
+ "i: 66: 4\n" /* tracks */
+ "j: 66: 8\n" /* tracks */
+ "k: 66: 3\n" /* tracks */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "maaaaam"
+ /* 1 */ "maaaaam"
+ /* 2 */ "maaaaam"
+ /* 3 */ "maaaaam"
+ /* 4 */ "maaaaam"
+ /* 5 */ "maaaaam"
+ /* 6 */ "mmmmmmm"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "mm...mm"
+ /* 1 */ "mm.abam"
+ /* 2 */ "mmcddam"
+ /* 3 */ "mae..am"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "mm...mm"
+ /* 1 */ "mm.a.mm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "mm.h.mm"
+ /* 1 */ "mm.a.mm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 12
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 13
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 14
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 15
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 16
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 17
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 18
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 19
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 20
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 21
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 22
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 23
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 24
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 25
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 26
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 27
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm.aamm"
+ /* 3 */ "ma..iam"
+ /* 4 */ "mm..jmm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 28
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmaklmm"
+ /* 3 */ "maa..am"
+ /* 4 */ "mm...mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 29
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mmc..mm"
+ /* 3 */ "mae.nam"
+ /* 4 */ "mmaa.mm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 30
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmammm"
+ /* 2 */ "mm...mm"
+ /* 3 */ "ma..aam"
+ /* 4 */ "mmfgamm"
+ /* 5 */ "mmmammm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 31
+ /* z\x* 0123456 */
+ /* 0 */ "ooomooo"
+ /* 1 */ "oaaaaao"
+ /* 2 */ "oa.aaao"
+ /* 3 */ "oa..iao"
+ /* 4 */ "oa..jao"
+ /* 5 */ "oaaaaao"
+ /* 6 */ "ooooooo"
+
+ // Level 32
+ /* z\x* 0123456 */
+ /* 0 */ "...p..."
+ /* 1 */ ".aqrba."
+ /* 2 */ "...fl.."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ ".a...a."
+ /* 6 */ "......."
+
+ // Level 33
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".a...a."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ ".a...a."
+ /* 6 */ "......."
+
+ // Level 34
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".a...a."
+ /* 2 */ "......."
+ /* 3 */ "......."
+ /* 4 */ "......."
+ /* 5 */ ".a...a."
+ /* 6 */ "......."
+
+ // Level 35
+ /* z\x* 0123456 */
+ /* 0 */ "ppppppp"
+ /* 1 */ "saaaaas"
+ /* 2 */ ".a...a."
+ /* 3 */ ".a...a."
+ /* 4 */ ".a...a."
+ /* 5 */ "taaaaat"
+ /* 6 */ "uuuuuuu"
+
+ // Level 36
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "ppppppp"
+ /* 2 */ "saaaaas"
+ /* 3 */ ".aaaaa."
+ /* 4 */ "taaaaat"
+ /* 5 */ "uuuuuuu"
+ /* 6 */ "......."
+
+ // Level 37
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "ppppppp"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "uuuuuuu"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "2: 6, 32, 3: 5\n" /* Type 2, direction X+ */
+ "2: 3, 32, 6: 3\n" /* Type 2, direction Z+ */
+ "2: 0, 32, 3: 4\n" /* Type 2, direction X- */
+ "2: 3, 32, 0: 2\n" /* Type 2, direction Z- */
+ "3: 3, 1, 0: 2\n" /* Type 3, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 1000,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // MineEntrance
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// RoofedWell:
// The data has been exported from the gallery Plains, area index 119, ID 271, created by STR_Warrior
@@ -4317,13 +5259,16 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
true,
// DefaultWeight:
- 100,
+ 0,
// DepthWeight:
"",
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // RoofedWell
};
diff --git a/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp
index 93aa405c2..4f0efdcc6 100644
--- a/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/SandFlatRoofVillagePrefabs.cpp
@@ -141,6 +141,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Forge
@@ -264,6 +267,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House11x7
@@ -363,6 +369,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House5x4
@@ -468,6 +477,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House5x5
@@ -573,6 +585,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House7x5
@@ -683,6 +698,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House8x5
@@ -805,6 +823,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House8x7
@@ -928,6 +949,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House9x7
@@ -1078,6 +1102,9 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // HouseL13x12
@@ -1087,75 +1114,86 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
// The data has been exported from the gallery Desert, area index 34, ID 175, 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
+ 6, 5, 6, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "a: 85: 0\n" /* fence */
- "b:171:14\n" /* carpet */
- "c:171:15\n" /* carpet */
- "d:171: 0\n" /* carpet */
- "e: 35:14\n" /* wool */
- "f: 35: 0\n" /* wool */
+ "a: 12: 0\n" /* sand */
+ "b: 85: 0\n" /* fence */
+ "c:171:14\n" /* carpet */
+ "d:171:15\n" /* carpet */
+ "e:171: 0\n" /* carpet */
+ "f: 35:14\n" /* wool */
+ "g: 35: 0\n" /* wool */
"m: 19: 0\n" /* sponge */,
// Block data:
// Level 0
/* z\x* 0123456 */
- /* 0 */ "a.....a"
- /* 1 */ "bccdccb"
- /* 2 */ "bcdddcb"
- /* 3 */ "bcdddcb"
- /* 4 */ "bccdccb"
- /* 5 */ "a.....a"
- /* 6 */ "......."
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
// Level 1
/* z\x* 0123456 */
- /* 0 */ "a.....a"
+ /* 0 */ "b.....b"
+ /* 1 */ "cddeddc"
+ /* 2 */ "cdeeedc"
+ /* 3 */ "cdeeedc"
+ /* 4 */ "cddeddc"
+ /* 5 */ "b.....b"
+ /* 6 */ "......."
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "b.....b"
/* 1 */ "......."
/* 2 */ "......."
/* 3 */ "......."
/* 4 */ "......."
- /* 5 */ "a.....a"
+ /* 5 */ "b.....b"
/* 6 */ "......."
- // Level 2
+ // Level 3
/* z\x* 0123456 */
- /* 0 */ "a.....a"
+ /* 0 */ "b.....b"
/* 1 */ "......."
/* 2 */ "......."
/* 3 */ "......."
/* 4 */ "......."
- /* 5 */ "a.....a"
- /* 6 */ "efefefe"
+ /* 5 */ "b.....b"
+ /* 6 */ "fgfgfgf"
- // Level 3
+ // Level 4
/* z\x* 0123456 */
- /* 0 */ "efefefe"
+ /* 0 */ "fgfgfgf"
/* 1 */ "......."
/* 2 */ "......."
/* 3 */ "......."
/* 4 */ "......."
- /* 5 */ "efefefe"
+ /* 5 */ "fgfgfgf"
/* 6 */ "......."
- // Level 4
+ // Level 5
/* z\x* 0123456 */
/* 0 */ "......."
- /* 1 */ "efefefe"
- /* 2 */ "efefefe"
- /* 3 */ "efefefe"
- /* 4 */ "efefefe"
+ /* 1 */ "fgfgfgf"
+ /* 2 */ "fgfgfgf"
+ /* 3 */ "fgfgfgf"
+ /* 4 */ "fgfgfgf"
/* 5 */ "......."
/* 6 */ ".......",
// Connectors:
- "-1: 2, -1, 0: 2\n" /* Type -1, direction Z- */,
+ "-1: 2, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -1167,13 +1205,16 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 5,
// DepthWeight:
"",
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // MarketStall
@@ -1300,13 +1341,16 @@ const cPrefab::sDef g_SandFlatRoofVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 20,
// DepthWeight:
"",
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Marketplace
}; // g_SandFlatRoofVillagePrefabs
@@ -1496,6 +1540,9 @@ const cPrefab::sDef g_SandFlatRoofVillageStartingPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Well
};
diff --git a/src/Generating/Prefabs/SandVillagePrefabs.cpp b/src/Generating/Prefabs/SandVillagePrefabs.cpp
index 539f57b9d..a062f8cd4 100644
--- a/src/Generating/Prefabs/SandVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/SandVillagePrefabs.cpp
@@ -82,6 +82,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // DoubleField
@@ -202,6 +205,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House11x7
@@ -345,6 +351,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House11x9
@@ -463,6 +472,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House13x7
@@ -606,6 +618,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House13x9
@@ -749,6 +764,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House15x9
@@ -892,6 +910,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House16x9
@@ -1003,6 +1024,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House7x7
@@ -1115,6 +1139,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // House9x7
@@ -1251,159 +1278,10 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
- }, // House9x9
-
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // HouseL14x12:
- // 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
-
- // Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 13, 5, 11, // 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 */
- "e:128: 3\n" /* sandstonestairs */
- "f: 64: 7\n" /* wooddoorblock */
- "g: 64: 5\n" /* wooddoorblock */
- "h:102: 0\n" /* glasspane */
- "i: 64:12\n" /* wooddoorblock */
- "j:128: 7\n" /* sandstonestairs */
- "k: 50: 3\n" /* torch */
- "l: 50: 4\n" /* torch */
- "m: 19: 0\n" /* sponge */
- "n:128: 6\n" /* sandstonestairs */
- "o:128: 5\n" /* sandstonestairs */
- "p:128: 4\n" /* sandstonestairs */
- "q: 50: 1\n" /* torch */,
-
- // Block data:
- // 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......."
-
- // 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......."
-
- // Level 2
- /* z\x* 1111 */
- /* * 01234567890123 */
- /* 0 */ ".............."
- /* 1 */ ".dhhdhhdidhhd."
- /* 2 */ ".h..........h."
- /* 3 */ ".h..........h."
- /* 4 */ ".h..........d."
- /* 5 */ ".dhhdidhh...h."
- /* 6 */ "........h...h."
- /* 7 */ "mmmmmmm.d...d."
- /* 8 */ "mmmmmmm.h...h."
- /* 9 */ "mmmmmmm.h...h."
- /* 10 */ "mmmmmmm.dhhhd."
- /* 11 */ "mmmmmmm......."
-
- // Level 3
- /* 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"
-
- // Level 4
- /* 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."
-
- // Level 5
- /* 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..",
-
- // Connectors:
- "-1: 8, 0, 0: 2\n" /* Type -1, direction Z- */,
-
- // AllowedRotations:
- 7, /* 1, 2, 3 CCW rotation allowed */
- // Merge strategy:
- cBlockArea::msSpongePrint,
-
- // ShouldExtendFloor:
+ // MoveToGround:
true,
-
- // DefaultWeight:
- 100,
-
- // DepthWeight:
- "",
-
- // AddWeightIfSame:
- 0,
- }, // HouseL14x12
+ }, // House9x9
@@ -1571,6 +1449,164 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
+ }, // HouseL14x12
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // HouseL14x12:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 5, 11, // 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 */
+ "e:128: 3\n" /* sandstonestairs */
+ "f: 64: 7\n" /* wooddoorblock */
+ "g: 64: 5\n" /* wooddoorblock */
+ "h:102: 0\n" /* glasspane */
+ "i: 64:12\n" /* wooddoorblock */
+ "j:128: 7\n" /* sandstonestairs */
+ "k: 50: 3\n" /* torch */
+ "l: 50: 4\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 6\n" /* sandstonestairs */
+ "o:128: 5\n" /* sandstonestairs */
+ "p:128: 4\n" /* sandstonestairs */
+ "q: 50: 1\n" /* torch */,
+
+ // Block data:
+ // 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......."
+
+ // 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......."
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ ".............."
+ /* 1 */ ".dhhdhhdidhhd."
+ /* 2 */ ".h..........h."
+ /* 3 */ ".h..........h."
+ /* 4 */ ".h..........d."
+ /* 5 */ ".dhhdidhh...h."
+ /* 6 */ "........h...h."
+ /* 7 */ "mmmmmmm.d...d."
+ /* 8 */ "mmmmmmm.h...h."
+ /* 9 */ "mmmmmmm.h...h."
+ /* 10 */ "mmmmmmm.dhhhd."
+ /* 11 */ "mmmmmmm......."
+
+ // Level 3
+ /* 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"
+
+ // Level 4
+ /* 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."
+
+ // Level 5
+ /* 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..",
+
+ // Connectors:
+ "-1: 8, 0, 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:
+ true,
}, // HouseL14x12
@@ -1638,6 +1674,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // SingleField
@@ -1731,6 +1770,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // SmallHut
}; // g_SandVillagePrefabs
@@ -1741,6 +1783,204 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
const cPrefab::sDef g_SandVillageStartingPrefabs[] =
{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // RoofedWell:
+ // The data has been exported from the gallery Desert, area index 43, ID 274, created by Aloe_vera
+ {
+ // Size:
+ 7, 14, 7, // SizeX = 7, SizeY = 14, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 13, 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: 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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaaaaa"
+ /* 3 */ "aaaaaaa"
+ /* 4 */ "aaaaaaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "abbbbba"
+ /* 2 */ "abcccba"
+ /* 3 */ "abcccba"
+ /* 4 */ "abcccba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "ddddddd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "dbcccbd"
+ /* 3 */ "dbcccbd"
+ /* 4 */ "dbcccbd"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddddddd"
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "ddbbbdd"
+ /* 1 */ "dbbbbbd"
+ /* 2 */ "bbcccbb"
+ /* 3 */ "bbcccbb"
+ /* 4 */ "bbcccbb"
+ /* 5 */ "dbbbbbd"
+ /* 6 */ "ddbbbdd"
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".bbbbb."
+ /* 2 */ ".b...b."
+ /* 3 */ ".b.e.b."
+ /* 4 */ ".b...b."
+ /* 5 */ ".bbbbb."
+ /* 6 */ "......."
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".f...f."
+ /* 2 */ "......."
+ /* 3 */ "...f..."
+ /* 4 */ "......."
+ /* 5 */ ".f...f."
+ /* 6 */ "......."
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".f...f."
+ /* 2 */ "......."
+ /* 3 */ "...f..."
+ /* 4 */ "......."
+ /* 5 */ ".f...f."
+ /* 6 */ "......."
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "ggggggg"
+ /* 1 */ "hbhhhbh"
+ /* 2 */ ".i...j."
+ /* 3 */ ".i.f.j."
+ /* 4 */ ".i...j."
+ /* 5 */ "kbkkkbk"
+ /* 6 */ "lllllll"
+
+ // Level 12
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "ggggggg"
+ /* 2 */ "hb...bh"
+ /* 3 */ ".b.f.b."
+ /* 4 */ "kb...bk"
+ /* 5 */ "lllllll"
+ /* 6 */ "......."
+
+ // Level 13
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "ggggggg"
+ /* 3 */ "bbbbbbb"
+ /* 4 */ "lllllll"
+ /* 5 */ "......."
+ /* 6 */ ".......",
+
+ // Connectors:
+ "2: 6, 8, 3: 5\n" /* Type 2, direction X+ */
+ "2: 3, 8, 6: 3\n" /* Type 2, direction Z+ */
+ "2: 0, 8, 3: 4\n" /* Type 2, direction X- */
+ "2: 3, 8, 0: 2\n" /* Type 2, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // RoofedWell
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Well:
// The data has been exported from the gallery Desert, area index 0, ID 1, created by Aloe_vera
@@ -1875,6 +2115,9 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] =
// AddWeightIfSame:
0,
+
+ // MoveToGround:
+ true,
}, // Well
};
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index 62822c33b..cb1f4fe0d 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -127,10 +127,23 @@ public:
m_HeightGen(a_HeightGen),
m_RoadBlock(a_RoadBlock)
{
+ // Generate the pieces for this village; don't care about the Y coord:
cBFSPieceGenerator pg(*this, a_Seed);
- // Generate the pieces at very negative Y coords, so that we can later test
- // Piece has negative Y coord -> hasn't been height-adjusted yet
- pg.PlacePieces(a_OriginX, -1000, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
+ pg.PlacePieces(a_OriginX, 0, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
+ if (m_Pieces.empty())
+ {
+ return;
+ }
+
+ // If the central piece should be moved to ground, move it, and
+ // check all of its dependents and move those that are strictly connector-driven based on its new Y coord:
+ if (((cPrefab &)m_Pieces[0]->GetPiece()).ShouldMoveToGround())
+ {
+ int OrigPosY = m_Pieces[0]->GetCoords().y;
+ PlacePieceOnGround(*m_Pieces[0]);
+ int NewPosY = m_Pieces[0]->GetCoords().y;
+ MoveAllDescendants(m_Pieces, 0, NewPosY - OrigPosY);
+ }
}
protected:
@@ -179,7 +192,7 @@ protected:
DrawRoad(a_Chunk, **itr, HeightMap);
continue;
}
- if ((*itr)->GetCoords().y < 0)
+ if (Prefab.ShouldMoveToGround() && !(*itr)->HasBeenMovedToGround())
{
PlacePieceOnGround(**itr);
}
@@ -201,7 +214,7 @@ protected:
cChunkDef::HeightMap HeightMap;
m_HeightGen.GenHeightMap(ChunkX, ChunkZ, HeightMap);
int TerrainHeight = cChunkDef::GetHeight(HeightMap, BlockX, BlockZ);
- a_Piece.GetCoords().y += TerrainHeight - FirstConnector.m_Pos.y + 1;
+ a_Piece.MoveToGroundBy(TerrainHeight - FirstConnector.m_Pos.y + 1);
}
@@ -232,11 +245,13 @@ protected:
return m_Prefabs.GetPiecesWithConnector(a_ConnectorType);
}
+
virtual cPieces GetStartingPieces(void)
{
return m_Prefabs.GetStartingPieces();
}
+
virtual int GetPieceWeight(
const cPlacedPiece & a_PlacedPiece,
const cPiece::cConnector & a_ExistingConnector,
@@ -258,15 +273,35 @@ protected:
return m_Prefabs.GetPieceWeight(a_PlacedPiece, a_ExistingConnector, a_NewPiece);
}
+
virtual void PiecePlaced(const cPiece & a_Piece) override
{
m_Prefabs.PiecePlaced(a_Piece);
}
+
virtual void Reset(void) override
{
m_Prefabs.Reset();
}
+
+
+ void MoveAllDescendants(cPlacedPieces & a_PlacedPieces, size_t a_Pivot, int a_HeightDifference)
+ {
+ size_t num = a_PlacedPieces.size();
+ cPlacedPiece * Pivot = a_PlacedPieces[a_Pivot];
+ for (size_t i = a_Pivot + 1; i < num; i++)
+ {
+ if (
+ (a_PlacedPieces[i]->GetParent() == Pivot) && // It is a direct dependant of the pivot
+ !((const cPrefab &)a_PlacedPieces[i]->GetPiece()).ShouldMoveToGround() // It attaches strictly by connectors
+ )
+ {
+ a_PlacedPieces[i]->MoveToGroundBy(a_HeightDifference);
+ MoveAllDescendants(a_PlacedPieces, i, a_HeightDifference);
+ }
+ } // for i - a_PlacedPieces[]
+ }
} ;
--
cgit v1.2.3
From c9c2a4f479474fe03acce598ba2687a0f4817083 Mon Sep 17 00:00:00 2001
From: JoannisO
Date: Mon, 26 May 2014 08:44:16 +0200
Subject: Added Arrow- and FireCharge-Dispensing to DispenserEntity.
---
src/BlockEntities/DispenserEntity.cpp | 107 ++++++++++++++++++++++++++++------
src/BlockEntities/DispenserEntity.h | 15 +++--
2 files changed, 95 insertions(+), 27 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 2a32f69d9..7257513df 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -6,8 +6,10 @@
#include "../Simulator/FluidSimulator.h"
#include "../Chunk.h"
-
-
+#include "../World.h"
+#include "../Entities/ArrowEntity.h"
+#include "../Entities/FireChargeEntity.h"
+#include "../Matrix4.h"
cDispenserEntity::cDispenserEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) :
@@ -69,7 +71,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
break;
} // E_ITEM_BUCKET
-
+
case E_ITEM_WATER_BUCKET:
{
LOGD("Dispensing water bucket in slot %d; DispBlock is \"%s\" (%d).", a_SlotNum, ItemTypeToString(DispBlock).c_str(), DispBlock);
@@ -83,7 +85,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
break;
}
-
+
case E_ITEM_LAVA_BUCKET:
{
LOGD("Dispensing lava bucket in slot %d; DispBlock is \"%s\" (%d).", a_SlotNum, ItemTypeToString(DispBlock).c_str(), DispBlock);
@@ -97,7 +99,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
break;
}
-
+
case E_ITEM_SPAWN_EGG:
{
double MobX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
@@ -108,7 +110,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
break;
}
-
+
case E_BLOCK_TNT:
{
// Spawn a primed TNT entity, if space allows:
@@ -128,7 +130,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
if (DispChunk->GetBlock(DispX, DispY, DispZ) == E_BLOCK_AIR)
{
DispChunk->SetBlock(DispX, DispY, DispZ, E_BLOCK_FIRE, 0);
-
+
bool ItemBroke = m_Contents.DamageItem(a_SlotNum, 1);
if (ItemBroke)
@@ -138,13 +140,63 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
break;
}
-
+
case E_ITEM_FIRE_CHARGE:
{
- // TODO: Spawn fireball entity
+ Vector3d Speed = GetProjectileLookVector(a_Chunk);
+
+ double MobX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
+ double MobZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
+
+
+ cFireChargeEntity* fireCharge = new cFireChargeEntity(NULL /*was this*/, MobX, (double) DispY + 0.3, MobZ, Speed);
+
+
+ if (fireCharge == NULL)
+ {
+ break;
+ }
+ if (!fireCharge->Initialize(m_World))
+ {
+
+ delete fireCharge;
+ break;
+ }
+ m_World->BroadcastSpawnEntity(*fireCharge);
+
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
+
+ break;
+ }
+
+ case E_ITEM_ARROW:
+ {
+ Vector3d Speed = GetProjectileLookVector(a_Chunk);
+
+ double MobX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
+ double MobZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
+
+
+ cArrowEntity* Arrow = new cArrowEntity(NULL /*was this*/, MobX, (double) DispY + 0.3, MobZ, Speed);
+
+
+ if (Arrow == NULL)
+ {
+ break;
+ }
+ if (!Arrow->Initialize(m_World))
+ {
+
+ delete Arrow;
+ break;
+ }
+ m_World->BroadcastSpawnEntity(*Arrow);
+
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
+
break;
}
-
+
default:
{
DropFromSlot(a_Chunk, a_SlotNum);
@@ -154,8 +206,29 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
+Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
+{
+ NIBBLETYPE Meta = a_Chunk.GetMeta(m_RelX, m_PosY, m_RelZ);
+ int Direction = 0;
+ switch (Meta)
+ {
+ case E_META_DROPSPENSER_FACING_YP: Direction = 0; break; // YP & YM don't have associated smoke dirs, just do 4 (centre of block)
+ case E_META_DROPSPENSER_FACING_YM: Direction = 0; break;
+ case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
+ case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
+ case E_META_DROPSPENSER_FACING_ZM: Direction = 180; break;
+ case E_META_DROPSPENSER_FACING_ZP: Direction = 0; break;
+ }
+
+ Matrix4d m;
+ m.Init(Vector3d(), 0, Direction, 0);
+ Vector3d Look = m.Transform(Vector3d(0, 0, 1));
+ Vector3d Speed = Look * 20;
+ Speed.y = Speed.y + 1;
+ return Speed;
+}
bool cDispenserEntity::ScoopUpLiquid(int a_SlotNum, short a_BucketItemType)
@@ -167,14 +240,14 @@ bool cDispenserEntity::ScoopUpLiquid(int a_SlotNum, short a_BucketItemType)
m_Contents.SetSlot(a_SlotNum, LiquidBucket);
return true;
}
-
+
// There are stacked buckets at the selected slot, see if a full bucket will fit somewhere else
if (m_Contents.HowManyCanFit(LiquidBucket) < 1)
{
// Cannot fit into m_Contents
return false;
}
-
+
m_Contents.ChangeSlotCount(a_SlotNum, -1);
m_Contents.AddItem(LiquidBucket);
return true;
@@ -195,7 +268,7 @@ bool cDispenserEntity::EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum
// Not a suitable block in front
return false;
}
-
+
cItem EmptyBucket(E_ITEM_BUCKET, 1);
if (m_Contents.GetSlot(a_SlotNum).m_ItemCount == 1)
{
@@ -203,20 +276,16 @@ bool cDispenserEntity::EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum
m_Contents.SetSlot(a_SlotNum, EmptyBucket);
return true;
}
-
+
// There are full buckets stacked at this slot, check if we can fit in the empty bucket
if (m_Contents.HowManyCanFit(EmptyBucket) < 1)
{
// The empty bucket wouldn't fit into m_Contents
return false;
}
-
+
// The empty bucket fits in, remove one full bucket and add the empty one
m_Contents.ChangeSlotCount(a_SlotNum, -1);
m_Contents.AddItem(EmptyBucket);
return true;
}
-
-
-
-
diff --git a/src/BlockEntities/DispenserEntity.h b/src/BlockEntities/DispenserEntity.h
index fdfe4e5b4..02a34be37 100644
--- a/src/BlockEntities/DispenserEntity.h
+++ b/src/BlockEntities/DispenserEntity.h
@@ -12,11 +12,11 @@ class cDispenserEntity :
public cDropSpenserEntity
{
typedef cDropSpenserEntity super;
-
+
public:
// tolua_end
-
+
/// Constructor used for normal operation
cDispenserEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
@@ -25,14 +25,13 @@ public:
private:
// cDropSpenser overrides:
virtual void DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum) override;
-
+
/// If such a bucket can fit, adds it to m_Contents and returns true
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
-
+
+ // Returns how to aim the projectile
+ Vector3d GetProjectileLookVector(cChunk & a_Chunk);
+
/// If the a_BlockInFront is liquidable and the empty bucket can fit, does the m_Contents processing and returns true
bool EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum);
} ; // tolua_export
-
-
-
-
--
cgit v1.2.3
From 24137e282bc97497bcf8c50745d2d45da59b1a27 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Mon, 26 May 2014 10:05:51 +0200
Subject: Fixed prefab test initialization.
---
src/Generating/Prefab.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/Generating/Prefab.cpp b/src/Generating/Prefab.cpp
index e41907325..2ab1455b9 100644
--- a/src/Generating/Prefab.cpp
+++ b/src/Generating/Prefab.cpp
@@ -108,6 +108,9 @@ static const cPrefab::sDef g_TestPrefabDef =
// AddWeightIfSame:
1000,
+
+ // MoveToGround:
+ false,
};
static cPrefab g_TestPrefab(g_TestPrefabDef);
--
cgit v1.2.3
From 16e4af0793c55533dd999a5c2e8ade4ddd212d72 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Mon, 26 May 2014 10:50:17 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 22befc822..5847cdd17 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
+MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/mcs_team.svg)](https://www.gittip.com/on/github/mc-server/) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
========
MCServer is a Minecraft server that is written in C++ and designed to be efficient with memory and CPU, as well as having a flexible Lua Plugin API.
--
cgit v1.2.3
From 69c39648750e2f752212103cc12998f7f73751fc Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Mon, 26 May 2014 10:50:42 +0100
Subject: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5847cdd17..9b9694841 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/mcs_team.svg)](https://www.gittip.com/on/github/mc-server/) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
+MCServer [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer) [![Support via Gittip](http://img.shields.io/gittip/mcs_team.svg)](https://www.gittip.com/mcs_team) [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
========
MCServer is a Minecraft server that is written in C++ and designed to be efficient with memory and CPU, as well as having a flexible Lua Plugin API.
--
cgit v1.2.3
From 1d6dbb6278d9700ffaa69717508eac72fde05f59 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Mon, 26 May 2014 12:29:45 +0100
Subject: Minor fixes.
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 9b9694841..e6d9492f0 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Normally, you will want to download a pre-compiled version of MCServer from one
* [Linux and Raspberry Pi](http://ci.bearbin.net) (Bearbin's CI Server)
* [Windows](http://mc-server.xoft.cz) (xoft's nightly build service)
-You simply need to download and extract these files before you can use the server.
+You simply need to download and extract these files before you can use the server.
If you're a more advanced user, you may want to compile the server yourself for more performance. See the [COMPILING.md](https://github.com/mc-server/MCServer/blob/master/COMPILING.md) file for more details.
@@ -24,7 +24,7 @@ Contributing
MCServer is licensed under the Apache license V2, and we welcome anybody to fork and submit a Pull Request back with their changes, and if you want to join as a permanent member we can add you to the team.
-Check out the [CONTRIBUTING.md](https://github.com/mc-server/MCServer/blob/master/CONTRIBUTING.md) file for more infos.
+Check out the [CONTRIBUTING.md](https://github.com/mc-server/MCServer/blob/master/CONTRIBUTING.md) file for more details.
Other Stuff
-----------
@@ -33,7 +33,7 @@ For other stuff, including plugins and discussion, check the [forums](http://for
Earn bitcoins for commits or donate to reward the MCServer developers: [![tip for next commit](http://tip4commit.com/projects/74.svg)](http://tip4commit.com/projects/74)
-Support Via Gittip: [![Support via Gittip](http://img.shields.io/gittip/on%2Fgithub%2Fmc-server.svg)](https://www.gittip.com/on/github/mc-server/)
+Support Us on Gittip: [![Support via Gittip](http://img.shields.io/gittip/mcs_team.svg)](https://www.gittip.com/mcs_team)
Travis CI: [![Build Status](http://img.shields.io/travis/mc-server/MCServer.svg)](https://travis-ci.org/mc-server/MCServer)
--
cgit v1.2.3
From 74801f564775ae4c6b70834f76167a54b8a84826 Mon Sep 17 00:00:00 2001
From: JoannisO
Date: Mon, 26 May 2014 14:47:04 +0200
Subject: - Added support for more types of projectiles in the Dispenser -
Improved the method of spawning projectiles in the world - Added another
method for spawning the projectiles
---
src/BlockEntities/DispenserEntity.cpp | 82 +++++++++++++++++++----------------
src/BlockEntities/DispenserEntity.h | 7 +++
2 files changed, 51 insertions(+), 38 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 7257513df..e2032a041 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -9,9 +9,12 @@
#include "../World.h"
#include "../Entities/ArrowEntity.h"
#include "../Entities/FireChargeEntity.h"
+#include "../Entities/ProjectileEntity.h"
#include "../Matrix4.h"
+
+
cDispenserEntity::cDispenserEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) :
super(E_BLOCK_DISPENSER, a_BlockX, a_BlockY, a_BlockZ, a_World)
{
@@ -143,56 +146,37 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_FIRE_CHARGE:
{
- Vector3d Speed = GetProjectileLookVector(a_Chunk);
-
- double MobX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
- double MobZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
-
-
- cFireChargeEntity* fireCharge = new cFireChargeEntity(NULL /*was this*/, MobX, (double) DispY + 0.3, MobZ, Speed);
-
-
- if (fireCharge == NULL)
- {
- break;
- }
- if (!fireCharge->Initialize(m_World))
- {
-
- delete fireCharge;
- break;
- }
- m_World->BroadcastSpawnEntity(*fireCharge);
-
- m_Contents.ChangeSlotCount(a_SlotNum, -1);
+ spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge);
break;
}
case E_ITEM_ARROW:
{
- Vector3d Speed = GetProjectileLookVector(a_Chunk);
-
- double MobX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
- double MobZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
+ spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow);
+ break;
+ }
- cArrowEntity* Arrow = new cArrowEntity(NULL /*was this*/, MobX, (double) DispY + 0.3, MobZ, Speed);
+ case E_ITEM_SNOWBALL:
+ {
+ // Not working as there is no such entity yet?
+ spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball);
+ break;
+ }
- if (Arrow == NULL)
- {
- break;
- }
- if (!Arrow->Initialize(m_World))
- {
+ case E_ITEM_EGG:
+ {
+ // Not working as there is no such entity yet?
+ spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg);
- delete Arrow;
- break;
- }
- m_World->BroadcastSpawnEntity(*Arrow);
+ break;
+ }
- m_Contents.ChangeSlotCount(a_SlotNum, -1);
+ case E_ITEM_FIREWORK_ROCKET:
+ {
+ spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFirework);
break;
}
@@ -206,6 +190,20 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
}
+
+void cDispenserEntity::spawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX, int& DispY, int& DispZ, cProjectileEntity::eKind kind)
+{
+ Vector3d Speed = GetProjectileLookVector(a_Chunk);
+ cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(DispX, DispZ);
+
+ double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
+ double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
+
+ m_World->CreateProjectile((double) EntityX, (double) DispY, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, &Speed);
+}
+
+
+
Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
{
NIBBLETYPE Meta = a_Chunk.GetMeta(m_RelX, m_PosY, m_RelZ);
@@ -231,6 +229,10 @@ Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
}
+
+
+
+
bool cDispenserEntity::ScoopUpLiquid(int a_SlotNum, short a_BucketItemType)
{
cItem LiquidBucket(a_BucketItemType, 1);
@@ -289,3 +291,7 @@ bool cDispenserEntity::EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum
m_Contents.AddItem(EmptyBucket);
return true;
}
+
+
+
+
diff --git a/src/BlockEntities/DispenserEntity.h b/src/BlockEntities/DispenserEntity.h
index 02a34be37..9290bee5c 100644
--- a/src/BlockEntities/DispenserEntity.h
+++ b/src/BlockEntities/DispenserEntity.h
@@ -29,9 +29,16 @@ private:
/// If such a bucket can fit, adds it to m_Contents and returns true
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
+ // Spawns a projectile of the given kind in front of the dispenser
+ void spawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX, int& DispY, int& DispZ, cProjectileEntity::eKind kind);
+
// Returns how to aim the projectile
Vector3d GetProjectileLookVector(cChunk & a_Chunk);
/// If the a_BlockInFront is liquidable and the empty bucket can fit, does the m_Contents processing and returns true
bool EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum);
} ; // tolua_export
+
+
+
+
--
cgit v1.2.3
From 6449b5d11b5a07183812189d5eead0734f9dc191 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Mon, 26 May 2014 16:38:14 +0200
Subject: Revert "Add more move checks"
This reverts commit 989312c4e7f517ae324e857cb255211e3fd8bb06.
---
src/ClientHandle.cpp | 74 ++++++++++++----------------------------------------
src/ClientHandle.h | 2 +-
2 files changed, 17 insertions(+), 59 deletions(-)
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index e7537d74d..83b21ae3c 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -582,37 +582,16 @@ void cClientHandle::HandlePlayerPos(double a_PosX, double a_PosY, double a_PosZ,
return;
}
- if (m_Player->GetHealth() <= 0)
- {
- // The player is dead. He can't move :D
- return;
- }
-
- if (std::isnan(a_PosX) || std::isnan(a_PosY) || std::isnan(a_PosZ) || std::isnan(a_Stance))
- {
- LOGWARN("%s was caught trying to crash the server with an invalid position.", m_Player->GetName().c_str());
- Kick("Nope!");
- return;
- }
-
- // Invalid stance check
- if (!m_Player->IsInBed())
- {
- double Difference = a_Stance - a_PosY;
- if ((Difference > 1.65) || (Difference < 1.0))
- {
- Kick("Illegal stance!");
- LOGWARN("%s had an illegal stance: %f", m_Player->GetName().c_str(), a_Stance);
- return;
- }
- }
-
- if ((std::abs(a_PosX) > 32000000.0) || (std::abs(a_PosZ) > 32000000.0))
+ /*
+ // TODO: Invalid stance check
+ if ((a_PosY >= a_Stance) || (a_Stance > a_PosY + 1.65))
{
- Kick("Illegal position!");
+ LOGD("Invalid stance");
+ SendPlayerMoveLook();
return;
}
-
+ */
+
// If the player has moved too far, "repair" them:
Vector3d Pos(a_PosX, a_PosY, a_PosZ);
if ((m_Player->GetPosition() - Pos).SqrLength() > 100 * 100)
@@ -1410,7 +1389,7 @@ void cClientHandle::HandlePlayerLook(float a_Rotation, float a_Pitch, bool a_IsO
-void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Yaw, float a_Pitch, bool a_IsOnGround)
+void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Rotation, float a_Pitch, bool a_IsOnGround)
{
if ((m_Player == NULL) || (m_State != csPlaying))
{
@@ -1418,42 +1397,21 @@ void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_
return;
}
- if (m_Player->GetHealth() <= 0)
- {
- // The player is dead. He can't move :D
- return;
- }
-
- if (std::isnan(a_PosX) || std::isnan(a_PosY) || std::isnan(a_PosZ) || std::isnan(a_Stance))
- {
- LOGWARN("%s was caught trying to crash the server with an invalid position.", m_Player->GetName().c_str());
- Kick("Nope!");
- return;
- }
-
- // Invalid stance check
- if (!m_Player->IsInBed())
- {
- double Difference = a_Stance - a_PosY;
- if ((Difference > 1.65) || (Difference < 1.0))
- {
- Kick("Illegal stance!");
- LOGWARN("%s had an illegal stance: %f", m_Player->GetName().c_str(), a_Stance);
- return;
- }
- }
-
- if ((std::abs(a_PosX) > 32000000.0) || (std::abs(a_PosZ) > 32000000.0))
+ /*
+ // TODO: Invalid stance check
+ if ((a_PosY >= a_Stance) || (a_Stance > a_PosY + 1.65))
{
- Kick("Illegal position!");
+ LOGD("Invalid stance");
+ SendPlayerMoveLook();
return;
}
+ */
m_Player->MoveTo(Vector3d(a_PosX, a_PosY, a_PosZ));
m_Player->SetStance (a_Stance);
m_Player->SetTouchGround(a_IsOnGround);
- m_Player->SetHeadYaw (a_Yaw);
- m_Player->SetYaw (a_Yaw);
+ m_Player->SetHeadYaw (a_Rotation);
+ m_Player->SetYaw (a_Rotation);
m_Player->SetPitch (a_Pitch);
}
diff --git a/src/ClientHandle.h b/src/ClientHandle.h
index 04d93e2c0..659c67658 100644
--- a/src/ClientHandle.h
+++ b/src/ClientHandle.h
@@ -225,7 +225,7 @@ public:
void HandlePing (void);
void HandlePlayerAbilities (bool a_CanFly, bool a_IsFlying, float FlyingSpeed, float WalkingSpeed);
void HandlePlayerLook (float a_Rotation, float a_Pitch, bool a_IsOnGround);
- void HandlePlayerMoveLook (double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Yaw, float a_Pitch, bool a_IsOnGround); // While m_bPositionConfirmed (normal gameplay)
+ void HandlePlayerMoveLook (double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Rotation, float a_Pitch, bool a_IsOnGround); // While m_bPositionConfirmed (normal gameplay)
void HandlePlayerPos (double a_PosX, double a_PosY, double a_PosZ, double a_Stance, bool a_IsOnGround);
void HandlePluginMessage (const AString & a_Channel, const AString & a_Message);
void HandleRespawn (void);
--
cgit v1.2.3
From 2194238ef0b376353e7260df5a964976d0b72c5f Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Mon, 26 May 2014 17:17:54 +0100
Subject: Update main.css
---
MCServer/Plugins/APIDump/main.css | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/MCServer/Plugins/APIDump/main.css b/MCServer/Plugins/APIDump/main.css
index aa26bd186..0a779bfb8 100644
--- a/MCServer/Plugins/APIDump/main.css
+++ b/MCServer/Plugins/APIDump/main.css
@@ -39,7 +39,8 @@ pre
body
{
- min-width: 800px;
+ min-width: 400px;
+ max-width: 900px;
width: 95%;
margin: 10px auto;
background-color: white;
--
cgit v1.2.3
From 0a3570bc9daab9fb8772dee48aab1ba6bf4da92a Mon Sep 17 00:00:00 2001
From: archshift
Date: Mon, 26 May 2014 14:13:40 -0700
Subject: ClientHandle.cpp: remove redundant code
HandlePlayerMoveLook() calls HandlePlayerPos() and HandlePlayerLook() to reduce code redundancy.
---
src/ClientHandle.cpp | 24 ++----------------------
1 file changed, 2 insertions(+), 22 deletions(-)
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 83b21ae3c..4aa42a489 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -1391,28 +1391,8 @@ void cClientHandle::HandlePlayerLook(float a_Rotation, float a_Pitch, bool a_IsO
void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Rotation, float a_Pitch, bool a_IsOnGround)
{
- if ((m_Player == NULL) || (m_State != csPlaying))
- {
- // The client hasn't been spawned yet and sends nonsense, we know better
- return;
- }
-
- /*
- // TODO: Invalid stance check
- if ((a_PosY >= a_Stance) || (a_Stance > a_PosY + 1.65))
- {
- LOGD("Invalid stance");
- SendPlayerMoveLook();
- return;
- }
- */
-
- m_Player->MoveTo(Vector3d(a_PosX, a_PosY, a_PosZ));
- m_Player->SetStance (a_Stance);
- m_Player->SetTouchGround(a_IsOnGround);
- m_Player->SetHeadYaw (a_Rotation);
- m_Player->SetYaw (a_Rotation);
- m_Player->SetPitch (a_Pitch);
+ HandlePlayerPos(a_PosX, a_PosY, a_PosZ, a_Stance, a_IsOnGround);
+ HandlePlayerLook(a_Rotation, a_Pitch, a_IsOnGround);
}
--
cgit v1.2.3
From c204735f3840d2199c48b13bd26e9b8d80394b83 Mon Sep 17 00:00:00 2001
From: archshift
Date: Tue, 27 May 2014 00:28:46 -0700
Subject: ClientHandle.cpp: Process look before pos
---
src/ClientHandle.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 4aa42a489..9b03bead9 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -1391,8 +1391,8 @@ void cClientHandle::HandlePlayerLook(float a_Rotation, float a_Pitch, bool a_IsO
void cClientHandle::HandlePlayerMoveLook(double a_PosX, double a_PosY, double a_PosZ, double a_Stance, float a_Rotation, float a_Pitch, bool a_IsOnGround)
{
- HandlePlayerPos(a_PosX, a_PosY, a_PosZ, a_Stance, a_IsOnGround);
HandlePlayerLook(a_Rotation, a_Pitch, a_IsOnGround);
+ HandlePlayerPos(a_PosX, a_PosY, a_PosZ, a_Stance, a_IsOnGround);
}
--
cgit v1.2.3
From 1128dc783f4ee0913f3395c0a79ebdbbce2cfdee Mon Sep 17 00:00:00 2001
From: Joannis
Date: Tue, 27 May 2014 11:08:06 +0200
Subject: - Fixed the ampersands and asterisks to fit the format. - Fixed the
method "SpawnProjectileFromDispenser" to use CamelCasing.
---
src/BlockEntities/DispenserEntity.cpp | 14 +++++++-------
src/BlockEntities/DispenserEntity.h | 2 +-
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index e2032a041..0f64118ef 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -146,14 +146,14 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_FIRE_CHARGE:
{
- spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge);
+ SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge);
break;
}
case E_ITEM_ARROW:
{
- spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow);
+ SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow);
break;
}
@@ -161,7 +161,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_SNOWBALL:
{
// Not working as there is no such entity yet?
- spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball);
+ SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball);
break;
}
@@ -169,14 +169,14 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_EGG:
{
// Not working as there is no such entity yet?
- spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg);
+ SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg);
break;
}
case E_ITEM_FIREWORK_ROCKET:
{
- spawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFirework);
+ SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFirework);
break;
}
@@ -191,7 +191,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
-void cDispenserEntity::spawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX, int& DispY, int& DispZ, cProjectileEntity::eKind kind)
+void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind)
{
Vector3d Speed = GetProjectileLookVector(a_Chunk);
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(DispX, DispZ);
@@ -199,7 +199,7 @@ void cDispenserEntity::spawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX,
double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
- m_World->CreateProjectile((double) EntityX, (double) DispY, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, &Speed);
+ m_World->CreateProjectile((double) EntityX, (double) DispY, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, & Speed);
}
diff --git a/src/BlockEntities/DispenserEntity.h b/src/BlockEntities/DispenserEntity.h
index 9290bee5c..8bc2475c9 100644
--- a/src/BlockEntities/DispenserEntity.h
+++ b/src/BlockEntities/DispenserEntity.h
@@ -30,7 +30,7 @@ private:
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
// Spawns a projectile of the given kind in front of the dispenser
- void spawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX, int& DispY, int& DispZ, cProjectileEntity::eKind kind);
+ void SpawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX, int& DispY, int& DispZ, cProjectileEntity::eKind kind);
// Returns how to aim the projectile
Vector3d GetProjectileLookVector(cChunk & a_Chunk);
--
cgit v1.2.3
From 19df18c46199f06f3bf2058cc0efee9126e7670a Mon Sep 17 00:00:00 2001
From: Tycho
Date: Tue, 27 May 2014 12:44:56 +0100
Subject: Fixed test globals to work with precompiled headers
---
src/ChunkData.cpp | 4 --
src/Globals.h | 48 ++++++++++----
tests/ChunkData/ArraytoCoord.cpp | 2 +-
tests/ChunkData/Coordinates.cpp | 2 +-
tests/ChunkData/Copies.cpp | 2 +-
tests/ChunkData/creatable.cpp | 2 +-
tests/TestGlobals.h | 139 ---------------------------------------
7 files changed, 40 insertions(+), 159 deletions(-)
delete mode 100644 tests/TestGlobals.h
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 79029f0cf..c41dcb265 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -1,9 +1,5 @@
-#ifdef TEST_GLOBALS
-#include "TestGlobals.h"
-#else
#include "Globals.h"
-#endif
#include "ChunkData.h"
cChunkData::cChunkData()
diff --git a/src/Globals.h b/src/Globals.h
index 71e9191e4..85cfd2f18 100644
--- a/src/Globals.h
+++ b/src/Globals.h
@@ -225,16 +225,28 @@ template class SizeChecker;
+#ifndef TEST_GLOBALS
+ // Common headers (part 1, without macros):
+ #include "StringUtils.h"
+ #include "OSSupport/Sleep.h"
+ #include "OSSupport/CriticalSection.h"
+ #include "OSSupport/Semaphore.h"
+ #include "OSSupport/Event.h"
+ #include "OSSupport/Thread.h"
+ #include "OSSupport/File.h"
+ #include "MCLogger.h"
+#else
+ // Logging functions
+void inline LOGERROR(const char* a_Format, ...) FORMATSTRING(1,2);
-// Common headers (part 1, without macros):
-#include "StringUtils.h"
-#include "OSSupport/Sleep.h"
-#include "OSSupport/CriticalSection.h"
-#include "OSSupport/Semaphore.h"
-#include "OSSupport/Event.h"
-#include "OSSupport/Thread.h"
-#include "OSSupport/File.h"
-#include "MCLogger.h"
+void inline LOGERROR(const char* a_Format, ...)
+{
+ va_list argList;
+ va_start(argList, a_Format);
+ vprintf(a_Format, argList);
+ va_end(argList);
+}
+#endif
@@ -253,10 +265,22 @@ template class SizeChecker;
#define FAST_FLOOR_DIV( x, div ) (((x) - (((x) < 0) ? ((div) - 1) : 0)) / (div))
// Own version of assert() that writes failed assertions to the log for review
-#ifdef _DEBUG
- #define ASSERT( x ) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__ ), assert(0), 0 ) )
+#ifdef TEST_GLOBALS
+
+ class cAssertFailure
+ {
+ };
+
+ #define ASSERT(x) do { if (!(x)) { throw cAssertFailure();} } while (0)
+ #define testassert(x) do { if(!(x)) { exit(1); } } while (0)
+ #define CheckAsserts(x) do { try {x} catch (cAssertFailure) { break; } exit(1); } while (0)
+
#else
- #define ASSERT(x) ((void)(x))
+ #ifdef _DEBUG
+ #define ASSERT( x ) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__ ), assert(0), 0 ) )
+ #else
+ #define ASSERT(x) ((void)(x))
+ #endif
#endif
// Pretty much the same as ASSERT() but stays in Release builds
diff --git a/tests/ChunkData/ArraytoCoord.cpp b/tests/ChunkData/ArraytoCoord.cpp
index 1138fb5b6..37533de77 100644
--- a/tests/ChunkData/ArraytoCoord.cpp
+++ b/tests/ChunkData/ArraytoCoord.cpp
@@ -1,5 +1,5 @@
-#include "TestGlobals.h"
+#include "Globals.h"
#include "ChunkData.h"
diff --git a/tests/ChunkData/Coordinates.cpp b/tests/ChunkData/Coordinates.cpp
index f02b68d40..938c66dcc 100644
--- a/tests/ChunkData/Coordinates.cpp
+++ b/tests/ChunkData/Coordinates.cpp
@@ -1,5 +1,5 @@
-#include "TestGlobals.h"
+#include "Globals.h"
#include "ChunkData.h"
diff --git a/tests/ChunkData/Copies.cpp b/tests/ChunkData/Copies.cpp
index b10ddb759..78a458f5b 100644
--- a/tests/ChunkData/Copies.cpp
+++ b/tests/ChunkData/Copies.cpp
@@ -1,5 +1,5 @@
-#include "TestGlobals.h"
+#include "Globals.h"
#include "ChunkData.h"
diff --git a/tests/ChunkData/creatable.cpp b/tests/ChunkData/creatable.cpp
index 74025cb14..1321bf49b 100644
--- a/tests/ChunkData/creatable.cpp
+++ b/tests/ChunkData/creatable.cpp
@@ -1,5 +1,5 @@
-#include "TestGlobals.h"
+#include "Globals.h"
#include "ChunkData.h"
int main(int argc, char** argv)
diff --git a/tests/TestGlobals.h b/tests/TestGlobals.h
deleted file mode 100644
index ea43de733..000000000
--- a/tests/TestGlobals.h
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-#include
-#include
-#include
-
-
-// Compiler-dependent stuff:
-#if defined(_MSC_VER)
- // MSVC produces warning C4481 on the override keyword usage, so disable the warning altogether
- #pragma warning(disable:4481)
-
- // Disable some warnings that we don't care about:
- #pragma warning(disable:4100) // Unreferenced formal parameter
-
- // Useful warnings from warning level 4:
- #pragma warning(3 : 4127) // Conditional expression is constant
- #pragma warning(3 : 4189) // Local variable is initialized but not referenced
- #pragma warning(3 : 4245) // Conversion from 'type1' to 'type2', signed/unsigned mismatch
- #pragma warning(3 : 4310) // Cast truncates constant value
- #pragma warning(3 : 4389) // Signed/unsigned mismatch
- #pragma warning(3 : 4505) // Unreferenced local function has been removed
- #pragma warning(3 : 4701) // Potentially unitialized local variable used
- #pragma warning(3 : 4702) // Unreachable code
- #pragma warning(3 : 4706) // Assignment within conditional expression
-
- // Disabling this warning, because we know what we're doing when we're doing this:
- #pragma warning(disable: 4355) // 'this' used in initializer list
-
- // Disabled because it's useless:
- #pragma warning(disable: 4512) // 'class': assignment operator could not be generated - reported for each class that has a reference-type member
-
- // 2014_01_06 xoft: Disabled this warning because MSVC is stupid and reports it in obviously wrong places
- // #pragma warning(3 : 4244) // Conversion from 'type1' to 'type2', possible loss of data
-
- #define OBSOLETE __declspec(deprecated)
-
- // No alignment needed in MSVC
- #define ALIGN_8
- #define ALIGN_16
-
- #define FORMATSTRING(formatIndex, va_argsIndex)
-
- // MSVC has its own custom version of zu format
- #define SIZE_T_FMT "%Iu"
- #define SIZE_T_FMT_PRECISION(x) "%" #x "Iu"
- #define SIZE_T_FMT_HEX "%Ix"
-
- #define NORETURN __declspec(noreturn)
-
-#elif defined(__GNUC__)
-
- // TODO: Can GCC explicitly mark classes as abstract (no instances can be created)?
- #define abstract
-
- // override is part of c++11
- #if __cplusplus < 201103L
- #define override
- #endif
-
- #define OBSOLETE __attribute__((deprecated))
-
- #define ALIGN_8 __attribute__((aligned(8)))
- #define ALIGN_16 __attribute__((aligned(16)))
-
- // Some portability macros :)
- #define stricmp strcasecmp
-
- #define FORMATSTRING(formatIndex, va_argsIndex) __attribute__((format (printf, formatIndex, va_argsIndex)))
-
- #define SIZE_T_FMT "%zu"
- #define SIZE_T_FMT_PRECISION(x) "%" #x "zu"
- #define SIZE_T_FMT_HEX "%zx"
-
- #define NORETURN __attribute((__noreturn__))
-
-#else
-
- #error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler"
-
- /*
- // Copy and uncomment this into another #elif section based on your compiler identification
-
- // Explicitly mark classes as abstract (no instances can be created)
- #define abstract
-
- // Mark virtual methods as overriding (forcing them to have a virtual function of the same signature in the base class)
- #define override
-
- // Mark functions as obsolete, so that their usage results in a compile-time warning
- #define OBSOLETE
-
- // Mark types / variables for alignment. Do the platforms need it?
- #define ALIGN_8
- #define ALIGN_16
- */
-
-#endif
-
-
-
-// Integral types with predefined sizes:
-typedef long long Int64;
-typedef int Int32;
-typedef short Int16;
-
-typedef unsigned long long UInt64;
-typedef unsigned int UInt32;
-typedef unsigned short UInt16;
-
-typedef unsigned char Byte;
-
-class cAssertFailure
-{
-};
-
-#define ASSERT(x) do { if (!(x)) { throw cAssertFailure();} } while (0)
-#define testassert(x) do { if(!(x)) { exit(1); } } while (0)
-#define CheckAsserts(x) do { try {x} catch (cAssertFailure) { break; } exit(1); } while (0)
-
-#ifndef TOLUA_TEMPLATE_BIND
-#define TOLUA_TEMPLATE_BIND(x)
-#endif
-
-// A macro that is used to mark unused function parameters, to avoid pedantic warnings in gcc
-#define UNUSED(X) (void)(X)
-
-// Logging functions
-void inline LOGERROR(const char* a_Format, ...) FORMATSTRING(1,2);
-
-void inline LOGERROR(const char* a_Format, ...)
-{
- va_list argList;
- va_start(argList, a_Format);
- vprintf(a_Format, argList);
- va_end(argList);
-}
-
-
--
cgit v1.2.3
From 6c25c356c7769b64fd43b0dd2611deb18bdd5619 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Tue, 27 May 2014 21:18:15 +0200
Subject: Biome generators: biome lists can contain spaces.
---
src/Generating/BioGen.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Generating/BioGen.cpp b/src/Generating/BioGen.cpp
index 32a687201..47ba080c6 100644
--- a/src/Generating/BioGen.cpp
+++ b/src/Generating/BioGen.cpp
@@ -212,7 +212,7 @@ void cBioGenCache::InitializeBiomeGen(cIniFile & a_IniFile)
void cBiomeGenList::InitializeBiomes(const AString & a_Biomes)
{
- AStringVector Split = StringSplit(a_Biomes, ",");
+ AStringVector Split = StringSplitAndTrim(a_Biomes, ",");
// Convert each string in the list into biome:
for (AStringVector::const_iterator itr = Split.begin(); itr != Split.end(); ++itr)
--
cgit v1.2.3
From e06f786f1151e1934890a2555de080b1a6860ec4 Mon Sep 17 00:00:00 2001
From: Alexander Harkness
Date: Tue, 27 May 2014 20:24:04 +0100
Subject: Stuff.
---
MCServer/Plugins/APIDump/main.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/MCServer/Plugins/APIDump/main.css b/MCServer/Plugins/APIDump/main.css
index 0a779bfb8..8041e0d01 100644
--- a/MCServer/Plugins/APIDump/main.css
+++ b/MCServer/Plugins/APIDump/main.css
@@ -40,7 +40,7 @@ pre
body
{
min-width: 400px;
- max-width: 900px;
+ max-width: 1200px;
width: 95%;
margin: 10px auto;
background-color: white;
--
cgit v1.2.3
From ff99373237178e9f7da02f51581f9a83d0e624d9 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Tue, 27 May 2014 22:05:50 +0200
Subject: cPieceGenerator chooses starting pieces based on weights.
Fixes #1033.
---
src/Generating/PieceGenerator.cpp | 26 +++++++++++++++++++++++++-
src/Generating/PieceGenerator.h | 9 +++++++++
src/Generating/PrefabPiecePool.cpp | 9 +++++++++
src/Generating/PrefabPiecePool.h | 1 +
4 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/src/Generating/PieceGenerator.cpp b/src/Generating/PieceGenerator.cpp
index 1880a20d5..5de231f75 100644
--- a/src/Generating/PieceGenerator.cpp
+++ b/src/Generating/PieceGenerator.cpp
@@ -362,7 +362,31 @@ cPlacedPiece * cPieceGenerator::PlaceStartingPiece(int a_BlockX, int a_BlockY, i
// Choose a random one of the starting pieces:
cPieces StartingPieces = m_PiecePool.GetStartingPieces();
- cPiece * StartingPiece = StartingPieces[rnd % StartingPieces.size()];
+ int Total = 0;
+ for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
+ {
+ Total += m_PiecePool.GetStartingPieceWeight(**itr);
+ }
+ cPiece * StartingPiece;
+ if (Total > 0)
+ {
+ int Chosen = rnd % Total;
+ StartingPiece = StartingPieces.front();
+ for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
+ {
+ Chosen -= m_PiecePool.GetStartingPieceWeight(**itr);
+ if (Chosen <= 0)
+ {
+ StartingPiece = *itr;
+ break;
+ }
+ }
+ }
+ else
+ {
+ // All pieces returned zero weight, but we need one to start. Choose with equal chance:
+ StartingPiece = StartingPieces[rnd % StartingPieces.size()];
+ }
rnd = rnd >> 16;
// Choose a random supported rotation:
diff --git a/src/Generating/PieceGenerator.h b/src/Generating/PieceGenerator.h
index 21c155c96..fd8576706 100644
--- a/src/Generating/PieceGenerator.h
+++ b/src/Generating/PieceGenerator.h
@@ -120,6 +120,15 @@ public:
const cPiece & a_NewPiece
) { return 1; }
+ /** Returns the relative weight with which the a_NewPiece is to be selected for placing as the first piece.
+ This allows the pool to tweak the piece's chances.
+ The higher the number returned, the higher the chance the piece will be chosen. 0 means the piece will not be chosen.
+ If all pieces return 0, a random piece is chosen, with all equal chances.
+ */
+ virtual int GetStartingPieceWeight(
+ const cPiece & a_NewPiece
+ ) { return 1; }
+
/** Called after a piece is placed, to notify the pool that it has been used.
The pool may adjust the pieces it will return the next time. */
virtual void PiecePlaced(const cPiece & a_Piece) = 0;
diff --git a/src/Generating/PrefabPiecePool.cpp b/src/Generating/PrefabPiecePool.cpp
index ed9340815..ad97ab0e7 100644
--- a/src/Generating/PrefabPiecePool.cpp
+++ b/src/Generating/PrefabPiecePool.cpp
@@ -101,6 +101,15 @@ int cPrefabPiecePool::GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const c
+int cPrefabPiecePool::GetStartingPieceWeight(const cPiece & a_NewPiece)
+{
+ return ((const cPrefab &)a_NewPiece).GetDefaultWeight();
+}
+
+
+
+
+
void cPrefabPiecePool::PiecePlaced(const cPiece & a_Piece)
{
// Do nothing
diff --git a/src/Generating/PrefabPiecePool.h b/src/Generating/PrefabPiecePool.h
index c6a5ad360..695ab4ea5 100644
--- a/src/Generating/PrefabPiecePool.h
+++ b/src/Generating/PrefabPiecePool.h
@@ -70,6 +70,7 @@ protected:
virtual cPieces GetPiecesWithConnector(int a_ConnectorType) override;
virtual cPieces GetStartingPieces(void) override;
virtual int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector, const cPiece & a_NewPiece) override;
+ virtual int GetStartingPieceWeight(const cPiece & a_NewPiece) override;
virtual void PiecePlaced(const cPiece & a_Piece) override;
virtual void Reset(void) override;
} ;
--
cgit v1.2.3
From 71256c98ed748d5cd789f94404e7984e11bdf115 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Tue, 27 May 2014 22:06:49 +0200
Subject: Fixed testing weights in PlainsVillages.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index fee6610c9..f8cf867e5 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -4601,7 +4601,7 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
true,
// DefaultWeight:
- 0,
+ 100,
// DepthWeight:
"",
@@ -5048,7 +5048,7 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
false,
// DefaultWeight:
- 1000,
+ 100,
// DepthWeight:
"",
@@ -5259,7 +5259,7 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
true,
// DefaultWeight:
- 0,
+ 100,
// DepthWeight:
"",
--
cgit v1.2.3
From 6b41d1a4220aa032f53b67637bbc3276272e5047 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Tue, 27 May 2014 22:08:20 +0200
Subject: Added AlchemistVillage prefabs (Thanks, KingsCraftAu).
---
src/Generating/Prefabs/AlchemistVillagePrefabs.cpp | 2969 ++++++++++++++++++++
src/Generating/Prefabs/AlchemistVillagePrefabs.h | 15 +
src/Generating/VillageGen.cpp | 32 +-
3 files changed, 3007 insertions(+), 9 deletions(-)
create mode 100644 src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
create mode 100644 src/Generating/Prefabs/AlchemistVillagePrefabs.h
diff --git a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
new file mode 100644
index 000000000..32ffe5b88
--- /dev/null
+++ b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
@@ -0,0 +1,2969 @@
+
+// AlchemistVillagePrefabs.cpp
+
+// Defines the prefabs in the group AlchemistVillage
+
+// NOTE: This file has been generated automatically by GalExport!
+// Any manual changes will be overwritten by the next automatic export!
+
+#include "Globals.h"
+#include "AlchemistVillagePrefabs.h"
+
+
+
+
+
+const cPrefab::sDef g_AlchemistVillagePrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // BarWithBasement:
+ // The data has been exported from the gallery Desert, area index 82, ID 598, created by STR_Warrior
+ {
+ // Size:
+ 11, 12, 9, // SizeX = 11, SizeY = 12, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 11, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "A:101: 0\n" /* ironbars */
+ "B: 64:12\n" /* wooddoorblock */
+ "C:128: 2\n" /* sandstonestairs */
+ "D: 24: 1\n" /* sandstone */
+ "E: 44: 9\n" /* step */
+ "F:126: 8\n" /* woodenslab */
+ "G:128: 7\n" /* sandstonestairs */
+ "H: 44: 1\n" /* step */
+ "I: 64: 7\n" /* wooddoorblock */
+ "J: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 */
+ "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: 50: 3\n" /* torch */
+ "z:171: 8\n" /* carpet */,
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "ccccccccccc"
+ /* 1 */ "ccccccccccc"
+ /* 2 */ "ccnnnnnnncc"
+ /* 3 */ "cnnnnnnnnnc"
+ /* 4 */ "cnnnnnnnnnc"
+ /* 5 */ "cnnnnnnnnnc"
+ /* 6 */ "cnnnnnnnnnc"
+ /* 7 */ "cnonnnnnnnc"
+ /* 8 */ "cnccccccccc"
+
+ // 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"
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...p...p..."
+ /* 1 */ "..........."
+ /* 2 */ "pbbb...bbbp"
+ /* 3 */ "b..y...y..b"
+ /* 4 */ "b.z.....z.b"
+ /* 5 */ "A.........A"
+ /* 6 */ "b.........b"
+ /* 7 */ "b.......z.b"
+ /* 8 */ "pBbbAAAbbbp"
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...C...C..."
+ /* 1 */ "...D...b..."
+ /* 2 */ "pbbbqEsbbbp"
+ /* 3 */ "bFFFFFFFFFb"
+ /* 4 */ "bFFFFFFFFFb"
+ /* 5 */ "sFFFFFFFFFq"
+ /* 6 */ "bFFFFFFFFFb"
+ /* 7 */ "bFFFFFFFFFb"
+ /* 8 */ "pbbbGGGbbbp"
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "bHHHHbHHHHb"
+ /* 3 */ "HpbbbbbbbpH"
+ /* 4 */ "Hb.......bH"
+ /* 5 */ "bb.......bb"
+ /* 6 */ "Hb.......bH"
+ /* 7 */ "HpIbbbbbbpH"
+ /* 8 */ "bH.HHbHHHHb"
+
+ // Level 9
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ ".pbbAAAbbp."
+ /* 4 */ ".b.......b."
+ /* 5 */ ".A.......A."
+ /* 6 */ ".b.......b."
+ /* 7 */ ".pBbAAAbbp."
+ /* 8 */ "..........."
+
+ // Level 10
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ ".pbbJJJbbp."
+ /* 4 */ ".bFFFFFFFb."
+ /* 5 */ ".sFFFFFFFq."
+ /* 6 */ ".bFFFFFFFb."
+ /* 7 */ ".pbbGGGbbp."
+ /* 8 */ "..........."
+
+ // Level 11
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ ".bHHHbHHHb."
+ /* 4 */ ".H.......H."
+ /* 5 */ ".b.......b."
+ /* 6 */ ".H.......H."
+ /* 7 */ ".bHHHbHHHb."
+ /* 8 */ "...........",
+
+ // Connectors:
+ "-1: 5, 5, 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:
+ true,
+ }, // BarWithBasement
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // BarWithoutBasement:
+ // The data has been exported from the gallery Desert, area index 81, ID 597, created by STR_Warrior
+ {
+ // Size:
+ 11, 8, 9, // SizeX = 11, SizeY = 8, SizeZ = 9
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 7, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "A: 44: 1\n" /* step */
+ "B: 64: 3\n" /* wooddoorblock */
+ "C: 64: 8\n" /* wooddoorblock */
+ "D: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 */
+ "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: 50: 3\n" /* torch */
+ "s:171: 8\n" /* carpet */
+ "t:101: 0\n" /* ironbars */
+ "u: 64:12\n" /* wooddoorblock */
+ "v:128: 2\n" /* sandstonestairs */
+ "w: 24: 1\n" /* sandstone */
+ "x: 44: 9\n" /* step */
+ "y:126: 8\n" /* woodenslab */
+ "z:128: 7\n" /* sandstonestairs */,
+
+ // 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"
+
+ // 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"
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...c...c..."
+ /* 1 */ "..........."
+ /* 2 */ "cddd...dddc"
+ /* 3 */ "d..r...r..d"
+ /* 4 */ "d.s.....s.d"
+ /* 5 */ "t.........t"
+ /* 6 */ "d.........d"
+ /* 7 */ "d.......s.d"
+ /* 8 */ "cuddtttdddc"
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "...v...v..."
+ /* 1 */ "...w...d..."
+ /* 2 */ "cdddexgdddc"
+ /* 3 */ "dyyyyyyyyyd"
+ /* 4 */ "dyyyyyyyyyd"
+ /* 5 */ "gyyyyyyyyye"
+ /* 6 */ "dyyyyyyyyyd"
+ /* 7 */ "dyyyyyyyyyd"
+ /* 8 */ "cdddzzzdddc"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "dAAAAdAAAAd"
+ /* 3 */ "AcdddddddcA"
+ /* 4 */ "Ad.......dA"
+ /* 5 */ "dd.......dd"
+ /* 6 */ "Ad.......dA"
+ /* 7 */ "AcBddddddcA"
+ /* 8 */ "dA.AAdAAAAd"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ ".cddtttddc."
+ /* 4 */ ".d.......d."
+ /* 5 */ ".t.......t."
+ /* 6 */ ".d.......d."
+ /* 7 */ ".cCdtttddc."
+ /* 8 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ ".cddDDDddc."
+ /* 4 */ ".dyyyyyyyd."
+ /* 5 */ ".gyyyyyyye."
+ /* 6 */ ".dyyyyyyyd."
+ /* 7 */ ".cddzzzddc."
+ /* 8 */ "..........."
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ ".dAAAdAAAd."
+ /* 4 */ ".A.......A."
+ /* 5 */ ".d.......d."
+ /* 6 */ ".A.......A."
+ /* 7 */ ".dAAAdAAAd."
+ /* 8 */ "...........",
+
+ // Connectors:
+ "-1: 5, 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:
+ true,
+ }, // BarWithoutBasement
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // BlackSmith:
+ // The data has been exported from the gallery Desert, area index 92, ID 633, created by STR_Warrior
+ {
+ // Size:
+ 11, 5, 13, // SizeX = 11, SizeY = 5, SizeZ = 13
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 4, 12, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 12: 0\n" /* sand */
+ "b: 5: 0\n" /* wood */
+ "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 */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaabaa"
+ /* 3 */ "acaaacabbba"
+ /* 4 */ "acaccaabbba"
+ /* 5 */ "acccccabbba"
+ /* 6 */ "acaadddbbba"
+ /* 7 */ "aaacdddbbba"
+ /* 8 */ "aaaadddbbba"
+ /* 9 */ "abbbbbbbbba"
+ /* 10 */ "abbbbbbbbba"
+ /* 11 */ "abbbbbbbbba"
+ /* 12 */ "aaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "......d...d"
+ /* 1 */ "..........."
+ /* 2 */ "......dcecd"
+ /* 3 */ ".d....c...c"
+ /* 4 */ "......c...c"
+ /* 5 */ "...f..c...c"
+ /* 6 */ ".....dc...c"
+ /* 7 */ ".gh.dic...c"
+ /* 8 */ "dcccccd...c"
+ /* 9 */ "cj........c"
+ /* 10 */ "c.........c"
+ /* 11 */ "c.........c"
+ /* 12 */ "dcccccccccd"
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "......d...d"
+ /* 1 */ "..........."
+ /* 2 */ "......dckcd"
+ /* 3 */ ".d....c..lc"
+ /* 4 */ "......n...c"
+ /* 5 */ "......c...c"
+ /* 6 */ "......c...n"
+ /* 7 */ "......c...n"
+ /* 8 */ "dcccccd...n"
+ /* 9 */ "co........c"
+ /* 10 */ "n.........c"
+ /* 11 */ "c........pc"
+ /* 12 */ "dcccnnncccd"
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "......q...q"
+ /* 1 */ "......c...c"
+ /* 2 */ "......dcccd"
+ /* 3 */ ".drrrrcsssc"
+ /* 4 */ ".rsssstsssc"
+ /* 5 */ ".rsssscsssc"
+ /* 6 */ ".rsssscsssu"
+ /* 7 */ ".rsssscsssu"
+ /* 8 */ "dcccccdsssu"
+ /* 9 */ "csssssssssc"
+ /* 10 */ "tsssssssssc"
+ /* 11 */ "csssssssssc"
+ /* 12 */ "dcccvvvcccd"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "......cwwwc"
+ /* 3 */ ".w.w.ww...w"
+ /* 4 */ "......w...w"
+ /* 5 */ ".w....w...w"
+ /* 6 */ "......w...w"
+ /* 7 */ ".w....w...c"
+ /* 8 */ "cwwwwwc...w"
+ /* 9 */ "w.........w"
+ /* 10 */ "w.........w"
+ /* 11 */ "w.........w"
+ /* 12 */ "cwwwwcwwwwc",
+
+ // Connectors:
+ "-1: 8, 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,
+ }, // BlackSmith
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LargeHouse1:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 12, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "A:128: 2\n" /* sandstonestairs */
+ "B:128: 0\n" /* sandstonestairs */
+ "C: 87: 0\n" /* netherstone */
+ "D:128: 3\n" /* sandstonestairs */
+ "E: 51: 0\n" /* fire */
+ "F: 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: 2\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 */
+ "m: 19: 0\n" /* sponge */
+ "n:101: 0\n" /* ironbars */
+ "o:140: 0\n" /* flowerpotblock */
+ "p: 64: 8\n" /* wooddoorblock */
+ "q: 69:12\n" /* lever */
+ "r: 44:10\n" /* step */
+ "s:128: 1\n" /* sandstonestairs */
+ "t: 47: 0\n" /* bookshelf */
+ "u: 96:12\n" /* trapdoor */
+ "v:128: 4\n" /* sandstonestairs */
+ "w:128: 5\n" /* sandstonestairs */
+ "x:128: 7\n" /* sandstonestairs */
+ "y: 44: 1\n" /* step */
+ "z:128: 6\n" /* sandstonestairs */,
+
+ // 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"
+
+ // 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.."
+
+ // Level 2
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "....cddnnnddc.."
+ /* 1 */ "....d......od.c"
+ /* 2 */ "....p.......d.."
+ /* 3 */ "....d.......p.."
+ /* 4 */ "....d.q...l.d.."
+ /* 5 */ "....dddd.dddd.c"
+ /* 6 */ "....n.......n.."
+ /* 7 */ "mmmmn.......n.."
+ /* 8 */ "mmmmn.......n.."
+ /* 9 */ "mmmmd.......d.."
+ /* 10 */ "mmmmcddnnnddc.."
+
+ // Level 3
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "....cdddddddc.."
+ /* 1 */ "....drrrrrrrdds"
+ /* 2 */ "....drrrrrrrd.."
+ /* 3 */ "....drrrrrrrd.."
+ /* 4 */ "....dtttrrurd.."
+ /* 5 */ "....dddddddddds"
+ /* 6 */ "....vrrrrrrrw.."
+ /* 7 */ "mmmmvrrrrrrrw.."
+ /* 8 */ "mmmmvrrrrrrrw.."
+ /* 9 */ "mmmmdrrrrrrrd.."
+ /* 10 */ "mmmmcddxxxddc.."
+
+ // Level 4
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "....dyyydyyyd.."
+ /* 1 */ "....ycdddddcy.."
+ /* 2 */ "....yd.....dy.."
+ /* 3 */ "....yd.....dy.."
+ /* 4 */ "....yd.....dy.."
+ /* 5 */ "....dcdd.ddcd.."
+ /* 6 */ "....y.......y.."
+ /* 7 */ "mmmmy.......y.."
+ /* 8 */ "mmmmy.......y.."
+ /* 9 */ "mmmmy.......y.."
+ /* 10 */ "mmmmdyyydyyyd.."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".....cddnddc..."
+ /* 2 */ ".....n.....n..."
+ /* 3 */ ".....n.....n..."
+ /* 4 */ ".....n.....n..."
+ /* 5 */ ".....cdd.ddc..."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".....cddzddc..."
+ /* 2 */ ".....vrrrrrw..."
+ /* 3 */ ".....vrrrrrw..."
+ /* 4 */ ".....vrrrrrw..."
+ /* 5 */ ".....cdddddc..."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ ".....dyydyyd..."
+ /* 2 */ ".....y.ddd.y..."
+ /* 3 */ ".....d.ddd.d..."
+ /* 4 */ ".....y.ddd.y..."
+ /* 5 */ ".....dyydyyd..."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 8
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ ".......cAc....."
+ /* 3 */ ".......BCs....."
+ /* 4 */ ".......cDc....."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 9
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ ".......c.c....."
+ /* 3 */ "........E......"
+ /* 4 */ ".......c.c....."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 10
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ ".......c.c....."
+ /* 3 */ "..............."
+ /* 4 */ ".......c.c....."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 11
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ ".......ddd....."
+ /* 3 */ ".......dFd....."
+ /* 4 */ ".......ddd....."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "..............."
+
+ // Level 12
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ ".......y.y....."
+ /* 3 */ "..............."
+ /* 4 */ ".......y.y....."
+ /* 5 */ "..............."
+ /* 6 */ "..............."
+ /* 7 */ "..............."
+ /* 8 */ "..............."
+ /* 9 */ "..............."
+ /* 10 */ "...............",
+
+ // Connectors:
+ "-1: 14, 1, 3: 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:
+ true,
+ }, // LargeHouse1
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LargeTower:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 10, 6, // 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 */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaabaaa"
+ /* 2 */ "aabbbaa"
+ /* 3 */ "aabbbaa"
+ /* 4 */ "aabbbaa"
+ /* 5 */ "aaaaaaa"
+ /* 6 */ "aaaaaaa"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "mc...cm"
+ /* 1 */ "defgfeh"
+ /* 2 */ ".f...f."
+ /* 3 */ ".f...f."
+ /* 4 */ ".f...f."
+ /* 5 */ "defffeh"
+ /* 6 */ "mi...im"
+
+ // 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"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..lfl.."
+ /* 2 */ ".n...o."
+ /* 3 */ ".f...f."
+ /* 4 */ ".n.p.o."
+ /* 5 */ "..qfq.."
+ /* 6 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..frf.."
+ /* 2 */ ".f...f."
+ /* 3 */ ".r...r."
+ /* 4 */ ".f...f."
+ /* 5 */ "..frf.."
+ /* 6 */ "......."
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..frf.."
+ /* 2 */ ".f...f."
+ /* 3 */ ".r...r."
+ /* 4 */ ".f...f."
+ /* 5 */ "..frf.."
+ /* 6 */ "......."
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..frf.."
+ /* 2 */ ".f...f."
+ /* 3 */ ".r...r."
+ /* 4 */ ".f...f."
+ /* 5 */ "..frf.."
+ /* 6 */ "......."
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "..cfc.."
+ /* 2 */ ".d...h."
+ /* 3 */ ".f...f."
+ /* 4 */ ".d...h."
+ /* 5 */ "..ifi.."
+ /* 6 */ "......."
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ ".ffsff."
+ /* 2 */ ".f...f."
+ /* 3 */ ".s...s."
+ /* 4 */ ".f...f."
+ /* 5 */ ".ffsff."
+ /* 6 */ "......."
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "...l..."
+ /* 1 */ ".efffe."
+ /* 2 */ ".ftttf."
+ /* 3 */ "nftftfo"
+ /* 4 */ ".ftttf."
+ /* 5 */ ".efffe."
+ /* 6 */ "...q..."
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "...t..."
+ /* 1 */ ".t...t."
+ /* 2 */ "......."
+ /* 3 */ "t..u..t"
+ /* 4 */ "......."
+ /* 5 */ ".t...t."
+ /* 6 */ "...t...",
+
+ // Connectors:
+ "-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:
+ true,
+ }, // LargeTower
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 4, 6, // 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 */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aabaa"
+ /* 3 */ "abbba"
+ /* 4 */ "abbba"
+ /* 5 */ "abbba"
+ /* 6 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "c...c"
+ /* 1 */ "....."
+ /* 2 */ "cdedc"
+ /* 3 */ "d...d"
+ /* 4 */ "d...d"
+ /* 5 */ "df.gd"
+ /* 6 */ "cdddc"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "c...c"
+ /* 1 */ "....."
+ /* 2 */ "cdhdc"
+ /* 3 */ "d...d"
+ /* 4 */ "i...i"
+ /* 5 */ "dj.gd"
+ /* 6 */ "cdidc"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "k...k"
+ /* 1 */ "d...d"
+ /* 2 */ "cdddc"
+ /* 3 */ "dllld"
+ /* 4 */ "nlllo"
+ /* 5 */ "dllgd"
+ /* 6 */ "cdpdc"
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "dqdqd"
+ /* 3 */ "q...q"
+ /* 4 */ "d...d"
+ /* 5 */ "q..rq"
+ /* 6 */ "dqdqd",
+
+ // Connectors:
+ "-1: 2, 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:
+ true,
+ }, // LittleHouse
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse2:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 4, 10, // 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 */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaaaaaa"
+ /* 1 */ "aaaaaaa"
+ /* 2 */ "aaaabaa"
+ /* 3 */ "abbbbba"
+ /* 4 */ "abbbbba"
+ /* 5 */ "abbbbba"
+ /* 6 */ "aaaaaaa"
+ /* 7 */ "aaaaaaa"
+ /* 8 */ "aaaaaaa"
+ /* 9 */ "aaaaaaa"
+ /* 10 */ "aaaaaaa"
+
+ // 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"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ ".c...c."
+ /* 1 */ "......."
+ /* 2 */ "cdhdidc"
+ /* 3 */ "d..j..d"
+ /* 4 */ "h.....h"
+ /* 5 */ "df....d"
+ /* 6 */ "cd.dhdc"
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ ".k...k."
+ /* 1 */ ".d...d."
+ /* 2 */ "cdldddc"
+ /* 3 */ "dnnnnnd"
+ /* 4 */ "onnnnnp"
+ /* 5 */ "dfnnnnd"
+ /* 6 */ "cdddqdc"
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ "......."
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "......."
+ /* 1 */ "......."
+ /* 2 */ "drrdrrd"
+ /* 3 */ "r.....r"
+ /* 4 */ "d.....d"
+ /* 5 */ "rs....r"
+ /* 6 */ "drrdrrd"
+ /* 7 */ "......."
+ /* 8 */ "......."
+ /* 9 */ "......."
+ /* 10 */ ".......",
+
+ // Connectors:
+ "-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:
+ true,
+ }, // LittleHouse2
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse3:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 4, 6, // 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 */
+ "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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 012345678 */
+ /* 0 */ "aaaaaaaaa"
+ /* 1 */ "aaaaaaaaa"
+ /* 2 */ "aaaabaaaa"
+ /* 3 */ "abbbbbbba"
+ /* 4 */ "abbbbbbba"
+ /* 5 */ "abbbbbbba"
+ /* 6 */ "aaaaaaaaa"
+
+ // Level 1
+ /* z\x* 012345678 */
+ /* 0 */ "..c...c.."
+ /* 1 */ "........."
+ /* 2 */ "cdddedddc"
+ /* 3 */ "d.......d"
+ /* 4 */ "d.......d"
+ /* 5 */ "d......fd"
+ /* 6 */ "cdddddddc"
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "..c...c.."
+ /* 1 */ "........."
+ /* 2 */ "cdddgdddc"
+ /* 3 */ "d.......d"
+ /* 4 */ "h.......h"
+ /* 5 */ "d.i....fd"
+ /* 6 */ "cddhhhddc"
+
+ // Level 3
+ /* z\x* 012345678 */
+ /* 0 */ "..j...j.."
+ /* 1 */ "..d...d.."
+ /* 2 */ "cdddddddc"
+ /* 3 */ "dkkkkkkkd"
+ /* 4 */ "lkkkkkkkn"
+ /* 5 */ "dkkkkkkfd"
+ /* 6 */ "cddoooddc"
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "dpppdpppd"
+ /* 3 */ "p.......p"
+ /* 4 */ "d.......d"
+ /* 5 */ "p......qp"
+ /* 6 */ "dpppdpppd",
+
+ // Connectors:
+ "-1: 4, 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:
+ true,
+ }, // LittleHouse3
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse4:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 4, 10, // 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: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 */
+ "m: 19: 0\n" /* sponge */
+ "n: 64: 8\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: 5\n" /* sandstonestairs */
+ "u:128: 7\n" /* sandstonestairs */
+ "v: 44: 1\n" /* step */
+ "w: 96: 7\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"
+
+ // 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"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "c...c"
+ /* 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"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "r...r"
+ /* 1 */ "d...d"
+ /* 2 */ "cdddc"
+ /* 3 */ "dfssd"
+ /* 4 */ "dsssd"
+ /* 5 */ "tssst"
+ /* 6 */ "tssst"
+ /* 7 */ "tssst"
+ /* 8 */ "dsssd"
+ /* 9 */ "dsssd"
+ /* 10 */ "cdudc"
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "dvdvd"
+ /* 3 */ "vw..v"
+ /* 4 */ "v...v"
+ /* 5 */ "v...v"
+ /* 6 */ "d...d"
+ /* 7 */ "v...v"
+ /* 8 */ "v...v"
+ /* 9 */ "v...v"
+ /* 10 */ "dvdvd",
+
+ // Connectors:
+ "-1: 2, 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:
+ true,
+ }, // LittleHouse4
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse5:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 4, 8, // 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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmc...c"
+ /* 1 */ "mmmm....."
+ /* 2 */ "mmmmcdgdc"
+ /* 3 */ "mmmmd...d"
+ /* 4 */ "cdhdd...h"
+ /* 5 */ "d.......h"
+ /* 6 */ "h.......d"
+ /* 7 */ "di....jfd"
+ /* 8 */ "cddhhhddc"
+
+ // 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"
+
+ // Level 4
+ /* 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",
+
+ // Connectors:
+ "-1: 6, 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:
+ true,
+ }, // LittleHouse5
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse6:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 4, 8, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "........."
+ /* 1 */ "........."
+ /* 2 */ "....ewfwf"
+ /* 3 */ "....w...w"
+ /* 4 */ "fwwwf...f"
+ /* 5 */ "w.......w"
+ /* 6 */ "w.......w"
+ /* 7 */ "w......xw"
+ /* 8 */ "fwwwfwwwf",
+
+ // Connectors:
+ "-1: 6, 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:
+ true,
+ }, // LittleHouse6
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleHouse7:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 4, 10, // 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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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",
+
+ // Connectors:
+ "-1: 6, 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:
+ true,
+ }, // LittleHouse7
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // LittleTower:
+ // The data has been exported from the gallery Desert, area index 79, ID 595, created by STR_Warrior
+ {
+ // Size:
+ 5, 8, 7, // SizeX = 5, SizeY = 8, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 7, 6, // 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 */
+ "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 */
+ "m: 19: 0\n" /* sponge */
+ "n:128: 5\n" /* sandstonestairs */
+ "o:128: 7\n" /* sandstonestairs */
+ "p:128: 6\n" /* sandstonestairs */
+ "q: 44: 1\n" /* step */
+ "r: 96: 5\n" /* trapdoor */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aabaa"
+ /* 3 */ "abbba"
+ /* 4 */ "abbba"
+ /* 5 */ "abbba"
+ /* 6 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "c...c"
+ /* 1 */ "....."
+ /* 2 */ "cdedc"
+ /* 3 */ "df..d"
+ /* 4 */ "d...d"
+ /* 5 */ "d...d"
+ /* 6 */ "cdddc"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "c...c"
+ /* 1 */ "....."
+ /* 2 */ "cdgdc"
+ /* 3 */ "df..d"
+ /* 4 */ "h...h"
+ /* 5 */ "d..id"
+ /* 6 */ "cdhdc"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "j...j"
+ /* 1 */ "d...d"
+ /* 2 */ "cdddc"
+ /* 3 */ "dfkkd"
+ /* 4 */ "lkkkn"
+ /* 5 */ "dkkkd"
+ /* 6 */ "cdodc"
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "cdddc"
+ /* 3 */ "df..d"
+ /* 4 */ "d...d"
+ /* 5 */ "d...d"
+ /* 6 */ "cdddc"
+
+ // Level 5
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "cdhdc"
+ /* 3 */ "df..d"
+ /* 4 */ "h...h"
+ /* 5 */ "d..id"
+ /* 6 */ "cdhdc"
+
+ // Level 6
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "cdpdc"
+ /* 3 */ "dfkkd"
+ /* 4 */ "lkkkn"
+ /* 5 */ "dkkkd"
+ /* 6 */ "cdodc"
+
+ // Level 7
+ /* z\x* 01234 */
+ /* 0 */ "....."
+ /* 1 */ "....."
+ /* 2 */ "dqdqd"
+ /* 3 */ "qr..q"
+ /* 4 */ "d...d"
+ /* 5 */ "q...q"
+ /* 6 */ "dqdqd",
+
+ // Connectors:
+ "-1: 2, 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:
+ true,
+ }, // LittleTower
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MediumHouse1:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 14, 7, 8, // 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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // 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...."
+
+ // 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...."
+
+ // 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...."
+
+ // Level 5
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "...cdjdc......."
+ /* 4 */ "...dr..d......."
+ /* 5 */ "..............."
+ /* 6 */ "...d...d......."
+ /* 7 */ "...cdjdc......."
+ /* 8 */ "..............."
+
+ // Level 6
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "...cdddc......."
+ /* 4 */ "...dnnnd......."
+ /* 5 */ "...dnnnd......."
+ /* 6 */ "...dnnnd......."
+ /* 7 */ "...cdddc......."
+ /* 8 */ "..............."
+
+ // Level 7
+ /* z\x* 11111 */
+ /* * 012345678901234 */
+ /* 0 */ "..............."
+ /* 1 */ "..............."
+ /* 2 */ "..............."
+ /* 3 */ "...dqdqd......."
+ /* 4 */ "...q...q......."
+ /* 5 */ "...d...d......."
+ /* 6 */ "...q...q......."
+ /* 7 */ "...dqdqd......."
+ /* 8 */ "...............",
+
+ // Connectors:
+ "-1: 5, 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:
+ true,
+ }, // MediumHouse1
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MediumHouse2:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 8, 8, // 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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "cdudc......"
+ /* 1 */ "devvw......"
+ /* 2 */ "dvvvw......"
+ /* 3 */ "xvvvd......"
+ /* 4 */ "xvvvddudddc"
+ /* 5 */ "xvvvvvvvvvd"
+ /* 6 */ "dvvvvvvvvvw"
+ /* 7 */ "dvvvqqqvvnd"
+ /* 8 */ "cdddyyydddc"
+
+ // 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"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "..........."
+ /* 4 */ "..........."
+ /* 5 */ ".cCc......."
+ /* 6 */ ".DEF......."
+ /* 7 */ ".cGc......."
+ /* 8 */ "..........."
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "..........."
+ /* 4 */ "..........."
+ /* 5 */ ".c.c......."
+ /* 6 */ "..H........"
+ /* 7 */ ".c.c......."
+ /* 8 */ "..........."
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "..........."
+ /* 4 */ "..........."
+ /* 5 */ ".ddd......."
+ /* 6 */ ".dId......."
+ /* 7 */ ".ddd......."
+ /* 8 */ "..........."
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..........."
+ /* 1 */ "..........."
+ /* 2 */ "..........."
+ /* 3 */ "..........."
+ /* 4 */ "..........."
+ /* 5 */ ".z.z......."
+ /* 6 */ "..........."
+ /* 7 */ ".z.z......."
+ /* 8 */ "...........",
+
+ // Connectors:
+ "-1: 8, 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:
+ true,
+ }, // MediumHouse2
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MediumHouse3:
+ // The data has been exported from the gallery Desert, area index 76, ID 575, created by STR_Warrior
+ {
+ // Size:
+ 12, 10, 11, // SizeX = 12, SizeY = 10, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 9, 10, // MaxX, MaxY, MaxZ
+
+ // 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 */
+ "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 */
+ "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: 6\n" /* trapdoor */
+ "y:126: 0\n" /* woodenslab */
+ "z:128: 4\n" /* sandstonestairs */,
+
+ // Block data:
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // Level 5
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ ".....ewwewwe"
+ /* 3 */ ".....w.....w"
+ /* 4 */ ".....w.....w"
+ /* 5 */ ".....w.....e"
+ /* 6 */ "...geeeg...w"
+ /* 7 */ "mmme...e..xw"
+ /* 8 */ "mmme...ewwwe"
+ /* 9 */ "mmme..kemmmm"
+ /* 10 */ "mmmgeeegmmmm"
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "............"
+ /* 4 */ "............"
+ /* 5 */ "............"
+ /* 6 */ "...ge.eg...."
+ /* 7 */ "mmme...e...."
+ /* 8 */ "mmmo........"
+ /* 9 */ "mmme..kemmmm"
+ /* 10 */ "mmmgeoegmmmm"
+
+ // Level 7
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "............"
+ /* 4 */ "............"
+ /* 5 */ "............"
+ /* 6 */ "...ge.eg...."
+ /* 7 */ "mmme...e...."
+ /* 8 */ "mmmo........"
+ /* 9 */ "mmmel.kemmmm"
+ /* 10 */ "mmmgeoegmmmm"
+
+ // Level 8
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "............"
+ /* 4 */ "............"
+ /* 5 */ "............"
+ /* 6 */ "...fesef...."
+ /* 7 */ "mmmeyyye...."
+ /* 8 */ "mmmzyyyu...."
+ /* 9 */ "mmmeyykemmmm"
+ /* 10 */ "mmmfevefmmmm"
+
+ // Level 9
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "............"
+ /* 1 */ "............"
+ /* 2 */ "............"
+ /* 3 */ "............"
+ /* 4 */ "............"
+ /* 5 */ "............"
+ /* 6 */ "...w.w.w...."
+ /* 7 */ "mmm........."
+ /* 8 */ "mmmw...w...."
+ /* 9 */ "mmm.....mmmm"
+ /* 10 */ "mmmw.w.wmmmm",
+
+ // Connectors:
+ "-1: 9, 2, 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:
+ true,
+ }, // MediumHouse3
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // SmallHouse9:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 8, 4, 10, // 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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // Level 2
+ /* z\x* 012345678 */
+ /* 0 */ "mmmmc...c"
+ /* 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"
+
+ // 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"
+
+ // Level 4
+ /* z\x* 012345678 */
+ /* 0 */ "mmmm....."
+ /* 1 */ "mmmm....."
+ /* 2 */ "mmmmcrdrd"
+ /* 3 */ "mmmmr...r"
+ /* 4 */ "mmmmr...r"
+ /* 5 */ "mmmmr...r"
+ /* 6 */ "drrrd...d"
+ /* 7 */ "r.......r"
+ /* 8 */ "r.......r"
+ /* 9 */ "r......sr"
+ /* 10 */ "drrrdrrrd",
+
+ // Connectors:
+ "-1: 6, 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:
+ true,
+ }, // SmallHouse9
+}; // g_AlchemistVillagePrefabs
+
+
+
+
+
+
+const cPrefab::sDef g_AlchemistVillageStartingPrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Well:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 4, 20, 4, // 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 */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 01234 */
+ /* 0 */ "aaaaa"
+ /* 1 */ "aaaaa"
+ /* 2 */ "aaaaa"
+ /* 3 */ "aaaaa"
+ /* 4 */ "aaaaa"
+
+ // Level 1
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 2
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 3
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 4
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 5
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 6
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 7
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 8
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 9
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 10
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 11
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 12
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 13
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 14
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 15
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bcccb"
+ /* 2 */ "bcccb"
+ /* 3 */ "bcccb"
+ /* 4 */ "bbbbb"
+
+ // Level 16
+ /* z\x* 01234 */
+ /* 0 */ "defgd"
+ /* 1 */ "h...h"
+ /* 2 */ "f...f"
+ /* 3 */ "i...i"
+ /* 4 */ "defgd"
+
+ // Level 17
+ /* z\x* 01234 */
+ /* 0 */ "d...d"
+ /* 1 */ "....."
+ /* 2 */ "....."
+ /* 3 */ "....."
+ /* 4 */ "d...d"
+
+ // Level 18
+ /* z\x* 01234 */
+ /* 0 */ "djjjd"
+ /* 1 */ "j...j"
+ /* 2 */ "j...j"
+ /* 3 */ "j...j"
+ /* 4 */ "djjjd"
+
+ // Level 19
+ /* z\x* 01234 */
+ /* 0 */ "bbbbb"
+ /* 1 */ "bkkkb"
+ /* 2 */ "bkkkb"
+ /* 3 */ "bkkkb"
+ /* 4 */ "bbbbb"
+
+ // Level 20
+ /* z\x* 01234 */
+ /* 0 */ "f.f.f"
+ /* 1 */ "....."
+ /* 2 */ "f...f"
+ /* 3 */ "....."
+ /* 4 */ "f.f.f",
+
+ // 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+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // Well
+};
+
+
+
+
+
+// The prefab counts:
+
+const size_t g_AlchemistVillagePrefabsCount = ARRAYCOUNT(g_AlchemistVillagePrefabs);
+
+const size_t g_AlchemistVillageStartingPrefabsCount = ARRAYCOUNT(g_AlchemistVillageStartingPrefabs);
+
diff --git a/src/Generating/Prefabs/AlchemistVillagePrefabs.h b/src/Generating/Prefabs/AlchemistVillagePrefabs.h
new file mode 100644
index 000000000..dddc5530a
--- /dev/null
+++ b/src/Generating/Prefabs/AlchemistVillagePrefabs.h
@@ -0,0 +1,15 @@
+
+// AlchemistVillagePrefabs.h
+
+// Declares the prefabs in the group AlchemistVillage
+
+#include "../Prefab.h"
+
+
+
+
+
+extern const cPrefab::sDef g_AlchemistVillagePrefabs[];
+extern const cPrefab::sDef g_AlchemistVillageStartingPrefabs[];
+extern const size_t g_AlchemistVillagePrefabsCount;
+extern const size_t g_AlchemistVillageStartingPrefabsCount;
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index cb1f4fe0d..dfcdf6ef7 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -5,6 +5,7 @@
#include "Globals.h"
#include "VillageGen.h"
+#include "Prefabs/AlchemistVillagePrefabs.h"
#include "Prefabs/JapaneseVillagePrefabs.h"
#include "Prefabs/PlainsVillagePrefabs.h"
#include "Prefabs/SandVillagePrefabs.h"
@@ -274,6 +275,12 @@ protected:
}
+ virtual int GetStartingPieceWeight(const cPiece & a_NewPiece) override
+ {
+ return m_Prefabs.GetStartingPieceWeight(a_NewPiece);
+ }
+
+
virtual void PiecePlaced(const cPiece & a_Piece) override
{
m_Prefabs.PiecePlaced(a_Piece);
@@ -311,18 +318,25 @@ protected:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cVillageGen:
-/** The prefabs for the sand village. */
static cVillagePiecePool g_SandVillage(g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
-
-/** The prefabs for the flat-roofed sand village. */
static cVillagePiecePool g_SandFlatRoofVillage(g_SandFlatRoofVillagePrefabs, g_SandFlatRoofVillagePrefabsCount, g_SandFlatRoofVillageStartingPrefabs, g_SandFlatRoofVillageStartingPrefabsCount);
-
-/** The prefabs for the plains village. */
+static cVillagePiecePool g_AlchemistVillage(g_AlchemistVillagePrefabs, g_AlchemistVillagePrefabsCount, g_AlchemistVillageStartingPrefabs, g_AlchemistVillageStartingPrefabsCount);
static cVillagePiecePool g_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
-
-/** The prefabs for the Japanese village. */
static cVillagePiecePool g_JapaneseVillage(g_JapaneseVillagePrefabs, g_JapaneseVillagePrefabsCount, g_JapaneseVillageStartingPrefabs, g_JapaneseVillageStartingPrefabsCount);
+static cVillagePiecePool * g_DesertVillagePools[] =
+{
+ &g_SandVillage,
+ &g_SandFlatRoofVillage,
+ &g_AlchemistVillage,
+} ;
+
+static cVillagePiecePool * g_PlainsVillagePools[] =
+{
+ &g_PlainsVillage,
+ &g_JapaneseVillage,
+} ;
+
@@ -356,8 +370,8 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
cVillagePiecePool * VillagePrefabs = NULL;
BLOCKTYPE RoadBlock = E_BLOCK_GRAVEL;
int rnd = m_Noise.IntNoise2DInt(a_OriginX, a_OriginZ) / 11;
- cVillagePiecePool * PlainsVillage = (rnd % 2 == 0) ? &g_PlainsVillage : &g_JapaneseVillage;
- cVillagePiecePool * DesertVillage = (rnd % 2 == 0) ? &g_SandVillage : &g_SandFlatRoofVillage;
+ cVillagePiecePool * PlainsVillage = g_PlainsVillagePools[rnd % ARRAYCOUNT(g_PlainsVillagePools)];
+ cVillagePiecePool * DesertVillage = g_DesertVillagePools[rnd % ARRAYCOUNT(g_DesertVillagePools)];
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
--
cgit v1.2.3
From e5fd782524cdf4b838ad689baef44a61aa4933c2 Mon Sep 17 00:00:00 2001
From: Joannis
Date: Wed, 28 May 2014 09:10:09 +0200
Subject: - Implemented vertical dispensing for projectiles. - Fixed some
terrible commit issues on my side.
---
src/BlockEntities/DispenserEntity.cpp | 54 +++++++++++++++++++++++++----------
src/BlockEntities/DispenserEntity.h | 2 +-
2 files changed, 40 insertions(+), 16 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 0f64118ef..638a844e6 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -147,6 +147,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_FIRE_CHARGE:
{
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge);
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
break;
}
@@ -154,6 +155,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_ARROW:
{
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow);
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
break;
}
@@ -162,6 +164,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
{
// Not working as there is no such entity yet?
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball);
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
break;
}
@@ -170,6 +173,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
{
// Not working as there is no such entity yet?
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg);
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
break;
}
@@ -177,6 +181,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
case E_ITEM_FIREWORK_ROCKET:
{
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFirework);
+ m_Contents.ChangeSlotCount(a_SlotNum, -1);
break;
}
@@ -199,7 +204,7 @@ void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & Disp
double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
- m_World->CreateProjectile((double) EntityX, (double) DispY, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, & Speed);
+ m_World->CreateProjectile((double) EntityX, (double) DispY + 0.5, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, &Speed);
}
@@ -210,22 +215,45 @@ Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
int Direction = 0;
switch (Meta)
{
- case E_META_DROPSPENSER_FACING_YP: Direction = 0; break; // YP & YM don't have associated smoke dirs, just do 4 (centre of block)
- case E_META_DROPSPENSER_FACING_YM: Direction = 0; break;
- case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
- case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
+ case E_META_DROPSPENSER_FACING_YP: Direction = -1; break; // UP
+ case E_META_DROPSPENSER_FACING_YM: Direction = -2; break; // DOWN
+ case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
+ case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
case E_META_DROPSPENSER_FACING_ZM: Direction = 180; break;
case E_META_DROPSPENSER_FACING_ZP: Direction = 0; break;
}
- Matrix4d m;
- m.Init(Vector3d(), 0, Direction, 0);
- Vector3d Look = m.Transform(Vector3d(0, 0, 1));
+ if(Direction >= 0)
+ {
+ Matrix4d m;
+ m.Init(Vector3d(), 0, Direction, 0);
+ Vector3d Look = m.Transform(Vector3d(0, 0, 1));
+
+ Vector3d Speed = Look * 20;
+ Speed.y = Speed.y + 1;
+
+ return Speed;
+
+ } else if(Direction == -1)
+ {
+ Matrix4d m;
+ m.Init(Vector3d(), 0, 180, 0);
+ Vector3d Look = m.Transform(Vector3d(0, 1, 0));
+
+ Vector3d Speed = Look * 20;
+
+ return Speed;
- Vector3d Speed = Look * 20;
- Speed.y = Speed.y + 1;
+ } else {
- return Speed;
+ Matrix4d m;
+ m.Init(Vector3d(), 0, -360, 0);
+ Vector3d Look = m.Transform(Vector3d(0, -1, 0));
+
+ Vector3d Speed = Look * 20;
+
+ return Speed;
+ }
}
@@ -291,7 +319,3 @@ bool cDispenserEntity::EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum
m_Contents.AddItem(EmptyBucket);
return true;
}
-
-
-
-
diff --git a/src/BlockEntities/DispenserEntity.h b/src/BlockEntities/DispenserEntity.h
index 8bc2475c9..0b7cd6bea 100644
--- a/src/BlockEntities/DispenserEntity.h
+++ b/src/BlockEntities/DispenserEntity.h
@@ -30,7 +30,7 @@ private:
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
// Spawns a projectile of the given kind in front of the dispenser
- void SpawnProjectileFromDispenser(cChunk& a_Chunk, int& DispX, int& DispY, int& DispZ, cProjectileEntity::eKind kind);
+ void SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind);
// Returns how to aim the projectile
Vector3d GetProjectileLookVector(cChunk & a_Chunk);
--
cgit v1.2.3
From 5a9e49fbeb582e47df7359d351fe952dcb0f536b Mon Sep 17 00:00:00 2001
From: worktycho
Date: Wed, 28 May 2014 11:49:36 +0100
Subject: Fix cmake errors in msvc
---
SetFlags.cmake | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/SetFlags.cmake b/SetFlags.cmake
index d9d0409e2..6e2417a51 100644
--- a/SetFlags.cmake
+++ b/SetFlags.cmake
@@ -184,7 +184,11 @@ macro(enable_profile)
CMAKE_EXE_LINKER_FLAGS_RELEASEPROFILE
CMAKE_SHARED_LINKER_FLAGS_RELEASEPROFILE )
# The configuration types need to be set after their respective c/cxx/linker flags and before the project directive
- set(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugProfile;ReleaseProfile;Coverage" CACHE STRING "" FORCE)
+ if(MSVC)
+ set(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugProfile;ReleaseProfile" CACHE STRING "" FORCE)
+ else()
+ set(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugProfile;ReleaseProfile;Coverage" CACHE STRING "" FORCE)
+ endif()
endmacro()
macro(set_exe_flags)
--
cgit v1.2.3
From 4bc02781af063456db438885d7f3cc8830d5cd92 Mon Sep 17 00:00:00 2001
From: JoannisO
Date: Wed, 28 May 2014 14:34:33 +0200
Subject: - Fixed an issue where dispensers would only shoot arrows
(appearantly some commits didn't come through) - Cleaned up the code
according to suggestions.
---
src/BlockEntities/DispenserEntity.cpp | 57 +++++++++++++++--------------------
1 file changed, 24 insertions(+), 33 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 638a844e6..2b0487c4a 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -198,13 +198,13 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind)
{
- Vector3d Speed = GetProjectileLookVector(a_Chunk);
+ Vector3d Angle = GetProjectileLookVector(a_Chunk);
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(DispX, DispZ);
double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
- m_World->CreateProjectile((double) EntityX, (double) DispY + 0.5, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, &Speed);
+ m_World->CreateProjectile((double) EntityX, (double) DispY + 0.5, (double) EntityZ, kind, NULL, NULL, &Angle);
}
@@ -213,47 +213,38 @@ Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
{
NIBBLETYPE Meta = a_Chunk.GetMeta(m_RelX, m_PosY, m_RelZ);
int Direction = 0;
+ Matrix4d m;
+ Vector3d Look;
+
switch (Meta)
{
- case E_META_DROPSPENSER_FACING_YP: Direction = -1; break; // UP
- case E_META_DROPSPENSER_FACING_YM: Direction = -2; break; // DOWN
+ case E_META_DROPSPENSER_FACING_YP:
+ m.Init(Vector3d(), 0, 180, 0);
+ Look = m.Transform(Vector3d(0, 1, 0));
+
+ return Look * 20; // UP
+ break;
+
+ case E_META_DROPSPENSER_FACING_YM:
+ m.Init(Vector3d(), 0, -360, 0);
+ Look = m.Transform(Vector3d(0, -1, 0));
+
+ return Look * 20;; // DOWN
+ break;
+
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
case E_META_DROPSPENSER_FACING_ZM: Direction = 180; break;
case E_META_DROPSPENSER_FACING_ZP: Direction = 0; break;
}
- if(Direction >= 0)
- {
- Matrix4d m;
- m.Init(Vector3d(), 0, Direction, 0);
- Vector3d Look = m.Transform(Vector3d(0, 0, 1));
-
- Vector3d Speed = Look * 20;
- Speed.y = Speed.y + 1;
+ m.Init(Vector3d(), 0, Direction, 0);
+ Look = m.Transform(Vector3d(0, 0, 1));
- return Speed;
+ Vector3d Angle = Look * 20;
+ Angle.y = Angle.y + 1;
- } else if(Direction == -1)
- {
- Matrix4d m;
- m.Init(Vector3d(), 0, 180, 0);
- Vector3d Look = m.Transform(Vector3d(0, 1, 0));
-
- Vector3d Speed = Look * 20;
-
- return Speed;
-
- } else {
-
- Matrix4d m;
- m.Init(Vector3d(), 0, -360, 0);
- Vector3d Look = m.Transform(Vector3d(0, -1, 0));
-
- Vector3d Speed = Look * 20;
-
- return Speed;
- }
+ return Angle;
}
--
cgit v1.2.3
From 427bddc18970bb66aa1f396c4fd19e52e3ad602d Mon Sep 17 00:00:00 2001
From: JoannisO
Date: Wed, 28 May 2014 15:16:45 +0200
Subject: - Removed breaks. I thought it wouldn't compile without them but the
issue was appearantly solved with an earlier commit.
---
src/BlockEntities/DispenserEntity.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 2b0487c4a..341994be8 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -223,14 +223,12 @@ Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
Look = m.Transform(Vector3d(0, 1, 0));
return Look * 20; // UP
- break;
case E_META_DROPSPENSER_FACING_YM:
m.Init(Vector3d(), 0, -360, 0);
Look = m.Transform(Vector3d(0, -1, 0));
return Look * 20;; // DOWN
- break;
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
--
cgit v1.2.3
From d29b242674fbf89035c8908753496522edf8eaee Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 28 May 2014 16:33:10 +0200
Subject: Fixed a memory leak in cPrefabPiecePool.
The pool pieces weren't freed upon pool destruction.
---
src/Generating/PrefabPiecePool.cpp | 28 ++++++++++++++++++++++++++++
src/Generating/PrefabPiecePool.h | 7 ++++++-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/src/Generating/PrefabPiecePool.cpp b/src/Generating/PrefabPiecePool.cpp
index ed9340815..145474bcc 100644
--- a/src/Generating/PrefabPiecePool.cpp
+++ b/src/Generating/PrefabPiecePool.cpp
@@ -26,6 +26,34 @@ cPrefabPiecePool::cPrefabPiecePool(
+cPrefabPiecePool::~cPrefabPiecePool()
+{
+ Clear();
+}
+
+
+
+
+
+void cPrefabPiecePool::Clear(void)
+{
+ m_PiecesByConnector.clear();
+ for (cPieces::iterator itr = m_AllPieces.begin(), end = m_AllPieces.end(); itr != end; ++itr)
+ {
+ delete *itr;
+ }
+ m_AllPieces.clear();
+ for (cPieces::iterator itr = m_StartingPieces.begin(), end = m_StartingPieces.end(); itr != end; ++itr)
+ {
+ delete *itr;
+ }
+ m_StartingPieces.clear();
+}
+
+
+
+
+
void cPrefabPiecePool::AddPieceDefs(const cPrefab::sDef * a_PieceDefs, size_t a_NumPieceDefs)
{
ASSERT(a_PieceDefs != NULL);
diff --git a/src/Generating/PrefabPiecePool.h b/src/Generating/PrefabPiecePool.h
index c6a5ad360..50ae63c0c 100644
--- a/src/Generating/PrefabPiecePool.h
+++ b/src/Generating/PrefabPiecePool.h
@@ -34,6 +34,12 @@ public:
const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs
);
+ /** Destroys the pool, freeing all pieces. */
+ ~cPrefabPiecePool();
+
+ /** Removes and frees all pieces from this pool. */
+ void Clear(void);
+
/** Adds pieces from the specified definitions into m_AllPieces. Also adds the pieces into
the m_PiecesByConnector map.
May be called multiple times with different PieceDefs, will add all such pieces. */
@@ -44,7 +50,6 @@ public:
May be called multiple times with different PieceDefs, will add all such pieces. */
void AddStartingPieceDefs(const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs);
-
protected:
/** The type used to map a connector type to the list of pieces with that connector */
--
cgit v1.2.3
From 7ec44951a0841734be53e81088dcdbc79a104d02 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 28 May 2014 11:35:55 +0200
Subject: Fixed cChunkData formatting.
---
src/ChunkData.cpp | 118 +++++++++++++++++++++++++++++++++++++++++-------------
src/ChunkData.h | 22 +++++-----
2 files changed, 101 insertions(+), 39 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index c41dcb265..8aed62000 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -5,64 +5,86 @@
cChunkData::cChunkData()
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- : IsOwner(true)
+ : m_IsOwner(true)
#endif
{
- memset(m_Sections, 0, sizeof(m_Sections));
+ for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ {
+ m_Sections[i] = NULL;
+ }
}
+
+
+
cChunkData::~cChunkData()
{
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- if (!IsOwner)
+ if (!m_IsOwner)
{
return;
}
#endif
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- if (m_Sections[i] == NULL) Free(m_Sections[i]);;
+ Free(m_Sections[i]);
}
}
+
+
+
+
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- cChunkData::cChunkData(const cChunkData& other) :
- IsOwner(true)
+ cChunkData::cChunkData(const cChunkData & a_Other) :
+ m_IsOwner(true)
{
+ // Move contents and ownership from a_Other to this, pointer-wise:
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- m_Sections[i] = other.m_Sections[i];
+ m_Sections[i] = a_Other.m_Sections[i];
}
- other.IsOwner = false;
+ a_Other.m_IsOwner = false;
}
- cChunkData& cChunkData::operator=(const cChunkData& other)
+
+
+
+
+ cChunkData & cChunkData::operator =(const cChunkData & a_Other)
{
- if (&other != this)
+ // If assigning to self, no-op
+ if (&a_Other == this)
+ {
+ return *this;
+ }
+
+ // Free any currently held contents:
+ if (m_IsOwner)
{
- if (IsOwner)
- {
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
- {
- if (m_Sections[i]) Free(m_Sections[i]);;
- }
- }
- IsOwner = true;
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- m_Sections[i] = other.m_Sections[i];
+ Free(m_Sections[i]);
}
- other.IsOwner = false;
}
+
+ // Move contents and ownership from a_Other to this, pointer-wise:
+ m_IsOwner = true;
+ for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ {
+ m_Sections[i] = a_Other.m_Sections[i];
+ }
+ a_Other.m_IsOwner = false;
return *this;
-
}
+
#else
+
// unique_ptr style interface for memory management
- cChunkData::cChunkData(cChunkData&& other)
+ cChunkData::cChunkData(cChunkData && other)
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
@@ -70,14 +92,18 @@ cChunkData::~cChunkData()
other.m_Sections[i] = NULL;
}
}
+
+
+
+
- cChunkData& cChunkData::operator=(cChunkData&& other)
+ cChunkData & cChunkData::operator =(cChunkData && other)
{
if (&other != this)
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- Free(m_Sections[i]);;
+ Free(m_Sections[i]);
m_Sections[i] = other.m_Sections[i];
other.m_Sections[i] = NULL;
}
@@ -86,6 +112,10 @@ cChunkData::~cChunkData()
}
#endif
+
+
+
+
BLOCKTYPE cChunkData::GetBlock(int a_X, int a_Y, int a_Z) const
{
ASSERT((a_X >= 0) && (a_X < cChunkDef::Width));
@@ -103,6 +133,10 @@ BLOCKTYPE cChunkData::GetBlock(int a_X, int a_Y, int a_Z) const
}
}
+
+
+
+
void cChunkData::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_Block)
{
if (
@@ -134,6 +168,10 @@ void cChunkData::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_Block)
m_Sections[Section]->m_BlockTypes[Index] = a_Block;
}
+
+
+
+
NIBBLETYPE cChunkData::GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
{
if (
@@ -156,6 +194,10 @@ NIBBLETYPE cChunkData::GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
return 0;
}
+
+
+
+
bool cChunkData::SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Nibble)
{
if (
@@ -192,9 +234,17 @@ bool cChunkData::SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Nibble
return oldval == a_Nibble;
}
+
+
+
+
NIBBLETYPE cChunkData::GetBlockLight(int a_RelX, int a_RelY, int a_RelZ) const
{
- if ((a_RelX < cChunkDef::Width) && (a_RelX > -1) && (a_RelY < cChunkDef::Height) && (a_RelY > -1) && (a_RelZ < cChunkDef::Width) && (a_RelZ > -1))
+ if (
+ (a_RelX < cChunkDef::Width) && (a_RelX > -1) &&
+ (a_RelY < cChunkDef::Height) && (a_RelY > -1) &&
+ (a_RelZ < cChunkDef::Width) && (a_RelZ > -1)
+ )
{
int Section = a_RelY / CHUNK_SECTION_HEIGHT;
if (m_Sections[Section] != NULL)
@@ -211,6 +261,10 @@ NIBBLETYPE cChunkData::GetBlockLight(int a_RelX, int a_RelY, int a_RelZ) const
return 0;
}
+
+
+
+
NIBBLETYPE cChunkData::GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const
{
if ((a_RelX < cChunkDef::Width) && (a_RelX > -1) && (a_RelY < cChunkDef::Height) && (a_RelY > -1) && (a_RelZ < cChunkDef::Width) && (a_RelZ > -1))
@@ -230,7 +284,11 @@ NIBBLETYPE cChunkData::GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const
return 0;
}
-cChunkData cChunkData::Copy() const
+
+
+
+
+cChunkData cChunkData::Copy(void) const
{
cChunkData copy;
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
@@ -248,11 +306,11 @@ cChunkData cChunkData::Copy() const
-void cChunkData::CopyBlocks (BLOCKTYPE * a_dest, size_t a_Idx, size_t length) const
+void cChunkData::CopyBlocks(BLOCKTYPE * a_dest, size_t a_Idx, size_t length) const
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16;
+ const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16;
if (a_Idx > 0)
{
a_Idx = std::max(a_Idx - length, (size_t) 0);
@@ -588,6 +646,8 @@ cChunkData::sChunkSection * cChunkData::Allocate() const
+
+
void cChunkData::Free(cChunkData::sChunkSection * ptr) const
{
delete ptr;
@@ -595,6 +655,8 @@ void cChunkData::Free(cChunkData::sChunkSection * ptr) const
+
+
void cChunkData::ZeroSection(cChunkData::sChunkSection * ptr) const
{
memset(
diff --git a/src/ChunkData.h b/src/ChunkData.h
index 16fcc4d37..6544b246e 100644
--- a/src/ChunkData.h
+++ b/src/ChunkData.h
@@ -25,12 +25,12 @@ public:
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- cChunkData(const cChunkData& other);
- cChunkData& operator=(const cChunkData& other);
+ cChunkData(const cChunkData & other);
+ cChunkData & operator =(const cChunkData & other);
#else
// unique_ptr style interface for memory management
- cChunkData(cChunkData&& other);
- cChunkData& operator=(cChunkData&& other);
+ cChunkData(cChunkData && other);
+ cChunkData & operator =(cChunkData && other);
#endif
BLOCKTYPE GetBlock(int a_X, int a_Y, int a_Z) const;
@@ -43,15 +43,15 @@ public:
NIBBLETYPE GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const;
- cChunkData Copy() const;
+ cChunkData Copy(void) const;
void CopyBlocks (BLOCKTYPE * a_dest, size_t a_Idx = 0, size_t length = cChunkDef::NumBlocks) const;
void CopyMeta (NIBBLETYPE * a_dest) const;
- void CopyBlockLight (NIBBLETYPE * a_dest) const;
+ void CopyBlockLight(NIBBLETYPE * a_dest) const;
void CopySkyLight (NIBBLETYPE * a_dest) const;
void SetBlocks (const BLOCKTYPE * a_src);
void SetMeta (const NIBBLETYPE * a_src);
- void SetBlockLight (const NIBBLETYPE * a_src);
+ void SetBlockLight(const NIBBLETYPE * a_src);
void SetSkyLight (const NIBBLETYPE * a_src);
private:
@@ -61,19 +61,19 @@ private:
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- mutable bool IsOwner;
+ mutable bool m_IsOwner;
#endif
struct sChunkSection {
- BLOCKTYPE m_BlockTypes [CHUNK_SECTION_HEIGHT * 16 * 16] ;
+ BLOCKTYPE m_BlockTypes [CHUNK_SECTION_HEIGHT * 16 * 16];
NIBBLETYPE m_BlockMeta [CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
NIBBLETYPE m_BlockLight [CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
NIBBLETYPE m_BlockSkyLight[CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
};
- sChunkSection *m_Sections[CHUNK_SECTION_COUNT];
+ sChunkSection * m_Sections[CHUNK_SECTION_COUNT];
- sChunkSection * Allocate() const;
+ sChunkSection * Allocate(void) const;
void Free(sChunkSection * ptr) const;
void ZeroSection(sChunkSection * ptr) const;
--
cgit v1.2.3
From 171e13de4f58cdc4f8a97cd8adfbfbfbcf1df615 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Wed, 28 May 2014 15:59:59 +0100
Subject: for compiliers other than msvc we need to tell lua that its building
as a dll
---
lib/lua/CMakeLists.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/lua/CMakeLists.txt b/lib/lua/CMakeLists.txt
index db112d557..6e5e0f565 100644
--- a/lib/lua/CMakeLists.txt
+++ b/lib/lua/CMakeLists.txt
@@ -20,6 +20,12 @@ endif()
# Lua needs to be linked dynamically on Windows and statically on *nix, so that LuaRocks work
if (WIN32)
+
+ #for compiliers other than msvc we need to tell lua that its building as a dll
+ if (NOT MSVC)
+ add_flags_cxx(-DLUA_BUILD_AS_DLL=1)
+ endif()
+
add_library(lua SHARED ${SOURCE})
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/MCServer)
--
cgit v1.2.3
From 1cf426d881e1ea3dbfae5ebae701e02cd41c95a0 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Wed, 28 May 2014 20:39:47 +0100
Subject: FreeBSD requires __POSIX_VISIBLE macro to be defined
---
lib/sqlite/CMakeLists.txt | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/sqlite/CMakeLists.txt b/lib/sqlite/CMakeLists.txt
index 0815127ef..d3bba6606 100644
--- a/lib/sqlite/CMakeLists.txt
+++ b/lib/sqlite/CMakeLists.txt
@@ -17,6 +17,10 @@ if (WIN32)
source_group("Sources" FILES ${SOURCE})
endif()
+# FreeBSD requires us to define this to get POSIX 2001 standard
+if (SYSTEM_NAME STREQUAL "FreeBSD"))
+ add_flags_cxx(-D__POSIX_VISIBLE=200112)
+endif()
add_library(sqlite ${SOURCE})
--
cgit v1.2.3
From a2b741d904d55915fe041ff17d2ffadc7bf8221c Mon Sep 17 00:00:00 2001
From: worktycho
Date: Wed, 28 May 2014 20:41:34 +0100
Subject: derp
---
lib/sqlite/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/sqlite/CMakeLists.txt b/lib/sqlite/CMakeLists.txt
index d3bba6606..da16ce411 100644
--- a/lib/sqlite/CMakeLists.txt
+++ b/lib/sqlite/CMakeLists.txt
@@ -18,7 +18,7 @@ if (WIN32)
endif()
# FreeBSD requires us to define this to get POSIX 2001 standard
-if (SYSTEM_NAME STREQUAL "FreeBSD"))
+if (SYSTEM_NAME STREQUAL "FreeBSD")
add_flags_cxx(-D__POSIX_VISIBLE=200112)
endif()
--
cgit v1.2.3
From 444cce1269b3efc3370358b389c4ebdfe1f2e5b2 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Wed, 28 May 2014 21:39:28 +0100
Subject: Cmake system name not System name
---
lib/sqlite/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/sqlite/CMakeLists.txt b/lib/sqlite/CMakeLists.txt
index da16ce411..9add2280b 100644
--- a/lib/sqlite/CMakeLists.txt
+++ b/lib/sqlite/CMakeLists.txt
@@ -18,7 +18,7 @@ if (WIN32)
endif()
# FreeBSD requires us to define this to get POSIX 2001 standard
-if (SYSTEM_NAME STREQUAL "FreeBSD")
+if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
add_flags_cxx(-D__POSIX_VISIBLE=200112)
endif()
--
cgit v1.2.3
From 81f756cbda76507cc676fd50f20f33483c4ce6f8 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 28 May 2014 22:40:19 +0200
Subject: cChunkData: Normalized code style.
---
src/ChunkData.cpp | 168 +++++++++++++++++++++++++++++-------------------------
src/ChunkData.h | 27 +++++----
2 files changed, 106 insertions(+), 89 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 8aed62000..beee6c64a 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -306,33 +306,33 @@ cChunkData cChunkData::Copy(void) const
-void cChunkData::CopyBlocks(BLOCKTYPE * a_dest, size_t a_Idx, size_t length) const
+void cChunkData::CopyBlocks(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16;
if (a_Idx > 0)
{
- a_Idx = std::max(a_Idx - length, (size_t) 0);
+ a_Idx = std::max(a_Idx - a_Length, (size_t) 0);
}
if (a_Idx == 0)
{
- size_t tocopy = std::min(segment_length, length);
- length -= tocopy;
+ size_t ToCopy = std::min(SegmentLength, a_Length);
+ length -= ToCopy;
if (m_Sections[i] != NULL)
{
memcpy(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
&m_Sections[i]->m_BlockTypes,
- sizeof(BLOCKTYPE) * tocopy
+ sizeof(BLOCKTYPE) * ToCopy
);
}
else
{
memset(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
0,
- sizeof(BLOCKTYPE) * tocopy
+ sizeof(BLOCKTYPE) * ToCopy
);
}
}
@@ -343,25 +343,25 @@ void cChunkData::CopyBlocks(BLOCKTYPE * a_dest, size_t a_Idx, size_t length) co
-void cChunkData::CopyMeta(NIBBLETYPE * a_dest) const
+void cChunkData::CopyMeta(NIBBLETYPE * a_Dest) const
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
memcpy(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
&m_Sections[i]->m_BlockMeta,
- sizeof(NIBBLETYPE) * segment_length
+ sizeof(NIBBLETYPE) * SegmentLength
);
}
else
{
memset(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
0,
- sizeof(BLOCKTYPE) * segment_length
+ sizeof(BLOCKTYPE) * SegmentLength
);
}
}
@@ -371,25 +371,25 @@ void cChunkData::CopyMeta(NIBBLETYPE * a_dest) const
-void cChunkData::CopyBlockLight(NIBBLETYPE * a_dest) const
+void cChunkData::CopyBlockLight(NIBBLETYPE * a_Dest) const
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
memcpy(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
&m_Sections[i]->m_BlockLight,
- sizeof(NIBBLETYPE) * segment_length
+ sizeof(NIBBLETYPE) * SegmentLength
);
}
else
{
memset(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
0,
- sizeof(BLOCKTYPE) * segment_length
+ sizeof(BLOCKTYPE) * SegmentLength
);
}
}
@@ -399,25 +399,25 @@ void cChunkData::CopyBlockLight(NIBBLETYPE * a_dest) const
-void cChunkData::CopySkyLight(NIBBLETYPE * a_dest) const
+void cChunkData::CopySkyLight(NIBBLETYPE * a_Dest) const
{
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
memcpy(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
&m_Sections[i]->m_BlockSkyLight,
- sizeof(NIBBLETYPE) * segment_length
+ sizeof(NIBBLETYPE) * SegmentLength
);
}
else
{
memset(
- &a_dest[i * segment_length],
+ &a_Dest[i * SegmentLength],
0xFF,
- sizeof(BLOCKTYPE) * segment_length
+ sizeof(BLOCKTYPE) * SegmentLength
);
}
}
@@ -427,34 +427,36 @@ void cChunkData::CopySkyLight(NIBBLETYPE * a_dest) const
-void cChunkData::SetBlocks(const BLOCKTYPE * a_src)
+void cChunkData::SetBlocks(const BLOCKTYPE * a_Src)
{
+ ASSERT(a_Src != NULL);
+
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16;
if (m_Sections[i] != NULL)
{
memcpy(
&m_Sections[i]->m_BlockTypes,
- &a_src[i * segment_length],
- sizeof(BLOCKTYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(BLOCKTYPE) * SegmentLength
);
}
else
{
// j counts how many of leading zeros the buffer has
- // if j == segment_length then the buffer is all zeros so there is no point
+ // if j == SegmentLength then the buffer is all zeros so there is no point
// creating the buffer.
size_t j = 0;
// do nothing whilst 0
- for (; j < segment_length && a_src[i * segment_length + j] == 0; j++);
- if (j != segment_length)
+ for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j] == 0); j++);
+ if (j != SegmentLength)
{
m_Sections[i] = Allocate();
memcpy(
&m_Sections[i]->m_BlockTypes,
- &a_src[i * segment_length],
- sizeof(BLOCKTYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(BLOCKTYPE) * SegmentLength
);
memset(
m_Sections[i]->m_BlockMeta,
@@ -479,34 +481,36 @@ void cChunkData::SetBlocks(const BLOCKTYPE * a_src)
-void cChunkData::SetMeta(const NIBBLETYPE * a_src)
+void cChunkData::SetMeta(const NIBBLETYPE * a_Src)
{
+ ASSERT(a_Src != NULL);
+
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
memcpy(
&m_Sections[i]->m_BlockMeta,
- &a_src[i * segment_length],
- sizeof(NIBBLETYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(NIBBLETYPE) * SegmentLength
);
}
else
{
// j counts how many of leading zeros the buffer has
- // if j == segment_length then the buffer is all zeros so there is no point
+ // if j == SegmentLength then the buffer is all zeros so there is no point
// creating the buffer.
size_t j = 0;
// do nothing whilst 0
- for (; j < segment_length && a_src[i * segment_length + j] == 0; j++);
- if (j != segment_length)
+ for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j] == 0); j++);
+ if (j != SegmentLength)
{
m_Sections[i] = Allocate();
memcpy(
&m_Sections[i]->m_BlockMeta,
- &a_src[i * segment_length],
- sizeof(BLOCKTYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(BLOCKTYPE) * SegmentLength
);
memset(
m_Sections[i]->m_BlockTypes,
@@ -531,35 +535,38 @@ void cChunkData::SetMeta(const NIBBLETYPE * a_src)
-void cChunkData::SetBlockLight(const NIBBLETYPE * a_src)
+void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
{
- if (!a_src) return;
+ if (a_Src == NULL)
+ {
+ return;
+ }
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
memcpy(
&m_Sections[i]->m_BlockLight,
- &a_src[i * segment_length],
- sizeof(NIBBLETYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(NIBBLETYPE) * SegmentLength
);
}
else
{
// j counts how many of leading zeros the buffer has
- // if j == segment_length then the buffer is all zeros so there is no point
+ // if j == SegmentLength then the buffer is all zeros so there is no point
// creating the buffer.
size_t j = 0;
// do nothing whilst 0
- for (; j < segment_length && a_src[i * segment_length + j] == 0; j++);
- if (j != segment_length)
+ for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j] == 0); j++);
+ if (j != SegmentLength)
{
m_Sections[i] = Allocate();
memcpy(
&m_Sections[i]->m_BlockLight,
- &a_src[i * segment_length],
- sizeof(BLOCKTYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(BLOCKTYPE) * SegmentLength
);
memset(
m_Sections[i]->m_BlockTypes,
@@ -584,35 +591,39 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_src)
-void cChunkData::SetSkyLight (const NIBBLETYPE * a_src)
+void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
{
- if (!a_src) return;
+ if (a_Src == NULL)
+ {
+ return;
+ }
+
for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
{
- const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
memcpy(
&m_Sections[i]->m_BlockSkyLight,
- &a_src[i * segment_length],
- sizeof(NIBBLETYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(NIBBLETYPE) * SegmentLength
);
}
else
{
// j counts how many of leading zeros the buffer has
- // if j == segment_length then the buffer is all zeros so there is no point
+ // if j == SegmentLength then the buffer is all zeros so there is no point
// creating the buffer.
size_t j = 0;
// do nothing whilst 0
- for (; j < segment_length && a_src[i * segment_length + j] == 0xFF; j++);
- if (j != segment_length)
+ for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j]) == 0xFF; j++);
+ if (j != SegmentLength)
{
m_Sections[i] = Allocate();
memcpy(
&m_Sections[i]->m_BlockSkyLight,
- &a_src[i * segment_length],
- sizeof(BLOCKTYPE) * segment_length
+ &a_Src[i * SegmentLength],
+ sizeof(BLOCKTYPE) * SegmentLength
);
memset(
m_Sections[i]->m_BlockTypes,
@@ -638,9 +649,9 @@ void cChunkData::SetSkyLight (const NIBBLETYPE * a_src)
-cChunkData::sChunkSection * cChunkData::Allocate() const
+cChunkData::sChunkSection * cChunkData::Allocate(void) const
{
- // TODO: use a allocation pool
+ // TODO: Use an allocation pool
return new cChunkData::sChunkSection;
}
@@ -648,36 +659,37 @@ cChunkData::sChunkSection * cChunkData::Allocate() const
-void cChunkData::Free(cChunkData::sChunkSection * ptr) const
+void cChunkData::Free(cChunkData::sChunkSection * a_Section) const
{
- delete ptr;
+ // TODO: Use an allocation pool
+ delete a_Section;
}
-void cChunkData::ZeroSection(cChunkData::sChunkSection * ptr) const
+void cChunkData::ZeroSection(cChunkData::sChunkSection * a_Section) const
{
memset(
- ptr->m_BlockTypes,
+ a_Section->m_BlockTypes,
0x00,
- sizeof(ptr->m_BlockTypes)
+ sizeof(a_Section->m_BlockTypes)
);
memset(
- ptr->m_BlockMeta,
+ a_Section->m_BlockMeta,
0x00,
- sizeof(ptr->m_BlockMeta)
+ sizeof(a_Section->m_BlockMeta)
);
memset(
- ptr->m_BlockLight,
+ a_Section->m_BlockLight,
0x00,
- sizeof(ptr->m_BlockLight)
+ sizeof(a_Section->m_BlockLight)
);
memset(
- ptr->m_BlockSkyLight,
+ a_Section->m_BlockSkyLight,
0xFF,
- sizeof(ptr->m_BlockSkyLight)
+ sizeof(a_Section->m_BlockSkyLight)
);
}
diff --git a/src/ChunkData.h b/src/ChunkData.h
index 6544b246e..09b2cb563 100644
--- a/src/ChunkData.h
+++ b/src/ChunkData.h
@@ -25,12 +25,12 @@ public:
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- cChunkData(const cChunkData & other);
- cChunkData & operator =(const cChunkData & other);
+ cChunkData(const cChunkData & a_Other);
+ cChunkData & operator =(const cChunkData & a_Other);
#else
// unique_ptr style interface for memory management
- cChunkData(cChunkData && other);
- cChunkData & operator =(cChunkData && other);
+ cChunkData(cChunkData && a_Other);
+ cChunkData & operator =(cChunkData && a_ther);
#endif
BLOCKTYPE GetBlock(int a_X, int a_Y, int a_Z) const;
@@ -44,10 +44,10 @@ public:
NIBBLETYPE GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const;
cChunkData Copy(void) const;
- void CopyBlocks (BLOCKTYPE * a_dest, size_t a_Idx = 0, size_t length = cChunkDef::NumBlocks) const;
- void CopyMeta (NIBBLETYPE * a_dest) const;
- void CopyBlockLight(NIBBLETYPE * a_dest) const;
- void CopySkyLight (NIBBLETYPE * a_dest) const;
+ void CopyBlocks (BLOCKTYPE * a_Dest, size_t a_Idx = 0, size_t a_Length = cChunkDef::NumBlocks) const;
+ void CopyMeta (NIBBLETYPE * a_Dest) const;
+ void CopyBlockLight(NIBBLETYPE * a_Dest) const;
+ void CopySkyLight (NIBBLETYPE * a_Dest) const;
void SetBlocks (const BLOCKTYPE * a_src);
void SetMeta (const NIBBLETYPE * a_src);
@@ -73,10 +73,15 @@ private:
sChunkSection * m_Sections[CHUNK_SECTION_COUNT];
- sChunkSection * Allocate(void) const;
- void Free(sChunkSection * ptr) const;
+ /** Allocates a new section. Entry-point to custom allocators. */
+ static sChunkSection * Allocate(void);
- void ZeroSection(sChunkSection * ptr) const;
+ /** Frees the specified section, previously allocated using Allocate().
+ Note that a_Section may be NULL. */
+ static void Free(sChunkSection * a_Section);
+
+ /** Sets the data in the specified section to their default values. */
+ void ZeroSection(sChunkSection * a_Section) const;
};
--
cgit v1.2.3
From 10273f64a2ec326201d3553f3704d2d6f21b7a86 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Wed, 28 May 2014 22:41:23 +0200
Subject: Fixed a crash in message formatter.
The code would fail if a message is sent to a player not yet added to a world.
---
src/Protocol/Protocol17x.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Protocol/Protocol17x.cpp b/src/Protocol/Protocol17x.cpp
index 7c526d103..f7564fe6d 100644
--- a/src/Protocol/Protocol17x.cpp
+++ b/src/Protocol/Protocol17x.cpp
@@ -234,7 +234,8 @@ void cProtocol172::SendChat(const cCompositeChat & a_Message)
// Compose the complete Json string to send:
Json::Value msg;
- msg["text"] = cClientHandle::FormatMessageType(m_Client->GetPlayer()->GetWorld()->ShouldUseChatPrefixes(), a_Message.GetMessageType(), a_Message.GetAdditionalMessageTypeData()); // The client crashes without this field being present
+ cWorld * World = m_Client->GetPlayer()->GetWorld();
+ msg["text"] = cClientHandle::FormatMessageType((World == NULL) ? false : World->ShouldUseChatPrefixes(), a_Message.GetMessageType(), a_Message.GetAdditionalMessageTypeData()); // The client crashes without this field being present
const cCompositeChat::cParts & Parts = a_Message.GetParts();
for (cCompositeChat::cParts::const_iterator itr = Parts.begin(), end = Parts.end(); itr != end; ++itr)
{
--
cgit v1.2.3
From 999662503a90e6acd4528be50f8b6232b357d9c3 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 29 May 2014 09:09:11 +0200
Subject: Fixed forgotten changes.
---
src/ChunkData.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index beee6c64a..172858e4e 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -318,7 +318,7 @@ void cChunkData::CopyBlocks(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length)
if (a_Idx == 0)
{
size_t ToCopy = std::min(SegmentLength, a_Length);
- length -= ToCopy;
+ a_Length -= ToCopy;
if (m_Sections[i] != NULL)
{
memcpy(
@@ -649,7 +649,7 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
-cChunkData::sChunkSection * cChunkData::Allocate(void) const
+cChunkData::sChunkSection * cChunkData::Allocate(void)
{
// TODO: Use an allocation pool
return new cChunkData::sChunkSection;
@@ -659,7 +659,7 @@ cChunkData::sChunkSection * cChunkData::Allocate(void) const
-void cChunkData::Free(cChunkData::sChunkSection * a_Section) const
+void cChunkData::Free(cChunkData::sChunkSection * a_Section)
{
// TODO: Use an allocation pool
delete a_Section;
--
cgit v1.2.3
From e5187aa645b0f06e58e347bed1f8d68916764ba1 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 29 May 2014 09:19:20 +0200
Subject: Fixed a memory leak in cPOCPieceGenerator
---
src/Generating/POCPieceGenerator.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/Generating/POCPieceGenerator.cpp b/src/Generating/POCPieceGenerator.cpp
index 9ed4b565e..491f4d206 100644
--- a/src/Generating/POCPieceGenerator.cpp
+++ b/src/Generating/POCPieceGenerator.cpp
@@ -186,6 +186,11 @@ cPOCPieceGenerator::cPOCPieceGenerator(int a_Seed) :
cPOCPieceGenerator::~cPOCPieceGenerator()
{
cPieceGenerator::FreePieces(m_Pieces);
+ for (cPieces::iterator itr = m_AvailPieces.begin(), end = m_AvailPieces.end(); itr != end; ++itr)
+ {
+ delete *itr;
+ }
+ m_AvailPieces.clear();
}
--
cgit v1.2.3
From ae4371a733ee3ac029498ddef50850cc0ca9cbd9 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Thu, 29 May 2014 11:56:22 +0100
Subject: Fixed piston power checking
---
src/Simulator/IncrementalRedstoneSimulator.cpp | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/src/Simulator/IncrementalRedstoneSimulator.cpp b/src/Simulator/IncrementalRedstoneSimulator.cpp
index c24b1c4b3..51a7c2886 100644
--- a/src/Simulator/IncrementalRedstoneSimulator.cpp
+++ b/src/Simulator/IncrementalRedstoneSimulator.cpp
@@ -1489,41 +1489,36 @@ bool cIncrementalRedstoneSimulator::IsPistonPowered(int a_RelBlockX, int a_RelBl
{
// Pistons cannot be powered through their front face; this function verifies that a source meets this requirement
- int OldX = a_RelBlockX, OldY = a_RelBlockY, OldZ = a_RelBlockZ;
eBlockFace Face = cBlockPistonHandler::MetaDataToDirection(a_Meta);
- int BlockX = (m_Chunk->GetPosX() * cChunkDef::Width) + a_RelBlockX;
- int BlockZ = (m_Chunk->GetPosZ() * cChunkDef::Width) + a_RelBlockZ;
+ int BlockX = m_Chunk->GetPosX() * cChunkDef::Width + a_RelBlockX;
+ int BlockZ = m_Chunk->GetPosZ() * cChunkDef::Width + a_RelBlockZ;
for (PoweredBlocksList::const_iterator itr = m_PoweredBlocks->begin(); itr != m_PoweredBlocks->end(); ++itr)
{
if (!itr->a_BlockPos.Equals(Vector3i(BlockX, a_RelBlockY, BlockZ))) { continue; }
- AddFaceDirection(a_RelBlockX, a_RelBlockY, a_RelBlockZ, Face);
+ AddFaceDirection(BlockX, a_RelBlockY, BlockZ, Face);
if (!itr->a_SourcePos.Equals(Vector3i(BlockX, a_RelBlockY, BlockZ)))
{
return true;
}
- a_RelBlockX = OldX;
- a_RelBlockY = OldY;
- a_RelBlockZ = OldZ;
+ AddFaceDirection(BlockX, a_RelBlockY, BlockZ, Face, true);
}
for (LinkedBlocksList::const_iterator itr = m_LinkedPoweredBlocks->begin(); itr != m_LinkedPoweredBlocks->end(); ++itr)
{
if (!itr->a_BlockPos.Equals(Vector3i(BlockX, a_RelBlockY, BlockZ))) { continue; }
- AddFaceDirection(a_RelBlockX, a_RelBlockY, a_RelBlockZ, Face);
+ AddFaceDirection(BlockX, a_RelBlockY, BlockZ, Face);
if (!itr->a_MiddlePos.Equals(Vector3i(BlockX, a_RelBlockY, BlockZ)))
{
return true;
}
- a_RelBlockX = OldX;
- a_RelBlockY = OldY;
- a_RelBlockZ = OldZ;
+ AddFaceDirection(BlockX, a_RelBlockY, BlockZ, Face, true);
}
return false; // Source was in front of the piston's front face
}
--
cgit v1.2.3
From 365c6f50bd057eb62c66b9b222a07ca6efcb2c47 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Thu, 29 May 2014 11:57:06 +0100
Subject: Changed block send queue to use vectors
As suggested by @worktycho.
---
src/Blocks/BlockPiston.cpp | 23 +++++++++++++++++------
src/World.cpp | 21 ++++++++++-----------
src/World.h | 6 ++----
3 files changed, 29 insertions(+), 21 deletions(-)
diff --git a/src/Blocks/BlockPiston.cpp b/src/Blocks/BlockPiston.cpp
index f758013dc..1f8e0d9e0 100644
--- a/src/Blocks/BlockPiston.cpp
+++ b/src/Blocks/BlockPiston.cpp
@@ -27,6 +27,7 @@
}
#define PISTON_TICK_DELAY 1
+#define PISTON_MAX_PUSH_DISTANCE 12
@@ -78,7 +79,7 @@ bool cBlockPistonHandler::GetPlacementBlockTypeMeta(
int cBlockPistonHandler::FirstPassthroughBlock(int pistonX, int pistonY, int pistonZ, NIBBLETYPE pistonmeta, cWorld * a_World)
{
// Examine each of the 12 blocks ahead of the piston:
- for (int ret = 0; ret < 12; ret++)
+ for (int ret = 0; ret < PISTON_MAX_PUSH_DISTANCE; ret++)
{
BLOCKTYPE currBlock;
NIBBLETYPE currMeta;
@@ -144,12 +145,15 @@ void cBlockPistonHandler::ExtendPiston(int a_BlockX, int a_BlockY, int a_BlockZ,
// Push blocks, from the furthest to the nearest:
int oldx = a_BlockX, oldy = a_BlockY, oldz = a_BlockZ;
NIBBLETYPE currBlockMeta;
+ std::vector ScheduledBlocks;
+ ScheduledBlocks.reserve(PISTON_MAX_PUSH_DISTANCE);
+
for (int i = dist + 1; i > 1; i--)
{
AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, -1);
a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, currBlock, currBlockMeta);
a_World->SetBlock(oldx, oldy, oldz, currBlock, currBlockMeta, false);
- a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(oldx, oldy, oldz));
+ ScheduledBlocks.push_back(Vector3i(oldx, oldy, oldz));
oldx = a_BlockX;
oldy = a_BlockY;
oldz = a_BlockZ;
@@ -158,12 +162,13 @@ void cBlockPistonHandler::ExtendPiston(int a_BlockX, int a_BlockY, int a_BlockZ,
int extx = a_BlockX;
int exty = a_BlockY;
int extz = a_BlockZ;
+ ScheduledBlocks.push_back(Vector3i(extx, exty, extz));
AddPistonDir(a_BlockX, a_BlockY, a_BlockZ, pistonMeta, -1);
// "a_Block" now at piston body, "ext" at future extension
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, pistonBlock, pistonMeta | 0x8);
a_World->SetBlock(extx, exty, extz, E_BLOCK_PISTON_EXTENSION, pistonMeta | (IsSticky(pistonBlock) ? 8 : 0), false);
- a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(extx, exty, extz));
+ a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(ScheduledBlocks));
}
@@ -209,15 +214,21 @@ void cBlockPistonHandler::RetractPiston(int a_BlockX, int a_BlockY, int a_BlockZ
// Pull the block
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, tempBlock, tempMeta, false);
a_World->SetBlock(tempx, tempy, tempz, E_BLOCK_AIR, 0, false);
- a_World->ScheduleTask(PISTON_TICK_DELAY + 1, new cWorld::cTaskSendBlockToAllPlayers(a_BlockX, a_BlockY, a_BlockZ));
- a_World->ScheduleTask(PISTON_TICK_DELAY, new cWorld::cTaskSendBlockToAllPlayers(tempx, tempy, tempz));
+
+ std::vector ScheduledBlocks;
+ ScheduledBlocks.push_back(Vector3i(a_BlockX, a_BlockY, a_BlockZ));
+ ScheduledBlocks.push_back(Vector3i(tempx, tempy, tempz));
+ a_World->ScheduleTask(PISTON_TICK_DELAY + 1, new cWorld::cTaskSendBlockToAllPlayers(ScheduledBlocks));
return;
}
}
// Retract without pulling
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0, false);
- a_World->ScheduleTask(PISTON_TICK_DELAY + 1, new cWorld::cTaskSendBlockToAllPlayers(a_BlockX, a_BlockY, a_BlockZ));
+
+ std::vector ScheduledBlocks;
+ ScheduledBlocks.push_back(Vector3i(a_BlockX, a_BlockY, a_BlockZ));
+ a_World->ScheduleTask(PISTON_TICK_DELAY + 1, new cWorld::cTaskSendBlockToAllPlayers(ScheduledBlocks));
}
diff --git a/src/World.cpp b/src/World.cpp
index 29046bba9..88e9c32e6 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -3130,10 +3130,8 @@ void cWorld::cTaskUnloadUnusedChunks::Run(cWorld & a_World)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cWorld::cTaskSendBlockTo
-cWorld::cTaskSendBlockToAllPlayers::cTaskSendBlockToAllPlayers(int a_BlockX, int a_BlockY, int a_BlockZ) :
- m_BlockX(a_BlockX),
- m_BlockY(a_BlockY),
- m_BlockZ(a_BlockZ)
+cWorld::cTaskSendBlockToAllPlayers::cTaskSendBlockToAllPlayers(std::vector & a_SendQueue) :
+ m_SendQueue(a_SendQueue)
{
}
@@ -3143,26 +3141,27 @@ void cWorld::cTaskSendBlockToAllPlayers::Run(cWorld & a_World)
public cPlayerListCallback
{
public:
- cPlayerCallback(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld & a_World) :
- m_BlockX(a_BlockX),
- m_BlockY(a_BlockY),
- m_BlockZ(a_BlockZ),
+ cPlayerCallback(std::vector & a_SendQueue, cWorld & a_World) :
+ m_SendQueue(a_SendQueue),
m_World(a_World)
{
}
virtual bool Item(cPlayer * a_Player)
{
- m_World.SendBlockTo(m_BlockX, m_BlockY, m_BlockZ, a_Player);
+ for (std::vector::const_iterator itr = m_SendQueue.begin(); itr != m_SendQueue.end(); ++itr)
+ {
+ m_World.SendBlockTo(itr->x, itr->y, itr->z, a_Player);
+ }
return false;
}
private:
- int m_BlockX, m_BlockY, m_BlockZ;
+ std::vector m_SendQueue;
cWorld & m_World;
- } PlayerCallback(m_BlockX, m_BlockY, m_BlockZ, a_World);
+ } PlayerCallback(m_SendQueue, a_World);
a_World.ForEachPlayer(PlayerCallback);
}
diff --git a/src/World.h b/src/World.h
index 5ef63a540..98b241a2b 100644
--- a/src/World.h
+++ b/src/World.h
@@ -121,15 +121,13 @@ public:
public cTask
{
public:
- cTaskSendBlockToAllPlayers(int a_BlockX, int a_BlockY, int a_BlockZ);
+ cTaskSendBlockToAllPlayers(std::vector & a_SendQueue);
protected:
// cTask overrides:
virtual void Run(cWorld & a_World) override;
- int m_BlockX;
- int m_BlockY;
- int m_BlockZ;
+ std::vector m_SendQueue;
};
--
cgit v1.2.3
From d9c667d28f556e489b2779b7510f3b12034c3fad Mon Sep 17 00:00:00 2001
From: worktycho
Date: Thu, 29 May 2014 12:04:37 +0100
Subject: Add comment
---
src/ChunkData.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/ChunkData.h b/src/ChunkData.h
index 09b2cb563..e6aaa99b8 100644
--- a/src/ChunkData.h
+++ b/src/ChunkData.h
@@ -44,6 +44,10 @@ public:
NIBBLETYPE GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const;
cChunkData Copy(void) const;
+
+ // Copys data from this object into the buffer in the a_Dest param
+ // CopyBlocks also povides the optional parameters a_Idx and a_Length which specify an offset and length for
+ // copying part of the BlockTypes array.
void CopyBlocks (BLOCKTYPE * a_Dest, size_t a_Idx = 0, size_t a_Length = cChunkDef::NumBlocks) const;
void CopyMeta (NIBBLETYPE * a_Dest) const;
void CopyBlockLight(NIBBLETYPE * a_Dest) const;
--
cgit v1.2.3
From bacc873a175cb37a1878fccf8fa40acb75fb8189 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Thu, 29 May 2014 12:12:10 +0100
Subject: Revert "Fixed a food saturation issue"
This reverts commit 67308e4337b422ebefb249049e662266072b0ba2.
---
src/Entities/Player.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index 1e1e868e7..0eacb67f9 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -551,7 +551,7 @@ bool cPlayer::Feed(int a_Food, double a_Saturation)
}
m_FoodLevel = std::min(a_Food + m_FoodLevel, (int)MAX_FOOD_LEVEL);
- m_FoodSaturationLevel = m_FoodSaturationLevel + a_Saturation;
+ m_FoodSaturationLevel = std::min(m_FoodSaturationLevel + a_Saturation, (double)m_FoodLevel);
SendHealth();
return true;
--
cgit v1.2.3
From 3549d0d5e6e99342f3422396ac80b66c3e3d54db Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Thu, 29 May 2014 15:59:39 +0100
Subject: More comments!
---
src/Chunk.cpp | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index 6bd68459c..fbd0a5846 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -1587,11 +1587,10 @@ void cChunk::FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockT
}
m_BlockTypes[index] = a_BlockType;
- // The client doesn't need to distinguish between stationary and nonstationary fluids:
- if (
- a_SendToClients &&
- ((OldBlockMeta != a_BlockMeta) || // Different meta always gets sent to the client
- !(
+ if ( // Queue block to be sent only if ...
+ a_SendToClients && // ... we are told to do so AND ...
+ ((OldBlockMeta != a_BlockMeta) || // ... the meta value is different OR ...
+ !( // ... the old and new blocktypes AREN'T liquids (because client doesn't need to distinguish betwixt them); see below for specifics:
((OldBlockType == E_BLOCK_STATIONARY_WATER) && (a_BlockType == E_BLOCK_WATER)) || // Replacing stationary water with water
((OldBlockType == E_BLOCK_WATER) && (a_BlockType == E_BLOCK_STATIONARY_WATER)) || // Replacing water with stationary water
((OldBlockType == E_BLOCK_STATIONARY_LAVA) && (a_BlockType == E_BLOCK_LAVA)) || // Replacing stationary water with water
--
cgit v1.2.3
From aa4477822ab0f1cdba904fd39e065bf8e86f9aec Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Thu, 29 May 2014 16:03:41 +0100
Subject: Suggestions
---
src/Blocks/BlockPiston.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/Blocks/BlockPiston.h b/src/Blocks/BlockPiston.h
index d7c92925b..e6fa48e54 100644
--- a/src/Blocks/BlockPiston.h
+++ b/src/Blocks/BlockPiston.h
@@ -143,7 +143,12 @@ private:
}
}
- return CanBreakPush(a_BlockType) ? false /* CanBreakPush returns true, but we need false to prevent pulling */ : CanPush(a_BlockType, a_BlockMeta);
+ if (CanBreakPush(a_BlockType))
+ {
+ return false; // CanBreakPush returns true, but we need false to prevent pulling
+ }
+
+ return CanPush(a_BlockType, a_BlockMeta);
}
/// Returns how many blocks the piston has to push (where the first free space is); < 0 when unpushable
--
cgit v1.2.3
From f7777e8c7559964f126a64af7673276e356dcedc Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 29 May 2014 18:25:08 +0200
Subject: Added comments, reformatted code.
---
src/BlockArea.cpp | 2 +-
src/Chunk.cpp | 6 +-
src/ChunkData.cpp | 391 ++++++++++++++++++------------------------------
src/ChunkData.h | 65 +++++---
src/ChunkDataCallback.h | 40 +++--
src/LightingThread.cpp | 2 +-
6 files changed, 226 insertions(+), 280 deletions(-)
diff --git a/src/BlockArea.cpp b/src/BlockArea.cpp
index 11bd76e6c..40fdd68c0 100644
--- a/src/BlockArea.cpp
+++ b/src/BlockArea.cpp
@@ -1903,7 +1903,7 @@ void cBlockArea::cChunkReader::ChunkData(const cChunkData & a_BlockBuffer)
if (m_Area.m_BlockMetas != NULL)
{
- a_BlockBuffer.CopyMeta(m_Area.m_BlockMetas);
+ a_BlockBuffer.CopyMetas(m_Area.m_BlockMetas);
}
if (m_Area.m_BlockLight != NULL)
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index e5f8f1e29..23412a4c3 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -282,8 +282,8 @@ void cChunk::SetAllData(
CalculateHeightmap(a_BlockTypes);
}
- m_ChunkData.SetBlocks(a_BlockTypes);
- m_ChunkData.SetMeta(a_BlockMeta);
+ m_ChunkData.SetBlockTypes(a_BlockTypes);
+ m_ChunkData.SetMetas(a_BlockMeta);
m_ChunkData.SetBlockLight(a_BlockLight);
m_ChunkData.SetSkyLight(a_BlockSkyLight);
@@ -339,7 +339,7 @@ void cChunk::SetLight(
void cChunk::GetBlockTypes(BLOCKTYPE * a_BlockTypes)
{
- m_ChunkData.CopyBlocks(a_BlockTypes);
+ m_ChunkData.CopyBlockTypes(a_BlockTypes);
}
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 172858e4e..cc4793ec3 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -1,14 +1,39 @@
+// ChunkData.cpp
+
+// Implements the cChunkData class that represents the block's type, meta, blocklight and skylight storage for a chunk
+
#include "Globals.h"
#include "ChunkData.h"
-cChunkData::cChunkData()
+
+
+
+
+/** Returns true if all a_Array's elements between [0] and [a_NumElements - 1] are equal to a_Value. */
+template inline bool IsAllValue(const T * a_Array, size_t a_NumElements, T a_Value)
+{
+ for (size_t i = 0; i < a_NumElements; i++)
+ {
+ if (a_Array[i] != a_Value)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+
+
+
+cChunkData::cChunkData(void)
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
: m_IsOwner(true)
#endif
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
m_Sections[i] = NULL;
}
@@ -27,7 +52,7 @@ cChunkData::~cChunkData()
return;
}
#endif
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
Free(m_Sections[i]);
}
@@ -43,7 +68,7 @@ cChunkData::~cChunkData()
m_IsOwner(true)
{
// Move contents and ownership from a_Other to this, pointer-wise:
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
m_Sections[i] = a_Other.m_Sections[i];
}
@@ -65,7 +90,7 @@ cChunkData::~cChunkData()
// Free any currently held contents:
if (m_IsOwner)
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
Free(m_Sections[i]);
}
@@ -73,7 +98,7 @@ cChunkData::~cChunkData()
// Move contents and ownership from a_Other to this, pointer-wise:
m_IsOwner = true;
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
m_Sections[i] = a_Other.m_Sections[i];
}
@@ -86,7 +111,7 @@ cChunkData::~cChunkData()
// unique_ptr style interface for memory management
cChunkData::cChunkData(cChunkData && other)
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
m_Sections[i] = other.m_Sections[i];
other.m_Sections[i] = NULL;
@@ -101,7 +126,7 @@ cChunkData::~cChunkData()
{
if (&other != this)
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
Free(m_Sections[i]);
m_Sections[i] = other.m_Sections[i];
@@ -121,10 +146,10 @@ BLOCKTYPE cChunkData::GetBlock(int a_X, int a_Y, int a_Z) const
ASSERT((a_X >= 0) && (a_X < cChunkDef::Width));
ASSERT((a_Y >= 0) && (a_Y < cChunkDef::Height));
ASSERT((a_Z >= 0) && (a_Z < cChunkDef::Width));
- int Section = a_Y / CHUNK_SECTION_HEIGHT;
+ int Section = a_Y / SectionHeight;
if (m_Sections[Section] != NULL)
{
- int Index = cChunkDef::MakeIndexNoCheck(a_X, a_Y - (Section * CHUNK_SECTION_HEIGHT), a_Z);
+ int Index = cChunkDef::MakeIndexNoCheck(a_X, a_Y - (Section * SectionHeight), a_Z);
return m_Sections[Section]->m_BlockTypes[Index];
}
else
@@ -149,7 +174,7 @@ void cChunkData::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_Block)
return;
}
- int Section = a_RelY / CHUNK_SECTION_HEIGHT;
+ int Section = a_RelY / SectionHeight;
if (m_Sections[Section] == NULL)
{
if (a_Block == 0x00)
@@ -164,7 +189,7 @@ void cChunkData::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_Block)
}
ZeroSection(m_Sections[Section]);
}
- int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * CHUNK_SECTION_HEIGHT), a_RelZ);
+ int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
m_Sections[Section]->m_BlockTypes[Index] = a_Block;
}
@@ -179,10 +204,10 @@ NIBBLETYPE cChunkData::GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
(a_RelY < cChunkDef::Height) && (a_RelY > -1) &&
(a_RelZ < cChunkDef::Width) && (a_RelZ > -1))
{
- int Section = a_RelY / CHUNK_SECTION_HEIGHT;
+ int Section = a_RelY / SectionHeight;
if (m_Sections[Section] != NULL)
{
- int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * CHUNK_SECTION_HEIGHT), a_RelZ);
+ int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
return (m_Sections[Section]->m_BlockMeta[Index / 2] >> ((Index & 1) * 4)) & 0x0f;
}
else
@@ -210,7 +235,7 @@ bool cChunkData::SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Nibble
return false;
}
- int Section = a_RelY / CHUNK_SECTION_HEIGHT;
+ int Section = a_RelY / SectionHeight;
if (m_Sections[Section] == NULL)
{
if ((a_Nibble & 0xf) == 0x00)
@@ -225,7 +250,7 @@ bool cChunkData::SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Nibble
}
ZeroSection(m_Sections[Section]);
}
- int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * CHUNK_SECTION_HEIGHT), a_RelZ);
+ int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
NIBBLETYPE oldval = m_Sections[Section]->m_BlockMeta[Index / 2] >> ((Index & 1) * 4) & 0xf;
m_Sections[Section]->m_BlockMeta[Index / 2] = static_cast(
(m_Sections[Section]->m_BlockMeta[Index / 2] & (0xf0 >> ((Index & 1) * 4))) | // The untouched nibble
@@ -246,10 +271,10 @@ NIBBLETYPE cChunkData::GetBlockLight(int a_RelX, int a_RelY, int a_RelZ) const
(a_RelZ < cChunkDef::Width) && (a_RelZ > -1)
)
{
- int Section = a_RelY / CHUNK_SECTION_HEIGHT;
+ int Section = a_RelY / SectionHeight;
if (m_Sections[Section] != NULL)
{
- int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * CHUNK_SECTION_HEIGHT), a_RelZ);
+ int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
return (m_Sections[Section]->m_BlockLight[Index / 2] >> ((Index & 1) * 4)) & 0x0f;
}
else
@@ -269,10 +294,10 @@ NIBBLETYPE cChunkData::GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const
{
if ((a_RelX < cChunkDef::Width) && (a_RelX > -1) && (a_RelY < cChunkDef::Height) && (a_RelY > -1) && (a_RelZ < cChunkDef::Width) && (a_RelZ > -1))
{
- int Section = a_RelY / CHUNK_SECTION_HEIGHT;
+ int Section = a_RelY / SectionHeight;
if (m_Sections[Section] != NULL)
{
- int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * CHUNK_SECTION_HEIGHT), a_RelZ);
+ int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
return (m_Sections[Section]->m_BlockLight[Index / 2] >> ((Index & 1) * 4)) & 0x0f;
}
else
@@ -291,7 +316,7 @@ NIBBLETYPE cChunkData::GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const
cChunkData cChunkData::Copy(void) const
{
cChunkData copy;
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
if (m_Sections[i] != NULL)
{
@@ -306,11 +331,12 @@ cChunkData cChunkData::Copy(void) const
-void cChunkData::CopyBlocks(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
+void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ // TODO: This code seems wrong. It always copies into a_Dest[i * SegmentLength], even when a_Idx > 0
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16;
+ const size_t SegmentLength = SectionHeight * 16 * 16;
if (a_Idx > 0)
{
a_Idx = std::max(a_Idx - a_Length, (size_t) 0);
@@ -321,19 +347,11 @@ void cChunkData::CopyBlocks(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length)
a_Length -= ToCopy;
if (m_Sections[i] != NULL)
{
- memcpy(
- &a_Dest[i * SegmentLength],
- &m_Sections[i]->m_BlockTypes,
- sizeof(BLOCKTYPE) * ToCopy
- );
+ memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockTypes, sizeof(BLOCKTYPE) * ToCopy);
}
else
{
- memset(
- &a_Dest[i * SegmentLength],
- 0,
- sizeof(BLOCKTYPE) * ToCopy
- );
+ memset(&a_Dest[i * SegmentLength], 0, sizeof(BLOCKTYPE) * ToCopy);
}
}
}
@@ -343,26 +361,18 @@ void cChunkData::CopyBlocks(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length)
-void cChunkData::CopyMeta(NIBBLETYPE * a_Dest) const
+void cChunkData::CopyMetas(NIBBLETYPE * a_Dest) const
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = SectionHeight * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
- memcpy(
- &a_Dest[i * SegmentLength],
- &m_Sections[i]->m_BlockMeta,
- sizeof(NIBBLETYPE) * SegmentLength
- );
+ memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockMeta, sizeof(NIBBLETYPE) * SegmentLength);
}
else
{
- memset(
- &a_Dest[i * SegmentLength],
- 0,
- sizeof(BLOCKTYPE) * SegmentLength
- );
+ memset(&a_Dest[i * SegmentLength], 0, sizeof(BLOCKTYPE) * SegmentLength);
}
}
}
@@ -373,24 +383,16 @@ void cChunkData::CopyMeta(NIBBLETYPE * a_Dest) const
void cChunkData::CopyBlockLight(NIBBLETYPE * a_Dest) const
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = SectionHeight * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
- memcpy(
- &a_Dest[i * SegmentLength],
- &m_Sections[i]->m_BlockLight,
- sizeof(NIBBLETYPE) * SegmentLength
- );
+ memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockLight, sizeof(NIBBLETYPE) * SegmentLength);
}
else
{
- memset(
- &a_Dest[i * SegmentLength],
- 0,
- sizeof(BLOCKTYPE) * SegmentLength
- );
+ memset(&a_Dest[i * SegmentLength], 0, sizeof(BLOCKTYPE) * SegmentLength);
}
}
}
@@ -401,24 +403,16 @@ void cChunkData::CopyBlockLight(NIBBLETYPE * a_Dest) const
void cChunkData::CopySkyLight(NIBBLETYPE * a_Dest) const
{
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ const size_t SegmentLength = SectionHeight * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
- memcpy(
- &a_Dest[i * SegmentLength],
- &m_Sections[i]->m_BlockSkyLight,
- sizeof(NIBBLETYPE) * SegmentLength
- );
+ memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockSkyLight, sizeof(NIBBLETYPE) * SegmentLength);
}
else
{
- memset(
- &a_Dest[i * SegmentLength],
- 0xFF,
- sizeof(BLOCKTYPE) * SegmentLength
- );
+ memset(&a_Dest[i * SegmentLength], 0xff, sizeof(BLOCKTYPE) * SegmentLength);
}
}
}
@@ -427,165 +421,102 @@ void cChunkData::CopySkyLight(NIBBLETYPE * a_Dest) const
-void cChunkData::SetBlocks(const BLOCKTYPE * a_Src)
+void cChunkData::SetBlockTypes(const BLOCKTYPE * a_Src)
{
ASSERT(a_Src != NULL);
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ static const size_t SegmentLength = SectionHeight * 16 * 16;
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16;
+ // If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(
- &m_Sections[i]->m_BlockTypes,
- &a_Src[i * SegmentLength],
- sizeof(BLOCKTYPE) * SegmentLength
- );
+ memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ continue;
}
- else
+
+ // The section doesn't exist, find out if it is needed:
+ if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (const BLOCKTYPE)0))
{
- // j counts how many of leading zeros the buffer has
- // if j == SegmentLength then the buffer is all zeros so there is no point
- // creating the buffer.
- size_t j = 0;
- // do nothing whilst 0
- for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j] == 0); j++);
- if (j != SegmentLength)
- {
- m_Sections[i] = Allocate();
- memcpy(
- &m_Sections[i]->m_BlockTypes,
- &a_Src[i * SegmentLength],
- sizeof(BLOCKTYPE) * SegmentLength
- );
- memset(
- m_Sections[i]->m_BlockMeta,
- 0x00,
- sizeof(m_Sections[i]->m_BlockMeta)
- );
- memset(
- m_Sections[i]->m_BlockLight,
- 0x00,
- sizeof(m_Sections[i]->m_BlockLight)
- );
- memset(
- m_Sections[i]->m_BlockSkyLight,
- 0xFF,
- sizeof(m_Sections[i]->m_BlockSkyLight)
- );
- }
+ // No need for the section, the data is all-air
+ continue;
}
- }
+
+ // Allocate the section and copy the data into it:
+ m_Sections[i] = Allocate();
+ memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memset(m_Sections[i]->m_BlockMeta, 0x00, sizeof(m_Sections[i]->m_BlockMeta));
+ memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
+ memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
+ } // for i - m_Sections[]
}
-void cChunkData::SetMeta(const NIBBLETYPE * a_Src)
+void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
{
ASSERT(a_Src != NULL);
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ // If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(
- &m_Sections[i]->m_BlockMeta,
- &a_Src[i * SegmentLength],
- sizeof(NIBBLETYPE) * SegmentLength
- );
+ memcpy(&m_Sections[i]->m_BlockMeta, &a_Src[i * SegmentLength], sizeof(NIBBLETYPE) * SegmentLength);
+ continue;
}
- else
+
+ // The section doesn't exist, find out if it is needed:
+ if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (NIBBLETYPE)0))
{
- // j counts how many of leading zeros the buffer has
- // if j == SegmentLength then the buffer is all zeros so there is no point
- // creating the buffer.
- size_t j = 0;
- // do nothing whilst 0
- for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j] == 0); j++);
- if (j != SegmentLength)
- {
- m_Sections[i] = Allocate();
- memcpy(
- &m_Sections[i]->m_BlockMeta,
- &a_Src[i * SegmentLength],
- sizeof(BLOCKTYPE) * SegmentLength
- );
- memset(
- m_Sections[i]->m_BlockTypes,
- 0x00,
- sizeof(m_Sections[i]->m_BlockTypes)
- );
- memset(
- m_Sections[i]->m_BlockLight,
- 0x00,
- sizeof(m_Sections[i]->m_BlockLight)
- );
- memset(
- m_Sections[i]->m_BlockSkyLight,
- 0xFF,
- sizeof(m_Sections[i]->m_BlockSkyLight)
- );
- }
+ // No need for the section, the data is all zeroes
+ continue;
}
- }
+
+ // Allocate the section and copy the data into it:
+ m_Sections[i] = Allocate();
+ memcpy(&m_Sections[i]->m_BlockMeta, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
+ memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
+ memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
+ } // for i - m_Sections[]
}
+
void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
{
if (a_Src == NULL)
{
return;
}
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ // If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(
- &m_Sections[i]->m_BlockLight,
- &a_Src[i * SegmentLength],
- sizeof(NIBBLETYPE) * SegmentLength
- );
+ memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SegmentLength], sizeof(NIBBLETYPE) * SegmentLength);
+ continue;
}
- else
+
+ // The section doesn't exist, find out if it is needed:
+ if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (NIBBLETYPE)0))
{
- // j counts how many of leading zeros the buffer has
- // if j == SegmentLength then the buffer is all zeros so there is no point
- // creating the buffer.
- size_t j = 0;
- // do nothing whilst 0
- for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j] == 0); j++);
- if (j != SegmentLength)
- {
- m_Sections[i] = Allocate();
- memcpy(
- &m_Sections[i]->m_BlockLight,
- &a_Src[i * SegmentLength],
- sizeof(BLOCKTYPE) * SegmentLength
- );
- memset(
- m_Sections[i]->m_BlockTypes,
- 0x00,
- sizeof(m_Sections[i]->m_BlockTypes)
- );
- memset(
- m_Sections[i]->m_BlockMeta,
- 0x00,
- sizeof(m_Sections[i]->m_BlockMeta)
- );
- memset(
- m_Sections[i]->m_BlockSkyLight,
- 0xFF,
- sizeof(m_Sections[i]->m_BlockSkyLight)
- );
- }
+ // No need for the section, the data is all zeroes
+ continue;
}
- }
+
+ // Allocate the section and copy the data into it:
+ m_Sections[i] = Allocate();
+ memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
+ memset(m_Sections[i]->m_BlockMeta, 0x00, sizeof(m_Sections[i]->m_BlockMeta));
+ memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
+ } // for i - m_Sections[]
}
@@ -598,51 +529,29 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
return;
}
- for (size_t i = 0; i < CHUNK_SECTION_COUNT; i++)
+ for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = CHUNK_SECTION_HEIGHT * 16 * 16 / 2;
+ // If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(
- &m_Sections[i]->m_BlockSkyLight,
- &a_Src[i * SegmentLength],
- sizeof(NIBBLETYPE) * SegmentLength
- );
+ memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SegmentLength], sizeof(NIBBLETYPE) * SegmentLength);
+ continue;
}
- else
+
+ // The section doesn't exist, find out if it is needed:
+ if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (NIBBLETYPE)0xff))
{
- // j counts how many of leading zeros the buffer has
- // if j == SegmentLength then the buffer is all zeros so there is no point
- // creating the buffer.
- size_t j = 0;
- // do nothing whilst 0
- for (; (j < SegmentLength) && (a_Src[i * SegmentLength + j]) == 0xFF; j++);
- if (j != SegmentLength)
- {
- m_Sections[i] = Allocate();
- memcpy(
- &m_Sections[i]->m_BlockSkyLight,
- &a_Src[i * SegmentLength],
- sizeof(BLOCKTYPE) * SegmentLength
- );
- memset(
- m_Sections[i]->m_BlockTypes,
- 0x00,
- sizeof(m_Sections[i]->m_BlockTypes)
- );
- memset(
- m_Sections[i]->m_BlockMeta,
- 0x00,
- sizeof(m_Sections[i]->m_BlockMeta)
- );
- memset(
- m_Sections[i]->m_BlockLight,
- 0x00,
- sizeof(m_Sections[i]->m_BlockLight)
- );
- }
+ // No need for the section, the data is all zeroes
+ continue;
}
- }
+
+ // Allocate the section and copy the data into it:
+ m_Sections[i] = Allocate();
+ memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
+ memset(m_Sections[i]->m_BlockMeta, 0x00, sizeof(m_Sections[i]->m_BlockMeta));
+ memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
+ } // for i - m_Sections[]
}
@@ -671,26 +580,10 @@ void cChunkData::Free(cChunkData::sChunkSection * a_Section)
void cChunkData::ZeroSection(cChunkData::sChunkSection * a_Section) const
{
- memset(
- a_Section->m_BlockTypes,
- 0x00,
- sizeof(a_Section->m_BlockTypes)
- );
- memset(
- a_Section->m_BlockMeta,
- 0x00,
- sizeof(a_Section->m_BlockMeta)
- );
- memset(
- a_Section->m_BlockLight,
- 0x00,
- sizeof(a_Section->m_BlockLight)
- );
- memset(
- a_Section->m_BlockSkyLight,
- 0xFF,
- sizeof(a_Section->m_BlockSkyLight)
- );
+ memset(a_Section->m_BlockTypes, 0x00, sizeof(a_Section->m_BlockTypes));
+ memset(a_Section->m_BlockMeta, 0x00, sizeof(a_Section->m_BlockMeta));
+ memset(a_Section->m_BlockLight, 0x00, sizeof(a_Section->m_BlockLight));
+ memset(a_Section->m_BlockSkyLight, 0xff, sizeof(a_Section->m_BlockSkyLight));
}
diff --git a/src/ChunkData.h b/src/ChunkData.h
index e6aaa99b8..341c15301 100644
--- a/src/ChunkData.h
+++ b/src/ChunkData.h
@@ -1,4 +1,12 @@
+// ChunkData.h
+
+// Declares the cChunkData class that represents the block's type, meta, blocklight and skylight storage for a chunk
+
+
+
+
+
#pragma once
@@ -20,7 +28,7 @@ class cChunkData
{
public:
- cChunkData();
+ cChunkData(void);
~cChunkData();
#if __cplusplus < 201103L
@@ -43,25 +51,48 @@ public:
NIBBLETYPE GetSkyLight(int a_RelX, int a_RelY, int a_RelZ) const;
+ /** Creates a (deep) copy of self. */
cChunkData Copy(void) const;
- // Copys data from this object into the buffer in the a_Dest param
- // CopyBlocks also povides the optional parameters a_Idx and a_Length which specify an offset and length for
- // copying part of the BlockTypes array.
- void CopyBlocks (BLOCKTYPE * a_Dest, size_t a_Idx = 0, size_t a_Length = cChunkDef::NumBlocks) const;
- void CopyMeta (NIBBLETYPE * a_Dest) 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;
- void SetBlocks (const BLOCKTYPE * a_src);
- void SetMeta (const NIBBLETYPE * a_src);
- void SetBlockLight(const NIBBLETYPE * a_src);
- void SetSkyLight (const NIBBLETYPE * a_src);
+ /** Copies the blocktype data from the specified flat array into the internal representation.
+ 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. */
+ void SetBlockLight(const NIBBLETYPE * a_Src);
+
+ /** Copies the skylight 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. */
+ void SetSkyLight(const NIBBLETYPE * a_Src);
private:
- static const size_t CHUNK_SECTION_HEIGHT = 16;
- static const size_t CHUNK_SECTION_COUNT = (256 / CHUNK_SECTION_HEIGHT);
+ static const size_t SectionHeight = 16;
+ static const size_t NumSections = (cChunkDef::Height / SectionHeight);
+ static const size_t SegmentLength = cChunkDef::Width * cChunkDef::Height * SectionHeight;
+ static const size_t SectionBlockCount = SectionHeight * cChunkDef::Width * cChunkDef::Width;
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
@@ -69,13 +100,13 @@ private:
#endif
struct sChunkSection {
- BLOCKTYPE m_BlockTypes [CHUNK_SECTION_HEIGHT * 16 * 16];
- NIBBLETYPE m_BlockMeta [CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
- NIBBLETYPE m_BlockLight [CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
- NIBBLETYPE m_BlockSkyLight[CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
+ BLOCKTYPE m_BlockTypes [SectionBlockCount];
+ NIBBLETYPE m_BlockMeta [SectionBlockCount / 2];
+ NIBBLETYPE m_BlockLight [SectionBlockCount / 2];
+ NIBBLETYPE m_BlockSkyLight[SectionBlockCount / 2];
};
- sChunkSection * m_Sections[CHUNK_SECTION_COUNT];
+ sChunkSection * m_Sections[NumSections];
/** Allocates a new section. Entry-point to custom allocators. */
static sChunkSection * Allocate(void);
diff --git a/src/ChunkDataCallback.h b/src/ChunkDataCallback.h
index e916d6486..0c8b1098f 100644
--- a/src/ChunkDataCallback.h
+++ b/src/ChunkDataCallback.h
@@ -1,11 +1,20 @@
+// ChunkDataCallback.h
+
+// Declares the cChunkDataCallback interface and several trivial descendants, for reading chunk data
+
-#pragma once
+
+#pragma once
+
#include "ChunkData.h"
+
+
+
/** Interface class used for getting data out of a chunk using the GetAllData() function.
Implementation must use the pointers immediately and NOT store any of them for later use
The virtual methods are called in the same order as they're declared here.
@@ -41,6 +50,10 @@ public:
virtual void BlockEntity(cBlockEntity * a_Entity) {UNUSED(a_Entity); };
} ;
+
+
+
+
/** A simple implementation of the cChunkDataCallback interface that collects all block data into a buffer
*/
class cChunkDataCollector :
@@ -59,6 +72,9 @@ protected:
};
+
+
+
/** A simple implementation of the cChunkDataCallback interface that collects all block data into a single buffer
*/
class cChunkDataArrayCollector :
@@ -73,15 +89,18 @@ protected:
virtual void ChunkData(const cChunkData & a_ChunkBuffer) override
{
- a_ChunkBuffer.CopyBlocks(m_BlockData);
- a_ChunkBuffer.CopyMeta(m_BlockData + cChunkDef::NumBlocks);
+ a_ChunkBuffer.CopyBlockTypes(m_BlockData);
+ a_ChunkBuffer.CopyMetas(m_BlockData + cChunkDef::NumBlocks);
a_ChunkBuffer.CopyBlockLight(m_BlockData + 3 * cChunkDef::NumBlocks / 2);
a_ChunkBuffer.CopySkyLight(m_BlockData + 2 * cChunkDef::NumBlocks);
}
};
-/** A simple implementation of the cChunkDataCallback interface that collects all block data into a separate buffers
-*/
+
+
+
+
+/** A simple implementation of the cChunkDataCallback interface that collects all block data into separate buffers */
class cChunkDataSeparateCollector :
public cChunkDataCallback
{
@@ -96,10 +115,13 @@ protected:
virtual void ChunkData(const cChunkData & a_ChunkBuffer) override
{
- a_ChunkBuffer.CopyBlocks(m_BlockTypes);
- a_ChunkBuffer.CopyMeta(m_BlockMetas);
- a_ChunkBuffer.CopyBlockLight(m_BlockLight);
- a_ChunkBuffer.CopySkyLight(m_BlockSkyLight);
+ a_ChunkBuffer.CopyBlockTypes(m_BlockTypes);
+ a_ChunkBuffer.CopyMetas(m_BlockMetas);
+ a_ChunkBuffer.CopyBlockLight(m_BlockLight);
+ a_ChunkBuffer.CopySkyLight(m_BlockSkyLight);
}
} ;
+
+
+
diff --git a/src/LightingThread.cpp b/src/LightingThread.cpp
index 879252c34..dc19bf500 100644
--- a/src/LightingThread.cpp
+++ b/src/LightingThread.cpp
@@ -27,7 +27,7 @@ class cReader :
{
for (int z = 0; z < cChunkDef::Width; z++)
{
- a_ChunkBuffer.CopyBlocks(OutputRows + OutputIdx * 16, InputIdx * 16, 16);
+ a_ChunkBuffer.CopyBlockTypes(OutputRows + OutputIdx * 16, InputIdx * 16, 16);
InputIdx++;
OutputIdx += 3;
} // for z
--
cgit v1.2.3
From 80fe19c0e2e4433d8332dbe5a9c2fcba0be06f68 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Thu, 29 May 2014 17:41:07 +0100
Subject: Fixed overflow bug
---
src/ChunkData.cpp | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index cc4793ec3..13be65fd7 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -333,25 +333,28 @@ cChunkData cChunkData::Copy(void) const
void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
{
- // TODO: This code seems wrong. It always copies into a_Dest[i * SegmentLength], even when a_Idx > 0
+ size_t toskip = a_Idx;
+
for (size_t i = 0; i < NumSections; i++)
{
const size_t SegmentLength = SectionHeight * 16 * 16;
- if (a_Idx > 0)
+ size_t startpos = 0;
+ if (toskip > 0)
{
- a_Idx = std::max(a_Idx - a_Length, (size_t) 0);
+ toskip = std::max(toskip - SegmentLength, (size_t) 0);
+ startpos = SegmentLength - toskip;
}
- if (a_Idx == 0)
+ if (toskip == 0)
{
size_t ToCopy = std::min(SegmentLength, a_Length);
a_Length -= ToCopy;
if (m_Sections[i] != NULL)
{
- memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockTypes, sizeof(BLOCKTYPE) * ToCopy);
+ memcpy(&a_Dest[(i * SegmentLength) - a_Idx], (&m_Sections[i]->m_BlockTypes) + startpos, sizeof(BLOCKTYPE) * (ToCopy - startpos));
}
else
{
- memset(&a_Dest[i * SegmentLength], 0, sizeof(BLOCKTYPE) * ToCopy);
+ memset(&a_Dest[(i * SegmentLength) - a_Idx], 0, sizeof(BLOCKTYPE) * (ToCopy - startpos));
}
}
}
--
cgit v1.2.3
From b4ba2209342d536e83b3461db00e9f9fd811120e Mon Sep 17 00:00:00 2001
From: Howaner
Date: Thu, 29 May 2014 19:21:56 +0200
Subject: Add SetOpen() and IsOpen() to BlockDoor.h and fix door redstone bug.
---
src/Blocks/BlockDoor.h | 89 +++++++++++++++++++++++---
src/Simulator/IncrementalRedstoneSimulator.cpp | 14 ++--
2 files changed, 90 insertions(+), 13 deletions(-)
diff --git a/src/Blocks/BlockDoor.h b/src/Blocks/BlockDoor.h
index 797fe484c..b5bfe4082 100644
--- a/src/Blocks/BlockDoor.h
+++ b/src/Blocks/BlockDoor.h
@@ -20,12 +20,12 @@ public:
virtual void OnUse(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) override;
virtual void OnCancelRightClick(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace) override;
virtual const char * GetStepSound(void) override;
-
+
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override;
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override;
virtual NIBBLETYPE MetaMirrorXY(NIBBLETYPE a_Meta) override;
virtual NIBBLETYPE MetaMirrorYZ(NIBBLETYPE a_Meta) override;
-
+
virtual bool GetPlacementBlockTypeMeta(
cChunkInterface & a_ChunkInterface, cPlayer * a_Player,
int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace,
@@ -52,7 +52,7 @@ public:
return true;
}
-
+
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
{
a_Pickups.push_back(cItem((m_BlockType == E_BLOCK_WOODEN_DOOR) ? E_ITEM_WOODEN_DOOR : E_ITEM_IRON_DOOR, 1, 0));
@@ -77,8 +77,8 @@ public:
{
return ((a_RelY > 0) && (a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ) != E_BLOCK_AIR));
}
-
-
+
+
bool CanReplaceBlock(BLOCKTYPE a_BlockType)
{
switch (a_BlockType)
@@ -99,7 +99,7 @@ public:
}
- /// Converts the player's yaw to placed door's blockmeta
+ /** Converts the player's yaw to placed door's blockmeta */
inline static NIBBLETYPE PlayerYawToMetaData(double a_Yaw)
{
ASSERT((a_Yaw >= -180) && (a_Yaw < 180));
@@ -128,21 +128,92 @@ public:
}
- /// Returns true if the specified blocktype is any kind of door
+ /** Returns true if the specified blocktype is any kind of door */
inline static bool IsDoor(BLOCKTYPE a_Block)
{
return (a_Block == E_BLOCK_WOODEN_DOOR) || (a_Block == E_BLOCK_IRON_DOOR);
}
- /// Returns the metadata for the opposite door state (open vs closed)
+ /** Returns the metadata for the opposite door state (open vs closed) */
static NIBBLETYPE ChangeStateMetaData(NIBBLETYPE a_MetaData)
{
return a_MetaData ^ 4;
}
- /// Changes the door at the specified coords from open to close or vice versa
+ static bool IsOpen(cChunkInterface & a_ChunkInterface, int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ)
+ {
+ BLOCKTYPE Block;
+ NIBBLETYPE Meta;
+ a_ChunkInterface.GetBlockTypeMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ, Block, Meta);
+
+ if (!IsDoor(Block))
+ {
+ return false;
+ }
+
+ return ((Meta & 0x4) == 4);
+ }
+
+
+ static void SetOpen(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open)
+ {
+ BLOCKTYPE Block;
+ NIBBLETYPE Meta;
+ a_ChunkInterface.GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, Block, Meta);
+
+ if (!IsDoor(Block) || ((Meta & 0x4) == a_Open))
+ {
+ return;
+ }
+
+ // Change the door
+ if (a_Open)
+ {
+ a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, Meta | 0x4);
+ }
+ else
+ {
+ a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, Meta & 0xFFFFFFFB);
+ }
+
+ int OtherPartY = a_BlockY;
+ if (Meta & 0x8)
+ {
+ // Current block is top of the door
+ a_ChunkInterface.GetBlockTypeMeta(a_BlockX, a_BlockY - 1, a_BlockZ, Block, Meta);
+ if (IsDoor(Block) && !(Meta & 0x8))
+ {
+ OtherPartY--;
+ }
+ }
+ else
+ {
+ // Current block is bottom of the door
+ a_ChunkInterface.GetBlockTypeMeta(a_BlockX, a_BlockY + 1, a_BlockZ, Block, Meta);
+ if (IsDoor(Block) && (Meta & 0x8))
+ {
+ OtherPartY++;
+ }
+ }
+
+ // Change the other door part
+ if (a_BlockY != OtherPartY)
+ {
+ if (a_Open)
+ {
+ a_ChunkInterface.SetBlockMeta(a_BlockX, OtherPartY, a_BlockZ, Meta | 0x4);
+ }
+ else
+ {
+ a_ChunkInterface.SetBlockMeta(a_BlockX, OtherPartY, a_BlockZ, Meta & 0xFFFFFFFB);
+ }
+ }
+ }
+
+
+ /** Changes the door at the specified coords from open to close or vice versa */
static void ChangeDoor(cChunkInterface & a_ChunkInterface, int a_X, int a_Y, int a_Z)
{
NIBBLETYPE OldMetaData = a_ChunkInterface.GetBlockMeta(a_X, a_Y, a_Z);
diff --git a/src/Simulator/IncrementalRedstoneSimulator.cpp b/src/Simulator/IncrementalRedstoneSimulator.cpp
index 074063add..d49142e4f 100644
--- a/src/Simulator/IncrementalRedstoneSimulator.cpp
+++ b/src/Simulator/IncrementalRedstoneSimulator.cpp
@@ -906,8 +906,11 @@ void cIncrementalRedstoneSimulator::HandleDoor(int a_RelBlockX, int a_RelBlockY,
if (!AreCoordsSimulated(a_RelBlockX, a_RelBlockY, a_RelBlockZ, true))
{
cChunkInterface ChunkInterface(m_World.GetChunkMap());
- cBlockDoorHandler::ChangeDoor(ChunkInterface, a_RelBlockX, a_RelBlockY, a_RelBlockZ);
- m_Chunk->BroadcastSoundParticleEffect(1003, BlockX, a_RelBlockY, BlockZ, 0);
+ if (!cBlockDoorHandler::IsOpen(ChunkInterface, BlockX, a_RelBlockY, BlockZ))
+ {
+ cBlockDoorHandler::SetOpen(ChunkInterface, BlockX, a_RelBlockY, BlockZ, true);
+ m_Chunk->BroadcastSoundParticleEffect(1003, BlockX, a_RelBlockY, BlockZ, 0);
+ }
SetPlayerToggleableBlockAsSimulated(a_RelBlockX, a_RelBlockY, a_RelBlockZ, true);
}
}
@@ -916,8 +919,11 @@ void cIncrementalRedstoneSimulator::HandleDoor(int a_RelBlockX, int a_RelBlockY,
if (!AreCoordsSimulated(a_RelBlockX, a_RelBlockY, a_RelBlockZ, false))
{
cChunkInterface ChunkInterface(m_World.GetChunkMap());
- cBlockDoorHandler::ChangeDoor(ChunkInterface, a_RelBlockX, a_RelBlockY, a_RelBlockZ);
- m_Chunk->BroadcastSoundParticleEffect(1003, BlockX, a_RelBlockY, BlockZ, 0);
+ if (cBlockDoorHandler::IsOpen(ChunkInterface, BlockX, a_RelBlockY, BlockZ))
+ {
+ cBlockDoorHandler::SetOpen(ChunkInterface, BlockX, a_RelBlockY, BlockZ, false);
+ m_Chunk->BroadcastSoundParticleEffect(1003, BlockX, a_RelBlockY, BlockZ, 0);
+ }
SetPlayerToggleableBlockAsSimulated(a_RelBlockX, a_RelBlockY, a_RelBlockZ, false);
}
}
--
cgit v1.2.3
From c5763f3af700fe2df0be0ceb2fe9a580384c839e Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 29 May 2014 19:42:39 +0200
Subject: Fixed test compilation.
---
tests/ChunkData/ArraytoCoord.cpp | 12 ++++++------
tests/ChunkData/Copies.cpp | 20 ++++++++++----------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/tests/ChunkData/ArraytoCoord.cpp b/tests/ChunkData/ArraytoCoord.cpp
index 37533de77..4942ababb 100644
--- a/tests/ChunkData/ArraytoCoord.cpp
+++ b/tests/ChunkData/ArraytoCoord.cpp
@@ -13,13 +13,13 @@ int main(int argc, char** argv)
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
SrcBlockBuffer[7 + (4 * 16) + (5 * 16 * 16)] = 0xCD;
- buffer.SetBlocks(SrcBlockBuffer);
+ buffer.SetBlockTypes(SrcBlockBuffer);
testassert(buffer.GetBlock(7,5,4) == 0xCD);
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xE;
- buffer.SetMeta(SrcNibbleBuffer);
+ buffer.SetMetas(SrcNibbleBuffer);
testassert(buffer.GetMeta(6, 2, 1) == 0xE);
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
@@ -40,13 +40,13 @@ int main(int argc, char** argv)
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
SrcBlockBuffer[7 + (4 * 16) + (24 * 16 * 16)] = 0xCD;
- buffer.SetBlocks(SrcBlockBuffer);
+ buffer.SetBlockTypes(SrcBlockBuffer);
testassert(buffer.GetBlock(7, 24, 4) == 0xCD);
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
SrcNibbleBuffer[(6 + (1 * 16) + (24 * 16 * 16)) / 2] = 0xE;
- buffer.SetMeta(SrcNibbleBuffer);
+ buffer.SetMetas(SrcNibbleBuffer);
testassert(buffer.GetMeta(6, 24, 1) == 0xE);
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
@@ -66,12 +66,12 @@ int main(int argc, char** argv)
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
- buffer.SetBlocks(SrcBlockBuffer);
+ buffer.SetBlockTypes(SrcBlockBuffer);
testassert(buffer.GetBlock(7, 24, 4) == 0x00);
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256/2];
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
- buffer.SetMeta(SrcNibbleBuffer);
+ buffer.SetMetas(SrcNibbleBuffer);
testassert(buffer.GetMeta(6, 24, 1) == 0x0);
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
diff --git a/tests/ChunkData/Copies.cpp b/tests/ChunkData/Copies.cpp
index 78a458f5b..ef0329451 100644
--- a/tests/ChunkData/Copies.cpp
+++ b/tests/ChunkData/Copies.cpp
@@ -25,14 +25,14 @@ int main(int argc, char** argv)
SrcBlockBuffer[i+3] = 0xEF;
}
- buffer.SetBlocks(SrcBlockBuffer);
+ buffer.SetBlockTypes(SrcBlockBuffer);
BLOCKTYPE DstBlockBuffer[16 * 16 * 256];
- buffer.CopyBlocks(DstBlockBuffer);
+ buffer.CopyBlockTypes(DstBlockBuffer);
testassert(memcmp(SrcBlockBuffer, DstBlockBuffer, (16 * 16 * 256) - 1) == 0);
memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
- buffer.SetBlocks(SrcBlockBuffer);
- buffer.CopyBlocks(DstBlockBuffer);
+ buffer.SetBlockTypes(SrcBlockBuffer);
+ buffer.CopyBlockTypes(DstBlockBuffer);
testassert(memcmp(SrcBlockBuffer, DstBlockBuffer, (16 * 16 * 256) - 1) == 0);
}
@@ -48,14 +48,14 @@ int main(int argc, char** argv)
SrcNibbleBuffer[i+3] = 0xBE;
}
- buffer.SetMeta(SrcNibbleBuffer);
+ buffer.SetMetas(SrcNibbleBuffer);
NIBBLETYPE DstNibbleBuffer[16 * 16 * 256/ 2];
- buffer.CopyMeta(DstNibbleBuffer);
+ buffer.CopyMetas(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
- buffer.SetMeta(SrcNibbleBuffer);
- buffer.CopyMeta(DstNibbleBuffer);
+ buffer.SetMetas(SrcNibbleBuffer);
+ buffer.CopyMetas(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
@@ -114,13 +114,13 @@ int main(int argc, char** argv)
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
BLOCKTYPE DstBlockBuffer[16 * 16 * 256];
- buffer.CopyBlocks(DstBlockBuffer);
+ buffer.CopyBlockTypes(DstBlockBuffer);
testassert(memcmp(SrcBlockBuffer, DstBlockBuffer, (16 * 16 * 256) - 1) == 0);
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
NIBBLETYPE DstNibbleBuffer[16 * 16 * 256 / 2];
- buffer.CopyMeta(DstNibbleBuffer);
+ buffer.CopyMetas(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
--
cgit v1.2.3
From 0cfee5d141f63d0d9ee339e4fab3ad8ac15f884d Mon Sep 17 00:00:00 2001
From: worktycho
Date: Thu, 29 May 2014 19:10:35 +0100
Subject: Fixed Wrong types in nibble sizeofs
---
src/ChunkData.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 13be65fd7..46bd0b946 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -375,7 +375,7 @@ void cChunkData::CopyMetas(NIBBLETYPE * a_Dest) const
}
else
{
- memset(&a_Dest[i * SegmentLength], 0, sizeof(BLOCKTYPE) * SegmentLength);
+ memset(&a_Dest[i * SegmentLength], 0, sizeof(NIBBLETYPE) * SegmentLength);
}
}
}
@@ -395,7 +395,7 @@ void cChunkData::CopyBlockLight(NIBBLETYPE * a_Dest) const
}
else
{
- memset(&a_Dest[i * SegmentLength], 0, sizeof(BLOCKTYPE) * SegmentLength);
+ memset(&a_Dest[i * SegmentLength], 0, sizeof(NIBBLETYPE) * SegmentLength);
}
}
}
@@ -415,7 +415,7 @@ void cChunkData::CopySkyLight(NIBBLETYPE * a_Dest) const
}
else
{
- memset(&a_Dest[i * SegmentLength], 0xff, sizeof(BLOCKTYPE) * SegmentLength);
+ memset(&a_Dest[i * SegmentLength], 0xff, sizeof(NIBBLETYPE) * SegmentLength);
}
}
}
--
cgit v1.2.3
From ab633c8bd65b333630053334cb1119f38788698d Mon Sep 17 00:00:00 2001
From: JoannisO
Date: Thu, 29 May 2014 20:19:36 +0200
Subject: - Prefixed all args with "a_" - Added braces around the cases.
---
src/BlockEntities/DispenserEntity.cpp | 14 +++++++++-----
src/BlockEntities/DispenserEntity.h | 2 +-
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 341994be8..799d41a1e 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -196,15 +196,15 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
-void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind)
+void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind)
{
Vector3d Angle = GetProjectileLookVector(a_Chunk);
- cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(DispX, DispZ);
+ cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(a_DispX, a_DispZ);
- double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
- double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
+ double EntityX = 0.5 + (a_DispX + DispChunk->GetPosX() * cChunkDef::Width);
+ double EntityZ = 0.5 + (a_DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
- m_World->CreateProjectile((double) EntityX, (double) DispY + 0.5, (double) EntityZ, kind, NULL, NULL, &Angle);
+ m_World->CreateProjectile((double) EntityX, (double) a_DispY + 0.5, (double) EntityZ, a_kind, NULL, NULL, &Angle);
}
@@ -219,16 +219,20 @@ Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
switch (Meta)
{
case E_META_DROPSPENSER_FACING_YP:
+ {
m.Init(Vector3d(), 0, 180, 0);
Look = m.Transform(Vector3d(0, 1, 0));
return Look * 20; // UP
+ }
case E_META_DROPSPENSER_FACING_YM:
+ {
m.Init(Vector3d(), 0, -360, 0);
Look = m.Transform(Vector3d(0, -1, 0));
return Look * 20;; // DOWN
+ }
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
diff --git a/src/BlockEntities/DispenserEntity.h b/src/BlockEntities/DispenserEntity.h
index 0b7cd6bea..76aaccd3c 100644
--- a/src/BlockEntities/DispenserEntity.h
+++ b/src/BlockEntities/DispenserEntity.h
@@ -30,7 +30,7 @@ private:
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
// Spawns a projectile of the given kind in front of the dispenser
- void SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind);
+ void SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind);
// Returns how to aim the projectile
Vector3d GetProjectileLookVector(cChunk & a_Chunk);
--
cgit v1.2.3
From 59068b77b7215461b4aaf11c2db91c1657b7f91d Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 29 May 2014 20:18:37 +0200
Subject: Fixed wrong block sizes for copying / setting.
---
src/ChunkData.cpp | 75 ++++++++++++++++++++++------------------------
src/ChunkData.h | 3 +-
tests/ChunkData/Copies.cpp | 32 ++++++++++----------
3 files changed, 52 insertions(+), 58 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 46bd0b946..2628b3410 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -208,7 +208,7 @@ NIBBLETYPE cChunkData::GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
if (m_Sections[Section] != NULL)
{
int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
- return (m_Sections[Section]->m_BlockMeta[Index / 2] >> ((Index & 1) * 4)) & 0x0f;
+ return (m_Sections[Section]->m_BlockMetas[Index / 2] >> ((Index & 1) * 4)) & 0x0f;
}
else
{
@@ -251,9 +251,9 @@ bool cChunkData::SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Nibble
ZeroSection(m_Sections[Section]);
}
int Index = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY - (Section * SectionHeight), a_RelZ);
- NIBBLETYPE oldval = m_Sections[Section]->m_BlockMeta[Index / 2] >> ((Index & 1) * 4) & 0xf;
- m_Sections[Section]->m_BlockMeta[Index / 2] = static_cast(
- (m_Sections[Section]->m_BlockMeta[Index / 2] & (0xf0 >> ((Index & 1) * 4))) | // The untouched nibble
+ NIBBLETYPE oldval = m_Sections[Section]->m_BlockMetas[Index / 2] >> ((Index & 1) * 4) & 0xf;
+ m_Sections[Section]->m_BlockMetas[Index / 2] = static_cast(
+ (m_Sections[Section]->m_BlockMetas[Index / 2] & (0xf0 >> ((Index & 1) * 4))) | // The untouched nibble
((a_Nibble & 0x0f) << ((Index & 1) * 4)) // The nibble being set
);
return oldval == a_Nibble;
@@ -333,28 +333,27 @@ cChunkData cChunkData::Copy(void) const
void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
{
- size_t toskip = a_Idx;
+ size_t ToSkip = a_Idx;
for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = SectionHeight * 16 * 16;
- size_t startpos = 0;
- if (toskip > 0)
+ size_t StartPos = 0;
+ if (ToSkip > 0)
{
- toskip = std::max(toskip - SegmentLength, (size_t) 0);
- startpos = SegmentLength - toskip;
+ ToSkip = std::max(ToSkip - SectionBlockCount, (size_t) 0); // TODO: Still can underflow
+ StartPos = SectionBlockCount - ToSkip;
}
- if (toskip == 0)
+ if (ToSkip == 0)
{
- size_t ToCopy = std::min(SegmentLength, a_Length);
+ size_t ToCopy = std::min(SectionBlockCount, a_Length);
a_Length -= ToCopy;
if (m_Sections[i] != NULL)
{
- memcpy(&a_Dest[(i * SegmentLength) - a_Idx], (&m_Sections[i]->m_BlockTypes) + startpos, sizeof(BLOCKTYPE) * (ToCopy - startpos));
+ memcpy(&a_Dest[(i * SectionBlockCount) - a_Idx], (&m_Sections[i]->m_BlockTypes) + StartPos, sizeof(BLOCKTYPE) * (ToCopy - StartPos));
}
else
{
- memset(&a_Dest[(i * SegmentLength) - a_Idx], 0, sizeof(BLOCKTYPE) * (ToCopy - startpos));
+ memset(&a_Dest[(i * SectionBlockCount) - a_Idx], 0, sizeof(BLOCKTYPE) * (ToCopy - StartPos));
}
}
}
@@ -368,14 +367,13 @@ void cChunkData::CopyMetas(NIBBLETYPE * a_Dest) const
{
for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = SectionHeight * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
- memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockMeta, sizeof(NIBBLETYPE) * SegmentLength);
+ memcpy(&a_Dest[i * SectionBlockCount / 2], &m_Sections[i]->m_BlockMetas, sizeof(m_Sections[i]->m_BlockMetas));
}
else
{
- memset(&a_Dest[i * SegmentLength], 0, sizeof(NIBBLETYPE) * SegmentLength);
+ memset(&a_Dest[i * SectionBlockCount / 2], 0, sizeof(m_Sections[i]->m_BlockMetas));
}
}
}
@@ -388,14 +386,13 @@ void cChunkData::CopyBlockLight(NIBBLETYPE * a_Dest) const
{
for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = SectionHeight * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
- memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockLight, sizeof(NIBBLETYPE) * SegmentLength);
+ memcpy(&a_Dest[i * SectionBlockCount / 2], &m_Sections[i]->m_BlockLight, sizeof(m_Sections[i]->m_BlockLight));
}
else
{
- memset(&a_Dest[i * SegmentLength], 0, sizeof(NIBBLETYPE) * SegmentLength);
+ memset(&a_Dest[i * SectionBlockCount / 2], 0, sizeof(m_Sections[i]->m_BlockLight));
}
}
}
@@ -408,14 +405,13 @@ void cChunkData::CopySkyLight(NIBBLETYPE * a_Dest) const
{
for (size_t i = 0; i < NumSections; i++)
{
- const size_t SegmentLength = SectionHeight * 16 * 16 / 2;
if (m_Sections[i] != NULL)
{
- memcpy(&a_Dest[i * SegmentLength], &m_Sections[i]->m_BlockSkyLight, sizeof(NIBBLETYPE) * SegmentLength);
+ memcpy(&a_Dest[i * SectionBlockCount / 2], &m_Sections[i]->m_BlockSkyLight, sizeof(m_Sections[i]->m_BlockSkyLight));
}
else
{
- memset(&a_Dest[i * SegmentLength], 0xff, sizeof(NIBBLETYPE) * SegmentLength);
+ memset(&a_Dest[i * SectionBlockCount / 2], 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
}
}
}
@@ -428,18 +424,17 @@ void cChunkData::SetBlockTypes(const BLOCKTYPE * a_Src)
{
ASSERT(a_Src != NULL);
- static const size_t SegmentLength = SectionHeight * 16 * 16;
for (size_t i = 0; i < NumSections; i++)
{
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockTypes));
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (const BLOCKTYPE)0))
+ if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (const BLOCKTYPE)0))
{
// No need for the section, the data is all-air
continue;
@@ -447,8 +442,8 @@ void cChunkData::SetBlockTypes(const BLOCKTYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
- memset(m_Sections[i]->m_BlockMeta, 0x00, sizeof(m_Sections[i]->m_BlockMeta));
+ memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockTypes));
+ memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
} // for i - m_Sections[]
@@ -466,12 +461,12 @@ void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockMeta, &a_Src[i * SegmentLength], sizeof(NIBBLETYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (NIBBLETYPE)0))
+ if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (NIBBLETYPE)0))
{
// No need for the section, the data is all zeroes
continue;
@@ -479,7 +474,7 @@ void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockMeta, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
@@ -502,12 +497,12 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SegmentLength], sizeof(NIBBLETYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(NIBBLETYPE) * SectionBlockCount);
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (NIBBLETYPE)0))
+ if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (NIBBLETYPE)0))
{
// No need for the section, the data is all zeroes
continue;
@@ -515,9 +510,9 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(BLOCKTYPE) * SectionBlockCount);
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
- memset(m_Sections[i]->m_BlockMeta, 0x00, sizeof(m_Sections[i]->m_BlockMeta));
+ memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
} // for i - m_Sections[]
}
@@ -537,12 +532,12 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SegmentLength], sizeof(NIBBLETYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(NIBBLETYPE) * SectionBlockCount);
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SegmentLength, SegmentLength, (NIBBLETYPE)0xff))
+ if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (NIBBLETYPE)0xff))
{
// No need for the section, the data is all zeroes
continue;
@@ -550,9 +545,9 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SegmentLength], sizeof(BLOCKTYPE) * SegmentLength);
+ memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(BLOCKTYPE) * SectionBlockCount);
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
- memset(m_Sections[i]->m_BlockMeta, 0x00, sizeof(m_Sections[i]->m_BlockMeta));
+ memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
} // for i - m_Sections[]
}
@@ -584,7 +579,7 @@ void cChunkData::Free(cChunkData::sChunkSection * a_Section)
void cChunkData::ZeroSection(cChunkData::sChunkSection * a_Section) const
{
memset(a_Section->m_BlockTypes, 0x00, sizeof(a_Section->m_BlockTypes));
- memset(a_Section->m_BlockMeta, 0x00, sizeof(a_Section->m_BlockMeta));
+ memset(a_Section->m_BlockMetas, 0x00, sizeof(a_Section->m_BlockMetas));
memset(a_Section->m_BlockLight, 0x00, sizeof(a_Section->m_BlockLight));
memset(a_Section->m_BlockSkyLight, 0xff, sizeof(a_Section->m_BlockSkyLight));
}
diff --git a/src/ChunkData.h b/src/ChunkData.h
index 341c15301..fef31b5ad 100644
--- a/src/ChunkData.h
+++ b/src/ChunkData.h
@@ -91,7 +91,6 @@ private:
static const size_t SectionHeight = 16;
static const size_t NumSections = (cChunkDef::Height / SectionHeight);
- static const size_t SegmentLength = cChunkDef::Width * cChunkDef::Height * SectionHeight;
static const size_t SectionBlockCount = SectionHeight * cChunkDef::Width * cChunkDef::Width;
#if __cplusplus < 201103L
@@ -101,7 +100,7 @@ private:
struct sChunkSection {
BLOCKTYPE m_BlockTypes [SectionBlockCount];
- NIBBLETYPE m_BlockMeta [SectionBlockCount / 2];
+ NIBBLETYPE m_BlockMetas [SectionBlockCount / 2];
NIBBLETYPE m_BlockLight [SectionBlockCount / 2];
NIBBLETYPE m_BlockSkyLight[SectionBlockCount / 2];
};
diff --git a/tests/ChunkData/Copies.cpp b/tests/ChunkData/Copies.cpp
index ef0329451..788d2c558 100644
--- a/tests/ChunkData/Copies.cpp
+++ b/tests/ChunkData/Copies.cpp
@@ -19,10 +19,10 @@ int main(int argc, char** argv)
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
for (int i = 0; i < 16 * 16 * 256; i += 4)
{
- SrcBlockBuffer[i+0] = 0xDE;
- SrcBlockBuffer[i+1] = 0xAD;
- SrcBlockBuffer[i+2] = 0xBE;
- SrcBlockBuffer[i+3] = 0xEF;
+ SrcBlockBuffer[i + 0] = 0xde;
+ SrcBlockBuffer[i + 1] = 0xad;
+ SrcBlockBuffer[i + 2] = 0xbe;
+ SrcBlockBuffer[i + 3] = 0xef;
}
buffer.SetBlockTypes(SrcBlockBuffer);
@@ -42,10 +42,10 @@ int main(int argc, char** argv)
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
for (int i = 0; i < 16 * 16 * 256 / 2; i += 4)
{
- SrcNibbleBuffer[i+0] = 0xEF;
- SrcNibbleBuffer[i+1] = 0xDE;
- SrcNibbleBuffer[i+2] = 0xAD;
- SrcNibbleBuffer[i+3] = 0xBE;
+ SrcNibbleBuffer[i + 0] = 0xde;
+ SrcNibbleBuffer[i + 1] = 0xad;
+ SrcNibbleBuffer[i + 2] = 0xbe;
+ SrcNibbleBuffer[i + 3] = 0xef;
}
buffer.SetMetas(SrcNibbleBuffer);
@@ -66,10 +66,10 @@ int main(int argc, char** argv)
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
for (int i = 0; i < 16 * 16 * 256 / 2; i += 4)
{
- SrcNibbleBuffer[i+0] = 0xDE;
- SrcNibbleBuffer[i+1] = 0xAD;
- SrcNibbleBuffer[i+2] = 0xBE;
- SrcNibbleBuffer[i+3] = 0xEF;
+ SrcNibbleBuffer[i + 0] = 0xde;
+ SrcNibbleBuffer[i + 1] = 0xad;
+ SrcNibbleBuffer[i + 2] = 0xbe;
+ SrcNibbleBuffer[i + 3] = 0xef;
}
buffer.SetBlockLight(SrcNibbleBuffer);
@@ -90,10 +90,10 @@ int main(int argc, char** argv)
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
for (int i = 0; i < 16 * 16 * 256 / 2; i += 4)
{
- SrcNibbleBuffer[i+0] = 0xAD;
- SrcNibbleBuffer[i+1] = 0xBE;
- SrcNibbleBuffer[i+2] = 0xEF;
- SrcNibbleBuffer[i+3] = 0xDE;
+ SrcNibbleBuffer[i + 0] = 0xde;
+ SrcNibbleBuffer[i + 1] = 0xad;
+ SrcNibbleBuffer[i + 2] = 0xbe;
+ SrcNibbleBuffer[i + 3] = 0xef;
}
buffer.SetSkyLight(SrcNibbleBuffer);
--
cgit v1.2.3
From b50181e3614286b9624cf3b8f296d7b25509a55d Mon Sep 17 00:00:00 2001
From: worktycho
Date: Thu, 29 May 2014 19:29:06 +0100
Subject: fix underflow
Wish c++ could specify saturating unsigned underflow.
---
src/ChunkData.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 2628b3410..72187f393 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -340,7 +340,7 @@ void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Lengt
size_t StartPos = 0;
if (ToSkip > 0)
{
- ToSkip = std::max(ToSkip - SectionBlockCount, (size_t) 0); // TODO: Still can underflow
+ ToSkip = std::max((ssize_t)ToSkip - (ssize_t)SectionBlockCount, (size_t) 0);
StartPos = SectionBlockCount - ToSkip;
}
if (ToSkip == 0)
--
cgit v1.2.3
From 901e3ec4940f2a11f7866194f02732c813ce71b9 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Thu, 29 May 2014 19:35:47 +0100
Subject: Derp
---
src/ChunkData.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 72187f393..382e7a5a8 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -340,7 +340,7 @@ void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Lengt
size_t StartPos = 0;
if (ToSkip > 0)
{
- ToSkip = std::max((ssize_t)ToSkip - (ssize_t)SectionBlockCount, (size_t) 0);
+ ToSkip = std::max((ssize_t)ToSkip - (ssize_t)SectionBlockCount, (ssize_t) 0);
StartPos = SectionBlockCount - ToSkip;
}
if (ToSkip == 0)
--
cgit v1.2.3
From be10f07db02565fad77937bc6e9ccc6580f19158 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Thu, 29 May 2014 19:44:36 +0100
Subject: Fix bug when a_Idx is not a multiple of SectionBLockCount
---
src/ChunkData.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 382e7a5a8..be96be051 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -343,7 +343,7 @@ void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Lengt
ToSkip = std::max((ssize_t)ToSkip - (ssize_t)SectionBlockCount, (ssize_t) 0);
StartPos = SectionBlockCount - ToSkip;
}
- if (ToSkip == 0)
+ if (ToSkip < SectionBlockCount)
{
size_t ToCopy = std::min(SectionBlockCount, a_Length);
a_Length -= ToCopy;
--
cgit v1.2.3
From 8c4dd5dcfd91f8223e78ff7fd24f8e4e73d1f509 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Thu, 29 May 2014 21:41:44 +0200
Subject: Attempt at fixing an unresolved symbol in gcc / clang.
---
src/ChunkData.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index be96be051..74f5d78ba 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -345,7 +345,7 @@ void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Lengt
}
if (ToSkip < SectionBlockCount)
{
- size_t ToCopy = std::min(SectionBlockCount, a_Length);
+ size_t ToCopy = std::min(+SectionBlockCount, a_Length);
a_Length -= ToCopy;
if (m_Sections[i] != NULL)
{
--
cgit v1.2.3
From 0e2138736cd969a0dc931bbef31262da906cb832 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 09:17:17 +0200
Subject: Fixed wrong copy sizes in cChunkData.
---
src/ChunkData.cpp | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 74f5d78ba..5c11212ea 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -333,14 +333,14 @@ cChunkData cChunkData::Copy(void) const
void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
{
- size_t ToSkip = a_Idx;
+ int ToSkip = a_Idx;
for (size_t i = 0; i < NumSections; i++)
{
size_t StartPos = 0;
if (ToSkip > 0)
{
- ToSkip = std::max((ssize_t)ToSkip - (ssize_t)SectionBlockCount, (ssize_t) 0);
+ ToSkip = std::max(ToSkip - (int)SectionBlockCount, 0);
StartPos = SectionBlockCount - ToSkip;
}
if (ToSkip < SectionBlockCount)
@@ -429,7 +429,7 @@ void cChunkData::SetBlockTypes(const BLOCKTYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockTypes));
+ memcpy(m_Sections[i]->m_BlockTypes, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockTypes));
continue;
}
@@ -442,7 +442,7 @@ void cChunkData::SetBlockTypes(const BLOCKTYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockTypes, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockTypes));
+ memcpy(m_Sections[i]->m_BlockTypes, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
@@ -461,7 +461,7 @@ void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
+ memcpy(m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
continue;
}
@@ -474,7 +474,7 @@ void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
+ memcpy(m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
@@ -497,7 +497,7 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(NIBBLETYPE) * SectionBlockCount);
+ memcpy(m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockLight));
continue;
}
@@ -510,7 +510,7 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(BLOCKTYPE) * SectionBlockCount);
+ memcpy(m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
@@ -532,7 +532,7 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(NIBBLETYPE) * SectionBlockCount);
+ memcpy(m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockSkyLight));
continue;
}
@@ -545,7 +545,7 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(&m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(BLOCKTYPE) * SectionBlockCount);
+ memcpy(m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockSkyLight));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
--
cgit v1.2.3
From 0b49529e4273a96e7f582ef4c321eaf8d65c629f Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 09:17:50 +0200
Subject: Fixed test return values.
---
tests/ChunkData/ArraytoCoord.cpp | 65 +++++++++++++++++++++-------------------
tests/ChunkData/Copies.cpp | 14 ++++-----
2 files changed, 41 insertions(+), 38 deletions(-)
diff --git a/tests/ChunkData/ArraytoCoord.cpp b/tests/ChunkData/ArraytoCoord.cpp
index 4942ababb..0daf38f7b 100644
--- a/tests/ChunkData/ArraytoCoord.cpp
+++ b/tests/ChunkData/ArraytoCoord.cpp
@@ -11,26 +11,26 @@ int main(int argc, char** argv)
cChunkData buffer;
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
- memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
- SrcBlockBuffer[7 + (4 * 16) + (5 * 16 * 16)] = 0xCD;
+ memset(SrcBlockBuffer, 0x00, sizeof(SrcBlockBuffer));
+ SrcBlockBuffer[7 + (4 * 16) + (5 * 16 * 16)] = 0xcd;
buffer.SetBlockTypes(SrcBlockBuffer);
- testassert(buffer.GetBlock(7,5,4) == 0xCD);
+ testassert(buffer.GetBlock(7, 5, 4) == 0xcd);
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
- SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xE;
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
+ SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xe;
buffer.SetMetas(SrcNibbleBuffer);
- testassert(buffer.GetMeta(6, 2, 1) == 0xE);
+ testassert(buffer.GetMeta(6, 2, 1) == 0xe);
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
- SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xE;
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
+ SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xe;
buffer.SetBlockLight(SrcNibbleBuffer);
- testassert(buffer.GetBlockLight(6, 2, 1) == 0xE);
+ testassert(buffer.GetBlockLight(6, 2, 1) == 0xe);
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
- SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xE;
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
+ SrcNibbleBuffer[(6 + (1 * 16) + (2 * 16 * 16)) / 2] = 0xe;
buffer.SetSkyLight(SrcNibbleBuffer);
- testassert(buffer.GetSkyLight(6, 2, 1) == 0xE);
+ testassert(buffer.GetSkyLight(6, 2, 1) == 0xe);
}
{
@@ -38,26 +38,26 @@ int main(int argc, char** argv)
cChunkData buffer;
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
- memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
- SrcBlockBuffer[7 + (4 * 16) + (24 * 16 * 16)] = 0xCD;
+ memset(SrcBlockBuffer, 0x00, sizeof(SrcBlockBuffer));
+ SrcBlockBuffer[7 + (4 * 16) + (24 * 16 * 16)] = 0xcd;
buffer.SetBlockTypes(SrcBlockBuffer);
- testassert(buffer.GetBlock(7, 24, 4) == 0xCD);
+ testassert(buffer.GetBlock(7, 24, 4) == 0xcd);
NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 / 2);
- SrcNibbleBuffer[(6 + (1 * 16) + (24 * 16 * 16)) / 2] = 0xE;
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
+ SrcNibbleBuffer[(6 + (1 * 16) + (24 * 16 * 16)) / 2] = 0xe;
buffer.SetMetas(SrcNibbleBuffer);
- testassert(buffer.GetMeta(6, 24, 1) == 0xE);
+ testassert(buffer.GetMeta(6, 24, 1) == 0xe);
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
- SrcNibbleBuffer[(6+1*16+24*16*16)/2] = 0xE;
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
+ SrcNibbleBuffer[(6 + 1 * 16 + 24 * 16 * 16) / 2] = 0xe;
buffer.SetBlockLight(SrcNibbleBuffer);
- testassert(buffer.GetBlockLight(6,24,1) == 0xE);
+ testassert(buffer.GetBlockLight(6, 24, 1) == 0xe);
- memset(SrcNibbleBuffer, 0xFF, 16 * 16 * 256 / 2);
- SrcNibbleBuffer[(6 + (1 * 16) + (24 * 16 * 16))/2] = 0xE;
+ memset(SrcNibbleBuffer, 0xff, sizeof(SrcNibbleBuffer));
+ SrcNibbleBuffer[(6 + (1 * 16) + (24 * 16 * 16)) / 2] = 0xe;
buffer.SetSkyLight(SrcNibbleBuffer);
- testassert(buffer.GetSkyLight(6, 24, 1) == 0xE);
+ testassert(buffer.GetSkyLight(6, 24, 1) == 0xe);
}
{
@@ -65,22 +65,25 @@ int main(int argc, char** argv)
cChunkData buffer;
BLOCKTYPE SrcBlockBuffer[16 * 16 * 256];
- memset(SrcBlockBuffer, 0x00, 16 * 16 * 256);
+ memset(SrcBlockBuffer, 0x00, sizeof(SrcBlockBuffer));
buffer.SetBlockTypes(SrcBlockBuffer);
testassert(buffer.GetBlock(7, 24, 4) == 0x00);
- NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256/2];
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
+ NIBBLETYPE SrcNibbleBuffer[16 * 16 * 256 / 2];
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
buffer.SetMetas(SrcNibbleBuffer);
testassert(buffer.GetMeta(6, 24, 1) == 0x0);
- memset(SrcNibbleBuffer, 0x00, 16 * 16 * 256 /2);
+ memset(SrcNibbleBuffer, 0x00, sizeof(SrcNibbleBuffer));
buffer.SetBlockLight(SrcNibbleBuffer);
- testassert(buffer.GetBlockLight(6,24,1) == 0x0);
+ testassert(buffer.GetBlockLight(6, 24, 1) == 0x0);
- memset(SrcNibbleBuffer, 0xFF, 16 * 16 * 256 /2);
+ memset(SrcNibbleBuffer, 0xff, sizeof(SrcNibbleBuffer));
buffer.SetSkyLight(SrcNibbleBuffer);
- testassert(buffer.GetSkyLight(6, 24, 1) == 0xF);
+ testassert(buffer.GetSkyLight(6, 24, 1) == 0xf);
}
+
+ // All tests passed:
+ return 0;
}
diff --git a/tests/ChunkData/Copies.cpp b/tests/ChunkData/Copies.cpp
index 788d2c558..312441eee 100644
--- a/tests/ChunkData/Copies.cpp
+++ b/tests/ChunkData/Copies.cpp
@@ -34,8 +34,8 @@ int main(int argc, char** argv)
buffer.SetBlockTypes(SrcBlockBuffer);
buffer.CopyBlockTypes(DstBlockBuffer);
testassert(memcmp(SrcBlockBuffer, DstBlockBuffer, (16 * 16 * 256) - 1) == 0);
-
}
+
{
cChunkData buffer;
@@ -57,9 +57,8 @@ int main(int argc, char** argv)
buffer.SetMetas(SrcNibbleBuffer);
buffer.CopyMetas(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
-
-
}
+
{
cChunkData buffer;
@@ -81,9 +80,8 @@ int main(int argc, char** argv)
buffer.SetBlockLight(SrcNibbleBuffer);
buffer.CopyBlockLight(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 /2) - 1) == 0);
-
-
}
+
{
cChunkData buffer;
@@ -101,13 +99,12 @@ int main(int argc, char** argv)
buffer.CopySkyLight(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
-
memset(SrcNibbleBuffer, 0xFF, 16 * 16 * 256 / 2);
buffer.SetSkyLight(SrcNibbleBuffer);
buffer.CopySkyLight(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
-
}
+
{
cChunkData buffer;
@@ -131,4 +128,7 @@ int main(int argc, char** argv)
buffer.CopySkyLight(DstNibbleBuffer);
testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 / 2) - 1) == 0);
}
+
+ // All tests successful:
+ return 0;
}
--
cgit v1.2.3
From 5368c5dd79bce465d32517eec62701abc9b380d9 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 09:49:57 +0200
Subject: Fixed sign comparison.
---
src/ChunkData.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 5c11212ea..6ccb28fe4 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -343,7 +343,7 @@ void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Lengt
ToSkip = std::max(ToSkip - (int)SectionBlockCount, 0);
StartPos = SectionBlockCount - ToSkip;
}
- if (ToSkip < SectionBlockCount)
+ if (ToSkip < (int)SectionBlockCount)
{
size_t ToCopy = std::min(+SectionBlockCount, a_Length);
a_Length -= ToCopy;
--
cgit v1.2.3
From 0b60caac4ae8e7762cc530a0a7b6a7abe8c33262 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 10:56:12 +0200
Subject: Test failures are reported verbosely and into the debug console on
Win.
---
src/Globals.h | 20 ++++++++++++++++++--
tests/ChunkData/CMakeLists.txt | 2 +-
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/Globals.h b/src/Globals.h
index 85cfd2f18..7b7a34541 100644
--- a/src/Globals.h
+++ b/src/Globals.h
@@ -271,9 +271,25 @@ void inline LOGERROR(const char* a_Format, ...)
{
};
+ #ifdef _WIN32
+ #define REPORT_ERROR(FMT, ...) \
+ { \
+ AString msg = Printf(FMT, __VA_ARGS__); \
+ puts(msg.c_str()); \
+ fflush(stdout); \
+ OutputDebugStringA(msg.c_str()); \
+ }
+ #else
+ #define REPORT_ERROR(FMT, ...) \
+ { \
+ AString msg = Printf(FMT, __VA_ARGS__); \
+ puts(msg.c_str()); \
+ fflush(stdout); \
+ }
+ #endif
#define ASSERT(x) do { if (!(x)) { throw cAssertFailure();} } while (0)
- #define testassert(x) do { if(!(x)) { exit(1); } } while (0)
- #define CheckAsserts(x) do { try {x} catch (cAssertFailure) { break; } exit(1); } while (0)
+ #define testassert(x) do { if(!(x)) { REPORT_ERROR("Test failure: %s, file %s, line %d\n", #x, __FILE__, __LINE__); exit(1); } } while (0)
+ #define CheckAsserts(x) do { try {x} catch (cAssertFailure) { break; } REPORT_ERROR("Test failure: assert didn't fire for %s, file %s, line %d\n", #x, __FILE__, __LINE__); exit(1); } while (0)
#else
#ifdef _DEBUG
diff --git a/tests/ChunkData/CMakeLists.txt b/tests/ChunkData/CMakeLists.txt
index a2bd9fd22..fd508cc6e 100644
--- a/tests/ChunkData/CMakeLists.txt
+++ b/tests/ChunkData/CMakeLists.txt
@@ -5,7 +5,7 @@ enable_testing()
include_directories(${CMAKE_SOURCE_DIR}/src/)
add_definitions(-DTEST_GLOBALS=1)
-add_library(ChunkBuffer ${CMAKE_SOURCE_DIR}/src/ChunkData.cpp)
+add_library(ChunkBuffer ${CMAKE_SOURCE_DIR}/src/ChunkData.cpp ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp)
add_executable(creatable-exe creatable.cpp)
--
cgit v1.2.3
From 730e36844e152794cf85c4d1e9b7a84fd8be86ee Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 11:01:13 +0200
Subject: Test failures break into MSVC debugger.
---
src/Globals.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/Globals.h b/src/Globals.h
index 7b7a34541..c5768facf 100644
--- a/src/Globals.h
+++ b/src/Globals.h
@@ -272,12 +272,18 @@ void inline LOGERROR(const char* a_Format, ...)
};
#ifdef _WIN32
+ #if (defined(_MSC_VER) && defined(_DEBUG))
+ #define DBG_BREAK _CrtDbgBreak()
+ #else
+ #define DBG_BREAK
+ #endif
#define REPORT_ERROR(FMT, ...) \
{ \
AString msg = Printf(FMT, __VA_ARGS__); \
puts(msg.c_str()); \
fflush(stdout); \
OutputDebugStringA(msg.c_str()); \
+ DBG_BREAK; \
}
#else
#define REPORT_ERROR(FMT, ...) \
--
cgit v1.2.3
From e136f6e0f5b41ee7c9d784009ef40c9ac2e2e6fe Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 11:35:29 +0200
Subject: Fixed cChunkData nibble copying.
---
src/ChunkData.cpp | 18 +++++++++---------
tests/ChunkData/Coordinates.cpp | 8 ++++----
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 6ccb28fe4..6178dbc0d 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -461,12 +461,12 @@ void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
+ memcpy(m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount / 2], sizeof(m_Sections[i]->m_BlockMetas));
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (NIBBLETYPE)0))
+ if (IsAllValue(a_Src + i * SectionBlockCount / 2, SectionBlockCount / 2, (NIBBLETYPE)0))
{
// No need for the section, the data is all zeroes
continue;
@@ -474,7 +474,7 @@ void cChunkData::SetMetas(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockMetas));
+ memcpy(m_Sections[i]->m_BlockMetas, &a_Src[i * SectionBlockCount / 2], sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
@@ -497,12 +497,12 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockLight));
+ memcpy(m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount / 2], sizeof(m_Sections[i]->m_BlockLight));
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (NIBBLETYPE)0))
+ if (IsAllValue(a_Src + i * SectionBlockCount / 2, SectionBlockCount / 2, (NIBBLETYPE)0))
{
// No need for the section, the data is all zeroes
continue;
@@ -510,7 +510,7 @@ void cChunkData::SetBlockLight(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockLight));
+ memcpy(m_Sections[i]->m_BlockLight, &a_Src[i * SectionBlockCount / 2], sizeof(m_Sections[i]->m_BlockLight));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockSkyLight, 0xff, sizeof(m_Sections[i]->m_BlockSkyLight));
@@ -532,12 +532,12 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
// If the section is already allocated, copy the data into it:
if (m_Sections[i] != NULL)
{
- memcpy(m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockSkyLight));
+ memcpy(m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount / 2], sizeof(m_Sections[i]->m_BlockSkyLight));
continue;
}
// The section doesn't exist, find out if it is needed:
- if (IsAllValue(a_Src + i * SectionBlockCount, SectionBlockCount, (NIBBLETYPE)0xff))
+ if (IsAllValue(a_Src + i * SectionBlockCount / 2, SectionBlockCount / 2, (NIBBLETYPE)0xff))
{
// No need for the section, the data is all zeroes
continue;
@@ -545,7 +545,7 @@ void cChunkData::SetSkyLight(const NIBBLETYPE * a_Src)
// Allocate the section and copy the data into it:
m_Sections[i] = Allocate();
- memcpy(m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount], sizeof(m_Sections[i]->m_BlockSkyLight));
+ memcpy(m_Sections[i]->m_BlockSkyLight, &a_Src[i * SectionBlockCount / 2], sizeof(m_Sections[i]->m_BlockSkyLight));
memset(m_Sections[i]->m_BlockTypes, 0x00, sizeof(m_Sections[i]->m_BlockTypes));
memset(m_Sections[i]->m_BlockMetas, 0x00, sizeof(m_Sections[i]->m_BlockMetas));
memset(m_Sections[i]->m_BlockLight, 0x00, sizeof(m_Sections[i]->m_BlockLight));
diff --git a/tests/ChunkData/Coordinates.cpp b/tests/ChunkData/Coordinates.cpp
index 938c66dcc..48d731c7e 100644
--- a/tests/ChunkData/Coordinates.cpp
+++ b/tests/ChunkData/Coordinates.cpp
@@ -109,14 +109,14 @@ int main(int argc, char** argv)
// Zero's
buffer.SetBlock(0, 0, 0, 0x0);
- buffer.SetBlock(0, 0, 1, 0xAB);
+ buffer.SetBlock(0, 0, 1, 0xab);
testassert(buffer.GetBlock(0, 0, 0) == 0x0);
- testassert(buffer.GetBlock(0, 0, 1) == 0xAB);
+ testassert(buffer.GetBlock(0, 0, 1) == 0xab);
buffer.SetMeta(0, 16, 0, 0x0);
- buffer.SetMeta(0, 16, 1, 0xC);
+ buffer.SetMeta(0, 16, 1, 0xc);
testassert(buffer.GetMeta(0, 16, 0) == 0x0);
- testassert(buffer.GetMeta(0, 16, 1) == 0xC);
+ testassert(buffer.GetMeta(0, 16, 1) == 0xc);
}
--
cgit v1.2.3
From d854d3af1c724304997488d2b61518c85acb076a Mon Sep 17 00:00:00 2001
From: Tycho
Date: Fri, 30 May 2014 14:43:33 +0100
Subject: removed unneded addressof
---
src/ChunkData.cpp | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 6178dbc0d..258853ea0 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -55,6 +55,7 @@ cChunkData::~cChunkData()
for (size_t i = 0; i < NumSections; i++)
{
Free(m_Sections[i]);
+ m_Sections[i] = NULL;
}
}
@@ -93,6 +94,7 @@ cChunkData::~cChunkData()
for (size_t i = 0; i < NumSections; i++)
{
Free(m_Sections[i]);
+ m_Sections[i] = NULL;
}
}
@@ -101,6 +103,7 @@ cChunkData::~cChunkData()
for (size_t i = 0; i < NumSections; i++)
{
m_Sections[i] = a_Other.m_Sections[i];
+ a_Other.m_Sections[i] = NULL;
}
a_Other.m_IsOwner = false;
return *this;
@@ -333,27 +336,28 @@ cChunkData cChunkData::Copy(void) const
void cChunkData::CopyBlockTypes(BLOCKTYPE * a_Dest, size_t a_Idx, size_t a_Length) const
{
- int ToSkip = a_Idx;
+ size_t ToSkip = a_Idx;
for (size_t i = 0; i < NumSections; i++)
{
size_t StartPos = 0;
if (ToSkip > 0)
{
- ToSkip = std::max(ToSkip - (int)SectionBlockCount, 0);
- StartPos = SectionBlockCount - ToSkip;
+ StartPos = std::min(ToSkip, +SectionBlockCount);
+ ToSkip -= StartPos;
}
- if (ToSkip < (int)SectionBlockCount)
+ if (StartPos < SectionBlockCount)
{
- size_t ToCopy = std::min(+SectionBlockCount, a_Length);
+ size_t ToCopy = std::min(+SectionBlockCount - StartPos, a_Length);
a_Length -= ToCopy;
if (m_Sections[i] != NULL)
{
- memcpy(&a_Dest[(i * SectionBlockCount) - a_Idx], (&m_Sections[i]->m_BlockTypes) + StartPos, sizeof(BLOCKTYPE) * (ToCopy - StartPos));
+ BLOCKTYPE * blockbuffer = m_Sections[i]->m_BlockTypes;
+ memcpy(&a_Dest[(i * SectionBlockCount) + StartPos - a_Idx], blockbuffer + StartPos, sizeof(BLOCKTYPE) * ToCopy);
}
else
{
- memset(&a_Dest[(i * SectionBlockCount) - a_Idx], 0, sizeof(BLOCKTYPE) * (ToCopy - StartPos));
+ memset(&a_Dest[(i * SectionBlockCount) - a_Idx], 0, sizeof(BLOCKTYPE) * ToCopy);
}
}
}
--
cgit v1.2.3
From f26ddac61944ccae3223be5c4403171e04e306b9 Mon Sep 17 00:00:00 2001
From: Tycho
Date: Fri, 30 May 2014 14:50:30 +0100
Subject: removed NULL assignment to const value
---
src/ChunkData.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/ChunkData.cpp b/src/ChunkData.cpp
index 258853ea0..142c141c4 100644
--- a/src/ChunkData.cpp
+++ b/src/ChunkData.cpp
@@ -103,7 +103,6 @@ cChunkData::~cChunkData()
for (size_t i = 0; i < NumSections; i++)
{
m_Sections[i] = a_Other.m_Sections[i];
- a_Other.m_Sections[i] = NULL;
}
a_Other.m_IsOwner = false;
return *this;
--
cgit v1.2.3
From 76c07b1ec72033d05a4dd54360451f6492c2a31e Mon Sep 17 00:00:00 2001
From: Mattes D
Date: Fri, 30 May 2014 17:44:24 +0200
Subject: Added a cChunkData::CopyBlockTypes() unit test.
---
tests/ChunkData/CMakeLists.txt | 3 ++
tests/ChunkData/CopyBlocks.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+)
create mode 100644 tests/ChunkData/CopyBlocks.cpp
diff --git a/tests/ChunkData/CMakeLists.txt b/tests/ChunkData/CMakeLists.txt
index fd508cc6e..381e11cc2 100644
--- a/tests/ChunkData/CMakeLists.txt
+++ b/tests/ChunkData/CMakeLists.txt
@@ -24,3 +24,6 @@ add_executable(arraystocoords-exe ArraytoCoord.cpp)
target_link_libraries(arraystocoords-exe ChunkBuffer)
add_test(NAME arraystocoords-test COMMAND arraystocoords-exe)
+add_executable(copyblocks-exe CopyBlocks.cpp)
+target_link_libraries(copyblocks-exe ChunkBuffer)
+add_test(NAME copyblocks-test COMMAND copyblocks-exe)
diff --git a/tests/ChunkData/CopyBlocks.cpp b/tests/ChunkData/CopyBlocks.cpp
new file mode 100644
index 000000000..d132411db
--- /dev/null
+++ b/tests/ChunkData/CopyBlocks.cpp
@@ -0,0 +1,65 @@
+
+// CopyBlocks.cpp
+
+// Implements the test for cChunkData::CopyBlockTypes() range copying
+
+
+
+
+
+#include "Globals.h"
+#include "ChunkData.h"
+
+
+
+
+
+int main(int argc, char ** argv)
+{
+ // Set up a cChunkData with known contents - all blocks 0x01, all metas 0x02:
+ cChunkData Data;
+ cChunkDef::BlockTypes BlockTypes;
+ cChunkDef::BlockNibbles BlockMetas;
+ memset(BlockTypes, 0x01, sizeof(BlockTypes));
+ memset(BlockMetas, 0x02, sizeof(BlockMetas));
+ Data.SetBlockTypes(BlockTypes);
+ Data.SetMetas(BlockMetas);
+
+ // Try to read varying amounts of blocktypes from the cChunkData.
+ // Verify that the exact amount of memory is copied, by copying to a larger buffer and checking its boundaries
+ BLOCKTYPE TestBuffer[5 * cChunkDef::NumBlocks];
+ size_t WritePosIdx = 2 * cChunkDef::NumBlocks;
+ BLOCKTYPE * WritePosition = &TestBuffer[WritePosIdx];
+ memset(TestBuffer, 0x03, sizeof(TestBuffer));
+ for (size_t idx = 0; idx < 5000; idx++)
+ {
+ for (size_t len = 1; len < 1000; len += 15)
+ {
+ printf("Testing copying %u blocks from index %u\n", (unsigned)len, (unsigned)idx);
+
+ Data.CopyBlockTypes(WritePosition, idx, len);
+
+ // Verify the data copied:
+ for (size_t i = 0; i < len; i++)
+ {
+ assert_test(WritePosition[i] == 0x01);
+ }
+ // Verify the space before the copied data hasn't been changed:
+ for (size_t i = 0; i < WritePosIdx + idx; i++)
+ {
+ assert_test(TestBuffer[i] == 0x03);
+ }
+ // Verify the space after the copied data hasn't been changed:
+ for (size_t i = WritePosIdx + idx + len; i < ARRAYCOUNT(TestBuffer); i++)
+ {
+ assert_test(TestBuffer[i] == 0x03);
+ }
+ }
+ } // for idx
+ return 0;
+}
+
+
+
+
+
--
cgit v1.2.3
From cbb9e152577e3db07832b96583f0ab0618d0d983 Mon Sep 17 00:00:00 2001
From: Tycho
Date: Fri, 30 May 2014 17:13:36 +0100
Subject: Fix bugs in test
---
tests/ChunkData/CopyBlocks.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/tests/ChunkData/CopyBlocks.cpp b/tests/ChunkData/CopyBlocks.cpp
index d132411db..b31ce3c63 100644
--- a/tests/ChunkData/CopyBlocks.cpp
+++ b/tests/ChunkData/CopyBlocks.cpp
@@ -30,12 +30,14 @@ int main(int argc, char ** argv)
BLOCKTYPE TestBuffer[5 * cChunkDef::NumBlocks];
size_t WritePosIdx = 2 * cChunkDef::NumBlocks;
BLOCKTYPE * WritePosition = &TestBuffer[WritePosIdx];
- memset(TestBuffer, 0x03, sizeof(TestBuffer));
for (size_t idx = 0; idx < 5000; idx++)
{
for (size_t len = 1; len < 1000; len += 15)
{
- printf("Testing copying %u blocks from index %u\n", (unsigned)len, (unsigned)idx);
+ //printf("Testing copying %u blocks from index %u\n", (unsigned)len, (unsigned)idx);
+
+ //initalize buffer
+ memset(TestBuffer, 0x03, sizeof(TestBuffer));
Data.CopyBlockTypes(WritePosition, idx, len);
@@ -45,7 +47,7 @@ int main(int argc, char ** argv)
assert_test(WritePosition[i] == 0x01);
}
// Verify the space before the copied data hasn't been changed:
- for (size_t i = 0; i < WritePosIdx + idx; i++)
+ for (size_t i = 0; i < WritePosIdx; i++)
{
assert_test(TestBuffer[i] == 0x03);
}
--
cgit v1.2.3
From f2470ff7c11fc8226b20a5d53f5a4e8ee0e8454e Mon Sep 17 00:00:00 2001
From: Mattes D
Date: Fri, 30 May 2014 18:32:15 +0200
Subject: Reduced the number of cChunkData::CopyBlockTypes() tests, added
progress.
---
tests/ChunkData/CopyBlocks.cpp | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/tests/ChunkData/CopyBlocks.cpp b/tests/ChunkData/CopyBlocks.cpp
index b31ce3c63..be8cab234 100644
--- a/tests/ChunkData/CopyBlocks.cpp
+++ b/tests/ChunkData/CopyBlocks.cpp
@@ -30,15 +30,18 @@ int main(int argc, char ** argv)
BLOCKTYPE TestBuffer[5 * cChunkDef::NumBlocks];
size_t WritePosIdx = 2 * cChunkDef::NumBlocks;
BLOCKTYPE * WritePosition = &TestBuffer[WritePosIdx];
- for (size_t idx = 0; idx < 5000; idx++)
+ memset(TestBuffer, 0x03, sizeof(TestBuffer));
+ size_t LastReportedStep = 1;
+ for (size_t idx = 0; idx < 5000; idx += 7)
{
- for (size_t len = 1; len < 1000; len += 15)
+ if (idx / 500 != LastReportedStep)
{
- //printf("Testing copying %u blocks from index %u\n", (unsigned)len, (unsigned)idx);
-
- //initalize buffer
- memset(TestBuffer, 0x03, sizeof(TestBuffer));
+ printf("Testing index %u...\n", (unsigned)idx);
+ LastReportedStep = idx / 500;
+ }
+ for (size_t len = 3; len < 1000; len += 13)
+ {
Data.CopyBlockTypes(WritePosition, idx, len);
// Verify the data copied:
@@ -56,7 +59,13 @@ int main(int argc, char ** argv)
{
assert_test(TestBuffer[i] == 0x03);
}
- }
+
+ // Re-initialize the buffer for the next test:
+ for (size_t i = 0; i < len; i++)
+ {
+ WritePosition[i] = 0x03;
+ }
+ } // for len
} // for idx
return 0;
}
--
cgit v1.2.3
From d8e16f8c1fa771f77ef7505b45b9114b1f75aa61 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Fri, 30 May 2014 22:22:42 +0200
Subject: Better SetOpen() and IsOpen() function from the doors.
---
src/Blocks/BlockDoor.cpp | 2 +-
src/Blocks/BlockDoor.h | 102 ++++++++++++-----------------------------------
2 files changed, 27 insertions(+), 77 deletions(-)
diff --git a/src/Blocks/BlockDoor.cpp b/src/Blocks/BlockDoor.cpp
index 479c68153..fb2d6f2dc 100644
--- a/src/Blocks/BlockDoor.cpp
+++ b/src/Blocks/BlockDoor.cpp
@@ -62,7 +62,7 @@ void cBlockDoorHandler::OnCancelRightClick(cChunkInterface & a_ChunkInterface, c
a_WorldInterface.SendBlockTo(a_BlockX, a_BlockY, a_BlockZ, a_Player);
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
- if (Meta & 8)
+ if (Meta & 0x8)
{
// Current block is top of the door
a_WorldInterface.SendBlockTo(a_BlockX, a_BlockY - 1, a_BlockZ, a_Player);
diff --git a/src/Blocks/BlockDoor.h b/src/Blocks/BlockDoor.h
index b5bfe4082..c1e4de9d4 100644
--- a/src/Blocks/BlockDoor.h
+++ b/src/Blocks/BlockDoor.h
@@ -135,113 +135,63 @@ public:
}
- /** Returns the metadata for the opposite door state (open vs closed) */
- static NIBBLETYPE ChangeStateMetaData(NIBBLETYPE a_MetaData)
+ static NIBBLETYPE IsOpen(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
{
- return a_MetaData ^ 4;
+ NIBBLETYPE Meta = GetMetaFromRightDoor(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
+ return ((Meta & 0x4) != 0);
}
- static bool IsOpen(cChunkInterface & a_ChunkInterface, int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ)
+ static NIBBLETYPE GetMetaFromRightDoor(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
{
- BLOCKTYPE Block;
- NIBBLETYPE Meta;
- a_ChunkInterface.GetBlockTypeMeta(a_RelBlockX, a_RelBlockY, a_RelBlockZ, Block, Meta);
+ NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
- if (!IsDoor(Block))
+ if ((Meta & 0x8) != 0)
{
- return false;
+ NIBBLETYPE DownMeta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY - 1, a_BlockZ);
+ return (DownMeta & 0x7) | 0x8 | (((Meta & 0x1) != 0) ? 16 : 0);
+ }
+ else
+ {
+ NIBBLETYPE UpMeta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY + 1, a_BlockZ);
+ return (Meta & 0x7) | (((UpMeta & 0x1) != 0) ? 16 : 0);
}
-
- return ((Meta & 0x4) == 4);
}
static void SetOpen(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open)
{
- BLOCKTYPE Block;
- NIBBLETYPE Meta;
- a_ChunkInterface.GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, Block, Meta);
+ BLOCKTYPE Block = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY, a_BlockZ);
+ NIBBLETYPE Meta = GetMetaFromRightDoor(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
- if (!IsDoor(Block) || ((Meta & 0x4) == a_Open))
+ if (!IsDoor(Block))
{
return;
}
- // Change the door
- if (a_Open)
+ bool Opened = (Meta & 0x4) != 0;
+ if (Opened == a_Open)
{
- a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, Meta | 0x4);
- }
- else
- {
- a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, Meta & 0xFFFFFFFB);
+ return;
}
- int OtherPartY = a_BlockY;
- if (Meta & 0x8)
+ // Change the door
+ NIBBLETYPE NewMeta = (Meta & 0x7) ^ 0x4;
+ if ((Meta & 0x8) == 0)
{
- // Current block is top of the door
- a_ChunkInterface.GetBlockTypeMeta(a_BlockX, a_BlockY - 1, a_BlockZ, Block, Meta);
- if (IsDoor(Block) && !(Meta & 0x8))
- {
- OtherPartY--;
- }
+ a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, NewMeta);
}
else
{
- // Current block is bottom of the door
- a_ChunkInterface.GetBlockTypeMeta(a_BlockX, a_BlockY + 1, a_BlockZ, Block, Meta);
- if (IsDoor(Block) && (Meta & 0x8))
- {
- OtherPartY++;
- }
- }
-
- // Change the other door part
- if (a_BlockY != OtherPartY)
- {
- if (a_Open)
- {
- a_ChunkInterface.SetBlockMeta(a_BlockX, OtherPartY, a_BlockZ, Meta | 0x4);
- }
- else
- {
- a_ChunkInterface.SetBlockMeta(a_BlockX, OtherPartY, a_BlockZ, Meta & 0xFFFFFFFB);
- }
+ a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY - 1, a_BlockZ, NewMeta);
}
}
/** Changes the door at the specified coords from open to close or vice versa */
- static void ChangeDoor(cChunkInterface & a_ChunkInterface, int a_X, int a_Y, int a_Z)
+ static void ChangeDoor(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
{
- NIBBLETYPE OldMetaData = a_ChunkInterface.GetBlockMeta(a_X, a_Y, a_Z);
-
- a_ChunkInterface.SetBlockMeta(a_X, a_Y, a_Z, ChangeStateMetaData(OldMetaData));
-
- if (OldMetaData & 8)
- {
- // Current block is top of the door
- BLOCKTYPE BottomBlock = a_ChunkInterface.GetBlock(a_X, a_Y - 1, a_Z);
- NIBBLETYPE BottomMeta = a_ChunkInterface.GetBlockMeta(a_X, a_Y - 1, a_Z);
-
- if (IsDoor(BottomBlock) && !(BottomMeta & 8))
- {
- a_ChunkInterface.SetBlockMeta(a_X, a_Y - 1, a_Z, ChangeStateMetaData(BottomMeta));
- }
- }
- else
- {
- // Current block is bottom of the door
- BLOCKTYPE TopBlock = a_ChunkInterface.GetBlock(a_X, a_Y + 1, a_Z);
- NIBBLETYPE TopMeta = a_ChunkInterface.GetBlockMeta(a_X, a_Y + 1, a_Z);
-
- if (IsDoor(TopBlock) && (TopMeta & 8))
- {
- a_ChunkInterface.SetBlockMeta(a_X, a_Y + 1, a_Z, ChangeStateMetaData(TopMeta));
- }
- }
+ SetOpen(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ, !IsOpen(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ));
}
} ;
--
cgit v1.2.3
From 376d5e7ff0d2daab13aee0bf184a3ef5375bd1e6 Mon Sep 17 00:00:00 2001
From: Mattes D
Date: Fri, 30 May 2014 22:31:51 +0200
Subject: Initial commit of the Generator article.
---
docs/Generator.html | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 119 insertions(+)
create mode 100644 docs/Generator.html
diff --git a/docs/Generator.html b/docs/Generator.html
new file mode 100644
index 000000000..f71ce1c71
--- /dev/null
+++ b/docs/Generator.html
@@ -0,0 +1,119 @@
+
+
+Generating terrain in MCServer
+
+
+Generating terrain in MCServer
+This article explains the principles behind the terrain generator in MCServer. It is not strictly
+specific to MCServer, though, it can be viewed as a generic guide to various terrain-generating algorithms,
+with specific implementation notes regarding MCServer.
+
+Preface: How it's done in real life
+The nature has many complicated geological, physical and biological processes working on all scales from
+microscopic to planet-wide scale, that have shaped the terrain into what we see today. The tectonic plates
+collide, push mountain ranges up and ocean trenches down. Erosion dulls the sharp shapes. Plantlife takes
+over to further change the overall look of the world.
+Generally speaking, the processes take what's there and change it. Unlike computer generating, which
+usually creates a finished terrain from scratch, or maybe with only a few iterations. It would be unfeasible
+for software to emulate all the natural processes in enough detail to provide world generation for a game,
+mainly because in the nature everything interacts with everything. If a mountain range rises, it changes the
+way that the precipitation is carried by the wind to the lands beyond the mountains, thus changing the
+erosion rate there and the vegetation type.
+
+Expected properties
+For a MineCraft-like game terrain generator we need the generator to have several properties:
+
+- The generator must be able to generate terrain in small chunks. This means it must be possible to
+generate each of the chunks separately, without dependencies on the neighboring chunks. Note that this
+doesn't mean chunks cannot coordinate together, it means that "a tree in one chunk cannot ask if there's
+a building in the neighbor chunk", simply because the neighbor chunk may not be generated yet.
+- The generated chunk needs to be the same if re-generated. This property is not exactly required, but it
+makes available several techniques that wouldn't be possible otherwise.
+- The generator needs to be reasonably fast. For a server application this means at least some 20 chunks
+per second for chunks close to each other, and 5 chunks per second for distant chunks. The reason for this
+distinction will be discussed later.
+
+
+
+Reversing the flow
+As already mentioned, the nature works basically by generating raw terrain composition, then "applying"
+erosion, vegetation and finally this leads to biomes being formed. Let's now try a somewhat inverse
+approach: First generate biomes, then fit them with appropriate terrain, and finally cover in vegetation
+and all the other stuff.
+Splitting the parts like this suddenly makes it possible to create a generator with the required
+properties. We can generate a reasonable biome map chunk-wise, independently of all the other data. Once we
+have the biomes, we can compose the terrain for the chunk by using the biome data for the chunk, and
+possibly even for neighboring chunks. Note that we're not breaking the first property, the biomes can be
+generated separately so a neighboring chunk's biome map can be generated without the need for the entire
+neighboring chunk to be present. Similarly, once we have the terrain composition for a chunk, we can
+generate all the vegetation and structures in it, and those can again use the terrain composition in
+neighboring chunks.
+
+The ComposableGenerator pipeline
+This leads us directly to the main pipeline that is used for generating terrain in MCServer. For
+technical reasons, the terrain composition step is further subdivided into Height generation and Composition
+generation, and the structures are really called Finishers. For each chunk the generator generates, in this
+sequence:
+
+- Biomes
+- Terrain height
+- Terrain composition
+- Finishers
+
+
+
+
+
+
+The beautiful thing about this is that the individual components can be changed independently. You can
+have 5 biome generators and 3 height generators and you can let the users mix'n'match.
+
+
+Using coherent noise for the generation
+For a great tutorial on coherent noise, see the LibNoise
+documentation.
+Coherent noise is a type of noise that has three important properties that we can use to our advantage:
+
+- The noise is smooth
+- The noise is algorithmically generated, which means that the same data is generated when the same
+parameters are given to the noise functions.
+- The noise can be seamlessly extended in any direction
+
+We'll be mostly using Perlin noise in this article. It is the easiest one to visualise and use and is one
+of the most useful kinds of coherent noises. Here's an example of a Perlin noise generated in 2 dimensions:
+
+It comes only naturally that such a 2D noise can be used as a terrain height map directly:
+
+However, this is not the only use for this noise, and 2 dimensions is not the limit - this noise can be
+generated for any number of dimensions.
+
+Generating biomes
+The easiest way to generate biomes is to not generate at all - simply assign a single constant biome to
+everywhere. And indeed there are times when this kind of "generator" is useful - for the MineCraft's Flat
+world type, or for testing purposes, or for tematic maps. In MCServer, this is exactly what the Constant
+biome generator does.
+Of course, there are more interesting test scenarios for which multiple biomes must be generated as easy
+as possible. For these special needs, there's a CheckerBoard biome generator. As the name suggests, it
+generates a grid of biomes.
+Voronoi diagram
+These two generators are more of a technicality, we need to make something more interesting if we're
+going for a natural look. The Voronoi generator is the first step towards such a change. Recall that a
+Voronoi diagram is a construct that creates a
+set of areas where each point in an area is closer to the appropriate seed of the area than the seeds of any
+other area:
+
+The overall shape of a Voronoi diagram is governed by the placement of the seeds. In extreme cases, a
+seed could affect the entire diagram, which is what we don't want - we need our locality, so that we can
+generate a chunk's worth of biome data. We also don't want the too much irregular diagrams that are produced
+when the seeds are in small clusters. We need our seeds to come in random, yet somewhat uniform fashion.
+Luckily, we have just the tool: Grid with jitter. Originally used in antialiasing techniques, they can be
+successfully applied as a source of the seeds for a Voronoi diagram. Simply take a regular 2D grid of seeds
+with the grid distance being N, and move each seed along the X and Y axis by a random distance, usually in
+the range [-N / 2, +N / 2]:
+
+Such a grid is the ideal seed source for a Voronoi biome generator, because not
+only are the Voronoi cells "reasonable", but the seed placement's effect on the diagram is localized - each
+pixel in the diagram depends on at most 5 x 5 seeds around it:
+
+
+
--
cgit v1.2.3
From 8bf7aed67cb59edd72662114244da5c1cf5f2140 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 22:40:19 +0200
Subject: Updated PlainsVillage and AlchemistVillage.
---
src/Generating/Prefabs/AlchemistVillagePrefabs.cpp | 603 +++++++++-----
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 906 ++++++++++++++++++++-
2 files changed, 1270 insertions(+), 239 deletions(-)
diff --git a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
index 32ffe5b88..6e3f82212 100644
--- a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
@@ -20,24 +20,25 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
// The data has been exported from the gallery Desert, area index 82, ID 598, created by STR_Warrior
{
// Size:
- 11, 12, 9, // SizeX = 11, SizeY = 12, SizeZ = 9
+ 11, 12, 10, // SizeX = 11, SizeY = 12, SizeZ = 10
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 11, 8, // MaxX, MaxY, MaxZ
+ 10, 11, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A:101: 0\n" /* ironbars */
- "B: 64:12\n" /* wooddoorblock */
- "C:128: 2\n" /* sandstonestairs */
- "D: 24: 1\n" /* sandstone */
- "E: 44: 9\n" /* step */
- "F:126: 8\n" /* woodenslab */
- "G:128: 7\n" /* sandstonestairs */
- "H: 44: 1\n" /* step */
- "I: 64: 7\n" /* wooddoorblock */
- "J:128: 6\n" /* sandstonestairs */
+ "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 */
@@ -62,8 +63,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"v:134: 7\n" /* 134 */
"w:107: 5\n" /* fencegate */
"x: 64: 5\n" /* wooddoorblock */
- "y: 50: 3\n" /* torch */
- "z:171: 8\n" /* carpet */,
+ "y: 65: 3\n" /* ladder */
+ "z: 50: 3\n" /* torch */,
// Block data:
// Level 0
@@ -78,6 +79,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "aabbbbbbbaa"
/* 7 */ "aabbbbbbbaa"
/* 8 */ "aaaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaa"
// Level 1
/* z\x* 1 */
@@ -91,6 +93,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "cb.......bc"
/* 7 */ "cbg......bc"
/* 8 */ "cbbbbbbbbbc"
+ /* 9 */ "ccccccccccc"
// Level 2
/* z\x* 1 */
@@ -104,6 +107,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "cb.......bc"
/* 7 */ "cbg......bc"
/* 8 */ "cbbbbbbbbbc"
+ /* 9 */ "ccccccccccc"
// Level 3
/* z\x* 1 */
@@ -117,6 +121,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "cb.......bc"
/* 7 */ "cbg..l...bc"
/* 8 */ "cbbbbbbbbbc"
+ /* 9 */ "ccccccccccc"
// Level 4
/* z\x* 1 */
@@ -130,6 +135,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "cnnnnnnnnnc"
/* 7 */ "cnonnnnnnnc"
/* 8 */ "cnccccccccc"
+ /* 9 */ "ccccccccccc"
// Level 5
/* z\x* 1 */
@@ -143,6 +149,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "bfvvd.....b"
/* 7 */ "b...w..kujb"
/* 8 */ "pxbbbbbbbbp"
+ /* 9 */ "..y........"
// Level 6
/* z\x* 1 */
@@ -150,38 +157,41 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "...p...p..."
/* 1 */ "..........."
/* 2 */ "pbbb...bbbp"
- /* 3 */ "b..y...y..b"
- /* 4 */ "b.z.....z.b"
- /* 5 */ "A.........A"
+ /* 3 */ "b..z...z..b"
+ /* 4 */ "b.A.....A.b"
+ /* 5 */ "B.........B"
/* 6 */ "b.........b"
- /* 7 */ "b.......z.b"
- /* 8 */ "pBbbAAAbbbp"
+ /* 7 */ "b.......A.b"
+ /* 8 */ "pCbbBBBbbbp"
+ /* 9 */ "..y........"
// Level 7
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "...C...C..."
- /* 1 */ "...D...b..."
- /* 2 */ "pbbbqEsbbbp"
- /* 3 */ "bFFFFFFFFFb"
- /* 4 */ "bFFFFFFFFFb"
- /* 5 */ "sFFFFFFFFFq"
- /* 6 */ "bFFFFFFFFFb"
- /* 7 */ "bFFFFFFFFFb"
- /* 8 */ "pbbbGGGbbbp"
+ /* 0 */ "...D...D..."
+ /* 1 */ "...E...b..."
+ /* 2 */ "pbbbqFsbbbp"
+ /* 3 */ "bGGGGGGGGGb"
+ /* 4 */ "bGGGGGGGGGb"
+ /* 5 */ "sGGGGGGGGGq"
+ /* 6 */ "bGGGGGGGGGb"
+ /* 7 */ "bGGGGGGGGGb"
+ /* 8 */ "pbbbHHHbbbp"
+ /* 9 */ "..y........"
// Level 8
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "bHHHHbHHHHb"
- /* 3 */ "HpbbbbbbbpH"
- /* 4 */ "Hb.......bH"
+ /* 2 */ "bIIIIbIIIIb"
+ /* 3 */ "IpbbbbbbbpI"
+ /* 4 */ "Ib.......bI"
/* 5 */ "bb.......bb"
- /* 6 */ "Hb.......bH"
- /* 7 */ "HpIbbbbbbpH"
- /* 8 */ "bH.HHbHHHHb"
+ /* 6 */ "Ib.......bI"
+ /* 7 */ "IpJbbbbbbpI"
+ /* 8 */ "bI.IIbIIIIb"
+ /* 9 */ "..........."
// Level 9
/* z\x* 1 */
@@ -189,12 +199,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ ".pbbAAAbbp."
+ /* 3 */ ".pbbBBBbbp."
/* 4 */ ".b.......b."
- /* 5 */ ".A.......A."
+ /* 5 */ ".B.......B."
/* 6 */ ".b.......b."
- /* 7 */ ".pBbAAAbbp."
+ /* 7 */ ".pCbBBBbbp."
/* 8 */ "..........."
+ /* 9 */ "..........."
// Level 10
/* z\x* 1 */
@@ -202,12 +213,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ ".pbbJJJbbp."
- /* 4 */ ".bFFFFFFFb."
- /* 5 */ ".sFFFFFFFq."
- /* 6 */ ".bFFFFFFFb."
- /* 7 */ ".pbbGGGbbp."
+ /* 3 */ ".pbbKKKbbp."
+ /* 4 */ ".bGGGGGGGb."
+ /* 5 */ ".sGGGGGGGq."
+ /* 6 */ ".bGGGGGGGb."
+ /* 7 */ ".pbbHHHbbp."
/* 8 */ "..........."
+ /* 9 */ "..........."
// Level 11
/* z\x* 1 */
@@ -215,12 +227,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ ".bHHHbHHHb."
- /* 4 */ ".H.......H."
+ /* 3 */ ".bIIIbIIIb."
+ /* 4 */ ".I.......I."
/* 5 */ ".b.......b."
- /* 6 */ ".H.......H."
- /* 7 */ ".bHHHbHHHb."
- /* 8 */ "...........",
+ /* 6 */ ".I.......I."
+ /* 7 */ ".bIIIbIIIb."
+ /* 8 */ "..........."
+ /* 9 */ "...........",
// Connectors:
"-1: 5, 5, 0: 2\n" /* Type -1, direction Z- */,
@@ -235,7 +248,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 70,
// DepthWeight:
"",
@@ -254,18 +267,19 @@ 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, 9, // SizeX = 11, SizeY = 8, SizeZ = 9
+ 11, 8, 10, // SizeX = 11, SizeY = 8, SizeZ = 10
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 7, 8, // MaxX, MaxY, MaxZ
+ 10, 7, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A: 44: 1\n" /* step */
- "B: 64: 3\n" /* wooddoorblock */
- "C: 64: 8\n" /* wooddoorblock */
- "D:128: 6\n" /* sandstonestairs */
+ "A:128: 7\n" /* sandstonestairs */
+ "B: 44: 1\n" /* step */
+ "C: 64: 3\n" /* wooddoorblock */
+ "D: 64: 8\n" /* wooddoorblock */
+ "E:128: 6\n" /* sandstonestairs */
"a: 12: 0\n" /* sand */
"b: 5: 0\n" /* wood */
"c: 24: 2\n" /* sandstone */
@@ -283,15 +297,15 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"o:134: 4\n" /* 134 */
"p:107: 5\n" /* fencegate */
"q: 64: 5\n" /* wooddoorblock */
- "r: 50: 3\n" /* torch */
- "s:171: 8\n" /* carpet */
- "t:101: 0\n" /* ironbars */
- "u: 64:12\n" /* wooddoorblock */
- "v:128: 2\n" /* sandstonestairs */
- "w: 24: 1\n" /* sandstone */
- "x: 44: 9\n" /* step */
- "y:126: 8\n" /* woodenslab */
- "z:128: 7\n" /* sandstonestairs */,
+ "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 */,
// Block data:
// Level 0
@@ -306,6 +320,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "abbbbbbbbba"
/* 7 */ "abbbbbbbbba"
/* 8 */ "abaaaaaaaaa"
+ /* 9 */ "aaaaaaaaaaa"
// Level 1
/* z\x* 1 */
@@ -319,6 +334,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 6 */ "dlnno.....d"
/* 7 */ "d...p..hjkd"
/* 8 */ "cqddddddddc"
+ /* 9 */ "..r........"
// Level 2
/* z\x* 1 */
@@ -326,38 +342,41 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "...c...c..."
/* 1 */ "..........."
/* 2 */ "cddd...dddc"
- /* 3 */ "d..r...r..d"
- /* 4 */ "d.s.....s.d"
- /* 5 */ "t.........t"
+ /* 3 */ "d..s...s..d"
+ /* 4 */ "d.t.....t.d"
+ /* 5 */ "u.........u"
/* 6 */ "d.........d"
- /* 7 */ "d.......s.d"
- /* 8 */ "cuddtttdddc"
+ /* 7 */ "d.......t.d"
+ /* 8 */ "cvdduuudddc"
+ /* 9 */ "..r........"
// Level 3
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "...v...v..."
- /* 1 */ "...w...d..."
- /* 2 */ "cdddexgdddc"
- /* 3 */ "dyyyyyyyyyd"
- /* 4 */ "dyyyyyyyyyd"
- /* 5 */ "gyyyyyyyyye"
- /* 6 */ "dyyyyyyyyyd"
- /* 7 */ "dyyyyyyyyyd"
- /* 8 */ "cdddzzzdddc"
+ /* 0 */ "...w...w..."
+ /* 1 */ "...x...d..."
+ /* 2 */ "cdddeygdddc"
+ /* 3 */ "dzzzzzzzzzd"
+ /* 4 */ "dzzzzzzzzzd"
+ /* 5 */ "gzzzzzzzzze"
+ /* 6 */ "dzzzzzzzzzd"
+ /* 7 */ "dzzzzzzzzzd"
+ /* 8 */ "cdddAAAdddc"
+ /* 9 */ "..r........"
// Level 4
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
- /* 2 */ "dAAAAdAAAAd"
- /* 3 */ "AcdddddddcA"
- /* 4 */ "Ad.......dA"
+ /* 2 */ "dBBBBdBBBBd"
+ /* 3 */ "BcdddddddcB"
+ /* 4 */ "Bd.......dB"
/* 5 */ "dd.......dd"
- /* 6 */ "Ad.......dA"
- /* 7 */ "AcBddddddcA"
- /* 8 */ "dA.AAdAAAAd"
+ /* 6 */ "Bd.......dB"
+ /* 7 */ "BcCddddddcB"
+ /* 8 */ "dB.BBdBBBBd"
+ /* 9 */ "..........."
// Level 5
/* z\x* 1 */
@@ -365,12 +384,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ ".cddtttddc."
+ /* 3 */ ".cdduuuddc."
/* 4 */ ".d.......d."
- /* 5 */ ".t.......t."
+ /* 5 */ ".u.......u."
/* 6 */ ".d.......d."
- /* 7 */ ".cCdtttddc."
+ /* 7 */ ".cDduuuddc."
/* 8 */ "..........."
+ /* 9 */ "..........."
// Level 6
/* z\x* 1 */
@@ -378,12 +398,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ ".cddDDDddc."
- /* 4 */ ".dyyyyyyyd."
- /* 5 */ ".gyyyyyyye."
- /* 6 */ ".dyyyyyyyd."
- /* 7 */ ".cddzzzddc."
+ /* 3 */ ".cddEEEddc."
+ /* 4 */ ".dzzzzzzzd."
+ /* 5 */ ".gzzzzzzze."
+ /* 6 */ ".dzzzzzzzd."
+ /* 7 */ ".cddAAAddc."
/* 8 */ "..........."
+ /* 9 */ "..........."
// Level 7
/* z\x* 1 */
@@ -391,12 +412,13 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
- /* 3 */ ".dAAAdAAAd."
- /* 4 */ ".A.......A."
+ /* 3 */ ".dBBBdBBBd."
+ /* 4 */ ".B.......B."
/* 5 */ ".d.......d."
- /* 6 */ ".A.......A."
- /* 7 */ ".dAAAdAAAd."
- /* 8 */ "...........",
+ /* 6 */ ".B.......B."
+ /* 7 */ ".dBBBdBBBd."
+ /* 8 */ "..........."
+ /* 9 */ "...........",
// Connectors:
"-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */,
@@ -411,7 +433,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 80,
// DepthWeight:
"",
@@ -427,7 +449,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// BlackSmith:
- // The data has been exported from the gallery Desert, area index 92, ID 633, created by STR_Warrior
+ // 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
@@ -460,7 +482,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"t:128: 4\n" /* sandstonestairs */
"u:128: 5\n" /* sandstonestairs */
"v:128: 7\n" /* sandstonestairs */
- "w: 44: 1\n" /* step */,
+ "w: 44: 1\n" /* step */
+ "x: 43: 1\n" /* doubleslab */,
// Block data:
// Level 0
@@ -469,7 +492,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "aaaaaaaaaaa"
/* 1 */ "aaaaaaaaaaa"
/* 2 */ "aaaaaaaabaa"
- /* 3 */ "acaaacabbba"
+ /* 3 */ "acacacabbba"
/* 4 */ "acaccaabbba"
/* 5 */ "acccccabbba"
/* 6 */ "acaadddbbba"
@@ -487,9 +510,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 1 */ "..........."
/* 2 */ "......dcecd"
/* 3 */ ".d....c...c"
- /* 4 */ "......c...c"
- /* 5 */ "...f..c...c"
- /* 6 */ ".....dc...c"
+ /* 4 */ "..f...c...c"
+ /* 5 */ "......c...c"
+ /* 6 */ "....ddc...c"
/* 7 */ ".gh.dic...c"
/* 8 */ "dcccccd...c"
/* 9 */ "cj........c"
@@ -506,8 +529,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 3 */ ".d....c..lc"
/* 4 */ "......n...c"
/* 5 */ "......c...c"
- /* 6 */ "......c...n"
- /* 7 */ "......c...n"
+ /* 6 */ "....nnc...n"
+ /* 7 */ "....n.c...n"
/* 8 */ "dcccccd...n"
/* 9 */ "co........c"
/* 10 */ "n.........c"
@@ -523,8 +546,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 3 */ ".drrrrcsssc"
/* 4 */ ".rsssstsssc"
/* 5 */ ".rsssscsssc"
- /* 6 */ ".rsssscsssu"
- /* 7 */ ".rsssscsssu"
+ /* 6 */ ".rssddcsssu"
+ /* 7 */ ".rssd.csssu"
/* 8 */ "dcccccdsssu"
/* 9 */ "csssssssssc"
/* 10 */ "tsssssssssc"
@@ -540,9 +563,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 3 */ ".w.w.ww...w"
/* 4 */ "......w...w"
/* 5 */ ".w....w...w"
- /* 6 */ "......w...w"
- /* 7 */ ".w....w...c"
- /* 8 */ "cwwwwwc...w"
+ /* 6 */ "....xwx...w"
+ /* 7 */ ".w..w.w...c"
+ /* 8 */ "cwwwxwc...w"
/* 9 */ "w.........w"
/* 10 */ "w.........w"
/* 11 */ "w.........w"
@@ -561,7 +584,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 50,
// DepthWeight:
"",
@@ -588,12 +611,14 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
// Block definitions:
".: 0: 0\n" /* air */
- "A:128: 2\n" /* sandstonestairs */
- "B:128: 0\n" /* sandstonestairs */
- "C: 87: 0\n" /* netherstone */
- "D:128: 3\n" /* sandstonestairs */
- "E: 51: 0\n" /* fire */
- "F: 44: 9\n" /* step */
+ "A:128: 7\n" /* sandstonestairs */
+ "B: 44: 1\n" /* step */
+ "C:128: 2\n" /* sandstonestairs */
+ "D:128: 0\n" /* sandstonestairs */
+ "E: 87: 0\n" /* netherstone */
+ "F:128: 3\n" /* sandstonestairs */
+ "G: 51: 0\n" /* fire */
+ "H: 44: 9\n" /* step */
"a: 12: 0\n" /* sand */
"b: 5: 0\n" /* wood */
"c: 24: 2\n" /* sandstone */
@@ -610,16 +635,16 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"n:101: 0\n" /* ironbars */
"o:140: 0\n" /* flowerpotblock */
"p: 64: 8\n" /* wooddoorblock */
- "q: 69:12\n" /* lever */
- "r: 44:10\n" /* step */
- "s:128: 1\n" /* sandstonestairs */
- "t: 47: 0\n" /* bookshelf */
- "u: 96:12\n" /* trapdoor */
- "v:128: 4\n" /* sandstonestairs */
- "w:128: 5\n" /* sandstonestairs */
- "x:128: 7\n" /* sandstonestairs */
- "y: 44: 1\n" /* step */
- "z:128: 6\n" /* sandstonestairs */,
+ "q: 50: 3\n" /* torch */
+ "r: 69:12\n" /* lever */
+ "s: 50: 4\n" /* torch */
+ "t:128: 6\n" /* sandstonestairs */
+ "u: 44:10\n" /* step */
+ "v:128: 1\n" /* sandstonestairs */
+ "w: 47: 0\n" /* bookshelf */
+ "x: 96:12\n" /* trapdoor */
+ "y:128: 4\n" /* sandstonestairs */
+ "z:128: 5\n" /* sandstonestairs */,
// Block data:
// Level 0
@@ -657,9 +682,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "....cddnnnddc.."
/* 1 */ "....d......od.c"
- /* 2 */ "....p.......d.."
+ /* 2 */ "....p.......d.q"
/* 3 */ "....d.......p.."
- /* 4 */ "....d.q...l.d.."
+ /* 4 */ "....d.r...l.d.s"
/* 5 */ "....dddd.dddd.c"
/* 6 */ "....n.......n.."
/* 7 */ "mmmmn.......n.."
@@ -670,32 +695,32 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
// Level 3
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "....cdddddddc.."
- /* 1 */ "....drrrrrrrdds"
- /* 2 */ "....drrrrrrrd.."
- /* 3 */ "....drrrrrrrd.."
- /* 4 */ "....dtttrrurd.."
- /* 5 */ "....dddddddddds"
- /* 6 */ "....vrrrrrrrw.."
- /* 7 */ "mmmmvrrrrrrrw.."
- /* 8 */ "mmmmvrrrrrrrw.."
- /* 9 */ "mmmmdrrrrrrrd.."
- /* 10 */ "mmmmcddxxxddc.."
+ /* 0 */ "....cddtttddc.."
+ /* 1 */ "....duuuuuuuddv"
+ /* 2 */ "....duuuuuuud.."
+ /* 3 */ "....duuuuuuud.."
+ /* 4 */ "....dwwwuuxud.."
+ /* 5 */ "....ddddddddddv"
+ /* 6 */ "....yuuuuuuuz.."
+ /* 7 */ "mmmmyuuuuuuuz.."
+ /* 8 */ "mmmmyuuuuuuuz.."
+ /* 9 */ "mmmmduuuuuuud.."
+ /* 10 */ "mmmmcddAAAddc.."
// Level 4
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "....dyyydyyyd.."
- /* 1 */ "....ycdddddcy.."
- /* 2 */ "....yd.....dy.."
- /* 3 */ "....yd.....dy.."
- /* 4 */ "....yd.....dy.."
+ /* 0 */ "....dBBBdBBBd.."
+ /* 1 */ "....BcdddddcB.."
+ /* 2 */ "....Bd.....dB.."
+ /* 3 */ "....Bd.....dB.."
+ /* 4 */ "....Bd.....dB.."
/* 5 */ "....dcdd.ddcd.."
- /* 6 */ "....y.......y.."
- /* 7 */ "mmmmy.......y.."
- /* 8 */ "mmmmy.......y.."
- /* 9 */ "mmmmy.......y.."
- /* 10 */ "mmmmdyyydyyyd.."
+ /* 6 */ "....B.......B.."
+ /* 7 */ "mmmmB.......B.."
+ /* 8 */ "mmmmB.......B.."
+ /* 9 */ "mmmmB.......B.."
+ /* 10 */ "mmmmdBBBdBBBd.."
// Level 5
/* z\x* 11111 */
@@ -716,10 +741,10 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".....cddzddc..."
- /* 2 */ ".....vrrrrrw..."
- /* 3 */ ".....vrrrrrw..."
- /* 4 */ ".....vrrrrrw..."
+ /* 1 */ ".....cddtddc..."
+ /* 2 */ ".....yuuuuuz..."
+ /* 3 */ ".....yuuuuuz..."
+ /* 4 */ ".....yuuuuuz..."
/* 5 */ ".....cdddddc..."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -731,11 +756,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".....dyydyyd..."
- /* 2 */ ".....y.ddd.y..."
+ /* 1 */ ".....dBBdBBd..."
+ /* 2 */ ".....B.ddd.B..."
/* 3 */ ".....d.ddd.d..."
- /* 4 */ ".....y.ddd.y..."
- /* 5 */ ".....dyydyyd..."
+ /* 4 */ ".....B.ddd.B..."
+ /* 5 */ ".....dBBdBBd..."
/* 6 */ "..............."
/* 7 */ "..............."
/* 8 */ "..............."
@@ -747,9 +772,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ ".......cAc....."
- /* 3 */ ".......BCs....."
- /* 4 */ ".......cDc....."
+ /* 2 */ ".......cCc....."
+ /* 3 */ ".......DEv....."
+ /* 4 */ ".......cFc....."
/* 5 */ "..............."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -763,7 +788,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..............."
/* 1 */ "..............."
/* 2 */ ".......c.c....."
- /* 3 */ "........E......"
+ /* 3 */ "........G......"
/* 4 */ ".......c.c....."
/* 5 */ "..............."
/* 6 */ "..............."
@@ -777,9 +802,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ ".......c.c....."
- /* 3 */ "..............."
- /* 4 */ ".......c.c....."
+ /* 2 */ ".......ctc....."
+ /* 3 */ ".......y.z....."
+ /* 4 */ ".......cAc....."
/* 5 */ "..............."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -793,7 +818,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..............."
/* 1 */ "..............."
/* 2 */ ".......ddd....."
- /* 3 */ ".......dFd....."
+ /* 3 */ ".......dHd....."
/* 4 */ ".......ddd....."
/* 5 */ "..............."
/* 6 */ "..............."
@@ -807,9 +832,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ ".......y.y....."
+ /* 2 */ ".......B.B....."
/* 3 */ "..............."
- /* 4 */ ".......y.y....."
+ /* 4 */ ".......B.B....."
/* 5 */ "..............."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -830,7 +855,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 60,
// DepthWeight:
"",
@@ -1169,7 +1194,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 3 */ "abbbbba"
/* 4 */ "abbbbba"
/* 5 */ "abbbbba"
- /* 6 */ "aaaaaaa"
+ /* 6 */ "aabaaaa"
/* 7 */ "aaaaaaa"
/* 8 */ "aaaaaaa"
/* 9 */ "aaaaaaa"
@@ -1384,7 +1409,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"b: 5: 0\n" /* wood */
"c: 24: 2\n" /* sandstone */
"d: 24: 0\n" /* sandstone */
- "e: 64: 3\n" /* wooddoorblock */
+ "e: 64: 7\n" /* wooddoorblock */
"f: 65: 5\n" /* ladder */
"g:134: 3\n" /* 134 */
"h: 85: 0\n" /* fence */
@@ -1393,16 +1418,17 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"k:134: 6\n" /* 134 */
"l:134: 4\n" /* 134 */
"m: 19: 0\n" /* sponge */
- "n: 64: 8\n" /* wooddoorblock */
+ "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: 5\n" /* sandstonestairs */
- "u:128: 7\n" /* sandstonestairs */
- "v: 44: 1\n" /* step */
- "w: 96: 7\n" /* trapdoor */,
+ "t:128: 4\n" /* sandstonestairs */
+ "u:128: 5\n" /* sandstonestairs */
+ "v:128: 7\n" /* sandstonestairs */
+ "w: 44: 1\n" /* step */
+ "x: 96: 7\n" /* trapdoor */,
// Block data:
// Level 0
@@ -1454,26 +1480,26 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 2 */ "cdddc"
/* 3 */ "dfssd"
/* 4 */ "dsssd"
- /* 5 */ "tssst"
- /* 6 */ "tssst"
- /* 7 */ "tssst"
+ /* 5 */ "tsssu"
+ /* 6 */ "tsssu"
+ /* 7 */ "tsssu"
/* 8 */ "dsssd"
/* 9 */ "dsssd"
- /* 10 */ "cdudc"
+ /* 10 */ "cdvdc"
// Level 4
/* z\x* 01234 */
/* 0 */ "....."
/* 1 */ "....."
- /* 2 */ "dvdvd"
- /* 3 */ "vw..v"
- /* 4 */ "v...v"
- /* 5 */ "v...v"
+ /* 2 */ "dwdwd"
+ /* 3 */ "wx..w"
+ /* 4 */ "w...w"
+ /* 5 */ "w...w"
/* 6 */ "d...d"
- /* 7 */ "v...v"
- /* 8 */ "v...v"
- /* 9 */ "v...v"
- /* 10 */ "dvdvd",
+ /* 7 */ "w...w"
+ /* 8 */ "w...w"
+ /* 9 */ "w...w"
+ /* 10 */ "dwdwd",
// Connectors:
"-1: 2, 1, 0: 2\n" /* Type -1, direction Z- */,
@@ -2050,7 +2076,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"o:128: 4\n" /* sandstonestairs */
"p:128: 7\n" /* sandstonestairs */
"q: 44: 1\n" /* step */
- "r: 50: 3\n" /* torch */,
+ "r: 50: 3\n" /* torch */
+ "s:128: 6\n" /* sandstonestairs */,
// Block data:
// Level 0
@@ -2137,11 +2164,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..............."
/* 1 */ "..............."
/* 2 */ "..............."
- /* 3 */ "...cdddc......."
+ /* 3 */ "...cdsdc......."
/* 4 */ "...dnnnd......."
/* 5 */ "...dnnnd......."
/* 6 */ "...dnnnd......."
- /* 7 */ "...cdddc......."
+ /* 7 */ "...cdpdc......."
/* 8 */ "..............."
// Level 7
@@ -2170,7 +2197,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 80,
// DepthWeight:
"",
@@ -2364,7 +2391,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 80,
// DepthWeight:
"",
@@ -2582,7 +2609,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 80,
// DepthWeight:
"",
@@ -2690,7 +2717,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* z\x* 012345678 */
/* 0 */ "mmmm....."
/* 1 */ "mmmm....."
- /* 2 */ "mmmmcrdrd"
+ /* 2 */ "mmmmdrdrd"
/* 3 */ "mmmmr...r"
/* 4 */ "mmmmr...r"
/* 5 */ "mmmmr...r"
@@ -2724,6 +2751,192 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
// MoveToGround:
true,
}, // SmallHouse9
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Temple:
+ // 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
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 12, 8, 8, // 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 */
+ "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 */,
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // 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"
+
+ // Level 5
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "..csc...csc.."
+ /* 5 */ "..vwx...vwx.."
+ /* 6 */ "..cyc...cyc.."
+ /* 7 */ "............."
+ /* 8 */ "............."
+
+ // Level 6
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "..c.c...c.c.."
+ /* 5 */ "...z.....z..."
+ /* 6 */ "..c.c...c.c.."
+ /* 7 */ "............."
+ /* 8 */ "............."
+
+ // Level 7
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "..ddd...ddd.."
+ /* 5 */ "..dAd...dAd.."
+ /* 6 */ "..ddd...ddd.."
+ /* 7 */ "............."
+ /* 8 */ "............."
+
+ // Level 8
+ /* z\x* 111 */
+ /* * 0123456789012 */
+ /* 0 */ "............."
+ /* 1 */ "............."
+ /* 2 */ "............."
+ /* 3 */ "............."
+ /* 4 */ "..u.u...u.u.."
+ /* 5 */ "............."
+ /* 6 */ "..u.u...u.u.."
+ /* 7 */ "............."
+ /* 8 */ ".............",
+
+ // Connectors:
+ "-1: 6, 1, 0: 2\n" /* Type -1, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 50,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ true,
+ }, // Temple
}; // g_AlchemistVillagePrefabs
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index f8cf867e5..f5e531955 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -797,8 +797,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
".: 0: 0\n" /* air */
"a: 5: 0\n" /* wood */
"b: 85: 0\n" /* fence */
- "c: 50: 2\n" /* torch */
- "d: 50: 1\n" /* torch */
+ "c: 66: 1\n" /* tracks */
+ "d: 50: 2\n" /* torch */
+ "e: 50: 1\n" /* torch */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -813,7 +814,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* */
/* * 0123456789 */
/* 0 */ "..b....b.."
- /* 1 */ ".........."
+ /* 1 */ "cccccccccc"
/* 2 */ "..b....b.."
// Level 2
@@ -827,14 +828,12 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* */
/* * 0123456789 */
/* 0 */ "..a....a.."
- /* 1 */ ".cad..cad."
+ /* 1 */ ".dae..dae."
/* 2 */ "..a....a..",
// Connectors:
"-3: 0, 1, 1: 4\n" /* Type -3, direction X- */
- "3: 0, 1, 1: 4\n" /* Type 3, direction X- */
- "3: 9, 1, 1: 5\n" /* Type 3, direction X+ */
- "-3: 9, 1, 1: 5\n" /* Type -3, direction X+ */,
+ "3: 9, 1, 1: 5\n" /* Type 3, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -874,6 +873,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Block definitions:
".: 0: 0\n" /* air */
"a: 5: 0\n" /* wood */
+ "b: 66: 0\n" /* tracks */
+ "c: 66: 1\n" /* tracks */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -887,11 +888,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 1
/* z\x* 01234 */
- /* 0 */ "m...m"
- /* 1 */ ".a.a."
- /* 2 */ "....."
- /* 3 */ ".a.a."
- /* 4 */ "m...m"
+ /* 0 */ "m.b.m"
+ /* 1 */ ".aba."
+ /* 2 */ "ccccc"
+ /* 3 */ ".aba."
+ /* 4 */ "m.b.m"
// Level 2
/* z\x* 01234 */
@@ -929,7 +930,125 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
false,
// DefaultWeight:
- 5,
+ 1,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftCrossing
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftCrossing:
+ // The data has been exported from the gallery Plains, area index 193, ID 657, created by Aloe_vera
+ {
+ // Size:
+ 11, 4, 11, // SizeX = 11, SizeY = 4, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 3, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 66: 0\n" /* tracks */
+ "c: 85: 0\n" /* fence */
+ "d: 66: 1\n" /* tracks */
+ "e: 50: 4\n" /* torch */
+ "f: 50: 3\n" /* torch */
+ "g: 50: 2\n" /* torch */
+ "h: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "mmmmaaammmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmmaaammmm"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "mmmmaaammmm"
+ /* 8 */ "mmmmaaammmm"
+ /* 9 */ "mmmmaaammmm"
+ /* 10 */ "mmmmaaammmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm.b.mmmm"
+ /* 1 */ "mmmm.b.mmmm"
+ /* 2 */ "mmmmcbcmmmm"
+ /* 3 */ "mmmm.b.mmmm"
+ /* 4 */ "..c..b..c.."
+ /* 5 */ "ddddddddddd"
+ /* 6 */ "..c..b..c.."
+ /* 7 */ "mmmm.b.mmmm"
+ /* 8 */ "mmmmcbcmmmm"
+ /* 9 */ "mmmm.b.mmmm"
+ /* 10 */ "mmmm.b.mmmm"
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm...mmmm"
+ /* 2 */ "mmmmc.cmmmm"
+ /* 3 */ "mmmm...mmmm"
+ /* 4 */ "..c.....c.."
+ /* 5 */ "..........."
+ /* 6 */ "..c.....c.."
+ /* 7 */ "mmmm...mmmm"
+ /* 8 */ "mmmmc.cmmmm"
+ /* 9 */ "mmmm...mmmm"
+ /* 10 */ "mmmm...mmmm"
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm.e.mmmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmm.f.mmmm"
+ /* 4 */ "..a.....a.."
+ /* 5 */ ".gah...gah."
+ /* 6 */ "..a.....a.."
+ /* 7 */ "mmmm.e.mmmm"
+ /* 8 */ "mmmmaaammmm"
+ /* 9 */ "mmmm.f.mmmm"
+ /* 10 */ "mmmm...mmmm",
+
+ // Connectors:
+ "3: 5, 1, 0: 2\n" /* Type 3, direction Z- */
+ "-3: 5, 1, 0: 2\n" /* Type -3, direction Z- */
+ "3: 0, 1, 5: 4\n" /* Type 3, direction X- */
+ "-3: 0, 1, 5: 4\n" /* Type -3, direction X- */
+ "3: 5, 1, 10: 3\n" /* Type 3, direction Z+ */
+ "-3: 5, 1, 10: 3\n" /* Type -3, direction Z+ */
+ "3: 10, 1, 5: 5\n" /* Type 3, direction X+ */
+ "-3: 10, 1, 5: 5\n" /* Type -3, direction X+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 10,
// DepthWeight:
"",
@@ -957,6 +1076,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Block definitions:
".: 0: 0\n" /* air */
"a: 5: 0\n" /* wood */
+ "b: 66: 0\n" /* tracks */
+ "c: 66: 1\n" /* tracks */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -970,11 +1091,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 1
/* z\x* 01234 */
- /* 0 */ "m...m"
- /* 1 */ ".a.a."
- /* 2 */ "....."
- /* 3 */ ".a.a."
- /* 4 */ "m...m"
+ /* 0 */ "m.b.m"
+ /* 1 */ ".aba."
+ /* 2 */ "ccccc"
+ /* 3 */ ".aba."
+ /* 4 */ "m.b.m"
// Level 2
/* z\x* 01234 */
@@ -1052,7 +1173,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
false,
// DefaultWeight:
- 5,
+ 1,
// DepthWeight:
"",
@@ -1066,6 +1187,703 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftSpiral:
+ // The data has been exported from the gallery Plains, area index 198, ID 662, created by Aloe_vera
+ {
+ // Size:
+ 7, 12, 7, // SizeX = 7, SizeY = 12, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 11, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 85: 0\n" /* fence */
+ "c: 66: 4\n" /* tracks */
+ "d: 66: 0\n" /* tracks */
+ "e: 66: 6\n" /* tracks */
+ "f: 66: 2\n" /* tracks */
+ "g: 50: 1\n" /* torch */
+ "h: 50: 3\n" /* torch */
+ "i: 66: 1\n" /* tracks */
+ "j: 66: 7\n" /* tracks */
+ "k: 66: 5\n" /* tracks */
+ "l: 50: 2\n" /* torch */
+ "m: 19: 0\n" /* sponge */
+ "n: 66: 3\n" /* tracks */
+ "o: 66: 8\n" /* tracks */
+ "p: 50: 4\n" /* torch */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmmmmm"
+ /* 2 */ "mmmmmmm"
+ /* 3 */ "aaabmmm"
+ /* 4 */ "aaammmm"
+ /* 5 */ "aaammmm"
+ /* 6 */ "aaammmm"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmmmmm"
+ /* 2 */ "aaammmm"
+ /* 3 */ "aaabmmm"
+ /* 4 */ ".c.mmmm"
+ /* 5 */ ".d.mmmm"
+ /* 6 */ ".d.mmmm"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "aaaammm"
+ /* 1 */ "aaaammm"
+ /* 2 */ "aaaammm"
+ /* 3 */ ".c.bmmm"
+ /* 4 */ "...mmmm"
+ /* 5 */ "...mmmm"
+ /* 6 */ "...mmmm"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "b..aamm"
+ /* 1 */ ".efaamm"
+ /* 2 */ ".d.aamm"
+ /* 3 */ "...bmmm"
+ /* 4 */ "...mmmm"
+ /* 5 */ "...mmmm"
+ /* 6 */ "...mmmm"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "b...aaa"
+ /* 1 */ "...faaa"
+ /* 2 */ "....aaa"
+ /* 3 */ "...baaa"
+ /* 4 */ "...mmmm"
+ /* 5 */ "mmmmmmm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "ag....b"
+ /* 1 */ "h...ij."
+ /* 2 */ ".....k."
+ /* 3 */ "...baaa"
+ /* 4 */ "mmmmaaa"
+ /* 5 */ "mmmmmmm"
+ /* 6 */ "mmmmmmm"
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "mm....b"
+ /* 1 */ "mm....."
+ /* 2 */ "mm....."
+ /* 3 */ "mmmb.k."
+ /* 4 */ "mmmaaaa"
+ /* 5 */ "mmmaaaa"
+ /* 6 */ "mmmaaaa"
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "mmm..la"
+ /* 1 */ "mmm...h"
+ /* 2 */ "mmm...."
+ /* 3 */ "mmmb..."
+ /* 4 */ "mmaa.d."
+ /* 5 */ "mmaano."
+ /* 6 */ "mmaa..b"
+
+ // Level 8
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmmmmm"
+ /* 2 */ "mmmm..."
+ /* 3 */ "mmmb..."
+ /* 4 */ "aaa...."
+ /* 5 */ "aaan..."
+ /* 6 */ "aaa...b"
+
+ // Level 9
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmmmmm"
+ /* 2 */ "mmmmmmm"
+ /* 3 */ "mmmb..."
+ /* 4 */ "......."
+ /* 5 */ "iii...p"
+ /* 6 */ ".....la"
+
+ // Level 10
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmmmmm"
+ /* 2 */ "mmmmmmm"
+ /* 3 */ "mmmbmmm"
+ /* 4 */ ".....mm"
+ /* 5 */ ".....mm"
+ /* 6 */ ".....mm"
+
+ // Level 11
+ /* z\x* 0123456 */
+ /* 0 */ "mmmmmmm"
+ /* 1 */ "mmmmmmm"
+ /* 2 */ "mmmmmmm"
+ /* 3 */ "mmmbmmm"
+ /* 4 */ "....mmm"
+ /* 5 */ "....mmm"
+ /* 6 */ "....mmm",
+
+ // Connectors:
+ "3: 1, 1, 6: 3\n" /* Type 3, direction Z+ */
+ "-3: 1, 1, 6: 3\n" /* Type -3, direction Z+ */
+ "3: 0, 9, 5: 4\n" /* Type 3, direction X- */
+ "-3: 0, 9, 5: 4\n" /* Type -3, direction X- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftSpiral
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftStairs:
+ // The data has been exported from the gallery Plains, area index 195, ID 659, created by Aloe_vera
+ {
+ // Size:
+ 7, 8, 3, // SizeX = 7, SizeY = 8, SizeZ = 3
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 6, 7, 2, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 66: 1\n" /* tracks */
+ "c: 66: 2\n" /* tracks */
+ "d: 85: 0\n" /* fence */
+ "e: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 0123456 */
+ /* 0 */ "aaammmm"
+ /* 1 */ "aaammmm"
+ /* 2 */ "aaammmm"
+
+ // Level 1
+ /* z\x* 0123456 */
+ /* 0 */ "..aammm"
+ /* 1 */ "bcaammm"
+ /* 2 */ "..aammm"
+
+ // Level 2
+ /* z\x* 0123456 */
+ /* 0 */ "...aamm"
+ /* 1 */ "..caamm"
+ /* 2 */ "...aamm"
+
+ // Level 3
+ /* z\x* 0123456 */
+ /* 0 */ "...daam"
+ /* 1 */ "...caam"
+ /* 2 */ "...daam"
+
+ // Level 4
+ /* z\x* 0123456 */
+ /* 0 */ "m..d.aa"
+ /* 1 */ "m...caa"
+ /* 2 */ "m..d.aa"
+
+ // Level 5
+ /* z\x* 0123456 */
+ /* 0 */ "mm.d..."
+ /* 1 */ "mm...bb"
+ /* 2 */ "mm.d..."
+
+ // Level 6
+ /* z\x* 0123456 */
+ /* 0 */ "mmmd..."
+ /* 1 */ "mmm...."
+ /* 2 */ "mmmd..."
+
+ // Level 7
+ /* z\x* 0123456 */
+ /* 0 */ "mmma..."
+ /* 1 */ "mmmae.."
+ /* 2 */ "mmma...",
+
+ // Connectors:
+ "3: 0, 1, 1: 4\n" /* Type 3, direction X- */
+ "-3: 0, 1, 1: 4\n" /* Type -3, direction X- */
+ "3: 6, 5, 1: 5\n" /* Type 3, direction X+ */
+ "-3: 6, 5, 1: 5\n" /* Type -3, direction X+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftStairs
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftStairsCrossing:
+ // The data has been exported from the gallery Plains, area index 199, ID 663, created by Aloe_vera
+ {
+ // Size:
+ 11, 12, 11, // SizeX = 11, SizeY = 12, SizeZ = 11
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 11, 10, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 66: 5\n" /* tracks */
+ "c: 85: 0\n" /* fence */
+ "d: 66: 0\n" /* tracks */
+ "e: 66: 1\n" /* tracks */
+ "f: 50: 3\n" /* torch */
+ "g: 50: 2\n" /* torch */
+ "h: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "mmmmaaammmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm.b.mmmm"
+ /* 1 */ "mmmmaaammmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm.b.mmmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmmaaammmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm...mmmm"
+ /* 2 */ "mmmmcbcmmmm"
+ /* 3 */ "mmmmaaammmm"
+ /* 4 */ "mmmmaaammmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 4
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm...mmmm"
+ /* 2 */ "mmmmc.cmmmm"
+ /* 3 */ "mmmm.b.mmmm"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+ /* 7 */ "mmmmaaammmm"
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmm...mmmm"
+ /* 2 */ "mmmmc.cmmmm"
+ /* 3 */ "mmmm...mmmm"
+ /* 4 */ "..c..d..c.."
+ /* 5 */ "eeeeeeeeeee"
+ /* 6 */ "..c..b..c.."
+ /* 7 */ "mmmmaaammmm"
+ /* 8 */ "mmmmaaammmm"
+ /* 9 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmc.cmmmm"
+ /* 3 */ "mmmm...mmmm"
+ /* 4 */ "..c.....c.."
+ /* 5 */ "..........."
+ /* 6 */ "..c.....c.."
+ /* 7 */ "mmmm.b.mmmm"
+ /* 8 */ "mmmmaaammmm"
+ /* 9 */ "mmmmaaammmm"
+ /* 10 */ "mmmmmmmmmmm"
+
+ // Level 7
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmm.f.mmmm"
+ /* 4 */ "..a.....a.."
+ /* 5 */ ".gah...gah."
+ /* 6 */ "..a.....a.."
+ /* 7 */ "mmmm...mmmm"
+ /* 8 */ "mmmmcbcmmmm"
+ /* 9 */ "mmmmaaammmm"
+ /* 10 */ "mmmmaaammmm"
+
+ // Level 8
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmm...mmmm"
+ /* 7 */ "mmmm...mmmm"
+ /* 8 */ "mmmmc.cmmmm"
+ /* 9 */ "mmmm.b.mmmm"
+ /* 10 */ "mmmmaaammmm"
+
+ // Level 9
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmm...mmmm"
+ /* 8 */ "mmmmc.cmmmm"
+ /* 9 */ "mmmm...mmmm"
+ /* 10 */ "mmmm.d.mmmm"
+
+ // Level 10
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmmc.cmmmm"
+ /* 9 */ "mmmm...mmmm"
+ /* 10 */ "mmmm...mmmm"
+
+ // Level 11
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmmaaammmm"
+ /* 9 */ "mmmm.f.mmmm"
+ /* 10 */ "mmmm...mmmm",
+
+ // Connectors:
+ "3: 0, 5, 5: 4\n" /* Type 3, direction X- */
+ "-3: 0, 5, 5: 4\n" /* Type -3, direction X- */
+ "3: 10, 5, 5: 5\n" /* Type 3, direction X+ */
+ "-3: 10, 5, 5: 5\n" /* Type -3, direction X+ */
+ "3: 5, 9, 10: 3\n" /* Type 3, direction Z+ */
+ "-3: 5, 9, 10: 3\n" /* Type -3, direction Z+ */
+ "3: 5, 1, 0: 2\n" /* Type 3, direction Z- */
+ "-3: 5, 1, 0: 2\n" /* Type -3, direction Z- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 30,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftStairsCrossing
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftTee:
+ // The data has been exported from the gallery Plains, area index 194, ID 658, created by Aloe_vera
+ {
+ // Size:
+ 11, 4, 7, // SizeX = 11, SizeY = 4, SizeZ = 7
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 3, 6, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 66: 0\n" /* tracks */
+ "c: 85: 0\n" /* fence */
+ "d: 66: 1\n" /* tracks */
+ "e: 50: 4\n" /* torch */
+ "f: 50: 3\n" /* torch */
+ "g: 50: 2\n" /* torch */
+ "h: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmmaaammmm"
+ /* 1 */ "mmmmaaammmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmmaaammmm"
+ /* 4 */ "aaaaaaaaaaa"
+ /* 5 */ "aaaaaaaaaaa"
+ /* 6 */ "aaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm.b.mmmm"
+ /* 1 */ "mmmm.b.mmmm"
+ /* 2 */ "mmmmcbcmmmm"
+ /* 3 */ "mmmm.b.mmmm"
+ /* 4 */ "..c..b..c.."
+ /* 5 */ "ddddddddddd"
+ /* 6 */ "..c.....c.."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm...mmmm"
+ /* 2 */ "mmmmc.cmmmm"
+ /* 3 */ "mmmm...mmmm"
+ /* 4 */ "..c.....c.."
+ /* 5 */ "..........."
+ /* 6 */ "..c.....c.."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "mmmm...mmmm"
+ /* 1 */ "mmmm.e.mmmm"
+ /* 2 */ "mmmmaaammmm"
+ /* 3 */ "mmmm.f.mmmm"
+ /* 4 */ "..a.....a.."
+ /* 5 */ ".gah...gah."
+ /* 6 */ "..a.....a..",
+
+ // Connectors:
+ "3: 0, 1, 5: 4\n" /* Type 3, direction X- */
+ "-3: 0, 1, 5: 4\n" /* Type -3, direction X- */
+ "3: 5, 1, 0: 2\n" /* Type 3, direction Z- */
+ "-3: 5, 1, 0: 2\n" /* Type -3, direction Z- */
+ "3: 10, 1, 5: 5\n" /* Type 3, direction X+ */
+ "-3: 10, 1, 5: 5\n" /* Type -3, direction X+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 20,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftTee
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // MineshaftsCorridor5:
+ // The data has been exported from the gallery Plains, area index 200, ID 664, created by Aloe_vera
+ {
+ // Size:
+ 11, 4, 3, // SizeX = 11, SizeY = 4, SizeZ = 3
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 10, 3, 2, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 85: 0\n" /* fence */
+ "c: 66: 1\n" /* tracks */
+ "d: 50: 2\n" /* torch */
+ "e: 50: 1\n" /* torch */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "aaaaaaaaaaa"
+ /* 1 */ "aaaaaaaaaaa"
+ /* 2 */ "aaaaaaaaaaa"
+
+ // Level 1
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..b.....b.."
+ /* 1 */ "ccccccccccc"
+ /* 2 */ "..b.....b.."
+
+ // Level 2
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..b.....b.."
+ /* 1 */ "..........."
+ /* 2 */ "..b.....b.."
+
+ // Level 3
+ /* z\x* 1 */
+ /* * 01234567890 */
+ /* 0 */ "..a.....a.."
+ /* 1 */ ".dae...dae."
+ /* 2 */ "..a.....a..",
+
+ // Connectors:
+ "3: 10, 1, 1: 5\n" /* Type 3, direction X+ */
+ "-3: 10, 1, 1: 5\n" /* Type -3, direction X+ */
+ "-3: 0, 1, 1: 4\n" /* Type -3, direction X- */
+ "3: 0, 1, 1: 4\n" /* Type 3, direction X- */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ false,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // MineshaftsCorridor5
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Scarecrow:
// The data has been exported from the gallery Plains, area index 150, ID 494, created by STR_Warrior
@@ -2770,8 +3588,8 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Block definitions:
".: 0: 0\n" /* air */
- "a: 3: 0\n" /* dirt */
- "b: 2: 0\n" /* grass */
+ "a: 2: 0\n" /* grass */
+ "b: 3: 0\n" /* dirt */
"c: 4: 0\n" /* cobblestone */
"d: 67: 0\n" /* stairs */
"e: 67: 2\n" /* stairs */
@@ -2796,19 +3614,19 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 0
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "abaaaaabbbb"
- /* 1 */ "baaaaaaaaab"
- /* 2 */ "baaaaaaaaab"
- /* 3 */ "baaaaaaaaab"
- /* 4 */ "baaaaaaaaab"
- /* 5 */ "baaaaaaaaab"
- /* 6 */ "baaaaaaaaab"
- /* 7 */ "baaaaaaaaab"
- /* 8 */ "bbaaaaaaabb"
- /* 9 */ "bbaaaaaaabb"
- /* 10 */ "bbaaaaaaabb"
- /* 11 */ "bbaaaaaaabb"
- /* 12 */ "bbaaaaaaabb"
+ /* 0 */ "aaabbbbaaaa"
+ /* 1 */ "abbbbbbbbba"
+ /* 2 */ "abbbbbbbbba"
+ /* 3 */ "abbbbbbbbba"
+ /* 4 */ "abbbbbbbbba"
+ /* 5 */ "abbbbbbbbba"
+ /* 6 */ "abbbbbbbbba"
+ /* 7 */ "abbbbbbbbba"
+ /* 8 */ "aabbbbbbbaa"
+ /* 9 */ "aabbbbbbbaa"
+ /* 10 */ "aabbbbbbbaa"
+ /* 11 */ "aabbbbbbbaa"
+ /* 12 */ "aabbbbbbbaa"
// Level 1
/* z\x* 1 */
@@ -2821,11 +3639,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 5 */ "mcccccccccm"
/* 6 */ "mcccccccccm"
/* 7 */ "mcccccccccm"
- /* 8 */ "mmaaaaaaamm"
- /* 9 */ "mmaaaaaaamm"
- /* 10 */ "mmaaaaaaamm"
- /* 11 */ "mmaaaaaaamm"
- /* 12 */ "mmaaaaaaamm"
+ /* 8 */ "mmbbbbbbbmm"
+ /* 9 */ "mmbbbbbbbmm"
+ /* 10 */ "mmbbbbbbbmm"
+ /* 11 */ "mmbbbbbbbmm"
+ /* 12 */ "mmbbbbbbbmm"
// Level 2
/* z\x* 1 */
@@ -2838,11 +3656,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 5 */ ".cggggcccc."
/* 6 */ ".cggggcccc."
/* 7 */ ".ccccccccc."
- /* 8 */ "..bbbbbbb.."
- /* 9 */ "..bbbbbbb.."
- /* 10 */ "..bbbbbbb.."
- /* 11 */ "..bbbbbbb.."
- /* 12 */ "..bbbbbbb.."
+ /* 8 */ "..aaaaaaa.."
+ /* 9 */ "..aaaaaaa.."
+ /* 10 */ "..aaaaaaa.."
+ /* 11 */ "..aaaaaaa.."
+ /* 12 */ "..aaaaaaa.."
// Level 3
/* z\x* 1 */
--
cgit v1.2.3
From b9d306a801af7de6c620740d5f8c827c7df29dce Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Fri, 30 May 2014 22:41:47 +0200
Subject: Fixed bindings for cCompositeChat:SetMessageType().
---
src/Bindings/ManualBindings.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp
index 10e560ac0..14d9d16fc 100644
--- a/src/Bindings/ManualBindings.cpp
+++ b/src/Bindings/ManualBindings.cpp
@@ -2864,8 +2864,8 @@ static int tolua_cCompositeChat_SetMessageType(lua_State * tolua_S)
}
// Set the type:
- int MessageType;
- L.GetStackValue(1, MessageType);
+ int MessageType = mtCustom;
+ L.GetStackValue(2, MessageType);
self->SetMessageType((eMessageType)MessageType);
// Cut away everything from the stack except for the cCompositeChat instance; return that:
--
cgit v1.2.3
From 843288493e1dcf9e22ac644d652ea3b13c7858ab Mon Sep 17 00:00:00 2001
From: Howaner
Date: Fri, 30 May 2014 23:41:17 +0200
Subject: Fix the furnace result slot.
---
src/UI/SlotArea.cpp | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 90 insertions(+), 2 deletions(-)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index 507b45833..6853ff90c 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1381,14 +1381,99 @@ cSlotAreaFurnace::~cSlotAreaFurnace()
void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickAction, const cItem & a_ClickedItem)
{
- super::Clicked(a_Player, a_SlotNum, a_ClickAction, a_ClickedItem);
-
if (m_Furnace == NULL)
{
LOGERROR("cSlotAreaFurnace::Clicked(): m_Furnace == NULL");
ASSERT(!"cSlotAreaFurnace::Clicked(): m_Furnace == NULL");
return;
}
+
+ if (a_SlotNum == 2)
+ {
+ bool bAsync = false;
+ if (GetSlot(a_SlotNum, a_Player) == NULL)
+ {
+ LOGWARNING("GetSlot(%d) returned NULL! Ignoring click", a_SlotNum);
+ return;
+ }
+
+ if (a_ClickAction == caDblClick)
+ {
+ return;
+ }
+
+ if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick))
+ {
+ ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
+ }
+
+ cItem Slot(*GetSlot(a_SlotNum, a_Player));
+ if (!Slot.IsSameType(a_ClickedItem))
+ {
+ LOGWARNING("*** Window lost sync at item %d in SlotArea with %d items ***", a_SlotNum, m_NumSlots);
+ LOGWARNING("My item: %s", ItemToFullString(Slot).c_str());
+ LOGWARNING("Their item: %s", ItemToFullString(a_ClickedItem).c_str());
+ bAsync = true;
+ }
+ cItem & DraggingItem = a_Player.GetDraggingItem();
+
+ if (!DraggingItem.IsEmpty())
+ {
+ if (!DraggingItem.IsEqual(Slot))
+ {
+ return;
+ }
+ if ((DraggingItem.m_ItemCount + Slot.m_ItemCount) > Slot.GetMaxStackSize())
+ {
+ return;
+ }
+
+ DraggingItem.m_ItemCount += Slot.m_ItemCount;
+ Slot.Empty();
+ }
+ else
+ {
+ switch (a_ClickAction)
+ {
+ case caDblClick:
+ {
+ DblClicked(a_Player, a_SlotNum);
+ return;
+ }
+ case caLeftClick:
+ {
+ DraggingItem = cItem(Slot);
+ Slot.Empty();
+ break;
+ }
+ case caRightClick:
+ {
+ DraggingItem = Slot.CopyOne();
+ DraggingItem.m_ItemCount = (char)(((float)Slot.m_ItemCount) / 2.f + 0.5f);
+ Slot.m_ItemCount -= DraggingItem.m_ItemCount;
+
+ if (Slot.IsEmpty())
+ {
+ Slot.Empty();
+ }
+ break;
+ }
+ default:
+ {
+ ASSERT(!"Unhandled click type!");
+ }
+ }
+ }
+
+ SetSlot(a_SlotNum, a_Player, Slot);
+ if (bAsync)
+ {
+ m_ParentWindow.BroadcastWholeWindow();
+ }
+ return;
+ }
+
+ super::Clicked(a_Player, a_SlotNum, a_ClickAction, a_ClickedItem);
}
@@ -1397,6 +1482,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
const cItem * cSlotAreaFurnace::GetSlot(int a_SlotNum, cPlayer & a_Player) const
{
+ UNUSED(a_Player);
// a_SlotNum ranges from 0 to 2, query the items from the underlying furnace:
return &(m_Furnace->GetSlot(a_SlotNum));
}
@@ -1407,6 +1493,7 @@ const cItem * cSlotAreaFurnace::GetSlot(int a_SlotNum, cPlayer & a_Player) const
void cSlotAreaFurnace::SetSlot(int a_SlotNum, cPlayer & a_Player, const cItem & a_Item)
{
+ UNUSED(a_Player);
m_Furnace->SetSlot(a_SlotNum, a_Item);
}
@@ -1416,6 +1503,7 @@ void cSlotAreaFurnace::SetSlot(int a_SlotNum, cPlayer & a_Player, const cItem &
void cSlotAreaFurnace::OnSlotChanged(cItemGrid * a_ItemGrid, int a_SlotNum)
{
+ UNUSED(a_SlotNum);
// Something has changed in the window, broadcast the entire window to all clients
ASSERT(a_ItemGrid == &(m_Furnace->GetContents()));
--
cgit v1.2.3
From 01fc93857cb18d918ab98109dabd9665038871af Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sat, 31 May 2014 00:22:24 +0200
Subject: Change "Slot.IsEmpty()" to "Slot.m_ItemCount <= 0"
---
src/UI/SlotArea.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index 6853ff90c..3acc49cde 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1452,7 +1452,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
DraggingItem.m_ItemCount = (char)(((float)Slot.m_ItemCount) / 2.f + 0.5f);
Slot.m_ItemCount -= DraggingItem.m_ItemCount;
- if (Slot.IsEmpty())
+ if (Slot.m_ItemCount <= 0)
{
Slot.Empty();
}
--
cgit v1.2.3
From d422aa4081cd5c64ab0df4017630674a245c701d Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sat, 31 May 2014 00:25:20 +0200
Subject: Fix DBL bug.
---
src/UI/SlotArea.cpp | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index 3acc49cde..7c79e290a 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1397,11 +1397,6 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
return;
}
- if (a_ClickAction == caDblClick)
- {
- return;
- }
-
if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick))
{
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
@@ -1419,6 +1414,10 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
if (!DraggingItem.IsEmpty())
{
+ if (a_ClickAction == caDblClick)
+ {
+ return;
+ }
if (!DraggingItem.IsEqual(Slot))
{
return;
--
cgit v1.2.3
From 2030800ad78678b783224010e22382d413863975 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sat, 31 May 2014 00:27:24 +0200
Subject: Set DraggingItem to Slot directly.
---
src/UI/SlotArea.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index 7c79e290a..b3e126247 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1441,7 +1441,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
}
case caLeftClick:
{
- DraggingItem = cItem(Slot);
+ DraggingItem = Slot;
Slot.Empty();
break;
}
--
cgit v1.2.3
From f4e9c88dcdefee2b6e4ca7f97483d4cdfba939ae Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 31 May 2014 10:33:12 +0200
Subject: Fixed a memory leak in VillagGen.
---
src/Generating/VillageGen.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/Generating/VillageGen.cpp b/src/Generating/VillageGen.cpp
index dfcdf6ef7..b9cb056ad 100644
--- a/src/Generating/VillageGen.cpp
+++ b/src/Generating/VillageGen.cpp
@@ -147,6 +147,11 @@ public:
}
}
+ ~cVillage()
+ {
+ cPieceGenerator::FreePieces(m_Pieces);
+ }
+
protected:
/** Seed for the random functions */
int m_Seed;
--
cgit v1.2.3
From 600c93bdc16e6826ebf9822ad941a1f87139bab5 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 31 May 2014 10:33:29 +0200
Subject: Updated PlainsVillage prefabs.
---
src/Generating/Prefabs/PlainsVillagePrefabs.cpp | 158 +++++++++++++-----------
1 file changed, 85 insertions(+), 73 deletions(-)
diff --git a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
index f5e531955..f5c5b7a20 100644
--- a/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/PlainsVillagePrefabs.cpp
@@ -1472,18 +1472,18 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// The data has been exported from the gallery Plains, area index 199, ID 663, created by Aloe_vera
{
// Size:
- 11, 12, 11, // SizeX = 11, SizeY = 12, SizeZ = 11
+ 11, 12, 12, // SizeX = 11, SizeY = 12, SizeZ = 12
// Hitbox (relative to bounding box):
0, 0, 0, // MinX, MinY, MinZ
- 10, 11, 10, // MaxX, MaxY, MaxZ
+ 10, 11, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
"a: 5: 0\n" /* wood */
- "b: 66: 5\n" /* tracks */
- "c: 85: 0\n" /* fence */
- "d: 66: 0\n" /* tracks */
+ "b: 66: 0\n" /* tracks */
+ "c: 66: 5\n" /* tracks */
+ "d: 85: 0\n" /* fence */
"e: 66: 1\n" /* tracks */
"f: 50: 3\n" /* torch */
"g: 50: 2\n" /* torch */
@@ -1496,7 +1496,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 01234567890 */
/* 0 */ "mmmmaaammmm"
/* 1 */ "mmmmaaammmm"
- /* 2 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmmaaammmm"
/* 3 */ "mmmmmmmmmmm"
/* 4 */ "mmmmmmmmmmm"
/* 5 */ "mmmmmmmmmmm"
@@ -1505,14 +1505,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "mmmmmmmmmmm"
/* 9 */ "mmmmmmmmmmm"
/* 10 */ "mmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 1
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "mmmm.b.mmmm"
- /* 1 */ "mmmmaaammmm"
+ /* 1 */ "mmmm.c.mmmm"
/* 2 */ "mmmmaaammmm"
- /* 3 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmaaammmm"
/* 4 */ "mmmmmmmmmmm"
/* 5 */ "mmmmmmmmmmm"
/* 6 */ "mmmmmmmmmmm"
@@ -1520,96 +1521,103 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "mmmmmmmmmmm"
/* 9 */ "mmmmmmmmmmm"
/* 10 */ "mmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 2
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "mmmm...mmmm"
- /* 1 */ "mmmm.b.mmmm"
- /* 2 */ "mmmmaaammmm"
+ /* 1 */ "mmmm...mmmm"
+ /* 2 */ "mmmm.c.mmmm"
/* 3 */ "mmmmaaammmm"
- /* 4 */ "mmmmmmmmmmm"
+ /* 4 */ "mmmmaaammmm"
/* 5 */ "mmmmmmmmmmm"
/* 6 */ "mmmmmmmmmmm"
/* 7 */ "mmmmmmmmmmm"
/* 8 */ "mmmmmmmmmmm"
/* 9 */ "mmmmmmmmmmm"
/* 10 */ "mmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 3
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "mmmm...mmmm"
/* 1 */ "mmmm...mmmm"
- /* 2 */ "mmmmcbcmmmm"
- /* 3 */ "mmmmaaammmm"
+ /* 2 */ "mmmm...mmmm"
+ /* 3 */ "mmmmdcdmmmm"
/* 4 */ "mmmmaaammmm"
- /* 5 */ "mmmmmmmmmmm"
+ /* 5 */ "mmmmaaammmm"
/* 6 */ "mmmmmmmmmmm"
/* 7 */ "mmmmmmmmmmm"
/* 8 */ "mmmmmmmmmmm"
/* 9 */ "mmmmmmmmmmm"
/* 10 */ "mmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 4
/* z\x* 1 */
/* * 01234567890 */
- /* 0 */ "mmmm...mmmm"
+ /* 0 */ "mmmmmmmmmmm"
/* 1 */ "mmmm...mmmm"
- /* 2 */ "mmmmc.cmmmm"
- /* 3 */ "mmmm.b.mmmm"
- /* 4 */ "aaaaaaaaaaa"
+ /* 2 */ "mmmm...mmmm"
+ /* 3 */ "mmmmd.dmmmm"
+ /* 4 */ "mmmm.c.mmmm"
/* 5 */ "aaaaaaaaaaa"
/* 6 */ "aaaaaaaaaaa"
- /* 7 */ "mmmmaaammmm"
- /* 8 */ "mmmmmmmmmmm"
+ /* 7 */ "aaaaaaaaaaa"
+ /* 8 */ "mmmmaaammmm"
/* 9 */ "mmmmmmmmmmm"
/* 10 */ "mmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 5
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "mmmmmmmmmmm"
- /* 1 */ "mmmm...mmmm"
- /* 2 */ "mmmmc.cmmmm"
- /* 3 */ "mmmm...mmmm"
- /* 4 */ "..c..d..c.."
- /* 5 */ "eeeeeeeeeee"
- /* 6 */ "..c..b..c.."
- /* 7 */ "mmmmaaammmm"
+ /* 1 */ "mmmmmmmmmmm"
+ /* 2 */ "mmmm...mmmm"
+ /* 3 */ "mmmmd.dmmmm"
+ /* 4 */ "mmmm...mmmm"
+ /* 5 */ "..d..b..d.."
+ /* 6 */ "eeeeeeeeeee"
+ /* 7 */ "..d..c..d.."
/* 8 */ "mmmmaaammmm"
- /* 9 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmaaammmm"
/* 10 */ "mmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 6
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "mmmmmmmmmmm"
/* 1 */ "mmmmmmmmmmm"
- /* 2 */ "mmmmc.cmmmm"
- /* 3 */ "mmmm...mmmm"
- /* 4 */ "..c.....c.."
- /* 5 */ "..........."
- /* 6 */ "..c.....c.."
- /* 7 */ "mmmm.b.mmmm"
- /* 8 */ "mmmmaaammmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmd.dmmmm"
+ /* 4 */ "mmmm...mmmm"
+ /* 5 */ "..d.....d.."
+ /* 6 */ "..........."
+ /* 7 */ "..d.....d.."
+ /* 8 */ "mmmm.c.mmmm"
/* 9 */ "mmmmaaammmm"
- /* 10 */ "mmmmmmmmmmm"
+ /* 10 */ "mmmmaaammmm"
+ /* 11 */ "mmmmmmmmmmm"
// Level 7
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "mmmmmmmmmmm"
/* 1 */ "mmmmmmmmmmm"
- /* 2 */ "mmmmaaammmm"
- /* 3 */ "mmmm.f.mmmm"
- /* 4 */ "..a.....a.."
- /* 5 */ ".gah...gah."
- /* 6 */ "..a.....a.."
- /* 7 */ "mmmm...mmmm"
- /* 8 */ "mmmmcbcmmmm"
- /* 9 */ "mmmmaaammmm"
+ /* 2 */ "mmmmmmmmmmm"
+ /* 3 */ "mmmmaaammmm"
+ /* 4 */ "mmmm.f.mmmm"
+ /* 5 */ "..a.....a.."
+ /* 6 */ ".gah...gah."
+ /* 7 */ "..a.....a.."
+ /* 8 */ "mmmm...mmmm"
+ /* 9 */ "mmmmdcdmmmm"
/* 10 */ "mmmmaaammmm"
+ /* 11 */ "mmmmaaammmm"
// Level 8
/* z\x* 1 */
@@ -1620,11 +1628,12 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 3 */ "mmmmmmmmmmm"
/* 4 */ "mmmmmmmmmmm"
/* 5 */ "mmmmmmmmmmm"
- /* 6 */ "mmmm...mmmm"
+ /* 6 */ "mmmmmmmmmmm"
/* 7 */ "mmmm...mmmm"
- /* 8 */ "mmmmc.cmmmm"
- /* 9 */ "mmmm.b.mmmm"
- /* 10 */ "mmmmaaammmm"
+ /* 8 */ "mmmm...mmmm"
+ /* 9 */ "mmmmd.dmmmm"
+ /* 10 */ "mmmm.c.mmmm"
+ /* 11 */ "mmmmaaammmm"
// Level 9
/* z\x* 1 */
@@ -1636,10 +1645,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ "mmmmmmmmmmm"
/* 5 */ "mmmmmmmmmmm"
/* 6 */ "mmmmmmmmmmm"
- /* 7 */ "mmmm...mmmm"
- /* 8 */ "mmmmc.cmmmm"
- /* 9 */ "mmmm...mmmm"
- /* 10 */ "mmmm.d.mmmm"
+ /* 7 */ "mmmmmmmmmmm"
+ /* 8 */ "mmmm...mmmm"
+ /* 9 */ "mmmmd.dmmmm"
+ /* 10 */ "mmmm...mmmm"
+ /* 11 */ "mmmm.b.mmmm"
// Level 10
/* z\x* 1 */
@@ -1652,9 +1662,10 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 5 */ "mmmmmmmmmmm"
/* 6 */ "mmmmmmmmmmm"
/* 7 */ "mmmmmmmmmmm"
- /* 8 */ "mmmmc.cmmmm"
- /* 9 */ "mmmm...mmmm"
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmd.dmmmm"
/* 10 */ "mmmm...mmmm"
+ /* 11 */ "mmmm...mmmm"
// Level 11
/* z\x* 1 */
@@ -1667,19 +1678,20 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 5 */ "mmmmmmmmmmm"
/* 6 */ "mmmmmmmmmmm"
/* 7 */ "mmmmmmmmmmm"
- /* 8 */ "mmmmaaammmm"
- /* 9 */ "mmmm.f.mmmm"
- /* 10 */ "mmmm...mmmm",
+ /* 8 */ "mmmmmmmmmmm"
+ /* 9 */ "mmmmaaammmm"
+ /* 10 */ "mmmm.f.mmmm"
+ /* 11 */ "mmmm...mmmm",
// Connectors:
- "3: 0, 5, 5: 4\n" /* Type 3, direction X- */
- "-3: 0, 5, 5: 4\n" /* Type -3, direction X- */
- "3: 10, 5, 5: 5\n" /* Type 3, direction X+ */
- "-3: 10, 5, 5: 5\n" /* Type -3, direction X+ */
- "3: 5, 9, 10: 3\n" /* Type 3, direction Z+ */
- "-3: 5, 9, 10: 3\n" /* Type -3, direction Z+ */
- "3: 5, 1, 0: 2\n" /* Type 3, direction Z- */
- "-3: 5, 1, 0: 2\n" /* Type -3, direction Z- */,
+ "3: 0, 5, 6: 4\n" /* Type 3, direction X- */
+ "-3: 0, 5, 6: 4\n" /* Type -3, direction X- */
+ "3: 10, 5, 6: 5\n" /* Type 3, direction X+ */
+ "-3: 10, 5, 6: 5\n" /* Type -3, direction X+ */
+ "3: 5, 9, 11: 3\n" /* Type 3, direction Z+ */
+ "-3: 5, 9, 11: 3\n" /* Type -3, direction Z+ */
+ "3: 5, 1, 1: 2\n" /* Type 3, direction Z- */
+ "-3: 5, 1, 1: 2\n" /* Type -3, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@@ -3143,17 +3155,17 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
// Level 0
/* z\x* */
/* * 0123456789 */
- /* 0 */ "mmmmmmmmmm"
- /* 1 */ "maaaaammmm"
- /* 2 */ "maaaaammmm"
- /* 3 */ "maaaaabbbb"
+ /* 0 */ ".........."
+ /* 1 */ ".aaaaa...."
+ /* 2 */ ".aaaaa...."
+ /* 3 */ ".aaaaabbbb"
/* 4 */ "aaaaaabbbb"
/* 5 */ "aaaaaabbbb"
/* 6 */ "aaaaaabbbb"
- /* 7 */ "maaaaabbbb"
- /* 8 */ "maaaaabbbb"
- /* 9 */ "maaaaammmm"
- /* 10 */ "mmmmmmmmmm"
+ /* 7 */ ".aaaaabbbb"
+ /* 8 */ ".aaaaabbbb"
+ /* 9 */ ".aaaaa...."
+ /* 10 */ ".........."
// Level 1
/* z\x* */
--
cgit v1.2.3
From 0b7ed0f4934b75f959d13ce7b8a4c73cb88ce318 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sat, 31 May 2014 11:47:03 +0200
Subject: Add doxy-comment
---
src/Blocks/BlockDoor.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/Blocks/BlockDoor.h b/src/Blocks/BlockDoor.h
index c1e4de9d4..d8ce916fa 100644
--- a/src/Blocks/BlockDoor.h
+++ b/src/Blocks/BlockDoor.h
@@ -137,12 +137,13 @@ public:
static NIBBLETYPE IsOpen(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
{
- NIBBLETYPE Meta = GetMetaFromRightDoor(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
+ NIBBLETYPE Meta = GetTrueDoorMeta(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
return ((Meta & 0x4) != 0);
}
- static NIBBLETYPE GetMetaFromRightDoor(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
+ /** Read the meta from the true part of the door and returns a meta with all infos include. */
+ static NIBBLETYPE GetTrueDoorMeta(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
{
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
@@ -162,7 +163,7 @@ public:
static void SetOpen(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open)
{
BLOCKTYPE Block = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY, a_BlockZ);
- NIBBLETYPE Meta = GetMetaFromRightDoor(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
+ NIBBLETYPE Meta = GetTrueDoorMeta(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
if (!IsDoor(Block))
{
--
cgit v1.2.3
From 683da71c0fa33c2542e28bed5d2f106ddfc68b64 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sat, 31 May 2014 11:48:54 +0200
Subject: Moved the IsDoor check before the meta get.
---
src/Blocks/BlockDoor.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/Blocks/BlockDoor.h b/src/Blocks/BlockDoor.h
index d8ce916fa..eaa039c50 100644
--- a/src/Blocks/BlockDoor.h
+++ b/src/Blocks/BlockDoor.h
@@ -163,13 +163,12 @@ public:
static void SetOpen(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open)
{
BLOCKTYPE Block = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY, a_BlockZ);
- NIBBLETYPE Meta = GetTrueDoorMeta(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
-
if (!IsDoor(Block))
{
return;
}
+ NIBBLETYPE Meta = GetTrueDoorMeta(a_ChunkInterface, a_BlockX, a_BlockY, a_BlockZ);
bool Opened = (Meta & 0x4) != 0;
if (Opened == a_Open)
{
--
cgit v1.2.3
From d1b23060ada3946d68453e381867861bc768999b Mon Sep 17 00:00:00 2001
From: STRWarrior
Date: Sat, 31 May 2014 14:14:55 +0200
Subject: Used recommendations
---
src/Bindings/Plugin.h | 2 +-
src/Bindings/PluginLua.cpp | 4 ++--
src/Bindings/PluginLua.h | 2 +-
src/Bindings/PluginManager.cpp | 4 ++--
src/Bindings/PluginManager.h | 2 +-
src/Entities/ProjectileEntity.cpp | 3 +--
6 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/src/Bindings/Plugin.h b/src/Bindings/Plugin.h
index a6f91382c..3f1e0f0bc 100644
--- a/src/Bindings/Plugin.h
+++ b/src/Bindings/Plugin.h
@@ -90,7 +90,7 @@ public:
virtual bool OnPluginsLoaded (void) = 0;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos) = 0;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos) = 0;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) = 0;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) = 0;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) = 0;
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp
index 97f78351b..da98f3f95 100644
--- a/src/Bindings/PluginLua.cpp
+++ b/src/Bindings/PluginLua.cpp
@@ -1108,14 +1108,14 @@ bool cPluginLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid * a
-bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos)
+bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos)
{
cCSLock Lock(m_CriticalSection);
bool res = false;
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_PROJECTILE_HIT_BLOCK];
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
{
- m_LuaState.Call((int)(**itr), &a_Projectile, a_Face, a_BlockHitPos, cLuaState::Return, res);
+ m_LuaState.Call((int)(**itr), &a_Projectile, a_BlockX, a_BlockY, a_BlockZ, a_Face, a_BlockHitPos, cLuaState::Return, res);
if (res)
{
return true;
diff --git a/src/Bindings/PluginLua.h b/src/Bindings/PluginLua.h
index 627aa3cc8..6d0a90654 100644
--- a/src/Bindings/PluginLua.h
+++ b/src/Bindings/PluginLua.h
@@ -113,7 +113,7 @@ public:
virtual bool OnPluginsLoaded (void) override;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos) override;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos) override;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) override;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) override;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) override;
diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp
index a5c904a77..066616c2a 100644
--- a/src/Bindings/PluginManager.cpp
+++ b/src/Bindings/PluginManager.cpp
@@ -1154,7 +1154,7 @@ bool cPluginManager::CallHookPreCrafting(const cPlayer * a_Player, const cCrafti
-bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos)
+bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos)
{
HookMap::iterator Plugins = m_Hooks.find(HOOK_PROJECTILE_HIT_BLOCK);
if (Plugins == m_Hooks.end())
@@ -1163,7 +1163,7 @@ bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile
}
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
{
- if ((*itr)->OnProjectileHitBlock(a_Projectile, a_Face, a_BlockHitPos))
+ if ((*itr)->OnProjectileHitBlock(a_Projectile, a_BlockX, a_BlockY, a_BlockZ, a_Face, a_BlockHitPos))
{
return true;
}
diff --git a/src/Bindings/PluginManager.h b/src/Bindings/PluginManager.h
index 35755459a..47aab74e6 100644
--- a/src/Bindings/PluginManager.h
+++ b/src/Bindings/PluginManager.h
@@ -206,7 +206,7 @@ public: // tolua_export
bool CallHookPluginsLoaded (void);
bool CallHookPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
bool CallHookPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
- bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, eBlockFace a_Face, const Vector3i * a_BlockHitPos);
+ bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos);
bool CallHookProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity);
bool CallHookSpawnedEntity (cWorld & a_World, cEntity & a_Entity);
bool CallHookSpawnedMonster (cWorld & a_World, cMonster & a_Monster);
diff --git a/src/Entities/ProjectileEntity.cpp b/src/Entities/ProjectileEntity.cpp
index 7a869a957..acb10539d 100644
--- a/src/Entities/ProjectileEntity.cpp
+++ b/src/Entities/ProjectileEntity.cpp
@@ -68,8 +68,7 @@ protected:
if (bb.CalcLineIntersection(Line1, Line2, LineCoeff, Face))
{
Vector3d Intersection = Line1 + m_Projectile->GetSpeed() * LineCoeff;
- const Vector3i BlockHitPos = Vector3i(Intersection);
- if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, Face, &BlockHitPos))
+ if (cPluginManager::Get()->CallHookProjectileHitBlock(*m_Projectile, a_BlockX, a_BlockY, a_BlockZ, Face, &Intersection))
{
return false;
}
--
cgit v1.2.3
From b436359237a9faa1dc5709e4359b73aa6faf4f78 Mon Sep 17 00:00:00 2001
From: JoannisO
Date: Sat, 31 May 2014 16:08:15 +0200
Subject: - Changed the name of the ProjectileLookVector method.
Note: I still think the new name is unclear. Any other suggestions are
welcome.
---
src/BlockEntities/DispenserEntity.cpp | 4 ++--
src/BlockEntities/DispenserEntity.h | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 799d41a1e..db1b405cd 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -198,7 +198,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind)
{
- Vector3d Angle = GetProjectileLookVector(a_Chunk);
+ Vector3d Angle = GetShootVector(a_Chunk);
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(a_DispX, a_DispZ);
double EntityX = 0.5 + (a_DispX + DispChunk->GetPosX() * cChunkDef::Width);
@@ -209,7 +209,7 @@ void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_Di
-Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
+Vector3d cDispenserEntity::GetShootVector(cChunk & a_Chunk)
{
NIBBLETYPE Meta = a_Chunk.GetMeta(m_RelX, m_PosY, m_RelZ);
int Direction = 0;
diff --git a/src/BlockEntities/DispenserEntity.h b/src/BlockEntities/DispenserEntity.h
index 76aaccd3c..adbe2070c 100644
--- a/src/BlockEntities/DispenserEntity.h
+++ b/src/BlockEntities/DispenserEntity.h
@@ -33,7 +33,7 @@ private:
void SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind);
// Returns how to aim the projectile
- Vector3d GetProjectileLookVector(cChunk & a_Chunk);
+ Vector3d GetShootVector(cChunk & a_Chunk);
/// If the a_BlockInFront is liquidable and the empty bucket can fit, does the m_Contents processing and returns true
bool EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum);
--
cgit v1.2.3
From 7672ca7eefc7233b507938d0592d1f565191d0ee Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sat, 31 May 2014 22:06:14 +0200
Subject: Added an initial version of the underwater base generator.
---
src/Generating/ComposableGenerator.cpp | 8 +
src/Generating/Prefabs/UnderwaterBasePrefabs.cpp | 1888 ++++++++++++++++++++++
src/Generating/Prefabs/UnderwaterBasePrefabs.h | 15 +
src/Generating/UnderwaterBaseGen.cpp | 142 ++
src/Generating/UnderwaterBaseGen.h | 50 +
5 files changed, 2103 insertions(+)
create mode 100644 src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
create mode 100644 src/Generating/Prefabs/UnderwaterBasePrefabs.h
create mode 100644 src/Generating/UnderwaterBaseGen.cpp
create mode 100644 src/Generating/UnderwaterBaseGen.h
diff --git a/src/Generating/ComposableGenerator.cpp b/src/Generating/ComposableGenerator.cpp
index 4dd626ed4..cf736ce64 100644
--- a/src/Generating/ComposableGenerator.cpp
+++ b/src/Generating/ComposableGenerator.cpp
@@ -25,6 +25,7 @@
#include "Noise3DGenerator.h"
#include "POCPieceGenerator.h"
#include "Ravines.h"
+#include "UnderwaterBaseGen.h"
#include "VillageGen.h"
@@ -406,6 +407,13 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile)
{
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));
+ }
else if (NoCaseCompare(*itr, "Villages") == 0)
{
int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 384);
diff --git a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
new file mode 100644
index 000000000..54d1b6745
--- /dev/null
+++ b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
@@ -0,0 +1,1888 @@
+
+// UnderwaterBasePrefabs.cpp
+
+// Defines the prefabs in the group UnderwaterBase
+
+// NOTE: This file has been generated automatically by GalExport!
+// Any manual changes will be overwritten by the next automatic export!
+
+#include "Globals.h"
+#include "UnderwaterBasePrefabs.h"
+
+
+
+
+
+const cPrefab::sDef g_UnderwaterBasePrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Corridor16:
+ // The data has been exported from the gallery Water, area index 25, ID 566, created by xoft
+ {
+ // Size:
+ 16, 4, 4, // SizeX = 16, SizeY = 4, SizeZ = 4
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 3, 3, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 64: 2\n" /* wooddoorblock */
+ "d: 64: 0\n" /* wooddoorblock */
+ "e: 20: 0\n" /* glass */
+ "f: 64: 9\n" /* wooddoorblock */
+ "g: 76: 3\n" /* redstonetorchon */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 76: 4\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "abbbbbbbbbbbbbba"
+ /* 2 */ "abbbbbbbbbbbbbba"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "abbbbbbbbbbbbbba"
+ /* 1 */ "c..............d"
+ /* 2 */ "c..............d"
+ /* 3 */ "abbbbbbbbbbbbbba"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "abeebbbeebbbeeba"
+ /* 1 */ "f.........g....h"
+ /* 2 */ "h....i.........f"
+ /* 3 */ "abeebbbeebbbeeba"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "abbbbbbbbbbbbbba"
+ /* 1 */ "abbbbbbbbbbbbbba"
+ /* 2 */ "abbbbbbbbbbbbbba"
+ /* 3 */ "abbbbbbbbbbbbbba",
+
+ // Connectors:
+ "1: 0, 1, 1: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 2: 4\n" /* Type -1, direction X- */
+ "1: 15, 1, 2: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 1: 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,
+ }, // Corridor16
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // CorridorCorner:
+ // The data has been exported from the gallery Water, area index 26, ID 569, created by xoft
+ {
+ // Size:
+ 10, 4, 10, // SizeX = 10, SizeY = 4, SizeZ = 10
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 9, 3, 9, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 64: 5\n" /* wooddoorblock */
+ "d: 64: 2\n" /* wooddoorblock */
+ "e: 64: 4\n" /* wooddoorblock */
+ "f: 64: 1\n" /* wooddoorblock */
+ "g: 20: 0\n" /* glass */
+ "h: 64:12\n" /* wooddoorblock */
+ "i: 76: 3\n" /* redstonetorchon */
+ "j: 64: 8\n" /* wooddoorblock */
+ "k: 76: 2\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "mmmmmmmmmm"
+ /* 1 */ "abbbbbmmmm"
+ /* 2 */ "abbbbbbbmm"
+ /* 3 */ "mmmbbbbbmm"
+ /* 4 */ "mmmmmbbbbm"
+ /* 5 */ "mmmmmmbbbm"
+ /* 6 */ "mmmmmmbbbm"
+ /* 7 */ "mmmmmmmbbm"
+ /* 8 */ "mmmmmmmbbm"
+ /* 9 */ "mmmmmmmaam"
+
+ // Level 1
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "abbbbbmmmm"
+ /* 1 */ "c.....bbmm"
+ /* 2 */ "d.......bm"
+ /* 3 */ "abb.....bm"
+ /* 4 */ "mmmbb....b"
+ /* 5 */ "mmmmmb...b"
+ /* 6 */ "mmmmmb...b"
+ /* 7 */ "mmmmmmb..b"
+ /* 8 */ "mmmmmmb..b"
+ /* 9 */ "mmmmmmaefa"
+
+ // Level 2
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "abggbbmmmm"
+ /* 1 */ "h...i.bbmm"
+ /* 2 */ "j.......bm"
+ /* 3 */ "abb.....bm"
+ /* 4 */ "mmmbb....b"
+ /* 5 */ "mmmmmb..kb"
+ /* 6 */ "mmmmmb...g"
+ /* 7 */ "mmmmmmb..g"
+ /* 8 */ "mmmmmmb..b"
+ /* 9 */ "mmmmmmahja"
+
+ // Level 3
+ /* z\x* */
+ /* * 0123456789 */
+ /* 0 */ "abbbbbmmmm"
+ /* 1 */ "abbbbbbbmm"
+ /* 2 */ "abbbbbbbbm"
+ /* 3 */ "abbbbbbbbm"
+ /* 4 */ "mmmbbbbbbb"
+ /* 5 */ "mmmmmbbbbb"
+ /* 6 */ "mmmmmbbbbb"
+ /* 7 */ "mmmmmmbbbb"
+ /* 8 */ "mmmmmmbbbb"
+ /* 9 */ "mmmmmmaaaa",
+
+ // Connectors:
+ "1: 7, 1, 9: 3\n" /* Type 1, direction Z+ */
+ "-1: 8, 1, 9: 3\n" /* Type -1, direction Z+ */
+ "1: 0, 1, 1: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 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,
+ }, // CorridorCorner
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // CorridorCrossing:
+ // The data has been exported from the gallery Water, area index 31, ID 581, created by LO1ZB
+ {
+ // Size:
+ 16, 4, 16, // SizeX = 16, SizeY = 4, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 3, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 64: 3\n" /* wooddoorblock */
+ "d: 64: 6\n" /* wooddoorblock */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 64: 2\n" /* wooddoorblock */
+ "h: 64: 1\n" /* wooddoorblock */
+ "i: 64: 8\n" /* wooddoorblock */
+ "j: 64:12\n" /* wooddoorblock */
+ "k: 20: 0\n" /* glass */
+ "l: 76: 1\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */
+ "n: 76: 3\n" /* redstonetorchon */
+ "o: 76: 4\n" /* redstonetorchon */
+ "p: 64: 9\n" /* wooddoorblock */
+ "q: 76: 2\n" /* redstonetorchon */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmaammmmmmm"
+ /* 1 */ "mmmmmmmbbmmmmmmm"
+ /* 2 */ "mmmmmmmbbmmmmmmm"
+ /* 3 */ "mmmmmmmbbmmmmmmm"
+ /* 4 */ "mmmmmmmbbmmmmmmm"
+ /* 5 */ "mmmmmmmbbmmmmmmm"
+ /* 6 */ "mmmmmmmbbmmmmmmm"
+ /* 7 */ "abbbbbbbbbbbbbba"
+ /* 8 */ "abbbbbbbbbbbbbba"
+ /* 9 */ "mmmmmmmbbmmmmmmm"
+ /* 10 */ "mmmmmmmbbmmmmmmm"
+ /* 11 */ "mmmmmmmbbmmmmmmm"
+ /* 12 */ "mmmmmmmbbmmmmmmm"
+ /* 13 */ "mmmmmmmbbmmmmmmm"
+ /* 14 */ "mmmmmmmbbmmmmmmm"
+ /* 15 */ "mmmmmmmaammmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmacdammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmb..bmmmmmm"
+ /* 3 */ "mmmmmmb..bmmmmmm"
+ /* 4 */ "mmmmmmb..bmmmmmm"
+ /* 5 */ "mmmmmmb..bmmmmmm"
+ /* 6 */ "abbbbbb..bbbbbba"
+ /* 7 */ "e..............f"
+ /* 8 */ "g..............f"
+ /* 9 */ "abbbbbb..bbbbbba"
+ /* 10 */ "mmmmmmb..bmmmmmm"
+ /* 11 */ "mmmmmmb..bmmmmmm"
+ /* 12 */ "mmmmmmb..bmmmmmm"
+ /* 13 */ "mmmmmmb..bmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmahhammmmmm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaijammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmk..kmmmmmm"
+ /* 3 */ "mmmmmmk..kmmmmmm"
+ /* 4 */ "mmmmmmb..bmmmmmm"
+ /* 5 */ "mmmmmmbl.bmmmmmm"
+ /* 6 */ "abkkbbb..bbbkkba"
+ /* 7 */ "j.........n....i"
+ /* 8 */ "i....o.........p"
+ /* 9 */ "abkkbbb..bbbkkba"
+ /* 10 */ "mmmmmmb.qbmmmmmm"
+ /* 11 */ "mmmmmmb..bmmmmmm"
+ /* 12 */ "mmmmmmk..kmmmmmm"
+ /* 13 */ "mmmmmmk..kmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmapiammmmmm"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaaaammmmmm"
+ /* 1 */ "mmmmmmbbbbmmmmmm"
+ /* 2 */ "mmmmmmbbbbmmmmmm"
+ /* 3 */ "mmmmmmbbbbmmmmmm"
+ /* 4 */ "mmmmmmbbbbmmmmmm"
+ /* 5 */ "mmmmmmbbbbmmmmmm"
+ /* 6 */ "abbbbbbbbbbbbbba"
+ /* 7 */ "abbbbbbbbbbbbbba"
+ /* 8 */ "abbbbbbbbbbbbbba"
+ /* 9 */ "abbbbbbbbbbbbbba"
+ /* 10 */ "mmmmmmbbbbmmmmmm"
+ /* 11 */ "mmmmmmbbbbmmmmmm"
+ /* 12 */ "mmmmmmbbbbmmmmmm"
+ /* 13 */ "mmmmmmbbbbmmmmmm"
+ /* 14 */ "mmmmmmbbbbmmmmmm"
+ /* 15 */ "mmmmmmaaaammmmmm",
+
+ // Connectors:
+ "1: 0, 1, 7: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 8: 4\n" /* Type -1, direction X- */
+ "1: 7, 1, 15: 3\n" /* Type 1, direction Z+ */
+ "-1: 8, 1, 15: 3\n" /* Type -1, direction Z+ */
+ "1: 8, 1, 0: 2\n" /* Type 1, direction Z- */
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */
+ "1: 15, 1, 8: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 7: 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,
+ }, // CorridorCrossing
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // CorridorStairs:
+ // The data has been exported from the gallery Water, area index 32, ID 582, created by LO1ZB
+ {
+ // Size:
+ 16, 9, 4, // SizeX = 16, SizeY = 9, SizeZ = 4
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 8, 3, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 64: 2\n" /* wooddoorblock */
+ "d: 53: 0\n" /* woodstairs */
+ "e: 20: 0\n" /* glass */
+ "f: 64: 9\n" /* wooddoorblock */
+ "g: 64: 8\n" /* wooddoorblock */
+ "h: 76: 4\n" /* redstonetorchon */
+ "i: 64: 0\n" /* wooddoorblock */
+ "j: 64: 7\n" /* wooddoorblock */
+ "k: 76: 3\n" /* redstonetorchon */
+ "l: 64:12\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "abbbbbbbmmmmmmmm"
+ /* 2 */ "abbbbbbbmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "abbbbbbbmmmmmmmm"
+ /* 1 */ "c.....dbbmmmmmmm"
+ /* 2 */ "c.....dbbmmmmmmm"
+ /* 3 */ "abbbbbbbmmmmmmmm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "abeebbbbbmmmmmmm"
+ /* 1 */ "f......dbbmmmmmm"
+ /* 2 */ "g...h..dbbmmmmmm"
+ /* 3 */ "abeebbbbbmmmmmmm"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "abbbbbbbbbmmmmmm"
+ /* 1 */ "abbbb...dbbmmmmm"
+ /* 2 */ "abbbb...dbbmmmmm"
+ /* 3 */ "abbbbbbbbbmmmmmm"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmbbbbbmmmmmm"
+ /* 1 */ "mmmmmb...dbbmmmm"
+ /* 2 */ "mmmmmb...dbbmmmm"
+ /* 3 */ "mmmmmbbbbbmmmmmm"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmbbbbbmmmmm"
+ /* 1 */ "mmmmmmb...dbbbba"
+ /* 2 */ "mmmmmmb...dbbbba"
+ /* 3 */ "mmmmmmbbbbbmmmmm"
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmbbbbbbbba"
+ /* 1 */ "mmmmmmmb.......i"
+ /* 2 */ "mmmmmmmb.......j"
+ /* 3 */ "mmmmmmmbbbbbbbba"
+
+ // Level 7
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmbbbeebba"
+ /* 1 */ "mmmmmmmmb.k....g"
+ /* 2 */ "mmmmmmmmb......l"
+ /* 3 */ "mmmmmmmmbbbeebba"
+
+ // Level 8
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmbbbbbba"
+ /* 1 */ "mmmmmmmmmbbbbbba"
+ /* 2 */ "mmmmmmmmmbbbbbba"
+ /* 3 */ "mmmmmmmmmbbbbbba",
+
+ // Connectors:
+ "1: 0, 1, 1: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 2: 4\n" /* Type -1, direction X- */
+ "1: 15, 6, 2: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 6, 1: 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,
+ }, // CorridorStairs
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // CorridorTee:
+ // The data has been exported from the gallery Water, area index 29, ID 576, created by LO1ZB
+ {
+ // Size:
+ 16, 4, 10, // SizeX = 16, SizeY = 4, SizeZ = 10
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 3, 9, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 64: 3\n" /* wooddoorblock */
+ "d: 64: 6\n" /* wooddoorblock */
+ "e: 64: 5\n" /* wooddoorblock */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 64: 2\n" /* wooddoorblock */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 20: 0\n" /* glass */
+ "k: 76: 1\n" /* redstonetorchon */
+ "l: 76: 3\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */
+ "n: 76: 4\n" /* redstonetorchon */
+ "o: 64: 9\n" /* wooddoorblock */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmaammmmmmm"
+ /* 1 */ "mmmmmmmbbmmmmmmm"
+ /* 2 */ "mmmmmmmbbmmmmmmm"
+ /* 3 */ "mmmmmmmbbmmmmmmm"
+ /* 4 */ "mmmmmmmbbmmmmmmm"
+ /* 5 */ "mmmmmmmbbmmmmmmm"
+ /* 6 */ "mmmmmmmbbmmmmmmm"
+ /* 7 */ "abbbbbbbbbbbbbba"
+ /* 8 */ "abbbbbbbbbbbbbba"
+ /* 9 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmacdammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmb..bmmmmmm"
+ /* 3 */ "mmmmmmb..bmmmmmm"
+ /* 4 */ "mmmmmmb..bmmmmmm"
+ /* 5 */ "mmmmmmb..bmmmmmm"
+ /* 6 */ "abbbbbb..bbbbbba"
+ /* 7 */ "e..............f"
+ /* 8 */ "g..............f"
+ /* 9 */ "abbbbbbbbbbbbbba"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmahiammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmj..jmmmmmm"
+ /* 3 */ "mmmmmmj..jmmmmmm"
+ /* 4 */ "mmmmmmb..bmmmmmm"
+ /* 5 */ "mmmmmmbk.bmmmmmm"
+ /* 6 */ "abjjbbb..bbbjjba"
+ /* 7 */ "i.........l....h"
+ /* 8 */ "h....n.........o"
+ /* 9 */ "abjjbbbjjbbbjjba"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaaaammmmmm"
+ /* 1 */ "mmmmmmbbbbmmmmmm"
+ /* 2 */ "mmmmmmbbbbmmmmmm"
+ /* 3 */ "mmmmmmbbbbmmmmmm"
+ /* 4 */ "mmmmmmbbbbmmmmmm"
+ /* 5 */ "mmmmmmbbbbmmmmmm"
+ /* 6 */ "abbbbbbbbbbbbbba"
+ /* 7 */ "abbbbbbbbbbbbbba"
+ /* 8 */ "abbbbbbbbbbbbbba"
+ /* 9 */ "abbbbbbbbbbbbbba",
+
+ // Connectors:
+ "1: 0, 1, 7: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 8: 4\n" /* Type -1, direction X- */
+ "1: 8, 1, 0: 2\n" /* Type 1, direction Z- */
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */
+ "1: 15, 1, 8: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 7: 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,
+ }, // CorridorTee
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ViewingCorner:
+ // The data has been exported from the gallery Water, area index 40, ID 613, created by LO1ZB
+ {
+ // Size:
+ 14, 7, 14, // SizeX = 14, SizeY = 7, SizeZ = 14
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 6, 13, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 20: 0\n" /* glass */
+ "c: 5: 5\n" /* wood */
+ "d: 64: 0\n" /* wooddoorblock */
+ "e: 64: 1\n" /* wooddoorblock */
+ "f: 64: 8\n" /* wooddoorblock */
+ "g: 64: 9\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmaaaammmmmm"
+ /* 2 */ "mmmaabbaammmmm"
+ /* 3 */ "mmaabbbbaammmm"
+ /* 4 */ "maabbbbbbaammm"
+ /* 5 */ "mabbbbbbbbaaac"
+ /* 6 */ "mabbbbbbbbaaac"
+ /* 7 */ "maabbbbbbaammm"
+ /* 8 */ "mmaabbbbaammmm"
+ /* 9 */ "mmmaabbaammmmm"
+ /* 10 */ "mmmmaaaammmmmm"
+ /* 11 */ "mmmmmaammmmmmm"
+ /* 12 */ "mmmmmaammmmmmm"
+ /* 13 */ "mmmmmccmmmmmmm"
+
+ // Level 1
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmaammmmmmm"
+ /* 1 */ "mmmaa..aammmmm"
+ /* 2 */ "mmaa....aammmm"
+ /* 3 */ "maa......aammm"
+ /* 4 */ "ma........aaac"
+ /* 5 */ "a............d"
+ /* 6 */ "a............d"
+ /* 7 */ "ma........aaac"
+ /* 8 */ "maa......aammm"
+ /* 9 */ "mmaa....aammmm"
+ /* 10 */ "mmmaa..aammmmm"
+ /* 11 */ "mmmma..ammmmmm"
+ /* 12 */ "mmmma..ammmmmm"
+ /* 13 */ "mmmmceecmmmmmm"
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmbbmmmmmmm"
+ /* 1 */ "mmmbb..bbmmmmm"
+ /* 2 */ "mmbb....bbmmmm"
+ /* 3 */ "mbb......bbmmm"
+ /* 4 */ "mb........bbac"
+ /* 5 */ "b............f"
+ /* 6 */ "b............g"
+ /* 7 */ "mb........bbac"
+ /* 8 */ "mbb......bbmmm"
+ /* 9 */ "mmbb....bbmmmm"
+ /* 10 */ "mmmbb..bbmmmmm"
+ /* 11 */ "mmmmb..bmmmmmm"
+ /* 12 */ "mmmma..ammmmmm"
+ /* 13 */ "mmmmcgfcmmmmmm"
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmbbmmmmmmm"
+ /* 1 */ "mmmbb..bbmmmmm"
+ /* 2 */ "mmbb....bbmmmm"
+ /* 3 */ "mbb......bbmmm"
+ /* 4 */ "mb........bbac"
+ /* 5 */ "b..........bac"
+ /* 6 */ "b..........bac"
+ /* 7 */ "mb........bbac"
+ /* 8 */ "mbb......bbmmm"
+ /* 9 */ "mmbb....bbmmmm"
+ /* 10 */ "mmmbb..bbmmmmm"
+ /* 11 */ "mmmmbbbbmmmmmm"
+ /* 12 */ "mmmmaaaammmmmm"
+ /* 13 */ "mmmmccccmmmmmm"
+
+ // Level 4
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmbbmmmmmmm"
+ /* 2 */ "mmmmb..bmmmmmm"
+ /* 3 */ "mmmb....bmmmmm"
+ /* 4 */ "mmb......bmmmm"
+ /* 5 */ "mb........bmmm"
+ /* 6 */ "mb........bmmm"
+ /* 7 */ "mmb......bmmmm"
+ /* 8 */ "mmmbb...bmmmmm"
+ /* 9 */ "mmmmb..bmmmmmm"
+ /* 10 */ "mmmmmbbmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmbbmmmmmmm"
+ /* 3 */ "mmmmb..bmmmmmm"
+ /* 4 */ "mmmb....bmmmmm"
+ /* 5 */ "mmb......bmmmm"
+ /* 6 */ "mmb......bmmmm"
+ /* 7 */ "mmmb....bmmmmm"
+ /* 8 */ "mmmmb.bbmmmmmm"
+ /* 9 */ "mmmmmbbmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmbbmmmmmmm"
+ /* 4 */ "mmmmbbbbmmmmmm"
+ /* 5 */ "mmmbbbbbbmmmmm"
+ /* 6 */ "mmmbbbbbbmmmmm"
+ /* 7 */ "mmmmbbbbmmmmmm"
+ /* 8 */ "mmmmmbbmmmmmmm"
+ /* 9 */ "mmmmmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 13, 1, 6: 5\n" /* Type 1, direction X+ */
+ "-1: 13, 1, 5: 5\n" /* Type -1, direction X+ */
+ "1: 5, 1, 13: 3\n" /* Type 1, direction Z+ */
+ "-1: 6, 1, 13: 3\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,
+ }, // ViewingCorner
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ViewingCorridor:
+ // The data has been exported from the gallery Water, area index 27, ID 571, created by LO1ZB
+ {
+ // Size:
+ 16, 5, 6, // SizeX = 16, SizeY = 5, SizeZ = 6
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 4, 5, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 5: 5\n" /* wood */
+ "c: 20: 0\n" /* glass */
+ "d: 64: 1\n" /* wooddoorblock */
+ "e: 64: 0\n" /* wooddoorblock */
+ "f: 64: 6\n" /* wooddoorblock */
+ "g: 76: 3\n" /* redstonetorchon */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 64:12\n" /* wooddoorblock */
+ "j: 64: 9\n" /* wooddoorblock */
+ "k: 76: 4\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmaaaaaaaaaaaamm"
+ /* 1 */ "mmaaaaaaaaaaaamm"
+ /* 2 */ "baaccccccccccaab"
+ /* 3 */ "baaccccccccccaab"
+ /* 4 */ "mmaaaaaaaaaaaamm"
+ /* 5 */ "mmmaaaaaaaaaammm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmaccccccccccamm"
+ /* 1 */ "ba............ab"
+ /* 2 */ "d..............e"
+ /* 3 */ "f..............e"
+ /* 4 */ "ba............ab"
+ /* 5 */ "mmaccccccccccamm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmaccccccccccamm"
+ /* 1 */ "bag..........gab"
+ /* 2 */ "h..............h"
+ /* 3 */ "i..............j"
+ /* 4 */ "bak..........kab"
+ /* 5 */ "mmaccccccccccamm"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmaccccccccccamm"
+ /* 1 */ "ba............ab"
+ /* 2 */ "ba............ab"
+ /* 3 */ "ba............ab"
+ /* 4 */ "ba............ab"
+ /* 5 */ "mmaccccccccccamm"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmaaaaaaaaaammm"
+ /* 1 */ "mmaaaaaaaaaaaamm"
+ /* 2 */ "mmaccccccccccamm"
+ /* 3 */ "mmaccccccccccamm"
+ /* 4 */ "mmaaaaaaaaaaaamm"
+ /* 5 */ "mmmaaaaaaaaaammm",
+
+ // Connectors:
+ "1: 0, 1, 2: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 3: 4\n" /* Type -1, direction X- */
+ "1: 15, 1, 3: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 2: 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,
+ }, // ViewingCorridor
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ViewingCorridorBulge:
+ // The data has been exported from the gallery Water, area index 42, ID 615, created by LO1ZB
+ {
+ // Size:
+ 12, 8, 16, // SizeX = 12, SizeY = 8, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 20: 0\n" /* glass */
+ "d: 64: 3\n" /* wooddoorblock */
+ "e: 64: 1\n" /* wooddoorblock */
+ "f: 64: 8\n" /* wooddoorblock */
+ "g: 64: 9\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmmaammmmm"
+ /* 1 */ "mmmmmbbmmmmm"
+ /* 2 */ "mmmmmbbmmmmm"
+ /* 3 */ "mmmmbbbbmmmm"
+ /* 4 */ "mmmbbccbbmmm"
+ /* 5 */ "mmbbccccbbmm"
+ /* 6 */ "mbbccccccbbm"
+ /* 7 */ "mbccccccccbm"
+ /* 8 */ "mbccccccccbm"
+ /* 9 */ "mbbccccccbbm"
+ /* 10 */ "mmbbccccbbmm"
+ /* 11 */ "mmmbbccbbmmm"
+ /* 12 */ "mmmmbbbbmmmm"
+ /* 13 */ "mmmmmbbmmmmm"
+ /* 14 */ "mmmmmbbmmmmm"
+ /* 15 */ "mmmmmaammmmm"
+
+ // Level 1
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmaddammmm"
+ /* 1 */ "mmmmb..bmmmm"
+ /* 2 */ "mmmmb..bmmmm"
+ /* 3 */ "mmmbb..bbmmm"
+ /* 4 */ "mmbb....bbmm"
+ /* 5 */ "mbb......bbm"
+ /* 6 */ "mb........bm"
+ /* 7 */ "b..........b"
+ /* 8 */ "b..........b"
+ /* 9 */ "mb........bm"
+ /* 10 */ "mbb......bbm"
+ /* 11 */ "mmbb....bbmm"
+ /* 12 */ "mmmbb..bbmmm"
+ /* 13 */ "mmmmb..bmmmm"
+ /* 14 */ "mmmmb..bmmmm"
+ /* 15 */ "mmmmaeeammmm"
+
+ // Level 2
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmaffammmm"
+ /* 1 */ "mmmmb..bmmmm"
+ /* 2 */ "mmmmc..cmmmm"
+ /* 3 */ "mmmcc..ccmmm"
+ /* 4 */ "mmcc....ccmm"
+ /* 5 */ "mcc......ccm"
+ /* 6 */ "mc........cm"
+ /* 7 */ "c..........c"
+ /* 8 */ "c..........c"
+ /* 9 */ "mc........cm"
+ /* 10 */ "mcc......ccm"
+ /* 11 */ "mmcc....ccmm"
+ /* 12 */ "mmmcc..ccmmm"
+ /* 13 */ "mmmmc..cmmmm"
+ /* 14 */ "mmmmb..bmmmm"
+ /* 15 */ "mmmmagfammmm"
+
+ // Level 3
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmaaaammmm"
+ /* 1 */ "mmmmbbbbmmmm"
+ /* 2 */ "mmmmccccmmmm"
+ /* 3 */ "mmmcc..ccmmm"
+ /* 4 */ "mmcc....ccmm"
+ /* 5 */ "mcc......ccm"
+ /* 6 */ "mc........cm"
+ /* 7 */ "c..........c"
+ /* 8 */ "c..........c"
+ /* 9 */ "mc........cm"
+ /* 10 */ "mcc......ccm"
+ /* 11 */ "mmcc....ccmm"
+ /* 12 */ "mmmcc..ccmmm"
+ /* 13 */ "mmmmccccmmmm"
+ /* 14 */ "mmmmbbbbmmmm"
+ /* 15 */ "mmmmaaaammmm"
+
+ // Level 4
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmm"
+ /* 3 */ "mmmmmccmmmmm"
+ /* 4 */ "mmmmc..cmmmm"
+ /* 5 */ "mmmc....cmmm"
+ /* 6 */ "mmc......cmm"
+ /* 7 */ "mc........cm"
+ /* 8 */ "mc........cm"
+ /* 9 */ "mmc......cmm"
+ /* 10 */ "mmmcc...cmmm"
+ /* 11 */ "mmmmc..cmmmm"
+ /* 12 */ "mmmmmccmmmmm"
+ /* 13 */ "mmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmm"
+ /* 4 */ "mmmmmccmmmmm"
+ /* 5 */ "mmmmc..cmmmm"
+ /* 6 */ "mmmc....cmmm"
+ /* 7 */ "mmc......cmm"
+ /* 8 */ "mmc......cmm"
+ /* 9 */ "mmmc....cmmm"
+ /* 10 */ "mmmmc.ccmmmm"
+ /* 11 */ "mmmmmccmmmmm"
+ /* 12 */ "mmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmmm"
+ /* 5 */ "mmmmmccmmmmm"
+ /* 6 */ "mmmmccccmmmm"
+ /* 7 */ "mmmccccccmmm"
+ /* 8 */ "mmmccccccmmm"
+ /* 9 */ "mmmmccccmmmm"
+ /* 10 */ "mmmmmccmmmmm"
+ /* 11 */ "mmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmm"
+
+ // Level 7
+ /* z\x* 11 */
+ /* * 012345678901 */
+ /* 0 */ "mmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmmm"
+ /* 5 */ "mmmmmmmmmmmm"
+ /* 6 */ "mmmmmmmmmmmm"
+ /* 7 */ "mmmmmmmmmmmm"
+ /* 8 */ "mmmmmmmmmmmm"
+ /* 9 */ "mmmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 6, 1, 0: 2\n" /* Type 1, direction Z- */
+ "-1: 5, 1, 0: 2\n" /* Type -1, direction Z- */
+ "1: 5, 1, 15: 3\n" /* Type 1, direction Z+ */
+ "-1: 6, 1, 15: 3\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,
+ }, // ViewingCorridorBulge
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ViewingCrossing:
+ // The data has been exported from the gallery Water, area index 38, ID 611, created by LO1ZB
+ {
+ // Size:
+ 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 6, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 20: 0\n" /* glass */
+ "d: 64: 3\n" /* wooddoorblock */
+ "e: 64: 2\n" /* wooddoorblock */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 64: 1\n" /* wooddoorblock */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 64: 9\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmaammmmmmm"
+ /* 1 */ "mmmmmmmbbmmmmmmm"
+ /* 2 */ "mmmmmmmbbmmmmmmm"
+ /* 3 */ "mmmmmmbbbbmmmmmm"
+ /* 4 */ "mmmmmbbccbbmmmmm"
+ /* 5 */ "mmmmbbccccbbmmmm"
+ /* 6 */ "mmmbbccccccbbmmm"
+ /* 7 */ "abbbccccccccbbba"
+ /* 8 */ "abbbccccccccbbba"
+ /* 9 */ "mmmbbccccccbbmmm"
+ /* 10 */ "mmmmbbccccbbmmmm"
+ /* 11 */ "mmmmmbbccbbmmmmm"
+ /* 12 */ "mmmmmmbbbbmmmmmm"
+ /* 13 */ "mmmmmmmbbmmmmmmm"
+ /* 14 */ "mmmmmmmbbmmmmmmm"
+ /* 15 */ "mmmmmmmaammmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaddammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmb..bmmmmmm"
+ /* 3 */ "mmmmmbb..bbmmmmm"
+ /* 4 */ "mmmmbb....bbmmmm"
+ /* 5 */ "mmmbb......bbmmm"
+ /* 6 */ "abbb........bbba"
+ /* 7 */ "e..............f"
+ /* 8 */ "e..............f"
+ /* 9 */ "abbb........bbba"
+ /* 10 */ "mmmbb......bbmmm"
+ /* 11 */ "mmmmbb....bbmmmm"
+ /* 12 */ "mmmmmbb..bbmmmmm"
+ /* 13 */ "mmmmmmb..bmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmaggammmmmm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmahiammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmc..cmmmmmm"
+ /* 3 */ "mmmmmcc..ccmmmmm"
+ /* 4 */ "mmmmcc....ccmmmm"
+ /* 5 */ "mmmcc......ccmmm"
+ /* 6 */ "abcc........ccba"
+ /* 7 */ "i..............h"
+ /* 8 */ "h..............i"
+ /* 9 */ "abcc........ccba"
+ /* 10 */ "mmmcc......ccmmm"
+ /* 11 */ "mmmmcc....ccmmmm"
+ /* 12 */ "mmmmmcc..ccmmmmm"
+ /* 13 */ "mmmmmmc..cmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmaihammmmmm"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaaaammmmmm"
+ /* 1 */ "mmmmmmbbbbmmmmmm"
+ /* 2 */ "mmmmmmccccmmmmmm"
+ /* 3 */ "mmmmmcc..ccmmmmm"
+ /* 4 */ "mmmmcc....ccmmmm"
+ /* 5 */ "mmmcc......ccmmm"
+ /* 6 */ "abcc........ccba"
+ /* 7 */ "abc..........cba"
+ /* 8 */ "abc..........cba"
+ /* 9 */ "abcc........ccba"
+ /* 10 */ "mmmcc......ccmmm"
+ /* 11 */ "mmmmcc....ccmmmm"
+ /* 12 */ "mmmmmcc..ccmmmmm"
+ /* 13 */ "mmmmmmccccmmmmmm"
+ /* 14 */ "mmmmmmbbbbmmmmmm"
+ /* 15 */ "mmmmmmaaaammmmmm"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmccmmmmmmm"
+ /* 4 */ "mmmmmmc..cmmmmmm"
+ /* 5 */ "mmmmmc....cmmmmm"
+ /* 6 */ "mmmmc......cmmmm"
+ /* 7 */ "mmmc........cmmm"
+ /* 8 */ "mmmc........cmmm"
+ /* 9 */ "mmmmc......cmmmm"
+ /* 10 */ "mmmmmcc...cmmmmm"
+ /* 11 */ "mmmmmmc..cmmmmmm"
+ /* 12 */ "mmmmmmmccmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmccmmmmmmm"
+ /* 5 */ "mmmmmmc..cmmmmmm"
+ /* 6 */ "mmmmmc....cmmmmm"
+ /* 7 */ "mmmmc......cmmmm"
+ /* 8 */ "mmmmc......cmmmm"
+ /* 9 */ "mmmmmc....cmmmmm"
+ /* 10 */ "mmmmmmc.ccmmmmmm"
+ /* 11 */ "mmmmmmmccmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmmmmmmm"
+ /* 5 */ "mmmmmmmccmmmmmmm"
+ /* 6 */ "mmmmmmccccmmmmmm"
+ /* 7 */ "mmmmmccccccmmmmm"
+ /* 8 */ "mmmmmccccccmmmmm"
+ /* 9 */ "mmmmmmccccmmmmmm"
+ /* 10 */ "mmmmmmmccmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 0, 1, 7: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 8: 4\n" /* Type -1, direction X- */
+ "1: 8, 1, 0: 2\n" /* Type 1, direction Z- */
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */
+ "1: 15, 1, 8: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 7: 5\n" /* Type -1, direction X+ */
+ "1: 7, 1, 15: 3\n" /* Type 1, direction Z+ */
+ "-1: 8, 1, 15: 3\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,
+ }, // ViewingCrossing
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ViewingEnd:
+ // The data has been exported from the gallery Water, area index 41, ID 614, created by LO1ZB
+ {
+ // Size:
+ 14, 7, 12, // SizeX = 14, SizeY = 7, SizeZ = 12
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 6, 11, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 20: 0\n" /* glass */
+ "c: 5: 5\n" /* wood */
+ "d: 64: 0\n" /* wooddoorblock */
+ "e: 64: 8\n" /* wooddoorblock */
+ "f: 64: 9\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmaaaammmmmm"
+ /* 2 */ "mmmaabbaammmmm"
+ /* 3 */ "mmaabbbbaammmm"
+ /* 4 */ "maabbbbbbaammm"
+ /* 5 */ "mabbbbbbbbaaac"
+ /* 6 */ "mabbbbbbbbaaac"
+ /* 7 */ "maabbbbbbaammm"
+ /* 8 */ "mmaabbbbaammmm"
+ /* 9 */ "mmmaabbaammmmm"
+ /* 10 */ "mmmmaaaammmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmaammmmmmm"
+ /* 1 */ "mmmaa..aammmmm"
+ /* 2 */ "mmaa....aammmm"
+ /* 3 */ "maa......aammm"
+ /* 4 */ "ma........aaac"
+ /* 5 */ "a............d"
+ /* 6 */ "a............d"
+ /* 7 */ "ma........aaac"
+ /* 8 */ "maa......aammm"
+ /* 9 */ "mmaa....aammmm"
+ /* 10 */ "mmmaa..aammmmm"
+ /* 11 */ "mmmmmaammmmmmm"
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmbbmmmmmmm"
+ /* 1 */ "mmmbb..bbmmmmm"
+ /* 2 */ "mmbb....bbmmmm"
+ /* 3 */ "mbb......bbmmm"
+ /* 4 */ "mb........bbac"
+ /* 5 */ "b............e"
+ /* 6 */ "b............f"
+ /* 7 */ "mb........bbac"
+ /* 8 */ "mbb......bbmmm"
+ /* 9 */ "mmbb....bbmmmm"
+ /* 10 */ "mmmbb..bbmmmmm"
+ /* 11 */ "mmmmmbbmmmmmmm"
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmbbmmmmmmm"
+ /* 1 */ "mmmbb..bbmmmmm"
+ /* 2 */ "mmbb....bbmmmm"
+ /* 3 */ "mbb......bbmmm"
+ /* 4 */ "mb........bbac"
+ /* 5 */ "b..........bac"
+ /* 6 */ "b..........bac"
+ /* 7 */ "mb........bbac"
+ /* 8 */ "mbb......bbmmm"
+ /* 9 */ "mmbb....bbmmmm"
+ /* 10 */ "mmmbb..bbmmmmm"
+ /* 11 */ "mmmmmbbmmmmmmm"
+
+ // Level 4
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmbbmmmmmmm"
+ /* 2 */ "mmmmb..bmmmmmm"
+ /* 3 */ "mmmb....bmmmmm"
+ /* 4 */ "mmb......bmmmm"
+ /* 5 */ "mb........bmmm"
+ /* 6 */ "mb........bmmm"
+ /* 7 */ "mmb......bmmmm"
+ /* 8 */ "mmmbb...bmmmmm"
+ /* 9 */ "mmmmb..bmmmmmm"
+ /* 10 */ "mmmmmbbmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmbbmmmmmmm"
+ /* 3 */ "mmmmb..bmmmmmm"
+ /* 4 */ "mmmb....bmmmmm"
+ /* 5 */ "mmb......bmmmm"
+ /* 6 */ "mmb......bmmmm"
+ /* 7 */ "mmmb....bmmmmm"
+ /* 8 */ "mmmmb.bbmmmmmm"
+ /* 9 */ "mmmmmbbmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmbbmmmmmmm"
+ /* 4 */ "mmmmbbbbmmmmmm"
+ /* 5 */ "mmmbbbbbbmmmmm"
+ /* 6 */ "mmmbbbbbbmmmmm"
+ /* 7 */ "mmmmbbbbmmmmmm"
+ /* 8 */ "mmmmmbbmmmmmmm"
+ /* 9 */ "mmmmmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 13, 1, 6: 5\n" /* Type 1, direction X+ */
+ "-1: 13, 1, 5: 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,
+ }, // ViewingEnd
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ViewingTee:
+ // The data has been exported from the gallery Water, area index 39, ID 612, created by LO1ZB
+ {
+ // Size:
+ 14, 7, 17, // SizeX = 14, SizeY = 7, SizeZ = 17
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 6, 16, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 20: 0\n" /* glass */
+ "d: 1: 0\n" /* stone */
+ "e: 64: 3\n" /* wooddoorblock */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 64: 1\n" /* wooddoorblock */
+ "h: 64: 8\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmaammmmmmm"
+ /* 1 */ "mmmmmbbmmmmmmm"
+ /* 2 */ "mmmmmbbmmmmmmm"
+ /* 3 */ "mmmmbbbbmmmmmm"
+ /* 4 */ "mmmbbccbbmmmmm"
+ /* 5 */ "mmbbccccbbmmmm"
+ /* 6 */ "mbbccccccbbmmm"
+ /* 7 */ "mbccccccccbbba"
+ /* 8 */ "mbccccccccbbba"
+ /* 9 */ "mbbccccccbbmmm"
+ /* 10 */ "mmbbccccbbmmmm"
+ /* 11 */ "mmmbbccbbmmmmm"
+ /* 12 */ "mmmmbbbbmmmmmm"
+ /* 13 */ "mmmmmbbmmmmmmm"
+ /* 14 */ "mmmmmbbmmmmmmm"
+ /* 15 */ "mmmmmaammmmmmm"
+ /* 16 */ "dddddddddddddd"
+
+ // Level 1
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmaeeammmmmm"
+ /* 1 */ "mmmmb..bmmmmmm"
+ /* 2 */ "mmmmb..bmmmmmm"
+ /* 3 */ "mmmbb..bbmmmmm"
+ /* 4 */ "mmbb....bbmmmm"
+ /* 5 */ "mbb......bbmmm"
+ /* 6 */ "mb........bbba"
+ /* 7 */ "b............f"
+ /* 8 */ "b............f"
+ /* 9 */ "mb........bbba"
+ /* 10 */ "mbb......bbmmm"
+ /* 11 */ "mmbb....bbmmmm"
+ /* 12 */ "mmmbb..bbmmmmm"
+ /* 13 */ "mmmmb..bmmmmmm"
+ /* 14 */ "mmmmb..bmmmmmm"
+ /* 15 */ "mmmmaggammmmmm"
+ /* 16 */ "dddddddddddddd"
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmahhammmmmm"
+ /* 1 */ "mmmmb..bmmmmmm"
+ /* 2 */ "mmmmc..cmmmmmm"
+ /* 3 */ "mmmcc..ccmmmmm"
+ /* 4 */ "mmcc....ccmmmm"
+ /* 5 */ "mcc......ccmmm"
+ /* 6 */ "mc........ccba"
+ /* 7 */ "c............h"
+ /* 8 */ "c............h"
+ /* 9 */ "mc........ccba"
+ /* 10 */ "mcc......ccmmm"
+ /* 11 */ "mmcc....ccmmmm"
+ /* 12 */ "mmmcc..ccmmmmm"
+ /* 13 */ "mmmmc..cmmmmmm"
+ /* 14 */ "mmmmb..bmmmmmm"
+ /* 15 */ "mmmmahhammmmmm"
+ /* 16 */ "dddddddddddddd"
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmaaaammmmmm"
+ /* 1 */ "mmmmbbbbmmmmmm"
+ /* 2 */ "mmmmccccmmmmmm"
+ /* 3 */ "mmmcc..ccmmmmm"
+ /* 4 */ "mmcc....ccmmmm"
+ /* 5 */ "mcc......ccmmm"
+ /* 6 */ "mc........ccba"
+ /* 7 */ "c..........cba"
+ /* 8 */ "c..........cba"
+ /* 9 */ "mc........ccba"
+ /* 10 */ "mcc......ccmmm"
+ /* 11 */ "mmcc....ccmmmm"
+ /* 12 */ "mmmcc..ccmmmmm"
+ /* 13 */ "mmmmccccmmmmmm"
+ /* 14 */ "mmmmbbbbmmmmmm"
+ /* 15 */ "mmmmaaaammmmmm"
+ /* 16 */ "dddddddddddddd"
+
+ // Level 4
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmccmmmmmmm"
+ /* 4 */ "mmmmc..cmmmmmm"
+ /* 5 */ "mmmc....cmmmmm"
+ /* 6 */ "mmc......cmmmm"
+ /* 7 */ "mc........cmmm"
+ /* 8 */ "mc........cmmm"
+ /* 9 */ "mmc......cmmmm"
+ /* 10 */ "mmmcc...cmmmmm"
+ /* 11 */ "mmmmc..cmmmmmm"
+ /* 12 */ "mmmmmccmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmm"
+ /* 16 */ "dddddddddddddd"
+
+ // Level 5
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmccmmmmmmm"
+ /* 5 */ "mmmmc..cmmmmmm"
+ /* 6 */ "mmmc....cmmmmm"
+ /* 7 */ "mmc......cmmmm"
+ /* 8 */ "mmc......cmmmm"
+ /* 9 */ "mmmc....cmmmmm"
+ /* 10 */ "mmmmc.ccmmmmmm"
+ /* 11 */ "mmmmmccmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmm"
+ /* 16 */ "dddddddddddddd"
+
+ // Level 6
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmmmmm"
+ /* 5 */ "mmmmmccmmmmmmm"
+ /* 6 */ "mmmmccccmmmmmm"
+ /* 7 */ "mmmccccccmmmmm"
+ /* 8 */ "mmmccccccmmmmm"
+ /* 9 */ "mmmmccccmmmmmm"
+ /* 10 */ "mmmmmccmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmm"
+ /* 16 */ "dddddddddddddd",
+
+ // Connectors:
+ "",
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 100,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // ViewingTee
+}; // g_UnderwaterBasePrefabs
+
+
+
+
+
+
+const cPrefab::sDef g_UnderwaterBaseStartingPrefabs[] =
+{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // CentralRoom:
+ // The data has been exported from the gallery Water, area index 24, ID 564, created by xoft
+ {
+ // Size:
+ 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 6, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 20: 0\n" /* glass */
+ "d: 64: 3\n" /* wooddoorblock */
+ "e: 64: 2\n" /* wooddoorblock */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 64: 1\n" /* wooddoorblock */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 64: 9\n" /* wooddoorblock */
+ "j: 76: 3\n" /* redstonetorchon */
+ "k: 76: 1\n" /* redstonetorchon */
+ "l: 76: 2\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */
+ "n: 76: 4\n" /* redstonetorchon */
+ "o:125: 8\n" /* woodendoubleslab */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmaammmmmmm"
+ /* 1 */ "mmmmmmmbbmmmmmmm"
+ /* 2 */ "mmmmmmmbbmmmmmmm"
+ /* 3 */ "mmmmmmbbbbmmmmmm"
+ /* 4 */ "mmmmmbbbbbbmmmmm"
+ /* 5 */ "mmmmbbbccbbbmmmm"
+ /* 6 */ "mmmbbbccccbbbmmm"
+ /* 7 */ "abbbbccccccbbbba"
+ /* 8 */ "abbbbccccccbbbba"
+ /* 9 */ "mmmbbbccccbbbmmm"
+ /* 10 */ "mmmmbbbccbbbmmmm"
+ /* 11 */ "mmmmmbbbbbbmmmmm"
+ /* 12 */ "mmmmmmbbbbmmmmmm"
+ /* 13 */ "mmmmmmmbbmmmmmmm"
+ /* 14 */ "mmmmmmmbbmmmmmmm"
+ /* 15 */ "mmmmmmmaammmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaddammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmb..bmmmmmm"
+ /* 3 */ "mmmmmbb..bbmmmmm"
+ /* 4 */ "mmmmbb....bbmmmm"
+ /* 5 */ "mmmbb......bbmmm"
+ /* 6 */ "abbb........bbba"
+ /* 7 */ "e..............f"
+ /* 8 */ "e..............f"
+ /* 9 */ "abbb........bbba"
+ /* 10 */ "mmmbb......bbmmm"
+ /* 11 */ "mmmmbb....bbmmmm"
+ /* 12 */ "mmmmmbb..bbmmmmm"
+ /* 13 */ "mmmmmmb..bmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmaggammmmmm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmahiammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmb..bmmmmmm"
+ /* 3 */ "mmmmmcc..ccmmmmm"
+ /* 4 */ "mmmmcc....ccmmmm"
+ /* 5 */ "mmmcc......ccmmm"
+ /* 6 */ "abbc........cbba"
+ /* 7 */ "h..............h"
+ /* 8 */ "h..............i"
+ /* 9 */ "abbc........cbba"
+ /* 10 */ "mmmcc......ccmmm"
+ /* 11 */ "mmmmcc....ccmmmm"
+ /* 12 */ "mmmmmcc..ccmmmmm"
+ /* 13 */ "mmmmmmb..bmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmaihammmmmm"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaaaammmmmm"
+ /* 1 */ "mmmmmmbbbbmmmmmm"
+ /* 2 */ "mmmmmmbbbbmmmmmm"
+ /* 3 */ "mmmmmbb..bbmmmmm"
+ /* 4 */ "mmmmbb....bbmmmm"
+ /* 5 */ "mmmbb......bbmmm"
+ /* 6 */ "abbb........bbba"
+ /* 7 */ "abb..........bba"
+ /* 8 */ "abb..........bba"
+ /* 9 */ "abbb........bbba"
+ /* 10 */ "mmmbb......bbmmm"
+ /* 11 */ "mmmmbb....bbmmmm"
+ /* 12 */ "mmmmmbb..bbmmmmm"
+ /* 13 */ "mmmmmmbbbbmmmmmm"
+ /* 14 */ "mmmmmmbbbbmmmmmm"
+ /* 15 */ "mmmmmmaaaammmmmm"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmbbmmmmmmm"
+ /* 4 */ "mmmmmmbjjbmmmmmm"
+ /* 5 */ "mmmmmb....bmmmmm"
+ /* 6 */ "mmmmb......bmmmm"
+ /* 7 */ "mmmbk......lbmmm"
+ /* 8 */ "mmmbk......lbmmm"
+ /* 9 */ "mmmmb......bmmmm"
+ /* 10 */ "mmmmmb....bmmmmm"
+ /* 11 */ "mmmmmmbnnbmmmmmm"
+ /* 12 */ "mmmmmmmbbmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmbbmmmmmmm"
+ /* 5 */ "mmmmmmb..bmmmmmm"
+ /* 6 */ "mmmmmb....bmmmmm"
+ /* 7 */ "mmmmb......bmmmm"
+ /* 8 */ "mmmmb......bmmmm"
+ /* 9 */ "mmmmmb....bmmmmm"
+ /* 10 */ "mmmmmmboobmmmmmm"
+ /* 11 */ "mmmmmmmbbmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmmmmmmm"
+ /* 5 */ "mmmmmmmbbmmmmmmm"
+ /* 6 */ "mmmmmmbbbbmmmmmm"
+ /* 7 */ "mmmmmbbccbbmmmmm"
+ /* 8 */ "mmmmmbbccbbmmmmm"
+ /* 9 */ "mmmmmmbbbbmmmmmm"
+ /* 10 */ "mmmmmmmbbmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 0, 1, 7: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 8: 4\n" /* Type -1, direction X- */
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */
+ "1: 8, 1, 0: 2\n" /* Type 1, direction Z- */
+ "1: 15, 1, 8: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 7: 5\n" /* Type -1, direction X+ */
+ "1: 7, 1, 15: 3\n" /* Type 1, direction Z+ */
+ "-1: 8, 1, 15: 3\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,
+ }, // CentralRoom
+};
+
+
+
+
+
+// The prefab counts:
+
+const size_t g_UnderwaterBasePrefabsCount = ARRAYCOUNT(g_UnderwaterBasePrefabs);
+
+const size_t g_UnderwaterBaseStartingPrefabsCount = ARRAYCOUNT(g_UnderwaterBaseStartingPrefabs);
+
diff --git a/src/Generating/Prefabs/UnderwaterBasePrefabs.h b/src/Generating/Prefabs/UnderwaterBasePrefabs.h
new file mode 100644
index 000000000..d7b248bb8
--- /dev/null
+++ b/src/Generating/Prefabs/UnderwaterBasePrefabs.h
@@ -0,0 +1,15 @@
+
+// UnderwaterBasePrefabs.h
+
+// Declares the prefabs in the group UnderwaterBase
+
+#include "../Prefab.h"
+
+
+
+
+
+extern const cPrefab::sDef g_UnderwaterBasePrefabs[];
+extern const cPrefab::sDef g_UnderwaterBaseStartingPrefabs[];
+extern const size_t g_UnderwaterBasePrefabsCount;
+extern const size_t g_UnderwaterBaseStartingPrefabsCount;
diff --git a/src/Generating/UnderwaterBaseGen.cpp b/src/Generating/UnderwaterBaseGen.cpp
new file mode 100644
index 000000000..ff6f17dde
--- /dev/null
+++ b/src/Generating/UnderwaterBaseGen.cpp
@@ -0,0 +1,142 @@
+
+// UnderwaterBaseGen.cpp
+
+// Implements the cUnderwaterBaseGen class representing the underwater base generator
+
+#include "Globals.h"
+#include "UnderwaterBaseGen.h"
+#include "Prefabs/UnderwaterBasePrefabs.h"
+#include "PieceGenerator.h"
+
+
+
+
+
+static cPrefabPiecePool g_UnderwaterBase(g_UnderwaterBasePrefabs, g_UnderwaterBasePrefabsCount, g_UnderwaterBaseStartingPrefabs, g_UnderwaterBaseStartingPrefabsCount);
+
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// cUnderwaterBaseGen::cUnderwaterBase:
+
+class cUnderwaterBaseGen::cUnderwaterBase :
+ public cGridStructGen::cStructure
+{
+ typedef cGridStructGen::cStructure super;
+
+public:
+ cUnderwaterBase(
+ int a_Seed,
+ int a_OriginX, int a_OriginZ,
+ int a_MaxDepth,
+ int a_MaxSize
+ ) :
+ super(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 base:
+ cBFSPieceGenerator pg(g_UnderwaterBase, a_Seed);
+ pg.PlacePieces(a_OriginX, 50, a_OriginZ, a_MaxDepth, m_Pieces);
+ if (m_Pieces.empty())
+ {
+ return;
+ }
+ }
+
+ ~cUnderwaterBase()
+ {
+ 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 village (radius from the origin) */
+ int m_MaxSize;
+
+ /** Borders of the vilalge - no item may reach out of this cuboid. */
+ cCuboid m_Borders;
+
+ /** The village 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[]
+ }
+} ;
+
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// cUnderwaterBaseGen:
+
+
+
+
+
+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),
+ m_Noise(a_Seed + 1000),
+ m_MaxDepth(a_MaxDepth),
+ m_MaxSize(a_MaxSize),
+ m_BiomeGen(a_BiomeGen)
+{
+}
+
+
+
+
+
+cGridStructGen::cStructurePtr cUnderwaterBaseGen::CreateStructure(int a_OriginX, int a_OriginZ)
+{
+ // Generate the biomes for the chunk surrounding the origin:
+ int ChunkX, ChunkZ;
+ cChunkDef::BlockToChunk(a_OriginX, a_OriginZ, ChunkX, ChunkZ);
+ cChunkDef::BiomeMap Biomes;
+ m_BiomeGen.GenBiomes(ChunkX, ChunkZ, Biomes);
+
+ // Check if all the biomes are ocean:
+ // If just one is not, no base is created, because it's likely that an unfriendly biome is too close
+ for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
+ {
+ switch (Biomes[i])
+ {
+ case biOcean:
+ case biDeepOcean:
+ {
+ // These biomes allow underwater bases
+ break;
+ }
+ default:
+ {
+ // base-unfriendly biome, bail out with zero structure:
+ return cStructurePtr();
+ }
+ } // switch (Biomes[i])
+ } // 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));
+}
+
+
+
+
diff --git a/src/Generating/UnderwaterBaseGen.h b/src/Generating/UnderwaterBaseGen.h
new file mode 100644
index 000000000..0aefbb4c7
--- /dev/null
+++ b/src/Generating/UnderwaterBaseGen.h
@@ -0,0 +1,50 @@
+
+// UnderwaterBaseGen.h
+
+// Declares the cUnderwaterBaseGen class representing the underwater base generator
+
+
+
+
+
+#pragma once
+
+#include "GridStructGen.h"
+#include "PrefabPiecePool.h"
+
+
+
+
+
+class cUnderwaterBaseGen :
+ public cGridStructGen
+{
+ typedef cGridStructGen super;
+
+public:
+ cUnderwaterBaseGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen);
+
+protected:
+ class cUnderwaterBase; // fwd: UnderwaterBaseGen.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;
+
+ /** The underlying biome generator that defines whether the base is created or not */
+ cBiomeGen & m_BiomeGen;
+
+
+ // cGridStructGen overrides:
+ virtual cStructurePtr CreateStructure(int a_OriginX, int a_OriginZ) override;
+} ;
+
+
+
+
--
cgit v1.2.3
From 5368e664864094c51a919dc8846f2b41039417e6 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sun, 1 Jun 2014 00:29:17 +0200
Subject: Missing return;
---
src/UI/SlotArea.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index b3e126247..bc8dd9cd6 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1400,6 +1400,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick))
{
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
+ return;
}
cItem Slot(*GetSlot(a_SlotNum, a_Player));
--
cgit v1.2.3
From a18b6c231102c78604b9ada7e6ce8a4eb074591e Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sun, 1 Jun 2014 00:43:09 +0200
Subject: Add HandleSmeltItem() call for achievements.
---
src/UI/SlotArea.cpp | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index bc8dd9cd6..ac85322b3 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1397,12 +1397,6 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
return;
}
- if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick))
- {
- ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
- return;
- }
-
cItem Slot(*GetSlot(a_SlotNum, a_Player));
if (!Slot.IsSameType(a_ClickedItem))
{
@@ -1411,8 +1405,15 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
LOGWARNING("Their item: %s", ItemToFullString(a_ClickedItem).c_str());
bAsync = true;
}
- cItem & DraggingItem = a_Player.GetDraggingItem();
+ if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick))
+ {
+ HandleSmeltItem(Slot, a_Player);
+ ShiftClicked(a_Player, a_SlotNum, Slot);
+ return;
+ }
+
+ cItem & DraggingItem = a_Player.GetDraggingItem();
if (!DraggingItem.IsEmpty())
{
if (a_ClickAction == caDblClick)
@@ -1429,6 +1430,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
}
DraggingItem.m_ItemCount += Slot.m_ItemCount;
+ HandleSmeltItem(Slot, a_Player);
Slot.Empty();
}
else
@@ -1443,6 +1445,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
case caLeftClick:
{
DraggingItem = Slot;
+ HandleSmeltItem(Slot, a_Player);
Slot.Empty();
break;
}
@@ -1456,6 +1459,7 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
{
Slot.Empty();
}
+ HandleSmeltItem(DraggingItem, a_Player);
break;
}
default:
--
cgit v1.2.3
From 12f3c0fcdf6e45cbeed630730edb1223a2ecc4d8 Mon Sep 17 00:00:00 2001
From: Howaner
Date: Sun, 1 Jun 2014 00:50:35 +0200
Subject: Players can't set items in the result slot, when they shift a item.
---
src/UI/SlotArea.cpp | 38 ++++++++++++++++++++++++++++++++++++++
src/UI/SlotArea.h | 1 +
2 files changed, 39 insertions(+)
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index ac85322b3..59a6384b1 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -1484,6 +1484,44 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
+void cSlotAreaFurnace::DistributeStack(cItem & a_ItemStack, cPlayer & a_Player, bool a_ShouldApply, bool a_KeepEmptySlots)
+{
+ for (int i = 0; i < 2; i++)
+ {
+ const cItem * Slot = GetSlot(i, a_Player);
+ if (!Slot->IsEqual(a_ItemStack) && (!Slot->IsEmpty() || a_KeepEmptySlots))
+ {
+ // Different items
+ continue;
+ }
+ int NumFit = ItemHandler(Slot->m_ItemType)->GetMaxStackSize() - Slot->m_ItemCount;
+ if (NumFit <= 0)
+ {
+ // Full stack already
+ continue;
+ }
+ if (NumFit > a_ItemStack.m_ItemCount)
+ {
+ NumFit = a_ItemStack.m_ItemCount;
+ }
+ if (a_ShouldApply)
+ {
+ cItem NewSlot(a_ItemStack);
+ NewSlot.m_ItemCount = Slot->m_ItemCount + NumFit;
+ SetSlot(i, a_Player, NewSlot);
+ }
+ a_ItemStack.m_ItemCount -= NumFit;
+ if (a_ItemStack.IsEmpty())
+ {
+ return;
+ }
+ } // for i - Slots
+}
+
+
+
+
+
const cItem * cSlotAreaFurnace::GetSlot(int a_SlotNum, cPlayer & a_Player) const
{
UNUSED(a_Player);
diff --git a/src/UI/SlotArea.h b/src/UI/SlotArea.h
index e297bcff7..b4b693cf6 100644
--- a/src/UI/SlotArea.h
+++ b/src/UI/SlotArea.h
@@ -392,6 +392,7 @@ public:
virtual ~cSlotAreaFurnace();
virtual void Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickAction, const cItem & a_ClickedItem) override;
+ virtual void DistributeStack(cItem & a_ItemStack, cPlayer & a_Player, bool a_ShouldApply, bool a_KeepEmptySlots) override;
virtual const cItem * GetSlot(int a_SlotNum, cPlayer & a_Player) const override;
virtual void SetSlot(int a_SlotNum, cPlayer & a_Player, const cItem & a_Item) override;
--
cgit v1.2.3
From 75fe89b8aef77d8e684a30aae07c09297d1653cb Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sun, 1 Jun 2014 09:27:27 +0200
Subject: Updated AlchemistVillage prefabs.
---
src/Generating/Prefabs/AlchemistVillagePrefabs.cpp | 208 +++++++++++----------
1 file changed, 105 insertions(+), 103 deletions(-)
diff --git a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
index 6e3f82212..eb0d30fdf 100644
--- a/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
+++ b/src/Generating/Prefabs/AlchemistVillagePrefabs.cpp
@@ -23,8 +23,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
11, 12, 10, // SizeX = 11, SizeY = 12, SizeZ = 10
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 11, 9, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 11, 10, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -270,8 +270,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
11, 8, 10, // SizeX = 11, SizeY = 8, SizeZ = 10
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 7, 9, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 7, 10, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -455,8 +455,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
11, 5, 13, // SizeX = 11, SizeY = 5, SizeZ = 13
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 4, 12, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 4, 13, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -606,26 +606,28 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
15, 13, 11, // SizeX = 15, SizeY = 13, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 14, 12, 10, // MaxX, MaxY, MaxZ
+ -1, 0, -1, // MinX, MinY, MinZ
+ 14, 12, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
- "A:128: 7\n" /* sandstonestairs */
- "B: 44: 1\n" /* step */
- "C:128: 2\n" /* sandstonestairs */
- "D:128: 0\n" /* sandstonestairs */
- "E: 87: 0\n" /* netherstone */
- "F:128: 3\n" /* sandstonestairs */
- "G: 51: 0\n" /* fire */
- "H: 44: 9\n" /* step */
+ "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: 2\n" /* wooddoorblock */
+ "g: 64: 6\n" /* wooddoorblock */
"h: 64: 0\n" /* wooddoorblock */
"i: 61: 2\n" /* furnace */
"j:118: 0\n" /* cauldronblock */
@@ -633,18 +635,18 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"l: 65: 2\n" /* ladder */
"m: 19: 0\n" /* sponge */
"n:101: 0\n" /* ironbars */
- "o:140: 0\n" /* flowerpotblock */
- "p: 64: 8\n" /* wooddoorblock */
- "q: 50: 3\n" /* torch */
- "r: 69:12\n" /* lever */
- "s: 50: 4\n" /* torch */
- "t:128: 6\n" /* sandstonestairs */
- "u: 44:10\n" /* step */
- "v:128: 1\n" /* sandstonestairs */
- "w: 47: 0\n" /* bookshelf */
- "x: 96:12\n" /* trapdoor */
- "y:128: 4\n" /* sandstonestairs */
- "z:128: 5\n" /* sandstonestairs */,
+ "o: 50: 1\n" /* torch */
+ "p:140: 0\n" /* flowerpotblock */
+ "q: 64:12\n" /* wooddoorblock */
+ "r: 50: 3\n" /* torch */
+ "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 */,
// Block data:
// Level 0
@@ -681,12 +683,12 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "....cddnnnddc.."
- /* 1 */ "....d......od.c"
- /* 2 */ "....p.......d.q"
- /* 3 */ "....d.......p.."
- /* 4 */ "....d.r...l.d.s"
+ /* 1 */ "....do.....pd.c"
+ /* 2 */ "....q.......d.r"
+ /* 3 */ "....d.......s.."
+ /* 4 */ "....d.t...l.d.u"
/* 5 */ "....dddd.dddd.c"
- /* 6 */ "....n.......n.."
+ /* 6 */ "....n..r.r..n.."
/* 7 */ "mmmmn.......n.."
/* 8 */ "mmmmn.......n.."
/* 9 */ "mmmmd.......d.."
@@ -695,32 +697,32 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
// Level 3
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "....cddtttddc.."
- /* 1 */ "....duuuuuuuddv"
- /* 2 */ "....duuuuuuud.."
- /* 3 */ "....duuuuuuud.."
- /* 4 */ "....dwwwuuxud.."
- /* 5 */ "....ddddddddddv"
- /* 6 */ "....yuuuuuuuz.."
- /* 7 */ "mmmmyuuuuuuuz.."
- /* 8 */ "mmmmyuuuuuuuz.."
- /* 9 */ "mmmmduuuuuuud.."
- /* 10 */ "mmmmcddAAAddc.."
+ /* 0 */ "....cddvvvddc.."
+ /* 1 */ "....dwwwwwwwddx"
+ /* 2 */ "....dwwwwwwwd.."
+ /* 3 */ "....dwwwwwwwd.."
+ /* 4 */ "....dyyywwzwd.."
+ /* 5 */ "....ddddddddddx"
+ /* 6 */ "....AwwwwwwwB.."
+ /* 7 */ "mmmmAwwwwwwwB.."
+ /* 8 */ "mmmmAwwwwwwwB.."
+ /* 9 */ "mmmmdwwwwwwwd.."
+ /* 10 */ "mmmmcddCCCddc.."
// Level 4
/* z\x* 11111 */
/* * 012345678901234 */
- /* 0 */ "....dBBBdBBBd.."
- /* 1 */ "....BcdddddcB.."
- /* 2 */ "....Bd.....dB.."
- /* 3 */ "....Bd.....dB.."
- /* 4 */ "....Bd.....dB.."
+ /* 0 */ "....dDDDdDDDd.."
+ /* 1 */ "....DcdddddcD.."
+ /* 2 */ "....Dd.....dD.."
+ /* 3 */ "....Dd.....dD.."
+ /* 4 */ "....Dd.....dD.."
/* 5 */ "....dcdd.ddcd.."
- /* 6 */ "....B.......B.."
- /* 7 */ "mmmmB.......B.."
- /* 8 */ "mmmmB.......B.."
- /* 9 */ "mmmmB.......B.."
- /* 10 */ "mmmmdBBBdBBBd.."
+ /* 6 */ "....D.......D.."
+ /* 7 */ "mmmmD.......D.."
+ /* 8 */ "mmmmD.......D.."
+ /* 9 */ "mmmmD.......D.."
+ /* 10 */ "mmmmdDDDdDDDd.."
// Level 5
/* z\x* 11111 */
@@ -741,10 +743,10 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".....cddtddc..."
- /* 2 */ ".....yuuuuuz..."
- /* 3 */ ".....yuuuuuz..."
- /* 4 */ ".....yuuuuuz..."
+ /* 1 */ ".....cddvddc..."
+ /* 2 */ ".....AwwwwwB..."
+ /* 3 */ ".....AwwwwwB..."
+ /* 4 */ ".....AwwwwwB..."
/* 5 */ ".....cdddddc..."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -756,11 +758,11 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* z\x* 11111 */
/* * 012345678901234 */
/* 0 */ "..............."
- /* 1 */ ".....dBBdBBd..."
- /* 2 */ ".....B.ddd.B..."
+ /* 1 */ ".....dDDdDDd..."
+ /* 2 */ ".....D.ddd.D..."
/* 3 */ ".....d.ddd.d..."
- /* 4 */ ".....B.ddd.B..."
- /* 5 */ ".....dBBdBBd..."
+ /* 4 */ ".....D.ddd.D..."
+ /* 5 */ ".....dDDdDDd..."
/* 6 */ "..............."
/* 7 */ "..............."
/* 8 */ "..............."
@@ -772,9 +774,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ ".......cCc....."
- /* 3 */ ".......DEv....."
- /* 4 */ ".......cFc....."
+ /* 2 */ ".......cEc....."
+ /* 3 */ ".......FGx....."
+ /* 4 */ ".......cHc....."
/* 5 */ "..............."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -788,7 +790,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..............."
/* 1 */ "..............."
/* 2 */ ".......c.c....."
- /* 3 */ "........G......"
+ /* 3 */ "........I......"
/* 4 */ ".......c.c....."
/* 5 */ "..............."
/* 6 */ "..............."
@@ -802,9 +804,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ ".......ctc....."
- /* 3 */ ".......y.z....."
- /* 4 */ ".......cAc....."
+ /* 2 */ ".......cvc....."
+ /* 3 */ ".......A.B....."
+ /* 4 */ ".......cCc....."
/* 5 */ "..............."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -818,7 +820,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* 0 */ "..............."
/* 1 */ "..............."
/* 2 */ ".......ddd....."
- /* 3 */ ".......dHd....."
+ /* 3 */ ".......dJd....."
/* 4 */ ".......ddd....."
/* 5 */ "..............."
/* 6 */ "..............."
@@ -832,9 +834,9 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
/* * 012345678901234 */
/* 0 */ "..............."
/* 1 */ "..............."
- /* 2 */ ".......B.B....."
+ /* 2 */ ".......D.D....."
/* 3 */ "..............."
- /* 4 */ ".......B.B....."
+ /* 4 */ ".......D.D....."
/* 5 */ "..............."
/* 6 */ "..............."
/* 7 */ "..............."
@@ -877,8 +879,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
7, 11, 7, // SizeX = 7, SizeY = 11, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 6, 10, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 10, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1050,8 +1052,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
5, 5, 7, // SizeX = 5, SizeY = 5, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 4, 4, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 5, 4, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1160,8 +1162,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
7, 5, 11, // SizeX = 7, SizeY = 5, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 6, 4, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 7, 4, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1291,8 +1293,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
9, 5, 7, // SizeX = 9, SizeY = 5, 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, 4, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1400,8 +1402,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
5, 5, 11, // SizeX = 5, SizeY = 5, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 4, 4, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 5, 4, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1428,7 +1430,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"u:128: 5\n" /* sandstonestairs */
"v:128: 7\n" /* sandstonestairs */
"w: 44: 1\n" /* step */
- "x: 96: 7\n" /* trapdoor */,
+ "x: 96: 1\n" /* trapdoor */,
// Block data:
// Level 0
@@ -1536,8 +1538,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
9, 5, 9, // SizeX = 9, SizeY = 5, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 8, 4, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 9, 4, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1657,8 +1659,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
9, 5, 9, // SizeX = 9, SizeY = 5, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 8, 4, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 9, 4, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1783,8 +1785,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
9, 5, 11, // SizeX = 9, SizeY = 5, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 8, 4, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 9, 4, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -1914,8 +1916,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
5, 8, 7, // SizeX = 5, SizeY = 8, SizeZ = 7
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 4, 7, 6, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 5, 7, 7, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2054,8 +2056,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
15, 8, 9, // SizeX = 15, SizeY = 8, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 14, 7, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 15, 7, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2219,8 +2221,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
11, 9, 9, // SizeX = 11, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 10, 8, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 11, 8, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2413,8 +2415,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
12, 10, 11, // SizeX = 12, SizeY = 10, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 11, 9, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 12, 9, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2441,7 +2443,7 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
"u:128: 5\n" /* sandstonestairs */
"v:128: 7\n" /* sandstonestairs */
"w: 44: 1\n" /* step */
- "x: 96: 6\n" /* trapdoor */
+ "x: 96: 4\n" /* trapdoor */
"y:126: 0\n" /* woodenslab */
"z:128: 4\n" /* sandstonestairs */,
@@ -2631,8 +2633,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
9, 5, 11, // SizeX = 9, SizeY = 5, SizeZ = 11
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 8, 4, 10, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 9, 4, 11, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
@@ -2762,8 +2764,8 @@ const cPrefab::sDef g_AlchemistVillagePrefabs[] =
13, 9, 9, // SizeX = 13, SizeY = 9, SizeZ = 9
// Hitbox (relative to bounding box):
- 0, 0, 0, // MinX, MinY, MinZ
- 12, 8, 8, // MaxX, MaxY, MaxZ
+ -1, 0, 0, // MinX, MinY, MinZ
+ 13, 8, 9, // MaxX, MaxY, MaxZ
// Block definitions:
".: 0: 0\n" /* air */
--
cgit v1.2.3
From 046c1497979cf96a2fc4d1847dad2d7daf050e60 Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sun, 1 Jun 2014 10:07:57 +0200
Subject: Updated UnderwaterBase prefabs.
---
src/Generating/Prefabs/UnderwaterBasePrefabs.cpp | 226 ++++++++++++-----------
1 file changed, 123 insertions(+), 103 deletions(-)
diff --git a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
index 54d1b6745..a20ff9e26 100644
--- a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
+++ b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
@@ -60,8 +60,8 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "abeebbbeebbbeeba"
- /* 1 */ "f.........g....h"
- /* 2 */ "h....i.........f"
+ /* 1 */ "f...g......g...h"
+ /* 2 */ "h...i......i...f"
/* 3 */ "abeebbbeebbbeeba"
// Level 3
@@ -88,7 +88,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 2000,
// DepthWeight:
"",
@@ -125,8 +125,10 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"h: 64:12\n" /* wooddoorblock */
"i: 76: 3\n" /* redstonetorchon */
"j: 64: 8\n" /* wooddoorblock */
- "k: 76: 2\n" /* redstonetorchon */
- "m: 19: 0\n" /* sponge */,
+ "k: 76: 4\n" /* redstonetorchon */
+ "l: 76: 2\n" /* redstonetorchon */
+ "m: 19: 0\n" /* sponge */
+ "n: 76: 1\n" /* redstonetorchon */,
// Block data:
// Level 0
@@ -163,10 +165,10 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 0 */ "abggbbmmmm"
/* 1 */ "h...i.bbmm"
/* 2 */ "j.......bm"
- /* 3 */ "abb.....bm"
+ /* 3 */ "abbk....bm"
/* 4 */ "mmmbb....b"
- /* 5 */ "mmmmmb..kb"
- /* 6 */ "mmmmmb...g"
+ /* 5 */ "mmmmmb..lb"
+ /* 6 */ "mmmmmbn..g"
/* 7 */ "mmmmmmb..g"
/* 8 */ "mmmmmmb..b"
/* 9 */ "mmmmmmahja"
@@ -241,10 +243,10 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"k: 20: 0\n" /* glass */
"l: 76: 1\n" /* redstonetorchon */
"m: 19: 0\n" /* sponge */
- "n: 76: 3\n" /* redstonetorchon */
- "o: 76: 4\n" /* redstonetorchon */
- "p: 64: 9\n" /* wooddoorblock */
- "q: 76: 2\n" /* redstonetorchon */,
+ "n: 76: 2\n" /* redstonetorchon */
+ "o: 76: 3\n" /* redstonetorchon */
+ "p: 76: 4\n" /* redstonetorchon */
+ "q: 64: 9\n" /* wooddoorblock */,
// Block data:
// Level 0
@@ -294,18 +296,18 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 1 */ "mmmmmmb..bmmmmmm"
/* 2 */ "mmmmmmk..kmmmmmm"
/* 3 */ "mmmmmmk..kmmmmmm"
- /* 4 */ "mmmmmmb..bmmmmmm"
- /* 5 */ "mmmmmmbl.bmmmmmm"
+ /* 4 */ "mmmmmmblnbmmmmmm"
+ /* 5 */ "mmmmmmb..bmmmmmm"
/* 6 */ "abkkbbb..bbbkkba"
- /* 7 */ "j.........n....i"
- /* 8 */ "i....o.........p"
+ /* 7 */ "j...o......o...i"
+ /* 8 */ "i...p......p...q"
/* 9 */ "abkkbbb..bbbkkba"
- /* 10 */ "mmmmmmb.qbmmmmmm"
- /* 11 */ "mmmmmmb..bmmmmmm"
+ /* 10 */ "mmmmmmb..bmmmmmm"
+ /* 11 */ "mmmmmmblnbmmmmmm"
/* 12 */ "mmmmmmk..kmmmmmm"
/* 13 */ "mmmmmmk..kmmmmmm"
/* 14 */ "mmmmmmb..bmmmmmm"
- /* 15 */ "mmmmmmapiammmmmm"
+ /* 15 */ "mmmmmmaqiammmmmm"
// Level 3
/* z\x* 111111 */
@@ -380,11 +382,11 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"d: 53: 0\n" /* woodstairs */
"e: 20: 0\n" /* glass */
"f: 64: 9\n" /* wooddoorblock */
- "g: 64: 8\n" /* wooddoorblock */
- "h: 76: 4\n" /* redstonetorchon */
- "i: 64: 0\n" /* wooddoorblock */
- "j: 64: 7\n" /* wooddoorblock */
- "k: 76: 3\n" /* redstonetorchon */
+ "g: 76: 3\n" /* redstonetorchon */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 76: 4\n" /* redstonetorchon */
+ "j: 64: 0\n" /* wooddoorblock */
+ "k: 64: 7\n" /* wooddoorblock */
"l: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
@@ -409,8 +411,8 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "abeebbbbbmmmmmmm"
- /* 1 */ "f......dbbmmmmmm"
- /* 2 */ "g...h..dbbmmmmmm"
+ /* 1 */ "f...g..dbbmmmmmm"
+ /* 2 */ "h...i..dbbmmmmmm"
/* 3 */ "abeebbbbbmmmmmmm"
// Level 3
@@ -441,16 +443,16 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "mmmmmmmbbbbbbbba"
- /* 1 */ "mmmmmmmb.......i"
- /* 2 */ "mmmmmmmb.......j"
+ /* 1 */ "mmmmmmmb.......j"
+ /* 2 */ "mmmmmmmb.......k"
/* 3 */ "mmmmmmmbbbbbbbba"
// Level 7
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "mmmmmmmmbbbeebba"
- /* 1 */ "mmmmmmmmb.k....g"
- /* 2 */ "mmmmmmmmb......l"
+ /* 1 */ "mmmmmmmmb.g....h"
+ /* 2 */ "mmmmmmmmb.i....l"
/* 3 */ "mmmmmmmmbbbeebba"
// Level 8
@@ -515,10 +517,11 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"i: 64:12\n" /* wooddoorblock */
"j: 20: 0\n" /* glass */
"k: 76: 1\n" /* redstonetorchon */
- "l: 76: 3\n" /* redstonetorchon */
+ "l: 76: 2\n" /* redstonetorchon */
"m: 19: 0\n" /* sponge */
- "n: 76: 4\n" /* redstonetorchon */
- "o: 64: 9\n" /* wooddoorblock */,
+ "n: 76: 3\n" /* redstonetorchon */
+ "o: 76: 4\n" /* redstonetorchon */
+ "p: 64: 9\n" /* wooddoorblock */,
// Block data:
// Level 0
@@ -556,11 +559,11 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 1 */ "mmmmmmb..bmmmmmm"
/* 2 */ "mmmmmmj..jmmmmmm"
/* 3 */ "mmmmmmj..jmmmmmm"
- /* 4 */ "mmmmmmb..bmmmmmm"
- /* 5 */ "mmmmmmbk.bmmmmmm"
+ /* 4 */ "mmmmmmbklbmmmmmm"
+ /* 5 */ "mmmmmmb..bmmmmmm"
/* 6 */ "abjjbbb..bbbjjba"
- /* 7 */ "i.........l....h"
- /* 8 */ "h....n.........o"
+ /* 7 */ "i...n......n...h"
+ /* 8 */ "h...o......o...p"
/* 9 */ "abjjbbbjjbbbjjba"
// Level 3
@@ -625,10 +628,14 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"a: 5: 0\n" /* wood */
"b: 20: 0\n" /* glass */
"c: 5: 5\n" /* wood */
- "d: 64: 0\n" /* wooddoorblock */
- "e: 64: 1\n" /* wooddoorblock */
- "f: 64: 8\n" /* wooddoorblock */
- "g: 64: 9\n" /* wooddoorblock */
+ "d: 76: 3\n" /* redstonetorchon */
+ "e: 76: 1\n" /* redstonetorchon */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 76: 4\n" /* redstonetorchon */
+ "h: 76: 2\n" /* redstonetorchon */
+ "i: 64: 1\n" /* wooddoorblock */
+ "j: 64: 8\n" /* wooddoorblock */
+ "k: 64: 9\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -654,19 +661,19 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ "mmmmmaammmmmmm"
- /* 1 */ "mmmaa..aammmmm"
+ /* 1 */ "mmmaaddaammmmm"
/* 2 */ "mmaa....aammmm"
/* 3 */ "maa......aammm"
/* 4 */ "ma........aaac"
- /* 5 */ "a............d"
- /* 6 */ "a............d"
+ /* 5 */ "ae........d..f"
+ /* 6 */ "ae........g..f"
/* 7 */ "ma........aaac"
/* 8 */ "maa......aammm"
/* 9 */ "mmaa....aammmm"
- /* 10 */ "mmmaa..aammmmm"
+ /* 10 */ "mmmaaehaammmmm"
/* 11 */ "mmmma..ammmmmm"
/* 12 */ "mmmma..ammmmmm"
- /* 13 */ "mmmmceecmmmmmm"
+ /* 13 */ "mmmmciicmmmmmm"
// Level 2
/* z\x* 1111 */
@@ -676,15 +683,15 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 2 */ "mmbb....bbmmmm"
/* 3 */ "mbb......bbmmm"
/* 4 */ "mb........bbac"
- /* 5 */ "b............f"
- /* 6 */ "b............g"
+ /* 5 */ "b............j"
+ /* 6 */ "b............k"
/* 7 */ "mb........bbac"
/* 8 */ "mbb......bbmmm"
/* 9 */ "mmbb....bbmmmm"
/* 10 */ "mmmbb..bbmmmmm"
/* 11 */ "mmmmb..bmmmmmm"
/* 12 */ "mmmma..ammmmmm"
- /* 13 */ "mmmmcgfcmmmmmm"
+ /* 13 */ "mmmmckjcmmmmmm"
// Level 3
/* z\x* 1111 */
@@ -804,12 +811,12 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"a: 5: 0\n" /* wood */
"b: 5: 5\n" /* wood */
"c: 20: 0\n" /* glass */
- "d: 64: 1\n" /* wooddoorblock */
+ "d: 64: 5\n" /* wooddoorblock */
"e: 64: 0\n" /* wooddoorblock */
- "f: 64: 6\n" /* wooddoorblock */
+ "f: 64: 2\n" /* wooddoorblock */
"g: 76: 3\n" /* redstonetorchon */
- "h: 64: 8\n" /* wooddoorblock */
- "i: 64:12\n" /* wooddoorblock */
+ "h: 64:12\n" /* wooddoorblock */
+ "i: 64: 8\n" /* wooddoorblock */
"j: 64: 9\n" /* wooddoorblock */
"k: 76: 4\n" /* redstonetorchon */
"m: 19: 0\n" /* sponge */,
@@ -840,7 +847,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* * 0123456789012345 */
/* 0 */ "mmaccccccccccamm"
/* 1 */ "bag..........gab"
- /* 2 */ "h..............h"
+ /* 2 */ "h..............i"
/* 3 */ "i..............j"
/* 4 */ "bak..........kab"
/* 5 */ "mmaccccccccccamm"
@@ -912,9 +919,11 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"b: 5: 0\n" /* wood */
"c: 20: 0\n" /* glass */
"d: 64: 3\n" /* wooddoorblock */
- "e: 64: 1\n" /* wooddoorblock */
- "f: 64: 8\n" /* wooddoorblock */
- "g: 64: 9\n" /* wooddoorblock */
+ "e: 76: 1\n" /* redstonetorchon */
+ "f: 76: 2\n" /* redstonetorchon */
+ "g: 64: 1\n" /* wooddoorblock */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 64: 9\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -944,24 +953,24 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 0 */ "mmmmaddammmm"
/* 1 */ "mmmmb..bmmmm"
/* 2 */ "mmmmb..bmmmm"
- /* 3 */ "mmmbb..bbmmm"
+ /* 3 */ "mmmbbefbbmmm"
/* 4 */ "mmbb....bbmm"
/* 5 */ "mbb......bbm"
/* 6 */ "mb........bm"
- /* 7 */ "b..........b"
- /* 8 */ "b..........b"
+ /* 7 */ "be........fb"
+ /* 8 */ "be........fb"
/* 9 */ "mb........bm"
/* 10 */ "mbb......bbm"
/* 11 */ "mmbb....bbmm"
- /* 12 */ "mmmbb..bbmmm"
+ /* 12 */ "mmmbbefbbmmm"
/* 13 */ "mmmmb..bmmmm"
/* 14 */ "mmmmb..bmmmm"
- /* 15 */ "mmmmaeeammmm"
+ /* 15 */ "mmmmaggammmm"
// Level 2
/* z\x* 11 */
/* * 012345678901 */
- /* 0 */ "mmmmaffammmm"
+ /* 0 */ "mmmmahiammmm"
/* 1 */ "mmmmb..bmmmm"
/* 2 */ "mmmmc..cmmmm"
/* 3 */ "mmmcc..ccmmm"
@@ -976,7 +985,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 12 */ "mmmcc..ccmmm"
/* 13 */ "mmmmc..cmmmm"
/* 14 */ "mmmmb..bmmmm"
- /* 15 */ "mmmmagfammmm"
+ /* 15 */ "mmmmaihammmm"
// Level 3
/* z\x* 11 */
@@ -1125,12 +1134,16 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"b: 5: 0\n" /* wood */
"c: 20: 0\n" /* glass */
"d: 64: 3\n" /* wooddoorblock */
- "e: 64: 2\n" /* wooddoorblock */
- "f: 64: 0\n" /* wooddoorblock */
- "g: 64: 1\n" /* wooddoorblock */
- "h: 64: 8\n" /* wooddoorblock */
- "i: 64: 9\n" /* wooddoorblock */
- "m: 19: 0\n" /* sponge */,
+ "e: 76: 1\n" /* redstonetorchon */
+ "f: 76: 2\n" /* redstonetorchon */
+ "g: 64: 2\n" /* wooddoorblock */
+ "h: 76: 3\n" /* redstonetorchon */
+ "i: 64: 0\n" /* wooddoorblock */
+ "j: 76: 4\n" /* redstonetorchon */
+ "k: 64: 1\n" /* wooddoorblock */
+ "l: 64: 8\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */
+ "n: 64: 9\n" /* wooddoorblock */,
// Block data:
// Level 0
@@ -1159,39 +1172,39 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 0 */ "mmmmmmaddammmmmm"
/* 1 */ "mmmmmmb..bmmmmmm"
/* 2 */ "mmmmmmb..bmmmmmm"
- /* 3 */ "mmmmmbb..bbmmmmm"
+ /* 3 */ "mmmmmbbefbbmmmmm"
/* 4 */ "mmmmbb....bbmmmm"
/* 5 */ "mmmbb......bbmmm"
/* 6 */ "abbb........bbba"
- /* 7 */ "e..............f"
- /* 8 */ "e..............f"
+ /* 7 */ "g..h........h..i"
+ /* 8 */ "g..j........j..i"
/* 9 */ "abbb........bbba"
/* 10 */ "mmmbb......bbmmm"
/* 11 */ "mmmmbb....bbmmmm"
- /* 12 */ "mmmmmbb..bbmmmmm"
+ /* 12 */ "mmmmmbbefbbmmmmm"
/* 13 */ "mmmmmmb..bmmmmmm"
/* 14 */ "mmmmmmb..bmmmmmm"
- /* 15 */ "mmmmmmaggammmmmm"
+ /* 15 */ "mmmmmmakkammmmmm"
// Level 2
/* z\x* 111111 */
/* * 0123456789012345 */
- /* 0 */ "mmmmmmahiammmmmm"
+ /* 0 */ "mmmmmmalnammmmmm"
/* 1 */ "mmmmmmb..bmmmmmm"
/* 2 */ "mmmmmmc..cmmmmmm"
/* 3 */ "mmmmmcc..ccmmmmm"
/* 4 */ "mmmmcc....ccmmmm"
/* 5 */ "mmmcc......ccmmm"
/* 6 */ "abcc........ccba"
- /* 7 */ "i..............h"
- /* 8 */ "h..............i"
+ /* 7 */ "n..............l"
+ /* 8 */ "l..............n"
/* 9 */ "abcc........ccba"
/* 10 */ "mmmcc......ccmmm"
/* 11 */ "mmmmcc....ccmmmm"
/* 12 */ "mmmmmcc..ccmmmmm"
/* 13 */ "mmmmmmc..cmmmmmm"
/* 14 */ "mmmmmmb..bmmmmmm"
- /* 15 */ "mmmmmmaihammmmmm"
+ /* 15 */ "mmmmmmanlammmmmm"
// Level 3
/* z\x* 111111 */
@@ -1293,7 +1306,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 50,
// DepthWeight:
"",
@@ -1323,9 +1336,12 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"a: 5: 0\n" /* wood */
"b: 20: 0\n" /* glass */
"c: 5: 5\n" /* wood */
- "d: 64: 0\n" /* wooddoorblock */
- "e: 64: 8\n" /* wooddoorblock */
- "f: 64: 9\n" /* wooddoorblock */
+ "d: 76: 3\n" /* redstonetorchon */
+ "e: 76: 1\n" /* redstonetorchon */
+ "f: 64: 0\n" /* wooddoorblock */
+ "g: 76: 4\n" /* redstonetorchon */
+ "h: 64: 8\n" /* wooddoorblock */
+ "i: 64: 9\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -1349,16 +1365,16 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ "mmmmmaammmmmmm"
- /* 1 */ "mmmaa..aammmmm"
+ /* 1 */ "mmmaaddaammmmm"
/* 2 */ "mmaa....aammmm"
/* 3 */ "maa......aammm"
/* 4 */ "ma........aaac"
- /* 5 */ "a............d"
- /* 6 */ "a............d"
+ /* 5 */ "ae........d..f"
+ /* 6 */ "ae........g..f"
/* 7 */ "ma........aaac"
/* 8 */ "maa......aammm"
/* 9 */ "mmaa....aammmm"
- /* 10 */ "mmmaa..aammmmm"
+ /* 10 */ "mmmaaggaammmmm"
/* 11 */ "mmmmmaammmmmmm"
// Level 2
@@ -1369,8 +1385,8 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 2 */ "mmbb....bbmmmm"
/* 3 */ "mbb......bbmmm"
/* 4 */ "mb........bbac"
- /* 5 */ "b............e"
- /* 6 */ "b............f"
+ /* 5 */ "b............h"
+ /* 6 */ "b............i"
/* 7 */ "mb........bbac"
/* 8 */ "mbb......bbmmm"
/* 9 */ "mmbb....bbmmmm"
@@ -1455,7 +1471,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 200,
// DepthWeight:
"",
@@ -1487,9 +1503,13 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
"c: 20: 0\n" /* glass */
"d: 1: 0\n" /* stone */
"e: 64: 3\n" /* wooddoorblock */
- "f: 64: 0\n" /* wooddoorblock */
- "g: 64: 1\n" /* wooddoorblock */
- "h: 64: 8\n" /* wooddoorblock */
+ "f: 76: 1\n" /* redstonetorchon */
+ "g: 76: 2\n" /* redstonetorchon */
+ "h: 76: 3\n" /* redstonetorchon */
+ "i: 64: 0\n" /* wooddoorblock */
+ "j: 76: 4\n" /* redstonetorchon */
+ "k: 64: 1\n" /* wooddoorblock */
+ "l: 64: 8\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
// Block data:
@@ -1520,40 +1540,40 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 0 */ "mmmmaeeammmmmm"
/* 1 */ "mmmmb..bmmmmmm"
/* 2 */ "mmmmb..bmmmmmm"
- /* 3 */ "mmmbb..bbmmmmm"
+ /* 3 */ "mmmbbfgbbmmmmm"
/* 4 */ "mmbb....bbmmmm"
/* 5 */ "mbb......bbmmm"
/* 6 */ "mb........bbba"
- /* 7 */ "b............f"
- /* 8 */ "b............f"
+ /* 7 */ "bf........h..i"
+ /* 8 */ "bf........j..i"
/* 9 */ "mb........bbba"
/* 10 */ "mbb......bbmmm"
/* 11 */ "mmbb....bbmmmm"
- /* 12 */ "mmmbb..bbmmmmm"
+ /* 12 */ "mmmbbfgbbmmmmm"
/* 13 */ "mmmmb..bmmmmmm"
/* 14 */ "mmmmb..bmmmmmm"
- /* 15 */ "mmmmaggammmmmm"
+ /* 15 */ "mmmmakkammmmmm"
/* 16 */ "dddddddddddddd"
// Level 2
/* z\x* 1111 */
/* * 01234567890123 */
- /* 0 */ "mmmmahhammmmmm"
+ /* 0 */ "mmmmallammmmmm"
/* 1 */ "mmmmb..bmmmmmm"
/* 2 */ "mmmmc..cmmmmmm"
/* 3 */ "mmmcc..ccmmmmm"
/* 4 */ "mmcc....ccmmmm"
/* 5 */ "mcc......ccmmm"
/* 6 */ "mc........ccba"
- /* 7 */ "c............h"
- /* 8 */ "c............h"
+ /* 7 */ "c............l"
+ /* 8 */ "c............l"
/* 9 */ "mc........ccba"
/* 10 */ "mcc......ccmmm"
/* 11 */ "mmcc....ccmmmm"
/* 12 */ "mmmcc..ccmmmmm"
/* 13 */ "mmmmc..cmmmmmm"
/* 14 */ "mmmmb..bmmmmmm"
- /* 15 */ "mmmmahhammmmmm"
+ /* 15 */ "mmmmallammmmmm"
/* 16 */ "dddddddddddddd"
// Level 3
@@ -1653,7 +1673,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
true,
// DefaultWeight:
- 100,
+ 75,
// DepthWeight:
"",
--
cgit v1.2.3
From 319169eafbbe5630a311051ea5fdf91e7f482a71 Mon Sep 17 00:00:00 2001
From: STRWarrior
Date: Sun, 1 Jun 2014 14:06:47 +0200
Subject: Made a_BlockHitPos a reference
---
src/Bindings/Plugin.h | 2 +-
src/Bindings/PluginLua.cpp | 4 ++--
src/Bindings/PluginLua.h | 2 +-
src/Bindings/PluginManager.cpp | 2 +-
src/Bindings/PluginManager.h | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/Bindings/Plugin.h b/src/Bindings/Plugin.h
index 3f1e0f0bc..837b1ae13 100644
--- a/src/Bindings/Plugin.h
+++ b/src/Bindings/Plugin.h
@@ -90,7 +90,7 @@ public:
virtual bool OnPluginsLoaded (void) = 0;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos) = 0;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos) = 0;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) = 0;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) = 0;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) = 0;
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp
index da98f3f95..46ee7da9e 100644
--- a/src/Bindings/PluginLua.cpp
+++ b/src/Bindings/PluginLua.cpp
@@ -1108,14 +1108,14 @@ bool cPluginLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid * a
-bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos)
+bool cPluginLua::OnProjectileHitBlock(cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos)
{
cCSLock Lock(m_CriticalSection);
bool res = false;
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_PROJECTILE_HIT_BLOCK];
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
{
- m_LuaState.Call((int)(**itr), &a_Projectile, a_BlockX, a_BlockY, a_BlockZ, a_Face, a_BlockHitPos, cLuaState::Return, res);
+ m_LuaState.Call((int)(**itr), &a_Projectile, a_BlockX, a_BlockY, a_BlockZ, a_Face, &a_BlockHitPos, cLuaState::Return, res);
if (res)
{
return true;
diff --git a/src/Bindings/PluginLua.h b/src/Bindings/PluginLua.h
index 6d0a90654..ec74f07c6 100644
--- a/src/Bindings/PluginLua.h
+++ b/src/Bindings/PluginLua.h
@@ -113,7 +113,7 @@ public:
virtual bool OnPluginsLoaded (void) override;
virtual bool OnPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
- virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos) override;
+ virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos) override;
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) override;
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) override;
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) override;
diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp
index 066616c2a..4f528c2ae 100644
--- a/src/Bindings/PluginManager.cpp
+++ b/src/Bindings/PluginManager.cpp
@@ -1154,7 +1154,7 @@ bool cPluginManager::CallHookPreCrafting(const cPlayer * a_Player, const cCrafti
-bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos)
+bool cPluginManager::CallHookProjectileHitBlock(cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos)
{
HookMap::iterator Plugins = m_Hooks.find(HOOK_PROJECTILE_HIT_BLOCK);
if (Plugins == m_Hooks.end())
diff --git a/src/Bindings/PluginManager.h b/src/Bindings/PluginManager.h
index 47aab74e6..6c4e8bae7 100644
--- a/src/Bindings/PluginManager.h
+++ b/src/Bindings/PluginManager.h
@@ -206,7 +206,7 @@ public: // tolua_export
bool CallHookPluginsLoaded (void);
bool CallHookPostCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
bool CallHookPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
- bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d * a_BlockHitPos);
+ bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos);
bool CallHookProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity);
bool CallHookSpawnedEntity (cWorld & a_World, cEntity & a_Entity);
bool CallHookSpawnedMonster (cWorld & a_World, cMonster & a_Monster);
--
cgit v1.2.3
From 869cd7a2080d6072f90016afd7067f871482a5ac Mon Sep 17 00:00:00 2001
From: Mattes D
Date: Sun, 1 Jun 2014 15:19:01 +0200
Subject: Hot-fixed AnvilStats compilation for MSVC2013.
---
Tools/AnvilStats/AnvilStats.sln | 45 +++++++++++++++++++++++++++++-----------
Tools/AnvilStats/Globals.h | 22 ++++++++++++++++++++
Tools/AnvilStats/SpringStats.cpp | 2 +-
3 files changed, 56 insertions(+), 13 deletions(-)
diff --git a/Tools/AnvilStats/AnvilStats.sln b/Tools/AnvilStats/AnvilStats.sln
index 6e2481d84..46bed8969 100644
--- a/Tools/AnvilStats/AnvilStats.sln
+++ b/Tools/AnvilStats/AnvilStats.sln
@@ -1,32 +1,53 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AnvilStats", "AnvilStats.vcproj", "{CF996A5E-0A86-4004-9710-682B06B5AEBA}"
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Express 2013 for Windows Desktop
+VisualStudioVersion = 12.0.21005.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AnvilStats", "AnvilStats.vcxproj", "{CF996A5E-0A86-4004-9710-682B06B5AEBA}"
ProjectSection(ProjectDependencies) = postProject
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA} = {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}
+ {B61007AC-B557-4B67-A765-E468C0C3A821} = {B61007AC-B557-4B67-A765-E468C0C3A821}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\VC2008\zlib.vcproj", "{EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\lib\zlib\zlib.vcxproj", "{B61007AC-B557-4B67-A765-E468C0C3A821}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
+ DebugProfile|Win32 = DebugProfile|Win32
+ MinSizeRel|Win32 = MinSizeRel|Win32
Release profiled|Win32 = Release profiled|Win32
Release|Win32 = Release|Win32
+ ReleaseProfile|Win32 = ReleaseProfile|Win32
+ RelWithDebInfo|Win32 = RelWithDebInfo|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CF996A5E-0A86-4004-9710-682B06B5AEBA}.Debug|Win32.ActiveCfg = Debug|Win32
{CF996A5E-0A86-4004-9710-682B06B5AEBA}.Debug|Win32.Build.0 = Debug|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.DebugProfile|Win32.ActiveCfg = Debug|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.DebugProfile|Win32.Build.0 = Debug|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.MinSizeRel|Win32.ActiveCfg = Release|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.MinSizeRel|Win32.Build.0 = Release|Win32
{CF996A5E-0A86-4004-9710-682B06B5AEBA}.Release profiled|Win32.ActiveCfg = Release profiled|Win32
{CF996A5E-0A86-4004-9710-682B06B5AEBA}.Release profiled|Win32.Build.0 = Release profiled|Win32
{CF996A5E-0A86-4004-9710-682B06B5AEBA}.Release|Win32.ActiveCfg = Release|Win32
{CF996A5E-0A86-4004-9710-682B06B5AEBA}.Release|Win32.Build.0 = Release|Win32
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}.Debug|Win32.ActiveCfg = Debug|Win32
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}.Debug|Win32.Build.0 = Debug|Win32
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}.Release profiled|Win32.ActiveCfg = Release profiled|Win32
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}.Release profiled|Win32.Build.0 = Release profiled|Win32
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}.Release|Win32.ActiveCfg = Release|Win32
- {EA9D50FD-937A-4EF5-8C37-5F4175AF4FEA}.Release|Win32.Build.0 = Release|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.ReleaseProfile|Win32.ActiveCfg = Release|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.ReleaseProfile|Win32.Build.0 = Release|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32
+ {CF996A5E-0A86-4004-9710-682B06B5AEBA}.RelWithDebInfo|Win32.Build.0 = Release|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.Debug|Win32.Build.0 = Debug|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.DebugProfile|Win32.ActiveCfg = DebugProfile|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.DebugProfile|Win32.Build.0 = DebugProfile|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.Release profiled|Win32.ActiveCfg = Release|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.Release profiled|Win32.Build.0 = Release|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.Release|Win32.ActiveCfg = Release|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.Release|Win32.Build.0 = Release|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.ReleaseProfile|Win32.ActiveCfg = ReleaseProfile|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.ReleaseProfile|Win32.Build.0 = ReleaseProfile|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
+ {B61007AC-B557-4B67-A765-E468C0C3A821}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Tools/AnvilStats/Globals.h b/Tools/AnvilStats/Globals.h
index c673ecb01..df1430cc4 100644
--- a/Tools/AnvilStats/Globals.h
+++ b/Tools/AnvilStats/Globals.h
@@ -24,6 +24,15 @@
#define ALIGN_8
#define ALIGN_16
+ #define FORMATSTRING(formatIndex, va_argsIndex)
+
+ // MSVC has its own custom version of zu format
+ #define SIZE_T_FMT "%Iu"
+ #define SIZE_T_FMT_PRECISION(x) "%" #x "Iu"
+ #define SIZE_T_FMT_HEX "%Ix"
+
+ #define NORETURN __declspec(noreturn)
+
#elif defined(__GNUC__)
// TODO: Can GCC explicitly mark classes as abstract (no instances can be created)?
@@ -40,6 +49,14 @@
// Some portability macros :)
#define stricmp strcasecmp
+ #define FORMATSTRING(formatIndex, va_argsIndex) __attribute__((format (printf, formatIndex, va_argsIndex)))
+
+ #define SIZE_T_FMT "%zu"
+ #define SIZE_T_FMT_PRECISION(x) "%" #x "zu"
+ #define SIZE_T_FMT_HEX "%zx"
+
+ #define NORETURN __attribute((__noreturn__))
+
#else
#error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler"
@@ -194,6 +211,8 @@ typedef unsigned short UInt16;
/// Faster than (int)floorf((float)x / (float)div)
#define FAST_FLOOR_DIV( x, div ) ( (x) < 0 ? (((int)x / div) - 1) : ((int)x / div) )
+#define TOLUA_TEMPLATE_BIND(...)
+
// Own version of assert() that writes failed assertions to the log for review
#ifdef _DEBUG
#define ASSERT( x ) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__ ), assert(0), 0 ) )
@@ -204,6 +223,8 @@ typedef unsigned short UInt16;
// Pretty much the same as ASSERT() but stays in Release builds
#define VERIFY( x ) ( !!(x) || ( LOGERROR("Verification failed: %s, file %s, line %i", #x, __FILE__, __LINE__ ), exit(1), 0 ) )
+typedef unsigned char Byte;
+
@@ -227,3 +248,4 @@ public:
+
diff --git a/Tools/AnvilStats/SpringStats.cpp b/Tools/AnvilStats/SpringStats.cpp
index 637cf20b6..51b7f9d5d 100644
--- a/Tools/AnvilStats/SpringStats.cpp
+++ b/Tools/AnvilStats/SpringStats.cpp
@@ -109,7 +109,7 @@ bool cSpringStats::OnSectionsFinished(void)
int Base = BaseY + z * 16;
for (int x = 1; x < 15; x++)
{
- if (cChunkDef::GetNibble(m_BlockMetas, Base + x) != 0)
+ if (cChunkDef::GetNibble(m_BlockMetas, x, y, z) != 0)
{
// Not a source block
continue;
--
cgit v1.2.3
From 476fdc99523c458506416b06d9b939d1e6065364 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Sun, 1 Jun 2014 17:05:51 +0100
Subject: Use abort in SIGSEGV and SIGABRT handlers
This should cause Mcserver to generate core dumps when it crashes.
---
src/main.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main.cpp b/src/main.cpp
index 68eea7f4d..1f458b0c1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -61,7 +61,7 @@ void NonCtrlHandler(int a_Signal)
std::signal(SIGSEGV, SIG_DFL);
LOGERROR(" D: | MCServer has encountered an error and needs to close");
LOGERROR("Details | SIGSEGV: Segmentation fault");
- exit(EXIT_FAILURE);
+ abort(EXIT_FAILURE);
}
case SIGABRT:
#ifdef SIGABRT_COMPAT
@@ -71,7 +71,7 @@ void NonCtrlHandler(int a_Signal)
std::signal(a_Signal, SIG_DFL);
LOGERROR(" D: | MCServer has encountered an error and needs to close");
LOGERROR("Details | SIGABRT: Server self-terminated due to an internal fault");
- exit(EXIT_FAILURE);
+ abort(EXIT_FAILURE);
}
case SIGINT:
case SIGTERM:
--
cgit v1.2.3
From 750333855c7d8eeb6993e0bb27a6e505022c8a30 Mon Sep 17 00:00:00 2001
From: worktycho
Date: Sun, 1 Jun 2014 17:23:02 +0100
Subject: abort does not take a parameter.
---
src/main.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main.cpp b/src/main.cpp
index 1f458b0c1..6925d9ff1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -61,7 +61,7 @@ void NonCtrlHandler(int a_Signal)
std::signal(SIGSEGV, SIG_DFL);
LOGERROR(" D: | MCServer has encountered an error and needs to close");
LOGERROR("Details | SIGSEGV: Segmentation fault");
- abort(EXIT_FAILURE);
+ abort();
}
case SIGABRT:
#ifdef SIGABRT_COMPAT
@@ -71,7 +71,7 @@ void NonCtrlHandler(int a_Signal)
std::signal(a_Signal, SIG_DFL);
LOGERROR(" D: | MCServer has encountered an error and needs to close");
LOGERROR("Details | SIGABRT: Server self-terminated due to an internal fault");
- abort(EXIT_FAILURE);
+ abort();
}
case SIGINT:
case SIGTERM:
--
cgit v1.2.3
From a84f107400a326b0be27c290359220b8bf0e6635 Mon Sep 17 00:00:00 2001
From: Tiger Wang
Date: Sun, 1 Jun 2014 20:00:11 +0100
Subject: Suggestions two
---
src/Blocks/BlockPiston.cpp | 6 +++---
src/Chunk.cpp | 16 +++++++++-------
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/Blocks/BlockPiston.cpp b/src/Blocks/BlockPiston.cpp
index 1f8e0d9e0..faf639312 100644
--- a/src/Blocks/BlockPiston.cpp
+++ b/src/Blocks/BlockPiston.cpp
@@ -76,15 +76,15 @@ bool cBlockPistonHandler::GetPlacementBlockTypeMeta(
-int cBlockPistonHandler::FirstPassthroughBlock(int pistonX, int pistonY, int pistonZ, NIBBLETYPE pistonmeta, cWorld * a_World)
+int cBlockPistonHandler::FirstPassthroughBlock(int a_PistonX, int a_PistonY, int a_PistonZ, NIBBLETYPE pistonmeta, cWorld * a_World)
{
// Examine each of the 12 blocks ahead of the piston:
for (int ret = 0; ret < PISTON_MAX_PUSH_DISTANCE; ret++)
{
BLOCKTYPE currBlock;
NIBBLETYPE currMeta;
- AddPistonDir(pistonX, pistonY, pistonZ, pistonmeta, 1);
- a_World->GetBlockTypeMeta(pistonX, pistonY, pistonZ, currBlock, currMeta);
+ AddPistonDir(a_PistonX, a_PistonY, a_PistonZ, pistonmeta, 1);
+ a_World->GetBlockTypeMeta(a_PistonX, a_PistonY, a_PistonZ, currBlock, currMeta);
if (CanBreakPush(currBlock))
{
// This block breaks when pushed, extend up to here
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index fbd0a5846..6dce29e68 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -1589,13 +1589,15 @@ void cChunk::FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockT
if ( // Queue block to be sent only if ...
a_SendToClients && // ... we are told to do so AND ...
- ((OldBlockMeta != a_BlockMeta) || // ... the meta value is different OR ...
- !( // ... the old and new blocktypes AREN'T liquids (because client doesn't need to distinguish betwixt them); see below for specifics:
- ((OldBlockType == E_BLOCK_STATIONARY_WATER) && (a_BlockType == E_BLOCK_WATER)) || // Replacing stationary water with water
- ((OldBlockType == E_BLOCK_WATER) && (a_BlockType == E_BLOCK_STATIONARY_WATER)) || // Replacing water with stationary water
- ((OldBlockType == E_BLOCK_STATIONARY_LAVA) && (a_BlockType == E_BLOCK_LAVA)) || // Replacing stationary water with water
- ((OldBlockType == E_BLOCK_LAVA) && (a_BlockType == E_BLOCK_STATIONARY_LAVA)) // Replacing water with stationary water
- ))
+ (
+ (OldBlockMeta != a_BlockMeta) || // ... the meta value is different OR ...
+ !( // ... the old and new blocktypes AREN'T liquids (because client doesn't need to distinguish betwixt them); see below for specifics:
+ ((OldBlockType == E_BLOCK_STATIONARY_WATER) && (a_BlockType == E_BLOCK_WATER)) || // Replacing stationary water with water
+ ((OldBlockType == E_BLOCK_WATER) && (a_BlockType == E_BLOCK_STATIONARY_WATER)) || // Replacing water with stationary water
+ ((OldBlockType == E_BLOCK_STATIONARY_LAVA) && (a_BlockType == E_BLOCK_LAVA)) || // Replacing stationary water with water
+ ((OldBlockType == E_BLOCK_LAVA) && (a_BlockType == E_BLOCK_STATIONARY_LAVA)) // Replacing water with stationary water
+ )
+ )
)
{
m_PendingSendBlocks.push_back(sSetBlock(m_PosX, m_PosZ, a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta));
--
cgit v1.2.3
From 23b08231086ad1edb373811ae4f93d07a60401ad Mon Sep 17 00:00:00 2001
From: madmaxoft
Date: Sun, 1 Jun 2014 22:02:58 +0200
Subject: Update UnderwaterBase prefabs.
Added the waterfall room and the decaying sphere room. Re-tweaked the pieces' weights.
---
src/Generating/Prefabs/UnderwaterBasePrefabs.cpp | 390 ++++++++++++++++++++++-
1 file changed, 378 insertions(+), 12 deletions(-)
diff --git a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
index a20ff9e26..39748a223 100644
--- a/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
+++ b/src/Generating/Prefabs/UnderwaterBasePrefabs.cpp
@@ -15,6 +15,169 @@
const cPrefab::sDef g_UnderwaterBasePrefabs[] =
{
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // BrokenRoom:
+ // The data has been exported from the gallery Water, area index 49, ID 680, created by STR_Warrior
+ {
+ // Size:
+ 14, 7, 12, // SizeX = 14, SizeY = 7, SizeZ = 12
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 13, 6, 11, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 0\n" /* wood */
+ "b: 20: 0\n" /* glass */
+ "c: 5: 5\n" /* wood */
+ "d: 8: 0\n" /* water */
+ "e: 64: 4\n" /* wooddoorblock */
+ "f: 64:12\n" /* wooddoorblock */
+ "g: 64:13\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmaaaammmmmm"
+ /* 2 */ "mmmaabbaammmmm"
+ /* 3 */ "mmaabbbbaammmm"
+ /* 4 */ "maabbbbbbaammm"
+ /* 5 */ "mabbbbbbbbaaac"
+ /* 6 */ "mabbbbbbbbaaac"
+ /* 7 */ "maabbbbbbaammm"
+ /* 8 */ "mmaabbbbaammmm"
+ /* 9 */ "mmmaabbaammmmm"
+ /* 10 */ "mmmmaaaammmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+
+ // Level 1
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmaammmmmmm"
+ /* 1 */ "mmmaaddaammmmm"
+ /* 2 */ "mmaaddddaammmm"
+ /* 3 */ "maaddddddaammm"
+ /* 4 */ "maddddddddaaac"
+ /* 5 */ "adddddddddddde"
+ /* 6 */ "adddddddddddde"
+ /* 7 */ "maddddddddaaac"
+ /* 8 */ "maaddddddaammm"
+ /* 9 */ "mmaaddddaammmm"
+ /* 10 */ "mmmaaddaammmmm"
+ /* 11 */ "mmmmmaammmmmmm"
+
+ // Level 2
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmbbmmmmmmm"
+ /* 1 */ "mmmbb..bbmmmmm"
+ /* 2 */ "mmbb....bbmmmm"
+ /* 3 */ "mbb......bbmmm"
+ /* 4 */ "mb........bbac"
+ /* 5 */ "b............f"
+ /* 6 */ "b............g"
+ /* 7 */ "mb........bbac"
+ /* 8 */ "mbb......bbmmm"
+ /* 9 */ "mmbb....bbmmmm"
+ /* 10 */ "mmmbb..bbmmmmm"
+ /* 11 */ "mmmmmbbmmmmmmm"
+
+ // Level 3
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmbbmmmmmmm"
+ /* 1 */ "mmmbb..bbmmmmm"
+ /* 2 */ "mmbb....bbmmmm"
+ /* 3 */ "mbb......bbmmm"
+ /* 4 */ "mb........bbac"
+ /* 5 */ "b..........bac"
+ /* 6 */ "b..........bac"
+ /* 7 */ "mb........bbac"
+ /* 8 */ "mbb......bbmmm"
+ /* 9 */ "mmbb....bbmmmm"
+ /* 10 */ "mmmbb..bbmmmmm"
+ /* 11 */ "mmmmmbbmmmmmmm"
+
+ // Level 4
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmm.bmmmmmmm"
+ /* 2 */ "mmmmb..bmmmmmm"
+ /* 3 */ "mmmb....bmmmmm"
+ /* 4 */ "mmb......bmmmm"
+ /* 5 */ "m.........bmmm"
+ /* 6 */ "mb........bmmm"
+ /* 7 */ "mmb......bmmmm"
+ /* 8 */ "mmm.....bmmmmm"
+ /* 9 */ "mmmmb..bmmmmmm"
+ /* 10 */ "mmmmmbbmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmbbmmmmmmm"
+ /* 3 */ "mmmm....mmmmmm"
+ /* 4 */ "mmmb....bmmmmm"
+ /* 5 */ "mmb......bmmmm"
+ /* 6 */ "mmb......bmmmm"
+ /* 7 */ "mmmb.....mmmmm"
+ /* 8 */ "mmmmb..bmmmmmm"
+ /* 9 */ "mmmmmbbmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 1111 */
+ /* * 01234567890123 */
+ /* 0 */ "mmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmbbmmmmmmm"
+ /* 4 */ "mmmmbbbbmmmmmm"
+ /* 5 */ "mmmbbbbbbmmmmm"
+ /* 6 */ "mmmbb.bbbmmmmm"
+ /* 7 */ "mmmmbbbbmmmmmm"
+ /* 8 */ "mmmmmbbmmmmmmm"
+ /* 9 */ "mmmmmmmmmmmmmm"
+ /* 10 */ "mmmmmmmmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 13, 1, 6: 5\n" /* Type 1, direction X+ */
+ "-1: 13, 1, 5: 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,
+ }, // BrokenRoom
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Corridor16:
// The data has been exported from the gallery Water, area index 25, ID 566, created by xoft
@@ -88,7 +251,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
true,
// DefaultWeight:
- 2000,
+ 500,
// DepthWeight:
"",
@@ -722,7 +885,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 5 */ "mb........bmmm"
/* 6 */ "mb........bmmm"
/* 7 */ "mmb......bmmmm"
- /* 8 */ "mmmbb...bmmmmm"
+ /* 8 */ "mmmb....bmmmmm"
/* 9 */ "mmmmb..bmmmmmm"
/* 10 */ "mmmmmbbmmmmmmm"
/* 11 */ "mmmmmmmmmmmmmm"
@@ -740,7 +903,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 5 */ "mmb......bmmmm"
/* 6 */ "mmb......bmmmm"
/* 7 */ "mmmb....bmmmmm"
- /* 8 */ "mmmmb.bbmmmmmm"
+ /* 8 */ "mmmmb..bmmmmmm"
/* 9 */ "mmmmmbbmmmmmmm"
/* 10 */ "mmmmmmmmmmmmmm"
/* 11 */ "mmmmmmmmmmmmmm"
@@ -1020,7 +1183,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 7 */ "mc........cm"
/* 8 */ "mc........cm"
/* 9 */ "mmc......cmm"
- /* 10 */ "mmmcc...cmmm"
+ /* 10 */ "mmmc....cmmm"
/* 11 */ "mmmmc..cmmmm"
/* 12 */ "mmmmmccmmmmm"
/* 13 */ "mmmmmmmmmmmm"
@@ -1040,7 +1203,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 7 */ "mmc......cmm"
/* 8 */ "mmc......cmm"
/* 9 */ "mmmc....cmmm"
- /* 10 */ "mmmmc.ccmmmm"
+ /* 10 */ "mmmmc..cmmmm"
/* 11 */ "mmmmmccmmmmm"
/* 12 */ "mmmmmmmmmmmm"
/* 13 */ "mmmmmmmmmmmm"
@@ -1239,7 +1402,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 7 */ "mmmc........cmmm"
/* 8 */ "mmmc........cmmm"
/* 9 */ "mmmmc......cmmmm"
- /* 10 */ "mmmmmcc...cmmmmm"
+ /* 10 */ "mmmmmc....cmmmmm"
/* 11 */ "mmmmmmc..cmmmmmm"
/* 12 */ "mmmmmmmccmmmmmmm"
/* 13 */ "mmmmmmmmmmmmmmmm"
@@ -1259,7 +1422,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 7 */ "mmmmc......cmmmm"
/* 8 */ "mmmmc......cmmmm"
/* 9 */ "mmmmmc....cmmmmm"
- /* 10 */ "mmmmmmc.ccmmmmmm"
+ /* 10 */ "mmmmmmc..cmmmmmm"
/* 11 */ "mmmmmmmccmmmmmmm"
/* 12 */ "mmmmmmmmmmmmmmmm"
/* 13 */ "mmmmmmmmmmmmmmmm"
@@ -1420,7 +1583,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 5 */ "mb........bmmm"
/* 6 */ "mb........bmmm"
/* 7 */ "mmb......bmmmm"
- /* 8 */ "mmmbb...bmmmmm"
+ /* 8 */ "mmmb....bmmmmm"
/* 9 */ "mmmmb..bmmmmmm"
/* 10 */ "mmmmmbbmmmmmmm"
/* 11 */ "mmmmmmmmmmmmmm"
@@ -1436,7 +1599,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 5 */ "mmb......bmmmm"
/* 6 */ "mmb......bmmmm"
/* 7 */ "mmmb....bmmmmm"
- /* 8 */ "mmmmb.bbmmmmmm"
+ /* 8 */ "mmmmb..bmmmmmm"
/* 9 */ "mmmmmbbmmmmmmm"
/* 10 */ "mmmmmmmmmmmmmm"
/* 11 */ "mmmmmmmmmmmmmm"
@@ -1610,7 +1773,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 7 */ "mc........cmmm"
/* 8 */ "mc........cmmm"
/* 9 */ "mmc......cmmmm"
- /* 10 */ "mmmcc...cmmmmm"
+ /* 10 */ "mmmc....cmmmmm"
/* 11 */ "mmmmc..cmmmmmm"
/* 12 */ "mmmmmccmmmmmmm"
/* 13 */ "mmmmmmmmmmmmmm"
@@ -1631,7 +1794,7 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
/* 7 */ "mmc......cmmmm"
/* 8 */ "mmc......cmmmm"
/* 9 */ "mmmc....cmmmmm"
- /* 10 */ "mmmmc.ccmmmmmm"
+ /* 10 */ "mmmmc..cmmmmmm"
/* 11 */ "mmmmmccmmmmmmm"
/* 12 */ "mmmmmmmmmmmmmm"
/* 13 */ "mmmmmmmmmmmmmm"
@@ -1684,6 +1847,209 @@ const cPrefab::sDef g_UnderwaterBasePrefabs[] =
// MoveToGround:
false,
}, // ViewingTee
+
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // WaterfallRoom:
+ // The data has been exported from the gallery Water, area index 50, ID 681, created by Aloe_vera
+ {
+ // Size:
+ 16, 7, 16, // SizeX = 16, SizeY = 7, SizeZ = 16
+
+ // Hitbox (relative to bounding box):
+ 0, 0, 0, // MinX, MinY, MinZ
+ 15, 6, 15, // MaxX, MaxY, MaxZ
+
+ // Block definitions:
+ ".: 0: 0\n" /* air */
+ "a: 5: 5\n" /* wood */
+ "b: 5: 0\n" /* wood */
+ "c: 20: 0\n" /* glass */
+ "d: 64: 3\n" /* wooddoorblock */
+ "e: 76: 1\n" /* redstonetorchon */
+ "f: 76: 2\n" /* redstonetorchon */
+ "g: 64: 2\n" /* wooddoorblock */
+ "h: 76: 3\n" /* redstonetorchon */
+ "i: 64: 0\n" /* wooddoorblock */
+ "j: 76: 4\n" /* redstonetorchon */
+ "k: 64: 1\n" /* wooddoorblock */
+ "l: 64: 8\n" /* wooddoorblock */
+ "m: 19: 0\n" /* sponge */
+ "n: 64: 9\n" /* wooddoorblock */,
+
+ // Block data:
+ // Level 0
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmaammmmmmm"
+ /* 1 */ "mmmmmmmbbmmmmmmm"
+ /* 2 */ "mmmmmmmbbmmmmmmm"
+ /* 3 */ "mmmmmmbbbbmmmmmm"
+ /* 4 */ "mmmmmbbccbbmmmmm"
+ /* 5 */ "mmmmbbccccbbmmmm"
+ /* 6 */ "mmmbbccccccbbmmm"
+ /* 7 */ "abbbcccmmcccbbba"
+ /* 8 */ "abbbcccmmcccbbba"
+ /* 9 */ "mmmbbccccccbbmmm"
+ /* 10 */ "mmmmbbccccbbmmmm"
+ /* 11 */ "mmmmmbbccbbmmmmm"
+ /* 12 */ "mmmmmmbbbbmmmmmm"
+ /* 13 */ "mmmmmmmbbmmmmmmm"
+ /* 14 */ "mmmmmmmbbmmmmmmm"
+ /* 15 */ "mmmmmmmaammmmmmm"
+
+ // Level 1
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaddammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmb..bmmmmmm"
+ /* 3 */ "mmmmmbbefbbmmmmm"
+ /* 4 */ "mmmmbb....bbmmmm"
+ /* 5 */ "mmmbb......bbmmm"
+ /* 6 */ "abbb...cc...bbba"
+ /* 7 */ "g..h..c..c..h..i"
+ /* 8 */ "g..j..c..c..j..i"
+ /* 9 */ "abbb...cc...bbba"
+ /* 10 */ "mmmbb......bbmmm"
+ /* 11 */ "mmmmbb....bbmmmm"
+ /* 12 */ "mmmmmbbefbbmmmmm"
+ /* 13 */ "mmmmmmb..bmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmakkammmmmm"
+
+ // Level 2
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmalnammmmmm"
+ /* 1 */ "mmmmmmb..bmmmmmm"
+ /* 2 */ "mmmmmmc..cmmmmmm"
+ /* 3 */ "mmmmmcc..ccmmmmm"
+ /* 4 */ "mmmmcc....ccmmmm"
+ /* 5 */ "mmmcc......ccmmm"
+ /* 6 */ "abcc........ccba"
+ /* 7 */ "n..............l"
+ /* 8 */ "l..............n"
+ /* 9 */ "abcc........ccba"
+ /* 10 */ "mmmcc......ccmmm"
+ /* 11 */ "mmmmcc....ccmmmm"
+ /* 12 */ "mmmmmcc..ccmmmmm"
+ /* 13 */ "mmmmmmc..cmmmmmm"
+ /* 14 */ "mmmmmmb..bmmmmmm"
+ /* 15 */ "mmmmmmanlammmmmm"
+
+ // Level 3
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmaaaammmmmm"
+ /* 1 */ "mmmmmmbbbbmmmmmm"
+ /* 2 */ "mmmmmmccccmmmmmm"
+ /* 3 */ "mmmmmcc..ccmmmmm"
+ /* 4 */ "mmmmcc....ccmmmm"
+ /* 5 */ "mmmcc......ccmmm"
+ /* 6 */ "abcc........ccba"
+ /* 7 */ "abc..........cba"
+ /* 8 */ "abc..........cba"
+ /* 9 */ "abcc........ccba"
+ /* 10 */ "mmmcc......ccmmm"
+ /* 11 */ "mmmmcc....ccmmmm"
+ /* 12 */ "mmmmmcc..ccmmmmm"
+ /* 13 */ "mmmmmmccccmmmmmm"
+ /* 14 */ "mmmmmmbbbbmmmmmm"
+ /* 15 */ "mmmmmmaaaammmmmm"
+
+ // Level 4
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmccmmmmmmm"
+ /* 4 */ "mmmmm.c..cmmmmmm"
+ /* 5 */ "mmmmmc....cmmmmm"
+ /* 6 */ "mmmmc......cmmmm"
+ /* 7 */ "mmmc........cmmm"
+ /* 8 */ "mmmc........cmmm"
+ /* 9 */ "mmmmc......cmmmm"
+ /* 10 */ "mmmmmc....cmmmmm"
+ /* 11 */ "mmmmmmc..cmmmmmm"
+ /* 12 */ "mmmmmmmccmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 5
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmm.ccmmmmmmm"
+ /* 5 */ "mmmmmmc..cmmmmmm"
+ /* 6 */ "mmmmmc....cmmmmm"
+ /* 7 */ "mmmmc......cmmmm"
+ /* 8 */ "mmmmc......cmmmm"
+ /* 9 */ "mmmmmc....cmmmmm"
+ /* 10 */ "mmmmmmc..cmmmmmm"
+ /* 11 */ "mmmmmmmccmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm"
+
+ // Level 6
+ /* z\x* 111111 */
+ /* * 0123456789012345 */
+ /* 0 */ "mmmmmmmmmmmmmmmm"
+ /* 1 */ "mmmmmmmmmmmmmmmm"
+ /* 2 */ "mmmmmmmmmmmmmmmm"
+ /* 3 */ "mmmmmmmmmmmmmmmm"
+ /* 4 */ "mmmmmmmmmmmmmmmm"
+ /* 5 */ "mmmmmmmccmmmmmmm"
+ /* 6 */ "mmmmmmccccmmmmmm"
+ /* 7 */ "mmmmmcc..ccmmmmm"
+ /* 8 */ "mmmmmcc..ccmmmmm"
+ /* 9 */ "mmmmmmccccmmmmmm"
+ /* 10 */ "mmmmmmmccmmmmmmm"
+ /* 11 */ "mmmmmmmmmmmmmmmm"
+ /* 12 */ "mmmmmmmmmmmmmmmm"
+ /* 13 */ "mmmmmmmmmmmmmmmm"
+ /* 14 */ "mmmmmmmmmmmmmmmm"
+ /* 15 */ "mmmmmmmmmmmmmmmm",
+
+ // Connectors:
+ "1: 15, 1, 8: 5\n" /* Type 1, direction X+ */
+ "-1: 15, 1, 7: 5\n" /* Type -1, direction X+ */
+ "1: 8, 1, 0: 2\n" /* Type 1, direction Z- */
+ "-1: 7, 1, 0: 2\n" /* Type -1, direction Z- */
+ "1: 0, 1, 7: 4\n" /* Type 1, direction X- */
+ "-1: 0, 1, 8: 4\n" /* Type -1, direction X- */
+ "1: 7, 1, 15: 3\n" /* Type 1, direction Z+ */
+ "-1: 8, 1, 15: 3\n" /* Type -1, direction Z+ */,
+
+ // AllowedRotations:
+ 7, /* 1, 2, 3 CCW rotation allowed */
+
+ // Merge strategy:
+ cBlockArea::msSpongePrint,
+
+ // ShouldExtendFloor:
+ true,
+
+ // DefaultWeight:
+ 5,
+
+ // DepthWeight:
+ "",
+
+ // AddWeightIfSame:
+ 0,
+
+ // MoveToGround:
+ false,
+ }, // WaterfallRoom
}; // g_UnderwaterBasePrefabs
@@ -1773,7 +2139,7 @@ const cPrefab::sDef g_UnderwaterBaseStartingPrefabs[] =
/* 4 */ "mmmmcc....ccmmmm"
/* 5 */ "mmmcc......ccmmm"
/* 6 */ "abbc........cbba"
- /* 7 */ "h..............h"
+ /* 7 */ "i..............h"
/* 8 */ "h..............i"
/* 9 */ "abbc........cbba"
/* 10 */ "mmmcc......ccmmm"
--
cgit v1.2.3
From 24bea1d0b2b1d0f7400632fd480a24dff84bcad1 Mon Sep 17 00:00:00 2001
From: Mattes D
Date: Sun, 1 Jun 2014 22:33:53 +0200
Subject: Generator article now has all biome genertors and most their imgs.
---
docs/Generator.html | 164 +++++++++++++++++++++++--
docs/img/biomes.jpg | Bin 0 -> 34538 bytes
docs/img/distortedvoronoibiomes.png | Bin 0 -> 6012 bytes
docs/img/finishers.jpg | Bin 0 -> 40652 bytes
docs/img/jittergrid.jpg | Bin 0 -> 51390 bytes
docs/img/jittergridlocality.jpg | Bin 0 -> 40758 bytes
docs/img/multistepmapbiomes.png | Bin 0 -> 11103 bytes
docs/img/perlin.jpg | Bin 0 -> 24105 bytes
docs/img/perlinheightmap.jpg | Bin 0 -> 53543 bytes
docs/img/temperaturehumiditydecisionhills.jpg | Bin 0 -> 88494 bytes
docs/img/temperaturehumiditydecisionsimple.jpg | Bin 0 -> 51736 bytes
docs/img/terraincomposition.jpg | Bin 0 -> 43271 bytes
docs/img/terrainheight.jpg | Bin 0 -> 29098 bytes
docs/img/twolevelbiomes.png | Bin 0 -> 33816 bytes
docs/img/voronoijitterbiomes.png | Bin 0 -> 4268 bytes
15 files changed, 156 insertions(+), 8 deletions(-)
create mode 100644 docs/img/biomes.jpg
create mode 100644 docs/img/distortedvoronoibiomes.png
create mode 100644 docs/img/finishers.jpg
create mode 100644 docs/img/jittergrid.jpg
create mode 100644 docs/img/jittergridlocality.jpg
create mode 100644 docs/img/multistepmapbiomes.png
create mode 100644 docs/img/perlin.jpg
create mode 100644 docs/img/perlinheightmap.jpg
create mode 100644 docs/img/temperaturehumiditydecisionhills.jpg
create mode 100644 docs/img/temperaturehumiditydecisionsimple.jpg
create mode 100644 docs/img/terraincomposition.jpg
create mode 100644 docs/img/terrainheight.jpg
create mode 100644 docs/img/twolevelbiomes.png
create mode 100644 docs/img/voronoijitterbiomes.png
diff --git a/docs/Generator.html b/docs/Generator.html
index f71ce1c71..b7586a183 100644
--- a/docs/Generator.html
+++ b/docs/Generator.html
@@ -13,6 +13,7 @@ with specific implementation notes regarding MCServer.
microscopic to planet-wide scale, that have shaped the terrain into what we see today. The tectonic plates
collide, push mountain ranges up and ocean trenches down. Erosion dulls the sharp shapes. Plantlife takes
over to further change the overall look of the world.
+
Generally speaking, the processes take what's there and change it. Unlike computer generating, which
usually creates a finished terrain from scratch, or maybe with only a few iterations. It would be unfeasible
for software to emulate all the natural processes in enough detail to provide world generation for a game,
@@ -35,11 +36,14 @@ distinction will be discussed later.
+
+
Reversing the flow
As already mentioned, the nature works basically by generating raw terrain composition, then "applying"
erosion, vegetation and finally this leads to biomes being formed. Let's now try a somewhat inverse
approach: First generate biomes, then fit them with appropriate terrain, and finally cover in vegetation
and all the other stuff.
+
Splitting the parts like this suddenly makes it possible to create a generator with the required
properties. We can generate a reasonable biome map chunk-wise, independently of all the other data. Once we
have the biomes, we can compose the terrain for the chunk by using the biome data for the chunk, and
@@ -49,6 +53,8 @@ neighboring chunk to be present. Similarly, once we have the terrain composition
generate all the vegetation and structures in it, and those can again use the terrain composition in
neighboring chunks.
+
+
The ComposableGenerator pipeline
This leads us directly to the main pipeline that is used for generating terrain in MCServer. For
technical reasons, the terrain composition step is further subdivided into Height generation and Composition
@@ -61,6 +67,7 @@ sequence:
Finishers
+
@@ -69,6 +76,8 @@ sequence:
have 5 biome generators and 3 height generators and you can let the users mix'n'match.
+
+
Using coherent noise for the generation
For a great tutorial on coherent noise, see the LibNoise
documentation.
@@ -79,41 +88,180 @@ documentation.
parameters are given to the noise functions.
The noise can be seamlessly extended in any direction
+
We'll be mostly using Perlin noise in this article. It is the easiest one to visualise and use and is one
of the most useful kinds of coherent noises. Here's an example of a Perlin noise generated in 2 dimensions:
-
+
+
It comes only naturally that such a 2D noise can be used as a terrain height map directly:
-
+
+
However, this is not the only use for this noise, and 2 dimensions is not the limit - this noise can be
generated for any number of dimensions.
+
+
Generating biomes
-The easiest way to generate biomes is to not generate at all - simply assign a single constant biome to
-everywhere. And indeed there are times when this kind of "generator" is useful - for the MineCraft's Flat
+
The easiest way to generate biomes is to not generate them at all - simply assign a single constant biome
+to everywhere. And indeed there are times when this kind of "generator" is useful - for the MineCraft's Flat
world type, or for testing purposes, or for tematic maps. In MCServer, this is exactly what the Constant
biome generator does.
+
Of course, there are more interesting test scenarios for which multiple biomes must be generated as easy
as possible. For these special needs, there's a CheckerBoard biome generator. As the name suggests, it
generates a grid of biomes.
+
Voronoi diagram
-These two generators are more of a technicality, we need to make something more interesting if we're
+
Those two generators were more of a technicality, we need to make something more interesting if we're
going for a natural look. The Voronoi generator is the first step towards such a change. Recall that a
Voronoi diagram is a construct that creates a
set of areas where each point in an area is closer to the appropriate seed of the area than the seeds of any
other area:
+
+To generate biomes using this approach, you select random "seeds", assign a biome to each one, and then
+for each "column" of the world you find the seed that is the nearest to that column, and use that seed's
+biome.
+
The overall shape of a Voronoi diagram is governed by the placement of the seeds. In extreme cases, a
seed could affect the entire diagram, which is what we don't want - we need our locality, so that we can
generate a chunk's worth of biome data. We also don't want the too much irregular diagrams that are produced
when the seeds are in small clusters. We need our seeds to come in random, yet somewhat uniform fashion.
+
Luckily, we have just the tool: Grid with jitter. Originally used in antialiasing techniques, they can be
successfully applied as a source of the seeds for a Voronoi diagram. Simply take a regular 2D grid of seeds
with the grid distance being N, and move each seed along the X and Y axis by a random distance, usually in
the range [-N / 2, +N / 2]:
-
+
+
Such a grid is the ideal seed source for a Voronoi biome generator, because not
only are the Voronoi cells "reasonable", but the seed placement's effect on the diagram is localized - each
-pixel in the diagram depends on at most 5 x 5 seeds around it:
-
+pixel in the diagram depends on at most 4 x 4 seeds around it. In the following picture, the seed for the
+requested point (blue) must be within the indicated circle. Even the second-nearest seed, which we will need
+later, is inside that circle.
+
+
+Calculating the jitter for each cell can be done easily by using a 2D Perlin noise for each coord. We
+calculate the noise's value at [X, Z], which gives us a number in the range [-1; 1]. We then multiply the
+number by N / 2, this gives us the required range of [-N / 2, +N / 2]. Adding this number to the X coord
+gives us the seed's X position. We use another Perlin noise and the same calculation for the Z coord of the
+seed.
+
+Here's an example of a biome map generated using the Voronoi + jitter grid, as implemented by the Voronoi
+biome generator in MCServer:
+
+
+Distorted Voronoi
+The biomes are starting to look interesting, but now they have straight-line borders, which looks rather
+weird and the players will most likely notice very soon. We need to somehow distort the borders to make them
+look more natural. By far the easiest way to achieve that is to use a little trick: When the generator is
+asked for the biome at column [X, Z], instead of calculating the Voronoi biome for column [X, Z], we first
+calculate a random offset for each coord, and add it to the coordinates. So the generator actually responds
+with the biome for [X + rndX, Z + rndZ].
+
+In order to keep the property that generating for the second time gives us the same result, we need the
+"random offset" to be replicatable - same output for the same input. This is where we use yet another Perlin
+noise - just like with the jitter for the Voronoi grid, we add a value from a separate noise to each
+coordinate before sending the coordinates down to the Voronoi generator:
+
+DistortedVoronoiBiome(X, Z) := VoronoiBiome(X + PerlinX(X, Z), Z + PerlinZ(X, Z))
+
+
+The following image shows the effects of the change, as generated by MCServer's DistortedVoronoi biome
+generator. It is actually using the very same Voronoi map as the previous image, the only change has been
+the addition of the distortion:
+
+
+As you can see, this already looks reasonable enough, it could be considered natural biomes, if it
+weren't for several drawbacks:
+
+- There's no way to limit the neighbors. A desert biome can neighbor a tundra biome.
+- All the biomes are considered equal. There's no way to make oceans larger. A mushroom biome is
+generated right next to other land biomes.
+
+
+Adding relativity
+Our next goal is to remove the first defect of the distorted voronoi generator: unrelated biomes
+generating next to each other. It is highly unlikely to find a jungle biome next to a desert biome, so we
+want to have as few of those boundaries as possible. We could further improve on the selection of
+biome-to-seed in the Voronoi generator. Or we can try a completely different idea altogether.
+
+Recall how we talked about the nature, where the biomes are formed by the specific conditions of a place.
+What if we could make a similar dependency, but without the terrain? It turns out this is possible rather
+easily - instead of depending on the terrain, we choose two completely artificial measures. Let's call them
+Temperature and Humidity. If we knew the temperature of the place, we know what set of biomes are possible
+for such temperatures - we won't place deserts in the cold and tundra in the hot anymore. Similarly, the
+humidity will help us sort out the desert vs jungle issue. But how do we get a temperature and humidity?
+Once again, the Perlin noise comes to the rescue. We can use a simple 2D Perlin noise as the temperature
+map, and another one as the humidity map.
+
+What we need next is a decision of what biome to generate in certain temperature and humidity
+combinations. The fastest way for a computer is to have a 2D array, where the temperature is one dimension
+and humidity the other, and the values in the array specify the biome to generate:
+
+
+We can even "misuse" the above diagram to include the hill variants of the biomes and have those hills
+neighbor each other properly, simply by declaring some of the decision diagram's parts as hills:
+
+
+The problem with this approach is that there are biomes that should not depend on temperature or
+humidity, they generate across all of their values. Biomes like Oceans, Rivers and Mushroom. We could
+either add them somewhere into the decision diagram, or we can make the generator use a multi-step decision:
+
+- Decide whether the point is in the ocean, land or mushroom
+- If it's land, decide if it's real land or river.
+- If it's real land, use a TemperatureHumidity approach to generate land-biomes
+
+
+
+This is the approach implemented in MCServer's MultiStepMap biome generator. It generates biome maps like
+this:
+
+
+To decide whether the point is in the ocean, land or mushroom, the generator uses a DistortedVoronoi
+approach where the seeds get the "ocean", "land" and "mushroom" values; special handling is added so that a
+mushroom value is always surrounded by ocean values on all 8 sides:
+
+
+For the Voronoi cells that are calculated as mushroom, the distance to the nearest-seed is used to
+further shrink the mushroom biome and then to distinguish between mushroom and mushroom-shore:
+
+
+The rivers are added only to the areas that have been previously marked as land. A simple 2D Perlin noise
+is used as the base, where its value is between 0 and a configured threshold value, a river is created. This
+creates the rivers in a closed-loop-like shapes, occasionally splitting two branches off:
+
+
+For the leftover land biomes, the two Perlin noises, representing temperature and humidity, are used to
+generate the biomes, as described earlier. Additionally, the temperature map is used to turn the Ocean biome
+into FrozenOcean, and the River biome into FrozenRiver, wherever the temperature drops below a threshold.
+
+Two-level Voronoi
+The 1.7 MineCraft update brought a completely new terrain generation, which has sparked renewed interest
+in the biome generation. A new, potentially simpler way of generating biomes was found, the two-level
+Voronoi generator.
+
+The main idea behind it all is that we create large areas of similar biomes. There are several groups of
+related biomes that can be generated near each other: Desert biomes, Ice biomes, Forest biomes, Mesa biomes.
+Technically, the Ocean biomes were added as yet another group, so that the oceans will generate in
+approximately the size of the larger areas, too.
+
+For each column a DistortedVoronoi is used to select, which large area to use. This in turn results in
+the list of biomes from which to choose. Another DistortedVoronoi, this time with a smaller grid size, is
+used to select one biome out of that list. Additionally, the smaller DistortedVoronoi calculates not only
+the nearest seed's distance, but also the distance to the second-nearest seed; the ratio between these two
+is used as an indicator whether the column is in the "inside" or on the "outskirt" of the smaller Voronoi
+cell. This allows us to give certain biomes an "edge" biome - the Mushroom biome has a MushroomShore edge,
+the ExtremeHills biome have an ExtremeHillsEdge biome on the edge, etc.
+
+
+
+
+The following image shows an example output of a TwoLevel biome generator in MCServer:
+
+
+
+
+Terrain height