diff --git a/docs/config.rst b/docs/config.rst index ebc14cc..a72e5dd 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -540,7 +540,9 @@ values. The valid configuration keys are listed below. ``texturepath`` This is a where a specific texture pack can be found to be used during this render. - It can be either a folder or a zip file containing the texture pack. + It can be either a folder or a zip file containing the texture pack. If specifying + a folder, this option should point to a directory that *contains* the textures/ folder + (it should not point to the textures folder directly). Its value should be a string. .. _crop: diff --git a/docs/design/designdoc.rst b/docs/design/designdoc.rst index a69a099..31971ae 100644 --- a/docs/design/designdoc.rst +++ b/docs/design/designdoc.rst @@ -100,9 +100,10 @@ The first step is rendering the block sprites from the textures. Each block is "built" from its textures into an image of a cube and cached in a :class:`Textures` object. -Textures come from a terrain.png file in the form of 16 by 16 pixel images. -(Higher resolution textures are resized and the process remains the same). In -order to draw a cube out of the textuers, an `affine transformation`_ is applied to +Textures come from files inside of a "textures" folder. If the file is square (has equal width +and height dimensions), it is scaled down to 16 x 16 pixels. Non-square images are used with animated +textures. In this case, the first frame of the animated texture is used, and also scaled to a 16 by 16 image. +In order to draw a cube out of the textuers, an `affine transformation`_ is applied to the images for the top and sides of the cube in order to transform it to the appropriate perspective. diff --git a/docs/index.rst b/docs/index.rst index 5bbac6d..27e7cb6 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -124,7 +124,7 @@ Windows, Mac, and Linux as long as you have these software packages installed: * Numpy -* Either a Minecraft Client installed or a terrain.png for the textures. +* Either a Minecraft Client installed or a textures/ folder for the textures (possibly from a texturepack) The first three are included in the Windows download. Also, there are additional requirements for compiling it (like a compiler). More details are available in diff --git a/docs/running.rst b/docs/running.rst index 1cc7e86..576b0d1 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -245,12 +245,12 @@ If you want or need to provide your own textures, you have several options: wget -N http://s3.amazonaws.com/MinecraftDownload/minecraft.jar -P ~/.minecraft/bin/ -* You can manually extract the terrain.png from minecraft.jar or your favorite +* You can manually extract the textures folder from minecraft.jar or your favorite texture pack. If you've built the Overviewer from source or are using the - windows exe, place the file in the same directory as overviewer.py or + windows exe, place the folder in the same directory as overviewer.py or overviewer.exe. -* Specify any terrain.png or texture pack you want with the +* Specify any texture pack you want with the :ref:`texturepath` option. If you copy your world before you render it diff --git a/overviewer.py b/overviewer.py index 578d7af..ceb3f3d 100755 --- a/overviewer.py +++ b/overviewer.py @@ -136,21 +136,24 @@ def main(): print("(build info not found)") return 0 - if options.check_terrain: + # if --check-terrain was specified, but we have NO config file, then we cannot + # operate on a custom texture path. we do terrain checking with a custom texture + # pack later on, after we've parsed the config file + if options.check_terrain and not options.config: import hashlib from overviewer_core.textures import Textures - # TODO custom textures path? tex = Textures() + logging.info("Looking for a few common texture files...") try: - f = tex.find_file("terrain.png", verbose=True) + f = tex.find_file("textures/blocks/stone.png", verbose=True) + f = tex.find_file("textures/blocks/tallgrass.png", verbose=True) + f = tex.find_file("textures/blocks/oreDiamond.png", verbose=True) + f = tex.find_file("textures/blocks/wood.png", verbose=True) except IOError: - logging.error("Could not find the file terrain.png") + logging.error("Could not find the file stone.png") return 1 - h = hashlib.sha1() - h.update(f.read()) - logging.info("Hash of terrain.png file is: `%s`", h.hexdigest()) return 0 # if no arguments are provided, print out a helpful message @@ -265,7 +268,20 @@ dir but you forgot to put quotes around the directory, since it contains spaces. logging.error(str(ex)) return 1 + if options.check_terrain: # we are already in the "if configfile" branch + logging.info("Looking for a few common texture files...") + for render_name, render in config['renders'].iteritems(): + logging.info("Looking at render %r", render_name) + # find or create the textures object + texopts = util.dict_subset(render, ["texturepath"]) + + tex = textures.Textures(**texopts) + f = tex.find_file("textures/blocks/stone.png", verbose=True) + f = tex.find_file("textures/blocks/tallgrass.png", verbose=True) + f = tex.find_file("textures/blocks/oreDiamond.png", verbose=True) + f = tex.find_file("textures/blocks/wood.png", verbose=True) + return 0 ############################################################ # Final validation steps and creation of the destination directory diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index b352425..33ec396 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -159,7 +159,7 @@ class Textures(object): for packfilename in search_zip_paths: try: pack.getinfo(packfilename) - if verbose: logging.info("Found %s in '%s'", packfilename, nery.find_file_local_path) + if verbose: logging.info("Found %s in '%s'", packfilename, self.find_file_local_path) return pack.open(packfilename) except (KeyError, IOError): pass @@ -220,7 +220,7 @@ class Textures(object): if verbose: logging.info("Found %s in '%s'", filename, path) return open(path, mode) - raise TextureException("Could not find the file `{0}'. Try specifying the 'texturepath' option in your config file. Set it to the directory where I can find {0}. Also see ".format(filename)) + raise TextureException("Could not find the file `{0}'. Try specifying the 'texturepath' option in your config file.\nSet it to the directory where I can find {0}.\nAlso see ".format(filename)) def load_image_texture(self, filename): # Textures may be animated or in a different resolution than 16x16.