title PrograMaze
author Adam Gashlin
homepage gashlin.net

again_interval 0.25
key_repeat_interval 0.25

========
OBJECTS
========

ZeroEven
White
.....
.000.
.0.0.
.000.
.....

ZeroOdd
White
.....
000..
0.0..
000..
.....

OneEven
White
.....
..0..
..0..
..0..
.....

OneOdd
White
.....
.0...
.0...
.0...
.....

Background
Black

PlayerDigit
Yellow
.....
.....
.....
.....
00000

PlayerGuyRun
Orange

PlayerGuyRunStart
Orange

PlayerGuyStep
Orange

PlayerGuyPause
Orange

PlayerGuyDisabled
Orange

PCL
Red
00...
0....
.....
0....
00...

PCR
Red
...00
....0
.....
....0
...00

PCStart
Transparent

PCStartRow
Transparent

PCEndRow
Transparent

Shadow
Transparent

Goal
Blue

LetterR
Grey DarkGrey
11111
10011
01111
01111
11111

LetterU
Grey DarkGrey
11111
01101
01101
00011
11111

LetterN
Grey DarkGrey
11111
10011
01101
01101
11111

LetterS
Grey DarkGrey
10001
01111
10011
11101
00011

LetterT
Grey DarkGrey
10111
00011
10111
10111
10111

LetterE
Grey DarkGrey
10011
01101
00011
01111
10011

LetterP
Grey DarkGrey
00111
01011
00111
01111
01111

LeftArrow
Grey DarkGrey
11111
11001
10011
11001
11111

RightArrow
Grey DarkGrey
11111
10011
11001
10011
11111

UpArrow
Grey DarkGrey
11111
11011
10001
10101
11111

DownArrow
Grey DarkGrey
11111
10101
10001
11011
11111

Equal
Grey DarkGrey
11111
10001
11111
10001
11111

ShowZero
Grey DarkGrey
11111
10001
10101
10001
11111

ShowOne
Grey DarkGrey
11111
11011
11011
11011
11111

Wall
DarkGrey

=======
LEGEND
=======

_ = Background
. = ZeroOdd
, = ZeroEven
S = ZeroEven and PCStartRow and PCStart
B = ZeroEven and PCStartRow
E = ZeroOdd and PCEndRow
J = OneEven and PCStartRow
I = OneOdd
R = LetterR
U = LetterU
N = LetterN
L = LeftArrow
T = RightArrow
P = UpArrow
D = DownArrow
0 = ShowZero
1 = ShowOne

Q = Equal

Zero = ZeroOdd or ZeroEven
One = OneOdd or OneEven

C = PlayerDigit and Wall
Player = PlayerDigit or PlayerGuyRun or PlayerGuyPause
RUNLetter = LetterR or LetterU or LetterN
STEPLetter = LetterS or LetterT or LetterE or LetterP
CmdLetter = RUNLetter or STEPLetter
PlayerGuy = PlayerGuyRun or PlayerGuyStep
WinnerGuy = PlayerGuy or PlayerGuyPause

@ = PlayerGuyDisabled and ZeroOdd
* = PlayerGuyDisabled and ZeroEven
G = Goal and ZeroOdd
H = Goal and ZeroEven

# = Wall
2 = LetterS
3 = LetterT
4 = LetterE
5 = LetterP

Z = Wall

=======
SOUNDS
=======

================
COLLISIONLAYERS
================

Background
Goal
Shadow
RUNLetter, STEPLetter, Wall, PlayerGuyRun, PlayerGuyRunStart, PlayerGuyStep, PlayerGuyPause, PlayerGuyDisabled, UpArrow, DownArrow, LeftArrow, RightArrow, Equal, ShowZero, ShowOne
ZeroOdd, ZeroEven, OneOdd, OneEven
PlayerDigit
PCL, PCR
PCStart
PCStartRow, PCEndRow

======
RULES
======

[ PCL ] [ PlayerGuyRunStart ] -> [ PCL ] [ PlayerGuyRun ]
[ moving PlayerGuy ] -> [ PlayerGuyStep ]
[ action PlayerGuyPause ] -> [ PlayerGuyStep ]
[ moving PlayerGuyPause ] -> [ PlayerGuyPause ]

( 00 = left )
[ PCL no Wall ] [ PCR no Wall ] [ PlayerGuy ] -> [ PCL ] [ PCR ] [ left PlayerGuy ]
( 01 = right )
[ PCL no Wall ] [ PCR Wall ] [ PlayerGuy ] -> [ PCL ] [ PCR Wall ] [ right PlayerGuy ]
( 10 = up )
[ PCL Wall ] [ PCR no Wall ] [ PlayerGuy ] -> [ PCL Wall ] [ PCR ] [ up PlayerGuy ]
( 11 = down )
[ PCL Wall ] [ PCR Wall ] [ PlayerGuy ] -> [ PCL Wall ] [ PCR Wall ] [ down PlayerGuy ]

[ PlayerGuyRun ] [ PCL ] -> [ PlayerGuyRun ] [ right PCL ]
[ PlayerGuyStep ] [ PCL ] -> [ PlayerGuyStep ] [ right PCL ]

( advance PC )
right [ right PCL | PCR | | ] -> [ | | PCL | PCR ] again
( CRLF PC )
right [ PCStartRow |  | ... | right PCL | PCR PCEndRow ] -> [ PCStartRow down PCL | PCR | ... | | PCEndRow ]
down [ PCStartRow down PCL | PCStartRow ] [ PCR | ] -> [ PCStartRow | PCStartRow PCL ] [ | PCR ] again
[ moving PCL ] -> [ PCL ]

[ Action PlayerDigit OneOdd ] -> [PlayerDigit ZeroOdd ]
[ Action PlayerDigit OneEven ] -> [ PlayerDigit ZeroEven ]
[ Action PlayerDigit ZeroOdd ] -> [ PlayerDigit OneOdd ]
[ Action PlayerDigit ZeroEven ] -> [ PlayerDigit OneEven ]

(turn to stone)
[ Action PlayerDigit CmdLetter ] [ Zero ] -> [ Action PlayerDigit CmdLetter ] [ ]
[ Action PlayerDigit CmdLetter ] [ One ] -> [ Action PlayerDigit CmdLetter ] [ Wall ]
[ Action PlayerDigit CmdLetter ] [ ShowZero ] -> [ Action PlayerDigit CmdLetter ] [ ]
[ Action PlayerDigit CmdLetter ] [ ShowOne ] -> [ Action PlayerDigit CmdLetter ] [ Wall ]

(run!)
right [ Action PlayerDigit RUNLetter ] [ PCStart | ] [ PlayerGuyDisabled ] -> [ RUNLetter ] [ PCStart PCL | PCR ] [ PlayerGuyRunStart ] again
right [ Action PlayerDigit STEPLetter ] [ PCStart | ] [ PlayerGuyDisabled ] -> [ STEPLetter ] [ PCStart PCL | PCR ] [ PlayerGuyPause ] again

( in case the PlayerGuy gets wiped out by a wall )
[ Action PlayerDigit CmdLetter ] -> [ CmdLetter ]

[ PlayerGuy ] -> [ Shadow PlayerGuy ]

late [ PlayerGuy Shadow ] -> cancel
late [ Shadow ] -> []
late [ PlayerGuyStep ] -> [ PlayerGuyPause ]

==============
WINCONDITIONS
==============

Some WinnerGuy
All WinnerGuy on Goal

=======
LEVELS
=======

message Get the orange block to the blue goal, by moving the yellow cursor to "step" and using Action repeatedly to run the program.
#############
####S.,.,.*E#
####JIH.,.,E#
00QLB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,.,.,E#
####B.,.,.,E#
####B.,.,.,E#
####C#2345###

message You can edit the bits of the program with the cursor and Action.

#############
####S.,.,.,E#
####B.,.,.,E#
00QLB.*.,.,E#
01QTB.,.,.HE#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,.,.,E#
####C#2345###

message "run" will run the program automatically.

####C##RUN###
####S.,.,.*E#
####B.,.,.,E#
00QLB.,.,.,E#
01QTBG,.,.,E#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,.,.,E#
######2345###

####C##RUN###
####SG,.,.,E#
####B.,.,.,E#
00QLB.,.,.,E#
01QTB.,.,.,E#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,.,@,E#
######2345###

####C##RUN###
####S.,@,.,E#
####B.,.,.,E#
00QLB.,.,.,E#
01QTB.,.,.,E#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,G,.,E#
######2345###

####C##RUN###
####S.,.H.,E#
####B.,.,.,E#
00QLB.,.,.,E#
01QTB.,.,.,E#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,.*.,E#
######2345###

message Boss puzzle!

####C##RUN###
####S.,.,.HE#
####B.,.,.,E#
00QLB.,.,.,E#
01QTB.,.,.,E#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B@,.,.,E#
######2345###


message Final phase!

####C##RUN###
####S@,.,.HE#
####B.,.,.,E#
00QLB.,.,.,E#
01QTB.,.,.,E#
10QPB.,.,.,E#
11QDB.,.,.,E#
####B.,.,.,E#
####B.,.,.,E#
######2345###

message Thanks for playing!