 		checkSceneEnded(15);
 }
 
+int startLen = 40;
+int branches = 3;
+double branchAngle = 30.0;
+double angleOffset = 0.0;
+int rouletteDenominator = 1;
+int treeXOffset = 0;
+
+void lSystemRecursive(int x, int y, double angle, int len) {
+		if (len < 1) {
+				return;
+		}
+
+		drawLineAngle(x, y, angle, len);
+		int endX, endY;
+		toCartesian(x, y, angle, len, &endX, &endY);
+
+		double startAngle = angle + ((branchAngle * (branches - 1)) / 2.0) + angleOffset;
+		for (int i = 0; i < branches; i++) {
+				double a = startAngle - (i * branchAngle);
+				if (random(rouletteDenominator) != 0) {
+						lSystemRecursive(endX, endY, a, len / 2);
+				}
+		}
+}
+
+void drawLSystem() {
+		startLen = random(30, 50);
+		branches = random(3, 5);
+		branchAngle = random(25, 40);
+		angleOffset = -10 + random(20);
+		rouletteDenominator = random(3, 5);
+		treeXOffset = -20 + random(40);
+		lSystemRecursive(treeXOffset + (WIDTH / 2), HEIGHT - 1, 90.0 + angleOffset, startLen);
+} 
+
+void lSystemScene() {
+		drawLSystem();
+		TV.delay(200);
+		TV.clear_screen();
+
+		checkSceneEnded(20);
+}
+
 void loop() {
 		bool changed = false;
 		if (currentScene != lastScene) {

				case CIRCLES:
						circlesScene(changed);
						break;
				default:
						TV.print("Invalid scene. ");
						TV.delay(1000);

		PARTY_WORDS,
		FILL_LINES,
		CIRCLES,
		L_SYSTEM,
		TOTAL
};

//TODO: Re-enable "verify code" in Arduino IDE

Scene currentScene = L_SYSTEM;
Scene lastScene = -1;
TVout TV;
unsigned long startTime = 0;
