From 18eaf8e4fd7947a2c632e12621a28b2326099431 Mon Sep 17 00:00:00 2001 From: Mark Barnes Date: Tue, 20 Sep 2011 21:39:36 +0100 Subject: [PATCH 01/40] Added other blocks to the nospawn_blocks set --- overviewer_core/chunk.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/overviewer_core/chunk.py b/overviewer_core/chunk.py index 3fdaf4a..b8af17a 100644 --- a/overviewer_core/chunk.py +++ b/overviewer_core/chunk.py @@ -141,8 +141,8 @@ solid_blocks = set([1, 2, 3, 4, 5, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 fluid_blocks = set([8,9,10,11]) # This set holds block ids that are not candidates for spawning mobs on -# (glass, half blocks, fluids) -nospawn_blocks = set([20,44]).union(fluid_blocks) +# (glass, slabs, stairs, fluids, ice, pistons, webs,TNT, wheat, cactus, iron bars, glass planes, fences, fence gate, cake, bed, repeaters, trapdoor) +nospawn_blocks = set([20,26, 29, 30, 33, 34, 44, 46, 53, 59, 67, 79, 81, 85, 92, 93, 94, 96, 107, 109, 101, 102]).union(fluid_blocks) class ChunkCorrupt(Exception): pass From c07cfb5d07e4716c2eceef8d3deb56a4590fca8b Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Fri, 30 Sep 2011 19:22:02 -0400 Subject: [PATCH 02/40] docs repo started --- Makefile | 132 +++++++++ building.rst | 3 + conf.py | 216 +++++++++++++++ design/cube_parts.png | Bin 0 -> 16375 bytes design/cube_parts.svg | 299 ++++++++++++++++++++ design/designdoc.rst | 226 +++++++++++++++ design/dirt_side.png | Bin 0 -> 3455 bytes design/dirt_top.png | Bin 0 -> 1907 bytes design/pixelfix.png | Bin 0 -> 5174 bytes design/pixelfix.svg | 206 ++++++++++++++ design/tessellation.png | Bin 0 -> 21740 bytes design/tessellation.svg | 321 ++++++++++++++++++++++ design/texturecubing.png | Bin 0 -> 7748 bytes design/texturecubing.svg | 278 +++++++++++++++++++ design/texturesidesteps.png | Bin 0 -> 10108 bytes design/texturesidesteps.svg | 401 +++++++++++++++++++++++++++ design/texturetopsteps.png | Bin 0 -> 16551 bytes design/texturetopsteps.svg | 531 ++++++++++++++++++++++++++++++++++++ index.rst | 47 ++++ quickstart.rst | 77 ++++++ running.rst | 3 + 21 files changed, 2740 insertions(+) create mode 100644 Makefile create mode 100644 building.rst create mode 100644 conf.py create mode 100644 design/cube_parts.png create mode 100644 design/cube_parts.svg create mode 100644 design/designdoc.rst create mode 100644 design/dirt_side.png create mode 100644 design/dirt_top.png create mode 100644 design/pixelfix.png create mode 100644 design/pixelfix.svg create mode 100644 design/tessellation.png create mode 100644 design/tessellation.svg create mode 100644 design/texturecubing.png create mode 100644 design/texturecubing.svg create mode 100644 design/texturesidesteps.png create mode 100644 design/texturesidesteps.svg create mode 100644 design/texturetopsteps.png create mode 100644 design/texturetopsteps.svg create mode 100644 index.rst create mode 100644 quickstart.rst create mode 100644 running.rst diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e1e0086 --- /dev/null +++ b/Makefile @@ -0,0 +1,132 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest + +default: html + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Overviewer.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Overviewer.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Overviewer" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Overviewer" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + make -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/building.rst b/building.rst new file mode 100644 index 0000000..1cf84f2 --- /dev/null +++ b/building.rst @@ -0,0 +1,3 @@ +=================================== +Building the Overviewer from Source +=================================== diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..794c403 --- /dev/null +++ b/conf.py @@ -0,0 +1,216 @@ +# -*- coding: utf-8 -*- +# +# Overviewer documentation build configuration file, created by +# sphinx-quickstart on Thu Sep 22 10:19:03 2011. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Overviewer' +copyright = u'2011, Andrew Brown and Contributors' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.3.0' +# The full version, including alpha/beta/rc tags. +release = '0.3.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Overviewerdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'Overviewer.tex', u'Overviewer Documentation', + u'Andrew Brown and Contributors', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'overviewer', u'Overviewer Documentation', + [u'Andrew Brown and Contributors'], 1) +] diff --git a/design/cube_parts.png b/design/cube_parts.png new file mode 100644 index 0000000000000000000000000000000000000000..e33c971234ba24267d806d113a8effb91bacd5b7 GIT binary patch literal 16375 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

al;o4h683X4s4FX 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 Mp00i_>zopr0KC%p&j0`b literal 0 HcmV?d00001 diff --git a/design/cube_parts.svg b/design/cube_parts.svg new file mode 100644 index 0000000..698ee28 --- /dev/null +++ b/design/cube_parts.svg @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 + 24 + + + + + + + + + + diff --git a/design/designdoc.rst b/design/designdoc.rst new file mode 100644 index 0000000..32b6840 --- /dev/null +++ b/design/designdoc.rst @@ -0,0 +1,226 @@ +==================== +Design Documentation +==================== +So you'd like a technical overview of how The Overviewer works, huh? You've come +to the right place! + +This document's scope does not cover the details of the code. The code is fairly +well commented and not difficult to understand. Instead, this document is +intended to give an explanation to how the Overviewer was designed and how all +the pieces fit together. Think of this document as commenting on how all the +high level pieces of the code work. + +This document is probably a good read to anyone that wants to get involved in +Overviewer development. + +So let's get started! + +Background Info +=============== +The Overviewer's task is to take Minecraft worlds and render them into a set of tiles that can be displayed with a Google Maps interface. + +A Minecraft world extends indefinitely along the two horizontal axes, and are +exactly 128 units high. Minecraft worlds are made of cubes, where each slot in +the world's grid has a type that determines what it is (grass, stone, ...). +This makes worlds relatively uncomplicated to render, the Overviewer simply +determines what cubes to draw and where. Since everything in Minecraft is +aligned to a strict grid, placement and rendering decisions are completely +deterministic and can be performed in an iterative fashon. + +The coordinate system for Minecraft has three axes. The X and Z axes are the +horizontal axes. They extend indefinitely towards both positive and negative +infinity. (There are practical limits, but no theoretical limits). The Y axis +extends from 0 to 127, which corresponds with the world height limit. Each +block in Minecraft has a coordinate address, e.g. the block at 15,78,-35 refers +to 15 along the X axis, -35 along the Z axis, and 78 units up from bedrock. + +The world is divided up into *chunks*. A chunk is a 16 by 16 area of the world +that extends from bedrock to sky. In other words, a 16,128,16 "chunk" of the +world. Chunks also have an address, but in only 2 dimensions. To find the which +chunk a block is in, simply divide its X and Z coordinates by 16 and take the +floor. + +Minecraft worlds are generated on-the-fly by the chunk. This means not all +chunks will exist. There is no pattern to chunk generation, the game simply +generates them as needed. + +Chunks are stored on-disk in region files. A Minecraft region is a "region" of +32 by 32 chunks. Regions have their own address, and for a particular chunk one +can find its region by dividing its coordinates by 32 and taking the floor. A +region may contain all 1024 of its chunks, or only a subset of them, since not +all chunks may exist. The absence of a region file indicates none of its chunks +exist. + +About the Rendering +=================== + +Minecraft worlds are rendered in an approximated Isometric projection +[#isomorphicref]_, or +what I call the "Sim City projection" [#isomorphicnote]_. In the original design, the projection +acts as if your eye is infinitely far away looking down at the world at a 45 +degree angle in the South-East direction (now, the world can be rendered at any +of the 4 oblique directions). + +.. [#isomorphicref] http://en.wikipedia.org/wiki/Isometric_projection +.. [#isomorphicnote] To be honest, I'm not entirely sure it's technically an isomorphic projection. There are a lot of very similar projections. + +In order to render a Minecraft world, there are a few steps that need to happen. +These steps are explained in detail in the next few sections. + +1. Render each block +2. Render the chunks from the blocks +3. Render the tiles of the map from the chunks +4. Shrink and combine the tiles for the other zoom levels + +Block Rendering +=============== +.. This section shows how each block is pre-rendered + +The first step is rendering the blocks from the textures. Each block is built +and cached in global variables of the :mod:`textures` module. + +Textures come in the size 16 by 16 [#f1]_. In order to render a cube out of +this, I apply an `affine transformation`_ to the texture in order to skew it to +the right shape. + +.. image:: texturecubing.png + :alt: A texture gets rendered into a cube + +.. [#f1] + Textures can come in other sizes and are re-sized so this section applies + just the same. + +.. _affine transformation: http://en.wikipedia.org/wiki/Affine_transformation + +The result is an image of a cube that is 24 by 24 pixels large. This particular +size for the cubes was chosen for an important reason: 24 is divisible by 2 and +by 4. This makes placement much easier. E.g. in order to draw two cubes that are +next to each other in the world, one are drawn exactly 12 pixels over and 6 +pixels down from the other. These kind of placement decisions all happen on +exact pixel boundaries. + +The transformation happens in two stages. First, the texture is transformed for +the top of the cube. Then the texture is transformed for the left side of the +cube, which is mirrored for the right side of the cube. + +Top Transformation +------------------ +The transformation from the top is a simple `affine transformation`_. It is +actually several affine transformations: a re-size, a rotation, and a scaling; +but since multiple affine transformations can be chained together simply by +multiplying the transformation matrices together, only one transformation is +actually done. + +This can be seen in the function :func:`textures.transform_image`. It takes +these steps: + +1. The texture is re-sized to 17 by 17 pixels. This is done because the diagonal + of a square with sides 17 is approximately 24, which is the target size for + the bounding box of the cube image. So when it's rotated, it will be the + correct width. + +2. The image is rotated 45 degrees about its center. + +3. The image is scaled on the vertical axis by a factor of 1/2. + +This produces an image of size 24 by 12 as seen in the following sequence. + +.. image:: texturetopsteps.png + :alt: The 4 steps for transforming a texture square into the top of the cube. + +The final image, shown below, becomes the top of the cube. + +.. image:: dirt_top.png + :alt: Top of dirt + +On the left is the top of the dirt block at actual size after the +transformation, the right is the same but blown up by a factor of 10 with no +interpolation to show the pixels. + +Side Transformation +------------------- +The texture square is transformed for the sides of the cube in +:func:`textures.transform_image_side`. This is another `affine transformation`_, +but this time only two transformations are done: a re-size and a shear. + +1. First the texture is re-sized to 12 by 12 pixels. This is half the width of + 24 so it will have the correct width after the shear. + +2. The 12 by 12 square is sheared by a factor of 1.5 in the Y direction, + producing an image that is bounded by a 12 by 18 pixel square. + +.. image:: texturesidesteps.png + :alt: Texture being sheared for the side of the cube. + +This image is simply flipped along the horizontal axis for the other visible +side of the cube. + +.. image:: dirt_side.png + :alt: The sides of the dirt block + +Again, the left are the two sides of the dirt block at actual size, the right is +scaled with no interpolation by a factor of 10 to show the pixels. + +An Entire Cube +-------------- +These three images, the top and two sides, are pasted into a single 24 by 24 +pixel image to get the cube, as shown. + +However, notice from the middle of the three images in the sequence below that +the images as transformed don't fit together exactly. There is some overlap when +put in the 24 by 24 box in which they must fit. + +.. image:: cube_parts.png + :alt: How the cube parts fit together + +There is one more complication. The cubes don't tessellate perfectly. This +diagram illustrates when a cube is positioned next to another. The lower cubes +are 18 pixels lower and 12 pixels to either side, which is half the width and +3/4 the height respectively. + +.. image:: tessellation.png + :alt: Cubes don't tessellate perfectly + +The solution is to manually touch up those 6 pixels. 3 pixels are added on the +upper left of each cube, 3 on the lower right. Therefore, they all line up +perfectly! + +This is done at the end of :func:`textures._build_block` + +.. image:: pixelfix.png + :alt: The 6 pixels manually added to each cube. + +Chunk Rendering +=============== +.. This goes over the rendering of a chunk + +Tile Rendering +============== +.. Covers the placement of chunk images on a tile + +Reading the Data Files +====================== +.. + Covers how to extract the blocks of each chunk from the region files. Also + covers the nbt file stuff. + +Image Composition +================= +.. + Covers the issues I had with PIL's image composition and why we needed + something fancier. + +Multiprocessing +=============== +.. + Covers how the Overviewer utilizes multiple processors to render faster + +Caching +======= +.. How the overviewer determines what needs to be rendered and what doesn't + +Lighting +======== + +Cave Mode +========= diff --git a/design/dirt_side.png b/design/dirt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..0634307179dd2c64fea40a81818232418e8e1dd3 GIT binary patch literal 3455 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 literal 0 HcmV?d00001 diff --git a/design/dirt_top.png b/design/dirt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..118fc543f9b39541fac6875d4124f12b5814681f GIT binary patch literal 1907 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 literal 0 HcmV?d00001 diff --git a/design/pixelfix.svg b/design/pixelfix.svg new file mode 100644 index 0000000..0d7fd98 --- /dev/null +++ b/design/pixelfix.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/design/tessellation.png b/design/tessellation.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecb2956d4c2a283a795c26e6dc56c2ac148b6ee GIT binary patch literal 21740 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU{v8?V_;yoUKbk9z`(##?Bp53!NI{%!;#X# zz`(#+;1OBOz`&UV!i-6`&-XAeFi4iTMwA5SrEaktG3U+Q$_*)zwemmS@63L8y83HeXlZC^==%#>mK!c$Z4OaYR0)Vy zZgHA)afU&~29cK5wVdrNhaNASF)_78RkA;=X@iq-#S+PzhGMrSO0>9LbxX=@JY%%? zLU!rf{PTaG#h(B3ahAZ9-+%KyZ;DIZ`|4kv(yRV`%RfJ>oVkBbrT@I*{nsP19bH^p zT=aA1|7hJlkL`oq(w~3t|GszM#&-X`3*9q|7h5}knO8|kNoiMDOp`0v znBv2X93WE!&+<-B05R^S{Cn^vx~x{d)&1PMM-Mk^Cq-`-+xLF5{hwExo}OF8U-!j0 zZF|4sBOaJGb_K9OCgw3suEk&3m)|d{+TOo&i=l<(ES03&CTIQXKDEd1eO+7kVe$N% zUz0mJIyzq5Dr9i_yzTYZrF$Q4$vOLKrJJdRsk6P``419c*SX<#ox=Nyzkio6)bWpd zXI8d%|3j5y2}0eu3*Rq{UEh&=oUg1PXQ%GAzemH*tvdhxo_uYu1pA&lxd}UiugiV= zC;$KGeap4)ro?@)V0HpK8pZb)eNHXwd3}}PtJj9twQ(`>9knaZ=;igD&^dPj1S3yYthc0|t{W?^tv6B>(=`jhBO>>rF!E zzqXbCY5dW!r;BTHmNY|DLNK^F(F$ z$7&}Tq-%dhow>y5pCHj{~>k zm%Cl!JN7B+jCG&Rs^DXRbCQIXCq+*?9ej-8gOTdLZ8@hZrto|?^0Tyb{%P5tdYiU( z?MV}5(91g!e4+9E-uH*!S2@gy>z~YX*(L7&?|J=yB2PZC2Bpz%?sNxG%y(quSulW- zrP89E4~29<>2v+(==XJ>H5ryKF;o33#$d3m=typ2azwC3|E2JkW?7$t(itTDo~T~( zoTlve^y#^o%uo9E#8{LBwRkNGeXujj{#c=s`IJ3=3=gD!zJI6fy`S;H^m`wFUB2|~ zV8tr6JVuMp3-8yz@TtttxCgQMm)r6MuCJy^L{=VnpxDm+)8+0o9*0+cb@H#>`|Woz}i%PVUd4-ThUo{h8(`9D-yC9v!4cbJeK&e&Su5SexwS9Z?I$6wx> zv@v_H*rJ;gt{+_Y)$P?|y>(xYzU{MaD}1u@R@Pbf)q4KC?E99li>@t8^?vKVQ0K$i zaOSUh8>E{#&3+|sd^`Q#$Es4*H>^+d**^T^|NGB*`Bgt5K|#U0OK_#ki`eDi*m_r@o}zzPh~5ede8MOW1_!>_Y*#b#ZdT>s;ryuI#L zUbUy?HMP&z*S+ca)dDI6%q7?reqUer{+s2TBd=y%ZA}Y}U4FCZDI+h#7cVx2z>}R@ z(+sY$D{Pm4*L8b-{@GP#423d_*F|4tlf3P(k-x5Op489R6>@*NY%DHbTf^kw-1+sb z$*ScWYSr)M?`y7qeCG3Cey}xMSQCefi_4bxf1jQIH{t3nzOpAC*Yg&4^&WJ|@!l+R zS>gApP%;c&#Jv4If z-mlI3Pj}qQK7uV)UR(WsvH!=#`FdQx)mE;JT|eidT>8|`{fjgvJpClHeydnmWx|w{ zf@7cV+Np1pOMYGb>C4LJmRW~FWm#*YG;d5ymn3BTICfsO}t~ue&5+# z>_Oi)YKd;&e^PXuc9h!b?wQxtr0ukecy0EjF<`Tr`{Q+Ak45N4_OAxT)`3SGRk!+fhiq%L zyI^wQG{4@f*9n~+9UXZldI!PjbkR;ovD?w{tj&7^sQkS@+b3!3+lvcjgso?(NNDz3 z@3?SaA*x2Bq<@-T#7Yk%}Da(T~f zQ~tTDZ0@cERbdvBmMffI*0Y*nOJs8HDG7#oJNKyO%`ZJ=VXkMC+OyVAk~t#0Y2B%1 zJ<(seW|{7kzcs~>A?9Ytz2}n4d$b#mXC^BtDc!n`vxM0fUQzYy%7XoxdGmdYeUg5< zZIk|c@}|=H`BQH-ZK(QlBI$9iTnz>8tz~ebc4ok=7tE#Iajn8XN9J2cx+W5 zYq>tmbK~82$tSli3U$xx-o)do#qZap<7ji3;mNn#ejT^X&CMEP>ej6-yd$aId|{8q z1g+XPdau8_UGD=YoetE>Z_R5R-sr5`KbOx7yInPL-?Ad3iOX5V#l;K$oKW1DYa(+% z_erf?nQPyE)`s2vasu0XR-IzNor9JkOw82q#vPi|NCjV;irZUDH zt>B-JGn)!k{7uy(7y3!>|M+D4it}HOJofLpz5STswqu|EwFUNg#s7P|VDkmn<=XrE zKxNZ!MqIV?t?$PcPrP;Q&8gF^t36wECN3^~y|6z^V?LYe&ZEaX;)<;0mhxx)wYacq z-jr?OPX4jRb5dE2RM(X)(fQ5FaDQsO^R{b?HWcNo+bGs|Y2um<8eBgM7q8q`bIY*E zUafGIUi7ynfw=*FT*; z19G$FcZKH7;A5!#(|DlxVfCq##fcZg{mODDbvN@ccuajQzgjeY?|-*Ak&fV>EcipJq zd(=%Mt}un?e3ofmb*arO`}h0>^-t&A;@?$fHAH{qFg%V+FQP_m%9w z%#DZMeG`a~NR_DsT%Csi@+fq7lmAQKkLp8}nK&G4bg~ww(>^IlFLAOvUEy zU1#q(=^w*`r|wUlZakdXHPzShsCJjJ%f>x1Kh7z4zbcN6c-?(F_PXnf)1KkY z7ei|Gt`|PA`joxr&ZX)8^W&%f4&<%X+4^+pk+T9B+n!#3)h+(CM2F$Txw+!o^-H26 zUYz(HopG&jiK2e_Jqf>!>#q1k?!CD6F}99F>D--c4HK7t{PZ%S_D*A1>>at~mPxu_ zGp&v(Ok3X5TbMAVPUq^Am7WYQ`jtNRt~l5j&LZ(2iSAj_>27<2a||Ox=dZpwZSrQO`|f+y z{44#75*A(co3|?X1tcr5D_oDfc{0K7>f=c3?njk+X6}Y<8~3D@+Q=$>tBg& zRiSaqtR?&}%4>Uf+J@JzOZEn3ysm>0ajS9}ElzEE+I*MolheLqSM*=HZ&r&xePdnt zg;l4o8?`m|8%*$b^uM=QpS%85*PVWiSxKp(aqnzou5O5${Qai9-v#+o*F)yj{FDWk zvuvQg2`J?;!`gRx2X~#@b#|3hef2t(&dgd3|7bop!DFYcta>a_62-f5ZP?mH%X}Q! z7TVNuG4!sIn;oqYy!Du2y6yGKu&mc+tCCiUF&y!7$&V9xm3?DfctGf+buq^Sm(L2X zwQXDzIQ8=KRSWwSrUY*gd$?$kkNSG)pSFw*A0y`dD-T!@5Oi=GoA8(RPji!Qe+}q$ zPyek#^gWI#Nwiz)*W`tb0niM01KYYM_0gsVZV>>f%<$(!H ze=(#a7kl4{i|BUwxA}s++pAeu{cK&rJE4~EVCe?;ex9`%gL=zb-uq6GzQp9PT=D!L zJ(JZhw!Kb@w&!RJn7Qzru+L+c9Ia@(x4%ARhRzdzwdtwOb`GY>XMayU3#eUJ8#Mz z{5+NnJNF?12PN@b^S@9)YTQrjwl-RDeO1&fRe^v7_Xox^*z5Uf?J&X_Tc=_Ln zGfSP5%6cipkM;7h9>#=^-+mu?>#Z7m?Db#4Yt==IA|F&QHFXE|@D~?iOVyw*Ywh|s zY@24E61s7)f-Ci@PLjII(W%onA1ZDLh@1Cj$0Ez1Cmm z4L7D;-g_*tDR9Y=t9kcth3903FmI7ga?-Eznxn_?C1~e+*GUJo>Nh{HT%j@XXx}A! z1`gYuYadyz*zsx8Q;WWh%a#=Kss|tOdRyZCs&}0%xZl3z{m*%IP7>PR`!)!7YfSWS zT3xyzXuAKr-u#3qj2+QM&z@L*;w+k$+A+263EPRDJ(pAe-ts7AF!D9(nIino=&hUU z-RDz%EhkAZgb6>Dlh%BoRloWD&Q}aaiobrh449?0&+)|x<_Vc1i|wZ+w`^x``^2zh z&Ak`5u#O&-&b_+&*O!-1zc$|b_TlE~N8hsccKYpA+;%in{HoJDyR*6rmRwyGe2k$W z)wyrU+f=(vA^Se(+-04%`_qkY@1mbtPh~pb+&?G$wu$?+TRUo3s%~5R^;pDRsqWnK zJx}*BJ6OaCZ#T~pEy?=y>&BtH<6pc$Euf6wpEfl>{59#MVs(6xm zo%WubJ8!k=1Zi$}&+}TV&3Bc7hwCox6IcJmxiHXgRqXKtp?-FgRov#BP~XDJQ>6WV z^W_WvbEhnCdTzCX#cR!aMwt_TC7%B(UYm33Iw#w__E|!TF>0R0JxZ1Hd);DdV~&T$ z9X{Zi_mr{Yxz($LwE^qGSsV5h*-z5x7jPHesLR8|vhUL^>((giRMZwIbJ5(Rp3Cl* zgv>Q!+weU2*u2+^79BCn-0#HTuw3(hRiIhwn+WdfrNvkg(do{(7 zq4}=AWOVkzvr^f?#~2LcPG}}?_LF?x`gDt-prGK}Y?+3b^i=icTU+ECZ08$&v-RKm zdIhK#^0uwU2$bidnq4Bdukw{-cGxTQN;YtcuOz!;gTu^E*Ov7#Dts-sPtAGz&At<) z!!=&6;fz&kj0o%U-p-DWjQGdkks>A3Q3Ftk`fcy#>E>6>bQ4#Fa$n31J-W@}qoMDU zY<~91n#WFkx_REV%J1#*x9#Fb-p+e{AT+6B`Yv9b(kD|^>f082*6Q7#?EkPRd*ZQQ zrF~Mz4PV(UpSW+zk9oWE1h=pMdMqM%-NiGXnIiS#PyZ-6`MV}#p<-VCRqc$cT1nBW zAFjMMH)j{-0TpqexW(E8Tetb1K~Qo<_oUsmVN+*wSi1Qxah>wygpnoVO7pG@(ymFj zor34hV_RSs8S(Mrimc%4hHAo=sb1dSnHoZ7_UU#%)Lj$$J#%ene1F*TmEV$6vvu;$ z8~xN<%^+}8a*@l-PuC8gyRhc;$@qoul|!b9q_{RJP0LO<@|8U74eIkqu`67kS$2v4 zMRpkD0-;m+y@mn)#~$abny1pgh-I;doCwRjntB0-SGzp#uU~X^0=r(|B*kFArn#FK zJx+4&J671U&p-QWT}CZ?19vuaVfD>fSJwu%tX=pgE;~D{@$HUS&zrNZdd^V@&l8ni z&bq1Q`+8;2INzQEtRssc2i^PF9J_VxdY5N?%Q~etS7j{heB5r86g}H70aDmftVSH*_a z`tz4%V;zBdZIyjp+rTSp>a-OsFD{=Hz3;qS@%~%m53yIYKZ(58@G_Wp%5Y=qN>9`9 zdB>J6>*qO}+c}s9lNbK6L8)$_sw) z7!wwT7TF8A-kf#yEn~9{!_E*RhD^=%`8R7_XMN?8GW}V2YgQ=3im)dK50zvuxz=Fl zCfg9g#J})-zbPo^#v^(*^Swa%?f&HFSGTL4nv`(ARIuvPO20|ZZpfU{7OXk%xZsS5 zwEO-?FI@F*bKunQ za0Z7}YfM(K*hzUwh3D1y$X1p%1ct>i{5spS*u-7x>#ycE`Drx=z5^9x>^I=N!8zFgre-NI_sGZ#3XsP3tZQ}BDbZPz9r zaRxnp_eW*-iyxfdAW|-+-m&b|>x)y^!x*kSy?gb5vvYLXn+l0tUh=*BT%x4s_$-#$ zyV0hiDB-G<$L5%|bHSZW)d*08xR{vBz{giOuaz!a>d1K8GiX+`>`%Tqi#3iaObT9Y z^;O{QE}OeAE5wdX{ryPy{=#pM3xenMz3pHALQ^xYak+nGeBAAj`Kyr%QJKvht zJvz<%7$MDs^`d-M^Q$jM8h(4Zf6tci-@pI=v15OEZuUX5Y{jV3pK2TbdNw_D>B~F& zS!S}wKFKw&U!DwcRZ+K)Jm0+D<)BpZm4la^g8TRP76#nO`z-RfbC1g{rVCDacNa9Z zs#bD-ate+&Fb?s%vVA&>_Qk`2O-hr_UyiM0wPJYisVe@C+)}a2A$5YcP37Ot+GKOr zP^0C*-S-twnEqW`dbWM}!u^Y%)m6Oi@7w!o-TFWCw(MW*J^df^huZ&P|G8gegGcNa z)xNF&BVP7dc>jm6k5|4-=c|>vdZ4|qEYAJLn)Vkas~_397xsM&vE!WQBI%>({#b5* zs^{BuyNUi2eAhC@?_A#g_{H_^GHF%j30*QjZ{Ln^&R^huGs~*mw?ype{kDT)S6NZQUHm|k2{?qj5*R6f**-wIRwWhhQW#sM-*}>oO-qK==Sq1x= zzi+PQ*5`hZ|382G-mk}}=+(*muv^->Pi{TDGtP6O^jot0??e1P&2#lPC+pUIKX-V? zoppB`;x2Muym(LI{{IWY1uY_LCT?PB1Pv_S1NBh);%?O}y^(OnUw+^B8~Z({GM?y+ zezLnSE<*m{pIZSr(YK{m1s|K6Ci`~TpO}}oDhsU{uJE0>9@)E$ty0lnvRq1$ul(ur zRr<1_^IyMt+`l4s*11PQ@AiE4+qm}OkqnC>lXvm-kTue|WL@Rk7$g8v~1NSB_j{{^WFH?L(H?&2vw)xPmt z>FGW>ub!Vfw)gM1?el-%est^RnUD#Rl@Ek`pWcXMIAL5V`K3T8In=X7$~Rc#)TC$W zdf%@+FN*e(*-$8OWr|L8_V)Z)i){2dpZ>U)e(g(LMy%W|^`uAaKyl>$Xwvw*6FMM0f4%dG<_J6}-z4@PA8Dts+F7_619r#`Ldx5@fX=Gjn zm&LY<)n&;RfidR`{=Mg4yi0$+f_t3kPVMu3K5Emi{7pOM`8C7HRqx1NCWpkYlYcDN z&tG}IG+X2NheL$|A+KLO4(V%-kZhQv{nCB&x+5~~oNA{Ml)8eyZk^@xG~1lzCQDU0Bt2{LYmMUf2wCx4_e;SXgl91uK##M_tSsbwd`N^@60)6;VI;D zi+B1I&18lZ;-BW0)xRmX-y2yN`%!(G&G|PBX@;=1024)z_PzB>yt_5;@#R;OK|^hC znPnR8Xk7dE&GEtZ^4}YB7JiJlyZsTvlAKc(-t9Adp8kl-l@ht&f9&+Kp6zX%>r||- zKVni1K6YT9zvTC7w4MF55F^W1BDgw+krAzHmJ*v4`yd|C?`x+jUy@{IwLE z_~?-Ahu`meePZ(NstcRL*F7+||ERigZ6x>o?PqHM}GG$)_V-RQg8m7(H&|30_BGIz^o@7nR}ul>L7{l!slpV%E| zJW={YjqU7bMXAughq65dPO`gHeT>Rl|M&%??XN&1iM5Y}@=ZNlwlr@%aOfzP*1j64 zEjBBYD|da~b>vw^`Tgfxp3iI9YMpmz;x@VYWv?FPt`Atxwj%t;zPIKw4R=!J9NP7E z;va9%7p^OId`h+LoSl3<*t+Cwla9N^B>gP*hBBS~)BCpWu>^!+--shF( zHea5!U704$-+J@sv~9-%zjv3*YRc{Ue#3joaoLR5&cfl67kno3Tz1*FQYhhJby4Qk z*h(%bhHKlVXg;1KanJ9p`)alSn*^&5xV$`Waxr{+snn+_g?k?@7CZIZIFI4++c(Eg zpNl`T-R9GaeaeEDY=iNN)=3co(R`7 ze2A&!%@L@2HS4N`;<6i-1%-PAwNXPtASf3?4di;K$_r9-K5(B|75#+&VbZm>4| zzkT4v>#1c%402mG>@TXVa;-in@kg`auHRRgQkmLk9UUFd4*SRc*>C@awI%rH_vpnj zxs^YhI;PwG=z4u~>uk4do1@J0Yh_xu7k@oe-?vX%UiOc2McVUIJ^srj<&KosrX+26 z{OF|HR>Q+{dtSO3UE61%?^}2L^?Q3>haSnfrh<;$DYxT_RP>p(x>J64ub&e-fAwOQ zJ-X%65%1pone%m4@SpYhKmUl!?Mwa|YAw}Uc{%<4{@1zl|9tyh7jP?Gy6VcDZ7i#G z%r@k3Ufa7}Z^ikql0PqrF;oZ~@Lc)uh7+&*)Efu3*0pTiC&M4Hjpg-=NivKQ73bDX zPq_R4YVnUoA**~ z(0zUa48N3rZvEA~z22_w@%sHvH3=fiJC=3+*b#NI{LtI&C+;u5dcfH<;Ihfp_m?$J z3Tj?=x2w$zetX>IW%X8}1yaAPx5>Zo|FCO+-7o$3cKg5GT7A3c;O%?A?*2dQ{%-GA z{iC&6TW_ps&Cq)9EwX&Zkx!F8Zi>p8R&zgd>kD<}iq1N}rB{>IZu(sMOKPoH^Q8Ab zEKZ(US6chO+U`^O@~i4|gb{5Np*7;2&e?mF^{a#awXR^RoTgCDyRW3;V^!JfWkuI- znzo#JFRp2`ZA$>QQhCLR4u6BB7@2`1u=~kZncmI7Kt_823Ce>4T zWu^W3(g(Xf%}LDqTKV?<-v1}^eurD7=JW>sUiej(Van{QkGAsL{(N)Dpz8cOYtEX& zw&MbO7f2>gWBg;&aGc@K#;xBrO5agcQko^q=McxUW-rGB`**(zkNw%Z_x+i(*-{nC z5xak1pV(2h;o3T>plOcCZD;?@bAga`ue=Jp?N$mE-vQQam-FGF6J#;zu7dr zXDSdo@Rs49VS_!>hQywqI}D%Amr8!OuQ66dY0>Kk%VscE>dj4Vw>T-V{L`n|&D>`v z-%65C?wO?(AX24uqiDM#cuA6_uHwc6%Of&IP&T6RA+AA)cNN5 zu}lK5g&5$Anr@q%6wvm5@y*$bJ+}VZt@K{Q`>YRm8Xlj|UB~ca-}8U9CnP?L>?g69S9N#`Mn09@Bl=5;J+xc$3eyUxUc{)Gcott9$D8w)R%-(&! zViFbRpWD&b`1-{Dt$Fs-Cy9gz2}JRJd7KdMnJLwJ?C0U~y0{v}?n6rA`{uXbJ@fbC zeT!$;*2@Tgw+y?qylas|;#0e*?8GVhvo!p!s-BJVx;$IHM&j+-kKs$Vz389O3W&ei<-`9ujS7pFU$1~z_Tc#^ixo1rL{iKFIy$b+5B zmu#EVZ@@4|FMpXhSN7Y;r!*N{O{xWzeNqp?lEy+bFzv5d5Ftk)2Hk;R~PB7ym;XI1B;^SNZmZ% zuhC_hTVGtMX*tDTn!0s|<(2R`S@sTAeU0x={qBAgvi4}+<}$7WnqN6fm#0_sba`*+ z=y=h#`P#gr-=;s>eE#$PFor#h2llgm*kSmLGx^N_oSw?XhHiF;m6aCNK24j+xKMiW zuiE;rOKwbf%DO4$U+BNi!?8BCDgTdszgL^ey*)M{zpA6lXzx3*Y4gPwy?!x!2Is^( zoDX8p|LtBkOLiiEf{ROu^T(F1Q-7NCYu_~0X$Rcg+ukt$?fy42DwbcJx_08P11900 z^1Y|{N>t4=Fi>pclCtZ@BL)UFz?pe%WrozyKK=m=5yM&jO#(~`M=GE&pa9G zd)_jhl+0dR=baB34E0D~Thr()nQV1^q5Ad1t~vTY6&BS#lVVqlfA7ce|H;n!_}Q{Q zlXK4Zz4^w@p`>(6S*AgN;Z9mv{lteS4xQQ_w!c$?S^l>8j(1_@>wi1x`y88*&-y{y ze3!iWN*M<(hkn^#&th$@H+8-Jtz1~v@@;KlcGInj*c|WLO35wH+g99q8f)7>{aM6| z-lH341zvK@Ir{o&q24apa;XmSh4Rstiex*V*)aTETfYCN$Q14O-a&3xEw&vxw!tlW zn{l+t?Se)1?3okOKr8xW9*2pY3@bCwGoAFda*}SD^vSXh-KBS`PhYaX{>|L?$x~nL z^4{1I#e1rM)ryyh_0_*uJuWw~|AQ)*{p{$F2m980C!Al*v~`BV0u!wdXWHxjFEp<5 z&+Cw4Fyw5@Tan6;&sreha9ZN?{54|LCCxQIV)^GZeVSXDn!Li!&pUb*%RDK?*NYu) zPu=hDUUbWXp+kL5{9}#loPCR2eCHR*vg@j*o+|trJnd4Q2B*ihs2y3-3uM>dF0D=d zbSWwNj$GBcTm2WxFA4-%_s3>Fev}=~E*`&4$t>bi*z3P@t<;Y!-6#o*d3TO)ikkB3 zL-xN9f9>m{ZrRQ7xhmqrkbdvyYI$pA(=*j$I-l(luHAVXC|((~}HM^}4;27(JH!@d!;b z>AWgDEpPLxV|TK?uV?t;5p~?~gU!$UZ5v*ljJ>(2AuQJ3P4DR^h9xJAp3M9c)w+-U z`kOb8W2cLK*tEYY)4O^d_v=sJKmY%DzeX$ab#J-o`uYTuqsCuPrSE$@bE@q8?e`5V z{@!E1_jTW5_IYCRzd!XZ{PQ<5Vol!3=3ASha(4duJ~yn}GfQCVoFmz%vOa!0{L8a1 ztlM+iYUT->qC#E^1Y~cNs>;%}n#aC>(VvR=pzhvD5_Kz%FM3{k_q>PnPL}SD7gn3D z@iEkVbNl`{EvcuF;g8j~v=19u9|+%w%lcZFz4lMBksx^e?Uw78oLB#~mjAJNeMj%k zNhP74#(#eD*Kh~@pRMm{fA&M0{m*QlDe-|a$2;~1ZD|u^cwzri@FMT$(&ql{=XY>( zKiK~u|J|H_H*4)qJGy*XbeNIjt!}n_9;5qJ%j90e|NpL^Tlcs5#Q$gMy{j|(-pl## zFL{6L!_(chR!X<(*Cl?qc-Z`0(Hpyi{jk~lT@TAFe{5jb*YTF|xP0?w85b9GQ9g$Z zwL;@;sTtePez;)2b%Xf#UG@wKJo}^%tleF6qw)1caiw3+Y9}}M%Qe^^y?^KFoXs*W zO`f{tkM`G=9sj1pU-0ux^gHXKy62akq%UHLKPT2#xBTGkme``HjBhQCvtK=EzyG!2 z$AQ2p2}@MCL|R?rPF!cWQ`kMnkeA`_#y$K0RdoG}@cX&4)ozv7DgT+>ubH>{db?wvBiCOIF=~VBPoBTUBp=S&Lh+ zUwp?S5#fjLp7if2;hkUgcBgsNjsEu;CeQBgf6lx9!n6cij)dcLuddGQn_u(dqyF7* zcZ773KUCZQ{A>Te`4ZnU&t>-v_Xh88IQndI(rukmPKM`U)sM=qJvG1edRNRlvkg~P zcIP&G_B6_+|M^$`@6~a?)&3sWdvEGpiD&=7-}-EIx@F$2?Co`*)9XF{oLdvlWLlY4 zERmS3Q2*@Q+MKt$_~*So5WH^YY3}YlI^X;^UYMj@&zMl_?e}7JXqq)&o@QqyLqMQX z?CB6@c~R9qn=i2}rzSmUpC5VmYjNegf4Ai0avpwgD!%@E&mK*8!}_Ovq9J1C`{bI} zbotjlaQ@c#`=867q7^K1TBk~9^uCH;Bz5Bb^SJ9tlQOr5UkG)UzZ&rFcgn1!MN5{v zE!C}BxB6df>Mq{D#aGsxJl?+bp2X@?>1%u7+4zGD^?yeqMLe^48ET}Fo69L9x}zde~h zvn_r5Tqh@m=N-$3VB#td)w!!uSfu-pEW4M{wRU06nt57*uNVq47OLi*@9p-9eDm;!sKowHHgiS4 z-Q2xon`~rO_ig>P`~{w!!RE&tynW-dUO!K4=R0w6@4Vy(oYr>=oc_G$|LgL_c>S-? zj}CER-Qm}so``o?fAp+pU+=~_nt@^6lUM$+<#@3*BC|xm?8)_gA)dN+#gYBu*RnPS z@?KnVYP*KUYS-=8D(CgROIhwL68y6^^Qv~nwI_8`t}c4~BECFI*DOm>>eToBVciVr z4jFxauDE7v)GPdXBhBwJRpHd_(w}iscbCac3NG5s16rediybji2%he6L7BXPFT`hr z4kz}S2P*wzco3+{#eYHhCZC>3L55@BE3NJn>rEQVl^Ls4qGvtz2&$}4otP8K5Y@0y zHZJh@Lf1{Hpf$VtIU&wJyi}rdYQFBgwpM0+`;(pZOtaNFm@TiZ)0y=4bAN2W@50pJ z%K5u}MZ99-BUNUH<^K#_e}C%PXOky;*0g{5|L*%Pmb7lJJu6=e9oRK#OSSQpRMihx zZmHbj&eS-5%E;f6_PKKY>RosK z73V{H!me)9RsCgio;ziyOmf_67SM9gZJB~!7#6g)t3~#?Sn~bK<2pa}_97MMB`#~% z`F%;=FP2~R^ ze<^q(N>@)$@4=6W&Pmacx^`u*{rj(GT~ule&Dy9lY2O;LtyU~wqI6E@=&wGyYPtK> ze68m;k29M#3f-Nb!rFGKJStMx?&FWiS@v6^WZVq3YAfxWSGzVCgBC!!xR|)hz~|R6 zq6o1oCGO!%P5b73b51cZ2&>8_Ew;Cee)4m3P_#f;zkFoQ90BV`Cp29cF39^HeY^1e zBC%7Qwt7V~T>L~&cm?rqS~>5_h0KtrY}ty>-!Xt!61Q+5uOzPZzr@lxX@-&J&)x6# zKX19UZPTuG&_%?y>mZAWAC+a_k^R5+>a)7_-V7OvY^&nBcFe=?SZ8vzS$FV9i;P~&x&@)OiseDI zT1Ptn%w%eqIO)P;3Fhk)%d^(HCO%D`P?vJc@9#vP$ufaT^2eR;D}8xlvegDVwZqz6EI`>iAiO)65qQ2DH&h&a+ zJ?Zw$td9<>tAc8cmWplm`TuXu5zS*>S*ek_S*08=w$2a@^G(uO?RxyhXU1F4PjEYx zIQ{&6znItN>3gl!M>jq03hRywXcRy3_d=E+!=5`=*%kgy+HrYf(IWARbDf!Q=1jOH zChe=EbLu%;V7>GEcA=-+Z>(AvH9cOSTPDo%;_1me!B0~(!@8Im__n-$RCc}e3X@)U z%4Su=b&z$_twMXlQ#g~Jy6~&H#+{HqcRSyD;kRU)7u~nFA1icU-MB~NO2vV9n_}|6 zt>T|wDwDBw=l$10418rzqAC|&Q)N(D`KRg*Pif{Ku0xZO6)$d;;(yw4+iP*Jo44h{ zxqJ*y%llRd4k7H}{8I_X;VRbJwxVSZb_dF7DetIN7u>R%5-$fxmEi|njJKc-t6*GPM*XDxG z&%`Cl?AwnowmWus?(q{RyaPpk`fR;n0B$i(KD5Z*S$El~?+Od9C&h_m>H0k?Sr&EW zmB58;!_(YLP9^MEBj)Tc->{-IVkOh5@9SJU?o6!b&|Q6$S@pQ+Rx$0hZ|j-XiZQ|l zt}Gvc*XY4oW=fDwAE-V;UP}IPON9z8?K`>0VHP_3ssX{}IIwcN>P zyMN8_@wPR%b|}y)NbIE9tXD4;qg0|JO&+Y7m~*R|>BYpH)~z36zy)5^-qf4s`@|wA zt@{5Sl;ZVw?PB?6r&TboG*V2|V~h9}7po_lpH|N42`_Gp^7h*)?N${Ouz$Z+p82sx z!y@~vd5)`>sqptHeYKD{I# z@vjv-e%X-iqeG7N>Z7VlLA{{MYb@qHJ<7RK_sgA`SsQ!8y01m)My%ZeDw`HuOFXJu z)hOR3IPdY975AT}ZoQH7dh6P&k5t&zcCT?|_^`#oj3GmQS7`2KrJGFWTh|}yoa(yi zrb;+}Qj|*c)<^FvRid{qbibE5G3VID;?t*PPaMb%GZ&eXovXs+JesasRc@jo&K{R9;Js3{kik7jW#T!#sug zrvx`8u5R)RwkwR1fBE%R{B(8&zle6>6Teq)ui29I>Ey+wYd2QO+|lZE-TznY=RW^t z&z^%3=fux(bFY@!zU4T>?c)`NyWi*ikItuh}EeBqPdG~@IotVto6=COD zY^~d}uO`Q8*`EIl8;Ulnn~Us>$X|E!UvAE{s5cscUmN1OAAgkiJI{tebM;Ycu_@Kj zj_Z$VoVzml$I&oeZr{rJsascERa|g=(d!o;SGsB)#KlE*z zX=R|Z`smVQfm`LHbe|p8Y)gL1ZnKo+q|0Q=$LLX|opsyRecF+?vlmOucD9sF*u1^V zS5@#}_Nm{@4b$Z(URG?oETTQTDCp8>Ri!(XDSZ+_E*L@8TAfQ~v%g5qU39 zx`yYnI4VQ0&(WN!>xdoHBA(sOU-RtwOA?$hs!RX?PyI@){C$|+DJH-)o=TBt?u6A}Y3 z&2F1yqc4G4PLXHCPCnDFW%%N;ZBxd9NadUJb}jnu+?^ubmld)0WMOma#2oeby7nD= zBYz*;zcQ5j>WTw@N2 zxxe%Fb!B_0g97eQWRSx)B!EeRb7(yXj%wi4qGgPPl&> zydHVd;-=GCh10Cw^e;bA^mF&tHDdYJyVkt>JSV8Vb?b?#6906xCoC(fopSZjqqpBz z{=JY@xYzzrm46-Y)+iPW(BQs{i%anlSlbm53wT;jy~~d#GX^}q!C*Tn7qn`6>T%Q5 zi8=G5UavmC)OFL&V+Rb2rrcOFF~^qb@J87+sRKYcm zZCMNYows^yTk6%gG~nOvQ%X0tRLx#?GxYyjM6^IheLk-_y=jHRqP+p@PtCu4wxsEx zirDRCnQc?oF1&Fq_F8gt_s-hn zmCEw$`s;WLHa^+0`scN3P+V3eugN?4@pf{^$1@RqZ@*1q$!HH*U>m#YcN{@cmG zAQA{V7vTQ1g&S_)-#ckjRE~Bj#|zU5X_i7yt7AxS&OX?k^>|rPs5QfyuWpaN-QWx? zd@90G!6$I)q+_3U{91m7DEaN{_xL|GdwkgNQ}I*3hN{qgm+Cj_s+%z!IJNALIkQ-U zjOK+EY#HWHrZnBFSY;QkKlOK<3g?8eSH41jVq*={$Ix|e4@Tw;>2%ehV>VO{uimttogGsutjJ3 z?JeKs8=}lB6OUGT%ZRs5y}j?7Meh96zZbF$eT9}7UwL%(Idi=KYS-6R4eFpt?Si-O zvJ0nK`2^M0r*7Tx=EZzv=CypaTgBFH4e;8yMeKB+b`1p{3 z{4*Ff+?u?Y5wb8os3$*Rim+|?f1A}4b0ViH`aLn%HFrpRGWS~VdbjD*=Dx5k4eayK zy_^?vr8X|mU#9V@%e&pvnbv(W|2=Q@yceSLHjvY zpRchbtga{iQ*wjh?f)uo+v@&&?3H2VW_TQ9`O-V+i+j<cp!JpYNKP-VZ|*Jp)~)Kl^xC3q2KG^gYDo3jnsg)MIiRd z9@F*~x%B7;gKeL-cT!Jr<^0r%Ia34rt%KKpa_2Zd^|xWR%51UuY*Sn|MXo;9KE-uY zW?_zlr%H6D$%CAUIhS{+9ChhT*<5KC4C+9Kt1F6DE(8Z}^`3^%_UAiY7uImZTz3rhZ1FPwdqbr6sm7~&8bQAUd22$PpKe}%G?_8t%_~jc zzonMEC!$s_(-OU=batx7N}*f-)@(gt^mB9Ude)4qPnIkWoT4!A)bZUuod&E8XBYnY z#dIO);=`Zwq&!#e{m-yr>7MD6GqvQ-v(0mzCT@H+DbjvRRL`WC+P9~(3KvF(&i7t@ zbi<>?fm44Q&Nwo|=gIrYo1*3{3(EHx{vMvEV))3VbE|e|%4?G^ljU?Loh_CPnc}fI zQu*c<4f}-m$~UEW{~lQDx@oE_^Es)L*YtP3Zx%Z##>U7LU-{M>R9>H6|7*eX*3kd= zaa5;Or#e?Y-}Q<=b6s*kARBApDt?De`((7Ox`cX^ej4A&4ZE0oLcK2a``!%Ae#VA3 zpQi1&E5W=xhaspaY3ao{=ZJ0}OU6%oSKaz=p*^ARNpir=jgJmR#oxKNg6$ROCgEQk z%sYLn|1&Ct8`VGFBJf_@=mYO2oB1onPXAhXHEE9T)yYpbMO}Hv%lcyLi{HPhB~@oe zF{f^|@Rqge+qZvHl+JIN*a+#4+n@J1EaRE9%}sFIlx7C)f9Hp89SL^q#@gkmv2$=TYM$tjm?#wQ*9;=bi57SDr8Z{gAbA_j9X)sYlwD z<}rKATAoc$E$%qjHizL!b=9TADtetJ!4`di-z|H;OqpN(ZkOwweb=OueLMZ@ zbmv9?t4sJ6?Jf9|5PnB)x#TjhRhKemtuU?rFWY|gdDOcToh6SmyDoUA?3+{T6Bk##T=k#t3eHyMmh)wEo=LcV zO5YgBd11wgyKA$pDbm4m2$p5 z`ElE3wW9tLyJ;7{U0)MkxIufroaZ#78ZYV=S=UdLDat=dHU^ z>MweqCZ_~f{%1^Bs_xD&o&13Nd}suB_sy)23GV;rUCi1T%zts+|Nn3A+UBS{l|BCP z{+V-c-gIBjPZ#Fv6L(Zuq9MxarL@FaLqqe0QsHXrud9s zwX5s9kUMTW7o9j4qS3vu@aXAB7Z((~zkhns5q}2;1_p+Z4pt5Z28M=H8yFZF7#IR1 z#S}ooT8Eif7#J8FQYQsmZ@JE===t_co|(p}iDkRXgdJxcS#|x5slUkW|K4$v9&Nij zX|kzOsnofjB0GJh3Po0mxj)-?@IW5#ge8tQx0L&+1wEOguYb2#&*X1ecae$NcJo&& z#b$lmEbqFKZR1@Tk*iBj{G9dpMtpnK`qaR_DXL|^oeX7GO5D6@>9@V}d;W9V>65Nx z-a3AF)y^qP`ik#(o=6Sq4z;g)$XOsW``R&!u5;U^Ub1G#FQ1xuF*E5`lKO=U+mpBd zaw+sR&G*qR?&Yrb@d$rYJt2?Bc;3}MTeT%$cU`)+sCHlA%Ej~U?|K@S{n!23x7Mm9 zerf%N)$TismLGlXR^4yQ*898c@>G?pb2hCwe9z&o^Y5s?MT;CW?N98!{>SXVI^(wE zfm>8xe)@msc1lcq{R4h}uU~VE=gdC(wC}T>vVHgBiynLH?%xqVmGt6gRbXgm>X6Tv6x43R$;r-0DYrIXXtwhc|x_F?z z|NAD1;}ega>p6RRk&5c%11|(uU60PZeNeM4nRm{~gGJWC&t#ULn4fbb*IK4GXGQC; z3wO+=dZ$kRwl6^S_Vw7^*Zd~2wbt&N;25{UzF?mF@%aa;rly^(dK4zj_sHe$EZd)5 zi(-njZtme+pb}dgcRE7&yX3UP6KBin=U*#(fB#&yo@(a8#Q4`?XO}(+&zsj0la~4D z8SjkN_%hxXL3w~*P#^QfzPj~nXi(o@88>+`&RacaKQP!&)*qu*FUmTEUCIja*A@SeTmw~jZ?0@ zG0eEKS-fJBNcprgZ|}yf+q=$o;oKvgY7=eU+SLAC=exuCDOErJnbwc!g*t8T4xdh1 zZy#c^?f!hHNFLjG{qDjy=^F$6mz{c)UjOsRUjFl+X7)`xf5Y_bLY=x_z6lqfJ~5Db zD)n{FPRBa|b8g0mYji)J^*^zBdSj=W)?EJYA}5sgH?cA>Ff1_Afn<+1?Ac?oMnKnv ztR?!DzxVv--G5*E%G;^W_64X$>lXex^dx+ftLLICEAPzNHc5AS>{IohQ*(qpH*c>Vu9UfTjpA8eVL6PLR9N%$t+twFk5-w3y9-F))o?ZNx=V}Jh;kN>~>+(Uo< zIlq5gFIvU)+;;k+XP>NBY;v;=mX+_pz{VbZoTt#TQe6zylYPe zc{;mxJ-yJa;`-Rd%azC$By@6(c-Y$7}FKG-^0KGS;p`~BfPcYfQy z5r4=1z*gP!-Dlm!A%UmsVlR2FOnEfVI3(uj%~_9TtnB~1$)ZO}%B^gFrAGI{=dV*g z76j~C|MZ<>JoEFYg*twdon1eMMDo4_pT7J2Dh;l$bHA+#5WAgRt@lOOxch#f z!p^5}JDjdgo<6Vc%H7KUbF-g))3$E^RkZtc%$fBmyPxyz-sUsO?)R~I9dn|iFYGif zb6EH8dr9f}d0*zl=DvQ@75o3&`GxUorBEquKBCcZjn*JF`?>zU=tHyKnr8 ztE0-MPWxtY2tozcuMvCv2^)RmK0wSm zcmFesLNTGg2fpX5p15kNW%qsuvGC9JJH8vf*7>9zfl`b|G=R7(c(?^X^wdN~CU7Dz z`+K-vX7|5b6P@$hgJU;*Yt_2B$7-AO^DWX{yY|L}&n;`n)V`V3UH5iX^hvXs9utH4 z1XiT{F1elOJmHU7J2Vx`&VCZUskiOvv^lpfy%M(*V)sj}II#rfamON$Mt-0y0$JJAF>|Fy_ zYZv|NaWLo><+}F4@A0L{{P`Yb>Ln{Ct-bpDlBE-+g$`eZi#M&yQ})=j~uWH&d%v^XxvYf_uf4 zkLPS&%Vop6lV#PHQ=9#BPDrv#pPG6y&PRstkJTmZ+jY6+%QLU1uGcr+`p)Ok`ZwRc zK7IF5z0UssN6F&f-|FIT|Nh1kq(lQtAGXBV)`f+>x-e>pPpRc<*?cCa1&$&}K-rjC6 zFl9;c>#}99Jl9ku?SKF5l*xp-@n=27ev0a#Bn<4O-^`iY6MSD!O`l(oeNXk5@*GDZO(r+ z<2#sAn0}z9;^#{DJB0=1_t)K@wj}KEI>y+SCR;CUJU&0oHgNO1?LIrd7iRRYzP`IQ z_WiB1&QA-L6lL^ZJ?nNi_h!wlEU|epkM{_H4PQZ)Q@u)|8{6%m0}ziSM~m zu2t$B`G!^NfB5t_S?Qj$_4j=}c%}Lb#`>Q)T)%KEQ!Ju&HX% z>NZ`;)0pL>)}^%jz=HYH^KJ*MerR6%h3)9FV#Dtet@GGdmA$$C-sQPbPIgx^!WzzBfR|{rJ9V60`lfb<6z~r^@y^<&cwXf3~m9 z>nH5XP+u&a QrUJ?hp00i_>zopr0G((7)Bpeg literal 0 HcmV?d00001 diff --git a/design/tessellation.svg b/design/tessellation.svg new file mode 100644 index 0000000..b407e16 --- /dev/null +++ b/design/tessellation.svg @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/design/texturecubing.png b/design/texturecubing.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8f8fbccbfe9582035f8d9f226ff599d385a908 GIT binary patch literal 7748 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 + + + + + + + image/svg+xml + + + + + + + + + + + + + + 16 + 16 + 24 + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/design/texturesidesteps.png b/design/texturesidesteps.png new file mode 100644 index 0000000000000000000000000000000000000000..2903b5877911f7d3dc91616b6e1a0fe7b1253768 GIT binary patch literal 10108 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 literal 0 HcmV?d00001 diff --git a/design/texturesidesteps.svg b/design/texturesidesteps.svg new file mode 100644 index 0000000..fdb73f2 --- /dev/null +++ b/design/texturesidesteps.svg @@ -0,0 +1,401 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + 16 + 16 + + + + + + + + + + + + + + + + + + + 18 + + + + + + + + + 12 + + 12 + + + + + + + + + + + + + + + + + 12 + + + + + + + diff --git a/design/texturetopsteps.png b/design/texturetopsteps.png new file mode 100644 index 0000000000000000000000000000000000000000..bb896104f13fb7e54b8eef8cd0806008f12ef35a GIT binary patch literal 16551 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 + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + 16 + 16 + + + + + + + + + + + + + + + + + + + 24 + + + + + + + + + + 24 + + + + + + + + + + + 17 + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + 24 + + + + + + + 12 + + + + + + + + + + + + diff --git a/index.rst b/index.rst new file mode 100644 index 0000000..f6a68d0 --- /dev/null +++ b/index.rst @@ -0,0 +1,47 @@ +======================== +The Minecraft Overviewer +======================== + +Introduction +============ +The Minecraft Overviewer is a command-line tool for rendering high-resolution +maps of Minecraft worlds. It generates a set of static html and image files and +uses the Google Maps API to display a nice interactive map. + +The Overviewer has been in active development for over a year and has many +features, including day and night lighting, cave rendering, mineral overlays, +and many plugins for even more features! It is written mostly in Python with +critical sections in C as an extension module. + +For a simple example of what your renders will look like, head over to `The +"Exmaple" Map `_. For more user-contributed +examples, see `The Example Wiki Page `_. + +Download +======== +The Overviewer works with Linux, Mac, and Windows! We provide Windows and Debian +built executables available for download on our `Github Homepage`_. + +To get your copy, head over to our `Github Homepage`_. If you are familiar with Git, you can clone the repository from there. If you would like a Debian or Windows executable, click on the Downloads link, or go `directly there `_. + +.. _Github Homepage: https://github.com/overviewer/Minecraft-Overviewer + +Documentation +============= + +.. toctree:: + :maxdepth: 2 + + quickstart + building + running + design/designdoc + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/quickstart.rst b/quickstart.rst new file mode 100644 index 0000000..859ff4f --- /dev/null +++ b/quickstart.rst @@ -0,0 +1,77 @@ +================ +Quickstart Guide +================ + +This guide is aimed at new users that want to get started using Minecraft +Overviewer. It is *not* meant to explain everything, but it should help you +generate your first map. + +Getting the Overviewer +====================== + +Head to our `Github Homepage `_. You can either download the Windows package if you're running Windows, install the Debian package if you're running Debian or Ubuntu, or Git-clone the source. Building from source should be as simple as a `python setup.py build` but for more information, see `Building the Overviewer from Source `_. + +Quick-link for Git Source. (Clone this) + git://github.com/overviewer/Minecraft-Overviewer.git + +Rendering your First Map +======================== + +Overviewer is a command-line application, and so it needs to be run from the command line. If you installed Overviewer from a package manager, the command is ``overviewer.py``. If you downloaded it manually, open a terminal window and navigate to wherever you downloaded Overviewer. For pre-compiled Windows builds, the command is ``overviewer.exe``. For other systems, it's ``./overviewer.py``. + +To generate your map, run:: + + overviewer.exe WorldName path\to\output\ # on windows, or + ./overviewer.py WorldName path/to/output/ # on other systems + +where ``WorldName`` is the name of the world you want to render, and +``path/to/output`` is the place where you want to store the rendered world. The +first render can take a while, depending on the size of your world. You can, if +you want to, provide a path to the world you want to render, instead of +providing a world name and having Overviewer auto-discover the world path. + +When the render is done, open up *index.html* using your web-browser of choice. Pretty cool, huh? You can even upload this map to a web server to share with others! Simply upload the entire folder to a web server and point your users to index.html! + +Incremental updates are just as easy, and a lot faster. If you go and change something inside your world, run the command again and Overviewer will automatically rerender only what's needed. + +Running Overviewer on a Server +------------------------------ + +There are special considerations when running Overviewer on a server. For +information on how to do this, see `Running Overviewer on a Server`_. + +.. _Running Overviewer on a Server: https://github.com/overviewer/Minecraft-Overviewer/wiki/Running-Overviewer-on-a-Server + +Extra Features +============== + +Overviewer has a lot of features beyond generating the simple map we started with. Here's information on two of them. + +Render Modes +------------ + +Overviewer supports many different rendermodes. Run `./overviewer.py --list-rendermodes` to get a list. Two of the most popular rendermodes are *lighting* and *night*, which draw shadows for the corresponding time of day. To tell Overviewer what rendermode to use, run + + ./overviewer.py --rendermodes=lighting WorldName output/dir/ + +You can also specify multiple rendermodes at once, and Overviewer will render +them all and let you toggle between them on the generated web page. To get both +*lighting* and *night* on the same page, run:: + + ./overviewer.py --rendermodes=lighting,night WorldName output/dir/ + +Biomes +------ + +Minecraft Overviewer has support for using the biome info from the `Minecraft +Biome Extractor`_. If you run the biome extractor on your world, during the +next run Overviewer will automatically recognize the biome info and use it to +colorize your grass and leaves appropriately. This will only appear on updated +chunks, though; to colorize the entire world you will need to rerender from +scratch by deleting the old render. + +**Note**: as of Minecraft 1.8, you currently need to use a patched Biome +Extractor that can be found `here `_, or `here on GitHub +`_. + +.. _Minecraft Biome Extractor: http://www.minecraftforum.net/viewtopic.php?f=25&t=80902 diff --git a/running.rst b/running.rst new file mode 100644 index 0000000..378f042 --- /dev/null +++ b/running.rst @@ -0,0 +1,3 @@ +====================== +Running the Overviewer +====================== From 499637dd31a1e6e5970ec3c584a42a718308bcf1 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Fri, 30 Sep 2011 20:43:53 -0400 Subject: [PATCH 03/40] touched up the tessellation diagram --- design/tessellation.png | Bin 21740 -> 21140 bytes design/tessellation.svg | 493 +++++++++++++++++++++++----------------- 2 files changed, 286 insertions(+), 207 deletions(-) diff --git a/design/tessellation.png b/design/tessellation.png index 6ecb2956d4c2a283a795c26e6dc56c2ac148b6ee..8c773ea76c54eb51b293488df443b84a5ad1fdb2 100644 GIT binary patch literal 21140 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 KG=O>!uy{T6gY0{dO-v`T0(# zNS(>fR~H3E^8B^_RQK$kLh<|1dC#S+-bOCe*~b5N>jl{~vHC?0o1V{I(Yi`~{hycp z?@q?sZb_5dzi;dMeDmMuCjXq8^ZfkHt*Mhr-d0yDZrZnP#n;Pa4tekRN{WxieVG%R z`}&RM?tgFXllMn$jZwWVxqZ^xgE!(2{QEk8_Op-dVNq2JlKcPuT3Z`?f0OpjFtOS1 z9({W){jJ!uPWATT^l4l6rQQF1`)}j6?{BK>fA01FlXrD~=DlJ~&;8YZ96$f~JImYi z*V)SF_vD*nyl(CIb5A|?J7=S1@zb5^cPk65YfsqB6RA~gwdLpAN&YUgUG9sX1}7xBL4u%|*Vl&&;!W%aE#l^VR9P zx3AV{-&~h>E0<%^{bvHJ*mR;#KD)XR6tpQZU!Gi<_RmH2w$7PSy`?w9S)A)0X>8{#_?8Fv7FFkEnZ3#~dGq?3Rb6u6lv|HiTz|Fq(CT079=Lwi+q_xg z$4;lnnAa`qHgC2#bzJIcT=vy1A!6qFzjI^eO$}R=x}3{yimQJ6q%E5=%w4z5?u=Ub zIaK6pTh_Vj94wn77AElKONP&@-lTnV?uCV3+paxm`#mF0HG1{TjDssBwWCjdJJI_2 zokd#g$!}-3uD|wFy?yK{zuo&?;^$^+!7}F0$I0imX?;+6 zBDCU?w7%W#smA5`r7Ih`P=*Vefa%1 zdHLDLvv)h^zPptl@#OKwO^4!s=xz_z-TtQae$wT2f2J;p-8uE8^!h!26R+?6(88Iz zQQ1B?PV76|%x`>e{w(uc)3*5of9l8c|93p?JN)@WmiOz`-yXMax*>lnpTq0YFG=g* zUW*{*ZSm#COQlYpTmMX@yM~3Efq}sx^+p4zKwH5hEdZjYqLp)L&vYYF_kMh|`JKZa zx0V{4P`hofFP}0~`txgIXnD`(JeMD@X6JslS}&-0r4N#kY>CJ4b zXSQJKgsOpjT>U@Ia=APAw!Yr3y7KClYzKc`-4|CT+5XotNzyg>GflHx=J&TfRlDu4 zyxn)#CZtDQ>)5xLy%%zJ=+0ih@4sg8W!p!og)>C+a_fYyPd!q$%qcRa^i{rd+fNtg zO6VKx?GJerqPak}E~&*i%&#ce(} zb!|%ZmpSp}RKF7?s^0#aaxJv+^E~gD|JHJ`1e}|#Zi}E&1tL@pHnDU)i9D~5Z?&jf6e&E$@aU?g1f6{9uvQ;vM*(>HOH1e zOFHich!~yW+Mc`O>X+GeY>R6S+X&|AzW)1X;zK>_Pw(GHJU3bs{z!`9_u<6fB0XOs;4xa;hpl{YFmZ}d|A)mFA|PC p94$6AXNLO|AqEB+b>b55Gxo+8GNt`yAC*A~!PC{xWt~$(697ZX$p`=d literal 21740 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 QrUJ?hp00i_>zopr0G((7)Bpeg diff --git a/design/tessellation.svg b/design/tessellation.svg index b407e16..2cace2e 100644 --- a/design/tessellation.svg +++ b/design/tessellation.svg @@ -16,9 +16,9 @@ version="1.1" inkscape:version="0.48.1 r9760" sodipodi:docname="tessellation.svg" - inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png" - inkscape:export-xdpi="67.92453" - inkscape:export-ydpi="67.92453"> + inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/tessellation.png" + inkscape:export-xdpi="61.016949" + inkscape:export-ydpi="61.016949"> - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + From ca63acf5aafdbfd83164afea015e343ec6ee1f60 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 00:41:18 -0400 Subject: [PATCH 04/40] integrated quickstart into installation and building pages. Wrote installation stuff. --- building.rst | 147 +++++++++++++++++++++++++++++++++++++++++++++++++ index.rst | 31 +++++++++-- installing.rst | 35 ++++++++++++ quickstart.rst | 77 -------------------------- running.rst | 21 +++++++ 5 files changed, 228 insertions(+), 83 deletions(-) create mode 100644 installing.rst delete mode 100644 quickstart.rst diff --git a/building.rst b/building.rst index 1cf84f2..d0d83ff 100644 --- a/building.rst +++ b/building.rst @@ -1,3 +1,150 @@ =================================== Building the Overviewer from Source =================================== + +These instructions are for building the C extension for Overviewer. Also note +that pre-built Windows and Debian executables are available in the `Downloads +`_ section. These +kits already contain the compiled extension and require no further setup (so you +can skip to the `Running `_ section of the docs). + +Get The Source +============== +First step: download the source! Either clone with Git or download the most recent snapshot + +* URL to clone: ``git://github.com/overviewer/Minecraft-Overviewer.git`` +* `Download most recent tar archive `_ + +* `Download most recent zip archive `_ + +Build Instructions For Various Operating Systems +================================================ + +.. contents:: + :local: + +Windows Build Instructions +-------------------------- + +First, you'll need a compiler. You can either use Visual Studio, or +cygwin/mingw. The free `Visual Studio Express +`_ is okay. You will want the C++ +version (Microsoft® Visual C++® 2010 Express) + +Building with Visual Studio +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Get the latest source code as per above +2. From the Start menu, navigate to the 'Microsoft Visual Studio 2010 Express' and open the 'Visual Studio Command Prompt (2010)' shortcut. +3. cd to the folder containing the Overviewer source code +4. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory +5. First try a build:: + + c:\python26\python setup.py build + +If you encounter the following errors:: + + error: Unable to find vcvarsall.bat + +then try the following:: + + set DISTUTILS_USE_SDK=1 + set MSSdk=1 + c:\python26\python setup.py build + +If the build was successful, there should be a c_overviewer.pyd file in your current working directory. + +Building with mingw +~~~~~~~~~~~~~~~~~~~ + +1. Open a MinGW shell +2. cd to the Overviewer directory +3. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory +4. Build:: + + python setup.py build --compiler=mingw32 + + +Linux +----- + +You will need the gcc compiler and a working build environment. On Ubuntu and +Debian, this can be done by installing the ``build-essential`` package. *For +CentOS machines, see the `CentOS`_ section below* + +You will need the following packages (at least): + +* python-imaging (for PIL) +* python-dev +* python-numpy + +Then to build:: + + python setup.py build + +OSX +--- + +1. Download the source code for PIL from http://www.pythonware.com/products/pil/ +2. Compile the PIL code (``python ./setup.py build``) +3. Install PIL (``sudo python ./setup.py install``) +4. Find the path to libImaging in the PIL source tree +5. Build Minecraft Overviewer with the path from step 3 as the value for C_INCLUDE_PATH:: + + C_INCLUDE_PATH="path from step 3" python ./setup.py build + +The following script (copied into your MCO source directory) should handle everything for you: + +.. code-block:: bash + + #!/bin/bash + + # start with a clean place to work + python ./setup.py clean + + # get PIL + if [ ! -d "`pwd`/Imaging-1.1.7/libImaging" ]; then + /usr/bin/curl -o imaging.tgz http://effbot.org/media/downloads/Imaging-1.1.7.tar.gz + tar xzf imaging.tgz + rm imaging.tgz + fi + + # build MCO + C_INCLUDE_PATH="`pwd`/Imaging-1.1.7/libImaging" python ./setup.py build + +CentOS +------ +Since CentOS has an older version of Python (2.4), there are some difficulties +in getting the Overviewer to work. Follow these steps which have been reported +to work. + +Note: commands prefixed with a "#" mean to run as root, and "$" mean to run as a +regular user. + +1. Install the `EPEL repo `_. Go to step #2 if you already have the EPEL repo installed. + + 1. ``$ wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm`` + 2. ``# rpm -Uhv epel-release-5-4.noarch.rpm`` + +2. Install the python26 packages and build dependancies + + 1. ``# yum groupinstall -y 'Development Tools'`` + 2. ``# yum install -y python26{,-imaging,-numpy}{,-devel}`` + +3. Install and setup Overviewer + + 1. ``$ git clone git://github.com/overviewer/Minecraft-Overviewer.git`` + 2. ``$ cd Minecraft-Overviewer`` + 3. ``$ python26 setup.py build`` + 4. Change the first line of overviewer.py from ``#!/usr/bin/env python`` to ``#!/usr/bin/env python26`` so that the Python 2.6 interpreter is used instead of the default 2.4 + +4. Run Overviewer as usual + + 1. ``$ ./overviewer.py path/to/world/ path/to/output/`` or ``$ python26 path/to/overviewer.py path/to/world/ path/to/output/`` + 2. Proceed to the `Running `_ instructions for more info. + + +Installing the Compiled Code +---------------------------- +You can run the ``overviewer.py`` script from the build directory just fine. If +you'd like to install, run ``python setup.py install`` diff --git a/index.rst b/index.rst index f6a68d0..3653e77 100644 --- a/index.rst +++ b/index.rst @@ -19,21 +19,40 @@ examples, see `The Example Wiki Page `_. +The Overviewer works with Linux, Mac, and Windows! We provide Windows and Debian +built executables for your convenience. Find them as well as the full sources on +our `Github Homepage`_. + +**If you are running Windows, Debian, or Ubuntu and would like the pre-built +packages and don't want to have to compile anything yourself**, head to the +`Installation `_ page. + +**If you would like to build the Overviewer from source yourself (it's not that +bad)**, head to the `Building `_ page. .. _Github Homepage: https://github.com/overviewer/Minecraft-Overviewer -Documentation -============= +Help +==== +**IF YOU NEED HELP COMPILING OR RUNNING THE OVERVIEWER** feel free to pop in +IRC: #overviewer on freenode. Not familiar with IRC? `Use the web client +`_. There's usually someone on +there that can help you out. + +If you think you've found a bug or other issue, file an issue on our `Issue +Tracker `_. Filing or +commenting on an issue sends a notice to our IRC channel, so the response time +is often very good! + +Documentation Contents +====================== .. toctree:: :maxdepth: 2 - quickstart building + installing running design/designdoc diff --git a/installing.rst b/installing.rst new file mode 100644 index 0000000..edc96fd --- /dev/null +++ b/installing.rst @@ -0,0 +1,35 @@ +========== +Installing +========== + +This page is for installing the pre-compiled binary versions of the Overviewer. +If you have built the Overviewer from source yourself, head back to `Building +`_. + + +Windows +======= +Running Windows and don't want to compile the Overviewer? You've come to the +right place! + +1. Head to the `Downloads `_ page and download the most recent Windows download for your architecture (32 or 64 bit). + +2. For 32 bit you may need to install the `VC++ 2008 `_ and `VC++ 2010 `_ redistributables. + + For 64 bit, you'll want these instead: `VC++ 2008 `_ and `VC++ 2010 `_ + +3. That's it! Proceed with instructions on `Running `_ the + Overviewer. + +Debian / Ubuntu +=============== +We provide an APT repository with pre-built Overviewer packages for Debian and +Ubuntu users. To do this, add the following line to your +``/etc/apt/sources.list`` + +:: + + deb http://overviewer.org/debian ./ + +Then run ``apt-get update`` and ``apt-get install minecraft-overviewer`` and +you're all set! See you at the `Running the Overviewer `_ page! diff --git a/quickstart.rst b/quickstart.rst deleted file mode 100644 index 859ff4f..0000000 --- a/quickstart.rst +++ /dev/null @@ -1,77 +0,0 @@ -================ -Quickstart Guide -================ - -This guide is aimed at new users that want to get started using Minecraft -Overviewer. It is *not* meant to explain everything, but it should help you -generate your first map. - -Getting the Overviewer -====================== - -Head to our `Github Homepage `_. You can either download the Windows package if you're running Windows, install the Debian package if you're running Debian or Ubuntu, or Git-clone the source. Building from source should be as simple as a `python setup.py build` but for more information, see `Building the Overviewer from Source `_. - -Quick-link for Git Source. (Clone this) - git://github.com/overviewer/Minecraft-Overviewer.git - -Rendering your First Map -======================== - -Overviewer is a command-line application, and so it needs to be run from the command line. If you installed Overviewer from a package manager, the command is ``overviewer.py``. If you downloaded it manually, open a terminal window and navigate to wherever you downloaded Overviewer. For pre-compiled Windows builds, the command is ``overviewer.exe``. For other systems, it's ``./overviewer.py``. - -To generate your map, run:: - - overviewer.exe WorldName path\to\output\ # on windows, or - ./overviewer.py WorldName path/to/output/ # on other systems - -where ``WorldName`` is the name of the world you want to render, and -``path/to/output`` is the place where you want to store the rendered world. The -first render can take a while, depending on the size of your world. You can, if -you want to, provide a path to the world you want to render, instead of -providing a world name and having Overviewer auto-discover the world path. - -When the render is done, open up *index.html* using your web-browser of choice. Pretty cool, huh? You can even upload this map to a web server to share with others! Simply upload the entire folder to a web server and point your users to index.html! - -Incremental updates are just as easy, and a lot faster. If you go and change something inside your world, run the command again and Overviewer will automatically rerender only what's needed. - -Running Overviewer on a Server ------------------------------- - -There are special considerations when running Overviewer on a server. For -information on how to do this, see `Running Overviewer on a Server`_. - -.. _Running Overviewer on a Server: https://github.com/overviewer/Minecraft-Overviewer/wiki/Running-Overviewer-on-a-Server - -Extra Features -============== - -Overviewer has a lot of features beyond generating the simple map we started with. Here's information on two of them. - -Render Modes ------------- - -Overviewer supports many different rendermodes. Run `./overviewer.py --list-rendermodes` to get a list. Two of the most popular rendermodes are *lighting* and *night*, which draw shadows for the corresponding time of day. To tell Overviewer what rendermode to use, run - - ./overviewer.py --rendermodes=lighting WorldName output/dir/ - -You can also specify multiple rendermodes at once, and Overviewer will render -them all and let you toggle between them on the generated web page. To get both -*lighting* and *night* on the same page, run:: - - ./overviewer.py --rendermodes=lighting,night WorldName output/dir/ - -Biomes ------- - -Minecraft Overviewer has support for using the biome info from the `Minecraft -Biome Extractor`_. If you run the biome extractor on your world, during the -next run Overviewer will automatically recognize the biome info and use it to -colorize your grass and leaves appropriately. This will only appear on updated -chunks, though; to colorize the entire world you will need to rerender from -scratch by deleting the old render. - -**Note**: as of Minecraft 1.8, you currently need to use a patched Biome -Extractor that can be found `here `_, or `here on GitHub -`_. - -.. _Minecraft Biome Extractor: http://www.minecraftforum.net/viewtopic.php?f=25&t=80902 diff --git a/running.rst b/running.rst index 378f042..70a400f 100644 --- a/running.rst +++ b/running.rst @@ -1,3 +1,24 @@ ====================== Running the Overviewer ====================== + +Rendering your First Map +======================== + +Overviewer is a command-line application, and so it needs to be run from the command line. If you installed Overviewer from a package manager, the command is ``overviewer.py``. If you downloaded it manually, open a terminal window and navigate to wherever you downloaded Overviewer. For pre-compiled Windows builds, the command is ``overviewer.exe``. For other systems, it's ``./overviewer.py``. + +To generate your map, run:: + + overviewer.exe WorldName path\to\output\ # on windows, or + ./overviewer.py WorldName path/to/output/ # on other systems + +where ``WorldName`` is the name of the world you want to render, and +``path/to/output`` is the place where you want to store the rendered world. The +first render can take a while, depending on the size of your world. You can, if +you want to, provide a path to the world you want to render, instead of +providing a world name and having Overviewer auto-discover the world path. + +When the render is done, open up *index.html* using your web-browser of choice. Pretty cool, huh? You can even upload this map to a web server to share with others! Simply upload the entire folder to a web server and point your users to index.html! + +Incremental updates are just as easy, and a lot faster. If you go and change something inside your world, run the command again and Overviewer will automatically rerender only what's needed. + From 061db039c1f4437a3c77ca45eb09bc1716ecddb5 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 01:02:13 -0400 Subject: [PATCH 05/40] touch-up to the wording and figures in design doc --- design/cube_parts.png | Bin 16375 -> 17193 bytes design/cube_parts.svg | 95 ++++++++++++++++++++++++++++-------------- design/designdoc.rst | 69 +++++++++++++++--------------- 3 files changed, 99 insertions(+), 65 deletions(-) diff --git a/design/cube_parts.png b/design/cube_parts.png index e33c971234ba24267d806d113a8effb91bacd5b7..19e4ef414fb14fb383d82936fe2caf4b7c3290b5 100644 GIT binary patch literal 17193 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 literal 16375 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

al;o4h683X4s4FX zXC3A_i)8Iw``Y4!gx(I`a_-~XCVY(fxozqlb%qtk+E`RL3}Yug?|jy}GfMJ&W3J|t znw|0NJjIu7&Nru5_|$IuGehXS+ZtZZ4sG?SsO|qeRuwiaQ=I6t>?zBU?=}_d{><=s zzgxw#=lyNgA|-~OXD_nB2k_u)Q7qnOo$@iwoVKawYtFK$9R?f%Qf(WJ_QjZIXnqa| zjSrNoy1b3mqUh~|m@LI+1EJTlx|e@wMwKo-y*6yq#VPF`rF;7{roGmf9=%q@_Hxpi z!)()@?R2*)cgbT~`ozLud$D(5=98&^W{CJa7rS0jSIDC-el1a0P&e0a_bj7g-6clX zoTu?_E#MSM%Kf3Be?s2JYwJIcD(+A1^VTwOe`@_0lci{TT=2E5ukZ$YA+Yv-JP?Tddw=yO%A=M{c|b5nbH2GdK9@E{WM|t{7%^h;NePiu`FR7jsqpn9;oCIp599 zf<==bUtU;v?@iDVLELMlWrB587*cq=4Zc08Nw!^*Y5R3%6m#fdqqX++8Pg@SMK^1R zKKX5W^~PE)(G9Eg^^ZLd;+D+r4Omg$<13xU&@nmX=2fqCFZDY%&Z}Xw-Pt3NzV^wd z?XbW*CmT3P;bM`@jN3bx<}c`2_-~O!eZg@?L$TwWiz4E@zL&RsXMeq+vtycBAJ&yt zE-qV=zDSdpsv0x_j`r!UnARPX%dq2`7amGJip__uTNK+ zYmS*ttDhD3-%UXBzWuUI$>%pFMt=IM=L%j+o^f=7-mJ!JN3)eXj{FEYYVv+#N8Dl7 z70*wI&$#N=;pKdfJ!O94yIId~9kbkC{d`8l483Q+TYpwe{>c_&F7%k;0>@Jqg|6hs zGKQCvKixj_xl8HiSKVjE8WPWziy6s%lC*R@nf63wp<$%qzIq?f+~I@Wr(aK+ii2X=Ppd!I_dO%SZ31F?7YLW&9uJs#^tGOLWhMOzdfhB?D?k| z2jvWpfz$O_!>dkA&-i~SbY0|m8nr9A{mIrFpC!c;pL7>qc6C^K&Ee(+{b1dcrE&>1 zyVO9bV&?fO4KDevW&EZKrcTh^9(7Xj@I3Z)$%h3enKo>lq@y!uqM z!?~8#Fl=S}jFqQPKb6}ZHLpI+QtH&S-%r=vQ#w}lm!o-J%sB~(Q#y@do{N_Rtxhh= zit2gZ5_H1L)qFlPhEp*~KOH@r*1*Mu}`iZb^PtXWQ8; z#n$P+Uu>>_T~_P%26vBz4C?y#-``ra$LCqe)<(_4Mze}nw)QNRNlNtnqhV%$K5>f9 z?kLaTxld9|4ea8sdFj=6Z{(AXnDtz4C7*SXuuA8=?Zw^#M>%+^XRk5cB71tefXUO$ zj#HDS^QX(230}N(3{O_y!4KL2uvX&zk30NRMRtEXCC>kQ@6PNcKb9r`I(qxAZP-EK z#i@pNW_Fs#esxuT5i3rzk*Rg+iEL(l()DSNMP}YB#pr9_IyQQ3;+pC*&v@(S?flFB z)hycIl=k59ff+XPuYUxe7f5DZ-PxpiK6dx-je&+~x4A6i=dBifH)X!Jh*1IW=RbTs zzKC$bgHB+S+3ufOjj#4>N+`se+>&~9tpZ+1WVjKDqKkV_DiI{Tq+Bae6d$Jv7XX+8^1ob@kLc zg$Fjw+sC?NTTP?jbsq8TFt%y>_VWHcr*gMGbpfR z^7lI%y7nfmiOEh{b=WEgw9Y|H4zop2AQ=bR+%s*WpY*Z73deg#!!+-G@J_lNkaV?DU6sH`J$}*0$$AJ^gm|&MzmU{M6bu=^FAeI0ozS%4UZd z-ZGgIDJ2)YRPKPu!*gF^*c=;nJ>1DNm3!*s_~SK7=X3iO7qHAduPFU;!`($k!O4l^ zz}4&jD_CUX-o#cP#j(3Bv%Hum2sYU|Lx@O$zQ%@ ze))E?I;-Ml&8zdV_6@1-Niqzx+E`MmRyDoUv^3Ou#`~G!HDgv=%DFEwX3VV4{~Ax| zIz8=5vbjIyxxCxiU%BglDmRBzeH{9L@dykq0NeRf~Io%D7-R2CrN5g&ZNY}@I# z3>NeBx3M;S>ah{oS)H}(@xoJog+*oNOqqTt$LxvXC8MMx3vJG1@}4?fo%Yyh)5JYC z1)HrlzcsyHn;&7*Fm3DV_5VK_G(7aX6$c8C@aGD8@^%kTzxPhaoL9Z1*!_vxhBcj) z*4ux~<32yt-p%K{``)v~mUgQ3_F}tSBbq-YOXa*11b0_;ZSa(ahf^y$J32a^y?7;E zXVt^^d|mB_v+JeY%#_c?TCa4UXDsO=#zvu3MPW-WY?u6;id57GYi=x?Y zd|UW>pOKE7Lwhgg#)@aVS+ZwKTzodyQrBLe&-K|`2Fv)ke^<9X-2>XH!1AeY;W}k| zRY~>}w?7#?4>3OAqg%VesOxDNgMgc0n${=2S+m)AcXwJjoW1bgP2v5onICg1=G`gV z5FU3Z{HENL$DM^|9)5Lix4tNp*!O@3+k%1@1C7>mp2)FHaku;NEWA^kQSyFUzQmrDCQtZ( zUSnStb3S8L>zNx|mC^g&o-{b%WBIq)t`FomSHrYZp@#G1C;blHJoV$Fr7_dLfBF!^ z-S=?OO8xg;8_Tv%l24thqT8@K|Hn&?X9W{?ik!E-v{U(;kcy{K{_|-HT^D$s9)EJ< zleomZ_Xmof&(q{K(6be-)=I98}&X!=A7wRwMPz^p}R38Y<5+mp%G(W!vUp%l0=bAob;z zhJW97<@YQ&+&w6oQ=4C8L3KsG^NFI`M$l0NF-zdcAZ{;0%rTLj%g$y%RnDleIfSyQ#L)Y+;-#Iwx_$V zdMREhs<|A%?{_o6tM_i)4ZUs54GZt-=-Cy|l`!WE)k=M{{pClkR7InlK#(0Jf2;&_ zUA;fvQJ!n^SjeZ~UH8i30`8-~RvTE8bmveUZh%#*M%qLPWy%%T5>Rs^od2>hKiKaQ#HRiRNcMSR_W`OFd zv=wfLH1_%09LQO6xXi_6%MsnvEGgUMHYxxAv8?-OcY}ssz{=C|*9sR2a$lFo6`l~W z_!7s_9WU!-k2_r}nD}91{$10YJ;h2^T4Jy6Jl^?o`KJrM6Ee=+-l;mfFu(eL?{@xf zb^$@br3n~~yIHBw&3Wxd4a(2nDacthE6U0$bfq#!ZjW#1(QVU~TJ4LE`UUA;t_`UF zdvkWXb?)zN)9uY|88xp9wnX+w2~F^?nf*C9+z2y0BywIeE{&NSk;@_;^7`PlEfEq& zk8L|^khWIk;;FJLuQw>0JI+!0T$v}CS6>4rdpN* zw;A8OU+~tV;dNhLIUhe{%jP0cx9nKg2JUi&5OzIy$Z zACNi8MIl}*c^dQ=POV94P0nNdFirVR>c3=$b#wlH7hzCS(B^=6XHp8|o}_R0?b$zY zGw?4AJ@&tbVLj^yA%^>*UbgPpv3cdqUMssVdf72C+^Z>>C1ws?B<baUV16YpLxd} zf&HGEUv(MQvlQG*yz|7JA%~?vv_f`QQX#mR(DCfi_RaPA2C_@0>|!_&&2WeD!R60) zHKX>-s1y~!rX`>`xb4zchPb8^K<`d_m?yTX>mXJ%%H?jzi_MHl%V#~ z$6hPTo35`BO1`u`;^R>jC8b4El~@YiJC!F1W?MJ@c{wF$`65$ES%$gL6sv*_BRz<_fU}s|NFowUd|2FPQR)@sBnG z>x15?*Ja^pEdJ=-HdPM{+-Ri07;1#6N9{RowE-gWH~T3>h*dlK6~l4*=OY# zzAs%mLeJ(tlXr_DS-^2)pzPW$P z`yX0FsX_Al#EWm@WaOQ+e^z`>>%!CA$i_+37 z|G6K$Py1gz_1dp^zU6bT?drS66?y6HIh)EA_w2XFT?#q`iRK{Cq|=WhZ|b!f;ucS- z>Mf{Pw6(6Vyvog65)vwte)#_^XFR~#mi*P`d+Rh#$R=}@N|^)Qe4lS9`#S7ndl0wf zo6thh7H~EeTzV<$Iz!Ky%en8_HdNc?%@#AybMXL=3?VjWKl{)AXYsvv-AV#V3=9km Mp00i_>zopr0KC%p&j0`b diff --git a/design/cube_parts.svg b/design/cube_parts.svg index 698ee28..81749b7 100644 --- a/design/cube_parts.svg +++ b/design/cube_parts.svg @@ -17,8 +17,8 @@ inkscape:version="0.48.1 r9760" sodipodi:docname="cube_parts.svg" inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png" - inkscape:export-xdpi="67.92453" - inkscape:export-ydpi="67.92453"> + inkscape:export-xdpi="63.639942" + inkscape:export-ydpi="63.639942"> + id="g4606" + transform="translate(0,20.000003)"> + id="g4614" + transform="translate(-5,2.6171874e-6)"> 24 + x="990" + y="677.36218">24 24 + x="1150" + y="537.36218">24 + 25 + + + + diff --git a/design/designdoc.rst b/design/designdoc.rst index 32b6840..17eac0f 100644 --- a/design/designdoc.rst +++ b/design/designdoc.rst @@ -6,9 +6,9 @@ to the right place! This document's scope does not cover the details of the code. The code is fairly well commented and not difficult to understand. Instead, this document is -intended to give an explanation to how the Overviewer was designed and how all -the pieces fit together. Think of this document as commenting on how all the -high level pieces of the code work. +intended to give an explanation to how the Overviewer was designed, why certain +decisions were made, and how all the pieces fit together. Think of this document +as commenting on how all the high level pieces of the code work. This document is probably a good read to anyone that wants to get involved in Overviewer development. @@ -54,15 +54,14 @@ exist. About the Rendering =================== -Minecraft worlds are rendered in an approximated Isometric projection -[#isomorphicref]_, or -what I call the "Sim City projection" [#isomorphicnote]_. In the original design, the projection -acts as if your eye is infinitely far away looking down at the world at a 45 -degree angle in the South-East direction (now, the world can be rendered at any -of the 4 oblique directions). +Minecraft worlds are rendered in an approximated Isometric projection at an +oblique angle. In the original design, the projection acts as if your eye is +infinitely far away looking down at the world at a 45 degree angle in the +South-East direction (now, the world can be rendered at any of the 4 oblique +directions). -.. [#isomorphicref] http://en.wikipedia.org/wiki/Isometric_projection -.. [#isomorphicnote] To be honest, I'm not entirely sure it's technically an isomorphic projection. There are a lot of very similar projections. +.. image:: screenshot.png + :alt: A screenshot of Overviewer output In order to render a Minecraft world, there are a few steps that need to happen. These steps are explained in detail in the next few sections. @@ -76,28 +75,27 @@ Block Rendering =============== .. This section shows how each block is pre-rendered -The first step is rendering the blocks from the textures. Each block is built -and cached in global variables of the :mod:`textures` module. +The first step is rendering the blocks from the textures. Each block is "built" +from its textures into an image of a cube and cached in global variables of the +:mod:`textures` module. -Textures come in the size 16 by 16 [#f1]_. In order to render a cube out of -this, I apply an `affine transformation`_ to the texture in order to skew it to -the right shape. +Textures come in the size 16 by 16 (higher resolution textures are resized and +the process remains the same). In order to render a cube out of this, an `affine +transformation`_ is applied to the texture in order to transform it to the top, +left, and right faces of the cube. .. image:: texturecubing.png :alt: A texture gets rendered into a cube -.. [#f1] - Textures can come in other sizes and are re-sized so this section applies - just the same. - .. _affine transformation: http://en.wikipedia.org/wiki/Affine_transformation -The result is an image of a cube that is 24 by 24 pixels large. This particular -size for the cubes was chosen for an important reason: 24 is divisible by 2 and -by 4. This makes placement much easier. E.g. in order to draw two cubes that are -next to each other in the world, one are drawn exactly 12 pixels over and 6 -pixels down from the other. These kind of placement decisions all happen on -exact pixel boundaries. +The result is an image of a cube that is 24 by 24 pixels in size. This +particular size for the cubes was chosen for an important reason: 24 is +divisible by 2 and by 4. This makes placement much easier. E.g. in order to draw +two cubes that are next to each other in the world, one is drawn exactly 12 +pixels over and 6 pixels down from the other. All placements of the cubes happen +on exact pixel boundaries and no further resolution is lost beyond the initial +transformations. The transformation happens in two stages. First, the texture is transformed for the top of the cube. Then the texture is transformed for the left side of the @@ -105,11 +103,12 @@ cube, which is mirrored for the right side of the cube. Top Transformation ------------------ -The transformation from the top is a simple `affine transformation`_. It is -actually several affine transformations: a re-size, a rotation, and a scaling; -but since multiple affine transformations can be chained together simply by -multiplying the transformation matrices together, only one transformation is -actually done. + +The transformation for the top face of the cube is a simple `affine +transformation`_ from the original square texture. It is actually several affine +transformations: a re-size, a rotation, and a scaling; but since multiple affine +transformations can be chained together simply by multiplying the transformation +matrices together, only one transformation is actually done. This can be seen in the function :func:`textures.transform_image`. It takes these steps: @@ -139,9 +138,11 @@ interpolation to show the pixels. Side Transformation ------------------- -The texture square is transformed for the sides of the cube in -:func:`textures.transform_image_side`. This is another `affine transformation`_, -but this time only two transformations are done: a re-size and a shear. + +The texture square is transformed for the sides of the cube in the +:func:`textures.transform_image_side` function. This is another `affine +transformation`_, but this time only two transformations are done: a re-size and +a shear. 1. First the texture is re-sized to 12 by 12 pixels. This is half the width of 24 so it will have the correct width after the shear. From a6035a15c3c98d18fa3886661ea5bc2d965faaf9 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 15:58:31 -0400 Subject: [PATCH 06/40] finished up the essential documentation --- building.rst | 2 + design/designdoc.rst | 5 + design/screenshot.png | Bin 0 -> 117229 bytes faq.rst | 22 +++ index.rst | 2 + options.rst | 340 ++++++++++++++++++++++++++++++++++++++++++ running.rst | 133 +++++++++++++++-- 7 files changed, 493 insertions(+), 11 deletions(-) create mode 100644 design/screenshot.png create mode 100644 faq.rst create mode 100644 options.rst diff --git a/building.rst b/building.rst index d0d83ff..c5c1790 100644 --- a/building.rst +++ b/building.rst @@ -112,6 +112,8 @@ The following script (copied into your MCO source directory) should handle every # build MCO C_INCLUDE_PATH="`pwd`/Imaging-1.1.7/libImaging" python ./setup.py build +.. _centos: + CentOS ------ Since CentOS has an older version of Python (2.4), there are some difficulties diff --git a/design/designdoc.rst b/design/designdoc.rst index 17eac0f..d94391e 100644 --- a/design/designdoc.rst +++ b/design/designdoc.rst @@ -15,6 +15,8 @@ Overviewer development. So let's get started! +.. contents:: + Background Info =============== The Overviewer's task is to take Minecraft worlds and render them into a set of tiles that can be displayed with a Google Maps interface. @@ -191,6 +193,9 @@ This is done at the end of :func:`textures._build_block` .. image:: pixelfix.png :alt: The 6 pixels manually added to each cube. +Other Cube Types +---------------- + Chunk Rendering =============== .. This goes over the rendering of a chunk diff --git a/design/screenshot.png b/design/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..953b50eee73d52095277a1348dcca21d2bcafc23 GIT binary patch literal 117229 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 literal 0 HcmV?d00001 diff --git a/faq.rst b/faq.rst new file mode 100644 index 0000000..ab555a0 --- /dev/null +++ b/faq.rst @@ -0,0 +1,22 @@ +========================== +Frequently Asked Questions +========================== + +**The full map doesn't display even when fully zoomed out!** + Are you using the `-z` or `--zoom` option on your commandline or in + settings.py? If so, try removing it, or increasing the value you set. It's + quite likely you don't need it at all. + +**You've added a few feature, but it's not showing up on my map!** + Some new features will only show up in newly-rendered areas. Use the + `--forcerender` option to update the entire map. + +**How do I use this on CentOS 5?** + CentOS 5 comes with Python 2.4, but the Overviewer needs 2.6 or higher. See + the special instructions at :ref:ref:`centos` + +**The background color of the map is black, and I don't like it!** + You can change this by using the ``--bg-color`` command line option, or + ``bg_color`` in settings.py. See the `Options `_ page for more + details. + diff --git a/index.rst b/index.rst index 3653e77..fb5e7c0 100644 --- a/index.rst +++ b/index.rst @@ -54,6 +54,8 @@ Documentation Contents building installing running + options + faq design/designdoc diff --git a/options.rst b/options.rst new file mode 100644 index 0000000..2d21a58 --- /dev/null +++ b/options.rst @@ -0,0 +1,340 @@ +======= +Options +======= + +.. contents:: + :local: + +Command line options +==================== + +.. cmdoption:: -h, --help + + Shows the list of options and exits + +.. cmdoption:: --advanced-help + + Display help - including advanced options + +Useful Options +-------------- +.. cmdoption:: --rendermodes=MODE1[,MODE2,...] + + Use this option to specify which render mode to use, such as lighting or + night. Use --list-rendermodes to get a list of available rendermodes, and + a short description of each. If you provide more than one mode (separated + by commas), Overviewer will render all of them at once, and provide a + toggle on the resulting map to switch between them. + + If for some reason commas do not work for your shell (like if you're using + Powershell on Windows), you can also use a colon ':' or a forward slash '/' + to separate the modes. + + See the `Render Modes`_ section for more information. + +.. cmdoption:: --list-rendermodes + + List the available render modes, and a short description of each. + +.. cmdoption:: --north-direction=NORTH_DIRECTION + + Specifies which corner of the screen north will point to. + Valid options are: lower-left, upper-left, upper-right, lower-right. + If you do not specify this option, it will default to whatever direction + the existing map uses. For new maps, it defaults to lower-left for + historical reasons. + +.. cmdoption:: --settings=PATH + + Use this option to load settings from a file. For more information see the + `Settings File`_ section below. + +Less Useful Options +------------------- + +.. cmdoption:: -p PROCS, --processes=PROCS + + Adding the "-p" option will utilize more cores during processing. This + can speed up rendering quite a bit. The default is set to the same + number of cores in your computer, but you can adjust it. + + Example to run 5 worker processes in parallel:: + + python overviewer.py -p 5 + +.. cmdoption:: -d, --delete + + This option changes the mode of execution. No tiles are rendered, and + instead, files are deleted. + + *Note*: Currently only the overviewer.dat file is deleted when you run with + this option + +.. cmdoption:: --forcerender + + Force re-rendering the entire map (or the given regionlist). This + is an easier way to completely re-render without deleting the map. + +.. cmdoption:: --regionlist=regionlist + + Use this option to specify manually a list of regions to consider for + updating. Without this option, every chunk in every region is checked for + update and if necessary, re-rendered. If this option points to a file + containing, 1 per line, the path to a region data file, then only those + in the list will be considered for update. + + It's up to you to build such a list. On Linux or Mac, try using the "find" + command. You could, for example, output all region files that are older than + a certain date. Or perhaps you can incrementally update your map by passing + in a subset of regions each time. It's up to you! + + + +Settings File +============= + +You can optionally store settings in a file named settings.py (or really, +anything you want). It is a regular python script, so you can use any python +functions or modules you want. To use a settings file, use the --settings +command line option. + +For a sample settings file, look at 'sample.settings.py'. Note that this file +is not meant to be used directly, but instead it should be used as a +collection of examples to guide writing your own. + +Here's a (possibly incomplete) list of available settings, which are available +in settings.py. Note that you can also set command-line options in a similar +way. + +imgformat=FORMAT + Set the output image format used for the tiles. The default is 'png', + but 'jpg' is also supported. + +zoom=ZOOM + The Overviewer by default will detect how many zoom levels are required + to show your entire map. This option sets it manually. + + *You do not normally need to set this option!* + + This is equivalent to setting the dimensions of the highest zoom level. It + does not actually change how the map is rendered, but rather *how much of + the map is rendered.* Setting this option too low *will crop your map.* + (Calling this option "zoom" may be a bit misleading, I know) + + To be precise, it sets the width and height of the highest zoom level, in + tiles. A zoom level of z means the highest zoom level of your map will be + 2^z by 2^z tiles. + + This option map be useful if you have some outlier chunks causing your map + to be too large, or you want to render a smaller portion of your map, + instead of rendering everything. + + Remember that each additional zoom level adds 4 times as many tiles as + the last. This can add up fast, zoom level 10 has over a million tiles. + Tiles with no content will not be rendered, but they still take a small + amount of time to process. + +web_assets_hook + This option lets you define a function to run after the web assets have + been copied into the output directory, but before any tile rendering takes + place. This is an ideal time to do any custom postprocessing for + markers.js or other web assets. + + This function should accept one argument: a QuadtreeGen object. + +web_assets_path + This option lets you provide alternative web assets to use when + rendering. The contents of this folder will be copied into the output folder + during render, and will overwrite any default files already copied by + Overviewer. See the web_assets folder included with Overviewer for the + default assets. + +textures_path + This is like web_assets_path, but instead it provides an alternative texture + source. Overviewer looks in here for terrain.png and other textures before + it looks anywhere else. + +north_direction + Specifies which corner of the screen north will point to. + Valid options are: lower-left, upper-left, upper-right, lower-right. + +Render Modes +============ + +.. _rendermode-options: https://github.com/agrif/Minecraft-Overviewer/tree/rendermode-options + +Rendermode options are a new way of changing how existing render modes +work, by passing in values at startup. For example, you can change how +dark the 'night' mode is, or enable lighting in 'cave' mode. + +Options and Rendermode Inheritance +---------------------------------- + +Each mode will accept its own options, as well as the options for +parent modes; for example the 'night' mode will also accept options +listed for 'lighting' and 'normal'. Also, if you set an option on a +mode, all its children will also have that option set. So, setting the +'edge_opacity' option on 'normal' will also set it on 'lighting' and +'night'. + +Basically, each mode inherits available options and set options from +its parent. + +Eventually the :option:`--list-rendermodes` option will show parent +relationships. Right now, it looks something like this: + +* normal + + * lighting + + * night + * cave + +* overlay + + * spawn + * mineral + +How to Set Options +------------------ + +Available options for each mode are listed below, but once you know +what to set you'll have to edit *settings.py* to set them. Here's an +example:: + + rendermode_options = { + 'lighting': { + 'edge_opacity': 0.5, + }, + + 'cave': { + 'lighting': True, + 'depth_tinting': False, + }, + } + +As you can see, each entry in ``rendermode_options`` starts with the mode name +you want to apply the options to, then a dictionary containing each option. So +in this example, 'lighting' mode has 'edge_opacity' set to 0.5, and 'cave' mode +has 'lighting' turned on and 'depth_tinting' turned off. + +Defining Custom Rendermodes +--------------------------- + +Sometimes, you want to render two map layers with the same mode, but with two +different sets of options. For example, you way want to render a cave mode with +depth tinting, and another cave mode with lighting and no depth tinting. In this +case, you will want to define a 'custom' render mode that inherits from 'cave' +and uses the options you want. For example:: + + custom_rendermodes = { + 'cave-lighting': { + 'parent': 'cave', + 'label': 'Lit Cave', + 'description': 'cave mode, with lighting', + 'options': { + 'depth_tinting': False, + 'lighting': True, + } + }, + } + + rendermode = ['cave', 'cave-lighting'] + +Each entry in ``custom_rendermodes`` starts with the mode name, and is followed +by a dictionary of mode information, such as the parent mode and description +(for your reference), a label for use on the map, as well as the options to +apply. + +Every custom rendermode you define is on exactly equal footing with the built-in +modes: you can put them in the ``rendermode`` list to render them, you can +inherit from them in other custom modes, and you can even add options to them +with ``rendermode_options``, though that's a little redundant. + +Option Listing +-------------- + +Soon there should be a way to pull out supported options from Overviewer +directly, but for right now, here's a reference of currently supported options. + +normal +~~~~~~ + +* **edge_opacity** - darkness of the edge lines, from 0.0 to 1.0 (default: 0.15) +* **min_depth** - lowest level of blocks to render (default: 0) +* **max_depth** - highest level of blocks to render (default: 127) +* **height_fading** - darken or lighten blocks based on height (default: False) + +lighting +~~~~~~~~ + +all the options available in 'normal', and... + +* **shade_strength** - how dark to make the shadows, from 0.0 to 1.0 (default: 1.0) + +night +~~~~~ + +'night' mode has no options of its own, but it inherits options from +'lighting'. + +cave +~~~~ + +all the options available in 'normal', and... + +* **depth_tinting** - tint caves based on how deep they are (default: True) +* **only_lit** - only render lit caves (default: False) +* **lighting** - render caves with lighting enabled (default: False) + +mineral +~~~~~~~ + +The mineral overlay supports one option, **minerals**, that has a fairly +complicated format. **minerals** must be a list of ``(blockid, (r, g, b))`` +tuples that tell the mineral overlay what blocks to look for. Whenever a block +with that block id is found underground, the surface is colored with the given +color. + +See the *settings.py* example below for an example usage of **minerals**. + +Example *settings.py* +--------------------- + +This *settings.py* will render three layers: a normal 'lighting' layer, a 'cave' +layer restricted to between levels 40 and 55 to show off a hypothetical subway +system, and a 'mineral' layer that has been modified to show underground rail +tracks instead of ore. + +:: + + rendermode = ['lighting', 'subway-cave', 'subway-overlay'] + + custom_rendermodes = { + 'subway-cave' : {'parent' : 'cave', + 'label' : 'Subway', + 'description' : 'a subway map, based on the cave rendermode', + 'options' : { + 'depth_tinting' : False, + 'lighting' : True, + 'only_lit' : True, + 'min_depth' : 40, + 'max_depth' : 55, + } + }, + 'subway-overlay' : {'parent' : 'mineral', + 'label' : 'Subway Overlay', + 'description' : 'an overlay showing the location of minecart tracks', + 'options' : {'minerals' : [ + (27, (255, 234, 0)), + (28, (255, 234, 0)), + (66, (255, 234, 0)), + ]} + }, + } + + rendermode_options = { + 'lighting' : {'edge_opacity' : 0.5}, + # 'night' : {'shade_strength' : 0.5}, + # 'cave' : {'only_lit' : True, 'lighting' : True, 'depth_tinting' : False}, + } diff --git a/running.rst b/running.rst index 70a400f..8c9904d 100644 --- a/running.rst +++ b/running.rst @@ -5,20 +5,131 @@ Running the Overviewer Rendering your First Map ======================== -Overviewer is a command-line application, and so it needs to be run from the command line. If you installed Overviewer from a package manager, the command is ``overviewer.py``. If you downloaded it manually, open a terminal window and navigate to wherever you downloaded Overviewer. For pre-compiled Windows builds, the command is ``overviewer.exe``. For other systems, it's ``./overviewer.py``. +Overviewer is a command-line application, and so it needs to be run from the +command line. If you installed Overviewer from a package manager, the command is +``overviewer.py``. If you downloaded it manually, open a terminal window and +navigate to wherever you downloaded Overviewer. For pre-compiled Windows builds, +the command is ``overviewer.exe``. For other systems, it's ``overviewer.py``. -To generate your map, run:: +The basic usage for Windows is:: - overviewer.exe WorldName path\to\output\ # on windows, or - ./overviewer.py WorldName path/to/output/ # on other systems + overviewer.exe [options] -where ``WorldName`` is the name of the world you want to render, and -``path/to/output`` is the place where you want to store the rendered world. The -first render can take a while, depending on the size of your world. You can, if -you want to, provide a path to the world you want to render, instead of -providing a world name and having Overviewer auto-discover the world path. +And similarly for other systems:: -When the render is done, open up *index.html* using your web-browser of choice. Pretty cool, huh? You can even upload this map to a web server to share with others! Simply upload the entire folder to a web server and point your users to index.html! + overviewer.py [options] -Incremental updates are just as easy, and a lot faster. If you go and change something inside your world, run the command again and Overviewer will automatically rerender only what's needed. +**World** + World can be one of several things. + 1. The path to your Minecraft world on your hard drive + 2. The name of a single player world on your current system. Note that if it + has spaces, you will need to put the world name in quotes. + +**Output Dir** + This is the directory you would like to put the rendered tiles and + supporting HTML and javascript files. You should use the same output + directory each time; the Overviewer will automatically re-render only the + tiles that need rendering on subsequent runs. + +**options** + See the `Options `_ page for a list of options you can + specify. + +For example, on Windows if your Minecraft server runs out of ``c:\server\`` and you want +to put the rendered map in ``c:\mcmap\``, run this:: + + overviewer.exe c:\server\world c:\mcmap + +For Mac or Linux builds from source, you would run something like this with the +current directory in the top level of the source tree:: + + ./overviewer.py /opt/minecraft/server/world /opt/minecraft/mcmap + +The first render can take a while, depending on the size of your world. + +When the render is done, open up *index.html* using your web-browser of choice. +Pretty cool, huh? You can even upload this map to a web server to share with +others! Simply upload the entire folder to a web server and point your users to +index.html! + +Incremental updates are just as easy, and a lot faster. If you go and change +something inside your world, run the command again and Overviewer will +automatically rerender only what's needed. + +Installing the Textures +======================= +If you're running on a machine without the Minecraft client installed, you will +need to provide the terrain.png file manually for the Overviewer to use in +rendering your world. This is common for servers. + +All Overviewer needs is a terrain.png file. If the Minecraft client is +installed, it will use the terrain.png that comes with Minecraft. If the +Minecraft client is not installed or you wish to use a different terrain.png, +for example a custom texture pack, read on. + +You have several options: + +* If you have the Minecraft client installed, the Overviewer will automatically + use those textures. This is a good solution since the Minecraft Launcher will + always keep this file up-to-date and you don't have to do anything extra. + + * If you're running the Overviewer on a server, you can still put the + minecraft.jar file (not the launcher) into the correct location and the + Overviewer will find and use it, even if the rest of the client files are + missing. On Linux, try a command like this:: + + 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 + texture pack. If you've built the Overviewer from source, simply place the + file in the same directory as overviewer.py or overviewer.exe. For + installations, you will need to specify the path... see the next bullet. + +* You can put a terrain.png file anywhere you want and point to its location + with the ``--textures-path`` option. This should point to the directory containing + the terrain.png, not to the file itself. + +Note: the ``--check-terrain`` option is useful for debugging terrain.png issues. +For example:: + + $ ./overviewer.py --check-terrain + 2011-09-26 21:51:46,494 [INFO] Found terrain.png in '/home/achin/.minecraft/bin/minecraft.jar' + 2011-09-26 21:51:46,497 [INFO] Hash of terrain.png file is: `6d53f9e59d2ea8c6f574c9a366f3312cd87338a8` + +:: + + $ ./overviewer.py --check-terrain --textures-path=/tmp + 2011-09-26 21:52:52,143 [INFO] Found terrain.png in '/tmp/terrain.png' + 2011-09-26 21:52:52,145 [INFO] Hash of terrain.png file is: `6d53f9e59d2ea8c6f574c9a366f3312cd87338a8` + +Running on a Live Map +===================== +If you're running the Overviewer on a live server or a single player world +that's running, read this section. + +Minecraft doesn't really like it when other programs go snooping around in a +live world, so running Overviewer on a live world usually creates a few errors, +usually "corrupt chunk" errors. You *can* do this, but it's not a supported way +of running Overviewer. + +To get around this, you can copy your live world somewhere else, and render the +copied world instead. If you're already making backups of your world, you can +use the backups to make the render. Many people even use their backups to run +Overviewer on a different machine than the one running the Minecraft server. + +There used to be a few things to be careful about, but right now there's only +one important thing left. + +Preserving Modification Times +----------------------------- + +The important thing to be careful about when copying world files to another +location is file modification times, which Overviewer uses to figure out what +parts of the map need updating. If you do a straight copy, usually this will +update the modification times on all the copied files, causing Overviewer to +re-render the entire map. To copy files on Unix, while keeping these +modification times intact, use ``cp -p``. For people who render from backups, +GNU ``tar`` automatically handles modification times correctly. ``rsync -a`` +will handle this correctly as well. If you use some other tool, you'll have to +figure out how to do this yourself. From 2cc06588a1a28ccf8e21f2fa3f556c22cf9465c7 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 16:06:07 -0400 Subject: [PATCH 07/40] moved everything into a docs dir --- Makefile => docs/Makefile | 0 building.rst => docs/building.rst | 0 conf.py => docs/conf.py | 0 {design => docs/design}/cube_parts.png | Bin {design => docs/design}/cube_parts.svg | 0 {design => docs/design}/designdoc.rst | 0 {design => docs/design}/dirt_side.png | Bin {design => docs/design}/dirt_top.png | Bin {design => docs/design}/pixelfix.png | Bin {design => docs/design}/pixelfix.svg | 0 {design => docs/design}/screenshot.png | Bin {design => docs/design}/tessellation.png | Bin {design => docs/design}/tessellation.svg | 0 {design => docs/design}/texturecubing.png | Bin {design => docs/design}/texturecubing.svg | 0 {design => docs/design}/texturesidesteps.png | Bin {design => docs/design}/texturesidesteps.svg | 0 {design => docs/design}/texturetopsteps.png | Bin {design => docs/design}/texturetopsteps.svg | 0 faq.rst => docs/faq.rst | 0 index.rst => docs/index.rst | 0 installing.rst => docs/installing.rst | 0 options.rst => docs/options.rst | 0 running.rst => docs/running.rst | 0 24 files changed, 0 insertions(+), 0 deletions(-) rename Makefile => docs/Makefile (100%) rename building.rst => docs/building.rst (100%) rename conf.py => docs/conf.py (100%) rename {design => docs/design}/cube_parts.png (100%) rename {design => docs/design}/cube_parts.svg (100%) rename {design => docs/design}/designdoc.rst (100%) rename {design => docs/design}/dirt_side.png (100%) rename {design => docs/design}/dirt_top.png (100%) rename {design => docs/design}/pixelfix.png (100%) rename {design => docs/design}/pixelfix.svg (100%) rename {design => docs/design}/screenshot.png (100%) rename {design => docs/design}/tessellation.png (100%) rename {design => docs/design}/tessellation.svg (100%) rename {design => docs/design}/texturecubing.png (100%) rename {design => docs/design}/texturecubing.svg (100%) rename {design => docs/design}/texturesidesteps.png (100%) rename {design => docs/design}/texturesidesteps.svg (100%) rename {design => docs/design}/texturetopsteps.png (100%) rename {design => docs/design}/texturetopsteps.svg (100%) rename faq.rst => docs/faq.rst (100%) rename index.rst => docs/index.rst (100%) rename installing.rst => docs/installing.rst (100%) rename options.rst => docs/options.rst (100%) rename running.rst => docs/running.rst (100%) diff --git a/Makefile b/docs/Makefile similarity index 100% rename from Makefile rename to docs/Makefile diff --git a/building.rst b/docs/building.rst similarity index 100% rename from building.rst rename to docs/building.rst diff --git a/conf.py b/docs/conf.py similarity index 100% rename from conf.py rename to docs/conf.py diff --git a/design/cube_parts.png b/docs/design/cube_parts.png similarity index 100% rename from design/cube_parts.png rename to docs/design/cube_parts.png diff --git a/design/cube_parts.svg b/docs/design/cube_parts.svg similarity index 100% rename from design/cube_parts.svg rename to docs/design/cube_parts.svg diff --git a/design/designdoc.rst b/docs/design/designdoc.rst similarity index 100% rename from design/designdoc.rst rename to docs/design/designdoc.rst diff --git a/design/dirt_side.png b/docs/design/dirt_side.png similarity index 100% rename from design/dirt_side.png rename to docs/design/dirt_side.png diff --git a/design/dirt_top.png b/docs/design/dirt_top.png similarity index 100% rename from design/dirt_top.png rename to docs/design/dirt_top.png diff --git a/design/pixelfix.png b/docs/design/pixelfix.png similarity index 100% rename from design/pixelfix.png rename to docs/design/pixelfix.png diff --git a/design/pixelfix.svg b/docs/design/pixelfix.svg similarity index 100% rename from design/pixelfix.svg rename to docs/design/pixelfix.svg diff --git a/design/screenshot.png b/docs/design/screenshot.png similarity index 100% rename from design/screenshot.png rename to docs/design/screenshot.png diff --git a/design/tessellation.png b/docs/design/tessellation.png similarity index 100% rename from design/tessellation.png rename to docs/design/tessellation.png diff --git a/design/tessellation.svg b/docs/design/tessellation.svg similarity index 100% rename from design/tessellation.svg rename to docs/design/tessellation.svg diff --git a/design/texturecubing.png b/docs/design/texturecubing.png similarity index 100% rename from design/texturecubing.png rename to docs/design/texturecubing.png diff --git a/design/texturecubing.svg b/docs/design/texturecubing.svg similarity index 100% rename from design/texturecubing.svg rename to docs/design/texturecubing.svg diff --git a/design/texturesidesteps.png b/docs/design/texturesidesteps.png similarity index 100% rename from design/texturesidesteps.png rename to docs/design/texturesidesteps.png diff --git a/design/texturesidesteps.svg b/docs/design/texturesidesteps.svg similarity index 100% rename from design/texturesidesteps.svg rename to docs/design/texturesidesteps.svg diff --git a/design/texturetopsteps.png b/docs/design/texturetopsteps.png similarity index 100% rename from design/texturetopsteps.png rename to docs/design/texturetopsteps.png diff --git a/design/texturetopsteps.svg b/docs/design/texturetopsteps.svg similarity index 100% rename from design/texturetopsteps.svg rename to docs/design/texturetopsteps.svg diff --git a/faq.rst b/docs/faq.rst similarity index 100% rename from faq.rst rename to docs/faq.rst diff --git a/index.rst b/docs/index.rst similarity index 100% rename from index.rst rename to docs/index.rst diff --git a/installing.rst b/docs/installing.rst similarity index 100% rename from installing.rst rename to docs/installing.rst diff --git a/options.rst b/docs/options.rst similarity index 100% rename from options.rst rename to docs/options.rst diff --git a/running.rst b/docs/running.rst similarity index 100% rename from running.rst rename to docs/running.rst From 9f5bb3e6bf9dc38b9355d0b16e9a74c3d8de8da8 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 17:18:41 -0400 Subject: [PATCH 08/40] fixed typo in reference --- docs/faq.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.rst b/docs/faq.rst index ab555a0..adda69f 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -13,7 +13,7 @@ Frequently Asked Questions **How do I use this on CentOS 5?** CentOS 5 comes with Python 2.4, but the Overviewer needs 2.6 or higher. See - the special instructions at :ref:ref:`centos` + the special instructions at :ref:`centos` **The background color of the map is black, and I don't like it!** You can change this by using the ``--bg-color`` command line option, or From 96250cd84a7f638f30b928c0e1158451998ec7c6 Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Sat, 1 Oct 2011 17:44:22 -0400 Subject: [PATCH 09/40] Updated building docs --- docs/building.rst | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/docs/building.rst b/docs/building.rst index c5c1790..e73456f 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -29,15 +29,24 @@ Windows Build Instructions First, you'll need a compiler. You can either use Visual Studio, or cygwin/mingw. The free `Visual Studio Express `_ is okay. You will want the C++ -version (Microsoft® Visual C++® 2010 Express) +version (Microsoft® Visual C++® 2010 Express). Note that the Express version of +Visual Studio will only build 32-bit executables. We currently don't have a +recommended way of building Overviewer on 64-bit Windows using free tools. If you +have bought a copy of Visual Studio, you can use it for 64-bit builds. + + +Prerequisits +~~~~~~~~~~~~ + +You will need a copy of the `PIL sources `_. Building with Visual Studio ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1. Get the latest source code as per above +1. Get the latest Overviewer source code as per above. 2. From the Start menu, navigate to the 'Microsoft Visual Studio 2010 Express' and open the 'Visual Studio Command Prompt (2010)' shortcut. -3. cd to the folder containing the Overviewer source code -4. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory +3. cd to the folder containing the Overviewer source code. +4. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory. 5. First try a build:: c:\python26\python setup.py build @@ -57,9 +66,9 @@ If the build was successful, there should be a c_overviewer.pyd file in your cur Building with mingw ~~~~~~~~~~~~~~~~~~~ -1. Open a MinGW shell -2. cd to the Overviewer directory -3. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory +1. Open a MinGW shell. +2. cd to the Overviewer directory. +3. Copy Imaging.h and ImPlatform.h from your PIL installation into the current working directory. 4. Build:: python setup.py build --compiler=mingw32 @@ -69,8 +78,8 @@ Linux ----- You will need the gcc compiler and a working build environment. On Ubuntu and -Debian, this can be done by installing the ``build-essential`` package. *For -CentOS machines, see the `CentOS`_ section below* +Debian, this can be done by installing the ``build-essential`` package. For +CentOS machines, see the :ref:`centos` section below You will need the following packages (at least): From 55215f5ac92c31c370d306ecb6d554a15299cb14 Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Sat, 1 Oct 2011 17:55:09 -0400 Subject: [PATCH 10/40] Be consistant about how command line arguments are formatted --- docs/faq.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index adda69f..0872f55 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -3,13 +3,13 @@ Frequently Asked Questions ========================== **The full map doesn't display even when fully zoomed out!** - Are you using the `-z` or `--zoom` option on your commandline or in + Are you using the ``-z`` or ``--zoom`` option on your commandline or in settings.py? If so, try removing it, or increasing the value you set. It's quite likely you don't need it at all. **You've added a few feature, but it's not showing up on my map!** Some new features will only show up in newly-rendered areas. Use the - `--forcerender` option to update the entire map. + ``--forcerender`` option to update the entire map. **How do I use this on CentOS 5?** CentOS 5 comes with Python 2.4, but the Overviewer needs 2.6 or higher. See From f06ab2d3467b6c154eea65c6b648a83da8f146b0 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 17:56:42 -0400 Subject: [PATCH 11/40] changed authors field and version --- docs/conf.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 794c403..cbc8394 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -41,14 +41,14 @@ master_doc = 'index' # General information about the project. project = u'Overviewer' -copyright = u'2011, Andrew Brown and Contributors' +copyright = u'2010-2011 the Overviewer Team' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '0.3.0' +version = '0.3' # The full version, including alpha/beta/rc tags. release = '0.3.0' @@ -179,7 +179,7 @@ htmlhelp_basename = 'Overviewerdoc' # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'Overviewer.tex', u'Overviewer Documentation', - u'Andrew Brown and Contributors', 'manual'), + u'The Overviewer Team', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -212,5 +212,5 @@ latex_documents = [ # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'overviewer', u'Overviewer Documentation', - [u'Andrew Brown and Contributors'], 1) + [u'The Overviewer Team'], 1) ] From 5464ad3b5d5164981b44654b9aafd4de5453d87a Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Sat, 1 Oct 2011 18:13:12 -0400 Subject: [PATCH 12/40] Remove viewcode extension to better support older versions of sphinx --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index cbc8394..941601f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -25,7 +25,7 @@ import sys, os # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] +extensions = ['sphinx.ext.autodoc'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 4ad984a0522005204b2a635441bef90e1bc3f5ea Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 18:58:25 -0400 Subject: [PATCH 13/40] changed docs version to match git version --- docs/conf.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 941601f..b5e8e4e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,7 +16,8 @@ import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) +sys.path.insert(0, os.path.abspath('..')) +from overviewer_core import util # -- General configuration ----------------------------------------------------- @@ -48,9 +49,9 @@ copyright = u'2010-2011 the Overviewer Team' # built documents. # # The short X.Y version. -version = '0.3' +version = util.findGitVersion() # The full version, including alpha/beta/rc tags. -release = '0.3.0' +release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From fa4f8c0e3b15e57ebabc62c8763653ba9f20ec07 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 19:24:32 -0400 Subject: [PATCH 14/40] cross-referenced command options from faq page. also added --bg-color to options page --- docs/faq.rst | 11 ++++++----- docs/options.rst | 23 ++++++++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index 0872f55..eed8fd5 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -3,20 +3,21 @@ Frequently Asked Questions ========================== **The full map doesn't display even when fully zoomed out!** - Are you using the ``-z`` or ``--zoom`` option on your commandline or in - settings.py? If so, try removing it, or increasing the value you set. It's - quite likely you don't need it at all. + Are you using the ``-z`` or ``--zoom`` option on your commandline or + in settings.py? If so, try removing it, or increasing the value you set. + It's quite likely you don't need it at all. See the documentation for the + :option:`--zoom <-z>` option. **You've added a few feature, but it's not showing up on my map!** Some new features will only show up in newly-rendered areas. Use the - ``--forcerender`` option to update the entire map. + :option:`--forcerender` option to update the entire map. **How do I use this on CentOS 5?** CentOS 5 comes with Python 2.4, but the Overviewer needs 2.6 or higher. See the special instructions at :ref:`centos` **The background color of the map is black, and I don't like it!** - You can change this by using the ``--bg-color`` command line option, or + You can change this by using the :option:`--bg-color` command line option, or ``bg_color`` in settings.py. See the `Options `_ page for more details. diff --git a/docs/options.rst b/docs/options.rst index 2d21a58..c3d5903 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -18,7 +18,7 @@ Command line options Useful Options -------------- -.. cmdoption:: --rendermodes=MODE1[,MODE2,...] +.. cmdoption:: --rendermodes [,MODE2,...] Use this option to specify which render mode to use, such as lighting or night. Use --list-rendermodes to get a list of available rendermodes, and @@ -36,7 +36,7 @@ Useful Options List the available render modes, and a short description of each. -.. cmdoption:: --north-direction=NORTH_DIRECTION +.. cmdoption:: --north-direction Specifies which corner of the screen north will point to. Valid options are: lower-left, upper-left, upper-right, lower-right. @@ -44,7 +44,7 @@ Useful Options the existing map uses. For new maps, it defaults to lower-left for historical reasons. -.. cmdoption:: --settings=PATH +.. cmdoption:: --settings Use this option to load settings from a file. For more information see the `Settings File`_ section below. @@ -52,7 +52,7 @@ Useful Options Less Useful Options ------------------- -.. cmdoption:: -p PROCS, --processes=PROCS +.. cmdoption:: -p , --processes Adding the "-p" option will utilize more cores during processing. This can speed up rendering quite a bit. The default is set to the same @@ -75,7 +75,7 @@ Less Useful Options Force re-rendering the entire map (or the given regionlist). This is an easier way to completely re-render without deleting the map. -.. cmdoption:: --regionlist=regionlist +.. cmdoption:: --regionlist Use this option to specify manually a list of regions to consider for updating. Without this option, every chunk in every region is checked for @@ -88,7 +88,18 @@ Less Useful Options a certain date. Or perhaps you can incrementally update your map by passing in a subset of regions each time. It's up to you! +.. cmdoption:: -z , --zoom + See the :ref:`zoom ` section below. + +.. cmdoption:: --bg-color + + Configures the background color for the Google Map output. Specify in + #RRGGBB format. + +*This list is currently incomplete. Use the* :option:`--help <-h>` *and* +:option:`--advanced-help` *options to see the complete list of accepted command +line options.* Settings File ============= @@ -110,6 +121,8 @@ imgformat=FORMAT Set the output image format used for the tiles. The default is 'png', but 'jpg' is also supported. +.. _zoom: + zoom=ZOOM The Overviewer by default will detect how many zoom levels are required to show your entire map. This option sets it manually. From cc9792177e4b6e7fed883d299a737d3e6a60f673 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 1 Oct 2011 20:11:03 -0400 Subject: [PATCH 15/40] modified cube building example to use grass --- docs/design/cube_parts.png | Bin 17193 -> 17163 bytes docs/design/cube_parts.svg | 257 +++++++++----- docs/design/cube_sides.png | Bin 0 -> 3417 bytes docs/design/cube_top.png | Bin 0 -> 1851 bytes docs/design/designdoc.rst | 14 +- docs/design/dirt_side.png | Bin 3455 -> 0 bytes docs/design/dirt_top.png | Bin 1907 -> 0 bytes docs/design/pixelfix.png | Bin 5174 -> 5442 bytes docs/design/pixelfix.svg | 117 ++++--- docs/design/tessellation.png | Bin 21140 -> 20888 bytes docs/design/tessellation.svg | 543 ++++++++++++++--------------- docs/design/texturesidesteps.png | Bin 10108 -> 11150 bytes docs/design/texturesidesteps.svg | 321 ++++++++--------- docs/design/texturetopsteps.png | Bin 16551 -> 23153 bytes docs/design/texturetopsteps.svg | 569 +++++++++++++++---------------- docs/faq.rst | 2 +- 16 files changed, 970 insertions(+), 853 deletions(-) create mode 100644 docs/design/cube_sides.png create mode 100644 docs/design/cube_top.png delete mode 100644 docs/design/dirt_side.png delete mode 100644 docs/design/dirt_top.png diff --git a/docs/design/cube_parts.png b/docs/design/cube_parts.png index 19e4ef414fb14fb383d82936fe2caf4b7c3290b5..d012e0e6f8b75cab4c7d0656d3bb93c0737848bd 100644 GIT binary patch literal 17163 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 literal 17193 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 diff --git a/docs/design/cube_parts.svg b/docs/design/cube_parts.svg index 81749b7..ab7eb8c 100644 --- a/docs/design/cube_parts.svg +++ b/docs/design/cube_parts.svg @@ -10,13 +10,13 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="744.09448819" - height="1052.3622047" + width="1131" + height="280.5" id="svg2" version="1.1" inkscape:version="0.48.1 r9760" sodipodi:docname="cube_parts.svg" - inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png" + inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/cube_parts.png" inkscape:export-xdpi="63.639942" inkscape:export-ydpi="63.639942"> + style="overflow:visible"> + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + inkscape:window-maximized="1" + showguides="true" + inkscape:guide-bbox="true" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0"> + id="grid3360" + empspacing="5" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" /> @@ -86,150 +97,240 @@ + id="layer1" + transform="translate(-59.5,-402.36219)"> + id="g3080"> + y="407.36218" /> + id="g3928"> + style="fill:none;stroke:#ff7e00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + id="g3996"> + transform="translate(380,5.0000026)" + id="g3080-9"> + y="407.36218" /> + id="path4600-7" + d="m 60,477.36218 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 20,0 0,10 50,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 20,0 0,-10 10,0" + style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/cube_parts.png" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /> + transform="translate(375,2.6171874e-6)" + id="g3996-1"> + id="g3928-7"> + style="fill:none;stroke:#ff7e00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - + transform="translate(830,-4.9999974)" + id="g3080-9-1"> + + + + - + + + + - H=O_S;;H;`*l2&kKwh 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 literal 0 HcmV?d00001 diff --git a/docs/design/cube_top.png b/docs/design/cube_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8e527e0f8b594b90be916668c66a66231e3ba96c GIT binary patch literal 1851 zcmeAS@N?(olHy`uVBq!ia0y~yU=(CvV5s0=V_;yoDsgND0|NtNage(c!@6@aFBupZ z*pj^6T^Rm@;DWu&Co?cGa29w(7Bet#3xhBt!>l6EzfPW;{51LTRGIM={pog2OF49DM`? z4;`8``+=i~jLI5q7new$XJSn=Iy5p&rpFYWOXWSN@~uyH`SR*ral2N%exEpF?}{_c z(|XR;*gsESy)5q6_5ZJGe`Wd~FwaT;+_U-0-+zC8%cZ~Gz5JjigF^>{f(wIy5(9@I zg3-dkAk)I{5*PvOi9>rzs&XoRoZ(HK&vOUw~>-(>BYYQ^8a4=%3G{^d`kBf?mto7>L*`(krDbxT=L8JlnL-6xNCuGD*F*86*F>6K~6&V@bBocR1U*V@hL z>WlA2t&f(tY1I*L`~Tmp?iH5z8r9#GObSU^dhY+r z<9?IO-q+9l*mc0LJb`0Q?XxY#Q-dW~Pfd1m4bpno`bnz#zex`3u0KDjvG@Dxqjw`=gW}yNt<)$%zefF)h_n@_Tu1J ziQC_-B~`cntG#~TYQ*PJRtRTB zhRo^_`WhDPrM9!~>nB@1f3LltZtPy;)A0D8#paK1B*UM0t4@wNTc&XSv&p}V@VSn` zllz}{?eZ;UoA@X%ICWdd70#z~mZzv+Z}$ItqIF_@M(}b*nWPSzlES;X&srDdEm&1l zH1)F4dXaKx*1yY|Gy<;hihg%8b@G4t?a?jqIiG$ey+3(k^0Ub?(zDBVUXA|sO#cJJ z55D#j|DFpTU3BGpoxv0p-R_%PpMTpFp*36d)aIbx1q&CvT>a48WY5OMKg-q`;T%lhgp z`ZK8aK=8y+sWn?er~2K@S@_LM<>bl})1=mwik31@y?Kv)mTQ<+4y%$wL-H4k&xg+6 z|D^JA;`DcA){A3X3l|u0U6FH%nl^RSrc3WELaQZK$AsLHRE?T8^;(|vsp3o5+J$4w zS1tcoU-tF5`hUL)hU2;}-}e6aU_DP|Ztbrvvqe|_*|6{+Z|>5|F@^d;p<$nz+cs4y zs%NH8Sy8Wa?NqO9?4OsjTi6TkIH%l~ulsE7f9v(b8F@=zt>0#{%jn{!60OTY=J)G@ zZssW3fBAZw{l8NML(2*A+yBozIVAmkXY~6WahD61y$oCQ_W#+hw_5o*_#e!$o}~EU z#nWnE-OBLwZ)R*upZj-bQSkK;^SxQGYjVEkZVv9QiG2N2+vxT;w(Q*C*w9;6D&n1M z7ni+v{@Z-^SmxU2OC@iwbHB2+c6Q2tdnLX}@1`Alowk}gdfWc@SL6Rrm0ZoRuM(1@ z6`3GK2Lp^@A(s(tUh!nAh*KZ!PrxzFDjM@mI1c)cueW8M$z^5RhH%eqiVG>%M1aUcGef@Xh$#nXlZ! zb2ht7Uz)o=HS2fi@7ekGnX68xaR<+pzm;}n-;WQs_rxKWeh@<;#gh{Y!#*yn4<9VW z@9j8$b?4rf7Mri;s&17#o-J_=njK9wym0znA>6if3S8VDNPH Kb6Mw<&;$UhD_ctd literal 0 HcmV?d00001 diff --git a/docs/design/designdoc.rst b/docs/design/designdoc.rst index d94391e..941d746 100644 --- a/docs/design/designdoc.rst +++ b/docs/design/designdoc.rst @@ -131,10 +131,10 @@ This produces an image of size 24 by 12 as seen in the following sequence. The final image, shown below, becomes the top of the cube. -.. image:: dirt_top.png - :alt: Top of dirt +.. image:: cube_top.png + :alt: Top of the cube -On the left is the top of the dirt block at actual size after the +On the left is what will become the top of the block at actual size after the transformation, the right is the same but blown up by a factor of 10 with no interpolation to show the pixels. @@ -158,11 +158,11 @@ a shear. This image is simply flipped along the horizontal axis for the other visible side of the cube. -.. image:: dirt_side.png - :alt: The sides of the dirt block +.. image:: cube_sides.png + :alt: The sides of the block -Again, the left are the two sides of the dirt block at actual size, the right is -scaled with no interpolation by a factor of 10 to show the pixels. +Again, shown on the left are the two sides of the block at actual size, the +right is scaled with no interpolation by a factor of 10 to show the pixels. An Entire Cube -------------- diff --git a/docs/design/dirt_side.png b/docs/design/dirt_side.png deleted file mode 100644 index 0634307179dd2c64fea40a81818232418e8e1dd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3455 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 diff --git a/docs/design/dirt_top.png b/docs/design/dirt_top.png deleted file mode 100644 index 118fc543f9b39541fac6875d4124f12b5814681f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1907 zcmeAS@N?(olHy`uVBq!ia0y~yVB}?BV5s0=V_;x-(Y5>>0|NtNage(c!@6@aFBupZ z*pj^6T^Rm@;DWu&Co?cGa29w(7Bet#3xhBt!>l1ofuo;fq~`sMBo zjZF{Mf7x*J?$5e)@@X@SpWFO7|1STZy263<_j{{OZGIwG_b#bn@z&ogmMjb!ybM#= z7`&JnmNGV6Vt_L?d^VWKzW4K^P0ydd-uv@lYVbP;v$wCGTl~NFe9rkbCJX^mP@QlF z*oXuhL&xphbL|TIGnF+~MaqxG)9)sK-ThiM_}zt=Yg0~7f3@t6{Jp=Arp4?>4j*u^z=Jq}{g$xs zLh*BROnQH;%{TL1e_j5@w=;W^^Nvkfy?xiRJ6RjkPNk|(-X~}O`tk#Q*%LSXv>vO? z@mrpL>h0`pwfDUCzI|P2S(R~ZN_6%OJNNrXX~Vv-jo9Hu(Ei{(s)D zM-iC}55BQLq7>rshD!_^YL|Yzw|cn^pR~cgL)RWy>+4ld`ZB%#U-WsKZ`uBn&h7td zd7G6f`B}RDugmK1K5qNwr87m^OFe1V{~L~=cw46a$ZFS=%ahmd{cAt9{r>8yQx7fE z+@5vE`I460*3!IugHK;;)76BR#q7+wec9Oh>HC(DqScO>We>5qp$@7wo2>Zlp#-;+I@L;R#Er#aJ4sgwKN5JMBTApT41wq-|dSzYHQ2m zs}7x>{`#5x0frl{OE-S~-a7TrvOD*BrykAPxa?lS5*M9C6*_B*ww8Vt@0*$y{V~I3 zs+;@FlAxCB;3#T#nHo@v61Uvoj7FIJ7>`T+}9@+i79Pw3$^t+RbyZ|BwNn14BayLgq!tvk~g9tTK8$L;u$=rBodZtb1bCe~S7 zc17LJ(VE<~+FnLegm2YbzK}KLQ+#{3gcX+jxUsj(lJyjm#PLfvHr2e#XMA}~-sADb z4WE|oT4v+lniPAnz~i_2V=vX@SNv^NzrNQm(`hKw@70Z7-Tr*K{0AxB@Pi2s$NSIx zzpl&M@NuKM-mkTS-{%MC-B42r_u6J_JAKo(cXo>PrVZz( zNLOyt4O?4XT2{Sn`IPswXBj+QG;zXu_4&zjR`^PMmsx9)dwgj`sn5=noVQaxY$@cw z?6o-e)ZFUNm!pgRZi1C*kRoUb8@vc@knQNakX!Kb&EsW)ey^7#-7WOpS+g?lRBBLR zaGq6e^{zc%U%tq_Zq^yK=C+#3X3g6v&%Op7o?>0|CN5a-nTXHMy`MVx!(inx%vXq# zoY_!t7k8{h@gK2TUlCJPd0nHraH#$@V31!>Oz6RdQ-RfwoJ>`4Sv_!Enif- z0k>1{Hg=l7`1zFG#y?6YbZIHK-+IQ`Ofh`)&E!?{EIr$7jEPzJK2H%HCqW zt_H(+h7Xg4`{G)PtM#9k%;UVVyqc-2NKEwc(MsWlcWVE4|ID2A*wpb)iGPB0z`>n0 z!Rt+y?Ko7tb6KEaUSqXg#qT}&{}0};czI_be=T#R`m6tsgxAOZcwK&Hf5Fn{Wx5NJ z?nt%QSWjOb%-}H5Em(X{*~9u%zAtY%)*EXbT#yvfmjXybS08=EBJ|9%y&_-Z}NXXn){NPPC zFON*1@@FB&1@*Zp2Y0Ue+Og5eS4T0K=RoPJzq@U8d@SB&y6;~$H6g$dHDcOw1%3Y? za*uz?@PNN8ZAYHw@%MYbPkS%(|HWzshQD)XS}a?6Trh8spsaNEguDo)OmnwcCj*P8 ze9EZ$+Y_TAv0QMG%f5B7uP>MtJ(^`1Oe! zHwBhoyK%1Q=HuW)kAwCv(`}d@bLfY@zfs2hN553(1aVG1{d4xmZMu8D$uaETbyfJz zZ*P64p!xrI*SG%-%bumaX)R-dOP#XT!-AhjUfg;1zUbH;!;_l({?GXryzQvU0}JT` z8n@Yb6Q(2>OusV!;tZYx91IWUFg8@%75ui*`!wNy>37+qcmMz4c(*%O-mdbwFGEG` zNeR2-Th#C0shw$LH#<4YZ0X}^{rpGY7D@$rYn)A*RdcZ_NB;bm`b3X+DI(D~JofE> z(k%3Ify(no>Yr8n{#>KtzsYA*Y}@YNswyqxC}%-2sH+9cKyRQ>L-;WdR@0*g=D=1)1kJ1<+QhFi}f z`$hb@HG&M!pH(Rq9-p^+#XKXmZ3a&!tSep7A+dSo+Io}R+x3eS#g}KRZ~oxrZ{BO+ z?aF;V-8*-Kf?WRO;$0f%a*?bC`)=Kw+;6e9!%DDhQi#senP*dlA6MIb*m}BDYuiDMm8M$d#O)Cc-zH7a+#-?F7npPL?P*h+eLBljdeyv^WSqQjy6x(d zVpCV<348|%-<&+ZNzTydeSXEV0|}nnGLNx3e^Pn=&3-G-SDn{#vk$v%a=6uY+niy~ zOcS24KTo6V*5%6N?$7CAoM~6%n!ziY++w0U({<(2NcY^k^+Ab06W-@fiKr`_#vApi z#Sg20D!#bJ6&P1*pSL{|cSU%+`$p%SRPAGGhCWK}OSJp>U+k>mW>q~RBz0SDNqO?? z3!7eC7Y^m~J2}(U(|lQRPIUV&6;Dam&abJJa(3zo@A=;eY?p3edwAH`GOS*1`t8jn z=~ge!otSoEW%8fmo7I=s?AU7=y3kHlJxAoYw8(MOSz%1>$Q2VP4~F!38O*r!upefd07=f zZc?WOD?-IqOn>@#>uFO5rDuM57f(JpzuE4f{dC5S`E0J8rI&QJ-1olt{^awn=fC!x ze#6{9Z^7@d4%15_rbd%yUhWKD68p0^#&Vm_`Ow(sf{#T6J%Sc$bxaKmkq|w?{<)(t zZ+*?WjrB{FqijH{{>%G6aB=F9>ufJxz zo!HW(<8&K|9s=MnQpfyW}EEdH3&Za@bSy{a~D3JwJXvu zZpGC6neF+rFuImsc47x?*mhX@lXXeRXFx zm;L+xL$k2@?v@o#BG};U&Wfazap!TyuBtdA#LyD%1O?Br=*;NghO;r$#yX&bctL)$f)bd zxAL{v;fZDILcxVvJ;*KK<~Aq|J-WJZ&LO@J?5`OnEG;t0d{F%#++gD_XEcwR5uvMpOp5H#%MUA_1FHY)wlG-~dqh29S@{?(|K=&)j8MfEn5^O784WgGIh^+3Foz% z&mEp$eEsRy;-jiR_hv=4x9Qky*%p^DwPfqtRL-+YJca85mps{f-rHG!)2iIS$(FCs zb4xv_g)4A=LWl5&XzSG~2Nz8~cBRX6GKX!_+=#>LyO%vIm6&$J{O}$Z*G1bB<1VZ) z?%UaH;G5I8C~HM-kg4um_sb?39#<-}X71*m7UAl9d6DA9%4?k$J)gGp=C!+D-nUN4 zhdK1}C6(D0n_etS2~?Udaoz1sbByA@C-b)SM_yW7zx=vqKxomnp08{Awp2vLaaY>- z{X2ZEn=AcV%I&N@i>B5rEVUJ9{k{9sDz~^(X2+`n7oL2YGyhg&oQS$@(woWe_Ve|{ z?bw^gzUIfe*=jF@R7~BE53@ zHXU0jYANLNxWg^zgUiNk$ECx*8UL(s4lxPZdhJ5a{6!B;9bHx3FS}m7;4@{>n!pJ> zirG55WG$mor|~mS+mjoGDaQ{`be@c!Q4$0g5sf0uRLmXEEEIkvd}^xb&tPFJs8 z7vA01mFH*ZoA=~slzq`-y~5usw+i~LJ+Xs& zw%yJAH}dAJS2ww0wcU5{%RH7X;eR)^zdR|m(A7CTYovXf~EQTm#`_D_k3RXc*n!0KS$q{_jRt%jV_N{ z`D$exyL|OcUvb;^uE3ijySuo4>%Wn6+tumY)fISCsQ%ZUyA>76Cx5h>pIG~|t+Mms ziX;2B3f}v0R(ZDFHjs+ryENtQXlUQuSRGb#)|E-3i_O5xpknP@&x-Ts?-}veKbWv3 zU*xNyQf$oTiFG1zcmyfG$YP;6V z!^X^W?MdtWDoOp8E~QC@A=gTN-qGpJoa80^J>Yne^yHmYdp=yS{{PoeCL-?m-tBTn zoUfnkHn#0NEdT4z_2-Fa)-wDPK2ZMf&ROw#=_TcEm<9MluOB_!CH?9}+cU#^4lpJ> zH<3SnE8|J3uQ%g^hL$zSm%A(8o_v{Vxk~@_tZ5lO>4v*vf5t2|?NHw7)1Vs1aG=C% zS5Zk)isnkguA~_rdf^2dxEbCpS7$MZy^_zmq5k@YAE(>by_WyDw_ePSw_?YeYv-2i zc|Gs?rOq=A>#J>5Ufb}ysb0J0xjMzayLa}t&yUuxmz`*wxoX$K*V^xAp50LGwk>lS zJL@@~CsOkiSI%Z^u(eL9*6HL)O8Py;Be3b4pw*v^`~N?(u~lS{_?*hHouNW?PV|R; z-#QJWHi{D19W&up4pyXnx>`Qis=oVAOqd>F>J zCh5+xJ%8=@b>FzGdG2`l`un~1)i=4-B!5lp^xMH1(sP~R`10KuwyS*@8k!rM4~9f0 z9`Cr`R$U>$kRSQ{`NXq(JdRfI7QA0;p15^#&MWiBx&3y1=CyAd*Umq((>(T(iGEjo zl(m;ZOG&zo%}IslPnPgBsB1)U-*Q}-YU{voXM?w&z=zUxXNA1`UnaZ=*Pd`!G7q>IkR3(3Bvb`CqB9WaQbg%S!e`mczT-X*@ z460yv*J&_$Maw^!#}ZefA1V+i}n4I9R(RA0@Yfu+Mna(t(hVh zg+9$>nX9tT*7uS1lG@kv)aGU$GH&@4)HmaES319Ck2v?F{>a!XuQu_$XB7B)y8ajQ z>bWiHlY1g}-1s;zZ`bS|GrgDShTSz!i2%VTvuI8B-ELEVb`i<$9t6a8T^v} zdwBZJixtxf4>_?Pu(SC7!!_Ps?sFPT*4r5F@?!}zw6y+wF+W$&bK7E{!p^-3iC^+< ztJU{y%|EWP{GYJIVQ-D|&mX9$?~qy{p|6}-fA>Lq|C|{We}dKz^xW+7r=oUWrnYaGbnM5| z=z05RI?Mg5yE1*BEq`*I{DIw!GHu15rx%{O&9xWXa2zP4uY9@3H2=r-{2!CWdv-D& zP~M!n_s2^8+UoaLXI$Re()H0R@k|)kJ^C5zrR_0ZTr4%&C^0% z4Tk(oKV}+MpI@x=ectJpF;OZpYYUP>);NY=UjN8@ zv-}*^hH{_s^>1{(6n=S|U-e#iv-}<@2AlAI@ATI2Y}{bvk}vQ`oiU}d@x5KG5QD(d zn`i%*{r25_d+u@h`iBp5zu$bhLZW^~HKW3tZ5JY6BK&LAVR`Tccs_sDD8g!j{U>s+p-A{yCjdi{Wa}etYp1Qgk+2UfBP?Y-tsL^c;5B#d*C$x zoR>by_j(PF{P^Mk9TyYu{{rJ!4)*XYT4|j@8aL zt>4c3zBhN;*~j(n`m+;#i_8C96n`GE`0bkt!z5w~_DapqFuyI*H>_2q87Ao*KlCafC;Qr;Q|Chu-kI??uK3IOElIpuXwjKa z<|Oc6z5eN3Rfd``jrj}AJ3hRO-zDh1SB+soy}yt0+%(>~ZoK&wb%O7Io=UFxSQ`AJ z{d){Q1IJ^L#TKH!Q!VeuzuWRecIJgl<&u=oz4O03RQ;qS!*Jtn{iakSIZ|eQ_uKpXuKONF z&k+B#`)FxBk4&<_l2@LagDs*LZ)bj>n||^C#6qjLQL=N7PUu=Y=d|pM+1m==wKM*C zR>uD0k^f%Fyt-$z3nWfOm#nR7NPEk^f49)4*yT44@2qx8-T8I<9K-EB#z*#SSi9{e zliN+p7ffy&+cq1&l?Z0v@GdlJ8XLpEXYX#OZS4Gf$h2SPXlZ=Cebe%FyLtNWRmn0m ztZ`;wxWB4Ebd78GqmOyY4%-!HyUSc}e0<{D#MY^dve|{MWmyF={KqExYVBR-|2#0Y zt1|DO$y|5Gys*`R3qq&wojC26vX0>Lo|AsUljpYG2zzSrY5D&z8Lg*Je!FPC7&B%J zw$;!5_^)ubkYrXBKnA zJa6+Kh9{nEQ!(v`soa>(lW-zy*3q2|4%;-IiAAn~*Mtwe~W#)Z(m-hJ!igY&Xk z?5d8;T-?(5_+Ec*n;tyEK3e=~{b?uNO+1xq)rMO;S7tCL9lHHx-+52= z^Edg+PFG7;J$9({L%IBqPUAk_Ln)W<_jD;OTqb)|YR_4&w+1un zT?0i-R;EQxOGuNS_Kcaq&CtB}$B~N%KFjP1^1UpRsdj#%B~Qr2w0cXUPsjAV_uV@8 ziAnKiPOnsdBWI1!^GVMt9!`04L*Tip(5IQaUJ^pR#&;(tS2MiZ@Np8Se^Oy-#b??4 z{b^xYpEq>2^EP*C>7P2aK+SEc#7$q8imc@GrJ2!_o_PdCvg|fv+PlqpnmC8>&87g; zex2v>ceHkAFV~zMEf&^hQ5seM?aazUpJl9$$F85h?C%Z#b(+Y4=OLZE=@N6pYrXsGa`&(1CW)Nx<2}7t#@o44ba%b@ z{a(q?DfIKY%$yXihcD@j=8$s zWA9d7Z?MTj>`dys1!5=C=I5>Mnl20o<5jzLrhh&G^azmX*u876Kb5-OEVZkLrpv;J@x4DT=B55z5VId02{j= zAs*+OJkwHGdCgX{+pV)y5x0tZ_xVfn|6ezPAAOwlTtT5vd~Tlj+jVO!YmK4R7|1!W zpaT_*XY&6);x$RnDX+4Bf74#EUhbQ%+-JdAR!#!%=X8j_t9<=*(@(YsX??4dZ2kuN z6gT>Bdn%&9U~qBb5w`!}vWi}N|Jf8u-A^)q%pZ*OX!H;iod z?ovL>Uv!2)Mfftyj_ZC$n4V_oDokMBIjNu_MJ1j68b%>dZ>V+c!A?<6&CfIPC;4xE zIyH5YsE5a!Ga7P<0;g9Sw_gclY`EIECyA}$scB{3zSoQVytYhDJsG}V<+6)t;UqToLIH*>ch-1E8UwrRka!{ z6wm9N&rk|kueCFKszm+n$*~`QoH975FmbQ*p^F@ULnC|QX197UYP%FLeAk-!$}E#% z(sL`5>As^``x&(?soVOxpnu+h@<8>ZHKCmouPi#ZiQ{nU&D-fKl_b`AD2uq* zO!mDwo1G!evGX3N~PUNNpBS?1|8 zX3VqP==1#GF{5J#)W5G{Z%^CPtEABNG`mgF|Isd^DaT*&C-b-!?GLkcn0|*pf6*cD zr}h0G>z&S@W==}xQf^6!yuaf5#oW_LHUWyq=7h{=YDkOyW)>-ZG(s)D%Wtt;ZmFFh z`+?@IUTebd3LVe7wjp1fzbg69^Y48Zx6Rc2S=IRdpn4N`jkxd;ldJqZzm$I#uNMlI zVOYcSwAw<#Re~p#cZ;;0{u~$gpefuv@Dy1Ot*d9)@Axbx#cZs!(um=~Ddy@UkG(fG zt0t*+T%RWRHFdJC3`^}f`4RtL(eXI)IL@*HvCMr^rZ*EFkaM$?eF_TVl ztG!|mOXAHg?~(ZQMa@y8KK)bfwd{vqjDC5q~Z`$*g#aS=+42xiRF-hu_=PV`9ry=sJJfDKLDf*N@y<^MZAX9wpxbi%W zK1P`n^18abL61~SWIlyxot>4#=3T!@#&Dx=YGt3v^xHM}+uxs@=fFGNPAuh#+^)XH z!#O6Z8RzC3oHS5+8EJEP@5(6Nn?B*8IV+qy=L`(dST7ajEOg9ZZ&Xp@%pn%)VuzBPs$VD&rRE=sy^6| zJx#S})1|zLvy2%w_{`Bhv6gkiJl^J`FBu+u-+1tG|BY1^+FY-u2&ziPW>&9O;bmpG z^7pNOigRyL@FejQMV1Vi4^7sukD2;^ncJnxA8V~{sVw)N@$7`r&*I?A9M@dcCx&)h zEadT(j+v(Vw`iNkwO9rV*ZOy%aZ^s5w7KSH_)F!#@8);G{<97|kLQ}TTisB@Lm(3C(ug!MeTykp5W%W*r?0w#o9ognJtF5el6r#eC`i!5UpyOwnglfrG zYo6p;MN7gas&2nL<@O_!+eZSOuXg1$^#BfIcqm$#C zgFTO?RLQOlUz>E$vqo->Sm~5cx2`R=aCKbeAKF>C(5Xk~bslHl_8haUgoEY12i%)y zyvlM}!cdUp$=7DwR?mKsbzXbJj91u;r>QD_EDUW6_i(W^yquS#CgCbMulGr4*mlVU z-e;5xDmku>PTg51;U;0k-s&bB z9Q)I5)1-q88)kor^o(7?8M$(nh{2}%$z6r97AmvfeCED0dzI&zghbbq$-(9yOpDhh zS%c~;jBqz-XJpv%{BQo^-u7>&B;)$^`3q}2?>#Y3WeYx~Hi6lA_Y0ddT*5O#QgXMc<}4#AaSd%DT5-)GogBt?$V7Rd+o+@vN@@o&&x< z;qRudFV8YP@~3Ogyrq|URy4bYdfq$qFwXjV+_q?&d-858IKEid+@HSRQrq;!?7)p| zd6{8T!arHZ@D)Q#EGO&>y6I2R`CC8{+$vY(Z!oo%iKA?38vpFZtV)Z zDK>xiD~5S**ZjY?uW0_C`rD-vsuFFS-`2M7c)a`gwwheg#hY~FGOm8Sa_nA3vA@4f z`earfS8;6Qk)osL<%T?5y*atl` zomg2UH92k*1H+HI?emW;oGNHndRVlg$g8ex{eus+|NqR5lqgniXlJaEPp$l#HuuX} zr1lsrlIHMRKbFZ|8L`9K(K)7(`9Mf}c}k|qqL$?{j+{~TOJ9E4rS7f$X_ehcBbAgj zes`T0EA~&dV5^^}oxjrXI5)!!mQ9D7gFgrGKY1;Ay}2+lGd7*?!1Wgm47&=;#2fxr zw|$JawY+K`P-h;$L;@YE>Vj8uJui;6WBX=S?=WxV4YlbsErx+vm)n`8t-0a`Pz?rdX z(&6v*5AD-lHZUZdQD(?v_`o;iY0T4|_AfT;UhaE$;7tPGI-ZAn9%;YX#isIsPqSvp z`ieWv2aY>MZ@ZXx$kZTh^=<9^TjyFsd#q>N|9R~D!_btj)sHqZSAUp(J>J;wy1jh% z0o?^jdpImEW-eHe#<10$qys$nY%NFOqsjl$<4KMmL%=r*zx|D`J(vG z+rP~Ixa_&#qjUMT8~-|<`gCsdoM+2cWV&x;n|-gR{rJm}X`6!C4#vn|X?+n~$uIgkNT@$EbjbXI6K|(QAyG!Ew+ZvzCF{Wms|GQc3$p@yId-p zb?E10eY-=s*7_UwxyLYX;7_eAy8QY2?;4g}v%;oiwoOq z$i9_B^l_!ax7a_YqxG0K#GNoYePZ^-$oqUXpF2}yY|p<|4*L)-@n6!;G;ROqwyuvh z6L#_ad)>8{VcWKbnNmj|cW%_NFE;zUg*Wzq#^S!Ktbu8UqToFBGp;?6QFua7J9 z?K-a>IGlf{;A)s&<&V$t_D0;vcAO9L7}^61rfq&+aLSqsX9a)d#a>>!&lk#9*=F`w zvOKsMH|cEszt`^H;yNs2eO5@E7eAJx{vfuGZ}*V^!+G*)3^`Z3-EKP68*5$r@ZXY0 W?90F6CAimage/svg+xml - + @@ -112,62 +112,61 @@ id="layer1" transform="translate(-1595,-435.86218)"> diff --git a/docs/design/tessellation.png b/docs/design/tessellation.png index 8c773ea76c54eb51b293488df443b84a5ad1fdb2..0e62d0704e5f371a9838a849a5327675ee9ca3b7 100644 GIT binary patch literal 20888 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 QdO`8+>FVdQ&MBb@0OG5?N&o-= literal 21140 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 KG=O>!uy{T6gY0{dO-v`T0(# zNS(>fR~H3E^8B^_RQK$kLh<|1dC#S+-bOCe*~b5N>jl{~vHC?0o1V{I(Yi`~{hycp z?@q?sZb_5dzi;dMeDmMuCjXq8^ZfkHt*Mhr-d0yDZrZnP#n;Pa4tekRN{WxieVG%R z`}&RM?tgFXllMn$jZwWVxqZ^xgE!(2{QEk8_Op-dVNq2JlKcPuT3Z`?f0OpjFtOS1 z9({W){jJ!uPWATT^l4l6rQQF1`)}j6?{BK>fA01FlXrD~=DlJ~&;8YZ96$f~JImYi z*V)SF_vD*nyl(CIb5A|?J7=S1@zb5^cPk65YfsqB6RA~gwdLpAN&YUgUG9sX1}7xBL4u%|*Vl&&;!W%aE#l^VR9P zx3AV{-&~h>E0<%^{bvHJ*mR;#KD)XR6tpQZU!Gi<_RmH2w$7PSy`?w9S)A)0X>8{#_?8Fv7FFkEnZ3#~dGq?3Rb6u6lv|HiTz|Fq(CT079=Lwi+q_xg z$4;lnnAa`qHgC2#bzJIcT=vy1A!6qFzjI^eO$}R=x}3{yimQJ6q%E5=%w4z5?u=Ub zIaK6pTh_Vj94wn77AElKONP&@-lTnV?uCV3+paxm`#mF0HG1{TjDssBwWCjdJJI_2 zokd#g$!}-3uD|wFy?yK{zuo&?;^$^+!7}F0$I0imX?;+6 zBDCU?w7%W#smA5`r7Ih`P=*Vefa%1 zdHLDLvv)h^zPptl@#OKwO^4!s=xz_z-TtQae$wT2f2J;p-8uE8^!h!26R+?6(88Iz zQQ1B?PV76|%x`>e{w(uc)3*5of9l8c|93p?JN)@WmiOz`-yXMax*>lnpTq0YFG=g* zUW*{*ZSm#COQlYpTmMX@yM~3Efq}sx^+p4zKwH5hEdZjYqLp)L&vYYF_kMh|`JKZa zx0V{4P`hofFP}0~`txgIXnD`(JeMD@X6JslS}&-0r4N#kY>CJ4b zXSQJKgsOpjT>U@Ia=APAw!Yr3y7KClYzKc`-4|CT+5XotNzyg>GflHx=J&TfRlDu4 zyxn)#CZtDQ>)5xLy%%zJ=+0ih@4sg8W!p!og)>C+a_fYyPd!q$%qcRa^i{rd+fNtg zO6VKx?GJerqPak}E~&*i%&#ce(} zb!|%ZmpSp}RKF7?s^0#aaxJv+^E~gD|JHJ`1e}|#Zi}E&1tL@pHnDU)i9D~5Z?&jf6e&E$@aU?g1f6{9uvQ;vM*(>HOH1e zOFHich!~yW+Mc`O>X+GeY>R6S+X&|AzW)1X;zK>_Pw(GHJU3bs{z!`9_u<6fB0XOs;4xa;hpl{YFmZ}d|A)mFA|PC p94$6AXNLO|AqEB+b>b55Gxo+8GNt`yAC*A~!PC{xWt~$(697ZX$p`=d diff --git a/docs/design/tessellation.svg b/docs/design/tessellation.svg index 2cace2e..7f31851 100644 --- a/docs/design/tessellation.svg +++ b/docs/design/tessellation.svg @@ -16,7 +16,7 @@ version="1.1" inkscape:version="0.48.1 r9760" sodipodi:docname="tessellation.svg" - inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/tessellation.png" + inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/tessellation.png" inkscape:export-xdpi="61.016949" inkscape:export-ydpi="61.016949"> + + + + + + + + + + + + - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + id="image5005" + x="680" + y="612.36218" /> + + + + + + + + + diff --git a/docs/design/texturesidesteps.png b/docs/design/texturesidesteps.png index 2903b5877911f7d3dc91616b6e1a0fe7b1253768..3658f0ba97d1baadea202a8f402528977b758e3f 100644 GIT binary patch literal 11150 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 diff --git a/docs/design/texturesidesteps.svg b/docs/design/texturesidesteps.svg index fdb73f2..d1bd219 100644 --- a/docs/design/texturesidesteps.svg +++ b/docs/design/texturesidesteps.svg @@ -13,10 +13,10 @@ id="svg3039" version="1.1" inkscape:version="0.48.1 r9760" - width="109.7519" - height="23.529022" + width="94.947617" + height="23.119883" sodipodi:docname="texturesidesteps.svg" - inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/texturesidesteps.png" + inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/texturesidesteps.png" inkscape:export-xdpi="374.69849" inkscape:export-ydpi="374.69849"> + inkscape:snap-global="true"> - - 16 - 16 + 16 - - - - - - - - - - - - - - - - - + y="9.1254139">16 + + + + + + + + + + + + + + + 18 + x="90.129257" + y="12.630968">18 + transform="matrix(0,1,-1,0,98.015795,-0.16545677)"> + transform="matrix(0,-1,-1,0,98.015791,21.422651)"> 12 - + x="38.85527" + y="10.125414">12 12 - - + x="49.200108" + y="18.765217">12 + + + + + transform="translate(0.52887687,-2.7706882)"> + transform="matrix(0,-1,-1,0,47.015793,15.893638)"> - 12 - - + x="80.560547" + y="23.046446">12 + + + + + + + diff --git a/docs/design/texturetopsteps.png b/docs/design/texturetopsteps.png index bb896104f13fb7e54b8eef8cd0806008f12ef35a..d7427f497fc60116125b7bba7d9f7d35ab68fe15 100644 GIT binary patch literal 23153 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 + inkscape:snap-global="true"> - - 16 - 16 + 16 + y="13.329247">16 + + id="g3167" + transform="translate(-0.2237942,-0.23819646)"> - - - - - - - - - - - - - + + + + + + + + + + + + 24 + x="91.225609" + y="30.147282">24 + transform="translate(84.750792,7.1309714)"> + 24 - 24 - - - - - - - - - + id="g4384-6" + transform="matrix(0,1,-1,0,114.68086,-0.67867225)"> + + + + + + 17 + x="38.520332" + y="13.949646">17 + 17 - - 17 + id="g4430-9" + transform="translate(39.446396,0.35084349)"> - - - - - - + id="g3273" + transform="translate(1.3298097,0)"> - - - - - - - - - - + + + + + + + + + + + + + + 24 + x="138.72321" + y="22.759771">24 + transform="translate(132.75656,-0.64915655)"> + 12 - - 12 - - - - - - - - + id="g4384-6-2" + transform="matrix(0,1,-1,0,162.68086,5.4158408)"> + + + + + + + + + + diff --git a/docs/faq.rst b/docs/faq.rst index eed8fd5..007b347 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -6,7 +6,7 @@ Frequently Asked Questions Are you using the ``-z`` or ``--zoom`` option on your commandline or in settings.py? If so, try removing it, or increasing the value you set. It's quite likely you don't need it at all. See the documentation for the - :option:`--zoom <-z>` option. + :ref:`zoom ` option. **You've added a few feature, but it's not showing up on my map!** Some new features will only show up in newly-rendered areas. Use the From 2836c6654886d89b2eada1a52e43f5dd5b737e32 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sun, 2 Oct 2011 11:53:32 -0400 Subject: [PATCH 16/40] converted explicit documentation links into implicit :doc: references --- docs/building.rst | 4 ++-- docs/faq.rst | 2 +- docs/index.rst | 4 ++-- docs/installing.rst | 8 ++++---- docs/running.rst | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/building.rst b/docs/building.rst index e73456f..21f4371 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -6,7 +6,7 @@ These instructions are for building the C extension for Overviewer. Also note that pre-built Windows and Debian executables are available in the `Downloads `_ section. These kits already contain the compiled extension and require no further setup (so you -can skip to the `Running `_ section of the docs). +can skip to the :doc:`Running ` section of the docs). Get The Source ============== @@ -152,7 +152,7 @@ regular user. 4. Run Overviewer as usual 1. ``$ ./overviewer.py path/to/world/ path/to/output/`` or ``$ python26 path/to/overviewer.py path/to/world/ path/to/output/`` - 2. Proceed to the `Running `_ instructions for more info. + 2. Proceed to the :doc:`Running ` instructions for more info. Installing the Compiled Code diff --git a/docs/faq.rst b/docs/faq.rst index 007b347..8e6cd16 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -18,6 +18,6 @@ Frequently Asked Questions **The background color of the map is black, and I don't like it!** You can change this by using the :option:`--bg-color` command line option, or - ``bg_color`` in settings.py. See the `Options `_ page for more + ``bg_color`` in settings.py. See the :doc:`options` page for more details. diff --git a/docs/index.rst b/docs/index.rst index fb5e7c0..5acb4bc 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -26,10 +26,10 @@ our `Github Homepage`_. **If you are running Windows, Debian, or Ubuntu and would like the pre-built packages and don't want to have to compile anything yourself**, head to the -`Installation `_ page. +:doc:`installing` page. **If you would like to build the Overviewer from source yourself (it's not that -bad)**, head to the `Building `_ page. +bad)**, head to the :doc:`Building ` page. .. _Github Homepage: https://github.com/overviewer/Minecraft-Overviewer diff --git a/docs/installing.rst b/docs/installing.rst index edc96fd..a9b5b4b 100644 --- a/docs/installing.rst +++ b/docs/installing.rst @@ -3,8 +3,8 @@ Installing ========== This page is for installing the pre-compiled binary versions of the Overviewer. -If you have built the Overviewer from source yourself, head back to `Building -`_. +If you have built the Overviewer from source yourself, head back to +:doc:`Building `. Windows @@ -18,7 +18,7 @@ right place! For 64 bit, you'll want these instead: `VC++ 2008 `_ and `VC++ 2010 `_ -3. That's it! Proceed with instructions on `Running `_ the +3. That's it! Proceed with instructions on :doc:`Running ` the Overviewer. Debian / Ubuntu @@ -32,4 +32,4 @@ Ubuntu users. To do this, add the following line to your deb http://overviewer.org/debian ./ Then run ``apt-get update`` and ``apt-get install minecraft-overviewer`` and -you're all set! See you at the `Running the Overviewer `_ page! +you're all set! See you at the :doc:`running` page! diff --git a/docs/running.rst b/docs/running.rst index 8c9904d..bd8e407 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -33,7 +33,7 @@ And similarly for other systems:: tiles that need rendering on subsequent runs. **options** - See the `Options `_ page for a list of options you can + See the :doc:`options` page for a list of options you can specify. For example, on Windows if your Minecraft server runs out of ``c:\server\`` and you want From 12a81a2b47e956e42534d38888e76a1631a3c523 Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Tue, 4 Oct 2011 23:27:30 -0400 Subject: [PATCH 17/40] Fixed the contribManager in windows binaries --- contrib/clearOldCache.py | 3 ++- contrib/findSigns.py | 3 ++- contrib/playerInspect.py | 3 ++- contrib/rerenderBlocks.py | 3 ++- contrib/validateRegionFile.py | 3 ++- contribManager.py | 3 ++- setup.py | 2 +- 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/contrib/clearOldCache.py b/contrib/clearOldCache.py index a7000e1..03650ce 100644 --- a/contrib/clearOldCache.py +++ b/contrib/clearOldCache.py @@ -18,7 +18,8 @@ import re import os.path # incantation to be able to import overviewer_core -sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) +if not hasattr(sys, "frozen"): + sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) from overviewer_core import world from overviewer import list_worlds diff --git a/contrib/findSigns.py b/contrib/findSigns.py index 2dbacd8..8961365 100644 --- a/contrib/findSigns.py +++ b/contrib/findSigns.py @@ -30,7 +30,8 @@ import os import cPickle # incantation to be able to import overviewer_core -sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) +if not hasattr(sys, "frozen"): + sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) from overviewer_core import nbt diff --git a/contrib/playerInspect.py b/contrib/playerInspect.py index cf12ee3..638e1b0 100644 --- a/contrib/playerInspect.py +++ b/contrib/playerInspect.py @@ -5,7 +5,8 @@ Very basic player.dat inspection script import sys, os # incantation to be able to import overviewer_core -sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) +if not hasattr(sys, "frozen"): + sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) from overviewer_core.nbt import load from overviewer_core import items diff --git a/contrib/rerenderBlocks.py b/contrib/rerenderBlocks.py index 7dde88d..56f6bcf 100644 --- a/contrib/rerenderBlocks.py +++ b/contrib/rerenderBlocks.py @@ -21,7 +21,8 @@ import sys,os import re # incantation to be able to import overviewer_core -sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) +if not hasattr(sys, "frozen"): + sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) from overviewer_core import nbt from overviewer_core import world diff --git a/contrib/validateRegionFile.py b/contrib/validateRegionFile.py index c723734..75b6a87 100644 --- a/contrib/validateRegionFile.py +++ b/contrib/validateRegionFile.py @@ -9,7 +9,8 @@ import os import sys # incantation to be able to import overviewer_core -sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) +if not hasattr(sys, "frozen"): + sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..'))) from overviewer_core import nbt diff --git a/contribManager.py b/contribManager.py index 29737eb..00f3a09 100755 --- a/contribManager.py +++ b/contribManager.py @@ -8,7 +8,8 @@ import os.path import ast # incantation to be able to import overviewer_core -sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '.'))) +if not hasattr(sys, "frozen"): + sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '.'))) from overviewer_core import nbt diff --git a/setup.py b/setup.py index a0b8e35..cd1b7d0 100755 --- a/setup.py +++ b/setup.py @@ -105,7 +105,7 @@ if py2exe is not None: b = 3 else: b = 1 - setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'} + setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter', 'includes':['fileinput', 'overviewer_core.items']} # # py2app options From 8904e20f21492571142b519dd908c19e123d6fd8 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sun, 2 Oct 2011 15:13:17 -0400 Subject: [PATCH 18/40] changed version number to 0.3.0 in sphinx config apparently readthedocs didn't like using the util method to find the version dynamically. Probably because it opens a subprocess to git to find the version. --- docs/conf.py | 5 ++--- docs/design/pixelfix.svg | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index b5e8e4e..ba5b27e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,6 @@ import sys, os # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) -from overviewer_core import util # -- General configuration ----------------------------------------------------- @@ -49,9 +48,9 @@ copyright = u'2010-2011 the Overviewer Team' # built documents. # # The short X.Y version. -version = util.findGitVersion() +version = "0.3" # The full version, including alpha/beta/rc tags. -release = version +release = "0.3.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/design/pixelfix.svg b/docs/design/pixelfix.svg index d14ee6c..b61a06a 100644 --- a/docs/design/pixelfix.svg +++ b/docs/design/pixelfix.svg @@ -16,7 +16,7 @@ version="1.1" inkscape:version="0.48.1 r9760" sodipodi:docname="pixelfix.svg" - inkscape:export-filename="/home/andrew/mc/overviewerdocs/design/pixelfix.png" + inkscape:export-filename="/home/andrew/mc/overviewer/docs/design/pixelfix.png" inkscape:export-xdpi="61.016949" inkscape:export-ydpi="61.016949"> image/svg+xml - + From 7f82a5e91ab79f2e1605cca4b3b9aa4451783216 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Thu, 6 Oct 2011 23:15:18 -0400 Subject: [PATCH 19/40] wrote chunk rendering section of the design docs --- .../cube_horizontal_offset.png | Bin 0 -> 16204 bytes .../cube_horizontal_offset.svg | 286 ++ .../cubepositionimgs/cube_measurements.png | Bin 0 -> 12122 bytes .../cubepositionimgs/cube_measurements.svg | 418 ++ .../cubepositionimgs/cube_neighbors.png | Bin 0 -> 8207 bytes .../cubepositionimgs/cube_neighbors.svg | 207 + .../design/cubepositionimgs/cube_stacking.png | Bin 0 -> 13312 bytes .../design/cubepositionimgs/cube_stacking.svg | 183 + docs/design/cuberenderimgs/chunk_height.png | Bin 0 -> 77870 bytes docs/design/cuberenderimgs/chunk_height.svg | 4240 +++++++++++++++++ .../cuberenderimgs/chunk_perspective.png | Bin 0 -> 43566 bytes .../cuberenderimgs/chunk_perspective.svg | 2104 ++++++++ docs/design/cuberenderimgs/chunk_topdown.png | Bin 0 -> 4199 bytes docs/design/cuberenderimgs/chunk_topdown.svg | 1869 ++++++++ docs/design/cuberenderimgs/chunk_width.png | Bin 0 -> 52924 bytes docs/design/cuberenderimgs/chunk_width.svg | 2210 +++++++++ docs/design/cuberenderimgs/cube_stack128.png | Bin 0 -> 29797 bytes docs/design/cuberenderimgs/cube_stack128.svg | 490 ++ docs/design/designdoc.rst | 141 +- 19 files changed, 12147 insertions(+), 1 deletion(-) create mode 100644 docs/design/cubepositionimgs/cube_horizontal_offset.png create mode 100644 docs/design/cubepositionimgs/cube_horizontal_offset.svg create mode 100644 docs/design/cubepositionimgs/cube_measurements.png create mode 100644 docs/design/cubepositionimgs/cube_measurements.svg create mode 100644 docs/design/cubepositionimgs/cube_neighbors.png create mode 100644 docs/design/cubepositionimgs/cube_neighbors.svg create mode 100644 docs/design/cubepositionimgs/cube_stacking.png create mode 100644 docs/design/cubepositionimgs/cube_stacking.svg create mode 100644 docs/design/cuberenderimgs/chunk_height.png create mode 100644 docs/design/cuberenderimgs/chunk_height.svg create mode 100644 docs/design/cuberenderimgs/chunk_perspective.png create mode 100644 docs/design/cuberenderimgs/chunk_perspective.svg create mode 100644 docs/design/cuberenderimgs/chunk_topdown.png create mode 100644 docs/design/cuberenderimgs/chunk_topdown.svg create mode 100644 docs/design/cuberenderimgs/chunk_width.png create mode 100644 docs/design/cuberenderimgs/chunk_width.svg create mode 100644 docs/design/cuberenderimgs/cube_stack128.png create mode 100644 docs/design/cuberenderimgs/cube_stack128.svg diff --git a/docs/design/cubepositionimgs/cube_horizontal_offset.png b/docs/design/cubepositionimgs/cube_horizontal_offset.png new file mode 100644 index 0000000000000000000000000000000000000000..74893d38e4c8353df7da140c67068285ed4de31c GIT binary patch literal 16204 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 literal 0 HcmV?d00001 diff --git a/docs/design/cubepositionimgs/cube_horizontal_offset.svg b/docs/design/cubepositionimgs/cube_horizontal_offset.svg new file mode 100644 index 0000000..c3790fc --- /dev/null +++ b/docs/design/cubepositionimgs/cube_horizontal_offset.svg @@ -0,0 +1,286 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 12 + + + + + + + + diff --git a/docs/design/cubepositionimgs/cube_measurements.png b/docs/design/cubepositionimgs/cube_measurements.png new file mode 100644 index 0000000000000000000000000000000000000000..973a10e8f053d998f8e69b3c1302034cfcf8ba0f GIT binary patch literal 12122 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 + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + 24 + 24 + + + + + + + + + 6 + 12 + 6 + + + + + + + + + + + + + + + + + + 12 + + + + + 12 + + + 12 + + + + + 12 + + + + diff --git a/docs/design/cubepositionimgs/cube_neighbors.png b/docs/design/cubepositionimgs/cube_neighbors.png new file mode 100644 index 0000000000000000000000000000000000000000..fd69adf4acce0ce8d301f1ee495e4289c1dc8a44 GIT binary patch literal 8207 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 literal 0 HcmV?d00001 diff --git a/docs/design/cubepositionimgs/cube_neighbors.svg b/docs/design/cubepositionimgs/cube_neighbors.svg new file mode 100644 index 0000000..e376fd5 --- /dev/null +++ b/docs/design/cubepositionimgs/cube_neighbors.svg @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + 12 + + 6 + + diff --git a/docs/design/cubepositionimgs/cube_stacking.png b/docs/design/cubepositionimgs/cube_stacking.png new file mode 100644 index 0000000000000000000000000000000000000000..ae0fbaa25691c420b941b5dd4e6b92bf8bf7a01f GIT binary patch literal 13312 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 MboFyt=akR{07o8X + + + + + + + + + + + image/svg+xml + + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/design/cuberenderimgs/chunk_height.png b/docs/design/cuberenderimgs/chunk_height.png new file mode 100644 index 0000000000000000000000000000000000000000..f56b28260b3ca4ae0888d8b5067436f51a686629 GIT binary patch literal 77870 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�-?}56 z-|k_0|9e+Rxc3at#>;kmW>d3oOQy!1+ra&A*}|T6yZYx}N?2vwo^3tnmBEzXnG<%Z zE?(ZWPKrC`a^6^ z%4f}KyE138{r<-F!RdHxqiA{0+*fBR?iTLUD_>A`q&%kY`%X318QG3!cesCMkr%7@ zv(fsy@PRT8ex_3ayDTl-KlnP|Wa+*sY*&2#qGQN1@%hTfy{=qQE4|m(b=YIV&Quq_ zZHt1ZhcjCT2b8jD1y4WN@s8)ge%(3C1s*U;CtX!)^7`I-^eW$zuqyUn)y&%tEo*z0 zu((P8$eYWz5A2rN(Q#|#xwdn`@4w^ySvvUQxrK`nvyzPF*YBwuHzu@g z{_+5`8PmI>zq^GZR$k5is(bKvKp8um*I_Na|JNJe*CgD$uq~)T{8#ydJ3fbZ^{V&rx%J8Kb=B zD)AkE#TP#kvOjO@-g&^C+jH*8fVqlnC9mDKP3N*n5YCylRQNaJ#8bgHw_l5TDJzk| zdxNR_{jBa(p~!Whtk~cExSKUz_QFzLeGi!fe#c(1zLQaJIq=?e z=_j^UHCjLC4B2BP&lJX)dzxjJMD$hVee>H7eAhaa7P{axD8E=w@ajAHpHaGP+fz_| zod1#I$3Fqkv9U&#v6mKDIrF@j)qA8`y5jiG^F9Uh-O_9OYO^0oYVBrb-kZ3wfS+N0 z;#Envr54*jb*Hq8YU<772Ub@$=^cxcsM)+xVhKaZ&Ngw2>W2kw*PZ{*mn<>dw(8*b zR;>$9rQ#mEkriROA01*N+|8jMG3QlP&H87YyCkYFzT(jr_GFy)KxQwK&6-<>_J%P1 z=Jqal8{PDM@f*G$&+c)o-e0<(`TqOHr@}J98Xuf~^B3*+y1MoB2}94)BiF1BT$!-e z@4*YE_rEJvtyc9>bzXN)ZJQh8WQj)!=5z9NN|sJ|#S?Mh$D9jW_j2b%O#tOQXWp&$ zlanXC>ey?#vcep~zFT4Q*$N9g~htE7{&YqS~9cb`aA+T?UH z);VyJQai%}mKVg`&?|iX>XJ8_c<>RJ5&w=hVr2 zbxNP)3JlGJewlq^wP)Gk?lMn&qHpo0tt&e2^c*ZH&WS4I5%b>0{GqYKM_}Sa%bU^8 zF6)jj+qpdH{q2%9Q^H>gP0a5+!5r~yR=UCZ)3qU`StnyZGua=?zRs4@Wx4sv+|SFW zyH&iKvGLrsf>q0{j6>5GRQ2YG8ScNba^9;y92RPaYh~S!7Cz-n(sB%*y=l$TN!l!$ z2ih*26*9)-%hTzV!nEn zd)2iU8|L$8u5Nm6b%=SNbE@w@rG%Yf^8@d9WiKs1uw5-bU~BmGr!Cjco??o7v2{gw z`Xh^dDhs+Tm!*C<+OY0rls`+&AAZ=J2IPea;t2eU>UL`@|gJWNqgLrYD%Y)a9cN5rmtrlv~`z6l5FQQ#6Xxht_#eEt-%+_y?j|qCd zwV__lc`Yo3g+u zKBScCTlQbB1j#qtUrKZ`^Y49=J9e$|8IyDDZ0?xltNNej^6wD&{fSw^Q~l7P1Ggsp zR?jj_FfkBWI{Dy?%K;PgUcZ~OwsGm7UHsMipB-NJLi7#$rQ?-SL08K+p5pm`piV`X z{f|TF_Q0zrD{p0mDt)pQtmLWQCwE}ZalXK-=HBmSg>!#8@cMDk)&DDAiAnqrW1A;5 zG210&>!jUc4et}y*gXi2F#D6Kr;>2cCa2@XdY323XM(>}=G5jh=S00z5&Rk9(s%ac zHF4JzC9|Zv46`puG0B`4dA31qgWasz&41oEy1q=ae;~XpX=AK*f}c=3w+ zcYJ8tpY)LR{?TQk_U%t!#R$yMP&(gv;`-)WMc=}NCuVO9{9(hhW&4U(zLj(AyN_(? z?eIDD?r?3yfgg!-CABfB{D!rswo;PiAE;=#*|16OuFc&?CeKtgx-YP5$X>mA&UxFk z<4m)6Z_M0g+|VbsZf)jQrtR?-o~5U+O0J0C`yl7REwS@6Pft+`J5d>(v$oQ#Kx{*Z zcI~INw$U$TKdfC~e$CCwao6(K4W`bwy%^(O+)rG8Zf3;1gRDaHUe8Ed&~2$Eb#8)2 zG4}?Y0)OKRM`g-u_(lvn62f0om(8rEL-yTvv-vVY6Z1 z^>$;{r_Fcz+f}1qcIUsn>-D}NpLPGiu!oi!FN>Hrgxx&Ay;rX9@$8EnHGC!VOBrL& zST1_Vvr$wl$>DlXQ2K)wtq-=7IZE`^8Do3aUc4a{?EK+qgI;MxqxJbl!4J6+>HC*l z1+_@0@jl}`v-o>SLTA{o2hsO4K!r$L)#AihEmxc6jMtaj*p)wM-PXR^_{@Q2+TsPb z`}i8)eGGFDPu913WPNDwJ{{5X*LSW3RZ^@q@r!2vf6Bf~B0BKHU$*Gg=fML<(V!at z>?-juQXlU8-61o3+aH!6rW-1*RX>dWz5SB)gJ}Kz55@S)m;YAU)!FjyzAKadmiR4J z&UvX-uWoSn|FCjia2jMzc@X~(w#%|iv4Rg-7jJyUb9Z63w#uFZH@m~qJ)-w6D0pCb z;jcjV;@Pc7|LacszW2l0+S%VP$s`0_J-O;vZi4Nb(=P)BcSgEg)7_c9qOvruv6nB8 z#Vu+7q5NZB2cE2b8M1GQ^@go;b{>#kbt|%A?{$eoGFA;s1=*Oz7X0^P+-A2R=(paE zZGJp_o4GfX%TMF<*jVKFIHWXNS4~G{s>>2*m$G9vt@;P&Eq@wP8Xj7^{?5J1ugh#c zu&oFw?OK)B-uvSjV}Hj9U8PNNpq&3aFR3-VTJZeP3X9jh z{)$Iw(|VrCk|hO()|&**KUACA7%Fi(L2kOEk*CYGQwPI#R2?igY+uUSICbM2gLbCP zpH`g{SQ%#^bDG73qd9(M(SqBe(idZU&SvxkT}=-8`nRb1d1%)uxujp$m)V+$ zmP&tEdg9xmy*p-ZQ3ehfh7#tMx~vOA2N-?(iy%bYZ$+9xH&a1uA?yG zrQ1%i4S51KfMXzP-wsvBauqoy&r5%XO+B7=MQ~ zzWd3d$hq~wY@Ri94}`sX#rkf?v;*#?LC>Yqrx-Pgf3DdQv+dOOe>Xun;qA>k;?WOM zznAOetqXb3x=nS}xeHn^lFn^rocijPyr5T*?9F`pwhwl)8oNP5xB7}dPAsfyv_9_@ zA-kQSW`Fl?ca=490ZJeA4x}-xnl$bAv*;aD?=jxLwVQEulHnNSPf6l@}p;L_wn|CDxBBSywTpfPt|_B>p9oqvDI-grac$-9h`NR`-@+N zBWsOpiLzyr-Y@Zn{M2199agpkh=|4su*DbX3y15!;C*0u;caJV4~LLg#f6{Owp8l- zu6GH#njTsjo|E-j_CcKBPHz`8t)1B!ORWySI?z4i_FtWxRoVNPeAYFK-e*mf;HJAO`f1sY=8KYYi#S)(%*t&=L+U@=uG(f zN2#cxV-J5!$5V#CZDp?w5@PM1YW6WcTRuB@Q`Dh=&88bHPOU9j7}LC|VHMxOW$(h+ z<_SzZUc{9i;q3CSCv~%A+tMZ0(%ktPp?oF36BbzWYM(dp3iS`W+JEZp-0=8G?DN9C zgRVXgEj7>SeQ)|8PjIL8`cH|FPo=Tg_xUX+p z*1fn|M!R&&zEydvR|QACs9h&CaiP*Cd9%=3EisdQdsfX`WO@DBXDNwK2R@%t39WSu zt#4ZUaWB)KJO!O&3=I7Co-U3d!7gfDC(@pN;|bXs9lHM5GArf}dzF+PPrCA0cw)0l z3R{64+pe>R7j$nlciml@n-H7!Ifeg+pWlU>3O+TSOc!FGI(%0Sof~>QPNGJeG1w(# zQ%8?)L2h>E3EqeUKNQYLrtUUly8BP!h2Jr^D~m(EhVWah*8#c5b=9v$tKK#CTEsEE z6PZ};n(}$lZZX#TjUh(ck2Lwa@D(nw=ARwI<52GJR6Tk1fpQrGp{Gk`%)QUL?NAuY z|7koWhTjf7kY@H-$8IMW8SRpHWYanh(F?Zoj)Wb2B`}eBW9bdyjq*~9L%v==_~P1W z?QWY7dy1y6+P7v^b)s^g_=ZF4cPG93vh-BrdnuhAc0Bt&Ds5W8eAnlU>VMk=997gs10s=J#%?r(&W5m&L%4Uu9EOUKanUIllYW+b0jwdz+6 zSM_w};*iq+EWgVbtdm|l#~*RCS^uq|F&B8QXhN;e=2=@TD`l&rmOLN-=yEycw@Ac{F4ex^%=Vv zXLp?t3H__ErCMC9;qIzu>}6>JhiAyArn0P7-oOyMhyO{TejM*Vcb98NJ}u@u_UiFk z#+V5rWv-_h^Wu3*WFyY*>kj#PImr6i)&HSo3Jda?S2Lbw6i;k?`2V1rK;dsyKAV1- za?6*icdmbwqub(2U@arM$S)Sm9_V^UjYvn=m{r2*6GrjN_A+ZmNl)v47=Tby10u=4Aw zkguUzUmg=RJl;9m^@*b3%}r0%F_x@;wN=7|@4zza<((%!=5=lLQrcu{rW&p+80q7Z zm#Xo815b3J;31Qi`2jP-f7%rA9nwBf*OS1ZeyU)ms?vV1+l7LWu`cTl@6oe1NS`7b z^7Z7F=cl5TjGSER+NLI3$#gG`b__iqX20t5E7!^gl~a{MYkfock7yO!bNz93krSJ^ z*6W>A)Z05n3>$<6KXjhpc;J8F(!*rg7kP;q@537N_+RNOv>e>7uPkxM)AQhS2XU4j z_J^#uv#Wh#czKX6T>o^cLSPuSJskW#;$dp}Ecd^+%1D|FSbU903;8s95Ea1*R# zxv}WZywFB{j`SCd^3%?yI?j3R>HqNR!ab)i)lBCWZqQp*@u5}-lxK8Vb}2^8oVSf( z?&Wn7FZd3>y4V|bwb=H>o>NoU=YcxE_XDmrH;Qi9y4ODGr@?K-@N|>D{PG0p?K_QG zcCFpX@KChHHuJ9P8mXGktp}ewlA>eK@0G8jS5--D zunD{UE-PVDM^3cSkG?~n+GkDKF5#tq{PIc8h$jj2X7Ri^Z1b;klg8$T>d;c|+8Ucyo zTRHdhCoctloAq|8p|#_Kt1So6;_dJ5RNFK&6~__3(c?ResX+sxfdqdi0Qzb^Rv z%KOuS&#xvIJ+NkCzJI^LK4J0tzzP2|PTZW`lA1Jg#j5;dKB@Ot-^et)k7O(4Y~InA zH*N9k$17Rm8FqcWTR2%TFWoLEe4Dn*{6x?F%NchkZY*h0km6cnSKu*^U zox5(8d(wj4tUru4w069i^S$G|@7#ASm062cy-%F!`{*j;8y*{9cJa#xOEdU?$T4hN zHu-DgLY_@?jCnHIFLa)8QYvCH;PVzOlbH7CZNFSeTy3OWMciMfRlnw~lI!&~k7JGD zvC&o9{e)v*?*^f@^_+XJ)p+SM+z;lMe&L|#fnx^@*o-B2Oys+EYGu2miV}DCiOz_l z9djF<4KBn!bbNkQ{z>EWtLvAndcXRW;f;>>ZaRTqjg>wr3rbG;_+>X^`Knhv)B4^W zP;=>Ln3l$8?l8L{Pf*ZOa`vt}oE99~r%RTuDw}%CQh&Y7)5hml^_Q+P4*41$F?aWC zL-on&E>DiHZSZ%QcDSLu?%6p`1C{B&%5UyUe0kv?Kl9yhH)cJ_T4i;x`P^#zQ_SaA z$9spSuXyBqayphj}kxDF`Z+ZCp^)1gBEk?Q@8T!gq3@LZ4wihczMH;bN3H>Nv~bF>iUi? znQ?J{qxL=8dA(s$l<4Qju1~f{EPA}Tp??DdTC zzwd33wt2FLZPp)-^Vtqwq4ptHg*Te+^WHe|ev07DXqPsY-<>D)4ul=>KlLJAtn-AB zQjwKesikOib4+mP`p+96#hBEEpsW2MUsZT2rZetmnQTZaTpI&|cbh*jiU%f6*iVr+HP~Kp8;8Db~3ELZ=H;Uh> zpU*mvu37;NXFm2cBiUX$_0_Q2l*))9-IFEwPS6P13e!+u6^;(vzkjQtFABc6U(c);s`#{01jotnAS7Wi2_+V7>a)*{9!5 zonBoFN;A)&JbK>8+;{X+&Dy1_{8eq^LhTvfmFS+_w_j}H=M4wmJZ@Yp`$Nz7{_i(J z6H_-hZTZdM&uG2!m2T>nqo-HvpJYD2+TYW~E!j0;I{UW3tGBBUuUmDF$xnRZXTuM@ zhq>n4UCg!&PGkHas5f{4uN#gUTQ~l&B;%a?&uX^=8w6tpG+=2(z+!6Eg zjunc?Z<6_JA^pQdU3q=dziEpD|D6gEONkDR-N$pGy7DVKD8Mv#nr_`Tah2co$||Gz zpDLFXTeurG>l;kJf63}c+`&!JeQrA^K7Wy>T^k&J;rm|auIb@ol@BT_pDKj@4GFD3 z9y2YG&AmY7{ijO1rzN{)%>AHpxnXah+vT(KE1UebU3j^xtL)p~maB1bZx#4$^w-NQ zT~!?NRp!}8SGy-1eQ8$SMzb&fxMDf?N|x3J_RkR$^VU5x+;zjr{=(MKtt-V>PM;oL z)YR8OTMg$=wLq&}#J+FEU@<@g|-AfAx;!1uxFRlnBV zu9KMdHzo2x;DeqI)Ax1A@cv;s-BcvLVK=wn3)9XMyAH5Q`d@BbY85S&XrQpp?6CTQ z*AYkCbZ%{W>h&frj@iYI@4Pm@?*XkeeSytyg%U~=%5^SOo4)au6O0tKVEtkA!Ct5R zsjJeaO{>bfPke8fzdJep(5oAB`z&96Uv}?k*YRfy9W|sAG|$Ab$DMh($CcH!qVlWs zPr-TNdO{Pu8!A^-1-#fQx}oLl>{YM+8XkYcE3;-*_U?N9Zp+8@j-mGjCeChrxoX$; z+xv{!F1X${T%H=%dE!BVQ?|bT`kJS6!}fGt`E{WEz%ivyQ#x!kl&ssf-RI#Eov7^c zBsxOjJ49K@#D3WykKf#R(kC1ELAA2-tM^Y$-}OpcdCbo4WDHxC#+=a9;S+wfy5ai<%~PKn zw{Lh}c>BV~?j*aO#-^A1k8YTlu-l_iyK(NuNluA(8GCsDRx>}aTC<2*X_JkaYK=vK zty$AvzSVCoC=1>cj$nx}`v0!Fl9#9QL8a(Q$pZ>ntRd>%C(I7;-4Oq`F2e6rYDj5Y zM-GpTijueW@@X>waV^sT(lJPqjwRtcKZ73#hxrT+1qu6`^F3PIc#ra6YReKzt8kf zutI!S=|1y~M)nDdcZWJ3U&nans9STbpOTUM2H~(s+Y1tF6ml1cH=Muox>4`gD(9Mj z68XJ*et}vbU03QGrZ@g|U2-_o>W0*g>$&xeH-cQIF$he|Pk6|A@XAw`?X|XokwV@( zN}Hukzq-C{Sex0#d`eu|B=_~4u(*TEiUlXeHtL1$T`2zh<(Fa_!)<{P&!5(*)S|mN(dje$8i%?V29Ge@c1O z$4{?h-*Vm&Zkv0V<$-{BO1*di%ZDwi{0eVZI~lm7sOBu$y=T?4(3TUYvk#o`&#bCU zozfBWW?5-DbKSFLrT(0`?+@7M=y%JlUge)W;kU8b+uyl5dk&sHt)2eY{!4Db+bqUi SD;XFV7(8A5T-G@yGywn`!pKGd literal 0 HcmV?d00001 diff --git a/docs/design/cuberenderimgs/chunk_height.svg b/docs/design/cuberenderimgs/chunk_height.svg new file mode 100644 index 0000000..8908f1e --- /dev/null +++ b/docs/design/cuberenderimgs/chunk_height.svg @@ -0,0 +1,4240 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + 1524 + + 1680 + + + + + + 1704 + + diff --git a/docs/design/cuberenderimgs/chunk_perspective.png b/docs/design/cuberenderimgs/chunk_perspective.png new file mode 100644 index 0000000000000000000000000000000000000000..8139928c4158eda471ffa4d5d6fc0201b8d0a091 GIT binary patch literal 43566 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 if5k2;nOOjc=2&`!WUw1_n=8KbLh*2~7aE5JiLl literal 0 HcmV?d00001 diff --git a/docs/design/cuberenderimgs/chunk_perspective.svg b/docs/design/cuberenderimgs/chunk_perspective.svg new file mode 100644 index 0000000..c6baf79 --- /dev/null +++ b/docs/design/cuberenderimgs/chunk_perspective.svg @@ -0,0 +1,2104 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/design/cuberenderimgs/chunk_topdown.png b/docs/design/cuberenderimgs/chunk_topdown.png new file mode 100644 index 0000000000000000000000000000000000000000..33bb83f8c43ad2e1742d74b858a7faf1b1338c0c GIT binary patch literal 4199 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

F5$zTa2)?fT{W|Bo-kJMJec)Ydc1 z(XML@Zm?(66aW48Nc!ddzHip6ls&qy`RzKxb;kE%zoi?>1A%9pN&j}- zuy}!XQ(i|D9<*}_ltXDy3k*y4=Ib@Gxn?huiJO&_1Ag9)&J{>ZlQz9 zNqD3F>-EOXM)AtOjd?cZ-+kQq>+fCueey4=>zDlI_dcq>q3_1?dkWvgg?8VVedOQY z19K0|O!}|*z%60+jsHR)nh&rh)vJF9`%=wS&Y0csz2mR#-NjY?5BwX&JD&%B6!@U= zL2%=L_6KoE>hT|0K4dj17kvBOSGpyapxl!J}&%S%+U-|3<3!hy7AYfqa b_*cF8LN>pP$GU|K3=9mOu6{1-oD!M<=`{+H literal 0 HcmV?d00001 diff --git a/docs/design/cuberenderimgs/chunk_topdown.svg b/docs/design/cuberenderimgs/chunk_topdown.svg new file mode 100644 index 0000000..e21cfe4 --- /dev/null +++ b/docs/design/cuberenderimgs/chunk_topdown.svg @@ -0,0 +1,1869 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/design/cuberenderimgs/chunk_width.png b/docs/design/cuberenderimgs/chunk_width.png new file mode 100644 index 0000000000000000000000000000000000000000..e27bcc8be10ad369d3bd50cc53dbd214490891b8 GIT binary patch literal 52924 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 z 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

udHN#5nW-`ILV}m?S?G1k7Km)PSzFU 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 + + + + + 24 + + + + 24*16=384 + + + + + + + + + + + + + + + + + + + + diff --git a/docs/design/cuberenderimgs/cube_stack128.png b/docs/design/cuberenderimgs/cube_stack128.png new file mode 100644 index 0000000000000000000000000000000000000000..03c8c3a2d684fd920c64a50e92879c9aaf615340 GIT binary patch literal 29797 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Y Offset + + 0 + 12 + 24 + Block # + + 0 + 1 + 2 + 127 + 126 + 125 + 1500 + 1512 + 1524 + 12*128=1536 + + + + + + diff --git a/docs/design/designdoc.rst b/docs/design/designdoc.rst index 941d746..3546caa 100644 --- a/docs/design/designdoc.rst +++ b/docs/design/designdoc.rst @@ -15,6 +15,10 @@ Overviewer development. So let's get started! +.. note:: + + This page is still under construction + .. contents:: Background Info @@ -195,10 +199,145 @@ This is done at the end of :func:`textures._build_block` Other Cube Types ---------------- +Many block types are not rendered as cubes. Fences, rails, doors, torches, and +many other types of blocks have custom rendering routines. Chunk Rendering =============== -.. This goes over the rendering of a chunk + +So now that each type of cube is rendered and cached in global variables within +the :mod:`textures` module, the next step is to use the data from a chunk of +the world to arrange these cubes on an image, rendering an entire chunk. + +How big is a chunk going to be? A chunk is 16 by 16 blocks across, 128 blocks +high. The diagonal of a 16 by 16 grid is 16 squares. Observe. + +This is the top-down view of a single chunk. It is essentially a 16 by 16 grid, +extending 128 units into the page. + +.. image:: cuberenderimgs/chunk_topdown.png + :alt: A 16x16 square grid + +Rendered at the appropriate perspective, we'll have something like this +(continued down for 128 layers). + +.. image:: cuberenderimgs/chunk_perspective.png + :alt: Perspective rendering of the two top layers of a chunk. + +Each of those cubes shown is where one of the pre-rendered cubes gets pasted. +This happens from back to front, bottom to top, so that the chunk gets drawn +correctly. Obviously if a cube in the back is pasted on the image after the +cubes in the front, it will be drawn on top of everything. + +Cube Positioning +---------------- +A single cube is drawn in a 24 by 24 square. Before we can construct a chunk out +of individual cubes, we must figure out how to position neighboring cubes. + +First, to review, these are the measurements of a cube: + +.. image:: cubepositionimgs/cube_measurements.png + :alt: The measurements of a cube + +* The cube is bounded by a 24 by 24 pixel square. + +* The side vertical edges are 12 pixels high. + +* The top (and bottom) face of the cube takes 12 vertical pixels (and 24 + horizontal pixels). + +* The edges of the top and bottom of the cube take up 6 vertical pixels and 12 + horizontal pixels each. + +Two cubes that are neighbors after projection to the image (diagonally +neighboring in the world) have a horizontal offset of 24 pixels from each other, +as shown below on the left. This is mostly trivial, since the images don't end +up overlapping at all. Two cubes in the same configuration but rotated 90 +degrees have some overlap, and are only vertically offset by 12 pixels, as shown +on the right. + +.. image:: cubepositionimgs/cube_horizontal_offset.png + :alt: Two cubes horizontally positioned are offset by 24 pixels on the X axis. + +Now for something slightly less trivial: two cubes that are stacked on top of +each other in the world. One is rendered lower on the vertical axis of the +image, but by how much? + +.. image:: cubepositionimgs/cube_stacking.png + :alt: Two cubes stacked are offset in the image by 12 pixels. + +Interestingly enough, due to the projection, this is exactly the same offset as +the situation above for diagonally neighboring cubes. The cube outlined in green +is drawn 12 pixels below the other one. Only the order that the cubes are drawn +is changed. + +And finally, what about cubes that are next to each other in the world, or +diagonally next to each other in the image? + +.. image:: cubepositionimgs/cube_neighbors.png + :alt: Cubes that are neighbors are offset by 12 on the X and 6 on the Y + +The cube outlined in green is offset on the horizontal axis by half the cube +width, or 12 pixels. It is offset on the vertical axis by half the width of the +cube's top, or 6 pixels. For the other 3 directions this could go, the +directions of the offsets are changed, but the amounts are the same. + +The size of a chunk +------------------- +Now that we know how to place cubes relative to each other, we can begin to +construct a chunk. + +Since the cube images are 24 by 24 pixels, and the diagonal of the 16 by 16 grid +is 16 squares, the width of one rendered chunk will be 384 pixels. Just +considering the top layer of the chunk: + +.. image:: cuberenderimgs/chunk_width.png + :alt: Illustrating the width of a single chunk + +Since cubes next to each other in the same "diagonal row" are offset by 24 +pixels, this is trivially calculated. + +The height is a bit more tricky to calculate. Let's start by calculating the +height of a single stack of 128 cubes. + +If the top of a stack of cubes is at Y value 0, the 128th cube down must be +drawn (128-1)*12=1524 pixels below. However, that's not the end of the story. +The bottom cube has a height of 24 pixels, so the height of a rendered stack of +128 cube is 1548 pixels. + +.. image:: cuberenderimgs/cube_stack128.png + :alt: A stack of 128 cubes takes 1560 vertical pixels to draw. + +You can also calculate this by looking at the sides of the cubes, which don't +overlap at all. They are 12 pixels each, times 128 cubes in the stack, gives +1536 pixels. Add in the 6 pixels for the top cube and the 6 pixels for the +bottom cube to get the total height of 1548 pixels. + +So what about the entire chunk? Let's take a look at the top and bottom few +layers of a chunk. + +.. image:: cuberenderimgs/chunk_height.png + :alt: The highest and lowest positioned cubes in a chunk + +Let's let the red cubes represent the stack from above. The one on the top we'll +define as position 0, with our vertical axis running positively downward (as is +the case in a lot of imaging library coordinate systems) Therefore, the bottom +red cube is at vertical offset 1524 below. + +The green cube at the bottom most tip is the cube with the lowest vertical +placement on the image, so its offset plus 24 pixels for its height will be the +chunk height. Since cubes in that configuration are 12 pixels lower, add 15*12 +pixels to get the offset of the lowest green cube: 1704. + +So the total size of a chunk in pixels is 384 wide by 1704 tall. That's pretty +tall! + +.. note:: + + The original code had an incorrect height for a chunk, but it turns out not + to matter, since the chunk image will either have some blank space or be + slightly cut off. Now that chunks are rendered directly to tiles, it matters + even less, but this is still important for calculating some later things. Tile Rendering ============== From cbe3d7e1a3c0ba6da1361dc920463e3bfc08ef57 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Thu, 6 Oct 2011 23:15:39 -0400 Subject: [PATCH 20/40] added note about specifying world numbers --- docs/running.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/running.rst b/docs/running.rst index bd8e407..1d76ba1 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -25,6 +25,8 @@ And similarly for other systems:: 1. The path to your Minecraft world on your hard drive 2. The name of a single player world on your current system. Note that if it has spaces, you will need to put the world name in quotes. + 3. If the world name is in the format "World #" (e.g. "World 1"), you can just specify the + number. **Output Dir** This is the directory you would like to put the rendered tiles and @@ -55,7 +57,7 @@ index.html! Incremental updates are just as easy, and a lot faster. If you go and change something inside your world, run the command again and Overviewer will -automatically rerender only what's needed. +automatically re-render only what's needed. Installing the Textures ======================= From 88448f932bfdb4bf0a6973698465043a98eb28b8 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Fri, 7 Oct 2011 00:38:58 -0400 Subject: [PATCH 21/40] fixed math error in design docs (I'm pretty sure) also touched up the wording of some other areas --- docs/design/cuberenderimgs/chunk_height.png | Bin 77870 -> 77772 bytes docs/design/cuberenderimgs/chunk_height.svg | 14 +++++++------- docs/design/designdoc.rst | 19 ++++++------------- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/docs/design/cuberenderimgs/chunk_height.png b/docs/design/cuberenderimgs/chunk_height.png index f56b28260b3ca4ae0888d8b5067436f51a686629..8b4257dc26a4fb4377da18c95ebce23efceb3372 100644 GIT binary patch delta 11512 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

h&-3e|g>QF;>K8oEws@p``~y?@zFo?8pZN7N z#LfxGUi3Xtk;|^na9^tAV}MTmi(MWDi@X!Gtsd>3B=E!F!d-9Hl9g_|4ZoEwld7?H z+4kOD^?A0|g`+p5+?GZ;Om99NwD4`JCii~^jRtv{#~Sb`q*y%Sj9^2m8|zeLz?T~ zO_=k(UZm!FU`&OhNX>Ouhw`9v*ULC$*D?K;D%t2?x1f8YsGhIs{o0Sdi!9vd#ja>E z-qRNCo}GcUxI94SxYD5+O`SW@H9$REK!z~|nQOMv;9lO^FML~yiyufc+caMl zvhF?hn!VnZY0rg1?Ops2O0Jqlde!jpv?2f94^r{-9`am_nZ7(w(`9yc zDO=WI?z{unR&>pJ8qxl0rQ=f8^T!r7wEG@p58hdS?z8bF@p@3%z{@M3!+rGfyVD=T zj~wBc%CP7BPW}fT58Q8DIqiPnWaI&H=3N;Tj(HDxN*%UGrOfy7T&4WHYu&}UA~)sM z9+<~jb6|(og}s82hpPorFS9x&f<%nYU1belXZc ztCs1V+-cR!eD|wj{RP&CthtOf3C=mEHgTV3+*P;w`mOm}%gWCh{4w zH4-o66n3&_1vKuxTF`dnD)*g#$t&36AHCv{c+sT)ZCQ3n%9?WwYkccjOF*rCCjJ{Y zzOLq$u3R_!+nm2Ur`~J4cf;Vr+b8=R(wX-&PScjISa|*L1MWk*ubTAPN>&!dE@Oi1F?XmIdAa?#46kbK97ud}6|DBi$b- zW?Zr4{jp;1u04Gv4_Pz4W7ql~t*_l5SmCI7;BZ=K(}l^e8%r7qo>a?_$|@D7Et$)BeR(y9#8Q zoflN=s=ioM|9x?e5dXe43%Yl1)A+G!m2nDdY|q|UTkKv@PJ+M!(4xG zJ*)9U?zC`;;kQE%st=l$u74^UC%}4tF}Fjx1K)z~f4)vXe=&X7`)c0CMTfW-71s18 zd0sDO1i4^ki}9Y`rw+PWdlaNrSFum4zhjeI;n>f>KU4m>d3}_Wp!dS)B3#54Q9- z`#!x@=00=2@tdaoFEx}`zk9sgWX7vA4{!A?vEq5^D3y|TG9z2_47b&WtDJ8_A8gI# z(UYscG;exHVU{a1{|~8YTpPHhGwV05sJE%i5kLEpF03^5*j81G|}ablh5b zuI-$z@41;OdlZ5vy*jaTmRf0F!+S#`AMT?Kdaw3wj}raC=l=2x!>;@*4S5Mi?nP)_ z?$u|Qow{S&uB-LjcfKwC#3b*#N_cqTS2~$X5Mz}(e7u7GhM>8Ksoa9qaR5J z!`VwR4|5B#Z1^%r~&y``l;}IFgUJ`kjTdLLgNz~p0b3dzS#m((!$Zp$~ z3To)S61;!j=|MGb>S?VDsjK21ypi=$J^o~Wqp#ELqSbK^&TaQ$sju13e;}N_Wab{d z%z(LyY$a#i9@+Bl5x$$Qw!>d}v)%E1TR-qjz1#Tj-iC-B?G5KQyy8&~l8NT{;Pjh! z!K6)Zgdc3RaTHJ1=hi(*e$J{h!QOVwIF1Td(zy zC-#7*X1~5j#ewaY>gLsI?<;+9RV?Ugbx5gkPH%qc16RSFF)m@cJF{10iEmrS^6cVv zOM_S!Kf#HrpEf8eEp|=O3Ok)0sZ)C+d}HR$_^uPjm5O5Iw$0i5QOStAIHQs;+TZ5t z&3QUX!LBJKe%stSPB8O45)Df=2~S*Y*

A^VFct$lc|f*hEIlo6_1!?-|9Dl^4EG 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 delta 11591 zcmX?epJm+xmWC~iADQY4ELVN%ufI3jZ^Av6gAN>fTNbSlVU*_YxWvN9`qHH4Jp?ng76^1{=yHZuIq5gHOq(#F`u*?Uk8O*~%gV~i)6$=vyH|bwyWR7~ zH&ec!dGn_3+nmqS3T{pcJ1lufdDqO|dE5^Sw)=Z4+pTiEKKawibNjq^W!LA+*7#p* zSoiLV>IP%c4|}<4_P0J)5i2qL?Yh@0xVit;ho+qpIj{a6xZBk8VDYXhNB$Q{-=w)> zT-ZJYM(+BfZP;|X7>#|4`*i=K=TJuT48XG+k1xA@1Dwp|nn*n8k6_ik(UhdetQ^p1sHx%)FPr&fV$ z*O{x^=I%8-&>Yg7Z>+Uowj;;^)-7HqPJTY{ETs9JV}g(0wrL7n``VosyiPFVWIiT* z>$c_>pFLfbhh)8v)@!Pq|IlRdVXd#}3%v!d7mnUoE%`Apc5i}|Wv^BT`~9wvX1(+0 z%YU@L^?Bo7zoW`=(UNmtls;^bnZJFfoxKOQ>ZGd8Q|~pln3q}3 zNq9Rv*fH#Xnj2Mbex4-i1~nizkb@ zebam+>sIR8D1MT&#Bkd*2D!4r(pT>?`;EOAzm+X{lp@TqXvK%7iF{>^YxBOl&gFiQ z^oDhD*MWQOm5qAGt_8d~UiQPdAo}3^_t%}b$$2sDy6~};ncw@0tj~Wtra6H}_MZ5A zZ`$3)DfuT1a$?_?z7fBBK6Boyl?C+=TKjGuxw*>v>deEo9Q`lu@&B!V_mJm`U+g}Y z)FbAs5$fsH_lwM$^f#;&3Ax4jdt#B?)cE(oD_i`Z#NFbIXy;pIz>%sGE7QG+;go?@ z=gB*hn)eolI7!4U{FMBLH{tl4++L=4ynDm-TjtGl5xo(7>o&i4(!zJu3I#qh`QA+3 zT)%dO@u`q5-gFN39{-Z-KMzlNuEA6BZtp&p&+GQe|45s6J-$SHFSD+l$YBHjbJy=2 z{&%|S!RyoqwMTDqE!R1{)QXvRnchjuIgPh6SFO_5&H0rpCiZ6CE1sc-gkaoF28tAeH80H&J-5;s|%``BG#WX{-P#% z&|UXM)jjDmJD+M5&G~msD3oQv>Z<$<#qf0DXzswy#oSsw`Y*P*8gG9hcrGA#?}5E` zy=Dw@VQ#O#znk@*+3bAL-qfv^tS5X_l|dt&W@rxc^$ex>F?c^01`P z`ip_PkCmr*MF-YjF#R)Wkyy=2w;B_M*faZP9&i`FaP-Z5&YBkYlI)9T?@Lu=JY%ra zv2@aTG0P@6pUHaZ7Sk@P1*d=cT(xwsaJl|r?*g;%bgd78+`D$QhIg{Zue!6rWJTPA zZT^d09x!S%OyBuEUui?+tRJFR9P`#4eY zx~kz$tJ!blOHKX1E_FF2D6i=tUYv7d=TgldD_CQ-(nW%r_$9hkSYp4dXZ>(7!Dae` zTS1NeA`7}L%}jq}7%cKm&=>t-aN({8(}kllv#XA{H@#xb+n+gw!RE|Qy%k#Z{FdoD zTC1ntYmCu9wuRBq*>r&|M`^Hq} z<3z?1!);Q1KRhfKc_*w_{LxUl%AvfP>w@e5tb^sEg44^h9JklCWp_8dZ=d*fafV=t z;kHE&ep?HE0BQVo$a7Wpf%Zl{k5_ZJN({F#eYhI?SlRU})As*cUi_Z8Kt8gee!I5l z`U~}pv$s^ezrAtly+$X!QwO%2Kig-++`0opP`G}<^H-t|5{=dK zcmMk^?kp!U-(3-3fZRZz0>}@R!2;8;%ASE2fAOz2OLb0+fd*5{qgLO^x*o* zO{>H$s?A$+Gz-!iw}mZyl)CcW|KRWzzr^=vR%J`iSAMamUVibK;8OYL0T1-^b4;Ym z4$hxZFa9Dar?=z*UrygP z4-8WSPhNc@ajxNL7_0Iw%Xg=LnQA@cv3~Mrj>~er_e+c(ou0GADk(cq$INU;xv=y3 z7bOYv=d907&0&#NDYfIR*xmYBgvsU&`=iix_2mrlr$7I?y>;rn#<;yVymlPmHYt>Q znfk!@$TjI^!Fau^lJy(n&o>%-ot?!r&GPBVJqN^@cg=U(_FU|o0Q0Vl3deg7c>*u= z_UGJR&sFn1jpc4<=z{7=uRb(o)LmPBg29fbM0jPxJDFA2owqM!+IPM2t+Ac@?*PWT z-3QE_Zo36UvUmGNPP=qXDWv&bmecEn5p8o9q{XIvaCIok{;+Rnb%fQ2`i9WEwj9eQ za(lX5Shw~I-;|<@)AS3?b(UW7$??rzc*1Tk-<}KmAFnc2>3e+GLA>V0EUU!~@oLOJ zJYM!VwH2_H=buxptZ)>mc|J*RPNJ+-gI?PIzb^}RS{=V|v{uuxT~-U*WL=|`~8j2H!NAJ&cMApcPXR(m#S5-c#c>zsg$`X zKJDo5iJQJe;-jGbB5&b1gEkRmyIDOiglc=Yc|hv{Z}5;${i=`h@%pE04a zqkhVQZp%7rt(EKJn78F_suwBg+*};My)Qb0!7ivt@7a$J9qToJtmv6x)i}Gc^!1x? zt`7~S8?yLT&Pn~1t-Y7|?FEAmZ@Fx`Ev@IYR2EF-+H>LC4wb9iE!&=l?L9De{lkua znZw+7e!lAaal(Gjf=CPJ5|{FtW7*al*lV;eA7$QHzu>jf!4AE~wJ$o}b2&XY>`-nl zdSR*5+haFw&&&FdD|~aG`P4bu%fT?s&cED^vNtHf1}Wl7qV{ zVlT9Qd!PHjw!3m3+v3O54u|~$m9=lLY;ZZbJAqGj^M*Nv-AgR?2|Q^1*1b$e`n_FA z>l582Vm0AGy!E@9i}w8w{1EG1_>eX5L##C8T~5pR+m0nWxZY@AK05Dbqu#Nw9VS<8 zz8^K8_(-O*Y=O|Z4^m-?3JkIL9aevfJ1EX7F2VB)Yqx@4EclT{e?n3Eux9lY7)R zHqN8)A2ihLh&S&in(nKkZ?i&yYT?C1G>fp`7K zr;_Ic&X!hcO?BF`Gc0|9*`5bgIlZe^ME04km?sqy^&v-xtKx=8jltC4({1dP|JH-b z{CyV~4sHstdAU!f-q)umfb&4~saghi=H1D``tnTbX^inaFBUyy-Pvk%qfKmZ^;SQ+}6Q+)-kPf21R{gkL|ya!#YzoWK)e=Pn4882(OY zl25$w*57=+>BmcZ)|Z0va{m*#6^^Xm!VXJ<>XqN`T}*!ng{L2I5U<&29=ljMxs)xT zv|ejLH@CiqXvKkF>*8Z?oG3oK<+;p>wO{zY9BpgNxBkv*#cjbHu_@<4YaD;GKF9VI z-1{UhEIm~^ldY!IVfv~=7F%~(Nw*riEY}ORTx{`y^{OP(2h%1`){@_<46$F{-;?@a z+7&A8+7>fC^Pu~&CFe2^xWB#fbn6mseUIo@S*2R_?|%0l;`U;cGg~dxGB1XG&BSjp z`zjx#?yh9pm)m$ULiI!TEyjw4Z!cOLeth^rH)HIz4^6ustY+Tj6F1$2FWtj*k#~Z2 z%(M)?57w)eb00S}Vc8WP+@$xbT>n(t#|NjmcFoA{Zd$*}$~o-9(Hpl7nf86)P~!q= zHhi$U%Xg_&y@Iu8g=0SRd)@DUFFpOWvuawk{e|e4vM>10HopIT;PE@|7u%O;utbV{ zaQe;5R42l8|EEaE-UBzgo8C{faTHJ1=h^o>Cir{QJy7noy~Dh#wwNLIOTN;n>s1H7 zcU2$j;?nOp_R+RSHTFDfiQ%`hB|_&um`!8ey5d7q#+p~M5%oo%w>)Is%Vd+YO(P^?vXIsyCWiaJ;=7gQ9i`Tju z>c2P;roJJ%@%lEq9ToK+)p0>bSBmo5JXjr}bwDp?$=VE?HlQm;Ml&lk!<} z+OEu*Y`?#8eQ-J++bCMzGxyb*io1n7^~x7i9Vw6L`@U0+bw;-1*&XhmS>(kk{%o}V zE_|SjgP-YCz%EM*_Yc0#H(9!G3fmQ*zvvjUOnkobajz>^)JpI5bshGY;IK2*#c$i9 z;OXJa*1-X#Y+Aw74|crcd9Yu1&T@eVjM7P0m72W1w;sL9_av-}{Z}>fwnNL>o+T`9 z(m(R%^6dk=Wu|KjGfLJA8u@S^ZP0tQcYBiP4?fqIXBc*^zuu5naO7TH$TI2q%x32b za!Xf>?|9q&jMZ*dh-%w z71>H&yKS4!Ws@MBGi|BxZ^ntIf^TlW7WGnAB7^q^Q}_E>-Kj#6>p;1$zx#1FYrO1* zrM&tcG6(#Qy<&YQquz4hy8-Vt_e=GlnsR|vbL0DTjaX2XagR~(L++J?`_op7?|3YJ zxM}0;CVjS&m6NR|FS2638aI8ri=+6h^&$@#-k<7RmNUgVCBs7 zVpi{wYUzsOJJ0(R%y&z#?W@gxD5Mu{a1B|F>1Evg?Dv|V?u|36={#BkfHgWp@VEdVJ zhknGIS5-CZpK3-(>?;D>A%LHqDaQe+(wBPIM*3%~pJxh;VvpR5P!dkxvFPPr{u2{8N)koEN-8r>w zZj6)bB_1W1&&ks%SvuhrPsD*Ab1rP%%bgQ70hHUEdAHh6PM-9tW3TDT7UL2|^`$oZ z0v<5l_xWAvT|_xUztDiuxY z(3#WDD=4Y06ucoS&O71d;eAcMr{^ju$#rn~LB} zC8gxzO{QKh?~*z6H!~&g6pB7;DUxW>ZZPMjQqi^!o>M39)hT_FD=;(@`epWw)t+UC zyURTBiN3{~wyx;7({r$-I47!*N6dR0^M}R`AAyMzEpJ9UyR19DZ0GW%_qR*dObLG} zG%>&P1ari*S?To#>rdB)lxCfb{mf*4DEm5FPM788D|0_DpYB%iZpOxQ*9ulGw=xb* zUr^PXCuX?+%F21K{%}~R9j=viKU(;dGfB%ac=o0>ODAcwXdY<0aF(m2*th5Lsgfzm zfo+R<()A=)8Bb7Pl?c0CuSUes@x&!4%v>ABS* z=6%kozWCR~4_-6gO<>=(TBt$qmpK2vh<34{X)jk6_i6kvTfaFzCg}N=hpe3k-4DHD&AT7R zF1JDT*+c0gSFfo|`2e-%sdU)fnGf5_7~(SK@470Pk?1mgf&W9n`^W1KY+RT-6I30E z)r2mPzN++MQT^q>z7*5}qljPoKwcxZ=T)=iKX3f>&JCdt}E9NJ@ZY|zm zFlm=2b8YtiuqyVN?2o;h?^Ks3D>7Xd?o#zG$Wc7N{Z`s9@|&RO`qMEE;OcJYx~FWr zB&riX)LvrV#c2uh3tRpDglCC6Ba4}1&uo?TQJs?*Hg7@qM$vWWE_AYwV__lc`Yo3g;^KBScCTlQbB1j#qt zUrKZ`^Y49=J9e$|8IyDDZ0?xltNNej^6wD&{fSw^Q~l7P1GgspR?n(8OfWGJSvvXP zjLQKN^j^Q4v$k>RpI!Xb`=1?N_d@gy`=#TRQbAYCH=g48f1pl9m;H}J==Q*?Co6Ad zg(`ir6|Cf`-Y0ip&T+oLtLEPCW`%QqI`H~&(AEDdUWrNk5M!GsG%?#HW$UEfVh!&T z*4RA=jxhU^si%@~&?cwj#Cn$}$!F?=zf|Vb<}>F+y;BkV8R61*_T)8j*AykQq`M5W zFG(@UoELevL2ZNGtl7yQgMN~tlHP&r~(KFR*IJUcGwGdE2z(OtW`y%-m+& z&?mNTZRS^|?eP|#rKhh-u880JAm_m?vGX%ePf-gyQC}IIv$oQ#Kx{*ZcI~INw$U$T zKdfC~e$CCwao6(K4W`bwy%^(O+)rG8Zf3;1gRDaHUe8Ed&~2$Eb#8)2G4}?Y0)OKR zM`g-u_(lvn62f0om(8rEL-yTvv-vVY6Z1^>$;{r_Fcz z+f}1qcIUsn>-D~&KA&~}!LWyx8ZV2OH-z0hz`a+l@A2%595s9;@=F~rr|~}H zJhS+FNkV7XuLsfhGeCt&T-D;lSS?qZ<&4*t+t`&qXx-Mn+W1WUfo0m_1-JY78sB{k z17#DdN7je-?$Z%He|_g#P?g166TfKo|EKJ`B%%X9{AG(?eI7iL6b)(toLwdUMe4(y zzdK}RZ~MdY!*oN%wd#k_zqenqeh{s{|DhOv`SRaNyEeUVI z{vTG(3r>T~DX$OW|G{=ymMK>7A?xCeuXye*%+^-fbKquoSh`2_-US5@EHC^O=w3X# z_2_@yY2WvLSX(>$`z4u#psOcW{mM#x?fx<*~RW?LU-% z%8MO~S>o(ccFd+#|KPmkPeV$>Lu=RHxmWphnau~b6(OZv ztMb}=e>`LC?>M2Wv?&f$0z6O5)@fp`{69fvwegn_eS?lV*3*p^JU_I;;&rdT;!)bP zo@cUTNr9pDCV}%0)uuLvO4OfDkelvkm2~oMtiMXpUc5wBWX=^u^eovl%@>SCd1&{w=D09@=$EF6q}bIo{R!WwvIbrP3dk zp7?fXxry>|ohNVBI_0u{o3_eWUnMz<;p-gWDE+^V+zkovtU^8oi=v2U+(W-PHPTIaH$+j5=i2gcuFjqiT4 zC~|InFq>!1+yh~+Ua`L0G3|hRY0z`2^!h1AjpCncw!~~Zwf)~sulEi4Z*SfakA9H) zy<8`6UC4vhZK|uzUC?@wbZ#@_)K|CU1-*h~Z|2*#eXx_&*bN%e)mQv+VqsOI^?9!d z+3gH9`@46$tE`C&Q2L;EAdO+wq-npOMemq;kMaJk-HfY~98bnZ+_|czJ4ZSELF>29 zwdW>)MiJk%9=skrm+{7S_7dyMXNz?~6$9)2gk=dgtrjoXJ+0;t_pu|5{c4Pl4WGX> zeX#T2+s0P08lIlzN6*;q}KCh*DqrG>Zs{MG^bFRZbLU*Zke}tZWGo5sedIi!aa@4zJgL!TZ4S!rRW!9u6U~iVHulZK>4v zUGEZfH9fR6JSXe5?1MPLo!%~HT065dmRcQtb)b93?Y}xXtFreo`K)Uez0aB|$91Qv zD4B6u8bkdNwfwE@Wz8E_o(N=(km1_X)%ec#L1gaaSFB1#E-v4Wy*u{u#$3sztJGJ% zYJd9e+-m(3^~~qBr-ppB4E<|pcJ-^+G}r&}N}D`EY1#hpCD+*2tEImM#m*JX>Cl<* z^^a0fL&qNen2x6mf7{Al8zjWqJ=N@Ee71ac@TRCk0h>)XSe#m0vM{E3Q^P90gUjB9 zvCR{hc)W-!J;K@LUr*|0$+o3Stfjg0HA4AHekUxj=G8uLQtuV&A9l6>)Z4k?@srr+ zg?k5GeI8nBp40o@^g*8BPV4ob3?-MYsuE>;I-hCx1jZVrq6N%%S#QjEExpRhE%bfa zF}3XJ>v-23&YAZpBB5@J>IdKB4(Uq+cL%I6U$~@>Z{^4~}|KyH050LZwaeW}&rOVkZ0cteUsT^7^ySQWBpId_JWT zTI(2E-?aAQUZy{J3OdIa82IfyT^vJ#UDUcxq&@w{6S6frbp5eqR?HvvDk(jlbmg(| z#AcTiwgNl0U1tw3=-z1Vy1O(tAvW!E3jYs3zY8}Nd}=(IF2p`{_^uo}H?;nEoJ5T_ zW3Wrgrj8!pg52!R6TA@zekh!gOx#ARiR=sQN zwTNSSCo-|xHRbc9-D0fw8$*n?A8GP;;VWEV%|APa$D!Qcse1D21LZOXLQj{>n0udf z+o3R)|I>I%48I+EAkFNvj@?c$GP>R+@5rWg9HJL&=N$<<_)1_R^TyH}!W-qK7KePj ze(=S$)7srOANCYYUA1q`s_I1LKJg8Q*6&Vw_hsp+#`jV>JM4J&eN@`CfcdV^8P)%` z3C5wZnwp^by$8|l{*{voLk@iB+n~y}YyWmo!;A4p-*TpXno363w(e(`Y@mOtG^Dit zcNxRn4xYnW)-|%t-z;xjd72-!S3EARP$*P)H-FsU2qhz~Vxt=(#Tu55q3^v4?l{dz zKCx=muNCD9;rT^a2;%2j+!9MV6=fv9fB+f~jGgLMx8OR*mkeo2L ztI{>?>iUqc^AFm)q{xK17tGlF&HuslRli&&)lcp`5qLms)vnA-d>tnWc;eziul`rN zQ7-?$L+8qak_S$qx=K5@PM?1I`n#v06GBR*KKKg$RQmR`dUuCSSL6G>Nx!f0#%L?~ zCl!|JGj=o1?m8h7`d48~wYXTr-Br)n%hCi6&yY_|Wm&DffgyGe|C2)fINpEmF4vBH zTFiIs)#J7Gj4=~L%3M!1=Ed`r$VQyq*B$cpa**}2tN%mG6c*$&uVy^WD4y8(@c%(K zfx_Rad^Y_u<(4m3?_B>VN4Lqh*v|QoNT|ul^3JKJc1~SbvYF@ZpNp>VG*8XeV847; zV9LTXOns*x{#)0m%J}|>)}8e)ZP>F z)J!#8SuoPaB`;Ou{RW=sLcv2OE%O6rhX1rF;5(#!pspu@L;Y02OjV`*UbhPcBV%3G z9p0m7ZIC`iHstHcEzeIy*DD!0xzx2yO}3KhUK;HfdOpm4)#q2Pl@BVXDuveihVmcL zDz@kP`$AzE^zUCRoXGW6_;?p^f?+=`R@Nr=3l8ob%e#|KZhzdrn`fna(ZTptq{xL#+@f z>*%uVQjC~6ZyUqh%j+aw@Ev}2u{Z2$vF(dJr>3ya19gq>2V8A#6y30OuYJ-_gWHPX z=_Y;oki7vOMX#!o*kBWO`(0MTq>h|uqaS^TKDE!9vR%SU{rKgRoDokF=FQ@HbJ*rz z=O&HK4b`Eg+`0WC3G;;~E;hXImj4fz#Nt)rD^)*z`;?_!`Ji&^){w8cp?@XW_U&%u zj5v4VZMAfb(x=J?=@A~TA6oyhNnbjv%9F-a95KzW{@6s>n#qmtjrzX^*d?k>ZjhDe zJh(K(@`CK^Uz_yJ7D+E&C0>1@a_eTB4|{&KgnX3^{maU>Z+Ca_;9(UJCp+>+MuSYr{k9I~(82M=ba$th8ydw`f?0OA6ux3oL;Ws=R=gW_zl=AUQu6tHt&-15%xV^O8s z@x%qUnY))pdxq+NUGVvp_ooA&UrjE0V9msQ|9*pg!s7LT6aHtMxLH5DB{ga0idFf^ zd{XbPzL9BoAIVn8*}S7KZ`$J7k5{tBGwk|$w{WsxUb~q`H7zUmox58+*qQ$ z`jvdh*3D=7Dl4}tf!wYeI(OYF_oM~8S$`O9Xzh42=X=L_-?{HvDzg@?dY?Gc_t90x zH#|1J?BbUXmS*t(kYm`kZ1UIo#)Uka<{0y2vR~*t;iOc=WWeVwS|%~=(c6BxlDOJP zxr(^IPOE;+TP4@)YaYiM!(*eXwEGFizTOQ&YwJ1pUaRraXSg5CG5x|p(F4a07_b>j z?wH7T?bOP4NfjmT?h~C6M?2;=IvZSwedzf7s{E72=U3M+S@nMPE5jQd@7;6)zt$To zeNq;bobvI@ZpQLeuX?8Sy*r@h($6q0jnCX+c0-<^prz#OU3WMwIJ8ffEL~ML^_Hdn zdYPw<&#&q)U1c2dH9TVO?$?Iulha+E9ADeu?=tOhLwVh^bDRb$(|?uU+?Dw9!asiI zyWeiidXlxu>R|J^)%K^D&##X64ozS6s_;g~`}(K{F%KdIZ`!K<=wp-%zq()i!r8c~ z-UYQ(Dzs-6^MfQCkC4Q`9I>$Coc%tnFE#}gvZspYpEBF4| zBqlKN@`fen?jQD&Ub}GB^&ML>_{S?8Q z(JpN)zdKLp9SA$%f9gfLSmy~Lr6Mb{QcKb3=9u8n^`AFD3N)z;L09`jzN+w4OlREB zHcxzFtxHPo1DgjLp?~8$@A{|;Mh3Z@JEHJCm!~9q<*TpttD^EnUO&D1{^@d)y}x>0 zo)jN=cA&h$@W7*pWfQhHK5rDiQ$L?|9>?)%D_^-E_}_WL^1#6ZFAqH5uxN|;*GH*a zbOa;0xT|i+?>;BbY+iYyvT`OUqwaA@u|3mWl)Wb7jqQQI2dpC&Jzr|bP$w$=R)_tJ z;Kct7-x>QE=0-gIu(1As*8z_QjtQbUN6NK6w3n@6d$7tvrZZHpg3mkkZ#ch|{`#!S z2bEtVJ5T(Y@%%}7!|aB$4gbxG*NRX4*|?r@c0zESdjg;K+;zT8`=%t#qOIP{VtJ=ne+B3c@ z(LK3uzu3gj8xFjA+_+fwho0~K-*1E_rfzWB@|(e*(R$@8-PA8fPp{TL$$Wmbzo&~^ zvTMS0_HBVzZ&x2)x9S{|pZLVjh97zlbIrHAm~9!H#`r;0XUhZ61oqIqYp1WNuKZdF zYS!;twz;9)@cXa0#@L8eR?(s757akQi*4ZKH)<(vuw<32<#m2zs$sx$BQA9Rlf>sw zr~1iN#MS!lUiIpGXld2Vxdjibxg+M~9V--(-z4+dLi&e^y7Ky@f72ER{yP;SmJ%Hr zyN~BWb>&xfP>^ZvG~K#w;wr!El~qRbKUFR(ws1FW);E}b|B}^@xPzOb``mU;d|v+| zO}jQY{KEIW&Rx^P#VQ|ERz6h-{TmWme>`SdBAa`G%KJ~1c27%o&6xW^<#NN`K)1_h z=T|oQZM*PtS6A7$zb#ke;@&Fo+vu;CS-Pq?6Cdv^LlxH4q(m9hq^X&c^{U6UflWH^WXrFPsaMiE%n|{A}dNuxOit-D<(G3{?kyY97!*sf-NPNR? zZowC(ohNo3sArY*zudUgDq1ShKw+KPVf6#ABaXJ|+}iZi>rGr7vx^s+Wded8@B7%6JO`orjhy-xd6SEWsxR+V+1_}(yocXIrpS2yPNS-$+f z?B3C?Npyt5cb3rF!@2U!y?>Z&dqs_6SBd|c z7ok+t(Q!vrX?^zz&WXAA#p@?-Prk+P^gBmgX+5KS=ZXEYKOVoi^Q2EU@Ple)IgDICEPVf6o9eRU-- zPvwJ3(Up=16tq}F)VoiZ9pJkm{%>7`->KA)(zcEq9vc-UZ|mjLW*!iCdLDi5Z+Y7K zSVyLnuXZvheL6cMw|GNU&5qh_OnHGk9Xc7wU7^-pD4{eg9v7pXr}qh4`-0edZgD>=PF64s|}hj`7S< zx8_W zaR-;x7Yj~|ZPW|hyHNc1%cocMp((nrLnCbVTL-~FK}+ESp?CfhBiuIkGRp%2@sxV; z0+tV3R{0g)u68nTNm0#NvU|^}XQ3@8PG=uD;h$MmnL4E-=FPIwa^|{c%S!z@bKf7Z z(b4agTfIunKY7A$W3#uvb9MF{JbhX_{jdF(+=91RjJsAcFfcH9y85}Sb4q9e05KUr Aa{vGU diff --git a/docs/design/cuberenderimgs/chunk_height.svg b/docs/design/cuberenderimgs/chunk_height.svg index 8908f1e..532e06c 100644 --- a/docs/design/cuberenderimgs/chunk_height.svg +++ b/docs/design/cuberenderimgs/chunk_height.svg @@ -54,9 +54,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="2.3840074" - inkscape:cx="126.00362" - inkscape:cy="123.42865" + inkscape:zoom="1.6857478" + inkscape:cx="180.45474" + inkscape:cy="219.80008" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -4163,7 +4163,7 @@ sodipodi:cy="85.117432" sodipodi:rx="0.5" sodipodi:ry="0.5" - d="m 2,85.117432 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="m 2,85.117432 c 0,0.276142 -0.2238576,0.5 -0.5,0.5 -0.2761424,0 -0.5,-0.223858 -0.5,-0.5 0,-0.276143 0.2238576,-0.5 0.5,-0.5 0.2761424,0 0.5,0.223857 0.5,0.5 z" transform="matrix(2,0,0,2,62.037936,613.88763)" /> 1680 + y="475.16006">1704 1704 + y="904.1225">1728 diff --git a/docs/design/designdoc.rst b/docs/design/designdoc.rst index 3546caa..e6a7ef7 100644 --- a/docs/design/designdoc.rst +++ b/docs/design/designdoc.rst @@ -253,8 +253,8 @@ Two cubes that are neighbors after projection to the image (diagonally neighboring in the world) have a horizontal offset of 24 pixels from each other, as shown below on the left. This is mostly trivial, since the images don't end up overlapping at all. Two cubes in the same configuration but rotated 90 -degrees have some overlap, and are only vertically offset by 12 pixels, as shown -on the right. +degrees have some overlap in the image, and are only vertically offset by 12 +pixels, as shown on the right. .. image:: cubepositionimgs/cube_horizontal_offset.png :alt: Two cubes horizontally positioned are offset by 24 pixels on the X axis. @@ -269,9 +269,9 @@ image, but by how much? Interestingly enough, due to the projection, this is exactly the same offset as the situation above for diagonally neighboring cubes. The cube outlined in green is drawn 12 pixels below the other one. Only the order that the cubes are drawn -is changed. +is different. -And finally, what about cubes that are next to each other in the world, or +And finally, what about cubes that are next to each other in the world --- diagonally next to each other in the image? .. image:: cubepositionimgs/cube_neighbors.png @@ -326,19 +326,12 @@ red cube is at vertical offset 1524 below. The green cube at the bottom most tip is the cube with the lowest vertical placement on the image, so its offset plus 24 pixels for its height will be the -chunk height. Since cubes in that configuration are 12 pixels lower, add 15*12 +chunk height. Since the green cubes each have an offset of 12 pixels, add 15*12 pixels to get the offset of the lowest green cube: 1704. -So the total size of a chunk in pixels is 384 wide by 1704 tall. That's pretty +So the total size of a chunk in pixels is 384 wide by 1728 tall. That's pretty tall! -.. note:: - - The original code had an incorrect height for a chunk, but it turns out not - to matter, since the chunk image will either have some blank space or be - slightly cut off. Now that chunks are rendered directly to tiles, it matters - even less, but this is still important for calculating some later things. - Tile Rendering ============== .. Covers the placement of chunk images on a tile From 19c564670c007d267d136e83a6f6e26a5dc5ea79 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Mon, 10 Oct 2011 14:23:57 -0400 Subject: [PATCH 22/40] updated the web_assets_hook help text to be correct --- overviewer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overviewer.py b/overviewer.py index b79f4dc..3532af3 100755 --- a/overviewer.py +++ b/overviewer.py @@ -115,7 +115,7 @@ def main(): parser.add_option("--imgquality", dest="imgquality", default=95, helptext="Specify the quality of image output when using imgformat=\"jpg\".", type="int", advanced=True) parser.add_option("--bg-color", dest="bg_color", helptext="Configures the background color for the GoogleMap output. Specify in #RRGGBB format", advanced=True, type="string", default="#1A1A1A") parser.add_option("--optimize-img", dest="optimizeimg", helptext="If using png, perform image file size optimizations on the output. Specify 1 for pngcrush, 2 for pngcrush+advdef and 3 for pngcrush-advdef with more agressive settings. This may double (or more) render times, but will produce up to 30% smaller images. NOTE: requires corresponding programs in $PATH or %PATH%", advanced=True) - parser.add_option("--web-assets-hook", dest="web_assets_hook", helptext="If provided, run this function after the web assets have been copied, but before actual tile rendering begins. It should accept a QuadtreeGen object as its only argument.", action="store", metavar="SCRIPT", type="function", advanced=True) + parser.add_option("--web-assets-hook", dest="web_assets_hook", helptext="If provided, run this function after the web assets have been copied, but before actual tile rendering begins. It should accept a MapGen object as its only argument.", action="store", metavar="FUNCTION", type="function", advanced=True) parser.add_option("--web-assets-path", dest="web_assets_path", helptext="Specifies a non-standard web_assets directory to use. Files here will overwrite the default web assets.", metavar="PATH", type="string", advanced=True) parser.add_option("--textures-path", dest="textures_path", helptext="Specifies a non-standard textures path, from which terrain.png and other textures are loaded.", metavar="PATH", type="string", advanced=True) parser.add_option("--check-terrain", dest="check_terrain", helptext="Prints the location and hash of terrain.png, useful for debugging terrain.png problems", action="store_true", advanced=False, commandLineOnly=True) From e7e0f526eac8436404a39e9ae9238bc7e5ab69ef Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Mon, 10 Oct 2011 15:17:11 -0400 Subject: [PATCH 23/40] renamed "Signposts" button to "Markers" to be more generic --- overviewer_core/data/web_assets/overviewer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overviewer_core/data/web_assets/overviewer.js b/overviewer_core/data/web_assets/overviewer.js index b76a4fb..8ec58b9 100644 --- a/overviewer_core/data/web_assets/overviewer.js +++ b/overviewer_core/data/web_assets/overviewer.js @@ -708,7 +708,7 @@ var overviewer = { // only create drop down if there's used options if (items.length > 0) { - overviewer.util.createDropDown('Signposts', items); + overviewer.util.createDropDown('Markers', items); } } From 67dd795e603f31b90308061d88c88323516ce121 Mon Sep 17 00:00:00 2001 From: Michael Writhe Date: Wed, 12 Oct 2011 15:24:28 -0600 Subject: [PATCH 24/40] issue #513, fixed spelling of color vs colour. >_< canadian spelling. --- overviewer_core/data/web_assets/overviewer.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overviewer_core/data/web_assets/overviewer.css b/overviewer_core/data/web_assets/overviewer.css index 9085557..0ae76e5 100644 --- a/overviewer_core/data/web_assets/overviewer.css +++ b/overviewer_core/data/web_assets/overviewer.css @@ -111,7 +111,7 @@ body { border: 2px solid #000; font-size: 12pt; width: 20em; - background-colour: #fff; + background-color: #fff; } #searchControl>input.inactive { From 27330cb45f81ac97fbc1012180b583e728aee574 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Thu, 13 Oct 2011 23:28:18 -0400 Subject: [PATCH 25/40] added quotes around parameter in pngout snippet Thanks Lathanael --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 6bf8047..3e22ea1 100644 --- a/README.rst +++ b/README.rst @@ -311,7 +311,7 @@ need to be doubled up if this is in a batch file. :: - FOR /R c:\path\to\tiles\folder %v IN (*.png) DO pngout %v /y + FOR /R c:\path\to\tiles\folder %v IN (*.png) DO pngout "%v" /y Bugs ==== From c852bffdafa2ac48fbd54dd90e6dd5aaa7ab38b8 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sat, 15 Oct 2011 12:59:03 -0400 Subject: [PATCH 26/40] When building cube images, paste sides over top, not the other way around Fixes problem with stacks of blocks showing a bit of the top of the blockr, most visible on spruce trees. --- overviewer_core/textures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index 7c8b708..061cf4c 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -302,9 +302,9 @@ def _build_block(top, side, blockID=None): composite.alpha_over(img, otherside, (12,6), otherside) composite.alpha_over(img, top, (0,9), top) else: + composite.alpha_over(img, top, (0,0), top) composite.alpha_over(img, side, (0,6), side) composite.alpha_over(img, otherside, (12,6), otherside) - composite.alpha_over(img, top, (0,0), top) # Manually touch up 6 pixels that leave a gap because of how the # shearing works out. This makes the blocks perfectly tessellate-able From 19d4946ae36bd1f939823ee99750084b4ac4408c Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sun, 16 Oct 2011 23:13:11 -0400 Subject: [PATCH 27/40] Completed options documentation. --- docs/options.rst | 588 +++++++++++++++++++++++++++--------- overviewer.py | 4 +- overviewer_core/textures.py | 2 +- sample.settings.py | 2 +- 4 files changed, 445 insertions(+), 151 deletions(-) diff --git a/docs/options.rst b/docs/options.rst index c3d5903..3c43081 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -1,6 +1,22 @@ -======= -Options -======= +==================== +Settings and Options +==================== + +Overviewer settings can be set in two places, on the command line when you run +the overviewer, or in a settings file. You specify a settings file to use with +the :option:`--settings` command line option. + +.. note:: + Any command line option can optionally be set in the settings file. However, + there are some settings that can only be set in the settings file. + +.. note:: + Some options go by different names on the command line and the settings + file. Those are noted in bold below. + +The first section of this document covers command line options. The second part +covers the more advanced ways of customizing The Overviewer using settings +files. .. contents:: :local: @@ -18,23 +34,13 @@ Command line options Useful Options -------------- -.. cmdoption:: --rendermodes [,MODE2,...] - Use this option to specify which render mode to use, such as lighting or - night. Use --list-rendermodes to get a list of available rendermodes, and - a short description of each. If you provide more than one mode (separated - by commas), Overviewer will render all of them at once, and provide a - toggle on the resulting map to switch between them. - - If for some reason commas do not work for your shell (like if you're using - Powershell on Windows), you can also use a colon ':' or a forward slash '/' - to separate the modes. +.. cmdoption:: --settings - See the `Render Modes`_ section for more information. + Use this option to load settings from a file. For more information see the + `Settings File`_ section below. -.. cmdoption:: --list-rendermodes - - List the available render modes, and a short description of each. + **Not available in settings file (duh)** .. cmdoption:: --north-direction @@ -44,96 +50,336 @@ Useful Options the existing map uses. For new maps, it defaults to lower-left for historical reasons. -.. cmdoption:: --settings + .. note:: + We define cardinal directions by the sun in game; the sun rises in the + East and sets in the West. - Use this option to load settings from a file. For more information see the - `Settings File`_ section below. + **Settings file:** + Option name: ``north_direction`` + + Format: One of the above strings. + +.. cmdoption:: --rendermodes [,MODE2,...] + + Use this option to specify which render mode to use, such as lighting or + night. Use :option:`--list-rendermodes` to get a list of available + rendermodes, and a short description of each. If you provide more than one + mode (separated by commas), Overviewer will render all of them at once, and + provide a toggle on the resulting map to switch between them. + + If for some reason commas do not work for your shell (like if you're using + Powershell on Windows), you can also use a colon ':' or a forward slash '/' + to separate the modes. + + Incomplete list of common render-modes for your convenience: + + * normal, + * lighting + * night + + **Settings file:** + Option name: ``rendermode`` **Note the lack of an s** + + Format: a list of strings. + + Default: ["normal"] + + See the `Render Modes`_ section for more information. + +.. cmdoption:: --list-rendermodes + + List the available render modes, and a short description of each, and exit. + + **Not available in settings file** Less Useful Options ------------------- -.. cmdoption:: -p , --processes - - Adding the "-p" option will utilize more cores during processing. This - can speed up rendering quite a bit. The default is set to the same - number of cores in your computer, but you can adjust it. - - Example to run 5 worker processes in parallel:: - - python overviewer.py -p 5 - -.. cmdoption:: -d, --delete - - This option changes the mode of execution. No tiles are rendered, and - instead, files are deleted. - - *Note*: Currently only the overviewer.dat file is deleted when you run with - this option - -.. cmdoption:: --forcerender - - Force re-rendering the entire map (or the given regionlist). This - is an easier way to completely re-render without deleting the map. - -.. cmdoption:: --regionlist - - Use this option to specify manually a list of regions to consider for - updating. Without this option, every chunk in every region is checked for - update and if necessary, re-rendered. If this option points to a file - containing, 1 per line, the path to a region data file, then only those - in the list will be considered for update. - - It's up to you to build such a list. On Linux or Mac, try using the "find" - command. You could, for example, output all region files that are older than - a certain date. Or perhaps you can incrementally update your map by passing - in a subset of regions each time. It's up to you! - -.. cmdoption:: -z , --zoom - - See the :ref:`zoom ` section below. - .. cmdoption:: --bg-color Configures the background color for the Google Map output. Specify in #RRGGBB format. -*This list is currently incomplete. Use the* :option:`--help <-h>` *and* -:option:`--advanced-help` *options to see the complete list of accepted command -line options.* + **Settings file:** + Option name: ``bg_color`` -Settings File -============= + Format: A string in the above format. -You can optionally store settings in a file named settings.py (or really, -anything you want). It is a regular python script, so you can use any python -functions or modules you want. To use a settings file, use the --settings -command line option. + Default: "#1A1A1A" -For a sample settings file, look at 'sample.settings.py'. Note that this file -is not meant to be used directly, but instead it should be used as a -collection of examples to guide writing your own. +.. cmdoption:: --changelist -Here's a (possibly incomplete) list of available settings, which are available -in settings.py. Note that you can also set command-line options in a similar -way. + Outputs a list of changed tiles to the named file. If the file doesn't + exist, it is created. If it does exist, its contents are overwritten. -imgformat=FORMAT - Set the output image format used for the tiles. The default is 'png', - but 'jpg' is also supported. + This could be useful for example in conjunction with a script to upload only + changed tiles to your web server. -.. _zoom: + **Settings file:** + Option name: ``changelist`` -zoom=ZOOM - The Overviewer by default will detect how many zoom levels are required - to show your entire map. This option sets it manually. + Format: String (path plus filename) - *You do not normally need to set this option!* + Default: Not specified (no changelist outputted) + +.. cmdoption:: --changelist-format + + Chooses absolute or relative paths for the output with the + :option:`--changelist` option. Valid values for format are "relative" or + "absolute". + + **Settings file:** + Option name: ``changelist_format`` + + Format: A string (one of the above) + + Default: "relative" + +.. cmdoption:: --check-terrain + + When this option appears on the command line, Overviewer prints the location + and hash of the terrain.png it will use, and then exits. + + This is useful for debugging terrain.png path problems, especially with + :option:`--textures-path`. Use this to see what terrain.png your current + setup has selected. + + **Not available in settings file** + +.. cmdoption:: --display-config + + Display the configuration parameters and exit. Doesn't render the map. This + is useful to help validate a configuration setup. + + **Not available in settings file** + +.. cmdoption:: --forcerender + + Force re-rendering the entire map (or the given regionlist). This + is an easier way to completely re-render without deleting the map. + + This is useful if you change texture packs and want to re-render everything + in the new textures, or if you're changing the :option:`--north-direction`. + + **Settings file:** + Option name: ``forcerender`` + + Format: A boolean + + Default: False + +.. cmdoption:: --imgformat + + Specifies the output format for the tiles. Currently supported options are + "png" or "jpg". + + **Settings file:** + Option name: ``imgformat`` + + Format: A string, either "png" or "jpg" + + Default: "png" + +.. cmdoption:: --imgquality + + When using ":option:`--imgformat` jpg", this specifies the jpeg quality + parameter. This can help save disk space for larger maps. + + For saving space with pngs, see :option:`--optimize-img` + + **Settings file:** + Option name: ``imgquality`` + + Format: An integer 1-100 + + Default: 95 + +.. cmdoption:: --no-signs + + Doesn't output signs to markers.js. This has the effect of disabling signs + on your map. + + **Settings file:** + Option name: ``nosigns`` + + Format: Boolean + + Default: False + +.. cmdoption:: --optimize-img + + When using ":option:`--imgformat` png" (the default), this performs file + size optimizations on the output. The level parameter is an integer + specifying one of the following: + + 1. Run pngcrush on all tiles + + 2. Run pngcrush plus advdef on all tiles + + 3. Run pngcrush plus advdef with more aggressive settings. + + These options may double the time or worse it takes to render your map, and + can be expected to give around 19-23% reduction in file size. + + These options also require the corresponding program(s) installed and in + your system path ($PATH or %PATH% environment variable) + + **Settings file:** + Option name: ``optimizeimg`` + + Format: an integer + + Default: not set (no optimization) + +.. cmdoption:: -p , --processes + + On multi-cored or multi-processor machines, The Overviewer will perform its + work on *all* cores by default. If you want to manually specify how many + workers to run in parallel, use this option. + + Example to run 5 worker processes in parallel:: + + overviewer.py -p 5 + + **Settings file:** + Option name: ``procs`` + + Format: an integer. + + Default: ``multiprocessing.cpu_count()`` + +.. cmdoption:: -q, --quiet + + Prints less output. You can specify this multiple times. + + **Settings file:** + Option name: ``quiet`` + + Format: an integer + + Default: 0 + +.. cmdoption:: --regionlist + + Use this option to specify manually a list of regions to consider for + updating. In normal operation, every chunk in every region is checked for + update and if necessary, re-rendered. With this option, only the specified + chunks are checked. + + This option should name a file containing, 1 per line, the path to the + region files to be considered for update. + + It's up to you to build such a list. On Linux or Mac, try using the "find" + command. You could, for example, output all region files that are older than + a certain date. Or perhaps you can incrementally update your map by passing + in a subset of regions each time. It's up to you! + + **Settings file:** + Option name: ``regionlist`` + + Format: A string representing the region list file. + + Default: Scan all region files. + + .. note:: + See sample.settings.py for an example for how to build a region list + file. + +.. cmdoption:: --skip-js + + Skip the generation and output of markers.js and regions.js to the output + directory. + + **Settings file:** + Option name: ``skipjs`` + + Format: Boolean + + Default: False + +.. cmdoption:: --textures-path + + Use this option to specify an alternate terrain.png to use for textures when + rendering a world. ``path`` specifies the **containing directory** of + terrain.png. + + The Overviewer will look for terrain.png in the following places in this + order: path specified by this option, the program's directory, the + overviewer_core/data/textures directory within the source directory, the + default textures that come with Minecraft if it's installed. + + .. note:: + + If you installed Overviewer from the Debian package, then there isn't a + source directory; you must use this option to specify non-default + textures. + + If you're having trouble getting The Overviewer to recognize your textures, + see the :option:`--check-terrain` option. + + **Settings file:** + Option name: ``textures_path`` + + Format: A string (path to a dir with a terrain.png) + + Default: None + +.. cmdoption:: -v, --verbose + + Prints more output. You can specify this multiple times. + + **Settings file:** + Option name: ``verbose`` + + Format: an integer + + Default: 0 + +.. cmdoption:: -V, --version + + Displays the version information and exits + + **Not available in settings file** + +.. cmdoption:: --web-assets-path + + When The Overviewer runs, it copies the files from the web_assets directory + to the destination directory. If you wish to override these files with your + own, for example, to make changes, you may put them in your own directory + :make + and specify the :option:`--web-assets-path` option. + + Files in the folder specified by ``path`` will override files from the + web_assets directory, letting you customize the files. + + If you're running from source and are comfortable merging with Git, it may + be better to edit the web_assets directly. If we update one of the files, + you can use Git to merge in our changes with yours. + + If, however, you do not like Git, and don't mind having to manually update + or merge web assets (or don't care for web asset updates at all), then copy + all the web assets to a directory of your own and use this option. + + **Settings file:** + Option name: ``web_assets_path`` + + Format: A string (path to a directory to use for custom web assets) + + Default: Not set (no additional web assets used) + +.. cmdoption:: -z , --zoom + + .. warning:: + + This option does not do what you think it does. You almost certainly do + not want to set this. + + This option effectively sets *how far the map can be zoomed out*. The + Overviewer will by default determine how many *zoom levels* your map needs + to show the entire map. This option overrides that; setting this option + lower than automatically determined will *crop your map* and parts will be + cut off. (We acknowledge that name zoom is misleading) - This is equivalent to setting the dimensions of the highest zoom level. It - does not actually change how the map is rendered, but rather *how much of - the map is rendered.* Setting this option too low *will crop your map.* - (Calling this option "zoom" may be a bit misleading, I know) - To be precise, it sets the width and height of the highest zoom level, in tiles. A zoom level of z means the highest zoom level of your map will be 2^z by 2^z tiles. @@ -142,43 +388,92 @@ zoom=ZOOM to be too large, or you want to render a smaller portion of your map, instead of rendering everything. - Remember that each additional zoom level adds 4 times as many tiles as - the last. This can add up fast, zoom level 10 has over a million tiles. - Tiles with no content will not be rendered, but they still take a small - amount of time to process. + **Settings file:** + Option name: ``zoom`` + + Format: An integer. + + Default: Automatically calculated from the world size. + +.. note:: + + There are **more settings** that cannot be specified on the command line. + See the section below! + +Settings File +============= + +You can optionally store settings in a file named settings.py (or really, +anything you want). It is a regular python script, so you can use any python +functions or modules you want. To use a settings file, use the +:option:`--settings` command line option when you run the Overviewer. + +For a sample settings file, look at 'sample.settings.py'. Note that this file is +not meant to be used directly, but instead it should be used as a collection of +examples to guide writing your own. It contains a number of examples to get you +started, but you almost certainly don't want to use it as-is. + +You can specify *any of the above* options in your settings file *in addition to +the ones documented below*. For the command-line options, find its listed +"Option name" which is the Python identifier you will use. For example, if you +wanted to specify :option:`--bg-color`, you would look and see its option name +is "bg_color" (note the underscore) and you would put this line in your settings +file:: + + bg_color = "#000000" + +Settings file options +--------------------- + +In addition to the `Command line options`_, you can specify these options. + + +.. describe:: web_assets_hook -web_assets_hook This option lets you define a function to run after the web assets have been copied into the output directory, but before any tile rendering takes place. This is an ideal time to do any custom postprocessing for markers.js or other web assets. + + Set this identifier to a Python *function object* to be called. - This function should accept one argument: a QuadtreeGen object. + This function should accept one argument: a + :class:`overviewer_core.googlemap.MapGen` object. -web_assets_path - This option lets you provide alternative web assets to use when - rendering. The contents of this folder will be copied into the output folder - during render, and will overwrite any default files already copied by - Overviewer. See the web_assets folder included with Overviewer for the - default assets. + .. warning:: -textures_path - This is like web_assets_path, but instead it provides an alternative texture - source. Overviewer looks in here for terrain.png and other textures before - it looks anywhere else. + Currently, this option only works if the :option:`--skip-js` option is + set -north_direction - Specifies which corner of the screen north will point to. - Valid options are: lower-left, upper-left, upper-right, lower-right. +.. describe:: rendermode-options + + Different rendermodes have different options. This option is a dictionary + that maps rendermode names to option dictionaries. + + See the `Render Modes`_ section for relevant options to the render modes. + +.. describe:: custom_rendermodes + + You can also specify your own custom rendermodes with this option. This is a + dictionary mapping your rendermode name to a dictionary of parameters to + use. + + See the `Defining Custom Rendermodes`_ section for more information. Render Modes ============ -.. _rendermode-options: https://github.com/agrif/Minecraft-Overviewer/tree/rendermode-options +A rendermode is a unique way of rendering a Minecraft map. The normal render +mode was the original, and we've since added a render mode with proper lighting, +a rendermode for nighttime lighting, and we have a rendermode that only shows +caves. -Rendermode options are a new way of changing how existing render modes -work, by passing in values at startup. For example, you can change how -dark the 'night' mode is, or enable lighting in 'cave' mode. +Beyond that, there are also render "overlays" that can be toggled on or off, +overlaying a proper rendering. These can be used to show where minerals are and +such. + +Specify your rendermodes with :option:`--rendermodes`. You can get a list of all +rendermodes installed with :option:`--list-rendermodes`. Options and Rendermode Inheritance ---------------------------------- @@ -211,9 +506,8 @@ relationships. Right now, it looks something like this: How to Set Options ------------------ -Available options for each mode are listed below, but once you know -what to set you'll have to edit *settings.py* to set them. Here's an -example:: +Available options for each mode are listed below, but once you know what to set +you'll have to edit your settings file to set them. Here's an example:: rendermode_options = { 'lighting': { @@ -231,39 +525,6 @@ you want to apply the options to, then a dictionary containing each option. So in this example, 'lighting' mode has 'edge_opacity' set to 0.5, and 'cave' mode has 'lighting' turned on and 'depth_tinting' turned off. -Defining Custom Rendermodes ---------------------------- - -Sometimes, you want to render two map layers with the same mode, but with two -different sets of options. For example, you way want to render a cave mode with -depth tinting, and another cave mode with lighting and no depth tinting. In this -case, you will want to define a 'custom' render mode that inherits from 'cave' -and uses the options you want. For example:: - - custom_rendermodes = { - 'cave-lighting': { - 'parent': 'cave', - 'label': 'Lit Cave', - 'description': 'cave mode, with lighting', - 'options': { - 'depth_tinting': False, - 'lighting': True, - } - }, - } - - rendermode = ['cave', 'cave-lighting'] - -Each entry in ``custom_rendermodes`` starts with the mode name, and is followed -by a dictionary of mode information, such as the parent mode and description -(for your reference), a label for use on the map, as well as the options to -apply. - -Every custom rendermode you define is on exactly equal footing with the built-in -modes: you can put them in the ``rendermode`` list to render them, you can -inherit from them in other custom modes, and you can even add options to them -with ``rendermode_options``, though that's a little redundant. - Option Listing -------------- @@ -311,6 +572,39 @@ color. See the *settings.py* example below for an example usage of **minerals**. +Defining Custom Rendermodes +--------------------------- + +Sometimes, you want to render two map layers with the same mode, but with two +different sets of options. For example, you way want to render a cave mode with +depth tinting, and another cave mode with lighting and no depth tinting. In this +case, you will want to define a 'custom' render mode that inherits from 'cave' +and uses the options you want. For example:: + + custom_rendermodes = { + 'cave-lighting': { + 'parent': 'cave', + 'label': 'Lit Cave', + 'description': 'cave mode, with lighting', + 'options': { + 'depth_tinting': False, + 'lighting': True, + } + }, + } + + rendermode = ['cave', 'cave-lighting'] + +Each entry in ``custom_rendermodes`` starts with the mode name, and is followed +by a dictionary of mode information, such as the parent mode and description +(for your reference), a label for use on the map, as well as the options to +apply. + +Every custom rendermode you define is on exactly equal footing with the built-in +modes: you can put them in the ``rendermode`` list to render them, you can +inherit from them in other custom modes, and you can even add options to them +with ``rendermode_options``, though that's a little redundant. + Example *settings.py* --------------------- diff --git a/overviewer.py b/overviewer.py index 3532af3..3399424 100755 --- a/overviewer.py +++ b/overviewer.py @@ -114,7 +114,7 @@ def main(): parser.add_option("--imgformat", dest="imgformat", helptext="The image output format to use. Currently supported: png(default), jpg.", advanced=True ) parser.add_option("--imgquality", dest="imgquality", default=95, helptext="Specify the quality of image output when using imgformat=\"jpg\".", type="int", advanced=True) parser.add_option("--bg-color", dest="bg_color", helptext="Configures the background color for the GoogleMap output. Specify in #RRGGBB format", advanced=True, type="string", default="#1A1A1A") - parser.add_option("--optimize-img", dest="optimizeimg", helptext="If using png, perform image file size optimizations on the output. Specify 1 for pngcrush, 2 for pngcrush+advdef and 3 for pngcrush-advdef with more agressive settings. This may double (or more) render times, but will produce up to 30% smaller images. NOTE: requires corresponding programs in $PATH or %PATH%", advanced=True) + parser.add_option("--optimize-img", dest="optimizeimg", helptext="If using png, perform image file size optimizations on the output. Specify 1 for pngcrush, 2 for pngcrush+advdef and 3 for pngcrush-advdef with more aggressive settings. This may double (or more) render times, but will produce up to 30% smaller images. NOTE: requires corresponding programs in $PATH or %PATH%", advanced=True) parser.add_option("--web-assets-hook", dest="web_assets_hook", helptext="If provided, run this function after the web assets have been copied, but before actual tile rendering begins. It should accept a MapGen object as its only argument.", action="store", metavar="FUNCTION", type="function", advanced=True) parser.add_option("--web-assets-path", dest="web_assets_path", helptext="Specifies a non-standard web_assets directory to use. Files here will overwrite the default web assets.", metavar="PATH", type="string", advanced=True) parser.add_option("--textures-path", dest="textures_path", helptext="Specifies a non-standard textures path, from which terrain.png and other textures are loaded.", metavar="PATH", type="string", advanced=True) @@ -124,7 +124,7 @@ def main(): parser.add_option("--skip-js", dest="skipjs", action="store_true", helptext="Don't output marker.js or regions.js") parser.add_option("--no-signs", dest="nosigns", action="store_true", helptext="Don't output signs to markers.js") parser.add_option("--north-direction", dest="north_direction", action="store", helptext="Specifies which corner of the screen north will point to. Defaults to whatever the current map uses, or lower-left for new maps. Valid options are: " + ", ".join(avail_north_dirs) + ".", type="choice", default="auto", choices=avail_north_dirs) - parser.add_option("--changelist", dest="changelist", action="store", helptext="Output list of changed tiles to file. If the file exists, it's contents will be overwritten.",advanced=True) + parser.add_option("--changelist", dest="changelist", action="store", helptext="Output list of changed tiles to file. If the file exists, its contents will be overwritten.",advanced=True) parser.add_option("--changelist-format", dest="changelist_format", action="store", helptext="Output relative or absolute paths for --changelist. Only valid when --changelist is used", type="choice", default="auto", choices=["auto", "relative","absolute"],advanced=True) parser.add_option("--display-config", dest="display_config", action="store_true", helptext="Display the configuration parameters, but don't render the map. Requires all required options to be specified", commandLineOnly=True) #parser.add_option("--write-config", dest="write_config", action="store_true", helptext="Writes out a sample config file", commandLineOnly=True) diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index 061cf4c..48a2f20 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -35,7 +35,7 @@ def _find_file(filename, mode="rb", verbose=False): * the textures_path given in the config file (if present) * The program dir (same dir as overviewer.py) - * The overviewer_core textures dir + * The overviewer_core/data/textures dir * On Darwin, in /Applications/Minecraft * Inside minecraft.jar, which is looked for at these locations diff --git a/sample.settings.py b/sample.settings.py index e461189..015120b 100644 --- a/sample.settings.py +++ b/sample.settings.py @@ -111,7 +111,7 @@ if imgformat != "jpg": ################################################################################ ### web_assets_hook ## If provided, run this function after the web assets have been copied, but -## before actual tile rendering beings. It should accept a QuadtreeGen +## before actual tile rendering beings. It should accept a MapGen ## object as its only argument. Note: this is only called if skipjs is True ## Default: not yet ## Type: function From 3954d232b8a0a3b7b64937b1ddf93c6f3946f7af Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sun, 16 Oct 2011 23:16:43 -0400 Subject: [PATCH 28/40] misc docs tweaks --- docs/index.rst | 13 +++++++++---- docs/running.rst | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 5acb4bc..956e68c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,3 +1,7 @@ +.. + Hey! You! Read these docs at http://docs.overviewer.org + Go there now! + ======================== The Minecraft Overviewer ======================== @@ -35,10 +39,11 @@ bad)**, head to the :doc:`Building ` page. Help ==== -**IF YOU NEED HELP COMPILING OR RUNNING THE OVERVIEWER** feel free to pop in -IRC: #overviewer on freenode. Not familiar with IRC? `Use the web client -`_. There's usually someone on -there that can help you out. + +**IF YOU NEED HELP COMPILING OR RUNNING THE OVERVIEWER** feel free to chat with +us live in IRC: #overviewer on Freenode. There's usually someone on there that +can help you out. Not familiar with IRC? `Use the web client +`_. If you think you've found a bug or other issue, file an issue on our `Issue Tracker `_. Filing or diff --git a/docs/running.rst b/docs/running.rst index 1d76ba1..52fddbc 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -25,8 +25,8 @@ And similarly for other systems:: 1. The path to your Minecraft world on your hard drive 2. The name of a single player world on your current system. Note that if it has spaces, you will need to put the world name in quotes. - 3. If the world name is in the format "World #" (e.g. "World 1"), you can just specify the - number. + 3. If your single-player world name is in the format "World #" (e.g. "World + 1"), you can just specify the number. **Output Dir** This is the directory you would like to put the rendered tiles and From 6862ae4faf2ff7790fe6fe46b290ab041ee4031c Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Sun, 16 Oct 2011 23:27:05 -0400 Subject: [PATCH 29/40] added in cross-reference --- docs/faq.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index 8e6cd16..f9790a1 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -3,10 +3,10 @@ Frequently Asked Questions ========================== **The full map doesn't display even when fully zoomed out!** - Are you using the ``-z`` or ``--zoom`` option on your commandline or + Are you using the :option:`-z` or :option:`--zoom <-z>` option on your commandline or in settings.py? If so, try removing it, or increasing the value you set. It's quite likely you don't need it at all. See the documentation for the - :ref:`zoom ` option. + :option:`zoom <-z>` option. **You've added a few feature, but it's not showing up on my map!** Some new features will only show up in newly-rendered areas. Use the From 546bf0ef4e466fb7a1eae4d9b56b246007a8896f Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Mon, 17 Oct 2011 15:02:44 -0400 Subject: [PATCH 30/40] fixed typo, clarified a sentence --- docs/options.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/options.rst b/docs/options.rst index 3c43081..79e5150 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -263,8 +263,8 @@ Less Useful Options Use this option to specify manually a list of regions to consider for updating. In normal operation, every chunk in every region is checked for - update and if necessary, re-rendered. With this option, only the specified - chunks are checked. + update and if necessary, re-rendered. With this option, only the chunks in + the specified regions are checked. This option should name a file containing, 1 per line, the path to the region files to be considered for update. @@ -346,7 +346,6 @@ Less Useful Options When The Overviewer runs, it copies the files from the web_assets directory to the destination directory. If you wish to override these files with your own, for example, to make changes, you may put them in your own directory - :make and specify the :option:`--web-assets-path` option. Files in the folder specified by ``path`` will override files from the From fa17d2c87da8b5d80d59c0bc2ce46f0cb3d4b139 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Tue, 18 Oct 2011 00:50:57 -0400 Subject: [PATCH 31/40] fixed typo, clarified some things, added cross-ref --- docs/options.rst | 15 ++++++++++----- docs/running.rst | 6 ++++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/docs/options.rst b/docs/options.rst index 79e5150..f477781 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -73,7 +73,7 @@ Useful Options Incomplete list of common render-modes for your convenience: - * normal, + * normal * lighting * night @@ -82,7 +82,7 @@ Useful Options Format: a list of strings. - Default: ["normal"] + Default: only render the normal mode See the `Render Modes`_ section for more information. @@ -144,6 +144,8 @@ Less Useful Options :option:`--textures-path`. Use this to see what terrain.png your current setup has selected. + See the :ref:`installing-textures` section for an example. + **Not available in settings file** .. cmdoption:: --display-config @@ -310,12 +312,15 @@ Less Useful Options .. note:: - If you installed Overviewer from the Debian package, then there isn't a - source directory; you must use this option to specify non-default - textures. + If you installed Overviewer from the Debian package or chose to install + the overviewer from source (``python setup.py install``), then there + isn't a source directory; this option may be necessary to specify + non-default textures. If you're having trouble getting The Overviewer to recognize your textures, see the :option:`--check-terrain` option. + + Also see the :ref:`installing-textures` section of the documentation. **Settings file:** Option name: ``textures_path`` diff --git a/docs/running.rst b/docs/running.rst index 52fddbc..e5d873c 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -59,6 +59,8 @@ Incremental updates are just as easy, and a lot faster. If you go and change something inside your world, run the command again and Overviewer will automatically re-render only what's needed. +.. _installing-textures: + Installing the Textures ======================= If you're running on a machine without the Minecraft client installed, you will @@ -89,10 +91,10 @@ You have several options: installations, you will need to specify the path... see the next bullet. * You can put a terrain.png file anywhere you want and point to its location - with the ``--textures-path`` option. This should point to the directory containing + with the :option:`--textures-path` option. This should point to the directory containing the terrain.png, not to the file itself. -Note: the ``--check-terrain`` option is useful for debugging terrain.png issues. +Note: the :option:`--check-terrain` option is useful for debugging terrain.png issues. For example:: $ ./overviewer.py --check-terrain From 600b8011442031ea02cdc7093f391c76957737c0 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Wed, 19 Oct 2011 15:31:51 -0400 Subject: [PATCH 32/40] fixed some typos/errors in options docs page. Also added an example. --- docs/options.rst | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/options.rst b/docs/options.rst index f477781..81c2ac7 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -77,6 +77,10 @@ Useful Options * lighting * night + Example:: + + ./overviewer.py --rendermodes=lighting,night /opt/server/world /opt/map + **Settings file:** Option name: ``rendermode`` **Note the lack of an s** @@ -170,7 +174,7 @@ Less Useful Options Default: False -.. cmdoption:: --imgformat +.. cmdoption:: --imgformat Specifies the output format for the tiles. Currently supported options are "png" or "jpg". @@ -182,7 +186,7 @@ Less Useful Options Default: "png" -.. cmdoption:: --imgquality +.. cmdoption:: --imgquality When using ":option:`--imgformat` jpg", this specifies the jpeg quality parameter. This can help save disk space for larger maps. @@ -233,7 +237,7 @@ Less Useful Options Default: not set (no optimization) -.. cmdoption:: -p , --processes +.. cmdoption:: -p , --processes On multi-cored or multi-processor machines, The Overviewer will perform its work on *all* cores by default. If you want to manually specify how many @@ -284,7 +288,7 @@ Less Useful Options Default: Scan all region files. .. note:: - See sample.settings.py for an example for how to build a region list + See sample.settings.py for an example on how to build a region list file. .. cmdoption:: --skip-js @@ -449,7 +453,7 @@ In addition to the `Command line options`_, you can specify these options. Currently, this option only works if the :option:`--skip-js` option is set -.. describe:: rendermode-options +.. describe:: rendermode_options Different rendermodes have different options. This option is a dictionary that maps rendermode names to option dictionaries. From 73ace48c715b5d609b009b80343c7ea7afd7a98e Mon Sep 17 00:00:00 2001 From: Michael Writhe Date: Wed, 19 Oct 2011 16:46:01 -0600 Subject: [PATCH 33/40] comment clarity to alleviate confusion regarding cacheMinutes. --- overviewer_core/data/web_assets/overviewerConfig.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/overviewer_core/data/web_assets/overviewerConfig.js b/overviewer_core/data/web_assets/overviewerConfig.js index c99398e..c4f5ffb 100644 --- a/overviewer_core/data/web_assets/overviewerConfig.js +++ b/overviewer_core/data/web_assets/overviewerConfig.js @@ -1,7 +1,9 @@ var overviewerConfig = { /** - * These are things that will probably not need to be changed by the user, - * but are there because otherwise changing them is a giant PITA. + * These are things that will probably not need to be changed, but are there because + * otherwise changing them is a giant PITA. If you, the user, sees that its crucial for + * you to change these settings then the document repository might be able to assit you. + * http://docs.overviewer.org/en/latest/options/#cmdoption--web-assets-path */ 'CONST': { /** @@ -88,6 +90,11 @@ var overviewerConfig = { 'center': {spawn_coords}, /** * Set this to tell browsers how long they should cache tiles in minutes. + * Essentially if set to 0, the url for tiles will end in .png + * if not set to 0 it will amend a number derived from the current time + * to the end of the url, like .png?c=123456. This is a great method for + * preventing browsers from caching the images. 0 saves bandwidth, not 0 + * prevents caching. */ 'cacheMinutes': 0, /** From 2be184def63146d9c89f9c261b98188572a1c88f Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Wed, 19 Oct 2011 19:15:29 -0400 Subject: [PATCH 34/40] added a bit about customizing web assets --- docs/options.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/options.rst b/docs/options.rst index 81c2ac7..66fa404 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -368,6 +368,9 @@ Less Useful Options or merge web assets (or don't care for web asset updates at all), then copy all the web assets to a directory of your own and use this option. + See the :ref:`web-assets` section for more info on customizing your web + assets. + **Settings file:** Option name: ``web_assets_path`` @@ -653,3 +656,36 @@ tracks instead of ore. # 'night' : {'shade_strength' : 0.5}, # 'cave' : {'only_lit' : True, 'lighting' : True, 'depth_tinting' : False}, } + +.. _web-assets: + +Customizing Web Assets +====================== + +The web assets are the static html files stored in +overviewer_core/data/web_assets that are copied to the destination directory +when you run the Overviewer. Some of these files are actually templates and +certain parameters are set at render time depending on various factors. Others +are just straight up copied. + +You should not typically need to edit the files in here, but if you like +customizing things or want to edit them for whatever reason, here's two ways: + +1. If you're not afraid of Git and you're running the Overviewer from a Git + clone of our repository, you can edit the files in + overviewer_core/data/web_assets directly. When you pull in changes from us, + you will have to merge, but using Git should make this relatively painless. + +2. Otherwise, the recommended way is to use the :option:`--web-assets-path` + option. Use this option and point it to a directory of customized web assets + to copy. + + Files from the original web_assets directory are still copied, but any files + in the custom web assets directory will override the originals. This way you + can customize a few files and leave the rest alone. + + The downside is, if you want to upgrade you will have to merge in your + changes with any of our changes manually. To avoid merging entirely, just + copy *all* the web assets to your custom web assets folder. You'll keep the + old version of all files for eternity, missing out on new features we may + add, but you won't have to deal with merges at all. From e61291de4f0e3f5634f60c4c8bb3a077b291ec36 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Wed, 19 Oct 2011 19:20:11 -0400 Subject: [PATCH 35/40] changed reference url in overviewerConfig comments --- overviewer_core/data/web_assets/overviewerConfig.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/overviewer_core/data/web_assets/overviewerConfig.js b/overviewer_core/data/web_assets/overviewerConfig.js index c4f5ffb..e6889b4 100644 --- a/overviewer_core/data/web_assets/overviewerConfig.js +++ b/overviewer_core/data/web_assets/overviewerConfig.js @@ -1,13 +1,14 @@ var overviewerConfig = { /** - * These are things that will probably not need to be changed, but are there because - * otherwise changing them is a giant PITA. If you, the user, sees that its crucial for - * you to change these settings then the document repository might be able to assit you. - * http://docs.overviewer.org/en/latest/options/#cmdoption--web-assets-path + * These are things that will probably not need to be changed, but are there + * because otherwise changing them is a giant PITA. If you, the user, sees + * that its crucial for you to change these settings then the document + * repository might be able to assist you. + * http://docs.overviewer.org/en/latest/options/#customizing-web-assets */ 'CONST': { /** - * Height and width of the tiles in pixels (I think). + * Height and width of the tiles in pixels. */ 'tileSize': 384, /** From 79a3e0d795453a520533262650f300aab915cb74 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Mon, 24 Oct 2011 07:52:02 -0400 Subject: [PATCH 36/40] the "waay to big" error now gives an upper bound on zoom level --- overviewer_core/quadtree.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/overviewer_core/quadtree.py b/overviewer_core/quadtree.py index 5c1b3ce..36978f2 100644 --- a/overviewer_core/quadtree.py +++ b/overviewer_core/quadtree.py @@ -80,7 +80,7 @@ class QuadtreeGen(object): if depth is None: # Determine quadtree depth (midpoint is always 0,0) - for p in xrange(15): + for p in xrange(64): # Will 2^p tiles wide and high suffice? # X has twice as many chunks as tiles, then halved since this is a @@ -92,10 +92,12 @@ class QuadtreeGen(object): if xradius >= worldobj.maxcol and -xradius <= worldobj.mincol and \ yradius >= worldobj.maxrow and -yradius <= worldobj.minrow: break + + if p < 15: + self.p = p else: - raise ValueError("Your map is waaaay too big! Use the 'zoom' option in 'settings.py'.") + raise ValueError("Your map is waaaay too big! Use the 'zoom' option in 'settings.py'. Overviewer is estimating %i zoom levels, but you probably want less." % (p,)) - self.p = p else: self.p = depth xradius = 2**depth From aa04376a17d9fa1ebe2e5f4bfb18b67d205948b4 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Mon, 24 Oct 2011 11:51:31 -0400 Subject: [PATCH 37/40] added a note about "map waaaaay too big" errors. --- docs/options.rst | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/options.rst b/docs/options.rst index 66fa404..a8f00a3 100644 --- a/docs/options.rst +++ b/docs/options.rst @@ -353,9 +353,9 @@ Less Useful Options .. cmdoption:: --web-assets-path When The Overviewer runs, it copies the files from the web_assets directory - to the destination directory. If you wish to override these files with your - own, for example, to make changes, you may put them in your own directory - and specify the :option:`--web-assets-path` option. + to the destination directory. If you wish to override a file with your own, + for example, to make changes, you may put your modified copies in your own + directory and specify the directory with this option. Files in the folder specified by ``path`` will override files from the web_assets directory, letting you customize the files. @@ -399,6 +399,14 @@ Less Useful Options to be too large, or you want to render a smaller portion of your map, instead of rendering everything. + **If you are getting a "your map is waaaay too big" error** then this option + may help you render your map. That error is unlikely in naturally generated + worlds, but some really giant worlds may still cross the threshold. The + Overviewer will refuse to automatically render maps that require zoom level + 15 and above, so if you get this error, try specifying ``--zoom 15``. If + your map is still cut off around the edges, increase the zoom level by 1 and + try again. + **Settings file:** Option name: ``zoom`` From e29731fef3f32dfd0b9acd03ec72c584baf15fc0 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Mon, 24 Oct 2011 16:36:19 -0400 Subject: [PATCH 38/40] Stripped README of redundant info, added some to docs index --- README.rst | 306 +++++-------------------------------------------- docs/index.rst | 38 +++++- 2 files changed, 64 insertions(+), 280 deletions(-) diff --git a/README.rst b/README.rst index 3e22ea1..e46c711 100644 --- a/README.rst +++ b/README.rst @@ -3,63 +3,41 @@ Minecraft Overviewer ==================== By Andrew Brown and contributors (see CONTRIBUTORS.rst). -http://github.com/overviewer/Minecraft-Overviewer +Documentation: + http://docs.overviewer.org -Generates large resolution images of a Minecraft map. +Github code repository: + http://github.com/overviewer/Minecraft-Overviewer -In short, this program reads in Minecraft world files and renders very large -resolution images that can be viewed through a Google Maps interface. It -performs a similar function to the existing Minecraft Cartographer program but -with a slightly different goal in mind: to generate large resolution images -such that one can zoom in and see details. -See some examples here! -http://github.com/overviewer/Minecraft-Overviewer/wiki/Map-examples +The Minecraft Overviewer is a command-line tool for rendering high-resolution +maps of Minecraft worlds. It generates a set of static html and image files and +uses the Google Maps API to display a nice interactive map. -Further documentation may be found at -https://github.com/overviewer/Minecraft-Overviewer/wiki/Documentation +The Overviewer has been in active development for over a year and has many +features, including day and night lighting, cave rendering, mineral overlays, +and many plugins for even more features! It is written mostly in Python with +critical sections in C as an extension module. -To contact the developers and other users, go to the site at the top of this -README, or go to #overviewer on irc.freenode.net. +Getting Started +--------------- +All documentation has been consolidated at our documentation site. For +information on downloading, compiling, installing, and running The Overviewer, +visit the docs site. -Features -======== +http://docs.overviewer.org -* Renders large resolution images of your world, such that you can zoom in and - see details +A few helpful tips are below, but everyone is going to want to visit the +documentation site for the most up-to-date and complete set of instructions! -* Customizable textures! Pulls textures straight from your installed texture - pack! +Alternatively, the docs are also in the docs/ directory of the source download. +Look in there if you can't access the docs site. -* Outputs a Google Map powered interface that is memory efficient, both in - generating and viewing. +Examples +-------- +See examples of The Overviewer in action! -* Renders efficiently in parallel, using as many simultaneous processes as you - want! - -* Utilizes caching to speed up subsequent renderings of your world. - -* Throw the output directory up on a web server to share your Minecraft world - with everyone! - -Requirements -============ -This program requires: - -* Python 2.6 or 2.7 -* PIL (Python Imaging Library) -* Numpy -* Either the Minecraft client installed, or a terrain.png file. See the - `Textures`_ section below. -* A C compiler. - -If you download a binary package, then some or all of these may not be required. - -Using the Overviewer -==================== - -For a quick-start guide, see -https://github.com/overviewer/Minecraft-Overviewer/wiki/Quick-Start-Guide +https://github.com/overviewer/Minecraft-Overviewer/wiki/Map-examples Disclaimers ----------- @@ -78,204 +56,6 @@ directory and it will only update the tiles it needs to. There are probably some other minor glitches along the way, hopefully they will be fixed soon. See the `Bugs`_ section below. -Textures --------- -The Overviewer uses actual textures to render your world. However, I don't -include textures in the package. You will need to do one of two things before -you can use the Overviewer: - -* Make sure the Minecraft client is installed. The Overviewer will find the - installed minecraft.jar and extract the textures from it. - -* Install a texture file yourself. This file is called "terrain.png" and is - normally found in your minecraft.jar file (not "Minecraft.jar", the launcher, - but rather the file that's downloaded by the launcher and installed into a - hidden directory). You can also get this file from any of the third party - texture packs out there. - -Biome Tinting -------------- -With the Halloween update, biomes were added to Minecraft. In order to get -biome-accurate tinting, the Overviewer can use biome data produced by the -Minecraft Biome Extractor tool. This tool can be downloaded from: -http://www.minecraftforum.net/viewtopic.php?f=25&t=80902 - -If the "biomes" folder is present in the world directory, then the Overviewer -will use the biome data to tint grass and leaves automatically -- there is no -command line option to turn this feature on. If this folder does not exist, -then the Overviewer will use a static tinting for grass and leaves. - -Compiling the C Extension -------------------------- -The C Extension for Overviewer is no longer optional. In addition to -providing a higher quality image compositing function that looks better on -maps with lighting enabled, it now does the bulk of the rendering. - -If you downloaded Overviewer as a binary package, this extension will already -be compiled for you. - -If you have a C compiler and the Python development libraries set up, you can -compile this extension like this:: - - python setup.py build - -Note that you need the development headers for your version of Python installed, -look for a package named 'python-dev', 'python-devel' or similar. Also, some -Python distributions do not install "Imaging.h" and "ImPlatform.h" properly. If -you get errors complaining about them, you can get them from the PIL source, or -at . Just put them in -the same directory as "overviewer.py". - -For more detailed instructions, check the wiki: -https://github.com/overviewer/Minecraft-Overviewer/wiki/Build-Instructions - -Running -------- -To generate a set of Google Map tiles, use the overviewer.py script like this:: - - python overviewer.py [OPTIONS] - -The output directory will be created if it doesn't exist. This will generate a -set of image tiles for your world in the directory you choose. When it's done, -you will find an index.html file in the same directory that you can use to view -it. - - -Options -------- - --h, --help - Shows the list of options and exits - ---advanced-help - Display help - including advanced options - --p PROCS, --processes=PROCS - Adding the "-p" option will utilize more cores during processing. This - can speed up rendering quite a bit. The default is set to the same - number of cores in your computer, but you can adjust it. - - Example to run 5 worker processes in parallel:: - - python overviewer.py -p 5 - --d, --delete - This option changes the mode of execution. No tiles are rendered, and - instead, files are deleted. - - *Note*: Currently only the overviewer.dat file is deleted when you run with - this option - ---forcerender - Force re-rendering the entire map (or the given regionlist). This - is an easier way to completely re-render without deleting the map. - ---regionlist=regionlist - Use this option to specify manually a list of regions to consider for - updating. Without this option, every chunk in every region is checked for - update and if necessary, re-rendered. If this option points to a file - containing, 1 per line, the path to a region data file, then only those - in the list will be considered for update. - - It's up to you to build such a list. On Linux or Mac, try using the "find" - command. You could, for example, output all region files that are older than - a certain date. Or perhaps you can incrementally update your map by passing - in a subset of regions each time. It's up to you! - ---rendermodes=MODE1[,MODE2,...] - Use this option to specify which render mode to use, such as lighting or - night. Use --list-rendermodes to get a list of available rendermodes, and - a short description of each. If you provide more than one mode (separated - by commas), Overviewer will render all of them at once, and provide a - toggle on the resulting map to switch between them. - - If for some reason commas do not work for your shell (like if you're using - Powershell on Windows), you can also use a colon ':' or a forward slash '/' - to separate the modes. - ---list-rendermodes - List the available render modes, and a short description of each. - ---north-direction=NORTH_DIRECTION - Specifies which corner of the screen north will point to. - Valid options are: lower-left, upper-left, upper-right, lower-right. - If you do not specify this option, it will default to whatever direction - the existing map uses. For new maps, it defaults to lower-left for - historical reasons. - ---settings=PATH - Use this option to load settings from a file. The format of this file is - given below. - - -Settings --------- - -You can optionally store settings in a file named settings.py (or really, -anything you want). It is a regular python script, so you can use any python -functions or modules you want. To use a settings file, use the --settings -command line option. - -For a sample settings file, look at 'sample.settings.py'. Note that this file -is not meant to be used directly, but instead it should be used as a -collection of examples to guide writing your own. - -Here's a (possibly incomplete) list of available settings, which are available -in settings.py. Note that you can also set command-line options in a similar -way. - -imgformat=FORMAT - Set the output image format used for the tiles. The default is 'png', - but 'jpg' is also supported. - -zoom=ZOOM - The Overviewer by default will detect how many zoom levels are required - to show your entire map. This option sets it manually. - - *You do not normally need to set this option!* - - This is equivalent to setting the dimensions of the highest zoom level. It - does not actually change how the map is rendered, but rather *how much of - the map is rendered.* Setting this option too low *will crop your map.* - (Calling this option "zoom" may be a bit misleading, I know) - - To be precise, it sets the width and height of the highest zoom level, in - tiles. A zoom level of z means the highest zoom level of your map will be - 2^z by 2^z tiles. - - This option map be useful if you have some outlier chunks causing your map - to be too large, or you want to render a smaller portion of your map, - instead of rendering everything. - - Remember that each additional zoom level adds 4 times as many tiles as - the last. This can add up fast, zoom level 10 has over a million tiles. - Tiles with no content will not be rendered, but they still take a small - amount of time to process. - -web_assets_hook - This option lets you define a function to run after the web assets have - been copied into the output directory, but before any tile rendering takes - place. This is an ideal time to do any custom postprocessing for - markers.js or other web assets. - - This function should accept one argument: a QuadtreeGen object. - -web_assets_path - This option lets you provide alternative web assets to use when - rendering. The contents of this folder will be copied into the output folder - during render, and will overwrite any default files already copied by - Overviewer. See the web_assets folder included with Overviewer for the - default assets. - -textures_path - This is like web_assets_path, but instead it provides an alternative texture - source. Overviewer looks in here for terrain.png and other textures before - it looks anywhere else. - -north_direction - Specifies which corner of the screen north will point to. - Valid options are: lower-left, upper-left, upper-right, lower-right. - Viewing the Results ------------------- Within the output directory you will find two things: an index.html file, and a @@ -290,44 +70,12 @@ however, bound by the Google Maps API terms of service. http://code.google.com/apis/maps/terms.html -Crushing the Output Tiles -------------------------- -Image files taking too much disk space? Try using pngcrush. On Linux and -probably Mac, if you have pngcrush installed, this command will go and crush -all your images in the given destination. This took the total disk usage of the -render for my world from 85M to 67M. - -:: - - find /path/to/destination -name "*.png" -exec pngcrush {} {}.crush \; -exec mv {}.crush {} \; - -Or if you prefer a more parallel solution, try something like this:: - - find /path/to/destination -print0 | xargs -0 -n 1 -P sh -c 'pngcrush $0 temp.$$ && mv temp.$$ $0' - -If you're on Windows, I've gotten word that this command line snippet works -provided pngout is installed and on your path. Note that the % symbols will -need to be doubled up if this is in a batch file. - -:: - - FOR /R c:\path\to\tiles\folder %v IN (*.png) DO pngout "%v" /y - Bugs ==== -This program has bugs. They are mostly minor things, I wouldn't have released a -completely useless program. However, there are a number of things that I want -to fix or improve. For a current list of issues, visit -http://github.com/overviewer/Minecraft-Overviewer/issues +https://github.com/overviewer/Minecraft-Overviewer/issues Feel free to comment on issues, report new issues, and vote on issues that are -important to you, so I can prioritize accordingly. - -An incomplete list of things I want to do soon is: - -* Improve efficiency - -* Some kind of graphical interface. +important to you. diff --git a/docs/index.rst b/docs/index.rst index 956e68c..57b1663 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,9 +21,45 @@ For a simple example of what your renders will look like, head over to `The "Exmaple" Map `_. For more user-contributed examples, see `The Example Wiki Page `_. -Download +Features ======== +* Renders large resolution images of your world, such that you can zoom in and + see details + +* Customizable textures! Pulls textures straight from your installed texture + pack! + +* Outputs a Google Map powered interface that is memory efficient, both in + generating and viewing. + +* Renders efficiently in parallel, using as many simultaneous processes as you + want! + +* Utilizes caching to speed up subsequent renderings of your world. + +* Throw the output directory up on a web server to share your Minecraft world + with everyone! + +Requirements +============ +This is a quick list of what's required to run The Overviewer. It runs on +Windows, Mac, and Linux as long as you have these software packages installed: + +* Python 2.6 or 2.7 + +* PIL (Python Imaging Library) + +* Numpy + +* Either a Minecraft Client installed or a terrain.png for the textures. + +There are additional requirements for compiling it. More details are available +in either the :doc:`Building ` or :doc:`Installing ` pages. + +Getting Started +=============== + The Overviewer works with Linux, Mac, and Windows! We provide Windows and Debian built executables for your convenience. Find them as well as the full sources on our `Github Homepage`_. From 420e784451d1c7a9077ff661134e02cef271d222 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Mon, 24 Oct 2011 18:17:13 -0400 Subject: [PATCH 39/40] added some comments --- overviewer_core/rendernode.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/overviewer_core/rendernode.py b/overviewer_core/rendernode.py index 9c4f047..cbd1ed2 100644 --- a/overviewer_core/rendernode.py +++ b/overviewer_core/rendernode.py @@ -108,15 +108,16 @@ class RenderNode(object): raise ValueError("there must be at least one quadtree to work on") self.options = options + # A list of quadtree.QuadTree objects representing each rendermode + # requested self.quadtrees = quadtrees #List of changed tiles self.rendered_tiles = [] #bind an index value to the quadtree so we can find it again #and figure out which worlds are where - i = 0 self.worlds = [] - for q in quadtrees: + for i, q in enumerate(quadtrees): q._render_index = i i += 1 if q.world not in self.worlds: @@ -163,18 +164,23 @@ class RenderNode(object): else: pool.map_async(bool,xrange(multiprocessing.cpu_count()),1) + # 1 quadtree object per rendermode requested quadtrees = self.quadtrees - # do per-quadtree init - - max_p = 0 + # Determine the total number of tiles by adding up the number of tiles + # from each quadtree. Also find the max zoom level (max_p). Even though + # each quadtree will always have the same zoom level, this bit of code + # does not make that assumption. + max_p = 0 total = 0 for q in quadtrees: total += 4**q.p if q.p > max_p: max_p = q.p self.max_p = max_p - # Render the highest level of tiles from the chunks + + # The next sections of code render the highest zoom level of tiles. The + # section after render the other levels. results = collections.deque() complete = 0 logging.info("Rendering highest zoom level of tiles now.") @@ -247,7 +253,8 @@ class RenderNode(object): self.print_statusline(complete, total, 1, True) - # Now do the other layers + # The highest zoom level has been rendered. + # Now do the lower zoom levels for zoom in xrange(self.max_p-1, 0, -1): level = self.max_p - zoom + 1 assert len(results) == 0 @@ -295,21 +302,21 @@ class RenderNode(object): requested, a new task is added to the pool and a result returned. """ if batch_size < len(self.quadtrees): - batch_size = len(self.quadtrees) + batch_size = len(self.quadtrees) batch = [] - jobcount = 0 + jobcount = 0 # roundrobin add tiles to a batch job (thus they should all roughly work on similar chunks) iterables = [q.get_worldtiles() for q in self.quadtrees] for job in roundrobin(iterables): # fixup so the worker knows which quadtree this is - job[0] = job[0]._render_index + job[0] = job[0]._render_index # Put this in the batch to be submited to the pool batch.append(job) jobcount += 1 if jobcount >= batch_size: - jobcount = 0 + jobcount = 0 yield pool.apply_async(func=render_worldtile_batch, args= [batch]) - batch = [] + batch = [] if jobcount > 0: yield pool.apply_async(func=render_worldtile_batch, args= [batch]) @@ -341,6 +348,7 @@ class RenderNode(object): @catch_keyboardinterrupt def render_worldtile_batch(batch): + # batch is a list. Each item is [quadtree_id, colstart, colend, rowstart, rowend, tilepath] global child_rendernode rendernode = child_rendernode count = 0 From d77673f4064c70584c44968ccc5e7de2a8381a51 Mon Sep 17 00:00:00 2001 From: Zach McCullough Date: Mon, 24 Oct 2011 19:16:03 -0500 Subject: [PATCH 40/40] Fixed the tabbing in overviewerConfig.js --- overviewer_core/data/web_assets/overviewer.js | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/overviewer_core/data/web_assets/overviewer.js b/overviewer_core/data/web_assets/overviewer.js index 8ec58b9..34fbfe8 100644 --- a/overviewer_core/data/web_assets/overviewer.js +++ b/overviewer_core/data/web_assets/overviewer.js @@ -248,27 +248,27 @@ var overviewer = { overviewer.collections.mapTypes[i].name, overviewer.collections.mapTypes[i]); } - - // Jump to the hash if given + + // Jump to the hash if given overviewer.util.initHash(); - - // Add live hash update listeners - // Note: It is important to add them after jumping to the hash + + // Add live hash update listeners + // Note: It is important to add them after jumping to the hash google.maps.event.addListener(overviewer.map, 'dragend', function() { overviewer.util.updateHash(); }); - + google.maps.event.addListener(overviewer.map, 'zoom_changed', function() { overviewer.util.updateHash(); }); - - // Make the link again whenever the map changes + + // Make the link again whenever the map changes google.maps.event.addListener(overviewer.map, 'maptypeid_changed', function() { $('#'+overviewerConfig.CONST.mapDivId).css( 'background-color', overviewer.util.getMapTypeBackgroundColor( overviewer.map.getMapTypeId())); - //smuggled this one in here for maptypeid hash generation --CounterPillow - overviewer.util.updateHash(); + //smuggled this one in here for maptypeid hash generation --CounterPillow + overviewer.util.updateHash(); }); }, /** @@ -843,12 +843,12 @@ var overviewer = { var searchInput = document.createElement("input"); searchInput.type = "text"; - searchInput.value = "Sign Search"; - searchInput.title = "Sign Search"; + searchInput.value = "Sign Search"; + searchInput.title = "Sign Search"; $(searchInput).addClass("inactive"); - - /* Hey dawg, I heard you like functions. - * So we defined a function inside your function. + + /* Hey dawg, I heard you like functions. + * So we defined a function inside your function. */ searchInput.onfocus = function() { if (searchInput.value == "Sign Search") { @@ -856,7 +856,7 @@ var overviewer = { $(searchInput).removeClass("inactive").addClass("active"); } }; - searchInput.onblur = function() { + searchInput.onblur = function() { if (searchInput.value == "") { searchInput.value = "Sign Search"; $(searchInput).removeClass("active").addClass("inactive"); @@ -957,8 +957,8 @@ var overviewer = { 'initHash': function() { if(window.location.hash.split("/").length > 1) { overviewer.util.goToHash(); - // Clean up the hash. - overviewer.util.updateHash(); + // Clean up the hash. + overviewer.util.updateHash(); // Add a marker indicating the user-supplied position var coordinates = overviewer.util.fromLatLngToWorld(overviewer.map.getCenter().lat(), overviewer.map.getCenter().lng()); @@ -968,7 +968,7 @@ var overviewer = { 'y': coordinates.y, 'z': coordinates.z, 'type': 'querypos'}]); - } + } }, 'setHash': function(x, y, z, zoom, maptype) { window.location.replace("#/" + Math.floor(x) + "/" + Math.floor(y) + "/" + Math.floor(z) + "/" + zoom + "/" + maptype); @@ -976,7 +976,7 @@ var overviewer = { 'updateHash': function() { var coordinates = overviewer.util.fromLatLngToWorld(overviewer.map.getCenter().lat(), overviewer.map.getCenter().lng()); var zoom = overviewer.map.getZoom(); - var maptype = overviewer.map.getMapTypeId(); + var maptype = overviewer.map.getMapTypeId(); if (zoom == overviewerConfig.map.maxZoom) { zoom = 'max'; } else if (zoom == overviewerConfig.map.minZoom) { @@ -988,19 +988,19 @@ var overviewer = { overviewer.util.setHash(coordinates.x, coordinates.y, coordinates.z, zoom, maptype); }, 'goToHash': function() { - // Note: the actual data begins at coords[1], coords[0] is empty. + // Note: the actual data begins at coords[1], coords[0] is empty. var coords = window.location.hash.split("/"); var latlngcoords = overviewer.util.fromWorldToLatLng(parseInt(coords[1]), parseInt(coords[2]), parseInt(coords[3])); - var zoom; - var maptype = ''; - // The if-statements try to prevent unexpected behaviour when using incomplete hashes, e.g. older links - if (coords.length > 4) { - zoom = coords[4]; - } - if (coords.length > 5) { - maptype = coords[5]; - } - + var zoom; + var maptype = ''; + // The if-statements try to prevent unexpected behaviour when using incomplete hashes, e.g. older links + if (coords.length > 4) { + zoom = coords[4]; + } + if (coords.length > 5) { + maptype = coords[5]; + } + if (zoom == 'max') { zoom = overviewerConfig.map.maxZoom; } else if (zoom == 'min') { @@ -1015,14 +1015,14 @@ var overviewer = { zoom = overviewerConfig.map.defaultZoom; } } - // If the maptype isn't set, set the default one. - if (maptype == '') { - // We can now set the map to use the 'coordinate' map type - overviewer.map.setMapTypeId(overviewer.util.getDefaultMapTypeId()); - } else { - overviewer.map.setMapTypeId(maptype); - } - + // If the maptype isn't set, set the default one. + if (maptype == '') { + // We can now set the map to use the 'coordinate' map type + overviewer.map.setMapTypeId(overviewer.util.getDefaultMapTypeId()); + } else { + overviewer.map.setMapTypeId(maptype); + } + overviewer.map.setCenter(latlngcoords); overviewer.map.setZoom(zoom); }