# marble machinations (working title) logic mostly like https://git.crispypin.cc/CrispyPin/marble ## todo - comments - accessibility - ui scaling - background colour setting - hotkeys for everything - more levels - scroll output bytes - make direct power (comparator -> machine) work, (needs storing power direction in machine tiles) - cut selections, copy to system clipboard - timestamps in solutions and blueprints - 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/ - chapter_01.json - chapter_02.json - sandbox.json - user/ - solutions/ - output/ - solution_0.json - solution_1.json - copy_input/ - solution_0.json - solution_3.json - blueprints - blueprint_0.json ``` ## levels ### intro, basic mechanics - output a zero (marble, output) - output multiple numbers in sequence (digits) - output zeroes forever (looping/arrows, button, silo output) - copy the input (input) - increment every number (math tiles) - copy only odd input numbers (comparator, flipper) ### 0-terminated list processing - copy the second list - calculate list length (math, silo input) - count instances of 5 in a list - reverse a list (bouncing) ### text - convert text to lowercase - convert a number to decimal ascii - parse an ascii number ### advanced list processing - index a list - reverse and return the first n elements of a list, with n given first - add two lists element-wise - sort a list