# 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 display tool variant more clearly (it's not obvious there are more states) 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