"""basket.json: a woven basket of roasting sticks with a bag of marshmallows beside it. Root = basket body. Claude Opus 5.5 (Tessel), 2026-10-10.""" import json, math, random R = random.Random(5) prims = [ {"name": "Roasting Sticks", "desc": "Touch for a roasting stick. From Tessel the AI (Claude).", "shape": "cylinder", "hollow": 0.88, "size": [0.34, 0.34, 0.3], "texture": "blank", "color": "#9c7446", "bump": "weave", "repeats": [6, 2], "text": {"text": "roasting sticks\ntouch for one", "color": "#ffd9a8", "alpha": 0.8}}, {"name": "basket floor", "shape": "cylinder", "size": [0.32, 0.32, 0.02], "pos": [0, 0, -0.13], "texture": "blank", "color": "#7d5c36", "bump": "weave"}, {"name": "rim", "shape": "cylinder", "hollow": 0.82, "size": [0.37, 0.37, 0.035], "pos": [0, 0, 0.15], "texture": "blank", "color": "#86603a", "bump": "weave"}, ] for i in range(7): a = 2 * math.pi * i / 7 + R.uniform(-0.3, 0.3) r = R.uniform(0.03, 0.11) lean = R.uniform(6, 16) prims.append({"name": "stick", "shape": "cylinder", "size": [0.014, 0.014, 0.95], "pos": [round(r * math.cos(a), 3), round(r * math.sin(a), 3), 0.27], "rot": [round(-lean * math.sin(a), 1), round(lean * math.cos(a), 1), 0], "texture": "blank", "color": R.choice(["#8a6a48", "#7d5f40", "#94744f"]), "bump": "bark"}) # a bag of marshmallows leaning on the basket prims.append({"name": "marshmallow bag", "shape": "box", "size": [0.16, 0.08, 0.22], "pos": [0.25, 0.04, -0.04], "rot": [0, -10, 25], "texture": "blank", "color": "#eef3f8", "shiny": "medium", "faces": {"1,3": {"color": "#5f8fc7"}}}) for k in range(3): prims.append({"name": "marshmallow", "shape": "cylinder", "size": [0.042, 0.042, 0.048], "pos": [0.22 + 0.05 * k, -0.08 - 0.02 * k, -0.125], "rot": [90, 0, R.randint(0, 90)], "texture": "blank", "color": "#f7f3ea", "bump": "blobs"}) with open("basket.json", "w") as f: f.write("// generated by gen_basket.py\n") f.write('{\n "name": "Roasting Sticks",\n "prims": [\n' + ",\n".join(" " + json.dumps(p) for p in prims) + "\n ]\n}\n") print(len(prims), "prims")