Created
February 10, 2025 21:08
-
-
Save 10c8/236dc14aee8c9e62f080c54ead892759 to your computer and use it in GitHub Desktop.
[DEV] Human Puzzle Machine (PuzzleScript Script)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Play this game by pasting the script in http://www.puzzlescript.net/editor.html |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(- | |
- Human Puzzle Machine | |
- Human Resource Machine demake in PuzzleScript | |
- | |
- by 0x77 | |
- version 0.1 | |
-) | |
title [DEV] Human Puzzle Machine | |
homepage 10c8.github.io | |
background_color #362B25 | |
text_color #F8F4F1 | |
( realtime_interval .2 ) | |
( realtime_interval .01 ) | |
( zoomscreen 18x14 ) | |
( Disable while editing ) | |
run_rules_on_level_start | |
( Enable (maybe?) while editing ) | |
verbose_logging | |
( debug ) | |
======== | |
OBJECTS | |
======== | |
( Background ) | |
BACKGROUND . | |
#4b382b | |
( Player ) | |
PLAYER @ | |
transparent | |
( Held ) | |
HELD ? | |
#45332a | |
( Program Counter ) | |
PC # | |
#49382c #7CCa40 #a58f7e #b9a08d | |
10023 | |
11023 | |
11123 | |
11023 | |
10023 | |
( Conveyor Belt ) | |
BELT_MID | |
#5e5e5e | |
BELT_IN_STR $ | |
transparent | |
BELT_OUT_STR ¥ | |
transparent | |
BELT_END , | |
transparent #2a2723 | |
..... | |
..... | |
..... | |
..... | |
11111 | |
( Opcodes ) | |
OP_IN | |
#9cb55b #415320 | |
00000 | |
10011 | |
11001 | |
10011 | |
00000 | |
OP_IN_1 | |
#9cb55B #415320 | |
00000 | |
10110 | |
00101 | |
10101 | |
00000 | |
OP_IN_2 | |
#9cb55b #415320 | |
OP_OUT | |
#9cb55b #415320 | |
00000 | |
01011 | |
11010 | |
01011 | |
00000 | |
OP_OUT_1 | |
#9CB55B #415320 | |
00000 | |
10101 | |
10101 | |
10111 | |
00000 | |
OP_OUT_2 | |
#9CB55B #415320 | |
00000 | |
01110 | |
00100 | |
00100 | |
00000 | |
OP_CPY | |
#5C2E21 #C96B52 | |
11111 | |
01100 | |
10101 | |
11100 | |
11111 | |
OP_CPY_1 | |
#5C2E21 #C96B52 | |
11111 | |
01000 | |
11000 | |
01011 | |
11111 | |
OP_CPY_2 | |
#5C2E21 #C96B52 | |
11111 | |
10101 | |
10001 | |
11011 | |
11111 | |
OP_PST | |
#5C2E21 #C96B52 | |
11111 | |
11100 | |
10100 | |
01101 | |
11111 | |
OP_PST_1 | |
#5C2E21 #C96B52 | |
11111 | |
01100 | |
01101 | |
11001 | |
11111 | |
OP_PST_2 | |
#5C2E21 #C96B52 | |
11111 | |
10001 | |
11011 | |
11011 | |
11111 | |
OP_ADD | |
#C28F64 #593D27 | |
00000 | |
10001 | |
11011 | |
10010 | |
00000 | |
OP_ADD_1 | |
#C28F64 #593D27 | |
00000 | |
00110 | |
10101 | |
10110 | |
00000 | |
OP_ADD_2 | |
#C28F64 #593D27 | |
00000 | |
01100 | |
01010 | |
01100 | |
00000 | |
OP_SUB | |
#C28F64 #593D27 | |
00000 | |
00001 | |
11001 | |
00011 | |
00000 | |
OP_SUB_1 | |
#C28F64 #593D27 | |
00000 | |
10101 | |
00101 | |
00111 | |
00000 | |
OP_SUB_2 | |
#C28F64 #593D27 | |
00000 | |
01100 | |
01110 | |
01110 | |
00000 | |
OP_INC | |
#C28F64 #593D27 | |
00000 | |
01011 | |
10001 | |
00011 | |
00000 | |
OP_INC_1 | |
#C28F64 #593D27 | |
00000 | |
10110 | |
00101 | |
10101 | |
00000 | |
OP_INC_2 | |
#C28F64 #593D27 | |
00000 | |
01110 | |
01000 | |
01110 | |
00000 | |
OP_DEC | |
#C28F64 #593D27 | |
00000 | |
00011 | |
10010 | |
01011 | |
00000 | |
OP_DEC_1 | |
#C28F64 #593D27 | |
00000 | |
00111 | |
10110 | |
00111 | |
00000 | |
OP_DEC_2 | |
#C28F64 #593D27 | |
00000 | |
01110 | |
01000 | |
01110 | |
00000 | |
OP_JMP | |
#3F4055 #8D8FB6 | |
11111 | |
01100 | |
11110 | |
11100 | |
11111 | |
OP_JMP_1 | |
#3F4055 #8D8FB6 | |
11111 | |
01000 | |
11000 | |
11010 | |
11111 | |
OP_JMP_2 | |
#3F4055 #8D8FB6 | |
11111 | |
10001 | |
10001 | |
10111 | |
11111 | |
OP_JPZ | |
#3F4055 #8D8FB6 | |
11111 | |
01100 | |
01110 | |
11100 | |
11111 | |
OP_JPZ_1 | |
#3F4055 #8D8FB6 | |
11111 | |
01000 | |
11000 | |
11011 | |
11111 | |
OP_JPZ_2 | |
#3F4055 #8D8FB6 | |
11111 | |
10011 | |
11011 | |
11001 | |
11111 | |
OP_JPN | |
#3F4055 #8D8FB6 | |
11111 | |
01100 | |
01110 | |
01100 | |
11111 | |
OP_JPN_1 | |
#3F4055 #8D8FB6 | |
11111 | |
01000 | |
11000 | |
11011 | |
11111 | |
OP_JPN_2 | |
#3F4055 #8D8FB6 | |
11111 | |
10011 | |
10101 | |
10101 | |
11111 | |
( Numbers ) | |
CNT | |
TRANSPARENT | |
MARK_BLUE | |
#8c90b4 | |
MARK_ORANGE | |
#c28f64 | |
MARK_RED | |
#c86a54 | |
CODE_LABEL | |
transparent | |
MEM_LABEL \ | |
#949962 | |
POS | |
#9dcb58 | |
NEG : | |
#c86a54 | |
N0 0 | |
#302c27 | |
..... | |
.000. | |
.0.0. | |
.000. | |
..... | |
N1 1 | |
#302c27 | |
..... | |
.00.. | |
..0.. | |
.000. | |
..... | |
N2 2 | |
#302c27 | |
..... | |
.00.. | |
..0.. | |
..00. | |
..... | |
N3 3 | |
#302c27 #505434 | |
..... | |
.000. | |
..10. | |
.000. | |
..... | |
N4 4 | |
#302c27 | |
..... | |
.0.0. | |
.000. | |
...0. | |
..... | |
N5 5 | |
#302c27 | |
..... | |
..00. | |
..0.. | |
.00.. | |
..... | |
N6 6 | |
#302c27 #505434 | |
..... | |
.0... | |
.010. | |
.000. | |
..... | |
N7 7 | |
#302c27 | |
..... | |
.000. | |
...0. | |
..0.. | |
..... | |
N8 8 | |
#302c27 #505434 | |
..... | |
.00.. | |
.010. | |
..00. | |
..... | |
N9 9 | |
#302c27 #505434 | |
..... | |
.000. | |
.010. | |
...0. | |
..... | |
O0 | |
#302c27 | |
..... | |
.000. | |
.0.0. | |
.000. | |
..... | |
O1 | |
#302c27 | |
..... | |
.00.. | |
..0.. | |
.000. | |
..... | |
O2 | |
#302c27 | |
..... | |
.00.. | |
..0.. | |
..00. | |
..... | |
O3 | |
#302c27 #505434 | |
..... | |
.000. | |
..10. | |
.000. | |
..... | |
O4 | |
#302c27 | |
..... | |
.0.0. | |
.000. | |
...0. | |
..... | |
O5 | |
#302c27 | |
..... | |
..00. | |
..0.. | |
.00.. | |
..... | |
O6 | |
#302c27 #505434 | |
..... | |
.0... | |
.010. | |
.000. | |
..... | |
O7 | |
#302c27 | |
..... | |
.000. | |
...0. | |
..0.. | |
..... | |
O8 | |
#302c27 #505434 | |
..... | |
.00.. | |
.010. | |
..00. | |
..... | |
O9 | |
#302c27 #505434 | |
..... | |
.000. | |
.010. | |
...0. | |
..... | |
M0 | |
#302c27 | |
..... | |
.000. | |
.0.0. | |
.000. | |
..... | |
M1 | |
#302c27 | |
..... | |
.00.. | |
..0.. | |
.000. | |
..... | |
M2 | |
#302c27 | |
..... | |
.00.. | |
..0.. | |
..00. | |
..... | |
M3 | |
#302c27 #505434 | |
..... | |
.000. | |
..10. | |
.000. | |
..... | |
M4 | |
#302c27 | |
..... | |
.0.0. | |
.000. | |
...0. | |
..... | |
M5 | |
#302c27 | |
..... | |
..00. | |
..0.. | |
.00.. | |
..... | |
M6 | |
#302c27 #505434 | |
..... | |
.0... | |
.010. | |
.000. | |
..... | |
M7 | |
#302c27 | |
..... | |
.000. | |
...0. | |
..0.. | |
..... | |
M8 | |
#302c27 #505434 | |
..... | |
.00.. | |
.010. | |
..00. | |
..... | |
M9 | |
#302c27 #505434 | |
..... | |
.000. | |
.010. | |
...0. | |
..... | |
MX | |
#302c27 | |
..... | |
.0.0. | |
..0.. | |
.0.0. | |
..... | |
( UI ) | |
CURSOR ¤ | |
#ffffff | |
00.00 | |
0...0 | |
..... | |
0...0 | |
00.00 | |
CUR_RED | |
#ff0000 | |
00.00 | |
0...0 | |
..... | |
0...0 | |
00.00 | |
CUR_YELLOW | |
#ffff00 | |
00.00 | |
0...0 | |
..... | |
0...0 | |
00.00 | |
CUR_BLUE | |
#00bbff | |
00.00 | |
0...0 | |
..... | |
0...0 | |
00.00 | |
CUR_JUMP | |
#49382c #8c90b4 #a58f7e #b9a08d | |
10023 | |
11023 | |
11123 | |
11023 | |
10023 | |
CUR_DIM | |
#888888 | |
00.00 | |
0...0 | |
..... | |
0...0 | |
00.00 | |
CODE_PANEL_C × | |
#bca08b | |
CODE_PANEL_L | |
#a88f7c #bca08b | |
...01 | |
...01 | |
...01 | |
...01 | |
...01 | |
CODE_PANEL_B | |
#bca08b #a88f7c #706053 #968072 | |
00000 | |
11111 | |
..... | |
22222 | |
33333 | |
PANEL_C ø | |
#968072 | |
PANEL_T | |
#706053 #968072 | |
..... | |
..... | |
..... | |
00000 | |
11111 | |
PANEL_B | |
#968072 #706053 | |
00000 | |
11111 | |
..... | |
..... | |
..... | |
PANEL_L | |
#706053 #968072 | |
...01 | |
...01 | |
...01 | |
...01 | |
...01 | |
PANEL_R | |
#968072 #706053 | |
01... | |
01... | |
01... | |
01... | |
01... | |
ICON_IN | |
#444f2d #9cb65b | |
..... | |
.011. | |
.001. | |
.011. | |
..... | |
ICON_OUT | |
#9cb65b #444f2d | |
..... | |
.001. | |
.011. | |
.001. | |
..... | |
ICON_CPY | |
#5c2e21 #c96b52 | |
..... | |
.011. | |
.101. | |
.111. | |
..... | |
ICON_PST | |
#c96b52 #5c2e21 | |
..... | |
.000. | |
.010. | |
.100. | |
..... | |
ICON_JMP | |
#3f4055 #8d8fb6 | |
..... | |
.011. | |
.111. | |
.111. | |
..... | |
( Special ) | |
R_TICK ' | |
transparent | |
M_TICK " | |
transparent | |
CODE_POS ² | |
transparent | |
CODE_STR * | |
transparent | |
CODE_END _ | |
transparent | |
QUEUE_END % | |
transparent | |
OUT_STR { | |
transparent | |
OUT_END } | |
transparent | |
MATH_ADD + | |
transparent | |
MATH_ADD_B ß | |
transparent | |
MATH_Q_A - | |
transparent | |
MATH_Q_B ä | |
transparent | |
INC | |
transparent | |
DEC | |
transparent | |
MEM_SLOT ¡ | |
#505434 | |
OPS_BTN_ROW_0 ç | |
transparent | |
OPS_BTN_ROW_1 ¿ | |
transparent | |
OPS_BTN_ROW_2 å | |
transparent | |
OP_DATA | |
transparent | |
OP_EMPTY | |
red | |
PC_ANCHOR ® | |
#49382c #8c90b4 #a58f7e #b9a08d | |
10023 | |
.1023 | |
..123 | |
.1023 | |
10023 | |
OP_ANCHOR þ | |
blue | |
ICON_ANCHOR | |
transparent | |
SEL_TMP æ | |
transparent | |
LABEL ; | |
transparent | |
HAND = | |
transparent | |
FINISHED | |
transparent | |
( States ) | |
S_PLAY | |
#00ff00 | |
S_PLAY_START | |
#ffff00 | |
S_PLAY_WAIT | |
orange | |
S_IDLE | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11110 | |
S_EDIT_START | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11101 | |
S_EDIT | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11100 | |
S_CHANGE_START | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11011 | |
S_CHANGE | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11010 | |
S_CHANGE_MOVING | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11001 | |
S_CHANGE_CANCEL | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
11000 | |
S_MEM_SEL_ED | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
10111 | |
S_MEM_SEL_CH | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
10110 | |
S_LINE_SEL_ED | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
10101 | |
S_LINE_SEL_CH | |
#ff0000 #000000 | |
..... | |
..... | |
..... | |
..... | |
10100 | |
======= | |
LEGEND | |
======= | |
( Conveyor Belt ) | |
BELT = BELT_MID or BELT_IN_STR or BELT_OUT_STR or BELT_END | |
( Opcodes ) | |
OPCODE = OP_IN or OP_OUT or OP_CPY or OP_PST or OP_ADD or OP_SUB or OP_INC or OP_DEC or OP_JMP or OP_JPZ or OP_JPN | |
OP_OTHER = OPCODE | |
OP_PART = OP_IN_1 or OP_IN_2 or OP_OUT_1 or OP_OUT_2 or OP_CPY_1 or OP_CPY_2 or OP_PST_1 or OP_PST_2 or OP_ADD_1 or OP_ADD_2 or OP_SUB_1 or OP_SUB_2 or OP_INC_1 or OP_INC_2 or OP_DEC_1 or OP_DEC_2 or OP_JMP_1 or OP_JMP_2 or OP_JPZ_1 or OP_JPZ_2 or OP_JPN_1 or OP_JPN_2 | |
OPS_JMP = OP_JMP or OP_JPZ or OP_JPN | |
OPS_MEM = OP_CPY or OP_PST | |
A = OP_IN | |
B = OP_OUT | |
C = OP_CPY | |
D = OP_PST | |
E = OP_ADD | |
F = OP_SUB | |
G = OP_INC | |
H = OP_DEC | |
I = OP_JMP | |
J = OP_JPZ | |
K = OP_JPN | |
( Numbers ) | |
NUM = N0 or N1 or N2 or N3 or N4 or N5 or N6 or N7 or N8 or N9 | |
O = O0 or O1 or O2 or O3 or O4 or O5 or O6 or O7 or O8 or O9 | |
M = M0 or M1 or M2 or M3 or M4 or M5 or M6 or M7 or M8 or M9 or MX | |
OTHER_M = M | |
MATH = MATH_ADD or MATH_ADD_B or MATH_Q_A or MATH_Q_B | |
MARK = MARK_BLUE or MARK_ORANGE or MARK_RED or CODE_LABEL or MEM_LABEL | |
SIGN = POS or NEG | |
( UI ) | |
PANEL = PANEL_C or PANEL_T or PANEL_B or PANEL_L or PANEL_R | |
CODE_PANEL = CODE_PANEL_C or CODE_PANEL_L or CODE_PANEL_B | |
ICON = ICON_IN or ICON_OUT or ICON_CPY or ICON_PST or ICON_JMP | |
CUR_DECO = CUR_YELLOW or CUR_RED or CUR_BLUE or CUR_JUMP or CUR_DIM | |
CODE_CUR_TGT = OPCODE or OP_DATA | |
( States ) | |
S_MEM_SEL_X = S_MEM_SEL_ED or S_MEM_SEL_CH | |
S_LINE_SEL_X = S_LINE_SEL_ED or S_LINE_SEL_CH | |
STATE = S_PLAY or S_PLAY_START or S_PLAY_WAIT or S_IDLE or S_EDIT_START or S_EDIT or S_CHANGE_START or S_CHANGE or S_CHANGE_MOVING or S_CHANGE_CANCEL or S_MEM_SEL_X or S_LINE_SEL_X | |
( Combos ) | |
¶ = PLAYER and R_TICK and S_IDLE | |
ó = ICON_ANCHOR and PANEL_C | |
======= | |
SOUNDS | |
======= | |
sfx0 55940507 ( Move opcode ) | |
sfx1 15390302 ( Delete opcode ) | |
================ | |
COLLISIONLAYERS | |
================ | |
( BG ) | |
BACKGROUND | |
STATE HELD BELT PANEL CODE_PANEL | |
PC PC_ANCHOR OP_ANCHOR ICON_ANCHOR | |
OPCODE OP_PART ICON | |
OP_EMPTY | |
MATH OP_DATA | |
CNT MARK INC DEC | |
M | |
MEM_SLOT | |
SIGN | |
NUM O | |
R_TICK M_TICK CODE_POS CODE_STR CODE_END QUEUE_END OUT_STR OUT_END OPS_BTN_ROW_0 OPS_BTN_ROW_1 OPS_BTN_ROW_2 SEL_TMP LABEL HAND FINISHED | |
PLAYER CURSOR | |
CUR_DECO | |
====== | |
RULES | |
====== | |
( Realtime fix ) | |
( [ STATIONARY @ ] ["] -> [ @ ] ['] ) | |
( [ MOVING @ ] ['] -> [ MOVING @ ] ["] ) | |
(( Setup )) | |
( UI ) | |
RIGHT [ NO × | × ] -> [ CODE_PANEL_L | × ] | |
UP [ NO × | × ] -> [ CODE_PANEL_B | × ] | |
RIGHT [ } | N0 ] [ ç NO ICON | | | | ] -> [ } | N0 ] [ ç PANEL_C ICON_IN CURSOR | ICON_OUT | ICON_CPY | ICON_PST | ICON_JMP ] | |
RIGHT [ NO ø | ø ] -> [ PANEL_L | ø ] | |
RIGHT [ ø | NO ø ] -> [ ø | PANEL_R ] | |
UP [ NO ø | ø ] -> [ PANEL_B | ø ] | |
( Belts ) | |
UP [ $ | NO BELT ] -> [ $ | BELT_MID ] | |
DOWN [ ¥ | NO BELT ] -> [ ¥ | BELT_MID ] | |
UP [ BELT_MID | NO BELT NO ¥ ] -> [ BELT_MID | BELT_MID ] | |
DOWN [ BELT_MID | NO BELT NO , ] -> [ BELT_MID | BELT_MID ] | |
( Memory slots ) | |
DOWN [ N0 NO ¡ | \ ] -> [ ¡ M0 | \ N0 ] | |
DOWN [ N1 NO ¡ | \ ] -> [ ¡ M1 | \ N1 ] | |
DOWN [ N2 NO ¡ | \ ] -> [ ¡ M2 | \ N2 ] | |
DOWN [ N3 NO ¡ | \ ] -> [ ¡ M3 | \ N3 ] | |
DOWN [ N4 NO ¡ | \ ] -> [ ¡ M4 | \ N4 ] | |
DOWN [ N5 NO ¡ | \ ] -> [ ¡ M5 | \ N5 ] | |
DOWN [ N6 NO ¡ | \ ] -> [ ¡ M6 | \ N6 ] | |
DOWN [ N7 NO ¡ | \ ] -> [ ¡ M7 | \ N7 ] | |
DOWN [ N8 NO ¡ | \ ] -> [ ¡ M8 | \ N8 ] | |
DOWN [ N9 NO ¡ | \ ] -> [ ¡ M9 | \ N9 ] | |
( DEBUG: Mark math numbers ) | |
RIGHT [ MATH | N0 ] -> [ MATH | POS M0 ] | |
RIGHT [ MATH | N1 ] -> [ MATH | POS M1 ] | |
RIGHT [ MATH | N2 ] -> [ MATH | POS M2 ] | |
RIGHT [ MATH | N3 ] -> [ MATH | POS M3 ] | |
RIGHT [ MATH | N4 ] -> [ MATH | POS M4 ] | |
RIGHT [ MATH | N5 ] -> [ MATH | POS M5 ] | |
RIGHT [ MATH | N6 ] -> [ MATH | POS M6 ] | |
RIGHT [ MATH | N7 ] -> [ MATH | POS M7 ] | |
RIGHT [ MATH | N8 ] -> [ MATH | POS M8 ] | |
RIGHT [ MATH | N9 ] -> [ MATH | POS M9 ] | |
( Mark level number ) | |
RIGHT [ } | NUM ] -> [ } | MARK_BLUE NUM ] | |
( Code lines counter ) | |
RIGHT [ ² | NO M ] -> [ ² | MARK_RED M0 ] | |
( Mark jump labels ) | |
RIGHT [ ; | NUM ] -> [ ; | CODE_LABEL NUM ] | |
RIGHT [ ; | | NUM ] -> [ ; | | CODE_LABEL NUM ] | |
( Sign numbers on queue ) | |
DOWN [ NO SIGN NO MARK NUM | NO - ] -> [ POS NUM | ] | |
DOWN [ NO SIGN NO MARK NUM | - ] -> [ NEG NUM | ] | |
(( Handle state )) | |
( | |
- TODO: | |
- [ ] Rewrite math operations to use START/ENDLOOP | |
- [ ] Halt on invalid states | |
- [ ] Restore initial inputs and clear output after halting (after confirmation) | |
Maybe with the `checkpoint` and `restart` commands? | |
We could save a checkpoint whenever the user edits their code, | |
and restart back to it after confirming on a halted state. | |
- [ ] Explain the currently targeted button with a tooltip to the side of the cursor | |
- [ ] Make cursor larger when hovering an opcode | |
- [ ] Highlight jump target on hover | |
- [ ] Highlight memory target on hover | |
- [ ] Eye candy | |
- [ ] Player character | |
- [ ] Conveyor belt animation | |
) | |
( PLAY_START ) | |
LATE ['][ @ S_PLAY_START ] [ * ] -> ['][ @ S_PLAY_WAIT ] [ * # ] | |
( PLAY ) | |
( Advance the PC ) | |
( NOTE: We stagger it a bit so that jumps are better visualized ) | |
RIGHT ['][ @ S_PLAY ] [ # | NO OPCODE ] -> ['][ @ S_IDLE ] [ | ] | |
DOWN ['][ @ S_PLAY ] [ # | ] -> ['][ @ S_PLAY_WAIT ] [ | # ] | |
RIGHT ['][ @ S_PLAY_WAIT ] [ # ] [ ® ] -> ['][ @ S_PLAY ] [ ] [ # ] | |
RIGHT ['][ @ S_PLAY_WAIT ] -> ['][ @ S_PLAY ] | |
( IDLE ) | |
( DEBUG: Play on ACTION ) | |
[ ACTION @ S_IDLE ] [ CURSOR NO ICON ] -> [ @ S_PLAY_START ] [ CURSOR ] | |
( Opcode tooltips ) | |
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_IN ] [ ² | | ] -> [ @ S_EDIT_START ] [ CURSOR ICON_IN ] [ ² | | OP_IN ] | |
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_OUT ] [ ² | | ] -> [ @ S_EDIT_START ] [ CURSOR ICON_OUT ] [ ² | | OP_OUT ] | |
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_CPY ] [ ² | | ] -> [ @ S_EDIT_START ] [ CURSOR ICON_CPY ] [ ² | | OP_CPY ] | |
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_PST ] [ ² | | ] -> [ @ S_EDIT_START ] [ CURSOR ICON_PST ] [ ² | | OP_PST ] | |
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_JMP ] [ ² | | ] -> [ @ S_EDIT_START ] [ CURSOR ICON_JMP ] [ ² | | OP_JMP ] | |
( ... ) | |
( Moving into the top border enters CHANGE mode ) | |
[ UP @ S_IDLE ] [ CURSOR | CODE_PANEL_B ] -> [ @ S_CHANGE_START ] [ CURSOR | CODE_PANEL_B ] | |
( Cursor movement ) | |
[ MOVING @ S_IDLE ] [ CURSOR ] -> [ @ S_IDLE ] [ MOVING CURSOR ] | |
LEFT [ S_IDLE ] [ LEFT CURSOR | PANEL_L ] -> [ S_IDLE ] [ CURSOR | PANEL_L ] | |
RIGHT [ S_IDLE ] [ RIGHT CURSOR | PANEL_R ] -> [ S_IDLE ] [ CURSOR | PANEL_R ] | |
DOWN [ S_IDLE ] [ DOWN CURSOR | PANEL_B ] -> [ S_IDLE ] [ CURSOR | PANEL_B ] | |
( EDIT_START ) | |
( If code is full, we can't add anything else, so we return to IDLE ) | |
RIGHT [ S_EDIT_START ] [ ² | MX | OPCODE ] -> [ S_IDLE ] [ ² | MX | ] | |
( Place the cursor at the last line of code ) | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M0 | OPCODE ] [ | | | | | ; | N0 ] -> [ S_EDIT ] [ ] [ ² | M0 | ] [ CURSOR OPCODE | | | | | ; | N0 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M1 | OPCODE ] [ | | | | | ; | N1 ] -> [ S_EDIT ] [ ] [ ² | M1 | ] [ CURSOR OPCODE | | | | | ; | N1 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M2 | OPCODE ] [ | | | | | ; | N2 ] -> [ S_EDIT ] [ ] [ ² | M2 | ] [ CURSOR OPCODE | | | | | ; | N2 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M3 | OPCODE ] [ | | | | | ; | N3 ] -> [ S_EDIT ] [ ] [ ² | M3 | ] [ CURSOR OPCODE | | | | | ; | N3 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M4 | OPCODE ] [ | | | | | ; | N4 ] -> [ S_EDIT ] [ ] [ ² | M4 | ] [ CURSOR OPCODE | | | | | ; | N4 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M5 | OPCODE ] [ | | | | | ; | N5 ] -> [ S_EDIT ] [ ] [ ² | M5 | ] [ CURSOR OPCODE | | | | | ; | N5 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M6 | OPCODE ] [ | | | | | ; | N6 ] -> [ S_EDIT ] [ ] [ ² | M6 | ] [ CURSOR OPCODE | | | | | ; | N6 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M7 | OPCODE ] [ | | | | | ; | N7 ] -> [ S_EDIT ] [ ] [ ² | M7 | ] [ CURSOR OPCODE | | | | | ; | N7 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M8 | OPCODE ] [ | | | | | ; | N8 ] -> [ S_EDIT ] [ ] [ ² | M8 | ] [ CURSOR OPCODE | | | | | ; | N8 ] | |
RIGHT [ S_EDIT_START ] [ CURSOR ] [ ² | M9 | OPCODE ] [ | | | | | ; | N9 ] -> [ S_EDIT ] [ ] [ ² | M9 | ] [ CURSOR OPCODE | | | | | ; | N9 ] | |
( EDIT ) | |
( Interact to add an opcode with a parameter and enter MEMORY/LINE SELECT mode, then return to IDLE ) | |
RIGHT [ ACTION @ S_EDIT ] [ CURSOR OPS_MEM | | | | ] [ ¡ M0 ] -> [ @ S_MEM_SEL_ED ] [ OPS_MEM | | | | æ ] [ ¡ M0 CURSOR ] | |
RIGHT [ ACTION @ S_EDIT ] [ CURSOR OPS_JMP |||| ] [ |||||| ; | N0 ] -> [ @ S_LINE_SEL_ED ] [ OPS_JMP |||| æ ] [ CURSOR |||||| ; | N0 ] | |
( Interact to add a simple opcode and return to IDLE ) | |
[ ACTION @ S_EDIT ] [ CURSOR ] [ ç ] [ ² ] -> [ @ S_IDLE ] [ ] [ ç CURSOR ] [ ² INC ] | |
( Move left to cancel addition and return to IDLE ) | |
RIGHT [ LEFT @ S_EDIT ] [ CURSOR OPCODE | OP_PART | OP_PART | | ] [ ç ] -> [ @ S_IDLE ] [ | | | | NO OP_EMPTY NO OP_DATA ] [ ç CURSOR ] sfx1 | |
( Handle swapping code lines on vertical movement ) | |
UP [ UP @ S_EDIT ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_EDIT ] [ UP CURSOR OPCODE + | OP_OTHER - ] sfx0 | |
DOWN [ DOWN @ S_EDIT ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_EDIT ] [ DOWN CURSOR OPCODE - | OP_OTHER + ] sfx0 | |
( CHANGE_START ) | |
( Entering CHANGE mode with empty code returns you back to IDLE ) | |
RIGHT [ S_CHANGE_START ] [ ² | M0 ] [ NO OPCODE | | | | | ; | N0 ] -> [ S_IDLE ] [ ² | M0 ] [ | | | | | ; | N0 ] | |
( Otherwise, we place the cursor at the last line of code ) | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M1 ] [ | | | | | ; | N0 ] -> [ S_CHANGE ] [ ] [ ² | M1 ] [ CURSOR | | | | | ; | N0 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M2 ] [ | | | | | ; | N1 ] -> [ S_CHANGE ] [ ] [ ² | M2 ] [ CURSOR | | | | | ; | N1 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M3 ] [ | | | | | ; | N2 ] -> [ S_CHANGE ] [ ] [ ² | M3 ] [ CURSOR | | | | | ; | N2 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M4 ] [ | | | | | ; | N3 ] -> [ S_CHANGE ] [ ] [ ² | M4 ] [ CURSOR | | | | | ; | N3 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M5 ] [ | | | | | ; | N4 ] -> [ S_CHANGE ] [ ] [ ² | M5 ] [ CURSOR | | | | | ; | N4 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M6 ] [ | | | | | ; | N5 ] -> [ S_CHANGE ] [ ] [ ² | M6 ] [ CURSOR | | | | | ; | N5 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M7 ] [ | | | | | ; | N6 ] -> [ S_CHANGE ] [ ] [ ² | M7 ] [ CURSOR | | | | | ; | N6 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M8 ] [ | | | | | ; | N7 ] -> [ S_CHANGE ] [ ] [ ² | M8 ] [ CURSOR | | | | | ; | N7 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | M9 ] [ | | | | | ; | N8 ] -> [ S_CHANGE ] [ ] [ ² | M9 ] [ CURSOR | | | | | ; | N8 ] | |
RIGHT [ S_CHANGE_START ] [ CURSOR ] [ ² | MX ] [ | | | | | ; | N9 ] -> [ S_CHANGE ] [ ] [ ² | MX ] [ CURSOR | | | | | ; | N9 ] | |
( CHANGE ) | |
( Interacting with an opcode enters MOVING mode ) | |
[ ACTION @ S_CHANGE ] [ CURSOR OPCODE ] -> [ @ S_CHANGE_MOVING ] [ CURSOR OPCODE ] | |
( Interacting with an opcode parameter enters MEMORY/LINE SELECT mode ) | |
[ ACTION @ S_CHANGE ] [ OPS_MEM | | | | CURSOR OP_DATA ] [ ¡ M0 ] -> [ @ S_MEM_SEL_CH ] [ OPS_MEM | | | | OP_DATA æ ] [ ¡ M0 CURSOR ] | |
[ ACTION @ S_CHANGE ] [ OPS_JMP |||| CURSOR OP_DATA ] [ |||||| ; | N0 ] -> [ @ S_LINE_SEL_CH ] [ OPS_JMP |||| OP_DATA æ ] [ CURSOR |||||| ; | N0 ] | |
( Cursor movement ) | |
UP [ UP @ S_CHANGE ] [ CURSOR | OPCODE ] -> [ @ S_CHANGE ] [ | CURSOR OPCODE ] | |
DOWN [ DOWN @ S_CHANGE ] [ CURSOR | OPCODE ] -> [ @ S_CHANGE ] [ | CURSOR OPCODE ] | |
UP [ UP @ S_CHANGE ] [ CURSOR | ... | OP_DATA ] -> [ @ S_CHANGE ] [ | ... | CURSOR OP_DATA ] | |
DOWN [ DOWN @ S_CHANGE ] [ CURSOR | ... | OP_DATA ] -> [ @ S_CHANGE ] [ | ... | CURSOR OP_DATA ] | |
RIGHT [ RIGHT @ S_CHANGE ] [ CURSOR OPCODE | ... | OP_DATA ] -> [ @ S_CHANGE ] [ OPCODE | ... | CURSOR OP_DATA ] | |
RIGHT [ LEFT @ S_CHANGE ] [ OPCODE | ... | CURSOR OP_DATA ] -> [ @ S_CHANGE ] [ CURSOR OPCODE | ... | OP_DATA ] | |
( Moving down into an empty line returns you to IDLE mode ) | |
DOWN [ DOWN @ S_CHANGE ] [ CURSOR | NO CODE_CUR_TGT ] [ ç ] -> [ @ S_IDLE ] [ | ] [ ç CURSOR ] | |
[ S_CHANGE ] [ CURSOR NO CODE_CUR_TGT ] [ ² | M0 ] [ ç ] -> [ S_IDLE ] [ ] [ ² | M0 ] [ ç CURSOR ] | |
[ S_CHANGE ] [ CURSOR NO CODE_CUR_TGT ] -> [ S_CHANGE ] [ UP CURSOR ] | |
( CHANGE_MOVING ) | |
( Interact to finish moving and return to CHANGE mode ) | |
[ ACTION @ S_CHANGE_MOVING ] -> [ @ S_CHANGE ] | |
( Handle swapping code lines on vertical movement ) | |
UP [ UP @ S_CHANGE_MOVING ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_CHANGE_MOVING ] [ UP CURSOR OPCODE + | OP_OTHER - ] sfx0 | |
DOWN [ DOWN @ S_CHANGE_MOVING ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_CHANGE_MOVING ] [ DOWN CURSOR OPCODE - | OP_OTHER + ] sfx0 | |
( Move left to delete the currently held opcode and return to IDLE mode ) | |
RIGHT [ LEFT @ S_CHANGE_MOVING ] [ CURSOR OPCODE | OP_PART | OP_PART | | OP_EMPTY ] [ ² ] -> [ @ S_CHANGE ] [ CURSOR | | | | ] [ ² DEC ] sfx1 | |
RIGHT [ LEFT @ S_CHANGE_MOVING ] [ CURSOR OPCODE | OP_PART | OP_PART | | OP_DATA MARK NUM ] [ ² ] -> [ @ S_CHANGE ] [ CURSOR | | | | ] [ ² DEC ] sfx1 | |
( MEM_SEL_* ) | |
( Interact to select a memory slot and return to CHANGE mode if you came from it, or to IDLE otherwise ) | |
DOWN [ ACTION @ S_MEM_SEL_ED ] [ CURSOR | \ NUM ] [ OP_EMPTY æ ] [ ç ] [ ² ] -> [ @ S_IDLE ] [ | \ NUM ] [ NUM ] [ ç CURSOR ] [ ² INC ] | |
DOWN [ ACTION @ S_MEM_SEL_CH ] [ CURSOR | \ NUM ] [ æ ] -> [ @ S_CHANGE ] [ | \ NUM ] [ CURSOR NUM ] | |
( Cursor movement ) | |
LEFT [ LEFT @ S_MEM_SEL_X ] [ CURSOR | MEM_SLOT ] -> [ @ S_MEM_SEL_X ] [ LEFT CURSOR | MEM_SLOT ] | |
RIGHT [ RIGHT @ S_MEM_SEL_X ] [ CURSOR | MEM_SLOT ] -> [ @ S_MEM_SEL_X ] [ RIGHT CURSOR | MEM_SLOT ] | |
DOWN [ DOWN @ S_MEM_SEL_X ] [ CURSOR | \ N0 ] [ | \ N5 ] -> [ @ S_MEM_SEL_X ] [ | \ N0 ] [ CURSOR | \ N5 ] | |
DOWN [ DOWN @ S_MEM_SEL_X ] [ CURSOR | \ N1 ] [ | \ N6 ] -> [ @ S_MEM_SEL_X ] [ | \ N1 ] [ CURSOR | \ N6 ] | |
DOWN [ DOWN @ S_MEM_SEL_X ] [ CURSOR | \ N2 ] [ | \ N7 ] -> [ @ S_MEM_SEL_X ] [ | \ N2 ] [ CURSOR | \ N7 ] | |
DOWN [ DOWN @ S_MEM_SEL_X ] [ CURSOR | \ N3 ] [ | \ N8 ] -> [ @ S_MEM_SEL_X ] [ | \ N3 ] [ CURSOR | \ N8 ] | |
DOWN [ DOWN @ S_MEM_SEL_X ] [ CURSOR | \ N4 ] [ | \ N9 ] -> [ @ S_MEM_SEL_X ] [ | \ N4 ] [ CURSOR | \ N9 ] | |
DOWN [ UP @ S_MEM_SEL_X ] [ CURSOR | \ N5 ] [ | \ N0 ] -> [ @ S_MEM_SEL_X ] [ | \ N5 ] [ CURSOR | \ N0 ] | |
DOWN [ UP @ S_MEM_SEL_X ] [ CURSOR | \ N6 ] [ | \ N1 ] -> [ @ S_MEM_SEL_X ] [ | \ N6 ] [ CURSOR | \ N1 ] | |
DOWN [ UP @ S_MEM_SEL_X ] [ CURSOR | \ N7 ] [ | \ N2 ] -> [ @ S_MEM_SEL_X ] [ | \ N7 ] [ CURSOR | \ N2 ] | |
DOWN [ UP @ S_MEM_SEL_X ] [ CURSOR | \ N8 ] [ | \ N3 ] -> [ @ S_MEM_SEL_X ] [ | \ N8 ] [ CURSOR | \ N3 ] | |
DOWN [ UP @ S_MEM_SEL_X ] [ CURSOR | \ N9 ] [ | \ N4 ] -> [ @ S_MEM_SEL_X ] [ | \ N9 ] [ CURSOR | \ N4 ] | |
( LINE_SEL_* ) | |
( Interact to select a code line and return to CHANGE mode if you came from it, or to IDLE otherwise ) | |
[ ACTION @ S_LINE_SEL_ED ] [ CURSOR | ... | ; | NUM ] [ OP_EMPTY æ ] [ ç ] [ ² ] -> [ @ S_IDLE ] [ | ... | ; | NUM ] [ NUM ] [ ç CURSOR ] [ ² INC ] | |
[ ACTION @ S_LINE_SEL_CH ] [ CURSOR | ... | ; | NUM ] [ æ ] -> [ @ S_CHANGE ] [ | ... | ; | NUM ] [ CURSOR NUM ] | |
( Cursor movement ) | |
UP [ UP @ S_LINE_SEL_X ] [ CURSOR | CODE_PANEL_L ] -> [ @ S_LINE_SEL_X ] [ UP CURSOR | CODE_PANEL_L ] | |
DOWN [ DOWN @ S_LINE_SEL_X ] [ CURSOR | CODE_PANEL_L ] -> [ @ S_LINE_SEL_X ] [ DOWN CURSOR | CODE_PANEL_L ] | |
( ANY ) | |
( Prevent invalid cursor movements ) | |
[ MOVING @ ] -> [ @ ] | |
( Update cursor decoration depending on state ) | |
LATE [ CUR_DECO ] -> [ ] | |
LATE [ S_EDIT ] [ CURSOR ] -> [ S_EDIT ] [ CURSOR CUR_YELLOW ] | |
LATE [ S_CHANGE_MOVING ] [ CURSOR ] -> [ S_CHANGE_MOVING ] [ CURSOR CUR_YELLOW ] | |
LATE [ S_LINE_SEL_X ] [ CURSOR ] -> [ S_LINE_SEL_X ] [ CURSOR CUR_JUMP ] | |
(( Handle opcode rendering and movement )) | |
( Perform a swap between two opcodes ) | |
( | |
- 1. Temporarily store the one that's going up, along with its data. | |
- 2. Move the one that's going down, along with its data, leaving an anchor for the stored one. | |
- 3. Restore the stored one at the anchor. | |
) | |
RIGHT [ OPCODE + | ... | OP_DATA MARK NUM ] [ ² | | | | | | ] -> [ | ... | ] [ ² | | OPCODE | | | | OP_DATA MARK NUM ] | |
RIGHT [ OPCODE + | ... | OP_EMPTY OP_DATA ] [ ² | | | | | | ] -> [ | ... | ] [ ² | | OPCODE | | | | OP_EMPTY OP_DATA ] | |
RIGHT [ OPCODE + | ... | OP_EMPTY ] [ ² | | | | | | ] -> [ | ... | ] [ ² | | OPCODE | | | | OP_EMPTY ] | |
RIGHT [ OPCODE - | ... | OP_DATA MARK NUM ] -> [ OPCODE þ | ... | þ OP_DATA MARK NUM ] | |
RIGHT [ OPCODE - | ... | OP_EMPTY OP_DATA ] -> [ OPCODE þ | ... | þ OP_EMPTY OP_DATA ] | |
RIGHT [ OPCODE - | ... | OP_EMPTY ] -> [ OPCODE þ | ... | þ OP_EMPTY ] | |
DOWN [ OPCODE þ | ] -> [ þ | OPCODE ] | |
DOWN [ OP_DATA þ | ] -> [ þ | OP_DATA ] | |
DOWN [ OP_EMPTY þ | ] -> [ | OP_EMPTY ] | |
DOWN [ MARK þ | ] -> [ þ | MARK ] | |
DOWN [ NUM þ | ] -> [ | NUM ] | |
RIGHT [ ² | | OPCODE | ... | OP_DATA MARK NUM ] [ þ | | | | ] -> [ ² | | | ... | ] [ OPCODE | | | | OP_DATA MARK NUM ] | |
RIGHT [ ² | | OPCODE | ... | OP_EMPTY OP_DATA ] [ þ | | | | ] -> [ ² | | | ... | ] [ OPCODE | | | | OP_EMPTY OP_DATA ] | |
RIGHT [ ² | | OPCODE | ... | OP_EMPTY ] [ þ | | | | ] -> [ ² | | | ... | ] [ OPCODE | | | | OP_EMPTY ] | |
( Delete invalid opcode visuals and their related data ) | |
RIGHT [ NO OPCODE | OP_PART | OP_PART | | ] -> [ | | | | NO OP_EMPTY NO OP_DATA NO MARK NO NUM ] | |
LATE RIGHT [ CURSOR NO ICON ] [ ICON_ANCHOR OPCODE | OP_PART | OP_PART ] -> [ CURSOR ] [ ICON_ANCHOR | | ] | |
( Keep opcodes stacked at the top of the code panel ) | |
UP [ OPCODE NO ICON_ANCHOR | NO OPCODE ] -> [ | OPCODE ] | |
STARTLOOP | |
UP [ OP_EMPTY | NO OP_EMPTY NO OP_DATA ] -> [ | OP_EMPTY ] | |
UP [ OP_DATA MARK NUM | NO OP_EMPTY NO OP_DATA ] -> [ | OP_DATA MARK NUM ] | |
ENDLOOP | |
( Another pass for deleting invalid opcode visuals ) | |
RIGHT [ NO OPCODE | OP_PART | OP_PART ] -> [ | | ] | |
( Insert missing opcode parts into recently added/moved code lines ) | |
RIGHT [ OP_IN NO ICON_ANCHOR | | | | ] -> [ OP_IN | OP_IN_1 | OP_IN_2 | | OP_EMPTY ] | |
RIGHT [ OP_OUT NO ICON_ANCHOR | | | | ] -> [ OP_OUT | OP_OUT_1 | OP_OUT_2 | | OP_EMPTY ] | |
RIGHT [ OP_CPY NO ICON_ANCHOR | | | | ] -> [ OP_CPY | OP_CPY_1 | OP_CPY_2 | | OP_DATA ] | |
RIGHT [ OP_PST NO ICON_ANCHOR | | | | ] -> [ OP_PST | OP_PST_1 | OP_PST_2 | | OP_DATA ] | |
RIGHT [ OP_ADD NO ICON_ANCHOR | | | | ] -> [ OP_ADD | OP_ADD_1 | OP_ADD_2 | | OP_DATA ] | |
RIGHT [ OP_SUB NO ICON_ANCHOR | | | | ] -> [ OP_SUB | OP_SUB_1 | OP_SUB_2 | | OP_DATA ] | |
RIGHT [ OP_INC NO ICON_ANCHOR | | | | ] -> [ OP_INC | OP_INC_1 | OP_INC_2 | | OP_DATA ] | |
RIGHT [ OP_DEC NO ICON_ANCHOR | | | | ] -> [ OP_DEC | OP_DEC_1 | OP_DEC_2 | | OP_DATA ] | |
RIGHT [ OP_JMP NO ICON_ANCHOR | | | | ] -> [ OP_JMP | OP_JMP_1 | OP_JMP_2 | | OP_DATA ] | |
RIGHT [ OP_JPZ NO ICON_ANCHOR | | | | ] -> [ OP_JPZ | OP_JPZ_1 | OP_JPZ_2 | | OP_DATA ] | |
RIGHT [ OP_JPN NO ICON_ANCHOR | | | | ] -> [ OP_JPN | OP_JPN_1 | OP_JPN_2 | | OP_DATA ] | |
( Insert missing opcode parts into the icon tooltip ) | |
LATE RIGHT [ CURSOR ICON_IN ] [ ICON_ANCHOR | | ] -> [ CURSOR ICON_IN ] [ ICON_ANCHOR OP_IN | OP_IN_1 | OP_IN_2 ] | |
LATE RIGHT [ CURSOR ICON_OUT ] [ ICON_ANCHOR | | ] -> [ CURSOR ICON_OUT ] [ ICON_ANCHOR OP_OUT | OP_OUT_1 | OP_OUT_2 ] | |
LATE RIGHT [ CURSOR ICON_CPY ] [ ICON_ANCHOR | | ] -> [ CURSOR ICON_CPY ] [ ICON_ANCHOR OP_CPY | OP_CPY_1 | OP_CPY_2 ] | |
LATE RIGHT [ CURSOR ICON_PST ] [ ICON_ANCHOR | | ] -> [ CURSOR ICON_PST ] [ ICON_ANCHOR OP_PST | OP_PST_1 | OP_PST_2 ] | |
LATE RIGHT [ CURSOR ICON_JMP ] [ ICON_ANCHOR | | ] -> [ CURSOR ICON_JMP ] [ ICON_ANCHOR OP_JMP | OP_JMP_1 | OP_JMP_2 ] | |
( Mark newly added opcodes that require parameters as empty ) | |
[ OP_DATA NO NUM ] -> [ OP_EMPTY OP_DATA ] | |
( Mark opcode parameter numbers ) | |
RIGHT [ OPS_JMP | | | NUM ] -> [ OPS_JMP | | | MARK_BLUE NUM ] | |
RIGHT [ OPS_JMP | | | | NUM ] -> [ OPS_JMP | | | | MARK_BLUE NUM ] | |
RIGHT [ OPS_MEM | | | NUM ] -> [ OPS_MEM | | | MARK_ORANGE NUM ] | |
RIGHT [ OPS_MEM | | | | NUM ] -> [ OPS_MEM | | | | MARK_ORANGE NUM ] | |
(( Run the opcode pointed at by the Program Counter )) | |
( IN ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_IN ] [ = | NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_IN ] [ = | ] ( Can't IN with no numbers in input queue ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_IN ] [ = | SIGN NUM ] [ ? ] -> ['][ @ S_PLAY ] [ # | OP_IN ] [ = | ] [ ? SIGN NUM ] | |
( OUT ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_OUT ] [ ? NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_OUT ] [ ? ] ( Can't OUT without holding a number ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_OUT ] [ ? SIGN NUM ] [ ¥ ] -> ['][ @ S_PLAY ] [ # | OP_OUT ] [ ? ] [ ¥ SIGN NUM ] | |
( CPY ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N0 ] [ ¡ M0 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N0 ] [ ¡ M0 ] ( Can't CPY from an empty memory slot ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N1 ] [ ¡ M1 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N1 ] [ ¡ M1 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N2 ] [ ¡ M2 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N2 ] [ ¡ M2 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N3 ] [ ¡ M3 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N3 ] [ ¡ M3 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N4 ] [ ¡ M4 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N4 ] [ ¡ M4 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N5 ] [ ¡ M5 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N5 ] [ ¡ M5 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N6 ] [ ¡ M6 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N6 ] [ ¡ M6 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N7 ] [ ¡ M7 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N7 ] [ ¡ M7 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N8 ] [ ¡ M8 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N8 ] [ ¡ M8 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY |||| N9 ] [ ¡ M9 NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_CPY |||| N9 ] [ ¡ M9 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N0 ] [ ? ] [ ¡ M0 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N0 ] [ ? SIGN NUM ] [ ¡ M0 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N1 ] [ ? ] [ ¡ M1 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N1 ] [ ? SIGN NUM ] [ ¡ M1 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N2 ] [ ? ] [ ¡ M2 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N2 ] [ ? SIGN NUM ] [ ¡ M2 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N3 ] [ ? ] [ ¡ M3 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N3 ] [ ? SIGN NUM ] [ ¡ M3 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N4 ] [ ? ] [ ¡ M4 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N4 ] [ ? SIGN NUM ] [ ¡ M4 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N5 ] [ ? ] [ ¡ M5 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N5 ] [ ? SIGN NUM ] [ ¡ M5 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N6 ] [ ? ] [ ¡ M6 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N6 ] [ ? SIGN NUM ] [ ¡ M6 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N7 ] [ ? ] [ ¡ M7 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N7 ] [ ? SIGN NUM ] [ ¡ M7 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N8 ] [ ? ] [ ¡ M8 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N8 ] [ ? SIGN NUM ] [ ¡ M8 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_CPY | | | | N9 ] [ ? ] [ ¡ M9 SIGN NUM ] -> ['][ @ S_PLAY ] [ # | OP_CPY | | | | N9 ] [ ? SIGN NUM ] [ ¡ M9 SIGN NUM ] | |
( PST ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST ] [ ? NO NUM ] -> ['][ @ S_IDLE ] [ # | OP_PST ] [ ? ] ( Can't PST without holding a number ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N0 ] [ ? SIGN NUM ] [ ¡ M0 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N0 ] [ ? SIGN NUM ] [ ¡ M0 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N1 ] [ ? SIGN NUM ] [ ¡ M1 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N1 ] [ ? SIGN NUM ] [ ¡ M1 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N2 ] [ ? SIGN NUM ] [ ¡ M2 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N2 ] [ ? SIGN NUM ] [ ¡ M2 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N3 ] [ ? SIGN NUM ] [ ¡ M3 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N3 ] [ ? SIGN NUM ] [ ¡ M3 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N4 ] [ ? SIGN NUM ] [ ¡ M4 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N4 ] [ ? SIGN NUM ] [ ¡ M4 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N5 ] [ ? SIGN NUM ] [ ¡ M5 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N5 ] [ ? SIGN NUM ] [ ¡ M5 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N6 ] [ ? SIGN NUM ] [ ¡ M6 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N6 ] [ ? SIGN NUM ] [ ¡ M6 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N7 ] [ ? SIGN NUM ] [ ¡ M7 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N7 ] [ ? SIGN NUM ] [ ¡ M7 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N8 ] [ ? SIGN NUM ] [ ¡ M8 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N8 ] [ ? SIGN NUM ] [ ¡ M8 SIGN NUM ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_PST | | | | N9 ] [ ? SIGN NUM ] [ ¡ M9 ] -> ['][ @ S_PLAY ] [ # | OP_PST | | | | N9 ] [ ? SIGN NUM ] [ ¡ M9 SIGN NUM ] | |
( JMP ) | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N0 ] [ | | | | | | ; | N0 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N0 ] [ ® | | | | | | ; | N0 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N1 ] [ | | | | | | ; | N1 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N1 ] [ ® | | | | | | ; | N1 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N2 ] [ | | | | | | ; | N2 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N2 ] [ ® | | | | | | ; | N2 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N3 ] [ | | | | | | ; | N3 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N3 ] [ ® | | | | | | ; | N3 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N4 ] [ | | | | | | ; | N4 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N4 ] [ ® | | | | | | ; | N4 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N5 ] [ | | | | | | ; | N5 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N5 ] [ ® | | | | | | ; | N5 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N6 ] [ | | | | | | ; | N6 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N6 ] [ ® | | | | | | ; | N6 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N7 ] [ | | | | | | ; | N7 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N7 ] [ ® | | | | | | ; | N7 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N8 ] [ | | | | | | ; | N8 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N8 ] [ ® | | | | | | ; | N8 ] | |
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP | | | | N9 ] [ | | | | | | ; | N9 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP | | | | N9 ] [ ® | | | | | | ; | N9 ] | |
(( Perform math operations )) | |
( | |
- We really don't want to have to implement every single combination of operands and signs... | |
- It's really easy to do math one step at a time, but the bigger the numbers, the more turns it | |
- takes to finish, and we want to do it in a *single turn*. | |
- Thankfully, we can perform both ADD and SUB with addition by transforming the operands beforehand, | |
- as well as inverting the result for some cases: | |
- | |
- ADD +A +B = C -> nothing | |
- ADD +A -B = C -> nothing | |
- ADD -A +B = C -> swap A and B | |
- ADD -A -B = C -> ~A, ~B and ~C | |
- | |
- SUB +A +B = C -> ~B | |
- SUB +A -B = C -> ~B, swap A and B | |
- SUB -A +B = C -> ~A, ~B and ~C | |
- SUB -A -B = C -> ~A and ~C | |
) | |
RIGHT [ + | + ] [ ß | ] [ - | POS M ] [ ä | SIGN OTHER_M ] -> [ + | POS M ] [ ß | SIGN OTHER_M ] [ - | ] [ ä | ] ( do nothing ) | |
RIGHT [ + | + ] [ ß | ] [ - | NEG M ] [ ä | POS OTHER_M ] -> [ + | POS OTHER_M ] [ ß | NEG M ] [ - | ] [ ä | ] ( swap A and B ) | |
RIGHT [ + | + ] [ ß | ] [ - | NEG M ] [ ä | NEG OTHER_M ] -> [ + | POS M ] [ ß | POS OTHER_M ] [ - | ] [ ä | - ] ( ~A, ~B and ~C ) | |
RIGHT [ + | - ] [ ß | ] [ - | POS M ] [ ä | POS OTHER_M ] -> [ + | POS M ] [ ß | NEG OTHER_M ] [ - | ] [ ä | ] ( ~B ) | |
RIGHT [ + | - ] [ ß | ] [ - | POS M ] [ ä | NEG OTHER_M ] -> [ + | POS OTHER_M ] [ ß | POS M ] [ - | ] [ ä | ] ( ~B, swap A and B ) | |
RIGHT [ + | - ] [ ß | ] [ - | NEG M ] [ ä | POS OTHER_M ] -> [ + | POS M ] [ ß | NEG OTHER_M ] [ - | ] [ ä | - ] ( ~A, ~B and ~C ) | |
RIGHT [ + | - ] [ ß | ] [ - | NEG M ] [ ä | NEG OTHER_M ] -> [ + | POS M ] [ ß | NEG OTHER_M ] [ - | ] [ ä | - ] ( ~A and ~C ) | |
( Calculate ) | |
RIGHT [ + | SIGN M ] [ ß | M0 ] -> [ + | SIGN M ] [ ß | ] | |
RIGHT [ + | M0 ] [ ß | SIGN M ] -> [ + | SIGN M ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M1 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M2 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M3 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M4 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M5 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M6 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M7 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | POS M8 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M1 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M2 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M3 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M4 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M5 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M6 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | POS M7 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | POS M1 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | POS M2 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | POS M3 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | POS M4 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | POS M5 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | POS M6 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | POS M1 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | POS M2 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | POS M3 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | POS M4 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | POS M5 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | POS M1 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | POS M2 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | POS M3 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | POS M4 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | POS M1 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | POS M1 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | POS M1 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | POS M1 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | POS M2 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | POS M1 ] -> [ + | POS M9 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M1 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M2 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M3 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M4 ] -> [ + | NEG M3 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M5 ] -> [ + | NEG M4 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M6 ] -> [ + | NEG M5 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M7 ] -> [ + | NEG M6 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M8 ] -> [ + | NEG M7 ] [ ß | ] | |
RIGHT [ + | POS M1 ] [ ß | NEG M9 ] -> [ + | NEG M8 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M1 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M2 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M3 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M4 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M5 ] -> [ + | NEG M3 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M6 ] -> [ + | NEG M4 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M7 ] -> [ + | NEG M5 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M8 ] -> [ + | NEG M6 ] [ ß | ] | |
RIGHT [ + | POS M2 ] [ ß | NEG M9 ] -> [ + | NEG M7 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M1 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M2 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M3 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M4 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M5 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M6 ] -> [ + | NEG M3 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M7 ] -> [ + | NEG M4 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M8 ] -> [ + | NEG M5 ] [ ß | ] | |
RIGHT [ + | POS M3 ] [ ß | NEG M9 ] -> [ + | NEG M6 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M1 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M2 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M3 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M4 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M5 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M6 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M7 ] -> [ + | NEG M3 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M8 ] -> [ + | NEG M4 ] [ ß | ] | |
RIGHT [ + | POS M4 ] [ ß | NEG M9 ] -> [ + | NEG M5 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M1 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M2 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M3 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M4 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M5 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M6 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M7 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M8 ] -> [ + | NEG M3 ] [ ß | ] | |
RIGHT [ + | POS M5 ] [ ß | NEG M9 ] -> [ + | NEG M4 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M1 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M2 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M3 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M4 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M5 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M6 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M7 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M8 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M6 ] [ ß | NEG M9 ] -> [ + | NEG M3 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M1 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M2 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M3 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M4 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M5 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M6 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M7 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M8 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M7 ] [ ß | NEG M9 ] -> [ + | NEG M2 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M1 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M2 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M3 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M4 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M5 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M6 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M7 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M8 ] -> [ + | POS M0 ] [ ß | ] | |
RIGHT [ + | POS M8 ] [ ß | NEG M9 ] -> [ + | NEG M1 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M1 ] -> [ + | POS M8 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M2 ] -> [ + | POS M7 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M3 ] -> [ + | POS M6 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M4 ] -> [ + | POS M5 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M5 ] -> [ + | POS M4 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M6 ] -> [ + | POS M3 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M7 ] -> [ + | POS M2 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M8 ] -> [ + | POS M1 ] [ ß | ] | |
RIGHT [ + | POS M9 ] [ ß | NEG M9 ] -> [ + | POS M0 ] [ ß | ] | |
( Invert the result if necessary ) | |
RIGHT [ + | POS ] [ ä | - ] -> [ + | NEG ] [ ä | ] | |
RIGHT [ + | NEG ] [ ä | - ] -> [ + | POS ] [ ä | ] | |
( Return the result ) | |
RIGHT [ + | SIGN M0 ] [ ? ] -> [ + | ] [ ? SIGN N0 ] | |
RIGHT [ + | SIGN M1 ] [ ? ] -> [ + | ] [ ? SIGN N1 ] | |
RIGHT [ + | SIGN M2 ] [ ? ] -> [ + | ] [ ? SIGN N2 ] | |
RIGHT [ + | SIGN M3 ] [ ? ] -> [ + | ] [ ? SIGN N3 ] | |
RIGHT [ + | SIGN M4 ] [ ? ] -> [ + | ] [ ? SIGN N4 ] | |
RIGHT [ + | SIGN M5 ] [ ? ] -> [ + | ] [ ? SIGN N5 ] | |
RIGHT [ + | SIGN M6 ] [ ? ] -> [ + | ] [ ? SIGN N6 ] | |
RIGHT [ + | SIGN M7 ] [ ? ] -> [ + | ] [ ? SIGN N7 ] | |
RIGHT [ + | SIGN M8 ] [ ? ] -> [ + | ] [ ? SIGN N8 ] | |
RIGHT [ + | SIGN M9 ] [ ? ] -> [ + | ] [ ? SIGN N9 ] | |
( Move numbers in input queue up ) | |
UP [ BELT SIGN NUM | BELT_MID NO NUM ] -> [ BELT | BELT_MID SIGN NUM ] | |
( Move numbers in output queue down when necessary ) | |
[ ¥ SIGN N0 ] -> [ ¥ SIGN O0 ] | |
[ ¥ SIGN N1 ] -> [ ¥ SIGN O1 ] | |
[ ¥ SIGN N2 ] -> [ ¥ SIGN O2 ] | |
[ ¥ SIGN N3 ] -> [ ¥ SIGN O3 ] | |
[ ¥ SIGN N4 ] -> [ ¥ SIGN O4 ] | |
[ ¥ SIGN N5 ] -> [ ¥ SIGN O5 ] | |
[ ¥ SIGN N6 ] -> [ ¥ SIGN O6 ] | |
[ ¥ SIGN N7 ] -> [ ¥ SIGN O7 ] | |
[ ¥ SIGN N8 ] -> [ ¥ SIGN O8 ] | |
[ ¥ SIGN N9 ] -> [ ¥ SIGN O9 ] | |
DOWN [ ¥ SIGN O ] -> [ ¥ DOWN SIGN DOWN O ] | |
DOWN [ DOWN SIGN DOWN O | SIGN O ] -> [ DOWN SIGN DOWN O | DOWN SIGN DOWN O ] | |
( Increment/decrement the current number of code lines ) | |
[ INC | M9 ] -> [ | MX ] | |
[ INC | M8 ] -> [ | M9 ] | |
[ INC | M7 ] -> [ | M8 ] | |
[ INC | M6 ] -> [ | M7 ] | |
[ INC | M5 ] -> [ | M6 ] | |
[ INC | M4 ] -> [ | M5 ] | |
[ INC | M3 ] -> [ | M4 ] | |
[ INC | M2 ] -> [ | M3 ] | |
[ INC | M1 ] -> [ | M2 ] | |
[ INC | M0 ] -> [ | M1 ] | |
[ DEC | M1 ] -> [ | M0 ] | |
[ DEC | M2 ] -> [ | M1 ] | |
[ DEC | M3 ] -> [ | M2 ] | |
[ DEC | M4 ] -> [ | M3 ] | |
[ DEC | M5 ] -> [ | M4 ] | |
[ DEC | M6 ] -> [ | M5 ] | |
[ DEC | M7 ] -> [ | M6 ] | |
[ DEC | M8 ] -> [ | M7 ] | |
[ DEC | M9 ] -> [ | M8 ] | |
[ DEC | MX ] -> [ | M9 ] | |
( Check for win conditions ) | |
( DOWN [ N0 | ¥ | O2 | O8 | O7 | O6 | O2 | O6 ] -> [ FINISHED | | | | | | | ] ) | |
============== | |
WINCONDITIONS | |
============== | |
SOME FINISHED | |
======= | |
LEVELS | |
======= | |
¶...........*×××××;0.+.. | |
%............×××××;1.ß.. | |
.............×××××;2.... | |
.....?.......×××××;3.-.. | |
.........0...×××××;4.ä.. | |
.,.......¥...×××××;5.... | |
=2...........×××××;6.... | |
.6.01234.....×××××;7.... | |
.7.\\\\\.....×××××;8.... | |
.6...........×××××;9.... | |
.2.56789...._........... | |
.8.\\\\\.....çøøøø...... | |
............¿øøøøø...... | |
............åøøóøø...... | |
.$.......,.............. | |
}0..²................... | |
( @"......#A....;0.+....... ) | |
( %?.......D..00;1......... ) | |
( .........A....;2......... ) | |
( .........B....;3.-....... ) | |
( ...01234.C..00;4......... ) | |
( .,.\\\\\.B....;5......... ) | |
( =........I..00;6.²0...... ) | |
( ...56789......;7......... ) | |
( ...\\\\\......;8......... ) | |
( ..............;9......... ) | |
( ........_................ ) | |
( ......................... ) | |
( .$.......¤............... ) | |
( %267628.................. ) | |
( ......................... ) | |
( {......................}0 ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment