UNPKG

redc

Version:

Compiles RED lang into Minecraft schematics

65 lines (52 loc) 2.11 kB
# redc the compiler for REDlang, a minecraft general purpose computer ## Usage ``` $ npm install -g redc $ redc -f <path/to/file> ``` All options: | option | short | description | |--------|-------|-------------| | --file | -f | Path to input RED file [required] | --out | -o | Directory to output .mcfunction (defaults to the current directory) | --name | -n | Name of the outputted .mcfunction file (defaults to name of &lt;file&gt;) In node ```javascript import redc from 'redc'; // or: import { compile } from 'redc'; redc.compile(...).then(console.log); // => "setblock..." ``` ## Executing code on the computer 1. Build the code: `redc -f <filename> -o` 2. Find the save file of your copy of the computer (typically in `AppData/Roaming/.minecraft/saves/...` on Windows) 3. Copy the `.mcfunction` file into `datapacks/red/data/red/functions` 4. Enter the world in Minecraft (if you are already in it, leave so the game reparses functions) 5. Enter command `/function red:<filename>` 6. Go to the front of the ROM and disable the breaker right outside it (the row of pistons) ## REDlang REDlang is very low level. Every line translates 1:1 with machine code. A VSCode extension for syntax highlighting is available for install [redlang](https://marketplace.visualstudio.com/items?itemName=probeiuscorp.redlang) Example: ``` use i = ram:0 use counter = device:0 @entry [Main] i = 0 goto Loop [Loop] counter = i i = i plus 1 # i will roll over eventually and then the `if` will not pass goto Loop if i # fall through exit ``` The code will run like a `for` loop, writing the index to the first word of device memory, starting from 0 and counting until it overflows at 63. #### Breakdown - The code defines two variables, allocating their sources and address in memory, syntax being: `use <variable> = <ram|device|input>:<address>`. - It defines two routines, `Main` and `Loop`, tagging `Main` as the entry routine. - `i` is initialized to 0 because there might be some memory from an old execution. - `counter` cannot be assigned to `counter + 1` because `counter` is write-only memory.