0

updated biome rendering to use latest Biome Extractor format

This commit is contained in:
Aaron Griffith
2011-03-03 12:27:47 -05:00
parent 1bb6d03c90
commit a6805c2e0c
4 changed files with 19 additions and 16 deletions

View File

@@ -92,10 +92,10 @@ biome-accurate tinting, the Overviewer can use biome data produced by the
Minecraft Biome Extractor tool. This tool can be downloaded from: Minecraft Biome Extractor tool. This tool can be downloaded from:
http://www.minecraftforum.net/viewtopic.php?f=25&t=80902 http://www.minecraftforum.net/viewtopic.php?f=25&t=80902
If the EXTRACTEDBIOMES folder is present in the world directory, then the If the "biomes" folder is present in the world directory, then the Overviewer
Overviewer will use the biome data to tint grass and leaves automatically -- will use the biome data to tint grass and leaves automatically -- there is no
there is no command line option to turn this feature on. If this folder does command line option to turn this feature on. If this folder does not exist,
not exist, then the Overviewer will use a static tinting for grass and leaves. then the Overviewer will use a static tinting for grass and leaves.
Compiling the C Extension (optional) Compiling the C Extension (optional)
------------------------------------ ------------------------------------

View File

@@ -675,9 +675,9 @@ class ChunkRenderer(object):
if self.world.useBiomeData: if self.world.useBiomeData:
biomeColorData = textures.getBiomeData(self.world.worlddir, biomeColorData = textures.getBiomeData(self.world.worlddir,
self.chunkX, self.chunkY) self.chunkX, self.chunkY)
# in the 8x8 block of biome data, what chunk is this?l # in the 32x32 block of biome data, what chunk is this?l
startX = (self.chunkX - int(math.floor(self.chunkX/8)*8)) startX = (self.chunkX - int(math.floor(self.chunkX/32)*32))
startY = (self.chunkY - int(math.floor(self.chunkY/8)*8)) startY = (self.chunkY - int(math.floor(self.chunkY/32)*32))
# Each block is 24x24 # Each block is 24x24
# The next block on the X axis adds 12px to x and subtracts 6px from y in the image # The next block on the X axis adds 12px to x and subtracts 6px from y in the image
@@ -717,14 +717,17 @@ class ChunkRenderer(object):
continue continue
if self.world.useBiomeData: if self.world.useBiomeData:
# 16 : number of blocks in a chunk (in one direction)
# 32 : number of chunks in a region (and biome file) in one direction
# so 16 * 32 == 512 : number of blocks in biome file, in one direction
if blockid == 2: #grass if blockid == 2: #grass
index = biomeColorData[ ((startY*16)+y) * 128 + (startX*16) + x] index = biomeColorData[ ((startY*16)+y) * 512 + (startX*16) + x]
c = textures.grasscolor[index] c = textures.grasscolor[index]
# only tint the top texture # only tint the top texture
t = textures.prepareGrassTexture(c) t = textures.prepareGrassTexture(c)
elif blockid == 18: # leaves elif blockid == 18: # leaves
index = biomeColorData[ ((startY*16)+y) * 128 + (startX*16) + x] index = biomeColorData[ ((startY*16)+y) * 512 + (startX*16) + x]
c = textures.foliagecolor[index] c = textures.foliagecolor[index]
t = textures.prepareLeafTexture(c) t = textures.prepareLeafTexture(c)

View File

@@ -134,7 +134,7 @@ def main():
if not composite.extension_alpha_over: if not composite.extension_alpha_over:
logging.info("Notice: alpha_over extension not found; using default PIL paste()") logging.info("Notice: alpha_over extension not found; using default PIL paste()")
useBiomeData = os.path.exists(os.path.join(worlddir, 'EXTRACTEDBIOMES')) useBiomeData = os.path.exists(os.path.join(worlddir, 'biomes'))
if not useBiomeData: if not useBiomeData:
logging.info("Notice: Not using biome data for tinting") logging.info("Notice: Not using biome data for tinting")

View File

@@ -824,9 +824,9 @@ def prepareBiomeData(worlddir):
if grasscolor and foliagecolor: if grasscolor and foliagecolor:
return return
biomeDir = os.path.join(worlddir, "EXTRACTEDBIOMES") biomeDir = os.path.join(worlddir, "biomes")
if not os.path.exists(biomeDir): if not os.path.exists(biomeDir):
raise Exception("EXTRACTEDBIOMES not found") raise Exception("biomes not found")
# try to find the biome color images. If _find_file can't locate them # try to find the biome color images. If _find_file can't locate them
# then try looking in the EXTRACTEDBIOMES folder # then try looking in the EXTRACTEDBIOMES folder
@@ -850,16 +850,16 @@ def getBiomeData(worlddir, chunkX, chunkY):
global currentBiomeFile, currentBiomeData global currentBiomeFile, currentBiomeData
biomeFile = "%d.%d.biome" % ( biomeFile = "b.%d.%d.biome" % (
int(math.floor(chunkX/8)*8), int(math.floor(chunkX/32)),
int(math.floor(chunkY/8)*8) int(math.floor(chunkY/32))
) )
if biomeFile == currentBiomeFile: if biomeFile == currentBiomeFile:
return currentBiomeData return currentBiomeData
currentBiomeFile = biomeFile currentBiomeFile = biomeFile
f = open(os.path.join(worlddir, "EXTRACTEDBIOMES", biomeFile), "rb") f = open(os.path.join(worlddir, "biomes", biomeFile), "rb")
rawdata = f.read() rawdata = f.read()
f.close() f.close()