No description
Find a file
2024-12-18 21:31:05 +01:00
assets add ui buttons for undo/redo 2024-12-17 15:40:27 +01:00
levels support multiple stages for each level, resetting the machine between 2024-12-18 21:31:05 +01:00
src support multiple stages for each level, resetting the machine between 2024-12-18 21:31:05 +01:00
.gitignore makefile with linux release 2024-10-13 13:34:33 +02:00
Cargo.lock set window title and package name 2024-12-09 12:42:50 +01:00
Cargo.toml set window title and package name 2024-12-09 12:42:50 +01:00
Makefile makefile with linux release 2024-10-13 13:34:33 +02:00
README.md support multiple stages for each level, resetting the machine between 2024-12-18 21:31:05 +01:00
rustfmt.toml init 2024-10-03 22:59:49 +02:00

marble machinations

(working title)

logic mostly like https://git.crispypin.cc/CrispyPin/marble

todo

  • show level info in editor
  • comments
  • accessibility
    • background colour setting
    • hotkeys for everything
  • more levels
  • make direct power (comparator -> machine) work, (needs storing power direction in machine tiles)
  • cut selections, copy to system clipboard
  • timestamps in solutions and blueprints
  • 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)
  • 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

{
  "id": "output",
  "sortorder": 5,
  "name": "Zeroes",
  "description": "learn how to output data",
  "init_board": "<optional, serialized board>",
  "stages": [{
    "input": [],
    "output": [0, 0, 0, 0, 0, 0, 0, 0],
  }]
}

solution

00_zeroes/solution_0.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

{
  "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, button, silo 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, silo 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