# marble machinations (working title) logic mostly like https://git.crispypin.cc/CrispyPin/marble ## todo - undo/redo - more levels - make marble movement symmetric and order-independent - make power propagation not recursive - story/lore - cut selections, copy to system clipboard - timestamps in solutions and blueprints - multiple input/output sets - tooltips - show level info in editor - lock tile types for early levels to make it less overwhelming - display tool variant more clearly (it's not obvious there are more states) - option to use 8-bit marbles? - blueprint rotation? # physics - find direct bounces (todo consistency) - execute direct bounces - mark tiles as Claimed, ClaimedIndirect, BlockedIndirect, Blocked - direct movements can move to any but Blocked tiles - indirect movements can only move to ClaimedIndirect - Claimed + ClaimedIndirect = BlockedIndirect - ClaimedIndirect + ClaimedIndirect = BlockedIndirect - Claimed + Claimed = Blocked - BlockedIndirect + Claimed = Claimed ## file hierarchy ``` - assets/ - levels/ - 01_intro/ - 01_output.json - 02_cat.json - 02_lists/ - 02_parse.json - sandbox.json - user/ - solutions/ - output/ - solution_0.json - solution_1.json - copy_input/ - solution_0.json - solution_3.json - blueprints - blueprint_0.json ``` ## formats ### level `00_zeroes.json` ```json { "id": "output", "sortorder": 5, "name": "Zeroes", "description": "learn how to output data", "init_board": null, "inputs": [], "outputs": [0, 0, 0, 0, 0, 0, 0, 0], } ``` ### solution `00_zeroes/solution_0.json` ```json { "level_id": "00_zeroes", "solution_id": 0, "name": "unnamed 1", "board": "oo\nP*\n|-", "score": { "cycles": 8, "tiles": 6, "area": 6, } } ``` ### blueprint `blueprints/blueprint_0.json` ```json { "id": 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