marble-machinations/README.md

2 KiB

marble machinations

(working title)

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

todo

(more levels) story/lore timestamps in solutions and blueprints multiple input/output sets tooltips lock tile types for early levels to make it less overwhelming make a gui alternative to pressing R to rotate between tile variants scroll level list scroll blueprint list 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

{
  "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

{
  "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

{
  "id": "blueprint_0",
  "name": "zero_printer",
  "board": "o -B I\n> * < \n"
}

levels

intro, basic mechanics

  • output a zero
  • output two numbers in sequence
  • output zeroes forever (looping)
  • copy the input
  • copy only odd input numbers

0-terminated list processing

  • calculate list length
  • count instances of 5 in a list
  • copy the second list (ignore input until first zero)
  • reverse a list

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