marble-machinations/README.md

114 lines
2.5 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
2024-12-17 15:40:27 +01:00
- accessibility
- background colour setting
- hotkeys for everything
- more levels
2024-12-14 17:30:37 +01:00
- make direct power (comparator -> machine) work, (needs storing power direction in machine tiles)
- 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?
2024-10-06 12:39:36 +02:00
2024-12-08 22:52:13 +01:00
# 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
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],
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, 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