summaryrefslogtreecommitdiff
path: root/src/nodedef.cpp
diff options
context:
space:
mode:
authorstujones11 <stujones111@gmail.com>2017-06-07 18:52:38 +0100
committerSmallJoker <mk939@ymail.com>2018-06-03 17:31:59 +0200
commitc352ff71e86fd3d40414cbe3a374c9563495ca1a (patch)
treed57ddf0506a9dabc2b1b1617ac47515563fcc267 /src/nodedef.cpp
parent26d0753d870b0b0e2c5e03c817a4c2bdb3eebfc9 (diff)
downloadminetest-c352ff71e86fd3d40414cbe3a374c9563495ca1a.tar.gz
minetest-c352ff71e86fd3d40414cbe3a374c9563495ca1a.tar.bz2
minetest-c352ff71e86fd3d40414cbe3a374c9563495ca1a.zip
Tile material: Add 'TILE_MATERIAL_OPAQUE', use for drawtype 'NDT_NORMAL'
Prevents normal drawtype nodes having transparency. Avoids clients cheating by using 'x-ray' texture packs with transparent textures.
Diffstat (limited to 'src/nodedef.cpp')
-rw-r--r--src/nodedef.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 98b34ea9e..17162b344 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -682,6 +682,8 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
switch (drawtype) {
default:
case NDT_NORMAL:
+ material_type = (alpha == 255) ?
+ TILE_MATERIAL_OPAQUE : TILE_MATERIAL_ALPHA;
solidness = 2;
break;
case NDT_AIRLIKE:
@@ -778,6 +780,16 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
tile_shader[j] = shdsrc->getShader("nodes_shader",
material_type, drawtype);
}
+ u8 overlay_material = material_type;
+ if (overlay_material == TILE_MATERIAL_OPAQUE)
+ overlay_material = TILE_MATERIAL_BASIC;
+ else if (overlay_material == TILE_MATERIAL_LIQUID_OPAQUE)
+ overlay_material = TILE_MATERIAL_LIQUID_TRANSPARENT;
+ u32 overlay_shader[6];
+ for (u16 j = 0; j < 6; j++) {
+ overlay_shader[j] = shdsrc->getShader("nodes_shader",
+ overlay_material, drawtype);
+ }
// Tiles (fill in f->tiles[])
for (u16 j = 0; j < 6; j++) {
@@ -786,8 +798,8 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
tdef[j].backface_culling, material_type);
if (tdef_overlay[j].name != "")
fillTileAttribs(tsrc, &tiles[j].layers[1], &tdef_overlay[j],
- tile_shader[j], tsettings.use_normal_texture,
- tdef[j].backface_culling, material_type);
+ overlay_shader[j], tsettings.use_normal_texture,
+ tdef[j].backface_culling, overlay_material);
}
// Special tiles (fill in f->special_tiles[])