title SwapBot Bonus
author John Williams
homepage john.m.dubs@gmail.com
(Please send me an email if you enjoy the game!)

run_rules_on_level_start
norepeat_action
again_interval 0.05

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

Background
Green

TrapDoor
Green Black
00000
01010
00000
01010
00000

HoleNormal
Black

HoleTop
Black #282117
11111
00000
00000
00000
00000

Selected
Yellow
0.0.0
.....
0...0
.....
0.0.0

Collectable
Yellow White
.....
..0..
.000.
..0..
.....

PasteTarget
Black

Door1
Red DarkRed
00000
01010
00000
01010
00000

Door1Down
Red
00000
0...0
0...0
0...0
00000

Door2
Blue DarkBlue
00000
01010
00000
01010
00000

Door2Down
Blue
00000
0...0
0...0
0...0
00000

Door3
Orange Brown
00000
01010
00000
01010
00000

Door3Down
Orange
00000
0...0
0...0
0...0
00000

Key1
Red Grey
.....
.100.
.100.
.100.
.....

Key2
Blue Grey
.....
.100.
.100.
.100.
.....

Key3
Orange Grey
.....
.100.
.100.
.100.
.....

KeyNoneMan
White DarkGrey Yellow
.000.
0.2.0
0...0
10001
.111.

Key1Man
Red DarkRed
.000.
0.0.0
0...0
10001
.111.

Key2Man
Blue DarkBlue
.000.
0.0.0
0...0
10001
.111.

Key3Man
Orange Brown
.000.
0.0.0
0...0
10001
.111.

UpMan
Gray White DarkGrey Yellow
.111.
00.00
00200
20002
.222.

DownMan
Gray White DarkGrey Yellow
.000.
00.00
00200
21112
.222.

LeftMan
Gray White DarkGrey Yellow
.000.
10.00
10200
20002
.222.

RightMan
Gray White DarkGrey Yellow
.000.
00.01
00201
20002
.222.

TeleportMan
Purple
.000.
00000
00000
00000
.000.

TeleportMan2
Purple
.000.
00000
00000
00000
.000.

TeleportMan3
Purple
.000.
00000
00000
00000
.000.

Target
DarkBlue
.....
.000.
.0.0.
.000.
.....

TargetTest
Black

TargetOn
Yellow
.....
.000.
.0.0.
.000.
.....

Magic
Purple Grey DarkGrey
.....
.1.1.
.222.
.000.
.000.

MagicBar
Purple
.....
...0.
..0..
...0.
..0..

MagicReplace
Purple

SwapAnim1
Purple

SwapAnim2
Purple
00000
00000
00.00
00000
00000

SwapAnim3
Purple
00000
00.00
0...0
00.00
00000

SwapAnim4
Purple
00.00
0...0
.....
0...0
00.00

SwapAnim5
Purple
0...0
.....
.....
.....
0...0

TeleportBeamTop
Purple
.....
..0..
.000.
.000.
.000.

TeleportBeam
Purple
.000.
.000.
.000.
.000.
.000.

TeleportBeamBottom
Purple
.000.
.000.
.000.
..0..
.....

InfinitePower
Transparent

TempAnim
Transparent

MagicEnd
Transparent

CastPaste
Black

NoSelected
Black

DidNotMove
Black

WallNormal
DarkGreen Darkblue
00000
00000
00000
00000
00000

WallBottom
DarkGreen Darkblue
00000
00000
00000
00000
11111

One
Darkblue
...0.
..00.
...0.
...0.
..000

Two
Darkblue
.000.
....0
..00.
.0...
.0000

Three
Darkblue
.000.
....0
..000
....0
.000.

Four
Darkblue
.0..0
.0..0
.0000
....0
....0

Five
Darkblue
.0000
.0...
.000.
....0
.000.

Six
Darkblue
..00.
.0...
.000.
.0..0
..00.

Seven
Darkblue
.0000
....0
...0.
..0..
.0...

Eight
Darkblue
..00.
.0..0
..00.
.0..0
..00.

Nine
Darkblue
..00.
.0..0
..000
....0
..00.

Zero
Darkblue
..00.
.0..0
.0..0
.0..0
..00.

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

Wall = WallNormal or WallBottom
BlackBackground = HoleNormal or HoleTop
Hole = BlackBackground

. = Background
# = WallNormal
T = Target
P = DownMan and KeyNoneMan
* = Collectable
M = Magic
E = MagicReplace and HoleNormal
B = HoleNormal
F = TrapDoor

U = InfinitePower and E

Q = Key1
W = Door1

A = Key2
S = Door2

Z = Key3
X = Door3

1 = One and WallNormal
2 = Two and WallNormal
3 = Three and WallNormal
4 = Four and WallNormal
5 = Five and WallNormal
6 = Six and WallNormal
7 = Seven and WallNormal
8 = Eight and WallNormal
9 = Nine and WallNormal
0 = Zero and WallNormal

Player = UpMan or DownMan or LeftMan or RightMan
Man = UpMan or DownMan or LeftMan or RightMan
Block = BlackBackground

KeyMan = Key1Man or Key2Man or Key3Man or KeyNoneMan
Key = Key1 or Key2 or Key3
KeyDoor = Door1 or Door2 or Door3
DoorDown = Door1Down or Door2Down or Door3Down

Numbers = Zero or One or Two or Three or Four or Five or Six or Seven or Eight or Nine

Copyable = Wall or Target or TargetOn or Magic or Player or Collectable or Key or KeyDoor or TrapDoor or Numbers or DoorDown

SwapAnim = SwapAnim1 or SwapAnim2 or SwapAnim3 or SwapAnim4 or SwapAnim5

TeleportAnim = TeleportBeamTop or TeleportBeam or TeleportBeamBottom or TeleportMan or TeleportMan2 or TeleportMan3


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


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

Background
BlackBackground
Target, TargetTest, TargetOn, KeyDoor, DoorDown, Key, Trapdoor
KeyMan
Player, Wall
Magic, Collectable, Numbers
MagicEnd, MagicReplace
MagicBar, InfinitePower
CastPaste
NoSelected, PasteTarget
DidNotMove
Selected
SwapAnim, TeleportAnim, TempAnim

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

(SetupSpellIcons)

[Player] -> [Player DidNotMove]
[MagicReplace] -> [MagicEnd]

(Player Orientation)
[ up Man no UpMan ] -> [ up UpMan ]
[ down Man no DownMan ] -> [ down DownMan ]
[ left Man no LeftMan ] -> [ left LeftMan ]
[ right Man no RightMan ] -> [ right RightMan ]

(Move crates)
[ > Man | Block] -> [Man | Block]

(Door collision)
[ > Man no Key1Man | Door1 ] -> [ Man | Door1]
[ > Man no Key2Man | Door2 ] -> [ Man | Door2]
[ > Man no Key3Man | Door3 ] -> [ Man | Door3]

(Put spell on player based on magic)

up [action UpMan | Selected] -> [UpMan | ]
down [action DownMan | Selected] -> [DownMan | ]
left [action LeftMan | Selected] -> [LeftMan | ]
right [action RightMan | Selected] -> [RightMan | ]

[Man] -> [Man noSelected]
[Selected] [NoSelected] -> [Selected] []

up [action UpMan noSelected|no BlackBackground] -> [UpMan | Selected]
down [action DownMan noSelected|no BlackBackground] -> [DownMan | Selected]
left [action LeftMan noSelected|no BlackBackground] -> [LeftMan | Selected]
right [action RightMan noSelected|no BlackBackground] -> [RightMan | Selected]

[NoSelected] -> []

up [action Man] [InfinitePower] [Selected] -> [Man CastPaste] [InfinitePower] [Selected]
up [action Man] [MagicBar | no MagicBar] [Selected] -> [Man CastPaste] [|] [Selected]

(Swap Anim)
[SwapAnim5] -> [] again
[SwapAnim4] -> [SwapAnim5] again
[SwapAnim3] -> [SwapAnim4] again
[SwapAnim2] -> [SwapAnim3] again
[SwapAnim1] -> [SwapAnim2] again

(Cast Paste)

up [UpMan CastPaste | no BlackBackground] -> [UpMan | PasteTarget]
down [DownMan CastPaste | no BlackBackground] -> [DownMan | PasteTarget]
left [LeftMan CastPaste | no BlackBackground] -> [LeftMan | PasteTarget]
right [RightMan CastPaste | no BlackBackground] -> [RightMan | PasteTarget]

[Man CastPaste] -> cancel

[PasteTarget Copyable] [MagicEnd] -> [PasteTarget] [MagicEnd Copyable]
[PasteTarget] [Selected Copyable] -> [PasteTarget Copyable] [Selected]
[MagicEnd Copyable] [Selected] -> [MagicEnd] [Selected Copyable]
[PasteTarget] [Selected] [DidNotMove] -> [SwapAnim1] [SwapAnim1] [] again

(Handle picking up magic and magic bar)
late [Player Collectable] -> [Player]
late [Player Magic] [MagicEnd no MagicBar] -> [Player] [MagicEnd MagicBar]
late up [Player Magic] [MagicBar | no MagicBar] -> [Player] [MagicBar | MagicBar]

(Handle holding Keys)

late [Player no KeyMan] [KeyMan] -> [Player KeyMan] []

late [Player Key1] -> [Player Key1Man]
late [Player Key2] -> [Player Key2Man]
late [Player Key3] -> [Player Key3Man]

(Trapdoor)
late [TrapDoor DidNotMove no Player] -> [HoleNormal DidNotMove]
late [Blackbackground Selected] -> [BlackBackground]

(Target)
late [Collectable] [Target] -> [Collectable] [TargetTest]
late [Target] -> [TargetOn]
late [TargetTest] -> [Target]

(clean up)
late [DidNotMove] -> []

(Pretty Doors)
late [Door1 Player] -> [Door1Down Player]
late [Door2 Player] -> [Door2Down Player]
late [Door3 Player] -> [Door3Down Player]

late [Door1Down no Player] -> [Door1]
late [Door2Down no Player] -> [Door2]
late [Door3Down no Player] -> [Door3]

(Pretty Walls)
late Down [ WallNormal | no Wall ] -> [ WallBottom | ]
late Down [ WallBottom | Wall ] -> [ WallNormal | Wall ]

(PrettyHoles)

late Up [ HoleNormal | no Hole ] -> [ HoleTop | ]
late Up [ HoleTop | Hole ] -> [ HoleNormal | Hole ]

(Teleport Anim)
late [TeleportMan3] -> [TeleportBeamBottom] again
late [TeleportBeamBottom] -> [TempAnim] again
late up [TempAnim | TeleportBeam] -> [ | TeleportBeamBottom] again
late up [TeleportBeamBottom | ] -> [TeleportBeamBottom | TeleportBeam] again
late up [TeleportBeam | ] -> [TeleportBeam | TeleportBeamTop] again

late [TeleportMan2] -> [TeleportMan3] again
late up [TeleportMan3|] -> [TeleportMan3 | TeleportBeam] again
late up [TeleportBeam|] -> [TeleportBeam| TeleportBeamTop] again

late [TeleportMan] -> [TeleportMan2] again
late up [TeleportMan2|] -> [Teleportman2|TeleportBeamTop] again

late [Player KeyMan TargetOn] -> [ TeleportMan TargetOn] again

late [TempAnim] -> []

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

No Player
No TeleportAnim

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

#######bbbbbb
#####*#bbbbbb
#####.#bbbbbb
#####f#bbbtbb
#*#q#m#bbbxbb
#fz.spmazw#bb
#..f#m#bbbbbb
#####f#bbbbbb
#####*#bbbbbb
#####09bbbbeb