mirror of
https://github.com/Cubitect/cubiomes.git
synced 2025-09-22 11:04:57 -04:00
Added variant option to isViableStructurePos.
This commit is contained in:
parent
a6f54b8d4f
commit
e21f6c0f92
12
README.md
12
README.md
@ -173,7 +173,7 @@ int main()
|
|||||||
{
|
{
|
||||||
uint64_t seed = lower48 | (upper16 << 48);
|
uint64_t seed = lower48 | (upper16 << 48);
|
||||||
applySeed(&g, 0, seed);
|
applySeed(&g, 0, seed);
|
||||||
if (isViableStructurePos(structType, &g, p.x, p.z))
|
if (isViableStructurePos(structType, &g, p.x, p.z, 0))
|
||||||
{
|
{
|
||||||
printf("Seed %" PRId64 " has a Pillager Outpost at (%d, %d).\n",
|
printf("Seed %" PRId64 " has a Pillager Outpost at (%d, %d).\n",
|
||||||
(int64_t) seed, p.x, p.z);
|
(int64_t) seed, p.x, p.z);
|
||||||
@ -250,10 +250,10 @@ int main()
|
|||||||
uint64_t seed = s48 | (high << 48);
|
uint64_t seed = s48 | (high << 48);
|
||||||
applySeed(&g, 0, seed);
|
applySeed(&g, 0, seed);
|
||||||
|
|
||||||
if (isViableStructurePos(styp, &g, pos[0].x, pos[0].z) &&
|
if (isViableStructurePos(styp, &g, pos[0].x, pos[0].z, 0) &&
|
||||||
isViableStructurePos(styp, &g, pos[1].x, pos[1].z) &&
|
isViableStructurePos(styp, &g, pos[1].x, pos[1].z, 0) &&
|
||||||
isViableStructurePos(styp, &g, pos[2].x, pos[2].z) &&
|
isViableStructurePos(styp, &g, pos[2].x, pos[2].z, 0) &&
|
||||||
isViableStructurePos(styp, &g, pos[3].x, pos[3].z))
|
isViableStructurePos(styp, &g, pos[3].x, pos[3].z, 0))
|
||||||
{
|
{
|
||||||
printf("%" PRId64 "\n", (int64_t) seed);
|
printf("%" PRId64 "\n", (int64_t) seed);
|
||||||
}
|
}
|
||||||
@ -288,8 +288,6 @@ int main()
|
|||||||
printf("Seed: %" PRId64 "\n", (int64_t) seed);
|
printf("Seed: %" PRId64 "\n", (int64_t) seed);
|
||||||
printf("Estimated position of first stronghold: (%d, %d)\n", pos.x, pos.z);
|
printf("Estimated position of first stronghold: (%d, %d)\n", pos.x, pos.z);
|
||||||
|
|
||||||
// The finders for the strongholds and spawn require that the seed is
|
|
||||||
// applied to the generator beforehand.
|
|
||||||
Generator g;
|
Generator g;
|
||||||
setupGenerator(&g, mc, 0);
|
setupGenerator(&g, mc, 0);
|
||||||
applySeed(&g, 0, seed);
|
applySeed(&g, 0, seed);
|
||||||
|
10
finders.c
10
finders.c
@ -1771,7 +1771,7 @@ static int mapViableShore(const Layer * l, int * out, int x, int z, int w, int h
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isViableStructurePos(int structureType, Generator *g, int x, int z)
|
int isViableStructurePos(int structureType, Generator *g, int x, int z, uint32_t flags)
|
||||||
{
|
{
|
||||||
int approx = 0; // enables approximation levels
|
int approx = 0; // enables approximation levels
|
||||||
int viable = 0;
|
int viable = 0;
|
||||||
@ -1878,6 +1878,8 @@ L_feature:
|
|||||||
id = getBiomeAt(g, 0, sampleX, 15, sampleZ);
|
id = getBiomeAt(g, 0, sampleX, 15, sampleZ);
|
||||||
if (id < 0 || !isViableFeatureBiome(g->mc, structureType, id))
|
if (id < 0 || !isViableFeatureBiome(g->mc, structureType, id))
|
||||||
goto L_not_viable;
|
goto L_not_viable;
|
||||||
|
if (flags && (uint32_t) id != flags)
|
||||||
|
goto L_not_viable;
|
||||||
viable = id; // biome for viablility, useful for further analysis
|
viable = id; // biome for viablility, useful for further analysis
|
||||||
goto L_viable;
|
goto L_viable;
|
||||||
}
|
}
|
||||||
@ -1886,6 +1888,8 @@ L_feature:
|
|||||||
const int vv[] = { plains, desert, savanna, taiga, snowy_tundra };
|
const int vv[] = { plains, desert, savanna, taiga, snowy_tundra };
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < sizeof(vv)/sizeof(int); i++) {
|
for (i = 0; i < sizeof(vv)/sizeof(int); i++) {
|
||||||
|
if (flags && flags != (uint32_t) vv[i])
|
||||||
|
continue;
|
||||||
VillageType vt = getVillageType(g->mc, g->seed, x, z, vv[i]);
|
VillageType vt = getVillageType(g->mc, g->seed, x, z, vv[i]);
|
||||||
switch (vt.rotation) {
|
switch (vt.rotation) {
|
||||||
case 0: sampleX = -1+vt.sx; sampleZ = -1+vt.sz; break;
|
case 0: sampleX = -1+vt.sx; sampleZ = -1+vt.sz; break;
|
||||||
@ -1897,7 +1901,7 @@ L_feature:
|
|||||||
sampleX = ((chunkX << 5) + sampleX) / 2 >> 2;
|
sampleX = ((chunkX << 5) + sampleX) / 2 >> 2;
|
||||||
sampleZ = ((chunkZ << 5) + sampleZ) / 2 >> 2;
|
sampleZ = ((chunkZ << 5) + sampleZ) / 2 >> 2;
|
||||||
id = getBiomeAt(g, 0, sampleX, 15, sampleZ);
|
id = getBiomeAt(g, 0, sampleX, 15, sampleZ);
|
||||||
if (id == vv[i]) {
|
if (id == vv[i] || (id == meadow && vv[i] == plains)) {
|
||||||
viable = id;
|
viable = id;
|
||||||
goto L_viable;
|
goto L_viable;
|
||||||
}
|
}
|
||||||
@ -1946,7 +1950,7 @@ L_feature:
|
|||||||
{
|
{
|
||||||
if (g->mc >= MC_1_16)
|
if (g->mc >= MC_1_16)
|
||||||
goto L_not_viable;
|
goto L_not_viable;
|
||||||
if (isViableStructurePos(Village, g, p.x, p.z))
|
if (isViableStructurePos(Village, g, p.x, p.z, 0))
|
||||||
goto L_not_viable;
|
goto L_not_viable;
|
||||||
goto L_viable;
|
goto L_viable;
|
||||||
}
|
}
|
||||||
|
12
finders.h
12
finders.h
@ -564,14 +564,16 @@ Pos estimateSpawn(const Generator *g);
|
|||||||
// Validating Structure Positions
|
// Validating Structure Positions
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
/* Performs a biome check at the specified block coordinates to determine
|
/* Performs a biome check near the specified block coordinates to determine
|
||||||
* whether a structure of the given type could spawn there. You can get the
|
* whether a structure of the given type could spawn there. You can get the
|
||||||
* block positions using getStructurePos().
|
* block positions using getStructurePos().
|
||||||
* The generator, 'g', should be initialized for a scale 1:1 generation of the
|
* The generator, 'g', should be initialized for the correct MC version,
|
||||||
* correct MC version, dimension and seed. The generator may be temporarily
|
* dimension and seed. The generator may be temporarily modified during the
|
||||||
* modified during the function call, but will be restored upon return.
|
* function call, but will be restored upon return.
|
||||||
|
* The 'flags' argument is optional structure specific information, such as the
|
||||||
|
* biome variant for villages.
|
||||||
*/
|
*/
|
||||||
int isViableStructurePos(int structType, Generator *g, int blockX, int blockZ);
|
int isViableStructurePos(int structType, Generator *g, int blockX, int blockZ, uint32_t flags);
|
||||||
|
|
||||||
/* Checks if the specified structure type could generate in the given biome.
|
/* Checks if the specified structure type could generate in the given biome.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user