Permalink
Browse files

Merge branch 'master' into rewrite

  • Loading branch information...
2 parents 50ebdd7 + 41e8546 commit 302e1d592af6c3610713d1f444f881a2f3dc67ee @agrif agrif committed Feb 7, 2012
Showing with 114 additions and 46 deletions.
  1. +5 −2 .gitignore
  2. +1 −0 CONTRIBUTORS.rst
  3. +13 −2 docs/building.rst
  4. BIN docs/design/blockrendering/cube_parts.png
  5. BIN docs/design/blockrendering/cube_sides.png
  6. BIN docs/design/blockrendering/cube_top.png
  7. BIN docs/design/blockrendering/pixelfix.png
  8. BIN docs/design/blockrendering/tessellation.png
  9. BIN docs/design/blockrendering/texturecubing.png
  10. BIN docs/design/blockrendering/texturesidesteps.png
  11. BIN docs/design/blockrendering/texturetopsteps.png
  12. BIN docs/design/cubepositionimgs/chunk_coords.png
  13. BIN docs/design/cubepositionimgs/cube_horizontal_offset.png
  14. BIN docs/design/cubepositionimgs/cube_measurements.png
  15. BIN docs/design/cubepositionimgs/cube_neighbors.png
  16. BIN docs/design/cubepositionimgs/cube_stacking.png
  17. BIN docs/design/cuberenderimgs/chunk_height.png
  18. BIN docs/design/cuberenderimgs/chunk_perspective.png
  19. BIN docs/design/cuberenderimgs/chunk_topdown.png
  20. BIN docs/design/cuberenderimgs/chunk_width.png
  21. BIN docs/design/cuberenderimgs/cube_stack128.png
  22. BIN docs/design/lighting/light-eqn.png
  23. BIN docs/design/lighting/lighting-process.png
  24. BIN docs/design/lighting/smooth-average.png
  25. BIN docs/design/quadtree/depth2addresses.png
  26. BIN docs/design/screenshot.png
  27. BIN docs/design/tilerendering/4children.png
  28. BIN docs/design/tilerendering/chunkgrid.png
  29. BIN docs/design/tilerendering/chunkgridwithrowcol.png
  30. BIN docs/design/tilerendering/chunkpositioning.png
  31. BIN docs/design/tilerendering/chunksintile.png
  32. BIN docs/design/tilerendering/tilegrid.png
  33. BIN docs/design/tilerendering/topofchunk.png
  34. BIN docs/front_page_screenshot.png
  35. +3 −2 docs/installing.rst
  36. +1 −0 overviewer_core/assetmanager.py
  37. BIN overviewer_core/data/web_assets/compass_lower-left.png
  38. BIN overviewer_core/data/web_assets/compass_lower-right.png
  39. BIN overviewer_core/data/web_assets/compass_upper-left.png
  40. BIN overviewer_core/data/web_assets/compass_upper-right.png
  41. BIN overviewer_core/data/web_assets/control-bg-active.png
  42. BIN overviewer_core/data/web_assets/control-bg.png
  43. +2 −4 overviewer_core/data/web_assets/overviewer.js
  44. BIN overviewer_core/data/web_assets/signpost-shadow.png
  45. BIN overviewer_core/data/web_assets/signpost.png
  46. BIN overviewer_core/data/web_assets/signpost_icon.png
  47. +1 −1 overviewer_core/googlemap.py
  48. +32 −15 overviewer_core/src/iterate.c
  49. +2 −1 overviewer_core/src/overviewer.h
  50. +2 −2 overviewer_core/src/primitives/lighting.c
  51. +52 −17 overviewer_core/textures.py
View
@@ -6,11 +6,14 @@ Minecraft_Overviewer.egg-info
terrain.png
cachedir*
+#MCPatcher HD texture files
+custom_*.png
+
# vim swap files
.*.swp
-# user-provided settings file
-settings.py
+# user-provided settings file as well as any variations on that name
+settings*.py
# header files that may be copied over, if missing
ImPlatform.h
View
@@ -52,6 +52,7 @@ feature.
* Ryan Hitchman <hitchmanr@gmail.com>
* Jenny <jennytoo@gmail.com>
* Michael Jensen <emjay1988@gmail.com>
+ * Johan Kiviniemi <devel@johan.kiviniemi.name>
* Thomas Lake <tswsl1989@sucs.org>
* Maciej Malecki <maciej.malecki@hotmail.com>
* Ryan McCue <ryanmccue@cubegames.net>
View
@@ -44,8 +44,8 @@ recommended way of building Overviewer on 64-bit Windows using free tools. If y
have bought a copy of Visual Studio, you can use it for 64-bit builds.
-Prerequisits
-~~~~~~~~~~~~
+Prerequisites
+~~~~~~~~~~~~~
You will need a copy of the `PIL sources <http://www.pythonware.com/products/pil/>`_.
@@ -130,6 +130,17 @@ 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
+FreeBSD
+-------
+FreeBSD is similar to OSX and Linux, but ensure you're using Python 2.7. The port of Python 2.6 has bugs with threading under FreeBSD.
+Everything else you should need is ported, in particular math/py-numpy and graphics/py-imaging.
+
+You may need or want to add the line::
+
+ PYTHON_VERSION=2.7
+
+to the file /etc/make.conf, but read the ports documentation to be sure of what this might do to other Python applications on your system.
+
.. _centos:
CentOS
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
View
@@ -23,8 +23,9 @@ right place!
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
+We provide an APT repository with pre-built Overviewer packages for
+Debian and Ubuntu users. These packages should work on any system with
+a ``python2.6`` package. To do this, add the following line to your
``/etc/apt/sources.list``
::
@@ -92,6 +92,7 @@ def finalize(self, tilesets):
dump['worlds'] = worlds
dump['map'] = dict()
dump['map']['debug'] = True
+ dump['map']['cacheTag'] = str(int(time()))
dump['map']['north_direction'] = 'lower-left' # only temporary
dump['map']['center'] = [-314, 67, 94]
dump['map']['controls'] = {
Diff not rendered.
@@ -1431,10 +1431,8 @@ var overviewer = {
}
}
url = url + '.' + pathExt;
- if(overviewerConfig.map.cacheMinutes > 0) {
- var d = new Date();
- url += '?c=' + Math.floor(d.getTime() /
- (1000 * 60 * overviewerConfig.map.cacheMinutes));
+ if(typeof overviewerConfig.map.cacheTag !== 'undefined') {
+ url += '?c=' + overviewerConfig.map.cacheTag;
}
return(urlBase + url);
}
Diff not rendered.
Diff not rendered.
Diff not rendered.
@@ -17,7 +17,7 @@
import os.path
import stat
import cPickle
-import Image
+from PIL import Image
import shutil
from time import strftime, localtime
import json
@@ -28,6 +28,7 @@ static PyObject *transparent_blocks = NULL;
static PyObject *solid_blocks = NULL;
static PyObject *fluid_blocks = NULL;
static PyObject *nospawn_blocks = NULL;
+static PyObject *nodata_blocks = NULL;
PyObject *init_chunk_render(void) {
@@ -74,6 +75,9 @@ PyObject *init_chunk_render(void) {
nospawn_blocks = PyObject_GetAttrString(textures, "nospawn_blocks");
if (!nospawn_blocks)
return NULL;
+ nodata_blocks = PyObject_GetAttrString(textures, "nodata_blocks");
+ if (!nodata_blocks)
+ return NULL;
block_properties = calloc(max_blockid, sizeof(unsigned char));
for (i = 0; i < max_blockid; i++) {
@@ -89,6 +93,8 @@ PyObject *init_chunk_render(void) {
block_properties[i] |= 1 << FLUID;
if (PySequence_Contains(nospawn_blocks, block))
block_properties[i] |= 1 << NOSPAWN;
+ if (PySequence_Contains(nodata_blocks, block))
+ block_properties[i] |= 1 << NODATA;
Py_DECREF(block);
}
@@ -502,22 +508,30 @@ chunk_render(PyObject *self, PyObject *args) {
}
/* everything stored here will be a borrowed ref */
-
- ancilData = getArrayByte3D(state.blockdatas, state.x, state.y, state.z);
- state.block_data = ancilData;
- /* block that need pseudo ancildata:
- * grass, water, glass, chest, restone wire,
- * ice, fence, portal, iron bars, glass panes */
- if ((state.block == 2) || (state.block == 9) ||
- (state.block == 20) || (state.block == 54) ||
- (state.block == 55) || (state.block == 79) ||
- (state.block == 85) || (state.block == 90) ||
- (state.block == 101) || (state.block == 102) ||
- (state.block == 113)) {
- ancilData = generate_pseudo_data(&state, ancilData);
- state.block_pdata = ancilData;
- } else {
+
+ if (block_has_property(state.block, NODATA)) {
+ /* block shouldn't have data associated with it, set it to 0 */
+ ancilData = 0;
+ state.block_data = 0;
state.block_pdata = 0;
+ } else {
+ /* block has associated data, use it */
+ ancilData = getArrayByte3D(state.blockdatas, state.x, state.y, state.z);
+ state.block_data = ancilData;
+ /* block that need pseudo ancildata:
+ * grass, water, glass, chest, restone wire,
+ * ice, fence, portal, iron bars, glass panes */
+ if ((state.block == 2) || (state.block == 9) ||
+ (state.block == 20) || (state.block == 54) ||
+ (state.block == 55) || (state.block == 79) ||
+ (state.block == 85) || (state.block == 90) ||
+ (state.block == 101) || (state.block == 102) ||
+ (state.block == 113)) {
+ ancilData = generate_pseudo_data(&state, ancilData);
+ state.block_pdata = ancilData;
+ } else {
+ state.block_pdata = 0;
+ }
}
/* make sure our block info is in-bounds */
@@ -526,6 +540,9 @@ chunk_render(PyObject *self, PyObject *args) {
/* get the texture */
t = PyList_GET_ITEM(blockmap, max_data * state.block + ancilData);
+ /* if we don't get a texture, try it again with 0 data */
+ if ((t == NULL || t == Py_None) && ancilData != 0)
+ t = PyList_GET_ITEM(blockmap, max_data * state.block);
/* if we found a proper texture, render it! */
if (t != NULL && t != Py_None)
@@ -26,7 +26,7 @@
// increment this value if you've made a change to the c extesion
// and want to force users to rebuild
-#define OVERVIEWER_EXTENSION_VERSION 16
+#define OVERVIEWER_EXTENSION_VERSION 18
/* Python PIL, and numpy headers */
#include <Python.h>
@@ -102,6 +102,7 @@ typedef enum
SOLID,
FLUID,
NOSPAWN,
+ NODATA,
} BlockProperty;
/* globals set in init_chunk_render, here because they're used
in block_has_property */
@@ -246,8 +246,8 @@ get_lighting_color(RenderPrimitiveLighting *self, RenderState *state,
skylevel = getArrayByte3D(skylight, local_x, local_y, local_z);
blocklevel = getArrayByte3D(blocklight, local_x, local_y, local_z);
- /* special half-step handling */
- if (block == 44 || block == 53 || block == 67 || block == 108 || block == 109) {
+ /* special half-step handling, stairs handling */
+ if (block == 44 || block == 53 || block == 67 || block == 108 || block == 109 || block == 114) {
unsigned int upper_block;
/* stairs and half-blocks take the skylevel from the upper block if it's transparent */
@@ -56,7 +56,7 @@ def __init__(self, texturepath=None, bgcolor=(26, 26, 26, 0), northdirection=0):
def __getstate__(self):
# we must get rid of the huge image lists, and other images
attributes = self.__dict__.copy()
- for attr in ['terrain_images', 'blockmap', 'biome_grass_texture', 'watertexture', 'lavatexture', 'lightcolor']:
+ for attr in ['terrain_images', 'blockmap', 'biome_grass_texture', 'watertexture', 'lavatexture', 'firetexture', 'portaltexture', 'lightcolor']:
try:
del attributes[attr]
except KeyError:
@@ -249,6 +249,40 @@ def load_lava(self):
self.lavatexture = lavatexture
return lavatexture
+ def load_fire(self):
+ """Special-case function for loading fire, handles
+ MCPatcher-compliant custom animated fire."""
+ firetexture = getattr(self, "firetexture", None)
+ if firetexture:
+ return firetexture
+ try:
+ # try the MCPatcher case first
+ firetextureNS = self.load_image("custom_fire_n_s.png")
+ firetextureNS = firetextureNS.crop((0, 0, firetextureNS.size[0], firetextureNS.size[0]))
+ firetextureEW = self.load_image("custom_fire_e_w.png")
+ firetextureEW = firetextureEW.crop((0, 0, firetextureEW.size[0], firetextureEW.size[0]))
+ firetexture = (firetextureNS,firetextureEW)
+ except IOError:
+ fire = self.load_image("fire.png")
+ firetexture = (fire, fire)
+ self.firetexture = firetexture
+ return firetexture
+
+ def load_portal(self):
+ """Special-case function for loading portal, handles
+ MCPatcher-compliant custom animated portal."""
+ portaltexture = getattr(self, "portaltexture", None)
+ if portaltexture:
+ return portaltexture
+ try:
+ # try the MCPatcher case first
+ portaltexture = self.load_image("custom_portal.png")
+ portaltexture = portaltexture.crop((0, 0, portaltexture.size[0], portaltexture.size[1]))
+ except IOError:
+ portaltexture = self.load_image("portal.png")
+ self.portaltexture = portaltexture
+ return portaltexture
+
def load_light_color(self):
"""Helper function to load the light color texture."""
if hasattr(self, "lightcolor"):
@@ -681,11 +715,12 @@ def getBiomeData(worlddir, chunkX, chunkY):
solid_blocks = set()
fluid_blocks = set()
nospawn_blocks = set()
+nodata_blocks = set()
# the material registration decorator
def material(blockid=[], data=[0], **kwargs):
# mapping from property name to the set to store them in
- properties = {"transparent" : transparent_blocks, "solid" : solid_blocks, "fluid" : fluid_blocks, "nospawn" : nospawn_blocks}
+ properties = {"transparent" : transparent_blocks, "solid" : solid_blocks, "fluid" : fluid_blocks, "nospawn" : nospawn_blocks, "nodata" : nodata_blocks}
# make sure blockid and data are iterable
try:
@@ -730,9 +765,9 @@ def func_wrapper(texobj, blockid, data):
return func_wrapper
return inner_material
-# shortcut function for pure blocks, default to solid
+# shortcut function for pure blocks, default to solid, nodata
def block(blockid=[], top_index=None, side_index=None, **kwargs):
- new_kwargs = {'solid' : True}
+ new_kwargs = {'solid' : True, 'nodata' : True}
new_kwargs.update(kwargs)
if top_index is None:
@@ -746,9 +781,9 @@ def inner_block(self, unused_id, unused_data):
return self.build_block(self.terrain_images[top_index], self.terrain_images[side_index])
return inner_block
-# shortcut function for sprite blocks, defaults to transparent
+# shortcut function for sprite blocks, defaults to transparent, nodata
def sprite(blockid=[], index=None, **kwargs):
- new_kwargs = {'transparent' : True}
+ new_kwargs = {'transparent' : True, 'nodata' : True}
new_kwargs.update(kwargs)
if index is None:
@@ -759,9 +794,9 @@ def inner_sprite(self, unused_id, unused_data):
return self.build_sprite(self.terrain_images[index])
return inner_sprite
-# shortcut function for billboard blocks, defaults to transparent
+# shortcut function for billboard blocks, defaults to transparent, nodata
def billboard(blockid=[], index=None, **kwargs):
- new_kwargs = {'transparent' : True}
+ new_kwargs = {'transparent' : True, 'nodata' : True}
new_kwargs.update(kwargs)
if index is None:
@@ -1471,9 +1506,9 @@ def torches(self, blockid, data):
# fire
@material(blockid=51, data=range(16), transparent=True)
def fire(self, blockid, data):
- firetexture = self.load_image("fire.png")
- side1 = self.transform_image_side(firetexture)
- side2 = self.transform_image_side(firetexture).transpose(Image.FLIP_LEFT_RIGHT)
+ firetextures = self.load_fire()
+ side1 = self.transform_image_side(firetextures[0])
+ side2 = self.transform_image_side(firetextures[1]).transpose(Image.FLIP_LEFT_RIGHT)
img = Image.new("RGBA", (24,24), self.bgcolor)
@@ -1716,7 +1751,7 @@ def wire(self, blockid, data):
# crafting table
# needs two different sides
-@material(blockid=58, solid=True)
+@material(blockid=58, solid=True, nodata=True)
def crafting_table(self, blockid, data):
top = self.terrain_images[43]
side3 = self.terrain_images[43+16]
@@ -2218,7 +2253,7 @@ def buttons(self, blockid, data):
return img
# snow
-@material(blockid=78, data=range(8), transparent=True, solid=True)
+@material(blockid=78, data=range(16), transparent=True, solid=True)
def snow(self, blockid, data):
# still not rendered correctly: data other than 0
@@ -2350,7 +2385,7 @@ def fence(self, blockid, data):
fence_small_side = ImageEnhance.Brightness(fence_small_side).enhance(0.9)
fence_small_side.putalpha(sidealpha)
- # Create img to compose the fence
+ # Create img to compose the fence
img = Image.new("RGBA", (24,24), self.bgcolor)
# Position of fence small sticks in img.
@@ -2430,7 +2465,7 @@ def pumpkin(self, blockid, data): # pumpkins, jack-o-lantern
@material(blockid=90, data=[1, 2, 4, 8], transparent=True)
def portal(self, blockid, data):
# no rotations, uses pseudo data
- portaltexture = self.load_image("portal.png")
+ portaltexture = self.load_portal()
img = Image.new("RGBA", (24,24), self.bgcolor)
side = self.transform_image_side(portaltexture)
@@ -3013,7 +3048,7 @@ def nether_wart(self, blockid, data):
# enchantment table
# TODO there's no book at the moment
-@material(blockid=116, transparent=True)
+@material(blockid=116, transparent=True, nodata=True)
def enchantment_table(self, blockid, data):
# no book at the moment
top = self.terrain_images[166]
@@ -3058,7 +3093,7 @@ def cauldron(self, blockid, data):
return img
# end portal
-@material(blockid=119, transparent=True)
+@material(blockid=119, transparent=True, nodata=True)
def end_portal(self, blockid, data):
img = Image.new("RGBA", (24,24), self.bgcolor)
# generate a black texure with white, blue and grey dots resembling stars

0 comments on commit 302e1d5

Please sign in to comment.