Audition went awesome

.
Downloading now...
And I don't think it was the Mac operating system itself that was the problem, I think it was the two browsers on said Mac (namely Safari and an ancient version of IE).
So the actual programming of your game is finished (in theory, though there'll probably be some bug(s) that I didn't catch). All that's missing now is level data. I'm currently programming a level editor in Liberty BASIC, but I thought I'd give you the program so that you can make the levels yourself in a hex editor if you want to.
The file "levelset.dat" contains only the names of each of the 20 levelsets (for each name there is one byte indicating the number of chars in the name, and then the chars themselves). Currently the first level set is called "Tutorial" and the other 19 are unnamed (i.e. their names are all 0 chars long).
Then, in the "data\levels" folder is the actual level data. Each level has one file associated with it. The files are named by the name of the level set followed by the number of the level (within that level set) separated by a space. So the first level would be "Tutorial 1" the second would be "Tutorial 2" and so on. The program automatically detects when there are no more files in the levelset, so no need to worry about that.
The format of the level files is as follows:
First byte: width of level, in tiles (1 tile is 16 pixels).
Second byte: height of level, in tiles.
Third/Fourth bytes: coordinates of player starting position (in tiles, not pixels; (0,0) is the upper-left corner).
One byte for each tile in the grid (starting at (0,0) going across, then down)
A value of 0 to 84 (0x00 to 0x54) represents a dark square.
85 to 169 (0x55 to 0xA9) represents a light square.
170 to 254 (0xAA to 0xFE) represents a switch.
255 (0xFF) represents an exit square.
The mod 85 value of any tile other than an exit tile is its "tag". When you flip a switch, all tiles with the same tag as the switch are changed, which ones with different tags are unaffected.
One byte indicating the number of NPCs
For each NPC:
Two bytes indicating the coordinates of the NPC (in tiles, not pixels).
One byte containing both the NPC's type and its fine coordinates. The two most significant bits are the fine x coordinate, the two next most significant bits are the fine y coordinate, and the four least significant bits are the NPC's type. One unit in fine coordinates represents one fourth of a tile (4 pixels) so (0,0) would be the upper left corner of the tile, and (2,2) would be the center of the tile.
NPC types are:
0-3: Arrow (0=left, 1=right, 2=up, 3=down)
4-7: Enemy (4 different starting directions)
8: Text
9: Gold
10-15 are reserved for future use (currently they will all show up as gold)
For text, the coordinates are of the lower-left corner of the text. For all others, the coordinates are of the center.
For gold and arrows, these three bytes are all the information for the NPC. For text and enemies, however, more data follows.
For text: one byte indicating the number of chars in the text, followed by the chars themselves.
For enemies: one byte indicating how many pixels they will travel before the first time they change direction, and another indicating how many pixels before changing direction on all subsequent times.