# marble machinations (working title) logic mostly like https://git.crispypin.cc/CrispyPin/marble ## todo (more levels) story/lore copy/cut/paste selections timestamps in solutions and blueprints multiple input/output sets undo/redo make math tiles read digits tooltips lock tile types for early levels to make it less overwhelming make a gui alternative to pressing R to rotate between tile variants make marble movement more consistent (`>o o<` depends on internal marble order) decide on marble data size (u32 or byte?) blueprint rotation? ## file hierarchy ``` - assets/ - levels/ - 00_zeroes.json - 01_cat.json - 02_parse.json - 99_sandbox.json - user/ - solutions/ - 00_zeroes/ - solution_0.json - solution_1.json - 01_cat/ - solution_0.json - solution_3.json - blueprints - blueprint_0.json ``` ## formats ### level `00_zeroes.json` ```json { "id": "00_zeroes", "sortorder": 5, "name": "Zeroes", "description": "learn how to output data", "init_board": null, "inputs": [], "outputs": [0, 0, 0, 0, 0, 0, 0, 0], "input_is_text": false, "output_is_text": false } ``` ### solution `00_zeroes/solution_0.json` ```json { "level_id": "00_zeroes", "solution_id": "solution_0", "name": "unnamed 1", "board": "oo\nP*\n|-", "score": { "cycles": 8, "tiles": 6, "area": 6, } } ``` ### blueprint `blueprints/blueprint_0.json` ```json { "id": "blueprint_0", "name": "zero_printer", "board": "o -B I\n> * < \n" } ``` ## levels ### intro, basic mechanics - output a zero (marble, io) - output multiple numbers in sequence (digits) - output zeroes forever (looping, trigger, bag output) - copy the input (input) - copy only odd input numbers (comparator, math, flipper) ### 0-terminated list processing - copy the second list - calculate list length (math, bag input) - count instances of 5 in a list - reverse a list (bouncing) ### user-friendly numbers - convert a number to decimal ascii - parse an ascii number - convert text to lowercase ### advanced list processing - index a list - search a list - add two lists element-wise - sort list