1 /************************************************************************
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"
30 void content_mapnode_special(bool repeat
)
33 ContentFeatures
*f
= NULL
;
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;
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
51 f
->special_alternate_node
= CONTENT_WOOD
;
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;
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
;
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;
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
106 f
->special_alternate_node
= CONTENT_JUNGLEWOOD
;
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;
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
134 f
->special_alternate_node
= CONTENT_WOOD_PINE
;
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
;
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");
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
);
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
188 f
->suffocation_per_second
= 0;
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";
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";
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";
248 f
->pressure_type
= CST_CRUSHABLE
;
249 f
->suffocation_per_second
= 0;
250 content_nodebox_roofcollide(f
);
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";
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);
285 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
307 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
330 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
353 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
376 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
399 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
422 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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);
445 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
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";
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";
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;
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;
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");
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;
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;
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;
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;
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();
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
);
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
);
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
;
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");
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
;
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");
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
;
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");
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
;
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");
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
;
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");
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
);
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
;
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");
817 f
->pressure_type
= CST_CRUSHABLE
;
818 f
->suffocation_per_second
= 0;
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
;
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");
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
;
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");
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
;
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");
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
;
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");
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
;
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");
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
;
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");
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";
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";
1012 f
->post_effect_color
= video::SColor(192, 255, 64, 0);
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;
1031 f
->post_effect_color
= video::SColor(192, 255, 64, 0);
1033 f
->pressure_type
= CST_CRUSHED
;
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
1050 f
->dug_item
= std::string("MaterialItem2 ")+itos(i
)+" 1";
1051 f
->light_source
= LIGHT_MAX
-1;
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
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");
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));
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
1104 f
->dug_item
= std::string("MaterialItem2 ")+itos(i
)+" 1";
1105 if(f
->initial_metadata
== NULL
)
1106 f
->initial_metadata
= new SignNodeMetadata("Some sign");
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
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");
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
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");
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
1195 f
->dug_item
= std::string("MaterialItem2 ")+itos(i
)+" 1";
1196 if(f
->initial_metadata
== NULL
)
1197 f
->initial_metadata
= new LockingSignNodeMetadata("Some sign");
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
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");
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");
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";
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";
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";
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
);
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();
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
;
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
;
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
;
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
;
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
;
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
;
1468 f
->pressure_type
= CST_SOLID
;
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
;
1482 lists::add("creative",i
);
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
;
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
;
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
;
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
);
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
;
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
;
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
;
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
;
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
;
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
;
1667 f
->suffocation_per_second
= 0;
1668 crafting::setWallRecipe(CONTENT_LIMESTONE
,CONTENT_LIMESTONE_WALL
);
1669 lists::add("craftguide",i
);
1670 lists::add("creative",i
);
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();
1687 f
->suffocation_per_second
= 0;
1688 crafting::setSoftBlockRecipe(CONTENT_CRAFTITEM_TNT
,CONTENT_TNT
);
1689 lists::add("craftguide",i
);
1690 lists::add("creative",i
);
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
;
1707 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
1708 f
->post_effect_color
= video::SColor(192, 255, 255, 64);
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
;
1726 f
->setAllTextureTypes(MATERIAL_ALPHA_BLEND
);
1727 f
->post_effect_color
= video::SColor(120, 200, 200, 200);
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
;
1748 f
->suffocation_per_second
= 0;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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";
1956 f
->suffocation_per_second
= 0;
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
);
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");
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
;
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;
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
;
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();
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";
2055 f
->post_effect_color
= video::SColor(192, 255, 64, 0);
2057 f
->pressure_type
= CST_CRUSHED
;