Map Pack Review: Monsters of the Deep

Read about map pack reviews and see a list of all other map pack reviews.

This map is available for purchase via the Minecraft Marketplace available on Windows 10 Edition, Pocket Edition, and some console versions.


Looking through the resource pack shows no default assets, have been left in or used in place of other textures.

What has been used is a combination of both ‘terrain_texture.json’ and ‘blocks.json’ to use existing textures in place of other textures.
‘terrain_texture.json’ is a file which defines block textures for use in the texture atlas, this has been used to replace wool textures with coral textures.

“wool”: {
“textures”: [
“textures/blocks/wool_colored_white”,
“textures/blocks/wool_colored_orange”,
“textures/blocks/wool_colored_magenta”,
“textures/blocks/wool_colored_light_blue”,
“textures/blocks/coral_yellow”,
“textures/blocks/wool_colored_lime”,
“textures/blocks/coral_pink”,
“textures/blocks/wool_colored_gray”,
“textures/blocks/wool_colored_silver”,
“textures/blocks/wool_colored_cyan”,
“textures/blocks/coral_purple”,
“textures/blocks/coral_blue”,
“textures/blocks/wool_colored_brown”,
“textures/blocks/wool_colored_green”,
“textures/blocks/coral_red”,
“textures/blocks/wool_colored_black”
]
}

Two things:
Firstly the textures have been defined in the terrain texture file because there is no way to get a wool block to use a specific texture through the blocks.json file, as can be seen above, wool uses an array of textures and when in blocks.json there is a single ‘wool’ object which uses this array, you can’t get yellow wool to use a separate texture through the blocks.json file, you have to change it in ‘terrain_texture.json’.
Secondly this is excellent, because if a player uses another resource pack when playing the map whenever wool is used in the map it will use the coral texture from the other resource pack the player is using, helping the map look much better.

This has also been done in ‘blocks.json’, although there is some minor adjustments that could be made to the ‘blocks.json’.

One thing that could be done is the addition of the stone_cutter textures. In game the stone cutter is used as a crate, there is two textures that are used but four textures are supplied, as each texture has been included twice.
stonecutter_side and stonecutter_other_side are both the same, also stonecutter_top and stonecutter_bottom are the same as well. What should be done is to use two textures then use ‘blocks.json’ to change the textures used on ‘stonecutter’.

“stonecutter”: {
“textures”: {
“up”: “stonecutter_top”,
“down”: “stonecutter_top”,
“north”: “stonecutter_side”
“east”: “stonecutter_side”
“south”: “stonecutter_side”
“west”: “stonecutter_side”
},
“sound”: “wood”
}

This should be included in ‘blocks.json’ so the same texture isn’t included in the texture atlas more than once, and you can remove stonecutter_bottom and stonecutter_other_side from the resource pack entirely.

The other main thing that can be improved is the red sandstone textures used in ‘blocks.json’.

“red_sandstone”: {

“textures”: {
“up”: “redsandstone_top”,
“down”: “redsandstone_top”,
“side”: “redsandstone_top”
},

}

The ‘textures’ for red sandstone has been set to use the same texture on ‘up’, ‘down’ and ‘side’ this sets all the faces to use the same texture, this is redundant as you can simply just set the ‘textures’ to the texture that you want all faces to use.

“textures”: “redsandstone_top”

One final thing about ‘blocks.json’ is the use of isotropic, isotropic is the random rotations that blocks can have, it can be enabled for specific faces, in the case of red sandstone stairs and red sandstone, it is enabled on both up and down, what you can do is simply set isotropic to true.

“isotropic”: true

This will mean that all faces will have random rotations to them.
Isotropic only being on top and bottom faces is presumably due to the fact that this is how it is by default, and thus has just been left like this, changing it to affect all faces makes more sense in the given situation.

Small thing about flipbook textures.
There is a small amount of custom animated textures and they must be defined using the ‘flipbook_textures.json’ file.

{
“flipbook_texture”: “textures/blocks/glazed_terracotta_black”,
“atlas_tile”: “black_glazed_terracotta”,
“ticks_per_frame”: 1,
“frames”: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}

When defining animated textures there are values that are needed, these are the ‘flipbook_texture’ and the ‘atlas_tile’, Minecraft will set the ‘ticks_per_frame’ by default to 1, and will simply roll through all the frames then repeat from the beginning, in the example above, both ‘ticks_per_frame’ and ‘frames’ are not needed as Minecraft will set these values by default, there’s no reason to include them in this circumstance.
submarine_tablet

This texture is used three times replacing three different dyes. Each dye that it replaces is currently done by simply including this texture three times with different names to replace the items.
Another way this can be done is to set the item to use this texture via the ‘item_texture.json’ file, located within the textures folder of the resourcepack.

“dye_powder”: {
“textures”: [
“textures/items/dye_powder_black”,
“textures/items/dye_powder_red”,
“textures/items/tablet_submarine”,
“textures/items/dye_powder_brown”,
“textures/items/tablet_submarine”,
“textures/items/dye_powder_purple”,
“textures/items/tablet_submarine”,
“textures/items/dye_powder_silver”,
“textures/items/dye_powder_gray”,
“textures/items/dye_powder_pink”,
“textures/items/dye_powder_lime”,
“textures/items/dye_powder_yellow”,
“textures/items/dye_powder_light_blue”,
“textures/items/dye_powder_magenta”,
“textures/items/dye_powder_orange”,
“textures/items/dye_powder_white”
]
}

This will have the same effect, but doesn’t require the same texture to be included three times in the resource pack.

A rather new file is the ‘biomes_client.json’, this file lets you specify the surface water colour, the fog colour of water, which can be seen when underwater, the distance the fog is rendered at and the transparency of the surface of the water. This can be specified for different biomes, with a special case called ‘default’.
The default settings will be used by any biome that doesn’t have a specific value for any of these setttings for it, within the json file.

The ‘biomes_client.json’ that is used in this map could be cleaned up a bit. You can remove duplicate statements that appear within the ‘default’ value.

“default”: {

“water_surface_transparency”: 0.5,
“water_fog_distance”: 100
},
“plains”: {

“water_surface_transparency”: 0.5,
“water_fog_distance”: 100
},
“sunflower_plains”: {

“water_surface_transparency”: 0.5
}

As some of the variables seen in ‘plains’ and ‘sunflower_plains’ are already set to the same value within the ‘default’, you don’t need to repeat them within these biome definitions.

Finally we move onto entity models.
The file is clean, with no default entities left within the file itself.

One problem comes down to parent entities, with the villager, zombie villager, and witch, they share many of the same bones which in this case also have the same elements. What can be done is to create a single entity, villager, then use this as a parent for the other entities, but adding new bones, or changing existing bones.

“geometry.villager”: {
“bones”: [ … ]
},
“geometry.zombie.villager:geometry.villager”: {
“bones”: [
{
“name”: “head”,
“cubes”: [
{ … }
]
},
{
“name”: “rightLeg”,
“cubes”: [
{ … }
]
},
{
“name”: “leftLeg”,
“cubes”: [
{ … }
]
}
]
},
“geometry.villager.witch:geometry.villager”: {
“bones”: [
{
“name”: “arms”,
“cubes”: [
{ … }
]
}
]
}

You should end up with something like this, the zombie villager’s head is different from the villager head so it gets redefined, along with bones that are unique to the zombie villager – ‘leftLeg’, ‘rightLeg’ and the ‘arms’ are unique to the witch.

Finally there is small optimisations that could be made to some of the entities, although not all the entities can be optimised further.

shipwreck_shark_elements

This is the front of the shipwreck shark, which you can see contains two small elements when going down rather than using a longer element that intersects with the element behind it, this has presumably been done to avoid z-fighting, but instead of creating smaller elements like this you can simply use the inflate property on elements. Setting a small inflate value, something like 0.01 or -0.01, on the element in the middle will allow the front two elementsto extend into the elements behind it and not cause z-fighting.

This can also be applied to things like the trident on the shark’s back, or for removing some small elements on the crab’s claws, to help reduce the amount of elements, although this is rather minor as it will only remove a couple elements total.

You could also reduce the amount of elements on other entities such as the volcanic manta ray and the jelly fish, by extending elements through other elements rather than being above and below another element.

manta_ray

These elements are directly above and below each other, these can be converted into a single element extending through the main body of the manta ray, doing so can also help the textures as well.

Originally the two elements take up a 50 x 70 pixel area in the texture together, but when the elements are combined the area that they take up actually decreases, this is also true for a few other models, by combining elements and moving around the UV boxes within the texture itself the total size of the texture can even be decreased, for textures such as the jellyfish I was able to decrease the texture from a 128 x 128 texture down to a 64 x 64 texture.