diff --git a/overviewer_core/rendermodes.py b/overviewer_core/rendermodes.py index 30aa718..c00ae04 100644 --- a/overviewer_core/rendermodes.py +++ b/overviewer_core/rendermodes.py @@ -50,6 +50,9 @@ class Base(RenderPrimitive): class Nether(RenderPrimitive): name = "nether" +class NetherAlt(RenderPrimitive): + name = "nether2" + class HeightFading(RenderPrimitive): name = "height-fading" options = { @@ -230,4 +233,7 @@ smooth_night = [Base(), EdgeLines(), SmoothLighting(night=True)] nether = [Base(), EdgeLines(), Nether()] nether_lighting = [Base(), EdgeLines(), Nether(), Lighting()] nether_smooth_lighting = [Base(), EdgeLines(), Nether(), SmoothLighting()] +netheralt = [Base(), EdgeLines(), NetherAlt()] +netheralt_lighting = [Base(), EdgeLines(), NetherAlt(), Lighting()] +netheralt_smooth_lighting = [Base(), EdgeLines(), NetherAlt(), SmoothLighting()] cave = [Base(), EdgeLines(), Cave(), DepthTinting()] diff --git a/overviewer_core/src/primitives/nether2.c b/overviewer_core/src/primitives/nether2.c new file mode 100644 index 0000000..78b320b --- /dev/null +++ b/overviewer_core/src/primitives/nether2.c @@ -0,0 +1,69 @@ +/* + * This file is part of the Minecraft Overviewer. + * + * Minecraft Overviewer is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Minecraft Overviewer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with the Overviewer. If not, see . + */ + +#include "../overviewer.h" +#include "nether2.h" + +static void +walk_chunk(RenderState *state, RenderPrimitiveNether2 *data) { + int x, y, z; + int id; + + for (x = 0; x < WIDTH; x++) { + for (z = 0; z < DEPTH; z++) { + id = get_data(state, BLOCKS, x, NETHER_ROOF - (state->chunky * 16), z); + if (id == 7) { + data->remove_block[x][NETHER_ROOF][z] = 1; + id = get_data(state, BLOCKS, x, (NETHER_ROOF + 1) - (state->chunky * 16), z); + if (id == 39 || id == 40) + data->remove_block[x][NETHER_ROOF + 1][z] = 1; + } + + for (y = NETHER_ROOF-1; y>=0; y--) { + id = get_data(state, BLOCKS, x, y - (state->chunky * 16), z); + if (id == 7 || id == 87) + data->remove_block[x][y][z] = 1; + else + break; + } + } + } + data->walked_chunk = 1; +} + +static int +nether2_hidden(void *data, RenderState *state, int x, int y, int z) { + RenderPrimitiveNether2* self; + int real_y; + + self = (RenderPrimitiveNether2 *)data; + + if (!(self->walked_chunk)) + walk_chunk(state, self); + + real_y = y + (state->chunky * 16); + return self->remove_block[x][real_y][z]; +} + +RenderPrimitiveInterface primitive_nether2 = { + "nether2", sizeof(RenderPrimitiveNether2), + NULL, + NULL, + NULL, + nether2_hidden, + NULL, +}; diff --git a/overviewer_core/src/primitives/nether2.h b/overviewer_core/src/primitives/nether2.h new file mode 100644 index 0000000..000acf2 --- /dev/null +++ b/overviewer_core/src/primitives/nether2.h @@ -0,0 +1,30 @@ +/* + * This file is part of the Minecraft Overviewer. + * + * Minecraft Overviewer is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Minecraft Overviewer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with the Overviewer. If not, see . + */ + +#include "../overviewer.h" + +#define NETHER_ROOF 127 +#define WIDTH 16 +#define DEPTH 16 +#define HEIGHT 256 + +typedef struct { + int walked_chunk; + + int remove_block[WIDTH][HEIGHT][DEPTH]; + +} RenderPrimitiveNether2;