From c07cfb5d07e4716c2eceef8d3deb56a4590fca8b Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Fri, 30 Sep 2011 19:22:02 -0400 Subject: [PATCH 1/6] 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 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 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 2/6] 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 3/6] 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 4/6] 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 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 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 5/6] 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 6/6] 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