Tall grass is now biome tinted.
This commit is contained in:
@@ -293,7 +293,6 @@ PyObject*
|
||||
chunk_render(PyObject *self, PyObject *args) {
|
||||
RenderState state;
|
||||
|
||||
PyObject *blockdata_expanded;
|
||||
int xoff, yoff;
|
||||
|
||||
PyObject *imgsize, *imgsize0_py, *imgsize1_py;
|
||||
@@ -311,7 +310,7 @@ chunk_render(PyObject *self, PyObject *args) {
|
||||
|
||||
PyObject *t = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "OOiiO", &state.self, &state.img, &xoff, &yoff, &blockdata_expanded))
|
||||
if (!PyArg_ParseTuple(args, "OOiiO", &state.self, &state.img, &xoff, &yoff, &state.blockdata_expanded))
|
||||
return NULL;
|
||||
|
||||
/* fill in important modules */
|
||||
@@ -402,7 +401,7 @@ chunk_render(PyObject *self, PyObject *args) {
|
||||
} else {
|
||||
PyObject *tmp;
|
||||
|
||||
unsigned char ancilData = getArrayByte3D(blockdata_expanded, state.x, state.y, state.z);
|
||||
unsigned char ancilData = getArrayByte3D(state.blockdata_expanded, state.x, state.y, state.z);
|
||||
if ((state.block == 85) || (state.block == 9) || (state.block == 55) || (state.block == 54) || (state.block == 2) || (state.block == 90)) {
|
||||
ancilData = generate_pseudo_data(&state, ancilData);
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ typedef struct {
|
||||
/* the block position and type, and the block array */
|
||||
int x, y, z;
|
||||
unsigned char block;
|
||||
PyObject *blockdata_expanded;
|
||||
PyObject *blocks;
|
||||
PyObject *up_left_blocks;
|
||||
PyObject *up_right_blocks;
|
||||
|
||||
@@ -56,6 +56,7 @@ rendermode_normal_start(void *data, RenderState *state) {
|
||||
|
||||
self->leaf_texture = NULL;
|
||||
self->grass_texture = NULL;
|
||||
self->tall_grass_texture = NULL;
|
||||
self->facemask_top = NULL;
|
||||
} else {
|
||||
|
||||
@@ -64,6 +65,7 @@ rendermode_normal_start(void *data, RenderState *state) {
|
||||
|
||||
self->leaf_texture = PyObject_GetAttrString(state->textures, "biome_leaf_texture");
|
||||
self->grass_texture = PyObject_GetAttrString(state->textures, "biome_grass_texture");
|
||||
self->tall_grass_texture = PyObject_GetAttrString(state->textures, "biome_tall_grass_texture");
|
||||
|
||||
facemasks_py = PyObject_GetAttrString(state->chunk, "facemasks");
|
||||
/* borrowed reference, needs to be incref'd if we keep it */
|
||||
@@ -78,6 +80,7 @@ rendermode_normal_start(void *data, RenderState *state) {
|
||||
|
||||
self->leaf_texture = NULL;
|
||||
self->grass_texture = NULL;
|
||||
self->tall_grass_texture = NULL;
|
||||
self->facemask_top = NULL;
|
||||
}
|
||||
|
||||
@@ -98,6 +101,7 @@ rendermode_normal_finish(void *data, RenderState *state) {
|
||||
Py_XDECREF(self->grasscolor);
|
||||
Py_XDECREF(self->leaf_texture);
|
||||
Py_XDECREF(self->grass_texture);
|
||||
Py_XDECREF(self->tall_grass_texture);
|
||||
Py_XDECREF(self->facemask_top);
|
||||
}
|
||||
|
||||
@@ -120,8 +124,17 @@ rendermode_normal_draw(void *data, RenderState *state, PyObject *src, PyObject *
|
||||
RenderModeNormal *self = (RenderModeNormal *)data;
|
||||
|
||||
/* first, check to see if we should use biome-compatible src, mask */
|
||||
if (self->biome_data && state->block == 18) {
|
||||
src = mask = self->leaf_texture;
|
||||
if (self->biome_data) {
|
||||
if (state->block == 18) {
|
||||
src = mask = self->leaf_texture;
|
||||
} else if (state->block == 31) {
|
||||
unsigned char data = getArrayByte3D(state->blockdata_expanded, state->x, state->y, state->z);
|
||||
if (data == 1) {
|
||||
src = mask = self->tall_grass_texture;
|
||||
} else if (data == 2) {
|
||||
src = mask = self->tall_fern_texture;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* draw the block! */
|
||||
@@ -150,6 +163,15 @@ rendermode_normal_draw(void *data, RenderState *state, PyObject *src, PyObject *
|
||||
color = PySequence_GetItem(self->foliagecolor, index);
|
||||
facemask = mask;
|
||||
break;
|
||||
case 31:
|
||||
/* tall grass */
|
||||
if ( getArrayByte3D(state->blockdata_expanded, state->x, state->y, state->z) != 0 )
|
||||
{ /* do not tint dead shrubs */
|
||||
color = PySequence_GetItem(self->grasscolor, index);
|
||||
facemask = mask;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
|
||||
@@ -79,7 +79,7 @@ typedef struct {
|
||||
/* grasscolor and foliagecolor lookup tables */
|
||||
PyObject *grasscolor, *foliagecolor;
|
||||
/* biome-compatible grass/leaf textures */
|
||||
PyObject *grass_texture, *leaf_texture;
|
||||
PyObject *grass_texture, *leaf_texture, *tall_grass_texture, *tall_fern_texture;
|
||||
/* top facemask for grass biome tinting */
|
||||
PyObject *facemask_top;
|
||||
} RenderModeNormal;
|
||||
|
||||
@@ -1659,6 +1659,8 @@ special_map[31] = range(3) # tall grass, dead shrub, fern and tall grass itself
|
||||
terrain_images = None
|
||||
blockmap = None
|
||||
biome_grass_texture = None
|
||||
biome_tall_grass_texture = None
|
||||
biome_tall_fern_texture = None
|
||||
biome_leaf_texture = None
|
||||
specialblockmap = None
|
||||
|
||||
@@ -1676,9 +1678,11 @@ def generate(path=None):
|
||||
load_water()
|
||||
|
||||
# generate biome (still grayscale) leaf, grass textures
|
||||
global biome_grass_texture, biome_leaf_texture
|
||||
global biome_grass_texture, biome_leaf_texture, biome_tall_grass_texture
|
||||
biome_grass_texture = _build_block(terrain_images[0], terrain_images[38], 2)
|
||||
biome_leaf_texture = _build_block(terrain_images[52], terrain_images[52], 18)
|
||||
biome_tall_grass_texture = _build_block(terrain_images[39], terrain_images[39], 31)
|
||||
biome_tall_fern_texture = _build_block(terrain_images[56], terrain_images[56], 31)
|
||||
|
||||
# generate the special blocks
|
||||
global specialblockmap, special_blocks
|
||||
|
||||
Reference in New Issue
Block a user