voxelands/src/content_mapnode_special.cpp

2090 lines
76 KiB
C++
Raw Normal View History

2014-09-19 09:36:05 -07:00
/************************************************************************
* Minetest-c55
* Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
*
* content_mapnode_special.cpp
* Copyright (C) Lisa 'darkrose' Milne 2014 <lisa@ltmnet.com>
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>
************************************************************************/
#include "content_mapnode.h"
#include "content_nodebox.h"
#include "content_list.h"
#include "content_craft.h"
#include "content_nodemeta.h"
#include "player.h"
2015-04-09 11:09:36 -07:00
#include "intl.h"
2014-09-19 09:36:05 -07:00
void content_mapnode_special(bool repeat)
{
content_t i;
ContentFeatures *f = NULL;
i = CONTENT_FENCE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Fence");
2014-09-19 09:36:05 -07:00
f->setAllTextures("fence.png");
f->setTexture(0,"fence_top.png");
f->setTexture(1,"fence_top.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_FENCELIKE;
f->is_ground_content = true;
f->jumpable = false;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 15;
f->special_alternate_node = CONTENT_WOOD;
f->type = CMT_WOOD;
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_fence_inv(f);
content_nodebox_fence(f);
f->setInventoryTextureNodeBox(i,"fence.png","fence_top.png","fence.png");
crafting::setWallRecipe(CONTENT_CRAFTITEM_WOOD_PLANK,CONTENT_FENCE);
crafting::setWallRecipe(CONTENT_CRAFTITEM_JUNGLE_PLANK,CONTENT_FENCE);
lists::add("craftguide",i);
lists::add("creative",i);
2014-11-20 06:34:36 -08:00
i = CONTENT_STEEL_FENCE;
f = &content_features(i);
f->description = wgettext("Steel Fence");
f->setAllTextures("fence_steel.png");
f->setTexture(0,"fence_steel_top.png");
f->setTexture(1,"fence_steel_top.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_FENCELIKE;
f->is_ground_content = true;
f->jumpable = false;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
f->special_alternate_node = CONTENT_STEEL;
f->type = CMT_STONE;
f->hardness = 0.75;
f->pressure_type = CST_SOLID;
f->suffocation_per_second = 0;
f->destructive_mob_safe = true;
2014-11-20 06:34:36 -08:00
content_nodebox_fence_inv(f);
content_nodebox_fence(f);
f->setInventoryTextureNodeBox(i,"fence_steel.png","fence_steel_top.png","fence_steel.png");
crafting::setWallRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_STEEL_FENCE);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_STEEL_BARS;
f = &content_features(i);
f->description = wgettext("Steel Bars");
f->setAllTextures("steel_block.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
f->special_alternate_node = CONTENT_STEEL;
f->type = CMT_STONE;
f->hardness = 0.75;
f->pressure_type = CST_SOLID;
f->suffocation_per_second = 0;
content_nodebox_bars(f);
f->setInventoryTextureNodeBox(i,"steel_block.png","steel_block.png","steel_block.png");
crafting::setHatRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_STEEL_BARS);
2014-12-23 08:04:28 -08:00
{
u16 r[9] = {
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT,
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT,
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT
};
crafting::setRecipe(r,CONTENT_STEEL_BARS,6);
2014-12-23 08:04:28 -08:00
}
2014-11-20 06:34:36 -08:00
lists::add("craftguide",i);
lists::add("creative",i);
2014-09-19 09:36:05 -07:00
i = CONTENT_RAIL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Rail");
2014-09-19 09:36:05 -07:00
f->setAllTextures("rail.png");
f->setTexture(0,"track_tie.png");
f->setTexture(1,"track_rail.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->draw_type = CDT_RAILLIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
f->type = CMT_DIRT;
f->hardness = 0.75;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
{
u16 r[9] = {
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_CRAFTITEM_WOOD_PLANK, CONTENT_CRAFTITEM_STEEL_INGOT,
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT,
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_CRAFTITEM_WOOD_PLANK, CONTENT_CRAFTITEM_STEEL_INGOT
};
crafting::setRecipe(r,CONTENT_RAIL,15);
r[1] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
r[7] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
crafting::setRecipe(r,CONTENT_RAIL,15);
}
f->setNodeBox(core::aabbox3d<f32>(
-0.5*BS,-0.5*BS,-0.5*BS,0.5*BS,-0.375*BS,0.5*BS
));
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_TERRACOTTA;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Terracotta Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("rooftile_terracotta.png");
f->setAllTextureFlags(0);
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_DIRT;
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_TERRACOTTA,CONTENT_TERRACOTTA,CONTENT_ROOFTILE_TERRACOTTA);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_WOOD;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Wood Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("rooftile_wood.png");
f->setAllTextureFlags(0);
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_WOOD;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_WOOD,CONTENT_WOOD,CONTENT_ROOFTILE_WOOD);
crafting::set1over4Recipe(CONTENT_JUNGLEWOOD,CONTENT_JUNGLEWOOD,CONTENT_ROOFTILE_WOOD);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_ASPHALT;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Asphalt Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("rooftile_asphalt.png");
f->setAllTextureFlags(0);
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_DIRT;
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
{
u16 r[9] = {
CONTENT_SAND, CONTENT_CRAFTITEM_PAPER, CONTENT_IGNORE,
CONTENT_CRAFTITEM_PAPER, CONTENT_CRAFTITEM_DYE_BLACK, CONTENT_IGNORE,
CONTENT_IGNORE, CONTENT_IGNORE, CONTENT_IGNORE,
};
crafting::setRecipe(r,CONTENT_ROOFTILE_ASPHALT,4);
}
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_STONE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Stone Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("rooftile_stone.png");
f->setAllTextureFlags(0);
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_DIRT;
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_ROUGHSTONE,CONTENT_ROUGHSTONE,CONTENT_ROOFTILE_STONE);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass.png");
f->setTexture(1,"glass_slab.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS,CONTENT_GLASS,CONTENT_ROOFTILE_GLASS);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_BLUE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Blue Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_blue.png");
f->setTexture(1,"glass_slab_blue.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_BLUE,CONTENT_GLASS_BLUE,CONTENT_ROOFTILE_GLASS_BLUE);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_BLUE,CONTENT_ROOFTILE_GLASS_BLUE);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_GREEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Green Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_green.png");
f->setTexture(1,"glass_slab_green.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_GREEN,CONTENT_GLASS_GREEN,CONTENT_ROOFTILE_GLASS_GREEN);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_GREEN,CONTENT_ROOFTILE_GLASS_GREEN);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_ORANGE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Orange Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_orange.png");
f->setTexture(1,"glass_slab_orange.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_ORANGE,CONTENT_GLASS_ORANGE,CONTENT_ROOFTILE_GLASS_ORANGE);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_ORANGE,CONTENT_ROOFTILE_GLASS_ORANGE);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_PURPLE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Purple Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_purple.png");
f->setTexture(1,"glass_slab_purple.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_PURPLE,CONTENT_GLASS_PURPLE,CONTENT_ROOFTILE_GLASS_PURPLE);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_PURPLE,CONTENT_ROOFTILE_GLASS_PURPLE);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_RED;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Red Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_red.png");
f->setTexture(1,"glass_slab_red.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_RED,CONTENT_GLASS_RED,CONTENT_ROOFTILE_GLASS_RED);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_RED,CONTENT_ROOFTILE_GLASS_RED);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_YELLOW;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Yellow Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_yellow.png");
f->setTexture(1,"glass_slab_yellow.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_YELLOW,CONTENT_GLASS_YELLOW,CONTENT_ROOFTILE_GLASS_YELLOW);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_YELLOW,CONTENT_ROOFTILE_GLASS_YELLOW);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_GLASS_BLACK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Black Glass Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("glass_black.png");
f->setTexture(1,"glass_slab_black.png"); // special texture for top sections
f->setAllTextureFlags(0);
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
#endif
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_GLASS;
2014-09-19 09:36:05 -07:00
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_GLASS_BLACK,CONTENT_GLASS_BLACK,CONTENT_ROOFTILE_GLASS_BLACK);
crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_BLACK,CONTENT_ROOFTILE_GLASS_BLACK);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROOFTILE_THATCH;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Thatch Roof Tile");
2014-09-19 09:36:05 -07:00
f->setAllTextures("rooftile_thatch.png");
f->setAllTextureFlags(0);
f->draw_type = CDT_ROOFLIKE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->type = CMT_DIRT;
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
content_nodebox_roofcollide(f);
crafting::set1over4Recipe(CONTENT_DEADGRASS,CONTENT_DEADGRASS,CONTENT_ROOFTILE_THATCH);
crafting::set1over4Recipe(CONTENT_WILDGRASS_SHORT,CONTENT_WILDGRASS_SHORT,CONTENT_ROOFTILE_THATCH);
crafting::set1over4Recipe(CONTENT_JUNGLEGRASS,CONTENT_JUNGLEGRASS,CONTENT_ROOFTILE_THATCH);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_LADDER_LEGACY;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Ladder");
2014-09-19 09:36:05 -07:00
f->setAllTextures("ladder.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_WALLMOUNT;
f->draw_type = CDT_NODEBOX;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem ")+itos(CONTENT_LADDER_WALL)+" 1";
f->solidness = 0;
f->floormount_alternate_node = CONTENT_LADDER_FLOOR;
f->wallmount_alternate_node = CONTENT_LADDER_WALL;
f->roofmount_alternate_node = CONTENT_LADDER_ROOF;
f->rotate_tile_with_nodebox = true;
f->climbable = true;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 30/16;
f->type = CMT_WOOD;
f->hardness = 0.5;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
f->setNodeBox(core::aabbox3d<f32>(
-0.4375*BS,-0.5*BS,0.3125*BS,-0.3125*BS,0.5*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
0.3125*BS,-0.5*BS,0.3125*BS,0.4375*BS,0.5*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,-0.25*BS,0.375*BS,0.3125*BS,-0.1875*BS,0.4375*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,0.25*BS,0.375*BS,0.3125*BS,0.3125*BS,0.4375*BS
));
f->setInventoryTextureNodeBox(i,"ladder.png","ladder.png","ladder.png");
i = CONTENT_LADDER_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Ladder");
2014-09-19 09:36:05 -07:00
f->setAllTextures("ladder.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_WALLMOUNT;
f->draw_type = CDT_NODEBOX;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
f->solidness = 0;
f->floormount_alternate_node = CONTENT_LADDER_FLOOR;
f->roofmount_alternate_node = CONTENT_LADDER_ROOF;
f->rotate_tile_with_nodebox = true;
f->climbable = true;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 30/16;
f->type = CMT_WOOD;
f->hardness = 0.5;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
f->setNodeBox(core::aabbox3d<f32>(
-0.4375*BS,-0.5*BS,0.3125*BS,-0.3125*BS,0.5*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
0.3125*BS,-0.5*BS,0.3125*BS,0.4375*BS,0.5*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,-0.25*BS,0.375*BS,0.3125*BS,-0.1875*BS,0.4375*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,0.25*BS,0.375*BS,0.3125*BS,0.3125*BS,0.4375*BS
));
f->setInventoryTextureNodeBox(i,"ladder.png","ladder.png","ladder.png");
{
u16 r[9] = {
CONTENT_CRAFTITEM_PINE_PLANK, CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PINE_PLANK,
CONTENT_CRAFTITEM_PINE_PLANK, CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PINE_PLANK,
CONTENT_CRAFTITEM_PINE_PLANK, CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PINE_PLANK
};
crafting::setRecipe(r,CONTENT_LADDER_WALL,4);
r[0] = CONTENT_CRAFTITEM_WOOD_PLANK;
r[2] = CONTENT_CRAFTITEM_WOOD_PLANK;
r[3] = CONTENT_CRAFTITEM_WOOD_PLANK;
r[5] = CONTENT_CRAFTITEM_WOOD_PLANK;
r[6] = CONTENT_CRAFTITEM_WOOD_PLANK;
r[8] = CONTENT_CRAFTITEM_WOOD_PLANK;
crafting::setRecipe(r,CONTENT_LADDER_WALL,4);
r[0] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
r[2] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
r[3] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
r[5] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
r[6] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
r[8] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
crafting::setRecipe(r,CONTENT_LADDER_WALL,4);
}
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_LADDER_FLOOR;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Ladder");
2014-09-19 09:36:05 -07:00
f->setAllTextures("ladder.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem ")+itos(CONTENT_LADDER_WALL)+" 1";
f->solidness = 0;
f->wallmount_alternate_node = CONTENT_LADDER_WALL;
f->roofmount_alternate_node = CONTENT_LADDER_ROOF;
f->rotate_tile_with_nodebox = true;
f->climbable = true;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 30/16;
f->type = CMT_WOOD;
f->hardness = 0.5;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
f->setNodeBox(core::aabbox3d<f32>(
-0.4375*BS,-0.5*BS,-0.5*BS,-0.3125*BS,-0.3125*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
0.3125*BS,-0.5*BS,-0.5*BS,0.4375*BS,-0.3125*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,-0.4375*BS,-0.3125*BS,0.3125*BS,-0.375*BS,-0.25*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,-0.4375*BS,0.1875*BS,0.3125*BS,-0.375*BS,0.25*BS
));
i = CONTENT_LADDER_ROOF;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Ladder");
2014-09-19 09:36:05 -07:00
f->setAllTextures("ladder.png");
f->light_propagates = true;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem ")+itos(CONTENT_LADDER_WALL)+" 1";
f->solidness = 0;
f->floormount_alternate_node = CONTENT_LADDER_FLOOR;
f->wallmount_alternate_node = CONTENT_LADDER_WALL;
f->rotate_tile_with_nodebox = true;
f->climbable = true;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 30/16;
f->type = CMT_WOOD;
f->hardness = 0.5;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
f->setNodeBox(core::aabbox3d<f32>(
-0.4375*BS,0.3125*BS,-0.5*BS,-0.3125*BS,0.5*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
0.3125*BS,0.3125*BS,-0.5*BS,0.4375*BS,0.5*BS,0.5*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,0.375*BS,-0.3125*BS,0.3125*BS,0.4375*BS,-0.25*BS
));
f->addNodeBox(core::aabbox3d<f32>(
-0.3125*BS,0.375*BS,0.1875*BS,0.3125*BS,0.4375*BS,0.25*BS
));
i = CONTENT_BORDERSTONE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Border Stone");
2014-09-19 09:36:05 -07:00
f->setAllTextures("borderstone.png");
f->setInventoryTextureCube("borderstone.png", "borderstone.png", "borderstone.png");
f->draw_type = CDT_CUBELIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new BorderStoneNodeMetadata();
f->type = CMT_STONE;
f->hardness = 2.0;
f->pressure_type = CST_SOLID;
2015-07-30 00:37:52 -07:00
crafting::setFilledRoundRecipe(CONTENT_STONE,CONTENT_CRAFTITEM_MITHRIL_RAW,CONTENT_BORDERSTONE);
crafting::setFilledRoundRecipe(CONTENT_STONE,CONTENT_CRAFTITEM_MITHRIL_UNBOUND,CONTENT_BORDERSTONE);
2014-09-19 09:36:05 -07:00
{
u16 r[9] = {
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_STONE, CONTENT_CRAFTITEM_STEEL_INGOT,
CONTENT_STONE, CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_STONE,
CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_STONE, CONTENT_CRAFTITEM_STEEL_INGOT
};
crafting::setRecipe(r,CONTENT_BORDERSTONE,1);
}
lists::add("craftguide",i);
lists::add("player-creative",i);
lists::add("creative",i);
i = CONTENT_BOOK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Book");
2014-09-19 09:36:05 -07:00
f->setTexture(0, "book_cover.png");
f->setTexture(1, "book_cover.png^[transformFX");
f->setTexture(2, "book_side.png^[transformFY");
f->setTexture(3, "book_side.png");
f->setTexture(4, "book_end.png");
f->setTexture(5, "book_end.png^[transformFX");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_BOOK_OPEN;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0;
content_nodebox_book(f);
f->setFaceText(0,FaceText(0.45,0.3,0.9875,0.7375));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i, "book_cover.png", "book_end.png^[transformFX", "book_side.png^[transformFY");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setCol1Recipe(CONTENT_CRAFTITEM_PAPER,i);
lists::add("craftguide",i);
lists::add("creative",i);
if (f->initial_metadata == NULL)
f->initial_metadata = new ClosedBookNodeMetadata();
i = CONTENT_COOK_BOOK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Cook Book");
2014-09-19 09:36:05 -07:00
f->setTexture(0, "book_cook_cover.png");
f->setTexture(1, "book_cook_cover.png^[transformFX");
f->setTexture(2, "book_cook_side.png^[transformFY");
f->setTexture(3, "book_cook_side.png");
f->setTexture(4, "book_cook_end.png");
f->setTexture(5, "book_cook_end.png^[transformFX");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_COOK_BOOK_OPEN;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0;
content_nodebox_book(f);
f->setInventoryTextureNodeBox(i, "book_cook_cover.png", "book_cook_end.png^[transformFX", "book_cook_side.png^[transformFY");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_COAL,i);
crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_CHARCOAL,i);
lists::add("craftguide",i);
lists::add("creative",i);
if (f->initial_metadata == NULL)
f->initial_metadata = new ClosedBookNodeMetadata();
i = CONTENT_DECRAFT_BOOK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Decraft Book");
2014-09-19 09:36:05 -07:00
f->setTexture(0, "book_decraft_cover.png");
f->setTexture(1, "book_decraft_cover.png^[transformFX");
f->setTexture(2, "book_decraft_side.png^[transformFY");
f->setTexture(3, "book_decraft_side.png");
f->setTexture(4, "book_decraft_end.png");
f->setTexture(5, "book_decraft_end.png^[transformFX");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_DECRAFT_BOOK_OPEN;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0;
content_nodebox_book(f);
f->setInventoryTextureNodeBox(i, "book_decraft_cover.png", "book_decraft_end.png^[transformFX", "book_decraft_side.png^[transformFY");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_GUNPOWDER,i);
lists::add("craftguide",i);
lists::add("creative",i);
if (f->initial_metadata == NULL)
f->initial_metadata = new ClosedBookNodeMetadata();
i = CONTENT_DIARY_BOOK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Diary");
2014-09-19 09:36:05 -07:00
f->setTexture(0, "book_diary_cover.png");
f->setTexture(1, "book_diary_cover.png^[transformFX");
f->setTexture(2, "book_diary_side.png^[transformFY");
f->setTexture(3, "book_diary_side.png");
f->setTexture(4, "book_diary_end.png");
f->setTexture(5, "book_diary_end.png^[transformFX");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_DIARY_BOOK_OPEN;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0;
content_nodebox_book(f);
f->setFaceText(0,FaceText(0.45,0.3,0.9875,0.7375));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i, "book_diary_cover.png", "book_diary_end.png^[transformFX", "book_diary_side.png^[transformFY");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_STEEL_INGOT,i);
if (f->initial_metadata == NULL)
f->initial_metadata = new ClosedBookNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_CRAFT_BOOK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Craft Book");
2014-09-19 09:36:05 -07:00
f->setTexture(0, "book_craft_cover.png");
f->setTexture(1, "book_craft_cover.png^[transformFX");
f->setTexture(2, "book_craft_side.png^[transformFY");
f->setTexture(3, "book_craft_side.png");
f->setTexture(4, "book_craft_end.png");
f->setTexture(5, "book_craft_end.png^[transformFX");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_CRAFT_BOOK_OPEN;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0;
content_nodebox_book(f);
f->setInventoryTextureNodeBox(i, "book_craft_cover.png", "book_craft_end.png^[transformFX", "book_craft_side.png^[transformFY");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-07-30 00:37:52 -07:00
crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_MITHRIL_RAW,i);
crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_MITHRIL_UNBOUND,i);
2014-09-19 09:36:05 -07:00
{
content_t r[9] = {
CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
CONTENT_IGNORE, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE
};
crafting::setRecipe(r,CONTENT_CRAFT_BOOK,1);
}
if (f->initial_metadata == NULL)
f->initial_metadata = new ClosedBookNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
2015-06-28 15:53:31 -07:00
i = CONTENT_RCRAFT_BOOK;
f = &content_features(i);
f->description = wgettext("Reverse Craft Book");
f->setTexture(0, "book_rcraft_cover.png");
f->setTexture(1, "book_rcraft_cover.png^[transformFX");
f->setTexture(2, "book_rcraft_side.png^[transformFY");
f->setTexture(3, "book_rcraft_side.png");
f->setTexture(4, "book_rcraft_end.png");
f->setTexture(5, "book_rcraft_end.png^[transformFX");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_RCRAFT_BOOK_OPEN;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0;
content_nodebox_book(f);
f->setInventoryTextureNodeBox(i, "book_rcraft_cover.png", "book_rcraft_end.png^[transformFX", "book_rcraft_side.png^[transformFY");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
f->suffocation_per_second = 0;
{
content_t r[9] = {
CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE,
CONTENT_IGNORE, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE
};
crafting::setRecipe(r,CONTENT_RCRAFT_BOOK,1);
}
if (f->initial_metadata == NULL)
f->initial_metadata = new ClosedBookNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
2014-09-19 09:36:05 -07:00
i = CONTENT_BOOK_OPEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Guide");
2014-09-19 09:36:05 -07:00
f->setAllTextures("guide_side.png");
f->setTexture(0, "guide_top.png");
f->setTexture(1, "guide_bottom.png");
f->setTexture(4, "guide_end.png");
f->setTexture(5, "guide_end.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_BOOK;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_BOOK)+" 1";
f->solidness = 0;
content_nodebox_guide(f);
f->setFaceText(0,FaceText(0.15,0.35,0.85,0.85,FTT_BOOKCONTENT));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i, "guide_top.png", "guide_end.png", "guide_side.png");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
if (f->initial_metadata == NULL)
f->initial_metadata = new BookNodeMetadata();
f->sound_access = "open-book";
2014-09-19 09:36:05 -07:00
i = CONTENT_COOK_BOOK_OPEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Cooking Guide");
2014-09-19 09:36:05 -07:00
f->setAllTextures("guide_cook_side.png");
f->setTexture(0, "guide_cook_top.png");
f->setTexture(1, "guide_cook_bottom.png");
f->setTexture(4, "guide_cook_end.png");
f->setTexture(5, "guide_cook_end.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_COOK_BOOK;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_COOK_BOOK)+" 1";
f->solidness = 0;
content_nodebox_guide(f);
f->setInventoryTextureNodeBox(i, "guide_cook_top.png", "guide_cook_end.png", "guide_cook_side.png");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
if (f->initial_metadata == NULL)
f->initial_metadata = new CookBookNodeMetadata();
f->sound_access = "open-book";
2014-09-19 09:36:05 -07:00
i = CONTENT_DECRAFT_BOOK_OPEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Decrafting Guide");
2014-09-19 09:36:05 -07:00
f->setAllTextures("guide_decraft_side.png");
f->setTexture(0, "guide_decraft_top.png");
f->setTexture(1, "guide_decraft_bottom.png");
f->setTexture(4, "guide_decraft_end.png");
f->setTexture(5, "guide_decraft_end.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_DECRAFT_BOOK;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_DECRAFT_BOOK)+" 1";
f->solidness = 0;
content_nodebox_guide(f);
f->setInventoryTextureNodeBox(i, "guide_decraft_top.png", "guide_decraft_end.png", "guide_decraft_side.png");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
if (f->initial_metadata == NULL)
f->initial_metadata = new DeCraftNodeMetadata();
f->sound_access = "open-book";
2014-09-19 09:36:05 -07:00
i = CONTENT_DIARY_BOOK_OPEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Diary");
2014-09-19 09:36:05 -07:00
f->setAllTextures("guide_diary_side.png");
f->setTexture(0, "guide_diary_top.png");
f->setTexture(1, "guide_diary_bottom.png");
f->setTexture(4, "guide_diary_end.png");
f->setTexture(5, "guide_diary_end.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_DIARY_BOOK;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_DIARY_BOOK)+" 1";
f->solidness = 0;
content_nodebox_guide(f);
f->setFaceText(0,FaceText(0.15,0.35,0.85,0.85,FTT_BOOKCONTENT));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i, "guide_diary_top.png", "guide_diary_end.png", "guide_diary_side.png");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
if (f->initial_metadata == NULL)
f->initial_metadata = new DiaryNodeMetadata();
f->sound_access = "open-book";
2014-09-19 09:36:05 -07:00
i = CONTENT_CRAFT_BOOK_OPEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Craft Guide");
2014-09-19 09:36:05 -07:00
f->setAllTextures("guide_craft_side.png");
f->setTexture(0, "guide_craft_top.png");
f->setTexture(1, "guide_craft_bottom.png");
f->setTexture(4, "guide_craft_end.png");
f->setTexture(5, "guide_craft_end.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_CRAFT_BOOK;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_CRAFT_BOOK)+" 1";
f->solidness = 0;
content_nodebox_guide(f);
f->setInventoryTextureNodeBox(i, "guide_craft_top.png", "guide_craft_end.png", "guide_craft_side.png");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
if (f->initial_metadata == NULL)
f->initial_metadata = new CraftGuideNodeMetadata();
f->sound_access = "open-book";
2014-09-19 09:36:05 -07:00
2015-06-28 15:53:31 -07:00
i = CONTENT_RCRAFT_BOOK_OPEN;
f = &content_features(i);
f->description = wgettext("Reverse Craft Guide");
f->setAllTextures("guide_rcraft_side.png");
f->setTexture(0, "guide_rcraft_top.png");
f->setTexture(1, "guide_rcraft_bottom.png");
f->setTexture(4, "guide_rcraft_end.png");
f->setTexture(5, "guide_rcraft_end.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->rotate_tile_with_nodebox = true;
f->light_propagates = true;
f->air_equivalent = true;
f->onpunch_replace_node = CONTENT_RCRAFT_BOOK;
f->flammable = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_RCRAFT_BOOK)+" 1";
f->solidness = 0;
content_nodebox_guide(f);
f->setInventoryTextureNodeBox(i, "guide_rcraft_top.png", "guide_rcraft_end.png", "guide_rcraft_side.png");
f->type = CMT_DIRT;
f->hardness = 1.0;
f->pressure_type = CST_CRUSHABLE;
f->suffocation_per_second = 0;
if (f->initial_metadata == NULL)
f->initial_metadata = new ReverseCraftGuideNodeMetadata();
f->sound_access = "open-book";
2014-09-19 09:36:05 -07:00
i = CONTENT_FIRE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Fire");
2014-09-19 09:36:05 -07:00
f->setAllTextures("fire.png");
f->setAllTextureFlags(0);
f->param_type = CPT_LIGHT;
f->draw_type = CDT_FIRELIKE;
f->light_propagates = true;
f->light_source = LIGHT_MAX-1;
f->solidness = 0; // Drawn separately, makes no faces
f->walkable = false;
f->pointable = false;
f->diggable = false;
f->buildable_to = true;
2014-10-24 07:35:58 -07:00
f->damage_per_second = 8;
2015-04-11 01:19:43 -07:00
f->sound_ambient = "env-fire";
2014-09-19 09:36:05 -07:00
#ifndef SERVER
f->post_effect_color = video::SColor(192, 255, 64, 0);
#endif
f->pressure_type = CST_CRUSHED;
i = CONTENT_FIRE_SHORTTERM;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Fire");
2014-09-19 09:36:05 -07:00
f->setAllTextures("fire.png");
f->setAllTextureFlags(0);
f->param_type = CPT_LIGHT;
f->draw_type = CDT_FIRELIKE;
f->light_propagates = true;
f->light_source = LIGHT_MAX-1;
f->solidness = 0; // Drawn separately, makes no faces
f->walkable = false;
f->pointable = false;
f->diggable = false;
f->buildable_to = true;
2014-10-24 07:35:58 -07:00
f->damage_per_second = 8;
2014-09-19 09:36:05 -07:00
#ifndef SERVER
f->post_effect_color = video::SColor(192, 255, 64, 0);
#endif
f->pressure_type = CST_CRUSHED;
i = CONTENT_TORCH_LEGACY;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Torch");
2014-09-19 09:36:05 -07:00
f->setAllTextures("torch.png");
f->setInventoryTexture("torch_inventory.png");
f->setAllTextureFlags(0);
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_WALLMOUNT;
f->draw_type = CDT_TORCHLIKE;
f->light_propagates = true;
f->sunlight_propagates = true;
f->solidness = 0; // drawn separately, makes no faces
f->walkable = false;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 0.5;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_TORCH)+" 1";
f->light_source = LIGHT_MAX-1;
f->type = CMT_WOOD;
f->hardness = 0.0;
f->pressure_type = CST_CRUSHED;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
i = CONTENT_TORCH;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Torch");
2014-09-19 09:36:05 -07:00
f->setAllTextures("torch.png");
f->setInventoryTexture("torch_inventory.png");
f->setAllTextureFlags(0);
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_WALLMOUNT;
f->draw_type = CDT_TORCHLIKE;
f->light_propagates = true;
f->sunlight_propagates = true;
f->solidness = 0; // drawn separately, makes no faces
f->walkable = false;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 0.5;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->light_source = LIGHT_MAX-1;
f->type = CMT_WOOD;
f->hardness = 0.0;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1over4Recipe(CONTENT_CRAFTITEM_COAL,CONTENT_CRAFTITEM_STICK,CONTENT_TORCH);
crafting::set1over4Recipe(CONTENT_CRAFTITEM_CHARCOAL,CONTENT_CRAFTITEM_STICK,CONTENT_TORCH);
lists::add("craftguide",i);
lists::add("player-creative",i);
lists::add("creative",i);
i = CONTENT_SIGN_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Sign");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sign_wall.png");
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_WALLMOUNT;
f->draw_type = CDT_NODEBOX;
f->light_propagates = true;
f->sunlight_propagates = true;
f->floormount_alternate_node = CONTENT_SIGN;
f->roofmount_alternate_node = CONTENT_SIGN_UD;
f->solidness = 0; // drawn separately, makes no faces
f->walkable = false;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SIGN)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new SignNodeMetadata("Some sign");
f->type = CMT_WOOD;
f->hardness = 0.1;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_LOCKABLE_SIGN_WALL;
2014-09-19 09:36:05 -07:00
content_nodebox_sign_wall(f);
f->setFaceText(5,FaceText(0.05,0.3,0.95,0.7));
2014-09-19 09:36:05 -07:00
i = CONTENT_SIGN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Sign");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sign.png");
f->setTexture(4, "sign_back.png");
f->setTexture(5, "sign_front.png"); // Z-
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->sunlight_propagates = true;
f->air_equivalent = true;
2014-09-19 09:36:05 -07:00
f->wallmount_alternate_node = CONTENT_SIGN_WALL;
f->roofmount_alternate_node = CONTENT_SIGN_UD;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->solidness = 0; // drawn separately, makes no faces
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new SignNodeMetadata("Some sign");
f->type = CMT_WOOD;
f->hardness = 0.1;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_LOCKABLE_SIGN;
2014-09-19 09:36:05 -07:00
content_nodebox_sign(f);
f->setFaceText(5,FaceText(0.05,0.0675,0.95,0.55));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i,"sign.png", "sign_front.png", "sign.png");
crafting::setSignRecipe(CONTENT_CRAFTITEM_WOOD_PLANK,CONTENT_SIGN);
crafting::setSignRecipe(CONTENT_CRAFTITEM_PINE_PLANK,CONTENT_SIGN);
crafting::setSignRecipe(CONTENT_CRAFTITEM_JUNGLE_PLANK,CONTENT_SIGN);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_SIGN_UD;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Sign");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sign.png");
f->setTexture(4, "sign_back_ud.png");
f->setTexture(5, "sign_front_ud.png"); // Z-
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->sunlight_propagates = true;
f->air_equivalent = true;
2014-09-19 09:36:05 -07:00
f->wallmount_alternate_node = CONTENT_SIGN_WALL;
f->floormount_alternate_node = CONTENT_SIGN;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->solidness = 0; // drawn separately, makes no faces
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SIGN)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new SignNodeMetadata("Some sign");
f->type = CMT_WOOD;
f->hardness = 0.1;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_LOCKABLE_SIGN_UD;
2014-09-19 09:36:05 -07:00
content_nodebox_sign_ud(f);
f->setFaceText(5,FaceText(0.05,0.45,0.95,0.8875));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i,"sign.png", "sign_front.png", "sign.png");
i = CONTENT_LOCKABLE_SIGN_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Locking Sign");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sign.png");
f->setTexture(4, "sign_back.png");
f->setTexture(5, "sign_wall_lock.png"); // Z-
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_WALLMOUNT;
f->draw_type = CDT_NODEBOX;
f->light_propagates = true;
f->sunlight_propagates = true;
f->air_equivalent = true;
2014-09-19 09:36:05 -07:00
f->floormount_alternate_node = CONTENT_LOCKABLE_SIGN;
f->roofmount_alternate_node = CONTENT_LOCKABLE_SIGN_UD;
f->solidness = 0; // drawn separately, makes no faces
f->walkable = false;
f->air_equivalent = true;
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_LOCKABLE_SIGN)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingSignNodeMetadata("Some sign");
f->type = CMT_WOOD;
f->hardness = 0.1;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_SIGN_WALL;
2014-09-19 09:36:05 -07:00
content_nodebox_sign_wall(f);
f->setFaceText(4,FaceText(0.05,0.3,0.95,0.7,FTT_OWNER));
f->setFaceText(5,FaceText(0.05,0.3,0.95,0.7));
2014-09-19 09:36:05 -07:00
i = CONTENT_LOCKABLE_SIGN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Locking Sign");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sign.png");
f->setTexture(4, "sign_back.png");
f->setTexture(5, "sign_lock.png"); // Z-
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->sunlight_propagates = true;
f->air_equivalent = true;
2014-09-19 09:36:05 -07:00
f->wallmount_alternate_node = CONTENT_LOCKABLE_SIGN_WALL;
f->roofmount_alternate_node = CONTENT_LOCKABLE_SIGN_UD;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->solidness = 0; // drawn separately, makes no faces
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingSignNodeMetadata("Some sign");
f->type = CMT_WOOD;
f->hardness = 0.1;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_SIGN;
2014-09-19 09:36:05 -07:00
content_nodebox_sign(f);
f->setFaceText(4,FaceText(0.05,0.0675,0.95,0.55,FTT_OWNER));
f->setFaceText(5,FaceText(0.05,0.0675,0.95,0.55));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i,"sign.png", "sign_lock.png", "sign.png");
crafting::set1Any2Recipe(CONTENT_SIGN,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_SIGN);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_LOCKABLE_SIGN_UD;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Locking Sign");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sign.png");
f->setTexture(4, "sign_back_ud.png");
f->setTexture(5, "sign_lock_ud.png"); // Z-
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->sunlight_propagates = true;
f->air_equivalent = true;
2014-09-19 09:36:05 -07:00
f->wallmount_alternate_node = CONTENT_LOCKABLE_SIGN_WALL;
f->floormount_alternate_node = CONTENT_LOCKABLE_SIGN;
f->param2_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_NODEBOX;
f->solidness = 0; // drawn separately, makes no faces
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
f->fuel_time = 1;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_LOCKABLE_SIGN)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingSignNodeMetadata("Some sign");
f->type = CMT_WOOD;
f->hardness = 0.1;
f->pressure_type = CST_CRUSHABLE;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_SIGN_UD;
2014-09-19 09:36:05 -07:00
content_nodebox_sign_ud(f);
f->setFaceText(4,FaceText(0.05,0.45,0.95,0.8875,FTT_OWNER));
f->setFaceText(5,FaceText(0.05,0.45,0.95,0.8875));
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i,"sign.png", "sign_lock.png", "sign.png");
i = CONTENT_CHEST;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Chest");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("chest_side.png");
f->setTexture(0, "chest_top.png");
f->setTexture(1, "chest_top.png");
f->setTexture(5, "chest_front.png"); // Z-
f->setInventoryTexture("chest_top.png");
f->setInventoryTextureCube("chest_top.png", "chest_front.png", "chest_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new ChestNodeMetadata();
f->sound_access = "open-chest";
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 1.0;
f->pressure_type = CST_SOLID;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_LOCKABLE_CHEST;
2014-09-19 09:36:05 -07:00
crafting::setRoundRecipe(CONTENT_WOOD,CONTENT_CHEST);
crafting::setRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CHEST);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_CREATIVE_CHEST;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Creative Chest");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("chest_side.png");
f->setTexture(0, "chest_top.png");
f->setTexture(1, "chest_top.png");
f->setTexture(5, "chest_creative.png"); // Z-
f->setInventoryTexture("chest_top.png");
f->setInventoryTextureCube("chest_top.png", "chest_creative.png", "chest_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new CreativeChestNodeMetadata();
f->sound_access = "open-chest";
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 1.0;
f->pressure_type = CST_SOLID;
lists::add("player-creative",i);
lists::add("creative",i);
i = CONTENT_LOCKABLE_CHEST;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Locking Chest");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("chest_side.png");
f->setTexture(0, "chest_top.png");
f->setTexture(1, "chest_top.png");
f->setTexture(5, "chest_lock.png"); // Z-
f->setInventoryTexture("chest_lock.png");
f->setInventoryTextureCube("chest_top.png", "chest_lock.png", "chest_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingChestNodeMetadata();
f->sound_access = "open-chest";
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 1.0;
f->pressure_type = CST_SOLID;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_CHEST;
2014-09-19 09:36:05 -07:00
crafting::setFilledRoundRecipe(CONTENT_WOOD,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::setFilledRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::set1Any2Recipe(CONTENT_CHEST,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::setFilledRoundRecipe(CONTENT_WOOD,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::setFilledRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::set1Any2Recipe(CONTENT_CHEST,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::setFilledRoundRecipe(CONTENT_WOOD,CONTENT_CRAFTITEM_SILVER_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::setFilledRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CRAFTITEM_SILVER_INGOT,CONTENT_LOCKABLE_CHEST);
crafting::set1Any2Recipe(CONTENT_CHEST,CONTENT_CRAFTITEM_SILVER_INGOT,CONTENT_LOCKABLE_CHEST);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_SAFE;
f = &content_features(i);
f->description = wgettext("Safe");
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("safe_side.png");
f->setTexture(0, "safe_top.png");
f->setTexture(1, "safe_top.png");
f->setTexture(5, "safe_lock.png"); // Z-
f->setInventoryTexture("safe_lock.png");
f->setInventoryTextureCube("safe_top.png", "safe_lock.png", "safe_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new SafeNodeMetadata();
f->type = CMT_WOOD;
f->hardness = 1.0;
f->pressure_type = CST_SOLID;
f->destructive_mob_safe = true;
2014-12-08 11:48:09 -08:00
crafting::setFilledRoundRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_SAFE);
lists::add("craftguide",i);
lists::add("creative",i);
2014-09-19 09:36:05 -07:00
i = CONTENT_FURNACE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Furnace");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("furnace_side.png");
f->setTexture(0, "furnace_top.png");
f->setTexture(1, "furnace_top.png");
f->setTexture(5, "furnace_front.png"); // Z-
f->setInventoryTextureCube("furnace_top.png", "furnace_front.png", "furnace_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new FurnaceNodeMetadata();
f->type = CMT_STONE;
f->hardness = 3.0;
f->pressure_type = CST_SOLID;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_LOCKABLE_FURNACE;
2014-09-19 09:36:05 -07:00
crafting::setRoundRecipe(CONTENT_ROUGHSTONE,CONTENT_FURNACE);
lists::add("craftguide",i);
lists::add("creative",i);
2014-10-23 12:04:25 -07:00
i = CONTENT_FURNACE_ACTIVE;
f = &content_features(i);
f->description = wgettext("Furnace");
2015-01-06 06:01:44 -08:00
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2014-10-23 12:04:25 -07:00
f->draw_type = CDT_CUBELIKE;
2015-01-06 06:01:44 -08:00
f->light_source = 9;
2014-10-23 12:04:25 -07:00
f->setAllTextures("furnace_side.png");
f->setTexture(0, "furnace_top.png");
f->setTexture(1, "furnace_top.png");
f->setTexture(5, "furnace_front_active.png"); // Z-
f->setInventoryTextureCube("furnace_top.png", "furnace_front_active.png", "furnace_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_FURNACE)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new FurnaceNodeMetadata();
f->type = CMT_STONE;
f->hardness = 3.0;
f->pressure_type = CST_SOLID;
2014-09-19 09:36:05 -07:00
i = CONTENT_LOCKABLE_FURNACE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Locking Furnace");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("furnace_side.png");
f->setTexture(0, "furnace_top.png");
f->setTexture(1, "furnace_top.png");
f->setTexture(5, "furnace_lock.png"); // Z-
f->setInventoryTextureCube("furnace_top.png", "furnace_lock.png", "furnace_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingFurnaceNodeMetadata();
f->type = CMT_STONE;
f->hardness = 3.0;
f->pressure_type = CST_SOLID;
2015-06-03 12:39:19 -07:00
f->alternate_lockstate_node = CONTENT_FURNACE;
2014-09-19 09:36:05 -07:00
crafting::setFilledRoundRecipe(CONTENT_ROUGHSTONE,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_FURNACE);
crafting::set1Any2Recipe(CONTENT_FURNACE,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_FURNACE);
lists::add("craftguide",i);
lists::add("creative",i);
2014-10-23 12:04:25 -07:00
i = CONTENT_LOCKABLE_FURNACE_ACTIVE;
f = &content_features(i);
f->description = wgettext("Locking Furnace");
2015-01-06 06:01:44 -08:00
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2014-10-23 12:04:25 -07:00
f->draw_type = CDT_CUBELIKE;
2015-01-06 06:01:44 -08:00
f->light_source = 9;
2014-10-23 12:04:25 -07:00
f->setAllTextures("furnace_side.png");
f->setTexture(0, "furnace_top.png");
f->setTexture(1, "furnace_top.png");
f->setTexture(5, "furnace_lock_active.png"); // Z-
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_LOCKABLE_FURNACE)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingFurnaceNodeMetadata();
f->type = CMT_STONE;
f->hardness = 3.0;
f->pressure_type = CST_SOLID;
2014-09-19 09:36:05 -07:00
i = CONTENT_INCINERATOR;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Incinerator");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("incinerator_side.png");
f->setTexture(0, "incinerator_top.png"); // Z-
f->setTexture(1, "incinerator_top.png"); // Z-
f->setTexture(5, "incinerator_front.png"); // Z-
f->setInventoryTextureCube("incinerator_top.png", "incinerator_front.png", "incinerator_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new IncineratorNodeMetadata();
f->type = CMT_STONE;
f->hardness = 0.4;
f->pressure_type = CST_SOLID;
2015-07-30 00:37:52 -07:00
crafting::setFilledRoundRecipe(CONTENT_ROUGHSTONE,CONTENT_CRAFTITEM_MITHRIL_UNBOUND,CONTENT_INCINERATOR);
2014-09-19 09:36:05 -07:00
lists::add("craftguide",i);
lists::add("creative",i);
2014-10-23 12:04:25 -07:00
i = CONTENT_INCINERATOR_ACTIVE;
f = &content_features(i);
f->description = wgettext("Incinerator");
2015-01-06 06:01:44 -08:00
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2014-10-23 12:04:25 -07:00
f->draw_type = CDT_CUBELIKE;
2015-01-06 06:01:44 -08:00
f->light_source = 9;
2014-10-23 12:04:25 -07:00
f->setAllTextures("incinerator_side.png");
f->setTexture(0, "incinerator_top.png"); // Z-
f->setTexture(1, "incinerator_top.png"); // Z-
f->setTexture(5, "incinerator_front_active.png"); // Z-
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_INCINERATOR)+" 1";
if (f->initial_metadata == NULL)
f->initial_metadata = new IncineratorNodeMetadata();
f->type = CMT_STONE;
f->hardness = 0.4;
f->pressure_type = CST_SOLID;
2014-09-19 09:36:05 -07:00
i = CONTENT_NC;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Nyan Cat");
2014-09-19 09:36:05 -07:00
f->param_type = CPT_FACEDIR_SIMPLE;
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("nc_side.png");
f->setTexture(5, "nc_front.png"); // Z-
f->setTexture(4, "nc_back.png"); // Z+
f->setInventoryTextureCube("nc_side.png", "nc_front.png", "nc_side.png");
2014-09-19 09:36:05 -07:00
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->type = CMT_STONE;
f->hardness = 3.0;
lists::add("creative",i);
i = CONTENT_NC_RB;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Rainbow");
2014-09-19 09:36:05 -07:00
f->draw_type = CDT_CUBELIKE;
f->setAllTextures("nc_rb.png");
f->setInventoryTextureCube("nc_rb.png", "nc_rb.png", "nc_rb.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->type = CMT_STONE;
f->hardness = 3.0;
lists::add("creative",i);
i = CONTENT_FLOWER_POT_RAW;
f = &content_features(i);
f->param_type = CPT_LIGHT;
2014-09-23 12:21:20 -07:00
f->description = wgettext("Unbaked Flower Pot");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flower_pot_raw.png");
f->setTexture(0,"flower_pot_raw_top.png");
f->setTexture(1,"flower_pot_raw_bottom.png");
f->draw_type = CDT_NODEBOX;
f->light_propagates = true;
f->sunlight_propagates = true;
f->solidness = 0; // drawn separately, makes no faces
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->cook_result = std::string("MaterialItem2 ")+itos(CONTENT_FLOWER_POT)+" 1";
f->type = CMT_STONE;
f->hardness = 0.75;
f->pressure_type = CST_CRUSHABLE;
content_nodebox_flower_pot(f);
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i,"flower_pot_raw_top.png","flower_pot_raw.png","flower_pot_raw.png");
crafting::setVRecipe(CONTENT_CRAFTITEM_CLAY,CONTENT_FLOWER_POT_RAW);
lists::add("craftguide",i);
lists::add("cooking",i);
i = CONTENT_FLOWER_POT;
f = &content_features(i);
f->param_type = CPT_LIGHT;
2014-09-23 12:21:20 -07:00
f->description = wgettext("Flower Pot");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flower_pot.png");
f->setTexture(0,"flower_pot_top.png");
f->setTexture(1,"flower_pot_bottom.png");
f->draw_type = CDT_NODEBOX;
f->light_propagates = true;
f->sunlight_propagates = true;
f->solidness = 0; // drawn separately, makes no faces
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->type = CMT_STONE;
f->hardness = 0.75;
content_nodebox_flower_pot(f);
2014-09-19 09:36:05 -07:00
f->setInventoryTextureNodeBox(i,"flower_pot_top.png","flower_pot.png","flower_pot.png");
lists::add("creative",i);
// walls
i = CONTENT_COBBLE_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Cobblestone Wall");
2014-09-19 09:36:05 -07:00
f->setAllTextures("cobble.png");
f->light_propagates = true;
f->jumpable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_WALLLIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_wall_inv(f);
content_nodebox_wall(f);
f->setInventoryTextureNodeBox(i,"cobble.png","cobble.png","cobble.png");
f->special_alternate_node = CONTENT_COBBLE;
f->type = CMT_STONE;
f->hardness = 0.9;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setWallRecipe(CONTENT_COBBLE,CONTENT_COBBLE_WALL);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_ROUGHSTONE_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Rough Stone Wall");
2014-09-19 09:36:05 -07:00
f->setAllTextures("roughstone.png");
f->light_propagates = true;
f->jumpable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_WALLLIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_wall_inv(f);
content_nodebox_wall(f);
f->setInventoryTextureNodeBox(i,"roughstone.png","roughstone.png","roughstone.png");
f->special_alternate_node = CONTENT_ROUGHSTONE;
f->type = CMT_STONE;
f->hardness = 0.9;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setWallRecipe(CONTENT_ROUGHSTONE,CONTENT_ROUGHSTONE_WALL);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_MOSSYCOBBLE_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Mossy Cobblestone Wall");
2014-09-19 09:36:05 -07:00
f->setAllTextures("mossycobble.png");
f->light_propagates = true;
f->jumpable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_WALLLIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_wall_inv(f);
content_nodebox_wall(f);
f->setInventoryTextureNodeBox(i,"mossycobble.png","mossycobble.png","mossycobble.png");
f->special_alternate_node = CONTENT_MOSSYCOBBLE;
f->type = CMT_STONE;
f->hardness = 0.8;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setWallRecipe(CONTENT_MOSSYCOBBLE,CONTENT_MOSSYCOBBLE_WALL);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_STONE_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Stone Wall");
2014-09-19 09:36:05 -07:00
f->setAllTextures("stone.png");
f->light_propagates = true;
f->jumpable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_WALLLIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_wall_inv(f);
content_nodebox_wall(f);
f->setInventoryTextureNodeBox(i,"stone.png","stone.png","stone.png");
f->special_alternate_node = CONTENT_STONE;
f->type = CMT_STONE;
f->hardness = 1.0;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setWallRecipe(CONTENT_STONE,CONTENT_STONE_WALL);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_SANDSTONE_WALL;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Sand Stone Wall");
2014-09-19 09:36:05 -07:00
f->setAllTextures("sandstone.png");
f->light_propagates = true;
f->jumpable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_SPECIAL;
f->draw_type = CDT_WALLLIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_wall_inv(f);
content_nodebox_wall(f);
f->setInventoryTextureNodeBox(i,"sandstone.png","sandstone.png","sandstone.png");
f->special_alternate_node = CONTENT_SANDSTONE;
f->type = CMT_DIRT;
f->hardness = 1.0;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setWallRecipe(CONTENT_SANDSTONE,CONTENT_SANDSTONE_WALL);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_TNT;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("TNT");
2014-09-19 09:36:05 -07:00
f->setAllTextures("tnt.png");
f->setTexture(0, "tnt_top.png");
f->setTexture(1, "tnt_bottom.png");
f->setInventoryTextureCube("tnt_top.png", "tnt.png", "tnt.png");
f->draw_type = CDT_CUBELIKE;
f->is_ground_content = true;
f->energy_type = CET_CONDUCTIVE;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new TNTNodeMetadata();
f->type = CMT_DIRT;
f->hardness = 1.0;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::setSoftBlockRecipe(CONTENT_CRAFTITEM_TNT,CONTENT_TNT);
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLASH;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("In-Progress explosion - how did you get this???");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flash.png");
f->solidness = 0; // drawn separately, makes no faces
f->param_type = CPT_LIGHT;
f->draw_type = CDT_GLASSLIKE;
f->light_propagates = true;
f->light_source = LIGHT_MAX-1;
f->walkable = false;
f->pointable = false;
f->diggable = false;
f->buildable_to = true;
f->damage_per_second = 50;
f->pressure_type = CST_CRUSHED;
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
f->post_effect_color = video::SColor(192, 255, 255, 64);
#endif
i = CONTENT_STEAM;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Steam");
2014-09-19 09:36:05 -07:00
f->setAllTextures("steam.png");
f->solidness = 0;
f->param_type = CPT_LIGHT;
f->draw_type = CDT_GLASSLIKE;
f->light_propagates = true;
f->sunlight_propagates = true;
f->walkable = false;
f->pointable = false;
f->diggable = false;
f->buildable_to = true;
2014-10-24 07:35:58 -07:00
f->warmth_per_second = 4;
2014-09-19 09:36:05 -07:00
f->pressure_type = CST_CRUSHED;
#ifndef SERVER
f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
f->post_effect_color = video::SColor(120, 200, 200, 200);
#endif
// flags
i = CONTENT_FLAG;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_WHITE;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
{
content_t r[9] = {
CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PAPER, CONTENT_IGNORE,
CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE,
CONTENT_IGNORE, CONTENT_IGNORE, CONTENT_IGNORE
};
crafting::setRecipe(r,CONTENT_FLAG,1);
}
crafting::set1Any2Recipe(CONTENT_FLAG_BLUE,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_BLUE,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_GREEN,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_GREEN,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_ORANGE,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_ORANGE,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_PURPLE,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_PURPLE,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_RED,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_RED,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_YELLOW,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_YELLOW,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_BLACK,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
crafting::set1Any2Recipe(CONTENT_FLAG_BLACK,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_BLUE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Blue Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_blue.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_BLUE;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_BLUE,CONTENT_FLAG_BLUE);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_GREEN;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Green Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_green.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_GREEN;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_GREEN,CONTENT_FLAG_GREEN);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_ORANGE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Orange Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_orange.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_ORANGE;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_ORANGE,CONTENT_FLAG_ORANGE);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_PURPLE;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Purple Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_purple.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_PURPLE;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_PURPLE,CONTENT_FLAG_PURPLE);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_RED;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Red Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_red.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_RED;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_RED,CONTENT_FLAG_RED);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_YELLOW;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Yellow Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_yellow.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_YELLOW;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_YELLOW,CONTENT_FLAG_YELLOW);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_FLAG_BLACK;
f = &content_features(i);
2014-09-23 12:21:20 -07:00
f->description = wgettext("Black Home Flag");
2014-09-19 09:36:05 -07:00
f->setAllTextures("flag_black.png");
2015-06-01 04:22:42 -07:00
f->setAllTextureFlags(0);
2014-09-19 09:36:05 -07:00
f->light_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->param2_type = CPT_FACEDIR_SIMPLE;
2015-06-01 04:22:42 -07:00
f->draw_type = CDT_FLAGLIKE;
2014-09-19 09:36:05 -07:00
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_flag(f);
f->home_node = PLAYERFLAG_BLACK;
2014-09-19 09:36:05 -07:00
f->type = CMT_WOOD;
f->hardness = 0.4;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2014-09-19 09:36:05 -07:00
crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_BLACK,CONTENT_FLAG_BLACK);
if(f->initial_metadata == NULL)
f->initial_metadata = new FlagNodeMetadata();
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_LIFE_SUPPORT;
f = &content_features(i);
f->description = wgettext("Life Support System");
f->setAllTextures("life_support.png");
f->setTexture(0, "life_support_top.png");
f->setTexture(1, "life_support_bottom.png");
f->setInventoryTextureCube("life_support_top.png", "life_support.png", "life_support.png");
f->draw_type = CDT_CUBELIKE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->type = CMT_DIRT;
f->hardness = 1.0;
2014-10-24 07:35:58 -07:00
f->suffocation_per_second = 0;
2015-07-30 00:37:52 -07:00
{
content_t r[9] = {
CONTENT_IGNORE, CONTENT_SPONGE, CONTENT_IGNORE,
CONTENT_CRAFTITEM_MITHRIL_UNBOUND, CONTENT_IGNORE, CONTENT_CRAFTITEM_MITHRIL_UNBOUND,
CONTENT_CRAFTITEM_MITHRIL_UNBOUND, CONTENT_CRAFTITEM_MITHRIL_UNBOUND, CONTENT_CRAFTITEM_MITHRIL_UNBOUND
};
crafting::setRecipe(r,CONTENT_LIFE_SUPPORT,1);
}
lists::add("craftguide",i);
lists::add("creative",i);
i = CONTENT_PARCEL;
f = &content_features(i);
f->description = wgettext("Parcel");
f->setAllTextures("parcel.png");
f->setTexture(0, "parcel_top.png");
f->setTexture(1, "parcel_bottom.png");
f->light_propagates = true;
f->sunlight_propagates = true;
f->walkable = false;
f->param_type = CPT_LIGHT;
f->rotate_tile_with_nodebox = true;
f->draw_type = CDT_NODEBOX;
f->is_ground_content = true;
f->buildable_to = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
content_nodebox_parcel(f);
f->setInventoryTextureNodeBox(i,"parcel_top.png", "parcel.png", "parcel.png");
f->type = CMT_DIRT;
f->hardness = 0.01;
f->suffocation_per_second = 0;
if (f->initial_metadata == NULL)
f->initial_metadata = new ParcelNodeMetadata();
i = CONTENT_CAULDRON;
f = &content_features(i);
f->description = wgettext("Cauldron");
f->setAllTextures("cauldron_outer.png");
f->setAllMetaTextures("cauldron_inner.png");
f->setMetaTexture(0,"water.png");
f->draw_type = CDT_NODEBOX_META;
f->type = CMT_STONE;
f->hardness = 3.0;
f->solidness = 0;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
content_nodebox_cauldron(f);
f->setInventoryTextureNodeBox(i,"cauldron_outer.png", "cauldron_outer.png", "cauldron_outer.png");
if (f->initial_metadata == NULL)
f->initial_metadata = new CauldronNodeMetadata();
crafting::setDeepURecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_CAULDRON);
f->pressure_type = CST_SOLID;
lists::add("craftguide",i);
lists::add("creative",i);
f->suffocation_per_second = 0;
2015-08-03 01:26:32 -07:00
i = CONTENT_FORGE;
f = &content_features(i);
f->description = wgettext("Forge");
f->setAllTextures("forge_side.png");
f->setTexture(0,"forge_top.png");
f->setTexture(1,"forge_bottom.png");
f->draw_type = CDT_NODEBOX;
f->type = CMT_STONE;
f->hardness = 3.0;
f->solidness = 0;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
content_nodebox_forge(f);
f->setInventoryTextureNodeBox(i,"forge_top.png", "forge_side.png", "forge_side.png");
if (f->initial_metadata == NULL)
f->initial_metadata = new ForgeNodeMetadata();
{
content_t r[9] = {
CONTENT_ROUGHSTONE, CONTENT_CHARCOAL, CONTENT_ROUGHSTONE,
CONTENT_ROUGHSTONE, CONTENT_SAND, CONTENT_ROUGHSTONE,
CONTENT_ROUGHSTONE, CONTENT_STEEL, CONTENT_ROUGHSTONE
};
crafting::setRecipe(r,CONTENT_FORGE,1);
}
f->pressure_type = CST_SOLID;
lists::add("craftguide",i);
lists::add("creative",i);
f->suffocation_per_second = 0;
i = CONTENT_FORGE_FIRE;
f = &content_features(i);
f->description = wgettext("Forge Fire");
f->setAllTextures("forge_fire.png");
f->setAllTextureFlags(0);
f->param_type = CPT_LIGHT;
f->draw_type = CDT_PLANTLIKE;
f->light_propagates = true;
f->light_source = LIGHT_MAX-4;
f->solidness = 0; // Drawn separately, makes no faces
f->walkable = false;
f->pointable = false;
f->diggable = false;
f->buildable_to = true;
f->sound_ambient = "env-fire";
#ifndef SERVER
f->post_effect_color = video::SColor(192, 255, 64, 0);
#endif
f->pressure_type = CST_CRUSHED;
2014-09-19 09:36:05 -07:00
}