Compare commits
	
		
			43 Commits
		
	
	
		
			2020-02-16
			...
			ferns-clea
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3b524b01d7 | ||
|  | 06c8d1c5ea | ||
|  | b815ffc578 | ||
|  | 85dd10e88a | ||
|  | ccee13df66 | ||
|  | d7d56ec1b0 | ||
|  | 97f7b11f86 | ||
|  | e34dc49f07 | ||
|  | 329f6eb5d5 | ||
|  | aa8668f69b | ||
|  | 5b5652c552 | ||
|  | 6b7b15ba4f | ||
|  | d3daa28b06 | ||
|  | 6b2a7785da | ||
|  | 9a6491a366 | ||
|  | 4eb20c03c2 | ||
|  | 77d0a1040c | ||
|  | 13a249369d | ||
|  | 69ce1ff826 | ||
|  | 282e3c3317 | ||
|  | 878c5dd449 | ||
|  | 9ad737f951 | ||
|  | 4fb3cdfffb | ||
|  | 174096ac87 | ||
|  | 7357524224 | ||
|  | c5f6d6831e | ||
|  | a3e926421a | ||
|  | 62b27570f4 | ||
|  | 76414325cf | ||
|  | 549d39d4d2 | ||
|  | b72f1dd5eb | ||
|  | d1369c25cf | ||
|  | 1d0543b435 | ||
|  | 38d972d58e | ||
|  | cd0735203a | ||
|  | 27156fdd71 | ||
|  | 655cff9f76 | ||
|  | abdf76566a | ||
|  | b069341d33 | ||
|  | 64471c9bfc | ||
|  | fc3363d439 | ||
|  | 786a28a5e9 | ||
|  | 25c8c8aeb0 | 
							
								
								
									
										14
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						| @@ -1,14 +0,0 @@ | ||||
| unused_args = false | ||||
| allow_defined_top = true | ||||
|  | ||||
| read_globals = { | ||||
| 	"biome_lib", | ||||
| 	"DIR_DELIM", | ||||
| 	"minetest", "core", | ||||
| 	"dump", | ||||
| 	"vector", "nodeupdate", | ||||
| 	"VoxelManip", "VoxelArea", | ||||
| 	"PseudoRandom", "ItemStack", | ||||
| 	"default", | ||||
| } | ||||
|  | ||||
| @@ -1,65 +0,0 @@ | ||||
| -- 3D Mushroom mod by VanessaE | ||||
|  | ||||
| mushroom = {} | ||||
|  | ||||
| minetest.override_item("flowers:mushroom_fertile_brown", { | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3dmushrooms.obj", | ||||
| 	tiles = {"3dmushrooms_brown.png"}, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} | ||||
| 	}, | ||||
| 	inventory_image = "3dmushrooms_brown_inv.png" | ||||
| }) | ||||
|  | ||||
| minetest.override_item("flowers:mushroom_brown", { | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3dmushrooms.obj", | ||||
| 	tiles = {"3dmushrooms_brown.png"}, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} | ||||
| 	}, | ||||
| 	inventory_image = "3dmushrooms_brown_inv.png" | ||||
| }) | ||||
|  | ||||
| minetest.override_item("flowers:mushroom_fertile_red", { | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3dmushrooms.obj", | ||||
| 	tiles = {"3dmushrooms_red.png"}, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} | ||||
| 	}, | ||||
| 	inventory_image = "3dmushrooms_red_inv.png" | ||||
| }) | ||||
|  | ||||
| minetest.override_item("flowers:mushroom_red", { | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3dmushrooms.obj", | ||||
| 	tiles = {"3dmushrooms_red.png"}, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} | ||||
| 	}, | ||||
| 	inventory_image = "3dmushrooms_red_inv.png" | ||||
| }) | ||||
|  | ||||
| -- aliases to the default mushrooms | ||||
|  | ||||
| minetest.register_alias("mushroom:brown", "flowers:mushroom_brown") | ||||
| minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_fertile_brown") | ||||
| minetest.register_alias("mushroom:spore_brown", "flowers:mushroom_spores_brown") | ||||
| minetest.register_alias("mushroom:spore2", "flowers:mushroom_spores_brown") | ||||
| minetest.register_alias("mushroom:brown_essence", "flowers:mushroom_brown") | ||||
|  | ||||
| minetest.register_alias("mushroom:red", "flowers:mushroom_red") | ||||
| minetest.register_alias("mushroom:red_natural", "flowers:mushroom_fertile_red") | ||||
| minetest.register_alias("mushroom:spore_red", "flowers:mushroom_spores_red") | ||||
| minetest.register_alias("mushroom:spore1", "flowers:mushroom_spores_red") | ||||
| minetest.register_alias("mushroom:poison", "flowers:mushroom_red") | ||||
|  | ||||
| minetest.register_alias("mushroom:identifier", "default:mese_crystal_fragment") | ||||
|  | ||||
| print("[3D Mushrooms] loaded.") | ||||
| @@ -1,2 +0,0 @@ | ||||
| name = 3dmushrooms | ||||
| depends = default, flowers | ||||
| @@ -1,329 +0,0 @@ | ||||
| # Blender v2.73 (sub 0) OBJ File: 'plantlife_mushroom.blend' | ||||
| # www.blender.org | ||||
| o Cylinder | ||||
| v 0.261489 -0.177877 -0.000000 | ||||
| v 0.165972 -0.203714 -0.000000 | ||||
| v 0.210761 -0.224729 -0.000000 | ||||
| v 0.258520 -0.211811 -0.000000 | ||||
| v 0.185335 -0.171215 -0.184553 | ||||
| v 0.116925 -0.199423 -0.118862 | ||||
| v 0.148161 -0.219252 -0.151707 | ||||
| v 0.182366 -0.205148 -0.184553 | ||||
| v 0.001484 -0.155130 -0.260997 | ||||
| v -0.001484 -0.189063 -0.168096 | ||||
| v -0.002969 -0.206030 -0.214547 | ||||
| v -0.001484 -0.189063 -0.260997 | ||||
| v -0.182366 -0.139045 -0.184553 | ||||
| v -0.119894 -0.178704 -0.118862 | ||||
| v -0.154099 -0.192808 -0.151707 | ||||
| v -0.185335 -0.172979 -0.184553 | ||||
| v -0.258520 -0.132382 -0.000000 | ||||
| v -0.168941 -0.174413 -0.000000 | ||||
| v -0.216699 -0.187331 -0.000000 | ||||
| v -0.261489 -0.166316 -0.000000 | ||||
| v -0.182366 -0.139045 0.184553 | ||||
| v -0.119894 -0.178704 0.118862 | ||||
| v -0.154099 -0.192808 0.151707 | ||||
| v -0.185335 -0.172979 0.184553 | ||||
| v 0.001484 -0.155130 0.260997 | ||||
| v -0.001484 -0.189063 0.168096 | ||||
| v -0.002969 -0.206030 0.214547 | ||||
| v -0.001484 -0.189063 0.260997 | ||||
| v 0.185335 -0.171215 0.184553 | ||||
| v 0.116925 -0.199423 0.118862 | ||||
| v 0.148161 -0.219252 0.151708 | ||||
| v 0.182366 -0.205148 0.184553 | ||||
| v 0.059333 -0.075538 0.000000 | ||||
| v 0.044915 -0.074277 -0.034942 | ||||
| v 0.010106 -0.071232 -0.049416 | ||||
| v -0.024704 -0.068186 -0.034942 | ||||
| v -0.039122 -0.066925 0.000000 | ||||
| v -0.024704 -0.068186 0.034942 | ||||
| v 0.010106 -0.071232 0.049416 | ||||
| v 0.044915 -0.074277 0.034942 | ||||
| v 0.004580 -0.119744 -0.206430 | ||||
| v 0.149993 -0.132466 -0.145968 | ||||
| v 0.004580 -0.119744 0.206430 | ||||
| v -0.140833 -0.107022 0.145968 | ||||
| v 0.210225 -0.137736 -0.000000 | ||||
| v 0.149993 -0.132466 0.145968 | ||||
| v -0.201064 -0.101752 -0.000000 | ||||
| v -0.140833 -0.107022 -0.145968 | ||||
| v 0.033054 -0.500000 -0.079800 | ||||
| v 0.025067 -0.177627 -0.060518 | ||||
| v 0.079800 -0.500000 -0.033054 | ||||
| v 0.060518 -0.177627 -0.025067 | ||||
| v 0.079800 -0.500000 0.033054 | ||||
| v 0.060518 -0.177627 0.025067 | ||||
| v 0.033054 -0.500000 0.079800 | ||||
| v 0.025067 -0.177627 0.060518 | ||||
| v -0.033054 -0.500000 0.079800 | ||||
| v -0.025067 -0.177627 0.060518 | ||||
| v -0.079800 -0.500000 0.033054 | ||||
| v -0.060518 -0.177627 0.025067 | ||||
| v -0.079800 -0.500000 -0.033054 | ||||
| v -0.060518 -0.177627 -0.025067 | ||||
| v -0.033054 -0.500000 -0.079800 | ||||
| v -0.025067 -0.177627 -0.060518 | ||||
| v 0.014323 -0.253674 -0.065067 | ||||
| v 0.012105 -0.382623 -0.072780 | ||||
| v 0.052438 -0.253674 -0.026952 | ||||
| v 0.054739 -0.382623 -0.030146 | ||||
| v 0.052438 -0.253674 0.026952 | ||||
| v 0.054739 -0.382623 0.030146 | ||||
| v 0.014323 -0.253674 0.065067 | ||||
| v 0.012105 -0.382623 0.072780 | ||||
| v -0.039580 -0.253674 0.065067 | ||||
| v -0.048187 -0.382623 0.072780 | ||||
| v -0.077695 -0.253674 0.026952 | ||||
| v -0.090820 -0.382623 0.030146 | ||||
| v -0.077695 -0.253674 -0.026952 | ||||
| v -0.090820 -0.382623 -0.030146 | ||||
| v -0.039580 -0.253674 -0.065067 | ||||
| v -0.048187 -0.382623 -0.072780 | ||||
| vt 0.261010 0.917920 | ||||
| vt 0.235559 0.983636 | ||||
| vt 0.016350 0.764426 | ||||
| vt 0.080814 0.737724 | ||||
| vt 0.545568 0.235207 | ||||
| vt 0.764778 0.454417 | ||||
| vt 0.690996 0.484978 | ||||
| vt 0.517617 0.311599 | ||||
| vt 0.235559 0.235207 | ||||
| vt 0.515845 0.302693 | ||||
| vt 0.261010 0.302693 | ||||
| vt 0.578125 0.234375 | ||||
| vt 0.765625 0.234375 | ||||
| vt 0.765625 0.312500 | ||||
| vt 0.578125 0.312500 | ||||
| vt 0.015625 0.234375 | ||||
| vt 0.203125 0.234375 | ||||
| vt 0.203125 0.312500 | ||||
| vt 0.015625 0.312500 | ||||
| vt 0.390625 0.312500 | ||||
| vt 0.578125 0.390625 | ||||
| vt 0.390625 0.390625 | ||||
| vt 0.016350 0.454417 | ||||
| vt 0.080814 0.482889 | ||||
| vt 0.545569 0.983636 | ||||
| vt 0.515845 0.917920 | ||||
| vt 0.099043 0.730173 | ||||
| vt 0.272422 0.903553 | ||||
| vt 0.290733 0.368408 | ||||
| vt 0.490395 0.368408 | ||||
| vt 0.149550 0.709253 | ||||
| vt 0.149550 0.509591 | ||||
| vt 0.764778 0.764426 | ||||
| vt 0.696041 0.737725 | ||||
| vt 0.696041 0.482889 | ||||
| vt 0.099043 0.484978 | ||||
| vt 0.203125 0.390625 | ||||
| vt 0.765625 0.390625 | ||||
| vt 0.272422 0.311599 | ||||
| vt 0.631577 0.509591 | ||||
| vt 0.390625 0.234375 | ||||
| vt 0.517617 0.903553 | ||||
| vt 0.690996 0.730173 | ||||
| vt 0.432320 0.675133 | ||||
| vt 0.473823 0.633629 | ||||
| vt 0.015625 0.390625 | ||||
| vt 0.490395 0.850435 | ||||
| vt 0.290733 0.850435 | ||||
| vt 0.631577 0.709253 | ||||
| vt 0.373624 0.533431 | ||||
| vt 0.332121 0.574934 | ||||
| vt 0.473823 0.574934 | ||||
| vt 0.432320 0.533431 | ||||
| vt 0.332121 0.633630 | ||||
| vt 0.373624 0.675133 | ||||
| vt 0.935126 0.767633 | ||||
| vt 0.998032 0.830539 | ||||
| vt 0.998032 0.919502 | ||||
| vt 0.935126 0.982408 | ||||
| vt 0.846164 0.982408 | ||||
| vt 0.783257 0.919502 | ||||
| vt 0.783258 0.830539 | ||||
| vt 0.846164 0.767633 | ||||
| vt 0.375000 0.187500 | ||||
| vt 0.375000 0.031250 | ||||
| vt 0.500000 0.031250 | ||||
| vt 0.500000 0.187500 | ||||
| vt 0.625000 0.031250 | ||||
| vt 0.625000 0.187500 | ||||
| vt 0.750000 0.031250 | ||||
| vt 0.750000 0.187500 | ||||
| vt 0.875000 0.031250 | ||||
| vt 0.875000 0.187500 | ||||
| vt 1.000000 0.031250 | ||||
| vt 1.000000 0.187500 | ||||
| vt 0.000000 0.031250 | ||||
| vt 0.125000 0.031250 | ||||
| vt 0.125000 0.187500 | ||||
| vt 0.000000 0.187500 | ||||
| vt 0.250000 0.031250 | ||||
| vt 0.250000 0.187500 | ||||
| vt 0.542224 0.015885 | ||||
| vt 0.601585 0.075246 | ||||
| vt 0.601585 0.159195 | ||||
| vt 0.542224 0.218556 | ||||
| vt 0.458275 0.218556 | ||||
| vt 0.398914 0.159195 | ||||
| vt 0.398914 0.075246 | ||||
| vt 0.458275 0.015885 | ||||
| vt 0.625000 0.125000 | ||||
| vt 0.500000 0.125000 | ||||
| vt 0.750000 0.125000 | ||||
| vt 0.875000 0.125000 | ||||
| vt 1.000000 0.125000 | ||||
| vt 0.125000 0.125000 | ||||
| vt 0.000000 0.125000 | ||||
| vt 0.250000 0.125000 | ||||
| vt 0.375000 0.125000 | ||||
| vn -0.147000 -0.987300 0.060400 | ||||
| vn -0.648700 -0.460200 0.606100 | ||||
| vn -0.898800 -0.438400 0.000000 | ||||
| vn -0.172000 -0.985100 0.000000 | ||||
| vn 0.672500 0.376500 0.637100 | ||||
| vn 0.935400 0.353500 0.000000 | ||||
| vn 0.529200 0.848500 0.000000 | ||||
| vn 0.396700 0.860200 0.320400 | ||||
| vn -0.044900 -0.513100 -0.857100 | ||||
| vn 0.558900 -0.565900 -0.606100 | ||||
| vn -0.026600 -0.997800 -0.060400 | ||||
| vn -0.086800 -0.992500 -0.085500 | ||||
| vn -0.044900 -0.513100 0.857100 | ||||
| vn 0.037800 0.432000 0.901100 | ||||
| vn -0.596900 0.487600 0.637100 | ||||
| vn -0.648700 -0.460200 -0.606100 | ||||
| vn -0.596900 0.487600 -0.637100 | ||||
| vn 0.037800 0.432000 -0.901100 | ||||
| vn 0.809000 -0.587800 0.000000 | ||||
| vn 0.672500 0.376500 -0.637100 | ||||
| vn -0.147000 -0.987300 -0.060400 | ||||
| vn -0.086800 -0.992500 0.085500 | ||||
| vn -0.859800 0.510500 0.000000 | ||||
| vn -0.372100 0.928200 0.000000 | ||||
| vn -0.240600 0.916500 -0.319400 | ||||
| vn -0.085100 -0.972600 0.216400 | ||||
| vn -0.237500 -0.959200 0.153000 | ||||
| vn 0.130500 -0.991400 0.000000 | ||||
| vn 0.067400 -0.985900 0.153000 | ||||
| vn 0.558900 -0.565900 0.606100 | ||||
| vn -0.026600 -0.997800 0.060400 | ||||
| vn -0.001700 -1.000000 0.000000 | ||||
| vn -0.240600 0.916500 0.319400 | ||||
| vn 0.077500 0.888400 0.452400 | ||||
| vn -0.300700 -0.953700 0.000000 | ||||
| vn 0.077500 0.888400 -0.452400 | ||||
| vn 0.396700 0.860200 -0.320400 | ||||
| vn 0.086200 0.978700 -0.186300 | ||||
| vn 0.217800 0.967000 -0.132200 | ||||
| vn -0.085100 -0.972600 -0.216400 | ||||
| vn 0.067400 -0.985900 -0.153000 | ||||
| vn -0.237500 -0.959200 -0.153000 | ||||
| vn 0.086200 0.978700 0.186300 | ||||
| vn -0.044600 0.990300 0.131300 | ||||
| vn 0.272600 0.962100 0.000000 | ||||
| vn 0.217800 0.967000 0.132200 | ||||
| vn -0.098600 0.995100 0.000000 | ||||
| vn -0.044600 0.990300 -0.131300 | ||||
| vn -0.273500 -0.626100 -0.730200 | ||||
| vn -0.402500 0.040600 -0.914500 | ||||
| vn 0.360300 0.084000 -0.929000 | ||||
| vn 0.335600 -0.581700 -0.740900 | ||||
| vn 0.369900 0.027700 -0.928600 | ||||
| vn 0.921100 -0.031200 -0.388000 | ||||
| vn 0.913800 0.116800 -0.388800 | ||||
| vn 0.921100 -0.031200 0.388000 | ||||
| vn 0.913800 0.116800 0.388800 | ||||
| vn 0.369900 0.027700 0.928600 | ||||
| vn 0.360300 0.084000 0.929000 | ||||
| vn -0.391600 0.105700 0.914000 | ||||
| vn -0.402500 0.040600 0.914500 | ||||
| vn -0.914200 0.156600 0.373800 | ||||
| vn -0.927200 0.012400 0.374500 | ||||
| vn -0.914200 0.156600 -0.373800 | ||||
| vn -0.927200 0.012400 -0.374500 | ||||
| vn -0.391600 0.105700 -0.914000 | ||||
| vn 0.774400 -0.552100 -0.309000 | ||||
| vn 0.774400 -0.552100 0.309000 | ||||
| vn 0.335600 -0.581700 0.740900 | ||||
| vn -0.273500 -0.626100 0.730200 | ||||
| vn -0.690800 -0.658600 0.298100 | ||||
| vn -0.690800 -0.658600 -0.298100 | ||||
| vn 0.416700 -0.004500 -0.909100 | ||||
| vn 0.925800 -0.089300 -0.367400 | ||||
| vn 0.925800 -0.089300 0.367400 | ||||
| vn 0.416700 -0.004500 0.909100 | ||||
| vn -0.344300 0.121400 0.931000 | ||||
| vn -0.896600 0.212200 0.388700 | ||||
| vn -0.896600 0.212200 -0.388700 | ||||
| vn -0.344300 0.121400 -0.931000 | ||||
| s 1 | ||||
| f 23/1/1 24/2/2 20/3/3 19/4/4 | ||||
| f 29/5/5 1/6/6 45/7/7 46/8/8 | ||||
| f 12/9/9 8/5/10 7/10/11 11/11/12 | ||||
| f 24/12/2 28/13/13 25/14/14 21/15/15 | ||||
| f 12/16/9 16/17/16 13/18/17 9/19/18 | ||||
| f 4/20/19 8/15/10 5/21/20 1/22/6 | ||||
| f 16/23/16 12/9/9 11/11/12 15/24/21 | ||||
| f 28/25/13 24/2/2 23/1/1 27/26/22 | ||||
| f 13/2/17 17/3/23 47/27/24 48/28/25 | ||||
| f 10/29/26 11/11/12 7/10/11 6/30/27 | ||||
| f 18/31/28 19/4/4 15/24/21 14/32/29 | ||||
| f 4/6/19 32/33/30 31/34/31 3/35/32 | ||||
| f 17/3/23 21/23/15 44/36/33 47/27/24 | ||||
| f 32/18/30 4/20/19 1/22/6 29/37/5 | ||||
| f 8/5/10 4/6/19 3/35/32 7/10/11 | ||||
| f 8/15/10 12/14/9 9/38/18 5/21/20 | ||||
| f 25/9/14 29/5/5 46/8/8 43/39/34 | ||||
| f 6/30/27 7/10/11 3/35/32 2/40/35 | ||||
| f 16/17/16 20/41/3 17/20/23 13/18/17 | ||||
| f 31/34/31 32/33/30 28/25/13 27/26/22 | ||||
| f 5/33/20 9/25/18 41/42/36 42/43/37 | ||||
| f 41/42/36 35/44/38 34/45/39 42/43/37 | ||||
| f 15/24/21 11/11/12 10/29/26 14/32/29 | ||||
| f 20/41/3 24/12/2 21/15/15 17/20/23 | ||||
| f 1/6/6 5/33/20 42/43/37 45/7/7 | ||||
| f 19/4/4 20/3/3 16/23/16 15/24/21 | ||||
| f 28/19/13 32/18/30 29/37/5 25/46/14 | ||||
| f 26/47/40 27/26/22 23/1/1 22/48/41 | ||||
| f 21/23/15 25/9/14 43/39/34 44/36/33 | ||||
| f 9/25/18 13/2/17 48/28/25 41/42/36 | ||||
| f 23/1/1 19/4/4 18/31/28 22/48/41 | ||||
| f 2/40/35 3/35/32 31/34/31 30/49/42 | ||||
| f 43/39/34 39/50/43 38/51/44 44/36/33 | ||||
| f 45/7/7 33/52/45 40/53/46 46/8/8 | ||||
| f 42/43/37 34/45/39 33/52/45 45/7/7 | ||||
| f 46/8/8 40/53/46 39/50/43 43/39/34 | ||||
| f 44/36/33 38/51/44 37/54/47 47/27/24 | ||||
| f 47/27/24 37/54/47 36/55/48 48/28/25 | ||||
| f 48/28/25 36/55/48 35/44/38 41/42/36 | ||||
| f 35/44/38 36/55/48 37/54/47 38/51/44 39/50/43 40/53/46 33/52/45 34/45/39 | ||||
| f 6/56/27 2/57/35 30/58/42 26/59/40 22/60/41 18/61/28 14/62/29 10/63/26 | ||||
| f 63/64/49 80/65/50 66/66/51 49/67/52 | ||||
| f 65/66/53 67/68/54 68/69/55 66/67/51 | ||||
| f 67/68/54 69/70/56 70/71/57 68/69/55 | ||||
| f 69/70/56 71/72/58 72/73/59 70/71/57 | ||||
| f 71/72/58 73/74/60 74/75/61 72/73/59 | ||||
| f 73/76/60 75/77/62 76/78/63 74/79/61 | ||||
| f 75/77/62 77/80/64 78/81/65 76/78/63 | ||||
| f 77/80/64 79/65/66 80/64/50 78/81/65 | ||||
| f 49/82/52 51/83/67 53/84/68 55/85/69 57/86/70 59/87/71 61/88/72 63/89/49 | ||||
| f 50/66/73 52/68/74 67/90/54 65/91/53 | ||||
| f 52/68/74 54/70/75 69/92/56 67/90/54 | ||||
| f 66/66/51 68/68/55 51/69/67 49/67/52 | ||||
| f 54/70/75 56/72/76 71/93/58 69/92/56 | ||||
| f 68/68/55 70/70/57 53/71/68 51/69/67 | ||||
| f 56/72/76 58/74/77 73/94/60 71/93/58 | ||||
| f 70/70/57 72/72/59 55/73/69 53/71/68 | ||||
| f 58/76/77 60/77/78 75/95/62 73/96/60 | ||||
| f 72/72/59 74/74/61 57/75/70 55/73/69 | ||||
| f 60/77/78 62/80/79 77/97/64 75/95/62 | ||||
| f 74/76/61 76/77/63 59/78/71 57/79/70 | ||||
| f 62/80/79 64/65/80 79/98/66 77/97/64 | ||||
| f 76/77/63 78/80/65 61/81/72 59/78/71 | ||||
| f 31/34/31 27/26/22 26/47/40 30/49/42 | ||||
| f 78/80/65 80/65/50 63/64/49 61/81/72 | ||||
| f 79/98/66 64/65/80 50/66/73 65/91/53 | ||||
| f 79/65/66 65/66/53 66/67/51 80/64/50 | ||||
| Before Width: | Height: | Size: 5.0 KiB | 
| Before Width: | Height: | Size: 4.2 KiB | 
| Before Width: | Height: | Size: 2.7 KiB | 
| Before Width: | Height: | Size: 5.2 KiB | 
							
								
								
									
										612
									
								
								API.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,612 @@ | ||||
| This document describes the Plantlife mod API. | ||||
|  | ||||
| Last revision: 2014-05-24 | ||||
|  | ||||
|  | ||||
| ========= | ||||
| Functions | ||||
| ========= | ||||
|  | ||||
| There are three main functions defined by the main "plants_lib" mod: | ||||
|  | ||||
| spawn_on_surfaces() | ||||
| register_generate_plant() | ||||
| grow_plants() | ||||
|  | ||||
| There are also several internal, helper functions that can be called if so | ||||
| desired, but they are not really intended for use by other mods and may change | ||||
| at any time.  They are briefly described below these main functions, but see | ||||
| init.lua for details. | ||||
|  | ||||
| Most functions in plants lib are declared locally to avoid namespace | ||||
| collisions with other mods.  They are accessible via the "plantslib" method, | ||||
| e.g. plantslib:spawn_on_surfaces() and so forth. | ||||
|  | ||||
| ===== | ||||
| spawn_on_surfaces(biome) | ||||
| spawn_on_surfaces(sdelay, splant, sradius, schance, ssurface, savoid) | ||||
|  | ||||
| This first function is an ABM-based spawner function originally created as | ||||
| part of Ironzorg's flowers mod.  It has since been largely extended and | ||||
| expanded.  There are two ways to call this function:  You can either pass it  | ||||
| several individual string and number parameters to use the legacy interface, | ||||
| or you can pass a single biome definition as a table, with all of your options | ||||
| spelled out nicely.  This is the preferred method. | ||||
|  | ||||
| When used with the legacy interface, you must specify the parameters exactly | ||||
| in order, with the first five being mandatory (even if some are set to nil), | ||||
| and the last one being optional: | ||||
|  | ||||
| sdelay:		The value passed to the ABM's interval parameter, in seconds. | ||||
| splant:		The node name of the item to spawn (e.g. | ||||
| 		"flowers:flower_rose").  A plant will of course only be | ||||
| 		spawned if the node about to be replaced is air. | ||||
| sradius:	Don't spawn within this many nodes of the avoid items | ||||
| 		mentioned below.  If set to nil, this check is skipped. | ||||
| schance:	The value passed to the ABM's chance parameter, normally in | ||||
| 		the 10-100 range (1-in-X chance of operating on a given node) | ||||
| ssurface:	String with the name of the node on which to spawn the plant | ||||
| 		in question, such as "default:sand" or | ||||
| 		"default:dirt_with_grass".  It is not recommended to put air, | ||||
| 		stone, or plain dirt here if you can use some other node, as | ||||
| 		doing so will cause the engine to process potentially large | ||||
| 		numbers of such nodes when deciding when to execute the ABM | ||||
| 		and where it should operate. | ||||
| savoid:		Table with a list of groups and/or node names to avoid when | ||||
| 		spawning the plant, such as {"group:flowers", "default:tree"}. | ||||
|  | ||||
| When passed a table as the argument, and thus using the modern calling method, | ||||
| you must pass a number of arguments in the form of an ordinary keyed-value | ||||
| table.  Below is a list of everything supported by this function: | ||||
|  | ||||
| biome = { | ||||
| 	spawn_plants = something, -- [*] String or table; see below. | ||||
| 	spawn_delay = number,	-- same as sdelay, above. | ||||
| 	spawn_chance = number,	-- same as schance, above. | ||||
| 	spawn_surfaces = {table}, -- List of node names on which the plants | ||||
| 				-- should be spawned.  As with the single- | ||||
| 				-- node "ssurface" option in the legacy API, | ||||
| 				-- you should not put stone, air, etc. here. | ||||
|  | ||||
| 	---- From here down are a number of optional parameters.  You will | ||||
| 	---- most likely want to use at least some of these to limit how and | ||||
| 	---- where your objects are spawned. | ||||
|  | ||||
| 	avoid_nodes = {table},	-- same meaning as savoid, above | ||||
| 	avoid_radius = num,	-- same as sradius | ||||
| 	seed_diff = num,	-- The Perlin seed difference value passed to | ||||
| 				-- the minetest.get_perlin() function. | ||||
| 				-- Used along with the global Perlin controls | ||||
| 				-- below to create the "biome" in which the | ||||
| 				-- plants will spawn.  Defaults to 0 if not | ||||
| 				-- provided. | ||||
| 	light_min = num,	-- Minimum amount of light necessary to make a | ||||
| 				-- plant spawn.  Defaults to 0. | ||||
| 	light_max = num,	-- Maximum amount of light needed to spawn.  | ||||
| 				-- Defaults to the engine's MAX_LIGHT value of | ||||
| 				-- 14. | ||||
| 	neighbors = {table},	-- List of neighboring nodes that need to be | ||||
| 				-- immediately next to the node the plant is | ||||
| 				-- about to spawn on. Can also be a string | ||||
| 				-- with a single node name.  It is both passed | ||||
| 				-- to the ABM as the "neighbors" parameter, | ||||
| 				-- and is used to manually check the  | ||||
| 				-- adjacent nodes.  It only takes one of these | ||||
| 				-- for the spawn routine to mark the target as | ||||
| 				-- spawnable.  Defaults to nil (ignored). | ||||
| 	ncount = num,		-- There must be at least this many of the | ||||
| 				-- above neighbors in the eight spaces | ||||
| 				-- immediately surrounding the node the plant | ||||
| 				-- is about to spawn on for it to happen.  If | ||||
| 				-- not provided, this check is disabled. | ||||
| 	facedir = num,		-- The value passed to the param2 variable | ||||
| 				-- when adding the node to the map.  Defaults | ||||
| 				-- to 0.  Be sure that the value you use here | ||||
| 				-- (and the range thereof) is appropriate for | ||||
| 				-- the type of node you're spawning. | ||||
| 	random_facedir = {table}, -- If set, the table should contain two | ||||
| 				-- values. If they're both provided, the | ||||
| 				-- spawned plant will be given a random | ||||
| 				-- facedir value in the range specified by | ||||
| 				-- these two numbers.  Overrides the facedir | ||||
| 				-- parameter above, if it exists.  Use {0,3} | ||||
| 				-- if you want the full range for wallmounted | ||||
| 				-- nodes, or {2,5} for most everything else, | ||||
| 				-- or any other pair of numbers in the 0 to 5  | ||||
| 				-- range, as appropriate for the node you want | ||||
| 				-- to spawn. | ||||
| 	verticals_list = {table}, -- List of nodes that should be considered | ||||
| 				-- to be natural walls. | ||||
| 	alt_wallnode = "string", -- If specified, this node will be  | ||||
| 				-- substituted in place of the plant(s) | ||||
| 				-- defined by spawn_plants above, if the spawn | ||||
| 				-- target has one or more adjacent walls.  In | ||||
| 				-- such a case, the two above facedir | ||||
| 				-- parameters will be ignored. | ||||
| 	depth_max = num,	-- If the object spawns on top of a water | ||||
| 				-- source, the water must be at most this | ||||
| 				-- deep.  Defaults to 1 node. | ||||
| 	min_elevation = num,	-- Surface must be at this altitude or higher | ||||
| 				-- to spawn at all.  Defaults to -31000... | ||||
| 	max_elevation = num,	-- ...but must be no higher than this | ||||
| 				-- altitude.  Defaults to +31000. | ||||
| 	near_nodes = {table},	-- List of nodes that must be somewhere in the | ||||
| 				-- vicinity in order for the plant to spawn. | ||||
| 				-- Can also be a string with a single node | ||||
| 				-- name.  If not provided, this check is | ||||
| 				-- disabled. | ||||
| 	near_nodes_size = num,	-- How large of an area to check for the above | ||||
| 				-- node.  Specifically, this checks a flat | ||||
| 				-- horizontal area centered on the node to be | ||||
| 				-- spawned on.  Defaults to 0, but is ignored | ||||
| 				-- if the above near_nodes value is not set. | ||||
| 	near_nodes_vertical = num, -- Used with the size value above, this | ||||
| 				-- extends the vertical range of the near  | ||||
| 				-- nodes search.  Basically, this turns the | ||||
| 				-- flat region described above into a cuboid | ||||
| 				-- region.  The area to be checked will extend | ||||
| 				-- this high AND this low above/below the | ||||
| 				-- target node, centered thereon.  Defaults to | ||||
| 				-- 1 (check only the layer above, the layer | ||||
| 				-- at, and the layer below the target node), | ||||
| 				-- but is ignored if near_nodes is not set. | ||||
| 	near_nodes_count = num,	-- How many of the above nodes must be within | ||||
| 				-- that radius.	Defaults to 1 but is ignored | ||||
| 				-- if near_nodes isn't set.  Bear in mind that | ||||
| 				-- the total area to be checked is equal to | ||||
| 				-- (near_nodes_size^2)*near_nodes_vertical*2. | ||||
| 				-- so for example, if size is 10 and vertical | ||||
| 				-- is 4 then the area is (10^2)*8 = 800 nodes | ||||
| 				-- in size, so you'll want to make sure you | ||||
| 				-- specify a value appropriate for the amount | ||||
| 				-- in question. | ||||
| 	air_size = num,		-- How large of an area to check for air | ||||
| 				-- above and around the target.  If omitted, | ||||
| 				-- only the space above the target is checked. | ||||
| 				-- This does not check for air at the sides or | ||||
| 				-- below the target. | ||||
| 	air_count = num,	-- How many of the surrounding nodes need to | ||||
| 				-- be air for the above check to return true. | ||||
| 				-- If omitted, only the space above the target | ||||
| 				-- is checked. | ||||
| 	plantlife_limit = num,	-- The value compared against the generic | ||||
| 				-- "plants can grow here" Perlin noise layer. | ||||
| 				-- Smaller numbers result in more abundant | ||||
| 				-- plants.  Range of -1 to +1, with values in  | ||||
| 				-- the range of about 0 to 0.5 being most | ||||
| 				-- useful.  Defaults to 0.1. | ||||
| 	temp_min = num,		-- Minimum temperature needed for the desired | ||||
| 				-- object to spawn.  This is a 2d Perlin | ||||
| 				-- value, which has an inverted range of +1 to | ||||
| 				-- -1.  Larger values represent *colder* | ||||
| 				-- temperatures, so this value is actually the | ||||
| 				-- upper end of the desired Perlin range.  See | ||||
| 				-- the temperature map section at the bottom | ||||
| 				-- of this document for details on how these | ||||
| 				-- values work.  Defaults to +1 (unlimited | ||||
| 				-- coldness). | ||||
| 	temp_max = num,		-- Maximum temperature/lower end of the Perlin | ||||
| 				-- range.  Defaults to -1 (unlimited heat). | ||||
| 	humidity_min = num,	-- Minimum humidity for the plant to spawn in. | ||||
| 				-- Like the temperature map, this is a Perlin | ||||
| 				-- value where lower numbers mean more | ||||
| 				-- humidity in the area.  Defaults to +1 (0% | ||||
| 				-- relative humidity). | ||||
| 	humidity_max = num,	-- Maximum humidity for the plant to spawn at. | ||||
| 				-- Defaults to -1 (100% humidity). | ||||
| 	spawn_on_side = bool,	-- Set this to true to spawn the node on one | ||||
| 				-- side of the target node rather than the | ||||
| 				-- top.  The code will search for an airspace | ||||
| 				-- to the side of the target, then spawn the | ||||
| 				-- plant at the first one found.  The above | ||||
| 				-- facedir and random_facedir parameters are | ||||
| 				-- ignored in this case.  If the above | ||||
| 				-- parameters for selecting generic wall nodes | ||||
| 				-- are provided, this option is ignored. | ||||
| 				-- Important note: the facedir values assigned | ||||
| 				-- by this option only make sense with | ||||
| 				-- wallmounted nodes (nodes which don't use | ||||
| 				-- facedir won't be affected). | ||||
| 	spawn_on_bottom = bool,	-- If set to true, spawn the object below the | ||||
| 				-- target node instead of above it.  The above | ||||
| 				-- spawn_on_side variable takes precedence | ||||
| 				-- over this one if both happen to be true. | ||||
| 				-- When using this option with the random | ||||
| 				-- facedir function above, the values given to | ||||
| 				-- the facedir parameter are for regular | ||||
| 				-- nodes, not wallmounted. | ||||
| 	spawn_replace_node = bool, -- If set to true, the target node itself | ||||
| 				-- is replaced by the spawned object. | ||||
| 				-- Overrides the spawn_on_bottom and | ||||
| 				-- spawn_on_side settings. | ||||
| } | ||||
|  | ||||
| [*] spawn_plants must be either a table or a string.  If it's a table, the | ||||
| values therein are treated as a list of nodenames to pick from randomly on  | ||||
| each application of the ABM code. The more nodes you can pack into this | ||||
| parameter to avoid making too many calls to this function, the lower the CPU | ||||
| load will likely be. | ||||
|  | ||||
| You can also specify a string containing the name of a function to execute. | ||||
| In this case, the function will be passed a single position parameter | ||||
| indicating where the function should place the desired object, and the checks | ||||
| for spawning on top vs. sides vs. bottom vs. replacing the target node will be | ||||
| skipped. | ||||
|  | ||||
| By default, if a biome node, size, and count are not defined, the biome | ||||
| checking is disabled.  Same holds true for the nneighbors bit above that. | ||||
|  | ||||
|  | ||||
| ===== | ||||
| plantslib:register_generate_plant(biome, nodes_or_function_or_treedef) | ||||
|  | ||||
| To register an object to be spawned at mapgen time rather than via an ABM, | ||||
| call this function with two parameters:  a table with your object's biome | ||||
| information, and a string, function, or table describing what to do if the | ||||
| engine finds a suitable surface node (see below). | ||||
|  | ||||
| The biome table contains quite a number of options, though there are fewer  | ||||
| here than are available in the ABM-based spawner, as some stuff doesn't make | ||||
| sense at map-generation time. | ||||
|  | ||||
| biome = { | ||||
| 	surface = something,	-- What node(s).  May be a string such as | ||||
| 				-- "default:dirt_with_grass" or a table with | ||||
| 				-- multiple such entries. | ||||
|  | ||||
| 	---- Everything else is optional, but you'll definitely want to use | ||||
| 	---- some of these other fields to limit where and under what | ||||
| 	---- conditions the objects are spawned. | ||||
| 	 | ||||
| 	below_nodes = {table},	-- List of nodes that must be below the target | ||||
| 				-- node.  Useful in snow biomes to keep | ||||
| 				-- objects from spawning in snow that's on the | ||||
| 				-- wrong surface for that object. | ||||
| 	avoid_nodes = {table},	-- List of nodes or groups to avoid when | ||||
| 				-- spawning. | ||||
| 	avoid_radius = num,	-- how much distance to leave between the | ||||
| 				-- object to be added and the objects to be | ||||
| 				-- avoided.  If this or the avoid_nodes value | ||||
| 				-- is nil or omitted, this check is skipped. | ||||
| 				-- Avoid using excessively large radii or you | ||||
| 				-- will slow down the map generator. | ||||
| 	rarity = num,		-- how rare should this object be in its | ||||
| 				-- biome? Larger values make objects more | ||||
| 				-- rare, via:  math.random(1,100) > this | ||||
| 	max_count = num,	-- The absolute maximum number of your object | ||||
| 				-- that should be allowed to spawn in a 5x5x5 | ||||
| 				-- mapblock area (80x80x80 nodes).  Defaults | ||||
| 				-- to 5, but be sure you set this to some  | ||||
| 				-- reasonable value depending on your object | ||||
| 				-- and its size if 5 is insufficient. | ||||
| 	seed_diff = num,	-- perlin seed-diff value.  Defaults to 0,  | ||||
| 				-- which causes the function to inherit the | ||||
| 				-- global value of 329. | ||||
| 	neighbors = {table},	-- What ground nodes must be right next to and | ||||
| 				-- at the same elevation as the node to be | ||||
| 				-- spawned on. | ||||
| 	ncount = num,		-- at least this many of the above nodes must | ||||
| 				-- be next to the node to spawn on.  Any value | ||||
| 				-- greater than 8 will probably cause the code | ||||
| 				-- to never spawn anything.  Defaults to 0. | ||||
| 	depth = num,		-- how deep/thick of a layer the spawned-on | ||||
| 				-- node must be.  Typically used for water. | ||||
| 	min_elevation = num,	-- minimum elevation in meters/nodes. | ||||
| 				-- Defaults to -31000 (unlimited). | ||||
| 	max_elevation = num,	-- maximum elevation.  Defaults to +31000 | ||||
| 				-- (unlimited). | ||||
| 	near_nodes = {table},	-- what nodes must be in the general vicinity | ||||
| 				-- of the object being spawned. | ||||
| 	near_nodes_size = num,	-- how wide of a search area to look for  | ||||
| 				-- the nodes in that list. | ||||
| 	near_nodes_vertical = num, -- How high/low of an area to search from | ||||
| 				-- the target node. | ||||
| 	near_nodes_count = num,	-- at least this many of those nodes must be | ||||
| 				-- in the area. | ||||
| 	plantlife_limit = num,	-- The value compared against the generic | ||||
| 				-- "plants can grow here" Perlin noise layer. | ||||
| 				-- Smaller numbers result in more abundant | ||||
| 				-- plants.  Range of -1 to +1, with values in  | ||||
| 				-- the range of about 0 to 0.5 being most | ||||
| 				-- useful.  Defaults to 0.1. | ||||
| 	temp_min = num,		-- coldest allowable temperature for a plant | ||||
| 				-- to spawn (that is, the highest Perlin | ||||
| 				-- temperature map value). | ||||
| 	temp_max = num,		-- warmest allowable temperature to spawn a | ||||
| 				-- plant (lowest Perlin temperature value). | ||||
| 	verticals_list = {table}, -- Same as with the spawn_on_surfaces | ||||
| 				-- function. | ||||
| 	check_air = bool,	-- Flag to tell the mapgen code to check for | ||||
| 				-- air above the spawn target.  Defaults to | ||||
| 				-- true if not explicitly set to false. | ||||
| 	delete_above = bool,	-- Flag to tell the mapgen code to delete the | ||||
| 				-- two nodes directly above the spawn target | ||||
| 				-- just before adding the plant or tree. | ||||
| 				-- Useful when generating in snow biomes. | ||||
| 				-- Defaults to false. | ||||
| 	delete_above_surround = bool, -- Flag to tell the mapgen code to also | ||||
| 				-- delete the four nodes surrounding the above | ||||
| 				-- space, and the four nodes above those, | ||||
| 				-- resulting in a two-node-deep cross-shaped | ||||
| 				-- empty region above the spawn target. | ||||
| 				-- Useful when adding trees to snow biomes. | ||||
| 				-- Defaults to false. | ||||
| 	spawn_replace_node = bool, -- same as with the ABM spawner. | ||||
| 	random_facedir = {table}, -- same as with the ABM spawner. | ||||
| } | ||||
|  | ||||
| Regarding nodes_or_function_or_treedef, this must either be a string naming | ||||
| a node to spawn, a table with a list of nodes to choose from, a table with an | ||||
| L-Systems tree definition, or a function. | ||||
|  | ||||
| If you specified a string, the code will attempt to determine whether that | ||||
| string specifies a valid node name.  If it does, that node will be placed on | ||||
| top of the target position directly (unless one of the other mapgen options | ||||
| directs the code to do otherwise). | ||||
|  | ||||
| If you specified a table and there is no "axiom" field, the code assumes that | ||||
| it is a list of nodes.  Simply name one node per entry in the list, e.g. | ||||
| {"default:junglegrass", "default:dry_shrub"} and so on, for as many nodes as | ||||
| you want to list.  A random node from the list will be chosen each time the | ||||
| code goes to place a node. | ||||
|  | ||||
| If you specified a table, and there *is* an "axiom" field, the code assumes | ||||
| that this table contains an L-Systems tree definition, which will be passed | ||||
| directly to the engine's spawn_tree() function along with the position on | ||||
| which to spawn the tree. | ||||
|  | ||||
| You can also supply a function to be directly executed, which is given the | ||||
| current node position (the usual "pos" table format) as its sole argument.  It | ||||
| will be called in the form: | ||||
|  | ||||
| 	somefunction(pos) | ||||
|  | ||||
|  | ||||
| ===== | ||||
| plantslib:grow_plants(options) | ||||
|  | ||||
| The third function, grow_plants() is used to turn the spawned nodes above | ||||
| into something else over time.  This function has no return value, and accepts | ||||
| a biome definition table as the only parameter.  These are defined like so: | ||||
|  | ||||
| options = { | ||||
| 	grow_plant = "string",	-- Name of the node to be grown into something | ||||
| 				-- else.  This value is passed to the ABM as | ||||
| 				-- the "nodenames" parameter, so it is the | ||||
| 				-- plants themselves that are the ABM trigger, | ||||
| 				-- rather than the ground they spawned on.  A | ||||
| 				-- plant will only grow if the node above it | ||||
| 				-- is air.  Can also be a table, but note that | ||||
| 				-- all nodes referenced therein will be grown | ||||
| 				-- into the same object. | ||||
| 	grow_delay = num,	-- Passed as the ABM "interval" parameter, as | ||||
| 				-- with spawning. | ||||
| 	grow_chance = num,	-- Passed as the ABM "chance" parameter. | ||||
| 	grow_result = "string",	-- Name of the node into which the grow_plant | ||||
| 				-- node(s) should transform when the ABM | ||||
| 				-- executes. | ||||
|  | ||||
| 	---- Everything from here down is optional. | ||||
|  | ||||
| 	dry_early_node = "string", -- This value is ignored except for jungle | ||||
| 				-- grass (a corner case needed by that mod), | ||||
| 				-- where it indicates which node the grass | ||||
| 				-- must be on in order for it to turn from | ||||
| 				-- the short size to "default:dry_shrub" | ||||
| 				-- instead of the medium size. | ||||
| 	grow_nodes = {table},	-- One of these nodes must be under the plant | ||||
| 				-- in order for it to grow at all.  Normally | ||||
| 				-- this should be the same as the list of  | ||||
| 				-- surfaces passed to the spawning ABM as the | ||||
| 				-- "nodenames" parameter.  This is so that the | ||||
| 				-- plant can be manually placed on something | ||||
| 				-- like a flower pot or something without it | ||||
| 				-- growing and eventually dieing.  Defaults to | ||||
| 				-- "default:dirt_with_grass". | ||||
| 	facedir = num,		-- Same as with spawning a plant. | ||||
| 	need_wall = bool,	-- Set this to true if you the plant needs to | ||||
| 				-- grow against a wall.  Defaults to false. | ||||
| 	verticals_list = {table}, -- List of nodes that should be considered | ||||
| 				-- to be wall surfaces when growing the plant | ||||
| 				-- vertically.  If not provided, the walls | ||||
| 				-- check is skipped. | ||||
| 	grow_vertically = bool,	-- Set this to true if the plant needs to grow | ||||
| 				-- vertically, as in climbing poison ivy. | ||||
| 				-- Defaults to false. | ||||
| 	height_limit = num,	-- Set this to limit how tall the desired node | ||||
| 				-- can grow.  The mod will search straight | ||||
| 				-- down from the position being spawned at to | ||||
| 				-- find a ground node, set via the parameter | ||||
| 				-- below. Defaults to 5 nodes. | ||||
| 	ground_nodes = {table},	-- What nodes should be treated as "the | ||||
| 				-- ground" below a vertically-growing plant. | ||||
| 				-- Usually this should be the same as the | ||||
| 				-- grow_nodes table, but might also include, | ||||
| 				-- for example, water or some other | ||||
| 				-- surrounding material.  Defaults to | ||||
| 				-- "default:dirt_with_grass". | ||||
| 	grow_function = something, -- [*] see below. | ||||
| 	seed_diff = num,	-- [*] see below. | ||||
| } | ||||
|  | ||||
| [*] grow_function can take one of three possible settings:  it can be nil (or | ||||
|     not provided), a string, or a table. | ||||
|  | ||||
| If it is not provided or it's set to nil, all of the regular growing code is | ||||
| executed normally, the value of seed_diff, if any, is ignored, and the node to | ||||
| be placed is assumed to be specified in the grow_result variable. | ||||
|  | ||||
| If this value is set to a simple string, this is treated as the name of the | ||||
| function to use to grow the plant.  In this case, all of the usual growing | ||||
| code is executeed, but then instead of a plant being simply added to the | ||||
| world, grow_result is ignored and the named function is executed and passed a | ||||
| few parmeters in the following general form:  | ||||
|  | ||||
| 	somefunction(pos, perlin1, perlin2) | ||||
|  | ||||
| These values represent the current position (the usual table), the Perlin | ||||
| noise value for that spot in the generic "plants can grow here" map for the | ||||
| seed_diff value above, the Perlin value for that same spot from the | ||||
| temperature map, and the detected neighboring wall face, if there was one (or | ||||
| nil if not).  If seed_diff is not provided, it defaults to 0. | ||||
|  | ||||
| If this variable is instead set to a table, it is treated an an L-Systems tree | ||||
| definition.  All of the growing code is executed in the usual manner, then the | ||||
| tree described by that definition is spawned at the current position instead, | ||||
| and grow_result is ignored. | ||||
|  | ||||
|  | ||||
| ===== | ||||
| find_adjacent_wall(pos, verticals) | ||||
|  | ||||
| Of the few helper functions, this one expects a position parameter and a table | ||||
| with the list of nodes that should be considered as walls.  The code will | ||||
| search around the given position for a neighboring wall, returning the first | ||||
| one it finds as a facedir value, or nil if there are no adjacent walls. | ||||
|  | ||||
|  | ||||
| ===== | ||||
| is_node_loaded(pos) | ||||
|  | ||||
| This acts as a wrapper for the minetest.get_node_or_nil(node_pos) | ||||
| function and accepts a single position parameter.  Returns true if the node in | ||||
| question is already loaded, or false if not. | ||||
|  | ||||
|  | ||||
| ===== | ||||
| dbg(string) | ||||
|  | ||||
| This is a simple debug output function which takes one string parameter.  It | ||||
| just checks if DEBUG is true and outputs the phrase "[Plantlife] " followed by | ||||
| the supplied string, via the print() function, if so. | ||||
|  | ||||
| ===== | ||||
| plantslib:generate_tree(pos, treemodel) | ||||
| plantslib:grow_tree(pos, treemodel) | ||||
|  | ||||
| In the case of the growing code and the mapgen-based tree generator code,  | ||||
| generating a tree is done via the above two calls, which in turn immediately | ||||
| call the usual spawn_tree() functions.  This rerouting exists as a way for | ||||
| other mods to hook into plants_lib's tree-growing functions in general, | ||||
| perhaps to execute something extra whenever a tree is spawned. | ||||
|  | ||||
| plantslib:generate_tree(pos, treemodel) is called any time a | ||||
| tree is spawned at map generation time.  'pos' is the position of the block on | ||||
| which the tree is to be placed.  'treemodel' is the standard L-Systems tree | ||||
| definition table expected by the spawn_tree() function.  Refer to the 'trunk' | ||||
| field in that table to derive the name of the tree being spawned. | ||||
|  | ||||
| plantslib:grow_tree(pos, treemodel) does the same sort of thing whenever a  | ||||
| tree is spawned within the abm-based growing code, for example when growing a | ||||
| sapling into a tree. | ||||
|  | ||||
|  | ||||
| ===== | ||||
| There are other, internal helper functions that are not meant for use by other | ||||
| mods.  Don't rely on them, as they are subject to change without notice. | ||||
|  | ||||
|  | ||||
| =============== | ||||
| Global Settings | ||||
| =============== | ||||
|  | ||||
| Set this to true if you want the mod to spam your console with debug info :-) | ||||
|  | ||||
| 	plantlife_debug = false | ||||
|  | ||||
|  | ||||
| ====================== | ||||
| Fertile Ground Mapping | ||||
| ====================== | ||||
|  | ||||
| The mod uses Perlin noise to create "biomes" of the various plants, via the | ||||
| minetest.get_perlin() function.  At present, there are three layers of | ||||
| Perlin noise used. | ||||
|  | ||||
| The first one is for a "fertile ground" layer, which I tend to refer to as the | ||||
| generic "stuff can potentially grow here" layer.  Its values are hard-coded: | ||||
|  | ||||
| 	plantslib.plantlife_seed_diff = 329 | ||||
| 	perlin_octaves = 3 | ||||
| 	perlin_persistence = 0.6 | ||||
| 	perlin_scale = 100 | ||||
|  | ||||
| For more information on how Perlin noise is generated, you will need to search | ||||
| the web, as these default values were from that which is used by minetest_game | ||||
| to spawn jungle grass at mapgen time, and I'm still learning how Perlin noise | ||||
| works.  ;-) | ||||
|  | ||||
|  | ||||
| =================== | ||||
| Temperature Mapping | ||||
| =================== | ||||
|  | ||||
| The second Perlin layer is a temperature map, with values taken from | ||||
| SPlizard's Snow Biomes mod so that the two will be compatible, since that mod | ||||
| appears to be the standard now.  Those values are: | ||||
|  | ||||
| 	temperature_seeddiff = 112 | ||||
| 	temperature_octaves = 3 | ||||
| 	temperature_persistence = 0.5 | ||||
| 	temperature_scale = 150 | ||||
|  | ||||
| The way Perlin values are used by this mod, in keeping with the snow mod's  | ||||
| apparent methods, larger values returned by the Perlin function represent | ||||
| *colder* temperatures.  In this mod, the following table gives a rough | ||||
| approximation of how temperature maps to these values, normalized to | ||||
| 0.53 = 0 °C and +1.0 = -25 °C. | ||||
|  | ||||
| Perlin		Approx. Temperature | ||||
| -1.0		 81 °C	( 178 °F) | ||||
| -0.75		 68 °C	( 155 °F) | ||||
| -0.56		 58 °C	( 136 °F) | ||||
| -0.5		 55 °C	( 131 °F) | ||||
| -0.25		 41 °C	( 107 °F) | ||||
| -0.18		 38 °C	( 100 °F) | ||||
|  0		 28 °C	(  83 °F) | ||||
|  0.13		 21 °C	(  70 °F) | ||||
|  0.25		 15 °C	(  59 °F) | ||||
|  0.5		  2 °C	(  35 °F) | ||||
|  0.53		  0 °C	(  32 °F) | ||||
|  0.75		-12 °C	(  11 °F) | ||||
|  0.86		-18 °C	(   0 °F) | ||||
|  1.0		-25 °C	(- 13 °F) | ||||
|  | ||||
| Included in this table are even 0.25 steps in Perlin values along with some | ||||
| common temperatures on both the Centigrade and Fahrenheit scales.  Note that | ||||
| unless you're trying to model the Moon or perhaps Mercury in your mods/maps,  | ||||
| you probably won't need to bother with Perlin values of less than -0.56 or so. | ||||
|  | ||||
|  | ||||
| ================ | ||||
| Humidity Mapping | ||||
| ================ | ||||
|  | ||||
| Last but not least is a moisture/humidity map.  Like the temperature map | ||||
| above, Perlin values can be tested to determine the approximate humidity of | ||||
| the *air* in the area.  This humidity map is basically the perlin layer used | ||||
| for deserts. | ||||
|  | ||||
| A value of -1.0 is very moist (basically a thick fog, if it could be seen), a | ||||
| value of +0.4 represents the edge of a desert as usually seen in the game, and | ||||
| a value of +1.0 is as dry as a bone. | ||||
|  | ||||
| This does not check for nearby water, just general air humidity, and that | ||||
| being the case, nearby ground does not affect the reported humidity of a | ||||
| region (because this isn't yet possible to calculate yet).  Use the near_nodes | ||||
| and avoid_nodes parameters and their related options to check for water and | ||||
| such. | ||||
|  | ||||
| The Perlin values use for this layer are: | ||||
|  | ||||
| 	humidity_seeddiff = 9130 | ||||
| 	humidity_octaves = 3 | ||||
| 	humidity_persistence = 0.5 | ||||
| 	humidity_scale = 250 | ||||
|  | ||||
| And this particular one is mapped slightly differently from the others: | ||||
|  | ||||
| 	noise3 = perlin3:get2d({x=p_top.x+150, y=p_top.z+50}) | ||||
|  | ||||
| (Note the +150 and +50 offsets) | ||||
|  | ||||
							
								
								
									
										934
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						| @@ -1,603 +1,335 @@ | ||||
| License for code: LGPL 3.0 | ||||
| License for media and all other assets:  CC-by-SA 4.0 | ||||
|  | ||||
| These licenses apply to all modules and components in this modpack, | ||||
| unless otherwise stated. | ||||
| For the code, Ironzorg's textures, and everything else:  WTFPL | ||||
|  | ||||
| For Mossmanikin's mods (Ferns, Dryplans, and the components | ||||
| from the Undergrowth modpack), and all of my own textures:  | ||||
| CC-By-SA 3.0 | ||||
|  | ||||
| ---------- | ||||
|             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | ||||
|                     Version 2, December 2004 | ||||
|  | ||||
|  Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> | ||||
|  | ||||
|  Everyone is permitted to copy and distribute verbatim or modified | ||||
|  copies of this license document, and changing it is allowed as long | ||||
|  as the name is changed. | ||||
|  | ||||
|             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | ||||
|    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||
|  | ||||
|   0. You just DO WHAT THE FUCK YOU WANT TO. | ||||
|  | ||||
|  This license is also known as "WTFPL" | ||||
|  | ||||
| ----------- | ||||
|  | ||||
| THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS  | ||||
| CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS  | ||||
| PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE  | ||||
| WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW  | ||||
| IS PROHIBITED. | ||||
|  | ||||
| BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND  | ||||
| AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS  | ||||
| LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS  | ||||
| YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE  | ||||
| OF SUCH TERMS AND CONDITIONS. | ||||
|  | ||||
| 1. Definitions | ||||
|  | ||||
|     "Collective Work" means a work, such as a periodical issue,  | ||||
| anthology or encyclopedia, in which the Work in its entirety in  | ||||
| unmodified form, along with one or more other contributions,  | ||||
| constituting separate and independent works in themselves, are  | ||||
| assembled into a collective whole. A work that constitutes a  | ||||
| Collective Work will not be considered a Derivative Work (as  | ||||
| defined below) for the purposes of this License. | ||||
|     "Creative Commons Compatible License" means a license that is  | ||||
| listed at http://creativecommons.org/compatiblelicenses that has  | ||||
| been approved by Creative Commons as being essentially equivalent  | ||||
| to this License, including, at a minimum, because that license:  | ||||
| (i) contains terms that have the same purpose, meaning and effect  | ||||
| as the License Elements of this License; and, (ii) explicitly  | ||||
| permits the relicensing of derivatives of works made available  | ||||
| under that license under this License or either a Creative Commons  | ||||
| unported license or a Creative Commons jurisdiction license with  | ||||
| the same License Elements as this License. | ||||
|     "Derivative Work" means a work based upon the Work or upon the  | ||||
| Work and other pre-existing works, such as a translation, musical  | ||||
| arrangement, dramatization, fictionalization, motion picture  | ||||
| version, sound recording, art reproduction, abridgment,  | ||||
| condensation, or any other form in which the Work may be recast,  | ||||
| transformed, or adapted, except that a work that constitutes a  | ||||
| Collective Work will not be considered a Derivative Work for the  | ||||
| purpose of this License. For the avoidance of doubt, where the  | ||||
| Work is a musical composition or sound recording, the  | ||||
| synchronization of the Work in timed-relation with a moving image  | ||||
| ("synching") will be considered a Derivative Work for the purpose  | ||||
| of this License. | ||||
|     "License Elements" means the following high-level license  | ||||
| attributes as selected by Licensor and indicated in the title of  | ||||
| this License: Attribution, ShareAlike. | ||||
|     "Licensor" means the individual, individuals, entity or  | ||||
| entities that offers the Work under the terms of this License. | ||||
|     "Original Author" means the individual, individuals, entity or  | ||||
| entities who created the Work. | ||||
|     "Work" means the copyrightable work of authorship offered  | ||||
| under the terms of this License. | ||||
|     "You" means an individual or entity exercising rights under  | ||||
| this License who has not previously violated the terms of this  | ||||
| License with respect to the Work, or who has received express  | ||||
| permission from the Licensor to exercise rights under this License  | ||||
| despite a previous violation. | ||||
|  | ||||
| 2. Fair Use Rights. Nothing in this license is intended to reduce,  | ||||
| limit, or restrict any rights arising from fair use, first sale or  | ||||
| other limitations on the exclusive rights of the copyright owner  | ||||
| under copyright law or other applicable laws. | ||||
|  | ||||
| 3. License Grant. Subject to the terms and conditions of this  | ||||
| License, Licensor hereby grants You a worldwide, royalty-free,  | ||||
| non-exclusive, perpetual (for the duration of the applicable  | ||||
| copyright) license to exercise the rights in the Work as stated  | ||||
| below: | ||||
|  | ||||
|     to reproduce the Work, to incorporate the Work into one or  | ||||
| more Collective Works, and to reproduce the Work as incorporated  | ||||
| in the Collective Works; | ||||
|     to create and reproduce Derivative Works provided that any  | ||||
| such Derivative Work, including any translation in any medium,  | ||||
| takes reasonable steps to clearly label, demarcate or otherwise  | ||||
| identify that changes were made to the original Work. For example,  | ||||
| a translation could be marked "The original work was translated  | ||||
| from English to Spanish," or a modification could indicate "The  | ||||
| original work has been modified."; | ||||
|     to distribute copies or phonorecords of, display publicly,  | ||||
| perform publicly, and perform publicly by means of a digital audio  | ||||
| transmission the Work including as incorporated in Collective  | ||||
| Works; | ||||
|     to distribute copies or phonorecords of, display publicly,  | ||||
| perform publicly, and perform publicly by means of a digital audio  | ||||
| transmission Derivative Works. | ||||
|  | ||||
|     For the avoidance of doubt, where the Work is a musical  | ||||
| composition: | ||||
|         Performance Royalties Under Blanket Licenses. Licensor  | ||||
| waives the exclusive right to collect, whether individually or, in  | ||||
| the event that Licensor is a member of a performance rights  | ||||
| society (e.g. ASCAP, BMI, SESAC), via that society, royalties for  | ||||
| the public performance or public digital performance (e.g.  | ||||
| webcast) of the Work. | ||||
|         Mechanical Rights and Statutory Royalties. Licensor waives  | ||||
| the exclusive right to collect, whether individually or via a  | ||||
| music rights agency or designated agent (e.g. Harry Fox Agency),  | ||||
| royalties for any phonorecord You create from the Work ("cover  | ||||
| version") and distribute, subject to the compulsory license  | ||||
| created by 17 USC Section 115 of the US Copyright Act (or the  | ||||
| equivalent in other jurisdictions). | ||||
|     Webcasting Rights and Statutory Royalties. For the avoidance  | ||||
| of doubt, where the Work is a sound recording, Licensor waives the  | ||||
| exclusive right to collect, whether individually or via a  | ||||
| performance-rights society (e.g. SoundExchange), royalties for the  | ||||
| public digital performance (e.g. webcast) of the Work, subject to  | ||||
| the compulsory license created by 17 USC Section 114 of the US  | ||||
| Copyright Act (or the equivalent in other jurisdictions). | ||||
|  | ||||
| The above rights may be exercised in all media and formats whether  | ||||
| now known or hereafter devised. The above rights include the right  | ||||
| to make such modifications as are technically necessary to  | ||||
| exercise the rights in other media and formats. All rights not  | ||||
| expressly granted by Licensor are hereby reserved. | ||||
|  | ||||
| 4. Restrictions. The license granted in Section 3 above is  | ||||
| expressly made subject to and limited by the following  | ||||
| restrictions: | ||||
|  | ||||
|     You may distribute, publicly display, publicly perform, or  | ||||
| publicly digitally perform the Work only under the terms of this  | ||||
| License, and You must include a copy of, or the Uniform Resource  | ||||
| Identifier for, this License with every copy or phonorecord of the  | ||||
| Work You distribute, publicly display, publicly perform, or  | ||||
| publicly digitally perform. You may not offer or impose any terms  | ||||
| on the Work that restrict the terms of this License or the ability  | ||||
| of a recipient of the Work to exercise of the rights granted to  | ||||
| that recipient under the terms of the License. You may not  | ||||
| sublicense the Work. You must keep intact all notices that refer  | ||||
| to this License and to the disclaimer of warranties. When You  | ||||
| distribute, publicly display, publicly perform, or publicly  | ||||
| digitally perform the Work, You may not impose any technological  | ||||
| measures on the Work that restrict the ability of a recipient of  | ||||
| the Work from You to exercise of the rights granted to that  | ||||
| recipient under the terms of the License. This Section 4(a)  | ||||
| applies to the Work as incorporated in a Collective Work, but this  | ||||
| does not require the Collective Work apart from the Work itself to  | ||||
| be made subject to the terms of this License. If You create a  | ||||
| Collective Work, upon notice from any Licensor You must, to the  | ||||
| extent practicable, remove from the Collective Work any credit as  | ||||
| required by Section 4(c), as requested. If You create a Derivative  | ||||
| Work, upon notice from any Licensor You must, to the extent  | ||||
| practicable, remove from the Derivative Work any credit as  | ||||
| required by Section 4(c), as requested. | ||||
|     You may distribute, publicly display, publicly perform, or  | ||||
| publicly digitally perform a Derivative Work only under: (i) the  | ||||
| terms of this License; (ii) a later version of this License with  | ||||
| the same License Elements as this License; (iii) either the  | ||||
| Creative Commons (Unported) license or a Creative Commons  | ||||
| jurisdiction license (either this or a later license version) that  | ||||
| contains the same License Elements as this License (e.g.  | ||||
| Attribution-ShareAlike 3.0 (Unported)); (iv) a Creative Commons  | ||||
| Compatible License. If you license the Derivative Work under one  | ||||
| of the licenses mentioned in (iv), you must comply with the terms  | ||||
| of that license. If you license the Derivative Work under the  | ||||
| terms of any of the licenses mentioned in (i), (ii) or (iii) (the  | ||||
| "Applicable License"), you must comply with the terms of the  | ||||
| Applicable License generally and with the following provisions:  | ||||
| (I) You must include a copy of, or the Uniform Resource Identifier  | ||||
| for, the Applicable License with every copy or phonorecord of each  | ||||
| Derivative Work You distribute, publicly display, publicly  | ||||
| perform, or publicly digitally perform; (II) You may not offer or  | ||||
| impose any terms on the Derivative Works that restrict the terms  | ||||
| of the Applicable License or the ability of a recipient of the  | ||||
| Work to exercise the rights granted to that recipient under the  | ||||
| terms of the Applicable License; (III) You must keep intact all  | ||||
| notices that refer to the Applicable License and to the disclaimer  | ||||
| of warranties; and, (IV) when You distribute, publicly display,  | ||||
| publicly perform, or publicly digitally perform the Work, You may  | ||||
| not impose any technological measures on the Derivative Work that  | ||||
| restrict the ability of a recipient of the Derivative Work from  | ||||
| You to exercise the rights granted to that recipient under the  | ||||
| terms of the Applicable License. This Section 4(b) applies to the  | ||||
| Derivative Work as incorporated in a Collective Work, but this  | ||||
| does not require the Collective Work apart from the Derivative  | ||||
| Work itself to be made subject to the terms of the Applicable  | ||||
| License. | ||||
|     If You distribute, publicly display, publicly perform, or  | ||||
| publicly digitally perform the Work (as defined in Section 1  | ||||
| above) or any Derivative Works (as defined in Section 1 above) or  | ||||
| Collective Works (as defined in Section 1 above), You must, unless  | ||||
| a request has been made pursuant to Section 4(a), keep intact all  | ||||
| copyright notices for the Work and provide, reasonable to the  | ||||
| medium or means You are utilizing: (i) the name of the Original  | ||||
| Author (or pseudonym, if applicable) if supplied, and/or (ii) if  | ||||
| the Original Author and/or Licensor designate another party or  | ||||
| parties (e.g. a sponsor institute, publishing entity, journal) for  | ||||
| attribution ("Attribution Parties") in Licensor's copyright  | ||||
| notice, terms of service or by other reasonable means, the name of  | ||||
| such party or parties; the title of the Work if supplied; to the  | ||||
| extent reasonably practicable, the Uniform Resource Identifier, if  | ||||
| any, that Licensor specifies to be associated with the Work,  | ||||
| unless such URI does not refer to the copyright notice or  | ||||
| licensing information for the Work; and, consistent with Section  | ||||
| 3(b) in the case of a Derivative Work, a credit identifying the  | ||||
| use of the Work in the Derivative Work (e.g., "French translation  | ||||
| of the Work by Original Author," or "Screenplay based on original  | ||||
| Work by Original Author"). The credit required by this Section  | ||||
| 4(c) may be implemented in any reasonable manner; provided,  | ||||
| however, that in the case of a Derivative Work or Collective Work,  | ||||
| at a minimum such credit will appear, if a credit for all  | ||||
| contributing authors of the Derivative Work or Collective Work  | ||||
| appears, then as part of these credits and in a manner at least as  | ||||
| prominent as the credits for the other contributing authors. For  | ||||
| the avoidance of doubt, You may only use the credit required by  | ||||
| this Section for the purpose of attribution in the manner set out  | ||||
| above and, by exercising Your rights under this License, You may  | ||||
| not implicitly or explicitly assert or imply any connection with,  | ||||
| sponsorship or endorsement by the Original Author, Licensor and/or  | ||||
| Attribution Parties, as appropriate, of You or Your use of the  | ||||
| Work, without the separate, express prior written permission of  | ||||
| the Original Author, Licensor and/or Attribution Parties. | ||||
|  | ||||
| 5. Representations, Warranties and Disclaimer | ||||
|  | ||||
| UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,  | ||||
| LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY  | ||||
| RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR  | ||||
| MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE  | ||||
| WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT  | ||||
| LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY,  | ||||
| FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE  | ||||
| OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE  | ||||
| OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT  | ||||
| ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY  | ||||
| NOT APPLY TO YOU. | ||||
|  | ||||
| 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY  | ||||
| APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY  | ||||
| LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE  | ||||
| OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE  | ||||
| WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH  | ||||
| DAMAGES. | ||||
|  | ||||
| 7. Termination | ||||
|  | ||||
|     This License and the rights granted hereunder will terminate  | ||||
| automatically upon any breach by You of the terms of this License.  | ||||
| Individuals or entities who have received Derivative Works or  | ||||
| Collective Works from You under this License, however, will not  | ||||
| have their licenses terminated provided such individuals or  | ||||
| entities remain in full compliance with those licenses. Sections  | ||||
| 1, 2, 5, 6, 7, and 8 will survive any termination of this License. | ||||
|     Subject to the above terms and conditions, the license granted  | ||||
| here is perpetual (for the duration of the applicable copyright in  | ||||
| the Work). Notwithstanding the above, Licensor reserves the right  | ||||
| to release the Work under different license terms or to stop  | ||||
| distributing the Work at any time; provided, however that any such  | ||||
| election will not serve to withdraw this License (or any other  | ||||
| license that has been, or is required to be, granted under the  | ||||
| terms of this License), and this License will continue in full  | ||||
| force and effect unless terminated as stated above. | ||||
|  | ||||
| 8. Miscellaneous | ||||
|  | ||||
|     Each time You distribute or publicly digitally perform the  | ||||
| Work (as defined in Section 1 above) or a Collective Work (as  | ||||
| defined in Section 1 above), the Licensor offers to the recipient  | ||||
| a license to the Work on the same terms and conditions as the  | ||||
| license granted to You under this License. | ||||
|     Each time You distribute or publicly digitally perform a  | ||||
| Derivative Work, Licensor offers to the recipient a license to the  | ||||
| original Work on the same terms and conditions as the license  | ||||
| granted to You under this License. | ||||
|     If any provision of this License is invalid or unenforceable  | ||||
| under applicable law, it shall not affect the validity or  | ||||
| enforceability of the remainder of the terms of this License, and  | ||||
| without further action by the parties to this agreement, such  | ||||
| provision shall be reformed to the minimum extent necessary to  | ||||
| make such provision valid and enforceable. | ||||
|     No term or provision of this License shall be deemed waived  | ||||
| and no breach consented to unless such waiver or consent shall be  | ||||
| in writing and signed by the party to be charged with such waiver  | ||||
| or consent. | ||||
|     This License constitutes the entire agreement between the  | ||||
| parties with respect to the Work licensed here. There are no  | ||||
| understandings, agreements or representations with respect to the  | ||||
| Work not specified here. Licensor shall not be bound by any  | ||||
| additional provisions that may appear in any communication from  | ||||
| You. This License may not be modified without the mutual written  | ||||
| agreement of the Licensor and You. | ||||
|  | ||||
|     Creative Commons Notice | ||||
|  | ||||
|     Creative Commons is not a party to this License, and makes no  | ||||
| warranty whatsoever in connection with the Work. Creative Commons  | ||||
| will not be liable to You or any party on any legal theory for any  | ||||
| damages whatsoever, including without limitation any general,  | ||||
| special, incidental or consequential damages arising in connection  | ||||
| to this license. Notwithstanding the foregoing two (2) sentences,  | ||||
| if Creative Commons has expressly identified itself as the  | ||||
| Licensor hereunder, it shall have all rights and obligations of  | ||||
| Licensor. | ||||
|  | ||||
|     Except for the limited purpose of indicating to the public  | ||||
| that the Work is licensed under the CCPL, Creative Commons does  | ||||
| not authorize the use by either party of the trademark "Creative  | ||||
| Commons" or any related trademark or logo of Creative Commons  | ||||
| without the prior written consent of Creative Commons. Any  | ||||
| permitted use will be in compliance with Creative Commons'  | ||||
| then-current trademark usage guidelines, as may be published on  | ||||
| its website or otherwise made available upon request from time to  | ||||
| time. For the avoidance of doubt, this trademark restriction does  | ||||
| not form part of this License. | ||||
|  | ||||
|     Creative Commons may be contacted at  | ||||
| http://creativecommons.org/. | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
|                    GNU LESSER GENERAL PUBLIC LICENSE | ||||
|                        Version 3, 29 June 2007 | ||||
|  | ||||
|  Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
|  | ||||
|  | ||||
|   This version of the GNU Lesser General Public License incorporates | ||||
| the terms and conditions of version 3 of the GNU General Public | ||||
| License, supplemented by the additional permissions listed below. | ||||
|  | ||||
|   0. Additional Definitions. | ||||
|  | ||||
|   As used herein, "this License" refers to version 3 of the GNU Lesser | ||||
| General Public License, and the "GNU GPL" refers to version 3 of the GNU | ||||
| General Public License. | ||||
|  | ||||
|   "The Library" refers to a covered work governed by this License, | ||||
| other than an Application or a Combined Work as defined below. | ||||
|  | ||||
|   An "Application" is any work that makes use of an interface provided | ||||
| by the Library, but which is not otherwise based on the Library. | ||||
| Defining a subclass of a class defined by the Library is deemed a mode | ||||
| of using an interface provided by the Library. | ||||
|  | ||||
|   A "Combined Work" is a work produced by combining or linking an | ||||
| Application with the Library.  The particular version of the Library | ||||
| with which the Combined Work was made is also called the "Linked | ||||
| Version". | ||||
|  | ||||
|   The "Minimal Corresponding Source" for a Combined Work means the | ||||
| Corresponding Source for the Combined Work, excluding any source code | ||||
| for portions of the Combined Work that, considered in isolation, are | ||||
| based on the Application, and not on the Linked Version. | ||||
|  | ||||
|   The "Corresponding Application Code" for a Combined Work means the | ||||
| object code and/or source code for the Application, including any data | ||||
| and utility programs needed for reproducing the Combined Work from the | ||||
| Application, but excluding the System Libraries of the Combined Work. | ||||
|  | ||||
|   1. Exception to Section 3 of the GNU GPL. | ||||
|  | ||||
|   You may convey a covered work under sections 3 and 4 of this License | ||||
| without being bound by section 3 of the GNU GPL. | ||||
|  | ||||
|   2. Conveying Modified Versions. | ||||
|  | ||||
|   If you modify a copy of the Library, and, in your modifications, a | ||||
| facility refers to a function or data to be supplied by an Application | ||||
| that uses the facility (other than as an argument passed when the | ||||
| facility is invoked), then you may convey a copy of the modified | ||||
| version: | ||||
|  | ||||
|    a) under this License, provided that you make a good faith effort to | ||||
|    ensure that, in the event an Application does not supply the | ||||
|    function or data, the facility still operates, and performs | ||||
|    whatever part of its purpose remains meaningful, or | ||||
|  | ||||
|    b) under the GNU GPL, with none of the additional permissions of | ||||
|    this License applicable to that copy. | ||||
|  | ||||
|   3. Object Code Incorporating Material from Library Header Files. | ||||
|  | ||||
|   The object code form of an Application may incorporate material from | ||||
| a header file that is part of the Library.  You may convey such object | ||||
| code under terms of your choice, provided that, if the incorporated | ||||
| material is not limited to numerical parameters, data structure | ||||
| layouts and accessors, or small macros, inline functions and templates | ||||
| (ten or fewer lines in length), you do both of the following: | ||||
|  | ||||
|    a) Give prominent notice with each copy of the object code that the | ||||
|    Library is used in it and that the Library and its use are | ||||
|    covered by this License. | ||||
|  | ||||
|    b) Accompany the object code with a copy of the GNU GPL and this license | ||||
|    document. | ||||
|  | ||||
|   4. Combined Works. | ||||
|  | ||||
|   You may convey a Combined Work under terms of your choice that, | ||||
| taken together, effectively do not restrict modification of the | ||||
| portions of the Library contained in the Combined Work and reverse | ||||
| engineering for debugging such modifications, if you also do each of | ||||
| the following: | ||||
|  | ||||
|    a) Give prominent notice with each copy of the Combined Work that | ||||
|    the Library is used in it and that the Library and its use are | ||||
|    covered by this License. | ||||
|  | ||||
|    b) Accompany the Combined Work with a copy of the GNU GPL and this license | ||||
|    document. | ||||
|  | ||||
|    c) For a Combined Work that displays copyright notices during | ||||
|    execution, include the copyright notice for the Library among | ||||
|    these notices, as well as a reference directing the user to the | ||||
|    copies of the GNU GPL and this license document. | ||||
|  | ||||
|    d) Do one of the following: | ||||
|  | ||||
|        0) Convey the Minimal Corresponding Source under the terms of this | ||||
|        License, and the Corresponding Application Code in a form | ||||
|        suitable for, and under terms that permit, the user to | ||||
|        recombine or relink the Application with a modified version of | ||||
|        the Linked Version to produce a modified Combined Work, in the | ||||
|        manner specified by section 6 of the GNU GPL for conveying | ||||
|        Corresponding Source. | ||||
|  | ||||
|        1) Use a suitable shared library mechanism for linking with the | ||||
|        Library.  A suitable mechanism is one that (a) uses at run time | ||||
|        a copy of the Library already present on the user's computer | ||||
|        system, and (b) will operate properly with a modified version | ||||
|        of the Library that is interface-compatible with the Linked | ||||
|        Version. | ||||
|  | ||||
|    e) Provide Installation Information, but only if you would otherwise | ||||
|    be required to provide such information under section 6 of the | ||||
|    GNU GPL, and only to the extent that such information is | ||||
|    necessary to install and execute a modified version of the | ||||
|    Combined Work produced by recombining or relinking the | ||||
|    Application with a modified version of the Linked Version. (If | ||||
|    you use option 4d0, the Installation Information must accompany | ||||
|    the Minimal Corresponding Source and Corresponding Application | ||||
|    Code. If you use option 4d1, you must provide the Installation | ||||
|    Information in the manner specified by section 6 of the GNU GPL | ||||
|    for conveying Corresponding Source.) | ||||
|  | ||||
|   5. Combined Libraries. | ||||
|  | ||||
|   You may place library facilities that are a work based on the | ||||
| Library side by side in a single library together with other library | ||||
| facilities that are not Applications and are not covered by this | ||||
| License, and convey such a combined library under terms of your | ||||
| choice, if you do both of the following: | ||||
|  | ||||
|    a) Accompany the combined library with a copy of the same work based | ||||
|    on the Library, uncombined with any other library facilities, | ||||
|    conveyed under the terms of this License. | ||||
|  | ||||
|    b) Give prominent notice with the combined library that part of it | ||||
|    is a work based on the Library, and explaining where to find the | ||||
|    accompanying uncombined form of the same work. | ||||
|  | ||||
|   6. Revised Versions of the GNU Lesser General Public License. | ||||
|  | ||||
|   The Free Software Foundation may publish revised and/or new versions | ||||
| of the GNU Lesser General Public License from time to time. Such new | ||||
| versions will be similar in spirit to the present version, but may | ||||
| differ in detail to address new problems or concerns. | ||||
|  | ||||
|   Each version is given a distinguishing version number. If the | ||||
| Library as you received it specifies that a certain numbered version | ||||
| of the GNU Lesser General Public License "or any later version" | ||||
| applies to it, you have the option of following the terms and | ||||
| conditions either of that published version or of any later version | ||||
| published by the Free Software Foundation. If the Library as you | ||||
| received it does not specify a version number of the GNU Lesser | ||||
| General Public License, you may choose any version of the GNU Lesser | ||||
| General Public License ever published by the Free Software Foundation. | ||||
|  | ||||
|   If the Library as you received it specifies that a proxy can decide | ||||
| whether future versions of the GNU Lesser General Public License shall | ||||
| apply, that proxy's public statement of acceptance of any version is | ||||
| permanent authorization for you to choose that version for the | ||||
| Library. | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| Attribution-ShareAlike 4.0 International | ||||
|  | ||||
| ======================================================================= | ||||
|  | ||||
| Creative Commons Corporation ("Creative Commons") is not a law firm and | ||||
| does not provide legal services or legal advice. Distribution of | ||||
| Creative Commons public licenses does not create a lawyer-client or | ||||
| other relationship. Creative Commons makes its licenses and related | ||||
| information available on an "as-is" basis. Creative Commons gives no | ||||
| warranties regarding its licenses, any material licensed under their | ||||
| terms and conditions, or any related information. Creative Commons | ||||
| disclaims all liability for damages resulting from their use to the | ||||
| fullest extent possible. | ||||
|  | ||||
| Using Creative Commons Public Licenses | ||||
|  | ||||
| Creative Commons public licenses provide a standard set of terms and | ||||
| conditions that creators and other rights holders may use to share | ||||
| original works of authorship and other material subject to copyright | ||||
| and certain other rights specified in the public license below. The | ||||
| following considerations are for informational purposes only, are not | ||||
| exhaustive, and do not form part of our licenses. | ||||
|  | ||||
|      Considerations for licensors: Our public licenses are | ||||
|      intended for use by those authorized to give the public | ||||
|      permission to use material in ways otherwise restricted by | ||||
|      copyright and certain other rights. Our licenses are | ||||
|      irrevocable. Licensors should read and understand the terms | ||||
|      and conditions of the license they choose before applying it. | ||||
|      Licensors should also secure all rights necessary before | ||||
|      applying our licenses so that the public can reuse the | ||||
|      material as expected. Licensors should clearly mark any | ||||
|      material not subject to the license. This includes other CC- | ||||
|      licensed material, or material used under an exception or | ||||
|      limitation to copyright. More considerations for licensors: | ||||
| 	wiki.creativecommons.org/Considerations_for_licensors | ||||
|  | ||||
|      Considerations for the public: By using one of our public | ||||
|      licenses, a licensor grants the public permission to use the | ||||
|      licensed material under specified terms and conditions. If | ||||
|      the licensor's permission is not necessary for any reason--for | ||||
|      example, because of any applicable exception or limitation to | ||||
|      copyright--then that use is not regulated by the license. Our | ||||
|      licenses grant only permissions under copyright and certain | ||||
|      other rights that a licensor has authority to grant. Use of | ||||
|      the licensed material may still be restricted for other | ||||
|      reasons, including because others have copyright or other | ||||
|      rights in the material. A licensor may make special requests, | ||||
|      such as asking that all changes be marked or described. | ||||
|      Although not required by our licenses, you are encouraged to | ||||
|      respect those requests where reasonable. More considerations | ||||
|      for the public:  | ||||
| 	wiki.creativecommons.org/Considerations_for_licensees | ||||
|  | ||||
| ======================================================================= | ||||
|  | ||||
| Creative Commons Attribution-ShareAlike 4.0 International Public | ||||
| License | ||||
|  | ||||
| By exercising the Licensed Rights (defined below), You accept and agree | ||||
| to be bound by the terms and conditions of this Creative Commons | ||||
| Attribution-ShareAlike 4.0 International Public License ("Public | ||||
| License"). To the extent this Public License may be interpreted as a | ||||
| contract, You are granted the Licensed Rights in consideration of Your | ||||
| acceptance of these terms and conditions, and the Licensor grants You | ||||
| such rights in consideration of benefits the Licensor receives from | ||||
| making the Licensed Material available under these terms and | ||||
| conditions. | ||||
|  | ||||
|  | ||||
| Section 1 -- Definitions. | ||||
|  | ||||
|   a. Adapted Material means material subject to Copyright and Similar | ||||
|      Rights that is derived from or based upon the Licensed Material | ||||
|      and in which the Licensed Material is translated, altered, | ||||
|      arranged, transformed, or otherwise modified in a manner requiring | ||||
|      permission under the Copyright and Similar Rights held by the | ||||
|      Licensor. For purposes of this Public License, where the Licensed | ||||
|      Material is a musical work, performance, or sound recording, | ||||
|      Adapted Material is always produced where the Licensed Material is | ||||
|      synched in timed relation with a moving image. | ||||
|  | ||||
|   b. Adapter's License means the license You apply to Your Copyright | ||||
|      and Similar Rights in Your contributions to Adapted Material in | ||||
|      accordance with the terms and conditions of this Public License. | ||||
|  | ||||
|   c. BY-SA Compatible License means a license listed at | ||||
|      creativecommons.org/compatiblelicenses, approved by Creative | ||||
|      Commons as essentially the equivalent of this Public License. | ||||
|  | ||||
|   d. Copyright and Similar Rights means copyright and/or similar rights | ||||
|      closely related to copyright including, without limitation, | ||||
|      performance, broadcast, sound recording, and Sui Generis Database | ||||
|      Rights, without regard to how the rights are labeled or | ||||
|      categorized. For purposes of this Public License, the rights | ||||
|      specified in Section 2(b)(1)-(2) are not Copyright and Similar | ||||
|      Rights. | ||||
|  | ||||
|   e. Effective Technological Measures means those measures that, in the | ||||
|      absence of proper authority, may not be circumvented under laws | ||||
|      fulfilling obligations under Article 11 of the WIPO Copyright | ||||
|      Treaty adopted on December 20, 1996, and/or similar international | ||||
|      agreements. | ||||
|  | ||||
|   f. Exceptions and Limitations means fair use, fair dealing, and/or | ||||
|      any other exception or limitation to Copyright and Similar Rights | ||||
|      that applies to Your use of the Licensed Material. | ||||
|  | ||||
|   g. License Elements means the license attributes listed in the name | ||||
|      of a Creative Commons Public License. The License Elements of this | ||||
|      Public License are Attribution and ShareAlike. | ||||
|  | ||||
|   h. Licensed Material means the artistic or literary work, database, | ||||
|      or other material to which the Licensor applied this Public | ||||
|      License. | ||||
|  | ||||
|   i. Licensed Rights means the rights granted to You subject to the | ||||
|      terms and conditions of this Public License, which are limited to | ||||
|      all Copyright and Similar Rights that apply to Your use of the | ||||
|      Licensed Material and that the Licensor has authority to license. | ||||
|  | ||||
|   j. Licensor means the individual(s) or entity(ies) granting rights | ||||
|      under this Public License. | ||||
|  | ||||
|   k. Share means to provide material to the public by any means or | ||||
|      process that requires permission under the Licensed Rights, such | ||||
|      as reproduction, public display, public performance, distribution, | ||||
|      dissemination, communication, or importation, and to make material | ||||
|      available to the public including in ways that members of the | ||||
|      public may access the material from a place and at a time | ||||
|      individually chosen by them. | ||||
|  | ||||
|   l. Sui Generis Database Rights means rights other than copyright | ||||
|      resulting from Directive 96/9/EC of the European Parliament and of | ||||
|      the Council of 11 March 1996 on the legal protection of databases, | ||||
|      as amended and/or succeeded, as well as other essentially | ||||
|      equivalent rights anywhere in the world. | ||||
|  | ||||
|   m. You means the individual or entity exercising the Licensed Rights | ||||
|      under this Public License. Your has a corresponding meaning. | ||||
|  | ||||
|  | ||||
| Section 2 -- Scope. | ||||
|  | ||||
|   a. License grant. | ||||
|  | ||||
|        1. Subject to the terms and conditions of this Public License, | ||||
|           the Licensor hereby grants You a worldwide, royalty-free, | ||||
|           non-sublicensable, non-exclusive, irrevocable license to | ||||
|           exercise the Licensed Rights in the Licensed Material to: | ||||
|  | ||||
|             a. reproduce and Share the Licensed Material, in whole or | ||||
|                in part; and | ||||
|  | ||||
|             b. produce, reproduce, and Share Adapted Material. | ||||
|  | ||||
|        2. Exceptions and Limitations. For the avoidance of doubt, where | ||||
|           Exceptions and Limitations apply to Your use, this Public | ||||
|           License does not apply, and You do not need to comply with | ||||
|           its terms and conditions. | ||||
|  | ||||
|        3. Term. The term of this Public License is specified in Section | ||||
|           6(a). | ||||
|  | ||||
|        4. Media and formats; technical modifications allowed. The | ||||
|           Licensor authorizes You to exercise the Licensed Rights in | ||||
|           all media and formats whether now known or hereafter created, | ||||
|           and to make technical modifications necessary to do so. The | ||||
|           Licensor waives and/or agrees not to assert any right or | ||||
|           authority to forbid You from making technical modifications | ||||
|           necessary to exercise the Licensed Rights, including | ||||
|           technical modifications necessary to circumvent Effective | ||||
|           Technological Measures. For purposes of this Public License, | ||||
|           simply making modifications authorized by this Section 2(a) | ||||
|           (4) never produces Adapted Material. | ||||
|  | ||||
|        5. Downstream recipients. | ||||
|  | ||||
|             a. Offer from the Licensor -- Licensed Material. Every | ||||
|                recipient of the Licensed Material automatically | ||||
|                receives an offer from the Licensor to exercise the | ||||
|                Licensed Rights under the terms and conditions of this | ||||
|                Public License. | ||||
|  | ||||
|             b. Additional offer from the Licensor -- Adapted Material. | ||||
|                Every recipient of Adapted Material from You | ||||
|                automatically receives an offer from the Licensor to | ||||
|                exercise the Licensed Rights in the Adapted Material | ||||
|                under the conditions of the Adapter's License You apply. | ||||
|  | ||||
|             c. No downstream restrictions. You may not offer or impose | ||||
|                any additional or different terms or conditions on, or | ||||
|                apply any Effective Technological Measures to, the | ||||
|                Licensed Material if doing so restricts exercise of the | ||||
|                Licensed Rights by any recipient of the Licensed | ||||
|                Material. | ||||
|  | ||||
|        6. No endorsement. Nothing in this Public License constitutes or | ||||
|           may be construed as permission to assert or imply that You | ||||
|           are, or that Your use of the Licensed Material is, connected | ||||
|           with, or sponsored, endorsed, or granted official status by, | ||||
|           the Licensor or others designated to receive attribution as | ||||
|           provided in Section 3(a)(1)(A)(i). | ||||
|  | ||||
|   b. Other rights. | ||||
|  | ||||
|        1. Moral rights, such as the right of integrity, are not | ||||
|           licensed under this Public License, nor are publicity, | ||||
|           privacy, and/or other similar personality rights; however, to | ||||
|           the extent possible, the Licensor waives and/or agrees not to | ||||
|           assert any such rights held by the Licensor to the limited | ||||
|           extent necessary to allow You to exercise the Licensed | ||||
|           Rights, but not otherwise. | ||||
|  | ||||
|        2. Patent and trademark rights are not licensed under this | ||||
|           Public License. | ||||
|  | ||||
|        3. To the extent possible, the Licensor waives any right to | ||||
|           collect royalties from You for the exercise of the Licensed | ||||
|           Rights, whether directly or through a collecting society | ||||
|           under any voluntary or waivable statutory or compulsory | ||||
|           licensing scheme. In all other cases the Licensor expressly | ||||
|           reserves any right to collect such royalties. | ||||
|  | ||||
|  | ||||
| Section 3 -- License Conditions. | ||||
|  | ||||
| Your exercise of the Licensed Rights is expressly made subject to the | ||||
| following conditions. | ||||
|  | ||||
|   a. Attribution. | ||||
|  | ||||
|        1. If You Share the Licensed Material (including in modified | ||||
|           form), You must: | ||||
|  | ||||
|             a. retain the following if it is supplied by the Licensor | ||||
|                with the Licensed Material: | ||||
|  | ||||
|                  i. identification of the creator(s) of the Licensed | ||||
|                     Material and any others designated to receive | ||||
|                     attribution, in any reasonable manner requested by | ||||
|                     the Licensor (including by pseudonym if | ||||
|                     designated); | ||||
|  | ||||
|                 ii. a copyright notice; | ||||
|  | ||||
|                iii. a notice that refers to this Public License; | ||||
|  | ||||
|                 iv. a notice that refers to the disclaimer of | ||||
|                     warranties; | ||||
|  | ||||
|                  v. a URI or hyperlink to the Licensed Material to the | ||||
|                     extent reasonably practicable; | ||||
|  | ||||
|             b. indicate if You modified the Licensed Material and | ||||
|                retain an indication of any previous modifications; and | ||||
|  | ||||
|             c. indicate the Licensed Material is licensed under this | ||||
|                Public License, and include the text of, or the URI or | ||||
|                hyperlink to, this Public License. | ||||
|  | ||||
|        2. You may satisfy the conditions in Section 3(a)(1) in any | ||||
|           reasonable manner based on the medium, means, and context in | ||||
|           which You Share the Licensed Material. For example, it may be | ||||
|           reasonable to satisfy the conditions by providing a URI or | ||||
|           hyperlink to a resource that includes the required | ||||
|           information. | ||||
|  | ||||
|        3. If requested by the Licensor, You must remove any of the | ||||
|           information required by Section 3(a)(1)(A) to the extent | ||||
|           reasonably practicable. | ||||
|  | ||||
|   b. ShareAlike. | ||||
|  | ||||
|      In addition to the conditions in Section 3(a), if You Share | ||||
|      Adapted Material You produce, the following conditions also apply. | ||||
|  | ||||
|        1. The Adapter's License You apply must be a Creative Commons | ||||
|           license with the same License Elements, this version or | ||||
|           later, or a BY-SA Compatible License. | ||||
|  | ||||
|        2. You must include the text of, or the URI or hyperlink to, the | ||||
|           Adapter's License You apply. You may satisfy this condition | ||||
|           in any reasonable manner based on the medium, means, and | ||||
|           context in which You Share Adapted Material. | ||||
|  | ||||
|        3. You may not offer or impose any additional or different terms | ||||
|           or conditions on, or apply any Effective Technological | ||||
|           Measures to, Adapted Material that restrict exercise of the | ||||
|           rights granted under the Adapter's License You apply. | ||||
|  | ||||
|  | ||||
| Section 4 -- Sui Generis Database Rights. | ||||
|  | ||||
| Where the Licensed Rights include Sui Generis Database Rights that | ||||
| apply to Your use of the Licensed Material: | ||||
|  | ||||
|   a. for the avoidance of doubt, Section 2(a)(1) grants You the right | ||||
|      to extract, reuse, reproduce, and Share all or a substantial | ||||
|      portion of the contents of the database; | ||||
|  | ||||
|   b. if You include all or a substantial portion of the database | ||||
|      contents in a database in which You have Sui Generis Database | ||||
|      Rights, then the database in which You have Sui Generis Database | ||||
|      Rights (but not its individual contents) is Adapted Material, | ||||
|  | ||||
|      including for purposes of Section 3(b); and | ||||
|   c. You must comply with the conditions in Section 3(a) if You Share | ||||
|      all or a substantial portion of the contents of the database. | ||||
|  | ||||
| For the avoidance of doubt, this Section 4 supplements and does not | ||||
| replace Your obligations under this Public License where the Licensed | ||||
| Rights include other Copyright and Similar Rights. | ||||
|  | ||||
|  | ||||
| Section 5 -- Disclaimer of Warranties and Limitation of Liability. | ||||
|  | ||||
|   a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE | ||||
|      EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS | ||||
|      AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF | ||||
|      ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, | ||||
|      IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, | ||||
|      WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR | ||||
|      PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, | ||||
|      ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT | ||||
|      KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT | ||||
|      ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. | ||||
|  | ||||
|   b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE | ||||
|      TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, | ||||
|      NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, | ||||
|      INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, | ||||
|      COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR | ||||
|      USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN | ||||
|      ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR | ||||
|      DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR | ||||
|      IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. | ||||
|  | ||||
|   c. The disclaimer of warranties and limitation of liability provided | ||||
|      above shall be interpreted in a manner that, to the extent | ||||
|      possible, most closely approximates an absolute disclaimer and | ||||
|      waiver of all liability. | ||||
|  | ||||
|  | ||||
| Section 6 -- Term and Termination. | ||||
|  | ||||
|   a. This Public License applies for the term of the Copyright and | ||||
|      Similar Rights licensed here. However, if You fail to comply with | ||||
|      this Public License, then Your rights under this Public License | ||||
|      terminate automatically. | ||||
|  | ||||
|   b. Where Your right to use the Licensed Material has terminated under | ||||
|      Section 6(a), it reinstates: | ||||
|  | ||||
|        1. automatically as of the date the violation is cured, provided | ||||
|           it is cured within 30 days of Your discovery of the | ||||
|           violation; or | ||||
|  | ||||
|        2. upon express reinstatement by the Licensor. | ||||
|  | ||||
|      For the avoidance of doubt, this Section 6(b) does not affect any | ||||
|      right the Licensor may have to seek remedies for Your violations | ||||
|      of this Public License. | ||||
|  | ||||
|   c. For the avoidance of doubt, the Licensor may also offer the | ||||
|      Licensed Material under separate terms or conditions or stop | ||||
|      distributing the Licensed Material at any time; however, doing so | ||||
|      will not terminate this Public License. | ||||
|  | ||||
|   d. Sections 1, 5, 6, 7, and 8 survive termination of this Public | ||||
|      License. | ||||
|  | ||||
|  | ||||
| Section 7 -- Other Terms and Conditions. | ||||
|  | ||||
|   a. The Licensor shall not be bound by any additional or different | ||||
|      terms or conditions communicated by You unless expressly agreed. | ||||
|  | ||||
|   b. Any arrangements, understandings, or agreements regarding the | ||||
|      Licensed Material not stated herein are separate from and | ||||
|      independent of the terms and conditions of this Public License. | ||||
|  | ||||
|  | ||||
| Section 8 -- Interpretation. | ||||
|  | ||||
|   a. For the avoidance of doubt, this Public License does not, and | ||||
|      shall not be interpreted to, reduce, limit, restrict, or impose | ||||
|      conditions on any use of the Licensed Material that could lawfully | ||||
|      be made without permission under this Public License. | ||||
|  | ||||
|   b. To the extent possible, if any provision of this Public License is | ||||
|      deemed unenforceable, it shall be automatically reformed to the | ||||
|      minimum extent necessary to make it enforceable. If the provision | ||||
|      cannot be reformed, it shall be severed from this Public License | ||||
|      without affecting the enforceability of the remaining terms and | ||||
|      conditions. | ||||
|  | ||||
|   c. No term or condition of this Public License will be waived and no | ||||
|      failure to comply consented to unless expressly agreed to by the | ||||
|      Licensor. | ||||
|  | ||||
|   d. Nothing in this Public License constitutes or may be interpreted | ||||
|      as a limitation upon, or waiver of, any privileges and immunities | ||||
|      that apply to the Licensor or You, including from the legal | ||||
|      processes of any jurisdiction or authority. | ||||
|  | ||||
|  | ||||
| ======================================================================= | ||||
|  | ||||
| Creative Commons is not a party to its public | ||||
| licenses. Notwithstanding, Creative Commons may elect to apply one of | ||||
| its public licenses to material it publishes and in those instances | ||||
| will be considered the “Licensor.” The text of the Creative Commons | ||||
| public licenses is dedicated to the public domain under the CC0 Public | ||||
| Domain Dedication. Except for the limited purpose of indicating that | ||||
| material is shared under a Creative Commons public license or as | ||||
| otherwise permitted by the Creative Commons policies published at | ||||
| creativecommons.org/policies, Creative Commons does not authorize the | ||||
| use of the trademark "Creative Commons" or any other trademark or logo | ||||
| of Creative Commons without its prior written consent including, | ||||
| without limitation, in connection with any unauthorized modifications | ||||
| to any of its public licenses or any other arrangements, | ||||
| understandings, or agreements concerning use of licensed material. For | ||||
| the avoidance of doubt, this paragraph does not form part of the | ||||
| public licenses. | ||||
|  | ||||
| Creative Commons may be contacted at creativecommons.org. | ||||
|   | ||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						| @@ -22,7 +22,7 @@ that is necessary for them to spawn on, so they won't grow if placed on e.g. | ||||
| cobble or homedecor flower pot, etc.  This doesn't affect wall-climbing poison | ||||
| ivy, since it uses a different growth pattern. | ||||
|  | ||||
| All plants use multiple controls provided by biome_lib, to keep where they | ||||
| All plants use multiple controls provided by plants_lib, to keep where they | ||||
| grow under control - no more random spread of plants!  In addition, the density | ||||
| of the plants in any region they appear in has been fixed and brought under | ||||
| control. | ||||
| @@ -47,7 +47,7 @@ either as previously supplied with this modpack, or in its standalone form, | ||||
| you'll want to delete the "junglegrass" directory from this modpack to get rid | ||||
| of the aliases-to-air that it supplies. | ||||
|  | ||||
| Software Requirements: This mod requires Minetest 0.4.11 or later.  It is  | ||||
| Software Requirements: This mod requires Minetest 0.4.9 or later.  It is  | ||||
| unlikely to work with old versions. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
|   | ||||
							
								
								
									
										3
									
								
								along_shore/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| default | ||||
| plants_lib | ||||
| flowers_plus? | ||||
| @@ -1,6 +1,6 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| local title		= "Along the Shore" | ||||
| local version	= "0.0.4" | ||||
| local version 	= "0.0.4" | ||||
| local mname		= "along_shore" | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
|   | ||||
| @@ -1,3 +0,0 @@ | ||||
| name = along_shore | ||||
| depends = default, biome_lib | ||||
| optional_depends = flowers_plus | ||||
| Before Width: | Height: | Size: 234 B After Width: | Height: | Size: 377 B | 
| Before Width: | Height: | Size: 439 B After Width: | Height: | Size: 589 B | 
| Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 462 B | 
| Before Width: | Height: | Size: 74 B After Width: | Height: | Size: 153 B | 
| Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 499 B | 
| Before Width: | Height: | Size: 382 B After Width: | Height: | Size: 568 B | 
| Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 509 B | 
| Before Width: | Height: | Size: 209 B After Width: | Height: | Size: 347 B | 
| Before Width: | Height: | Size: 543 B After Width: | Height: | Size: 703 B | 
| Before Width: | Height: | Size: 222 B After Width: | Height: | Size: 358 B | 
| Before Width: | Height: | Size: 224 B After Width: | Height: | Size: 364 B | 
| Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 383 B | 
| Before Width: | Height: | Size: 178 B After Width: | Height: | Size: 301 B | 
| Before Width: | Height: | Size: 222 B After Width: | Height: | Size: 358 B | 
| Before Width: | Height: | Size: 404 B After Width: | Height: | Size: 491 B | 
| Before Width: | Height: | Size: 429 B After Width: | Height: | Size: 519 B | 
| Before Width: | Height: | Size: 424 B After Width: | Height: | Size: 507 B | 
| Before Width: | Height: | Size: 427 B After Width: | Height: | Size: 512 B | 
| Before Width: | Height: | Size: 308 B After Width: | Height: | Size: 460 B | 
| Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 556 B | 
| Before Width: | Height: | Size: 543 B After Width: | Height: | Size: 703 B | 
							
								
								
									
										2
									
								
								bushes/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | ||||
| default | ||||
| plants_lib | ||||
							
								
								
									
										124
									
								
								bushes/init.lua
									
									
									
									
									
								
							
							
						
						| @@ -1,21 +1,18 @@ | ||||
| -- Bushes Mod by Mossmanikin, Evergreen, & Neuromancer | ||||
| -- The initial code for this was taken from Mossmanikin's Grasses Mod, | ||||
| -- then heavilly modified by Neuromancer for this mod. | ||||
| -- The initial code for this was taken from Mossmanikin's Grasses Mod, then heavilly modified by Neuromancer for this mod. | ||||
| -- Mossmanikin also greatly helped with providing samples for coding. | ||||
| -- bush leaf textures are from VannessaE's moretrees mod. | ||||
| -- (Leaf texture created by RealBadAngel or VanessaE) | ||||
| -- bush leaf textures are cc-by-sa 3.0.  from VannessaE's moretrees mod.  (Leaf texture created by RealBadAngel or VanessaE) | ||||
| -- Branch textures created by Neuromancer. | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("bushes") | ||||
|   abstract_bushes = {} | ||||
| -- Licence for Code and Non-Bush leaf code is WTFPL. | ||||
|   | ||||
|   abstract_bushes = {}  | ||||
|  | ||||
|   minetest.register_node("bushes:youngtree2_bottom", { | ||||
| 	description = S("Young Tree 2 (bottom)"), | ||||
| 	description = "Young Tree 2 (bottom)",  | ||||
|  drawtype="nodebox", | ||||
|  tiles = {"bushes_youngtree2trunk.png"}, | ||||
| 	inventory_image = "bushes_youngtree2trunk_inv.png", | ||||
| 	wield_image = "bushes_youngtree2trunk_inv.png", | ||||
|  	inventory_image = "bushes_youngtree2trunk_inv.png", | ||||
| 	wield_image = "bushes_youngtree2trunk_inv.png",  | ||||
| paramtype = "light", | ||||
| 	walkable = false, | ||||
| 	is_ground_content = true, | ||||
| @@ -30,13 +27,13 @@ node_box = { | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	drop = 'default:stick' | ||||
| }) | ||||
|  | ||||
|   local BushBranchCenter			= { {1,1}, {3,2} } | ||||
|    | ||||
|   local BushBranchCenter 			= { {1,1}, {3,2} } | ||||
| for i in pairs(BushBranchCenter) do | ||||
| 	local Num		= BushBranchCenter[i][1] | ||||
| 	local TexNum	= BushBranchCenter[i][2] | ||||
| 	local Num 		= BushBranchCenter[i][1] | ||||
| 	local TexNum 	= BushBranchCenter[i][2] | ||||
| 	minetest.register_node("bushes:bushbranches"..Num, { | ||||
| 		description = S("Bush Branches @1", Num), | ||||
| 		description = "Bush Branches "..Num, | ||||
| 		drawtype = "nodebox", | ||||
| 		tiles = { | ||||
| 			"bushes_leaves_"..TexNum..".png", | ||||
| @@ -59,8 +56,8 @@ for i in pairs(BushBranchCenter) do | ||||
| 				sunlight_propagates = true, | ||||
| 		groups = { | ||||
| 		--	tree=1, -- MM: disabled because some recipes use group:tree for trunks | ||||
| 			snappy=3, | ||||
| 			flammable=2, | ||||
| 			snappy=3,  | ||||
| 			flammable=2,  | ||||
| 			leaves=1 | ||||
| 		}, | ||||
| 		sounds = default.node_sound_leaves_defaults(), | ||||
| @@ -68,20 +65,20 @@ for i in pairs(BushBranchCenter) do | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| local BushBranchSide			= { {2,1}, {4,2} } | ||||
| local BushBranchSide 			= { {2,1}, {4,2} } | ||||
| for i in pairs(BushBranchSide) do | ||||
| 	local Num		= BushBranchSide[i][1] | ||||
| 	local TexNum	= BushBranchSide[i][2] | ||||
| 	local Num 		= BushBranchSide[i][1] | ||||
| 	local TexNum 	= BushBranchSide[i][2] | ||||
| 	minetest.register_node("bushes:bushbranches"..Num, { | ||||
| 		description = S("Bush Branches @1", Num), | ||||
| 		description = "Bush Branches "..Num, | ||||
| 		drawtype = "nodebox", | ||||
| 		tiles = { | ||||
| --[[top]]	"bushes_leaves_"..TexNum..".png", | ||||
| --[[top]] 	"bushes_leaves_"..TexNum..".png", | ||||
| --[[bottom]]"bushes_branches_center_"..TexNum..".png", | ||||
| --[[right]]	"bushes_branches_left_"..TexNum..".png", | ||||
| --[[left]]	"bushes_branches_right_"..TexNum..".png", -- MM: We could also mirror the previous here, | ||||
| --[[back]]	"bushes_branches_center_"..TexNum..".png",--     unless U really want 'em 2 B different | ||||
| --[[front]]	"bushes_branches_right_"..TexNum..".png" | ||||
| --[[back]]	"bushes_branches_center_"..TexNum..".png",--     unless U really want 'em 2 B different  | ||||
| --[[front]]	"bushes_branches_right_"..TexNum..".png"   | ||||
| 		}, | ||||
| 		node_box = { | ||||
| 			type = "fixed", | ||||
| @@ -102,8 +99,8 @@ for i in pairs(BushBranchSide) do | ||||
| 				sunlight_propagates = true, | ||||
| 		groups = { | ||||
| 		--	tree=1, -- MM: disabled because some recipes use group:tree for trunks | ||||
| 			snappy=3, | ||||
| 			flammable=2, | ||||
| 			snappy=3,  | ||||
| 			flammable=2,  | ||||
| 			leaves=1 | ||||
| 		}, | ||||
| 		sounds = default.node_sound_leaves_defaults(), | ||||
| @@ -111,25 +108,25 @@ for i in pairs(BushBranchSide) do | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| local BushLeafNode			= { {1}, {2}} | ||||
| local BushLeafNode 			= { {1}, {2}} | ||||
| for i in pairs(BushLeafNode) do | ||||
| 	local Num = BushLeafNode[i][1] | ||||
| 	local Num = BushLeafNode[i][1]	 | ||||
| 	minetest.register_node("bushes:BushLeaves"..Num, { | ||||
| 		description = S("Bush Leaves @1", Num), | ||||
| 		description = "Bush Leaves "..Num, | ||||
| 		drawtype = "allfaces_optional", | ||||
| 		tiles = {"bushes_leaves_"..Num..".png"}, | ||||
| 		paramtype = "light", | ||||
| 		groups = {	-- MM: Should we add leafdecay? | ||||
| 		groups = {	-- MM: Should we add leafdecay?	 | ||||
| 			snappy=3, | ||||
| 			flammable=2, | ||||
| 			attached_node=1 | ||||
| 		}, | ||||
| 		sounds = default.node_sound_leaves_defaults(), | ||||
| 	}) | ||||
| 		sounds = default.node_sound_leaves_defaults(),     | ||||
| 	})	 | ||||
| end | ||||
|  | ||||
| abstract_bushes.grow_bush = function(pos) | ||||
| 	local leaf_type = math.random(1,2) | ||||
| 	local leaf_type = math.random(1,2)	 | ||||
| 	local bush_side_height = math.random(0,1) | ||||
| 		local chance_of_bush_node_right = math.random(1,10) | ||||
| 		if chance_of_bush_node_right> 5 then | ||||
| @@ -147,25 +144,26 @@ abstract_bushes.grow_bush = function(pos) | ||||
| 			bush_side_height = math.random(0,1) | ||||
| 			local front_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z+1} | ||||
| 			abstract_bushes.grow_bush_node(front_pos,2,leaf_type) | ||||
| 		end | ||||
| 		end		 | ||||
| 		local chance_of_bush_node_back = math.random(1,10) | ||||
| 		if chance_of_bush_node_back> 5 then | ||||
| 			bush_side_height = math.random(0,1) | ||||
| 			local back_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z-1} | ||||
| 			abstract_bushes.grow_bush_node(back_pos,0,leaf_type) | ||||
| 		end | ||||
|  | ||||
| 		 | ||||
| abstract_bushes.grow_bush_node(pos,5,leaf_type) | ||||
| end | ||||
|  | ||||
| abstract_bushes.grow_bush_node = function(pos,dir, leaf_type) | ||||
|  | ||||
|  | ||||
| 	 | ||||
| 	 | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} | ||||
|  | ||||
| 	local bush_branch_type = 2 | ||||
|  | ||||
| 	 | ||||
| 	--local bush_branch_type = math.random(1,3) | ||||
| 	--local bush_branch_type = 2 | ||||
| 	 | ||||
| 	-- MM: I'm not sure if it's slower now than before... | ||||
| 	if dir ~= 5 and leaf_type == 1 then | ||||
| 		bush_branch_type = 2 | ||||
| @@ -181,25 +179,25 @@ abstract_bushes.grow_bush_node = function(pos,dir, leaf_type) | ||||
| 		bush_branch_type = 3 | ||||
| 		dir = 1 | ||||
| 	end | ||||
|  | ||||
| 	 | ||||
| 	if minetest.get_node(right_here).name == "air"  -- instead of check_air = true, | ||||
| 	or minetest.get_node(right_here).name == "default:junglegrass" then | ||||
| 		minetest.swap_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir}) | ||||
| 		minetest.set_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir}) | ||||
| 						--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")") | ||||
| 		minetest.swap_node(above_right_here, {name="bushes:BushLeaves"..leaf_type}) | ||||
| 		minetest.set_node(above_right_here, {name="bushes:BushLeaves"..leaf_type}) | ||||
| 		local chance_of_high_leaves = math.random(1,10) | ||||
| 		if chance_of_high_leaves> 5 then | ||||
| 			local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} | ||||
| 							--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")") | ||||
| 			minetest.swap_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type}) | ||||
| 			minetest.set_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type}) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
|  | ||||
| biome_lib:register_generate_plant({ | ||||
| plantslib:register_generate_plant({ | ||||
|     surface = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"default:dirt_with_grass",  | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| @@ -210,41 +208,41 @@ biome_lib:register_generate_plant({ | ||||
| 	plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_bushes.grow_bush | ||||
| ) | ||||
| )		 | ||||
|  | ||||
|  abstract_bushes.grow_youngtree2 = function(pos) | ||||
| 	local height = math.random(4,5) | ||||
| 	local height = math.random(4,5)	 | ||||
| 	abstract_bushes.grow_youngtree_node2(pos,height) | ||||
| end | ||||
|  | ||||
| abstract_bushes.grow_youngtree_node2 = function(pos, height) | ||||
|  | ||||
|  | ||||
| 	 | ||||
| 	 | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} | ||||
| 	local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} | ||||
| 	local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z} | ||||
|  | ||||
| 	  | ||||
| 	if minetest.get_node(right_here).name == "air"  -- instead of check_air = true, | ||||
| 	or minetest.get_node(right_here).name == "default:junglegrass" then | ||||
| 		if height == 4 then | ||||
| 				local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1} | ||||
| 				local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1} | ||||
| 				minetest.swap_node(right_here, {name="bushes:youngtree2_bottom"}) | ||||
| 				minetest.swap_node(above_right_here, {name="bushes:youngtree2_bottom"}) | ||||
| 				minetest.swap_node(two_above_right_here, {name="bushes:bushbranches2"  , param2=2}) | ||||
| 				minetest.swap_node(two_above_right_here_south, {name="bushes:bushbranches2"  , param2=0}) | ||||
| 				minetest.swap_node(three_above_right_here, {name="bushes:BushLeaves1" }) | ||||
| 				minetest.swap_node(three_above_right_here_south, {name="bushes:BushLeaves1" }) | ||||
| 				minetest.set_node(right_here, {name="bushes:youngtree2_bottom"}) | ||||
| 				minetest.set_node(above_right_here, {name="bushes:youngtree2_bottom"}) | ||||
| 				minetest.set_node(two_above_right_here, {name="bushes:bushbranches2"  , param2=2}) | ||||
| 				minetest.set_node(two_above_right_here_south, {name="bushes:bushbranches2"  , param2=0}) | ||||
| 				minetest.set_node(three_above_right_here, {name="bushes:BushLeaves1" }) | ||||
| 				minetest.set_node(three_above_right_here_south, {name="bushes:BushLeaves1" }) | ||||
| 		end | ||||
|  | ||||
| 		  | ||||
| 	end | ||||
| end | ||||
|  | ||||
|  | ||||
| biome_lib:register_generate_plant({ | ||||
| plantslib:register_generate_plant({ | ||||
|     surface = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"default:dirt_with_grass",  | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| @@ -255,6 +253,6 @@ biome_lib:register_generate_plant({ | ||||
| 	plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_bushes.grow_youngtree2 | ||||
| ) | ||||
|  | ||||
| )	 | ||||
| 	  | ||||
| 		--http://dev.minetest.net/Node_Drawtypes | ||||
|   | ||||
| @@ -1,11 +0,0 @@ | ||||
| # textdomain: bushes | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Young Tree 2 (bottom)=Arbuste 2 (bas) | ||||
| Bush Branches @1=Branches de buisson @1 | ||||
| Bush Leaves @1=Feuilles de buisson @1 | ||||
| @@ -1,10 +0,0 @@ | ||||
| # textdomain: bushes | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
|  | ||||
| Young Tree 2 (bottom)= | ||||
| Bush Branches @1= | ||||
| Bush Leaves @1= | ||||
| @@ -1,3 +0,0 @@ | ||||
| name = bushes | ||||
| depends = default, biome_lib | ||||
| optional_depends = stonage, sumpf | ||||
| Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 473 B | 
| Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 487 B | 
| Before Width: | Height: | Size: 577 B After Width: | Height: | Size: 695 B | 
| Before Width: | Height: | Size: 598 B After Width: | Height: | Size: 689 B | 
| Before Width: | Height: | Size: 592 B After Width: | Height: | Size: 712 B | 
| Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 719 B | 
| Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 225 B | 
| Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 225 B | 
| Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 872 B After Width: | Height: | Size: 918 B | 
| Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 90 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 42 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 49 KiB | 
| Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 609 B After Width: | Height: | Size: 702 B | 
| Before Width: | Height: | Size: 620 B After Width: | Height: | Size: 714 B | 
| Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 536 B | 
| Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 649 B | 
| Before Width: | Height: | Size: 285 B After Width: | Height: | Size: 445 B | 
| Before Width: | Height: | Size: 657 B After Width: | Height: | Size: 770 B | 
| Before Width: | Height: | Size: 693 B After Width: | Height: | Size: 801 B | 
| Before Width: | Height: | Size: 83 B After Width: | Height: | Size: 199 B | 
| Before Width: | Height: | Size: 525 B After Width: | Height: | Size: 647 B | 
| @@ -1,92 +1,82 @@ | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("bushes_classic") | ||||
| -- Boilerplate to support localized strings if intllib mod is installed. | ||||
| local S | ||||
| if (minetest.get_modpath("intllib")) then | ||||
|   dofile(minetest.get_modpath("intllib").."/intllib.lua") | ||||
|   S = intllib.Getter(minetest.get_current_modname()) | ||||
| else | ||||
|   S = function ( s ) return s end | ||||
| end | ||||
|  | ||||
|  | ||||
| -- Basket | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	output = "bushes:basket_empty", | ||||
| 	recipe = { | ||||
| 		{ "default:stick", "default:stick", "default:stick" }, | ||||
| 		{ "", "default:stick", "" }, | ||||
| 	}, | ||||
|     output = "bushes:basket_empty", | ||||
|     recipe = { | ||||
| 	{ "default:stick", "default:stick", "default:stick" }, | ||||
| 	{ "", "default:stick", "" }, | ||||
|     }, | ||||
| }) | ||||
|  | ||||
| -- Sugar | ||||
|  | ||||
| if not minetest.registered_items["farming:sugar"] then | ||||
| 	minetest.register_craftitem(":bushes:sugar", { | ||||
| 		description = S("Sugar"), | ||||
| 		inventory_image = "bushes_sugar.png", | ||||
| 		on_use = minetest.item_eat(1), | ||||
| 		groups = {food_sugar=1, flammable = 2} | ||||
| 	}) | ||||
|  | ||||
| 	minetest.register_craft({ | ||||
| 		output = "bushes:sugar 1", | ||||
| 		recipe = { | ||||
| 			{ "default:papyrus", "default:papyrus" }, | ||||
| 		}, | ||||
| 	}) | ||||
| else | ||||
| 	minetest.register_alias("bushes:sugar", "farming:sugar") | ||||
| end | ||||
|  | ||||
| -- override farming_plus strawberry and add food_ group | ||||
| if minetest.get_modpath("farming_plus") then | ||||
|  | ||||
| 	minetest.override_item("farming_plus:strawberry_item", { | ||||
| 		groups = {food_strawberry = 1, food_berry = 1, flammable = 2}, | ||||
| 	}) | ||||
| end | ||||
| minetest.register_craftitem(":bushes:sugar", { | ||||
|     description = S("Sugar"), | ||||
|     inventory_image = "bushes_sugar.png", | ||||
|     on_use = minetest.item_eat(1), | ||||
| 	groups = {food_sugar=1} | ||||
| }) | ||||
|  | ||||
| minetest.register_craft({ | ||||
|     output = "bushes:sugar 1", | ||||
|     recipe = { | ||||
| 	{ "default:papyrus", "default:papyrus" }, | ||||
|     }, | ||||
| }) | ||||
|  | ||||
| for i, berry in ipairs(bushes_classic.bushes) do | ||||
| 	local desc = bushes_classic.bushes_descriptions[i] | ||||
|  | ||||
| 	local groups = {food_berry = 1, flammable = 2} | ||||
|  | ||||
| 	if berry ~= "mixed_berry" then | ||||
|  | ||||
| 		groups["food_" .. berry] = 1 | ||||
|  | ||||
| 		-- Berry | ||||
| 		minetest.register_craftitem(":bushes:"..berry, { | ||||
| 			description = bushes_classic.bushes_descriptions[i][1], | ||||
| 			inventory_image = "bushes_"..berry..".png", | ||||
| 			groups = groups, | ||||
| 			on_use = minetest.item_eat(1), | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	-- Raw pie | ||||
| 	minetest.register_craftitem(":bushes:"..berry.."_pie_raw", { | ||||
| 		description = bushes_classic.bushes_descriptions[i][2], | ||||
| 		description = S("Raw "..desc.." pie"), | ||||
| 		inventory_image = "bushes_"..berry.."_pie_raw.png", | ||||
| 		on_use = minetest.item_eat(4), | ||||
| 	}) | ||||
|  | ||||
| 	if berry ~= "mixed_berry" then | ||||
|  | ||||
| 		if berry == "strawberry" and minetest.registered_nodes["farming_plus:strawberry"] then | ||||
| 			-- Special case for strawberries, when farming_plus is in use. Use | ||||
| 			-- the item from that mod, but redefine it so it has the right | ||||
| 			-- groups and does't look so ugly! | ||||
| 			minetest.register_craftitem(":farming_plus:strawberry_item", { | ||||
| 				description = S("Strawberry"), | ||||
| 				inventory_image = "bushes_"..berry..".png", | ||||
| 				on_use = minetest.item_eat(2), | ||||
| 				groups = {berry=1, strawberry=1} | ||||
| 			}) | ||||
| 			minetest.register_alias("bushes:strawberry", "farming_plus:strawberry_item") | ||||
| 		else | ||||
| 			minetest.register_craftitem(":bushes:"..berry, { | ||||
| 				description = desc, | ||||
| 				inventory_image = "bushes_"..berry..".png", | ||||
| 				groups = {berry = 1, [berry] = 1}, | ||||
| 				on_use = minetest.item_eat(1), | ||||
| 			}) | ||||
| 		end | ||||
| 		minetest.register_craft({ | ||||
| 			output = "bushes:"..berry.."_pie_raw 1", | ||||
| 			recipe = { | ||||
| 			{ "group:food_sugar", "farming:flour", "group:food_sugar" }, | ||||
| 			{ "group:food_"..berry, "group:food_"..berry, "group:food_"..berry }, | ||||
| 			}, | ||||
| 		}) | ||||
| 	else | ||||
| 		minetest.register_craft({ | ||||
| 			output = "bushes:mixed_berry_pie_raw 2", | ||||
| 			recipe = { | ||||
| 			{ "group:food_sugar", "farming:flour", "group:food_sugar" }, | ||||
| 			{ "group:food_berry", "group:food_berry", "group:food_berry" }, | ||||
| 			{ "group:food_berry", "group:food_berry", "group:food_berry" }, | ||||
| 			{ "group:"..berry, "group:"..berry, "group:"..berry }, | ||||
| 			}, | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	-- Cooked pie | ||||
|  | ||||
| 	minetest.register_craftitem(":bushes:"..berry.."_pie_cooked", { | ||||
| 		description = bushes_classic.bushes_descriptions[i][3], | ||||
| 		description = S("Cooked "..desc.." pie"), | ||||
| 		inventory_image = "bushes_"..berry.."_pie_cooked.png", | ||||
| 		on_use = minetest.item_eat(6), | ||||
| 	}) | ||||
| @@ -98,9 +88,10 @@ for i, berry in ipairs(bushes_classic.bushes) do | ||||
| 		cooktime = 30, | ||||
| 	}) | ||||
|  | ||||
| 	-- Slice of pie | ||||
| 	-- slice of pie | ||||
|  | ||||
| 	minetest.register_craftitem(":bushes:"..berry.."_pie_slice", { | ||||
| 		description = bushes_classic.bushes_descriptions[i][4], | ||||
| 		description = S("Slice of "..desc.." pie"), | ||||
| 		inventory_image = "bushes_"..berry.."_pie_slice.png", | ||||
| 		on_use = minetest.item_eat(1), | ||||
| 	}) | ||||
| @@ -113,6 +104,7 @@ for i, berry in ipairs(bushes_classic.bushes) do | ||||
| 	}) | ||||
|  | ||||
| 	-- Basket with pies | ||||
|  | ||||
| 	minetest.register_craft({ | ||||
| 		output = "bushes:basket_"..berry.." 1", | ||||
| 		recipe = { | ||||
| @@ -121,3 +113,14 @@ for i, berry in ipairs(bushes_classic.bushes) do | ||||
| 		}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	output = "bushes:mixed_berry_pie_raw 2", | ||||
| 	recipe = { | ||||
| 	{ "group:food_sugar", "farming:flour", "group:food_sugar" }, | ||||
| 	{ "group:berry", "group:berry", "group:berry" }, | ||||
| 	{ "group:berry", "group:berry", "group:berry" }, | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										3
									
								
								bushes_classic/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| plants_lib | ||||
| farming? | ||||
| farming_plus? | ||||
| @@ -1,13 +1,20 @@ | ||||
| -- Bushes classic mod originally by unknown | ||||
| -- now maintained by VanessaE | ||||
| -- | ||||
| -- License:  WTFPL | ||||
| -- Boilerplate to support localized strings if intllib mod is installed. | ||||
| local S | ||||
| if (minetest.get_modpath("intllib")) then | ||||
|   dofile(minetest.get_modpath("intllib").."/intllib.lua") | ||||
|   S = intllib.Getter(minetest.get_current_modname()) | ||||
| else | ||||
|   S = function ( s ) return s end | ||||
| end | ||||
|  | ||||
| bushes_classic = {} | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("bushes_classic") | ||||
|  | ||||
| bushes_classic.bushes = { | ||||
|   "strawberry", | ||||
|     "strawberry", | ||||
| 	"blackberry", | ||||
| 	"blueberry", | ||||
| 	"raspberry", | ||||
| @@ -16,21 +23,20 @@ bushes_classic.bushes = { | ||||
| } | ||||
|  | ||||
| bushes_classic.bushes_descriptions = { | ||||
| 	{S("Strawberry"),  S("Raw Strawberry pie"),  S("Cooked Strawberry pie"),  S("Slice of Strawberry pie"),  S("Basket with Strawberry pies"),  S("Strawberry Bush")}, | ||||
| 	{S("Blackberry"),  S("Raw Blackberry pie"),  S("Cooked Blackberry pie"),  S("Slice of Blackberry pie"),  S("Basket with Blackberry pies"),  S("Blackberry Bush")}, | ||||
| 	{S("Blueberry"),   S("Raw Blueberry pie"),   S("Cooked Blueberry pie"),   S("Slice of Blueberry pie"),   S("Basket with Blueberry pies"),   S("Blueberry Bush")}, | ||||
| 	{S("Raspberry"),   S("Raw Raspberry pie"),   S("Cooked Raspberry pie"),   S("Slice of Raspberry pie"),   S("Basket with Raspberry pies"),   S("Raspberry Bush")}, | ||||
| 	{S("Gooseberry"),  S("Raw Gooseberry pie"),  S("Cooked Gooseberry pie"),  S("Slice of Gooseberry pie"),  S("Basket with Gooseberry pies"),  S("Gooseberry Bush")}, | ||||
| 	{S("Mixed Berry"), S("Raw Mixed Berry pie"), S("Cooked Mixed Berry pie"), S("Slice of Mixed Berry pie"), S("Basket with Mixed Berry pies"), S("Currently fruitless Bush")} | ||||
|     "Strawberry", | ||||
| 	"Blackberry", | ||||
| 	"Blueberry", | ||||
| 	"Raspberry", | ||||
| 	"Gooseberry", | ||||
| 	"Mixed Berry" | ||||
| } | ||||
|  | ||||
| bushes_classic.spawn_list = {} | ||||
|  | ||||
| local modpath = minetest.get_modpath('bushes_classic') | ||||
| dofile(modpath..'/cooking.lua') | ||||
| dofile(modpath..'/nodes.lua') | ||||
| dofile(minetest.get_modpath('bushes_classic') .. '/cooking.lua') | ||||
| dofile(minetest.get_modpath('bushes_classic') .. '/nodes.lua') | ||||
|  | ||||
| biome_lib:spawn_on_surfaces({ | ||||
| plantslib:spawn_on_surfaces({ | ||||
| 	spawn_delay = 3600, | ||||
| 	spawn_plants = bushes_classic.spawn_list, | ||||
| 	avoid_radius = 10, | ||||
| @@ -55,4 +61,4 @@ biome_lib:spawn_on_surfaces({ | ||||
|  | ||||
| minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry") | ||||
|  | ||||
| print("[Bushes] Loaded.") | ||||
| print(S("[Bushes] Loaded.")) | ||||
|   | ||||
| @@ -1,46 +0,0 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Xanthin, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Zucker | ||||
| Basket with Strawberry pies=Korb mit Erdbeertorten | ||||
| Cooked Strawberry pie=Erdbeertorte | ||||
| Raw Strawberry pie=Rohe Erdbeertorte | ||||
| Slice of Strawberry pie=Erdbeertortenstueck | ||||
| Strawberry=Erdbeere | ||||
| Strawberry Bush=Erdbeerbusch | ||||
| Basket with Blackberry pies=Korb mit Brombeertorten | ||||
| Blackberry=Brombeere | ||||
| Blackberry Bush=Brombeerbusch | ||||
| Cooked Blackberry pie=Brombeertorte | ||||
| Raw Blackberry pie=Rohe Brombeertorte | ||||
| Slice of Blackberry pie=Brombeertortenstueck | ||||
| Basket with Blueberry pies=Korb mit Blaubeertorten | ||||
| Blueberry=Blaubeere | ||||
| Blueberry Bush=Blaubeerbusch | ||||
| Cooked Blueberry pie=Blaubeertorte | ||||
| Raw Blueberry pie=Rohe Blaubeertorte | ||||
| Slice of Blueberry pie=Blaubeertortenstueck | ||||
| Basket with Raspberry pies=Korb mit Himbeertorten | ||||
| Cooked Raspberry pie=Himbeertorte | ||||
| Raspberry=Himbeere | ||||
| Raspberry Bush=Himbeerbusch | ||||
| Raw Raspberry pie=Rohe Himbeertorte | ||||
| Slice of Raspberry pie=Himbeertortenstueck | ||||
| Basket with Gooseberry pies=Korb mit Stachelbeertorten | ||||
| Cooked Gooseberry pie=Stachelbeertorte | ||||
| Gooseberry=Stachelbeere | ||||
| Gooseberry Bush=Stachelbeerbusch | ||||
| Raw Gooseberry pie=Rohe Stachelbeertorte | ||||
| Slice of Gooseberry pie=Stachelbeertortenstueck | ||||
| Basket with Mixed Berry pies=Korb mit Beerenmixtorten | ||||
| Cooked Mixed Berry pie=Beerenmixtorte | ||||
| Currently fruitless Bush=zur Zeit fruechteloser | ||||
| Mixed Berry=Beerenmix | ||||
| Raw Mixed Berry pie=Rohe Beerenmixtorte | ||||
| Slice of Mixed Berry pie=Beerenmixtortenstueck | ||||
| Basket=Korb | ||||
| @@ -1,46 +0,0 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Carlos Barraza <carlosbarrazaes@gmail.com>, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Azúcar | ||||
| Basket with Strawberry pies=Cesta con Pasteles de Frutilla | ||||
| Cooked Strawberry pie=Pastel de Frutilla Cocido | ||||
| Raw Strawberry pie=Pastel de Frutilla Crudo | ||||
| Slice of Strawberry pie=Rebanada de Pastel de Frutilla | ||||
| Strawberry=Frutilla | ||||
| Strawberry Bush=Arbusto de Frutilla | ||||
| Basket with Blackberry pies=Cesta con Pasteles de Mora | ||||
| Blackberry=Mora | ||||
| Blackberry Bush=Arbusto de Mora | ||||
| Cooked Blackberry pie=Pastel de Mora Cocido | ||||
| Raw Blackberry pie=Pastel de Mora Crudo | ||||
| Slice of Blackberry pie=Rebanada de Pastel de Mora | ||||
| Basket with Blueberry pies=Cesta con Pasteles de Arándano | ||||
| Blueberry=Arándano | ||||
| Blueberry Bush=Arbusto de Arándano | ||||
| Cooked Blueberry pie=Pastel de Arándano Cocido | ||||
| Raw Blueberry pie=Pastel de Arándano Crudo | ||||
| Slice of Blueberry pie=Rebanada de Pastel de Arándano | ||||
| Basket with Raspberry pies=Cesta con Pasteles de Frambuesa | ||||
| Cooked Raspberry pie=Pastel de Frambuesa Cocido | ||||
| Raspberry=Frambuesa | ||||
| Raspberry Bush=Arbusto de Frambuesa | ||||
| Raw Raspberry pie=Pastel de Frambuesa Crudo | ||||
| Slice of Raspberry pie=Rebanada de Pastel de Frambuesa | ||||
| Basket with Gooseberry pies=Cesta con Pasteles de Grosella | ||||
| Cooked Gooseberry pie=Pastel de Grosella Cocido | ||||
| Gooseberry=Grosella | ||||
| Gooseberry Bush=Arbusto de Grosella | ||||
| Raw Gooseberry pie=Pastel de Grosella Crudo | ||||
| Slice of Gooseberry pie=Rebanada de Pastel de Grosella | ||||
| Basket with Mixed Berry pies=Cesta con Pasteles de Mezcla de Baya | ||||
| Cooked Mixed Berry pie=Pastel de Mezcla de Bayas Cocido | ||||
| Currently fruitless Bush=Arbusto actualmente infructuoso | ||||
| Mixed Berry=Mezcla de Baya | ||||
| Raw Mixed Berry pie=Pastel de Mezcla de Bayas Cruda | ||||
| Slice of Mixed Berry pie=Rebanada de Pastel de Mezcla de Bayas | ||||
| Basket=Cesta | ||||
| @@ -1,46 +0,0 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Sucre | ||||
| Basket with Strawberry pies=Panier de tartes aux fraises | ||||
| Cooked Strawberry pie=Tarte aux fraises (cuite) | ||||
| Raw Strawberry pie=Tarte aux fraises (crue) | ||||
| Slice of Strawberry pie=Part de tarte aux fraises | ||||
| Strawberry=Fraises | ||||
| Strawberry Bush=Buisson de fraises | ||||
| Basket with Blackberry pies=Panier de tartes aux fraises | ||||
| Blackberry=Mûres | ||||
| Blackberry Bush=Buisson de mûres | ||||
| Cooked Blackberry pie=Tarte aux mûres (cuite) | ||||
| Raw Blackberry pie=Tarte aux mûres (crue) | ||||
| Slice of Blackberry pie=Part de tarte aux mûres | ||||
| Basket with Blueberry pies=Panier de tartes aux mûres | ||||
| Blueberry=Myrtilles | ||||
| Blueberry Bush=Buisson de myrtilles | ||||
| Cooked Blueberry pie=Tarte aux myrtilles (cuite) | ||||
| Raw Blueberry pie=Tarte aux myrtilles (crue) | ||||
| Slice of Blueberry pie=Part de tarte aux myrtilles | ||||
| Basket with Raspberry pies=Panier de tartes aux framboises | ||||
| Cooked Raspberry pie=Tarte aux framboises (cuite) | ||||
| Raspberry=Framboises | ||||
| Raspberry Bush=Buisson de framboises | ||||
| Raw Raspberry pie=Tarte aux framboises (crue) | ||||
| Slice of Raspberry pie=Part de tarts aux framboises | ||||
| Basket with Gooseberry pies=Panier de tartes aux groseilles | ||||
| Cooked Gooseberry pie=Tarte aux groseilles (cuite) | ||||
| Gooseberry=Groseilles | ||||
| Gooseberry Bush=Buisson de groseilles | ||||
| Raw Gooseberry pie=Tarte aux groseilles (crue) | ||||
| Slice of Gooseberry pie=Part de tarte aux groseilles | ||||
| Basket with Mixed Berry pies=Panier de tartes aux fruits rouges | ||||
| Cooked Mixed Berry pie=Tarte aux fruits rouges (cuite) | ||||
| Currently fruitless Bush=Buisson sans fruits pour l'instant | ||||
| Mixed Berry=Fruits rouges | ||||
| Raw Mixed Berry pie=Tarte aux fruits rouges (crue) | ||||
| Slice of Mixed Berry pie=Part de tarte aux fruits rouges | ||||
| Basket=Panier | ||||
| @@ -1,46 +0,0 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # mahmutelmas06@hotmail.com, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Şeker | ||||
| Basket with Strawberry pies=Çilekli pasta sepeti | ||||
| Cooked Strawberry pie=Pişmiş çilekli pasta  | ||||
| Raw Strawberry pie=Çilekli çiğ pasta | ||||
| Slice of Strawberry pie=Çilekli pasta dilimi | ||||
| Strawberry=Çilek | ||||
| Strawberry Bush=Çilek fidanı | ||||
| Basket with Blackberry pies=Böğürtlenli pasta sepeti | ||||
| Blackberry=Böğürtlen | ||||
| Blackberry Bush=Böğürtlen fidanı | ||||
| Cooked Blackberry pie=Pişmiş böğürtlenli pasta | ||||
| Raw Blackberry pie=Böğürtlenli çiğ pasta | ||||
| Slice of Blackberry pie=Böğürtlenli pasta dilimi | ||||
| Basket with Blueberry pies=Yaban mersini pastalı sepet | ||||
| Blueberry=Yaban mersini | ||||
| Blueberry Bush=Yaban mersini fidanı | ||||
| Cooked Blueberry pie=Pişmiş yaban mersinli pasta | ||||
| Raw Blueberry pie=Yaban mersinli çiğ pasta | ||||
| Slice of Blueberry pie=Yaban mersinli pasta dilimi | ||||
| Basket with Raspberry pies=Ahududulu pasta sepeti | ||||
| Cooked Raspberry pie=Pişmiş ahududulu pasta | ||||
| Raspberry=Ahududu | ||||
| Raspberry Bush=Ahududu fidanı | ||||
| Raw Raspberry pie=Ahududulu çiğ pasta | ||||
| Slice of Raspberry pie=Ahududulu pasta dilimi | ||||
| Basket with Gooseberry pies=Bektaşi üzümlü pasta sepeti | ||||
| Cooked Gooseberry pie=Pişmiş bektaşi üzümlü pasta | ||||
| Gooseberry=Bektaşi üzümü | ||||
| Gooseberry Bush=Bektaşi üzümü fidanı | ||||
| Raw Gooseberry pie=Bektaşi üzümlü çiğ pasta | ||||
| Slice of Gooseberry pie=Bektaşi üzümlü pasta dilimi | ||||
| Basket with Mixed Berry pies=Dutlu pasta sepeti | ||||
| Cooked Mixed Berry pie=Pişmiş dutlu pasta | ||||
| Currently fruitless Bush=Fidanı şu anda meyvesiz | ||||
| Mixed Berry=Dut | ||||
| Raw Mixed Berry pie=Dutlu çiğ pasta | ||||
| Slice of Mixed Berry pie=Dutlu pasta dilimi | ||||
| Basket=Sepet | ||||
							
								
								
									
										43
									
								
								bushes_classic/locale/de.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,43 @@ | ||||
| # Translation by Xanthin | ||||
|  | ||||
| Strawberry = Erdbeere | ||||
| Blackberry = Brombeere | ||||
| Blueberry = Blaubeere | ||||
| Raspberry = Himbeere | ||||
| Gooseberry = Stachelbeere | ||||
| Mixed Berry = Beerenmix | ||||
| Basket with Strawberry Pies = Korb mit Erdbeertorten | ||||
| Basket with Blackberry Pies = Korb mit Brombeertorten | ||||
| Basket with Blueberry Pies = Korb mit Blaubeertorten | ||||
| Basket with Raspberry Pies = Korb mit Himbeertorten | ||||
| Basket with Gooseberry Pies = Korb mit Stachelbeertorten | ||||
| Basket with Mixed Berry Pies = Korb mit Beerenmixtorten | ||||
| currently fruitless = zur Zeit fruechteloser | ||||
| Strawberry Bush = Erdbeerbusch | ||||
| Blackberry Bush = Brombeerbusch | ||||
| Blueberry Bush = Blaubeerbusch | ||||
| Raspberry Bush = Himbeerbusch | ||||
| Gooseberry Bush = Stachelbeerbusch | ||||
| Mixed Berry Bush = Beerenmixbusch | ||||
| Basket = Korb | ||||
| Sugar = Zucker | ||||
| Raw Strawberry pie = Rohe Erdbeertorte | ||||
| Raw Blackberry pie = Rohe Brombeertorte | ||||
| Raw Blueberry pie = Rohe Blaubeertorte | ||||
| Raw Raspberry pie = Rohe Himbeertorte | ||||
| Raw Gooseberry pie = Rohe Stachelbeertorte | ||||
| Raw Mixed Berry pie = Rohe Beerenmixtorte | ||||
| Cooked Strawberry pie = Erdbeertorte | ||||
| Cooked Blackberry pie = Brombeertorte | ||||
| Cooked Blueberry pie = Blaubeertorte | ||||
| Cooked Raspberry pie = Himbeertorte | ||||
| Cooked Gooseberry pie = Stachelbeertorte | ||||
| Cooked Mixed Berry pie = Beerenmixtorte | ||||
| Slice of Strawberry pie = Erdbeertortenstueck | ||||
| Slice of Blackberry pie = Brombeertortenstueck | ||||
| Slice of Blueberry pie = Blaubeertortenstueck | ||||
| Slice of Raspberry pie = Himbeertortenstueck | ||||
| Slice of Gooseberry pie = Stachelbeertortenstueck | ||||
| Slice of Mixed Berry pie = Beerenmixtortenstueck | ||||
|  | ||||
| [Bushes] Loaded. = [Bushes] Geladen. | ||||
| @@ -1,46 +1,43 @@ | ||||
| # textdomain: bushes_classic | ||||
| # Template | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
| Strawberry =  | ||||
| Blackberry =  | ||||
| Blueberry =  | ||||
| Raspberry =  | ||||
| Gooseberry =  | ||||
| Mixed Berry =  | ||||
| Basket with Strawberry Pies =  | ||||
| Basket with Blackberry Pies =  | ||||
| Basket with Blueberry Pies =  | ||||
| Basket with Raspberry Pies =  | ||||
| Basket with Gooseberry Pies =  | ||||
| Basket with Mixed Berry Pies =  | ||||
| currently fruitless =  | ||||
| Strawberry Bush =  | ||||
| Blackberry Bush =  | ||||
| Blueberry Bush =  | ||||
| Raspberry Bush =  | ||||
| Gooseberry Bush =  | ||||
| Mixed Berry Bush =  | ||||
| Basket =  | ||||
| Sugar =  | ||||
| Raw Strawberry pie =  | ||||
| Raw Blackberry pie =  | ||||
| Raw Blueberry pie =  | ||||
| Raw Raspberry pie =  | ||||
| Raw Gooseberry pie =  | ||||
| Raw Mixed Berry pie =  | ||||
| Cooked Strawberry pie =  | ||||
| Cooked Blackberry pie =  | ||||
| Cooked Blueberry pie =  | ||||
| Cooked Raspberry pie =  | ||||
| Cooked Gooseberry pie =  | ||||
| Cooked Mixed Berry pie =  | ||||
| Slice of Strawberry pie =  | ||||
| Slice of Blackberry pie =  | ||||
| Slice of Blueberry pie =  | ||||
| Slice of Raspberry pie =  | ||||
| Slice of Gooseberry pie =  | ||||
| Slice of Mixed Berry pie =  | ||||
|  | ||||
| Sugar= | ||||
| Basket with Strawberry pies= | ||||
| Cooked Strawberry pie= | ||||
| Raw Strawberry pie= | ||||
| Slice of Strawberry pie= | ||||
| Strawberry= | ||||
| Strawberry Bush= | ||||
| Basket with Blackberry pies= | ||||
| Blackberry= | ||||
| Blackberry Bush= | ||||
| Cooked Blackberry pie= | ||||
| Raw Blackberry pie= | ||||
| Slice of Blackberry pie= | ||||
| Basket with Blueberry pies= | ||||
| Blueberry= | ||||
| Blueberry Bush= | ||||
| Cooked Blueberry pie= | ||||
| Raw Blueberry pie= | ||||
| Slice of Blueberry pie= | ||||
| Basket with Raspberry pies= | ||||
| Cooked Raspberry pie= | ||||
| Raspberry= | ||||
| Raspberry Bush= | ||||
| Raw Raspberry pie= | ||||
| Slice of Raspberry pie= | ||||
| Basket with Gooseberry pies= | ||||
| Cooked Gooseberry pie= | ||||
| Gooseberry= | ||||
| Gooseberry Bush= | ||||
| Raw Gooseberry pie= | ||||
| Slice of Gooseberry pie= | ||||
| Basket with Mixed Berry pies= | ||||
| Cooked Mixed Berry pie= | ||||
| Currently fruitless Bush= | ||||
| Mixed Berry= | ||||
| Raw Mixed Berry pie= | ||||
| Slice of Mixed Berry pie= | ||||
| Basket= | ||||
| [Bushes] Loaded. =  | ||||
|   | ||||
| @@ -1,3 +0,0 @@ | ||||
| name = bushes_classic | ||||
| depends = biome_lib | ||||
| optional_depends = farming, farming_plus | ||||
| @@ -1,46 +0,0 @@ | ||||
| # Blender v2.73 (sub 0) OBJ File: 'basket-of-pies.blend' | ||||
| # www.blender.org | ||||
| o basket_Cube.001 | ||||
| v -0.500000 -0.500000 0.500000 | ||||
| v -0.500000 -0.500000 -0.500000 | ||||
| v 0.500000 -0.500000 -0.500000 | ||||
| v 0.500000 -0.500000 0.500000 | ||||
| v -0.500000 0.500000 0.500000 | ||||
| v -0.500000 0.500000 -0.500000 | ||||
| v 0.500000 0.500000 -0.500000 | ||||
| v 0.500000 0.500000 0.500000 | ||||
| v -0.437500 0.500000 0.437500 | ||||
| v -0.437500 0.500000 -0.437500 | ||||
| v 0.437500 0.500000 -0.437500 | ||||
| v 0.437500 0.500000 0.437500 | ||||
| v -0.437500 -0.437500 0.437500 | ||||
| v -0.437500 -0.437500 -0.437500 | ||||
| v 0.437500 -0.437500 -0.437500 | ||||
| v 0.437500 -0.437500 0.437500 | ||||
| vt 0.484848 0.984848 | ||||
| vt 0.015152 0.984848 | ||||
| vt 0.015152 0.515152 | ||||
| vt 0.484848 0.515152 | ||||
| vt 0.515152 0.984848 | ||||
| vt 0.515152 0.515152 | ||||
| vt 0.984848 0.515152 | ||||
| vt 0.984848 0.984848 | ||||
| vt 0.954545 0.545455 | ||||
| vt 0.545455 0.545455 | ||||
| vt 0.954545 0.954545 | ||||
| vt 0.545455 0.954545 | ||||
| s off | ||||
| f 5/1 6/2 2/3 1/4 | ||||
| f 6/1 7/2 3/3 2/4 | ||||
| f 7/1 8/2 4/3 3/4 | ||||
| f 8/1 5/2 1/3 4/4 | ||||
| f 1/5 2/6 3/7 4/8 | ||||
| f 5/6 8/7 12/9 9/10 | ||||
| f 8/7 7/8 11/11 12/9 | ||||
| f 7/8 6/5 10/12 11/11 | ||||
| f 6/5 5/6 9/10 10/12 | ||||
| f 9/1 12/2 16/3 13/4 | ||||
| f 12/1 11/2 15/3 16/4 | ||||
| f 11/1 10/2 14/3 15/4 | ||||
| f 10/1 9/2 13/3 14/4 | ||||
| f 13/10 16/9 15/11 14/12 | ||||
| @@ -1,330 +0,0 @@ | ||||
| # Blender v2.73 (sub 0) OBJ File: 'basket-of-pies.blend' | ||||
| # www.blender.org | ||||
| o pies_Cylinder | ||||
| v -0.089468 -0.116804 -0.438000 | ||||
| v -0.116691 -0.091480 -0.438000 | ||||
| v 0.024696 0.005921 -0.404659 | ||||
| v -0.002527 0.031245 -0.404659 | ||||
| v 0.121480 0.109962 -0.309713 | ||||
| v 0.094258 0.135286 -0.309713 | ||||
| v 0.186149 0.179480 -0.167615 | ||||
| v 0.158927 0.204804 -0.167615 | ||||
| v 0.208858 0.203891 0.000000 | ||||
| v 0.181635 0.229215 0.000000 | ||||
| v 0.186149 0.179480 0.167615 | ||||
| v 0.158927 0.204804 0.167615 | ||||
| v 0.121480 0.109962 0.309713 | ||||
| v 0.094258 0.135286 0.309713 | ||||
| v 0.024696 0.005921 0.404659 | ||||
| v -0.002527 0.031245 0.404659 | ||||
| v -0.089468 -0.116804 0.438000 | ||||
| v -0.116691 -0.091480 0.438000 | ||||
| v -0.230856 -0.214204 0.404659 | ||||
| v -0.327640 -0.318245 0.309713 | ||||
| v -0.392309 -0.387763 0.167615 | ||||
| v -0.415018 -0.412175 -0.000000 | ||||
| v -0.392309 -0.387763 -0.167615 | ||||
| v -0.327640 -0.318245 -0.309713 | ||||
| v -0.230856 -0.214204 -0.404659 | ||||
| v -0.135230 -0.074234 -0.383250 | ||||
| v -0.035336 0.033150 -0.354077 | ||||
| v 0.049350 0.124186 -0.270999 | ||||
| v 0.105936 0.185014 -0.146663 | ||||
| v 0.125806 0.206374 0.000000 | ||||
| v 0.105936 0.185014 0.146663 | ||||
| v 0.049350 0.124186 0.270999 | ||||
| v -0.035336 0.033150 0.354077 | ||||
| v -0.135230 -0.074234 0.383250 | ||||
| v -0.235124 -0.181618 0.354077 | ||||
| v -0.319810 -0.272654 0.270999 | ||||
| v -0.376395 -0.333482 0.146663 | ||||
| v -0.396266 -0.354842 -0.000000 | ||||
| v -0.376395 -0.333482 -0.146664 | ||||
| v -0.319810 -0.272654 -0.270999 | ||||
| v -0.235124 -0.181618 -0.354077 | ||||
| v 0.071215 -0.085999 -0.438000 | ||||
| v 0.041377 -0.063816 -0.438000 | ||||
| v 0.171221 0.048513 -0.404659 | ||||
| v 0.141384 0.070697 -0.404659 | ||||
| v 0.256002 0.162547 -0.309713 | ||||
| v 0.226165 0.184731 -0.309713 | ||||
| v 0.312652 0.238743 -0.167615 | ||||
| v 0.282814 0.260926 -0.167615 | ||||
| v 0.332544 0.265499 0.000000 | ||||
| v 0.302707 0.287682 0.000000 | ||||
| v 0.312652 0.238743 0.167615 | ||||
| v 0.282814 0.260926 0.167615 | ||||
| v 0.256002 0.162547 0.309713 | ||||
| v 0.226165 0.184731 0.309713 | ||||
| v 0.171221 0.048513 0.404659 | ||||
| v 0.141383 0.070697 0.404659 | ||||
| v 0.071215 -0.085999 0.438000 | ||||
| v 0.041377 -0.063816 0.438000 | ||||
| v -0.058629 -0.198328 0.404659 | ||||
| v -0.058629 -0.198328 -0.404659 | ||||
| v 0.021058 -0.048709 -0.383250 | ||||
| v 0.108564 0.068989 -0.354077 | ||||
| v 0.182747 0.168769 -0.270999 | ||||
| v 0.232315 0.235440 -0.146663 | ||||
| v 0.249721 0.258852 0.000000 | ||||
| v 0.232315 0.235440 0.146663 | ||||
| v 0.182747 0.168769 0.270999 | ||||
| v 0.108564 0.068989 0.354077 | ||||
| v 0.021058 -0.048709 0.383250 | ||||
| v -0.066448 -0.166408 0.354077 | ||||
| v -0.140632 -0.266188 0.270999 | ||||
| v -0.190200 -0.332858 0.146663 | ||||
| v -0.207605 -0.356270 -0.000000 | ||||
| v -0.190199 -0.332858 -0.146664 | ||||
| v -0.140631 -0.266188 -0.270999 | ||||
| v -0.066448 -0.166408 -0.354077 | ||||
| v 0.220377 -0.057101 -0.438000 | ||||
| v 0.188086 -0.038671 -0.438000 | ||||
| v 0.303465 0.088470 -0.404659 | ||||
| v 0.271175 0.106901 -0.404659 | ||||
| v 0.373905 0.211880 -0.309713 | ||||
| v 0.341614 0.230311 -0.309713 | ||||
| v 0.420971 0.294340 -0.167615 | ||||
| v 0.388680 0.312771 -0.167615 | ||||
| v 0.437498 0.323296 0.000000 | ||||
| v 0.405208 0.341727 0.000000 | ||||
| v 0.420971 0.294340 0.167615 | ||||
| v 0.388680 0.312771 0.167615 | ||||
| v 0.373905 0.211880 0.309713 | ||||
| v 0.341614 0.230311 0.309713 | ||||
| v 0.303465 0.088470 0.404659 | ||||
| v 0.271175 0.106901 0.404659 | ||||
| v 0.220377 -0.057101 0.438000 | ||||
| v 0.188086 -0.038671 0.438000 | ||||
| v 0.104997 -0.184242 0.404659 | ||||
| v 0.104997 -0.184242 -0.404659 | ||||
| v 0.166096 -0.026119 -0.383250 | ||||
| v 0.238799 0.101256 -0.354077 | ||||
| v 0.300433 0.209240 -0.270999 | ||||
| v 0.341616 0.281392 -0.146663 | ||||
| v 0.356078 0.306728 0.000000 | ||||
| v 0.341616 0.281392 0.146664 | ||||
| v 0.300433 0.209240 0.270999 | ||||
| v 0.238799 0.101256 0.354077 | ||||
| v 0.166096 -0.026119 0.383250 | ||||
| v 0.093393 -0.153495 0.354077 | ||||
| v 0.031759 -0.261478 0.270999 | ||||
| v -0.009424 -0.333631 0.146663 | ||||
| v -0.023885 -0.358967 -0.000000 | ||||
| v -0.009424 -0.333631 -0.146664 | ||||
| v 0.031759 -0.261478 -0.270999 | ||||
| v 0.093394 -0.153495 -0.354077 | ||||
| vt 0.000000 0.054054 | ||||
| vt 0.000000 0.000000 | ||||
| vt 0.062500 0.000000 | ||||
| vt 0.062500 0.054054 | ||||
| vt 0.125000 0.000000 | ||||
| vt 0.125000 0.054054 | ||||
| vt 0.187500 0.000000 | ||||
| vt 0.187500 0.054054 | ||||
| vt 0.250000 0.000000 | ||||
| vt 0.250000 0.054054 | ||||
| vt 0.312500 0.000000 | ||||
| vt 0.312500 0.054054 | ||||
| vt 0.375000 0.000000 | ||||
| vt 0.375000 0.054054 | ||||
| vt 0.437500 0.000000 | ||||
| vt 0.437500 0.054054 | ||||
| vt 0.500000 0.000000 | ||||
| vt 0.500000 0.054054 | ||||
| vt 0.055610 0.293778 | ||||
| vt 0.110171 0.184656 | ||||
| vt 0.123905 0.225763 | ||||
| vt 0.076165 0.321244 | ||||
| vt 0.316174 0.801264 | ||||
| vt 0.253798 0.852938 | ||||
| vt 0.186282 0.852938 | ||||
| vt 0.123905 0.801264 | ||||
| vt 0.076165 0.705782 | ||||
| vt 0.050327 0.581029 | ||||
| vt 0.050327 0.445997 | ||||
| vt 0.186282 0.174088 | ||||
| vt 0.253798 0.174089 | ||||
| vt 0.316174 0.225763 | ||||
| vt 0.363915 0.321245 | ||||
| vt 0.389752 0.445997 | ||||
| vt 0.389752 0.581029 | ||||
| vt 0.363915 0.705782 | ||||
| vt 0.384468 0.733249 | ||||
| vt 0.329907 0.842371 | ||||
| vt 0.055610 0.733249 | ||||
| vt 0.026082 0.590674 | ||||
| vt 0.384468 0.293778 | ||||
| vt 0.413996 0.436353 | ||||
| vt 0.258619 0.901428 | ||||
| vt 0.181458 0.901428 | ||||
| vt 0.181458 0.125599 | ||||
| vt 0.258619 0.125599 | ||||
| vt 0.026082 0.436353 | ||||
| vt 0.413996 0.590674 | ||||
| vt 0.110171 0.842371 | ||||
| vt 0.329907 0.184656 | ||||
| vt 0.076566 0.705251 | ||||
| vt 0.050729 0.580498 | ||||
| vt 0.050729 0.445466 | ||||
| vt 0.076566 0.320713 | ||||
| vt 0.124307 0.225232 | ||||
| vt 0.186684 0.173557 | ||||
| vt 0.254199 0.173557 | ||||
| vt 0.316576 0.225232 | ||||
| vt 0.364317 0.320713 | ||||
| vt 0.390154 0.445466 | ||||
| vt 0.390154 0.580498 | ||||
| vt 0.364317 0.705251 | ||||
| vt 0.316576 0.800732 | ||||
| vt 0.254199 0.852407 | ||||
| vt 0.186684 0.852407 | ||||
| vt 0.124307 0.800732 | ||||
| vt 0.110573 0.841838 | ||||
| vt 0.056012 0.732716 | ||||
| vt 0.330309 0.841838 | ||||
| vt 0.259022 0.900894 | ||||
| vt 0.026484 0.590141 | ||||
| vt 0.026484 0.435819 | ||||
| vt 0.414398 0.435819 | ||||
| vt 0.414398 0.590141 | ||||
| vt 0.181861 0.900894 | ||||
| vt 0.384870 0.732716 | ||||
| vt 0.384870 0.293245 | ||||
| vt 0.389637 0.582094 | ||||
| vt 0.363799 0.706847 | ||||
| vt 0.316059 0.802329 | ||||
| vt 0.253682 0.854003 | ||||
| vt 0.186166 0.854003 | ||||
| vt 0.123790 0.802329 | ||||
| vt 0.076049 0.706847 | ||||
| vt 0.050212 0.582094 | ||||
| vt 0.050212 0.447062 | ||||
| vt 0.076049 0.322309 | ||||
| vt 0.123790 0.226828 | ||||
| vt 0.186166 0.175153 | ||||
| vt 0.253682 0.175153 | ||||
| vt 0.316058 0.226828 | ||||
| vt 0.363799 0.322310 | ||||
| vt 0.389637 0.447062 | ||||
| vt 0.413881 0.437419 | ||||
| vt 0.413881 0.591741 | ||||
| vt 0.258504 0.126666 | ||||
| vt 0.329792 0.185722 | ||||
| vt 0.384353 0.734315 | ||||
| vt 0.329792 0.843437 | ||||
| vt 0.055495 0.294844 | ||||
| vt 0.110056 0.185722 | ||||
| vt 0.384353 0.294844 | ||||
| vt 0.181343 0.126666 | ||||
| vt 0.025967 0.437419 | ||||
| g pies_Cylinder_pie | ||||
| s off | ||||
| f 1/1 2/2 4/3 3/4 | ||||
| f 3/4 4/3 6/5 5/6 | ||||
| f 5/6 6/5 8/7 7/8 | ||||
| f 7/8 8/7 10/9 9/10 | ||||
| f 9/10 10/9 12/11 11/12 | ||||
| f 11/12 12/11 14/13 13/14 | ||||
| f 13/14 14/13 16/15 15/16 | ||||
| f 15/16 16/15 18/17 17/18 | ||||
| f 20/19 19/20 35/21 36/22 | ||||
| f 27/23 26/24 41/25 40/26 39/27 38/28 37/29 36/22 35/21 34/30 33/31 32/32 31/33 30/34 29/35 28/36 | ||||
| f 6/37 4/38 27/23 28/36 | ||||
| f 23/39 22/40 38/28 39/27 | ||||
| f 12/41 10/42 30/34 31/33 | ||||
| f 2/43 25/44 41/25 26/24 | ||||
| f 4/38 2/43 26/24 27/23 | ||||
| f 18/45 16/46 33/31 34/30 | ||||
| f 21/47 20/19 36/22 37/29 | ||||
| f 8/48 6/37 28/36 29/35 | ||||
| f 24/49 23/39 39/27 40/26 | ||||
| f 14/50 12/41 31/33 32/32 | ||||
| f 19/20 18/45 34/30 35/21 | ||||
| f 22/40 21/47 37/29 38/28 | ||||
| f 10/42 8/48 29/35 30/34 | ||||
| f 25/44 24/49 40/26 41/25 | ||||
| f 16/46 14/50 32/32 33/31 | ||||
| f 42/1 43/2 45/3 44/4 | ||||
| f 44/4 45/3 47/5 46/6 | ||||
| f 46/6 47/5 49/7 48/8 | ||||
| f 48/8 49/7 51/9 50/10 | ||||
| f 50/10 51/9 53/11 52/12 | ||||
| f 52/12 53/11 55/13 54/14 | ||||
| f 54/14 55/13 57/15 56/16 | ||||
| f 56/16 57/15 59/17 58/18 | ||||
| f 63/51 62/52 77/53 76/54 75/55 74/56 73/57 72/58 71/59 70/60 69/61 68/62 67/63 66/64 65/65 64/66 | ||||
| f 47/67 45/68 63/51 64/66 | ||||
| f 53/69 51/70 66/64 67/63 | ||||
| f 43/71 61/72 77/53 62/52 | ||||
| f 45/68 43/71 62/52 63/51 | ||||
| f 59/73 57/74 69/61 70/60 | ||||
| f 49/75 47/67 64/66 65/65 | ||||
| f 55/76 53/69 67/63 68/62 | ||||
| f 60/77 59/73 70/60 71/59 | ||||
| f 51/70 49/75 65/65 66/64 | ||||
| f 57/74 55/76 68/62 69/61 | ||||
| f 78/1 79/2 81/3 80/4 | ||||
| f 80/4 81/3 83/5 82/6 | ||||
| f 82/6 83/5 85/7 84/8 | ||||
| f 84/8 85/7 87/9 86/10 | ||||
| f 86/10 87/9 89/11 88/12 | ||||
| f 88/12 89/11 91/13 90/14 | ||||
| f 90/14 91/13 93/15 92/16 | ||||
| f 92/16 93/15 95/17 94/18 | ||||
| f 99/78 98/79 113/80 112/81 111/82 110/83 109/84 108/85 107/86 106/87 105/88 104/89 103/90 102/91 101/92 100/93 | ||||
| f 83/94 81/95 99/78 100/93 | ||||
| f 89/96 87/97 102/91 103/90 | ||||
| f 79/98 97/99 113/80 98/79 | ||||
| f 81/95 79/98 98/79 99/78 | ||||
| f 95/100 93/101 105/88 106/87 | ||||
| f 85/102 83/94 100/93 101/92 | ||||
| f 91/103 89/96 103/90 104/89 | ||||
| f 96/104 95/100 106/87 107/86 | ||||
| f 87/97 85/102 101/92 102/91 | ||||
| f 93/101 91/103 104/89 105/88 | ||||
| o basket_Cube.001 | ||||
| v -0.500000 -0.500000 0.500000 | ||||
| v -0.500000 -0.500000 -0.500000 | ||||
| v 0.500000 -0.500000 -0.500000 | ||||
| v 0.500000 -0.500000 0.500000 | ||||
| v -0.500000 0.500000 0.500000 | ||||
| v -0.500000 0.500000 -0.500000 | ||||
| v 0.500000 0.500000 -0.500000 | ||||
| v 0.500000 0.500000 0.500000 | ||||
| v -0.437500 0.500000 0.437500 | ||||
| v -0.437500 0.500000 -0.437500 | ||||
| v 0.437500 0.500000 -0.437500 | ||||
| v 0.437500 0.500000 0.437500 | ||||
| v -0.437500 -0.437500 0.437500 | ||||
| v -0.437500 -0.437500 -0.437500 | ||||
| v 0.437500 -0.437500 -0.437500 | ||||
| v 0.437500 -0.437500 0.437500 | ||||
| vt 0.484848 0.984848 | ||||
| vt 0.015152 0.984848 | ||||
| vt 0.015152 0.515152 | ||||
| vt 0.484848 0.515152 | ||||
| vt 0.515152 0.984848 | ||||
| vt 0.515152 0.515152 | ||||
| vt 0.984848 0.515152 | ||||
| vt 0.984848 0.984848 | ||||
| vt 0.954545 0.545455 | ||||
| vt 0.545455 0.545455 | ||||
| vt 0.954545 0.954545 | ||||
| vt 0.545455 0.954545 | ||||
| g basket_Cube.001_basket | ||||
| s off | ||||
| f 118/105 119/106 115/107 114/108 | ||||
| f 119/105 120/106 116/107 115/108 | ||||
| f 120/105 121/106 117/107 116/108 | ||||
| f 121/105 118/106 114/107 117/108 | ||||
| f 114/109 115/110 116/111 117/112 | ||||
| f 118/110 121/111 125/113 122/114 | ||||
| f 121/111 120/112 124/115 125/113 | ||||
| f 120/112 119/109 123/116 124/115 | ||||
| f 119/109 118/110 122/114 123/116 | ||||
| f 122/105 125/106 129/107 126/108 | ||||
| f 125/105 124/106 128/107 129/108 | ||||
| f 124/105 123/106 127/107 128/108 | ||||
| f 123/105 122/106 126/107 127/108 | ||||
| f 126/114 129/113 128/115 127/116 | ||||
| @@ -1,329 +0,0 @@ | ||||
| # Blender v2.73 (sub 0) OBJ File: 'bush.blend' | ||||
| # www.blender.org | ||||
| o nodebox-4 | ||||
| v 0.467076 -0.122686 -0.190481 | ||||
| v -0.453590 -0.119789 -0.192145 | ||||
| v 0.420865 -0.181680 -0.171396 | ||||
| v -0.429008 -0.188000 -0.182314 | ||||
| v -0.450977 0.041977 -0.191409 | ||||
| v -0.271687 -0.294075 -0.114977 | ||||
| v -0.096925 -0.495759 -0.044091 | ||||
| v -0.070286 -0.344209 -0.030750 | ||||
| v -0.163971 -0.173437 -0.403793 | ||||
| v -0.188139 -0.116431 0.446425 | ||||
| v 0.069865 0.462329 0.170043 | ||||
| v -0.175980 -0.180649 0.417932 | ||||
| v -0.184276 0.039248 0.437271 | ||||
| v -0.121692 -0.319322 0.290049 | ||||
| v -0.039557 -0.495759 0.097032 | ||||
| v -0.029307 -0.346230 0.070496 | ||||
| v -0.440307 0.205163 -0.203598 | ||||
| v -0.440281 0.206327 0.191785 | ||||
| v -0.339366 0.327086 -0.144329 | ||||
| v -0.267923 0.418413 0.108270 | ||||
| v -0.264994 0.405691 -0.113216 | ||||
| v 0.173823 0.186657 0.424935 | ||||
| v -0.172109 0.470396 -0.073638 | ||||
| v -0.090743 0.491063 -0.039539 | ||||
| v -0.173625 0.180559 0.412022 | ||||
| v 0.108534 0.404586 0.263698 | ||||
| v -0.137870 0.317286 0.327397 | ||||
| v 0.149454 0.342906 0.361857 | ||||
| v -0.115069 0.426252 0.274637 | ||||
| v 0.116858 -0.311812 0.284557 | ||||
| v -0.074459 0.465500 0.178311 | ||||
| v -0.036397 0.486640 0.094150 | ||||
| v 0.044199 -0.495759 -0.101459 | ||||
| v 0.034559 -0.377127 -0.079219 | ||||
| v 0.116886 -0.299764 -0.276145 | ||||
| v -0.172864 0.462259 0.069984 | ||||
| v 0.173974 -0.178414 -0.411782 | ||||
| v 0.191827 0.042411 -0.453422 | ||||
| v 0.190055 -0.117435 -0.449613 | ||||
| v -0.136929 0.321997 -0.339476 | ||||
| v 0.101567 -0.495759 0.039664 | ||||
| v 0.076778 -0.365788 0.030191 | ||||
| v 0.292232 -0.320027 0.121743 | ||||
| v -0.067752 0.451498 -0.167691 | ||||
| v 0.433751 -0.189348 0.181586 | ||||
| v 0.457624 0.044950 0.184732 | ||||
| v 0.473778 -0.128221 0.198329 | ||||
| v -0.113891 -0.307852 -0.282552 | ||||
| v 0.081961 0.458662 -0.191580 | ||||
| v 0.042947 0.491063 -0.093885 | ||||
| v 0.109202 0.397842 -0.257691 | ||||
| v 0.145450 0.328672 -0.343352 | ||||
| v 0.191241 0.038411 0.444768 | ||||
| v -0.184306 0.045052 -0.456452 | ||||
| v -0.289997 -0.318897 0.117161 | ||||
| v 0.182461 0.185982 -0.431178 | ||||
| v 0.180190 0.469152 0.074510 | ||||
| v 0.097292 0.491063 0.039804 | ||||
| v 0.264954 0.412421 0.110505 | ||||
| v 0.355939 0.336100 0.148277 | ||||
| v -0.474575 0.042725 0.191924 | ||||
| v -0.169486 0.185035 -0.418844 | ||||
| v -0.445009 -0.118527 0.180804 | ||||
| v 0.427054 0.187979 0.172057 | ||||
| v 0.350926 0.339079 -0.143384 | ||||
| v 0.189060 -0.125023 0.462241 | ||||
| v 0.269270 -0.290650 -0.109472 | ||||
| v 0.175816 -0.186803 0.429367 | ||||
| v 0.259570 0.406980 -0.105942 | ||||
| v -0.103158 0.398344 -0.255462 | ||||
| v -0.339105 0.330270 0.137302 | ||||
| v -0.186029 -0.123369 -0.460126 | ||||
| v -0.418539 -0.180131 0.169838 | ||||
| v 0.041492 0.491063 0.094145 | ||||
| v 0.487251 0.041118 -0.191308 | ||||
| v 0.173059 0.459504 -0.070716 | ||||
| v 0.460259 0.206607 -0.196213 | ||||
| v 0.108065 0.487446 -0.045199 | ||||
| v -0.103423 0.491173 0.040772 | ||||
| v -0.040665 0.496765 -0.107957 | ||||
| v -0.070153 -0.343292 0.028053 | ||||
| v -0.028215 -0.347521 -0.072596 | ||||
| v 0.028031 -0.329368 0.067986 | ||||
| v 0.075170 -0.358957 -0.031186 | ||||
| v -0.037332 -0.495759 -0.099759 | ||||
| v 0.099867 -0.495759 -0.041867 | ||||
| v -0.095225 -0.495759 0.037440 | ||||
| v 0.041974 -0.495759 0.095332 | ||||
| v 0.001777 0.503796 -0.003546 | ||||
| v 0.002321 -0.495758 -0.002214 | ||||
| vt 0.875000 0.281250 | ||||
| vt 1.000000 0.281250 | ||||
| vt 1.000000 0.421875 | ||||
| vt 0.875000 0.421875 | ||||
| vt 0.375000 0.125000 | ||||
| vt 0.500000 0.125000 | ||||
| vt 0.500000 0.234375 | ||||
| vt 0.375000 0.234375 | ||||
| vt 0.625000 0.234375 | ||||
| vt 0.625000 0.281250 | ||||
| vt 0.500000 0.281250 | ||||
| vt 0.500000 0.609375 | ||||
| vt 0.500000 0.656250 | ||||
| vt 0.375000 0.656250 | ||||
| vt 0.375000 0.609375 | ||||
| vt 0.625000 0.421875 | ||||
| vt 0.500000 0.421875 | ||||
| vt 0.375000 0.281250 | ||||
| vt 0.375000 0.421875 | ||||
| vt 0.125000 0.609375 | ||||
| vt 0.125000 0.656250 | ||||
| vt 0.000000 0.656250 | ||||
| vt 0.000000 0.609375 | ||||
| vt 0.846670 0.983596 | ||||
| vt 0.823789 0.862038 | ||||
| vt 0.861831 0.862038 | ||||
| vt 0.500000 0.531250 | ||||
| vt 0.375000 0.531250 | ||||
| vt 0.234375 0.609375 | ||||
| vt 0.234375 0.531250 | ||||
| vt 0.875000 0.234375 | ||||
| vt 0.750000 0.234375 | ||||
| vt 0.750000 0.125000 | ||||
| vt 0.875000 0.125000 | ||||
| vt 0.125000 0.234375 | ||||
| vt 0.125000 0.125000 | ||||
| vt 0.234375 0.125000 | ||||
| vt 0.234375 0.234375 | ||||
| vt 0.125000 0.281250 | ||||
| vt 0.234375 0.281250 | ||||
| vt 0.234375 0.421875 | ||||
| vt 0.125000 0.421875 | ||||
| vt 0.125000 0.703125 | ||||
| vt 0.000000 0.703125 | ||||
| vt 0.875000 0.656250 | ||||
| vt 0.750000 0.656250 | ||||
| vt 0.750000 0.609375 | ||||
| vt 0.875000 0.609375 | ||||
| vt 0.625000 0.656250 | ||||
| vt 0.625000 0.609375 | ||||
| vt 0.234375 0.656250 | ||||
| vt 0.375000 0.703125 | ||||
| vt 0.234375 0.703125 | ||||
| vt 0.125000 0.531250 | ||||
| vt 0.875000 0.531250 | ||||
| vt 1.000000 0.531250 | ||||
| vt 1.000000 0.609375 | ||||
| vt 0.500000 0.703125 | ||||
| vt 0.000000 0.421875 | ||||
| vt 0.000000 0.531250 | ||||
| vt 0.875000 0.703125 | ||||
| vt 0.750000 0.703125 | ||||
| vt 0.328125 0.812500 | ||||
| vt 0.328125 0.875000 | ||||
| vt 0.265625 0.890625 | ||||
| vt 0.265625 0.781250 | ||||
| vt 0.750000 0.531250 | ||||
| vt 1.000000 0.234375 | ||||
| vt -0.000000 0.281250 | ||||
| vt 0.000000 0.234375 | ||||
| vt 0.375000 0.921875 | ||||
| vt 0.328125 0.984375 | ||||
| vt 0.562500 0.812500 | ||||
| vt 0.500000 0.828125 | ||||
| vt 0.625000 0.125000 | ||||
| vt 0.625000 0.531250 | ||||
| vt 0.970570 0.983596 | ||||
| vt 0.918853 0.862038 | ||||
| vt 0.983390 0.862038 | ||||
| vt 1.000000 0.703125 | ||||
| vt 1.000000 0.656250 | ||||
| vt 0.694849 0.983596 | ||||
| vt 0.653099 0.862038 | ||||
| vt 0.703461 0.862038 | ||||
| vt 0.453125 1.000000 | ||||
| vt 0.437500 0.937500 | ||||
| vt 0.546875 0.937500 | ||||
| vt 0.375000 0.765625 | ||||
| vt 0.625000 0.703125 | ||||
| vt 0.750000 0.281250 | ||||
| vt 0.000000 0.125000 | ||||
| vt 0.781059 0.974219 | ||||
| vt 0.740272 0.862038 | ||||
| vt 0.773590 0.862038 | ||||
| vt 0.823762 0.862067 | ||||
| vt 0.773656 0.862066 | ||||
| vt 0.800723 0.801332 | ||||
| vt 0.750000 0.421875 | ||||
| vt 1.000000 0.125000 | ||||
| vt 0.881508 0.980225 | ||||
| vt 0.923791 0.982865 | ||||
| vt 0.819499 0.959318 | ||||
| vt 0.634200 0.973424 | ||||
| vt 0.659430 0.971277 | ||||
| vt 0.724959 0.956989 | ||||
| vt 0.755822 0.968617 | ||||
| vt 0.125000 0.000000 | ||||
| vt 0.234375 0.000000 | ||||
| vt 0.375000 0.000000 | ||||
| vt 0.500000 0.000000 | ||||
| vt 0.750000 0.000000 | ||||
| vt 0.875000 0.000000 | ||||
| vt 1.000000 0.000000 | ||||
| vt 0.625000 0.000000 | ||||
| vt 0.000000 0.000000 | ||||
| vt 0.618713 0.862038 | ||||
| vt 0.453125 0.781250 | ||||
| vt 0.484375 0.890625 | ||||
| vt 0.406250 0.859375 | ||||
| vt 0.738525 0.828462 | ||||
| vt 0.741806 0.778103 | ||||
| vt 0.777683 0.740596 | ||||
| vt 0.827789 0.740597 | ||||
| vt 0.862920 0.774201 | ||||
| vt 0.859639 0.824560 | ||||
| s off | ||||
| f 63/1 10/2 13/3 61/4 | ||||
| f 67/5 35/6 37/7 3/8 | ||||
| f 9/9 72/10 39/11 37/7 | ||||
| f 52/12 51/13 69/14 65/15 | ||||
| f 72/10 54/16 38/17 39/11 | ||||
| f 1/18 39/11 38/17 75/19 | ||||
| f 28/20 26/21 29/22 27/23 | ||||
| f 82/24 33/25 85/26 | ||||
| f 75/19 38/17 56/27 77/28 | ||||
| f 77/28 65/15 60/29 64/30 | ||||
| f 73/31 4/32 6/33 55/34 | ||||
| f 68/35 30/36 43/37 45/38 | ||||
| f 66/39 47/40 46/41 53/42 | ||||
| f 11/43 31/44 29/22 26/21 | ||||
| f 20/45 21/46 19/47 71/48 | ||||
| f 70/49 40/50 19/47 21/46 | ||||
| f 59/51 69/14 76/52 57/53 | ||||
| f 3/8 37/7 39/11 1/18 | ||||
| f 28/20 22/54 64/30 60/29 | ||||
| f 71/48 18/55 25/56 27/57 | ||||
| f 69/14 51/13 49/58 76/52 | ||||
| f 13/59 53/42 22/54 25/60 | ||||
| f 36/61 23/62 21/46 20/45 | ||||
| f 58/63 74/64 11/65 57/66 | ||||
| f 57/53 11/43 26/21 59/51 | ||||
| f 19/47 17/67 18/55 71/48 | ||||
| f 73/31 12/68 10/2 63/1 | ||||
| f 68/35 66/39 10/69 12/70 | ||||
| f 74/64 32/71 31/72 11/65 | ||||
| f 53/42 46/41 64/30 22/54 | ||||
| f 25/56 18/55 61/4 13/3 | ||||
| f 49/58 44/73 80/74 | ||||
| f 45/38 3/8 1/18 47/40 | ||||
| f 9/9 48/75 6/33 4/32 | ||||
| f 62/76 40/50 52/12 56/27 | ||||
| f 81/77 7/78 87/79 | ||||
| f 31/80 36/61 20/45 29/81 | ||||
| f 83/82 15/83 88/84 | ||||
| f 36/85 79/86 23/87 | ||||
| f 78/88 58/63 57/66 | ||||
| f 17/67 19/47 40/50 62/76 | ||||
| f 45/38 47/40 66/39 68/35 | ||||
| f 51/13 70/49 44/89 49/58 | ||||
| f 4/32 73/31 63/1 2/90 | ||||
| f 12/70 14/91 30/36 68/35 | ||||
| f 84/92 41/93 86/94 | ||||
| f 33/95 86/96 90/97 | ||||
| f 70/49 21/46 23/62 44/89 | ||||
| f 54/16 62/76 56/27 38/17 | ||||
| f 29/81 20/45 71/48 27/57 | ||||
| f 37/7 35/6 48/75 9/9 | ||||
| f 5/98 17/67 62/76 54/16 | ||||
| f 18/55 17/67 5/98 61/4 | ||||
| f 10/69 66/39 53/42 13/59 | ||||
| f 12/68 73/31 55/34 14/99 | ||||
| f 51/13 52/12 40/50 70/49 | ||||
| f 27/23 25/60 22/54 28/20 | ||||
| f 65/15 69/14 59/51 60/29 | ||||
| f 56/27 52/12 65/15 77/28 | ||||
| f 46/41 75/19 77/28 64/30 | ||||
| f 60/29 59/51 26/21 28/20 | ||||
| f 47/40 1/18 75/19 46/41 | ||||
| f 2/90 5/98 54/16 72/10 | ||||
| f 4/32 2/90 72/10 9/9 | ||||
| f 43/37 67/5 3/8 45/38 | ||||
| f 2/90 63/1 61/4 5/98 | ||||
| f 82/100 7/78 8/101 | ||||
| f 82/24 34/102 33/25 | ||||
| f 81/103 15/83 16/104 | ||||
| f 81/77 8/101 7/78 | ||||
| f 83/82 41/93 42/105 | ||||
| f 83/82 16/104 15/83 | ||||
| f 84/92 33/25 34/102 | ||||
| f 84/92 42/106 41/93 | ||||
| f 30/36 83/107 42/108 43/37 | ||||
| f 42/108 84/109 67/5 43/37 | ||||
| f 67/5 84/109 34/110 35/6 | ||||
| f 55/34 6/33 8/111 81/112 | ||||
| f 55/34 81/112 16/113 14/99 | ||||
| f 34/110 82/114 48/75 35/6 | ||||
| f 48/75 82/114 8/111 6/33 | ||||
| f 30/36 14/91 16/115 83/107 | ||||
| f 7/78 82/100 85/26 | ||||
| f 15/83 81/103 87/116 | ||||
| f 41/93 83/82 88/84 | ||||
| f 33/25 84/92 86/94 | ||||
| f 80/74 50/117 49/58 | ||||
| f 23/87 24/118 80/74 | ||||
| f 80/74 44/73 23/87 | ||||
| f 79/86 36/85 31/72 | ||||
| f 79/86 24/118 23/87 | ||||
| f 31/72 32/71 79/86 | ||||
| f 78/88 49/58 50/117 | ||||
| f 78/88 57/66 76/52 | ||||
| f 76/52 49/58 78/88 | ||||
| f 24/118 79/86 89/119 | ||||
| f 79/86 32/71 89/119 | ||||
| f 32/71 74/64 89/119 | ||||
| f 74/64 58/63 89/119 | ||||
| f 58/63 78/88 89/119 | ||||
| f 78/88 50/117 89/119 | ||||
| f 50/117 80/74 89/119 | ||||
| f 80/74 24/118 89/119 | ||||
| f 86/96 41/120 90/97 | ||||
| f 41/120 88/121 90/97 | ||||
| f 88/121 15/122 90/97 | ||||
| f 15/122 87/123 90/97 | ||||
| f 87/123 7/124 90/97 | ||||
| f 7/124 85/125 90/97 | ||||
| f 85/125 33/95 90/97 | ||||
| @@ -1,143 +1,145 @@ | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("bushes_classic") | ||||
| -- Boilerplate to support localized strings if intllib mod is installed. | ||||
| local S | ||||
| if (minetest.get_modpath("intllib")) then | ||||
|   dofile(minetest.get_modpath("intllib").."/intllib.lua") | ||||
|   S = intllib.Getter(minetest.get_current_modname()) | ||||
| else | ||||
|   S = function ( s ) return s end | ||||
| end | ||||
|  | ||||
|  | ||||
| plantlife_bushes = {} | ||||
|  | ||||
| -- TODO: add support for nodebreakers? those dig like mese picks | ||||
| plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||
| 	if not (digger and pos and oldnode) then | ||||
| 		return | ||||
| plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger)  | ||||
| 	if( not( digger ) or not( pos ) or not (oldnode )) then | ||||
| 		return nil; | ||||
| 	end | ||||
|  | ||||
| 	-- find out which bush type we are dealing with | ||||
| 	local bush_name   = "" | ||||
| 	local can_harvest = false | ||||
|  | ||||
| 	if oldnode.name == "bushes:fruitless_bush" then | ||||
| 	local bush_name   = ""; | ||||
| 	local can_harvest = false; | ||||
| 	 | ||||
| 	if( oldnode.name == 'bushes:fruitless_bush' ) then | ||||
| 		-- this bush has not grown fruits yet (but will eventually) | ||||
| 		bush_name = oldmetadata.fields.bush_type | ||||
| 		bush_name   = oldmetadata[ 'fields' ][ 'bush_type' ]; | ||||
| 		-- no fruits to be found, so can_harvest stays false | ||||
| 	else | ||||
| 		local name_parts = oldnode.name:split(":") | ||||
| 		if #name_parts >= 2 and name_parts[2] ~= nil then | ||||
| 		local name_parts = oldnode.name:split( ":" ); | ||||
| 		if( #name_parts >= 2 and name_parts[2]~=nil ) then | ||||
|  | ||||
| 			name_parts = name_parts[2]:split("_") | ||||
| 			name_parts = name_parts[2]:split( "_" ); | ||||
|  | ||||
| 			if #name_parts >= 2 and name_parts[1] ~= nil then | ||||
| 				bush_name = name_parts[1] | ||||
| 			if( #name_parts >= 2 and name_parts[1]~=nil ) then | ||||
| 				bush_name   = name_parts[1]; | ||||
| 				-- this bush really carries fruits | ||||
| 				can_harvest = true | ||||
| 				can_harvest = true; | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	-- find out which tool the digger was wielding (if any) | ||||
| 	local toolstack = digger:get_wielded_item() | ||||
| 	local capabilities = toolstack:get_tool_capabilities() | ||||
| 	local toolstack    = digger:get_wielded_item(); | ||||
| 	local capabilities = toolstack:get_tool_capabilities(); | ||||
|  | ||||
| 	-- what the player will get | ||||
| 	local harvested | ||||
| 	local harvested    = ""; | ||||
| 	local amount       = ""; | ||||
|  | ||||
| 	-- failure to find out what the tool can do: destroy the bush and return nothing | ||||
| 	local groupcaps = capabilities.groupcaps | ||||
| 	if not groupcaps then | ||||
| 		return | ||||
| 	if( not( capabilities["groupcaps"] )) then | ||||
| 		return nil; | ||||
|  | ||||
| 	-- digging with the hand or something like that | ||||
| 	elseif groupcaps.snappy then | ||||
| 	elseif(	capabilities["groupcaps"]["snappy"] ) then | ||||
|  | ||||
| 		-- plant a new bush without fruits | ||||
| 		minetest.swap_node(pos, {type = "node", name = "bushes:fruitless_bush"}) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		meta:set_string('bush_type', bush_name) | ||||
| 		minetest.set_node(pos,{type='node',name='bushes:fruitless_bush'}) | ||||
| 		local meta = minetest.get_meta( pos ); | ||||
| 		meta:set_string( 'bush_type', bush_name );  | ||||
|  | ||||
| 		-- construct the stack of fruits the player will get | ||||
| 		-- only bushes that have grown fruits can actually give fruits | ||||
| 		if can_harvest then | ||||
| 			local amount = "4" | ||||
| 			harvested = "bushes:" .. bush_name .. " " .. amount | ||||
| 		if( can_harvest == true ) then | ||||
| 			amount    = "4"; | ||||
| 			harvested = "bushes:"..bush_name.." "..amount; | ||||
| 		end | ||||
|  | ||||
| 	-- something like a shovel | ||||
| 	elseif groupcaps.crumbly then | ||||
| 	elseif( capabilities["groupcaps"]["crumbly"] ) then | ||||
|  | ||||
| 		-- with a chance of 1/3, return 2 bushes | ||||
| 		local amount | ||||
| 		if math.random(1,3) == 1 then | ||||
| 			amount = "2" | ||||
| 		if( math.random(1,3)==1 ) then | ||||
| 			amount = "2"; | ||||
| 		else | ||||
| 			amount = "1" | ||||
| 			amount = "1"; | ||||
| 		end | ||||
| 		-- return the bush itself | ||||
| 		harvested = "bushes:" .. bush_name .. "_bush "..amount | ||||
| 		harvested = "bushes:" .. bush_name .. "_bush "..amount; | ||||
|  | ||||
| 	-- something like an axe | ||||
| 	elseif groupcaps.choppy then | ||||
| 	elseif( capabilities["groupcaps"]["choppy"] ) then | ||||
|  | ||||
| 		-- the amount of sticks may vary | ||||
| 		local amount = math.random(4, 20) | ||||
| 		amount    = math.random( 4, 20 ); | ||||
| 		-- return some sticks | ||||
| 		harvested = "default:stick " .. amount | ||||
| 		harvested = "default:stick "..amount; | ||||
|  | ||||
| 	-- nothing known - destroy the plant | ||||
| 	else | ||||
| 		return | ||||
| 		return nil; | ||||
| 	end | ||||
|  | ||||
| 	-- give the harvested result to the player | ||||
| 	if harvested then | ||||
| 	if( harvested ~= "" ) then | ||||
| 		--minetest.chat_send_player("singleplayer","you would now get "..tostring( harvested ) ); | ||||
| 		local itemstack = ItemStack(harvested) | ||||
| 		local inventory = digger:get_inventory() | ||||
| 		if inventory:room_for_item("main", itemstack) then | ||||
| 			inventory:add_item("main", itemstack) | ||||
| 		else | ||||
| 			minetest.item_drop(itemstack, digger, pos) | ||||
| 		end | ||||
| 		digger:get_inventory():add_item( "main", harvested ); | ||||
| 	end | ||||
| end | ||||
|  | ||||
|  | ||||
|  | ||||
| plantlife_bushes.after_place_node = function(pos, placer, itemstack) | ||||
|  | ||||
| 	if not (itemstack and pos) then | ||||
| 		return | ||||
| 	if( not( itemstack ) or not( pos )) then | ||||
| 		return nil; | ||||
| 	end | ||||
|  | ||||
| 	local name_parts = itemstack:get_name():split(":") | ||||
| 	if #name_parts < 2 or name_parts[2] == nil then | ||||
| 		return | ||||
| 	local name_parts = itemstack:get_name():split( ":" ); | ||||
| 	if( #name_parts <2 or name_parts[2]==nil ) then | ||||
| 		return nil; | ||||
| 	end | ||||
|  | ||||
| 	name_parts = name_parts[2]:split("_") | ||||
| 	name_parts = name_parts[2]:split( "_" ); | ||||
|  | ||||
| 	if #name_parts < 2 or name_parts[1] == nil then | ||||
| 		return | ||||
| 	if( #name_parts <2 or name_parts[1]==nil ) then | ||||
| 		return nil; | ||||
| 	end | ||||
|  | ||||
| 	minetest.swap_node(pos, {name = "bushes:fruitless_bush"}) | ||||
| 	local meta = minetest.get_meta(pos) | ||||
| 	meta:set_string("bush_type", name_parts[1]) | ||||
| 	minetest.set_node( pos, {type='node',name='bushes:fruitless_bush'}); | ||||
| 	local meta = minetest.get_meta( pos ); | ||||
| 	meta:set_string( 'bush_type', name_parts[1] );  | ||||
|  | ||||
| 	return nil; | ||||
| end | ||||
|  | ||||
| -- regrow berries (uses a base abm instead of biome_lib because of the use of metadata). | ||||
|  | ||||
|  | ||||
| -- regrow berries (uses a base abm instead of plants_lib because of the use of metadata). | ||||
|  | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"bushes:fruitless_bush"}, | ||||
| 	neighbors = {"group:soil", "group:potting_soil"}, | ||||
| 	nodenames = { "bushes:fruitless_bush" }, | ||||
| 	interval = 500, | ||||
| 	chance = 5, | ||||
| 	action = function(pos, node, active_object_count, active_object_count_wider) | ||||
|  | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local bush_name = meta:get_string("bush_type") | ||||
|  | ||||
| 		if bush_name and bush_name ~= "" then | ||||
| 			local dirtpos = {x = pos.x, y = pos.y-1, z = pos.z} | ||||
| 		local meta = minetest.get_meta( pos ); | ||||
| 		local bush_name = meta:get_string( 'bush_type' );  | ||||
| 		if( bush_name ~= nil and bush_name ~= '' ) then | ||||
| 			local dirtpos = { x = pos.x, y = pos.y-1, z = pos.z } | ||||
| 			local dirt = minetest.get_node(dirtpos) | ||||
| 			local is_soil = minetest.get_item_group(dirt.name, "soil") or minetest.get_item_group(dirt.name, "potting_soil") | ||||
|  | ||||
| 			if is_soil and (dirt.name == "farming:soil_wet" or math.random(1,3) == 1) then | ||||
| 				minetest.swap_node( pos, {name = "bushes:" .. bush_name .. "_bush"}) | ||||
| 			if dirt.name == "farming:soil_wet" or math.random(1,3) == 1 then | ||||
| 				minetest.set_node( pos, {type='node',name='bushes:'..bush_name..'_bush'}) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| @@ -147,16 +149,15 @@ minetest.register_abm({ | ||||
|  | ||||
| for i, bush_name in ipairs(bushes_classic.bushes) do | ||||
|  | ||||
| 	local desc = bushes_classic.bushes_descriptions[i] | ||||
|  | ||||
| 	minetest.register_node(":bushes:basket_"..bush_name, { | ||||
| 		description = bushes_classic.bushes_descriptions[i][5], | ||||
| 		drawtype = "mesh", | ||||
| 		mesh = "bushes_basket_full.obj", | ||||
| 		description = S("Basket with "..desc.." Pies"), | ||||
| 		tiles = { | ||||
| 			"bushes_basket_pie_"..bush_name..".png", | ||||
| 			"bushes_basket.png" | ||||
| 		"bushes_basket_"..bush_name.."_top.png", | ||||
| 		"bushes_basket_bottom.png", | ||||
| 		"bushes_basket_side.png" | ||||
| 		}, | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		on_use = minetest.item_eat(18), | ||||
| 		groups = { dig_immediate = 3 }, | ||||
| 	}) | ||||
| @@ -166,6 +167,7 @@ for i, bush_name in ipairs(bushes_classic.bushes) do | ||||
| 	local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1} | ||||
| 	if bush_name == "mixed_berry" then | ||||
| 		bush_name = "fruitless"; | ||||
| 		desc      = S("currently fruitless"); | ||||
| 		texture_top = "bushes_fruitless_bush_top.png" | ||||
| 		texture_bottom = "bushes_fruitless_bush_bottom.png" | ||||
| 		groups.not_in_creative_inventory = 1 | ||||
| @@ -175,22 +177,35 @@ for i, bush_name in ipairs(bushes_classic.bushes) do | ||||
| 	end | ||||
|  | ||||
| 	minetest.register_node(":bushes:" .. bush_name .. "_bush", { | ||||
| 		description = bushes_classic.bushes_descriptions[i][6], | ||||
| 		drawtype = "mesh", | ||||
| 		mesh = "bushes_bush.obj", | ||||
| 		tiles = {"bushes_bush_"..bush_name..".png"}, | ||||
| 		paramtype = "light", | ||||
| 		sunlight_propagates = true, | ||||
| 		walkable = false, | ||||
| 		groups = groups, | ||||
| 		sounds = default.node_sound_leaves_defaults(), | ||||
| 		drop = "", | ||||
| 		after_dig_node = function( pos, oldnode, oldmetadata, digger ) | ||||
| 			return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger); | ||||
| 		end, | ||||
| 		after_place_node = function( pos, placer, itemstack ) | ||||
| 			return plantlife_bushes.after_place_node(pos, placer, itemstack); | ||||
| 		end, | ||||
| 			description = S(desc.." Bush"), | ||||
| 			drawtype = "nodebox", | ||||
| 			tiles = {texture_top, texture_bottom, "bushes_" .. bush_name .. "_bush.png"}, | ||||
| 			inventory_image = "bushes_" .. bush_name .. "_bush.png", | ||||
| 			paramtype = "light", | ||||
| 			sunlight_propagates = true, | ||||
| 			walkable = false, | ||||
| 			node_box = { | ||||
| 				type = "fixed", | ||||
| 				fixed = { | ||||
| 					{-1/16,	-8/16,	-1/16,	1/16,	-6/16,	1/16}, | ||||
| 					{-4/16,	-6/16,	-4/16,	4/16,	5/16,	4/16}, | ||||
| 					{-5/16,	-5/16,	-5/16,	5/16,	3/16,	5/16}, | ||||
| 					{-6/16,	-4/16,	-6/16,	6/16,	2/16,	6/16}, | ||||
| 					{-6.5/16,	-3/16,	-6.5/16,	6.5/16,	-2/16,	6.5/16}, | ||||
| 					{-3/16,	5/16,	-3/16,	3/16,	6/16,	3/16}, | ||||
| 					{-2/16,	5/16,	-2/16,	2/16,	7/16,	2/16} | ||||
| 				} | ||||
| 			}, | ||||
|  | ||||
| 			groups = groups, | ||||
| 			sounds = default.node_sound_leaves_defaults(), | ||||
| 			drop = "", | ||||
| 			after_dig_node = function( pos, oldnode, oldmetadata, digger ) | ||||
| 				return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger); | ||||
| 			end, | ||||
| 			after_place_node = function( pos, placer, itemstack ) | ||||
| 				return plantlife_bushes.after_place_node(pos, placer, itemstack); | ||||
| 			end, | ||||
| 	}) | ||||
|  | ||||
| 	-- do not spawn fruitless bushes | ||||
| @@ -199,12 +214,15 @@ for i, bush_name in ipairs(bushes_classic.bushes) do | ||||
| 	end | ||||
| end | ||||
|  | ||||
|  | ||||
| minetest.register_node(":bushes:basket_empty", { | ||||
|     description = S("Basket"), | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "bushes_basket_empty.obj", | ||||
| 	tiles = { "bushes_basket.png" }, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
|     tiles = { | ||||
| 	"bushes_basket_empty_top.png", | ||||
| 	"bushes_basket_bottom.png", | ||||
| 	"bushes_basket_side.png" | ||||
|     }, | ||||
|     groups = { dig_immediate = 3 }, | ||||
| }) | ||||
|  | ||||
|  | ||||
|   | ||||
| Before Width: | Height: | Size: 2.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_blackberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_blueberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 248 B | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_empty_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 271 B | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_gooseberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_mixed_berry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_raspberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 341 B | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_strawberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_blackberry_bush.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.0 KiB | 
| Before Width: | Height: | Size: 601 B After Width: | Height: | Size: 725 B | 
| Before Width: | Height: | Size: 612 B After Width: | Height: | Size: 751 B | 
| Before Width: | Height: | Size: 341 B After Width: | Height: | Size: 391 B | 
| Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_blueberry_bush.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.0 KiB |