0

textures re-implemented for blocks up to id 25

This commit is contained in:
Aaron Griffith
2011-11-01 18:18:29 -04:00
parent 7a92343bb8
commit da142dfb7a

View File

@@ -415,6 +415,8 @@ def tintTexture(im, c):
def generate_texture_tuple(img): def generate_texture_tuple(img):
""" This takes an image and returns the needed tuple for the """ This takes an image and returns the needed tuple for the
blockmap dictionary.""" blockmap dictionary."""
if img is None:
return None
return (img, generate_opaque_mask(img)) return (img, generate_opaque_mask(img))
## ##
@@ -547,11 +549,11 @@ def material(blockid=[], data=[0], **kwargs):
# make sure blockid and data are iterable # make sure blockid and data are iterable
try: try:
blockid = iter(blockid) iter(blockid)
except: except:
blockid = [blockid,] blockid = [blockid,]
try: try:
data = iter(data) iter(data)
except: except:
data = [data,] data = [data,]
@@ -670,3 +672,137 @@ def saplings(blockid, data):
tex = terrain_images[79] tex = terrain_images[79]
return build_sprite(tex) return build_sprite(tex)
# bedrock
block(blockid=7, top_index=17)
@material(blockid=8, data=range(16), fluid=True, transparent=True)
def water(blockid, data):
watertex = _load_image("water.png")
return build_block(watertex, watertex)
# other water, glass, and ice (no inner surfaces)
# uses pseudo-ancildata found in iterate.c
@material(blockid=[9, 20, 79], data=range(32), transparent=True, nospawn=True)
def no_inner_surfaces(blockid, data):
if blockid == 9:
texture = _load_image("water.png")
elif blockid == 20:
texture = terrain_images[49]
else:
texture = terrain_images[67]
if (data & 0b10000) == 16:
top = texture
else:
top = None
if (data & 0b0001) == 1:
side1 = texture # top left
else:
side1 = None
if (data & 0b1000) == 8:
side2 = texture # top right
else:
side2 = None
if (data & 0b0010) == 2:
side3 = texture # bottom left
else:
side3 = None
if (data & 0b0100) == 4:
side4 = texture # bottom right
else:
side4 = None
# if nothing shown do not draw at all
if top is None and side3 is None and side4 is None:
return None
img = build_full_block(top,None,None,side3,side4)
return img
@material(blockid=[10, 11], data=range(16), fluid=True, transparent=False)
def lava(blockid, data):
lavatex = _load_image("lava.png")
return build_block(lavatex, lavatex)
# sand
block(blockid=12, top_index=18)
# gravel
block(blockid=13, top_index=19)
# gold ore
block(blockid=14, top_index=32)
# iron ore
block(blockid=15, top_index=33)
# coal ore
block(blockid=16, top_index=34)
@material(blockid=17, data=range(3), solid=True)
def wood(blockid, data):
top = terrain_images[21]
if data == 0: # normal
return build_block(top, terrain_images[20])
if data == 1: # birch
return build_block(top, terrain_images[116])
if data == 2: # pine
return build_block(top, terrain_images[117])
@material(blockid=18, data=range(16), transparent=True, solid=True)
def leaves(blockid, data):
t = terrain_images[52]
if data == 1:
# pine!
t = terrain_images[132]
return build_block(t, t)
# sponge
block(blockid=19, top_index=48)
# lapis lazuli ore
block(blockid=21, top_index=160)
# lapis lazuli block
block(blockid=22, top_index=144)
# dispensers, furnaces, and burning furnaces
@material(blockid=[23, 61, 62], data=range(6), solid=True)
def furnaces(blockid, data, north):
# first, do the north rotation if needed
if north == 'upper-left':
if data == 2: data = 5
elif data == 3: data = 4
elif data == 4: data = 2
elif data == 5: data = 3
elif north == 'upper-right':
if data == 2: data = 3
elif data == 3: data = 2
elif data == 4: data = 5
elif data == 5: data = 4
elif north == 'lower-right':
if data == 2: data = 4
elif data == 3: data = 5
elif data == 4: data = 3
elif data == 5: data = 2
top = terrain_images[62]
side = terrain_images[45]
if blockid == 61:
front = terrain_images[44]
elif blockid == 62:
front = terrain_images[61]
elif blockid == 23:
front = terrain_images[46]
if data == 3: # pointing west
return build_full_block(top, None, None, side, front)
elif data == 4: # pointing north
return build_full_block(top, None, None, front, side)
else: # in any other direction the front can't be seen
return build_full_block(top, None, None, side, side)
# sandstone
block(blockid=24, top_index=176, side_index=192)
# note block
block(blockid=25, top_index=74)