Bird's-eye view of a PuzzleScript file

A puzzlescript file is divided into 8 sections:

Objects

Here's where your in-game objects are all declared. The simplest way is to give something a name and a color:

Player
Blue
If you do this, the player will be a blue square.

You can specify a sprite as a 5x5 grid as follows:

Player 
PINK YELLOW BLACK    
.222.
.000.
22122
.222.
.2.2.

Which gives you this wee fella:

The dots represent transparency, and the numbers 0..9 index the colours in the second line.

I'm getting slightly ahead of myself here, but I should mention the following convenience: instead of doing it in the legend section, you can specify a character that you can use to refer to the object when level editing just by putting it after its real name:

Player P
PINK WHITE BLACK    
.222.
.000.
22122
.222.
.2.2.

The available colour names are:

You can use hex-codes instead of these names, if you prefer:

Player 
#FF5555 #FFFFFF #000000    
.222.
.000.
22122
.222.
.2.2.

New in PS+

For starters, you can now use transparent colors when defining a hex color (like #ff000088).

But you can also clone entire sprites between objects. If you're making a game with a lot of very similar sprites, this technique will help you to avoid sprite data duplication. Say we have two walls, Wall and AltWall. In classic Puzzlescript, you'd define them like this in the OBJECTS section:
Wall #
BROWN DARKBROWN
00010
11111
01000
11111
00010

AltWall $
BLUE DARKBLUE
00010
11111
01000
11111
00010
However, since both have the same sprite matrix, you can also define the second object like this in Puzzlescript Plus:
AltWall $ copy:Wall
BLUE DARKBLUE
This copies the sprite from Wall to AltWall using the copy:, and then applies the new palette. (You must still specify the colors, even if they would stay the same.) There are some limitations with this system, but most of those should throw an error if run into them.

You can use this in some hacky ways which are especially handy if you have a large sprite_size. For example, imagine these wall corners that we want to autogenerate between walls. Of course, we could create four sprites with the corner rotating 90 degrees in each, but with some trickery, we could also do:
EdgeTopLeft
black transparent transparent transparent
00.11
0...1
.....
2...3
22.33

EdgeTopRight copy:EdgeTopLeft
transparent black transparent transparent

EdgeBottomLeft copy:EdgeTopLeft
transparent transparent black transparent

EdgeBottomRight copy:EdgeTopLeft
transparent transparent transparent black    
By applying transparent tactically, we can essentially wrap four non-overlapping sprites into one.