L-system trees

Tree definition

treedef={
    axiom,         --string  initial tree axiom
    rules_a,       --string  rules set A
    rules_b,       --string  rules set B
    rules_c,       --string  rules set C
    rules_d,       --string  rules set D
    trunk,         --string  trunk node name
    leaves,        --string  leaves node name
    leaves2,       --string  secondary leaves node name
    leaves2_chance,--num     chance (0-100) to replace leaves with leaves2
    angle,         --num     angle in deg
    iterations,    --num     max # of iterations, usually 2 -5
    random_level,  --num     factor to lower nr of iterations, usually 0 - 3
    trunk_type,    --string  single/double/crossed) type of trunk: 1 node,
                   --        2x2 nodes or 3x3 in cross shape
    thin_branches, --boolean true -> use thin (1 node) branches
    fruit,         --string  fruit node name
    fruit_chance,  --num     chance (0-100) to replace leaves with fruit node
    seed,          --num     random seed, if no seed is provided, the engine
                             will create one.
}

Key for special L-System symbols used in axioms

  • G: move forward one unit with the pen up
  • F: move forward one unit with the pen down drawing trunks and branches
  • f: move forward one unit with the pen down drawing leaves (100% chance)
  • T: move forward one unit with the pen down drawing trunks only
  • R: move forward one unit with the pen down placing fruit
  • A: replace with rules set A
  • B: replace with rules set B
  • C: replace with rules set C
  • D: replace with rules set D
  • a: replace with rules set A, chance 90%
  • b: replace with rules set B, chance 80%
  • c: replace with rules set C, chance 70%
  • d: replace with rules set D, chance 60%
  • +: yaw the turtle right by angle parameter
  • -: yaw the turtle left by angle parameter
  • &: pitch the turtle down by angle parameter
  • ^: pitch the turtle up by angle parameter
  • /: roll the turtle to the right by angle parameter
  • *: roll the turtle to the left by angle parameter
  • [: save in stack current state info
  • ]: recover from stack state info

Example

Spawn a small apple tree:

pos = {x=230,y=20,z=4}
apple_tree={
    axiom="FFFFFAFFBF",
    rules_a="[&&&FFFFF&&FFFF][&&&++++FFFFF&&FFFF][&&&----FFFFF&&FFFF]",
    rules_b="[&&&++FFFFF&&FFFF][&&&--FFFFF&&FFFF][&&&------FFFFF&&FFFF]",
    trunk="default:tree",
    leaves="default:leaves",
    angle=30,
    iterations=2,
    random_level=0,
    trunk_type="single",
    thin_branches=true,
    fruit_chance=10,
    fruit="default:apple"
}
minetest.spawn_tree(pos,apple_tree)