marble-machinations/README.md

104 lines
2.1 KiB
Markdown
Raw Normal View History

2024-10-06 00:57:24 +02:00
# marble machinations
(working title)
logic mostly like https://git.crispypin.cc/CrispyPin/marble
2024-10-06 12:39:36 +02:00
## todo
(more levels)
story/lore
copy/cut/paste selections
timestamps in solutions and blueprints
multiple input/output sets
undo/redo
tooltips
2024-10-13 17:00:59 +02:00
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)
make marble movement more consistent (`>o o<` depends on internal marble order)
2024-10-06 12:39:36 +02:00
decide on marble data size (u32 or byte?)
blueprint rotation?
2024-10-06 12:39:36 +02:00
## file hierarchy
2024-10-06 00:57:24 +02:00
```
- assets/
- levels/
2024-10-13 17:00:59 +02:00
- 01_intro/
- 01_output.json
- 02_cat.json
- 02_lists/
- 02_parse.json
- sandbox.json
- user/
2024-10-06 00:57:24 +02:00
- solutions/
2024-10-13 17:00:59 +02:00
- output/
2024-10-06 00:57:24 +02:00
- solution_0.json
- solution_1.json
2024-10-13 17:00:59 +02:00
- copy_input/
2024-10-06 00:57:24 +02:00
- solution_0.json
- solution_3.json
2024-10-06 00:57:24 +02:00
- blueprints
- blueprint_0.json
```
## formats
### level
2024-10-06 00:57:24 +02:00
`00_zeroes.json`
```json
{
2024-10-13 17:00:59 +02:00
"id": "output",
"sortorder": 5,
2024-10-06 12:39:36 +02:00
"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
2024-10-06 00:57:24 +02:00
}
```
### solution
2024-10-06 00:57:24 +02:00
`00_zeroes/solution_0.json`
```json
{
"level_id": "00_zeroes",
2024-10-13 01:23:56 +02:00
"solution_id": 0,
2024-10-06 12:39:36 +02:00
"name": "unnamed 1",
"board": "oo\nP*\n|-",
"score": {
"cycles": 8,
"tiles": 6,
"area": 6,
}
2024-10-06 00:57:24 +02:00
}
```
### blueprint
2024-10-06 00:57:24 +02:00
`blueprints/blueprint_0.json`
```json
{
2024-10-13 01:23:56 +02:00
"id": 0,
"name": "zero_printer",
"board": "o -B I\n> * < \n"
2024-10-06 00:57:24 +02:00
}
```
## 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