Skip to content

Instantly share code, notes, and snippets.

@10c8
Created February 12, 2025 17:49
Show Gist options
  • Save 10c8/181fae96219265944850be00d23c33c1 to your computer and use it in GitHub Desktop.
Save 10c8/181fae96219265944850be00d23c33c1 to your computer and use it in GitHub Desktop.
[DEV] Human Puzzle Machine (PuzzleScript Script)
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
(-
- 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 .5 )
realtime_interval .25
again_interval .25
zoomscreen 19x14
( Disable while editing )
run_rules_on_level_start
norepeat_action
( noundo )
( norestart )
( Enable while editing for debugging )
( verbose_logging )
( debug )
========
OBJECTS
========
( Background )
BACKGROUND .
#4b382b
( Player )
PLAYER @
transparent
( Held )
HELD ?
transparent
( Conveyor Belt )
BELT_MID
transparent
BELT_IN_STR $
transparent
BELT_OUT_STR ¥
transparent
BELT_END ,
transparent
( 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
00100
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
11100
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
11100
01110
01100
11111
OP_JPN_1
#3F4055 #8D8FB6
11111
01000
11000
11011
11111
OP_JPN_2
#3F4055 #8D8FB6
11111
10011
10101
10101
11111
( Numbers )
MARK_BLUE
#8c90b4
MARK_ORANGE
#c28f64
MARK_RED
#c86a54
CODE_LABEL
transparent
MEM_LABEL \
transparent
POS
#9dcb58
NEG :
#c86a54
N0 0
#302c27
.....
.000.
.0.0.
.000.
.....
N1 1
#302c27
.....
..0..
..0..
..0..
.....
N2 2
#302c27
.....
.00..
..0..
..00.
.....
N3 3
#302c27
.....
.000.
..00.
.000.
.....
N4 4
#302c27
.....
.0.0.
.000.
...0.
.....
N5 5
#302c27
.....
..00.
..0..
.00..
.....
N6 6
#302c27
.....
.0...
.000.
.000.
.....
N7 7
#302c27
.....
.000.
...0.
..0..
.....
N8 8
#302c27
.....
.00..
.000.
..00.
.....
N9 9
#302c27
.....
.000.
.000.
...0.
.....
O0
#302c27
.....
.000.
.0.0.
.000.
.....
O1
#302c27
.....
..0..
..0..
..0..
.....
O2
#302c27
.....
.00..
..0..
..00.
.....
O3
#302c27
.....
.000.
..00.
.000.
.....
O4
#302c27
.....
.0.0.
.000.
...0.
.....
O5
#302c27
.....
..00.
..0..
.00..
.....
O6
#302c27
.....
.0...
.000.
.000.
.....
O7
#302c27
.....
.000.
...0.
..0..
.....
O8
#302c27
.....
.00..
.000.
..00.
.....
O9
#302c27
.....
.000.
.000.
...0.
.....
D0
#785e4c
.....
.000.
.0.0.
.000.
.....
D1
#785e4c
.....
..0..
..0..
..0..
.....
D2
#785e4c
.....
.00..
..0..
..00.
.....
D3
#785e4c
.....
.000.
..00.
.000.
.....
D4
#785e4c
.....
.0.0.
.000.
...0.
.....
D5
#785e4c
.....
..00.
..0..
.00..
.....
D6
#785e4c
.....
.0...
.000.
.000.
.....
D7
#785e4c
.....
.000.
...0.
..0..
.....
D8
#785e4c
.....
.00..
.000.
..00.
.....
D9
#785e4c
.....
.000.
.000.
...0.
.....
M0
transparent
M1
transparent
M2
transparent
M3
transparent
M4
transparent
M5
transparent
M6
transparent
M7
transparent
M8
transparent
M9
transparent
MX
transparent
( UI )
PC #
#00ff00
0....
00...
000..
00...
0....
PC_ERR
#ff0000
0....
00...
000..
00...
0....
CURSOR ¤
transparent
00.00
0...0
.....
0...0
00.00
CUR_WHITE
#ffffff
00.00
0...0
.....
0...0
00.00
CUR_BIG_WHITE_L
#ffffff
00...
0....
.....
0....
00...
CUR_BIG_WHITE_R
#ffffff
...00
....0
.....
....0
...00
CUR_RED
#a62d02
00.00
0...0
.....
0...0
00.00
CUR_YELLOW
#ffff00
00.00
0...0
.....
0...0
00.00
CUR_BIG_YELLOW_L
#ffff00
00...
0....
.....
0....
00...
CUR_BIG_YELLOW_R
#ffff00
...00
....0
.....
....0
...00
CUR_BLUE
#00bbff
00.00
0...0
.....
0...0
00.00
CUR_JUMP
#fff
0....
00...
000..
00...
0....
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...
PANEL_V
#a88f7c #bca08b #706053 #968072
...01
...00
.....
...22
...23
PANEL_M
#706053 #968072 #1b1815
2..01
2..01
2..01
2..01
2..01
CTRL_PANEL_C
#2f2c27
CTRL_PANEL_T
#1b1815
.....
.....
.....
.....
00000
CTRL_PANEL_B
#1b1815
00000
.....
.....
.....
.....
CTRL_PANEL_L
#1b1815
....0
....0
....0
....0
....0
BTN_PLAY
#8dc553 #698540
.....
.01..
.000.
.01..
.....
BTN_PAUSE
#c28f64
.....
.0.0.
.0.0.
.0.0.
.....
BTN_STOP
#c96b52 #4c2f28
.....
.000.
.010.
.000.
.....
BTN_STEP
#8dc553
.....
.000.
...0.
.0.0.
.....
BTN_HELP
#8c90b4
.....
.0.0.
.000.
.0.0.
.....
HIDE_BTN
#2f2c27
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
.....
.001.
.111.
.111.
.....
ICON_JPZ
#3f4055 #8d8fb6
.....
.111.
.011.
.111.
.....
ICON_JPN
#3f4055 #8d8fb6
.....
.111.
.011.
.011.
.....
ICON_ADD
#593d27 #c28f64
.....
.011.
.001.
.011.
.....
ICON_SUB
#593d27 #c28f64
.....
.111.
.001.
.111.
.....
ICON_INC
#593d27 #c28f64
.....
.101.
.011.
.111.
.....
ICON_DEC
#593d27 #c28f64
.....
.111.
.011.
.101.
.....
( 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 ¡
#948073
0.0.0
.....
0...0
.....
0.0.0
OPS_BTN_ROW_0 ç
transparent
OPS_BTN_ROW_1 ¿
transparent
OPS_BTN_ROW_2 å
transparent
OP_DATA
transparent
OP_EMPTY
transparent
PC_ANCHOR ®
#8d8fb6
0....
00...
000..
00...
0....
OP_ANCHOR þ
transparent
PC_HL
#8d8fb6
0....
00...
000..
00...
0....
DEL_MARK_C
#b9a08d #a62d02
00000
01010
00100
01010
00000
DEL_MARK_T
#a58f7e #b9a08d
.....
.....
.....
.....
00001
DEL_MARK_B
#a58f7e #b9a08d
00001
.....
.....
.....
.....
DEL_MARK_L
#a58f7e
....0
....0
....0
....0
....0
DEL_MARK_TL
#a58f7e
.....
.....
.....
.....
....0
DEL_MARK_BL
#a58f7e
....0
.....
.....
.....
.....
ICON_ANCHOR
transparent
SEL_TMP æ
transparent
LABEL ;
transparent
HAND =
transparent
PLAYING
transparent
FINISHED
transparent
ERROR
#ff0000
0...0
.0.0.
..0..
.0.0.
0...0
( Font )
__
#948073
_A
#948073 #2f2c27
01100
01010
01110
01010
00000
_E
#948073 #2f2c27
00110
01000
01100
01110
00000
_H
#948073 #2f2c27
01010
01110
01010
01010
00000
_L
#948073 #2f2c27
01000
01000
01000
01110
00000
_O
#948073 #2f2c27
01110
01010
01010
01110
00000
_P
#948073 #2f2c27
01100
01010
01110
01000
00000
_U
#948073 #2f2c27
01010
01010
01010
01110
00000
_S
#948073 #2f2c27
01110
01100
00010
01110
00000
_T
#948073 #2f2c27
01110
00100
00100
00100
00000
_Y
#948073 #2f2c27
01010
01010
01110
00100
00000
( Decorations )
TILE_A
#c09c83
TILE_B
#af8f75
TILE_C
#b6967c
WALL_DECO_A µ
#785e4c #6e5746
11111
00000
00000
11111
11111
WALL_DECO_B
#785e4c #6e5746
11111
11111
00000
00000
11111
WALL_DECO_C
#785e4c #6e5746
00000
11111
11111
00000
00000
WALL_DECO_D
#785e4c #6e5746
00000
00000
11111
11111
00000
PLAYER_T à
#8e6d55 #fff #000
00000
11101
12101
11101
00000
PLAYER_B è
#252e3c #c6b29b #000
01010
00100
00000
00000
.2.2.
PLAYER_HELD_L
#8e6d55 #000
.....
.....
....0
....0
...1.
PLAYER_HELD_R
#8e6d55 #000
.....
.....
0....
0....
.1...
PLAYER_TL
#8e6d55
.....
....0
....0
....0
.....
PLAYER_TR
#fff #000
.....
00...
10...
00...
.....
PLAYER_HELD_TL
#8e6d55 #000
..1..
..1.0
..1.0
..1.0
...1.
PLAYER_HELD_TR
#fff #000
..1..
001..
101..
001..
.1...
PLAYER_BL
#8e6d55 #000
....1
...1.
...0.
.....
.....
PLAYER_BR
#8e6d55 #000
1....
.1...
.0...
.....
.....
PLAYER_HELD_BL
#000
....0
.....
.....
.....
.....
PLAYER_HELD_BR
#000
0....
.....
.....
.....
.....
BOSS_A §
#423e2d #252e3c #8c90b4
..000
.0011
.0012
..012
...11
BOSS_B
#423e2d #252e3c #8c90b4 #8e6d55
00000
11011
21012
21112
11311
BOSS_C
#423e2d #252e3c #8c90b4
000..
1100.
2100.
210..
11...
BOSS_D ╚
#8e6d55
....0
....0
.....
.....
.....
BOSS_E
#8e6d55 #000
00000
01110
00000
11111
11111
BOSS_F
#8e6d55
0....
0....
.....
.....
.....
TABLE_L ‼
#49382c
...00
...00
...00
...00
...00
TABLE_M
#49382c
TABLE_BL ○
#49382c #382b20
...00
...11
...11
.....
.....
TABLE_B
#49382c #382b20
00000
11111
11111
.....
.....
TABLE_P
#49382c #c6b29b #af8f75
00222
01112
01112
01112
01110
ELEVATOR_A ►
#1b1815 #62443b #463029
..000
..011
..011
..011
..022
ELEVATOR_B ◄
#1b1815 #62443b
..011
..011
..011
..000
.....
ELEVATOR_C ☼
#1b1815 #62443b #463029
00000
11111
11111
11111
22222
ELEVATOR_D ♪
#1b1815 #62443b
11111
11111
11111
00000
.....
ELEVATOR_E ↕
#1b1815
.....
.....
.00..
.00..
.....
IN_A
#c6b29b #382b20
.....
.....
.....
.....
.0000
IN_B
#c6b29b #382b20
.0111
.0000
.0001
.0010
.0111
IN_C
#c6b29b #382b20
.0000
.0111
.0000
.0001
.0011
IN_D
#c6b29b #382b20
.0111
.0011
.0011
.0011
.0000
IN_E
#c6b29b #382b20
.....
.....
.....
.....
000..
IN_F
#c6b29b #382b20
110..
100..
000..
000..
110..
IN_G
#c6b29b #382b20
000..
110..
000..
000..
100..
IN_H
#c6b29b #382b20
110..
100..
100..
100..
000..
OUT_A
#c6b29b #382b20
.....
.....
.....
.....
..000
OUT_B
#c6b29b #382b20
..001
..010
..010
..001
..000
OUT_C
#c6b29b #382b20
..001
..010
..010
..001
..000
OUT_D
#c6b29b #382b20
..000
..011
..000
..000
..001
OUT_E
#c6b29b #382b20
..001
..001
..011
..001
..000
OUT_F
#c6b29b #382b20
..000
.....
.....
.....
.....
OUT_G
#c6b29b #382b20
.....
.....
.....
.....
0000.
OUT_H
#c6b29b #382b20
1100.
0010.
0010.
1100.
0000.
OUT_I
#c6b29b #382b20
1110.
0000.
0000.
1110.
0000.
OUT_J
#c6b29b #382b20
0010.
1110.
0010.
0000.
1100.
OUT_K
#c6b29b #382b20
1100.
1100.
1110.
1100.
1000.
OUT_L
#c6b29b #382b20
0000.
.....
.....
.....
.....
BELT_DECO_A
#382b20 #49382c
11111
11111
00000
00000
11111
BELT_DECO_B
#382b20 #49382c
11111
00000
00000
11111
11111
BELT_DECO_C
#382b20 #49382c
00000
00000
11111
11111
00000
BELT_DECO_D
#382b20 #49382c
00000
11111
11111
00000
00000
BELT_T
#1b1815
.....
.....
.....
.....
00000
BELT_TL
#1b1815
.....
.....
.....
.....
....0
BELT_TR
#1b1815
.....
.....
.....
.....
0....
BELT_L
#1b1815
....0
....0
....0
....0
....0
BELT_R
#1b1815
0....
0....
0....
0....
0....
( States )
S_PLAY
transparent
S_PLAY_START
transparent
S_PLAY_CONTINUE
transparent
S_PLAY_WAIT
transparent
S_DONE
transparent
S_MSG_1
transparent
S_MSG_2
transparent
S_MSG_3
transparent
S_HALT
transparent
S_IDLE
transparent
S_EDIT_START
transparent
S_EDIT
transparent
S_CHANGE_START
transparent
S_CHANGE
transparent
S_CHANGE_MOVING
transparent
S_CHANGE_CANCEL
transparent
S_MEM_SEL_ED
transparent
S_MEM_SEL_CH
transparent
S_LINE_SEL_ED
transparent
S_LINE_SEL_CH
transparent
=======
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
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
DIM = D0 or D1 or D2 or D3 or D4 or D5 or D6 or D7 or D8 or D9
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 or PANEL_V or PANEL_M or CTRL_PANEL_C or CTRL_PANEL_T or CTRL_PANEL_B or CTRL_PANEL_L
CODE_PANEL = CODE_PANEL_C or CODE_PANEL_L or CODE_PANEL_B
BTN = BTN_PLAY or BTN_PAUSE or BTN_STOP or BTN_STEP or BTN_HELP
ICON = ICON_IN or ICON_OUT or ICON_CPY or ICON_PST or ICON_ADD or ICON_SUB or ICON_INC or ICON_DEC or ICON_JMP or ICON_JPZ or ICON_JPN
FONT = __ or _A or _E or _H or _L or _O or _P or _U or _S or _T or _Y
DEL_MARK = DEL_MARK_C or DEL_MARK_T or DEL_MARK_B or DEL_MARK_L or DEL_MARK_TL or DEL_MARK_BL
CUR_DECO = CUR_WHITE or CUR_BIG_WHITE_L or CUR_BIG_WHITE_R or CUR_YELLOW or CUR_BIG_YELLOW_L or CUR_BIG_YELLOW_R or CUR_RED or CUR_BLUE or CUR_JUMP or CUR_DIM
CODE_CUR_TGT = OPCODE or OP_DATA
TILE = TILE_A or TILE_B or TILE_C
WALL = WALL_DECO_A or WALL_DECO_B or WALL_DECO_C or WALL_DECO_D
PLAYER_SPR_DECO = PLAYER_HELD_L or PLAYER_HELD_R or PLAYER_TL or PLAYER_TR or PLAYER_BL or PLAYER_BR or PLAYER_HELD_TL or PLAYER_HELD_TR or PLAYER_HELD_BL or PLAYER_HELD_BR
PLAYER_SPR = PLAYER_T or PLAYER_B or PLAYER_SPR_DECO
BOSS = BOSS_A or BOSS_B or BOSS_C or BOSS_D or BOSS_E or BOSS_F
TABLE = TABLE_L or TABLE_M or TABLE_BL or TABLE_B or TABLE_P
ELEVATOR = ELEVATOR_A or ELEVATOR_B or ELEVATOR_C or ELEVATOR_D or ELEVATOR_E
IN_BANNER = IN_A or IN_B or IN_C or IN_D or IN_E or IN_F or IN_G or IN_H
OUT_BANNER = OUT_A or OUT_B or OUT_C or OUT_D or OUT_E or OUT_F or OUT_G or OUT_H or OUT_I or OUT_J or OUT_K or OUT_L
BELT_DECO = BELT_DECO_A or BELT_DECO_B or BELT_DECO_C or BELT_DECO_D or BELT_T or BELT_TL or BELT_TR or BELT_L or BELT_R
( States )
S_PLAY_X = S_PLAY or S_PLAY_START or S_PLAY_CONTINUE or S_PLAY_WAIT
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_X or S_DONE or S_MSG_1 or S_MSG_2 or S_MSG_3 or S_HALT 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
( Aliases )
OTHER_M = M
OTHER_N = NUM
OTHER_O = O
ABOVE_7 = M8 or M9
ABOVE_6 = M7 or ABOVE_7
ABOVE_5 = M6 or ABOVE_6
ABOVE_4 = M5 or ABOVE_5
ABOVE_3 = M4 or ABOVE_4
ABOVE_2 = M3 or ABOVE_3
ABOVE_1 = M2 or ABOVE_2
ABOVE_0 = M1 or ABOVE_1
OPS_JMP = OP_JMP or OP_JPZ or OP_JPN
OPS_MEM = OP_CPY or OP_PST or OP_ADD or OP_SUB or OP_INC or OP_DEC
OPS_HELD = OP_OUT or OP_PST or OP_ADD or OP_SUB or OP_JPZ or OP_JPN
OPS_MATH = OP_ADD or OP_SUB or OP_INC or OP_DEC
S_HL_PARAMS = S_PLAY or S_IDLE or S_CHANGE or S_CHANGE_MOVING
( Combos )
¶ = PLAYER and R_TICK and S_IDLE
ó = ICON_ANCHOR and PANEL_C
ü = BTN_PLAY and CTRL_PANEL_C
í = BTN_STEP and CTRL_PANEL_C
ö = BTN_HELP and CTRL_PANEL_C
=======
SOUNDS
=======
sfx0 72045703 ( Level Complete )
sfx1 60487308 ( Halted )
================
COLLISIONLAYERS
================
( BG )
BACKGROUND
TILE
BELT_DECO PLAYER_SPR BOSS TABLE
WALL
ELEVATOR IN_BANNER OUT_BANNER
STATE HELD BELT PANEL CODE_PANEL
PC PC_ERR PC_ANCHOR OP_ANCHOR PC_HL ICON_ANCHOR
OPCODE OP_PART ICON BTN
OP_EMPTY HIDE_BTN
MATH OP_DATA
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 DIM
PLAYER CURSOR FONT
CUR_DECO DEL_MARK PLAYING ERROR
======
RULES
======
( Realtime fix )
[ STATIONARY @ ] ["] -> [ @ ] [']
[ MOVING @ ] ['] -> [ MOVING @ ] ["]
(( Setup and decorations ))
( Player sprite )
RIGHT [ NO PLAYER_SPR_DECO | PLAYER_T | ] -> [ PLAYER_TL | PLAYER_T | PLAYER_TR ]
RIGHT [ NO PLAYER_SPR_DECO | PLAYER_B | ] -> [ PLAYER_BL | PLAYER_B | PLAYER_BR ]
( Boss sprite )
RIGHT [ BOSS_A | NO BOSS | ] -> [ BOSS_A | BOSS_B | BOSS_C ]
RIGHT [ BOSS_D | NO BOSS | ] -> [ BOSS_D | BOSS_E | BOSS_F ]
RIGHT [ TABLE_L | NO BOSS || ] -> [ TABLE_L | TABLE_M | TABLE_P | TABLE_M ]
RIGHT [ TABLE_BL | NO BOSS || ] -> [ TABLE_BL | TABLE_B | TABLE_B | TABLE_B ]
( UI )
RIGHT [ NO × | × ] -> [ CODE_PANEL_L | × ]
UP [ NO × | × ] -> [ CODE_PANEL_B | × ]
( The list of available opcodes is limited on a few levels )
RIGHT [ } | N0 | N0 ] [ ç NO ICON | ] -> [ } | N0 | N0 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT ]
RIGHT [ } | N0 | N0 ] [ ¿ | ] -> [ } | N0 | N0 ] [ | PANEL_C ]
RIGHT [ } | N0 | N0 ] [ å | ] -> [ } | N0 | N0 ] [ | PANEL_C ]
RIGHT [ } | N0 | N1 ] [ ç NO ICON || ] -> [ } | N0 | N1 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_JMP ]
RIGHT [ } | N0 | N1 ] [ ¿ | ] -> [ } | N0 | N1 ] [ | PANEL_C ]
RIGHT [ } | N0 | N1 ] [ å | ] -> [ } | N0 | N1 ] [ | PANEL_C ]
RIGHT [ } | N0 | N2 ] [ ç NO ICON ||| ] -> [ } | N0 | N2 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_JMP ]
RIGHT [ } | N0 | N2 ] [ ¿ | ] -> [ } | N0 | N2 ] [ | PANEL_C ]
RIGHT [ } | N0 | N2 ] [ å | ] -> [ } | N0 | N2 ] [ | PANEL_C ]
RIGHT [ } | N0 | N3 ] [ ç NO ICON |||| ] -> [ } | N0 | N3 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_JMP ]
RIGHT [ } | N0 | N3 ] [ ¿ | ] -> [ } | N0 | N3 ] [ | PANEL_C ]
RIGHT [ } | N0 | N3 ] [ å | ] -> [ } | N0 | N3 ] [ | PANEL_C ]
RIGHT [ } | N0 | N4 ] [ ç NO ICON |||| ] -> [ } | N0 | N4 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N0 | N4 ] [ ¿ | ] -> [ } | N0 | N4 ] [ | PANEL_C ICON_JMP ]
RIGHT [ } | N0 | N4 ] [ å | ] -> [ } | N0 | N4 ] [ | PANEL_C ]
RIGHT [ } | N0 | N5 ] [ ç NO ICON |||| ] -> [ } | N0 | N5 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N0 | N5 ] [ ¿ || ] -> [ } | N0 | N5 ] [ | PANEL_C ICON_JMP | ICON_JPZ ]
RIGHT [ } | N0 | N5 ] [ å | ] -> [ } | N0 | N5 ] [ | PANEL_C ]
RIGHT [ } | N0 | N6 ] [ ç NO ICON |||| ] -> [ } | N0 | N6 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N0 | N6 ] [ ¿ || ] -> [ } | N0 | N6 ] [ | PANEL_C ICON_JMP | ICON_JPZ ]
RIGHT [ } | N0 | N6 ] [ å | ] -> [ } | N0 | N6 ] [ | PANEL_C ]
RIGHT [ } | N0 | N7 ] [ ç NO ICON |||| ] -> [ } | N0 | N7 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N0 | N7 ] [ ¿ ||| ] -> [ } | N0 | N7 ] [ | PANEL_C ICON_SUB | ICON_JMP | ICON_JPZ ]
RIGHT [ } | N0 | N7 ] [ å | ] -> [ } | N0 | N7 ] [ | PANEL_C ]
RIGHT [ } | N0 | N8 ] [ ç NO ICON |||| ] -> [ } | N0 | N8 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N0 | N8 ] [ ¿ ||| ] -> [ } | N0 | N8 ] [ | PANEL_C ICON_SUB | ICON_JMP | ICON_JPZ ]
RIGHT [ } | N0 | N8 ] [ å | ] -> [ } | N0 | N8 ] [ | PANEL_C ]
RIGHT [ } | N0 | N9 ] [ ç NO ICON |||| ] -> [ } | N0 | N9 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N0 | N9 ] [ ¿ |||| ] -> [ } | N0 | N9 ] [ | PANEL_C ICON_SUB | ICON_JMP | ICON_JPZ | ICON_JPN ]
RIGHT [ } | N0 | N9 ] [ å | ] -> [ } | N0 | N9 ] [ | PANEL_C ]
RIGHT [ } | N1 | N0 ] [ ç NO ICON |||| ] -> [ } | N1 | N0 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N1 | N0 ] [ ¿ |||| ] -> [ } | N1 | N0 ] [ | PANEL_C ICON_SUB | ICON_JMP | ICON_JPZ | ICON_JPN ]
RIGHT [ } | N1 | N0 ] [ å | ] -> [ } | N1 | N0 ] [ | PANEL_C ]
RIGHT [ } | N1 | N4 ] [ ç NO ICON |||| ] -> [ } | N1 | N4 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N1 | N4 ] [ ¿ | ] -> [ } | N1 | N4 ] [ | PANEL_C ICON_JMP ]
RIGHT [ } | N1 | N4 ] [ å | ] -> [ } | N1 | N4 ] [ | PANEL_C ]
RIGHT [ } | N1 | N5 ] [ ç NO ICON |||| ] -> [ } | N1 | N5 ] [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ } | N1 | N5 ] [ ¿ | ] -> [ } | N1 | N5 ] [ | PANEL_C ICON_JMP ]
RIGHT [ } | N1 | N5 ] [ å | ] -> [ } | N1 | N5 ] [ | PANEL_C ]
RIGHT [ ç NO ICON |||| ] -> [ ç PANEL_C CURSOR ICON_IN | ICON_OUT | ICON_CPY | ICON_PST | ICON_ADD ]
RIGHT [ ¿ | NO ICON |||| ] -> [ | PANEL_C ICON_SUB | ICON_INC | ICON_DEC | ICON_JMP | ICON_JPZ ]
RIGHT [ å | NO ICON ] -> [ | PANEL_C ICON_JPN ]
RIGHT [ BTN | NO ø | ø ] -> [ BTN | PANEL_M | ø ]
RIGHT [ NO BTN | NO ø | ø ] -> [ | PANEL_L | ø ]
UP [ PANEL_M | NO PANEL ] -> [ PANEL_M | PANEL_V ]
RIGHT [ ø | NO ø ] -> [ ø | PANEL_R ]
UP [ NO ø | ø ] -> [ PANEL_B | ø ]
RIGHT [ NO PANEL | BTN ] -> [ CTRL_PANEL_L | BTN ]
UP [ NO PANEL | BTN ] -> [ CTRL_PANEL_B | BTN ]
DOWN [ NO PANEL | BTN ] -> [ CTRL_PANEL_T | BTN ]
( Floor tiles )
[ . NO TILE ] -> [ . RANDOM TILE ]
( Walls )
UP [ WALL_DECO_A | NO WALL ] -> [ WALL_DECO_A | WALL_DECO_B ]
+ UP [ WALL_DECO_B | NO WALL ] -> [ WALL_DECO_B | WALL_DECO_C ]
+ UP [ WALL_DECO_C | NO WALL ] -> [ WALL_DECO_C | WALL_DECO_D ]
+ UP [ WALL_DECO_D | NO WALL ] -> [ WALL_DECO_D | WALL_DECO_A ]
( Wall banners )
RIGHT [ NO IN_BANNER | = ] -> [ IN_B | IN_F = ]
DOWN [ NO IN_BANNER | IN_B || ] -> [ IN_A | IN_B | IN_C | IN_D ]
DOWN [ NO IN_BANNER | IN_F || ] -> [ IN_E | IN_F | IN_G | IN_H ]
RIGHT [ ¥ | NO OUT_BANNER | ] -> [ ¥ | OUT_A | OUT_G ]
DOWN [ OUT_A | NO OUT_BANNER |||| ] -> [ OUT_A | OUT_B | OUT_C | OUT_D | OUT_E | OUT_F ]
DOWN [ OUT_G | NO OUT_BANNER |||| ] -> [ OUT_G | OUT_H | OUT_I | OUT_J | OUT_K | OUT_L ]
( 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 ]
DOWN [ BELT_MID NO BELT_DECO | NO BELT_DECO | NO BELT_DECO | NO BELT_DECO ] -> [ BELT_MID BELT_DECO_A | BELT_DECO_B | BELT_DECO_C | BELT_DECO_D ]
[ ¥ NO BELT_DECO ] -> [ ¥ BELT_T ]
[ , NO BELT_DECO ] -> [ , BELT_T ]
RIGHT [ NO BELT_DECO | BELT_T | ] -> [ BELT_TL | BELT_T | BELT_TR ]
RIGHT [ NO BELT_DECO | BELT_MID | ] -> [ BELT_L | BELT_MID | BELT_R ]
( Memory slots )
DOWN [ N0 NO ¡ | \ ] -> [ ¡ M0 | \ D0 N0 ]
DOWN [ N1 NO ¡ | \ ] -> [ ¡ M1 | \ D1 N1 ]
DOWN [ N2 NO ¡ | \ ] -> [ ¡ M2 | \ D2 N2 ]
DOWN [ N3 NO ¡ | \ ] -> [ ¡ M3 | \ D3 N3 ]
DOWN [ N4 NO ¡ | \ ] -> [ ¡ M4 | \ D4 N4 ]
DOWN [ N5 NO ¡ | \ ] -> [ ¡ M5 | \ D5 N5 ]
DOWN [ N6 NO ¡ | \ ] -> [ ¡ M6 | \ D6 N6 ]
DOWN [ N7 NO ¡ | \ ] -> [ ¡ M7 | \ D7 N7 ]
DOWN [ N8 NO ¡ | \ ] -> [ ¡ M8 | \ D8 N8 ]
DOWN [ N9 NO ¡ | \ ] -> [ ¡ M9 | \ D9 N9 ]
( Write numbers into their slots )
DOWN [ ¡ | \ | NUM ] -> [ ¡ POS NUM | \ | ]
( 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 )
RIGHT [ BELT_MID NO SIGN NO MARK NUM | NO - ] -> [ POS NUM | ]
RIGHT [ BELT_MID NO SIGN NO MARK NUM | - ] -> [ NEG NUM | ]
( Hide level ID )
DOWN [ NUM | OTHER_N | ¥ ] -> [ NUM * | OTHER_N * | ¥ ]
[ N0 * ] -> [ M0 ]
[ N1 * ] -> [ M1 ]
[ N2 * ] -> [ M2 ]
[ N3 * ] -> [ M3 ]
[ N4 * ] -> [ M4 ]
[ N5 * ] -> [ M5 ]
[ N6 * ] -> [ M6 ]
[ N7 * ] -> [ M7 ]
[ N8 * ] -> [ M8 ]
[ N9 * ] -> [ M9 ]
(
Things to consider:
- Make a few original levels
- Rewrite math operations to use a LOOP
- When starting to edit a parameter, place the cursor on the current selection,
instead of the first option
- Indirect memory access
- More lines of code
Would probably require a UI rework to add more pages and scrolling between them.
Could make programming (extra) confusing for the player.
)
(( Handle state ))
( PLAY_START )
LATE [ @ S_PLAY_START ] [ * ] -> [ @ S_PLAY_WAIT ] [ * # ]
( PLAY_CONTINUE )
LATE [ @ S_PLAY_CONTINUE ] -> [ @ S_PLAY_WAIT ]
( PLAY )
( Advance the PC )
( NOTE: We stagger it a bit so that jumps are better visualized )
LATE DOWN ['][ @ S_PLAY ] [ | # CODE_END ] -> ['][ @ S_HALT ] [ PC_ERR | ] message Program finished with the wrong output! :(
LATE DOWN ['][ @ S_IDLE ] [ | # CODE_END ] -> ['][ @ S_HALT ] [ PC_ERR | ] message Program finished with the wrong output! :(
LATE RIGHT ['][ @ S_PLAY ] [ # | NO OPCODE ] -> ['][ @ S_HALT ] [ PC_ERR | ] message Program finished with the wrong output! :(
LATE RIGHT ['][ @ S_IDLE ] [ # | NO OPCODE ] -> ['][ @ S_HALT ] [ PC_ERR | ] message Program finished with the wrong output! :(
DOWN ['][ @ S_PLAY NO PLAYING ] [ # | ] -> ['][ @ S_IDLE ] [ | # ]
DOWN ['][ @ S_PLAY ] [ # | ] -> ['][ @ S_PLAY_WAIT ] [ | # ]
['][ @ S_PLAY_WAIT NO PLAYING ] [ # ] [ ® ] -> ['][ @ S_IDLE ] [ ] [ # ]
['][ @ S_PLAY_WAIT ] [ # ] [ ® ] -> ['][ @ S_PLAY ] [ ] [ # ]
['][ @ S_PLAY_WAIT NO PLAYING ] -> ['][ @ S_PLAY ]
['][ @ S_PLAY_WAIT ] -> ['][ @ S_PLAY PLAYING ]
( Interact with a control button to use it )
( RIGHT [ ACTION @ S_PLAY PLAYING ] [ CURSOR BTN_PAUSE ] -> [ @ S_IDLE ] [ CURSOR BTN_PLAY ] )
[ ACTION @ S_PLAY_X ] [ CURSOR BTN_STOP ] -> restart
( DONE )
( Interact to advance to the next level )
( NOTE: This is done so that the player can screenshot their solution. )
[ ACTION @ ] [ S_DONE ] -> win
( HALT )
( Hide every control button other than STOP )
LATE [ S_HALT ] [ BTN NO BTN_STOP NO HIDE_BTN ] -> [ S_HALT ] [ BTN HIDE_BTN ]
( Then move the cursor to the STOP button )
( NOTE: A `*` is added to the STOP button so that this rule doesn't loop infinitely. )
LATE [ S_HALT ] [ CURSOR ] [ BTN_STOP NO * ] -> [ S_HALT ] [ ] [ CURSOR BTN_STOP * ]
( Press STOP to restart )
[ ACTION @ S_HALT ] [ CURSOR BTN_STOP ] -> restart
( Turn the PC red to indicate an issue )
LATE [ S_HALT ] [ PC ] -> [ S_HALT ] [ PC_ERR ]
( IDLE )
( DEBUG: Play on ACTION )
( [ ACTION @ S_IDLE ] [ CURSOR NO ICON ] -> [ @ S_PLAY_START ] [ CURSOR ] )
( Interact with an opcode icon to enter EDIT mode )
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_ADD ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_ADD ] [ ² || OP_ADD ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_SUB ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_SUB ] [ ² || OP_SUB ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_INC ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_INC ] [ ² || OP_INC ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_DEC ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_DEC ] [ ² || OP_DEC ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_JMP ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_JMP ] [ ² || OP_JMP ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_JPZ ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_JPZ ] [ ² || OP_JPZ ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR ICON_JPN ] [ ² || ] -> [ @ S_EDIT_START ] [ CURSOR ICON_JPN ] [ ² || OP_JPN ]
( Interact with a control button to use it )
( [ ACTION @ S_IDLE ] [ CURSOR BTN_PLAY ] [ # ] -> [ @ S_PLAY_CONTINUE PLAYING ] [ CURSOR BTN_PAUSE ] [ # ] )
RIGHT [ ACTION @ S_IDLE ] [ CURSOR BTN_PLAY ] [ ² | NO M0 ] -> [ @ S_PLAY_START PLAYING ] [ CURSOR BTN_STOP ] [ ² | ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR BTN_PLAY ] -> message Write a program first!
RIGHT [ ACTION @ S_IDLE ] [ CURSOR BTN_STOP ] -> restart
RIGHT [ ACTION @ S_IDLE ] [ CURSOR BTN_STEP ] [ # ] -> [ @ S_PLAY_CONTINUE + ] [ CURSOR BTN_STEP ] [ # ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR BTN_STEP ] [ ² | NO M0 ] [ BTN_PLAY ] -> [ @ S_PLAY_START + ] [ CURSOR BTN_STEP ] [ ² | ] [ BTN_STOP ]
RIGHT [ ACTION @ S_IDLE ] [ CURSOR BTN_STEP ] -> message Write a program first!
( HELP button interactions )
[ ACTION @ S_IDLE ] [ CURSOR BTN_HELP ] -> [ @ S_MSG_1 ] [ CURSOR BTN_HELP ]
DOWN [ @ S_MSG_1 ] [ M0 | M0 | ¥ ] -> message Add commands into the top-right area to build a program.
DOWN [ @ S_MSG_2 ] [ M0 | M0 | ¥ ] -> message Your program should grab each number from the INput and drop it into the OUTput.
DOWN [ @ S_MSG_3 ] [ M0 | M0 | ¥ ] -> message You can put together a list of commands over there on the right side, then press the PLAY or STEP buttons to see what happens.
DOWN [ @ S_MSG_1 ] [ M0 | M1 | ¥ ] -> message Grab each number from the INPUT, and drop each one into the OUTPUT.
DOWN [ @ S_MSG_2 ] [ M0 | M1 | ¥ ] -> message You got a new command! You can set JMP's target to jump to different lines within your program.
DOWN [ @ S_MSG_3 ] [ M0 | M1 | ¥ ] -> message Your new command is very powerful! With it, you can target a line below to skip entire sections, or one above to create a loop.
DOWN [ @ S_MSG_1 ] [ M0 | M2 | ¥ ] -> message Ignore the INPUT for now, and just send the following 4 numbers to the OUTPUT: 2 7 0 3.
DOWN [ @ S_MSG_2 ] [ M0 | M2 | ¥ ] -> message You got a new command! If only there were a way to copy from those numbers on the floor...
DOWN [ @ S_MSG_3 ] [ M0 | M2 | ¥ ] -> [ @ S_IDLE ] [ M0 | M2 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M3 | ¥ ] -> message Grab the first TWO numbers from the INPUT and drop them into the OUTPUT in the reverse order. Repeat until the inbox is empty.
DOWN [ @ S_MSG_2 ] [ M0 | M3 | ¥ ] -> message You got a new command! PST (paste) lets you copy a number TO the floor! Feel free to put them wherever you like.
DOWN [ @ S_MSG_3 ] [ M0 | M3 | ¥ ] -> [ @ S_IDLE ] [ M0 | M3 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M4 | ¥ ] -> message For each TWO numbers in the INPUT, add them together, and put the result in the OUTPUT.
DOWN [ @ S_MSG_2 ] [ M0 | M4 | ¥ ] -> message You got a new command! It ADDs a number on the floor to whatever number you're currently holding.
DOWN [ @ S_MSG_3 ] [ M0 | M4 | ¥ ] -> [ @ S_IDLE ] [ M0 | M4 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M5 | ¥ ] -> message Send all numbers that ARE NOT ZERO to the OUTPUT.
DOWN [ @ S_MSG_2 ] [ M0 | M5 | ¥ ] -> message You got a new command! JPZ jumps ONLY if you are holding a ZERO. Otherwise, it continues to the next line.
DOWN [ @ S_MSG_3 ] [ M0 | M5 | ¥ ] -> [ @ S_IDLE ] [ M0 | M5 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M6 | ¥ ] -> message Send only ZEROs to the OUTPUT.
DOWN [ @ S_MSG_2 ] [ M0 | M6 | ¥ ] -> [ @ S_IDLE ] [ M0 | M6 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M7 | ¥ ] -> message For each TWO numbers in the INPUT, subtract the 1st from the 2nd and put the result in the OUTPUT. AND THEN, subtract the 2nd from the 1st and OUTPUT that result too. Repeat.
DOWN [ @ S_MSG_2 ] [ M0 | M7 | ¥ ] -> message You got a new command! It SUBtracts a number on the floor from whatever number you're currently holding.
DOWN [ @ S_MSG_3 ] [ M0 | M7 | ¥ ] -> [ @ S_IDLE ] [ M0 | M7 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M8 | ¥ ] -> message Get TWO numbers from the INPUT. If they are EQUAL, put ONE of them in the OUTPUT. Discard non-equal pairs. Repeat!
DOWN [ @ S_MSG_3 ] [ M0 | M8 | ¥ ] -> [ @ S_IDLE ] [ M0 | M8 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M0 | M9 | ¥ ] -> message Grab TWO numbers from the INPUT, and put only the BIGGER of the two in the OUTPUT. If they are equal, just pick either one. Repeat!
DOWN [ @ S_MSG_2 ] [ M0 | M9 | ¥ ] -> message You got a new command! JPN jumps ONLY if you are holding a negative (red) number (less than zero.) Otherwise, it continues to the next line.
DOWN [ @ S_MSG_3 ] [ M0 | M9 | ¥ ] -> [ @ S_IDLE ] [ M0 | M9 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M1 | M0 | ¥ ] -> message Send each number from the INPUT to the OUTPUT. BUT, if a number is negative (red), make it positive (green) first.
DOWN [ @ S_MSG_2 ] [ M1 | M0 | ¥ ] -> [ @ S_IDLE ] [ M1 | M0 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M1 | M1 | ¥ ] -> message For each number in the INPUT, OUTPUT that number, followed by all numbers down to (or up to) zero. It's a countdown!
DOWN [ @ S_MSG_2 ] [ M1 | M1 | ¥ ] -> message You got new commands! They either INCrement or DECrement a number on the floor by ONE. The result is given to you, and also written back to the floor!
DOWN [ @ S_MSG_3 ] [ M1 | M1 | ¥ ] -> [ @ S_IDLE ] [ M1 | M1 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M1 | M2 | ¥ ] -> message The INPUT is filled with zero-terminated strings! What's that? Ask me. Your boss.
DOWN [ @ S_MSG_2 ] [ M1 | M2 | ¥ ] -> message Add together all the numbers in each string. When you reach its end (marked by a ZERO), put the sum in the OUTPUT. Repeat for each string.
DOWN [ @ S_MSG_3 ] [ M1 | M2 | ¥ ] -> message A string is just a list of values, like 1 2 3 4 5, or 4 9 2. How do we know when one ends and another begins? We mark the end with something special, like a ZERO!
DOWN [ @ S_MSG_1 ] [ M1 | M3 | ¥ ] -> message For each number in the INPUT, OUTPUT the sum of itself PLUS all numbers down to zero.
DOWN [ @ S_MSG_2 ] [ M1 | M3 | ¥ ] -> message For example, if the INPUT is 3, the OUTPUT should be 6, because 3+2+1 = 6.
DOWN [ @ S_MSG_3 ] [ M1 | M3 | ¥ ] -> [ @ S_IDLE ] [ M1 | M3 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M1 | M4 | ¥ ] -> message For each number in the INPUT, TRIPLE it, and OUTPUT the result.
DOWN [ @ S_MSG_2 ] [ M1 | M4 | ¥ ] -> [ @ S_IDLE ] [ M1 | M4 | ¥ ]
DOWN [ @ S_MSG_1 ] [ M1 | M5 | ¥ ] -> message For each number in the INPUT, multiply it by 8, and OUTPUT the result.
DOWN [ @ S_MSG_2 ] [ M1 | M5 | ¥ ] -> message Using a bunch of ADD commands would be easy, but WASTEFUL! Do it using only 3 ADD commands. Management is watching!
DOWN [ @ S_MSG_3 ] [ M1 | M5 | ¥ ] -> [ @ S_IDLE ] [ M1 | M5 | ¥ ]
[ @ S_MSG_3 ] -> [ @ S_IDLE ]
[ @ S_MSG_2 ] -> [ @ S_MSG_3 ]
[ @ S_MSG_1 ] -> [ @ S_MSG_2 ]
( Moving into the top border enters CHANGE mode )
[ UP @ S_IDLE ] [ CURSOR | CODE_PANEL_B ] -> [ @ S_CHANGE_START ] [ CURSOR | CODE_PANEL_B ]
( Moving into and out of the control panel )
LEFT [ LEFT @ S_IDLE ] [ CURSOR | PANEL_M | BTN ] -> [ @ S_IDLE ] [ | PANEL_M | CURSOR BTN ] checkpoint
RIGHT [ RIGHT @ S_IDLE + ] [ CURSOR | PANEL_M | ] -> [ @ S_IDLE + ] [ CURSOR | PANEL_M | ]
RIGHT [ RIGHT @ S_IDLE ] [ CURSOR | PANEL_M | ] -> [ @ S_IDLE ] [ | PANEL_M | CURSOR ] checkpoint
( 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 ]
LEFT [ S_IDLE ] [ LEFT CURSOR | CTRL_PANEL_L ] -> [ S_IDLE ] [ CURSOR | CTRL_PANEL_L ]
UP [ S_IDLE ] [ UP CURSOR | CTRL_PANEL_T ] -> [ S_IDLE ] [ CURSOR | CTRL_PANEL_T ]
DOWN [ S_IDLE ] [ DOWN CURSOR | CTRL_PANEL_B ] -> [ S_IDLE ] [ CURSOR | CTRL_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 OP_IN ] [ ç ] [ ² ] -> [ @ S_IDLE ] [ OP_IN ] [ ç CURSOR ] [ ² INC ] checkpoint
[ ACTION @ S_EDIT ] [ CURSOR OP_OUT ] [ ç ] [ ² ] -> [ @ S_IDLE ] [ OP_OUT ] [ ç CURSOR ] [ ² INC ] checkpoint
( 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 ]
( Handle swapping code lines on vertical movement )
UP [ UP @ S_EDIT ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_EDIT ] [ UP CURSOR OPCODE + | OP_OTHER - ]
DOWN [ DOWN @ S_EDIT ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_EDIT ] [ DOWN CURSOR OPCODE - | OP_OTHER + ]
( 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 ] checkpoint
( If the cursor is now on an empty line, return to IDLE if program is empty, otherwise move up )
LATE [ S_CHANGE ] [ CURSOR NO CODE_CUR_TGT ] [ ² | M0 ] [ ç ] -> [ S_IDLE ] [ ] [ ² | M0 ] [ ç CURSOR ] checkpoint
LATE UP [ S_CHANGE ] [ CURSOR NO CODE_CUR_TGT | ] -> [ S_CHANGE ] [ | 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 - ]
DOWN [ DOWN @ S_CHANGE_MOVING ] [ CURSOR OPCODE | OP_OTHER ] -> [ @ S_CHANGE_MOVING ] [ DOWN CURSOR OPCODE - | OP_OTHER + ]
( 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 ]
RIGHT [ LEFT @ S_CHANGE_MOVING ] [ CURSOR OPCODE | OP_PART | OP_PART || OP_DATA MARK NUM ] [ ² ] -> [ @ S_CHANGE ] [ CURSOR |||| ] [ ² DEC ]
( 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 ] checkpoint
DOWN [ ACTION @ S_MEM_SEL_CH ] [ CURSOR | \ NUM ] [ æ ] -> [ @ S_CHANGE ] [ | \ NUM ] [ CURSOR NUM ] checkpoint
( Cursor movement )
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M0 ] [ MEM_SLOT M1 ] -> [ @ S_MEM_SEL_X ] [ M0 ] [ CURSOR MEM_SLOT M1 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M1 ] [ MEM_SLOT M2 ] -> [ @ S_MEM_SEL_X ] [ M1 ] [ CURSOR MEM_SLOT M2 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M2 ] [ MEM_SLOT M3 ] -> [ @ S_MEM_SEL_X ] [ M2 ] [ CURSOR MEM_SLOT M3 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M3 ] [ MEM_SLOT M4 ] -> [ @ S_MEM_SEL_X ] [ M3 ] [ CURSOR MEM_SLOT M4 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M5 ] [ MEM_SLOT M6 ] -> [ @ S_MEM_SEL_X ] [ M5 ] [ CURSOR MEM_SLOT M6 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M6 ] [ MEM_SLOT M7 ] -> [ @ S_MEM_SEL_X ] [ M6 ] [ CURSOR MEM_SLOT M7 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M7 ] [ MEM_SLOT M8 ] -> [ @ S_MEM_SEL_X ] [ M7 ] [ CURSOR MEM_SLOT M8 ]
[ RIGHT @ S_MEM_SEL_X ] [ CURSOR M8 ] [ MEM_SLOT M9 ] -> [ @ S_MEM_SEL_X ] [ M8 ] [ CURSOR MEM_SLOT M9 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M1 ] [ MEM_SLOT M0 ] -> [ @ S_MEM_SEL_X ] [ M1 ] [ CURSOR MEM_SLOT M0 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M2 ] [ MEM_SLOT M1 ] -> [ @ S_MEM_SEL_X ] [ M2 ] [ CURSOR MEM_SLOT M1 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M3 ] [ MEM_SLOT M2 ] -> [ @ S_MEM_SEL_X ] [ M3 ] [ CURSOR MEM_SLOT M2 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M4 ] [ MEM_SLOT M3 ] -> [ @ S_MEM_SEL_X ] [ M4 ] [ CURSOR MEM_SLOT M3 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M6 ] [ MEM_SLOT M5 ] -> [ @ S_MEM_SEL_X ] [ M6 ] [ CURSOR MEM_SLOT M5 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M7 ] [ MEM_SLOT M6 ] -> [ @ S_MEM_SEL_X ] [ M7 ] [ CURSOR MEM_SLOT M6 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M8 ] [ MEM_SLOT M7 ] -> [ @ S_MEM_SEL_X ] [ M8 ] [ CURSOR MEM_SLOT M7 ]
[ LEFT @ S_MEM_SEL_X ] [ CURSOR M9 ] [ MEM_SLOT M8 ] -> [ @ S_MEM_SEL_X ] [ M9 ] [ CURSOR MEM_SLOT M8 ]
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 ] checkpoint
[ ACTION @ S_LINE_SEL_CH ] [ CURSOR | ... | ; | NUM ] [ æ ] -> [ @ S_CHANGE ] [ | ... | ; | NUM ] [ CURSOR NUM ] checkpoint
( 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 @ ] -> [ @ ]
( 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 ]
( "Animate" player sprite )
LATE RIGHT [ PLAYER_HELD_L ] [ PLAYER_HELD_R ] -> [ ] [ ]
LATE RIGHT [ ? NO NUM ] [ PLAYER_HELD_TL ] [ PLAYER_HELD_TR ] [ PLAYER_HELD_BL ] [ PLAYER_HELD_BR ] -> [ ? ] [ PLAYER_TL ] [ PLAYER_TR ] [ PLAYER_BL ] [ PLAYER_BR ]
LATE RIGHT [ ? NUM ] [ PLAYER_TL ] [ PLAYER_TR ] [ PLAYER_BL ] [ PLAYER_BR ] -> [ ? NUM ] [ PLAYER_HELD_TL ] [ PLAYER_HELD_TR ] [ PLAYER_HELD_BL ] [ PLAYER_HELD_BR ]
LATE RIGHT [ NO PLAYER_SPR_DECO | ? NUM | ] -> [ PLAYER_HELD_L | ? NUM | PLAYER_HELD_R ]
( Update cursor decoration depending on state )
LATE [ CUR_DECO ] -> [ ]
LATE [ S_PLAY_X ] [ CURSOR ] -> [ S_PLAY_X ] [ CURSOR CUR_WHITE ]
LATE [ S_HALT ] [ CURSOR ] -> [ S_HALT ] [ CURSOR CUR_WHITE ]
LATE [ S_IDLE ] [ CURSOR ] -> [ S_IDLE ] [ CURSOR CUR_WHITE ]
LATE [ S_EDIT ] [ CURSOR ] -> [ S_EDIT ] [ CURSOR CUR_BIG_YELLOW_L ]
LATE [ S_CHANGE ] [ CURSOR ] -> [ S_CHANGE ] [ CURSOR CUR_BIG_WHITE_L ]
LATE [ S_CHANGE ] [ CURSOR NO OPCODE ] -> [ S_CHANGE ] [ CURSOR CUR_WHITE ]
LATE [ S_CHANGE_MOVING ] [ CURSOR ] -> [ S_CHANGE_MOVING ] [ CURSOR CUR_BIG_YELLOW_L ]
LATE [ S_MEM_SEL_X ] [ CURSOR ] -> [ S_MEM_SEL_X ] [ CURSOR CUR_WHITE ]
LATE [ S_LINE_SEL_X ] [ CURSOR ] -> [ S_LINE_SEL_X ] [ CURSOR CUR_JUMP ]
LATE RIGHT [ CUR_BIG_WHITE_L || ] -> [ CUR_BIG_WHITE_L || CUR_BIG_WHITE_R ]
LATE RIGHT [ CUR_BIG_YELLOW_L || ] -> [ CUR_BIG_YELLOW_L || CUR_BIG_YELLOW_R ]
( Highlight opcode targets )
LATE RIGHT [ S_HL_PARAMS ] [ CURSOR OPS_HELD ] [ ? ] -> [ S_HL_PARAMS ] [ CURSOR OPS_HELD ] [ ? CUR_RED ]
LATE RIGHT [ S_HL_PARAMS ] [ OPS_HELD |||| CURSOR ] [ ? ] -> [ S_HL_PARAMS ] [ OPS_HELD |||| CURSOR ] [ ? CUR_RED ]
LATE RIGHT [ S_HL_PARAMS ] [ CURSOR OP_IN ] [ = | ] -> [ S_HL_PARAMS ] [ CURSOR OP_IN ] [ = | CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N0 ] [ ¡ M0 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N0 ] [ ¡ M0 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N1 ] [ ¡ M1 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N1 ] [ ¡ M1 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N2 ] [ ¡ M2 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N2 ] [ ¡ M2 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N3 ] [ ¡ M3 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N3 ] [ ¡ M3 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N4 ] [ ¡ M4 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N4 ] [ ¡ M4 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N5 ] [ ¡ M5 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N5 ] [ ¡ M5 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N6 ] [ ¡ M6 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N6 ] [ ¡ M6 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N7 ] [ ¡ M7 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N7 ] [ ¡ M7 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N8 ] [ ¡ M8 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N8 ] [ ¡ M8 CUR_RED ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N9 ] [ ¡ M9 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_MEM |||| N9 ] [ ¡ M9 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N0 ] [ ¡ M0 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N0 ] [ ¡ M0 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N1 ] [ ¡ M1 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N1 ] [ ¡ M1 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N2 ] [ ¡ M2 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N2 ] [ ¡ M2 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N3 ] [ ¡ M3 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N3 ] [ ¡ M3 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N4 ] [ ¡ M4 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N4 ] [ ¡ M4 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N5 ] [ ¡ M5 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N5 ] [ ¡ M5 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N6 ] [ ¡ M6 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N6 ] [ ¡ M6 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N7 ] [ ¡ M7 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N7 ] [ ¡ M7 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N8 ] [ ¡ M8 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N8 ] [ ¡ M8 CUR_RED ]
LATE [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N9 ] [ ¡ M9 ] -> [ S_HL_PARAMS ] [ OPS_MEM |||| CURSOR N9 ] [ ¡ M9 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N0 ] [ ¡ M0 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N0 ] [ ¡ M0 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N1 ] [ ¡ M1 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N1 ] [ ¡ M1 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N2 ] [ ¡ M2 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N2 ] [ ¡ M2 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N3 ] [ ¡ M3 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N3 ] [ ¡ M3 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N4 ] [ ¡ M4 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N4 ] [ ¡ M4 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N5 ] [ ¡ M5 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N5 ] [ ¡ M5 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N6 ] [ ¡ M6 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N6 ] [ ¡ M6 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N7 ] [ ¡ M7 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N7 ] [ ¡ M7 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N8 ] [ ¡ M8 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N8 ] [ ¡ M8 CUR_RED ]
LATE [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N9 ] [ ¡ M9 ] -> [ S_HL_PARAMS ] [ PC | OPS_MEM |||| N9 ] [ ¡ M9 CUR_RED ]
LATE [ PC_HL ] -> [ ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N0 ] [ |||||| ; | N0 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N0 ] [ PC_HL |||||| ; | N0 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N1 ] [ |||||| ; | N1 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N1 ] [ PC_HL |||||| ; | N1 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N2 ] [ |||||| ; | N2 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N2 ] [ PC_HL |||||| ; | N2 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N3 ] [ |||||| ; | N3 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N3 ] [ PC_HL |||||| ; | N3 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N4 ] [ |||||| ; | N4 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N4 ] [ PC_HL |||||| ; | N4 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N5 ] [ |||||| ; | N5 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N5 ] [ PC_HL |||||| ; | N5 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N6 ] [ |||||| ; | N6 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N6 ] [ PC_HL |||||| ; | N6 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N7 ] [ |||||| ; | N7 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N7 ] [ PC_HL |||||| ; | N7 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N8 ] [ |||||| ; | N8 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N8 ] [ PC_HL |||||| ; | N8 ]
LATE [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N9 ] [ |||||| ; | N9 ] -> [ S_HL_PARAMS ] [ CURSOR OPS_JMP |||| N9 ] [ PC_HL |||||| ; | N9 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N0 ] [ |||||| ; | N0 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N0 ] [ PC_HL |||||| ; | N0 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N1 ] [ |||||| ; | N1 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N1 ] [ PC_HL |||||| ; | N1 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N2 ] [ |||||| ; | N2 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N2 ] [ PC_HL |||||| ; | N2 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N3 ] [ |||||| ; | N3 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N3 ] [ PC_HL |||||| ; | N3 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N4 ] [ |||||| ; | N4 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N4 ] [ PC_HL |||||| ; | N4 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N5 ] [ |||||| ; | N5 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N5 ] [ PC_HL |||||| ; | N5 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N6 ] [ |||||| ; | N6 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N6 ] [ PC_HL |||||| ; | N6 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N7 ] [ |||||| ; | N7 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N7 ] [ PC_HL |||||| ; | N7 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N8 ] [ |||||| ; | N8 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N8 ] [ PC_HL |||||| ; | N8 ]
LATE [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N9 ] [ |||||| ; | N9 ] -> [ S_HL_PARAMS ] [ OPS_JMP |||| CURSOR N9 ] [ PC_HL |||||| ; | N9 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N0 ] [ |||||| ; | N0 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N0 ] [ PC_HL |||||| ; | N0 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N1 ] [ |||||| ; | N1 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N1 ] [ PC_HL |||||| ; | N1 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N2 ] [ |||||| ; | N2 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N2 ] [ PC_HL |||||| ; | N2 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N3 ] [ |||||| ; | N3 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N3 ] [ PC_HL |||||| ; | N3 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N4 ] [ |||||| ; | N4 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N4 ] [ PC_HL |||||| ; | N4 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N5 ] [ |||||| ; | N5 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N5 ] [ PC_HL |||||| ; | N5 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N6 ] [ |||||| ; | N6 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N6 ] [ PC_HL |||||| ; | N6 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N7 ] [ |||||| ; | N7 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N7 ] [ PC_HL |||||| ; | N7 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N8 ] [ |||||| ; | N8 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N8 ] [ PC_HL |||||| ; | N8 ]
LATE [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N9 ] [ |||||| ; | N9 ] -> [ S_HL_PARAMS ] [ PC | OPS_JMP |||| N9 ] [ PC_HL |||||| ; | N9 ]
( "Press left to delete" reminder )
LATE [ DEL_MARK ] -> [ ]
LATE RIGHT [ S_EDIT ] [ || CURSOR ] -> [ S_EDIT ] [ DEL_MARK_L | DEL_MARK_C | CURSOR ]
LATE RIGHT [ S_CHANGE_MOVING ] [ || CURSOR ] -> [ S_CHANGE_MOVING ] [ DEL_MARK_L | DEL_MARK_C | CURSOR ]
LATE DOWN [ | DEL_MARK_C ] -> [ DEL_MARK_T | DEL_MARK_C ]
LATE DOWN [ DEL_MARK_C | ] -> [ DEL_MARK_C | DEL_MARK_B ]
LATE DOWN [ | DEL_MARK_L ] -> [ DEL_MARK_TL | DEL_MARK_L ]
LATE DOWN [ DEL_MARK_L | ] -> [ DEL_MARK_L | DEL_MARK_BL ]
( Cursor tooltip )
LATE RIGHT [ CURSOR NO BTN ] [ FONT ] -> [ CURSOR ] [ ]
LATE RIGHT [ CURSOR BTN_PLAY ] [ | ó || ] -> [ CURSOR BTN_PLAY ] [ _P | _L ó | _A | _Y ]
( LATE RIGHT [ CURSOR BTN_PAUSE ] [ || ó || ] -> [ CURSOR BTN_PAUSE ] [ _P | _A | _U ó | _S | _E ] )
LATE RIGHT [ CURSOR BTN_STOP ] [ | ó || ] -> [ CURSOR BTN_STOP ] [ _S | _T ó | _O | _P ]
LATE RIGHT [ CURSOR BTN_STEP ] [ | ó || ] -> [ CURSOR BTN_STEP ] [ _S | _T ó | _E | _P ]
LATE RIGHT [ CURSOR BTN_HELP ] [ | ó || ] -> [ CURSOR BTN_HELP ] [ _H | _E ó | _L | _P ]
(( 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_ADD ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_ADD ] [ ICON_ANCHOR OP_ADD | OP_ADD_1 | OP_ADD_2 ]
LATE RIGHT [ CURSOR ICON_SUB ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_SUB ] [ ICON_ANCHOR OP_SUB | OP_SUB_1 | OP_SUB_2 ]
LATE RIGHT [ CURSOR ICON_INC ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_INC ] [ ICON_ANCHOR OP_INC | OP_INC_1 | OP_INC_2 ]
LATE RIGHT [ CURSOR ICON_DEC ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_DEC ] [ ICON_ANCHOR OP_DEC | OP_DEC_1 | OP_DEC_2 ]
LATE RIGHT [ CURSOR ICON_JMP ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_JMP ] [ ICON_ANCHOR OP_JMP | OP_JMP_1 | OP_JMP_2 ]
LATE RIGHT [ CURSOR ICON_JPZ ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_JPZ ] [ ICON_ANCHOR OP_JPZ | OP_JPZ_1 | OP_JPZ_2 ]
LATE RIGHT [ CURSOR ICON_JPN ] [ ICON_ANCHOR || ] -> [ CURSOR ICON_JPN ] [ ICON_ANCHOR OP_JPN | OP_JPN_1 | OP_JPN_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 ||| NO MARK NUM ] -> [ OPS_JMP ||| MARK_BLUE NUM ]
RIGHT [ OPS_JMP ||| | NO MARK NUM ] -> [ OPS_JMP ||| | MARK_BLUE NUM ]
RIGHT [ OPS_MATH ||| NO MARK NUM ] -> [ OPS_MATH ||| MARK_ORANGE NUM ]
RIGHT [ OPS_MATH ||| | NO MARK NUM ] -> [ OPS_MATH ||| | MARK_ORANGE NUM ]
RIGHT [ OPS_MEM ||| NO MARK NUM ] -> [ OPS_MEM ||| MARK_RED NUM ]
RIGHT [ OPS_MEM ||| | NO MARK NUM ] -> [ OPS_MEM ||| | MARK_RED NUM ]
(( Run the opcode pointed at by the Program Counter ))
( IN )
( HALT: Can't IN with no numbers in input queue )
RIGHT ['][ @ S_PLAY ] [ # | OP_IN ] [ = | NO NUM ] -> ['][ @ S_HALT ] [ # | OP_IN ] [ = | ERROR ] Message INPUT is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OP_IN ] [ = | SIGN NUM ] [ ? ] -> ['][ @ S_PLAY ] [ # | OP_IN ] [ = | ] [ ? SIGN NUM ]
( OUT )
( HALT: Can't OUT, PST, ADD, SUB, JPZ or JPN without holding a number )
RIGHT ['][ @ S_PLAY ] [ # | OPS_HELD ] [ ? NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_HELD ] [ ? ERROR ] Message Your hand is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OP_OUT ] [ ? SIGN NUM ] [ ¥ ] -> ['][ @ S_PLAY ] [ # | OP_OUT ] [ ? ] [ ¥ SIGN NUM ]
( CPY )
( HALT: Can't CPY, ADD, SUB, INC or DEC with an empty mem slot )
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N0 ] [ ¡ M0 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N0 ] [ ¡ M0 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N1 ] [ ¡ M1 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N1 ] [ ¡ M1 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N2 ] [ ¡ M2 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N2 ] [ ¡ M2 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N3 ] [ ¡ M3 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N3 ] [ ¡ M3 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N4 ] [ ¡ M4 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N4 ] [ ¡ M4 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N5 ] [ ¡ M5 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N5 ] [ ¡ M5 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N6 ] [ ¡ M6 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N6 ] [ ¡ M6 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N7 ] [ ¡ M7 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N7 ] [ ¡ M7 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N8 ] [ ¡ M8 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N8 ] [ ¡ M8 ERROR ] Message The specified floor tile is empty! :(
RIGHT ['][ @ S_PLAY ] [ # | OPS_MEM NO OP_PST |||| N9 ] [ ¡ M9 NO NUM ] -> ['][ @ S_HALT ] [ # | OPS_MEM |||| N9 ] [ ¡ M9 ERROR ] Message The specified floor tile is empty! :(
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 )
( HALT: Can't PST without holding a number )
RIGHT ['][ @ S_PLAY ] [ # | OP_PST ] [ ? NO NUM ] -> ['][ @ S_HALT ] [ # | OP_PST ] [ ? ERROR ] Message Your hand is empty! :(
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 ]
( ADD )
RIGHT ['][ @ S_PLAY ] [ # | OP_ADD ] [ + | ] -> ['][ @ S_PLAY ] [ # | OP_ADD ] [ + | + ]
( SUB )
RIGHT ['][ @ S_PLAY ] [ # | OP_SUB ] [ + | ] -> ['][ @ S_PLAY ] [ # | OP_SUB ] [ + | - ]
( INC )
RIGHT ['][ @ S_PLAY ] [ # | OP_INC |||| N0 ] [ + | ] [ ² || ] -> ['][ @ S_PLAY ] [ # | OP_INC |||| N0 ] [ + | + ] [ ² || + M0 ]
RIGHT ['][ @ S_PLAY ] [ # | OP_INC |||| N1 ] [ + | ] [ ² || ] -> ['][ @ S_PLAY ] [ # | OP_INC |||| N1 ] [ + | + ] [ ² || + M1 ]
( ... )
( DEC )
RIGHT ['][ @ S_PLAY ] [ # | OP_DEC |||| N0 ] [ + | ] [ ² || ] -> ['][ @ S_PLAY ] [ # | OP_DEC |||| N0 ] [ + | + ] [ ² || + M0 ]
RIGHT ['][ @ S_PLAY ] [ # | OP_DEC |||| N1 ] [ + | ] [ ² || ] -> ['][ @ S_PLAY ] [ # | OP_DEC |||| N1 ] [ + | + ] [ ² || + M1 ]
( ... )
( Get operands for math operation )
RIGHT ['][ @ S_PLAY ] [ # | OP_INC ] [ - | ] -> ['][ @ S_PLAY ] [ # | OP_INC ] [ - | POS M1 ]
RIGHT ['][ @ S_PLAY ] [ # | OP_DEC ] [ - | ] -> ['][ @ S_PLAY ] [ # | OP_DEC ] [ - | NEG M1 ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH NO OP_INC NO OP_DEC ] [ ? SIGN NUM ] [ - | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH ] [ ? SIGN NUM ] [ - | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N0 ] [ ¡ M0 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N0 ] [ ¡ M0 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N1 ] [ ¡ M1 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N1 ] [ ¡ M1 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N2 ] [ ¡ M2 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N2 ] [ ¡ M2 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N3 ] [ ¡ M3 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N3 ] [ ¡ M3 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N4 ] [ ¡ M4 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N4 ] [ ¡ M4 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N5 ] [ ¡ M5 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N5 ] [ ¡ M5 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N6 ] [ ¡ M6 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N6 ] [ ¡ M6 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N6 ] [ ¡ M7 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N7 ] [ ¡ M7 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N7 ] [ ¡ M8 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N8 ] [ ¡ M8 SIGN NUM ] [ ä | SIGN NUM ]
RIGHT ['][ @ S_PLAY ] [ # | OPS_MATH |||| N8 ] [ ¡ M9 SIGN NUM ] [ ä | ] -> ['][ @ S_PLAY ] [ # | OPS_MATH |||| N9 ] [ ¡ M9 SIGN NUM ] [ ä | SIGN NUM ]
( JMP )
( Always jump )
RIGHT ['][ @ S_PLAY ] [ # | OP_JMP ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JMP ]
( JPZ )
( Only jump if holding a zero )
RIGHT ['][ @ S_PLAY ] [ # | OP_JPZ ] [ ? N0 ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JPZ ] [ ? N0 ]
( JPZ )
( Only jump if holding a negative number )
RIGHT ['][ @ S_PLAY ] [ # | OP_JPN ] [ ? NEG ] -> ['][ @ S_PLAY_WAIT ] [ # | OP_JPN ] [ ? NEG ]
( HALT: Can't jump to itself )
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N0 | ; | N0 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N0 ERROR | ; | N0 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N1 | ; | N1 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N1 ERROR | ; | N1 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N2 | ; | N2 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N2 ERROR | ; | N2 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N3 | ; | N3 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N3 ERROR | ; | N3 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N4 | ; | N4 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N4 ERROR | ; | N4 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N5 | ; | N5 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N5 ERROR | ; | N5 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N6 | ; | N6 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N6 ERROR | ; | N6 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N7 | ; | N7 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N7 ERROR | ; | N7 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N8 | ; | N8 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N8 ERROR | ; | N8 ] Message Infinite jump detected! :(
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N9 | ; | N9 ] -> ['][ @ S_HALT ] [ PC_ERR | OPS_JMP |||| N9 ERROR | ; | N9 ] Message Infinite jump detected! :(
( Resolve jump )
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N0 ] [ |||||| ; | N0 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N0 ] [ ® |||||| ; | N0 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N1 ] [ |||||| ; | N1 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N1 ] [ ® |||||| ; | N1 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N2 ] [ |||||| ; | N2 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N2 ] [ ® |||||| ; | N2 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N3 ] [ |||||| ; | N3 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N3 ] [ ® |||||| ; | N3 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N4 ] [ |||||| ; | N4 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N4 ] [ ® |||||| ; | N4 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N5 ] [ |||||| ; | N5 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N5 ] [ ® |||||| ; | N5 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N6 ] [ |||||| ; | N6 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N6 ] [ ® |||||| ; | N6 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N7 ] [ |||||| ; | N7 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N7 ] [ ® |||||| ; | N7 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N8 ] [ |||||| ; | N8 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N8 ] [ ® |||||| ; | N8 ]
RIGHT ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N9 ] [ |||||| ; | N9 ] -> ['][ @ S_PLAY_WAIT ] [ # | OPS_JMP |||| N9 ] [ ® |||||| ; | N9 ]
(( Perform math operations ))
( Convert from N to M )
RIGHT [ MATH | N0 ] -> [ MATH | M0 ]
RIGHT [ MATH | N1 ] -> [ MATH | M1 ]
RIGHT [ MATH | N2 ] -> [ MATH | M2 ]
RIGHT [ MATH | N3 ] -> [ MATH | M3 ]
RIGHT [ MATH | N4 ] -> [ MATH | M4 ]
RIGHT [ MATH | N5 ] -> [ MATH | M5 ]
RIGHT [ MATH | N6 ] -> [ MATH | M6 ]
RIGHT [ MATH | N7 ] -> [ MATH | M7 ]
RIGHT [ MATH | N8 ] -> [ MATH | M8 ]
RIGHT [ MATH | N9 ] -> [ MATH | M9 ]
(
- 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 )
( HALT: Integer overflow )
RIGHT [ S_PLAY ] [ + | POS ABOVE_0 ] [ ß | POS M9 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_1 ] [ ß | POS M8 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_2 ] [ ß | POS M7 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_3 ] [ ß | POS M6 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_4 ] [ ß | POS M5 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_5 ] [ ß | POS M4 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_6 ] [ ß | POS M3 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS ABOVE_7 ] [ ß | POS M2 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
RIGHT [ S_PLAY ] [ + | POS M9 ] [ ß | POS M1 ] -> [ S_HALT ] [ + | ] [ ß | ] Message Result is outside of 0-9 range :(
( Calculate )
RIGHT [ + | SIGN M ] [ ß | M0 ] -> [ + | SIGN M ] [ ß | NO SIGN ]
RIGHT [ + | M0 ] [ ß | SIGN M ] -> [ + | SIGN M ] [ ß | NO SIGN ]
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 ] [ ä | ]
( Convert the result from M to N )
RIGHT [ + | M0 ] -> [ + | N0 ]
RIGHT [ + | M1 ] -> [ + | N1 ]
RIGHT [ + | M2 ] -> [ + | N2 ]
RIGHT [ + | M3 ] -> [ + | N3 ]
RIGHT [ + | M4 ] -> [ + | N4 ]
RIGHT [ + | M5 ] -> [ + | N5 ]
RIGHT [ + | M6 ] -> [ + | N6 ]
RIGHT [ + | M7 ] -> [ + | N7 ]
RIGHT [ + | M8 ] -> [ + | N8 ]
RIGHT [ + | M9 ] -> [ + | N9 ]
( Write the result to memory if necessary )
RIGHT [ + | SIGN NUM ] [ ² || + M0 ] [ ¡ M0 ] -> [ + | SIGN NUM ] [ ² || ] [ ¡ M0 SIGN NUM ]
RIGHT [ + | SIGN NUM ] [ ² || + M1 ] [ ¡ M1 ] -> [ + | SIGN NUM ] [ ² || ] [ ¡ M1 SIGN NUM ]
( ... )
( Then, place it in the player's hand )
RIGHT [ + | SIGN NUM ] [ ? ] -> [ + | ] [ ? SIGN NUM ]
( Move up the numbers in input queue )
UP [ BELT SIGN NUM | BELT_MID NO NUM ] -> [ BELT | BELT_MID SIGN NUM ]
( HALT: Output is already full )
DOWN [ S_PLAY ] [ O | , ] [ ¥ SIGN NUM | ] [ ? ] -> [ S_HALT ] [ O | , ] [ ¥ | ERROR ] [ ? SIGN NUM ] message Too many numbers in output! :(
( 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 ]
( Check for win conditions )
( We do that instead of calling `win` directly so that we can wait for interaction on a win screen )
( 00 Mail Room )
LATE DOWN [ STATE NO S_DONE ] [ M0 | M0 | ¥ | O9 | O7 | O3 ] -> [ S_DONE ] [ || ¥ ||| ] sfx0 message Nicely done! (After you close this message, press anything again to continue.)
( 01 Busy Mail Room )
LATE DOWN [ STATE NO S_DONE ] [ M0 | M1 | ¥ | O0 | O9 | O4 | O8 | O2 | O2 ] -> [ S_DONE ] [ || ¥ |||||| ] sfx0 message Nicely done!
( 02 Copy Floor )
LATE DOWN [ STATE NO S_DONE ] [ M0 | M2 | ¥ | O3 | O0 | O7 | O2 ] -> [ S_DONE ] [ || ¥ |||| ] sfx0 message Nicely done!
( Cleanup )
LATE [ S_DONE ] [ BELT SIGN ] -> [ S_DONE ] [ ]
LATE [ S_DONE ] [ PC ] [ CURSOR ] -> [ S_DONE ] [ ] [ ]
LATE [ S_DONE ] [ CUR_DECO ] -> [ S_DONE ] [ ]
LATE [ S_DONE ] [ FONT ] -> [ S_DONE ] [ ]
==============
WINCONDITIONS
==============
NO PLAYER
=======
LEVELS
=======
(
¶ Player, realtime fix, and current UI state
↕ ► ◄ ☼ ♪ Elevator sprites
* Start of code
× Code panels
_ End of code
à è Player sprites/anchors
§ ╚ ‼ ○ Boss sprites/anchors
? Currently held number
; Code line anchor
= Input grabber, anchor for "IN" sprite
$ Start of input belt
¥ Start of output belt, anchor for "OUT" sprite, reference for level ID (vertical)
, End of belt
\ Memory slot
ç ¿ å Anchors for starting cursor position and opcode buttons
ø UI panels
ó Anchor for cursor target tooltip
ü í ö Play/stop, step, and help buttons
- ä Anchors for preprocessed math operands (`-` to the right of an input number makes it negative)
+ ß Anchors for postprocessed math operands
² Program line count, anchor for newly created opcodes
} Reference for level ID (horizontal)
µ Wall generators
)
(
- TODO:
- [x] 00 Mail Room (01)
- [x] 01 Busy Mail Room (02)
- [ ] 02 Copy Floor (03)
- [ ] 03 Scrambler Handler (04)
- [ ] 04 Rainy Summer (06)
- [ ] 05 Zero Exterminator (07)
- [ ] 06 Zero Preservation Initiative
- [ ] 07 Sub Hallway (11)
- [ ] 08 Equalization Room (13)
- [ ] 09 Maximization Room (14)
- [ ] 10 Absolute Positivity (16)
- [ ] 11 Countdown (19)
- [ ] 12 Zero Terminated Sum (21)
- [ ] 13 Cumulative Countdown (25)
- [ ] Implement bonus levels
- [ ] 14 Tripler Room (08)
- [ ] 15 Octoplier Suite (10)
)
(
¶↕......§....*×××××;0
►☼.?....╚.....×××××;1
◄♪.à...‼......×××××;2
...è...○..0...×××××;3
..........0...×××××;4
..,.......¥...×××××;5
.=..0.2.4.....×××××;6
....\1\3\.....×××××;7
.....\.\......×××××;8
...-..........×××××;9
....5.7.9...._.....+.
....\6\8\...ü.çøøøøß.
.....\.\....í¿øøøøø-.
............öåøøóøøä.
µµ.........µµµµµµµµµµ
..$.......,.².....}00
)
message 01/14 | Mail Room
message Welcome to your first day!
message You look like an excellent instruction follower!
message Your first job is the following:
message Add commands into the top-right area to build a program.
message Your program should grab each number from the INput and drop it into the OUTput.
message Remember, you can always click the blue H button to ask for help.
¶↕......§....*×××××;0
►☼.?....╚.....×××××;1
◄♪.à...‼......×××××;2
...è...○..0...×××××;3
..........0...×××××;4
..,.......¥...×××××;5
.=3...........×××××;6
..7...........×××××;7
..9...........×××××;8
...-..........×××××;9
............._.....+.
............ü.çøøøøß.
............í¿øøøøø-.
............öåøøóøøä.
µµ.........µµµµµµµµµµ
..$.......,.².....}00
message 02/14 Busy Mail Room
message Well, looks like you've made it this far.
message Congratulations on your promotion.
message Most people stress out and quit before making it this far.
message Here is your new assignment...
message Grab each number from the INPUT, and drop each one into the OUTPUT.
message You got a new command! You can set JMP's target to jump to different lines within your program.
¶↕......§....*×××××;0
►☼.?....╚.....×××××;1
◄♪.à...‼......×××××;2
...è...○..0...×××××;3
..........1...×××××;4
..,.......¥...×××××;5
.=2...........×××××;6
..2...........×××××;7
..8...........×××××;8
..4-..........×××××;9
..9.........._.....+.
..0.........ü.çøøøøß.
............í¿øøøøø-.
............öåøøóøøä.
µµ.........µµµµµµµµµµ
..$.......,.².....}01
message 03/14 | Copy Floor
message Oh no!
message The INPUT conveyer system is completely broken!
message But that doesn't mean we get to take a break from work.
message Ignore the INPUT for now, and just send the following 4 numbers to the OUTPUT: 2 7 0 3.
message You got a new command! If only there were a way to copy from those numbers on the floor...
¶↕......§....*×××××;0
►☼.?....╚.....×××××;1
◄♪.à...‼......×××××;2
...è...○..0...×××××;3
..........2...×××××;4
..,.......¥...×××××;5
.=..0.2.4.....×××××;6
....\1\3\.....×××××;7
....2\.\......×××××;8
...-...7......×××××;9
....5.7.9...._.....+.
....\6\8\...ü.çøøøøß.
.....\.\0...í¿øøøøø-.
.....3.6....öåøøóøøä.
µµ.........µµµµµµµµµµ
..$.......,.².....}02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment