1604.00
[voxelands.git] / src / content_mapnode_special.cpp
blob5618b782b79bc838439a03977b2c627c71dc3d36
1 /************************************************************************
2 * Minetest-c55
3 * Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
5 * content_mapnode_special.cpp
6 * Copyright (C) Lisa 'darkrose' Milne 2014 <lisa@ltmnet.com>
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>
20 ************************************************************************/
22 #include "content_mapnode.h"
23 #include "content_nodebox.h"
24 #include "content_list.h"
25 #include "content_craft.h"
26 #include "content_nodemeta.h"
27 #include "player.h"
28 #include "intl.h"
30 void content_mapnode_special(bool repeat)
32 content_t i;
33 ContentFeatures *f = NULL;
35 i = CONTENT_FENCE;
36 f = &content_features(i);
37 f->description = wgettext("Fence");
38 f->setAllTextures("fence.png");
39 f->setTexture(0,"fence_top.png");
40 f->setTexture(1,"fence_top.png");
41 f->light_propagates = true;
42 f->param_type = CPT_LIGHT;
43 f->param2_type = CPT_SPECIAL;
44 f->draw_type = CDT_FENCELIKE;
45 f->is_ground_content = true;
46 f->jumpable = false;
47 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
48 f->air_equivalent = true; // grass grows underneath
49 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
50 f->fuel_time = 15;
51 f->special_alternate_node = CONTENT_WOOD;
52 f->type = CMT_WOOD;
53 f->hardness = 0.75;
54 f->pressure_type = CST_CRUSHABLE;
55 f->suffocation_per_second = 0;
56 content_nodebox_fence_inv(f);
57 content_nodebox_fence(f);
58 f->setInventoryTextureNodeBox(i,"fence.png","fence_top.png","fence.png");
59 crafting::setWallRecipe(CONTENT_CRAFTITEM_WOOD_PLANK,CONTENT_FENCE);
60 lists::add("craftguide",i);
61 lists::add("creative",i);
63 i = CONTENT_STEEL_FENCE;
64 f = &content_features(i);
65 f->description = wgettext("Steel Fence");
66 f->setAllTextures("fence_steel.png");
67 f->setTexture(0,"fence_steel_top.png");
68 f->setTexture(1,"fence_steel_top.png");
69 f->light_propagates = true;
70 f->param_type = CPT_LIGHT;
71 f->param2_type = CPT_SPECIAL;
72 f->draw_type = CDT_FENCELIKE;
73 f->is_ground_content = true;
74 f->jumpable = false;
75 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
76 f->air_equivalent = true; // grass grows underneath
77 f->special_alternate_node = CONTENT_STEEL;
78 f->type = CMT_STONE;
79 f->hardness = 0.75;
80 f->pressure_type = CST_SOLID;
81 f->suffocation_per_second = 0;
82 f->destructive_mob_safe = true;
83 content_nodebox_fence_inv(f);
84 content_nodebox_fence(f);
85 f->setInventoryTextureNodeBox(i,"fence_steel.png","fence_steel_top.png","fence_steel.png");
86 crafting::setWallRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_STEEL_FENCE);
87 lists::add("craftguide",i);
88 lists::add("creative",i);
90 i = CONTENT_JUNGLE_FENCE;
91 f = &content_features(i);
92 f->description = wgettext("Jungle Wood Fence");
93 f->setAllTextures("fence_jungle.png");
94 f->setTexture(0,"fence_jungle_top.png");
95 f->setTexture(1,"fence_jungle_top.png");
96 f->light_propagates = true;
97 f->param_type = CPT_LIGHT;
98 f->param2_type = CPT_SPECIAL;
99 f->draw_type = CDT_FENCELIKE;
100 f->is_ground_content = true;
101 f->jumpable = false;
102 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
103 f->air_equivalent = true; // grass grows underneath
104 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
105 f->fuel_time = 15;
106 f->special_alternate_node = CONTENT_JUNGLEWOOD;
107 f->type = CMT_WOOD;
108 f->hardness = 0.75;
109 f->pressure_type = CST_CRUSHABLE;
110 f->suffocation_per_second = 0;
111 content_nodebox_fence_inv(f);
112 content_nodebox_fence(f);
113 f->setInventoryTextureNodeBox(i,"fence_jungle.png","fence_jungle_top.png","fence_jungle.png");
114 crafting::setWallRecipe(CONTENT_CRAFTITEM_JUNGLE_PLANK,CONTENT_JUNGLE_FENCE);
115 lists::add("craftguide",i);
116 lists::add("creative",i);
118 i = CONTENT_PINE_FENCE;
119 f = &content_features(i);
120 f->description = wgettext("Pine Fence");
121 f->setAllTextures("fence_pine.png");
122 f->setTexture(0,"fence_pine_top.png");
123 f->setTexture(1,"fence_pine_top.png");
124 f->light_propagates = true;
125 f->param_type = CPT_LIGHT;
126 f->param2_type = CPT_SPECIAL;
127 f->draw_type = CDT_FENCELIKE;
128 f->is_ground_content = true;
129 f->jumpable = false;
130 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
131 f->air_equivalent = true; // grass grows underneath
132 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
133 f->fuel_time = 15;
134 f->special_alternate_node = CONTENT_WOOD_PINE;
135 f->type = CMT_WOOD;
136 f->hardness = 0.75;
137 f->pressure_type = CST_CRUSHABLE;
138 f->suffocation_per_second = 0;
139 content_nodebox_fence_inv(f);
140 content_nodebox_fence(f);
141 f->setInventoryTextureNodeBox(i,"fence_pine.png","fence_pine_top.png","fence_pine.png");
142 crafting::setWallRecipe(CONTENT_CRAFTITEM_PINE_PLANK,CONTENT_PINE_FENCE);
143 lists::add("craftguide",i);
144 lists::add("creative",i);
146 i = CONTENT_STEEL_BARS;
147 f = &content_features(i);
148 f->description = wgettext("Steel Bars");
149 f->setAllTextures("steel_block.png");
150 f->light_propagates = true;
151 f->param_type = CPT_LIGHT;
152 f->param2_type = CPT_FACEDIR_SIMPLE;
153 f->draw_type = CDT_NODEBOX;
154 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
155 f->air_equivalent = true; // grass grows underneath
156 f->special_alternate_node = CONTENT_STEEL;
157 f->type = CMT_STONE;
158 f->hardness = 0.75;
159 f->pressure_type = CST_SOLID;
160 f->suffocation_per_second = 0;
161 content_nodebox_bars(f);
162 f->setInventoryTextureNodeBox(i,"steel_block.png","steel_block.png","steel_block.png");
164 u16 r[9] = {
165 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT,
166 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT,
167 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT
169 crafting::setRecipe(r,CONTENT_STEEL_BARS,6);
171 lists::add("craftguide",i);
172 lists::add("creative",i);
174 i = CONTENT_RAIL;
175 f = &content_features(i);
176 f->description = wgettext("Rail");
177 f->setAllTextures("rail.png");
178 f->setTexture(0,"track_tie.png");
179 f->setTexture(1,"track_rail.png");
180 f->light_propagates = true;
181 f->param_type = CPT_LIGHT;
182 f->draw_type = CDT_RAILLIKE;
183 f->is_ground_content = true;
184 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
185 f->air_equivalent = true; // grass grows underneath
186 f->type = CMT_DIRT;
187 f->hardness = 0.75;
188 f->suffocation_per_second = 0;
190 u16 r[9] = {
191 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_CRAFTITEM_WOOD_PLANK, CONTENT_CRAFTITEM_STEEL_INGOT,
192 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_IGNORE, CONTENT_CRAFTITEM_STEEL_INGOT,
193 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_CRAFTITEM_WOOD_PLANK, CONTENT_CRAFTITEM_STEEL_INGOT
195 crafting::setRecipe(r,CONTENT_RAIL,15);
196 r[1] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
197 r[7] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
198 crafting::setRecipe(r,CONTENT_RAIL,15);
200 f->setNodeBox(core::aabbox3d<f32>(
201 -0.5*BS,-0.5*BS,-0.5*BS,0.5*BS,-0.375*BS,0.5*BS
203 lists::add("craftguide",i);
204 lists::add("creative",i);
206 i = CONTENT_ROOFTILE_TERRACOTTA;
207 f = &content_features(i);
208 f->description = wgettext("Terracotta Roof Tile");
209 f->setAllTextures("rooftile_terracotta.png");
210 f->setAllTextureFlags(0);
211 f->draw_type = CDT_ROOFLIKE;
212 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
213 f->type = CMT_DIRT;
214 f->hardness = 0.75;
215 f->pressure_type = CST_CRUSHABLE;
216 f->suffocation_per_second = 0;
217 content_nodebox_roofcollide(f);
218 crafting::set1over4Recipe(CONTENT_TERRACOTTA,CONTENT_TERRACOTTA,CONTENT_ROOFTILE_TERRACOTTA);
219 lists::add("craftguide",i);
220 lists::add("creative",i);
222 i = CONTENT_ROOFTILE_WOOD;
223 f = &content_features(i);
224 f->description = wgettext("Wood Roof Tile");
225 f->setAllTextures("rooftile_wood.png");
226 f->setAllTextureFlags(0);
227 f->draw_type = CDT_ROOFLIKE;
228 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
229 f->type = CMT_WOOD;
230 f->hardness = 0.75;
231 f->pressure_type = CST_CRUSHABLE;
232 f->suffocation_per_second = 0;
233 content_nodebox_roofcollide(f);
234 crafting::set1over4Recipe(CONTENT_WOOD,CONTENT_WOOD,CONTENT_ROOFTILE_WOOD);
235 crafting::set1over4Recipe(CONTENT_JUNGLEWOOD,CONTENT_JUNGLEWOOD,CONTENT_ROOFTILE_WOOD);
236 lists::add("craftguide",i);
237 lists::add("creative",i);
239 i = CONTENT_ROOFTILE_ASPHALT;
240 f = &content_features(i);
241 f->description = wgettext("Asphalt Roof Tile");
242 f->setAllTextures("rooftile_asphalt.png");
243 f->setAllTextureFlags(0);
244 f->draw_type = CDT_ROOFLIKE;
245 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
246 f->type = CMT_DIRT;
247 f->hardness = 0.75;
248 f->pressure_type = CST_CRUSHABLE;
249 f->suffocation_per_second = 0;
250 content_nodebox_roofcollide(f);
252 u16 r[9] = {
253 CONTENT_SAND, CONTENT_CRAFTITEM_PAPER, CONTENT_IGNORE,
254 CONTENT_CRAFTITEM_PAPER, CONTENT_CRAFTITEM_DYE_BLACK, CONTENT_IGNORE,
255 CONTENT_IGNORE, CONTENT_IGNORE, CONTENT_IGNORE,
257 crafting::setRecipe(r,CONTENT_ROOFTILE_ASPHALT,4);
259 lists::add("craftguide",i);
260 lists::add("creative",i);
262 i = CONTENT_ROOFTILE_STONE;
263 f = &content_features(i);
264 f->description = wgettext("Stone Roof Tile");
265 f->setAllTextures("rooftile_stone.png");
266 f->setAllTextureFlags(0);
267 f->draw_type = CDT_ROOFLIKE;
268 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
269 f->type = CMT_DIRT;
270 f->hardness = 0.75;
271 f->pressure_type = CST_CRUSHABLE;
272 f->suffocation_per_second = 0;
273 content_nodebox_roofcollide(f);
274 crafting::set1over4Recipe(CONTENT_ROUGHSTONE,CONTENT_ROUGHSTONE,CONTENT_ROOFTILE_STONE);
275 lists::add("craftguide",i);
276 lists::add("creative",i);
278 i = CONTENT_ROOFTILE_GLASS;
279 f = &content_features(i);
280 f->description = wgettext("Glass Roof Tile");
281 f->setAllTextures("glass.png");
282 f->setTexture(1,"glass_slab.png"); // special texture for top sections
283 f->setAllTextureFlags(0);
284 #ifndef SERVER
285 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
286 #endif
287 f->param_type = CPT_LIGHT;
288 f->light_propagates = true;
289 f->draw_type = CDT_ROOFLIKE;
290 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
291 f->type = CMT_GLASS;
292 f->hardness = 0.75;
293 f->pressure_type = CST_CRUSHABLE;
294 f->suffocation_per_second = 0;
295 content_nodebox_roofcollide(f);
296 crafting::set1over4Recipe(CONTENT_GLASS,CONTENT_GLASS,CONTENT_ROOFTILE_GLASS);
297 lists::add("craftguide",i);
298 lists::add("creative",i);
300 i = CONTENT_ROOFTILE_GLASS_BLUE;
301 f = &content_features(i);
302 f->description = wgettext("Blue Glass Roof Tile");
303 f->setAllTextures("glass.png^glass_pane_blue_side.png");
304 f->setTexture(1,"glass_slab.png^glass_pane_blue_side.png"); // special texture for top sections
305 f->setAllTextureFlags(0);
306 #ifndef SERVER
307 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
308 #endif
309 f->param_type = CPT_LIGHT;
310 f->light_propagates = true;
311 f->draw_type = CDT_ROOFLIKE;
312 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
313 f->type = CMT_GLASS;
314 f->hardness = 0.75;
315 f->pressure_type = CST_CRUSHABLE;
316 f->suffocation_per_second = 0;
317 content_nodebox_roofcollide(f);
318 crafting::set1over4Recipe(CONTENT_GLASS_BLUE,CONTENT_GLASS_BLUE,CONTENT_ROOFTILE_GLASS_BLUE);
319 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_BLUE,CONTENT_ROOFTILE_GLASS_BLUE);
320 lists::add("craftguide",i);
321 lists::add("creative",i);
323 i = CONTENT_ROOFTILE_GLASS_GREEN;
324 f = &content_features(i);
325 f->description = wgettext("Green Glass Roof Tile");
326 f->setAllTextures("glass.png^glass_pane_green_side.png");
327 f->setTexture(1,"glass_slab.png^glass_pane_green_side.png"); // special texture for top sections
328 f->setAllTextureFlags(0);
329 #ifndef SERVER
330 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
331 #endif
332 f->param_type = CPT_LIGHT;
333 f->light_propagates = true;
334 f->draw_type = CDT_ROOFLIKE;
335 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
336 f->type = CMT_GLASS;
337 f->hardness = 0.75;
338 f->pressure_type = CST_CRUSHABLE;
339 f->suffocation_per_second = 0;
340 content_nodebox_roofcollide(f);
341 crafting::set1over4Recipe(CONTENT_GLASS_GREEN,CONTENT_GLASS_GREEN,CONTENT_ROOFTILE_GLASS_GREEN);
342 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_GREEN,CONTENT_ROOFTILE_GLASS_GREEN);
343 lists::add("craftguide",i);
344 lists::add("creative",i);
346 i = CONTENT_ROOFTILE_GLASS_ORANGE;
347 f = &content_features(i);
348 f->description = wgettext("Orange Glass Roof Tile");
349 f->setAllTextures("glass.png^glass_pane_orange_side.png");
350 f->setTexture(1,"glass_slab.png^glass_pane_orange_side.png"); // special texture for top sections
351 f->setAllTextureFlags(0);
352 #ifndef SERVER
353 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
354 #endif
355 f->param_type = CPT_LIGHT;
356 f->light_propagates = true;
357 f->draw_type = CDT_ROOFLIKE;
358 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
359 f->type = CMT_GLASS;
360 f->hardness = 0.75;
361 f->pressure_type = CST_CRUSHABLE;
362 f->suffocation_per_second = 0;
363 content_nodebox_roofcollide(f);
364 crafting::set1over4Recipe(CONTENT_GLASS_ORANGE,CONTENT_GLASS_ORANGE,CONTENT_ROOFTILE_GLASS_ORANGE);
365 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_ORANGE,CONTENT_ROOFTILE_GLASS_ORANGE);
366 lists::add("craftguide",i);
367 lists::add("creative",i);
369 i = CONTENT_ROOFTILE_GLASS_PURPLE;
370 f = &content_features(i);
371 f->description = wgettext("Purple Glass Roof Tile");
372 f->setAllTextures("glass.png^glass_pane_purple_side.png");
373 f->setTexture(1,"glass_slab.png^glass_pane_purple_side.png"); // special texture for top sections
374 f->setAllTextureFlags(0);
375 #ifndef SERVER
376 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
377 #endif
378 f->param_type = CPT_LIGHT;
379 f->light_propagates = true;
380 f->draw_type = CDT_ROOFLIKE;
381 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
382 f->type = CMT_GLASS;
383 f->hardness = 0.75;
384 f->pressure_type = CST_CRUSHABLE;
385 f->suffocation_per_second = 0;
386 content_nodebox_roofcollide(f);
387 crafting::set1over4Recipe(CONTENT_GLASS_PURPLE,CONTENT_GLASS_PURPLE,CONTENT_ROOFTILE_GLASS_PURPLE);
388 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_PURPLE,CONTENT_ROOFTILE_GLASS_PURPLE);
389 lists::add("craftguide",i);
390 lists::add("creative",i);
392 i = CONTENT_ROOFTILE_GLASS_RED;
393 f = &content_features(i);
394 f->description = wgettext("Red Glass Roof Tile");
395 f->setAllTextures("glass.png^glass_pane_red_side.png");
396 f->setTexture(1,"glass_slab.png^glass_pane_red_side.png"); // special texture for top sections
397 f->setAllTextureFlags(0);
398 #ifndef SERVER
399 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
400 #endif
401 f->param_type = CPT_LIGHT;
402 f->light_propagates = true;
403 f->draw_type = CDT_ROOFLIKE;
404 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
405 f->type = CMT_GLASS;
406 f->hardness = 0.75;
407 f->pressure_type = CST_CRUSHABLE;
408 f->suffocation_per_second = 0;
409 content_nodebox_roofcollide(f);
410 crafting::set1over4Recipe(CONTENT_GLASS_RED,CONTENT_GLASS_RED,CONTENT_ROOFTILE_GLASS_RED);
411 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_RED,CONTENT_ROOFTILE_GLASS_RED);
412 lists::add("craftguide",i);
413 lists::add("creative",i);
415 i = CONTENT_ROOFTILE_GLASS_YELLOW;
416 f = &content_features(i);
417 f->description = wgettext("Yellow Glass Roof Tile");
418 f->setAllTextures("glass.png^glass_pane_yellow_side.png");
419 f->setTexture(1,"glass_slab.png^glass_pane_yellow_side.png"); // special texture for top sections
420 f->setAllTextureFlags(0);
421 #ifndef SERVER
422 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
423 #endif
424 f->param_type = CPT_LIGHT;
425 f->light_propagates = true;
426 f->draw_type = CDT_ROOFLIKE;
427 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
428 f->type = CMT_GLASS;
429 f->hardness = 0.75;
430 f->pressure_type = CST_CRUSHABLE;
431 f->suffocation_per_second = 0;
432 content_nodebox_roofcollide(f);
433 crafting::set1over4Recipe(CONTENT_GLASS_YELLOW,CONTENT_GLASS_YELLOW,CONTENT_ROOFTILE_GLASS_YELLOW);
434 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_YELLOW,CONTENT_ROOFTILE_GLASS_YELLOW);
435 lists::add("craftguide",i);
436 lists::add("creative",i);
438 i = CONTENT_ROOFTILE_GLASS_BLACK;
439 f = &content_features(i);
440 f->description = wgettext("Black Glass Roof Tile");
441 f->setAllTextures("glass.png^glass_pane_black_side.png");
442 f->setTexture(1,"glass_slab.png^glass_pane_black_side.png"); // special texture for top sections
443 f->setAllTextureFlags(0);
444 #ifndef SERVER
445 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
446 #endif
447 f->param_type = CPT_LIGHT;
448 f->light_propagates = true;
449 f->draw_type = CDT_ROOFLIKE;
450 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
451 f->type = CMT_GLASS;
452 f->hardness = 0.75;
453 f->pressure_type = CST_CRUSHABLE;
454 f->suffocation_per_second = 0;
455 content_nodebox_roofcollide(f);
456 crafting::set1over4Recipe(CONTENT_GLASS_BLACK,CONTENT_GLASS_BLACK,CONTENT_ROOFTILE_GLASS_BLACK);
457 crafting::set1Any2Recipe(CONTENT_ROOFTILE_GLASS,CONTENT_CRAFTITEM_DYE_BLACK,CONTENT_ROOFTILE_GLASS_BLACK);
458 lists::add("craftguide",i);
459 lists::add("creative",i);
461 i = CONTENT_ROOFTILE_THATCH;
462 f = &content_features(i);
463 f->description = wgettext("Thatch Roof Tile");
464 f->setAllTextures("rooftile_thatch.png");
465 f->setAllTextureFlags(0);
466 f->draw_type = CDT_ROOFLIKE;
467 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
468 f->type = CMT_DIRT;
469 f->hardness = 0.75;
470 f->pressure_type = CST_CRUSHABLE;
471 f->suffocation_per_second = 0;
472 content_nodebox_roofcollide(f);
473 crafting::set1over4Recipe(CONTENT_DEADGRASS,CONTENT_DEADGRASS,CONTENT_ROOFTILE_THATCH);
474 crafting::set1over4Recipe(CONTENT_WILDGRASS_SHORT,CONTENT_WILDGRASS_SHORT,CONTENT_ROOFTILE_THATCH);
475 crafting::set1over4Recipe(CONTENT_JUNGLEGRASS,CONTENT_JUNGLEGRASS,CONTENT_ROOFTILE_THATCH);
476 lists::add("craftguide",i);
477 lists::add("creative",i);
479 i = CONTENT_LADDER_WALL;
480 f = &content_features(i);
481 f->description = wgettext("Ladder");
482 f->setAllTextures("ladder.png");
483 f->light_propagates = true;
484 f->param_type = CPT_LIGHT;
485 f->param2_type = CPT_FACEDIR_WALLMOUNT;
486 f->draw_type = CDT_NODEBOX;
487 f->is_ground_content = true;
488 f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
489 f->floormount_alternate_node = CONTENT_LADDER_FLOOR;
490 f->roofmount_alternate_node = CONTENT_LADDER_ROOF;
491 f->rotate_tile_with_nodebox = true;
492 f->climbable = true;
493 f->air_equivalent = true;
494 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
495 f->fuel_time = 30/16;
496 f->type = CMT_WOOD;
497 f->hardness = 0.5;
498 f->pressure_type = CST_CRUSHABLE;
499 f->suffocation_per_second = 0;
500 f->setNodeBox(core::aabbox3d<f32>(
501 -0.4375*BS,-0.5*BS,0.3125*BS,-0.3125*BS,0.5*BS,0.5*BS
503 f->addNodeBox(core::aabbox3d<f32>(
504 0.3125*BS,-0.5*BS,0.3125*BS,0.4375*BS,0.5*BS,0.5*BS
506 f->addNodeBox(core::aabbox3d<f32>(
507 -0.3125*BS,-0.25*BS,0.375*BS,0.3125*BS,-0.1875*BS,0.4375*BS
509 f->addNodeBox(core::aabbox3d<f32>(
510 -0.3125*BS,0.25*BS,0.375*BS,0.3125*BS,0.3125*BS,0.4375*BS
512 f->setInventoryTextureNodeBox(i,"ladder.png","ladder.png","ladder.png");
514 u16 r[9] = {
515 CONTENT_CRAFTITEM_PINE_PLANK, CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PINE_PLANK,
516 CONTENT_CRAFTITEM_PINE_PLANK, CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PINE_PLANK,
517 CONTENT_CRAFTITEM_PINE_PLANK, CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PINE_PLANK
519 crafting::setRecipe(r,CONTENT_LADDER_WALL,4);
520 r[0] = CONTENT_CRAFTITEM_WOOD_PLANK;
521 r[2] = CONTENT_CRAFTITEM_WOOD_PLANK;
522 r[3] = CONTENT_CRAFTITEM_WOOD_PLANK;
523 r[5] = CONTENT_CRAFTITEM_WOOD_PLANK;
524 r[6] = CONTENT_CRAFTITEM_WOOD_PLANK;
525 r[8] = CONTENT_CRAFTITEM_WOOD_PLANK;
526 crafting::setRecipe(r,CONTENT_LADDER_WALL,4);
527 r[0] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
528 r[2] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
529 r[3] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
530 r[5] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
531 r[6] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
532 r[8] = CONTENT_CRAFTITEM_JUNGLE_PLANK;
533 crafting::setRecipe(r,CONTENT_LADDER_WALL,4);
535 lists::add("craftguide",i);
536 lists::add("creative",i);
538 i = CONTENT_LADDER_FLOOR;
539 f = &content_features(i);
540 f->description = wgettext("Ladder");
541 f->setAllTextures("ladder.png");
542 f->light_propagates = true;
543 f->param_type = CPT_LIGHT;
544 f->param2_type = CPT_FACEDIR_SIMPLE;
545 f->draw_type = CDT_NODEBOX;
546 f->is_ground_content = true;
547 f->dug_item = std::string("MaterialItem ")+itos(CONTENT_LADDER_WALL)+" 1";
548 f->wallmount_alternate_node = CONTENT_LADDER_WALL;
549 f->roofmount_alternate_node = CONTENT_LADDER_ROOF;
550 f->rotate_tile_with_nodebox = true;
551 f->climbable = true;
552 f->air_equivalent = true;
553 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
554 f->fuel_time = 30/16;
555 f->type = CMT_WOOD;
556 f->hardness = 0.5;
557 f->pressure_type = CST_CRUSHABLE;
558 f->suffocation_per_second = 0;
559 f->setNodeBox(core::aabbox3d<f32>(
560 -0.4375*BS,-0.5*BS,-0.5*BS,-0.3125*BS,-0.3125*BS,0.5*BS
562 f->addNodeBox(core::aabbox3d<f32>(
563 0.3125*BS,-0.5*BS,-0.5*BS,0.4375*BS,-0.3125*BS,0.5*BS
565 f->addNodeBox(core::aabbox3d<f32>(
566 -0.3125*BS,-0.4375*BS,-0.3125*BS,0.3125*BS,-0.375*BS,-0.25*BS
568 f->addNodeBox(core::aabbox3d<f32>(
569 -0.3125*BS,-0.4375*BS,0.1875*BS,0.3125*BS,-0.375*BS,0.25*BS
572 i = CONTENT_LADDER_ROOF;
573 f = &content_features(i);
574 f->description = wgettext("Ladder");
575 f->setAllTextures("ladder.png");
576 f->light_propagates = true;
577 f->param_type = CPT_LIGHT;
578 f->param2_type = CPT_FACEDIR_SIMPLE;
579 f->draw_type = CDT_NODEBOX;
580 f->is_ground_content = true;
581 f->dug_item = std::string("MaterialItem ")+itos(CONTENT_LADDER_WALL)+" 1";
582 f->floormount_alternate_node = CONTENT_LADDER_FLOOR;
583 f->wallmount_alternate_node = CONTENT_LADDER_WALL;
584 f->rotate_tile_with_nodebox = true;
585 f->climbable = true;
586 f->air_equivalent = true;
587 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
588 f->fuel_time = 30/16;
589 f->type = CMT_WOOD;
590 f->hardness = 0.5;
591 f->pressure_type = CST_CRUSHABLE;
592 f->suffocation_per_second = 0;
593 f->setNodeBox(core::aabbox3d<f32>(
594 -0.4375*BS,0.3125*BS,-0.5*BS,-0.3125*BS,0.5*BS,0.5*BS
596 f->addNodeBox(core::aabbox3d<f32>(
597 0.3125*BS,0.3125*BS,-0.5*BS,0.4375*BS,0.5*BS,0.5*BS
599 f->addNodeBox(core::aabbox3d<f32>(
600 -0.3125*BS,0.375*BS,-0.3125*BS,0.3125*BS,0.4375*BS,-0.25*BS
602 f->addNodeBox(core::aabbox3d<f32>(
603 -0.3125*BS,0.375*BS,0.1875*BS,0.3125*BS,0.4375*BS,0.25*BS
606 i = CONTENT_BORDERSTONE;
607 f = &content_features(i);
608 f->description = wgettext("Border Stone");
609 f->setAllTextures("borderstone.png");
610 f->setInventoryTextureCube("borderstone.png", "borderstone.png", "borderstone.png");
611 f->draw_type = CDT_CUBELIKE;
612 f->is_ground_content = true;
613 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
614 if(f->initial_metadata == NULL)
615 f->initial_metadata = new BorderStoneNodeMetadata();
616 f->type = CMT_STONE;
617 f->hardness = 2.0;
618 f->pressure_type = CST_SOLID;
619 crafting::setFilledRoundRecipe(CONTENT_STONE,CONTENT_CRAFTITEM_MITHRIL_RAW,CONTENT_BORDERSTONE);
620 crafting::setFilledRoundRecipe(CONTENT_STONE,CONTENT_CRAFTITEM_MITHRIL_UNBOUND,CONTENT_BORDERSTONE);
622 u16 r[9] = {
623 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_STONE, CONTENT_CRAFTITEM_STEEL_INGOT,
624 CONTENT_STONE, CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_STONE,
625 CONTENT_CRAFTITEM_STEEL_INGOT, CONTENT_STONE, CONTENT_CRAFTITEM_STEEL_INGOT
627 crafting::setRecipe(r,CONTENT_BORDERSTONE,1);
629 lists::add("craftguide",i);
630 lists::add("player-creative",i);
631 lists::add("creative",i);
633 i = CONTENT_BOOK;
634 f = &content_features(i);
635 f->description = wgettext("Book");
636 f->setTexture(0, "book_cover.png");
637 f->setTexture(1, "book_cover.png^[transformFX");
638 f->setTexture(2, "book_side.png^[transformFY");
639 f->setTexture(3, "book_side.png");
640 f->setTexture(4, "book_end.png");
641 f->setTexture(5, "book_end.png^[transformFX");
642 f->param_type = CPT_LIGHT;
643 f->param2_type = CPT_FACEDIR_SIMPLE;
644 f->draw_type = CDT_NODEBOX;
645 f->rotate_tile_with_nodebox = true;
646 f->light_propagates = true;
647 f->air_equivalent = true;
648 f->onpunch_replace_node = CONTENT_BOOK_OPEN;
649 f->flammable = 1;
650 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
651 content_nodebox_book(f);
652 f->setFaceText(0,FaceText(0.45,0.3,0.9875,0.7375));
653 f->setInventoryTextureNodeBox(i, "book_cover.png", "book_end.png^[transformFX", "book_side.png^[transformFY");
654 f->type = CMT_DIRT;
655 f->hardness = 1.0;
656 f->pressure_type = CST_CRUSHABLE;
657 f->suffocation_per_second = 0;
658 crafting::setCol1Recipe(CONTENT_CRAFTITEM_PAPER,i);
659 lists::add("craftguide",i);
660 lists::add("creative",i);
661 if (f->initial_metadata == NULL)
662 f->initial_metadata = new ClosedBookNodeMetadata();
664 i = CONTENT_COOK_BOOK;
665 f = &content_features(i);
666 f->description = wgettext("Cook Book");
667 f->setTexture(0, "book_cook_cover.png");
668 f->setTexture(1, "book_cook_cover.png^[transformFX");
669 f->setTexture(2, "book_cook_side.png^[transformFY");
670 f->setTexture(3, "book_cook_side.png");
671 f->setTexture(4, "book_cook_end.png");
672 f->setTexture(5, "book_cook_end.png^[transformFX");
673 f->param_type = CPT_LIGHT;
674 f->param2_type = CPT_FACEDIR_SIMPLE;
675 f->draw_type = CDT_NODEBOX;
676 f->rotate_tile_with_nodebox = true;
677 f->light_propagates = true;
678 f->air_equivalent = true;
679 f->onpunch_replace_node = CONTENT_COOK_BOOK_OPEN;
680 f->flammable = 1;
681 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
682 content_nodebox_book(f);
683 f->setInventoryTextureNodeBox(i, "book_cook_cover.png", "book_cook_end.png^[transformFX", "book_cook_side.png^[transformFY");
684 f->type = CMT_DIRT;
685 f->hardness = 1.0;
686 f->pressure_type = CST_CRUSHABLE;
687 f->suffocation_per_second = 0;
688 crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_COAL,i);
689 crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_CHARCOAL,i);
690 lists::add("craftguide",i);
691 lists::add("creative",i);
692 if (f->initial_metadata == NULL)
693 f->initial_metadata = new ClosedBookNodeMetadata();
695 i = CONTENT_DECRAFT_BOOK;
696 f = &content_features(i);
697 f->description = wgettext("Decraft Book");
698 f->setTexture(0, "book_decraft_cover.png");
699 f->setTexture(1, "book_decraft_cover.png^[transformFX");
700 f->setTexture(2, "book_decraft_side.png^[transformFY");
701 f->setTexture(3, "book_decraft_side.png");
702 f->setTexture(4, "book_decraft_end.png");
703 f->setTexture(5, "book_decraft_end.png^[transformFX");
704 f->param_type = CPT_LIGHT;
705 f->param2_type = CPT_FACEDIR_SIMPLE;
706 f->draw_type = CDT_NODEBOX;
707 f->rotate_tile_with_nodebox = true;
708 f->light_propagates = true;
709 f->air_equivalent = true;
710 f->onpunch_replace_node = CONTENT_DECRAFT_BOOK_OPEN;
711 f->flammable = 1;
712 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
713 content_nodebox_book(f);
714 f->setInventoryTextureNodeBox(i, "book_decraft_cover.png", "book_decraft_end.png^[transformFX", "book_decraft_side.png^[transformFY");
715 f->type = CMT_DIRT;
716 f->hardness = 1.0;
717 f->pressure_type = CST_CRUSHABLE;
718 f->suffocation_per_second = 0;
719 crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_GUNPOWDER,i);
720 lists::add("craftguide",i);
721 lists::add("creative",i);
722 if (f->initial_metadata == NULL)
723 f->initial_metadata = new ClosedBookNodeMetadata();
725 i = CONTENT_DIARY_BOOK;
726 f = &content_features(i);
727 f->description = wgettext("Diary");
728 f->setTexture(0, "book_diary_cover.png");
729 f->setTexture(1, "book_diary_cover.png^[transformFX");
730 f->setTexture(2, "book_diary_side.png^[transformFY");
731 f->setTexture(3, "book_diary_side.png");
732 f->setTexture(4, "book_diary_end.png");
733 f->setTexture(5, "book_diary_end.png^[transformFX");
734 f->param_type = CPT_LIGHT;
735 f->param2_type = CPT_FACEDIR_SIMPLE;
736 f->draw_type = CDT_NODEBOX;
737 f->rotate_tile_with_nodebox = true;
738 f->light_propagates = true;
739 f->air_equivalent = true;
740 f->onpunch_replace_node = CONTENT_DIARY_BOOK_OPEN;
741 f->flammable = 1;
742 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
743 content_nodebox_book(f);
744 f->setFaceText(0,FaceText(0.45,0.3,0.9875,0.7375));
745 f->setInventoryTextureNodeBox(i, "book_diary_cover.png", "book_diary_end.png^[transformFX", "book_diary_side.png^[transformFY");
746 f->type = CMT_DIRT;
747 f->hardness = 1.0;
748 f->pressure_type = CST_CRUSHABLE;
749 f->suffocation_per_second = 0;
750 crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_STEEL_INGOT,i);
751 if (f->initial_metadata == NULL)
752 f->initial_metadata = new ClosedBookNodeMetadata();
753 lists::add("craftguide",i);
754 lists::add("creative",i);
756 i = CONTENT_CRAFT_BOOK;
757 f = &content_features(i);
758 f->description = wgettext("Craft Book");
759 f->setTexture(0, "book_craft_cover.png");
760 f->setTexture(1, "book_craft_cover.png^[transformFX");
761 f->setTexture(2, "book_craft_side.png^[transformFY");
762 f->setTexture(3, "book_craft_side.png");
763 f->setTexture(4, "book_craft_end.png");
764 f->setTexture(5, "book_craft_end.png^[transformFX");
765 f->param_type = CPT_LIGHT;
766 f->param2_type = CPT_FACEDIR_SIMPLE;
767 f->draw_type = CDT_NODEBOX;
768 f->rotate_tile_with_nodebox = true;
769 f->light_propagates = true;
770 f->air_equivalent = true;
771 f->onpunch_replace_node = CONTENT_CRAFT_BOOK_OPEN;
772 f->flammable = 1;
773 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
774 content_nodebox_book(f);
775 f->setInventoryTextureNodeBox(i, "book_craft_cover.png", "book_craft_end.png^[transformFX", "book_craft_side.png^[transformFY");
776 f->type = CMT_DIRT;
777 f->hardness = 1.0;
778 f->pressure_type = CST_CRUSHABLE;
779 f->suffocation_per_second = 0;
780 crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_MITHRIL_RAW,i);
781 crafting::set1Any2Recipe(CONTENT_BOOK,CONTENT_CRAFTITEM_MITHRIL_UNBOUND,i);
783 content_t r[9] = {
784 CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
785 CONTENT_IGNORE, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
786 CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE
788 crafting::setRecipe(r,CONTENT_CRAFT_BOOK,1);
790 if (f->initial_metadata == NULL)
791 f->initial_metadata = new ClosedBookNodeMetadata();
792 lists::add("craftguide",i);
793 lists::add("creative",i);
795 i = CONTENT_RCRAFT_BOOK;
796 f = &content_features(i);
797 f->description = wgettext("Reverse Craft Book");
798 f->setTexture(0, "book_rcraft_cover.png");
799 f->setTexture(1, "book_rcraft_cover.png^[transformFX");
800 f->setTexture(2, "book_rcraft_side.png^[transformFY");
801 f->setTexture(3, "book_rcraft_side.png");
802 f->setTexture(4, "book_rcraft_end.png");
803 f->setTexture(5, "book_rcraft_end.png^[transformFX");
804 f->param_type = CPT_LIGHT;
805 f->param2_type = CPT_FACEDIR_SIMPLE;
806 f->draw_type = CDT_NODEBOX;
807 f->rotate_tile_with_nodebox = true;
808 f->light_propagates = true;
809 f->air_equivalent = true;
810 f->onpunch_replace_node = CONTENT_RCRAFT_BOOK_OPEN;
811 f->flammable = 1;
812 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
813 content_nodebox_book(f);
814 f->setInventoryTextureNodeBox(i, "book_rcraft_cover.png", "book_rcraft_end.png^[transformFX", "book_rcraft_side.png^[transformFY");
815 f->type = CMT_DIRT;
816 f->hardness = 1.0;
817 f->pressure_type = CST_CRUSHABLE;
818 f->suffocation_per_second = 0;
820 content_t r[9] = {
821 CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE,
822 CONTENT_IGNORE, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
823 CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE
825 crafting::setRecipe(r,CONTENT_RCRAFT_BOOK,1);
827 if (f->initial_metadata == NULL)
828 f->initial_metadata = new ClosedBookNodeMetadata();
829 lists::add("craftguide",i);
830 lists::add("creative",i);
832 i = CONTENT_BOOK_OPEN;
833 f = &content_features(i);
834 f->description = wgettext("Guide");
835 f->setAllTextures("guide_side.png");
836 f->setTexture(0, "guide_top.png");
837 f->setTexture(1, "guide_bottom.png");
838 f->setTexture(4, "guide_end.png");
839 f->setTexture(5, "guide_end.png");
840 f->param_type = CPT_LIGHT;
841 f->param2_type = CPT_FACEDIR_SIMPLE;
842 f->draw_type = CDT_NODEBOX;
843 f->rotate_tile_with_nodebox = true;
844 f->light_propagates = true;
845 f->air_equivalent = true;
846 f->onpunch_replace_node = CONTENT_BOOK;
847 f->flammable = 1;
848 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_BOOK)+" 1";
849 content_nodebox_guide(f);
850 f->setFaceText(0,FaceText(0.15,0.35,0.85,0.85,FTT_BOOKCONTENT));
851 f->setInventoryTextureNodeBox(i, "guide_top.png", "guide_end.png", "guide_side.png");
852 f->type = CMT_DIRT;
853 f->hardness = 1.0;
854 f->pressure_type = CST_CRUSHABLE;
855 f->suffocation_per_second = 0;
856 if (f->initial_metadata == NULL)
857 f->initial_metadata = new BookNodeMetadata();
858 f->sound_access = "open-book";
860 i = CONTENT_COOK_BOOK_OPEN;
861 f = &content_features(i);
862 f->description = wgettext("Cooking Guide");
863 f->setAllTextures("guide_cook_side.png");
864 f->setTexture(0, "guide_cook_top.png");
865 f->setTexture(1, "guide_cook_bottom.png");
866 f->setTexture(4, "guide_cook_end.png");
867 f->setTexture(5, "guide_cook_end.png");
868 f->param_type = CPT_LIGHT;
869 f->param2_type = CPT_FACEDIR_SIMPLE;
870 f->draw_type = CDT_NODEBOX;
871 f->rotate_tile_with_nodebox = true;
872 f->light_propagates = true;
873 f->air_equivalent = true;
874 f->onpunch_replace_node = CONTENT_COOK_BOOK;
875 f->flammable = 1;
876 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_COOK_BOOK)+" 1";
877 content_nodebox_guide(f);
878 f->setInventoryTextureNodeBox(i, "guide_cook_top.png", "guide_cook_end.png", "guide_cook_side.png");
879 f->type = CMT_DIRT;
880 f->hardness = 1.0;
881 f->pressure_type = CST_CRUSHABLE;
882 f->suffocation_per_second = 0;
883 if (f->initial_metadata == NULL)
884 f->initial_metadata = new CookBookNodeMetadata();
885 f->sound_access = "open-book";
887 i = CONTENT_DECRAFT_BOOK_OPEN;
888 f = &content_features(i);
889 f->description = wgettext("Decrafting Guide");
890 f->setAllTextures("guide_decraft_side.png");
891 f->setTexture(0, "guide_decraft_top.png");
892 f->setTexture(1, "guide_decraft_bottom.png");
893 f->setTexture(4, "guide_decraft_end.png");
894 f->setTexture(5, "guide_decraft_end.png");
895 f->param_type = CPT_LIGHT;
896 f->param2_type = CPT_FACEDIR_SIMPLE;
897 f->draw_type = CDT_NODEBOX;
898 f->rotate_tile_with_nodebox = true;
899 f->light_propagates = true;
900 f->air_equivalent = true;
901 f->onpunch_replace_node = CONTENT_DECRAFT_BOOK;
902 f->flammable = 1;
903 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_DECRAFT_BOOK)+" 1";
904 content_nodebox_guide(f);
905 f->setInventoryTextureNodeBox(i, "guide_decraft_top.png", "guide_decraft_end.png", "guide_decraft_side.png");
906 f->type = CMT_DIRT;
907 f->hardness = 1.0;
908 f->pressure_type = CST_CRUSHABLE;
909 f->suffocation_per_second = 0;
910 if (f->initial_metadata == NULL)
911 f->initial_metadata = new DeCraftNodeMetadata();
912 f->sound_access = "open-book";
914 i = CONTENT_DIARY_BOOK_OPEN;
915 f = &content_features(i);
916 f->description = wgettext("Diary");
917 f->setAllTextures("guide_diary_side.png");
918 f->setTexture(0, "guide_diary_top.png");
919 f->setTexture(1, "guide_diary_bottom.png");
920 f->setTexture(4, "guide_diary_end.png");
921 f->setTexture(5, "guide_diary_end.png");
922 f->param_type = CPT_LIGHT;
923 f->param2_type = CPT_FACEDIR_SIMPLE;
924 f->draw_type = CDT_NODEBOX;
925 f->rotate_tile_with_nodebox = true;
926 f->light_propagates = true;
927 f->air_equivalent = true;
928 f->onpunch_replace_node = CONTENT_DIARY_BOOK;
929 f->flammable = 1;
930 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_DIARY_BOOK)+" 1";
931 content_nodebox_guide(f);
932 f->setFaceText(0,FaceText(0.15,0.35,0.85,0.85,FTT_BOOKCONTENT));
933 f->setInventoryTextureNodeBox(i, "guide_diary_top.png", "guide_diary_end.png", "guide_diary_side.png");
934 f->type = CMT_DIRT;
935 f->hardness = 1.0;
936 f->pressure_type = CST_CRUSHABLE;
937 f->suffocation_per_second = 0;
938 if (f->initial_metadata == NULL)
939 f->initial_metadata = new DiaryNodeMetadata();
940 f->sound_access = "open-book";
942 i = CONTENT_CRAFT_BOOK_OPEN;
943 f = &content_features(i);
944 f->description = wgettext("Craft Guide");
945 f->setAllTextures("guide_craft_side.png");
946 f->setTexture(0, "guide_craft_top.png");
947 f->setTexture(1, "guide_craft_bottom.png");
948 f->setTexture(4, "guide_craft_end.png");
949 f->setTexture(5, "guide_craft_end.png");
950 f->param_type = CPT_LIGHT;
951 f->param2_type = CPT_FACEDIR_SIMPLE;
952 f->draw_type = CDT_NODEBOX;
953 f->rotate_tile_with_nodebox = true;
954 f->light_propagates = true;
955 f->air_equivalent = true;
956 f->onpunch_replace_node = CONTENT_CRAFT_BOOK;
957 f->flammable = 1;
958 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_CRAFT_BOOK)+" 1";
959 content_nodebox_guide(f);
960 f->setInventoryTextureNodeBox(i, "guide_craft_top.png", "guide_craft_end.png", "guide_craft_side.png");
961 f->type = CMT_DIRT;
962 f->hardness = 1.0;
963 f->pressure_type = CST_CRUSHABLE;
964 f->suffocation_per_second = 0;
965 if (f->initial_metadata == NULL)
966 f->initial_metadata = new CraftGuideNodeMetadata();
967 f->sound_access = "open-book";
969 i = CONTENT_RCRAFT_BOOK_OPEN;
970 f = &content_features(i);
971 f->description = wgettext("Reverse Craft Guide");
972 f->setAllTextures("guide_rcraft_side.png");
973 f->setTexture(0, "guide_rcraft_top.png");
974 f->setTexture(1, "guide_rcraft_bottom.png");
975 f->setTexture(4, "guide_rcraft_end.png");
976 f->setTexture(5, "guide_rcraft_end.png");
977 f->param_type = CPT_LIGHT;
978 f->param2_type = CPT_FACEDIR_SIMPLE;
979 f->draw_type = CDT_NODEBOX;
980 f->rotate_tile_with_nodebox = true;
981 f->light_propagates = true;
982 f->air_equivalent = true;
983 f->onpunch_replace_node = CONTENT_RCRAFT_BOOK;
984 f->flammable = 1;
985 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_RCRAFT_BOOK)+" 1";
986 content_nodebox_guide(f);
987 f->setInventoryTextureNodeBox(i, "guide_rcraft_top.png", "guide_rcraft_end.png", "guide_rcraft_side.png");
988 f->type = CMT_DIRT;
989 f->hardness = 1.0;
990 f->pressure_type = CST_CRUSHABLE;
991 f->suffocation_per_second = 0;
992 if (f->initial_metadata == NULL)
993 f->initial_metadata = new ReverseCraftGuideNodeMetadata();
994 f->sound_access = "open-book";
996 i = CONTENT_FIRE;
997 f = &content_features(i);
998 f->description = wgettext("Fire");
999 f->setAllTextures("fire.png");
1000 f->setAllTextureFlags(0);
1001 f->param_type = CPT_LIGHT;
1002 f->draw_type = CDT_FIRELIKE;
1003 f->light_propagates = true;
1004 f->light_source = LIGHT_MAX-1;
1005 f->walkable = false;
1006 f->pointable = false;
1007 f->diggable = false;
1008 f->buildable_to = true;
1009 f->damage_per_second = 40;
1010 f->sound_ambient = "env-fire";
1011 #ifndef SERVER
1012 f->post_effect_color = video::SColor(192, 255, 64, 0);
1013 #endif
1014 f->pressure_type = CST_CRUSHED;
1016 i = CONTENT_FIRE_SHORTTERM;
1017 f = &content_features(i);
1018 f->description = wgettext("Fire");
1019 f->setAllTextures("fire.png");
1020 f->setAllTextureFlags(0);
1021 f->param_type = CPT_LIGHT;
1022 f->draw_type = CDT_FIRELIKE;
1023 f->light_propagates = true;
1024 f->light_source = LIGHT_MAX-1;
1025 f->walkable = false;
1026 f->pointable = false;
1027 f->diggable = false;
1028 f->buildable_to = true;
1029 f->damage_per_second = 40;
1030 #ifndef SERVER
1031 f->post_effect_color = video::SColor(192, 255, 64, 0);
1032 #endif
1033 f->pressure_type = CST_CRUSHED;
1035 i = CONTENT_TORCH;
1036 f = &content_features(i);
1037 f->description = wgettext("Torch");
1038 f->setAllTextures("torch.png");
1039 f->setInventoryTexture("torch_inventory.png");
1040 f->setAllTextureFlags(0);
1041 f->param_type = CPT_LIGHT;
1042 f->param2_type = CPT_FACEDIR_WALLMOUNT;
1043 f->draw_type = CDT_TORCHLIKE;
1044 f->light_propagates = true;
1045 f->sunlight_propagates = true;
1046 f->walkable = false;
1047 f->air_equivalent = true;
1048 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1049 f->fuel_time = 0.5;
1050 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1051 f->light_source = LIGHT_MAX-1;
1052 f->type = CMT_WOOD;
1053 f->hardness = 0.0;
1054 f->pressure_type = CST_CRUSHABLE;
1055 f->suffocation_per_second = 0;
1056 crafting::set1over4Recipe(CONTENT_CRAFTITEM_COAL,CONTENT_CRAFTITEM_STICK,CONTENT_TORCH);
1057 crafting::set1over4Recipe(CONTENT_CRAFTITEM_CHARCOAL,CONTENT_CRAFTITEM_STICK,CONTENT_TORCH);
1058 lists::add("craftguide",i);
1059 lists::add("player-creative",i);
1060 lists::add("creative",i);
1062 i = CONTENT_SIGN_WALL;
1063 f = &content_features(i);
1064 f->description = wgettext("Sign");
1065 f->setAllTextures("sign_wall.png");
1066 f->param_type = CPT_LIGHT;
1067 f->param2_type = CPT_FACEDIR_WALLMOUNT;
1068 f->draw_type = CDT_NODEBOX;
1069 f->light_propagates = true;
1070 f->sunlight_propagates = true;
1071 f->floormount_alternate_node = CONTENT_SIGN;
1072 f->roofmount_alternate_node = CONTENT_SIGN_UD;
1073 f->walkable = false;
1074 f->air_equivalent = true;
1075 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1076 f->fuel_time = 1;
1077 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SIGN)+" 1";
1078 if(f->initial_metadata == NULL)
1079 f->initial_metadata = new SignNodeMetadata("Some sign");
1080 f->type = CMT_WOOD;
1081 f->hardness = 0.1;
1082 f->pressure_type = CST_CRUSHABLE;
1083 f->suffocation_per_second = 0;
1084 f->alternate_lockstate_node = CONTENT_LOCKABLE_SIGN_WALL;
1085 content_nodebox_sign_wall(f);
1086 f->setFaceText(5,FaceText(0.05,0.3,0.95,0.7));
1088 i = CONTENT_SIGN;
1089 f = &content_features(i);
1090 f->description = wgettext("Sign");
1091 f->setAllTextures("sign.png");
1092 f->setTexture(4, "sign_back.png");
1093 f->setTexture(5, "sign_front.png"); // Z-
1094 f->param_type = CPT_LIGHT;
1095 f->light_propagates = true;
1096 f->sunlight_propagates = true;
1097 f->air_equivalent = true;
1098 f->wallmount_alternate_node = CONTENT_SIGN_WALL;
1099 f->roofmount_alternate_node = CONTENT_SIGN_UD;
1100 f->param2_type = CPT_FACEDIR_SIMPLE;
1101 f->draw_type = CDT_NODEBOX;
1102 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1103 f->fuel_time = 1;
1104 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1105 if(f->initial_metadata == NULL)
1106 f->initial_metadata = new SignNodeMetadata("Some sign");
1107 f->type = CMT_WOOD;
1108 f->hardness = 0.1;
1109 f->pressure_type = CST_CRUSHABLE;
1110 f->suffocation_per_second = 0;
1111 f->alternate_lockstate_node = CONTENT_LOCKABLE_SIGN;
1112 content_nodebox_sign(f);
1113 f->setFaceText(5,FaceText(0.05,0.0675,0.95,0.55));
1114 f->setInventoryTextureNodeBox(i,"sign.png", "sign_front.png", "sign.png");
1115 crafting::setSignRecipe(CONTENT_CRAFTITEM_WOOD_PLANK,CONTENT_SIGN);
1116 crafting::setSignRecipe(CONTENT_CRAFTITEM_PINE_PLANK,CONTENT_SIGN);
1117 crafting::setSignRecipe(CONTENT_CRAFTITEM_JUNGLE_PLANK,CONTENT_SIGN);
1118 lists::add("craftguide",i);
1119 lists::add("creative",i);
1121 i = CONTENT_SIGN_UD;
1122 f = &content_features(i);
1123 f->description = wgettext("Sign");
1124 f->setAllTextures("sign.png");
1125 f->setTexture(4, "sign_back_ud.png");
1126 f->setTexture(5, "sign_front_ud.png"); // Z-
1127 f->param_type = CPT_LIGHT;
1128 f->light_propagates = true;
1129 f->sunlight_propagates = true;
1130 f->air_equivalent = true;
1131 f->wallmount_alternate_node = CONTENT_SIGN_WALL;
1132 f->floormount_alternate_node = CONTENT_SIGN;
1133 f->param2_type = CPT_FACEDIR_SIMPLE;
1134 f->draw_type = CDT_NODEBOX;
1135 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1136 f->fuel_time = 1;
1137 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SIGN)+" 1";
1138 if(f->initial_metadata == NULL)
1139 f->initial_metadata = new SignNodeMetadata("Some sign");
1140 f->type = CMT_WOOD;
1141 f->hardness = 0.1;
1142 f->pressure_type = CST_CRUSHABLE;
1143 f->suffocation_per_second = 0;
1144 f->alternate_lockstate_node = CONTENT_LOCKABLE_SIGN_UD;
1145 content_nodebox_sign_ud(f);
1146 f->setFaceText(5,FaceText(0.05,0.45,0.95,0.8875));
1147 f->setInventoryTextureNodeBox(i,"sign.png", "sign_front.png", "sign.png");
1149 i = CONTENT_LOCKABLE_SIGN_WALL;
1150 f = &content_features(i);
1151 f->description = wgettext("Locking Sign");
1152 f->setAllTextures("sign.png");
1153 f->setTexture(4, "sign_back.png");
1154 f->setTexture(5, "sign_wall_lock.png"); // Z-
1155 f->param_type = CPT_LIGHT;
1156 f->param2_type = CPT_FACEDIR_WALLMOUNT;
1157 f->draw_type = CDT_NODEBOX;
1158 f->light_propagates = true;
1159 f->sunlight_propagates = true;
1160 f->air_equivalent = true;
1161 f->floormount_alternate_node = CONTENT_LOCKABLE_SIGN;
1162 f->roofmount_alternate_node = CONTENT_LOCKABLE_SIGN_UD;
1163 f->walkable = false;
1164 f->air_equivalent = true;
1165 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1166 f->fuel_time = 1;
1167 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_LOCKABLE_SIGN)+" 1";
1168 if(f->initial_metadata == NULL)
1169 f->initial_metadata = new LockingSignNodeMetadata("Some sign");
1170 f->type = CMT_WOOD;
1171 f->hardness = 0.1;
1172 f->pressure_type = CST_CRUSHABLE;
1173 f->suffocation_per_second = 0;
1174 f->alternate_lockstate_node = CONTENT_SIGN_WALL;
1175 content_nodebox_sign_wall(f);
1176 f->setFaceText(4,FaceText(0.05,0.3,0.95,0.7,FTT_OWNER));
1177 f->setFaceText(5,FaceText(0.05,0.3,0.95,0.7));
1179 i = CONTENT_LOCKABLE_SIGN;
1180 f = &content_features(i);
1181 f->description = wgettext("Locking Sign");
1182 f->setAllTextures("sign.png");
1183 f->setTexture(4, "sign_back.png");
1184 f->setTexture(5, "sign_lock.png"); // Z-
1185 f->param_type = CPT_LIGHT;
1186 f->light_propagates = true;
1187 f->sunlight_propagates = true;
1188 f->air_equivalent = true;
1189 f->wallmount_alternate_node = CONTENT_LOCKABLE_SIGN_WALL;
1190 f->roofmount_alternate_node = CONTENT_LOCKABLE_SIGN_UD;
1191 f->param2_type = CPT_FACEDIR_SIMPLE;
1192 f->draw_type = CDT_NODEBOX;
1193 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1194 f->fuel_time = 1;
1195 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1196 if(f->initial_metadata == NULL)
1197 f->initial_metadata = new LockingSignNodeMetadata("Some sign");
1198 f->type = CMT_WOOD;
1199 f->hardness = 0.1;
1200 f->pressure_type = CST_CRUSHABLE;
1201 f->suffocation_per_second = 0;
1202 f->alternate_lockstate_node = CONTENT_SIGN;
1203 content_nodebox_sign(f);
1204 f->setFaceText(4,FaceText(0.05,0.0675,0.95,0.55,FTT_OWNER));
1205 f->setFaceText(5,FaceText(0.05,0.0675,0.95,0.55));
1206 f->setInventoryTextureNodeBox(i,"sign.png", "sign_lock.png", "sign.png");
1207 crafting::set1Any2Recipe(CONTENT_SIGN,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_SIGN);
1208 lists::add("craftguide",i);
1209 lists::add("creative",i);
1211 i = CONTENT_LOCKABLE_SIGN_UD;
1212 f = &content_features(i);
1213 f->description = wgettext("Locking Sign");
1214 f->setAllTextures("sign.png");
1215 f->setTexture(4, "sign_back_ud.png");
1216 f->setTexture(5, "sign_lock_ud.png"); // Z-
1217 f->param_type = CPT_LIGHT;
1218 f->light_propagates = true;
1219 f->sunlight_propagates = true;
1220 f->air_equivalent = true;
1221 f->wallmount_alternate_node = CONTENT_LOCKABLE_SIGN_WALL;
1222 f->floormount_alternate_node = CONTENT_LOCKABLE_SIGN;
1223 f->param2_type = CPT_FACEDIR_SIMPLE;
1224 f->draw_type = CDT_NODEBOX;
1225 f->flammable = 1; // can be replaced by fire if the node under it is set on fire
1226 f->fuel_time = 1;
1227 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_LOCKABLE_SIGN)+" 1";
1228 if(f->initial_metadata == NULL)
1229 f->initial_metadata = new LockingSignNodeMetadata("Some sign");
1230 f->type = CMT_WOOD;
1231 f->hardness = 0.1;
1232 f->pressure_type = CST_CRUSHABLE;
1233 f->suffocation_per_second = 0;
1234 f->alternate_lockstate_node = CONTENT_SIGN_UD;
1235 content_nodebox_sign_ud(f);
1236 f->setFaceText(4,FaceText(0.05,0.45,0.95,0.8875,FTT_OWNER));
1237 f->setFaceText(5,FaceText(0.05,0.45,0.95,0.8875));
1238 f->setInventoryTextureNodeBox(i,"sign.png", "sign_lock.png", "sign.png");
1240 i = CONTENT_CHEST;
1241 f = &content_features(i);
1242 f->description = wgettext("Chest");
1243 f->param_type = CPT_FACEDIR_SIMPLE;
1244 f->draw_type = CDT_CUBELIKE;
1245 f->setAllTextures("chest_side.png");
1246 f->setTexture(0, "chest_top.png");
1247 f->setTexture(1, "chest_top.png");
1248 f->setTexture(5, "chest_front.png"); // Z-
1249 f->setInventoryTexture("chest_top.png");
1250 f->setInventoryTextureCube("chest_top.png", "chest_front.png", "chest_side.png");
1251 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1252 if(f->initial_metadata == NULL)
1253 f->initial_metadata = new ChestNodeMetadata();
1254 f->sound_access = "open-chest";
1255 f->type = CMT_WOOD;
1256 f->hardness = 1.0;
1257 f->pressure_type = CST_SOLID;
1258 f->alternate_lockstate_node = CONTENT_LOCKABLE_CHEST;
1259 crafting::setRoundRecipe(CONTENT_WOOD,CONTENT_CHEST);
1260 crafting::setRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CHEST);
1261 lists::add("craftguide",i);
1262 lists::add("creative",i);
1264 i = CONTENT_CREATIVE_CHEST;
1265 f = &content_features(i);
1266 f->description = wgettext("Creative Chest");
1267 f->param_type = CPT_FACEDIR_SIMPLE;
1268 f->draw_type = CDT_CUBELIKE;
1269 f->setAllTextures("chest_side.png");
1270 f->setTexture(0, "chest_top.png");
1271 f->setTexture(1, "chest_top.png");
1272 f->setTexture(5, "chest_creative.png"); // Z-
1273 f->setInventoryTexture("chest_top.png");
1274 f->setInventoryTextureCube("chest_top.png", "chest_creative.png", "chest_side.png");
1275 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1276 if(f->initial_metadata == NULL)
1277 f->initial_metadata = new CreativeChestNodeMetadata();
1278 f->sound_access = "open-chest";
1279 f->type = CMT_WOOD;
1280 f->hardness = 1.0;
1281 f->pressure_type = CST_SOLID;
1282 lists::add("player-creative",i);
1283 lists::add("creative",i);
1285 i = CONTENT_LOCKABLE_CHEST;
1286 f = &content_features(i);
1287 f->description = wgettext("Locking Chest");
1288 f->param_type = CPT_FACEDIR_SIMPLE;
1289 f->draw_type = CDT_CUBELIKE;
1290 f->setAllTextures("chest_side.png");
1291 f->setTexture(0, "chest_top.png");
1292 f->setTexture(1, "chest_top.png");
1293 f->setTexture(5, "chest_lock.png"); // Z-
1294 f->setInventoryTexture("chest_lock.png");
1295 f->setInventoryTextureCube("chest_top.png", "chest_lock.png", "chest_side.png");
1296 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1297 if(f->initial_metadata == NULL)
1298 f->initial_metadata = new LockingChestNodeMetadata();
1299 f->sound_access = "open-chest";
1300 f->type = CMT_WOOD;
1301 f->hardness = 1.0;
1302 f->pressure_type = CST_SOLID;
1303 f->alternate_lockstate_node = CONTENT_CHEST;
1304 crafting::setFilledRoundRecipe(CONTENT_WOOD,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_CHEST);
1305 crafting::setFilledRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_CHEST);
1306 crafting::set1Any2Recipe(CONTENT_CHEST,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_CHEST);
1307 crafting::setFilledRoundRecipe(CONTENT_WOOD,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_LOCKABLE_CHEST);
1308 crafting::setFilledRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_LOCKABLE_CHEST);
1309 crafting::set1Any2Recipe(CONTENT_CHEST,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_LOCKABLE_CHEST);
1310 crafting::setFilledRoundRecipe(CONTENT_WOOD,CONTENT_CRAFTITEM_SILVER_INGOT,CONTENT_LOCKABLE_CHEST);
1311 crafting::setFilledRoundRecipe(CONTENT_JUNGLEWOOD,CONTENT_CRAFTITEM_SILVER_INGOT,CONTENT_LOCKABLE_CHEST);
1312 crafting::set1Any2Recipe(CONTENT_CHEST,CONTENT_CRAFTITEM_SILVER_INGOT,CONTENT_LOCKABLE_CHEST);
1313 lists::add("craftguide",i);
1314 lists::add("creative",i);
1316 i = CONTENT_SAFE;
1317 f = &content_features(i);
1318 f->description = wgettext("Safe");
1319 f->param_type = CPT_FACEDIR_SIMPLE;
1320 f->draw_type = CDT_CUBELIKE;
1321 f->setAllTextures("safe_side.png");
1322 f->setTexture(0, "safe_top.png");
1323 f->setTexture(1, "safe_top.png");
1324 f->setTexture(5, "safe_lock.png"); // Z-
1325 f->setInventoryTexture("safe_lock.png");
1326 f->setInventoryTextureCube("safe_top.png", "safe_lock.png", "safe_side.png");
1327 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1328 if(f->initial_metadata == NULL)
1329 f->initial_metadata = new SafeNodeMetadata();
1330 f->type = CMT_WOOD;
1331 f->hardness = 1.0;
1332 f->pressure_type = CST_SOLID;
1333 f->destructive_mob_safe = true;
1334 crafting::setFilledRoundRecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_CRAFTITEM_COPPER_INGOT,CONTENT_SAFE);
1335 lists::add("craftguide",i);
1336 lists::add("creative",i);
1338 i = CONTENT_FURNACE;
1339 f = &content_features(i);
1340 f->description = wgettext("Furnace");
1341 f->param_type = CPT_FACEDIR_SIMPLE;
1342 f->draw_type = CDT_NODEBOX_META;
1343 f->setAllTextures("furnace_side.png");
1344 f->setTexture(0, "furnace_top.png");
1345 f->setTexture(1, "furnace_top.png^[transformFY");
1346 f->setTexture(2, "furnace_side.png^[transformFX");
1347 f->setTexture(4, "furnace_back.png");
1348 f->setTexture(5, "furnace_front.png"); // Z-
1349 f->setAllMetaTextures("fire.png");
1350 content_nodebox_furnace(f);
1351 f->setInventoryTextureNodeBox(i,"furnace_top.png^[transformR90", "furnace_front.png", "furnace_side.png^[transformFX");
1352 f->rotate_tile_with_nodebox = true;
1353 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1354 if(f->initial_metadata == NULL)
1355 f->initial_metadata = new FurnaceNodeMetadata();
1356 f->type = CMT_STONE;
1357 f->hardness = 3.0;
1358 f->pressure_type = CST_SOLID;
1359 f->alternate_lockstate_node = CONTENT_LOCKABLE_FURNACE;
1360 crafting::setRoundRecipe(CONTENT_ROUGHSTONE,CONTENT_FURNACE);
1361 lists::add("craftguide",i);
1362 lists::add("creative",i);
1364 i = CONTENT_FURNACE_ACTIVE;
1365 f = &content_features(i);
1366 f->description = wgettext("Furnace");
1367 f->param_type = CPT_LIGHT;
1368 f->param2_type = CPT_FACEDIR_SIMPLE;
1369 f->draw_type = CDT_CUBELIKE;
1370 f->light_source = 9;
1371 f->setAllTextures("furnace_side.png");
1372 f->setTexture(0, "furnace_top.png");
1373 f->setTexture(1, "furnace_top.png");
1374 f->setTexture(5, "furnace_front.png"); // Z-
1375 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_FURNACE)+" 1";
1376 if(f->initial_metadata == NULL)
1377 f->initial_metadata = new FurnaceNodeMetadata();
1378 f->type = CMT_STONE;
1379 f->hardness = 3.0;
1380 f->pressure_type = CST_SOLID;
1382 i = CONTENT_LOCKABLE_FURNACE;
1383 f = &content_features(i);
1384 f->description = wgettext("Locking Furnace");
1385 f->param_type = CPT_FACEDIR_SIMPLE;
1386 f->draw_type = CDT_NODEBOX_META;
1387 f->setAllTextures("furnace_side.png");
1388 f->setTexture(0, "furnace_top.png");
1389 f->setTexture(1, "furnace_top.png^[transformFY");
1390 f->setTexture(2, "furnace_side.png^[transformFX");
1391 f->setTexture(4, "furnace_back.png");
1392 f->setTexture(5, "furnace_lock.png"); // Z-
1393 f->setAllMetaTextures("fire.png");
1394 content_nodebox_lockedfurnace(f);
1395 f->setInventoryTextureNodeBox(i,"furnace_top.png^[transformR90", "furnace_lock.png", "furnace_side.png^[transformFX");
1396 f->rotate_tile_with_nodebox = true;
1397 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1398 if(f->initial_metadata == NULL)
1399 f->initial_metadata = new LockingFurnaceNodeMetadata();
1400 f->type = CMT_STONE;
1401 f->hardness = 3.0;
1402 f->pressure_type = CST_SOLID;
1403 f->alternate_lockstate_node = CONTENT_FURNACE;
1404 crafting::setFilledRoundRecipe(CONTENT_ROUGHSTONE,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_FURNACE);
1405 crafting::set1Any2Recipe(CONTENT_FURNACE,CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_LOCKABLE_FURNACE);
1406 lists::add("craftguide",i);
1407 lists::add("creative",i);
1409 i = CONTENT_LOCKABLE_FURNACE_ACTIVE;
1410 f = &content_features(i);
1411 f->description = wgettext("Locking Furnace");
1412 f->param_type = CPT_LIGHT;
1413 f->param2_type = CPT_FACEDIR_SIMPLE;
1414 f->draw_type = CDT_CUBELIKE;
1415 f->light_source = 9;
1416 f->setAllTextures("furnace_side.png");
1417 f->setTexture(0, "furnace_top.png");
1418 f->setTexture(1, "furnace_top.png");
1419 f->setTexture(5, "furnace_lock_active.png"); // Z-
1420 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_LOCKABLE_FURNACE)+" 1";
1421 if(f->initial_metadata == NULL)
1422 f->initial_metadata = new LockingFurnaceNodeMetadata();
1423 f->type = CMT_STONE;
1424 f->hardness = 3.0;
1425 f->pressure_type = CST_SOLID;
1427 i = CONTENT_INCINERATOR;
1428 f = &content_features(i);
1429 f->description = wgettext("Incinerator");
1430 f->param_type = CPT_FACEDIR_SIMPLE;
1431 f->draw_type = CDT_NODEBOX_META;
1432 f->setAllTextures("incinerator_side.png");
1433 f->setTexture(0, "incinerator_top.png");
1434 f->setTexture(1, "incinerator_top.png^[transformFY");
1435 f->setTexture(2, "incinerator_side.png^[transformFX");
1436 f->setTexture(4, "incinerator_back.png");
1437 f->setTexture(5, "incinerator_front.png"); // Z-
1438 f->setAllMetaTextures("fire.png");
1439 content_nodebox_incinerator(f);
1440 f->setInventoryTextureNodeBox(i,"incinerator_top.png^[transformR90", "incinerator_front.png", "incinerator_side.png^[transformFX");
1441 f->rotate_tile_with_nodebox = true;
1442 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1443 if(f->initial_metadata == NULL)
1444 f->initial_metadata = new IncineratorNodeMetadata();
1445 f->type = CMT_STONE;
1446 f->hardness = 0.4;
1447 f->pressure_type = CST_SOLID;
1448 crafting::setFilledRoundRecipe(CONTENT_ROUGHSTONE,CONTENT_CRAFTITEM_MITHRIL_UNBOUND,CONTENT_INCINERATOR);
1449 lists::add("craftguide",i);
1450 lists::add("creative",i);
1452 i = CONTENT_INCINERATOR_ACTIVE;
1453 f = &content_features(i);
1454 f->description = wgettext("Incinerator");
1455 f->param_type = CPT_LIGHT;
1456 f->param2_type = CPT_FACEDIR_SIMPLE;
1457 f->draw_type = CDT_CUBELIKE;
1458 f->light_source = 9;
1459 f->setAllTextures("incinerator_side.png");
1460 f->setTexture(0, "incinerator_top.png"); // Z-
1461 f->setTexture(1, "incinerator_top.png"); // Z-
1462 f->setTexture(5, "incinerator_front_active.png"); // Z-
1463 f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_INCINERATOR)+" 1";
1464 if (f->initial_metadata == NULL)
1465 f->initial_metadata = new IncineratorNodeMetadata();
1466 f->type = CMT_STONE;
1467 f->hardness = 0.4;
1468 f->pressure_type = CST_SOLID;
1470 i = CONTENT_NC;
1471 f = &content_features(i);
1472 f->description = wgettext("Nyan Cat");
1473 f->param_type = CPT_FACEDIR_SIMPLE;
1474 f->draw_type = CDT_CUBELIKE;
1475 f->setAllTextures("nc_side.png");
1476 f->setTexture(5, "nc_front.png"); // Z-
1477 f->setTexture(4, "nc_back.png"); // Z+
1478 f->setInventoryTextureCube("nc_side.png", "nc_front.png", "nc_side.png");
1479 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1480 f->type = CMT_STONE;
1481 f->hardness = 3.0;
1482 lists::add("creative",i);
1484 i = CONTENT_NC_RB;
1485 f = &content_features(i);
1486 f->description = wgettext("Rainbow");
1487 f->draw_type = CDT_CUBELIKE;
1488 f->setAllTextures("nc_rb.png");
1489 f->setInventoryTextureCube("nc_rb.png", "nc_rb.png", "nc_rb.png");
1490 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1491 f->type = CMT_STONE;
1492 f->hardness = 3.0;
1493 lists::add("creative",i);
1495 i = CONTENT_FLOWER_POT_RAW;
1496 f = &content_features(i);
1497 f->param_type = CPT_LIGHT;
1498 f->description = wgettext("Unbaked Flower Pot");
1499 f->setAllTextures("flower_pot_raw.png");
1500 f->setTexture(0,"flower_pot_raw_top.png");
1501 f->setTexture(1,"flower_pot_raw_bottom.png");
1502 f->draw_type = CDT_NODEBOX;
1503 f->light_propagates = true;
1504 f->sunlight_propagates = true;
1505 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1506 f->cook_result = std::string("MaterialItem2 ")+itos(CONTENT_FLOWER_POT)+" 1";
1507 f->type = CMT_STONE;
1508 f->hardness = 0.75;
1509 f->pressure_type = CST_CRUSHABLE;
1510 content_nodebox_flower_pot(f);
1511 f->setInventoryTextureNodeBox(i,"flower_pot_raw_top.png","flower_pot_raw.png","flower_pot_raw.png");
1512 crafting::setVRecipe(CONTENT_CRAFTITEM_CLAY,CONTENT_FLOWER_POT_RAW);
1513 lists::add("craftguide",i);
1514 lists::add("cooking",i);
1516 i = CONTENT_FLOWER_POT;
1517 f = &content_features(i);
1518 f->param_type = CPT_LIGHT;
1519 f->description = wgettext("Flower Pot");
1520 f->setAllTextures("flower_pot.png");
1521 f->setTexture(0,"flower_pot_top.png");
1522 f->setTexture(1,"flower_pot_bottom.png");
1523 f->draw_type = CDT_NODEBOX;
1524 f->light_propagates = true;
1525 f->sunlight_propagates = true;
1526 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1527 f->type = CMT_STONE;
1528 f->hardness = 0.75;
1529 content_nodebox_flower_pot(f);
1530 f->setInventoryTextureNodeBox(i,"flower_pot_top.png","flower_pot.png","flower_pot.png");
1531 lists::add("creative",i);
1533 // walls
1534 i = CONTENT_COBBLE_WALL;
1535 f = &content_features(i);
1536 f->description = wgettext("Cobblestone Wall");
1537 f->setAllTextures("cobble.png");
1538 f->light_propagates = true;
1539 f->jumpable = false;
1540 f->param_type = CPT_LIGHT;
1541 f->param2_type = CPT_SPECIAL;
1542 f->draw_type = CDT_WALLLIKE;
1543 f->is_ground_content = true;
1544 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1545 f->air_equivalent = true; // grass grows underneath
1546 content_nodebox_wall_inv(f);
1547 content_nodebox_wall(f);
1548 f->setInventoryTextureNodeBox(i,"cobble.png","cobble.png","cobble.png");
1549 f->special_alternate_node = CONTENT_COBBLE;
1550 f->type = CMT_STONE;
1551 f->hardness = 0.9;
1552 f->suffocation_per_second = 0;
1553 crafting::setWallRecipe(CONTENT_COBBLE,CONTENT_COBBLE_WALL);
1554 lists::add("craftguide",i);
1555 lists::add("creative",i);
1557 i = CONTENT_ROUGHSTONE_WALL;
1558 f = &content_features(i);
1559 f->description = wgettext("Rough Stone Wall");
1560 f->setAllTextures("roughstone.png");
1561 f->light_propagates = true;
1562 f->jumpable = false;
1563 f->param_type = CPT_LIGHT;
1564 f->param2_type = CPT_SPECIAL;
1565 f->draw_type = CDT_WALLLIKE;
1566 f->is_ground_content = true;
1567 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1568 f->air_equivalent = true; // grass grows underneath
1569 content_nodebox_wall_inv(f);
1570 content_nodebox_wall(f);
1571 f->setInventoryTextureNodeBox(i,"roughstone.png","roughstone.png","roughstone.png");
1572 f->special_alternate_node = CONTENT_ROUGHSTONE;
1573 f->type = CMT_STONE;
1574 f->hardness = 0.9;
1575 f->suffocation_per_second = 0;
1576 crafting::setWallRecipe(CONTENT_ROUGHSTONE,CONTENT_ROUGHSTONE_WALL);
1577 lists::add("craftguide",i);
1578 lists::add("creative",i);
1580 i = CONTENT_MOSSYCOBBLE_WALL;
1581 f = &content_features(i);
1582 f->description = wgettext("Mossy Cobblestone Wall");
1583 f->setAllTextures("mossycobble.png");
1584 f->light_propagates = true;
1585 f->jumpable = false;
1586 f->param_type = CPT_LIGHT;
1587 f->param2_type = CPT_SPECIAL;
1588 f->draw_type = CDT_WALLLIKE;
1589 f->is_ground_content = true;
1590 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1591 f->air_equivalent = true; // grass grows underneath
1592 content_nodebox_wall_inv(f);
1593 content_nodebox_wall(f);
1594 f->setInventoryTextureNodeBox(i,"mossycobble.png","mossycobble.png","mossycobble.png");
1595 f->special_alternate_node = CONTENT_MOSSYCOBBLE;
1596 f->type = CMT_STONE;
1597 f->hardness = 0.8;
1598 f->suffocation_per_second = 0;
1599 crafting::setWallRecipe(CONTENT_MOSSYCOBBLE,CONTENT_MOSSYCOBBLE_WALL);
1600 lists::add("craftguide",i);
1601 lists::add("creative",i);
1603 i = CONTENT_STONE_WALL;
1604 f = &content_features(i);
1605 f->description = wgettext("Stone Wall");
1606 f->setAllTextures("stone.png");
1607 f->light_propagates = true;
1608 f->jumpable = false;
1609 f->param_type = CPT_LIGHT;
1610 f->param2_type = CPT_SPECIAL;
1611 f->draw_type = CDT_WALLLIKE;
1612 f->is_ground_content = true;
1613 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1614 f->air_equivalent = true; // grass grows underneath
1615 content_nodebox_wall_inv(f);
1616 content_nodebox_wall(f);
1617 f->setInventoryTextureNodeBox(i,"stone.png","stone.png","stone.png");
1618 f->special_alternate_node = CONTENT_STONE;
1619 f->type = CMT_STONE;
1620 f->hardness = 1.0;
1621 f->suffocation_per_second = 0;
1622 crafting::setWallRecipe(CONTENT_STONE,CONTENT_STONE_WALL);
1623 lists::add("craftguide",i);
1624 lists::add("creative",i);
1626 i = CONTENT_SANDSTONE_WALL;
1627 f = &content_features(i);
1628 f->description = wgettext("Sand Stone Wall");
1629 f->setAllTextures("sandstone.png");
1630 f->light_propagates = true;
1631 f->jumpable = false;
1632 f->param_type = CPT_LIGHT;
1633 f->param2_type = CPT_SPECIAL;
1634 f->draw_type = CDT_WALLLIKE;
1635 f->is_ground_content = true;
1636 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1637 f->air_equivalent = true; // grass grows underneath
1638 content_nodebox_wall_inv(f);
1639 content_nodebox_wall(f);
1640 f->setInventoryTextureNodeBox(i,"sandstone.png","sandstone.png","sandstone.png");
1641 f->special_alternate_node = CONTENT_SANDSTONE;
1642 f->type = CMT_DIRT;
1643 f->hardness = 1.0;
1644 f->suffocation_per_second = 0;
1645 crafting::setWallRecipe(CONTENT_SANDSTONE,CONTENT_SANDSTONE_WALL);
1646 lists::add("craftguide",i);
1647 lists::add("creative",i);
1649 i = CONTENT_LIMESTONE_WALL;
1650 f = &content_features(i);
1651 f->description = wgettext("Limestone Wall");
1652 f->setAllTextures("limestone.png");
1653 f->light_propagates = true;
1654 f->jumpable = false;
1655 f->param_type = CPT_LIGHT;
1656 f->param2_type = CPT_SPECIAL;
1657 f->draw_type = CDT_WALLLIKE;
1658 f->is_ground_content = true;
1659 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1660 f->air_equivalent = true; // grass grows underneath
1661 content_nodebox_wall_inv(f);
1662 content_nodebox_wall(f);
1663 f->setInventoryTextureNodeBox(i,"limestone.png","limestone.png","limestone.png");
1664 f->special_alternate_node = CONTENT_LIMESTONE;
1665 f->type = CMT_STONE;
1666 f->hardness = 0.9;
1667 f->suffocation_per_second = 0;
1668 crafting::setWallRecipe(CONTENT_LIMESTONE,CONTENT_LIMESTONE_WALL);
1669 lists::add("craftguide",i);
1670 lists::add("creative",i);
1672 i = CONTENT_TNT;
1673 f = &content_features(i);
1674 f->description = wgettext("TNT");
1675 f->setAllTextures("tnt.png");
1676 f->setTexture(0, "tnt_top.png");
1677 f->setTexture(1, "tnt_bottom.png");
1678 f->setInventoryTextureCube("tnt_top.png", "tnt.png", "tnt.png");
1679 f->draw_type = CDT_CUBELIKE;
1680 f->is_ground_content = true;
1681 f->energy_type = CET_DEVICE;
1682 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1683 if(f->initial_metadata == NULL)
1684 f->initial_metadata = new TNTNodeMetadata();
1685 f->type = CMT_DIRT;
1686 f->hardness = 1.0;
1687 f->suffocation_per_second = 0;
1688 crafting::setSoftBlockRecipe(CONTENT_CRAFTITEM_TNT,CONTENT_TNT);
1689 lists::add("craftguide",i);
1690 lists::add("creative",i);
1692 i = CONTENT_FLASH;
1693 f = &content_features(i);
1694 f->description = wgettext("In-Progress explosion - how did you get this???");
1695 f->setAllTextures("flash.png");
1696 f->param_type = CPT_LIGHT;
1697 f->draw_type = CDT_GLASSLIKE;
1698 f->light_propagates = true;
1699 f->light_source = LIGHT_MAX-1;
1700 f->walkable = false;
1701 f->pointable = false;
1702 f->diggable = false;
1703 f->buildable_to = true;
1704 f->damage_per_second = 80;
1705 f->pressure_type = CST_CRUSHED;
1706 #ifndef SERVER
1707 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
1708 f->post_effect_color = video::SColor(192, 255, 255, 64);
1709 #endif
1711 i = CONTENT_STEAM;
1712 f = &content_features(i);
1713 f->description = wgettext("Steam");
1714 f->setAllTextures("steam.png");
1715 f->param_type = CPT_LIGHT;
1716 f->draw_type = CDT_GLASSLIKE;
1717 f->light_propagates = true;
1718 f->sunlight_propagates = true;
1719 f->walkable = false;
1720 f->pointable = false;
1721 f->diggable = false;
1722 f->buildable_to = true;
1723 f->damage_per_second = 20;
1724 f->pressure_type = CST_CRUSHED;
1725 #ifndef SERVER
1726 f->setAllTextureTypes(MATERIAL_ALPHA_BLEND);
1727 f->post_effect_color = video::SColor(120, 200, 200, 200);
1728 #endif
1730 // flags
1731 i = CONTENT_FLAG;
1732 f = &content_features(i);
1733 f->description = wgettext("Home Flag");
1734 f->setAllTextures("flag.png");
1735 f->setAllTextureFlags(0);
1736 f->light_propagates = true;
1737 f->walkable = false;
1738 f->param_type = CPT_LIGHT;
1739 f->param2_type = CPT_FACEDIR_SIMPLE;
1740 f->draw_type = CDT_FLAGLIKE;
1741 f->is_ground_content = true;
1742 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1743 f->air_equivalent = true; // grass grows underneath
1744 content_nodebox_flag(f);
1745 f->home_node = PLAYERFLAG_WHITE;
1746 f->type = CMT_WOOD;
1747 f->hardness = 0.4;
1748 f->suffocation_per_second = 0;
1750 content_t r[9] = {
1751 CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_PAPER, CONTENT_IGNORE,
1752 CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE,
1753 CONTENT_IGNORE, CONTENT_IGNORE, CONTENT_IGNORE
1755 crafting::setRecipe(r,CONTENT_FLAG,1);
1757 crafting::set1Any2Recipe(CONTENT_FLAG_BLUE,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1758 crafting::set1Any2Recipe(CONTENT_FLAG_BLUE,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1759 crafting::set1Any2Recipe(CONTENT_FLAG_GREEN,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1760 crafting::set1Any2Recipe(CONTENT_FLAG_GREEN,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1761 crafting::set1Any2Recipe(CONTENT_FLAG_ORANGE,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1762 crafting::set1Any2Recipe(CONTENT_FLAG_ORANGE,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1763 crafting::set1Any2Recipe(CONTENT_FLAG_PURPLE,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1764 crafting::set1Any2Recipe(CONTENT_FLAG_PURPLE,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1765 crafting::set1Any2Recipe(CONTENT_FLAG_RED,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1766 crafting::set1Any2Recipe(CONTENT_FLAG_RED,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1767 crafting::set1Any2Recipe(CONTENT_FLAG_YELLOW,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1768 crafting::set1Any2Recipe(CONTENT_FLAG_YELLOW,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1769 crafting::set1Any2Recipe(CONTENT_FLAG_BLACK,CONTENT_CRAFTITEM_DYE_WHITE,CONTENT_FLAG);
1770 crafting::set1Any2Recipe(CONTENT_FLAG_BLACK,CONTENT_CRAFTITEM_STARCH,CONTENT_FLAG);
1771 if(f->initial_metadata == NULL)
1772 f->initial_metadata = new FlagNodeMetadata();
1773 lists::add("craftguide",i);
1774 lists::add("creative",i);
1776 i = CONTENT_FLAG_BLUE;
1777 f = &content_features(i);
1778 f->description = wgettext("Blue Home Flag");
1779 f->setAllTextures("flag_blue.png");
1780 f->setAllTextureFlags(0);
1781 f->light_propagates = true;
1782 f->walkable = false;
1783 f->param_type = CPT_LIGHT;
1784 f->param2_type = CPT_FACEDIR_SIMPLE;
1785 f->draw_type = CDT_FLAGLIKE;
1786 f->is_ground_content = true;
1787 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1788 f->air_equivalent = true; // grass grows underneath
1789 content_nodebox_flag(f);
1790 f->home_node = PLAYERFLAG_BLUE;
1791 f->type = CMT_WOOD;
1792 f->hardness = 0.4;
1793 f->suffocation_per_second = 0;
1794 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_BLUE,CONTENT_FLAG_BLUE);
1795 if(f->initial_metadata == NULL)
1796 f->initial_metadata = new FlagNodeMetadata();
1797 lists::add("craftguide",i);
1798 lists::add("creative",i);
1800 i = CONTENT_FLAG_GREEN;
1801 f = &content_features(i);
1802 f->description = wgettext("Green Home Flag");
1803 f->setAllTextures("flag_green.png");
1804 f->setAllTextureFlags(0);
1805 f->light_propagates = true;
1806 f->walkable = false;
1807 f->param_type = CPT_LIGHT;
1808 f->param2_type = CPT_FACEDIR_SIMPLE;
1809 f->draw_type = CDT_FLAGLIKE;
1810 f->is_ground_content = true;
1811 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1812 f->air_equivalent = true; // grass grows underneath
1813 content_nodebox_flag(f);
1814 f->home_node = PLAYERFLAG_GREEN;
1815 f->type = CMT_WOOD;
1816 f->hardness = 0.4;
1817 f->suffocation_per_second = 0;
1818 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_GREEN,CONTENT_FLAG_GREEN);
1819 if(f->initial_metadata == NULL)
1820 f->initial_metadata = new FlagNodeMetadata();
1821 lists::add("craftguide",i);
1822 lists::add("creative",i);
1824 i = CONTENT_FLAG_ORANGE;
1825 f = &content_features(i);
1826 f->description = wgettext("Orange Home Flag");
1827 f->setAllTextures("flag_orange.png");
1828 f->setAllTextureFlags(0);
1829 f->light_propagates = true;
1830 f->walkable = false;
1831 f->param_type = CPT_LIGHT;
1832 f->param2_type = CPT_FACEDIR_SIMPLE;
1833 f->draw_type = CDT_FLAGLIKE;
1834 f->is_ground_content = true;
1835 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1836 f->air_equivalent = true; // grass grows underneath
1837 content_nodebox_flag(f);
1838 f->home_node = PLAYERFLAG_ORANGE;
1839 f->type = CMT_WOOD;
1840 f->hardness = 0.4;
1841 f->suffocation_per_second = 0;
1842 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_ORANGE,CONTENT_FLAG_ORANGE);
1843 if(f->initial_metadata == NULL)
1844 f->initial_metadata = new FlagNodeMetadata();
1845 lists::add("craftguide",i);
1846 lists::add("creative",i);
1848 i = CONTENT_FLAG_PURPLE;
1849 f = &content_features(i);
1850 f->description = wgettext("Purple Home Flag");
1851 f->setAllTextures("flag_purple.png");
1852 f->setAllTextureFlags(0);
1853 f->light_propagates = true;
1854 f->walkable = false;
1855 f->param_type = CPT_LIGHT;
1856 f->param2_type = CPT_FACEDIR_SIMPLE;
1857 f->draw_type = CDT_FLAGLIKE;
1858 f->is_ground_content = true;
1859 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1860 f->air_equivalent = true; // grass grows underneath
1861 content_nodebox_flag(f);
1862 f->home_node = PLAYERFLAG_PURPLE;
1863 f->type = CMT_WOOD;
1864 f->hardness = 0.4;
1865 f->suffocation_per_second = 0;
1866 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_PURPLE,CONTENT_FLAG_PURPLE);
1867 if(f->initial_metadata == NULL)
1868 f->initial_metadata = new FlagNodeMetadata();
1869 lists::add("craftguide",i);
1870 lists::add("creative",i);
1872 i = CONTENT_FLAG_RED;
1873 f = &content_features(i);
1874 f->description = wgettext("Red Home Flag");
1875 f->setAllTextures("flag_red.png");
1876 f->setAllTextureFlags(0);
1877 f->light_propagates = true;
1878 f->walkable = false;
1879 f->param_type = CPT_LIGHT;
1880 f->param2_type = CPT_FACEDIR_SIMPLE;
1881 f->draw_type = CDT_FLAGLIKE;
1882 f->is_ground_content = true;
1883 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1884 f->air_equivalent = true; // grass grows underneath
1885 content_nodebox_flag(f);
1886 f->home_node = PLAYERFLAG_RED;
1887 f->type = CMT_WOOD;
1888 f->hardness = 0.4;
1889 f->suffocation_per_second = 0;
1890 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_RED,CONTENT_FLAG_RED);
1891 if(f->initial_metadata == NULL)
1892 f->initial_metadata = new FlagNodeMetadata();
1893 lists::add("craftguide",i);
1894 lists::add("creative",i);
1896 i = CONTENT_FLAG_YELLOW;
1897 f = &content_features(i);
1898 f->description = wgettext("Yellow Home Flag");
1899 f->setAllTextures("flag_yellow.png");
1900 f->setAllTextureFlags(0);
1901 f->light_propagates = true;
1902 f->walkable = false;
1903 f->param_type = CPT_LIGHT;
1904 f->param2_type = CPT_FACEDIR_SIMPLE;
1905 f->draw_type = CDT_FLAGLIKE;
1906 f->is_ground_content = true;
1907 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1908 f->air_equivalent = true; // grass grows underneath
1909 content_nodebox_flag(f);
1910 f->home_node = PLAYERFLAG_YELLOW;
1911 f->type = CMT_WOOD;
1912 f->hardness = 0.4;
1913 f->suffocation_per_second = 0;
1914 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_YELLOW,CONTENT_FLAG_YELLOW);
1915 if(f->initial_metadata == NULL)
1916 f->initial_metadata = new FlagNodeMetadata();
1917 lists::add("craftguide",i);
1918 lists::add("creative",i);
1920 i = CONTENT_FLAG_BLACK;
1921 f = &content_features(i);
1922 f->description = wgettext("Black Home Flag");
1923 f->setAllTextures("flag_black.png");
1924 f->setAllTextureFlags(0);
1925 f->light_propagates = true;
1926 f->walkable = false;
1927 f->param_type = CPT_LIGHT;
1928 f->param2_type = CPT_FACEDIR_SIMPLE;
1929 f->draw_type = CDT_FLAGLIKE;
1930 f->is_ground_content = true;
1931 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1932 f->air_equivalent = true; // grass grows underneath
1933 content_nodebox_flag(f);
1934 f->home_node = PLAYERFLAG_BLACK;
1935 f->type = CMT_WOOD;
1936 f->hardness = 0.4;
1937 f->suffocation_per_second = 0;
1938 crafting::set1Any2Recipe(CONTENT_FLAG,CONTENT_CRAFTITEM_DYE_BLACK,CONTENT_FLAG_BLACK);
1939 if(f->initial_metadata == NULL)
1940 f->initial_metadata = new FlagNodeMetadata();
1941 lists::add("craftguide",i);
1942 lists::add("creative",i);
1944 i = CONTENT_LIFE_SUPPORT;
1945 f = &content_features(i);
1946 f->description = wgettext("Life Support System");
1947 f->setAllTextures("life_support.png");
1948 f->setTexture(0, "life_support_top.png");
1949 f->setTexture(1, "life_support_bottom.png");
1950 f->setInventoryTextureCube("life_support_top.png", "life_support.png", "life_support.png");
1951 f->draw_type = CDT_CUBELIKE;
1952 f->is_ground_content = true;
1953 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1954 f->type = CMT_DIRT;
1955 f->hardness = 1.0;
1956 f->suffocation_per_second = 0;
1958 content_t r[9] = {
1959 CONTENT_IGNORE, CONTENT_SPONGE, CONTENT_IGNORE,
1960 CONTENT_CRAFTITEM_MITHRIL_UNBOUND, CONTENT_IGNORE, CONTENT_CRAFTITEM_MITHRIL_UNBOUND,
1961 CONTENT_CRAFTITEM_MITHRIL_UNBOUND, CONTENT_CRAFTITEM_MITHRIL_UNBOUND, CONTENT_CRAFTITEM_MITHRIL_UNBOUND
1963 crafting::setRecipe(r,CONTENT_LIFE_SUPPORT,1);
1965 lists::add("craftguide",i);
1966 lists::add("creative",i);
1968 i = CONTENT_PARCEL;
1969 f = &content_features(i);
1970 f->description = wgettext("Parcel");
1971 f->setAllTextures("parcel.png");
1972 f->setTexture(0, "parcel_top.png");
1973 f->setTexture(1, "parcel_bottom.png");
1974 f->light_propagates = true;
1975 f->sunlight_propagates = true;
1976 f->walkable = false;
1977 f->param_type = CPT_LIGHT;
1978 f->rotate_tile_with_nodebox = true;
1979 f->draw_type = CDT_NODEBOX;
1980 f->is_ground_content = true;
1981 f->buildable_to = true;
1982 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
1983 f->air_equivalent = true; // grass grows underneath
1984 f->borderstone_diggable = true;
1985 content_nodebox_parcel(f);
1986 f->setInventoryTextureNodeBox(i,"parcel_top.png", "parcel.png", "parcel.png");
1987 f->type = CMT_DIRT;
1988 f->hardness = 0.01;
1989 f->suffocation_per_second = 0;
1990 if (f->initial_metadata == NULL)
1991 f->initial_metadata = new ParcelNodeMetadata();
1993 i = CONTENT_CAULDRON;
1994 f = &content_features(i);
1995 f->description = wgettext("Cauldron");
1996 f->setAllTextures("cauldron_outer.png");
1997 f->setAllMetaTextures("cauldron_inner.png");
1998 f->setMetaTexture(0,"water.png");
1999 f->draw_type = CDT_NODEBOX_META;
2000 f->type = CMT_STONE;
2001 f->hardness = 3.0;
2002 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
2003 content_nodebox_cauldron(f);
2004 f->setInventoryTextureNodeBox(i,"cauldron_outer.png", "cauldron_outer.png", "cauldron_outer.png");
2005 if (f->initial_metadata == NULL)
2006 f->initial_metadata = new CauldronNodeMetadata();
2007 crafting::setDeepURecipe(CONTENT_CRAFTITEM_STEEL_INGOT,CONTENT_CAULDRON);
2008 f->pressure_type = CST_SOLID;
2009 lists::add("craftguide",i);
2010 lists::add("creative",i);
2011 f->suffocation_per_second = 0;
2013 i = CONTENT_FORGE;
2014 f = &content_features(i);
2015 f->description = wgettext("Forge");
2016 f->setAllTextures("forge_side.png");
2017 f->setTexture(0,"forge_top.png");
2018 f->setTexture(1,"forge_bottom.png");
2019 f->draw_type = CDT_NODEBOX;
2020 f->type = CMT_STONE;
2021 f->hardness = 3.0;
2022 f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
2023 content_nodebox_forge(f);
2024 f->setInventoryTextureNodeBox(i,"forge_top.png", "forge_side.png", "forge_side.png");
2025 if (f->initial_metadata == NULL)
2026 f->initial_metadata = new ForgeNodeMetadata();
2028 content_t r[9] = {
2029 CONTENT_ROUGHSTONE, CONTENT_CHARCOAL, CONTENT_ROUGHSTONE,
2030 CONTENT_ROUGHSTONE, CONTENT_SAND, CONTENT_ROUGHSTONE,
2031 CONTENT_ROUGHSTONE, CONTENT_STEEL, CONTENT_ROUGHSTONE
2033 crafting::setRecipe(r,CONTENT_FORGE,1);
2035 f->pressure_type = CST_SOLID;
2036 lists::add("craftguide",i);
2037 lists::add("creative",i);
2038 f->suffocation_per_second = 0;
2040 i = CONTENT_FORGE_FIRE;
2041 f = &content_features(i);
2042 f->description = wgettext("Forge Fire");
2043 f->setAllTextures("forge_fire.png");
2044 f->setAllTextureFlags(0);
2045 f->param_type = CPT_LIGHT;
2046 f->draw_type = CDT_PLANTLIKE;
2047 f->light_propagates = true;
2048 f->light_source = LIGHT_MAX-4;
2049 f->walkable = false;
2050 f->pointable = false;
2051 f->diggable = false;
2052 f->buildable_to = true;
2053 f->sound_ambient = "env-fire";
2054 #ifndef SERVER
2055 f->post_effect_color = video::SColor(192, 255, 64, 0);
2056 #endif
2057 f->pressure_type = CST_CRUSHED;